mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-17 11:59:30 +02:00
* several fixes, small test units can be compiled
This commit is contained in:
parent
e4c9846ac1
commit
7bf1321808
@ -265,19 +265,19 @@ implementation
|
||||
{ Intel style operands ! }
|
||||
opsize_2_type:array[0..2,topsize] of longint=(
|
||||
(OT_NONE,
|
||||
OT_BITS8,OT_BITS16,OT_BITS32,OT_BITS16,OT_BITS32,OT_BITS32,
|
||||
OT_BITS8,OT_BITS16,OT_BITS32,OT_BITS16,OT_BITS32,OT_BITS32,OT_BITS64,OT_BITS64,OT_BITS64,
|
||||
OT_BITS16,OT_BITS32,OT_BITS64,
|
||||
OT_BITS32,OT_BITS64,OT_BITS80,OT_BITS64,OT_BITS64,OT_BITS64,
|
||||
OT_NEAR,OT_FAR,OT_SHORT
|
||||
),
|
||||
(OT_NONE,
|
||||
OT_BITS8,OT_BITS16,OT_BITS32,OT_BITS8,OT_BITS8,OT_BITS16,
|
||||
OT_BITS8,OT_BITS16,OT_BITS32,OT_BITS8,OT_BITS8,OT_BITS16,OT_BITS8,OT_BITS16,OT_BITS32,
|
||||
OT_BITS16,OT_BITS32,OT_BITS64,
|
||||
OT_BITS32,OT_BITS64,OT_BITS80,OT_BITS64,OT_BITS64,OT_BITS64,
|
||||
OT_NEAR,OT_FAR,OT_SHORT
|
||||
),
|
||||
(OT_NONE,
|
||||
OT_BITS8,OT_BITS16,OT_BITS32,OT_NONE,OT_NONE,OT_NONE,
|
||||
OT_BITS8,OT_BITS16,OT_BITS32,OT_NONE,OT_NONE,OT_NONE,OT_NONE,OT_NONE,OT_NONE,
|
||||
OT_BITS16,OT_BITS32,OT_BITS64,
|
||||
OT_BITS32,OT_BITS64,OT_BITS80,OT_BITS64,OT_BITS64,OT_BITS64,
|
||||
OT_NEAR,OT_FAR,OT_SHORT
|
||||
@ -1799,7 +1799,10 @@ implementation
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.1 2002-07-24 22:38:15 florian
|
||||
Revision 1.2 2002-07-25 22:55:33 florian
|
||||
* several fixes, small test units can be compiled
|
||||
|
||||
Revision 1.1 2002/07/24 22:38:15 florian
|
||||
+ initial release of x86-64 target code
|
||||
|
||||
Revision 1.1 2002/07/01 18:46:29 peter
|
||||
|
@ -66,7 +66,7 @@ interface
|
||||
);
|
||||
|
||||
att_opsize2str : array[topsize] of string[2] = ('',
|
||||
'b','w','l','bw','bl','wl',
|
||||
'b','w','l','bw','bl','wl','bq','wq','lq',
|
||||
's','l','q',
|
||||
's','l','t','d','q','v',
|
||||
'','',''
|
||||
@ -282,7 +282,9 @@ initialization
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.1 2002-07-24 22:38:15 florian
|
||||
+ initial release of x86-64 target code
|
||||
Revision 1.2 2002-07-25 22:55:33 florian
|
||||
* several fixes, small test units can be compiled
|
||||
|
||||
Revision 1.1 2002/07/24 22:38:15 florian
|
||||
+ initial release of x86-64 target code
|
||||
}
|
||||
|
@ -36,6 +36,7 @@ unit cgcpu;
|
||||
|
||||
type
|
||||
tcgx86_64 = class(tcgx86)
|
||||
procedure g_concatcopy(list : taasmoutput;const source,dest : treference;len : aword; delsource,loadref : boolean);override;
|
||||
end;
|
||||
|
||||
implementation
|
||||
@ -45,13 +46,137 @@ unit cgcpu;
|
||||
symdef,symsym,defbase,paramgr,
|
||||
rgobj,tgobj,rgcpu;
|
||||
|
||||
procedure tcgx86_64.g_concatcopy(list : taasmoutput;const source,dest : treference;len : aword; delsource,loadref : boolean);
|
||||
var
|
||||
ecxpushed : boolean;
|
||||
helpsize : longint;
|
||||
i : byte;
|
||||
reg8,reg32 : tregister;
|
||||
srcref,dstref : treference;
|
||||
swap : boolean;
|
||||
|
||||
procedure maybepushecx;
|
||||
begin
|
||||
if not(R_ECX in rg.unusedregsint) then
|
||||
begin
|
||||
list.concat(Taicpu.Op_reg(A_PUSH,S_L,R_ECX));
|
||||
ecxpushed:=true;
|
||||
end
|
||||
else rg.getexplicitregisterint(list,R_ECX);
|
||||
end;
|
||||
|
||||
begin
|
||||
if (not loadref) and
|
||||
((len<=8) or
|
||||
(not(cs_littlesize in aktglobalswitches ) and (len<=12))) then
|
||||
begin
|
||||
helpsize:=len shr 3;
|
||||
rg.getexplicitregisterint(list,R_RDI);
|
||||
dstref:=dest;
|
||||
srcref:=source;
|
||||
for i:=1 to helpsize do
|
||||
begin
|
||||
a_load_ref_reg(list,OS_64,srcref,R_RDI);
|
||||
If (len=8) and delsource then
|
||||
reference_release(list,source);
|
||||
a_load_reg_ref(list,OS_64,R_RDI,dstref);
|
||||
inc(srcref.offset,8);
|
||||
inc(dstref.offset,8);
|
||||
dec(len,8);
|
||||
end;
|
||||
if len>1 then
|
||||
begin
|
||||
a_load_ref_reg(list,OS_16,srcref,R_EDI);
|
||||
If (len =4) and delsource then
|
||||
reference_release(list,source);
|
||||
a_load_reg_ref(list,OS_16,R_EDI,dstref);
|
||||
inc(srcref.offset,4);
|
||||
inc(dstref.offset,4);
|
||||
dec(len,4);
|
||||
end;
|
||||
if len>1 then
|
||||
begin
|
||||
a_load_ref_reg(list,OS_16,srcref,R_DI);
|
||||
If (len = 2) and delsource then
|
||||
reference_release(list,source);
|
||||
a_load_reg_ref(list,OS_16,R_DI,dstref);
|
||||
inc(srcref.offset,2);
|
||||
inc(dstref.offset,2);
|
||||
dec(len,2);
|
||||
end;
|
||||
if len>0 then
|
||||
begin
|
||||
a_load_ref_reg(list,OS_16,srcref,R_DIL);
|
||||
a_load_reg_ref(list,OS_16,R_DIL,dstref);
|
||||
end;
|
||||
rg.ungetregisterint(list,R_RDI);
|
||||
end
|
||||
else
|
||||
begin
|
||||
rg.getexplicitregisterint(list,R_RDI);
|
||||
a_loadaddr_ref_reg(list,dest,R_RDI);
|
||||
list.concat(tai_regalloc.Alloc(R_RSI));
|
||||
if loadref then
|
||||
a_load_ref_reg(list,OS_ADDR,source,R_RSI)
|
||||
else
|
||||
begin
|
||||
a_loadaddr_ref_reg(list,source,R_RSI);
|
||||
if delsource then
|
||||
reference_release(list,source);
|
||||
end;
|
||||
|
||||
list.concat(Taicpu.Op_none(A_CLD,S_NO));
|
||||
ecxpushed:=false;
|
||||
if cs_littlesize in aktglobalswitches then
|
||||
begin
|
||||
maybepushecx;
|
||||
a_load_const_reg(list,OS_INT,len,R_RCX);
|
||||
list.concat(Taicpu.Op_none(A_REP,S_NO));
|
||||
list.concat(Taicpu.Op_none(A_MOVSB,S_NO));
|
||||
end
|
||||
else
|
||||
begin
|
||||
helpsize:=len shr 2;
|
||||
len:=len and 3;
|
||||
if helpsize>1 then
|
||||
begin
|
||||
maybepushecx;
|
||||
a_load_const_reg(list,OS_INT,helpsize,R_RCX);
|
||||
list.concat(Taicpu.Op_none(A_REP,S_NO));
|
||||
end;
|
||||
if helpsize>0 then
|
||||
list.concat(Taicpu.Op_none(A_MOVSD,S_NO));
|
||||
if len>1 then
|
||||
begin
|
||||
dec(len,2);
|
||||
list.concat(Taicpu.Op_none(A_MOVSW,S_NO));
|
||||
end;
|
||||
if len=1 then
|
||||
list.concat(Taicpu.Op_none(A_MOVSB,S_NO));
|
||||
end;
|
||||
rg.ungetregisterint(list,R_RDI);
|
||||
list.concat(tai_regalloc.DeAlloc(R_RSI));
|
||||
if ecxpushed then
|
||||
list.concat(Taicpu.Op_reg(A_POP,S_L,R_RCX))
|
||||
else
|
||||
rg.ungetregisterint(list,R_RCX);
|
||||
|
||||
{ loading SELF-reference again }
|
||||
g_maybe_loadself(list);
|
||||
end;
|
||||
if delsource then
|
||||
tg.ungetiftemp(list,source);
|
||||
end;
|
||||
begin
|
||||
cg:=tcgx86_64.create;
|
||||
cg64:=tcg64f64.create;
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.1 2002-07-24 22:38:15 florian
|
||||
Revision 1.2 2002-07-25 22:55:33 florian
|
||||
* several fixes, small test units can be compiled
|
||||
|
||||
Revision 1.1 2002/07/24 22:38:15 florian
|
||||
+ initial release of x86-64 target code
|
||||
|
||||
}
|
||||
|
@ -57,7 +57,7 @@ uses
|
||||
|
||||
type
|
||||
topsize = (S_NO,
|
||||
S_B,S_W,S_L,S_BW,S_BL,S_WL,
|
||||
S_B,S_W,S_L,S_BW,S_BL,S_WL,S_BQ,S_WQ,S_LQ,
|
||||
S_IS,S_IL,S_IQ,
|
||||
S_FS,S_FL,S_FX,S_D,S_Q,S_FV,
|
||||
S_NEAR,S_FAR,S_SHORT
|
||||
@ -395,12 +395,12 @@ const
|
||||
{ the size of a vector register for a processor }
|
||||
OS_VECTOR = OS_M64;
|
||||
|
||||
cpuflags = [];
|
||||
cpuflags = [];
|
||||
|
||||
{ sizes }
|
||||
pointersize = 8;
|
||||
extended_size = 10;
|
||||
sizepostfix_pointer = S_L;
|
||||
{ sizes }
|
||||
pointersize = 8;
|
||||
extended_size = 10;
|
||||
sizepostfix_pointer = S_L;
|
||||
|
||||
|
||||
{*****************************************************************************
|
||||
@ -409,18 +409,18 @@ const
|
||||
|
||||
{ location of function results }
|
||||
|
||||
stack_pointer_reg = R_ESP;
|
||||
frame_pointer_reg = R_EBP;
|
||||
self_pointer_reg = R_ESI;
|
||||
accumulator = R_EAX;
|
||||
accumulatorhigh = R_EDX;
|
||||
stack_pointer_reg = R_RSP;
|
||||
frame_pointer_reg = R_RBP;
|
||||
self_pointer_reg = R_RSI;
|
||||
accumulator = R_RAX;
|
||||
accumulatorhigh = R_RDX;
|
||||
{ the register where the vmt offset is passed to the destructor }
|
||||
{ helper routine }
|
||||
vmt_offset_reg = R_EDI;
|
||||
vmt_offset_reg = R_RDI;
|
||||
|
||||
resultreg = R_RAX;
|
||||
resultreg64 = R_RAX;
|
||||
fpuresultreg = R_ST;
|
||||
fpu_result_reg = R_ST;
|
||||
|
||||
{*****************************************************************************
|
||||
GCC /ABI linking information
|
||||
@ -491,7 +491,10 @@ implementation
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.1 2002-07-24 22:38:15 florian
|
||||
Revision 1.2 2002-07-25 22:55:33 florian
|
||||
* several fixes, small test units can be compiled
|
||||
|
||||
Revision 1.1 2002/07/24 22:38:15 florian
|
||||
+ initial release of x86-64 target code
|
||||
|
||||
}
|
||||
|
@ -22,7 +22,7 @@
|
||||
}
|
||||
Unit cpuinfo;
|
||||
|
||||
{$i defines.inc}
|
||||
{$i fpcdefs.inc}
|
||||
|
||||
Interface
|
||||
|
||||
@ -56,7 +56,10 @@ Implementation
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.1 2002-07-24 22:38:15 florian
|
||||
Revision 1.2 2002-07-25 22:55:34 florian
|
||||
* several fixes, small test units can be compiled
|
||||
|
||||
Revision 1.1 2002/07/24 22:38:15 florian
|
||||
+ initial release of x86-64 target code
|
||||
|
||||
}
|
||||
|
@ -25,15 +25,15 @@
|
||||
}
|
||||
unit cpunode;
|
||||
|
||||
{$i defines.inc}
|
||||
{$i fpcdefs.inc}
|
||||
|
||||
interface
|
||||
|
||||
implementation
|
||||
|
||||
uses
|
||||
ncgbas,ncgflw,ncgcnv,ncgmem,ncgcon
|
||||
// n386ld,n386add,n386cal,n386con,n386flw,n386mat,n386mem,
|
||||
ncgbas,ncgflw,ncgcnv,ncgmem,ncgcon,ncgld
|
||||
// n386add,n386cal,n386con,n386flw,n386mat,n386mem,
|
||||
// n386set,n386inl,n386opt,
|
||||
{ this not really a node }
|
||||
// n386obj
|
||||
@ -42,7 +42,10 @@ unit cpunode;
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.1 2002-07-24 22:38:15 florian
|
||||
Revision 1.2 2002-07-25 22:55:34 florian
|
||||
* several fixes, small test units can be compiled
|
||||
|
||||
Revision 1.1 2002/07/24 22:38:15 florian
|
||||
+ initial release of x86-64 target code
|
||||
|
||||
}
|
||||
|
@ -23,7 +23,7 @@
|
||||
{ This unit includes the x86-64 dependent target units. }
|
||||
unit cputarg;
|
||||
|
||||
{$i defines.inc}
|
||||
{$i fpcdefs.inc}
|
||||
|
||||
interface
|
||||
|
||||
@ -51,7 +51,7 @@ implementation
|
||||
Assemblers
|
||||
**************************************}
|
||||
|
||||
{$ifndef NOAG386ATT}
|
||||
{$ifndef NOAGX86_64ATT}
|
||||
,agx64att
|
||||
{$endif}
|
||||
|
||||
@ -62,7 +62,10 @@ implementation
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.1 2002-07-24 22:38:15 florian
|
||||
Revision 1.2 2002-07-25 22:55:34 florian
|
||||
* several fixes, small test units can be compiled
|
||||
|
||||
Revision 1.1 2002/07/24 22:38:15 florian
|
||||
+ initial release of x86-64 target code
|
||||
|
||||
Revision 1.2 2001/06/03 15:12:47 peter
|
||||
|
@ -22,7 +22,7 @@
|
||||
}
|
||||
unit Rax86dir;
|
||||
|
||||
{$i defines.inc}
|
||||
{$i fpcdefs.inc}
|
||||
|
||||
interface
|
||||
|
||||
@ -303,7 +303,10 @@ initialization
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.1 2002-07-24 22:38:15 florian
|
||||
Revision 1.2 2002-07-25 22:55:34 florian
|
||||
* several fixes, small test units can be compiled
|
||||
|
||||
Revision 1.1 2002/07/24 22:38:15 florian
|
||||
+ initial release of x86-64 target code
|
||||
|
||||
}
|
||||
|
@ -84,51 +84,93 @@ unit rgcpu;
|
||||
{************************************************************************}
|
||||
{ routine helpers }
|
||||
{************************************************************************}
|
||||
{
|
||||
|
||||
const
|
||||
reg2reg64 : array[tregister] of tregister = (R_NO,
|
||||
R_RAX,R_RCX,R_RDX,R_RBX,R_RSP,R_RBP,R_RSI,R_RDI,
|
||||
R_R8,R_R9,R_R10,R_R11,R_R12,R_R13,R_R14,R_R15,R_RIP,
|
||||
R_RAX,R_RCX,R_RDX,R_RBX,R_RSP,R_RBP,R_RSI,R_RDI,
|
||||
R_R8,R_R9,R_R10,R_R11,R_R12,R_R13,R_R14,R_R15,
|
||||
R_RAX,R_RCX,R_RDX,R_RBX,R_RSP,R_RBP,R_RSI,R_RDI,
|
||||
R_R8,R_R9,R_R10,R_R11,R_R12,R_R13,R_R14,R_R15,
|
||||
R_RAX,R_RCX,R_RDX,R_RBX,R_RSP,R_RBP,R_RSI,R_RDI,
|
||||
R_R8,R_R9,R_R10,R_R11,R_R12,R_R13,R_R14,R_R15,
|
||||
R_NO,R_NO,R_NO,R_NO,
|
||||
R_NO,R_NO,R_NO,R_NO,R_NO,R_NO,
|
||||
R_NO,R_NO,R_NO,R_NO,R_NO,R_NO,R_NO,R_NO,R_NO,
|
||||
R_NO,R_NO,R_NO,R_NO,R_NO,R_NO,
|
||||
R_NO,R_NO,R_NO,R_NO,
|
||||
R_NO,R_NO,R_NO,R_NO,R_NO,
|
||||
R_NO,R_NO,R_NO,R_NO,R_NO,R_NO,R_NO,R_NO,
|
||||
R_NO,R_NO,R_NO,R_NO,R_NO,R_NO,R_NO,R_NO,
|
||||
R_NO,R_NO,R_NO,R_NO,R_NO,R_NO,R_NO,R_NO
|
||||
);
|
||||
|
||||
reg2reg32 : array[tregister] of tregister = (R_NO,
|
||||
R_EAX,R_ECX,R_EDX,R_EBX,R_ESP,R_EBP,R_ESI,R_EDI,
|
||||
R_R8D,R_R9D,R_R10D,R_R11D,R_R12D,R_R13D,R_R14D,R_R15D,R_NO,
|
||||
R_EAX,R_ECX,R_EDX,R_EBX,R_ESP,R_EBP,R_ESI,R_EDI,
|
||||
R_EAX,R_ECX,R_EDX,R_EBX,R_NO,R_NO,R_NO,R_NO,
|
||||
R_R8D,R_R9D,R_R10D,R_R11D,R_R12D,R_R13D,R_R14D,R_R15D,
|
||||
R_EAX,R_ECX,R_EDX,R_EBX,R_ESP,R_EBP,R_ESI,R_EDI,
|
||||
R_R8D,R_R9D,R_R10D,R_R11D,R_R12D,R_R13D,R_R14D,R_R15D,
|
||||
R_EAX,R_ECX,R_EDX,R_EBX,R_ESP,R_EBP,R_ESI,R_EDI,
|
||||
R_R8D,R_R9D,R_R10D,R_R11D,R_R12D,R_R13D,R_R14D,R_R15D,
|
||||
R_NO,R_NO,R_NO,R_NO,
|
||||
R_NO,R_NO,R_NO,R_NO,R_NO,R_NO,
|
||||
R_NO,R_NO,R_NO,R_NO,R_NO,R_NO,R_NO,R_NO,R_NO,
|
||||
R_NO,R_NO,R_NO,R_NO,R_NO,R_NO,
|
||||
R_NO,R_NO,R_NO,R_NO,
|
||||
R_NO,R_NO,R_NO,R_NO,R_NO,
|
||||
R_NO,R_NO,R_NO,R_NO,R_NO,R_NO,R_NO,R_NO,
|
||||
R_NO,R_NO,R_NO,R_NO,R_NO,R_NO,R_NO,R_NO,
|
||||
R_NO,R_NO,R_NO,R_NO,R_NO,R_NO,R_NO,R_NO
|
||||
);
|
||||
|
||||
reg2reg16 : array[tregister] of tregister = (R_NO,
|
||||
R_AX,R_CX,R_DX,R_BX,R_SP,R_BP,R_SI,R_DI,
|
||||
R_R8W,R_R9W,R_R10W,R_R11W,R_R12W,R_R13W,R_R14W,R_R15W,R_NO,
|
||||
R_AX,R_CX,R_DX,R_BX,R_SP,R_BP,R_SI,R_DI,
|
||||
R_AX,R_CX,R_DX,R_BX,R_NO,R_NO,R_NO,R_NO,
|
||||
R_R8W,R_R9W,R_R10W,R_R11W,R_R12W,R_R13W,R_R14W,R_R15W,
|
||||
R_AX,R_CX,R_DX,R_BX,R_SP,R_BP,R_SI,R_DI,
|
||||
R_R8W,R_R9W,R_R10W,R_R11W,R_R12W,R_R13W,R_R14W,R_R15W,
|
||||
R_AX,R_CX,R_DX,R_BX,R_SP,R_BP,R_SI,R_DI,
|
||||
R_R8W,R_R9W,R_R10W,R_R11W,R_R12W,R_R13W,R_R14W,R_R15W,
|
||||
R_NO,R_NO,R_NO,R_NO,
|
||||
R_NO,R_NO,R_NO,R_NO,R_NO,R_NO,
|
||||
R_NO,R_NO,R_NO,R_NO,R_NO,R_NO,R_NO,R_NO,R_NO,
|
||||
R_NO,R_NO,R_NO,R_NO,R_NO,R_NO,
|
||||
R_NO,R_NO,R_NO,R_NO,
|
||||
R_NO,R_NO,R_NO,R_NO,R_NO,
|
||||
R_NO,R_NO,R_NO,R_NO,R_NO,R_NO,R_NO,R_NO,
|
||||
R_NO,R_NO,R_NO,R_NO,R_NO,R_NO,R_NO,R_NO,
|
||||
R_NO,R_NO,R_NO,R_NO,R_NO,R_NO,R_NO,R_NO
|
||||
);
|
||||
|
||||
reg2reg8 : array[tregister] of tregister = (R_NO,
|
||||
R_AL,R_CL,R_DL,R_BL,R_NO,R_NO,R_NO,R_NO,
|
||||
R_AL,R_CL,R_DL,R_BL,R_NO,R_NO,R_NO,R_NO,
|
||||
R_AL,R_CL,R_DL,R_BL,R_NO,R_NO,R_NO,R_NO,
|
||||
R_AL,R_CL,R_DL,R_BL,R_SPL,R_BPL,R_SIL,R_DIL,
|
||||
R_R8B,R_R9B,R_R10B,R_R11B,R_R12B,R_R13B,R_R14B,R_R15B,R_NO,
|
||||
R_AL,R_CL,R_DL,R_BL,R_SPL,R_BPL,R_SIL,R_DIL,
|
||||
R_R8B,R_R9B,R_R10B,R_R11B,R_R12B,R_R13B,R_R14B,R_R15B,
|
||||
R_AL,R_CL,R_DL,R_BL,R_SPL,R_BPL,R_SIL,R_DIL,
|
||||
R_R8B,R_R9B,R_R10B,R_R11B,R_R12B,R_R13B,R_R14B,R_R15B,
|
||||
R_AL,R_CL,R_DL,R_BL,R_SPL,R_BPL,R_SIL,R_DIL,
|
||||
R_R8B,R_R9B,R_R10B,R_R11B,R_R12B,R_R13B,R_R14B,R_R15B,
|
||||
R_NO,R_NO,R_NO,R_NO,
|
||||
R_NO,R_NO,R_NO,R_NO,R_NO,R_NO,
|
||||
R_NO,R_NO,R_NO,R_NO,R_NO,R_NO,R_NO,R_NO,R_NO,
|
||||
R_NO,R_NO,R_NO,R_NO,R_NO,R_NO,
|
||||
R_NO,R_NO,R_NO,R_NO,
|
||||
R_NO,R_NO,R_NO,R_NO,R_NO,
|
||||
R_NO,R_NO,R_NO,R_NO,R_NO,R_NO,R_NO,R_NO,
|
||||
R_NO,R_NO,R_NO,R_NO,R_NO,R_NO,R_NO,R_NO,
|
||||
R_NO,R_NO,R_NO,R_NO,R_NO,R_NO,R_NO,R_NO
|
||||
);
|
||||
}
|
||||
|
||||
{ convert a register to a specfied register size }
|
||||
function changeregsize(r:tregister;size:topsize):tregister;
|
||||
var
|
||||
reg : tregister;
|
||||
begin
|
||||
{
|
||||
case size of
|
||||
S_B :
|
||||
reg:=reg2reg8[r];
|
||||
@ -136,10 +178,11 @@ unit rgcpu;
|
||||
reg:=reg2reg16[r];
|
||||
S_L :
|
||||
reg:=reg2reg32[r];
|
||||
S_Q :
|
||||
reg:=reg2reg64[r];
|
||||
else
|
||||
}
|
||||
internalerror(200204101);
|
||||
// end;
|
||||
end;
|
||||
if reg=R_NO then
|
||||
internalerror(200204102);
|
||||
changeregsize:=reg;
|
||||
@ -432,7 +475,10 @@ end.
|
||||
|
||||
{
|
||||
$Log$
|
||||
Revision 1.1 2002-07-24 22:38:15 florian
|
||||
Revision 1.2 2002-07-25 22:55:34 florian
|
||||
* several fixes, small test units can be compiled
|
||||
|
||||
Revision 1.1 2002/07/24 22:38:15 florian
|
||||
+ initial release of x86-64 target code
|
||||
|
||||
Revision 1.8 2002/07/01 18:46:34 peter
|
||||
|
Loading…
Reference in New Issue
Block a user