- 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 -
This commit is contained in:
Jonas Maebe 2012-04-11 18:00:21 +00:00
parent 7c0469e1fd
commit 452414e1a7
2 changed files with 8 additions and 40 deletions

View File

@ -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 :

View File

@ -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;