Przeglądaj źródła

* handling of integer and shortint in case was wrong, if a case
label was negative and a jump table was generated

florian 26 lat temu
rodzic
commit
bba137b4e6
1 zmienionych plików z 17 dodań i 5 usunięć
  1. 17 5
      compiler/cg386set.pas

+ 17 - 5
compiler/cg386set.pas

@@ -702,14 +702,22 @@ implementation
            { extend with sign }
            if opsize=S_W then
              begin
-                exprasmlist^.concat(new(pai386,op_reg_reg(A_MOVZX,S_WL,hregister,
-                  reg16toreg32(hregister))));
+                if with_sign then
+                  exprasmlist^.concat(new(pai386,op_reg_reg(A_MOVSX,S_WL,hregister,
+                    reg16toreg32(hregister))))
+                else
+                  exprasmlist^.concat(new(pai386,op_reg_reg(A_MOVZX,S_WL,hregister,
+                    reg16toreg32(hregister))));
                 hregister:=reg16toreg32(hregister);
              end
            else if opsize=S_B then
              begin
-                exprasmlist^.concat(new(pai386,op_reg_reg(A_MOVZX,S_BL,hregister,
-                  reg8toreg32(hregister))));
+                if with_sign then
+                  exprasmlist^.concat(new(pai386,op_reg_reg(A_MOVSX,S_BL,hregister,
+                    reg8toreg32(hregister))))
+                else
+                  exprasmlist^.concat(new(pai386,op_reg_reg(A_MOVZX,S_BL,hregister,
+                    reg8toreg32(hregister))));
                 hregister:=reg8toreg32(hregister);
              end;
            new(hr);
@@ -910,7 +918,11 @@ implementation
 end.
 {
   $Log$
-  Revision 1.34  1999-06-08 15:27:24  pierre
+  Revision 1.35  1999-07-18 14:01:16  florian
+    * handling of integer and shortint in case was wrong, if a case
+      label was negative and a jump table was generated
+
+  Revision 1.34  1999/06/08 15:27:24  pierre
    * fix for bug0258
 
   Revision 1.33  1999/06/02 10:11:48  florian