Museum

Home

Lab Overview

Retrotechnology Articles

⇒ Online Manual

Media Vault

Software Library

Restoration Projects

Artifacts Sought

INTRAPOFF(3M)  —  Series 500 Only

NAME

intrapoff, intrapon − disable/enable integer trap handler

SYNOPSIS

int intrapoff()

int intrapon()

HP-UX COMPATIBILITY

Level: HP-UX/NON-STANDARD

Origin: HP

Remarks: Intrapoff and intrapon are implemented on the Series 500 only. 

DESCRIPTION

The Series 500 architecture has a single trap handler for both integer overflow (an integer value greater than 2^31-1) and integer divide-by-zero.  By default, an operation which results in integer overflow or integer divide-by-zero invokes the integer trap handler.  Any integer divide-by-zero generates the signal SIGFPE.  As a side effect, any integer overflow also invokes the integer trap handler.  The trap handler recognizes integer overflow as a special case and simply returns to the calling routine.  A user sees no difference in results, but could see a severe performance degradation depending on how often the trap handler is invoked. 

Intrapoff disables this integer trap handler.  Integer overflow and integer divide-by-zero do not invoke the integer trap handler.  Instead, integer divide-by-zero returns a large integer (2^31-1).  Integer overflow operations simply overflow into the most significant bit.  There is no performance penalty since the trap handler is not entered. 

A program doing many integer overflows could see a significant performance improvement.  A user must take care however, since integer divide-by-zero does not give signal SIGFPE while the integer trap handler is disabled. 

Intrapon restores the default condition.  Integer divide-by-zero and integer overflow operations invoke the integer trap handler.  Integer divide-by-zero gives signal SIGFPE; integer overflow results in a performance penalty caused by entering and leaving the integer trap handler. 

When intrapoff is used, the integer trap handler is disabled at that procedural level and all levels below it.  It is not disabled for any procedural level above the procedure within which intrapoff was called.  For example,

a();
{
b();/∗ Call function b. ∗/
}

b();
{
intrapoff();
c();/∗ Call function c. ∗/
}

c();
{
/∗ Do some work. ∗/
}

The integer trap handler is disabled for functions b and c.  It is automatically re-enabled on exit from function b.  The integer trap handler can also be re-enabled at any time using intrapon.

EXAMPLES

The math library routine rand generates random integers using:

randx = randx ∗ (((1103515245L + 12345)>>16) & 0x7ffff)

where randx is an unsigned integer.  The value assigned to randx is often greater than 2^31-1.  To avoid the performance degradation of entering the integer trap handler each time this occurs, the integer trap can be turned off before the assignment using intrapoff.

Hewlett-Packard  —  last mod. May 11, 2021

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026