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] = { 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. ^ C2CTargetImpl.mesa Copyright Σ 1987, 1988, 1989, 1990, 1991 by Xerox Corporation. All rights reserved. Created by Christian Jacobi, 1987 Christian Jacobi, October 7, 1992 3:01 pm PDT bitsPerWord: PUBLIC NAT _ 32; hasBytes: PUBLIC BOOL _ TRUE; hasHalfWords: PUBLIC BOOL _ TRUE; bitsPerHalfWord: PUBLIC NAT _ 16; bitsPerDoubleWord: PUBLIC NAT _ 64; addressUnitsPerWord: PUBLIC NAT _ 4; bitsPerAddressUnit: PUBLIC NAT _ 8; charsPerWordInString: PUBLIC NAT _ 4; bestAlignment: PUBLIC NAT _ 32; --Sparc: no doubles generated --pointee: the guy sombody is pointing at machineIsSunC: PUBLIC BOOL _ TRUE; Κτ•NewlineDelimiter –(cedarcode) style™šœ™Icodešœ ΟeœI™TKšœ!™!K™-K˜—šΟk ˜ Kšœ%˜%—K˜šΟn œžœž˜Kšžœ˜Kšžœ ˜—Kšžœžœ ˜Iimp˜Kšžœžœžœ˜K˜Kšœžœžœ ˜#K˜Kšœ žœžœ™Kšœžœžœ ˜Kšœ žœžœ˜$K˜Kšœ žœžœ ˜ Kšœžœžœ˜'Kšœžœžœ ˜(Kšœžœžœ˜/K˜Kšœ žœžœ ˜Kšœ žœžœ ˜%K˜Kšœ žœžœžœ™K˜Kšœžœžœ ˜Kšœ žœžœ˜#Kšœ žœžœ ˜Kšœ žœžœ˜&K˜Kšœžœžœ˜+Kšœ žœžœ ˜#Kšœžœžœ˜)K˜Kšœžœžœžœ™!Kšœžœžœ™!Kšœ žœžœ ˜Kšœžœžœ˜'Kšœ žœžœ ˜"Kšœžœžœ˜*K˜Kšœžœžœ˜+Kšœ žœžœ ˜$Kšœžœžœ˜*K˜Kšœžœžœ™#Kšœžœžœ™$Kšœžœžœ™#Kšœžœžœ™%K™KšœžœžœΟc™=Kšœ žœžœ &˜EK˜Kšœžœžœ˜#Kšœžœžœ˜+Kš œžœžœžœžœ˜.Kšœžœžœ˜+Kš œ žœžœžœžœžœ˜1Kšœžœžœ˜(Kšœžœžœ ˜+L˜š Ÿ œžœžœžœžœžœ˜6Lšœ˜Lšœ˜—L˜š Ÿœžœžœžœžœžœ˜CKšœžœžœ˜Kšžœ žœ˜!Kšžœ˜ Lšœ˜—K˜š Ÿœžœžœžœžœžœ˜DKšœžœžœ ˜2Kšžœ žœ˜!Kšžœ˜ Lšœ˜—K˜š Ÿœžœžœžœžœ žœ˜CKšœžœžœ˜Kšžœ žœ˜"Kšžœ˜ Lšœ˜—K˜š Ÿ œžœžœ žœžœžœ˜:Kš )™)Kšžœ žœ˜)Kšžœ žœ žœžœ˜,Kšžœžœžœžœ˜LKšžœžœžœ˜3Kšžœžœžœ˜7Kšžœ$˜*Kšœ˜—K˜š Ÿ œžœžœ žœžœžœ˜