Răsfoiți Sursa

* moved pic helpers into system unit, resolves #8119

git-svn-id: trunk@17669 -
florian 14 ani în urmă
părinte
comite
449c20ce63
3 a modificat fișierele cu 12 adăugiri și 38 ștergeri
  1. 0 32
      compiler/ncgutil.pas
  2. 0 6
      compiler/pmodules.pas
  3. 12 0
      rtl/i386/i386.inc

+ 0 - 32
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}

+ 0 - 6
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);
 

+ 12 - 0
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}