mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-10 10:08:29 +02:00
* made the alpha version compilable
This commit is contained in:
parent
fe08a50b7e
commit
eca7460542
@ -25,7 +25,7 @@ unit cgcpu;
|
|||||||
interface
|
interface
|
||||||
|
|
||||||
uses
|
uses
|
||||||
cgobj,aasm,cpuasm,cpubase;
|
cgbase,cgobj,aasm,cpuasm,cpubase,cpuinfo;
|
||||||
|
|
||||||
type
|
type
|
||||||
pcgalpha = ^tcgalpha;
|
pcgalpha = ^tcgalpha;
|
||||||
@ -33,17 +33,16 @@ tcgalpha = object(tcg)
|
|||||||
procedure a_push_reg(list : paasmoutput;r : tregister);virtual;
|
procedure a_push_reg(list : paasmoutput;r : tregister);virtual;
|
||||||
procedure a_call_name(list : paasmoutput;const s : string;
|
procedure a_call_name(list : paasmoutput;const s : string;
|
||||||
offset : longint);virtual;
|
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_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_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_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_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_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_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 a_loadaddress_ref_reg(list : paasmoutput;const ref : treference;r : tregister);virtual;
|
||||||
procedure g_stackframe_entry(list : paasmoutput;localsize : longint);virtual;
|
procedure g_stackframe_entry(list : paasmoutput;localsize : longint);virtual;
|
||||||
procedure g_maybe_loadself(list : paasmoutput);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_reg(list : paasmoutput;reg : tregister);virtual;
|
||||||
procedure g_push_exception_value_const(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_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;
|
constructor init;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -74,12 +69,12 @@ procedure tcgalpha.g_stackframe_entry(list : paasmoutput;localsize : longint);
|
|||||||
begin
|
begin
|
||||||
With List^ do
|
With List^ do
|
||||||
begin
|
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))));
|
concat(new(paialpha,op_reg_ref(A_LDA,Stack_Pointer,new_reference(Stack_pointer,-LocalSize))));
|
||||||
If LocalSize<>0 then
|
If LocalSize<>0 then
|
||||||
concat(new(paiframe,Init(Global_pinter,LocalSize,R27,0)));
|
concat(new(paiframe,Init(Global_pointer,LocalSize,R_27,0)));
|
||||||
// Always generate a frame pointer.
|
{ Always generate a frame pointer. }
|
||||||
concat(new(paiframe,op_reg_reg_reg(A_BIS,Stackpointer,Stack_pointer,Frame_pointer)))
|
concat(new(paialpha,op_reg_reg_reg(A_BIS,Stack_pointer,Stack_pointer,Frame_pointer)))
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -88,14 +83,15 @@ procedure g_exitcode(list : paasmoutput;parasize : longint; nostackframe,inlined
|
|||||||
begin
|
begin
|
||||||
With List^ do
|
With List^ do
|
||||||
begin
|
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)));
|
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)));
|
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)));
|
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(''));
|
Concat (new(paiend,init(''));
|
||||||
|
}
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -115,43 +111,32 @@ procedure tcgalpha.a_push_reg(list : paasmoutput;r : tregister);
|
|||||||
end;
|
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
|
begin
|
||||||
end;
|
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
|
begin
|
||||||
end;
|
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
|
begin
|
||||||
end;
|
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
|
begin
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
procedure tcgalpha.a_load_ref_reg(list : paasmoutput;size : tcgsize;const ref : treference;register : tregister);virtual;
|
procedure tcgalpha.a_cmp_reg_const_label(list : paasmoutput;size : tcgsize;cmp_op : topcmp;b : byte;reg : tregister;
|
||||||
|
l : pasmlabel);
|
||||||
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;
|
|
||||||
|
|
||||||
begin
|
begin
|
||||||
end;
|
end;
|
||||||
@ -169,55 +154,44 @@ begin
|
|||||||
end;
|
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
|
begin
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
procedure tcgalpha.a_loadaddress_ref_reg(list : paasmoutput;const ref : treference;r : tregister);
|
||||||
|
|
||||||
begin
|
begin
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
procedure tcgalpha.a_loadaddress_ref_reg(list : paasmoutput;const ref : treference;r : tregister);virtual;
|
procedure tcgalpha.g_maybe_loadself(list : paasmoutput);
|
||||||
|
|
||||||
begin
|
begin
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
procedure tcgalpha.g_stackframe_entry(list : paasmoutput;localsize : longint);virtual;
|
procedure tcgalpha.g_restore_frame_pointer(list : paasmoutput);
|
||||||
|
|
||||||
begin
|
begin
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
procedure tcgalpha.g_maybe_loadself(list : paasmoutput);virtual;
|
procedure tcgalpha.g_push_exception_value_reg(list : paasmoutput;reg : tregister);
|
||||||
|
|
||||||
begin
|
begin
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
procedure tcgalpha.g_restore_frame_pointer(list : paasmoutput);virtual;
|
procedure tcgalpha.g_push_exception_value_const(list : paasmoutput;reg : tregister);
|
||||||
|
|
||||||
begin
|
begin
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
procedure tcgalpha.g_push_exception_value_reg(list : paasmoutput;reg : tregister);virtual;
|
procedure tcgalpha.g_pop_exception_value_reg(list : paasmoutput;reg : tregister);
|
||||||
|
|
||||||
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;
|
|
||||||
|
|
||||||
begin
|
begin
|
||||||
end;
|
end;
|
||||||
@ -226,7 +200,10 @@ end;
|
|||||||
end.
|
end.
|
||||||
{
|
{
|
||||||
$Log$
|
$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
|
Empty Virtual methods inserted
|
||||||
|
|
||||||
Revision 1.3 1999/08/05 15:50:32 michael
|
Revision 1.3 1999/08/05 15:50:32 michael
|
||||||
|
@ -78,10 +78,11 @@ type
|
|||||||
constructor op_ref_ref(op : tasmop;_op1,_op2 : preference);
|
constructor op_ref_ref(op : tasmop;_op1,_op2 : preference);
|
||||||
|
|
||||||
constructor op_reg_reg_reg(op : tasmop;_op1,_op2,_op3 : tregister);
|
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_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_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_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 }
|
{ this is for Jmp instructions }
|
||||||
constructor op_cond_sym(op : tasmop;cond:TAsmCond;_op1 : pasmsymbol);
|
constructor op_cond_sym(op : tasmop;cond:TAsmCond;_op1 : pasmsymbol);
|
||||||
@ -239,7 +240,7 @@ implementation
|
|||||||
ops:=3;
|
ops:=3;
|
||||||
end;
|
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
|
begin
|
||||||
inherited init;
|
inherited init;
|
||||||
init(op);
|
init(op);
|
||||||
@ -267,6 +268,13 @@ implementation
|
|||||||
ops:=3;
|
ops:=3;
|
||||||
end;
|
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);
|
constructor taialpha.op_cond_sym(op : tasmop;cond:TAsmCond;_op1 : pasmsymbol);
|
||||||
begin
|
begin
|
||||||
@ -356,7 +364,10 @@ implementation
|
|||||||
end.
|
end.
|
||||||
{
|
{
|
||||||
$Log$
|
$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
|
* more changes
|
||||||
|
|
||||||
Revision 1.1 1999/08/03 00:24:01 michael
|
Revision 1.1 1999/08/03 00:24:01 michael
|
||||||
|
@ -105,6 +105,7 @@ Const
|
|||||||
accumulator = R_0;
|
accumulator = R_0;
|
||||||
global_pointer = R_29;
|
global_pointer = R_29;
|
||||||
scratch_register = R_1;
|
scratch_register = R_1;
|
||||||
|
return_pointer = R_26;
|
||||||
|
|
||||||
cpuflags = [cf_64bitaddr];
|
cpuflags = [cf_64bitaddr];
|
||||||
|
|
||||||
@ -237,7 +238,10 @@ end;
|
|||||||
end.
|
end.
|
||||||
{
|
{
|
||||||
$Log$
|
$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 ...
|
* more changes ...
|
||||||
|
|
||||||
Revision 1.8 1999/08/05 17:10:58 florian
|
Revision 1.8 1999/08/05 17:10:58 florian
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
{
|
{
|
||||||
$Id$
|
$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
|
This unit implements the basic code generator object
|
||||||
|
|
||||||
@ -88,7 +89,6 @@ unit cgobj;
|
|||||||
|
|
||||||
procedure a_call_name(list : paasmoutput;const s : string;
|
procedure a_call_name(list : paasmoutput;const s : string;
|
||||||
offset : longint);virtual;
|
offset : longint);virtual;
|
||||||
procedure a_push_reg(list : paasmoutput;r : tregister);virtual;
|
|
||||||
|
|
||||||
{ move instructions }
|
{ move instructions }
|
||||||
procedure a_load_const_reg(list : paasmoutput;size : tcgsize;a : aword;register : tregister);virtual;
|
procedure a_load_const_reg(list : paasmoutput;size : tcgsize;a : aword;register : tregister);virtual;
|
||||||
@ -101,7 +101,7 @@ unit cgobj;
|
|||||||
l : pasmlabel);virtual;
|
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_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_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);
|
l : pasmlabel);
|
||||||
|
|
||||||
procedure a_loadaddress_ref_reg(list : paasmoutput;const ref : treference;r : tregister);virtual;
|
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;
|
procedure g_push_exception_value_const(list : paasmoutput;reg : tregister);virtual;
|
||||||
{ that procedure pops a exception value }
|
{ that procedure pops a exception value }
|
||||||
procedure g_pop_exception_value_reg(list : paasmoutput;reg : tregister);virtual;
|
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 }
|
{ these methods can be overriden for extra functionality }
|
||||||
|
|
||||||
@ -188,6 +188,12 @@ unit cgobj;
|
|||||||
list^.concat(new(pairegalloc,dealloc(r)));
|
list^.concat(new(pairegalloc,dealloc(r)));
|
||||||
end;
|
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
|
this methods must be overridden for extra functionality
|
||||||
******************************************************************************}
|
******************************************************************************}
|
||||||
@ -211,16 +217,22 @@ unit cgobj;
|
|||||||
for better code generation these methods should be overridden
|
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);
|
procedure tcg.a_param_const(list : paasmoutput;size : tcgsize;a : aword;nr : longint);
|
||||||
|
|
||||||
begin
|
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;
|
end;
|
||||||
|
|
||||||
procedure tcg.a_param_ref_addr(list : paasmoutput;r : treference;nr : longint);
|
procedure tcg.a_param_ref_addr(list : paasmoutput;r : treference;nr : longint);
|
||||||
@ -462,10 +474,10 @@ unit cgobj;
|
|||||||
tg.availabletempregsmm)) then
|
tg.availabletempregsmm)) then
|
||||||
begin
|
begin
|
||||||
if not(r in tg.usedinproc) then
|
if not(r in tg.usedinproc) then
|
||||||
a_push_reg(list,r)
|
{!!!!!!!!!!!! a_push_reg(list,r) }
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
a_push_reg(list,r);
|
{!!!!!!!! a_push_reg(list,r) };
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
{ omit stack frame ? }
|
{ omit stack frame ? }
|
||||||
@ -736,19 +748,7 @@ unit cgobj;
|
|||||||
if po_interrupt in aktprocsym^.definition^.procoptions then
|
if po_interrupt in aktprocsym^.definition^.procoptions then
|
||||||
g_interrupt_stackframe_exit(list)
|
g_interrupt_stackframe_exit(list)
|
||||||
else
|
else
|
||||||
begin
|
g_return_from_proc(list,parasize);
|
||||||
{ 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;
|
|
||||||
|
|
||||||
list^.concat(new(pai_symbol_end,initname(aktprocsym^.definition^.mangledname)));
|
list^.concat(new(pai_symbol_end,initname(aktprocsym^.definition^.mangledname)));
|
||||||
|
|
||||||
{$ifdef GDB}
|
{$ifdef GDB}
|
||||||
@ -798,12 +798,6 @@ unit cgobj;
|
|||||||
some abstract definitions
|
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;
|
procedure tcg.a_call_name(list : paasmoutput;const s : string;
|
||||||
offset : longint);
|
offset : longint);
|
||||||
|
|
||||||
@ -811,12 +805,6 @@ unit cgobj;
|
|||||||
abstract;
|
abstract;
|
||||||
end;
|
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);
|
procedure tcg.g_stackframe_entry(list : paasmoutput;localsize : longint);
|
||||||
|
|
||||||
begin
|
begin
|
||||||
@ -835,7 +823,13 @@ unit cgobj;
|
|||||||
abstract;
|
abstract;
|
||||||
end;
|
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
|
begin
|
||||||
abstract;
|
abstract;
|
||||||
@ -853,13 +847,75 @@ unit cgobj;
|
|||||||
abstract;
|
abstract;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure g_pop_exception_value_reg(list : paasmoutput;reg : tregister);
|
procedure tcg.g_pop_exception_value_reg(list : paasmoutput;reg : tregister);
|
||||||
|
|
||||||
begin
|
begin
|
||||||
abstract;
|
abstract;
|
||||||
end;
|
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
|
begin
|
||||||
abstract;
|
abstract;
|
||||||
@ -868,7 +924,10 @@ unit cgobj;
|
|||||||
end.
|
end.
|
||||||
{
|
{
|
||||||
$Log$
|
$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 ...
|
* more changes ...
|
||||||
|
|
||||||
Revision 1.12 1999/08/05 17:10:56 florian
|
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_stackframe_entry(list : paasmoutput;localsize : longint);virtual;
|
||||||
procedure g_restore_frame_pointer(list : paasmoutput);virtual;
|
procedure g_restore_frame_pointer(list : paasmoutput);virtual;
|
||||||
|
procedure tcg386.g_ret_from_proc(list : paasmoutput;para size : aword);
|
||||||
constructor init;
|
constructor init;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -122,10 +123,29 @@ unit cgcpu;
|
|||||||
begin
|
begin
|
||||||
list^.concat(new(pai386,op_none(A_LEAVE,S_NO)));
|
list^.concat(new(pai386,op_none(A_LEAVE,S_NO)));
|
||||||
end;
|
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.
|
end.
|
||||||
{
|
{
|
||||||
$Log$
|
$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 ...
|
* more changes ...
|
||||||
|
|
||||||
Revision 1.2 1999/08/01 23:19:59 florian
|
Revision 1.2 1999/08/01 23:19:59 florian
|
||||||
|
Loading…
Reference in New Issue
Block a user