DIRECTORY Basics USING [BITSHIFT, bitsPerWord, BytePair, DivMod, LongDiv, LongDivMod, LongMult, LongNumber], PrincOpsUtils USING [BITAND, BITNOT, BitOp, BITOR, BITSHIFT, BITXOR, Copy, LongCopy]; Inline: DEFINITIONS IMPORTS Basics, PrincOpsUtils = BEGIN LongCARDINAL: TYPE = LONG CARDINAL; LongNumber: TYPE = Basics.LongNumber; COPY: PROCEDURE [from: POINTER, nwords: CARDINAL, to: POINTER] = PrincOpsUtils.Copy; LongCOPY: PROCEDURE [from: LONG POINTER, nwords: CARDINAL, to: LONG POINTER] = PrincOpsUtils.LongCopy; LongCOPYReverse: PROCEDURE [from: LONG POINTER, nwords: CARDINAL, to: LONG POINTER] = INLINE {FOR i: CARDINAL DECREASING IN [0..nwords) DO (to+i)^ _ (from+i)^ ENDLOOP}; DIVMOD: PROCEDURE [num, den: CARDINAL] RETURNS [quotient, remainder: CARDINAL] = Basics.DivMod; LongMult: PROCEDURE [CARDINAL, CARDINAL] RETURNS [product: LONG CARDINAL] = Basics.LongMult; LongDiv: PROCEDURE [num: LONG CARDINAL, den: CARDINAL] RETURNS [CARDINAL] = Basics.LongDiv; LongDivMod: PROCEDURE [num: LONG CARDINAL, den: CARDINAL] RETURNS [quotient, remainder: CARDINAL] = Basics.LongDivMod; BitOp: TYPE = PROCEDURE [UNSPECIFIED, UNSPECIFIED] RETURNS [UNSPECIFIED]; BITAND: BitOp = PrincOpsUtils.BITAND; BITOR: BitOp = PrincOpsUtils.BITOR; BITXOR: BitOp = PrincOpsUtils.BITXOR; BITNOT: PROCEDURE [UNSPECIFIED] RETURNS [UNSPECIFIED] = PrincOpsUtils.BITNOT; BITSHIFT: PROCEDURE [value: UNSPECIFIED, count: INTEGER] RETURNS [UNSPECIFIED] = PrincOpsUtils.BITSHIFT; BITROTATE: PROCEDURE [value: UNSPECIFIED, count: INTEGER] RETURNS [UNSPECIFIED] = INLINE { count _ BITAND[count, Basics.bitsPerWord-1]; RETURN [Basics.BITSHIFT[value, count]+Basics.BITSHIFT[value, Basics.bitsPerWord-count]] }; LowHalf: PROCEDURE [u: LONG UNSPECIFIED] RETURNS [UNSPECIFIED] = INLINE BEGIN RETURN[LOOPHOLE[u, LongNumber].lowbits] END; HighHalf: PROCEDURE [u: LONG UNSPECIFIED] RETURNS [UNSPECIFIED] = INLINE BEGIN RETURN[LOOPHOLE[u, LongNumber].highbits] END; BytePair: TYPE = Basics.BytePair; LowByte: PROCEDURE [u: UNSPECIFIED] RETURNS [UNSPECIFIED] = INLINE BEGIN RETURN[LOOPHOLE[u, BytePair].low] END; HighByte: PROCEDURE [u: UNSPECIFIED] RETURNS [UNSPECIFIED] = INLINE BEGIN RETURN[LOOPHOLE[u, BytePair].high] END; UDDivMod: PROCEDURE [ num, den: LONG CARDINAL] RETURNS [quotient, remainder: LONG CARDINAL] = INLINE {quotient _ num/den; remainder _ num MOD den}; SDDivMod: PROCEDURE [ num, den: LONG INTEGER] RETURNS [quotient, remainder: LONG INTEGER] = INLINE {quotient _ num/den; remainder _ num MOD den}; DBitOp: TYPE = PROCEDURE [ a: LONG UNSPECIFIED, b: LONG UNSPECIFIED] RETURNS [LONG UNSPECIFIED]; Lng: PRIVATE PROCEDURE [lo, hi: UNSPECIFIED] RETURNS [LONG UNSPECIFIED] ~ MACHINE CODE {}; DBITAND: DBitOp = INLINE {RETURN [Lng[lo: BITAND[LowHalf[a], LowHalf[b]], hi: BITAND[HighHalf[a], HighHalf[b]]]]}; DBITOR: DBitOp = INLINE {RETURN [Lng[lo: BITOR[LowHalf[a], LowHalf[b]], hi: BITOR[HighHalf[a], HighHalf[b]]]]}; DBITXOR: DBitOp = INLINE {RETURN [Lng[lo: BITXOR[LowHalf[a], LowHalf[b]], hi: BITXOR[HighHalf[a], HighHalf[b]]]]}; DBITNOT: PROCEDURE [a: LONG UNSPECIFIED] RETURNS [LONG UNSPECIFIED] = INLINE {RETURN [Lng[lo: BITNOT[LowHalf[a]], hi: BITNOT[HighHalf[a]]]]}; DBITSHIFT: PROCEDURE [ value: LONG UNSPECIFIED, count: INTEGER] RETURNS [LONG UNSPECIFIED]; 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: 22-Jul-81 12:01:07 By: JGS Action: Added double operations Time: 30-Mar-83 12:12:57 By: Johnsson Action: Added LongCOPYReverse Time: August 31, 1984 10:52:31 am PDT By: Plass Action: Created Cedar PilotBridge version from version of 30-Mar-83 12:13:17 PST dInline.mesa (last edited by: Plass on August 31, 1984 10:52:21 am PDT) Cedar PilotBridge version Pier, July 2, 1985 3:20:50 pm PDT Copyright (C) Xerox Corporation 1982. All rights reserved. LDIVMOD: PROCEDURE [numlow: WORD, numhigh: CARDINAL, den: CARDINAL] RETURNS [quotient, remainder: CARDINAL] = Basics.LongDivMod; Not really Inline for Cedar Κ˜JšœG™G™Icode™!—J˜Jšœ:™:J˜šΟk ˜ JšœœœL˜bJš œœœœ œœœ˜UJ˜—šœ œœ˜3Jš˜J˜Jšœœœœ˜#J˜Jšœ œ˜%J˜š œ œœ œœ˜TJ˜—šΟnœ œœœ œœœ˜NJšœ˜J˜—šžœ œœœ œœœ˜UJšœœœ œœ œœ˜RJ˜—š œ œ œœœ˜PJšœžœ˜J˜—š œ œ œ œœ™CJšœœ™)Jšœž œ™J™—šžœ œœœœ œœ˜KJšœ˜J˜—šžœ œœœœœœ˜KJšœ˜J˜—š ž œ œœœœ˜9Jšœœ˜)Jšœ˜J˜J˜—Jšžœœ œ œ œœ œ˜IJ˜Jšœœ˜%J˜Jšœœ˜#J˜Jšœœ˜%J˜š œ œ œœ œ˜8Jšœœ˜J˜—š œ œ  œ œœ œ˜PJšœœ˜J˜—š  œ œ  œ œœ œ˜Qšœ˜Jšœœ˜,Jšœ œœ"˜WJšœ˜—J˜J˜—š žœ œœ œœ œ˜GJšœœœœ˜2J˜—š žœ œœ œœ œ˜HJšœœœœ˜3J˜—Jšœ œ˜!J˜š žœ œ œœ œ˜BJšœœœœ˜,J˜—š žœ œ œœ œ˜CJšœœœœ˜-J˜J˜J˜—šžœ œ˜Jš œ œœœœœ˜GJšœ&œ˜5J˜—šžœ œ˜Jš œ œœœœœ˜EJšœ&œ˜5J˜—šžœœ œ˜Jšœœ œœ œœœ œ˜EJ˜—šœœ œ  œœœ œœœ˜ZJ˜—Jš œ œœ œœ˜rJ˜Jš œ œœ œœ˜oJ˜Jš œ œœ œœ˜rJ˜šœ œœ œœœ œœœ œœ˜J˜—š œ œ˜š œœ œ œœœ œ˜DJ™—J˜J˜—Jšœ˜—Jš˜JšœœG˜bJšœœ2˜MJšœœ:˜YJš œœ-œ œœ˜kJšœœ ˜@J˜CJšœ€˜€J˜—…—^Ι