Browse Source

* fixed handling of doubles in softemu mode if they are split between register and memory

git-svn-id: trunk@2047 -
florian 19 years ago
parent
commit
dae84f282f
1 changed files with 10 additions and 4 deletions
  1. 10 4
      compiler/arm/cgcpu.pas

+ 10 - 4
compiler/arm/cgcpu.pas

@@ -212,10 +212,16 @@ unit cgcpu;
                 a_load_ref_reg(list,location^.size,location^.size,tmpref,location^.register);
               LOC_REFERENCE:
                 begin
-                   reference_reset_base(ref,location^.reference.index,location^.reference.offset);
-                   g_concatcopy(list,tmpref,ref,sizeleft);
-                   if assigned(location^.next) then
-                     internalerror(2005010710);
+                  reference_reset_base(ref,location^.reference.index,location^.reference.offset);
+                  { doubles in softemu mode have a strange order of registers and references }
+                  if location^.size=OS_32 then
+                    g_concatcopy(list,tmpref,ref,4)
+                  else
+                    begin
+                      g_concatcopy(list,tmpref,ref,sizeleft);
+                      if assigned(location^.next) then
+                        internalerror(2005010710);
+                    end;
                 end;
               LOC_FPUREGISTER,LOC_CFPUREGISTER:
                 case location^.size of