浏览代码

* use single precision fpu ops in case of single precision operands

git-svn-id: trunk@4784 -
Jonas Maebe 19 年之前
父节点
当前提交
e9c5049275
共有 1 个文件被更改,包括 18 次插入4 次删除
  1. 18 4
      compiler/powerpc/nppcadd.pas

+ 18 - 4
compiler/powerpc/nppcadd.pas

@@ -368,20 +368,34 @@ interface
     procedure tppcaddnode.second_addfloat;
     procedure tppcaddnode.second_addfloat;
       var
       var
         op    : TAsmOp;
         op    : TAsmOp;
-        cmpop : boolean;
+        cmpop,
+        singleprec : boolean;
       begin
       begin
         pass_left_and_right;
         pass_left_and_right;
 
 
         cmpop:=false;
         cmpop:=false;
+        singleprec:=tfloatdef(left.resulttype.def).typ=s32real;
         case nodetype of
         case nodetype of
           addn :
           addn :
-            op:=A_FADD;
+            if singleprec then
+              op:=A_FADDS
+            else
+              op:=A_FADD;
           muln :
           muln :
+            if singleprec then
+              op:=A_FMULS
+            else
             op:=A_FMUL;
             op:=A_FMUL;
           subn :
           subn :
-            op:=A_FSUB;
+            if singleprec then
+              op:=A_FSUBS
+            else
+              op:=A_FSUB;
           slashn :
           slashn :
-            op:=A_FDIV;
+            if singleprec then
+              op:=A_FDIVS
+            else
+              op:=A_FDIV;
           ltn,lten,gtn,gten,
           ltn,lten,gtn,gten,
           equaln,unequaln :
           equaln,unequaln :
             begin
             begin