* Xtensa: fix passing of floating point parameters

git-svn-id: trunk@44541 -
This commit is contained in:
florian 2020-04-03 20:15:24 +00:00
parent 66cbee5e31
commit c1c201f93c

View File

@ -223,7 +223,7 @@ unit cpupara;
exit; exit;
paraloc:=result.add_location; paraloc:=result.add_location;
if retcgsize in [OS_64,OS_S64] then if retcgsize in [OS_64,OS_S64,OS_F64] then
begin begin
{ low 32bits } { low 32bits }
paraloc^.loc:=LOC_REGISTER; paraloc^.loc:=LOC_REGISTER;
@ -275,7 +275,7 @@ unit cpupara;
end end
else else
paraloc^.register:=newreg(R_INTREGISTER,RS_FUNCTION_RETURN_REG,cgsize2subreg(R_INTREGISTER,retcgsize)); paraloc^.register:=newreg(R_INTREGISTER,RS_FUNCTION_RETURN_REG,cgsize2subreg(R_INTREGISTER,retcgsize));
paraloc^.size:=retcgsize; paraloc^.size:=OS_32;
paraloc^.def:=result.def; paraloc^.def:=result.def;
end; end;
end; end;
@ -424,30 +424,10 @@ unit cpupara;
inc(nextintreg); inc(nextintreg);
dec(paralen,tcgsize2size[paraloc^.size]); dec(paralen,tcgsize2size[paraloc^.size]);
end end
else if (loc = LOC_FPUREGISTER) and
(nextintreg <= maxintreg) then
begin
paraloc^.loc:=loc;
paraloc^.size := paracgsize;
paraloc^.def := paradef;
paraloc^.register:=newreg(R_FPUREGISTER,nextintreg,R_SUBWHOLE);
inc(nextintreg);
dec(paralen,tcgsize2size[paraloc^.size]);
end
else { LOC_REFERENCE } else { LOC_REFERENCE }
begin begin
paraloc^.loc:=LOC_REFERENCE; paraloc^.loc:=LOC_REFERENCE;
case loc of case loc of
LOC_FPUREGISTER:
begin
paraloc^.size:=int_float_cgsize(paralen);
case paraloc^.size of
OS_F32: paraloc^.def:=s32floattype;
OS_F64: paraloc^.def:=s64floattype;
else
internalerror(2020031406);
end;
end;
LOC_REGISTER, LOC_REGISTER,
LOC_REFERENCE: LOC_REFERENCE:
begin begin
@ -496,7 +476,7 @@ unit cpupara;
var var
cur_stack_offset: aword; cur_stack_offset: aword;
parasize, l: longint; parasize, l: longint;
curintreg, firstfloatreg: tsuperregister; curintreg: tsuperregister;
i : integer; i : integer;
hp: tparavarsym; hp: tparavarsym;
paraloc: pcgparalocation; paraloc: pcgparalocation;