<<>> <> <> <> <> <> <> <> <> <> <<>> DIRECTORY Basics; <<>> Basics32: CEDAR DEFINITIONS IMPORTS Basics ~ BEGIN <> bitsPerWord: NAT ~ BITS[WORD32]; -- = 32, of course bytesPerWord: NAT ~ BYTES[WORD32]; charsPerWord: NAT ~ bytesPerWord; <<>> logBitsPerWord: NAT ~ BITS[[0..bitsPerWord)]; logBytesPerWord: NAT ~ BITS[[0..bytesPerWord)]; logCharsPerWord: NAT ~ logBytesPerWord; <<>> RawWords: TYPE ~ RECORD [PACKED SEQUENCE COMPUTED CARD OF WORD32]; <<>> <> NonNegative: PROC [value: INT32] RETURNS [NAT31] ~ INLINE { RETURN[value] }; <<>> BoundsCheck: PROC [arg, limit: WORD32] RETURNS [WORD32] ~ INLINE { IF arg >= limit THEN Basics.RaiseBoundsFault[]; RETURN [arg] }; <<>> <> BITAND: PROC [w1: WORD32, w2: WORD32] RETURNS [WORD32] ~ INLINE { RETURN[Basics.BITAND[w1, w2]] }; <<>> BITOR: PROC [w1: WORD32, w2: WORD32] RETURNS [WORD32] ~ INLINE { RETURN[Basics.BITOR[w1, w2]] }; <<>> BITXOR: PROC [w1: WORD32, w2: WORD32] RETURNS [WORD32] ~ INLINE { RETURN[Basics.BITXOR[w1, w2]] }; <<>> BITNOT: PROC [w: WORD32] RETURNS [WORD32] ~ INLINE { RETURN[Basics.BITNOT[w]] }; <<>> BITLSHIFT: PROC [value: WORD32, count: [0..bitsPerWord)] RETURNS [WORD32] ~ INLINE { RETURN[Basics.BITLSHIFT[value, count]] }; <<>> BITRSHIFT: PROC [value: WORD32, count: [0..bitsPerWord)] RETURNS [WORD32] ~ INLINE { RETURN[Basics.BITRSHIFT[value, count]] }; <<>> BITSHIFT: PROC [value: WORD32, count: INT] RETURNS [WORD32] ~ INLINE { RETURN[Basics.BITSHIFT[value, count]] }; <<>> <> LowHalf: PROC [n: CARD32] RETURNS [CARD16] ~ INLINE { RETURN[Basics.LowHalf[n]] }; HighHalf: PROC [n: CARD32] RETURNS [CARD16] ~ INLINE { RETURN[Basics.HighHalf[n]] }; END. <> <> <> <> <> <> <> <> <> <>