diff --git a/compiler/arm/cpupara.pas b/compiler/arm/cpupara.pas index 291eed7df7..f8bce502fd 100644 --- a/compiler/arm/cpupara.pas +++ b/compiler/arm/cpupara.pas @@ -289,7 +289,14 @@ unit cpupara; else if paracgsize in [OS_64,OS_S64] then paraloc^.size:=OS_32 else if (loc=LOC_REGISTER) and (paracgsize in [OS_F32,OS_F64,OS_F80]) then - paraloc^.size:=OS_32 + case paracgsize of + OS_F32: + paraloc^.size:=OS_32; + OS_F64: + paraloc^.size:=OS_64; + else + internalerror(2005082901); + end else paraloc^.size:=paracgsize; case loc of @@ -304,10 +311,13 @@ unit cpupara; end else begin + { LOC_REFERENCE covers always the overleft } paraloc^.loc:=LOC_REFERENCE; - paraloc^.reference.index:=NR_STACK_POINTER_REG; - paraloc^.reference.offset:=stack_offset; - inc(stack_offset,4); + paraloc^.size:=int_cgsize(paralen); + if (side=callerside) then + paraloc^.reference.index:=NR_STACK_POINTER_REG; + inc(stack_offset,align(paralen,4)); + paralen:=0; end; end; LOC_FPUREGISTER: