mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-11-22 03:39:32 +01:00
* implemented nostackframe calling convention directive
This commit is contained in:
parent
b55c225f9b
commit
6ab9be6a5d
@ -844,6 +844,8 @@ unit cgcpu;
|
||||
r : byte;
|
||||
begin
|
||||
LocalSize:=align(LocalSize,4);
|
||||
if not(nostackframe) then
|
||||
begin
|
||||
firstfloatreg:=RS_NO;
|
||||
{ save floating point registers? }
|
||||
for r:=RS_F0 to RS_F7 do
|
||||
@ -891,6 +893,7 @@ unit cgcpu;
|
||||
lastfloatreg-firstfloatreg+1,ref));
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
|
||||
procedure tcgarm.g_proc_exit(list : taasmoutput;parasize : longint;nostackframe:boolean);
|
||||
@ -898,6 +901,8 @@ unit cgcpu;
|
||||
ref : treference;
|
||||
firstfloatreg,lastfloatreg,
|
||||
r : byte;
|
||||
begin
|
||||
if not(nostackframe) then
|
||||
begin
|
||||
{ restore floating point register }
|
||||
firstfloatreg:=RS_NO;
|
||||
@ -909,6 +914,7 @@ unit cgcpu;
|
||||
firstfloatreg:=r;
|
||||
lastfloatreg:=r;
|
||||
end;
|
||||
|
||||
if firstfloatreg<>RS_NO then
|
||||
begin
|
||||
reference_reset(ref);
|
||||
@ -927,6 +933,9 @@ unit cgcpu;
|
||||
ref.index:=NR_FRAME_POINTER_REG;
|
||||
list.concat(setoppostfix(taicpu.op_ref_regset(A_LDM,ref,rg[R_INTREGISTER].used_in_proc-paramanager.get_volatile_registers_int(pocall_stdcall)+[RS_R11,RS_R13,RS_R15]),PF_EA));
|
||||
end;
|
||||
end
|
||||
else
|
||||
list.concat(taicpu.op_reg_reg(A_MOV,NR_PC,NR_R14));
|
||||
end;
|
||||
|
||||
|
||||
@ -1286,7 +1295,10 @@ begin
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.63 2004-11-06 15:18:57 florian
|
||||
Revision 1.64 2005-01-04 15:36:32 florian
|
||||
* implemented nostackframe calling convention directive
|
||||
|
||||
Revision 1.63 2004/11/06 15:18:57 florian
|
||||
* fixed OP_SUB for negative constants fitting in the shifter
|
||||
|
||||
Revision 1.62 2004/11/01 17:41:28 florian
|
||||
|
||||
Loading…
Reference in New Issue
Block a user