4.2.2. __fp_status()

以前版本的 ARM 库实现了一个名为 __fp_status 的函数,用于在浮点环境中处理状态字。 它与 __ieee_status 相同,但使用的是旧式状态字布局。 ARM 编译器仍然支持 __fp_status 函数以保持向后兼容。__fp_status 是在 stdlib.h 中定义的。

__fp_status 具有以下原型:

unsigned int __fp_status(unsigned int mask, unsigned int flags);

Figure 4.2 中给出了 __fp_status 所显示的状态字布局。

Figure 4.2. 浮点状态字布局

浮点状态字布局

Figure 4.2 中的字段如下所示:

无法使用 __fp_status 调用更改舍入模式。

除了定义 __fp_status 调用本身之外,stdlib.h 还定义了一些用于参数的常数:


#define __fpsr_IXE  0x100000

#define __fpsr_UFE  0x80000

#define __fpsr_OFE  0x40000

#define __fpsr_DZE  0x20000

#define __fpsr_IOE  0x10000

#define __fpsr_IXC  0x10

#define __fpsr_UFC  0x8

#define __fpsr_OFC  0x4

#define __fpsr_DZC  0x2

#define __fpsr_IOC  0x1

例如,要捕获“无效运算”异常而不捕获所有其他异常,应执行以下命令:


__fp_status(_fpsr_IXE | _fpsr_UFE | _fpsr_OFE |

            _fpsr_DZE | _fpsr_IOE, _fpsr_IOE);

要不捕获“不精确结果”异常,应执行以下命令:


__fp_status(_fpsr_IXE, 0);

要清除“下溢”粘性标记,应执行以下命令:


__fp_status(_fpsr_UFC, 0);

Copyright © 2007 ARM Limited. All rights reserved. ARM DUI 0349AC
Non-Confidential