Browse Source

* skipped vesion 1.44 :(

peter 26 years ago
parent
commit
67aad628f8
1 changed files with 66 additions and 62 deletions
  1. 66 62
      compiler/popt386.pas

+ 66 - 62
compiler/popt386.pas

@@ -373,13 +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}
+{$IfNDef NO_OP3}
                           hp1 := New(Pai386, Op_Reg_Reg(A_MOV, S_L, TRegister(Pai386(p)^.op2),
                           hp1 := New(Pai386, Op_Reg_Reg(A_MOV, S_L, TRegister(Pai386(p)^.op2),
                                                         TRegister(Pai386(p)^.op3)));
                                                         TRegister(Pai386(p)^.op3)));
-{$Else USE_OP3}
+{$Else NO_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}
+{$EndIf NO_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);
@@ -406,22 +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}
+{$IfNDef NO_OP3}
                                TmpRef^.base := TRegister(Pai386(p)^.op2);
                                TmpRef^.base := TRegister(Pai386(p)^.op2);
                                TmpRef^.Index := TRegister(Pai386(p)^.op2);
                                TmpRef^.Index := TRegister(Pai386(p)^.op2);
-{$Else USE_OP3}
+{$Else NO_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}
+{$EndIf NO_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}
+{$IfNDef NO_OP3}
                                   TRegister(Pai386(p)^.op3)));
                                   TRegister(Pai386(p)^.op3)));
-{$Else USE_OP3}
+{$Else NO_OP3}
                                   TRegister(twowords(Pai386(p)^.op2).word2)));
                                   TRegister(twowords(Pai386(p)^.op2).word2)));
-{$EndIf USE_OP3}
+{$EndIf NO_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);
@@ -432,22 +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}
+{$IfNDef NO_OP3}
                               TmpRef^.base := TRegister(Pai386(p)^.op2);
                               TmpRef^.base := TRegister(Pai386(p)^.op2);
                               TmpRef^.Index := TRegister(Pai386(p)^.op2);
                               TmpRef^.Index := TRegister(Pai386(p)^.op2);
-{$Else USE_OP3}
+{$Else NO_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}
+{$EndIf NO_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}
+{$IfNDef NO_OP3}
                                  TRegister(Pai386(p)^.op3)));
                                  TRegister(Pai386(p)^.op3)));
-{$Else USE_OP3}
+{$Else NO_OP3}
                                  TRegister(twowords(Pai386(p)^.op2).word2)));
                                  TRegister(twowords(Pai386(p)^.op2).word2)));
-{$EndIf USE_OP3}
+{$EndIf NO_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);
@@ -463,26 +463,26 @@ Begin
                               If (aktoptprocessor <= Class386)
                               If (aktoptprocessor <= Class386)
                                 Then
                                 Then
                                   Begin
                                   Begin
-{$IfDef USE_OP3}
+{$IfNDef NO_OP3}
                                     TmpRef^.Index := TRegister(Pai386(p)^.op2);
                                     TmpRef^.Index := TRegister(Pai386(p)^.op2);
-{$Else USE_OP3}
+{$Else NO_OP3}
                                     TmpRef^.Index := TRegister(twowords(Pai386(p)^.op2).Word1);
                                     TmpRef^.Index := TRegister(twowords(Pai386(p)^.op2).Word1);
-{$EndIf USE_OP3}
+{$EndIf NO_OP3}
                                     If (Pai386(p)^.op3t = Top_Reg)
                                     If (Pai386(p)^.op3t = Top_Reg)
                                       Then
                                       Then
                                         Begin
                                         Begin
-{$IfDef USE_OP3}
+{$IfNDef NO_OP3}
                                           TmpRef^.base := TRegister(Pai386(p)^.op3);
                                           TmpRef^.base := TRegister(Pai386(p)^.op3);
-{$Else USE_OP3}
+{$Else NO_OP3}
                                           TmpRef^.base := TRegister(twowords(Pai386(p)^.op2).word2);
                                           TmpRef^.base := TRegister(twowords(Pai386(p)^.op2).word2);
