<<>> C2CProposedRuntimeSupport.tioga <> <> <> <<>> <> <<[luther.alpine]MimosaBugs>PortableCedarRuntimeSupport.mesa>> I did reverse the order of parameters... Naming convention? prefix? The following procedures right away... MoveWords: PROC [dst: PTR, src: PTR, nWords: NAT]; <> MoveWordsDisjoint: PROC [dst: PTR, src: PTR, nWords: NAT]; <> <<>> EqualWords: PROC [x: PTR, y: PTR, nWords: NAT] RETURNS [BOOL]; <> <<>> MoveBytesDisjoint: PROC [dst: PTR, src: PTR, nBytes: NAT]; <> ExtractField: PROC [base: PTR, offset: INT, bits: [0..bitsPerWord]] RETURNS [Word]; <> <<>> DepositField: PROC [base: PTR, offset: INT, bits: [0..bitsPerWord], word: Word]; <> MoveField: PROC [dst: PTR, dstOffset: INT, src: PTR, srcOffset: INT, bits: NAT]; <> <<>> EqualFields: PROC [x: PTR, xOffset: INT, y: PTR, yOffset: INT, bits: NAT] RETURNS [BOOL]; <> <<>> The following procedures are not used the next 3 days... Efficiency matters less, I believe they wont be used in inner most loops FillFields: PROC [dst: PTR, dstOffset: INT, bits: [0..bitsPerWord], times: NAT, value: Word]; <> FillLongFields: PROC [dst: PTR, dstOffset: INT, src: PTR, srcOffset: INT, bits: NAT, times: NAT]; <> FillWords: PROC [dst: PTR, times: NAT, value: Word]; <> FillLongWords: PROC [dst, src: PTR, nWords: NAT, times: NAT]; <> C2CSafeStorageRuntimeSupport.tioga <> <> <<>> <<>> Try of a match between IntCodeDefs.CedarSelector and PortableCedarRuntimeSupport; Made by proposing changes to the SafeStorage section in PortableCedarRuntimeSupport. Types as in original PortableCedarRuntimeSupport. Please reply whether reasonable. Christian CedarSelector: TYPE = { <> simpleAssign, <> <> AssignRef: PROC [dstPtr: RefPtr, src: REF]; <> <<>> simpleAssignInit, <> <> AssignRefInit: PROC [dstPtr: RefPtr, src: REF]; <> complexAssign, <> <> AssignRefComposite: PROC [dst: PTR, src: PTR, type: Type, sz: NAT]; <> <> complexAssignInit, <> <> AssignRefCompositeInit: PROC [dst: PTR, src: PTR, type: Type, sz: NAT]; <> <> <<>> <<>> new, <> <> NewObject: PROC [nWords: INT, type: Type] RETURNS [REF]; <> The c2c back-end will never see a zone z # NIL <<>> code, <> <> <> The c2c back-end will never see this construct <<>> narrow, <> <> <> Narrow: PROC [ref: REF, type: Type] RETURNS [REF]; <> <<>> referentType, <> <> GetReferentType: PROC [ref: REF] RETURNS [Type]; <> <<>> procCheck <> <> <> CheckProc: PROC [proc: ProcAny] RETURNS [ProcAny]; <> <> <<>> }; <<>> C2CMoreRuntimeSupport.tioga <> <> Mark, could I hand you some more runtime functions to be programmed? You once handed me some of those procedures in C; I did store those in /ivy/jacobi/temp/FromMark.c. However, I think it might be more confortable to have this stuff in the CedarBoot. This, and preceding runtime procedure requests are/will be stored with /indigo/mimosa/top/c2c.df until we find a better place. Thanks, Christian <<>> <<>> <> <> <<>> DebugPutChar: PROC [ch: CHAR]; <> <> <<>> <<>> <> RaiseBoundsFault: PROC []; <> <> <<{>> <> <<};>> <> <> <<>> RaiseAbstractionFault: PROC []; <> <> <<{>> <> <<};>> <> BoundsCheck: PROC [arg: INT, limit: NAT] RETURNS [sameArg: NAT]; <> <> <<{>> <limit THEN ERROR BoundsFault;>> <> <<};>> NilCheck: PROC [ptr: PTR] RETURNS [samePtr: PTR]; <> <> <<{>> <> <> <<};>> <<>> <<>> <> <<>> <> ExtensionAlloc: PROC [nWords: INT] RETURNS [PTR]; <> ExtensionFree: PROC [ptr: PTR] RETURNS [PTR _ NIL]; <> <<>> <> <> <<>> <> <> <<>> ArithmeticRuntimeSupport.tioga <> <> <> <<>> <> <> <<>> <> SignedPwr: PROC [a, b: INT32] RETURNS [INT32]; <<>> UnsignedPwr: PROC [a, b: CARD32] RETURNS [CARD32]; <<>> FloatInt: PROC [i: INT32] RETURNS [REAL32]; FloatCard: PROC [i: CARD32] RETURNS [REAL32]; RealNeg: PROC [a: REAL32] RETURNS [REAL32]; RealAbs: PROC [a: REAL32] RETURNS [REAL32]; <> RealAdd: PROC [a, b: REAL32] RETURNS [REAL32]; RealSub: PROC [a, b: REAL32] RETURNS [REAL32]; <<(a-b)>> RealMul: PROC [a, b: REAL32] RETURNS [REAL32]; RealDiv: PROC [a, b: REAL32] RETURNS [REAL32]; <<(a/b)>> RealMin: PROC [a, b: REAL32] RETURNS [REAL32]; <> RealMax: PROC [a, b: REAL32] RETURNS [REAL32]; <> RealPwr: PROC [a, b: REAL32] RETURNS [REAL32]; <<>> RealGt: PROC [a, b: REAL32] RETURNS [BOOL]; <<(a>b)>> RealGe: PROC [a, b: REAL32] RETURNS [BOOL]; <<(a>=b)>> RealEq: PROC [a, b: REAL32] RETURNS [BOOL]; <<(a=b)>>