HP 3000 Manuals

HPENBLTRAP [ MPE/iX Intrinsics Reference Manual ] MPE/iX 5.0 Documentation


MPE/iX Intrinsics Reference Manual

HPENBLTRAP 

NM callable only.

Selectively enables or disables arithmetic traps.

Syntax 
_____________________________________
|                                   |
|                I32V    I32        |
|     HPENBLTRAP(mask,oldmask);     |
_____________________________________

            

Parameters 

mask                  32-bit signed integer by value (required) 

                      Passes a value indicating which arithmetic traps
                      are enabled and which are not:
                         *   If a bit is on (=1), the corresponding trap
                             is enabled.
                         *   If a bit is off (=0), the corresponding trap
                             is disabled.

                      The bits and their associated arithmetic errors
                      are:

                         Bits     Value/Meaning 

                         31:1     3000 mode floating-point divide by zero

                         30:1     Integer divide by zero

                         29:1     3000 mode floating-point underflow

                         28:1     3000 mode floating-point overflow

                         27:1     Integer overflow

                         26:1     3000 mode double-precision overflow

                         25:1     3000 mode double-precision underflow

                         24:1     3000 mode double-precision divide by zero

                         23:1     Decimal overflow

                         22:1     Invalid ASCII digit

                         21:1     Invalid decimal digit

                         19:2     Reserved for the operating system

                         18:1     Decimal divide by zero

                         17:1     IEEE floating-point, inexact result

                         16:1     IEEE floating-point underflow

          Table 4-19.  (cont.) 

                         Bits     Value/Meaning 

                         15:1     IEEE floating-point overflow

                         14:1     IEEE floating-point divide by zero

                         13:1     IEEE floating-point, invalid operation

                         12:1     Range errors

                         11:1     Software-detected NIL pointer reference

                         10:1     Software-detected misaligned result of pointer
                                  arithmetic or error in conversion from long pointer to
                                  short pointer

                          9:1     Unimplemented condition traps

                          8:1     Paragraph stack overflow

                          7:1     3000 mode packed decimal error

                          1:7     Reserved for MPE/iX

                          0:1     Assertion trap


NOTE The following apply to various trap conditions represented in the mask parameter: * Native mode supports two floating-point formats: IEEE and 3000 mode. Both execute in native mode, but 3000 mode performs HP 3000 type manipulations. Since it is possible to use both formats during program execution, there are separate bits in the mask for enabling/disabling traps of these formats. * Some error conditions specified are not strictly arithmetic traps (for example, range errors, nil pointers, and paragraph stack overflow). However, many arithmetic traps are caught by reserved instructions that raise the conditional traps. For this reason, all are enabled/disabled by HPENBLTRAP. * Some of the instructions that raise conditional traps are reserved to indicate some of the above trap conditions. A nonreserved instruction is one not generated by a compiler. If a nonreserved instruction causes a conditional trap, this is reported as an unimplemented condition trap.
oldmask 32-bit signed integer by reference (required) Returns the value of the previous mask to the program. Operation Notes Allows selective enabling or disabling of arithmetic traps. It provides more flexibility than the ARITRAP intrinsic, which collectively enables or disables traps. There is a difference between arming and enabling traps: * Enabling a trap means that the occurrence of a trap condition is not ignored. * Arming a trap is required so that, on a trap condition, a user-written routine is invoked and can take appropriate recovery actions. The following list summarizes what can occur when an arithmetic trap condition arises: * If a trap is both enabled and armed, the user-written trap handler is invoked whenever a trap condition occurs. * If a trap is enabled but not armed, one of two situations applies: * If a Pascal/XL TRY statement has been executed, control is passed to the recover block by doing an escape. * If a Pascal/XL TRY statement has not been executed, an error message is output and the process aborts. * If a trap is disabled, irrespective of whether it is armed, the trap is ignored, and execution of the process continues without any interruption.
NOTE By default, all traps except IEEE floating-point exceptions are enabled, and the system trap handler is armed. Many floating-point operations result in an inexact result. Consequently, most compiler libraries doing floating-point operations result in an inexact trap if the IEEE inexact result trap is enabled.
Condition Codes CCE (2) Request granted. All traps were originally disabled. CCG (0) Request granted. At least one trap was originally enabled. CCL (1) Not returned. Related Information Intrinsics None Commands None Manuals Trap Handling Programmer's Guide (32650-90026)


MPE/iX 5.0 Documentation