* implemented pop_parasize for the Z80 and declared stdcall to be a clearstack pocall on this arch

git-svn-id: branches/z80@44629 -
This commit is contained in:
nickysn 2020-04-07 00:07:34 +00:00
parent 472ac716b7
commit b2549b63cd
4 changed files with 74 additions and 1 deletions

1
.gitattributes vendored
View File

@ -1067,6 +1067,7 @@ compiler/z80/cpupi.pas svneol=native#text/plain
compiler/z80/cputarg.pas svneol=native#text/plain
compiler/z80/hlcgcpu.pas svneol=native#text/plain
compiler/z80/nz80add.pas svneol=native#text/plain
compiler/z80/nz80cal.pas svneol=native#text/plain
compiler/z80/raz80.pas svneol=native#text/plain
compiler/z80/raz80asm.pas svneol=native#text/plain
compiler/z80/rgcpu.pas svneol=native#text/plain

View File

@ -4687,7 +4687,7 @@ begin
option.free;
Option:=nil;
clearstack_pocalls := [pocall_cdecl,pocall_cppdecl,pocall_syscall,pocall_mwpascal,pocall_sysv_abi_cdecl,pocall_ms_abi_cdecl];
clearstack_pocalls := [pocall_cdecl,pocall_cppdecl,pocall_syscall,pocall_mwpascal,pocall_sysv_abi_cdecl,pocall_ms_abi_cdecl{$ifdef z80},pocall_stdcall{$endif}];
cdecl_pocalls := [pocall_cdecl, pocall_cppdecl, pocall_mwpascal, pocall_sysv_abi_cdecl, pocall_ms_abi_cdecl];
if (tf_safecall_clearstack in target_info.flags) then
begin

View File

@ -35,6 +35,7 @@ unit cpunode;
after the generic one (FK)
}
,nz80add
,nz80cal
// ,nz80mat
// ,nz80cnv
// ,nz80mem

71
compiler/z80/nz80cal.pas Normal file
View File

@ -0,0 +1,71 @@
{
Copyright (c) 1998-2002 by Florian Klaempfl
Generate Z80 assembler for in call nodes
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
****************************************************************************
}
unit nz80cal;
{$i fpcdefs.inc}
interface
uses
ncgcal;
type
tz80callnode = class(tcgcallnode)
protected
procedure pop_parasize(pop_size:longint);override;
end;
implementation
uses
cpubase,
aasmdata,aasmcpu,
ncal,
cgobj;
{*****************************************************************************
TZ80CALLNODE
*****************************************************************************}
procedure tz80callnode.pop_parasize(pop_size:longint);
begin
if pop_size>=2 then
begin
cg.getcpuregister(current_asmdata.CurrAsmList,NR_A);
while pop_size>=2 do
begin
current_asmdata.CurrAsmList.Concat(taicpu.op_reg(A_POP,NR_AF));
dec(pop_size,2);
end;
cg.ungetcpuregister(current_asmdata.CurrAsmList,NR_A);
end;
if pop_size=1 then
current_asmdata.CurrAsmList.Concat(taicpu.op_reg(A_INC,NR_SP));
end;
begin
ccallnode:=tz80callnode;
end.