-{$EndIf USE_OP3}
+{$EndIf NO_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}
+{$IfNDef NO_OP3}
                                             TRegister(Pai386(p)^.op3)));
                                             TRegister(Pai386(p)^.op3)));
-{$Else USE_OP3}
+{$Else NO_OP3}
                                             TRegister(twowords(Pai386(p)^.op2).word2)));
                                             TRegister(twowords(Pai386(p)^.op2).word2)));
-{$EndIf USE_OP3}
+{$EndIf NO_OP3}
                                         End
                                         End
                                       Else
                                       Else
                                         Begin
                                         Begin
@@ -494,22 +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}
+{$IfNDef NO_OP3}
                                     TmpRef^.Index := TRegister(Pai386(p)^.op2);
                                     TmpRef^.Index := TRegister(Pai386(p)^.op2);
-{$Else USE_OP3}
+{$Else NO_OP3}
                                     TmpRef^.Index := TRegister(twowords(Pai386(p)^.op2).Word1);
                                     TmpRef^.Index := TRegister(twowords(Pai386(p)^.op2).Word1);
-{$EndIf USE_OP3}
+{$EndIf NO_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}
+{$IfNDef NO_OP3}
                                             TRegister(Pai386(p)^.op3)));
                                             TRegister(Pai386(p)^.op3)));
-{$Else USE_OP3}
+{$Else NO_OP3}
                                             TRegister(twowords(Pai386(p)^.op2).word2)));
                                             TRegister(twowords(Pai386(p)^.op2).word2)));
-{$EndIf USE_OP3}
+{$EndIf NO_OP3}
                                         End
                                         End
                                       Else
                                       Else
                                         Begin
                                         Begin
@@ -528,22 +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}
+{$IfNDef NO_OP3}
                                TmpRef^.base := TRegister(Pai386(p)^.op2);
                                TmpRef^.base := TRegister(Pai386(p)^.op2);
                                TmpRef^.Index := TRegister(Pai386(p)^.op2);
                                TmpRef^.Index := TRegister(Pai386(p)^.op2);
-{$Else USE_OP3}
+{$Else NO_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}
+{$EndIf NO_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}
+{$IfNDef NO_OP3}
                                      TRegister(Pai386(p)^.op3)));
                                      TRegister(Pai386(p)^.op3)));
-{$Else USE_OP3}
+{$Else NO_OP3}
                                      TRegister(twowords(Pai386(p)^.op2).word2)));
                                      TRegister(twowords(Pai386(p)^.op2).word2)));
-{$EndIf USE_OP3}
+{$EndIf NO_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);
@@ -561,33 +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}
+{$IfNDef NO_OP3}
                                           Tregister(Pai386(p)^.op3),
                                           Tregister(Pai386(p)^.op3),
                                           Tregister(Pai386(p)^.op3)))
                                           Tregister(Pai386(p)^.op3)))
-{$Else USE_OP3}
+{$Else NO_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}
+{$EndIf NO_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}
+{$IfNDef NO_OP3}
                                    TmpRef^.base := TRegister(Pai386(p)^.op2);
                                    TmpRef^.base := TRegister(Pai386(p)^.op2);
                                    TmpRef^.Index := TRegister(Pai386(p)^.op2);
                                    TmpRef^.Index := TRegister(Pai386(p)^.op2);
-{$Else USE_OP3}
+{$Else NO_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}
+{$EndIf NO_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}
+{$IfNDef NO_OP3}
                                           TRegister(Pai386(p)^.op3)))
                                           TRegister(Pai386(p)^.op3)))
-{$Else USE_OP3}
+{$Else NO_OP3}
                                           TRegister(twowords(Pai386(p)^.op2).word2)))
                                           TRegister(twowords(Pai386(p)^.op2).word2)))
