Browse Source

* fix for sar/shr-shl optimization

Jonas Maebe 26 years ago
parent
commit
6e07359718
1 changed files with 7 additions and 4 deletions
  1. 7 4
      compiler/popt386.pas

+ 7 - 4
compiler/popt386.pas

@@ -1202,7 +1202,7 @@ Begin
                           Begin
                           Begin
                             Pai386(p)^.LoadConst(0,Pai386(p)^.oper[0].val-Pai386(hp1)^.oper[0].val);
                             Pai386(p)^.LoadConst(0,Pai386(p)^.oper[0].val-Pai386(hp1)^.oper[0].val);
                             Pai386(hp1)^.opcode := A_AND;
                             Pai386(hp1)^.opcode := A_AND;
-                            l := 1 shl (Pai386(hp1)^.oper[0].val-1);
+                            l := (1 shl (Pai386(hp1)^.oper[0].val)) - 1;
                             Case Pai386(p)^.opsize Of
                             Case Pai386(p)^.opsize Of
                               S_L: Pai386(hp1)^.LoadConst(0,l Xor longint(-1));
                               S_L: Pai386(hp1)^.LoadConst(0,l Xor longint(-1));
                               S_B: Pai386(hp1)^.LoadConst(0,l Xor $ff);
                               S_B: Pai386(hp1)^.LoadConst(0,l Xor $ff);
@@ -1219,7 +1219,7 @@ Begin
                               Begin
                               Begin
                                 Pai386(hp1)^.LoadConst(0,Pai386(hp1)^.oper[0].val-Pai386(p)^.oper[0].val);
                                 Pai386(hp1)^.LoadConst(0,Pai386(hp1)^.oper[0].val-Pai386(p)^.oper[0].val);
                                 Pai386(p)^.opcode := A_AND;
                                 Pai386(p)^.opcode := A_AND;
-                                l := 1 shl (Pai386(p)^.oper[0].val-1);
+                                l := (1 shl (Pai386(p)^.oper[0].val))-1;
                                 Case Pai386(p)^.opsize Of
                                 Case Pai386(p)^.opsize Of
                                   S_L: Pai386(p)^.LoadConst(0,l Xor $ffffffff);
                                   S_L: Pai386(p)^.LoadConst(0,l Xor $ffffffff);
                                   S_B: Pai386(p)^.LoadConst(0,l Xor $ff);
                                   S_B: Pai386(p)^.LoadConst(0,l Xor $ff);
@@ -1232,7 +1232,7 @@ Begin
                       with const1 = const2 }
                       with const1 = const2 }
                               Begin
                               Begin
                                 Pai386(p)^.opcode := A_AND;
                                 Pai386(p)^.opcode := A_AND;
-                                l := 1 shl (Pai386(p)^.oper[0].val-1);
+                                l := (1 shl (Pai386(p)^.oper[0].val))-1;
                                 Case Pai386(p)^.opsize Of
                                 Case Pai386(p)^.opsize Of
                                   S_B: Pai386(p)^.LoadConst(0,l Xor $ff);
                                   S_B: Pai386(p)^.LoadConst(0,l Xor $ff);
                                   S_W: Pai386(p)^.LoadConst(0,l Xor $ffff);
                                   S_W: Pai386(p)^.LoadConst(0,l Xor $ffff);
@@ -1525,7 +1525,10 @@ End.
 
 
 {
 {
  $Log$
  $Log$
- Revision 1.58  1999-07-30 18:17:55  jonas
+ Revision 1.59  1999-08-03 17:13:28  jonas
+   * fix for sar/shr-shl optimization
+
+ Revision 1.58  1999/07/30 18:17:55  jonas
    * fix so (,reg) gets optimized to (reg)
    * fix so (,reg) gets optimized to (reg)
 
 
  Revision 1.57  1999/07/01 18:12:16  jonas
  Revision 1.57  1999/07/01 18:12:16  jonas