2
0
Эх сурвалжийг харах

* some fixes for expectloc

florian 3 жил өмнө
parent
commit
01d6358f93

+ 4 - 0
compiler/x86/nx86add.pas

@@ -1170,6 +1170,10 @@ unit nx86add;
             make_not_regable(right,[ra_addr_regable]);
           end;
         Result:=inherited pass_1;
+        { correct expectloc, it does not matter of Result is set as another pass_1 is run on it
+          which will fix that one }
+        if use_vectorfpu(resultdef) then
+          expectloc:=LOC_MMREGISTER;
       end;
 
 

+ 3 - 1
compiler/x86/nx86con.pas

@@ -53,12 +53,14 @@ implementation
          result:=nil;
          if is_number_float(value_real) and not(use_vectorfpu(resultdef)) and ((value_real=1.0) or ((value_real=0.0) and (get_real_sign(value_real)=1))) then
            expectloc:=LOC_FPUREGISTER
+         else if (value_real=0.0) and (get_real_sign(value_real)=1) and use_vectorfpu(resultdef) then
+           expectloc:=LOC_MMREGISTER
          else
            expectloc:=LOC_CREFERENCE;
       end;
 
-    procedure tx86realconstnode.pass_generate_code;
 
+    procedure tx86realconstnode.pass_generate_code;
       begin
          if is_number_float(value_real) then
            begin