From 32b96e75f3f3f34a78ba292c6afd7416a9ed639d Mon Sep 17 00:00:00 2001 From: florian Date: Fri, 22 Jul 2005 20:14:03 +0000 Subject: [PATCH] * more fixes for float parameter handling on arm git-svn-id: trunk@728 - --- compiler/cgobj.pas | 23 +++++++++++++++++------ compiler/ncgcal.pas | 8 ++++---- 2 files changed, 21 insertions(+), 10 deletions(-) diff --git a/compiler/cgobj.pas b/compiler/cgobj.pas index 07ab5487a1..18dccec241 100644 --- a/compiler/cgobj.pas +++ b/compiler/cgobj.pas @@ -992,15 +992,26 @@ implementation var ref : treference; begin - cgpara.check_simple_location; case cgpara.location^.loc of LOC_FPUREGISTER,LOC_CFPUREGISTER: - a_loadfpu_reg_reg(list,size,r,cgpara.location^.register); + begin + cgpara.check_simple_location; + a_loadfpu_reg_reg(list,size,r,cgpara.location^.register); + end; LOC_REFERENCE,LOC_CREFERENCE: begin - reference_reset_base(ref,cgpara.location^.reference.index,cgpara.location^.reference.offset); - a_loadfpu_reg_ref(list,size,r,ref); - end + cgpara.check_simple_location; + reference_reset_base(ref,cgpara.location^.reference.index,cgpara.location^.reference.offset); + a_loadfpu_reg_ref(list,size,r,ref); + end; + LOC_REGISTER,LOC_CREGISTER: + begin + { paramfpu_ref does the check_simpe_location check here if necessary } + tg.GetTemp(list,TCGSize2Size[size],tt_normal,ref); + a_loadfpu_reg_ref(list,size,r,ref); + a_paramfpu_ref(list,size,ref,cgpara); + tg.Ungettemp(list,ref); + end; else internalerror(2002071004); end; @@ -1020,7 +1031,7 @@ implementation reference_reset_base(href,cgpara.location^.reference.index,cgpara.location^.reference.offset); { concatcopy should choose the best way to copy the data } g_concatcopy(list,ref,href,tcgsize2size[size]); - end + end; else internalerror(200402201); end; diff --git a/compiler/ncgcal.pas b/compiler/ncgcal.pas index 83fb0e9841..a528a4f0b1 100644 --- a/compiler/ncgcal.pas +++ b/compiler/ncgcal.pas @@ -202,7 +202,7 @@ implementation cg.a_paramfpu_reg(exprasmlist,left.location.size,left.location.register,tempcgpara); end; else - internalerror(2002042433); + internalerror(200204249); end; LOC_FPUREGISTER, LOC_CFPUREGISTER: @@ -224,8 +224,8 @@ implementation cg.a_param_ref(exprasmlist,left.location.size,left.location.reference,tempcgpara); end; {$endif x86_64} -{$ifdef sparc} - { sparc pushes floats in normal registers } +{$if defined(sparc) or defined(arm)} + { sparc and arm pass floats in normal registers } LOC_REGISTER, LOC_CREGISTER, {$endif sparc} @@ -254,7 +254,7 @@ implementation end; {$endif x86_64} {$if defined(sparc) or defined(arm) } - { sparc and arm passes floats in normal registers } + { sparc and arm pass floats in normal registers } LOC_REGISTER, LOC_CREGISTER, {$endif sparc}