+ some stuff for the new code generator

This commit is contained in:
florian 1999-01-06 22:58:47 +00:00
parent b2ac51a11b
commit b9968f4a43
4 changed files with 73 additions and 1247 deletions

View File

@ -57,7 +57,7 @@ unit cgbase;
{ frame pointer offset } { frame pointer offset }
framepointer_offset : longint; framepointer_offset : longint;
{ self pointer offset } { self pointer offset }
ESI_offset : longint; selfpointer_offset : longint;
{ result value offset } { result value offset }
retoffset : longint; retoffset : longint;
@ -395,7 +395,10 @@ unit cgbase;
end. end.
{ {
$Log$ $Log$
Revision 1.2 1998-12-26 15:20:28 florian Revision 1.3 1999-01-06 22:58:48 florian
+ some stuff for the new code generator
Revision 1.2 1998/12/26 15:20:28 florian
+ more changes for the new version + more changes for the new version
Revision 1.1 1998/12/15 22:18:55 florian Revision 1.1 1998/12/15 22:18:55 florian

View File

@ -31,6 +31,8 @@ unit i386;
extended_size = 10; extended_size = 10;
type type
tcpuflags = (cf_registers64);
tasmop = ( tasmop = (
A_MOV,A_MOVZX,A_MOVSX,A_LABEL,A_ADD, A_MOV,A_MOVZX,A_MOVSX,A_LABEL,A_ADD,
A_CALL,A_IDIV,A_IMUL,A_JMP,A_LEA,A_MUL,A_NEG,A_NOT, A_CALL,A_IDIV,A_IMUL,A_JMP,A_LEA,A_MUL,A_NEG,A_NOT,
@ -119,7 +121,7 @@ unit i386;
{ S_IS = integer on 16 bits } { S_IS = integer on 16 bits }
{ S_D = integer on bits for MMX } { S_D = integer on bits for MMX }
topsize = (S_NO,S_B,S_W,S_L,S_BW,S_BL,S_WL, topsize = (S_NO,S_B,S_W,S_L,S_BW,S_BL,S_WL,
S_IS,S_IL,S_IQ,S_FS,S_FL,S_FX,S_D); S_IS,S_IL,S_IQ,S_FS,S_FL,S_FX,S_D,S_Q);
{ S_FS and S_FL added { S_FS and S_FL added
S_X renamed to S_FX S_X renamed to S_FX
S_IL added S_IL added
@ -207,6 +209,11 @@ unit i386;
{ this is for calls } { this is for calls }
top_symbol = 4; top_symbol = 4;
const
{ description of the cpu }
cpuflags : set of tcpuflags = [];
stack_pointer = R_ESP; stack_pointer = R_ESP;
frame_pointer = R_EBP; frame_pointer = R_EBP;
@ -222,6 +229,10 @@ unit i386;
registers_saved_on_cdecl = [R_ESI,R_EDI,R_EBX]; registers_saved_on_cdecl = [R_ESI,R_EDI,R_EBX];
{ size of pointers }
pointersize = 4;
sizepostfix_pointer = S_L;
type type
pai_labeled = ^tai_labeled; pai_labeled = ^tai_labeled;
@ -298,8 +309,6 @@ unit i386;
destructor done;virtual; destructor done;virtual;
end; end;
const const
maxvarregs = 4; maxvarregs = 4;
varregs : array[1..maxvarregs] of tregister = varregs : array[1..maxvarregs] of tregister =
@ -318,6 +327,14 @@ unit i386;
function reg32toreg16(reg : tregister) : tregister; function reg32toreg16(reg : tregister) : tregister;
function reg16toreg32(reg : tregister) : tregister; function reg16toreg32(reg : tregister) : tregister;
{ these procedures must be defined by all target cpus }
function regtoreg8(reg : tregister) : tregister;
function regtoreg16(reg : tregister) : tregister;
function regtoreg32(reg : tregister) : tregister;
{ can be ignored on 32 bit systems }
function regtoreg64(reg : tregister) : tregister;
{ resets all values of ref to defaults } { resets all values of ref to defaults }
procedure reset_reference(var ref : treference); procedure reset_reference(var ref : treference);
{ set mostly used values of a new reference } { set mostly used values of a new reference }
@ -988,7 +1005,7 @@ unit i386;
S_IS,S_IL,S_IQ,S_FS,S_FL,S_FX,S_D); } S_IS,S_IL,S_IQ,S_FS,S_FL,S_FX,S_D); }
att_opsize2str : array[topsize] of string[2] = att_opsize2str : array[topsize] of string[2] =
('','b','w','l','bw','bl','wl', ('','b','w','l','bw','bl','wl',
's','l','q','s','l','t','d'); 's','l','q','s','l','t','d','q');
att_reg2str : array[tregister] of string[6] = att_reg2str : array[tregister] of string[6] =
('','%eax','%ecx','%edx','%ebx','%esp','%ebp','%esi','%edi', ('','%eax','%ecx','%edx','%ebx','%esp','%ebp','%esi','%edi',
@ -1145,6 +1162,30 @@ unit i386;
reg8toreg32:=tregister(byte(reg)-byte(R_DI)); reg8toreg32:=tregister(byte(reg)-byte(R_DI));
end; end;
function regtoreg8(reg : tregister) : tregister;
begin
regtoreg8:=reg32toreg8(reg);
end;
function regtoreg16(reg : tregister) : tregister;
begin
regtoreg16:=reg32toreg16(reg);
end;
function regtoreg32(reg : tregister) : tregister;
begin
regtoreg32:=reg;
end;
function regtoreg64(reg : tregister) : tregister;
begin
internalerror(6464);
end;
procedure reset_reference(var ref : treference); procedure reset_reference(var ref : treference);
begin begin
@ -1754,7 +1795,10 @@ unit i386;
end. end.
{ {
$Log$ $Log$
Revision 1.2 1998-12-15 22:18:56 florian Revision 1.3 1999-01-06 22:58:49 florian
+ some stuff for the new code generator
Revision 1.2 1998/12/15 22:18:56 florian
* some code added * some code added
Revision 1.1 1998/12/15 16:32:58 florian Revision 1.1 1998/12/15 16:32:58 florian

File diff suppressed because it is too large Load Diff

View File

@ -55,6 +55,9 @@ unit systems;
,target_m68k_Amiga,target_m68k_Atari,target_m68k_Mac, ,target_m68k_Amiga,target_m68k_Atari,target_m68k_Mac,
target_m68k_linux,target_m68k_PalmOS target_m68k_linux,target_m68k_PalmOS
); );
ttargetflags = (tf_needs_isconsole,tf_supports_stack_checking);
const const
{$ifdef i386} i386targetcnt=5; {$else} i386targetcnt=0; {$endif} {$ifdef i386} i386targetcnt=5; {$else} i386targetcnt=0; {$endif}
{$ifdef m68k} m68ktargetcnt=5; {$else} m68ktargetcnt=0; {$endif} {$ifdef m68k} m68ktargetcnt=5; {$else} m68ktargetcnt=0; {$endif}
@ -178,6 +181,7 @@ unit systems;
ttargetinfo = packed record ttargetinfo = packed record
target : ttarget; target : ttarget;
flags : set of ttargetflags;
cpu : ttargetcpu; cpu : ttargetcpu;
short_name : string[8]; short_name : string[8];
unit_env : string[12]; unit_env : string[12];
@ -732,12 +736,14 @@ implementation
target_infos : array[1..targetcnt] of ttargetinfo = ( target_infos : array[1..targetcnt] of ttargetinfo = (
( (
target : target_none; target : target_none;
flags : [];
cpu : no_cpu; cpu : no_cpu;
short_name : 'notarget' short_name : 'notarget'
) )
{$ifdef i386} {$ifdef i386}
,( ,(
target : target_i386_GO32V1; target : target_i386_GO32V1;
flags : [];
cpu : i386; cpu : i386;
short_name : 'GO32V1'; short_name : 'GO32V1';
unit_env : 'GO32V1UNITS'; unit_env : 'GO32V1UNITS';
@ -761,6 +767,7 @@ implementation
), ),
( (
target : target_i386_GO32V2; target : target_i386_GO32V2;
flags : [];
cpu : i386; cpu : i386;
short_name : 'GO32V2'; short_name : 'GO32V2';
unit_env : 'GO32V2UNITS'; unit_env : 'GO32V2UNITS';
@ -784,6 +791,7 @@ implementation
), ),
( (
target : target_i386_LINUX; target : target_i386_LINUX;
flags : [];
cpu : i386; cpu : i386;
short_name : 'LINUX'; short_name : 'LINUX';
unit_env : 'LINUXUNITS'; unit_env : 'LINUXUNITS';
@ -807,6 +815,7 @@ implementation
), ),
( (
target : target_i386_OS2; target : target_i386_OS2;
flags : [];
cpu : i386; cpu : i386;
short_name : 'OS2'; short_name : 'OS2';
unit_env : 'OS2UNITS'; unit_env : 'OS2UNITS';
@ -830,6 +839,7 @@ implementation
), ),
( (
target : target_i386_WIN32; target : target_i386_WIN32;
flags : [];
cpu : i386; cpu : i386;
short_name : 'WIN32'; short_name : 'WIN32';
unit_env : 'WIN32UNITS'; unit_env : 'WIN32UNITS';
@ -855,6 +865,7 @@ implementation
{$ifdef m68k} {$ifdef m68k}
,( ,(
target : target_m68k_Amiga; target : target_m68k_Amiga;
flags : [];
cpu : m68k; cpu : m68k;
short_name : 'AMIGA'; short_name : 'AMIGA';
unit_env : ''; unit_env : '';
@ -878,6 +889,7 @@ implementation
), ),
( (
target : target_m68k_Atari; target : target_m68k_Atari;
flags : [];
cpu : m68k; cpu : m68k;
short_name : 'ATARI'; short_name : 'ATARI';
unit_env : ''; unit_env : '';
@ -901,6 +913,7 @@ implementation
), ),
( (
target : target_m68k_Mac; target : target_m68k_Mac;
flags : [];
cpu : m68k; cpu : m68k;
short_name : 'MACOS'; short_name : 'MACOS';
unit_env : ''; unit_env : '';
@ -924,6 +937,7 @@ implementation
), ),
( (
target : target_m68k_linux; target : target_m68k_linux;
flags : [];
cpu : m68k; cpu : m68k;
short_name : 'LINUX'; short_name : 'LINUX';
unit_env : 'LINUXUNITS'; unit_env : 'LINUXUNITS';
@ -947,6 +961,7 @@ implementation
), ),
( (
target : target_m68k_PalmOS; target : target_m68k_PalmOS;
flags : [];
cpu : m68k; cpu : m68k;
short_name : 'PALMOS'; short_name : 'PALMOS';
unit_env : 'PALMUNITS'; unit_env : 'PALMUNITS';
@ -1299,7 +1314,10 @@ begin
end. end.
{ {
$Log$ $Log$
Revision 1.54 1998-12-28 23:26:26 peter Revision 1.55 1999-01-06 22:58:47 florian
+ some stuff for the new code generator
Revision 1.54 1998/12/28 23:26:26 peter
+ resource file handling ($R directive) for Win32 + resource file handling ($R directive) for Win32
Revision 1.53 1998/12/15 10:23:30 peter Revision 1.53 1998/12/15 10:23:30 peter