瀏覽代碼

+ gas registers

florian 21 年之前
父節點
當前提交
b19572b41d

+ 6 - 4
compiler/m68k/m68kreg.dat

@@ -6,7 +6,7 @@
 ; layout
 ; <name>,<type>,<value>,<stdname>,<stabidx>
 ;
-NO,$00,$00,INVALID,-1
+NO,$00,$00,INVALID,INVALID,-1
 
 D0,$01,$00,d0,%d0,0
 D1,$01,$01,d1,%d1,1
@@ -34,7 +34,7 @@ FP5,$02,$05,fp5,%fp5,21
 FP6,$02,$06,fp6,%fp6,22
 FP7,$02,$07,fp7,%fp7,23
 
-PC,$05,$00,pc,24
+PC,$05,$00,pc,%pc,24
 CCR,$05,$01,ccr,%ccr,0
 FPCR,$05,$02,fpcr,%fpcr,0
 SR,$05,$03,sr,%sr,0
@@ -46,10 +46,12 @@ FPSR,$05,$08,fpsr,%fpsr,0
 
 ;
 ;  $Log$
-;  Revision 1.2  2004-04-25 21:26:16  florian
+;  Revision 1.3  2004-04-26 11:05:28  florian
+;    + gas registers
+;
+;  Revision 1.2  2004/04/25 21:26:16  florian
 ;    * some m68k stuff fixed
 ;
 ;  Revision 1.1  2003/12/10 02:30:58  karoly
 ;    * initial revision
 ;
-;

+ 8 - 0
compiler/m68k/r68kcon.inc

@@ -25,3 +25,11 @@ NR_FP5 = tregister($02000005);
 NR_FP6 = tregister($02000006);
 NR_FP7 = tregister($02000007);
 NR_PC = tregister($05000000);
+NR_CCR = tregister($05000001);
+NR_FPCR = tregister($05000002);
+NR_SR = tregister($05000003);
+NR_SSP = tregister($05000004);
+NR_DFC = tregister($05000005);
+NR_SFC = tregister($05000006);
+NR_VBR = tregister($05000007);
+NR_FPSR = tregister($05000008);

+ 35 - 0
compiler/m68k/r68kgas.inc

