Browse Source

Use correct check for unsigned size in a_op64_{const/reg}_reg_reg_checkoverflow methods

Pierre Muller 1 year ago
parent
commit
f56587bddd
1 changed files with 16 additions and 2 deletions
  1. 16 2
      compiler/sparc/cgcpu.pas

+ 16 - 2
compiler/sparc/cgcpu.pas

@@ -258,6 +258,7 @@ interface
     procedure tcg64sparc.a_op64_const_reg_reg_checkoverflow(list: TAsmList;op:TOpCG;size : tcgsize;value : int64;regsrc,regdst : tregister64;setflags : boolean;var ovloc : tlocation);
     procedure tcg64sparc.a_op64_const_reg_reg_checkoverflow(list: TAsmList;op:TOpCG;size : tcgsize;value : int64;regsrc,regdst : tregister64;setflags : boolean;var ovloc : tlocation);
       var
       var
         op1,op2:TAsmOp;
         op1,op2:TAsmOp;
+	fl:TSparcFlags;
       begin
       begin
         case op of
         case op of
           OP_NEG,
           OP_NEG,
@@ -277,7 +278,13 @@ interface
         if setflags then
         if setflags then
           begin
           begin
             ovloc.loc:=LOC_FLAGS;
             ovloc.loc:=LOC_FLAGS;
-            ovloc.resflags.Init(NR_ICC,F_VS);
+            if size=OS_S64 then
+              fl:=F_VS
+            else if size=OS_64 then
+              fl:=F_B
+            else
+              internalerror(2024040301);
+            ovloc.resflags.Init(NR_ICC,fl);
           end
           end
         else
         else
           ovloc.loc:=LOC_INVALID;
           ovloc.loc:=LOC_INVALID;
@@ -287,6 +294,7 @@ interface
     procedure tcg64sparc.a_op64_reg_reg_reg_checkoverflow(list: TAsmList;op:TOpCG;size : tcgsize;regsrc1,regsrc2,regdst : tregister64;setflags : boolean;var ovloc : tlocation);
     procedure tcg64sparc.a_op64_reg_reg_reg_checkoverflow(list: TAsmList;op:TOpCG;size : tcgsize;regsrc1,regsrc2,regdst : tregister64;setflags : boolean;var ovloc : tlocation);
       var
       var
         op1,op2:TAsmOp;
         op1,op2:TAsmOp;
+	fl:TSparcFlags;
       begin
       begin
         case op of
         case op of
           OP_NEG,
           OP_NEG,
@@ -302,7 +310,13 @@ interface
         if setflags then
         if setflags then
           begin
           begin
             ovloc.loc:=LOC_FLAGS;
             ovloc.loc:=LOC_FLAGS;
-            ovloc.resflags.Init(NR_ICC,F_VS);
+            if size=OS_S64 then
+              fl:=F_VS
+            else if size=OS_64 then
+              fl:=F_B
+            else
+              internalerror(2024040301);
+            ovloc.resflags.Init(NR_ICC,fl);
           end
           end
         else
         else
           ovloc.loc:=LOC_INVALID;
           ovloc.loc:=LOC_INVALID;