mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-16 12:39:24 +02:00
* Changed tabstractprocdef.address_size to return the def, which can be used to get other properties like size and alignment. Removes one of i8086 ifdef's.
git-svn-id: trunk@26664 -
This commit is contained in:
parent
53556f529d
commit
7104157a57
@ -778,15 +778,8 @@ implementation
|
|||||||
regs_to_save_fpu:=paramanager.get_volatile_registers_fpu(procdefinition.proccalloption);
|
regs_to_save_fpu:=paramanager.get_volatile_registers_fpu(procdefinition.proccalloption);
|
||||||
regs_to_save_mm:=paramanager.get_volatile_registers_mm(procdefinition.proccalloption);
|
regs_to_save_mm:=paramanager.get_volatile_registers_mm(procdefinition.proccalloption);
|
||||||
|
|
||||||
proc_addr_size:=int_cgsize(procdefinition.address_size);
|
proc_addr_voidptrdef:=procdefinition.address_type;
|
||||||
{$ifdef i8086}
|
proc_addr_size:=def_cgsize(proc_addr_voidptrdef);
|
||||||
if po_far in procdefinition.procoptions then
|
|
||||||
proc_addr_voidptrdef:=voidfarpointertype
|
|
||||||
else
|
|
||||||
proc_addr_voidptrdef:=voidnearpointertype;
|
|
||||||
{$else i8086}
|
|
||||||
proc_addr_voidptrdef:=voidpointertype;
|
|
||||||
{$endif i8086}
|
|
||||||
|
|
||||||
{ Include Function result registers }
|
{ Include Function result registers }
|
||||||
if (not is_void(resultdef)) then
|
if (not is_void(resultdef)) then
|
||||||
@ -890,7 +883,7 @@ implementation
|
|||||||
wpoinfomanager.symbol_live(current_procinfo.procdef.mangledname)) then
|
wpoinfomanager.symbol_live(current_procinfo.procdef.mangledname)) then
|
||||||
tobjectdef(tprocdef(procdefinition).struct).register_vmt_call(tprocdef(procdefinition).extnumber);
|
tobjectdef(tprocdef(procdefinition).struct).register_vmt_call(tprocdef(procdefinition).extnumber);
|
||||||
|
|
||||||
reference_reset_base(href,vmtreg,vmtoffset,procdefinition.address_size);
|
reference_reset_base(href,vmtreg,vmtoffset,proc_addr_voidptrdef.alignment);
|
||||||
{$ifndef x86}
|
{$ifndef x86}
|
||||||
pvreg:=cg.getintregister(current_asmdata.CurrAsmList,proc_addr_size);
|
pvreg:=cg.getintregister(current_asmdata.CurrAsmList,proc_addr_size);
|
||||||
cg.a_load_ref_reg(current_asmdata.CurrAsmList,proc_addr_size,proc_addr_size,href,pvreg);
|
cg.a_load_ref_reg(current_asmdata.CurrAsmList,proc_addr_size,proc_addr_size,href,pvreg);
|
||||||
|
@ -546,7 +546,7 @@ interface
|
|||||||
procedure init_paraloc_info(side: tcallercallee);
|
procedure init_paraloc_info(side: tcallercallee);
|
||||||
function stack_tainting_parameter(side: tcallercallee): boolean;
|
function stack_tainting_parameter(side: tcallercallee): boolean;
|
||||||
function is_pushleftright: boolean;
|
function is_pushleftright: boolean;
|
||||||
function address_size:asizeint;
|
function address_type:tdef;
|
||||||
private
|
private
|
||||||
procedure count_para(p:TObject;arg:pointer);
|
procedure count_para(p:TObject;arg:pointer);
|
||||||
procedure insert_para(p:TObject;arg:pointer);
|
procedure insert_para(p:TObject;arg:pointer);
|
||||||
@ -4506,14 +4506,16 @@ implementation
|
|||||||
{$endif}
|
{$endif}
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function tabstractprocdef.address_size: asizeint;
|
function tabstractprocdef.address_type: tdef;
|
||||||
begin
|
begin
|
||||||
{$ifdef i8086}
|
{$ifdef i8086}
|
||||||
if po_far in procoptions then
|
if po_far in procoptions then
|
||||||
result:=sizeof(pint)+2
|
result:=voidfarpointertype
|
||||||
else
|
else
|
||||||
|
result:=voidnearpointertype;
|
||||||
|
{$else i8086}
|
||||||
|
result:=voidpointertype;
|
||||||
{$endif i8086}
|
{$endif i8086}
|
||||||
result:=sizeof(pint);
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user