mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-22 00:29:33 +02:00
m68k: new 68k register data file format, which eases future subregister support
git-svn-id: trunk@32653 -
This commit is contained in:
parent
a3964d9ee0
commit
9133964676
@ -2,43 +2,43 @@
|
||||
; Motorola 680x0 registers
|
||||
;
|
||||
; layout
|
||||
; <name>,<type>,<value>,<stdname>,<stabidx>
|
||||
; <name>,<value>,<stdname>,<gasname>,<stabidx>
|
||||
;
|
||||
NO,$00,$00,INVALID,INVALID,-1
|
||||
NO,$00000000,INVALID,INVALID,-1
|
||||
|
||||
D0,$01,$00,d0,%d0,0
|
||||
D1,$01,$01,d1,%d1,1
|
||||
D2,$01,$02,d2,%d2,2
|
||||
D3,$01,$03,d3,%d3,3
|
||||
D4,$01,$04,d4,%d4,4
|
||||
D5,$01,$05,d5,%d5,5
|
||||
D6,$01,$06,d6,%d6,6
|
||||
D7,$01,$07,d7,%d7,7
|
||||
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
|
||||
|
||||
FP0,$02,$00,fp0,%fp0,16
|
||||
FP1,$02,$01,fp1,%fp1,17
|
||||
FP2,$02,$02,fp2,%fp2,18
|
||||
FP3,$02,$03,fp3,%fp3,19
|
||||
FP4,$02,$04,fp4,%fp4,20
|
||||
FP5,$02,$05,fp5,%fp5,21
|
||||
FP6,$02,$06,fp6,%fp6,22
|
||||
FP7,$02,$07,fp7,%fp7,23
|
||||
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
|
||||
|
||||
PC,$05,$00,pc,%pc,24
|
||||
CCR,$05,$01,ccr,%ccr,0
|
||||
FPCR,$05,$02,fpcr,%fpcr,0
|
||||
SR,$05,$03,sr,%sr,0
|
||||
SSP,$05,$04,ssp,%ssp,0
|
||||
DFC,$05,$05,dfc,%dfc,0
|
||||
SFC,$05,$06,sfc,%sfc,0
|
||||
VBR,$05,$07,vbr,%vbr,0
|
||||
FPSR,$05,$08,fpsr,%fpsr,0
|
||||
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
|
||||
|
||||
A0,$06,$00,a0,%a0,8
|
||||
A1,$06,$01,a1,%a1,9
|
||||
A2,$06,$02,a2,%a2,10
|
||||
A3,$06,$03,a3,%a3,11
|
||||
A4,$06,$04,a4,%a4,12
|
||||
A5,$06,$05,a5,%a5,13
|
||||
A6,$06,$06,a6,%a6,14
|
||||
A7,$06,$07,a7,%a7,15
|
||||
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
|
||||
|
@ -1,7 +1,7 @@
|
||||
{
|
||||
Copyright (c) 1998-2002 by Peter Vreman and Florian Klaempfl
|
||||
|
||||
Convert spreg.dat to several .inc files for usage with
|
||||
Convert m68kreg.dat to several .inc files for usage with
|
||||
the Free pascal compiler
|
||||
|
||||
See the file COPYING.FPC, included in this distribution,
|
||||
@ -13,7 +13,7 @@
|
||||
|
||||
**********************************************************************}
|
||||
{$mode objfpc}
|
||||
program mkspreg;
|
||||
program mk68kreg;
|
||||
|
||||
const Version = '1.00';
|
||||
max_regcount = 200;
|
||||
@ -24,9 +24,7 @@ var s : string;
|
||||
regcount:byte;
|
||||
regcount_bsstart:byte;
|
||||
names,
|
||||
regtypes,
|
||||
supregs,
|
||||
numbers,
|
||||
values,
|
||||
stdnames,
|
||||
gasnames,
|
||||
stabs : array[0..max_regcount-1] of string[63];
|
||||
@ -102,7 +100,7 @@ begin
|
||||
i:=h;
|
||||
repeat
|
||||
j:=i+p;
|
||||
if numbers[regnumber_index[j]]>=numbers[regnumber_index[i]] then
|
||||
if values[regnumber_index[j]]>=values[regnumber_index[i]] then
|
||||
break;
|
||||
t:=regnumber_index[i];
|
||||
regnumber_index[i]:=regnumber_index[j];
|
||||
@ -199,9 +197,7 @@ begin
|
||||
i:=1;
|
||||
names[regcount]:=readstr;
|
||||
readcomma;
|
||||
regtypes[regcount]:=readstr;
|
||||
readcomma;
|
||||
supregs[regcount]:=readstr;
|
||||
values[regcount]:=readstr;
|
||||
readcomma;
|
||||
stdnames[regcount]:=readstr;
|
||||
readcomma;
|
||||
@ -209,13 +205,12 @@ begin
|
||||
readcomma;
|
||||
stabs[regcount]:=readstr;
|
||||
{ Create register number }
|
||||
if supregs[regcount][1]<>'$' then
|
||||
if values[regcount][1]<>'$' then
|
||||
begin
|
||||
writeln('Missing $ before number, at line ',line);
|
||||
writeln('Line: "',s,'"');
|
||||
halt(1);
|
||||
end;
|
||||
numbers[regcount]:=regtypes[regcount]+'0000'+copy(supregs[regcount],2,255);
|
||||
if i<length(s) then
|
||||
begin
|
||||
writeln('Extra chars at end of line, at line ',line);
|
||||
@ -237,7 +232,8 @@ procedure write_inc_files;
|
||||
var
|
||||
norfile,stdfile,gasfile,supfile,
|
||||
numfile,stabfile,confile,
|
||||
rnifile,srifile,grifile:text;
|
||||
rnifile,srifile,grifile,
|
||||
bssfile:text;
|
||||
first:boolean;
|
||||
|
||||
begin
|
||||
@ -252,6 +248,7 @@ begin
|
||||
openinc(rnifile,'r68krni.inc');
|
||||
openinc(srifile,'r68ksri.inc');
|
||||
openinc(grifile,'r68kgri.inc');
|
||||
openinc(bssfile,'r68kbss.inc');
|
||||
first:=true;
|
||||
for i:=0 to regcount-1 do
|
||||
begin
|
||||
@ -267,9 +264,10 @@ begin
|
||||
end
|
||||
else
|
||||
first:=false;
|
||||
writeln(supfile,'RS_',names[i],' = ',supregs[i],';');
|
||||
writeln(confile,'NR_'+names[i],' = ','tregister(',numbers[i],')',';');
|
||||
write(numfile,'tregister(',numbers[i],')');
|
||||
if (copy(values[i],4,2)='00') or (copy(values[i],4,2)='04') then // subd or subnone -> superregister
|
||||
writeln(supfile,'RS_',names[i],' = $',copy(values[i],length(values[i])-1,2),'; { ',values[i],' }');
|
||||
writeln(confile,'NR_'+names[i],' = ','tregister(',values[i],')',';');
|
||||
write(numfile,'tregister(',values[i],')');
|
||||
write(stdfile,'''',stdnames[i],'''');
|
||||
write(gasfile,'''',gasnames[i],'''');
|
||||
write(stabfile,stabs[i]);
|
||||
@ -278,6 +276,7 @@ begin
|
||||
write(grifile,gas_regname_index[i]);
|
||||
end;
|
||||
write(norfile,regcount);
|
||||
write(bssfile,'regnumber_count_bsstart = ',regcount_bsstart,';');
|
||||
close(confile);
|
||||
close(supfile);
|
||||
closeinc(numfile);
|
||||
@ -288,6 +287,7 @@ begin
|
||||
closeinc(rnifile);
|
||||
closeinc(srifile);
|
||||
closeinc(grifile);
|
||||
closeinc(bssfile);
|
||||
writeln('Done!');
|
||||
writeln(regcount,' registers processed');
|
||||
end;
|
||||
|
Loading…
Reference in New Issue
Block a user