From cae8a928c9700f4344b33df01562a48e28e6b8b0 Mon Sep 17 00:00:00 2001 From: nickysn Date: Thu, 23 Apr 2020 01:40:13 +0000 Subject: [PATCH] * fixed tz80loadparentfpnode.pass_generate_code to return result in an imaginary register sequence, instead of simply returning IX git-svn-id: branches/z80@45020 - --- .gitattributes | 1 + compiler/z80/cpunode.pas | 2 +- compiler/z80/nz80mem.pas | 71 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 73 insertions(+), 1 deletion(-) create mode 100644 compiler/z80/nz80mem.pas diff --git a/.gitattributes b/.gitattributes index 28b9f7bc7e..d8e1ce051a 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1074,6 +1074,7 @@ 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/nz80mat.pas svneol=native#text/plain +compiler/z80/nz80mem.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 diff --git a/compiler/z80/cpunode.pas b/compiler/z80/cpunode.pas index 554ee42188..26de8c07ea 100644 --- a/compiler/z80/cpunode.pas +++ b/compiler/z80/cpunode.pas @@ -37,8 +37,8 @@ unit cpunode; ,nz80add ,nz80cal ,nz80mat + ,nz80mem // ,nz80cnv -// ,nz80mem // ,nz80util, { these are not really nodes } ,tgcpu diff --git a/compiler/z80/nz80mem.pas b/compiler/z80/nz80mem.pas new file mode 100644 index 0000000000..77db443da5 --- /dev/null +++ b/compiler/z80/nz80mem.pas @@ -0,0 +1,71 @@ +{ + Copyright (c) 1998-2002 by Florian Klaempfl + + Generate Z80 assembler for in memory related 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 nz80mem; + +{$i fpcdefs.inc} + +interface + + uses + cgbase,cpubase, + nmem,ncgmem; + + type + + { tz80loadparentfpnode } + + tz80loadparentfpnode = class(tcgloadparentfpnode) + procedure pass_generate_code;override; + end; + +implementation + + uses + aasmdata,aasmcpu, + cgobj; + + +{***************************************************************************** + TZ80LOADPARENTFPNODE +*****************************************************************************} + + procedure tz80loadparentfpnode.pass_generate_code; + begin + inherited pass_generate_code; + if (location.loc=LOC_REGISTER) and ((location.register=NR_IX) or (location.register=NR_IY)) then + begin + cg.getcpuregister(current_asmdata.CurrAsmList,NR_H); + cg.getcpuregister(current_asmdata.CurrAsmList,NR_L); + current_asmdata.CurrAsmList.Concat(taicpu.op_reg(A_PUSH,location.register)); + current_asmdata.CurrAsmList.Concat(taicpu.op_reg(A_POP,NR_HL)); + location.register:=cg.getintregister(current_asmdata.CurrAsmList,OS_16); + cg.a_load_reg_reg(current_asmdata.CurrAsmList,OS_8,OS_8,NR_L,location.register); + cg.ungetcpuregister(current_asmdata.CurrAsmList,NR_L); + cg.a_load_reg_reg(current_asmdata.CurrAsmList,OS_8,OS_8,NR_H,GetNextReg(location.register)); + cg.ungetcpuregister(current_asmdata.CurrAsmList,NR_H); + end; + end; + + +begin + cloadparentfpnode:=tz80loadparentfpnode; +end.