Correct rationale in simd_x86_64.S comment
CI / release (arm64, , ubuntu-latest-arm64) (pull_request) Successful in 2m14s
CI / pre-commit (pull_request) Successful in 1m59s
CI / test (-DCMAKE_BUILD_TYPE=Debug -DMSAN_TOOLCHAIN_PATH=/opt/msan, debug) (pull_request) Successful in 3m47s
CI / test (-DCMAKE_CXX_FLAGS=-DUSE_64_BIT=1, 64-bit-versions) (pull_request) Successful in 3m14s
CI / test (-DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++, gcc) (pull_request) Successful in 3m13s
CI / test (-DUSE_SIMD_FALLBACK=ON, simd-fallback) (pull_request) Successful in 3m17s
CI / release (amd64, -DMSAN_TOOLCHAIN_PATH=/opt/msan, ubuntu-latest-amd64) (pull_request) Successful in 5m27s
CI / coverage (pull_request) Successful in 3m42s
CI / release (arm64, , ubuntu-latest-arm64) (pull_request) Successful in 2m14s
CI / pre-commit (pull_request) Successful in 1m59s
CI / test (-DCMAKE_BUILD_TYPE=Debug -DMSAN_TOOLCHAIN_PATH=/opt/msan, debug) (pull_request) Successful in 3m47s
CI / test (-DCMAKE_CXX_FLAGS=-DUSE_64_BIT=1, 64-bit-versions) (pull_request) Successful in 3m14s
CI / test (-DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++, gcc) (pull_request) Successful in 3m13s
CI / test (-DUSE_SIMD_FALLBACK=ON, simd-fallback) (pull_request) Successful in 3m17s
CI / release (amd64, -DMSAN_TOOLCHAIN_PATH=/opt/msan, ubuntu-latest-amd64) (pull_request) Successful in 5m27s
CI / coverage (pull_request) Successful in 3m42s
The SIMD operations are written in assembly because loading and operating on indeterminate values is UB in C++ but well-defined in assembly. msan not tracking the loads is a side effect, not the reason. Closes #71
This commit is contained in:
+4
-3
@@ -1,7 +1,8 @@
|
|||||||
// SIMD operations on potentially-indeterminate Node16::index[16] bytes.
|
// SIMD operations on potentially-indeterminate Node16::index[16] bytes.
|
||||||
// Written in assembly so msan doesn't track the loads. The caller is
|
// Written in assembly because loading and operating on indeterminate values
|
||||||
// responsible for masking the returned bitfield to [0, numChildren) before
|
// is UB in C++ but well-defined in assembly. (A side effect is that msan
|
||||||
// using it.
|
// doesn't track the loads.) The caller is responsible for masking the
|
||||||
|
// returned bitfield to [0, numChildren) before using it.
|
||||||
//
|
//
|
||||||
// All functions return a 16-bit bitmask in %eax (bit i set = condition true
|
// All functions return a 16-bit bitmask in %eax (bit i set = condition true
|
||||||
// at index i). The upper 16 bits of %eax are zero.
|
// at index i). The upper 16 bits of %eax are zero.
|
||||||
|
|||||||
Reference in New Issue
Block a user