<<>> <> <> <> <> <> DIRECTORY Basics32 USING [BITLSHIFT, BITRSHIFT], Rope USING [ROPE]; IntCodeTarget: CEDAR DEFINITIONS IMPORTS Basics32 = BEGIN OPEN Rope; <> <> name: READONLY ROPE; <> <> bitsPerAU: READONLY NAT; logBitsPerAU: READONLY NAT; bytesPerAU: READONLY NAT; logBytesPerAU: READONLY NAT; <> bitOrder: READONLY BitOrder; BitOrder: TYPE = {msBit, lsBit}; <> maxBitsArgumentRecord: READONLY NAT; <> minBitsPerArgument: READONLY NAT; logMinBitsPerArgument: READONLY NAT; <> <<(to get the bits for an argument, round up & shift by logMinBitsPerArgument)>> maxBitsReturnRecord: READONLY NAT; <> minBitsPerReturn: READONLY NAT; logMinBitsPerReturn: READONLY NAT; <> <> bitsPerGlobal: READONLY NAT; logBitsPerGlobal: READONLY NAT; <> firstGlobalOffset: READONLY NAT; <> <<>> directGlobals: READONLY BOOL; < target supports direct use of global variables>> < target requires global frame pointer>> <> lastRegister: READONLY NAT; <> lastStack: READONLY NAT; <> bitsPerLocal: READONLY NAT; logBitsPerLocal: READONLY NAT; <> bitsPerLink: READONLY NAT; logBitsPerLink: READONLY NAT; <> <<(uniform for static link, global link, & frame extension if any).>> <> ToUnits: PROC [bits: INT, minBits: NAT, logMinBits: NAT] RETURNS [INT] = INLINE { SELECT bits FROM <= 0 => RETURN [0]; <= minBits => RETURN [1]; ENDCASE => RETURN [Basics32.BITRSHIFT[bits+minBits-1, logMinBits]]; }; ToBits: PROC [units: INT, logBitsPerUnit: NAT] RETURNS [INT] = INLINE { SELECT units FROM <= 0 => RETURN [0]; ENDCASE => RETURN [Basics32.BITLSHIFT[units, logBitsPerUnit]]; }; END.