瀏覽代碼

- removed cg.g_indirect_sym_load() calls from pass_generate_code; this
routine is called from tcgppcgen.fixref()/tcgx86.make_simple_ref()
when necessary

git-svn-id: trunk@20789 -

Jonas Maebe 13 年之前
父節點
當前提交
452414e1a7
共有 2 個文件被更改,包括 8 次插入40 次删除
  1. 5 24
      compiler/ncgld.pas
  2. 3 16
      compiler/ncgmem.pas

+ 5 - 24
compiler/ncgld.pas

@@ -286,20 +286,7 @@ implementation
            staticvarsym :
              begin
                gvs:=tstaticvarsym(symtableentry);
-               if ([vo_is_dll_var,vo_is_external] * gvs.varoptions <> []) then
-                 begin
-                  { assume external variables use the default alignment }
-                  location.reference.alignment:=gvs.vardef.alignment;
-                   location.reference.base := cg.g_indirect_sym_load(current_asmdata.CurrAsmList,tstaticvarsym(symtableentry).mangledname,
-                     vo_is_weak_external in gvs.varoptions);
-                   if (location.reference.base <> NR_NO) then
-                     exit;
-                 end
-               else
-                 begin
-                   location.reference.alignment:=var_align(gvs.vardef.alignment);
-                 end;
-
+               location.reference.alignment:=var_align(gvs.vardef.alignment);
 
                if (vo_is_dll_var in gvs.varoptions) then
                { DLL variable }
@@ -536,16 +523,10 @@ implementation
                  else
                    begin
                       pd:=tprocdef(tprocsym(symtableentry).ProcdefList[0]);
-                      if (po_external in pd.procoptions) then
-                        location.reference.base :=
-                           cg.g_indirect_sym_load(current_asmdata.CurrAsmList,pd.mangledname,
-                                                  po_weakexternal in pd.procoptions);
-                      {!!!!! Be aware, work on virtual methods too }
-                      if (location.reference.base = NR_NO) then
-                        if not(po_weakexternal in pd.procoptions) then
-                          location.reference.symbol:=current_asmdata.RefAsmSymbol(procdef.mangledname)
-                        else
-                          location.reference.symbol:=current_asmdata.WeakRefAsmSymbol(procdef.mangledname);
+                      if not(po_weakexternal in pd.procoptions) then
+                        location.reference.symbol:=current_asmdata.RefAsmSymbol(procdef.mangledname)
+                      else
+                        location.reference.symbol:=current_asmdata.WeakRefAsmSymbol(procdef.mangledname);
                    end;
               end;
            labelsym :

+ 3 - 16
compiler/ncgmem.pas

@@ -432,22 +432,9 @@ implementation
                classes can be changed without breaking programs compiled against
                earlier versions)
              }
-             hreg:=cg.g_indirect_sym_load(current_asmdata.CurrAsmList,vs.mangledname,false);
-             { TODO: clean up. g_indirect_sym_load cannot perform
-                 a plain load for targets that don't need an indirect load
-                 because it's also used in ncgld, but this is not very nice...
-             }
-             if (hreg=NR_NO) then
-               begin
-                 sym:=current_asmdata.RefAsmSymbol(vs.mangledname);
-                 reference_reset_symbol(tmpref,sym,0,sizeof(pint));
-                 location.reference.index:=cg.getaddressregister(current_asmdata.CurrAsmList);
-               end
-             else
-               begin
-                 reference_reset_base(tmpref,hreg,0,sizeof(pint));
-                 location.reference.index:=hreg;
-               end;
+             sym:=current_asmdata.RefAsmSymbol(vs.mangledname);
+             reference_reset_symbol(tmpref,sym,0,sizeof(pint));
+             location.reference.index:=cg.getaddressregister(current_asmdata.CurrAsmList);
              cg.a_load_ref_reg(current_asmdata.CurrAsmList,OS_ADDR,OS_ADDR,tmpref,location.reference.index);
              { always packrecords C -> natural alignment }
              location.reference.alignment:=vs.vardef.alignment;