|
@@ -373,8 +373,13 @@ Begin
|
|
|
Else
|
|
|
{change "imul $1, reg1, reg2" to "mov reg1, reg2"}
|
|
|
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),
|
|
|
TRegister(TwoWords(Pai386(p)^.op2).Word2)));
|
|
|
+{$EndIf USE_OP3}
|
|
|
hp1^.fileinfo := p^.fileinfo;
|
|
|
InsertLLItem(AsmL, p^.previous, p^.next, hp1);
|
|
|
Dispose(p, Done);
|
|
@@ -401,13 +406,22 @@ Begin
|
|
|
lea (reg1,reg1,2), reg2
|
|
|
imul 3, reg1 to
|
|
|
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^.Index := TRegister(twowords(Pai386(p)^.op2).Word1);
|
|
|
+{$EndIf USE_OP3}
|
|
|
TmpRef^.ScaleFactor := 2;
|
|
|
If (Pai386(p)^.op3t = Top_None)
|
|
|
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,
|
|
|
+{$IfDef USE_OP3}
|
|
|
+ TRegister(Pai386(p)^.op3)));
|
|
|
+{$Else USE_OP3}
|
|
|
TRegister(twowords(Pai386(p)^.op2).word2)));
|
|
|
+{$EndIf USE_OP3}
|
|
|
hp1^.fileinfo := p^.fileinfo;
|
|
|
InsertLLItem(AsmL,p^.previous, p^.next, hp1);
|
|
|
Dispose(p, Done);
|
|
@@ -418,13 +432,22 @@ Begin
|
|
|
lea (reg1,reg1,4), reg2
|
|
|
imul 5, reg1 to
|
|
|
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^.Index := TRegister(twowords(Pai386(p)^.op2).Word1);
|
|
|
+{$EndIf USE_OP3}
|
|
|
TmpRef^.ScaleFactor := 4;
|
|
|
If (Pai386(p)^.op3t = Top_None)
|
|
|
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,
|
|
|
+{$IfDef USE_OP3}
|
|
|
+ TRegister(Pai386(p)^.op3)));
|
|
|
+{$Else USE_OP3}
|
|
|
TRegister(twowords(Pai386(p)^.op2).word2)));
|
|
|
+{$EndIf USE_OP3}
|
|
|
hp1^.fileinfo:= p^.fileinfo;
|
|
|
InsertLLItem(AsmL,p^.previous, p^.next, hp1);
|
|
|
Dispose(p, Done);
|
|
@@ -440,14 +463,26 @@ Begin
|
|
|
If (aktoptprocessor <= Class386)
|
|
|
Then
|
|
|
Begin
|
|
|
+{$IfDef USE_OP3}
|
|
|
+ TmpRef^.Index := TRegister(Pai386(p)^.op2);
|
|
|
+{$Else USE_OP3}
|
|
|
TmpRef^.Index := TRegister(twowords(Pai386(p)^.op2).Word1);
|
|
|
+{$EndIf USE_OP3}
|
|
|
If (Pai386(p)^.op3t = Top_Reg)
|
|
|
Then
|
|
|
Begin
|
|
|
+{$IfDef USE_OP3}
|
|
|
+ TmpRef^.base := TRegister(Pai386(p)^.op3);
|
|
|
+{$Else USE_OP3}
|
|
|
TmpRef^.base := TRegister(twowords(Pai386(p)^.op2).word2);
|
|
|
+{$EndIf USE_OP3}
|
|
|
TmpRef^.ScaleFactor := 4;
|
|
|
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)));
|
|
|
+{$EndIf USE_OP3}
|
|
|
End
|
|
|
Else
|
|
|
Begin
|
|
@@ -459,14 +494,22 @@ Begin
|
|
|
InsertLLItem(AsmL,p, p^.next, hp1);
|
|
|
New(TmpRef);
|
|
|
Reset_reference(TmpRef^);
|
|
|
+{$IfDef USE_OP3}
|
|
|
+ TmpRef^.Index := TRegister(Pai386(p)^.op2);
|
|
|
+{$Else USE_OP3}
|
|
|
TmpRef^.Index := TRegister(twowords(Pai386(p)^.op2).Word1);
|
|
|
+{$EndIf USE_OP3}
|
|
|
TmpRef^.ScaleFactor := 2;
|
|
|
If (Pai386(p)^.op3t = Top_Reg)
|
|
|
Then
|
|
|
Begin
|
|
|
TmpRef^.base := R_NO;
|
|
|
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)));
|
|
|
+{$EndIf USE_OP3}
|
|
|
End
|
|
|
Else
|
|
|
Begin
|
|
@@ -485,13 +528,22 @@ Begin
|
|
|
lea (reg1,reg1,8), reg2
|
|
|
imul 9, reg1 to
|
|
|
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^.Index := TRegister(twowords(Pai386(p)^.op2).Word1);
|
|
|
+{$EndIf USE_OP3}
|
|
|
TmpRef^.ScaleFactor := 8;
|
|
|
If (Pai386(p)^.op3t = Top_None)
|
|
|
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,
|
|
|
+{$IfDef USE_OP3}
|
|
|
+ TRegister(Pai386(p)^.op3)));
|
|
|
+{$Else USE_OP3}
|
|
|
TRegister(twowords(Pai386(p)^.op2).word2)));
|
|
|
+{$EndIf USE_OP3}
|
|
|
hp1^.fileinfo := p^.fileinfo;
|
|
|
InsertLLItem(AsmL,p^.previous, p^.next, hp1);
|
|
|
Dispose(p, Done);
|
|
@@ -509,19 +561,33 @@ Begin
|
|
|
If (Pai386(p)^.op3t = Top_Reg)
|
|
|
Then
|
|
|
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)))
|
|
|
+{$EndIf USE_OP3}
|
|
|
Else hp1 := New(Pai386, op_reg_reg(A_ADD, S_L,
|
|
|
TRegister(Pai386(p)^.op2), TRegister(Pai386(p)^.op2)));
|
|
|
hp1^.fileinfo := p^.fileinfo;
|
|
|
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^.Index := TRegister(twowords(Pai386(p)^.op2).Word1);
|
|
|
+{$EndIf USE_OP3}
|
|
|
TmpRef^.ScaleFactor := 4;
|
|
|
If (Pai386(p)^.op3t = Top_Reg)
|
|
|
Then
|
|
|
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)))
|
|
|
+{$EndIf USE_OP3}
|
|
|
Else
|
|
|
hp1 := New(Pai386, op_ref_reg(A_LEA, S_L, TmpRef,
|
|
|
TRegister(Pai386(p)^.op2)));
|
|
@@ -542,14 +608,26 @@ Begin
|
|
|
If (aktoptprocessor <= Class386)
|
|
|
Then
|
|
|
Begin
|
|
|
+{$IfDef USE_OP3}
|
|
|
+ TmpRef^.Index := TRegister(Pai386(p)^.op2);
|
|
|
+{$Else USE_OP3}
|
|
|
TmpRef^.Index := TRegister(twowords(Pai386(p)^.op2).Word1);
|
|
|
+{$EndIf USE_OP3}
|
|
|
If (Pai386(p)^.op3t = Top_Reg)
|
|
|
Then
|
|
|
Begin
|
|
|
+{$IfDef USE_OP3}
|
|
|
+ TmpRef^.base := TRegister(Pai386(p)^.op3);
|
|
|
+{$Else USE_OP3}
|
|
|
TmpRef^.base := TRegister(twowords(Pai386(p)^.op2).word2);
|
|
|
+{$EndIf USE_OP3}
|
|
|
TmpRef^.ScaleFactor := 8;
|
|
|
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)));
|
|
|
+{$EndIf USE_OP3}
|
|
|
End
|
|
|
Else
|
|
|
Begin
|
|
@@ -562,14 +640,22 @@ Begin
|
|
|
InsertLLItem(AsmL,p, p^.next, hp1);
|
|
|
New(TmpRef);
|
|
|
Reset_reference(TmpRef^);
|
|
|
+{$IfDef USE_OP3}
|
|
|
+ TmpRef^.Index := TRegister(Pai386(p)^.op2);
|
|
|
+{$Else USE_OP3}
|
|
|
TmpRef^.Index := TRegister(twowords(Pai386(p)^.op2).Word1);
|
|
|
+{$EndIf USE_OP3}
|
|
|
If (Pai386(p)^.op3t = Top_Reg)
|
|
|
Then
|
|
|
Begin
|
|
|
TmpRef^.base := R_NO;
|
|
|
TmpRef^.ScaleFactor := 4;
|
|
|
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)));
|
|
|
+{$EndIf USE_OP3}
|
|
|
End
|
|
|
Else
|
|
|
Begin
|
|
@@ -1591,7 +1677,10 @@ End.
|
|
|
|
|
|
{
|
|
|
$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
|
|
|
+ -ar to show regalloc info in .s file
|
|
|
|