Răsfoiți Sursa

* use extended as default real type in calculations only if fputype=x87

git-svn-id: trunk@15750 -
florian 15 ani în urmă
părinte
comite
66571ee4c8
2 a modificat fișierele cu 9 adăugiri și 1 ștergeri
  1. 1 0
      compiler/cgobj.pas
  2. 8 1
      compiler/nadd.pas

+ 1 - 0
compiler/cgobj.pas

@@ -1115,6 +1115,7 @@ implementation
            end;
            end;
       end;
       end;
 
 
+
     procedure tcg.a_load_cgparaloc_ref(list : TAsmList;const paraloc : TCGParaLocation;const ref : treference;sizeleft : aint;align : longint);
     procedure tcg.a_load_cgparaloc_ref(list : TAsmList;const paraloc : TCGParaLocation;const ref : treference;sizeleft : aint;align : longint);
       var
       var
         href : treference;
         href : treference;

+ 8 - 1
compiler/nadd.pas

@@ -889,7 +889,14 @@ implementation
         { is one a real float, then both need to be floats, this
         { is one a real float, then both need to be floats, this
           need to be done before the constant folding so constant
           need to be done before the constant folding so constant
           operation on a float and int are also handled }
           operation on a float and int are also handled }
-        resultrealdef:=pbestrealtype^;
+{$ifdef x86}
+        { use extended as default real type only when the x87 fpu is used }
+        if not(current_settings.fputype=fpu_x87) then
+          resultrealdef:=s64floattype
+        else
+{$endif x86}
+          resultrealdef:=pbestrealtype^;
+
         if (right.resultdef.typ=floatdef) or (left.resultdef.typ=floatdef) then
         if (right.resultdef.typ=floatdef) or (left.resultdef.typ=floatdef) then
          begin
          begin
            { when both floattypes are already equal then use that
            { when both floattypes are already equal then use that