DIRECTORY Alloc USING [Notifier], ConstArith USING [Const], Literals USING [LitDescriptor], MobDefs USING [Link, ModuleIndex], OSMiscOps USING [WordAnd], Symbols, Tree USING [Index, Link, Map, NodeName, Scan]; MimP4: DEFINITIONS IMPORTS OSMiscOps = { OPEN Symbols; mark: BOOL = FALSE; ownGfi: MobDefs.ModuleIndex = 1; Bias: TYPE = ConstArith.Const; Repr: TYPE = MACHINE DEPENDENT { none (0), signed (1), unsigned (2), either (3), real (4), addr (8), other (16), all (31) }; CommonRep: PROC [r1: Repr, r2: Repr] RETURNS [Repr] = INLINE { RETURN [LOOPHOLE [OSMiscOps.WordAnd[LOOPHOLE[r1, WORD], LOOPHOLE[r2, WORD]]]]; }; Prop: TYPE = MACHINE DEPENDENT RECORD [ noAssign: BOOL, noXfer: BOOL, noSelect: BOOL, noFreeVar: BOOL, immutable: BOOL]; fullProp: Prop = [ noAssign: TRUE, noXfer: TRUE, noSelect: TRUE, noFreeVar: TRUE, immutable: TRUE]; emptyProp: Prop = [ noAssign: FALSE, noXfer: FALSE, noSelect: FALSE, noFreeVar: FALSE, immutable: FALSE]; voidProp: Prop = fullProp; CommonProp: PROC [p1: Prop, p2: Prop] RETURNS [Prop] = INLINE { RETURN [LOOPHOLE [OSMiscOps.WordAnd[LOOPHOLE[p1, WORD], LOOPHOLE[p2, WORD]]]]; }; Attr: TYPE = PACKED RECORD [prop: Prop, rep: Repr]; voidAttr: Attr = [prop: voidProp, rep: none]; CommonAttr: PROC [a1: Attr, a2: Attr] RETURNS [Attr] = INLINE { RETURN [LOOPHOLE [OSMiscOps.WordAnd[LOOPHOLE[a1, WORD], LOOPHOLE[a2, WORD]]]]; }; LayoutNotify, StmtNotify: Alloc.Notifier; OpsNotify, ExpANotify, ExpBNotify, ExpCNotify: Alloc.Notifier; tTRUE: READONLY Tree.Link; tFALSE: READONLY Tree.Link; returnRecord: RecordSEIndex; resumeRecord: RecordSEIndex; implicit: ImplicitRecord; ImplicitRecord: TYPE = RECORD [ bias: Bias, -- assumed bias of empty lb: Bias, -- assumed lb of empty (if meaningful) ub: Bias, -- assumed ub of empty (if meaningful) type: Type, -- assumed type of empty attr: Attr, -- assumed attributes of empty sef: BOOL -- assumed sense of SideEffectFree for empty ]; nullBias: READONLY Bias; -- constant bias of zero lockNode: Tree.Index; resident: BOOL; AssignImports: Tree.Scan; InitMob: PROC [Tree.Link]; FinishMob: Tree.Scan; MakeEPLink: PROC [ep: CARDINAL, gfi: MobDefs.ModuleIndex] RETURNS [MobDefs.Link]; MatchMob: PROC RETURNS [BOOL]; ProcessSymLiterals: PROC; BiasForType: PROC [Type] RETURNS [Bias]; CanonicalType: PROC [Type] RETURNS [Type]; ClearType: PROC [Type] RETURNS [CSEIndex]; ComparableType: PROC [Type] RETURNS [BOOL]; DeclItem: Tree.Scan; DeclUpdate: Tree.Map; DefaultBasicOps: PROC [Type, BitCount] RETURNS [BOOL]; MaxCardinality: PROC [Type, BOOL, CARD] RETURNS [CARD]; RepForType: PROC [Type] RETURNS [Repr]; TypeExp: PROC [typeExp: Tree.Link, body: BOOL ¬ FALSE, avoidId: BOOL ¬ FALSE]; TypeForTree: PROC [Tree.Link] RETURNS [Type]; VarInit: SIGNAL RETURNS [BOOL]; AssignEntries: PROC [BTIndex]; AUsForType: PROC [Type] RETURNS [CARD]; BitsForType: PROC [Type] RETURNS [BitCount]; CheckBlock: PROC [BTIndex]; CheckFields: PROC [RecordSEIndex, BitCount]; LayoutArgs: PROC [RecordSEIndex, BitCount, BOOL] RETURNS [BitCount]; LayoutBlock: PROC [BTIndex, BitCount] RETURNS [BitCount]; LayoutFields: PROC [RecordSEIndex, BitCount]; LayoutGlobals: PROC [bti: CBTIndex] RETURNS [BitCount]; LayoutInterface: PROC [bti: CBTIndex] RETURNS [nEntries: CARDINAL]; LayoutLocals: PROC [CBTIndex] RETURNS [BitCount]; MarkArgs: PROC [Type]; WordsForType: PROC [Type] RETURNS [CARD]; currentLevel: VAR ContextLevel; checked: VAR BOOL; BindCase: PROC [Tree.Index, Tree.NodeName, PROC [Tree.Link, Bias] RETURNS [Tree.Link]] RETURNS [Tree.Link]; BindType: PROC [Tree.Index, Tree.Map] RETURNS [Tree.Link]; Body: PROC [CBTIndex]; CaseDriver: PROC [Tree.Index, Tree.Map, Bias] RETURNS [Tree.Link]; CatchNest: PROC [Tree.Link]; KillTree: PROC [t: Tree.Link] RETURNS [Tree.Link]; MarkString: PROC [local: BOOL¬TRUE]; Subst: PROC [Tree.Index] RETURNS [Tree.Link]; RelOp: TYPE = Tree.NodeName [relE .. relLE]; BoolTest: PROC [Tree.Link] RETURNS [BOOL]; FoldExpr: PROC [Tree.Index, Repr] RETURNS [Tree.Link]; LiteralRep: PROC [Tree.Link, Repr] RETURNS [Repr]; LongToShort: PROC [Tree.Index, Repr] RETURNS [Tree.Link]; MakeTreeLiteralCard: PROC [CARD] RETURNS [Tree.Link]; MakeTreeLiteralInt: PROC [INT] RETURNS [Tree.Link]; RelTest: PROC [l,r: Tree.Link, op: RelOp, rep: Repr] RETURNS [BOOL]; ShortToLong: PROC [Tree.Index, Repr] RETURNS [Tree.Link]; StructuredLiteral: PROC [Tree.Link] RETURNS [BOOL]; TreeLiteral: PROC [t: Tree.Link, allowLong: BOOL ¬ FALSE] RETURNS [BOOL]; TreeLiteralConst: PROC [Tree.Link] RETURNS [ConstArith.Const]; TreeLiteralDesc: PROC [Tree.Link] RETURNS [Literals.LitDescriptor]; TreeLiteralCard: PROC [Tree.Link] RETURNS [CARD]; TreeLiteralInt: PROC [Tree.Link] RETURNS [INT]; ZeroP: PROC [Tree.Link] RETURNS [BOOL]; ConsState: TYPE = {init, first, rest}; Covering: TYPE = {none, partial, full}; All: PROC [node: Tree.Index, cs: ConsState¬$init] RETURNS [Tree.Link]; Assignment: PROC [Tree.Index] RETURNS [Tree.Link]; Bounds: PROC [Type, Repr] RETURNS [lb, ub: ConstArith.Const]; Call: PROC [Tree.Index] RETURNS [Tree.Link]; CheckRange: PROC [Tree.Link, CARD, Type] RETURNS [Tree.Link]; Construct: PROC [node: Tree.Index, cs: ConsState¬$init] RETURNS [Tree.Link]; Cover: PROC [lType: Type, lRep: Repr, rType: Type, rRep: Repr] RETURNS [Covering]; Dollar: PROC [Tree.Index] RETURNS [Tree.Link]; Dot: PROC [Tree.Index, Repr] RETURNS [Tree.Link]; Extract: PROC [Tree.Index] RETURNS [Tree.Link]; Index: PROC [Tree.Index] RETURNS [Tree.Link]; ListCons: PUBLIC PROC [Tree.Index] RETURNS [Tree.Link]; MakeArgRecord: PROC [RecordSEIndex, Tree.Link] RETURNS [Tree.Link]; Narrow: PROC [Tree.Index] RETURNS [Tree.Link]; New: PROC [Tree.Index] RETURNS [Tree.Link]; OperandStruct: PROC [t: Tree.Link, clear: BOOL] RETURNS [CSEIndex]; PadRecord: PROC [t: Tree.Link, lType: Type] RETURNS [Tree.Link]; RewriteAssign: PROC [Tree.Index, Type] RETURNS [Tree.Link]; Reloc: PROC [Tree.Index] RETURNS [Tree.Link]; Rhs: PROC [exp: Tree.Link, lhsType: Type, cs: ConsState¬$init, voidOK: BOOL¬FALSE] RETURNS [Tree.Link]; RowConstruct: PROC [node: Tree.Index, cs: ConsState¬$init] RETURNS [Tree.Link]; SeqIndex: PROC [Tree.Index] RETURNS [Tree.Link]; SetSubInfo: PROC [t: Tree.Link, type: Type]; SetType: PROC [Type]; Substx: PROC [Tree.Index] RETURNS [Tree.Link]; UnbiasedOffset: PROC [type: Type] RETURNS [INT]; Union: PROC [node: Tree.Index, cs: ConsState¬$init] RETURNS [Tree.Link]; ExpInit: PROC; ExpReset: PROC; AdjustBias: PROC [t: Tree.Link, rep: Repr, bias: Bias, negateBias: BOOL] RETURNS [Tree.Link]; BoolValue: PROC [t: Tree.Link] RETURNS [Tree.Link]; CheckSign: PROC [Tree.Link, Type] RETURNS [Tree.Link]; ConstMax: PROC [c1, c2: ConstArith.Const] RETURNS [ConstArith.Const]; ConstMin: PROC [c1, c2: ConstArith.Const] RETURNS [ConstArith.Const]; Exp: PROC [Tree.Link, Repr] RETURNS [Tree.Link]; ExpArith: PROC [exp: Tree.Link, target: Repr, removeBias: BOOL ¬ FALSE] RETURNS [Tree.Link]; ForceType: PROC [Tree.Link, Type] RETURNS [Tree.Link]; LiteralAttr: PROC [Repr] RETURNS [Attr]; MakeStructuredCard: PROC [val: CARD, type: Type] RETURNS [Tree.Link]; MakeStructuredInt: PROC [val: INT, type: Type] RETURNS [Tree.Link]; NeutralExp: Tree.Map; OperandType: PROC [Tree.Link] RETURNS [Type]; RValue: PROC [exp: Tree.Link, bias: Bias, target: Repr] RETURNS [Tree.Link]; SideEffectFree: PROC [t: Tree.Link] RETURNS [BOOL]; TreeBounds: PROC [t: Tree.Link, rep: Repr] RETURNS [lb, ub: ConstArith.Const]; VAttr: PROC RETURNS [Attr]; VBias: PROC RETURNS [Bias]; VPop: PROC; VProp: PROC RETURNS [Prop]; VPush: PROC [bias: Bias, attr: Attr]; VRep: PROC RETURNS [Repr]; VSetTop: PROC [bias: Bias, attr: Attr, nPops: NAT]; AddrOp: PROC [Tree.Index] RETURNS [Tree.Link]; ConstantInterval: PROC [Tree.Link] RETURNS [origin, range: Bias]; Interval: PROC [Tree.Link, Bias, Repr] RETURNS [const: BOOL]; IsSize: PROC [Tree.Link] RETURNS [BOOL]; Nil: PROC [Tree.Index] RETURNS [Tree.Link]; NormalizeRange: PROC [Tree.Link] RETURNS [Tree.Link]; MiscXfer: PROC [Tree.Index] RETURNS [Tree.Link]; TypeOp: PROC [Tree.Index] RETURNS [Tree.Link]; EmptyInterval: SIGNAL; }. $ MimP4.mesa Copyright Σ 1985, 1986, 1987, 1988, 1989, 1991 by Xerox Corporation. All rights reserved. Satterthwaite, June 19, 1986 9:31:18 am PDT Russ Atkinson (RRA) October 11, 1989 6:43:38 pm PDT JKF August 15, 1988 2:40:09 pm PDT representations (interim) properties (synthesized) attributes notifiers variables exported by Pass4B intermediate result bookkeeping procs exported by Pass4B exported by Pass4D exported by Pass4L Performs Pass4 processing on a transfer type exported by Pass4S kills off the given true, returning Tree.Null; will disable any procedure declarations found within the tree as well exported by Pass4Ops exported by Pass4Xa exported by Pass4Xb Returns a conservative estimate as to whether or not the tree will evaluate without side effects (memory changes, signals, and the like). the same as {THROUGH [0..nPops) VPop[]; ENDLOOP; VPush[bias, attr]} exported by Pass4Xc Indicates whether the expression denotes addressing units. Quite conservative. Must be invoked prior to Pass4 Exp processing (or the constants go away). Κ U•NewlineDelimiter –(cedarcode) style™headšœ ™ Icodešœ ΟeœO™ZLšΟy(Πky™+LšœΟkœ!™3L™"—˜š  ˜ Lšœ œ ˜Lšœ  œ ˜Lšœ  œ˜Lšœ œ˜"Lšœ  œ ˜Lšœ˜Lšœ œ$˜.L˜——šΟnœ  ˜Lš œ˜Lš œ ˜ L˜Lšœ œ œ˜L˜L˜ L˜Lšœ œ˜L˜—Lšœ™˜šœ œ œ  œ˜ L˜XLšœ˜L˜—š‘ œ œ œ  œ˜>Lš  œ œ œ œ œ œ˜NLšœ˜—L˜—Lšœ™˜šœ œ œ˜'Lšœ  œ˜Lšœ œ˜ Lšœ  œ˜Lšœ  œ˜Lšœ  œ˜L˜—˜Lš œ  œ  œ  œ  œ  œ˜P—˜Lš œ  œ  œ  œ  œ  œ˜U—L˜L˜š‘ œ œ œ  œ˜?Lš  œ œ œ œ œ œ˜NLšœ˜—L˜—Lšœ ™ ˜Lšœ œ œ œ˜3L˜L˜-L˜š‘ œ œ œ  œ˜?Lš  œ œ œ œ œ œ˜NLšœ˜—L˜—Lšœ ™ ˜Lšœ)˜)Lšœ>˜>L˜—šœ™L˜Lšœ œ ˜Lšœ œ ˜L˜Lšœ™L˜Lšœ˜Lšœ˜L˜L˜šœ œ œ˜Lšœ Οc˜$Lšœ ’&˜0Lšœ ’&˜0Lšœ ’˜$Lšœ ’˜*Lšœ œ’,˜6L˜—Lšœ  œ’˜1L˜Lšœ˜Lšœ  œ˜L˜—šœ™L˜Lš‘ œ ˜Lš‘œ œ ˜Lš‘ œ ˜Lš‘ œ œ œ œ˜QLš‘œ œ œ œ˜Lš‘œ œ˜L˜—Lšœ™˜Lš‘ œ œ œ˜(Lš‘ œ œ œ˜*Lš‘ œ œ œ ˜*Lš‘œ œ œ œ˜+Lš‘œ ˜Lš‘ œ ˜Lš‘œ œ œ œ˜6Lš ‘œ œ œ œ œ œ˜7Lš‘ œ œ œ˜'Lš ‘œ œ œ œ  œ œ˜NLš‘ œ œ  œ˜-Lš‘œ œ œ œ˜L˜—Lšœ™˜Lš‘ œ œ ˜Lš‘ œ œ œ œ˜'Lš‘ œ œ œ ˜,Lš‘ œ œ ˜Lš‘ œ œ˜,Lš‘ œ œ œ œ ˜DLš‘ œ œ œ ˜9Lš‘ œ œ˜-Lš‘ œ œ œ ˜7Lš‘œ œ œ  œ˜CLš‘ œ œ  œ ˜1š‘œ œ˜L™,—Lš‘ œ œ œ œ˜)L˜—Lšœ™˜Lšœ œ˜Lšœ  œ œ˜L˜Lš ‘œ œ œ œ œ ˜kLš‘œ œ œ ˜:Lš‘œ œ ˜Lš‘ œ œ œ ˜BLš‘ œ œ ˜š‘œ œ œ ˜2Lšœt™t—Lš‘ œ œ   œ˜$Lš‘œ œ œ ˜-L˜—Lšœ™˜Lšœ œ!˜,L˜Lš‘œ œ  œ œ˜*Lš‘œ œ œ ˜6Lš‘ œ œ œ˜2Lš‘ œ œ œ ˜9Lš‘œ œ œ œ ˜5Lš‘œ œ œ œ ˜3Lš‘œ œ( œ œ˜DLš‘ œ œ œ ˜9Lš‘œ œ  œ œ˜3Lš ‘ œ œ œ œ œ œ˜ILš‘œ œ  œ˜>Lš‘œ œ  œ˜CLš‘œ œ  œ œ˜1Lš‘œ œ  œ œ˜/Lš‘œ œ  œ œ˜'L˜—Lšœ™˜Lšœ  œ˜&Lšœ  œ˜'L˜Lš‘œ œ) œ ˜FLš‘ œ œ œ ˜2Lš‘œ œ œ˜=Lš‘œ œ œ ˜,Lš‘ œ œ  œ œ ˜=Lš‘ œ œ) œ ˜LLš‘œ œ4 œ ˜RLš‘œ œ œ ˜.Lš‘œ œ œ ˜1Lš‘œ œ œ ˜/Lš‘œ œ œ ˜-Lš‘œ œ œ œ ˜7Lš‘ œ œ œ ˜CLš‘œ œ œ ˜.Lš‘œ œ œ ˜+Lš‘ œ œ œ œ ˜CLš‘ œ œ œ ˜@Lš‘ œ œ œ ˜;Lš‘œ œ œ ˜-Lš‘œ œ>  œ œ ˜gLš‘ œ œ) œ ˜OLš‘œ œ œ ˜0Lš‘ œ œ˜,Lš‘œ œ˜Lš‘œ œ œ ˜.Lš‘œ œ œ œ˜0Lš‘œ œ) œ ˜HL˜—Lšœ™˜Lš‘œ œ˜Lš‘œ œ˜L˜Lš‘ œ œ3 œ œ ˜]Lš‘ œ œ œ ˜3Lš‘ œ œ œ ˜6Lš‘œ œ œ˜ELš‘œ œ œ˜ELš‘œ œ œ ˜0Lš ‘œ œ+ œ œ œ ˜\Lš‘ œ œ œ ˜6Lš‘ œ œ œ˜(Lš‘œ œ œ œ ˜ELš‘œ œ œ œ ˜CLš‘ œ ˜Lš‘ œ œ  œ˜-Lš‘œ œ, œ ˜Lš‘œ œ œ œ˜3L™‰—Lš‘ œ œ œ˜NLš‘œ œ œ˜Lš‘œ œ œ˜Lš‘œ œ˜ Lš‘œ œ œ˜Lš‘œ œ˜%Lš‘œ œ œ˜š‘œ œ! œ˜3Lšœ  œ œ™C—L˜—Lšœ™˜Lš‘œ œ œ ˜.Lš‘œ œ  œ˜ALš‘œ œ œ  œ˜=š‘œ œ  œ œ˜(L™š—Lš‘œ œ œ ˜+Lš‘œ œ  œ ˜5Lš‘œ œ œ ˜0Lš‘œ œ œ ˜.L˜š‘ œ œ˜L˜—˜L˜———…—t/ν