@@ -0,0 +1,35 @@
+{ don't edit, this file is generated from m68kreg.dat }
+'INVALID',
+'%d0',
+'%d1',
+'%d2',
+'%d3',
+'%d4',
+'%d5',
+'%d6',
+'%d7',
+'%a0',
+'%a1',
+'%a2',
+'%a3',
+'%a4',
+'%a5',
+'%a6',
+'%sp',
+'%fp0',
+'%fp1',
+'%fp2',
+'%fp3',
+'%fp4',
+'%fp5',
+'%fp6',
+'%fp7',
+'%pc',
+'%ccr',
+'%fpcr',
+'%sr',
+'%ssp',
+'%dfc',
+'%sfc',
+'%vbr',
+'%fpsr'

+ 35 - 0
compiler/m68k/r68kgri.inc

@@ -0,0 +1,35 @@
+{ don't edit, this file is generated from m68kreg.dat }
+9,
+10,
+11,
+12,
+13,
+14,
+15,
+26,
+1,
+2,
+3,
+4,
+5,
+6,
+7,
+8,
+30,
+17,
+18,
+19,
+20,
+21,
+22,
+23,
+24,
+27,
+33,
+25,
+31,
+16,
+28,
+29,
+32,
+0

+ 1 - 1
compiler/m68k/r68knor.inc

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

+ 9 - 1
compiler/m68k/r68knum.inc

@@ -24,4 +24,12 @@ tregister($02000004),
 tregister($02000005),
 tregister($02000006),
 tregister($02000007),
-tregister($05000000)
+tregister($05000000),
+tregister($05000001),
+tregister($05000002),
+tregister($05000003),
+tregister($05000004),
+tregister($05000005),
+tregister($05000006),
+tregister($05000007),
+tregister($05000008)

+ 9 - 1
compiler/m68k/r68krni.inc

@@ -24,4 +24,12 @@
 22,
 23,
 24,
-25
+25,
+26,
+27,
+28,
+29,
+30,
+31,
+32,
+33

+ 10 - 2
compiler/m68k/r68ksri.inc

@@ -7,14 +7,16 @@
 13,
 14,
 15,
+26,
 1,
 2,
 3,
 4,
 5,
 6,
-8,
 7,
+8,
+30,
 17,
 18,
 19,
@@ -23,5 +25,11 @@
 22,
 23,
 24,
+27,
+33,
 25,
-16
+31,
+16,
+28,
+29,
+32

+ 9 - 1
compiler/m68k/r68ksta.inc

@@ -24,4 +24,12 @@
 21,
 22,
 23,
-24
+24,
+0,
+0,
+0,
+0,
+0,
+0,
+0,
+0

+ 10 - 2
compiler/m68k/r68kstd.inc

@@ -7,7 +7,7 @@
 'd4',
 'd5',
 'd6',
-'d6',
+'d7',
 'a0',
 'a1',
 'a2',
@@ -24,4 +24,12 @@
 'fp5',
 'fp6',
 'fp7',
-'pc'
+'pc',
+'ccr',
+'fpcr',
+'sr',
+'ssp',
+'dfc',
+'sfc',
+'vbr',
+'fpsr'

+ 8 - 0
compiler/m68k/r68ksup.inc

@@ -25,3 +25,11 @@ RS_FP5 = $05;
 RS_FP6 = $06;
 RS_FP7 = $07;
 RS_PC = $00;
+RS_CCR = $01;
+RS_FPCR = $02;
+RS_SR = $03;
+RS_SSP = $04;
+RS_DFC = $05;
+RS_SFC = $06;
+RS_VBR = $07;
+RS_FPSR = $08;

+ 50 - 5
compiler/utils/mk68kreg.pp

@@ -28,9 +28,10 @@ var s : string;
     supregs,
     numbers,
     stdnames,
+    gasnames,
     stabs : array[0..max_regcount-1] of string[63];
     regnumber_index,
-    std_regname_index : array[0..max_regcount-1] of byte;
+    std_regname_index,gas_regname_index : array[0..max_regcount-1] of byte;
 
 {$ifndef FPC}
   procedure readln(var t:text;var s:string);
@@ -173,6 +174,36 @@ begin
   until p=0;
 end;
 
+procedure build_gas_regname_index;
+
+var h,i,j,p,t:byte;
+
+begin
+  {Build the registernumber2regindex index.
+   Step 1: Fill.}
+  for i:=0 to regcount-1 do
+    gas_regname_index[i]:=i;
+  {Step 2: Sort. We use a Shell-Metzner sort.}
+  p:=regcount_bsstart;
+  repeat
+    for h:=0 to regcount-p-1 do
+      begin
+        i:=h;
+        repeat
+          j:=i+p;
+          if gasnames[gas_regname_index[j]]>=gasnames[gas_regname_index[i]] then
+            break;
+          t:=gas_regname_index[i];
+          gas_regname_index[i]:=gas_regname_index[j];
+          gas_regname_index[j]:=t;
+          if i<p then
+            break;
+          dec(i,p);
+        until false;
+      end;
+    p:=p shr 1;
+  until p=0;
+end;
 
 procedure read_spreg_file;
 
@@ -201,6 +232,8 @@ begin
         readcomma;
         stdnames[regcount]:=readstr;
         readcomma;
+        gasnames[regcount]:=readstr;
+        readcomma;
         stabs[regcount]:=readstr;
         { Create register number }
         if supregs[regcount][1]<>'$' then
@@ -229,9 +262,9 @@ end;
 procedure write_inc_files;
 
 var
-    norfile,stdfile,supfile,
+    norfile,stdfile,gasfile,supfile,
     numfile,stabfile,confile,
-    rnifile,srifile:text;
+    rnifile,srifile,grifile:text;
     first:boolean;
 
 begin
@@ -240,10 +273,12 @@ begin
   openinc(supfile,'r68ksup.inc');
   openinc(numfile,'r68knum.inc');
   openinc(stdfile,'r68kstd.inc');
+  openinc(gasfile,'r68kgas.inc');
   openinc(stabfile,'r68ksta.inc');
   openinc(norfile,'r68knor.inc');
   openinc(rnifile,'r68krni.inc');
   openinc(srifile,'r68ksri.inc');
+  openinc(grifile,'r68kgri.inc');
   first:=true;
   for i:=0 to regcount-1 do
     begin
@@ -251,9 +286,11 @@ begin
         begin
           writeln(numfile,',');
           writeln(stdfile,',');
+          writeln(gasfile,',');
           writeln(stabfile,',');
           writeln(rnifile,',');
           writeln(srifile,',');
+          writeln(grifile,',');
         end
       else
         first:=false;
@@ -261,19 +298,23 @@ begin
       writeln(confile,'NR_'+names[i],' = ','tregister(',numbers[i],')',';');
       write(numfile,'tregister(',numbers[i],')');
       write(stdfile,'''',stdnames[i],'''');
+      write(gasfile,'''',gasnames[i],'''');
       write(stabfile,stabs[i]);
       write(rnifile,regnumber_index[i]);
       write(srifile,std_regname_index[i]);
+      write(grifile,gas_regname_index[i]);
     end;
   write(norfile,regcount);
   close(confile);
   close(supfile);
   closeinc(numfile);
   closeinc(stdfile);
+  closeinc(gasfile);
   closeinc(stabfile);
   closeinc(norfile);
   closeinc(rnifile);
   closeinc(srifile);
+  closeinc(grifile);
   writeln('Done!');
   writeln(regcount,' registers procesed');
 end;
@@ -289,13 +330,17 @@ begin
      regcount_bsstart:=regcount_bsstart*2;
    build_regnum_index;
    build_std_regname_index;
+   build_gas_regname_index;
    write_inc_files;
 end.
 {
 $Log$
-Revision 1.3  2004-01-30 13:42:03  florian
+Revision 1.4  2004-04-26 11:05:14  florian
+  + gas registers
+
+Revision 1.3  2004/01/30 13:42:03  florian
   * fixed more alignment issues
 
 Revision 1.2  2003/12/10 02:22:59  karoly
   * fixed logs
-}
+}