GCC 对 XMM 寄存器的支持严重损坏?
每当我检查 GCC 生成的汇编代码中使用 __m128i 类型的代码时,我都会看到看起来像是一场灾难。有大量的冗余指令没有任何作用。
然而,作为一名汇编程序员,我宁愿使用 asm{},但 GCC 阻止我在 asm {} 中使用 XMM 寄存器。
有什么技巧可以让 GCC 使用 XMM 还是我需要等待未来的版本? 我有4.3.4。
Whenever I examine the assembly code produced by GCC for code that uses the __m128i type, I see what looks like a catastrophe. There's tons of redundant instructions that serve no purpose.
And yet, as an assembly programmer I'd rather use asm{} but GCC prevents me from using XMM registers in asm {}.
Is there some trick to getting GCC to use XMM or do I need to wait for a future release?
I've got 4.3.4.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您是否在启用优化的情况下进行编译,例如 -O3 ?如果是这样,那么 gcc 通常会从内在函数生成相当不错的 SSE 代码。大多数内在函数恰好映射到一条 SSE 指令。您能举一个您认为效率特别低的例子吗?
另外,我不确定你的意思是“GCC 阻止我在 asm {} 中使用 XMM 寄存器”——同样,如果你提供一个具体的示例,那么也许有一个简单的解决方案。
Are you compiling with optimisation enabled, e.g. -O3 ? If so then gcc usually generates pretty decent SSE code from intrinsics. Most intrinsics map to exactly one SSE instruction. Can you give an example that you consider to be particularly inefficient ?
Also, I'm not sure what you mean about "GCC prevents me from using XMM registers in asm {}" - again, if you provide a specific example then perhaps there's an easy solution.