ZHCUAQ1F july 2015 – april 2023
在浮点架构上执行浮点运算时,或者执行饱和运算时,可能会设置某些控制寄存器中的状态位。特别是,可以在 FADCR、FAUCR、FMCR、CSR 和 SSR 寄存器(以下称为“状态位控制寄存器”)中设置状态位。通过写入或读取这些寄存器,可以从 C/C++ 代码中设置和清除这些位,如Example8-1 中所示。
在某些情况下,编译器可能会推测 指令。推理是一种优化技术,在该技术中,编译器会使指令执行的时间早于通常预期的时间,以提高性能。当编译器检测到函数中使用了可能写入状态位控制寄存器的指令,但外部嵌套函数(包括内联)中并没有读取相关控制寄存器时,编译器会假定可以自由推测指令。
如果程序使用可能写入状态位控制寄存器的指令,然后在函数的后面读取相关的控制寄存器(而不是在设置状态位控制寄存器的函数中),则可以使用 --assume_control_regs_read 选项来防止编译器推测可能会在状态位控制寄存器中设置状态位的指令。
如果中断服务例程修改了(或者可能修改)状态位控制寄存器中的任何位,则应写入中断服务例程以保存和恢复该浮点控制寄存器。