X86-SSE 标量浮点编程详解
1. 标量浮点算术运算
1.1 单精度浮点运算
x86 - SSE 标量单精度浮点算术指令仅修改目标 XMM 寄存器的低 32 位,高位不变。例如,使用 andps 指令时需注意它是打包指令,会修改目标操作数的高位。每个算术指令的结果使用 movss 指令保存到调用者提供的数组中。虽然 movss 操作数在内存中的正确对齐不是必需的,但为了性能考虑,建议进行对齐。
1.2 双精度浮点运算
x86 - SSE 标量双精度浮点算术指令在 SseSfpArithmeticDouble_ 函数中展示。该函数的逻辑结构与单精度版本类似。使用 XMM 寄存器中的标量双精度浮点值时,仅使用低 64 位,高位不变。同样,标量双精度浮点操作数在内存中的正确对齐不是必需的,但强烈建议进行对齐。
以下是单精度和双精度浮点运算的示例结果:
| 运算类型 | a | b | add | sub | mul | div | min | max | fabs(b) | sqrt(fabs(b)) |
| — | — | — | — | — | — | — | — | — | — | — |
| 单精度 | 2.500000 | -7.625000 | -5.125000 | 10.125000 | -19.062500 | -0.327869 | -7.625000 | 2.500000 | 7.625000 | 2.761340 |
| 双精度 | 3.14159265
超级会员免费看
订阅专栏 解锁全文
50

被折叠的 条评论
为什么被折叠?



