+ added a Z80-specific override for tcgz80.a_loadfpu_ref_cgpara, to support returning single results

in registers

git-svn-id: branches/z80@45024 -
This commit is contained in:
nickysn 2020-04-23 02:29:46 +00:00
parent 5c6fadada8
commit 89b8bd3848

View File

@ -58,6 +58,8 @@ unit cgcpu;
procedure a_loadaddr_ref_cgpara(list : TAsmList;const r : treference;const paraloc : TCGPara);override;
procedure a_load_reg_cgpara(list : TAsmList; size : tcgsize;r : tregister; const cgpara : tcgpara);override;
procedure a_loadfpu_ref_cgpara(list : TAsmList;size : tcgsize;const ref : treference;const cgpara : TCGPara);override;
procedure a_call_name(list : TAsmList;const s : string; weak: boolean);override;
procedure a_call_reg(list : TAsmList;reg: tregister);override;
@ -364,6 +366,42 @@ unit cgcpu;
end;
procedure tcgz80.a_loadfpu_ref_cgpara(list: TAsmList; size: tcgsize; const ref: treference; const cgpara: TCGPara);
var
href: treference;
curloc: PCGParaLocation;
i: Integer;
begin
case cgpara.location^.loc of
LOC_REGISTER,LOC_CREGISTER:
begin
case size of
OS_F32:
begin
curloc:=cgpara.location;
href:=ref;
for i:=1 to 4 do
begin
if not assigned(curloc) then
internalerror(2020042303);
if not (curloc^.Loc in [LOC_REGISTER,LOC_CREGISTER]) then
internalerror(2020042304);
a_load_ref_reg(list,OS_8,OS_8,href,curloc^.register);
curloc:=curloc^.Next;
end;
if assigned(curloc) then
internalerror(2020042305);
end;
else
internalerror(2020042302);
end;
end;
else
inherited;
end;
end;
procedure tcgz80.a_load_const_cgpara(list : TAsmList;size : tcgsize;a : tcgint;const paraloc : TCGPara);
var
i : longint;