Emscripten是否支持SIMD扩展?

3
我正在尝试在使用Emscripten编译的项目中使用_mm_comieq_ss,但似乎该函数不可用。我发现Emscripten提供了emmintrin.h/xmmintrin.h,看起来非常完整,但是一些函数缺失(例如_mm_comieq_ss),所以我想知道我的选择是什么?
我应该使用其他函数,还是SIMD扩展的Emscripten支持还不可用?
谢谢。

你为什么想要在Emscripten中使用SIMD扩展? - Marat Dukhan
我需要通过Emscripten移植一个不是我编写的库,该库使用了SIMD扩展。 - Erunehtar
你可以尝试使用来自clang分发的SIMD头文件。与gcc不同,clang头文件大多数采用可移植的SIMD符号实现。 - Marat Dukhan
1个回答

2
请看将目标定位于WebAssembly的移植SIMD代码的emscripten文档。撰写本文时,_mm_comieq_ss已被标量化(其使用将转换为非SIMD指令)。
如果您对该页面上支持某些指令而不支持其他指令感兴趣,它解释了Emscripten支持的内容与WASM SIMD提案相关。对于直接不在提案中的x86 SSE指令,有时会使用其他WASM SIMD指令的组合来模拟它们。
附带一条评论@PeterCordes
具有讽刺意味的是,_mm_comieq_ss已经是一个标量操作,读取两个向量的低浮点数,并产生整数FLAGS。(comiss指令,编译器用于比较两个标量浮点数,例如 if (x == y))。与cmpss不同的是,它在XMM向量寄存器的低元素中产生0或-1(所有位设置)的结果,而其他元素保持不变。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接