-{$EndIf USE_OP3}
+{$EndIf NO_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)));
@@ -608,26 +608,26 @@ Begin
                                If (aktoptprocessor <= Class386)
                                If (aktoptprocessor <= Class386)
                                  Then
                                  Then
                                    Begin
                                    Begin
-{$IfDef USE_OP3}
+{$IfNDef NO_OP3}
                                      TmpRef^.Index := TRegister(Pai386(p)^.op2);
                                      TmpRef^.Index := TRegister(Pai386(p)^.op2);
-{$Else USE_OP3}
+{$Else NO_OP3}
                                      TmpRef^.Index := TRegister(twowords(Pai386(p)^.op2).Word1);
                                      TmpRef^.Index := TRegister(twowords(Pai386(p)^.op2).Word1);
-{$EndIf USE_OP3}
+{$EndIf NO_OP3}
                                      If (Pai386(p)^.op3t = Top_Reg)
                                      If (Pai386(p)^.op3t = Top_Reg)
                                        Then
                                        Then
                                          Begin
                                          Begin
-{$IfDef USE_OP3}
+{$IfNDef NO_OP3}
                                            TmpRef^.base := TRegister(Pai386(p)^.op3);
                                            TmpRef^.base := TRegister(Pai386(p)^.op3);
-{$Else USE_OP3}
+{$Else NO_OP3}
                                            TmpRef^.base := TRegister(twowords(Pai386(p)^.op2).word2);
                                            TmpRef^.base := TRegister(twowords(Pai386(p)^.op2).word2);
-{$EndIf USE_OP3}
+{$EndIf NO_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}
+{$IfNDef NO_OP3}
                                              TRegister(Pai386(p)^.op3)));
                                              TRegister(Pai386(p)^.op3)));
-{$Else USE_OP3}
+{$Else NO_OP3}
                                              TRegister(twowords(Pai386(p)^.op2).word2)));
                                              TRegister(twowords(Pai386(p)^.op2).word2)));
-{$EndIf USE_OP3}
+{$EndIf NO_OP3}
                                          End
                                          End
                                        Else
                                        Else
                                          Begin
                                          Begin
@@ -640,22 +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}
+{$IfNDef NO_OP3}
                                      TmpRef^.Index := TRegister(Pai386(p)^.op2);
                                      TmpRef^.Index := TRegister(Pai386(p)^.op2);
-{$Else USE_OP3}
+{$Else NO_OP3}
                                      TmpRef^.Index := TRegister(twowords(Pai386(p)^.op2).Word1);
                                      TmpRef^.Index := TRegister(twowords(Pai386(p)^.op2).Word1);
-{$EndIf USE_OP3}
+{$EndIf NO_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}
+{$IfNDef NO_OP3}
                                              TRegister(Pai386(p)^.op3)));
                                              TRegister(Pai386(p)^.op3)));
-{$Else USE_OP3}
+{$Else NO_OP3}
                                              TRegister(twowords(Pai386(p)^.op2).word2)));
                                              TRegister(twowords(Pai386(p)^.op2).word2)));
-{$EndIf USE_OP3}
+{$EndIf NO_OP3}
                                          End
                                          End
                                        Else
                                        Else
                                          Begin
                                          Begin
@@ -1677,8 +1677,12 @@ End.
 
 
 {
 {
  $Log$
  $Log$
- Revision 1.45  1999-04-20 10:32:39  peter
-   * fixed typo with and/or type check
+ Revision 1.46  1999-04-20 11:01:42  peter
+   * skipped vesion 1.44 :(
+
+ Revision 1.44  1999/04/17 22:17:01  pierre
+   * ifdef USE_OP3 released (changed into ifndef NO_OP3)
+   * SHRD and SHLD first operand (ATT syntax) can only be CL reg or immediate const
 
 
  Revision 1.43  1999/04/16 15:16:29  jonas
  Revision 1.43  1999/04/16 15:16:29  jonas
    * changes to work with -dUSE_OP3
    * changes to work with -dUSE_OP3