2
0
Эх сурвалжийг харах

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 -
Károly Balogh 5 жил өмнө
parent
commit
19a6964088

+ 2 - 0
.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

+ 5 - 5
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;

+ 30 - 15
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;
 

+ 19 - 3
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.

+ 59 - 35
compiler/m68k/m68kreg.dat

@@ -2,43 +2,67 @@
 ; Motorola 680x0 registers
 ;
 ; layout
-; <name>,<value>,<stdname>,<gasname>,<stabidx>
+; <name>,<value>,<stdname>,<gasname>,<stfullname>,<gasfullname>,<stabidx>
 ;
-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

+ 40 - 16
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);

+ 24 - 0
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'

+ 59 - 0
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'

+ 39 - 15
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

+ 1 - 1
compiler/m68k/r68knor.inc

@@ -1,2 +1,2 @@
 { don't edit, this file is generated from m68kreg.dat }
-34
+58

+ 40 - 16
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)

+ 41 - 17
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

+ 44 - 20
compiler/m68k/r68ksri.inc

@@ -1,35 +1,59 @@
 { don't edit, this file is generated from m68kreg.dat }
 0,
-26,
-27,
-28,
-29,
-30,
-31,
-32,
-33,
-18,
+43,
+42,
+45,
+44,
+47,
+46,
+49,
+48,
+51,
+50,
+53,
+52,
+55,
+54,
+57,
+56,
+34,
 1,
-2,
 3,
-4,
+2,
 5,
+4,
 6,
 7,
-8,
-22,
 9,
-10,
+8,
 11,
 12,
+10,
 13,
-14,
 15,
+14,
+17,
 16,
+18,
 19,
-25,
-17,
-23,
-20,
 21,
-24
+20,
+23,
+24,
+22,
+38,
+25,
+26,
+27,
+28,
+29,
+30,
+31,
+32,
+35,
+41,
+33,
+39,
+36,
+37,
+40

+ 24 - 0
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

+ 24 - 0
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'

+ 59 - 0
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'

+ 16 - 16
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 }

+ 15 - 1
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);