Răsfoiți Sursa

* MIPS: floating point parameters on stack should be loaded to/from FPU registers directly, without using temp.

git-svn-id: trunk@25122 -
sergei 12 ani în urmă
părinte
comite
c3350d13f9
2 a modificat fișierele cu 6 adăugiri și 3 ștergeri
  1. 4 1
      compiler/mips/cpupara.pas
  2. 2 2
      compiler/ncgutil.pas

+ 4 - 1
compiler/mips/cpupara.pas

@@ -439,7 +439,10 @@ implementation
                         intparareg:=mips_nb_used_registers;
                       end;
                     paraloc^.loc:=LOC_REFERENCE;
-                    paraloc^.size:=int_cgsize(paralen);
+                    if (paradef.typ=floatdef) then
+                      paraloc^.size:=int_float_cgsize(paralen)
+                    else
+                      paraloc^.size:=int_cgsize(paralen);
                     paraloc^.def:=get_paraloc_def(locdef,paralen,firstparaloc);
 
                     if side=callerside then

+ 2 - 2
compiler/ncgutil.pas

@@ -1058,11 +1058,11 @@ implementation
             begin
 {$ifdef mips}
               if (destloc.size = paraloc^.Size) and
-                 (paraloc^.Loc in [LOC_FPUREGISTER,LOC_CFPUREGISTER]) then
+                 (paraloc^.Loc in [LOC_FPUREGISTER,LOC_CFPUREGISTER,LOC_REFERENCE,LOC_CREFERENCE]) then
                 begin
                   unget_para(paraloc^);
                   gen_alloc_regloc(list,destloc);
-                  cg.a_loadfpu_reg_reg(list,paraloc^.Size, destloc.size, paraloc^.register, destloc.register);
+                  cg.a_load_cgparaloc_anyreg(list,destloc.size,paraloc^,destloc.register,para.alignment);
                 end
               else if (destloc.size = OS_F32) and
                  (paraloc^.Loc in [LOC_REGISTER,LOC_CREGISTER]) then