From 19a69640883fbc5a0c0d607863a6a85673d6f8c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=A1roly=20Balogh?= Date: Fri, 20 Sep 2019 11:35:35 +0000 Subject: [PATCH] m68k: add subregisters. on 68k, these are not as universal as on x86 and work differently, but the compiler needs this infrastructure to do 16bit math (which is a massive improvement on '000) or word-size indexes on CPUs which support it git-svn-id: trunk@43043 - --- .gitattributes | 2 + compiler/m68k/ag68kgas.pas | 10 ++-- compiler/m68k/cpubase.pas | 45 ++++++++++++------ compiler/m68k/itcpugas.pas | 22 +++++++-- compiler/m68k/m68kreg.dat | 94 ++++++++++++++++++++++++-------------- compiler/m68k/r68kcon.inc | 56 ++++++++++++++++------- compiler/m68k/r68kgas.inc | 24 ++++++++++ compiler/m68k/r68kgasf.inc | 59 ++++++++++++++++++++++++ compiler/m68k/r68kgri.inc | 54 ++++++++++++++++------ compiler/m68k/r68knor.inc | 2 +- compiler/m68k/r68knum.inc | 56 ++++++++++++++++------- compiler/m68k/r68krni.inc | 58 ++++++++++++++++------- compiler/m68k/r68ksri.inc | 74 ++++++++++++++++++++---------- compiler/m68k/r68ksta.inc | 24 ++++++++++ compiler/m68k/r68kstd.inc | 24 ++++++++++ compiler/m68k/r68kstdf.inc | 59 ++++++++++++++++++++++++ compiler/m68k/r68ksup.inc | 32 ++++++------- compiler/utils/mk68kreg.pp | 16 ++++++- 18 files changed, 546 insertions(+), 165 deletions(-) create mode 100644 compiler/m68k/r68kgasf.inc create mode 100644 compiler/m68k/r68kstdf.inc diff --git a/.gitattributes b/.gitattributes index febf3159db..2f8e5b5c32 100644 --- a/.gitattributes +++ b/.gitattributes @@ -396,6 +396,7 @@ compiler/m68k/n68kset.pas svneol=native#text/plain compiler/m68k/r68kbss.inc svneol=native#text/plain compiler/m68k/r68kcon.inc svneol=native#text/plain compiler/m68k/r68kgas.inc svneol=native#text/plain +compiler/m68k/r68kgasf.inc svneol=native#text/plain compiler/m68k/r68kgri.inc svneol=native#text/plain compiler/m68k/r68knor.inc svneol=native#text/plain compiler/m68k/r68knum.inc svneol=native#text/plain @@ -403,6 +404,7 @@ compiler/m68k/r68krni.inc svneol=native#text/plain compiler/m68k/r68ksri.inc svneol=native#text/plain compiler/m68k/r68ksta.inc svneol=native#text/plain compiler/m68k/r68kstd.inc svneol=native#text/plain +compiler/m68k/r68kstdf.inc svneol=native#text/plain compiler/m68k/r68ksup.inc svneol=native#text/plain compiler/m68k/ra68k.pas svneol=native#text/plain compiler/m68k/ra68kmot.pas svneol=native#text/plain diff --git a/compiler/m68k/ag68kgas.pas b/compiler/m68k/ag68kgas.pas index a1f4ac46ba..e5d783e99d 100644 --- a/compiler/m68k/ag68kgas.pas +++ b/compiler/m68k/ag68kgas.pas @@ -111,7 +111,7 @@ interface with ref do begin basestr:=gas_regname(base); - indexstr:=gas_regname(index); + indexstr:=gas_regfullname(index); if assigned(symbol) then begin @@ -138,17 +138,17 @@ interface if (base<>NR_NO) and (index<>NR_NO) then begin if scalefactor in [0,1] then - s:=s+'('+basestr+','+indexstr+'.l)' + s:=s+'('+basestr+','+indexstr+')' else - s:=s+'('+basestr+','+indexstr+'.l*'+tostr(scalefactor)+')'; + s:=s+'('+basestr+','+indexstr+'*'+tostr(scalefactor)+')'; exit; end; if (base=NR_NO) and (index<>NR_NO) then begin if scalefactor in [0,1] then - s:=s+'('+indexstr+'.l)' + s:=s+'('+indexstr+')' else - s:=s+'('+indexstr+'.l*'+tostr(scalefactor)+')'; + s:=s+'('+indexstr+'*'+tostr(scalefactor)+')'; exit; end; end; diff --git a/compiler/m68k/cpubase.pas b/compiler/m68k/cpubase.pas index 91ce6ed80d..ed38f151a0 100644 --- a/compiler/m68k/cpubase.pas +++ b/compiler/m68k/cpubase.pas @@ -116,7 +116,7 @@ unit cpubase; {$i r68ksup.inc} RS_SP = RS_A7; - R_SUBWHOLE = R_SUBNONE; + R_SUBWHOLE = R_SUBD; { Available Registers } {$i r68kcon.inc} @@ -454,25 +454,40 @@ implementation end; function cgsize2subreg(regtype: tregistertype; s:Tcgsize):Tsubregister; - var p: pointer; begin - case s of - OS_8,OS_S8: + case regtype of + R_INTREGISTER: + if (CPUM68K_HAS_BYTEWORDMATH in cpu_capabilities[current_settings.cputype]) then + case s of + OS_8,OS_S8: + cgsize2subreg:=R_SUBL; + OS_16,OS_S16: + cgsize2subreg:=R_SUBW; + OS_32,OS_S32: + cgsize2subreg:=R_SUBD; + OS_NO: + cgsize2subreg:=R_SUBNONE; + else + internalerror(2019090801); + end + else + case s of + OS_8,OS_S8, + OS_16,OS_S16, + OS_32,OS_S32: + cgsize2subreg:=R_SUBWHOLE; + OS_NO: + cgsize2subreg:=R_SUBNONE; + else + internalerror(2019090803); + end; + R_ADDRESSREGISTER: cgsize2subreg:=R_SUBWHOLE; - OS_16,OS_S16: - cgsize2subreg:=R_SUBWHOLE; - OS_32,OS_S32: - cgsize2subreg:=R_SUBWHOLE; - OS_64,OS_S64: - cgsize2subreg:=R_SUBWHOLE; - - OS_F32,OS_F64 : + R_FPUREGISTER: cgsize2subreg:=R_SUBNONE; - OS_NO: - cgsize2subreg:=R_SUBNONE; else - internalerror(2019090801); + internalerror(2019090802); end; end; diff --git a/compiler/m68k/itcpugas.pas b/compiler/m68k/itcpugas.pas index 9165b7962b..3244e4788c 100644 --- a/compiler/m68k/itcpugas.pas +++ b/compiler/m68k/itcpugas.pas @@ -90,18 +90,23 @@ interface function gas_regnum_search(const s:string):Tregister; function gas_regname(r:Tregister):string; + function gas_regfullname(r:Tregister):string; implementation const gas_regname_table : array[tregisterindex] of string[7] = ( - {r386att.inc contains the AT&T name of each register.} + {r68kgas.inc contains the name of each register.} {$i r68kgas.inc} ); + gas_regfullname_table : array[tregisterindex] of string[7] = ( + {r68kgasf.inc contains the "full" name of each register.} + {$i r68kgasf.inc} + ); + gas_regname_index : array[tregisterindex] of tregisterindex = ( - {r386ari.inc contains an index which sorts att_regname_table by - ATT name.} + {r68kgri.inc contains an index which sorts gas_regname_table by name } {$i r68kgri.inc} ); @@ -142,4 +147,15 @@ interface result:='%'+generic_regname(r); end; + function gas_regfullname(r:Tregister):string; + var + p : tregisterindex; + begin + p:=findreg_by_number(r); + if p<>0 then + result:=gas_regfullname_table[p] + else + result:='%'+generic_regname(r); + end; + end. diff --git a/compiler/m68k/m68kreg.dat b/compiler/m68k/m68kreg.dat index be14cda8f9..9dd5676a7d 100644 --- a/compiler/m68k/m68kreg.dat +++ b/compiler/m68k/m68kreg.dat @@ -2,43 +2,67 @@ ; Motorola 680x0 registers ; ; layout -; ,,,, +; ,,,,,, ; -NO,$00000000,INVALID,INVALID,-1 +NO,$00000000,INVALID,INVALID,INVALID,INVALID,-1 -D0,$01000000,d0,%d0,0 -D1,$01000001,d1,%d1,1 -D2,$01000002,d2,%d2,2 -D3,$01000003,d3,%d3,3 -D4,$01000004,d4,%d4,4 -D5,$01000005,d5,%d5,5 -D6,$01000006,d6,%d6,6 -D7,$01000007,d7,%d7,7 +D0,$01040000,d0,%d0,d0.l,%d0.l,0 +D0W,$01030000,d0,%d0,d0.w,%d0.w,0 +D0B,$01010000,d0,%d0,d0.b,%d0.b,0 +D1,$01040001,d1,%d1,d1.l,%d1.l,1 +D1W,$01030001,d1,%d1,d1.w,%d1.w,1 +D1B,$01010001,d1,%d1,d1.b,%d1.b,1 +D2,$01040002,d2,%d2,d2.l,%d2.l,2 +D2W,$01030002,d2,%d2,d2.w,%d2.w,2 +D2B,$01010002,d2,%d2,d2.b,%d2.b,2 +D3,$01040003,d3,%d3,d3.l,%d3.l,3 +D3W,$01030003,d3,%d3,d3.w,%d3.w,3 +D3B,$01010003,d3,%d3,d3.b,%d3.b,3 +D4,$01040004,d4,%d4,d4.l,%d4.l,4 +D4W,$01030004,d4,%d4,d4.w,%d4.w,4 +D4B,$01010004,d4,%d4,d4.b,%d4.b,4 +D5,$01040005,d5,%d5,d5.l,%d5.l,5 +D5W,$01030005,d5,%d5,d5.w,%d5.w,5 +D5B,$01010005,d5,%d5,d5.b,%d5.b,5 +D6,$01040006,d6,%d6,d6.l,%d6.l,6 +D6W,$01030006,d6,%d6,d6.w,%d6.w,6 +D6B,$01010006,d6,%d6,d6.b,%d6.b,6 +D7,$01040007,d7,%d7,d7.l,%d7.l,7 +D7W,$01030007,d7,%d7,d7.w,%d7.w,7 +D7B,$01010007,d7,%d7,d7.b,%d7.b,7 -FP0,$02000000,fp0,%fp0,16 -FP1,$02000001,fp1,%fp1,17 -FP2,$02000002,fp2,%fp2,18 -FP3,$02000003,fp3,%fp3,19 -FP4,$02000004,fp4,%fp4,20 -FP5,$02000005,fp5,%fp5,21 -FP6,$02000006,fp6,%fp6,22 -FP7,$02000007,fp7,%fp7,23 +FP0,$02000000,fp0,%fp0,fp0,%fp0,16 +FP1,$02000001,fp1,%fp1,fp1,%fp1,17 +FP2,$02000002,fp2,%fp2,fp2,%fp2,18 +FP3,$02000003,fp3,%fp3,fp3,%fp3,19 +FP4,$02000004,fp4,%fp4,fp4,%fp4,20 +FP5,$02000005,fp5,%fp5,fp5,%fp5,21 +FP6,$02000006,fp6,%fp6,fp6,%fp6,22 +FP7,$02000007,fp7,%fp7,fp7,%fp7,23 -PC,$05000000,pc,%pc,24 -CCR,$05000001,ccr,%ccr,0 -FPCR,$05000002,fpcr,%fpcr,0 -SR,$05000003,sr,%sr,0 -SSP,$05000004,ssp,%ssp,0 -DFC,$05000005,dfc,%dfc,0 -SFC,$05000006,sfc,%sfc,0 -VBR,$05000007,vbr,%vbr,0 -FPSR,$05000008,fpsr,%fpsr,0 +PC,$05000000,pc,%pc,pc,%pc,24 +CCR,$05000001,ccr,%ccr,ccr,%ccr,0 +FPCR,$05000002,fpcr,%fpcr,fpcr,%fpcr,0 +SR,$05000003,sr,%sr,sr,%sr,0 +SSP,$05000004,ssp,%ssp,ssp,%ssp,0 +DFC,$05000005,dfc,%dfc,dfc,%dfc,0 +SFC,$05000006,sfc,%sfc,sfc,%sfc,0 +VBR,$05000007,vbr,%vbr,vbr,%vbr,0 +FPSR,$05000008,fpsr,%fpsr,fpsr,%fpsr,0 -A0,$06000000,a0,%a0,8 -A1,$06000001,a1,%a1,9 -A2,$06000002,a2,%a2,10 -A3,$06000003,a3,%a3,11 -A4,$06000004,a4,%a4,12 -A5,$06000005,a5,%a5,13 -A6,$06000006,a6,%a6,14 -A7,$06000007,a7,%a7,15 +A0,$06040000,a0,%a0,a0.l,%a0.l,8 +A0W,$06030000,a0,%a0,a0.w,%a0.w,8 +A1,$06040001,a1,%a1,a1.l,%a1.l,9 +A1W,$06030001,a1,%a1,a1.w,%a1.w,9 +A2,$06040002,a2,%a2,a2.l,%a2.l,10 +A2W,$06030002,a2,%a2,a2.w,%a2.w,10 +A3,$06040003,a3,%a3,a3.l,%a3.l,11 +A3W,$06030003,a3,%a3,a3.w,%a3.w,11 +A4,$06040004,a4,%a4,a4.l,%a4.l,12 +A4W,$06030004,a4,%a4,a4.w,%a4.w,12 +A5,$06040005,a5,%a5,a5.l,%a5.l,13 +A5W,$06030005,a5,%a5,a5.w,%a5.w,13 +A6,$06040006,a6,%a6,a6.l,%a6.l,14 +A6W,$06030006,a6,%a6,a6.w,%a6.w,14 +A7,$06040007,a7,%a7,a7.l,%a7.l,15 +A7W,$06020007,a7,%a7,a7.w,%a7.w,15 diff --git a/compiler/m68k/r68kcon.inc b/compiler/m68k/r68kcon.inc index 4a21cc15bb..870fb3943b 100644 --- a/compiler/m68k/r68kcon.inc +++ b/compiler/m68k/r68kcon.inc @@ -1,13 +1,29 @@ { don't edit, this file is generated from m68kreg.dat } NR_NO = tregister($00000000); -NR_D0 = tregister($01000000); -NR_D1 = tregister($01000001); -NR_D2 = tregister($01000002); -NR_D3 = tregister($01000003); -NR_D4 = tregister($01000004); -NR_D5 = tregister($01000005); -NR_D6 = tregister($01000006); -NR_D7 = tregister($01000007); +NR_D0 = tregister($01040000); +NR_D0W = tregister($01030000); +NR_D0B = tregister($01010000); +NR_D1 = tregister($01040001); +NR_D1W = tregister($01030001); +NR_D1B = tregister($01010001); +NR_D2 = tregister($01040002); +NR_D2W = tregister($01030002); +NR_D2B = tregister($01010002); +NR_D3 = tregister($01040003); +NR_D3W = tregister($01030003); +NR_D3B = tregister($01010003); +NR_D4 = tregister($01040004); +NR_D4W = tregister($01030004); +NR_D4B = tregister($01010004); +NR_D5 = tregister($01040005); +NR_D5W = tregister($01030005); +NR_D5B = tregister($01010005); +NR_D6 = tregister($01040006); +NR_D6W = tregister($01030006); +NR_D6B = tregister($01010006); +NR_D7 = tregister($01040007); +NR_D7W = tregister($01030007); +NR_D7B = tregister($01010007); NR_FP0 = tregister($02000000); NR_FP1 = tregister($02000001); NR_FP2 = tregister($02000002); @@ -25,11 +41,19 @@ NR_DFC = tregister($05000005); NR_SFC = tregister($05000006); NR_VBR = tregister($05000007); NR_FPSR = tregister($05000008); -NR_A0 = tregister($06000000); -NR_A1 = tregister($06000001); -NR_A2 = tregister($06000002); -NR_A3 = tregister($06000003); -NR_A4 = tregister($06000004); -NR_A5 = tregister($06000005); -NR_A6 = tregister($06000006); -NR_A7 = tregister($06000007); +NR_A0 = tregister($06040000); +NR_A0W = tregister($06030000); +NR_A1 = tregister($06040001); +NR_A1W = tregister($06030001); +NR_A2 = tregister($06040002); +NR_A2W = tregister($06030002); +NR_A3 = tregister($06040003); +NR_A3W = tregister($06030003); +NR_A4 = tregister($06040004); +NR_A4W = tregister($06030004); +NR_A5 = tregister($06040005); +NR_A5W = tregister($06030005); +NR_A6 = tregister($06040006); +NR_A6W = tregister($06030006); +NR_A7 = tregister($06040007); +NR_A7W = tregister($06020007); diff --git a/compiler/m68k/r68kgas.inc b/compiler/m68k/r68kgas.inc index 8f1f99fd59..8705e68358 100644 --- a/compiler/m68k/r68kgas.inc +++ b/compiler/m68k/r68kgas.inc @@ -1,12 +1,28 @@ { don't edit, this file is generated from m68kreg.dat } 'INVALID', '%d0', +'%d0', +'%d0', +'%d1', +'%d1', '%d1', '%d2', +'%d2', +'%d2', +'%d3', +'%d3', '%d3', '%d4', +'%d4', +'%d4', +'%d5', +'%d5', '%d5', '%d6', +'%d6', +'%d6', +'%d7', +'%d7', '%d7', '%fp0', '%fp1', @@ -26,10 +42,18 @@ '%vbr', '%fpsr', '%a0', +'%a0', +'%a1', '%a1', '%a2', +'%a2', +'%a3', '%a3', '%a4', +'%a4', +'%a5', '%a5', '%a6', +'%a6', +'%a7', '%a7' diff --git a/compiler/m68k/r68kgasf.inc b/compiler/m68k/r68kgasf.inc new file mode 100644 index 0000000000..a72013807f --- /dev/null +++ b/compiler/m68k/r68kgasf.inc @@ -0,0 +1,59 @@ +{ don't edit, this file is generated from m68kreg.dat } +'INVALID', +'%d0.l', +'%d0.w', +'%d0.b', +'%d1.l', +'%d1.w', +'%d1.b', +'%d2.l', +'%d2.w', +'%d2.b', +'%d3.l', +'%d3.w', +'%d3.b', +'%d4.l', +'%d4.w', +'%d4.b', +'%d5.l', +'%d5.w', +'%d5.b', +'%d6.l', +'%d6.w', +'%d6.b', +'%d7.l', +'%d7.w', +'%d7.b', +'%fp0', +'%fp1', +'%fp2', +'%fp3', +'%fp4', +'%fp5', +'%fp6', +'%fp7', +'%pc', +'%ccr', +'%fpcr', +'%sr', +'%ssp', +'%dfc', +'%sfc', +'%vbr', +'%fpsr', +'%a0.l', +'%a0.w', +'%a1.l', +'%a1.w', +'%a2.l', +'%a2.w', +'%a3.l', +'%a3.w', +'%a4.l', +'%a4.w', +'%a5.l', +'%a5.w', +'%a6.l', +'%a6.w', +'%a7.l', +'%a7.w' diff --git a/compiler/m68k/r68kgri.inc b/compiler/m68k/r68kgri.inc index 43f743d38d..0e386d3f1a 100644 --- a/compiler/m68k/r68kgri.inc +++ b/compiler/m68k/r68kgri.inc @@ -1,13 +1,21 @@ { don't edit, this file is generated from m68kreg.dat } -26, -27, -28, -29, -30, -31, -32, -33, -18, +42, +43, +44, +45, +46, +47, +48, +49, +50, +51, +52, +53, +54, +55, +56, +57, +34, 1, 2, 3, @@ -16,20 +24,36 @@ 6, 7, 8, -22, 9, -10, -11, 12, +11, +10, 13, 14, 15, 16, -19, -25, 17, -23, +18, +19, 20, 21, 24, +23, +22, +38, +25, +26, +27, +28, +29, +30, +31, +32, +35, +41, +33, +39, +36, +37, +40, 0 diff --git a/compiler/m68k/r68knor.inc b/compiler/m68k/r68knor.inc index c1e8cc2f30..46f68bca2f 100644 --- a/compiler/m68k/r68knor.inc +++ b/compiler/m68k/r68knor.inc @@ -1,2 +1,2 @@ { don't edit, this file is generated from m68kreg.dat } -34 +58 diff --git a/compiler/m68k/r68knum.inc b/compiler/m68k/r68knum.inc index 0dc71ce16f..4e6c3731e8 100644 --- a/compiler/m68k/r68knum.inc +++ b/compiler/m68k/r68knum.inc @@ -1,13 +1,29 @@ { don't edit, this file is generated from m68kreg.dat } tregister($00000000), -tregister($01000000), -tregister($01000001), -tregister($01000002), -tregister($01000003), -tregister($01000004), -tregister($01000005), -tregister($01000006), -tregister($01000007), +tregister($01040000), +tregister($01030000), +tregister($01010000), +tregister($01040001), +tregister($01030001), +tregister($01010001), +tregister($01040002), +tregister($01030002), +tregister($01010002), +tregister($01040003), +tregister($01030003), +tregister($01010003), +tregister($01040004), +tregister($01030004), +tregister($01010004), +tregister($01040005), +tregister($01030005), +tregister($01010005), +tregister($01040006), +tregister($01030006), +tregister($01010006), +tregister($01040007), +tregister($01030007), +tregister($01010007), tregister($02000000), tregister($02000001), tregister($02000002), @@ -25,11 +41,19 @@ tregister($05000005), tregister($05000006), tregister($05000007), tregister($05000008), -tregister($06000000), -tregister($06000001), -tregister($06000002), -tregister($06000003), -tregister($06000004), -tregister($06000005), -tregister($06000006), -tregister($06000007) +tregister($06040000), +tregister($06030000), +tregister($06040001), +tregister($06030001), +tregister($06040002), +tregister($06030002), +tregister($06040003), +tregister($06030003), +tregister($06040004), +tregister($06030004), +tregister($06040005), +tregister($06030005), +tregister($06040006), +tregister($06030006), +tregister($06040007), +tregister($06020007) diff --git a/compiler/m68k/r68krni.inc b/compiler/m68k/r68krni.inc index d6364bb31a..d902d2917f 100644 --- a/compiler/m68k/r68krni.inc +++ b/compiler/m68k/r68krni.inc @@ -1,29 +1,29 @@ { don't edit, this file is generated from m68kreg.dat } 0, -1, -2, 3, -4, -5, 6, -7, -8, 9, -10, -11, 12, -13, -14, 15, -16, -17, 18, -19, -20, 21, -22, -23, 24, +2, +5, +8, +11, +14, +17, +20, +23, +1, +4, +7, +10, +13, +16, +19, +22, 25, 26, 27, @@ -32,4 +32,28 @@ 30, 31, 32, -33 +33, +34, +35, +36, +37, +38, +39, +40, +41, +57, +43, +45, +47, +49, +51, +53, +55, +42, +44, +46, +48, +50, +52, +54, +56 diff --git a/compiler/m68k/r68ksri.inc b/compiler/m68k/r68ksri.inc index 19f6bdbbde..47fd3b2f30 100644 --- a/compiler/m68k/r68ksri.inc +++ b/compiler/m68k/r68ksri.inc @@ -1,5 +1,48 @@ { don't edit, this file is generated from m68kreg.dat } 0, +43, +42, +45, +44, +47, +46, +49, +48, +51, +50, +53, +52, +55, +54, +57, +56, +34, +1, +3, +2, +5, +4, +6, +7, +9, +8, +11, +12, +10, +13, +15, +14, +17, +16, +18, +19, +21, +20, +23, +24, +22, +38, +25, 26, 27, 28, @@ -7,29 +50,10 @@ 30, 31, 32, +35, +41, 33, -18, -1, -2, -3, -4, -5, -6, -7, -8, -22, -9, -10, -11, -12, -13, -14, -15, -16, -19, -25, -17, -23, -20, -21, -24 +39, +36, +37, +40 diff --git a/compiler/m68k/r68ksta.inc b/compiler/m68k/r68ksta.inc index ed8d142fe4..077c893ce1 100644 --- a/compiler/m68k/r68ksta.inc +++ b/compiler/m68k/r68ksta.inc @@ -1,12 +1,28 @@ { don't edit, this file is generated from m68kreg.dat } -1, 0, +0, +0, +1, +1, 1, 2, +2, +2, +3, +3, 3, 4, +4, +4, +5, +5, 5, 6, +6, +6, +7, +7, 7, 16, 17, @@ -26,10 +42,18 @@ 0, 0, 8, +8, +9, 9, 10, +10, +11, 11, 12, +12, +13, 13, 14, +14, +15, 15 diff --git a/compiler/m68k/r68kstd.inc b/compiler/m68k/r68kstd.inc index 103d3b250e..296844fff0 100644 --- a/compiler/m68k/r68kstd.inc +++ b/compiler/m68k/r68kstd.inc @@ -1,12 +1,28 @@ { don't edit, this file is generated from m68kreg.dat } 'INVALID', 'd0', +'d0', +'d0', +'d1', +'d1', 'd1', 'd2', +'d2', +'d2', +'d3', +'d3', 'd3', 'd4', +'d4', +'d4', +'d5', +'d5', 'd5', 'd6', +'d6', +'d6', +'d7', +'d7', 'd7', 'fp0', 'fp1', @@ -26,10 +42,18 @@ 'vbr', 'fpsr', 'a0', +'a0', +'a1', 'a1', 'a2', +'a2', +'a3', 'a3', 'a4', +'a4', +'a5', 'a5', 'a6', +'a6', +'a7', 'a7' diff --git a/compiler/m68k/r68kstdf.inc b/compiler/m68k/r68kstdf.inc new file mode 100644 index 0000000000..1f94c7c12b --- /dev/null +++ b/compiler/m68k/r68kstdf.inc @@ -0,0 +1,59 @@ +{ don't edit, this file is generated from m68kreg.dat } +'INVALID', +'d0.l', +'d0.w', +'d0.b', +'d1.l', +'d1.w', +'d1.b', +'d2.l', +'d2.w', +'d2.b', +'d3.l', +'d3.w', +'d3.b', +'d4.l', +'d4.w', +'d4.b', +'d5.l', +'d5.w', +'d5.b', +'d6.l', +'d6.w', +'d6.b', +'d7.l', +'d7.w', +'d7.b', +'fp0', +'fp1', +'fp2', +'fp3', +'fp4', +'fp5', +'fp6', +'fp7', +'pc', +'ccr', +'fpcr', +'sr', +'ssp', +'dfc', +'sfc', +'vbr', +'fpsr', +'a0.l', +'a0.w', +'a1.l', +'a1.w', +'a2.l', +'a2.w', +'a3.l', +'a3.w', +'a4.l', +'a4.w', +'a5.l', +'a5.w', +'a6.l', +'a6.w', +'a7.l', +'a7.w' diff --git a/compiler/m68k/r68ksup.inc b/compiler/m68k/r68ksup.inc index 062841994e..207579bcea 100644 --- a/compiler/m68k/r68ksup.inc +++ b/compiler/m68k/r68ksup.inc @@ -1,13 +1,13 @@ { don't edit, this file is generated from m68kreg.dat } RS_NO = $00; { $00000000 } -RS_D0 = $00; { $01000000 } -RS_D1 = $01; { $01000001 } -RS_D2 = $02; { $01000002 } -RS_D3 = $03; { $01000003 } -RS_D4 = $04; { $01000004 } -RS_D5 = $05; { $01000005 } -RS_D6 = $06; { $01000006 } -RS_D7 = $07; { $01000007 } +RS_D0 = $00; { $01040000 } +RS_D1 = $01; { $01040001 } +RS_D2 = $02; { $01040002 } +RS_D3 = $03; { $01040003 } +RS_D4 = $04; { $01040004 } +RS_D5 = $05; { $01040005 } +RS_D6 = $06; { $01040006 } +RS_D7 = $07; { $01040007 } RS_FP0 = $00; { $02000000 } RS_FP1 = $01; { $02000001 } RS_FP2 = $02; { $02000002 } @@ -25,11 +25,11 @@ RS_DFC = $05; { $05000005 } RS_SFC = $06; { $05000006 } RS_VBR = $07; { $05000007 } RS_FPSR = $08; { $05000008 } -RS_A0 = $00; { $06000000 } -RS_A1 = $01; { $06000001 } -RS_A2 = $02; { $06000002 } -RS_A3 = $03; { $06000003 } -RS_A4 = $04; { $06000004 } -RS_A5 = $05; { $06000005 } -RS_A6 = $06; { $06000006 } -RS_A7 = $07; { $06000007 } +RS_A0 = $00; { $06040000 } +RS_A1 = $01; { $06040001 } +RS_A2 = $02; { $06040002 } +RS_A3 = $03; { $06040003 } +RS_A4 = $04; { $06040004 } +RS_A5 = $05; { $06040005 } +RS_A6 = $06; { $06040006 } +RS_A7 = $07; { $06040007 } diff --git a/compiler/utils/mk68kreg.pp b/compiler/utils/mk68kreg.pp index 9aa5e7100c..3cd6d19c40 100644 --- a/compiler/utils/mk68kreg.pp +++ b/compiler/utils/mk68kreg.pp @@ -27,6 +27,8 @@ var s : string; values, stdnames, gasnames, + stdfullnames, + gasfullnames, stabs : array[0..max_regcount-1] of string[63]; regnumber_index, std_regname_index,gas_regname_index : array[0..max_regcount-1] of byte; @@ -203,6 +205,10 @@ begin readcomma; gasnames[regcount]:=readstr; readcomma; + stdfullnames[regcount]:=readstr; + readcomma; + gasfullnames[regcount]:=readstr; + readcomma; stabs[regcount]:=readstr; { Create register number } if values[regcount][1]<>'$' then @@ -230,7 +236,7 @@ end; procedure write_inc_files; var - norfile,stdfile,gasfile,supfile, + norfile,stdfile,stdffile,gasfile,gasffile,supfile, numfile,stabfile,confile, rnifile,srifile,grifile, bssfile:text; @@ -243,6 +249,8 @@ begin openinc(numfile,'r68knum.inc'); openinc(stdfile,'r68kstd.inc'); openinc(gasfile,'r68kgas.inc'); + openinc(stdffile,'r68kstdf.inc'); + openinc(gasffile,'r68kgasf.inc'); openinc(stabfile,'r68ksta.inc'); openinc(norfile,'r68knor.inc'); openinc(rnifile,'r68krni.inc'); @@ -257,6 +265,8 @@ begin writeln(numfile,','); writeln(stdfile,','); writeln(gasfile,','); + writeln(stdffile,','); + writeln(gasffile,','); writeln(stabfile,','); writeln(rnifile,','); writeln(srifile,','); @@ -270,6 +280,8 @@ begin write(numfile,'tregister(',values[i],')'); write(stdfile,'''',stdnames[i],''''); write(gasfile,'''',gasnames[i],''''); + write(stdffile,'''',stdfullnames[i],''''); + write(gasffile,'''',gasfullnames[i],''''); write(stabfile,stabs[i]); write(rnifile,regnumber_index[i]); write(srifile,std_regname_index[i]); @@ -282,6 +294,8 @@ begin closeinc(numfile); closeinc(stdfile); closeinc(gasfile); + closeinc(stdffile); + closeinc(gasffile); closeinc(stabfile); closeinc(norfile); closeinc(rnifile);