|
@@ -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;
|