Dav*_*aux 10 linux x86 gcc sse
当运行使用gcc-4.8.1编译的代码时,我在x86(32位)平台上发生了一个神秘的总线错误-march=pentium4.我将问题追溯到SSE指令:
movdqa %xmm5,0x50(%esp)
Run Code Online (Sandbox Code Playgroud)
esp = 0xbfffedac.movdqa要求地址为16字节对齐,这不是这种情况,因此总线错误.
如果使用-march=native(这是Core-i3处理器)进行编译,则不会出现此问题.
据我所知,Linux/x86上唯一保证的堆栈对齐是4字节.因此,movdqa即使存在movdqu可能未对齐访问的指令,代码生成器应该选择使用而不进行某种对齐检查似乎很奇怪.
所以,这看起来像gcc中有一个bug.
我不是SSE和x86 ABI的专家,在发送错误报告之前我会很感激.