fp_trap 子例程

用途

查询或更改用户进程的方式,以允许浮点异常生成陷阱。

标准 C 库 (libc.a)

语法

#include <fptrap.h>

int fp_trap( flag)
int flag;

描述

fp_trap 子例程查询并更改用户进程的方式,以允许或不允许浮点异常捕获。 仅当进程正在以启用陷阱的方式执行时,才能生成浮点陷阱。

缺省状态是在 pipelined 方式下执行,而不是生成浮点陷阱。

注: fp_trap 例程仅更改该进程的执行状态。 要生成浮点陷阱,您还必须启用陷阱。 使用 fp_enablefp_enable_all 子例程来启用陷阱。

在调用 fp_trap (FP_TRP_SYNC) 例程之前,先前的浮点操作可以将浮点状态和控制寄存器 (FPSCR) 中的某些异常位设置为 True。 启用这些 Cexceptions 并调用 fp_trap (FP_TRP_SYNC) 例程并不会导致立即发生陷阱。 也就是说,这些陷阱的操作是边缘敏感的,而不是级别敏感的。

fp_trap 子例程不清除异常历史记录。 您可以使用下列任何子例程来查询此历史记录:

  • fp_any_xcp
  • fp_divbyzero
  • fp_iop_convert
  • fp_iop_infdinf
  • fp_iop_infmzr
  • fp_iop_infsinf
  • fp_iop_invcmp
  • fp_iop_snan
  • fp_iop_sqrt
  • fp_iop_vxsoft
  • fp_iop_zrdzr
  • fp_inexact
  • fp_invalid_op
  • fp_overflow
  • fp_underflow

参数

描述
标记 指定用户进程的查询或用户进程的方式更改:
FP_TRAP_OFF
将用户进程置于捕获-关闭方式,并返回进程的先前方式 ( FP_TRAP_SYNCFP_TRAP_IMP FP_TRAP_IMP_RECFP_TRAP_OFF)。
FP_TRAP_QUERY
返回该用户进程的当前方式。
FP_TRAP_SYNC
将用户进程置于精确捕获方式,并返回该进程的先前方式。
FP_TRAP_IMP
将用户进程置于不可恢复的不精确捕获方式,并返回先前的方式。
FP_TRAP_IMP_REC
将用户进程置于可恢复的不精确捕获方式并返回先前方式。
FP_TRAP_FASTMODE
将用户进程置于硬件平台上可用的最快捕获方式中。
注: 某些硬件型号不支持所有方式。 如果请求了不受支持的方式,那么 fp_trap 子例程将返回 FP_TRAP_UNIMPL

返回值

如果使用 FP_TRAP_OFFFP_TRAP_IMPFP_TRAP_IMP_RECFP_TRAP_SYNC 标志调用,那么 fp_trap 子例程将返回一个值,指示如果硬件支持请求的方式,那么哪个标志处于进程的先前方式。 如果硬件不支持请求的方式,那么 fp_trap 子例程返回 FP_TRAP_UNIMPL

如果使用 FP_TRAP_QUERY 标志进行调用,那么 fp_trap 子例程将返回一个值,指示进程的当前方式 ( FP_TRAP_OFFFP_TRAP_IMPFP_TRAP_IMP_RECFP_TRAP_SYNC 标志)。

如果使用 FP_TRAP_FASTMODE进行调用,那么 fp_trap 子例程将设置最快的可用方式并返回所选方式。

错误代码

如果使用无效参数调用 fp_trap 子例程,那么该子例程将返回 FP_TRAP_ERROR

如果请求的方式在硬件平台上不受支持,那么子例程将返回 FP_TRAP_UNIMPL