-- file PeepholeDefs.mesa
-- last edited by Sweet 9-Oct-81 9:41:10
-- last edited by Satterthwaite December 16, 1982 8:51 am
DIRECTORY
Alloc: TYPE USING [Notifier],
CodeDefs: TYPE USING [
BYTE, CCIndex, CodeCCIndex, CodeCCNull, JumpCCIndex, JumpType, JumpCCNull],
FOpCodes: TYPE USING [qNULL],
PrincOps: TYPE USING [FieldDescriptor];
PeepholeDefs: DEFINITIONS = {
BYTE: TYPE = CodeDefs.BYTE;
PeepComponent: TYPE = RECORD [
index: CodeDefs.CodeCCIndex,
inst: BYTE,
params: ARRAY [1..3] OF WORD];
NullComponent: PeepComponent = [
index: CodeDefs.CodeCCNull,
inst: FOpCodes.qNULL,
params: [0,0,0]];
PeepState: TYPE = RECORD [ -- can't use current Machine Dep since holes
SELECT OVERLAID * FROM
old => [
a: CodeDefs.CodeCCIndex,
aInst: BYTE,
aP: ARRAY [1..3] OF WORD,
b: CodeDefs.CodeCCIndex,
bInst: BYTE,
bP: ARRAY [1..3] OF WORD,
c: CodeDefs.CodeCCIndex,
cInst: BYTE,
cP: ARRAY [1..3] OF WORD],
fast => [aComp, bComp, cComp: PeepComponent],
ENDCASE];
NullState: PeepState = [fast[NullComponent, NullComponent, NullComponent]];
JumpPeepState: TYPE = RECORD[
c: CodeDefs.JumpCCIndex,
bP, cP: ARRAY [1..3] OF WORD,
bInst: BYTE,
b: CodeDefs.CodeCCIndex,
cInst: BYTE];
NullJumpState: JumpPeepState = [
c: CodeDefs.JumpCCNull,
bP: [0,0,0],
cP: [0,0,0],
bInst: FOpCodes.qNULL,
b: CodeDefs.CodeCCNull,
cInst: FOpCodes.qNULL];
ConsPeepState: TYPE = RECORD [a, b, c, d: PeepComponent];
NullConsState: ConsPeepState = [
NullComponent, NullComponent, NullComponent, NullComponent];
StateExtent: TYPE = {abc, bc, c};
CJump: ARRAY CodeDefs.JumpType[JumpE..ZJumpN] OF CodeDefs.JumpType = [
JumpN, JumpE, JumpGE, JumpL, JumpLE, JumpG,
UJumpGE, UJumpL, UJumpLE, UJumpG, ZJumpN, ZJumpE];
SetRealInst: PROC [BOOL];
NextInteresting: PROC [c: CodeDefs.CCIndex] RETURNS [CodeDefs.CCIndex];
PrevInteresting: PROC [c: CodeDefs.CCIndex] RETURNS [CodeDefs.CCIndex];
InitParameters: PROC [
p: POINTER TO PeepState, ci: CodeDefs.CodeCCIndex, extent: StateExtent];
InitConsState: PROC [p: POINTER TO ConsPeepState, di: CodeDefs.CodeCCIndex];
InitJParametersBC: PROC [
p: POINTER TO JumpPeepState, ci: CodeDefs.JumpCCIndex];
SlidePeepState2: PROC [p: POINTER TO PeepState, ci: CodeDefs.CodeCCIndex];
SlidePeepState1: PROC [p: POINTER TO PeepState, ci: CodeDefs.CodeCCIndex];
SlideConsState: PROC [p: POINTER TO ConsPeepState, di: CodeDefs.CodeCCIndex];
PeepZ: PROC [start: CodeDefs.CodeCCIndex];
HalfByteGlobal: PROC [c: CodeDefs.CCIndex, double: BOOL ← FALSE] RETURNS [BOOL];
HalfByteLocal: PROC [c: CodeDefs.CCIndex, double: BOOL ← FALSE] RETURNS [BOOL];
LoadInst: PROC [c: CodeDefs.CCIndex] RETURNS [BOOL];
DblLoadInst: PROC [c: CodeDefs.CCIndex] RETURNS [BOOL];
PackPair: PROC [l, r: [0..16)] RETURNS [w: WORD];
UnpackPair: PROC [w: WORD] RETURNS [l, r: [0..16)];
UnpackFD: PROC [d: PrincOps.FieldDescriptor] RETURNS [p, s: CARDINAL];
Delete2: PROC [a, b: CodeDefs.CCIndex];
Delete3: PROC [a, b, c: CodeDefs.CCIndex];
RemoveThisPop: PROC [ci: CodeDefs.CCIndex] RETURNS [didThisTime: BOOL];
CommuteCells: PUBLIC PROC [a, b: CodeDefs.CCIndex];
start: VAR CodeDefs.CodeCCIndex;
NextIsPush: PROC [c: CodeDefs.CCIndex] RETURNS [BOOL];
Peep1, Peep2, Peep3, Peep4, Peep5, Peep6, Peep7, Peep8,
Peep9, Peep10, Peep11, Peep12: PROC;
PeepholeANotify, PeepholeUNotify, PeepholeZNotify: Alloc.Notifier;
}.