第71部分- Linux x86 64位汇编 FPU之等待和非等待指令
浮点指令可能生成6种浮点异常。表明运算过程中出现了某些错误,例如零为除数。
大多出浮点指令在执行之前必须等待以便确保前面的指令没有跑出异常。如果出现异常,在执行下一条指令之前必须先处理异常。
还有一种方式,不等待浮点异常的检查,允许程序保存或者复位当前的FPU状态,不处理悬而未决的异常。
FPU之优化浮点运算
如何优化浮点代码:
- 确保浮点值不会上溢和下溢
- 精度控制设置为单精度
- 使用查找表实现三角函数
- 断开依赖链,例如不计算Z=A+b+c+d,而是计算x=a+b,y=c+d
- 在FPU寄存器中尽可能多保留方程式的值
- 尽可能使用FCOMI,而不是FCOM。
- 涉及整数和浮点,将整数加载到FPU寄存器中,比对整数使用浮点指令要快。