mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-13 12:26:58 +02:00
* remove saveregister calling convention
This commit is contained in:
parent
410d01458c
commit
705868e816
@ -417,8 +417,6 @@ unit cgobj;
|
||||
@param(usedinproc Registers which are used in the code of this routine)
|
||||
}
|
||||
procedure g_restore_standard_registers(list:Taasmoutput);virtual;abstract;
|
||||
procedure g_save_all_registers(list : taasmoutput);virtual;abstract;
|
||||
procedure g_restore_all_registers(list : taasmoutput;const funcretparaloc:TCGPara);virtual;abstract;
|
||||
end;
|
||||
|
||||
{$ifndef cpu64bit}
|
||||
@ -1417,8 +1415,6 @@ implementation
|
||||
paraloc2.init;
|
||||
paramanager.getintparaloc(pocall_default,1,paraloc1);
|
||||
paramanager.getintparaloc(pocall_default,2,paraloc2);
|
||||
{ These functions should not change the registers (they use
|
||||
the saveregister proc directive }
|
||||
if is_interfacecom(t) then
|
||||
incrfunc:='FPC_INTF_INCR_REF'
|
||||
else if is_ansistring(t) then
|
||||
@ -2031,7 +2027,10 @@ finalization
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.180 2004-10-24 11:44:28 peter
|
||||
Revision 1.181 2004-10-24 20:01:08 peter
|
||||
* remove saveregister calling convention
|
||||
|
||||
Revision 1.180 2004/10/24 11:44:28 peter
|
||||
* small regvar fixes
|
||||
* loadref parameter removed from concatcopy,incrrefcount,etc
|
||||
|
||||
|
@ -43,8 +43,6 @@ unit cgcpu;
|
||||
procedure a_param_ref(list : taasmoutput;size : tcgsize;const r : treference;const cgpara : tcgpara);override;
|
||||
procedure a_paramaddr_ref(list : taasmoutput;const r : treference;const cgpara : tcgpara);override;
|
||||
|
||||
procedure g_save_all_registers(list : taasmoutput);override;
|
||||
procedure g_restore_all_registers(list : taasmoutput;const funcretparaloc:tcgpara);override;
|
||||
procedure g_proc_exit(list : taasmoutput;parasize:longint;nostackframe:boolean);override;
|
||||
procedure g_copyvaluepara_openarray(list : taasmoutput;const ref:treference;const lenloc:tlocation;elesize:aint;destreg:tregister);override;
|
||||
|
||||
@ -184,42 +182,6 @@ unit cgcpu;
|
||||
end;
|
||||
|
||||
|
||||
procedure tcg386.g_save_all_registers(list : taasmoutput);
|
||||
begin
|
||||
list.concat(Taicpu.Op_none(A_PUSHA,S_L));
|
||||
tg.GetTemp(list,sizeof(aint),tt_noreuse,current_procinfo.save_regs_ref);
|
||||
a_load_reg_ref(list,OS_ADDR,OS_ADDR,NR_STACK_POINTER_REG,current_procinfo.save_regs_ref);
|
||||
end;
|
||||
|
||||
|
||||
procedure tcg386.g_restore_all_registers(list : taasmoutput;const funcretparaloc:tcgpara);
|
||||
var
|
||||
href : treference;
|
||||
begin
|
||||
a_load_ref_reg(list,OS_ADDR,OS_ADDR,current_procinfo.save_regs_ref,NR_STACK_POINTER_REG);
|
||||
tg.UnGetTemp(list,current_procinfo.save_regs_ref);
|
||||
if assigned(funcretparaloc.location) and
|
||||
(funcretparaloc.location^.loc=LOC_REGISTER) then
|
||||
begin
|
||||
if funcretparaloc.size in [OS_64,OS_S64] then
|
||||
begin
|
||||
reference_reset_base(href,NR_STACK_POINTER_REG,20);
|
||||
a_load_reg_ref(list,OS_32,OS_32,NR_FUNCTION_RETURN64_HIGH_REG,href);
|
||||
reference_reset_base(href,NR_STACK_POINTER_REG,28);
|
||||
a_load_reg_ref(list,OS_32,OS_32,NR_FUNCTION_RETURN64_LOW_REG,href);
|
||||
end
|
||||
else
|
||||
begin
|
||||
reference_reset_base(href,NR_STACK_POINTER_REG,28);
|
||||
a_load_reg_ref(list,OS_32,OS_32,NR_FUNCTION_RETURN_REG,href);
|
||||
end;
|
||||
end;
|
||||
list.concat(Taicpu.Op_none(A_POPA,S_L));
|
||||
{ We add a NOP because of the 386DX CPU bugs with POPAD }
|
||||
list.concat(taicpu.op_none(A_NOP,S_L));
|
||||
end;
|
||||
|
||||
|
||||
procedure tcg386.g_proc_exit(list : taasmoutput;parasize:longint;nostackframe:boolean);
|
||||
var
|
||||
stacksize : longint;
|
||||
@ -558,7 +520,10 @@ begin
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.58 2004-10-24 11:44:28 peter
|
||||
Revision 1.59 2004-10-24 20:01:08 peter
|
||||
* remove saveregister calling convention
|
||||
|
||||
Revision 1.58 2004/10/24 11:44:28 peter
|
||||
* small regvar fixes
|
||||
* loadref parameter removed from concatcopy,incrrefcount,etc
|
||||
|
||||
|
@ -47,9 +47,9 @@ uses
|
||||
|
||||
{
|
||||
possible calling conventions:
|
||||
default stdcall cdecl pascal register saveregisters
|
||||
default(0): OK OK OK(1) OK OK OK
|
||||
virtual(2): OK OK OK(3) OK OK OK(4)
|
||||
default stdcall cdecl pascal register
|
||||
default(0): OK OK OK(1) OK OK
|
||||
virtual(2): OK OK OK(3) OK OK
|
||||
|
||||
(0):
|
||||
set self parameter to correct value
|
||||
@ -196,8 +196,7 @@ begin
|
||||
end
|
||||
else if po_virtualmethod in procdef.procoptions then
|
||||
begin
|
||||
if (procdef.proccalloption=pocall_register) or
|
||||
(po_saveregisters in procdef.procoptions) then
|
||||
if (procdef.proccalloption=pocall_register) then
|
||||
begin
|
||||
{ case 4 }
|
||||
emit_reg(A_PUSH,S_L,NR_EBX); { allocate space for address}
|
||||
@ -239,7 +238,10 @@ initialization
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.34 2004-06-20 08:55:31 florian
|
||||
Revision 1.35 2004-10-24 20:01:08 peter
|
||||
* remove saveregister calling convention
|
||||
|
||||
Revision 1.34 2004/06/20 08:55:31 florian
|
||||
* logs truncated
|
||||
|
||||
Revision 1.33 2004/06/16 20:07:10 florian
|
||||
|
@ -883,10 +883,11 @@ implementation
|
||||
{ Load parameters that are in temporary registers in the
|
||||
correct parameter register }
|
||||
if assigned(left) then
|
||||
pushparas;
|
||||
|
||||
{ free the resources allocated for the parameters }
|
||||
freeparas;
|
||||
begin
|
||||
pushparas;
|
||||
{ free the resources allocated for the parameters }
|
||||
freeparas;
|
||||
end;
|
||||
|
||||
cg.alloccpuregisters(exprasmlist,R_INTREGISTER,regs_to_save_int);
|
||||
if cg.uses_registers(R_FPUREGISTER) then
|
||||
@ -903,10 +904,11 @@ implementation
|
||||
{ Load parameters that are in temporary registers in the
|
||||
correct parameter register }
|
||||
if assigned(left) then
|
||||
pushparas;
|
||||
|
||||
{ free the resources allocated for the parameters }
|
||||
freeparas;
|
||||
begin
|
||||
pushparas;
|
||||
{ free the resources allocated for the parameters }
|
||||
freeparas;
|
||||
end;
|
||||
|
||||
cg.alloccpuregisters(exprasmlist,R_INTREGISTER,regs_to_save_int);
|
||||
if cg.uses_registers(R_FPUREGISTER) then
|
||||
@ -943,10 +945,11 @@ implementation
|
||||
{ Load parameters that are in temporary registers in the
|
||||
correct parameter register }
|
||||
if assigned(left) then
|
||||
pushparas;
|
||||
|
||||
{ free the resources allocated for the parameters }
|
||||
freeparas;
|
||||
begin
|
||||
pushparas;
|
||||
{ free the resources allocated for the parameters }
|
||||
freeparas;
|
||||
end;
|
||||
|
||||
cg.alloccpuregisters(exprasmlist,R_INTREGISTER,regs_to_save_int);
|
||||
if cg.uses_registers(R_FPUREGISTER) then
|
||||
@ -1062,7 +1065,7 @@ implementation
|
||||
{ Allocate parameters and locals }
|
||||
gen_alloc_inline_parast(exprasmlist,tprocdef(procdefinition));
|
||||
gen_alloc_inline_funcret(exprasmlist,tprocdef(procdefinition));
|
||||
gen_alloc_symtable(exprasmlist,tlocalsymtable(tprocdef(procdefinition).localst));
|
||||
gen_alloc_symtable(exprasmlist,tprocdef(procdefinition).localst);
|
||||
|
||||
{ if we allocate the temp. location for ansi- or widestrings }
|
||||
{ already here, we avoid later a push/pop }
|
||||
@ -1128,7 +1131,8 @@ implementation
|
||||
|
||||
gen_load_para_value(inlineentrycode);
|
||||
{ now that we've loaded the para's, free them }
|
||||
freeparas;
|
||||
if assigned(left) then
|
||||
freeparas;
|
||||
gen_initialize_code(inlineentrycode);
|
||||
if po_assembler in current_procinfo.procdef.procoptions then
|
||||
inlineentrycode.insert(Tai_marker.Create(asmblockstart));
|
||||
@ -1243,7 +1247,10 @@ begin
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.180 2004-10-24 11:53:45 peter
|
||||
Revision 1.181 2004-10-24 20:01:08 peter
|
||||
* remove saveregister calling convention
|
||||
|
||||
Revision 1.180 2004/10/24 11:53:45 peter
|
||||
* fixed compilation with removed loadref
|
||||
|
||||
Revision 1.179 2004/10/24 11:44:28 peter
|
||||
|
@ -59,6 +59,7 @@ interface
|
||||
procedure gen_proc_symbol_end(list:Taasmoutput);
|
||||
procedure gen_proc_entry_code(list:Taasmoutput);
|
||||
procedure gen_proc_exit_code(list:Taasmoutput);
|
||||
procedure gen_stack_check_code(list:Taasmoutput);
|
||||
procedure gen_save_used_regs(list:TAAsmoutput);
|
||||
procedure gen_restore_used_regs(list:TAAsmoutput;const funcretparaloc:tcgpara);
|
||||
procedure gen_initialize_code(list:TAAsmoutput);
|
||||
@ -1677,32 +1678,11 @@ implementation
|
||||
procedure gen_proc_entry_code(list:Taasmoutput);
|
||||
var
|
||||
hitemp,
|
||||
lotemp,
|
||||
stackframe : longint;
|
||||
check : boolean;
|
||||
paraloc1 : tcgpara;
|
||||
href : treference;
|
||||
lotemp : longint;
|
||||
begin
|
||||
paraloc1.init;
|
||||
|
||||
{ generate call frame marker for dwarf call frame info }
|
||||
dwarfcfi.start_frame(list);
|
||||
|
||||
{ allocate temp for saving the argument used when
|
||||
stack checking uses a register for pushing the stackframe size }
|
||||
check:=(cs_check_stack in aktlocalswitches) and (current_procinfo.procdef.proctypeoption<>potype_proginit);
|
||||
if check then
|
||||
begin
|
||||
{ Allocate tempspace to store register parameter than
|
||||
is destroyed when calling stackchecking code }
|
||||
paramanager.getintparaloc(pocall_default,1,paraloc1);
|
||||
if paraloc1.location^.loc=LOC_REGISTER then
|
||||
tg.GetTemp(list,sizeof(aint),tt_normal,href);
|
||||
end;
|
||||
|
||||
{ Calculate size of stackframe }
|
||||
stackframe:=current_procinfo.calc_stackframe_size;
|
||||
|
||||
{ All temps are know, write offsets used for information }
|
||||
if (cs_asm_source in aktglobalswitches) then
|
||||
begin
|
||||
@ -1721,29 +1701,7 @@ implementation
|
||||
end;
|
||||
|
||||
{ generate target specific proc entry code }
|
||||
cg.g_proc_entry(list,stackframe,(po_nostackframe in current_procinfo.procdef.procoptions));
|
||||
|
||||
{ Add stack checking code? }
|
||||
if check then
|
||||
begin
|
||||
{ The tempspace to store original register is already
|
||||
allocated above before the stackframe size is calculated. }
|
||||
if paraloc1.location^.loc=LOC_REGISTER then
|
||||
cg.a_load_reg_ref(list,OS_INT,OS_INT,paraloc1.location^.register,href);
|
||||
paramanager.allocparaloc(list,paraloc1);
|
||||
cg.a_param_const(list,OS_INT,stackframe,paraloc1);
|
||||
paramanager.freeparaloc(list,paraloc1);
|
||||
cg.alloccpuregisters(list,R_INTREGISTER,paramanager.get_volatile_registers_int(pocall_default));
|
||||
cg.a_call_name(list,'FPC_STACKCHECK');
|
||||
cg.dealloccpuregisters(list,R_INTREGISTER,paramanager.get_volatile_registers_int(pocall_default));
|
||||
if paraloc1.location^.loc=LOC_REGISTER then
|
||||
begin
|
||||
cg.a_load_ref_reg(list,OS_INT,OS_INT,href,paraloc1.location^.register);
|
||||
tg.UnGetTemp(list,href);
|
||||
end;
|
||||
end;
|
||||
|
||||
paraloc1.done;
|
||||
cg.g_proc_entry(list,current_procinfo.calc_stackframe_size,(po_nostackframe in current_procinfo.procdef.procoptions));
|
||||
end;
|
||||
|
||||
|
||||
@ -1773,19 +1731,31 @@ implementation
|
||||
end;
|
||||
|
||||
|
||||
procedure gen_stack_check_code(list:Taasmoutput);
|
||||
var
|
||||
paraloc1 : tcgpara;
|
||||
begin
|
||||
paraloc1.init;
|
||||
paramanager.getintparaloc(pocall_default,1,paraloc1);
|
||||
paramanager.allocparaloc(list,paraloc1);
|
||||
cg.a_param_const(list,OS_INT,current_procinfo.calc_stackframe_size,paraloc1);
|
||||
paramanager.freeparaloc(list,paraloc1);
|
||||
cg.alloccpuregisters(list,R_INTREGISTER,paramanager.get_volatile_registers_int(pocall_default));
|
||||
cg.a_call_name(list,'FPC_STACKCHECK');
|
||||
cg.dealloccpuregisters(list,R_INTREGISTER,paramanager.get_volatile_registers_int(pocall_default));
|
||||
paraloc1.done;
|
||||
end;
|
||||
|
||||
|
||||
procedure gen_save_used_regs(list:TAAsmoutput);
|
||||
begin
|
||||
{ Pure assembler routines need to save the registers themselves }
|
||||
if (po_assembler in current_procinfo.procdef.procoptions) then
|
||||
exit;
|
||||
|
||||
{ for the save all registers we can simply use a pusha,popa which
|
||||
push edi,esi,ebp,esp(ignored),ebx,edx,ecx,eax }
|
||||
if (po_saveregisters in current_procinfo.procdef.procoptions) then
|
||||
cg.g_save_all_registers(list)
|
||||
else
|
||||
if current_procinfo.procdef.proccalloption in savestdregs_pocalls then
|
||||
cg.g_save_standard_registers(list);
|
||||
{ oldfpccall expects all registers to be destroyed }
|
||||
if current_procinfo.procdef.proccalloption<>pocall_oldfpccall then
|
||||
cg.g_save_standard_registers(list);
|
||||
end;
|
||||
|
||||
|
||||
@ -1795,13 +1765,9 @@ implementation
|
||||
if (po_assembler in current_procinfo.procdef.procoptions) then
|
||||
exit;
|
||||
|
||||
{ for the save all registers we can simply use a pusha,popa which
|
||||
push edi,esi,ebp,esp(ignored),ebx,edx,ecx,eax }
|
||||
if (po_saveregisters in current_procinfo.procdef.procoptions) then
|
||||
cg.g_restore_all_registers(list,funcretparaloc)
|
||||
else
|
||||
if current_procinfo.procdef.proccalloption in savestdregs_pocalls then
|
||||
cg.g_restore_standard_registers(list);
|
||||
{ oldfpccall expects all registers to be destroyed }
|
||||
if current_procinfo.procdef.proccalloption<>pocall_oldfpccall then
|
||||
cg.g_restore_standard_registers(list);
|
||||
end;
|
||||
|
||||
|
||||
@ -2237,7 +2203,10 @@ implementation
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.230 2004-10-24 11:44:28 peter
|
||||
Revision 1.231 2004-10-24 20:01:08 peter
|
||||
* remove saveregister calling convention
|
||||
|
||||
Revision 1.230 2004/10/24 11:44:28 peter
|
||||
* small regvar fixes
|
||||
* loadref parameter removed from concatcopy,incrrefcount,etc
|
||||
|
||||
|
@ -1746,6 +1746,7 @@ begin
|
||||
def_symbol('DECRREFNOTNIL');
|
||||
def_symbol('HAS_INTERNAL_INTTYPES');
|
||||
def_symbol('STR_USES_VALINT');
|
||||
def_symbol('NOSAVEREGISTERS');
|
||||
|
||||
{ using a case is pretty useless here (FK) }
|
||||
{ some stuff for TP compatibility }
|
||||
@ -2112,7 +2113,10 @@ finalization
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.147 2004-10-15 09:14:17 mazen
|
||||
Revision 1.148 2004-10-24 20:01:08 peter
|
||||
* remove saveregister calling convention
|
||||
|
||||
Revision 1.147 2004/10/15 09:14:17 mazen
|
||||
- remove $IFDEF DELPHI and related code
|
||||
- remove $IFDEF FPCPROCVAR and related code
|
||||
|
||||
|
@ -1276,7 +1276,7 @@ type
|
||||
end;
|
||||
const
|
||||
{Should contain the number of procedure directives we support.}
|
||||
num_proc_directives=37;
|
||||
num_proc_directives=36;
|
||||
proc_direcdata:array[1..num_proc_directives] of proc_dir_rec=
|
||||
(
|
||||
(
|
||||
@ -1532,15 +1532,6 @@ const
|
||||
mutexclpocall : [];
|
||||
mutexclpotype : [potype_constructor,potype_destructor];
|
||||
mutexclpo : [po_external]
|
||||
),(
|
||||
idtok:_SAVEREGISTERS;
|
||||
pd_flags : [pd_interface,pd_implemen,pd_body,pd_procvar,pd_notobjintf];
|
||||
handler : nil;
|
||||
pocall : pocall_none;
|
||||
pooption : [po_saveregisters];
|
||||
mutexclpocall : [pocall_internproc];
|
||||
mutexclpotype : [potype_constructor,potype_destructor];
|
||||
mutexclpo : [po_external]
|
||||
),(
|
||||
idtok:_SOFTFLOAT;
|
||||
pd_flags : [pd_interface,pd_implemen,pd_body,pd_procvar];
|
||||
@ -2268,7 +2259,10 @@ const
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.196 2004-10-24 13:48:50 peter
|
||||
Revision 1.197 2004-10-24 20:01:08 peter
|
||||
* remove saveregister calling convention
|
||||
|
||||
Revision 1.196 2004/10/24 13:48:50 peter
|
||||
* don't give warning for property as unknwon proc directive
|
||||
|
||||
Revision 1.195 2004/10/24 11:44:28 peter
|
||||
|
@ -93,11 +93,6 @@ unit cgcpu;
|
||||
{ that's the case, we can use rlwinm to do an AND operation }
|
||||
function get_rlwi_const(a: aint; var l1, l2: longint): boolean;
|
||||
|
||||
procedure g_save_standard_registers(list:Taasmoutput);override;
|
||||
procedure g_restore_standard_registers(list:Taasmoutput);override;
|
||||
procedure g_save_all_registers(list : taasmoutput);override;
|
||||
procedure g_restore_all_registers(list : taasmoutput;const funcretparaloc:tcgpara);override;
|
||||
|
||||
procedure a_jmp_cond(list : taasmoutput;cond : TOpCmp;l: tasmlabel);
|
||||
|
||||
private
|
||||
@ -852,26 +847,6 @@ const
|
||||
end;
|
||||
|
||||
|
||||
procedure tcgppc.g_save_standard_registers(list:Taasmoutput);
|
||||
begin
|
||||
{$warning FIX ME}
|
||||
end;
|
||||
|
||||
procedure tcgppc.g_restore_standard_registers(list:Taasmoutput);
|
||||
begin
|
||||
{$warning FIX ME}
|
||||
end;
|
||||
|
||||
procedure tcgppc.g_save_all_registers(list : taasmoutput);
|
||||
begin
|
||||
{$warning FIX ME}
|
||||
end;
|
||||
|
||||
procedure tcgppc.g_restore_all_registers(list : taasmoutput;const funcretparaloc:tcgpara);
|
||||
begin
|
||||
{$warning FIX ME}
|
||||
end;
|
||||
|
||||
procedure tcgppc.a_jmp_cond(list : taasmoutput;cond : TOpCmp;l: tasmlabel);
|
||||
|
||||
begin
|
||||
@ -2366,7 +2341,10 @@ begin
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.181 2004-10-24 11:53:45 peter
|
||||
Revision 1.182 2004-10-24 20:01:08 peter
|
||||
* remove saveregister calling convention
|
||||
|
||||
Revision 1.181 2004/10/24 11:53:45 peter
|
||||
* fixed compilation with removed loadref
|
||||
|
||||
Revision 1.180 2004/10/20 07:32:42 jonas
|
||||
|
@ -43,6 +43,7 @@ interface
|
||||
entry_asmnode,
|
||||
loadpara_asmnode,
|
||||
exitlabel_asmnode,
|
||||
stackcheck_asmnode,
|
||||
init_asmnode,
|
||||
final_asmnode : tasmnode;
|
||||
{ list to store the procinfo's of the nested procedures }
|
||||
@ -534,6 +535,7 @@ implementation
|
||||
aktfilepos:=entrypos;
|
||||
entry_asmnode:=casmnode.create_get_position;
|
||||
loadpara_asmnode:=casmnode.create_get_position;
|
||||
stackcheck_asmnode:=casmnode.create_get_position;
|
||||
init_asmnode:=casmnode.create_get_position;
|
||||
bodyentrycode:=generate_bodyentry_block;
|
||||
{ Generate code/locations used at end of proc }
|
||||
@ -561,6 +563,7 @@ implementation
|
||||
addstatement(codestatement,final_asmnode);
|
||||
{ Initialize before try...finally...end frame }
|
||||
addstatement(newstatement,loadpara_asmnode);
|
||||
addstatement(newstatement,stackcheck_asmnode);
|
||||
addstatement(newstatement,entry_asmnode);
|
||||
addstatement(newstatement,init_asmnode);
|
||||
addstatement(newstatement,bodyentrycode);
|
||||
@ -576,6 +579,7 @@ implementation
|
||||
else
|
||||
begin
|
||||
addstatement(newstatement,loadpara_asmnode);
|
||||
addstatement(newstatement,stackcheck_asmnode);
|
||||
addstatement(newstatement,entry_asmnode);
|
||||
addstatement(newstatement,init_asmnode);
|
||||
addstatement(newstatement,bodyentrycode);
|
||||
@ -678,8 +682,8 @@ implementation
|
||||
|
||||
{ Allocate space in temp/registers for parast and localst }
|
||||
aktfilepos:=entrypos;
|
||||
gen_alloc_symtable(aktproccode,tparasymtable(procdef.parast));
|
||||
gen_alloc_symtable(aktproccode,tlocalsymtable(procdef.localst));
|
||||
gen_alloc_symtable(aktproccode,procdef.parast);
|
||||
gen_alloc_symtable(aktproccode,procdef.localst);
|
||||
|
||||
{ Store temp offset for information about 'real' temps }
|
||||
tempstart:=tg.lasttemp;
|
||||
@ -786,6 +790,15 @@ implementation
|
||||
aktproccode.insertlistafter(headertai,templist);
|
||||
aktfilepos:=exitpos;
|
||||
gen_restore_used_regs(aktproccode,procdef.funcret_paraloc[calleeside]);
|
||||
{ Add stack checking code }
|
||||
if (cs_check_stack in entryswitches) and
|
||||
not(po_assembler in procdef.procoptions) and
|
||||
(current_procinfo.procdef.proctypeoption<>potype_proginit) then
|
||||
begin
|
||||
aktfilepos:=entrypos;
|
||||
gen_stack_check_code(templist);
|
||||
aktproccode.insertlistafter(stackcheck_asmnode.currenttai,templist)
|
||||
end;
|
||||
{ Add entry code (stack allocation) after header }
|
||||
aktfilepos:=entrypos;
|
||||
gen_proc_entry_code(templist);
|
||||
@ -1391,7 +1404,10 @@ implementation
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.209 2004-10-15 09:14:17 mazen
|
||||
Revision 1.210 2004-10-24 20:01:08 peter
|
||||
* remove saveregister calling convention
|
||||
|
||||
Revision 1.209 2004/10/15 09:14:17 mazen
|
||||
- remove $IFDEF DELPHI and related code
|
||||
- remove $IFDEF FPCPROCVAR and related code
|
||||
|
||||
|
@ -84,9 +84,7 @@ interface
|
||||
procedure g_overflowCheck_loc(List:TAasmOutput;const Loc:TLocation;def:TDef;ovloc : tlocation);override;
|
||||
procedure g_proc_entry(list : taasmoutput;localsize : longint;nostackframe:boolean);override;
|
||||
procedure g_proc_exit(list : taasmoutput;parasize:longint;nostackframe:boolean);override;
|
||||
procedure g_restore_all_registers(list:TAasmOutput;const funcretparaloc:TCGPara);override;
|
||||
procedure g_restore_standard_registers(list:taasmoutput);override;
|
||||
procedure g_save_all_registers(list : taasmoutput);override;
|
||||
procedure g_save_standard_registers(list : taasmoutput);override;
|
||||
procedure g_concatcopy(list : taasmoutput;const source,dest : treference;len : aint);override;
|
||||
procedure g_concatcopy_unaligned(list : taasmoutput;const source,dest : treference;len : aint);override;
|
||||
@ -945,12 +943,6 @@ implementation
|
||||
end;
|
||||
|
||||
|
||||
procedure TCgSparc.g_restore_all_registers(list:TaasmOutput;const funcretparaloc:TCGPara);
|
||||
begin
|
||||
{ The sparc port uses the sparc standard calling convetions so this function has no used }
|
||||
end;
|
||||
|
||||
|
||||
procedure TCgSparc.g_restore_standard_registers(list:taasmoutput);
|
||||
begin
|
||||
{ The sparc port uses the sparc standard calling convetions so this function has no used }
|
||||
@ -975,12 +967,6 @@ implementation
|
||||
end;
|
||||
|
||||
|
||||
procedure TCgSparc.g_save_all_registers(list : taasmoutput);
|
||||
begin
|
||||
{ The sparc port uses the sparc standard calling convetions so this function has no used }
|
||||
end;
|
||||
|
||||
|
||||
procedure TCgSparc.g_save_standard_registers(list : taasmoutput);
|
||||
begin
|
||||
{ The sparc port uses the sparc standard calling convetions so this function has no used }
|
||||
@ -1259,7 +1245,10 @@ begin
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.96 2004-10-24 11:53:45 peter
|
||||
Revision 1.97 2004-10-24 20:01:08 peter
|
||||
* remove saveregister calling convention
|
||||
|
||||
Revision 1.96 2004/10/24 11:53:45 peter
|
||||
* fixed compilation with removed loadref
|
||||
|
||||
Revision 1.95 2004/10/10 20:51:46 peter
|
||||
|
@ -219,7 +219,6 @@ type
|
||||
po_msgint, { method for int message handling }
|
||||
po_exports, { Procedure has export directive (needed for OS/2) }
|
||||
po_external, { Procedure is external (in other object or lib)}
|
||||
po_saveregisters, { save all registers }
|
||||
po_overload, { procedure is declared with overload directive }
|
||||
po_varargs, { printf like arguments }
|
||||
po_internconst, { procedure has constant evaluator intern }
|
||||
@ -376,12 +375,6 @@ const
|
||||
|
||||
|
||||
const
|
||||
savestdregs_pocalls = [
|
||||
pocall_cdecl,pocall_cppdecl,pocall_syscall,
|
||||
pocall_stdcall,pocall_safecall,pocall_compilerproc,
|
||||
pocall_register,pocall_softfloat
|
||||
];
|
||||
|
||||
clearstack_pocalls = [
|
||||
pocall_cdecl,pocall_cppdecl,pocall_syscall
|
||||
];
|
||||
@ -415,7 +408,10 @@ initialization
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.89 2004-10-08 17:09:43 peter
|
||||
Revision 1.90 2004-10-24 20:01:08 peter
|
||||
* remove saveregister calling convention
|
||||
|
||||
Revision 1.89 2004/10/08 17:09:43 peter
|
||||
* tvarsym.varregable added, split vo_regable from varoptions
|
||||
|
||||
Revision 1.88 2004/09/13 20:30:22 peter
|
||||
|
@ -223,7 +223,6 @@ type
|
||||
_FINALIZATION,
|
||||
_NOSTACKFRAME,
|
||||
_DISPINTERFACE,
|
||||
_SAVEREGISTERS,
|
||||
_UNIMPLEMENTED,
|
||||
_IMPLEMENTATION,
|
||||
_INITIALIZATION,
|
||||
@ -453,7 +452,6 @@ const
|
||||
(str:'FINALIZATION' ;special:false;keyword:m_initfinal;op:NOTOKEN),
|
||||
(str:'NOSTACKFRAME' ;special:false;keyword:m_none;op:NOTOKEN),
|
||||
(str:'DISPINTERFACE' ;special:false;keyword:m_class;op:NOTOKEN),
|
||||
(str:'SAVEREGISTERS' ;special:false;keyword:m_none;op:NOTOKEN),
|
||||
(str:'UNIMPLEMENTED' ;special:false;keyword:m_all;op:NOTOKEN),
|
||||
(str:'IMPLEMENTATION';special:false;keyword:m_all;op:NOTOKEN),
|
||||
(str:'INITIALIZATION';special:false;keyword:m_initfinal;op:NOTOKEN),
|
||||
@ -518,7 +516,10 @@ end;
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.31 2004-07-05 23:25:34 olle
|
||||
Revision 1.32 2004-10-24 20:01:08 peter
|
||||
* remove saveregister calling convention
|
||||
|
||||
Revision 1.31 2004/07/05 23:25:34 olle
|
||||
+ adding operators "|" and "&" for macpas
|
||||
|
||||
Revision 1.30 2004/06/20 08:55:30 florian
|
||||
|
@ -35,8 +35,6 @@ unit cgcpu;
|
||||
type
|
||||
tcgx86_64 = class(tcgx86)
|
||||
procedure init_register_allocators;override;
|
||||
procedure g_save_all_registers(list : taasmoutput);override;
|
||||
procedure g_restore_all_registers(list : taasmoutput;const funcretparaloc:tcgpara);override;
|
||||
procedure g_proc_exit(list : taasmoutput;parasize:longint;nostackframe:boolean);override;
|
||||
end;
|
||||
|
||||
@ -64,18 +62,6 @@ unit cgcpu;
|
||||
end;
|
||||
|
||||
|
||||
procedure tcgx86_64.g_save_all_registers(list : taasmoutput);
|
||||
begin
|
||||
{$warning todo tcgx86_64.g_save_all_registers}
|
||||
end;
|
||||
|
||||
|
||||
procedure tcgx86_64.g_restore_all_registers(list : taasmoutput;const funcretparaloc:tcgpara);
|
||||
begin
|
||||
{$warning todo tcgx86_64.g_restore_all_registers}
|
||||
end;
|
||||
|
||||
|
||||
procedure tcgx86_64.g_proc_exit(list : taasmoutput;parasize:longint;nostackframe:boolean);
|
||||
var
|
||||
stacksize : longint;
|
||||
@ -109,7 +95,10 @@ begin
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.17 2004-10-05 20:41:02 peter
|
||||
Revision 1.18 2004-10-24 20:01:08 peter
|
||||
* remove saveregister calling convention
|
||||
|
||||
Revision 1.17 2004/10/05 20:41:02 peter
|
||||
* more spilling rewrites
|
||||
|
||||
Revision 1.16 2004/09/21 17:25:13 peter
|
||||
|
Loading…
Reference in New Issue
Block a user