diff --git a/compiler/arm/cgcpu.pas b/compiler/arm/cgcpu.pas index c1b497c252..0d3522e0df 100644 --- a/compiler/arm/cgcpu.pas +++ b/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