+ gas registers

This commit is contained in:
florian 2004-04-26 11:05:14 +00:00
parent 1f18d7ac1b
commit b19572b41d
12 changed files with 190 additions and 17 deletions

View File

@ -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
;
;

View File

@ -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
compiler/m68k/r68kgas.inc Normal file
View File

@ -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
compiler/m68k/r68kgri.inc Normal file
View File

@ -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

View File

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

View File

@ -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)

View File

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

View File

@ -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

View File

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

View File

@ -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'

View File

@ -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;

View File

@ -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
}
}