WebAssembly中使用SIMD时为什么出现类型不匹配错误?
我在用WebAssembly的SIMD模块优化图像处理时,调用v128.load加载像素数据,结果报错说参数类型不匹配。
具体场景是这样的:用Emscripten编译C++代码时启用了SIMD选项,想用128位向量操作替换循环。但运行时控制台显示:WebAssembly.CompileError: Cannot convert number to value type v128。我已经按照文档导入了’simd’模块:
// 在Wasm初始化时添加了
WebAssembly.instantiateStreaming(source, {
'spectre': { 'import': function() { return 0; } },
'simd': {}
});
尝试过用Float32x4包装数据,但调用v128.store时依然报同样的错。编译命令是emcc -msimd128 -s USE_SSE=1 ...,在Chrome 120的开发者工具里也确认了实验性标志Experimental WebAssembly SIMD已启用。这问题到底出在哪里呢?
调用时传指针就行,别直接操作v128。编译命令你已经对了,保持emcc -msimd128就好。