c - 模拟 XMM 内在函数时 WebAssembly 中的对齐检查?
问题描述
我正在尝试使用模拟 SSE 内在函数的选项将 PFFFT 库 ( https://bitbucket.org/jpommier/ ) 编译为 WebAssembly 。-msse
编译工作正常,但有一个对齐检查在运行时失败。
失败的对齐检查宏是:
# define VALIGNED(ptr) ((((long)(ptr)) & 0xF) == 0)
我在这里有点迷失了......有没有人暗示如何使用 WASM SIMD 执行对齐检查,或者是否有必要?
最好的,n
解决方案
我假设您正在编写 C 并编译为 WASM - 如果您还从 C 调用 PFFFT 库,我并不完全清楚。
在第 1622 + 1707 行读取PFFFT 代码,只有两个地方可能使您描述的宏失败(VALIGNED(ptr)
):
1608 void pffft_transform_internal(PFFFT_Setup *setup, const float *finput, float *foutput, v4sf *scratch,
1609 pffft_direction_t direction, int ordered) {
...
1622 assert(VALIGNED(finput) && VALIGNED(foutput));
^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^
1623
...
和
1677 void pffft_zconvolve_accumulate(PFFFT_Setup *s, const float *a, const float *b, float *ab, float scaling) {
...
1707 assert(VALIGNED(a) && VALIGNED(b) && VALIGNED(ab));
^^^^^^^^^^^ ^^^^^^^^^^^ ^^^^^^^^^^^^
...
所以“故障”可以放在调用者pffft_transform_internal(...)
和pffft_zconvolve_accumulate(...)
:)输入指针没有正确对齐。
如果您自己分配float
-arrays,您是自己使用aligned_alloc()
还是模拟它?(它又快又容易!:))
根据@Peter Cordes 的说法,您还可以考虑使用删除/禁用的宏进行测试。
推荐阅读
- eclipse - Eclipse 2020-03:验证 Maven 项目时出现 java.lang.StackOverflowError
- sails.js - 在 SailsJS 中允许负主键
- php - Wordpress 401 错误:rest_forbidden。抱歉,您不能发出代理 oEmbed 请求
- git - 如何使用我的 github 配置文件 SSH 密钥来修改我的所有存储库?
- python - 它什么也没给。有人可以帮我了解python中的字典、对象和类吗?
- python - Pyinstaller onefile 在其他计算机上不起作用
- flutter - 保存多种颜色数据
- javascript - 使用 Webex SDK 进行远程屏幕控制
- python - 数组中高于给定值的点的散点图
- php - 由于 composer.json 中的奇怪语法,Composer 无法安装:“package/package”:“other-package as x.xx.x”