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

* gen_load_cgpara_loc, MIPS-specific: added missing calls to unget_para, and disabled part that loads upper and lower halves of Double values from integer registers. It produces invalid code, but that's hidden by MIPS code generator copying all parameters to stack (so this code is never executed).

git-svn-id: trunk@23622 -
sergei 12 жил өмнө
parent
commit
54aefb1ba0

+ 6 - 0
compiler/ncgutil.pas

@@ -1069,8 +1069,11 @@ implementation
                  (paraloc^.Loc in [LOC_REGISTER,LOC_CREGISTER]) then
                  (paraloc^.Loc in [LOC_REGISTER,LOC_CREGISTER]) then
                 begin
                 begin
                   gen_alloc_regloc(list,destloc);
                   gen_alloc_regloc(list,destloc);
+                  unget_para(paraloc^);
                   list.Concat(taicpu.op_reg_reg(A_MTC1,paraloc^.register,destloc.register));
                   list.Concat(taicpu.op_reg_reg(A_MTC1,paraloc^.register,destloc.register));
                 end
                 end
+{ TODO: Produces invalid code, needs fixing together with regalloc setup. }
+{
               else if (destloc.size = OS_F64) and
               else if (destloc.size = OS_F64) and
                       (paraloc^.Loc in [LOC_REGISTER,LOC_CREGISTER]) and
                       (paraloc^.Loc in [LOC_REGISTER,LOC_CREGISTER]) and
                       (paraloc^.next^.Loc in [LOC_REGISTER,LOC_CREGISTER]) then
                       (paraloc^.next^.Loc in [LOC_REGISTER,LOC_CREGISTER]) then
@@ -1078,10 +1081,13 @@ implementation
                   gen_alloc_regloc(list,destloc);
                   gen_alloc_regloc(list,destloc);
 
 
                   tmpreg:=destloc.register;
                   tmpreg:=destloc.register;
+                  unget_para(paraloc^);
                   list.Concat(taicpu.op_reg_reg(A_MTC1,paraloc^.register,tmpreg));
                   list.Concat(taicpu.op_reg_reg(A_MTC1,paraloc^.register,tmpreg));
                   setsupreg(tmpreg,getsupreg(tmpreg)+1);
                   setsupreg(tmpreg,getsupreg(tmpreg)+1);
+                  unget_para(paraloc^.next^);
                   list.Concat(taicpu.op_reg_reg(A_MTC1,paraloc^.Next^.register,tmpreg));
                   list.Concat(taicpu.op_reg_reg(A_MTC1,paraloc^.Next^.register,tmpreg));
                 end
                 end
+}
               else
               else
                 begin
                 begin
                   sizeleft := TCGSize2Size[destloc.size];
                   sizeleft := TCGSize2Size[destloc.size];