-- file IeeeFloat.Mesa -- Last modified by Satterthwaite, April 21, 1980 4:16 PM -- Last modified by Bruce, July 7, 1980 5:37 PM -- adaptation of Real.Mesa for compiler and Ieee.mesa for debugger use DIRECTORY Inline USING [BITAND, LongNumber]; Real: DEFINITIONS IMPORTS Inline = BEGIN -- modes NumberType: TYPE = {normal, zero, infinity, nan}; RoundingMode: TYPE = {rn, rz, rm, rp}; -- rn: Round to nearest (unbiased) -- rz: Round to zero (truncate) -- rp: Round to plus infinity (round up) -- rm: Round to minus infinity (round down) -- Constants PlusZero: REAL = LOOPHOLE[LONG[00000000000B]]; MinusZero: REAL = LOOPHOLE[20000000000B]; PlusInfinity: REAL = LOOPHOLE[17740000000B]; MinusInfinity: REAL = LOOPHOLE[37740000000B]; NonTrappingNaN: LONG CARDINAL = 1; -- Exceptions Flag: TYPE = BOOLEAN _ FALSE; Exception: TYPE = {fixOverflow, inexactResult, invalidOperation, divisionByZero, overflow, underflow}; ExceptionFlags: TYPE = PACKED ARRAY Exception OF Flag; NoExceptions: ExceptionFlags = ALL[FALSE]; -- Operations FloatingPointException: SIGNAL [flags: ExceptionFlags]; Abs: PROCEDURE [a: REAL] RETURNS [REAL]; Negate: PROCEDURE [a: REAL] RETURNS [REAL]; PairToReal: PROCEDURE [fr: LONG INTEGER, exp10: INTEGER] RETURNS [REAL]; -- from Ieee.mesa for debugger output routines Details: TYPE = MACHINE DEPENDENT RECORD [ sign: BOOLEAN, sticky: BOOLEAN, blank: [0..7777B], type: NumberType]; Ext: TYPE = RECORD [ det: Details, exp: INTEGER, frac: Inline.LongNumber]; DenormalizedExponent: INTEGER = -127; ExponentBias: INTEGER = 127; ExponentMask: INTEGER = 077600B; ExponentShift: INTEGER = 7; ExpSingleMin: INTEGER = -126; HalfLC: LONG CARDINAL = LOOPHOLE[20000000000B]; HiBit: CARDINAL = 100000B; HiddenBit: CARDINAL = 100000B; HiFractionMask: INTEGER = 177B; NaNExponent: INTEGER = 128; LN: PROCEDURE [r: LONG UNSPECIFIED] RETURNS [Inline.LongNumber] = INLINE { RETURN[LOOPHOLE[r, Inline.LongNumber]]}; BitOn: PROCEDURE [a, b: UNSPECIFIED] RETURNS [BOOLEAN] = INLINE { RETURN[Inline.BITAND[a, b]#0]}; Normalized: PROCEDURE [g: INTEGER] RETURNS [BOOLEAN] = INLINE { RETURN [Inline.BITAND[g, HiddenBit]#0]}; ADC3: PROCEDURE [a, b, c: CARDINAL] RETURNS [CARDINAL, CARDINAL] = INLINE { s: Inline.LongNumber; s.lc _ LONG[a]+LONG[b]+LONG[c]; RETURN[s.highbits, s.lowbits]}; END.