mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-09-08 09:59:12 +02:00
- 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:
parent
7c0469e1fd
commit
452414e1a7
@ -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 :
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user