Open liquidaty opened 2 years ago
_mm_alignr_epi8()
would map to wasm_i8x16_shuffle()
.
If for some reason you need a dynamic variable shift by bytes then that can be emulated using wasm_i8x16_swizzle()
.
at the least v8/turbofan should lower a wasm_i8x16_shuffle
in this instance to 1 instruction on both SSSE3 and NEON: https://github.com/zeux/wasm-simd/blob/master/Shuffles.md#concats
However, I'm having trouble getting the disassembly to prove this...
@aqrit If you use emscripten to compile the tests (perhaps by using the SIMDe development container) then you can run wasm2wat tests/x86/ssse3-native-c.wasm
to get an assembly dump. It can be interesting to compare that to the non-native version at tests/x86/ssse3-emul-c.wasm
. If you have diffoscope installed, then you can make the diff in one command: diffoscope tests/x86/ssse3-{emul,native}-c.wasm
.
Note for using the docker container: To make it easier to examine the artifacts, use the PERSISTENT_BUILD_DIR
option so you can inspect the build directory on your host system.
Hi,
Could anyone help me to construct a wasm fallback for _mm_alignr_epi8() (using emscripten)?
I see from https://emscripten.org/docs/porting/simd.html that it can be "emulated with a SIMD or+two shifts". However, not being particularly versed in SIMD operations, I'm not sure how to translate this into actual code.
Any suggestions as to how to exactly emulate _mm_alignr_epi8() in wasm?