-- Inline.mesa (last edited by: Levin on August 24, 1982 4:26 pm) DIRECTORY Environment USING [Comparison, LongNumber], Mopcodes USING [ zAND, zBLT, zBLTL, zDCOMP, zDUCOMP, zDIV, zINC, zLDIV, zLIN1, zMUL, zOR, zPUSH, zSHIFT, zXOR]; Inline: DEFINITIONS = BEGIN OPEN Mopcodes; -- Everything in this interface except COPY, LongCOPY, and PUSH is SAFE. LongCARDINAL: TYPE = LONG CARDINAL; LongNumber: TYPE = Environment.LongNumber; COPY: PROC [from: POINTER, nwords: CARDINAL, to: POINTER] = MACHINE CODE {zBLT}; LongCOPY: PROC [from: LONG POINTER, nwords: CARDINAL, to: LONG POINTER] = MACHINE CODE {zBLTL}; DIVMOD: SAFE PROC [num, den: CARDINAL] RETURNS [quotient, remainder: CARDINAL] = TRUSTED MACHINE CODE {zDIV; zPUSH}; PUSH: PROC RETURNS [WORD] = MACHINE CODE {zPUSH}; LDIVMOD: SAFE PROC [numlow: WORD, numhigh: CARDINAL, den: CARDINAL] RETURNS [quotient, remainder: CARDINAL] = TRUSTED MACHINE CODE {zLDIV; zPUSH}; LongMult: SAFE PROC [CARDINAL, CARDINAL] RETURNS [product: LONG CARDINAL] = TRUSTED MACHINE CODE {zMUL; zPUSH}; LongDiv: SAFE PROC [num: LONG CARDINAL, den: CARDINAL] RETURNS [CARDINAL] = TRUSTED MACHINE CODE {zLDIV}; LongDivMod: SAFE PROC [num: LONG CARDINAL, den: CARDINAL] RETURNS [quotient, remainder: CARDINAL] = TRUSTED MACHINE CODE {zLDIV; zPUSH}; BitOp: TYPE = SAFE PROC [UNSPECIFIED, UNSPECIFIED] RETURNS [UNSPECIFIED]; BITAND: BitOp = TRUSTED MACHINE CODE {zAND}; BITOR: BitOp = TRUSTED MACHINE CODE {zOR}; BITXOR: BitOp = TRUSTED MACHINE CODE {zXOR}; BITNOT: SAFE PROC [UNSPECIFIED] RETURNS [UNSPECIFIED] = TRUSTED MACHINE CODE {zLIN1; zXOR}; BITSHIFT: SAFE PROC [value: UNSPECIFIED, count: INTEGER] RETURNS [UNSPECIFIED] = TRUSTED MACHINE CODE {zSHIFT}; LowHalf: SAFE PROC [u: LONG UNSPECIFIED] RETURNS [UNSPECIFIED] = TRUSTED INLINE {RETURN[LOOPHOLE[u, LongNumber].lowbits]}; HighHalf: SAFE PROC [u: LONG UNSPECIFIED] RETURNS [UNSPECIFIED] = TRUSTED INLINE {RETURN[LOOPHOLE[u, LongNumber].highbits]}; BytePair: TYPE = MACHINE DEPENDENT RECORD [high, low: [0..377B]]; LowByte: SAFE PROC [u: UNSPECIFIED] RETURNS [UNSPECIFIED] = TRUSTED INLINE {RETURN[LOOPHOLE[u, BytePair].low]}; HighByte: SAFE PROC [u: UNSPECIFIED] RETURNS [UNSPECIFIED] = TRUSTED INLINE {RETURN[LOOPHOLE[u, BytePair].high]}; Comparison: TYPE = Environment.Comparison; CompareLC, CompareCard: SAFE PROC [a, b: LONG CARDINAL] RETURNS [Comparison] = TRUSTED MACHINE CODE {zDUCOMP; zINC}; CompareINT: SAFE PROC [a, b: INT] RETURNS [Comparison] = TRUSTED MACHINE CODE {zDCOMP; zINC}; END. LOG Time: May 22, 1979 4:47 PM By: Lauer Action: Created file by renaming Mesa>System>InlineDefs.mesa Time: June 7, 1979 5:46 PM By: McJones Action: Fixed shift count in HighByte Time: January 25, 1980 4:01 PM By: Forrest Action: Equated Long number to Env.longNumber Time: January 27, 1981 5:33 PM By: Johnsson Action: Made High/LowMumble be INLINE instead of MACHINE CODE. Time: August 24, 1982 4:26 pm By: Levin Action: Make appropriate things SAFE. Add CompareLC and CompareINT.