<<>> <> <> <> <> DIRECTORY C2CBasics, C2CNames, C2CTarget, Rope; C2CTargetImpl: CEDAR MONITOR IMPORTS C2CBasics, C2CNames EXPORTS C2CTarget = BEGIN OPEN C2CTarget; ROPE: TYPE = Rope.ROPE; runtimePrefix: PUBLIC ROPE ¬ "XR_"; <> word: PUBLIC ROPE ¬ "word"; wordCast: PUBLIC ROPE ¬ " (word) "; signedWord: PUBLIC ROPE ¬ "int"; unsignedWord: PUBLIC ROPE ¬ "unsigned"; signedWordCast: PUBLIC ROPE ¬ " (int) "; unsignedWordCast: PUBLIC ROPE ¬ " (unsigned) "; wordPtr: PUBLIC ROPE ¬ "ptr"; wordPtrCast: PUBLIC ROPE ¬ " (ptr) "; <> byte: PUBLIC ROPE ¬ "byte"; byteCast: PUBLIC ROPE ¬ " (byte) "; bytePtr: PUBLIC ROPE ¬ "bPt"; bytePtrCast: PUBLIC ROPE ¬ " (bPt) "; unsignedByteCast: PUBLIC ROPE ¬ " (byte) "; signedByte: PUBLIC ROPE ¬ " char "; signedByteCast: PUBLIC ROPE ¬ " (char) "; <> <> halfWord: PUBLIC ROPE ¬ "half"; halfWordCast: PUBLIC ROPE ¬ " (half) "; halfWordPtr: PUBLIC ROPE ¬ "hPt"; halfWordPtrCast: PUBLIC ROPE ¬ " (hPt) "; unsignedHalfCast: PUBLIC ROPE ¬ " (half) "; signedHalf: PUBLIC ROPE ¬ " short "; signedHalfCast: PUBLIC ROPE ¬ " (short) "; <> <> <> <> <<>> <> idMaxLength: PUBLIC NAT ¬ 127; --I believe our C compiler goes to 255 maxBitsForReturns: PUBLIC INT ¬ 32; maxBitsForSimpleStructs: PUBLIC INT ¬ 32*8; maxBitsForValueParams: PUBLIC INT ¬ LAST[INT]; maxWordsForInlineFillWords: PUBLIC INT ¬ 3; firstOfINT: PUBLIC CARD ¬ LOOPHOLE[FIRST[INT32]]; maxBitsForFastLiterals: PUBLIC INT ¬ 18; maxBitsForFastAnd: PUBLIC INT ¬ 13; --SPARC BitsToWords: PUBLIC PROC [b: INT] RETURNS [w: INT] = { w ¬ (b+32-1)/32 }; RoundUpToWordBoundary: PUBLIC PROC [b: INT] RETURNS [bits: INT] = { mod: NAT = b MOD 32; IF mod # 0 THEN b ¬ b + (32-mod); RETURN [b]; }; RoundUpToBestAlignment: PUBLIC PROC [b: INT] RETURNS [bits: INT] = { mod: NAT = b MOD 32; --Sparc: no doubles generated IF mod # 0 THEN b ¬ b + (32-mod); RETURN [b]; }; RoundUpCharsToWords: PUBLIC PROC [cn: INT] RETURNS [chars: INT] = { mod: NAT = cn MOD 4; IF mod # 0 THEN cn ¬ cn + (4-mod); RETURN [cn]; }; PointeeBits: PUBLIC PROC [usedBits: INT] RETURNS [INT] = { <<--pointee: the guy sombody is pointing at>> IF usedBits<=0 THEN C2CBasics.CantHappen; IF usedBits<=8 AND hasBytes THEN RETURN [8]; IF usedBits<=bitsPerHalfWord AND hasHalfWords THEN RETURN [bitsPerHalfWord]; IF usedBits<=bitsPerWord THEN RETURN [bitsPerWord]; IF usedBits<=bestAlignment THEN RETURN [bestAlignment]; RETURN [RoundUpToBestAlignment[usedBits]]; }; TemporaryBits: PUBLIC PROC [usedBits: INT] RETURNS [INT] = { IF usedBits<=bitsPerWord THEN RETURN [bitsPerWord]; IF usedBits<=bestAlignment THEN RETURN [bestAlignment]; RETURN [RoundUpToBestAlignment[usedBits]]; }; rightShiftSignedIsOk: PUBLIC BOOL ¬ TRUE; takingAddressIsExpensive: PUBLIC BOOL ¬ TRUE; consecutiveStringsAllocedAdj: PUBLIC BOOL ¬ TRUE; <> definitions: PUBLIC ROPE ¬ "typedef unsigned word, *ptr;\ntypedef unsigned char byte, *bPt;\ntypedef unsigned short half, *hPt;\n"; [] ¬ C2CNames.Reserve["word"]; [] ¬ C2CNames.Reserve["ptr"]; [] ¬ C2CNames.Reserve["byte"]; [] ¬ C2CNames.Reserve["bPt"]; [] ¬ C2CNames.Reserve["half"]; [] ¬ C2CNames.Reserve["hPt"]; END.