+ 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 }
framepointer_offset : longint;
{ self pointer offset }
ESI_offset : longint;
selfpointer_offset : longint;
{ result value offset }
retoffset : longint;
@ -395,7 +395,10 @@ unit cgbase;
end.
{
$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
Revision 1.1 1998/12/15 22:18:55 florian

View File

@ -31,6 +31,8 @@ unit i386;
extended_size = 10;
type
tcpuflags = (cf_registers64);
tasmop = (
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,
@ -119,7 +121,7 @@ unit i386;
{ S_IS = integer on 16 bits }
{ S_D = integer on bits for MMX }
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_X renamed to S_FX
S_IL added
@ -207,6 +209,11 @@ unit i386;
{ this is for calls }
top_symbol = 4;
const
{ description of the cpu }
cpuflags : set of tcpuflags = [];
stack_pointer = R_ESP;
frame_pointer = R_EBP;
@ -222,6 +229,10 @@ unit i386;
registers_saved_on_cdecl = [R_ESI,R_EDI,R_EBX];
{ size of pointers }
pointersize = 4;
sizepostfix_pointer = S_L;
type
pai_labeled = ^tai_labeled;
@ -298,8 +309,6 @@ unit i386;
destructor done;virtual;
end;
const
maxvarregs = 4;
varregs : array[1..maxvarregs] of tregister =
@ -318,6 +327,14 @@ unit i386;
function reg32toreg16(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 }
procedure reset_reference(var ref : treference);
{ 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); }
att_opsize2str : array[topsize] of string[2] =
('','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] =
('','%eax','%ecx','%edx','%ebx','%esp','%ebp','%esi','%edi',
@ -1145,6 +1162,30 @@ unit i386;
reg8toreg32:=tregister(byte(reg)-byte(R_DI));
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);
begin
@ -1754,7 +1795,10 @@ unit i386;
end.
{
$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
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_linux,target_m68k_PalmOS
);
ttargetflags = (tf_needs_isconsole,tf_supports_stack_checking);
const
{$ifdef i386} i386targetcnt=5; {$else} i386targetcnt=0; {$endif}
{$ifdef m68k} m68ktargetcnt=5; {$else} m68ktargetcnt=0; {$endif}
@ -178,6 +181,7 @@ unit systems;
ttargetinfo = packed record
target : ttarget;
flags : set of ttargetflags;
cpu : ttargetcpu;
short_name : string[8];
unit_env : string[12];
@ -732,12 +736,14 @@ implementation
target_infos : array[1..targetcnt] of ttargetinfo = (
(
target : target_none;
flags : [];
cpu : no_cpu;
short_name : 'notarget'
)
{$ifdef i386}
,(
target : target_i386_GO32V1;
flags : [];
cpu : i386;
short_name : 'GO32V1';
unit_env : 'GO32V1UNITS';
@ -761,6 +767,7 @@ implementation
),
(
target : target_i386_GO32V2;
flags : [];
cpu : i386;
short_name : 'GO32V2';
unit_env : 'GO32V2UNITS';
@ -784,6 +791,7 @@ implementation
),
(
target : target_i386_LINUX;
flags : [];
cpu : i386;
short_name : 'LINUX';
unit_env : 'LINUXUNITS';
@ -807,6 +815,7 @@ implementation
),
(
target : target_i386_OS2;
flags : [];
cpu : i386;
short_name : 'OS2';
unit_env : 'OS2UNITS';
@ -830,6 +839,7 @@ implementation
),
(
target : target_i386_WIN32;
flags : [];
cpu : i386;
short_name : 'WIN32';
unit_env : 'WIN32UNITS';
@ -855,6 +865,7 @@ implementation
{$ifdef m68k}
,(
target : target_m68k_Amiga;
flags : [];
cpu : m68k;
short_name : 'AMIGA';
unit_env : '';
@ -878,6 +889,7 @@ implementation
),
(
target : target_m68k_Atari;
flags : [];
cpu : m68k;
short_name : 'ATARI';
unit_env : '';
@ -901,6 +913,7 @@ implementation
),
(
target : target_m68k_Mac;
flags : [];
cpu : m68k;
short_name : 'MACOS';
unit_env : '';
@ -924,6 +937,7 @@ implementation
),
(
target : target_m68k_linux;
flags : [];
cpu : m68k;
short_name : 'LINUX';
unit_env : 'LINUXUNITS';
@ -947,6 +961,7 @@ implementation
),
(
target : target_m68k_PalmOS;
flags : [];
cpu : m68k;
short_name : 'PALMOS';
unit_env : 'PALMUNITS';
@ -1299,7 +1314,10 @@ begin
end.
{
$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
Revision 1.53 1998/12/15 10:23:30 peter