有效的浮点控制和查询过程

IBM® Open XL Fortran 提供了若干过程,允许您直接查询和控制处理器的浮点状态和控制寄存器。 这些过程比 fpgets 和 fpsets 子例程更高效,因为它们映射到直接处理浮点状态和控制寄存器 (fpscr) 的内联机器指令中。

IBM Open XL Fortran 提供了模块 xlf_fp_util,其中包含这些过程的接口和数据类型定义以及这些过程所需的指定常量的定义。 此模块允许在编译时而不是在链接时对这些过程进行类型检查。 在调用过程时,可以使用示例中列出的自变量名称作为关键字自变量的名称。 为 xlf_fp_util 模块提供了以下文件:
文件名 文件类型 位置
xlf_fp_util.mod 模块符号文件
  • /opt/IBM/openxlf/17.1.1/include
  • /opt/IBM/openxlf/17.1.1/include_d7
注: 这些目录中的文件是彼此的精确副本。
要使用这些过程,必须向源文件添加 USE XLF_FP_UTIL 语句。 有关 USE的更多信息,请参阅 USE
如果存在名称冲突 (例如,如果访问子程序具有与模块实体同名的实体) ,请使用 ONLY 子句或 USE 语句的重命名功能。 例如
USE XLF_FP_UTIL, NULL1 => get_fpscr, NULL2 => set_fpscr

使用 -qmixed 选项进行编译时,必须以全小写形式对这些过程的名称进行编码。 我们将在此处以小写形式显示名称作为提示。

下表列出了用于 fpscr 过程的常量:

系列 常量 描述
IEEE 舍入方式 FP_RND_RN 向最接近的方向舍入 (缺省值)
FP_RND_RZ 向零舍入
FP_RND_RP 向加无穷大舍入
FP_RND_RM 向负无穷大舍入
FP_RND_MODE 用于从 FPSCR 标志变量或值获取舍入方式
IEEE 异常启用标志 1 TRP_INEXACT 启用不精确陷阱
TRP_DIV_BY_ZERO 启用除零陷阱
TRP_UNDERFLOW 启用下流陷阱
TRP_OVERFLOW 启用溢出陷阱
TRP_INVALID 启用无效陷阱
FP_ENBL_SUMM 陷阱启用摘要或全部启用
IEEE 异常状态标志 Fp_无效 操作异常无效
FP_OVERFLOW 溢出异常
Fp_underflow 下流异常
FP_DIV_BY_ZERO "除以零" 异常
FP_INEXACT 不精确异常
FP_ALL_IEEE_XCP 所有 IEEE 异常摘要标志
FP_COMMON_IEEE_XCP 除 FP_INEXACT 异常以外的所有 IEEE 异常摘要标志
特定于机器的异常详细信息标志 FP_INV_SNAN 发信号 NaN
FP_INV_ISI 英菲尼迪-英菲尼迪
FP_INV_IDI 英菲尼迪/英菲尼迪
FP_INV_ZDZ 0 / 0
FP_INV_IMZ 无限 * 0
FP_INV_CMP 无序比较
FP_INV_SQRT 负数的平方根
FP_INV_CVI 转换为整数错误
FP_INV_VXSOFT 软件请求
特定于机器的异常摘要标志 FP_ANY_XCP 任何异常摘要标志
FP_ALL_XCP 所有异常摘要标志
FP_COMMON_XCP 所有异常摘要标志 (不包括 FP_INEXACT 异常)
备注信息:
  • 1 为了启用异常捕获,必须设置期望的 IEEE 异常启用标志和
    • 使用相应的 –qflttrap 子选项编译程序。 有关 -qflttrap 编译器选项及其子选项的更多信息,请参阅 IBM Open XL Fortran Compiler Reference