【发布时间】:2019-06-05 15:12:33
【问题描述】:
我有一个广泛使用 SSE 内在函数的大型代码库,它是在 GCC 下开发的,仅适用于 x86_64 平台。堆栈上分配了很多__m128 和float[4],在x86_64 上使用GCC 编译时,它们总是对齐到16 字节。
我们正在测试 clang,它会在堆栈变量上未对齐的 SSE 加载和存储时崩溃。
看来我可以一一解决所有错误__attribute__ ((aligned(16)))
有没有办法强制 clang 将所有变量全局对齐到 16 个字节?我在文档中找不到任何内容。
【问题讨论】:
-
当 gcc 可以看到代码执行 SIMD 加载/存储到本地数组时,它会选择对齐目标数组。 (使您免于自己未指定对齐的错误)。此外,x86-64 SysV ABI 指定至少 16 字节的本地或全局数组以及所有 VLA 获得 16 字节对齐(3.1.2 聚合和联合),所以 IDK 为什么 clang 不这样做。可能不是针对 Linux / OS X,或者 LLVM 认为 ABI 超出了指定本地对齐的界限。
标签: c alignment clang sse simd