mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-10 21:26:30 +02:00
+ some stuff for the new code generator
This commit is contained in:
parent
b2ac51a11b
commit
b9968f4a43
@ -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
|
||||||
|
@ -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
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user