* changes to work with -dUSE_OP3

This commit is contained in:
Jonas Maebe 1999-04-16 15:16:29 +00:00
parent c7c74f2895
commit e16f0f99db
2 changed files with 146 additions and 8 deletions

View File

@ -190,9 +190,11 @@ Type
TLabelTable = Array[0..2500000] Of TLabelTableItem; TLabelTable = Array[0..2500000] Of TLabelTableItem;
{$Endif tp} {$Endif tp}
PLabelTable = ^TLabelTable; PLabelTable = ^TLabelTable;
{$IfNDef USE_OP3}
TwoWords = Record TwoWords = Record
Word1, Word2: Word; Word1, Word2: Word;
End; End;
{$EndIf USE_OP3}
{******************************* Variables *******************************} {******************************* Variables *******************************}
@ -1112,17 +1114,23 @@ Begin
If Not(TmpResult) Then If Not(TmpResult) Then
Case Pai386(p1)^.op2t Of Case Pai386(p1)^.op2t Of
Top_Reg: Top_Reg:
{$IfDef USE_OP3}
TmpResult := Reg = TRegister(Pai386(p1)^.op2);
{$Else USE_OP3}
if Pai386(p1)^.op3t<>Top_reg if Pai386(p1)^.op3t<>Top_reg
then TmpResult := Reg = TRegister(Pai386(p1)^.op2) then TmpResult := Reg = TRegister(Pai386(p1)^.op2)
else TmpResult := longint(Reg) = twowords(Pai386(p1)^.op2).word1; else TmpResult := longint(Reg) = twowords(Pai386(p1)^.op2).word1;
{$EndIf USE_OP3}
Top_Ref: TmpResult := RegInRef(Reg, TReference(Pai386(p1)^.op2^)) Top_Ref: TmpResult := RegInRef(Reg, TReference(Pai386(p1)^.op2^))
End; End;
If Not(TmpResult) Then If Not(TmpResult) Then
Case Pai386(p1)^.op3t Of Case Pai386(p1)^.op3t Of
Top_Reg: TmpResult := longint(Reg) =twowords(Pai386(p1)^.op2).word2; {$IfDef USE_OP3}
Top_none:; Top_Reg: TmpResult := Reg = TRegister(Pai386(p1)^.op3);
else Top_Ref: TmpResult := RegInRef(Reg, TReference(Pai386(p1)^.op3^));
internalerror($Da); {$Else USE_OP3}
Top_Reg: TmpResult := longint(Reg) = twowords(Pai386(p1)^.op2).word2;
{$EndIf USE_OP3}
End End
End; End;
RegInInstruction := TmpResult RegInInstruction := TmpResult
@ -1411,7 +1419,11 @@ Begin
Case Pai386(p)^.op2t Of Case Pai386(p)^.op2t Of
top_reg: top_reg:
If Not(TRegister(Pai386(p)^.op2) in [R_NO,R_ESP,ProcInfo.FramePointer]) Then If Not(TRegister(Pai386(p)^.op2) in [R_NO,R_ESP,ProcInfo.FramePointer]) Then
If RegSet := RegSet + [TRegister(TwoWords(Pai386(p)^.op2).Word1]; {$IfDef USE_OP3}
RegSet := RegSet + [TRegister(Pai386(p)^.op2)];
{$EndIf USE_OP3}
RegSet := RegSet + [TRegister(TwoWords(Pai386(p)^.op2).Word1];
{$EndIf USE_OP3}
top_ref: top_ref:
With TReference(Pai386(p)^.op2^) Do With TReference(Pai386(p)^.op2^) Do
Begin Begin
@ -1534,6 +1546,12 @@ Begin {checks whether two Pai386 instructions are equal}
End End
Else Else
{an instruction <> mov, movzx, movsx} {an instruction <> mov, movzx, movsx}
{$IfDef USE_OP3}
InstructionsEquivalent :=
OpsEquivalent(Pai386(p1)^.op1t, Pai386(p1)^.op1, Pai386(p2)^.op1, RegInfo, OpAct_Unknown) And
OpsEquivalent(Pai386(p1)^.op2t, Pai386(p1)^.op2, Pai386(p2)^.op2, RegInfo, OpAct_Unknown) And
OpsEquivalent(Pai386(p1)^.op3t, Pai386(p1)^.op3, Pai386(p2)^.op3, RegInfo, OpAct_Unknown)
{$Else USE_OP3}
If (Pai386(p1)^.op3t = top_none) Then If (Pai386(p1)^.op3t = top_none) Then
InstructionsEquivalent := InstructionsEquivalent :=
OpsEquivalent(Pai386(p1)^.op1t, Pai386(p1)^.op1, Pai386(p2)^.op1, RegInfo, OpAct_Unknown) And OpsEquivalent(Pai386(p1)^.op1t, Pai386(p1)^.op1, Pai386(p2)^.op1, RegInfo, OpAct_Unknown) And
@ -1545,6 +1563,7 @@ Begin {checks whether two Pai386 instructions are equal}
Pointer(Longint(TwoWords(Pai386(p2)^.op2).Word1)), RegInfo, OpAct_Unknown) And Pointer(Longint(TwoWords(Pai386(p2)^.op2).Word1)), RegInfo, OpAct_Unknown) And
OpsEquivalent(Pai386(p1)^.op3t, Pointer(Longint(TwoWords(Pai386(p1)^.op2).Word2)), OpsEquivalent(Pai386(p1)^.op3t, Pointer(Longint(TwoWords(Pai386(p1)^.op2).Word2)),
Pointer(Longint(TwoWords(Pai386(p2)^.op2).Word2)), RegInfo, OpAct_Unknown) Pointer(Longint(TwoWords(Pai386(p2)^.op2).Word2)), RegInfo, OpAct_Unknown)
{$EndIf USE_OP3}
{the instructions haven't even got the same structure, so they're certainly {the instructions haven't even got the same structure, so they're certainly
not equivalent} not equivalent}
Else InstructionsEquivalent := False; Else InstructionsEquivalent := False;
@ -2049,10 +2068,13 @@ Begin
A_IMUL: A_IMUL:
Begin Begin
ReadOp(CurProp, Pai386(p)^.Op1t, Pai386(p)^.Op1); ReadOp(CurProp, Pai386(p)^.Op1t, Pai386(p)^.Op1);
{$IfDef USE_OP3}
ReadOp(CurProp, Pai386(p)^.Op2t, Pai386(p)^.Op2);
{$Else USE_OP3}
If (Pai386(p)^.Op2t = Top_Ref) Then If (Pai386(p)^.Op2t = Top_Ref) Then
ReadOp(CurProp, Pai386(p)^.Op2t, Pai386(p)^.Op2) ReadOp(CurProp, Pai386(p)^.Op2t, Pai386(p)^.Op2)
Else ReadOp(CurProp, Pai386(p)^.Op2t, Pointer(Longint(TwoWords(Pai386(p)^.Op2).Word1))); Else ReadOp(CurProp, Pai386(p)^.Op2t, Pointer(Longint(TwoWords(Pai386(p)^.Op2).Word1)));
ReadOp(CurProp, Pai386(p)^.Op3t, Pointer(LongInt(TwoWords(Pai386(p)^.Op2).Word2))); {$EndIf USE_OP3}
If (Pai386(p)^.Op3t = top_none) If (Pai386(p)^.Op3t = top_none)
Then Then
If (Pai386(p)^.Op2t = top_none) If (Pai386(p)^.Op2t = top_none)
@ -2062,7 +2084,11 @@ Begin
DestroyReg(CurProp, R_EDX) DestroyReg(CurProp, R_EDX)
End End
Else Destroy(p, Pai386(p)^.Op2t, Pai386(p)^.Op2) Else Destroy(p, Pai386(p)^.Op2t, Pai386(p)^.Op2)
{$IfDef USE_OP3}
Else Destroy(p, Pai386(p)^.Op3t, Pai386(p)^.Op3);
{$Else USE_OP3}
Else DestroyReg(CurProp, TRegister(longint(twowords(Pai386(p)^.Op2).word2))); Else DestroyReg(CurProp, TRegister(longint(twowords(Pai386(p)^.Op2).word2)));
{$EndIf USE_OP3}
End; End;
A_XOR: A_XOR:
Begin Begin
@ -2096,16 +2122,35 @@ Begin
C_CDirFlag: CurProp^.DirFlag := F_NotSet; C_CDirFlag: CurProp^.DirFlag := F_NotSet;
C_SDirFlag: CurProp^.DirFlag := F_Set; C_SDirFlag: CurProp^.DirFlag := F_Set;
C_ROp1: ReadOp(CurProp, Pai386(p)^.op1t, Pai386(p)^.op1); C_ROp1: ReadOp(CurProp, Pai386(p)^.op1t, Pai386(p)^.op1);
{$IfDef USE_OP3}
C_ROp2: ReadOp(CurProp, Pai386(p)^.op2t, Pai386(p)^.op2);
C_ROp3: ReadOp(CurProp, Pai386(p)^.op3t, Pai386(p)^.op3);
{$Else USE_OP3}
C_ROp2: If (Pai386(p)^.Op3t = top_none) Then C_ROp2: If (Pai386(p)^.Op3t = top_none) Then
ReadOp(CurProp, Pai386(p)^.op2t, Pai386(p)^.op2) ReadOp(CurProp, Pai386(p)^.op2t, Pai386(p)^.op2)
Else ReadOp(CurProp, Pai386(p)^.op2t, Pointer(Longint(TwoWords(Pai386(p)^.op2).word1))); Else ReadOp(CurProp, Pai386(p)^.op2t, Pointer(Longint(TwoWords(Pai386(p)^.op2).word1)));
C_ROp3: ReadOp(CurProp, Pai386(p)^.op3t, Pointer(Longint(TwoWords(Pai386(p)^.op2).word2))); C_ROp3: ReadOp(CurProp, Pai386(p)^.op3t, Pointer(Longint(TwoWords(Pai386(p)^.op2).word2)));
{$EndIf USE_OP3}
C_WOp1..C_RWOp1: C_WOp1..C_RWOp1:
Begin Begin
If (InstrProp.Ch[Cnt] = C_RWOp1) Then If (InstrProp.Ch[Cnt] = C_RWOp1) Then
ReadOp(CurProp, Pai386(p)^.op1t, Pai386(p)^.op1); ReadOp(CurProp, Pai386(p)^.op1t, Pai386(p)^.op1);
Destroy(p, Pai386(p)^.op1t, Pai386(p)^.op1); Destroy(p, Pai386(p)^.op1t, Pai386(p)^.op1);
End; End;
{$IfDef USE_OP3}
C_WOp2..C_RWOp2:
Begin
If (InstrProp.Ch[Cnt] = C_RWOp2) Then
ReadOp(CurProp, Pai386(p)^.op2t, Pai386(p)^.op2);
Destroy(p, Pai386(p)^.op2t, Pai386(p)^.op2);
End;
C_WOp3..C_RWOp3:
Begin
If (InstrProp.Ch[Cnt] = C_RWOp3) Then
ReadOp(CurProp, Pai386(p)^.op3t, Pai386(p)^.op3);
Destroy(p, Pai386(p)^.op3t, Pai386(p)^.op3);
End;
{$Else USE_OP3}
C_WOp2..C_RWOp2: C_WOp2..C_RWOp2:
Begin Begin
If (InstrProp.Ch[Cnt] = C_RWOp2) Then If (InstrProp.Ch[Cnt] = C_RWOp2) Then
@ -2122,6 +2167,7 @@ Begin
ReadOp(CurProp, Pai386(p)^.op3t, Pointer(Longint(TwoWords(Pai386(p)^.op2).word2))); ReadOp(CurProp, Pai386(p)^.op3t, Pointer(Longint(TwoWords(Pai386(p)^.op2).word2)));
Destroy(p, Pai386(p)^.op3t, Pointer(Longint(TwoWords(Pai386(p)^.op2).word2))); Destroy(p, Pai386(p)^.op3t, Pointer(Longint(TwoWords(Pai386(p)^.op2).word2)));
End; End;
{$EndIf USE_OP3}
C_WMemEDI: C_WMemEDI:
Begin Begin
ReadReg(CurProp, R_EDI); ReadReg(CurProp, R_EDI);
@ -2240,7 +2286,10 @@ End.
{ {
$Log$ $Log$
Revision 1.41 1999-04-16 13:42:33 jonas Revision 1.42 1999-04-16 15:16:31 jonas
* changes to work with -dUSE_OP3
Revision 1.41 1999/04/16 13:42:33 jonas
* more regalloc fixes (still not complete) * more regalloc fixes (still not complete)
Revision 1.40 1999/04/16 11:49:41 peter Revision 1.40 1999/04/16 11:49:41 peter

View File

@ -373,8 +373,13 @@ Begin
Else Else
{change "imul $1, reg1, reg2" to "mov reg1, reg2"} {change "imul $1, reg1, reg2" to "mov reg1, reg2"}
Begin Begin
{$IfDef USE_OP3}
hp1 := New(Pai386, Op_Reg_Reg(A_MOV, S_L, TRegister(Pai386(p)^.op2),
TRegister(Pai386(p)^.op3)));
{$Else USE_OP3}
hp1 := New(Pai386, Op_Reg_Reg(A_MOV, S_L, TRegister(TwoWords(Pai386(p)^.op2).Word1), hp1 := New(Pai386, Op_Reg_Reg(A_MOV, S_L, TRegister(TwoWords(Pai386(p)^.op2).Word1),
TRegister(TwoWords(Pai386(p)^.op2).Word2))); TRegister(TwoWords(Pai386(p)^.op2).Word2)));
{$EndIf USE_OP3}
hp1^.fileinfo := p^.fileinfo; hp1^.fileinfo := p^.fileinfo;
InsertLLItem(AsmL, p^.previous, p^.next, hp1); InsertLLItem(AsmL, p^.previous, p^.next, hp1);
Dispose(p, Done); Dispose(p, Done);
@ -401,13 +406,22 @@ Begin
lea (reg1,reg1,2), reg2 lea (reg1,reg1,2), reg2
imul 3, reg1 to imul 3, reg1 to
lea (reg1,reg1,2), reg1} lea (reg1,reg1,2), reg1}
{$IfDef USE_OP3}
TmpRef^.base := TRegister(Pai386(p)^.op2);
TmpRef^.Index := TRegister(Pai386(p)^.op2);
{$Else USE_OP3}
TmpRef^.base := TRegister(twowords(Pai386(p)^.op2).Word1); TmpRef^.base := TRegister(twowords(Pai386(p)^.op2).Word1);
TmpRef^.Index := TRegister(twowords(Pai386(p)^.op2).Word1); TmpRef^.Index := TRegister(twowords(Pai386(p)^.op2).Word1);
{$EndIf USE_OP3}
TmpRef^.ScaleFactor := 2; TmpRef^.ScaleFactor := 2;
If (Pai386(p)^.op3t = Top_None) If (Pai386(p)^.op3t = Top_None)
Then hp1 := New(Pai386, op_ref_reg(A_LEA, S_L, TmpRef, TRegister(Pai386(p)^.op2))) Then hp1 := New(Pai386, op_ref_reg(A_LEA, S_L, TmpRef, TRegister(Pai386(p)^.op2)))
Else hp1 := New(Pai386, op_ref_reg(A_LEA, S_L, TmpRef, Else hp1 := New(Pai386, op_ref_reg(A_LEA, S_L, TmpRef,
{$IfDef USE_OP3}
TRegister(Pai386(p)^.op3)));
{$Else USE_OP3}
TRegister(twowords(Pai386(p)^.op2).word2))); TRegister(twowords(Pai386(p)^.op2).word2)));
{$EndIf USE_OP3}
hp1^.fileinfo := p^.fileinfo; hp1^.fileinfo := p^.fileinfo;
InsertLLItem(AsmL,p^.previous, p^.next, hp1); InsertLLItem(AsmL,p^.previous, p^.next, hp1);
Dispose(p, Done); Dispose(p, Done);
@ -418,13 +432,22 @@ Begin
lea (reg1,reg1,4), reg2 lea (reg1,reg1,4), reg2
imul 5, reg1 to imul 5, reg1 to
lea (reg1,reg1,4), reg1} lea (reg1,reg1,4), reg1}
{$IfDef USE_OP3}
TmpRef^.base := TRegister(Pai386(p)^.op2);
TmpRef^.Index := TRegister(Pai386(p)^.op2);
{$Else USE_OP3}
TmpRef^.base := TRegister(twowords(Pai386(p)^.op2).Word1); TmpRef^.base := TRegister(twowords(Pai386(p)^.op2).Word1);
TmpRef^.Index := TRegister(twowords(Pai386(p)^.op2).Word1); TmpRef^.Index := TRegister(twowords(Pai386(p)^.op2).Word1);
{$EndIf USE_OP3}
TmpRef^.ScaleFactor := 4; TmpRef^.ScaleFactor := 4;
If (Pai386(p)^.op3t = Top_None) If (Pai386(p)^.op3t = Top_None)
Then hp1 := New(Pai386, op_ref_reg(A_LEA, S_L, TmpRef, TRegister(Pai386(p)^.op2))) Then hp1 := New(Pai386, op_ref_reg(A_LEA, S_L, TmpRef, TRegister(Pai386(p)^.op2)))
Else hp1 := New(Pai386, op_ref_reg(A_LEA, S_L, TmpRef, Else hp1 := New(Pai386, op_ref_reg(A_LEA, S_L, TmpRef,
{$IfDef USE_OP3}
TRegister(Pai386(p)^.op3)));
{$Else USE_OP3}
TRegister(twowords(Pai386(p)^.op2).word2))); TRegister(twowords(Pai386(p)^.op2).word2)));
{$EndIf USE_OP3}
hp1^.fileinfo:= p^.fileinfo; hp1^.fileinfo:= p^.fileinfo;
InsertLLItem(AsmL,p^.previous, p^.next, hp1); InsertLLItem(AsmL,p^.previous, p^.next, hp1);
Dispose(p, Done); Dispose(p, Done);
@ -440,14 +463,26 @@ Begin
If (aktoptprocessor <= Class386) If (aktoptprocessor <= Class386)
Then Then
Begin Begin
{$IfDef USE_OP3}
TmpRef^.Index := TRegister(Pai386(p)^.op2);
{$Else USE_OP3}
TmpRef^.Index := TRegister(twowords(Pai386(p)^.op2).Word1); TmpRef^.Index := TRegister(twowords(Pai386(p)^.op2).Word1);
{$EndIf USE_OP3}
If (Pai386(p)^.op3t = Top_Reg) If (Pai386(p)^.op3t = Top_Reg)
Then Then
Begin Begin
{$IfDef USE_OP3}
TmpRef^.base := TRegister(Pai386(p)^.op3);
{$Else USE_OP3}
TmpRef^.base := TRegister(twowords(Pai386(p)^.op2).word2); TmpRef^.base := TRegister(twowords(Pai386(p)^.op2).word2);
{$EndIf USE_OP3}
TmpRef^.ScaleFactor := 4; TmpRef^.ScaleFactor := 4;
hp1 := New(Pai386, op_ref_reg(A_LEA, S_L, TmpRef, hp1 := New(Pai386, op_ref_reg(A_LEA, S_L, TmpRef,
{$IfDef USE_OP3}
TRegister(Pai386(p)^.op3)));
{$Else USE_OP3}
TRegister(twowords(Pai386(p)^.op2).word2))); TRegister(twowords(Pai386(p)^.op2).word2)));
{$EndIf USE_OP3}
End End
Else Else
Begin Begin
@ -459,14 +494,22 @@ Begin
InsertLLItem(AsmL,p, p^.next, hp1); InsertLLItem(AsmL,p, p^.next, hp1);
New(TmpRef); New(TmpRef);
Reset_reference(TmpRef^); Reset_reference(TmpRef^);
{$IfDef USE_OP3}
TmpRef^.Index := TRegister(Pai386(p)^.op2);
{$Else USE_OP3}
TmpRef^.Index := TRegister(twowords(Pai386(p)^.op2).Word1); TmpRef^.Index := TRegister(twowords(Pai386(p)^.op2).Word1);
{$EndIf USE_OP3}
TmpRef^.ScaleFactor := 2; TmpRef^.ScaleFactor := 2;
If (Pai386(p)^.op3t = Top_Reg) If (Pai386(p)^.op3t = Top_Reg)
Then Then
Begin Begin
TmpRef^.base := R_NO; TmpRef^.base := R_NO;
hp1 := New(Pai386, op_ref_reg(A_LEA, S_L, TmpRef, hp1 := New(Pai386, op_ref_reg(A_LEA, S_L, TmpRef,
{$IfDef USE_OP3}
TRegister(Pai386(p)^.op3)));
{$Else USE_OP3}
TRegister(twowords(Pai386(p)^.op2).word2))); TRegister(twowords(Pai386(p)^.op2).word2)));
{$EndIf USE_OP3}
End End
Else Else
Begin Begin
@ -485,13 +528,22 @@ Begin
lea (reg1,reg1,8), reg2 lea (reg1,reg1,8), reg2
imul 9, reg1 to imul 9, reg1 to
lea (reg1,reg1,8), reg1} lea (reg1,reg1,8), reg1}
{$IfDef USE_OP3}
TmpRef^.base := TRegister(Pai386(p)^.op2);
TmpRef^.Index := TRegister(Pai386(p)^.op2);
{$Else USE_OP3}
TmpRef^.base := TRegister(twowords(Pai386(p)^.op2).Word1); TmpRef^.base := TRegister(twowords(Pai386(p)^.op2).Word1);
TmpRef^.Index := TRegister(twowords(Pai386(p)^.op2).Word1); TmpRef^.Index := TRegister(twowords(Pai386(p)^.op2).Word1);
{$EndIf USE_OP3}
TmpRef^.ScaleFactor := 8; TmpRef^.ScaleFactor := 8;
If (Pai386(p)^.op3t = Top_None) If (Pai386(p)^.op3t = Top_None)
Then hp1 := New(Pai386, op_ref_reg(A_LEA, S_L, TmpRef, TRegister(Pai386(p)^.op2))) Then hp1 := New(Pai386, op_ref_reg(A_LEA, S_L, TmpRef, TRegister(Pai386(p)^.op2)))
Else hp1 := New(Pai386, op_ref_reg(A_LEA, S_L, TmpRef, Else hp1 := New(Pai386, op_ref_reg(A_LEA, S_L, TmpRef,
{$IfDef USE_OP3}
TRegister(Pai386(p)^.op3)));
{$Else USE_OP3}
TRegister(twowords(Pai386(p)^.op2).word2))); TRegister(twowords(Pai386(p)^.op2).word2)));
{$EndIf USE_OP3}
hp1^.fileinfo := p^.fileinfo; hp1^.fileinfo := p^.fileinfo;
InsertLLItem(AsmL,p^.previous, p^.next, hp1); InsertLLItem(AsmL,p^.previous, p^.next, hp1);
Dispose(p, Done); Dispose(p, Done);
@ -509,19 +561,33 @@ Begin
If (Pai386(p)^.op3t = Top_Reg) If (Pai386(p)^.op3t = Top_Reg)
Then Then
hp1 := New(Pai386, op_reg_reg(A_ADD, S_L, hp1 := New(Pai386, op_reg_reg(A_ADD, S_L,
{$IfDef USE_OP3}
Tregister(Pai386(p)^.op3),
Tregister(Pai386(p)^.op3)))
{$Else USE_OP3}
Tregister(twowords(Pai386(p)^.op2).word2), Tregister(twowords(Pai386(p)^.op2).word2),
Tregister(twowords(Pai386(p)^.op2).word2))) Tregister(twowords(Pai386(p)^.op2).word2)))
{$EndIf USE_OP3}
Else hp1 := New(Pai386, op_reg_reg(A_ADD, S_L, Else hp1 := New(Pai386, op_reg_reg(A_ADD, S_L,
TRegister(Pai386(p)^.op2), TRegister(Pai386(p)^.op2))); TRegister(Pai386(p)^.op2), TRegister(Pai386(p)^.op2)));
hp1^.fileinfo := p^.fileinfo; hp1^.fileinfo := p^.fileinfo;
InsertLLItem(AsmL,p, p^.next, hp1); InsertLLItem(AsmL,p, p^.next, hp1);
{$IfDef USE_OP3}
TmpRef^.base := TRegister(Pai386(p)^.op2);
TmpRef^.Index := TRegister(Pai386(p)^.op2);
{$Else USE_OP3}
TmpRef^.base := TRegister(twowords(Pai386(p)^.op2).Word1); TmpRef^.base := TRegister(twowords(Pai386(p)^.op2).Word1);
TmpRef^.Index := TRegister(twowords(Pai386(p)^.op2).Word1); TmpRef^.Index := TRegister(twowords(Pai386(p)^.op2).Word1);
{$EndIf USE_OP3}
TmpRef^.ScaleFactor := 4; TmpRef^.ScaleFactor := 4;
If (Pai386(p)^.op3t = Top_Reg) If (Pai386(p)^.op3t = Top_Reg)
Then Then
hp1 := New(Pai386, op_ref_reg(A_LEA, S_L, TmpRef, hp1 := New(Pai386, op_ref_reg(A_LEA, S_L, TmpRef,
{$IfDef USE_OP3}
TRegister(Pai386(p)^.op3)))
{$Else USE_OP3}
TRegister(twowords(Pai386(p)^.op2).word2))) TRegister(twowords(Pai386(p)^.op2).word2)))
{$EndIf USE_OP3}
Else Else
hp1 := New(Pai386, op_ref_reg(A_LEA, S_L, TmpRef, hp1 := New(Pai386, op_ref_reg(A_LEA, S_L, TmpRef,
TRegister(Pai386(p)^.op2))); TRegister(Pai386(p)^.op2)));
@ -542,14 +608,26 @@ Begin
If (aktoptprocessor <= Class386) If (aktoptprocessor <= Class386)
Then Then
Begin Begin
{$IfDef USE_OP3}
TmpRef^.Index := TRegister(Pai386(p)^.op2);
{$Else USE_OP3}
TmpRef^.Index := TRegister(twowords(Pai386(p)^.op2).Word1); TmpRef^.Index := TRegister(twowords(Pai386(p)^.op2).Word1);
{$EndIf USE_OP3}
If (Pai386(p)^.op3t = Top_Reg) If (Pai386(p)^.op3t = Top_Reg)
Then Then
Begin Begin
{$IfDef USE_OP3}
TmpRef^.base := TRegister(Pai386(p)^.op3);
{$Else USE_OP3}
TmpRef^.base := TRegister(twowords(Pai386(p)^.op2).word2); TmpRef^.base := TRegister(twowords(Pai386(p)^.op2).word2);
{$EndIf USE_OP3}
TmpRef^.ScaleFactor := 8; TmpRef^.ScaleFactor := 8;
hp1 := New(Pai386, op_ref_reg(A_LEA, S_L, TmpRef, hp1 := New(Pai386, op_ref_reg(A_LEA, S_L, TmpRef,
{$IfDef USE_OP3}
TRegister(Pai386(p)^.op3)));
{$Else USE_OP3}
TRegister(twowords(Pai386(p)^.op2).word2))); TRegister(twowords(Pai386(p)^.op2).word2)));
{$EndIf USE_OP3}
End End
Else Else
Begin Begin
@ -562,14 +640,22 @@ Begin
InsertLLItem(AsmL,p, p^.next, hp1); InsertLLItem(AsmL,p, p^.next, hp1);
New(TmpRef); New(TmpRef);
Reset_reference(TmpRef^); Reset_reference(TmpRef^);
{$IfDef USE_OP3}
TmpRef^.Index := TRegister(Pai386(p)^.op2);
{$Else USE_OP3}
TmpRef^.Index := TRegister(twowords(Pai386(p)^.op2).Word1); TmpRef^.Index := TRegister(twowords(Pai386(p)^.op2).Word1);
{$EndIf USE_OP3}
If (Pai386(p)^.op3t = Top_Reg) If (Pai386(p)^.op3t = Top_Reg)
Then Then
Begin Begin
TmpRef^.base := R_NO; TmpRef^.base := R_NO;
TmpRef^.ScaleFactor := 4; TmpRef^.ScaleFactor := 4;
hp1 := New(Pai386, op_ref_reg(A_LEA, S_L, TmpRef, hp1 := New(Pai386, op_ref_reg(A_LEA, S_L, TmpRef,
{$IfDef USE_OP3}
TRegister(Pai386(p)^.op3)));
{$Else USE_OP3}
TRegister(twowords(Pai386(p)^.op2).word2))); TRegister(twowords(Pai386(p)^.op2).word2)));
{$EndIf USE_OP3}
End End
Else Else
Begin Begin
@ -1591,7 +1677,10 @@ End.
{ {
$Log$ $Log$
Revision 1.42 1999-04-10 16:15:04 peter Revision 1.43 1999-04-16 15:16:29 jonas
* changes to work with -dUSE_OP3
Revision 1.42 1999/04/10 16:15:04 peter
* fixed browcol * fixed browcol
+ -ar to show regalloc info in .s file + -ar to show regalloc info in .s file