mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-13 02:59:21 +02:00
+ 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:
parent
5c6fadada8
commit
89b8bd3848
@ -58,6 +58,8 @@ unit cgcpu;
|
|||||||
procedure a_loadaddr_ref_cgpara(list : TAsmList;const r : treference;const paraloc : TCGPara);override;
|
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_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_name(list : TAsmList;const s : string; weak: boolean);override;
|
||||||
procedure a_call_reg(list : TAsmList;reg: tregister);override;
|
procedure a_call_reg(list : TAsmList;reg: tregister);override;
|
||||||
|
|
||||||
@ -364,6 +366,42 @@ unit cgcpu;
|
|||||||
end;
|
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);
|
procedure tcgz80.a_load_const_cgpara(list : TAsmList;size : tcgsize;a : tcgint;const paraloc : TCGPara);
|
||||||
var
|
var
|
||||||
i : longint;
|
i : longint;
|
||||||
|
Loading…
Reference in New Issue
Block a user