mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-05-31 08:42:33 +02:00
* made the alpha version compilable
This commit is contained in:
parent
fe08a50b7e
commit
eca7460542
@ -25,7 +25,7 @@ unit cgcpu;
|
||||
interface
|
||||
|
||||
uses
|
||||
cgobj,aasm,cpuasm,cpubase;
|
||||
cgbase,cgobj,aasm,cpuasm,cpubase,cpuinfo;
|
||||
|
||||
type
|
||||
pcgalpha = ^tcgalpha;
|
||||
@ -33,17 +33,16 @@ tcgalpha = object(tcg)
|
||||
procedure a_push_reg(list : paasmoutput;r : tregister);virtual;
|
||||
procedure a_call_name(list : paasmoutput;const s : string;
|
||||
offset : longint);virtual;
|
||||
procedure a_call_name(list : paasmoutput;const s : string;
|
||||
offset : longint);virtual;
|
||||
procedure a_push_reg(list : paasmoutput;r : tregister);virtual;
|
||||
procedure a_load_const_reg(list : paasmoutput;size : tcgsize;a : aword;register : tregister);virtual;
|
||||
procedure a_load_reg_ref(list : paasmoutput;size : tcgsize;register : tregister;const ref : treference);virtual;
|
||||
procedure a_load_ref_reg(list : paasmoutput;size : tcgsize;const ref : treference;register : tregister);virtual;
|
||||
procedure a_load_reg_reg(list : paasmoutput;size : tcgsize;reg1,reg2 : tregister);virtual;
|
||||
procedure a_cmp_reg_const_label(list : paasmoutput;size : tcgsize;cmp_op : topcmp;b : byte;reg : tregister; l : pasmlabel);virtual;
|
||||
procedure a_cmp_reg_const_label(list : paasmoutput;size : tcgsize;cmp_op : topcmp;b : byte;
|
||||
reg : tregister; l : pasmlabel);virtual;
|
||||
procedure a_cmp_reg_reg_label(list : paasmoutput;size : tcgsize;cmp_op : topcmp;reg1,reg2 : tregister;l : pasmlabel);
|
||||
procedure a_cmp_reg_ref_label(list : paasmoutput;size : tcgsize;cmp_op : topcmp;reg : tregister;l : pasmlabel);
|
||||
procedure a_cmp_ref_const_label(list : paasmoutput;size : tcgsize;cmp_op : topcmp;l : longint;reg : tregister; l : pasmlabel);
|
||||
procedure a_cmp_ref_const_label(list : paasmoutput;size : tcgsize;cmp_op : topcmp;a : aword;
|
||||
reg : tregister; l : pasmlabel);
|
||||
procedure a_loadaddress_ref_reg(list : paasmoutput;const ref : treference;r : tregister);virtual;
|
||||
procedure g_stackframe_entry(list : paasmoutput;localsize : longint);virtual;
|
||||
procedure g_maybe_loadself(list : paasmoutput);virtual;
|
||||
@ -51,10 +50,6 @@ tcgalpha = object(tcg)
|
||||
procedure g_push_exception_value_reg(list : paasmoutput;reg : tregister);virtual;
|
||||
procedure g_push_exception_value_const(list : paasmoutput;reg : tregister);virtual;
|
||||
procedure g_pop_exception_value_reg(list : paasmoutput;reg : tregister);virtual;
|
||||
procedure g_stackframe_entry(list : paasmoutput;localsize : longint);virtual;
|
||||
procedure g_exite_entry(list : paasmoutput;localsize : longint);virtual;
|
||||
procedure g_exitcode(list : paasmoutput;parasize : longint;
|
||||
nostackframe,inlined : boolean);
|
||||
constructor init;
|
||||
end;
|
||||
|
||||
@ -74,12 +69,12 @@ procedure tcgalpha.g_stackframe_entry(list : paasmoutput;localsize : longint);
|
||||
begin
|
||||
With List^ do
|
||||
begin
|
||||
concat(new(paialpha,op_reg_ref(A_LDGP,Global_pointer,new_reference(R_27,0)));
|
||||
concat(new(paialpha,op_reg_ref(A_LDGP,Global_pointer,new_reference(R_27,0))));
|
||||
concat(new(paialpha,op_reg_ref(A_LDA,Stack_Pointer,new_reference(Stack_pointer,-LocalSize))));
|
||||
If LocalSize<>0 then
|
||||
concat(new(paiframe,Init(Global_pinter,LocalSize,R27,0)));
|
||||
// Always generate a frame pointer.
|
||||
concat(new(paiframe,op_reg_reg_reg(A_BIS,Stackpointer,Stack_pointer,Frame_pointer)))
|
||||
concat(new(paiframe,Init(Global_pointer,LocalSize,R_27,0)));
|
||||
{ Always generate a frame pointer. }
|
||||
concat(new(paialpha,op_reg_reg_reg(A_BIS,Stack_pointer,Stack_pointer,Frame_pointer)))
|
||||
end;
|
||||
end;
|
||||
|
||||
@ -88,14 +83,15 @@ procedure g_exitcode(list : paasmoutput;parasize : longint; nostackframe,inlined
|
||||
begin
|
||||
With List^ do
|
||||
begin
|
||||
// Restore stack pointer from frame pointer
|
||||
{ Restore stack pointer from frame pointer }
|
||||
Concat (new(paialpha,op_reg_reg_reg(A_BIS,Frame_Pointer,Frame_Pointer,Stack_Pointer)));
|
||||
// Restore previous stack position
|
||||
{ Restore previous stack position}
|
||||
Concat (new(paialpha,op_reg_const_reg(A_ADDQ,Stack_Pointer,Parasize,Stack_pointer)));
|
||||
// return...
|
||||
{ return... }
|
||||
Concat (new(paialpha,op_reg_ref_const(A_RET,Stack_pointer,new_reference(Return_pointer,0),1)));
|
||||
// end directive
|
||||
{ end directive
|
||||
Concat (new(paiend,init(''));
|
||||
}
|
||||
end;
|
||||
end;
|
||||
|
||||
@ -115,43 +111,32 @@ procedure tcgalpha.a_push_reg(list : paasmoutput;r : tregister);
|
||||
end;
|
||||
|
||||
|
||||
procedure tcgalpha.a_call_name(list : paasmoutput;const s : string; offset : longint);virtual;
|
||||
procedure tcgalpha.a_load_const_reg(list : paasmoutput;size : tcgsize;a : aword;register : tregister);
|
||||
|
||||
begin
|
||||
end;
|
||||
|
||||
|
||||
procedure tcgalpha.a_push_reg(list : paasmoutput;r : tregister);virtual;
|
||||
procedure tcgalpha.a_load_reg_ref(list : paasmoutput;size : tcgsize;register : tregister;const ref : treference);
|
||||
|
||||
begin
|
||||
end;
|
||||
|
||||
|
||||
procedure tcgalpha.a_load_const_reg(list : paasmoutput;size : tcgsize;a : aword;register : tregister);virtual;
|
||||
procedure tcgalpha.a_load_ref_reg(list : paasmoutput;size : tcgsize;const ref : treference;register : tregister);
|
||||
|
||||
begin
|
||||
end;
|
||||
|
||||
|
||||
procedure tcgalpha.a_load_reg_ref(list : paasmoutput;size : tcgsize;register : tregister;const ref : treference);virtual;
|
||||
procedure tcgalpha.a_load_reg_reg(list : paasmoutput;size : tcgsize;reg1,reg2 : tregister);
|
||||
|
||||
begin
|
||||
end;
|
||||
|
||||
|
||||
procedure tcgalpha.a_load_ref_reg(list : paasmoutput;size : tcgsize;const ref : treference;register : tregister);virtual;
|
||||
|
||||
begin
|
||||
end;
|
||||
|
||||
|
||||
procedure tcgalpha.a_load_reg_reg(list : paasmoutput;size : tcgsize;reg1,reg2 : tregister);virtual;
|
||||
|
||||
begin
|
||||
end;
|
||||
|
||||
|
||||
procedure tcgalpha.a_cmp_reg_const_label(list : paasmoutput;size : tcgsize;cmp_op : topcmp;b : byte;reg : tregister; l : pasmlabel);virtual;
|
||||
procedure tcgalpha.a_cmp_reg_const_label(list : paasmoutput;size : tcgsize;cmp_op : topcmp;b : byte;reg : tregister;
|
||||
l : pasmlabel);
|
||||
|
||||
begin
|
||||
end;
|
||||
@ -169,55 +154,44 @@ begin
|
||||
end;
|
||||
|
||||
|
||||
procedure tcgalpha.a_cmp_ref_const_label(list : paasmoutput;size : tcgsize;cmp_op : topcmp;l : longint;reg : tregister; l : pasmlabel);
|
||||
procedure tcgalpha.a_cmp_ref_const_label(list : paasmoutput;size : tcgsize;cmp_op : topcmp;a : aword;
|
||||
reg : tregister; l : pasmlabel);
|
||||
|
||||
begin
|
||||
end;
|
||||
|
||||
|
||||
|
||||
procedure tcgalpha.a_loadaddress_ref_reg(list : paasmoutput;const ref : treference;r : tregister);
|
||||
|
||||
begin
|
||||
end;
|
||||
|
||||
|
||||
procedure tcgalpha.a_loadaddress_ref_reg(list : paasmoutput;const ref : treference;r : tregister);virtual;
|
||||
procedure tcgalpha.g_maybe_loadself(list : paasmoutput);
|
||||
|
||||
begin
|
||||
end;
|
||||
|
||||
|
||||
procedure tcgalpha.g_stackframe_entry(list : paasmoutput;localsize : longint);virtual;
|
||||
procedure tcgalpha.g_restore_frame_pointer(list : paasmoutput);
|
||||
|
||||
begin
|
||||
end;
|
||||
|
||||
|
||||
procedure tcgalpha.g_maybe_loadself(list : paasmoutput);virtual;
|
||||
procedure tcgalpha.g_push_exception_value_reg(list : paasmoutput;reg : tregister);
|
||||
|
||||
begin
|
||||
end;
|
||||
|
||||
|
||||
procedure tcgalpha.g_restore_frame_pointer(list : paasmoutput);virtual;
|
||||
procedure tcgalpha.g_push_exception_value_const(list : paasmoutput;reg : tregister);
|
||||
|
||||
begin
|
||||
end;
|
||||
|
||||
|
||||
procedure tcgalpha.g_push_exception_value_reg(list : paasmoutput;reg : tregister);virtual;
|
||||
|
||||
begin
|
||||
end;
|
||||
|
||||
|
||||
procedure tcgalpha.g_push_exception_value_const(list : paasmoutput;reg : tregister);virtual;
|
||||
|
||||
begin
|
||||
end;
|
||||
|
||||
|
||||
procedure tcgalpha.g_pop_exception_value_reg(list : paasmoutput;reg : tregister);virtual;
|
||||
procedure tcgalpha.g_pop_exception_value_reg(list : paasmoutput;reg : tregister);
|
||||
|
||||
begin
|
||||
end;
|
||||
@ -226,7 +200,10 @@ end;
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.4 1999-08-06 13:53:54 michael
|
||||
Revision 1.5 1999-08-06 14:15:53 florian
|
||||
* made the alpha version compilable
|
||||
|
||||
Revision 1.4 1999/08/06 13:53:54 michael
|
||||
Empty Virtual methods inserted
|
||||
|
||||
Revision 1.3 1999/08/05 15:50:32 michael
|
||||
|
@ -44,13 +44,13 @@ type
|
||||
LS,LU : longint;
|
||||
Constructor init (GP : Tregister; Localsize : Longint; RA : TRegister; L : longint);
|
||||
end;
|
||||
|
||||
|
||||
paient = ^taient;
|
||||
taient = object(tai)
|
||||
Name : string;
|
||||
Constructor Init (ProcName : String);
|
||||
end;
|
||||
|
||||
|
||||
|
||||
paialpha = ^taialpha;
|
||||
taialpha = object(tai)
|
||||
@ -78,10 +78,11 @@ type
|
||||
constructor op_ref_ref(op : tasmop;_op1,_op2 : preference);
|
||||
|
||||
constructor op_reg_reg_reg(op : tasmop;_op1,_op2,_op3 : tregister);
|
||||
constructor op_const_reg_reg(op : tasmop;_op1 : longint;_op2 : tregister;_op3 : tregister);
|
||||
constructor op_reg_const_reg(op : tasmop;_op1 : tregister;_op2 : longint;_op3 : tregister);
|
||||
constructor op_const_ref_reg(op : tasmop;_op1 : longint;_op2 : preference;_op3 : tregister);
|
||||
constructor op_reg_reg_ref(op : tasmop;_op1,_op2 : tregister; _op3 : preference);
|
||||
constructor op_const_reg_ref(op : tasmop;_op1 : longint;_op2 : tregister;_op3 : preference);
|
||||
constructor op_reg_ref_const(op : tasmop;_op1 : tregister;_op2 : preference;_op3 : longint);
|
||||
|
||||
{ this is for Jmp instructions }
|
||||
constructor op_cond_sym(op : tasmop;cond:TAsmCond;_op1 : pasmsymbol);
|
||||
@ -239,7 +240,7 @@ implementation
|
||||
ops:=3;
|
||||
end;
|
||||
|
||||
constructor taialpha.op_const_reg_reg(op : tasmop;_op1 : longint;_op2 : tregister;_op3 : tregister);
|
||||
constructor taialpha.op_reg_const_reg(op : tasmop;_op1 : tregister;_op2 : longint;_op3 : tregister);
|
||||
begin
|
||||
inherited init;
|
||||
init(op);
|
||||
@ -267,6 +268,13 @@ implementation
|
||||
ops:=3;
|
||||
end;
|
||||
|
||||
constructor taialpha.op_reg_ref_const(op : tasmop;_op1 : tregister;_op2 : preference;_op3 : longint);
|
||||
begin
|
||||
inherited init;
|
||||
init(op);
|
||||
ops:=3;
|
||||
end;
|
||||
|
||||
|
||||
constructor taialpha.op_cond_sym(op : tasmop;cond:TAsmCond;_op1 : pasmsymbol);
|
||||
begin
|
||||
@ -356,7 +364,10 @@ implementation
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.2 1999-08-05 15:50:33 michael
|
||||
Revision 1.3 1999-08-06 14:15:54 florian
|
||||
* made the alpha version compilable
|
||||
|
||||
Revision 1.2 1999/08/05 15:50:33 michael
|
||||
* more changes
|
||||
|
||||
Revision 1.1 1999/08/03 00:24:01 michael
|
||||
|
@ -105,6 +105,7 @@ Const
|
||||
accumulator = R_0;
|
||||
global_pointer = R_29;
|
||||
scratch_register = R_1;
|
||||
return_pointer = R_26;
|
||||
|
||||
cpuflags = [cf_64bitaddr];
|
||||
|
||||
@ -237,7 +238,10 @@ end;
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.9 1999-08-06 13:26:53 florian
|
||||
Revision 1.10 1999-08-06 14:15:55 florian
|
||||
* made the alpha version compilable
|
||||
|
||||
Revision 1.9 1999/08/06 13:26:53 florian
|
||||
* more changes ...
|
||||
|
||||
Revision 1.8 1999/08/05 17:10:58 florian
|
||||
|
@ -1,6 +1,7 @@
|
||||
{
|
||||
$Id$
|
||||
Copyright (c) 1993-98 by Florian Klaempfl
|
||||
Copyright (c) 1993-99 by Florian Klaempfl
|
||||
Member of the Free Pascal development team
|
||||
|
||||
This unit implements the basic code generator object
|
||||
|
||||
@ -88,7 +89,6 @@ unit cgobj;
|
||||
|
||||
procedure a_call_name(list : paasmoutput;const s : string;
|
||||
offset : longint);virtual;
|
||||
procedure a_push_reg(list : paasmoutput;r : tregister);virtual;
|
||||
|
||||
{ move instructions }
|
||||
procedure a_load_const_reg(list : paasmoutput;size : tcgsize;a : aword;register : tregister);virtual;
|
||||
@ -101,7 +101,7 @@ unit cgobj;
|
||||
l : pasmlabel);virtual;
|
||||
procedure a_cmp_reg_reg_label(list : paasmoutput;size : tcgsize;cmp_op : topcmp;reg1,reg2 : tregister;l : pasmlabel);
|
||||
procedure a_cmp_reg_ref_label(list : paasmoutput;size : tcgsize;cmp_op : topcmp;reg : tregister;l : pasmlabel);
|
||||
procedure a_cmp_ref_const_label(list : paasmoutput;size : tcgsize;cmp_op : topcmp;l : longint;reg : tregister;
|
||||
procedure a_cmp_ref_const_label(list : paasmoutput;size : tcgsize;cmp_op : topcmp;a : aword;reg : tregister;
|
||||
l : pasmlabel);
|
||||
|
||||
procedure a_loadaddress_ref_reg(list : paasmoutput;const ref : treference;r : tregister);virtual;
|
||||
@ -120,7 +120,7 @@ unit cgobj;
|
||||
procedure g_push_exception_value_const(list : paasmoutput;reg : tregister);virtual;
|
||||
{ that procedure pops a exception value }
|
||||
procedure g_pop_exception_value_reg(list : paasmoutput;reg : tregister);virtual;
|
||||
|
||||
procedure g_return_from_proc(list : paasmoutput;parasize : aword);virtual;
|
||||
{********************************************************}
|
||||
{ these methods can be overriden for extra functionality }
|
||||
|
||||
@ -188,6 +188,12 @@ unit cgobj;
|
||||
list^.concat(new(pairegalloc,dealloc(r)));
|
||||
end;
|
||||
|
||||
procedure tcg.a_label(list : paasmoutput;l : pasmlabel);
|
||||
|
||||
begin
|
||||
list^.concat(new(pai_label,init(l)));
|
||||
end;
|
||||
|
||||
{*****************************************************************************
|
||||
this methods must be overridden for extra functionality
|
||||
******************************************************************************}
|
||||
@ -211,16 +217,22 @@ unit cgobj;
|
||||
for better code generation these methods should be overridden
|
||||
******************************************************************************}
|
||||
|
||||
procedure tcg.a_param_reg(list : paasmoutput;size : tcgsize;r : tregister;nr : longint);
|
||||
|
||||
begin
|
||||
a_push_reg(list,r);
|
||||
end;
|
||||
|
||||
procedure tcg.a_param_const(list : paasmoutput;size : tcgsize;a : aword;nr : longint);
|
||||
|
||||
begin
|
||||
{!!!!!!!! a_push_const8(list,b); }
|
||||
a_reg_alloc(list,scratch_register);
|
||||
a_load_const_reg(list,size,a,scratch_register);
|
||||
a_param_reg(list,size,scratch_register,nr);
|
||||
a_reg_dealloc(list,scratch_register);
|
||||
end;
|
||||
|
||||
procedure tcg.a_param_ref(list : paasmoutput;size : tcgsize;const r : treference;nr : longint);
|
||||
|
||||
begin
|
||||
a_reg_alloc(list,scratch_register);
|
||||
a_load_ref_reg(list,size,r,scratch_register);
|
||||
a_param_reg(list,size,scratch_register,nr);
|
||||
a_reg_dealloc(list,scratch_register);
|
||||
end;
|
||||
|
||||
procedure tcg.a_param_ref_addr(list : paasmoutput;r : treference;nr : longint);
|
||||
@ -462,10 +474,10 @@ unit cgobj;
|
||||
tg.availabletempregsmm)) then
|
||||
begin
|
||||
if not(r in tg.usedinproc) then
|
||||
a_push_reg(list,r)
|
||||
{!!!!!!!!!!!! a_push_reg(list,r) }
|
||||
end
|
||||
else
|
||||
a_push_reg(list,r);
|
||||
{!!!!!!!! a_push_reg(list,r) };
|
||||
end;
|
||||
end;
|
||||
{ omit stack frame ? }
|
||||
@ -736,19 +748,7 @@ unit cgobj;
|
||||
if po_interrupt in aktprocsym^.definition^.procoptions then
|
||||
g_interrupt_stackframe_exit(list)
|
||||
else
|
||||
begin
|
||||
{ parameters are limited to 65535 bytes because }
|
||||
{ ret allows only imm16 }
|
||||
if (parasize>65535) and not(pocall_clearstack in aktprocsym^.definition^.proccalloptions) then
|
||||
CGMessage(cg_e_parasize_too_big);
|
||||
{Routines with the poclearstack flag set use only a ret.}
|
||||
{ also routines with parasize=0 }
|
||||
if (parasize=0) or (pocall_clearstack in aktprocsym^.definition^.proccalloptions) then
|
||||
exprasmlist^.concat(new(pai386,op_none(A_RET,S_NO)))
|
||||
else
|
||||
exprasmlist^.concat(new(pai386,op_const(A_RET,S_NO,parasize)));
|
||||
end;
|
||||
|
||||
g_return_from_proc(list,parasize);
|
||||
list^.concat(new(pai_symbol_end,initname(aktprocsym^.definition^.mangledname)));
|
||||
|
||||
{$ifdef GDB}
|
||||
@ -798,12 +798,6 @@ unit cgobj;
|
||||
some abstract definitions
|
||||
****************************************************************************}
|
||||
|
||||
procedure tcg.a_push_reg(list : paasmoutput;r : tregister);
|
||||
|
||||
begin
|
||||
abstract;
|
||||
end;
|
||||
|
||||
procedure tcg.a_call_name(list : paasmoutput;const s : string;
|
||||
offset : longint);
|
||||
|
||||
@ -811,12 +805,6 @@ unit cgobj;
|
||||
abstract;
|
||||
end;
|
||||
|
||||
procedure tcg.a_load_const_ref(list : paasmoutput;a : aword;const ref : treference);
|
||||
|
||||
begin
|
||||
abstract;
|
||||
end;
|
||||
|
||||
procedure tcg.g_stackframe_entry(list : paasmoutput;localsize : longint);
|
||||
|
||||
begin
|
||||
@ -835,7 +823,13 @@ unit cgobj;
|
||||
abstract;
|
||||
end;
|
||||
|
||||
procedure tcg.a_loadaddress_ref_reg(list : paasmoutput;ref : treference;r : tregister);
|
||||
procedure g_return_from_proc(list : paasmoutput;parasize : aword);
|
||||
|
||||
begin
|
||||
abstract;
|
||||
end;
|
||||
|
||||
procedure tcg.a_loadaddress_ref_reg(list : paasmoutput;const ref : treference;r : tregister);
|
||||
|
||||
begin
|
||||
abstract;
|
||||
@ -853,13 +847,75 @@ unit cgobj;
|
||||
abstract;
|
||||
end;
|
||||
|
||||
procedure g_pop_exception_value_reg(list : paasmoutput;reg : tregister);
|
||||
procedure tcg.g_pop_exception_value_reg(list : paasmoutput;reg : tregister);
|
||||
|
||||
begin
|
||||
abstract;
|
||||
end;
|
||||
|
||||
procedure a_param_ref(list : paasmoutput;const r : treference;nr : longint);virtual;
|
||||
procedure tcg.a_load_const_reg(list : paasmoutput;size : tcgsize;a : aword;register : tregister);
|
||||
|
||||
begin
|
||||
abstract;
|
||||
end;
|
||||
|
||||
procedure tcg.a_load_reg_ref(list : paasmoutput;size : tcgsize;register : tregister;const ref : treference);
|
||||
|
||||
begin
|
||||
abstract;
|
||||
end;
|
||||
|
||||
procedure tcg.a_load_ref_reg(list : paasmoutput;size : tcgsize;const ref : treference;register : tregister);
|
||||
|
||||
begin
|
||||
abstract;
|
||||
end;
|
||||
|
||||
procedure tcg.a_load_reg_reg(list : paasmoutput;size : tcgsize;reg1,reg2 : tregister);
|
||||
|
||||
begin
|
||||
abstract;
|
||||
end;
|
||||
|
||||
procedure tcg.a_cmp_reg_const_label(list : paasmoutput;size : tcgsize;cmp_op : topcmp;b : byte;reg : tregister;
|
||||
l : pasmlabel);
|
||||
|
||||
begin
|
||||
abstract;
|
||||
end;
|
||||
|
||||
procedure tcg.a_cmp_reg_reg_label(list : paasmoutput;size : tcgsize;cmp_op : topcmp;reg1,reg2 : tregister;l : pasmlabel);
|
||||
|
||||
begin
|
||||
abstract;
|
||||
end;
|
||||
|
||||
procedure tcg.a_cmp_reg_ref_label(list : paasmoutput;size : tcgsize;cmp_op : topcmp;reg : tregister;l : pasmlabel);
|
||||
|
||||
begin
|
||||
abstract;
|
||||
end;
|
||||
|
||||
procedure tcg.a_cmp_ref_const_label(list : paasmoutput;size : tcgsize;cmp_op : topcmp;a : aword;reg : tregister;
|
||||
l : pasmlabel);
|
||||
|
||||
begin
|
||||
abstract;
|
||||
end;
|
||||
|
||||
procedure tcg.g_return_from_proc(list : paasmoutput;parasize : aword);
|
||||
|
||||
begin
|
||||
abstract;
|
||||
end;
|
||||
|
||||
procedure tcg.a_param_reg(list : paasmoutput;size : tcgsize;r : tregister;nr : longint);
|
||||
|
||||
begin
|
||||
abstract;
|
||||
end;
|
||||
|
||||
procedure tcg.a_paramaddr_ref(list : paasmoutput;const r : treference;nr : longint);
|
||||
|
||||
begin
|
||||
abstract;
|
||||
@ -868,7 +924,10 @@ unit cgobj;
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.13 1999-08-06 13:26:50 florian
|
||||
Revision 1.14 1999-08-06 14:15:51 florian
|
||||
* made the alpha version compilable
|
||||
|
||||
Revision 1.13 1999/08/06 13:26:50 florian
|
||||
* more changes ...
|
||||
|
||||
Revision 1.12 1999/08/05 17:10:56 florian
|
||||
|
@ -44,6 +44,7 @@ unit cgcpu;
|
||||
|
||||
procedure g_stackframe_entry(list : paasmoutput;localsize : longint);virtual;
|
||||
procedure g_restore_frame_pointer(list : paasmoutput);virtual;
|
||||
procedure tcg386.g_ret_from_proc(list : paasmoutput;para size : aword);
|
||||
constructor init;
|
||||
end;
|
||||
|
||||
@ -122,10 +123,29 @@ unit cgcpu;
|
||||
begin
|
||||
list^.concat(new(pai386,op_none(A_LEAVE,S_NO)));
|
||||
end;
|
||||
|
||||
procedure tcg386.g_ret_from_proc(list : paasmoutput;para size : aword);
|
||||
|
||||
begin
|
||||
{ parameters are limited to 65535 bytes because }
|
||||
{ ret allows only imm16 }
|
||||
if (parasize>65535) and not(pocall_clearstack in aktprocsym^.definition^.proccalloptions) then
|
||||
CGMessage(cg_e_parasize_too_big);
|
||||
{ Routines with the poclearstack flag set use only a ret.}
|
||||
{ also routines with parasize=0 }
|
||||
if (parasize=0) or (pocall_clearstack in aktprocsym^.definition^.proccalloptions) then
|
||||
list^.concat(new(pai386,op_none(A_RET,S_NO)))
|
||||
else
|
||||
list^.concat(new(pai386,op_const(A_RET,S_NO,parasize)));
|
||||
end;
|
||||
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.3 1999-08-06 13:26:54 florian
|
||||
Revision 1.4 1999-08-06 14:15:56 florian
|
||||
* made the alpha version compilable
|
||||
|
||||
Revision 1.3 1999/08/06 13:26:54 florian
|
||||
* more changes ...
|
||||
|
||||
Revision 1.2 1999/08/01 23:19:59 florian
|
||||
|
Loading…
Reference in New Issue
Block a user