mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-09-12 10:49:07 +02:00
* renamed t<cpuname>procinfo to tcpuprocinfo for all targets, so we can
inherit from it for LLVM without a thousand ifdefs git-svn-id: trunk@35141 -
This commit is contained in:
parent
e35f83ba94
commit
880d438704
@ -30,7 +30,7 @@ interface
|
||||
psub;
|
||||
|
||||
type
|
||||
taarch64procinfo=class(tcgprocinfo)
|
||||
tcpuprocinfo=class(tcgprocinfo)
|
||||
constructor create(aparent: tprocinfo); override;
|
||||
procedure set_first_temp_offset; override;
|
||||
end;
|
||||
@ -41,7 +41,7 @@ implementation
|
||||
tgobj,
|
||||
cpubase;
|
||||
|
||||
constructor taarch64procinfo.create(aparent: tprocinfo);
|
||||
constructor tcpuprocinfo.create(aparent: tprocinfo);
|
||||
begin
|
||||
inherited;
|
||||
{ use the stack pointer as framepointer, because
|
||||
@ -56,7 +56,7 @@ implementation
|
||||
framepointer:=NR_STACK_POINTER_REG;
|
||||
end;
|
||||
|
||||
procedure taarch64procinfo.set_first_temp_offset;
|
||||
procedure tcpuprocinfo.set_first_temp_offset;
|
||||
begin
|
||||
{ leave room for allocated parameters }
|
||||
tg.setfirsttemp(align(maxpushedparasize,16));
|
||||
@ -64,5 +64,5 @@ implementation
|
||||
|
||||
|
||||
begin
|
||||
cprocinfo:=taarch64procinfo;
|
||||
cprocinfo:=tcpuprocinfo;
|
||||
end.
|
||||
|
@ -1898,7 +1898,7 @@ unit cgcpu;
|
||||
|
||||
{ call instruction does not put anything on the stack }
|
||||
registerarea:=0;
|
||||
tarmprocinfo(current_procinfo).stackpaddingreg:=High(TSuperRegister);
|
||||
tcpuprocinfo(current_procinfo).stackpaddingreg:=High(TSuperRegister);
|
||||
lastfloatreg:=RS_NO;
|
||||
if not(nostackframe) then
|
||||
begin
|
||||
@ -1971,7 +1971,7 @@ unit cgcpu;
|
||||
begin
|
||||
regs:=regs+[r];
|
||||
inc(registerarea,4);
|
||||
tarmprocinfo(current_procinfo).stackpaddingreg:=r;
|
||||
tcpuprocinfo(current_procinfo).stackpaddingreg:=r;
|
||||
break;
|
||||
end;
|
||||
list.concat(setoppostfix(taicpu.op_ref_regset(A_STM,ref,R_INTREGISTER,R_SUBWHOLE,regs),PF_FD));
|
||||
@ -2041,10 +2041,10 @@ unit cgcpu;
|
||||
localsize:=align(localsize+stackmisalignment,current_settings.alignment.localalignmax)-stackmisalignment;
|
||||
if stack_parameters and (pi_estimatestacksize in current_procinfo.flags) then
|
||||
begin
|
||||
if localsize>tarmprocinfo(current_procinfo).stackframesize then
|
||||
if localsize>tcpuprocinfo(current_procinfo).stackframesize then
|
||||
internalerror(2014030901)
|
||||
else
|
||||
localsize:=tarmprocinfo(current_procinfo).stackframesize-registerarea;
|
||||
localsize:=tcpuprocinfo(current_procinfo).stackframesize-registerarea;
|
||||
end;
|
||||
if is_shifter_const(localsize,shift) then
|
||||
begin
|
||||
@ -2071,24 +2071,24 @@ unit cgcpu;
|
||||
(firstfloatreg<>RS_NO) then
|
||||
begin
|
||||
reference_reset(ref,4,[]);
|
||||
if (tg.direction*tarmprocinfo(current_procinfo).floatregstart>=1023) or
|
||||
if (tg.direction*tcpuprocinfo(current_procinfo).floatregstart>=1023) or
|
||||
(current_settings.fputype in [fpu_vfpv2,fpu_vfpv3,fpu_vfpv4,fpu_vfpv3_d16]) then
|
||||
begin
|
||||
if not is_shifter_const(tarmprocinfo(current_procinfo).floatregstart,shift) then
|
||||
if not is_shifter_const(tcpuprocinfo(current_procinfo).floatregstart,shift) then
|
||||
begin
|
||||
a_reg_alloc(list,NR_R12);
|
||||
a_load_const_reg(list,OS_ADDR,-tarmprocinfo(current_procinfo).floatregstart,NR_R12);
|
||||
a_load_const_reg(list,OS_ADDR,-tcpuprocinfo(current_procinfo).floatregstart,NR_R12);
|
||||
list.concat(taicpu.op_reg_reg_reg(A_SUB,NR_R12,current_procinfo.framepointer,NR_R12));
|
||||
a_reg_dealloc(list,NR_R12);
|
||||
end
|
||||
else
|
||||
list.concat(taicpu.op_reg_reg_const(A_SUB,NR_R12,current_procinfo.framepointer,-tarmprocinfo(current_procinfo).floatregstart));
|
||||
list.concat(taicpu.op_reg_reg_const(A_SUB,NR_R12,current_procinfo.framepointer,-tcpuprocinfo(current_procinfo).floatregstart));
|
||||
ref.base:=NR_R12;
|
||||
end
|
||||
else
|
||||
begin
|
||||
ref.base:=current_procinfo.framepointer;
|
||||
ref.offset:=tarmprocinfo(current_procinfo).floatregstart;
|
||||
ref.offset:=tcpuprocinfo(current_procinfo).floatregstart;
|
||||
end;
|
||||
|
||||
case current_settings.fputype of
|
||||
@ -2178,24 +2178,24 @@ unit cgcpu;
|
||||
(mmregs<>[]) then
|
||||
begin
|
||||
reference_reset(ref,4,[]);
|
||||
if (tg.direction*tarmprocinfo(current_procinfo).floatregstart>=1023) or
|
||||
if (tg.direction*tcpuprocinfo(current_procinfo).floatregstart>=1023) or
|
||||
(current_settings.fputype in [fpu_vfpv2,fpu_vfpv3,fpu_vfpv4,fpu_vfpv3_d16]) then
|
||||
begin
|
||||
if not is_shifter_const(tarmprocinfo(current_procinfo).floatregstart,shift) then
|
||||
if not is_shifter_const(tcpuprocinfo(current_procinfo).floatregstart,shift) then
|
||||
begin
|
||||
a_reg_alloc(list,NR_R12);
|
||||
a_load_const_reg(list,OS_ADDR,-tarmprocinfo(current_procinfo).floatregstart,NR_R12);
|
||||
a_load_const_reg(list,OS_ADDR,-tcpuprocinfo(current_procinfo).floatregstart,NR_R12);
|
||||
list.concat(taicpu.op_reg_reg_reg(A_SUB,NR_R12,current_procinfo.framepointer,NR_R12));
|
||||
a_reg_dealloc(list,NR_R12);
|
||||
end
|
||||
else
|
||||
list.concat(taicpu.op_reg_reg_const(A_SUB,NR_R12,current_procinfo.framepointer,-tarmprocinfo(current_procinfo).floatregstart));
|
||||
list.concat(taicpu.op_reg_reg_const(A_SUB,NR_R12,current_procinfo.framepointer,-tcpuprocinfo(current_procinfo).floatregstart));
|
||||
ref.base:=NR_R12;
|
||||
end
|
||||
else
|
||||
begin
|
||||
ref.base:=current_procinfo.framepointer;
|
||||
ref.offset:=tarmprocinfo(current_procinfo).floatregstart;
|
||||
ref.offset:=tcpuprocinfo(current_procinfo).floatregstart;
|
||||
end;
|
||||
case current_settings.fputype of
|
||||
fpu_fpa,
|
||||
@ -2265,7 +2265,7 @@ unit cgcpu;
|
||||
|
||||
{ reapply the stack padding reg, in case there was one, see the complimentary
|
||||
comment in g_proc_entry() (KB) }
|
||||
paddingreg:=tarmprocinfo(current_procinfo).stackpaddingreg;
|
||||
paddingreg:=tcpuprocinfo(current_procinfo).stackpaddingreg;
|
||||
if paddingreg < RS_R4 then
|
||||
if paddingreg in regs then
|
||||
internalerror(201306190)
|
||||
@ -2285,7 +2285,7 @@ unit cgcpu;
|
||||
(po_assembler in current_procinfo.procdef.procoptions))) then
|
||||
begin
|
||||
if pi_estimatestacksize in current_procinfo.flags then
|
||||
LocalSize:=tarmprocinfo(current_procinfo).stackframesize-registerarea
|
||||
LocalSize:=tcpuprocinfo(current_procinfo).stackframesize-registerarea
|
||||
else
|
||||
localsize:=align(localsize+stackmisalignment,current_settings.alignment.localalignmax)-stackmisalignment;
|
||||
|
||||
@ -3631,14 +3631,14 @@ unit cgcpu;
|
||||
if yes, the previously estimated stacksize must be used }
|
||||
if stack_parameters then
|
||||
begin
|
||||
if localsize>tarmprocinfo(current_procinfo).stackframesize then
|
||||
if localsize>tcpuprocinfo(current_procinfo).stackframesize then
|
||||
begin
|
||||
writeln(localsize);
|
||||
writeln(tarmprocinfo(current_procinfo).stackframesize);
|
||||
writeln(tcpuprocinfo(current_procinfo).stackframesize);
|
||||
internalerror(2013040601);
|
||||
end
|
||||
else
|
||||
localsize:=tarmprocinfo(current_procinfo).stackframesize-registerarea;
|
||||
localsize:=tcpuprocinfo(current_procinfo).stackframesize-registerarea;
|
||||
end
|
||||
else
|
||||
localsize:=align(localsize+stackmisalignment,current_settings.alignment.localalignmax)-stackmisalignment;
|
||||
@ -3702,7 +3702,7 @@ unit cgcpu;
|
||||
|
||||
LocalSize:=current_procinfo.calc_stackframe_size;
|
||||
if stack_parameters then
|
||||
localsize:=tarmprocinfo(current_procinfo).stackframesize-registerarea
|
||||
localsize:=tcpuprocinfo(current_procinfo).stackframesize-registerarea
|
||||
else
|
||||
localsize:=align(localsize+stackmisalignment,current_settings.alignment.localalignmax)-stackmisalignment;
|
||||
|
||||
@ -4851,16 +4851,16 @@ unit cgcpu;
|
||||
if firstfloatreg<>RS_NO then
|
||||
begin
|
||||
reference_reset(ref,4,[]);
|
||||
if tg.direction*tarmprocinfo(current_procinfo).floatregstart>=1023 then
|
||||
if tg.direction*tcpuprocinfo(current_procinfo).floatregstart>=1023 then
|
||||
begin
|
||||
a_load_const_reg(list,OS_ADDR,-tarmprocinfo(current_procinfo).floatregstart,NR_R12);
|
||||
a_load_const_reg(list,OS_ADDR,-tcpuprocinfo(current_procinfo).floatregstart,NR_R12);
|
||||
list.concat(taicpu.op_reg_reg_reg(A_SUB,NR_R12,current_procinfo.framepointer,NR_R12));
|
||||
ref.base:=NR_R12;
|
||||
end
|
||||
else
|
||||
begin
|
||||
ref.base:=current_procinfo.framepointer;
|
||||
ref.offset:=tarmprocinfo(current_procinfo).floatregstart;
|
||||
ref.offset:=tcpuprocinfo(current_procinfo).floatregstart;
|
||||
end;
|
||||
list.concat(taicpu.op_reg_const_ref(A_SFM,newreg(R_FPUREGISTER,firstfloatreg,R_SUBWHOLE),
|
||||
lastfloatreg-firstfloatreg+1,ref));
|
||||
@ -4901,16 +4901,16 @@ unit cgcpu;
|
||||
if firstfloatreg<>RS_NO then
|
||||
begin
|
||||
reference_reset(ref,4,[]);
|
||||
if tg.direction*tarmprocinfo(current_procinfo).floatregstart>=1023 then
|
||||
if tg.direction*tcpuprocinfo(current_procinfo).floatregstart>=1023 then
|
||||
begin
|
||||
a_load_const_reg(list,OS_ADDR,-tarmprocinfo(current_procinfo).floatregstart,NR_R12);
|
||||
a_load_const_reg(list,OS_ADDR,-tcpuprocinfo(current_procinfo).floatregstart,NR_R12);
|
||||
list.concat(taicpu.op_reg_reg_reg(A_SUB,NR_R12,current_procinfo.framepointer,NR_R12));
|
||||
ref.base:=NR_R12;
|
||||
end
|
||||
else
|
||||
begin
|
||||
ref.base:=current_procinfo.framepointer;
|
||||
ref.offset:=tarmprocinfo(current_procinfo).floatregstart;
|
||||
ref.offset:=tcpuprocinfo(current_procinfo).floatregstart;
|
||||
end;
|
||||
list.concat(taicpu.op_reg_const_ref(A_LFM,newreg(R_FPUREGISTER,firstfloatreg,R_SUBWHOLE),
|
||||
lastfloatreg-firstfloatreg+1,ref));
|
||||
|
@ -302,7 +302,7 @@ unit cpubase;
|
||||
{ Stack pointer register }
|
||||
NR_STACK_POINTER_REG = NR_R13;
|
||||
RS_STACK_POINTER_REG = RS_R13;
|
||||
{ Frame pointer register (initialized in tarmprocinfo.init_framepointer) }
|
||||
{ Frame pointer register (initialized in tcpuprocinfo.init_framepointer) }
|
||||
RS_FRAME_POINTER_REG: tsuperregister = RS_NO;
|
||||
NR_FRAME_POINTER_REG: tregister = NR_NO;
|
||||
{ Register for addressing absolute data in a position independant way,
|
||||
|
@ -33,7 +33,7 @@ unit cpupi;
|
||||
aasmdata;
|
||||
|
||||
type
|
||||
tarmprocinfo = class(tcgprocinfo)
|
||||
tcpuprocinfo = class(tcgprocinfo)
|
||||
{ for arm thumb, we need to know the stackframe size before
|
||||
starting procedure compilation, so this contains the stack frame size, the compiler
|
||||
should assume
|
||||
@ -64,7 +64,7 @@ unit cpupi;
|
||||
defutil,
|
||||
aasmcpu;
|
||||
|
||||
procedure tarmprocinfo.set_first_temp_offset;
|
||||
procedure tcpuprocinfo.set_first_temp_offset;
|
||||
var
|
||||
localsize : aint;
|
||||
i : longint;
|
||||
@ -140,7 +140,7 @@ unit cpupi;
|
||||
end;
|
||||
|
||||
|
||||
function tarmprocinfo.calc_stackframe_size:longint;
|
||||
function tcpuprocinfo.calc_stackframe_size:longint;
|
||||
var
|
||||
firstfloatreg,lastfloatreg,
|
||||
r : byte;
|
||||
@ -240,7 +240,7 @@ unit cpupi;
|
||||
end;
|
||||
|
||||
|
||||
procedure tarmprocinfo.init_framepointer;
|
||||
procedure tcpuprocinfo.init_framepointer;
|
||||
begin
|
||||
if (target_info.system in systems_darwin) or GenerateThumbCode then
|
||||
begin
|
||||
@ -255,14 +255,14 @@ unit cpupi;
|
||||
end;
|
||||
|
||||
|
||||
procedure tarmprocinfo.generate_parameter_info;
|
||||
procedure tcpuprocinfo.generate_parameter_info;
|
||||
begin
|
||||
tcpuprocdef(procdef).total_stackframe_size:=stackframesize;
|
||||
inherited generate_parameter_info;
|
||||
end;
|
||||
|
||||
|
||||
procedure tarmprocinfo.allocate_got_register(list: TAsmList);
|
||||
procedure tcpuprocinfo.allocate_got_register(list: TAsmList);
|
||||
begin
|
||||
{ darwin doesn't use a got }
|
||||
if tf_pic_uses_got in target_info.flags then
|
||||
@ -270,12 +270,12 @@ unit cpupi;
|
||||
end;
|
||||
|
||||
|
||||
procedure tarmprocinfo.postprocess_code;
|
||||
procedure tcpuprocinfo.postprocess_code;
|
||||
begin
|
||||
{ because of the limited constant size of the arm, all data access is done pc relative }
|
||||
finalizearmcode(aktproccode,aktlocaldata);
|
||||
end;
|
||||
|
||||
begin
|
||||
cprocinfo:=tarmprocinfo;
|
||||
cprocinfo:=tcpuprocinfo;
|
||||
end.
|
||||
|
@ -32,7 +32,7 @@ unit cpupi;
|
||||
procinfo,cpuinfo,psub;
|
||||
|
||||
type
|
||||
tavrprocinfo = class(tcgprocinfo)
|
||||
tcpuprocinfo = class(tcgprocinfo)
|
||||
// procedure handle_body_start;override;
|
||||
// procedure after_pass1;override;
|
||||
procedure set_first_temp_offset;override;
|
||||
@ -53,7 +53,7 @@ unit cpupi;
|
||||
cgobj,
|
||||
aasmcpu;
|
||||
|
||||
procedure tavrprocinfo.set_first_temp_offset;
|
||||
procedure tcpuprocinfo.set_first_temp_offset;
|
||||
begin
|
||||
if tg.direction = -1 then
|
||||
tg.setfirsttemp(-1)
|
||||
@ -64,7 +64,7 @@ unit cpupi;
|
||||
end;
|
||||
|
||||
|
||||
function tavrprocinfo.calc_stackframe_size:longint;
|
||||
function tcpuprocinfo.calc_stackframe_size:longint;
|
||||
begin
|
||||
if tg.lasttemp=2 then
|
||||
{ correct that lasttemp is 2 in case of an empty stack due to the post-decrement pushing and an additional correction
|
||||
@ -76,7 +76,7 @@ unit cpupi;
|
||||
end;
|
||||
|
||||
|
||||
procedure tavrprocinfo.postprocess_code;
|
||||
procedure tcpuprocinfo.postprocess_code;
|
||||
begin
|
||||
{ because of the limited branch distance of cond. branches, they must be replaced
|
||||
sometimes by normal jmps and an inverse branch }
|
||||
@ -84,6 +84,6 @@ unit cpupi;
|
||||
end;
|
||||
|
||||
begin
|
||||
cprocinfo:=tavrprocinfo;
|
||||
cprocinfo:=tcpuprocinfo;
|
||||
end.
|
||||
|
||||
|
@ -31,7 +31,7 @@ unit cpupi;
|
||||
psub,procinfo,aasmdata;
|
||||
|
||||
type
|
||||
ti386procinfo = class(tcgprocinfo)
|
||||
tcpuprocinfo = class(tcgprocinfo)
|
||||
constructor create(aparent:tprocinfo);override;
|
||||
procedure set_first_temp_offset;override;
|
||||
function calc_stackframe_size:longint;override;
|
||||
@ -50,14 +50,14 @@ unit cpupi;
|
||||
cgutils,
|
||||
symconst;
|
||||
|
||||
constructor ti386procinfo.create(aparent:tprocinfo);
|
||||
constructor tcpuprocinfo.create(aparent:tprocinfo);
|
||||
begin
|
||||
inherited create(aparent);
|
||||
got:=NR_EBX;
|
||||
end;
|
||||
|
||||
|
||||
procedure ti386procinfo.set_first_temp_offset;
|
||||
procedure tcpuprocinfo.set_first_temp_offset;
|
||||
begin
|
||||
if paramanager.use_fixed_stack then
|
||||
begin
|
||||
@ -72,7 +72,7 @@ unit cpupi;
|
||||
end;
|
||||
|
||||
|
||||
function ti386procinfo.calc_stackframe_size:longint;
|
||||
function tcpuprocinfo.calc_stackframe_size:longint;
|
||||
begin
|
||||
{ align to 4 bytes at least
|
||||
otherwise all those subl $2,%esp are meaningless PM }
|
||||
@ -85,7 +85,7 @@ unit cpupi;
|
||||
end;
|
||||
|
||||
|
||||
procedure ti386procinfo.generate_parameter_info;
|
||||
procedure tcpuprocinfo.generate_parameter_info;
|
||||
begin
|
||||
inherited generate_parameter_info;
|
||||
{ Para_stack_size is only used to determine how many bytes to remove }
|
||||
@ -95,7 +95,7 @@ unit cpupi;
|
||||
para_stack_size := 0;
|
||||
end;
|
||||
|
||||
procedure ti386procinfo.allocate_got_register(list: tasmlist);
|
||||
procedure tcpuprocinfo.allocate_got_register(list: tasmlist);
|
||||
begin
|
||||
if (cs_create_pic in current_settings.moduleswitches) then
|
||||
begin
|
||||
@ -104,5 +104,5 @@ unit cpupi;
|
||||
end;
|
||||
|
||||
begin
|
||||
cprocinfo:=ti386procinfo;
|
||||
cprocinfo:=tcpuprocinfo;
|
||||
end.
|
||||
|
@ -31,7 +31,7 @@ unit cpupi;
|
||||
psub,procinfo,aasmdata;
|
||||
|
||||
type
|
||||
ti8086procinfo = class(tcgprocinfo)
|
||||
tcpuprocinfo = class(tcgprocinfo)
|
||||
private
|
||||
procedure insert_8087_fwaits(list : TAsmList);
|
||||
public
|
||||
@ -54,14 +54,14 @@ unit cpupi;
|
||||
cgutils,
|
||||
symconst;
|
||||
|
||||
constructor ti8086procinfo.create(aparent:tprocinfo);
|
||||
constructor tcpuprocinfo.create(aparent:tprocinfo);
|
||||
begin
|
||||
inherited create(aparent);
|
||||
got:=NR_EBX;
|
||||
end;
|
||||
|
||||
|
||||
procedure ti8086procinfo.set_first_temp_offset;
|
||||
procedure tcpuprocinfo.set_first_temp_offset;
|
||||
begin
|
||||
if paramanager.use_fixed_stack then
|
||||
begin
|
||||
@ -76,7 +76,7 @@ unit cpupi;
|
||||
end;
|
||||
|
||||
|
||||
function ti8086procinfo.calc_stackframe_size:longint;
|
||||
function tcpuprocinfo.calc_stackframe_size:longint;
|
||||
begin
|
||||
{ ???:
|
||||
align to 4 bytes at least
|
||||
@ -90,7 +90,7 @@ unit cpupi;
|
||||
end;
|
||||
|
||||
|
||||
procedure ti8086procinfo.generate_parameter_info;
|
||||
procedure tcpuprocinfo.generate_parameter_info;
|
||||
begin
|
||||
inherited generate_parameter_info;
|
||||
{ Para_stack_size is only used to determine how many bytes to remove }
|
||||
@ -101,7 +101,7 @@ unit cpupi;
|
||||
end;
|
||||
|
||||
|
||||
procedure ti8086procinfo.insert_8087_fwaits(list : TAsmList);
|
||||
procedure tcpuprocinfo.insert_8087_fwaits(list : TAsmList);
|
||||
var
|
||||
curtai: tai;
|
||||
begin
|
||||
@ -117,7 +117,7 @@ unit cpupi;
|
||||
end;
|
||||
|
||||
|
||||
procedure ti8086procinfo.postprocess_code;
|
||||
procedure tcpuprocinfo.postprocess_code;
|
||||
begin
|
||||
{ nickysn note: I don't know if the 187 requires FWAIT before
|
||||
every instruction like the 8087, so I'm including it just in case }
|
||||
@ -126,5 +126,5 @@ unit cpupi;
|
||||
end;
|
||||
|
||||
begin
|
||||
cprocinfo:=ti8086procinfo;
|
||||
cprocinfo:=tcpuprocinfo;
|
||||
end.
|
||||
|
@ -32,9 +32,9 @@ interface
|
||||
|
||||
type
|
||||
|
||||
{ TSparcProcInfo }
|
||||
{ tcpuprocinfo }
|
||||
|
||||
TJVMProcInfo=class(tcgprocinfo)
|
||||
tcpuprocinfo=class(tcgprocinfo)
|
||||
public
|
||||
procedure set_first_temp_offset;override;
|
||||
end;
|
||||
@ -45,7 +45,7 @@ implementation
|
||||
systems,globals,
|
||||
tgobj,paramgr,symconst;
|
||||
|
||||
procedure TJVMProcInfo.set_first_temp_offset;
|
||||
procedure tcpuprocinfo.set_first_temp_offset;
|
||||
begin
|
||||
{
|
||||
Stackframe layout:
|
||||
@ -61,5 +61,5 @@ implementation
|
||||
|
||||
|
||||
begin
|
||||
cprocinfo:=TJVMProcInfo;
|
||||
cprocinfo:=tcpuprocinfo;
|
||||
end.
|
||||
|
@ -268,7 +268,7 @@ unit cpubase;
|
||||
NR_STACK_POINTER_REG = NR_SP;
|
||||
RS_STACK_POINTER_REG = RS_SP;
|
||||
{# Frame pointer register }
|
||||
{ Frame pointer register (initialized in tm68kprocinfo.init_framepointer) }
|
||||
{ Frame pointer register (initialized in tcpuprocinfo.init_framepointer) }
|
||||
RS_FRAME_POINTER_REG: tsuperregister = RS_NO;
|
||||
NR_FRAME_POINTER_REG: tregister = NR_NO;
|
||||
|
||||
|
@ -31,7 +31,7 @@ unit cpupi;
|
||||
psub;
|
||||
|
||||
type
|
||||
tm68kprocinfo = class(tcgprocinfo)
|
||||
tcpuprocinfo = class(tcgprocinfo)
|
||||
procedure init_framepointer;override;
|
||||
end;
|
||||
|
||||
@ -42,9 +42,9 @@ unit cpupi;
|
||||
cpubase,
|
||||
systems;
|
||||
|
||||
{ tm68kprocinfo }
|
||||
{ tcpuprocinfo }
|
||||
|
||||
procedure tm68kprocinfo.init_framepointer;
|
||||
procedure tcpuprocinfo.init_framepointer;
|
||||
begin
|
||||
{ ToDo : what about system_m68k_embedded? }
|
||||
if target_info.system in [system_m68k_linux,system_m68k_netbsd,system_m68k_openbsd] then
|
||||
@ -60,5 +60,5 @@ unit cpupi;
|
||||
end;
|
||||
|
||||
begin
|
||||
cprocinfo:=tm68kprocinfo;
|
||||
cprocinfo:=tcpuprocinfo;
|
||||
end.
|
||||
|
@ -372,9 +372,9 @@ begin
|
||||
{ Restore GP if in PIC mode }
|
||||
if (cs_create_pic in current_settings.moduleswitches) then
|
||||
begin
|
||||
if TMIPSProcinfo(current_procinfo).save_gp_ref.offset=0 then
|
||||
if tcpuprocinfo(current_procinfo).save_gp_ref.offset=0 then
|
||||
InternalError(2013071001);
|
||||
list.concat(taicpu.op_reg_ref(A_LW,NR_GP,TMIPSProcinfo(current_procinfo).save_gp_ref));
|
||||
list.concat(taicpu.op_reg_ref(A_LW,NR_GP,tcpuprocinfo(current_procinfo).save_gp_ref));
|
||||
end;
|
||||
end;
|
||||
|
||||
@ -417,9 +417,9 @@ begin
|
||||
{ Restore GP if in PIC mode }
|
||||
if (cs_create_pic in current_settings.moduleswitches) then
|
||||
begin
|
||||
if TMIPSProcinfo(current_procinfo).save_gp_ref.offset=0 then
|
||||
if tcpuprocinfo(current_procinfo).save_gp_ref.offset=0 then
|
||||
InternalError(2013071002);
|
||||
list.concat(taicpu.op_reg_ref(A_LW,NR_GP,TMIPSProcinfo(current_procinfo).save_gp_ref));
|
||||
list.concat(taicpu.op_reg_ref(A_LW,NR_GP,tcpuprocinfo(current_procinfo).save_gp_ref));
|
||||
end;
|
||||
end;
|
||||
|
||||
@ -1279,7 +1279,7 @@ begin
|
||||
href.base:=NR_STACK_POINTER_REG;
|
||||
|
||||
fmask:=0;
|
||||
nextoffset:=TMIPSProcInfo(current_procinfo).floatregstart;
|
||||
nextoffset:=tcpuprocinfo(current_procinfo).floatregstart;
|
||||
lastfpuoffset:=LocalSize;
|
||||
for reg := RS_F0 to RS_F31 do { to check: what if F30 is double? }
|
||||
begin
|
||||
@ -1301,7 +1301,7 @@ begin
|
||||
end;
|
||||
|
||||
mask:=0;
|
||||
nextoffset:=TMIPSProcInfo(current_procinfo).intregstart;
|
||||
nextoffset:=tcpuprocinfo(current_procinfo).intregstart;
|
||||
saveregs:=rg[R_INTREGISTER].used_in_proc-paramanager.get_volatile_registers_int(pocall_stdcall);
|
||||
if (current_procinfo.flags*[pi_do_call,pi_is_assembler]<>[]) then
|
||||
include(saveregs,RS_R31);
|
||||
@ -1374,10 +1374,10 @@ begin
|
||||
if (cs_create_pic in current_settings.moduleswitches) and
|
||||
(pi_needs_got in current_procinfo.flags) then
|
||||
begin
|
||||
largeoffs:=(TMIPSProcinfo(current_procinfo).save_gp_ref.offset>simm16hi);
|
||||
largeoffs:=(tcpuprocinfo(current_procinfo).save_gp_ref.offset>simm16hi);
|
||||
if largeoffs then
|
||||
list.concat(Taicpu.op_none(A_P_SET_MACRO));
|
||||
list.concat(Taicpu.op_const(A_P_CPRESTORE,TMIPSProcinfo(current_procinfo).save_gp_ref.offset));
|
||||
list.concat(Taicpu.op_const(A_P_CPRESTORE,tcpuprocinfo(current_procinfo).save_gp_ref.offset));
|
||||
if largeoffs then
|
||||
list.concat(Taicpu.op_none(A_P_SET_NOMACRO));
|
||||
end;
|
||||
@ -1385,7 +1385,7 @@ begin
|
||||
href.base:=NR_STACK_POINTER_REG;
|
||||
|
||||
for i:=0 to MIPS_MAX_REGISTERS_USED_IN_CALL-1 do
|
||||
if TMIPSProcInfo(current_procinfo).register_used[i] then
|
||||
if tcpuprocinfo(current_procinfo).register_used[i] then
|
||||
begin
|
||||
reg:=parasupregs[i];
|
||||
href.offset:=i*sizeof(aint)+LocalSize;
|
||||
@ -1417,12 +1417,12 @@ begin
|
||||
end
|
||||
else
|
||||
begin
|
||||
if TMIPSProcinfo(current_procinfo).save_gp_ref.offset<>0 then
|
||||
tg.ungettemp(list,TMIPSProcinfo(current_procinfo).save_gp_ref);
|
||||
if tcpuprocinfo(current_procinfo).save_gp_ref.offset<>0 then
|
||||
tg.ungettemp(list,tcpuprocinfo(current_procinfo).save_gp_ref);
|
||||
reference_reset(href,0,[]);
|
||||
href.base:=NR_STACK_POINTER_REG;
|
||||
|
||||
nextoffset:=TMIPSProcInfo(current_procinfo).floatregstart;
|
||||
nextoffset:=tcpuprocinfo(current_procinfo).floatregstart;
|
||||
for reg := RS_F0 to RS_F31 do
|
||||
begin
|
||||
if reg in (rg[R_FPUREGISTER].used_in_proc-paramanager.get_volatile_registers_fpu(pocall_stdcall)) then
|
||||
@ -1433,7 +1433,7 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
nextoffset:=TMIPSProcInfo(current_procinfo).intregstart;
|
||||
nextoffset:=tcpuprocinfo(current_procinfo).intregstart;
|
||||
saveregs:=rg[R_INTREGISTER].used_in_proc-paramanager.get_volatile_registers_int(pocall_stdcall);
|
||||
if (current_procinfo.flags*[pi_do_call,pi_is_assembler]<>[]) then
|
||||
include(saveregs,RS_R31);
|
||||
@ -1520,7 +1520,7 @@ begin
|
||||
if len > high(longint) then
|
||||
internalerror(2002072704);
|
||||
{ A call (to FPC_MOVE) requires the outgoing parameter area to be properly
|
||||
allocated on stack. This can only be done before tmipsprocinfo.set_first_temp_offset,
|
||||
allocated on stack. This can only be done before tcpuprocinfo.set_first_temp_offset,
|
||||
i.e. before secondpass. Other internal procedures request correct stack frame
|
||||
by setting pi_do_call during firstpass, but for this particular one it is impossible.
|
||||
Therefore, if the current procedure is a leaf one, we have to leave it that way. }
|
||||
|
@ -434,7 +434,7 @@ implementation
|
||||
if reg_and_stack then
|
||||
begin
|
||||
for j:=intparareg to mips_nb_used_registers-1 do
|
||||
tmipsprocinfo(current_procinfo).register_used[j]:=true;
|
||||
tcpuprocinfo(current_procinfo).register_used[j]:=true;
|
||||
{ all registers used now }
|
||||
intparareg:=mips_nb_used_registers;
|
||||
end;
|
||||
|
@ -33,9 +33,9 @@ interface
|
||||
|
||||
type
|
||||
|
||||
{ TMIPSProcInfo }
|
||||
{ tcpuprocinfo }
|
||||
|
||||
TMIPSProcInfo=class(tcgprocinfo)
|
||||
tcpuprocinfo=class(tcgprocinfo)
|
||||
intregstart,
|
||||
floatregstart : aint;
|
||||
intregssave,
|
||||
@ -63,7 +63,7 @@ implementation
|
||||
cpubase,cgbase,cgobj,
|
||||
tgobj,paramgr,symconst,symcpu,aasmcpu;
|
||||
|
||||
constructor TMIPSProcInfo.create(aparent: tprocinfo);
|
||||
constructor tcpuprocinfo.create(aparent: tprocinfo);
|
||||
begin
|
||||
inherited create(aparent);
|
||||
if (cs_generate_stackframes in current_settings.localswitches) or
|
||||
@ -85,7 +85,7 @@ implementation
|
||||
end;
|
||||
|
||||
|
||||
procedure TMIPSProcInfo.set_first_temp_offset;
|
||||
procedure tcpuprocinfo.set_first_temp_offset;
|
||||
begin
|
||||
{ MIPS stack frame is always "optimized" }
|
||||
framepointer:=NR_STACK_POINTER_REG;
|
||||
@ -120,7 +120,7 @@ implementation
|
||||
end;
|
||||
|
||||
|
||||
procedure TMIPSProcInfo.allocate_got_register(list:tasmlist);
|
||||
procedure tcpuprocinfo.allocate_got_register(list:tasmlist);
|
||||
begin
|
||||
if (cs_create_pic in current_settings.moduleswitches) then
|
||||
begin
|
||||
@ -133,7 +133,7 @@ implementation
|
||||
end;
|
||||
|
||||
|
||||
function TMIPSProcInfo.calc_stackframe_size:longint;
|
||||
function tcpuprocinfo.calc_stackframe_size:longint;
|
||||
begin
|
||||
result:=maxpushedparasize;
|
||||
floatregstart:=result;
|
||||
@ -147,11 +147,11 @@ implementation
|
||||
tcpuprocdef(procdef).total_local_size:=result;
|
||||
end
|
||||
else if computed_local_size <> result then
|
||||
Comment(V_Error,'TMIPSProcInfo.calc_stackframe_size result changed');
|
||||
Comment(V_Error,'tcpuprocinfo.calc_stackframe_size result changed');
|
||||
end;
|
||||
|
||||
|
||||
procedure TMIPSProcInfo.postprocess_code;
|
||||
procedure tcpuprocinfo.postprocess_code;
|
||||
begin
|
||||
fixup_jmps(aktproccode);
|
||||
end;
|
||||
@ -166,5 +166,5 @@ implementation
|
||||
end;
|
||||
|
||||
begin
|
||||
cprocinfo:=TMIPSProcInfo;
|
||||
cprocinfo:=tcpuprocinfo;
|
||||
end.
|
||||
|
@ -826,12 +826,12 @@ const
|
||||
end;
|
||||
*)
|
||||
|
||||
firstregfpu := tppcprocinfo(current_procinfo).get_first_save_fpu_reg;
|
||||
firstregint := tppcprocinfo(current_procinfo).get_first_save_int_reg;
|
||||
firstregfpu := tcpuprocinfo(current_procinfo).get_first_save_fpu_reg;
|
||||
firstregint := tcpuprocinfo(current_procinfo).get_first_save_int_reg;
|
||||
usesgpr := firstregint <> 32;
|
||||
usesfpr := firstregfpu <> 32;
|
||||
|
||||
if tppcprocinfo(current_procinfo).needs_frame_pointer then
|
||||
if tcpuprocinfo(current_procinfo).needs_frame_pointer then
|
||||
list.concat(taicpu.op_reg_reg(A_MR,NR_OLD_STACK_POINTER_REG,NR_STACK_POINTER_REG));
|
||||
end;
|
||||
|
||||
@ -872,11 +872,11 @@ const
|
||||
|
||||
{ done in ncgutil because it may only be released after the parameters }
|
||||
{ have been moved to their final resting place }
|
||||
{ if (tppcprocinfo(current_procinfo).needs_frame_pointer) then }
|
||||
{ if (tcpuprocinfo(current_procinfo).needs_frame_pointer) then }
|
||||
{ a_reg_dealloc(list,NR_R12); }
|
||||
|
||||
if (not nostackframe) and
|
||||
tppcprocinfo(current_procinfo).needstackframe and
|
||||
tcpuprocinfo(current_procinfo).needstackframe and
|
||||
(localsize <> 0) then
|
||||
begin
|
||||
if (localsize <= high(smallint)) then
|
||||
@ -937,20 +937,20 @@ const
|
||||
usesgpr:=false;
|
||||
if not (po_assembler in current_procinfo.procdef.procoptions) then
|
||||
begin
|
||||
firstregfpu := tppcprocinfo(current_procinfo).get_first_save_fpu_reg;
|
||||
firstregint := tppcprocinfo(current_procinfo).get_first_save_int_reg;
|
||||
firstregfpu := tcpuprocinfo(current_procinfo).get_first_save_fpu_reg;
|
||||
firstregint := tcpuprocinfo(current_procinfo).get_first_save_int_reg;
|
||||
usesgpr := firstregint <> 32;
|
||||
usesfpr := firstregfpu <> 32;
|
||||
end;
|
||||
|
||||
localsize:= tppcprocinfo(current_procinfo).calc_stackframe_size;
|
||||
localsize:= tcpuprocinfo(current_procinfo).calc_stackframe_size;
|
||||
|
||||
{ adjust r1 }
|
||||
{ (register allocator is no longer valid at this time and an add of 0 }
|
||||
{ is translated into a move, which is then registered with the register }
|
||||
{ allocator, causing a crash }
|
||||
if (not nostackframe) and
|
||||
tppcprocinfo(current_procinfo).needstackframe and
|
||||
tcpuprocinfo(current_procinfo).needstackframe and
|
||||
(localsize <> 0) then
|
||||
a_op_const_reg(list,OP_ADD,OS_ADDR,localsize,NR_R1);
|
||||
|
||||
@ -1279,7 +1279,7 @@ const
|
||||
localsize:= align(localsize + macosLinkageAreaSize + registerSaveAreaSize, 16);
|
||||
inc(localsize,tg.lasttemp);
|
||||
localsize:=align(localsize,16);
|
||||
//tppcprocinfo(current_procinfo).localsize:=localsize;
|
||||
//tcpuprocinfo(current_procinfo).localsize:=localsize;
|
||||
|
||||
if (localsize <> 0) then
|
||||
begin
|
||||
|
@ -584,7 +584,7 @@ unit cpupara;
|
||||
{ create_paraloc_info_intern might be also called when being outside of
|
||||
code generation so current_procinfo might be not set }
|
||||
if assigned(current_procinfo) then
|
||||
tppcprocinfo(current_procinfo).needs_frame_pointer := true;
|
||||
tcpuprocinfo(current_procinfo).needs_frame_pointer := true;
|
||||
end;
|
||||
|
||||
if not((target_info.system in systems_aix) and
|
||||
|
@ -33,7 +33,7 @@ unit cpupi;
|
||||
procinfo,cpuinfo,psub;
|
||||
|
||||
type
|
||||
tppcprocinfo = class(tcgprocinfo)
|
||||
tcpuprocinfo = class(tcgprocinfo)
|
||||
needstackframe: boolean;
|
||||
|
||||
{ offset where the frame pointer from the outer procedure is stored. }
|
||||
@ -66,7 +66,7 @@ unit cpupi;
|
||||
verbose,
|
||||
aasmcpu;
|
||||
|
||||
constructor tppcprocinfo.create(aparent:tprocinfo);
|
||||
constructor tcpuprocinfo.create(aparent:tprocinfo);
|
||||
|
||||
begin
|
||||
inherited create(aparent);
|
||||
@ -76,7 +76,7 @@ unit cpupi;
|
||||
end;
|
||||
|
||||
|
||||
procedure tppcprocinfo.set_first_temp_offset;
|
||||
procedure tcpuprocinfo.set_first_temp_offset;
|
||||
var
|
||||
ofs : aword;
|
||||
begin
|
||||
@ -106,7 +106,7 @@ unit cpupi;
|
||||
|
||||
|
||||
(*
|
||||
procedure tppcprocinfo.after_pass1;
|
||||
procedure tcpuprocinfo.after_pass1;
|
||||
begin
|
||||
if not(po_assembler in procdef.procoptions) then
|
||||
begin
|
||||
@ -128,13 +128,13 @@ unit cpupi;
|
||||
*)
|
||||
|
||||
|
||||
function tppcprocinfo.uses_stack_temps: boolean;
|
||||
function tcpuprocinfo.uses_stack_temps: boolean;
|
||||
begin
|
||||
result := tg.firsttemp <> tg.lasttemp;
|
||||
end;
|
||||
|
||||
|
||||
function tppcprocinfo.calc_stackframe_size:longint;
|
||||
function tcpuprocinfo.calc_stackframe_size:longint;
|
||||
var
|
||||
low_nonvol_fpu_reg, regcounter: tsuperregister;
|
||||
begin
|
||||
@ -194,7 +194,7 @@ unit cpupi;
|
||||
end;
|
||||
|
||||
|
||||
procedure tppcprocinfo.allocate_got_register(list: TAsmList);
|
||||
procedure tcpuprocinfo.allocate_got_register(list: TAsmList);
|
||||
begin
|
||||
if (target_info.system = system_powerpc_darwin) and
|
||||
(cs_create_pic in current_settings.moduleswitches) then
|
||||
@ -204,13 +204,13 @@ unit cpupi;
|
||||
end;
|
||||
|
||||
|
||||
procedure tppcprocinfo.postprocess_code;
|
||||
procedure tcpuprocinfo.postprocess_code;
|
||||
begin
|
||||
fixup_jmps(aktproccode);
|
||||
end;
|
||||
|
||||
|
||||
begin
|
||||
cprocinfo:=tppcprocinfo;
|
||||
cprocinfo:=tcpuprocinfo;
|
||||
end.
|
||||
|
||||
|
@ -1214,7 +1214,7 @@ begin
|
||||
calcFirstUsedGPR(firstreggpr, gprcount);
|
||||
|
||||
{ calculate real stack frame size }
|
||||
localsize := tppcprocinfo(current_procinfo).calc_stackframe_size(
|
||||
localsize := tcpuprocinfo(current_procinfo).calc_stackframe_size(
|
||||
gprcount, fprcount);
|
||||
|
||||
{ determine whether we need to save the link register }
|
||||
@ -1235,12 +1235,12 @@ begin
|
||||
save_standard_registers;
|
||||
|
||||
{ save old stack frame pointer }
|
||||
if (tppcprocinfo(current_procinfo).needs_frame_pointer) then
|
||||
if (tcpuprocinfo(current_procinfo).needs_frame_pointer) then
|
||||
list.concat(taicpu.op_reg_reg(A_MR, NR_OLD_STACK_POINTER_REG, NR_STACK_POINTER_REG));
|
||||
|
||||
{ create stack frame }
|
||||
if (not nostackframe) and (localsize > 0) and
|
||||
tppcprocinfo(current_procinfo).needstackframe then begin
|
||||
tcpuprocinfo(current_procinfo).needstackframe then begin
|
||||
if (localsize <= high(smallint)) then begin
|
||||
reference_reset_base(href, NR_STACK_POINTER_REG, -localsize, 8, []);
|
||||
a_load_store(list, A_STDU, NR_STACK_POINTER_REG, href);
|
||||
@ -1375,13 +1375,13 @@ begin
|
||||
([cs_lineinfo, cs_debuginfo] * current_settings.moduleswitches <> []));
|
||||
|
||||
{ calculate stack frame }
|
||||
localsize := tppcprocinfo(current_procinfo).calc_stackframe_size(
|
||||
localsize := tcpuprocinfo(current_procinfo).calc_stackframe_size(
|
||||
gprcount, fprcount);
|
||||
{ CR register not supported }
|
||||
|
||||
{ restore stack pointer }
|
||||
if (not nostackframe) and (localsize > 0) and
|
||||
tppcprocinfo(current_procinfo).needstackframe then begin
|
||||
tcpuprocinfo(current_procinfo).needstackframe then begin
|
||||
if (localsize <= high(smallint)) then begin
|
||||
list.concat(taicpu.op_reg_reg_const(A_ADDI, NR_STACK_POINTER_REG, NR_STACK_POINTER_REG, localsize));
|
||||
end else begin
|
||||
|
@ -714,7 +714,7 @@ implemented
|
||||
{ create_paraloc_info_intern might be also called when being outside of
|
||||
code generation so current_procinfo might be not set }
|
||||
if assigned(current_procinfo) then
|
||||
tppcprocinfo(current_procinfo).needs_frame_pointer := true;
|
||||
tcpuprocinfo(current_procinfo).needs_frame_pointer := true;
|
||||
end;
|
||||
paraloc^.reference.offset := stack_offset;
|
||||
|
||||
|
@ -32,7 +32,7 @@ uses
|
||||
procinfo, cpuinfo, psub;
|
||||
|
||||
type
|
||||
tppcprocinfo = class(tcgprocinfo)
|
||||
tcpuprocinfo = class(tcgprocinfo)
|
||||
needstackframe: boolean;
|
||||
|
||||
{ offset where the frame pointer from the outer procedure is stored. }
|
||||
@ -60,7 +60,7 @@ uses
|
||||
verbose,
|
||||
aasmcpu;
|
||||
|
||||
constructor tppcprocinfo.create(aparent: tprocinfo);
|
||||
constructor tcpuprocinfo.create(aparent: tprocinfo);
|
||||
|
||||
begin
|
||||
inherited create(aparent);
|
||||
@ -68,7 +68,7 @@ begin
|
||||
needs_frame_pointer := false;
|
||||
end;
|
||||
|
||||
procedure tppcprocinfo.set_first_temp_offset;
|
||||
procedure tcpuprocinfo.set_first_temp_offset;
|
||||
var
|
||||
ofs,
|
||||
lasize,
|
||||
@ -107,12 +107,12 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
function tppcprocinfo.calc_stackframe_size: longint;
|
||||
function tcpuprocinfo.calc_stackframe_size: longint;
|
||||
begin
|
||||
result := calc_stackframe_size(18, 18);
|
||||
end;
|
||||
|
||||
function tppcprocinfo.calc_stackframe_size(numgpr, numfpr : longint) : longint;
|
||||
function tcpuprocinfo.calc_stackframe_size(numgpr, numfpr : longint) : longint;
|
||||
begin
|
||||
{ more or less copied from cgcpu.pas/g_stackframe_entry }
|
||||
if not (po_assembler in procdef.procoptions) then begin
|
||||
@ -133,7 +133,7 @@ begin
|
||||
end;
|
||||
|
||||
|
||||
procedure tppcprocinfo.allocate_got_register(list: TAsmList);
|
||||
procedure tcpuprocinfo.allocate_got_register(list: TAsmList);
|
||||
begin
|
||||
if (target_info.system = system_powerpc64_darwin) and
|
||||
(cs_create_pic in current_settings.moduleswitches) then
|
||||
@ -143,13 +143,13 @@ procedure tppcprocinfo.allocate_got_register(list: TAsmList);
|
||||
end;
|
||||
|
||||
|
||||
procedure tppcprocinfo.postprocess_code;
|
||||
procedure tcpuprocinfo.postprocess_code;
|
||||
begin
|
||||
fixup_jmps(aktproccode);
|
||||
end;
|
||||
|
||||
|
||||
begin
|
||||
cprocinfo := tppcprocinfo;
|
||||
cprocinfo := tcpuprocinfo;
|
||||
end.
|
||||
|
||||
|
@ -248,11 +248,11 @@ implementation
|
||||
{ get the register that contains the stack pointer before the procedure
|
||||
entry, which is used to access the parameters in their original
|
||||
callee-side location }
|
||||
if (tppcprocinfo(current_procinfo).needs_frame_pointer) then
|
||||
if (tcpuprocinfo(current_procinfo).needs_frame_pointer) then
|
||||
getcpuregister(list,NR_OLD_STACK_POINTER_REG);
|
||||
inherited;
|
||||
{ free it again }
|
||||
if (tppcprocinfo(current_procinfo).needs_frame_pointer) then
|
||||
if (tcpuprocinfo(current_procinfo).needs_frame_pointer) then
|
||||
ungetcpuregister(list,NR_OLD_STACK_POINTER_REG);
|
||||
end;
|
||||
|
||||
|
@ -31,7 +31,7 @@ interface
|
||||
psub;
|
||||
|
||||
type
|
||||
TSparcProcInfo=class(tcgprocinfo)
|
||||
tcpuprocinfo=class(tcgprocinfo)
|
||||
public
|
||||
constructor create(aparent:tprocinfo);override;
|
||||
function calc_stackframe_size:longint;override;
|
||||
@ -44,7 +44,7 @@ implementation
|
||||
cpubase,cgbase,
|
||||
tgobj,paramgr,symconst;
|
||||
|
||||
constructor tsparcprocinfo.create(aparent:tprocinfo);
|
||||
constructor tcpuprocinfo.create(aparent:tprocinfo);
|
||||
begin
|
||||
inherited create(aparent);
|
||||
maxpushedparasize:=0;
|
||||
@ -52,7 +52,7 @@ implementation
|
||||
end;
|
||||
|
||||
|
||||
function TSparcProcInfo.calc_stackframe_size:longint;
|
||||
function tcpuprocinfo.calc_stackframe_size:longint;
|
||||
begin
|
||||
{
|
||||
Stackframe layout:
|
||||
@ -77,5 +77,5 @@ implementation
|
||||
|
||||
|
||||
begin
|
||||
cprocinfo:=TSparcProcInfo;
|
||||
cprocinfo:=tcpuprocinfo;
|
||||
end.
|
||||
|
@ -411,7 +411,7 @@ unit cgcpu;
|
||||
list.concat(Taicpu.Op_none(A_RET,S_NO));
|
||||
if (pi_has_unwind_info in current_procinfo.flags) then
|
||||
begin
|
||||
tx86_64procinfo(current_procinfo).dump_scopes(list);
|
||||
tcpuprocinfo(current_procinfo).dump_scopes(list);
|
||||
list.concat(cai_seh_directive.create(ash_endproc));
|
||||
end;
|
||||
end;
|
||||
|
@ -31,7 +31,7 @@ interface
|
||||
psub,procinfo,aasmbase,aasmdata;
|
||||
|
||||
type
|
||||
tx86_64procinfo = class(tcgprocinfo)
|
||||
tcpuprocinfo = class(tcgprocinfo)
|
||||
private
|
||||
scopes: TAsmList;
|
||||
scopecount: longint;
|
||||
@ -63,7 +63,7 @@ implementation
|
||||
SCOPE_CATCHALL=1;
|
||||
SCOPE_IMPLICIT=2;
|
||||
|
||||
procedure tx86_64procinfo.set_first_temp_offset;
|
||||
procedure tcpuprocinfo.set_first_temp_offset;
|
||||
begin
|
||||
if target_info.system=system_x86_64_win64 then
|
||||
begin
|
||||
@ -83,7 +83,7 @@ implementation
|
||||
end;
|
||||
|
||||
|
||||
procedure tx86_64procinfo.generate_parameter_info;
|
||||
procedure tcpuprocinfo.generate_parameter_info;
|
||||
begin
|
||||
inherited generate_parameter_info;
|
||||
if target_info.system=system_x86_64_win64 then
|
||||
@ -91,7 +91,7 @@ implementation
|
||||
end;
|
||||
|
||||
|
||||
function tx86_64procinfo.calc_stackframe_size:longint;
|
||||
function tcpuprocinfo.calc_stackframe_size:longint;
|
||||
begin
|
||||
maxpushedparasize:=align(maxpushedparasize,max(current_settings.alignment.localalignmin,16));
|
||||
{ Note 1: when tg.direction>0, tg.lasttemp is already offset by maxpushedparasize
|
||||
@ -105,7 +105,7 @@ implementation
|
||||
result:=Align(tg.direction*tg.lasttemp+maxpushedparasize,8);
|
||||
end;
|
||||
|
||||
procedure tx86_64procinfo.add_finally_scope(startlabel,endlabel,handler:TAsmSymbol;implicit:Boolean);
|
||||
procedure tcpuprocinfo.add_finally_scope(startlabel,endlabel,handler:TAsmSymbol;implicit:Boolean);
|
||||
begin
|
||||
unwindflags:=unwindflags or 2;
|
||||
if implicit then { also needs catch functionality }
|
||||
@ -123,7 +123,7 @@ implementation
|
||||
scopes.concat(tai_const.create_rva_sym(handler));
|
||||
end;
|
||||
|
||||
procedure tx86_64procinfo.add_except_scope(trylabel,exceptlabel,endlabel,filter:TAsmSymbol);
|
||||
procedure tcpuprocinfo.add_except_scope(trylabel,exceptlabel,endlabel,filter:TAsmSymbol);
|
||||
begin
|
||||
unwindflags:=unwindflags or 3;
|
||||
inc(scopecount);
|
||||
@ -139,7 +139,7 @@ implementation
|
||||
scopes.concat(tai_const.create_rva_sym(endlabel));
|
||||
end;
|
||||
|
||||
procedure tx86_64procinfo.dump_scopes(list: TAsmList);
|
||||
procedure tcpuprocinfo.dump_scopes(list: TAsmList);
|
||||
var
|
||||
hdir: tai_seh_directive;
|
||||
begin
|
||||
@ -156,12 +156,12 @@ implementation
|
||||
new_section(list,sec_code,lower(procdef.mangledname),0);
|
||||
end;
|
||||
|
||||
destructor tx86_64procinfo.destroy;
|
||||
destructor tcpuprocinfo.destroy;
|
||||
begin
|
||||
scopes.free;
|
||||
inherited destroy;
|
||||
end;
|
||||
|
||||
begin
|
||||
cprocinfo:=tx86_64procinfo;
|
||||
cprocinfo:=tcpuprocinfo;
|
||||
end.
|
||||
|
@ -341,7 +341,7 @@ procedure tx64tryfinallynode.pass_generate_code;
|
||||
cg.a_label(current_asmdata.CurrAsmList,endfinallylabel);
|
||||
|
||||
{ generate the scope record in .xdata }
|
||||
tx86_64procinfo(current_procinfo).add_finally_scope(trylabel,endtrylabel,
|
||||
tcpuprocinfo(current_procinfo).add_finally_scope(trylabel,endtrylabel,
|
||||
current_asmdata.RefAsmSymbol(finalizepi.procdef.mangledname,AT_FUNCTION),catch_frame);
|
||||
|
||||
if implicitframe then
|
||||
@ -515,7 +515,7 @@ procedure tx64tryexceptnode.pass_generate_code;
|
||||
|
||||
emit_nop;
|
||||
cg.a_label(current_asmdata.CurrAsmList,endexceptlabel);
|
||||
tx86_64procinfo(current_procinfo).add_except_scope(trylabel,exceptlabel,endexceptlabel,filterlabel);
|
||||
tcpuprocinfo(current_procinfo).add_except_scope(trylabel,exceptlabel,endexceptlabel,filterlabel);
|
||||
|
||||
errorexit:
|
||||
{ restore all saved labels }
|
||||
|
Loading…
Reference in New Issue
Block a user