You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Rust内联x86汇编实现浮点数相加及编译出现多余movss指令疑问

冗余movss指令的来源

你看到的栈操作和成对的movss读写是Debug编译模式未开启优化导致的:

  • Rust默认编译的Debug版本为了支持调试,会为所有let绑定的变量分配栈空间,即使该变量完全可以直接存放在寄存器中
  • 你代码里的let x: f32;绑定了内联汇编的输出值,Debug模式下会先把xmm0里的计算结果写入栈上分配的4字节空间,再读回xmm0作为返回值,就产生了你看到的这两条多余指令
  • 你可以用rustc -O或者cargo build --release开启优化编译,生成的汇编会直接精简为:
example::my_add:
        addss   xmm0, xmm1
        ret

f64适配问题

你已经找到了问题的核心:x86 SIMD指令中单精度和双精度的标量运算指令是分开的:

  • addss对应32位单精度浮点数(f32)的标量加法
  • 处理64位双精度浮点数(f64)时替换为addsd指令即可正常工作,寄存器约束xmm_reg对f32和f64都适用

内容的提问来源于stack exchange,提问作者DontBreakAlex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 11:36:05