Browse Source

* fixed code generation for sqrt and sqr in softfloat mode

git-svn-id: trunk@1038 -
florian 20 năm trước cách đây
mục cha
commit
a8f2d702a7
1 tập tin đã thay đổi với 19 bổ sung12 xóa
  1. 19 12
      compiler/arm/narminl.pas

+ 19 - 12
compiler/arm/narminl.pas

@@ -86,10 +86,7 @@ implementation
     function tarminlinenode.first_abs_real : tnode;
       begin
         if cs_fp_emulation in aktmoduleswitches then
-          begin
-//            if target_info.system in system_wince then
-            result:=inherited first_abs_real;
-          end
+          result:=inherited first_abs_real
         else
           begin
             expectloc:=LOC_FPUREGISTER;
@@ -102,19 +99,29 @@ implementation
 
     function tarminlinenode.first_sqr_real : tnode;
       begin
-        expectloc:=LOC_FPUREGISTER;
-        registersint:=left.registersint;
-        registersfpu:=max(left.registersfpu,1);
-        first_sqr_real:=nil;
+        if cs_fp_emulation in aktmoduleswitches then
+          result:=inherited first_sqr_real
+        else
+          begin
+            expectloc:=LOC_FPUREGISTER;
+            registersint:=left.registersint;
+            registersfpu:=max(left.registersfpu,1);
+            first_sqr_real:=nil;
+          end;
       end;
 
 
     function tarminlinenode.first_sqrt_real : tnode;
       begin
-        expectloc:=LOC_FPUREGISTER;
-        registersint:=left.registersint;
-        registersfpu:=max(left.registersfpu,1);
-        first_sqrt_real := nil;
+        if cs_fp_emulation in aktmoduleswitches then
+          result:=inherited first_sqrt_real
+        else
+          begin
+            expectloc:=LOC_FPUREGISTER;
+            registersint:=left.registersint;
+                    registersfpu:=max(left.registersfpu,1);
+            first_sqrt_real := nil;
+          end;
       end;