diff --git a/compiler/ncgutil.pas b/compiler/ncgutil.pas index 3c0afb1b2d..d1108593f9 100644 --- a/compiler/ncgutil.pas +++ b/compiler/ncgutil.pas @@ -159,8 +159,6 @@ interface function getprocalign : shortint; - procedure gen_pic_helpers(list : TAsmList); - procedure gen_fpc_dummy(list : TAsmList); procedure InsertInterruptTable; @@ -3105,36 +3103,6 @@ implementation end; - procedure gen_pic_helpers(list : TAsmList); -{$ifdef i386} - var - href : treference; -{$endif i386} - begin - { if other cpus require such helpers as well, it can be solved more cleanly } -{$ifdef i386} - if current_module.requires_ebx_pic_helper then - begin - new_section(list,sec_code,'fpc_geteipasebx',0); - list.concat(tai_symbol.Createname('fpc_geteipasebx',AT_FUNCTION,getprocalign)); - reference_reset(href,sizeof(pint)); - href.base:=NR_ESP; - list.concat(taicpu.op_ref_reg(A_MOV,S_L,href,NR_EBX)); - list.concat(taicpu.op_none(A_RET,S_NO)); - end; - if current_module.requires_ecx_pic_helper then - begin - new_section(list,sec_code,'fpc_geteipasecx',0); - list.concat(tai_symbol.Createname('fpc_geteipasecx',AT_FUNCTION,getprocalign)); - reference_reset(href,sizeof(pint)); - href.base:=NR_ESP; - list.concat(taicpu.op_ref_reg(A_MOV,S_L,href,NR_ECX)); - list.concat(taicpu.op_none(A_RET,S_NO)); - end; -{$endif i386} - end; - - procedure gen_fpc_dummy(list : TAsmList); begin {$ifdef i386} diff --git a/compiler/pmodules.pas b/compiler/pmodules.pas index 3f9cb27730..9de7959431 100644 --- a/compiler/pmodules.pas +++ b/compiler/pmodules.pas @@ -1357,9 +1357,6 @@ implementation gen_intf_wrappers(current_asmdata.asmlists[al_procedures],current_module.globalsymtable,false); gen_intf_wrappers(current_asmdata.asmlists[al_procedures],current_module.localsymtable,false); - { generate pic helpers to load eip if necessary } - gen_pic_helpers(current_asmdata.asmlists[al_procedures]); - { generate rtti/init tables } write_persistent_type_info(current_module.globalsymtable); write_persistent_type_info(current_module.localsymtable); @@ -2313,9 +2310,6 @@ implementation InsertThreadvars; - { generate pic helpers to load eip if necessary } - gen_pic_helpers(current_asmdata.asmlists[al_procedures]); - { generate rtti/init tables } write_persistent_type_info(current_module.localsymtable); diff --git a/rtl/i386/i386.inc b/rtl/i386/i386.inc index a6b451cad8..c2923129d2 100644 --- a/rtl/i386/i386.inc +++ b/rtl/i386/i386.inc @@ -116,6 +116,18 @@ procedure fpc_cpuinit; end; +function fpc_geteipasebx : pointer; [public, alias: 'fpc_geteipasebx'];assembler; nostackframe; +asm + movl (%esp),%ebx +end; + + +function fpc_geteipasecx : pointer; [public, alias: 'fpc_geteipasecx'];assembler; nostackframe; +asm + movl (%esp),%ecx +end; + + {$ifndef FPC_SYSTEM_HAS_MOVE} {$define FPC_SYSTEM_HAS_MOVE}