HP 3000 Manuals

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


MPE/iX Intrinsics Reference Manual

XARITRAP 

NM and CM callable (differences noted below).

Arms or disarms the user-written arithmetic trap handling procedure.

Syntax 
_______________________________________________
|                                             |
|               I*V  I32V    I32      I32     |
|     XARITRAP(mask,plabel,oldmask,oldplabel);|
_______________________________________________

            


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. Most compiler libraries doing floating-point operations result in an inexact trap if the IEEE inexact result trap is enabled. Therefore, enable the IEEE inexact result trap only if absolutely necessary.
Parameters mask (NM) 32-bit signed integer by value (required) (CM) 16-bit signed integer by value (required) Determines which trap conditions, if enabled, invoke the user-written software trap handler, and which do not. Value Meaning 1 Corresponding trap condition is armed 0 Corresponding trap condition is disarmed The bits and their associated arithmetic errors are: (NM) 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 Table 4-29. (cont.) Bits Value/Meaning 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 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:6 Reserved for the operating system 0:1 Assertion trap (CM) Bits Value/Meaning 15:1 3000 mode floating-point divide by zero 14:1 Integer divide by zero 13:1 3000 mode floating-point underflow 12:1 3000 mode floating-point overflow 11:1 Integer overflow 10:1 3000 mode double-precision overflow 9:1 3000 mode double-precision underflow 8:1 3000 mode double-precision divide by zero 7:1 Decimal overflow 6:1 Invalid ASCII digit 5:1 Invalid decimal digit 4:2 Reserved for the operating system 2:1 Decimal divide by zero
NOTE The following apply to the preceding trap conditions represented in the mask: * NM supports IEEE and 3000 mode formats. Both execute in NM, but 3000 mode performs Hewlett-Packard 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 here 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 XARITRAP. * Some instructions that raise conditional traps are reserved to indicate the above trap conditions. A nonreserved instruction is one not generated by a compiler. If a nonreserved instruction causes a conditional trap, it is reported as an unimplemented condition trap. Only assembly language programmers can generate such a trap.
plabel (NM) 32-bit signed integer by value (required) (CM) 16-bit signed integer by value (required) Passes the address of the trap handling procedure. If the value is 0, the user-written arithmetic trap handler is disabled. oldmask (NM) 32-bit signed integer by reference (required) (CM) 16-bit signed integer by reference (required) Returns the value of the previous mask. oldplabel (NM) 32-bit signed integer by reference (required) (CM) 16-bit signed integer by reference (required) Returns the plabel of the process's previous arithmetic trap handler. If no plabel was previously configured, 0 is returned. Operation Notes This trap can be armed for any combination of events; at any given time, there is only one user-written trap handler for all armed 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 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 is executed, control is passed to the RECOVER block by doing an ESCAPE. * If a Pascal XL TRY statement is 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. Condition Codes CCE (2) Request granted. The desired traps are now armed. CCG (0) Request granted. All traps are now disarmed. CCL (1) Not returned. Related Information Intrinsics None Commands None Manuals Trap Handling Programmer's Guide (32650-90026)


MPE/iX 5.0 Documentation