* changed newasmsymbol to newasmsymboldata for data symbols

This commit is contained in:
olle 2003-04-06 21:11:23 +00:00
parent 1372a617cb
commit a069aadad0
11 changed files with 92 additions and 43 deletions

View File

@ -190,6 +190,7 @@ interface
procedure DerefAsmsymbol(var s:tasmsymbol);
{ asmsymbol }
function newasmsymbol(const s : string) : tasmsymbol;
function newasmsymboldata(const s : string) : tasmsymbol;
function newasmsymboltype(const s : string;_bind:TAsmSymBind;_typ:TAsmsymtype) : tasmsymbol;
function getasmsymbol(const s : string) : tasmsymbol;
function renameasmsymbol(const sold, snew : string):tasmsymbol;
@ -714,6 +715,21 @@ implementation
end;
function TAsmLibraryData.newasmsymboldata(const s : string) : tasmsymbol;
var
hp : tasmsymbol;
begin
hp:=tasmsymbol(symbolsearch.search(s));
if not assigned(hp) then
begin
{ Not found, insert it as an External }
hp:=tasmsymbol.create(s,AB_EXTERNAL,AT_DATA);
symbolsearch.insert(hp);
end;
newasmsymboldata:=hp;
end;
function TAsmLibraryData.newasmsymboltype(const s : string;_bind:TAsmSymBind;_typ:Tasmsymtype) : tasmsymbol;
var
hp : tasmsymbol;
@ -887,7 +903,10 @@ implementation
end.
{
$Log$
Revision 1.13 2003-01-30 21:46:20 peter
Revision 1.14 2003-04-06 21:11:23 olle
* changed newasmsymbol to newasmsymboldata for data symbols
Revision 1.13 2003/01/30 21:46:20 peter
* tai_const_symbol.createdataname added
Revision 1.12 2002/11/17 16:31:55 carl

View File

@ -1487,7 +1487,7 @@ unit cgobj;
begin
if (cs_check_object in aktlocalswitches) then
begin
reference_reset_symbol(hrefvmt,objectlibrary.newasmsymbol(objdef.vmt_mangledname),0);
reference_reset_symbol(hrefvmt,objectlibrary.newasmsymboldata(objdef.vmt_mangledname),0);
a_paramaddr_ref(list,hrefvmt,paramanager.getintparaloc(2));
a_param_reg(list,OS_ADDR,reg,paramanager.getintparaloc(1));
a_call_name(list,'FPC_CHECK_OBJECT_EXT');
@ -1719,7 +1719,10 @@ finalization
end.
{
$Log$
Revision 1.80 2003-03-28 19:16:56 peter
Revision 1.81 2003-04-06 21:11:23 olle
* changed newasmsymbol to newasmsymboldata for data symbols
Revision 1.80 2003/03/28 19:16:56 peter
* generic constructor working for i386
* remove fixed self register
* esi added as address register for i386

View File

@ -389,7 +389,7 @@ implementation
if (oo_has_vmt in tobjectdef(methodpointer.resulttype.def).objectoptions) then
begin
location_reset(vmtloc,LOC_REFERENCE,OS_NO);
reference_reset_symbol(vmtloc.reference,objectlibrary.newasmsymbol(tobjectdef(methodpointer.resulttype.def).vmt_mangledname),0);
reference_reset_symbol(vmtloc.reference,objectlibrary.newasmsymboldata(tobjectdef(methodpointer.resulttype.def).vmt_mangledname),0);
vmtrefaddr:=true;
end;
end
@ -429,7 +429,7 @@ implementation
{ constructor with extended syntax called from new }
{ vmt }
location_reset(vmtloc,LOC_REFERENCE,OS_ADDR);
reference_reset_symbol(vmtloc.reference,objectlibrary.newasmsymbol(tobjectdef(methodpointer.resulttype.def).vmt_mangledname),0);
reference_reset_symbol(vmtloc.reference,objectlibrary.newasmsymboldata(tobjectdef(methodpointer.resulttype.def).vmt_mangledname),0);
vmtrefaddr:=true;
end;
hdisposen:
@ -439,7 +439,7 @@ implementation
secondpass(methodpointer);
{ vmt }
location_reset(vmtloc,LOC_REFERENCE,OS_ADDR);
reference_reset_symbol(vmtloc.reference,objectlibrary.newasmsymbol(tobjectdef(methodpointer.resulttype.def).vmt_mangledname),0);
reference_reset_symbol(vmtloc.reference,objectlibrary.newasmsymboldata(tobjectdef(methodpointer.resulttype.def).vmt_mangledname),0);
vmtrefaddr:=true;
{ self, load in register first when it requires a virtual call }
location_reset(selfloc,LOC_REFERENCE,OS_ADDR);
@ -543,7 +543,7 @@ implementation
begin
{ vmt }
location_reset(vmtloc,LOC_REFERENCE,OS_ADDR);
reference_reset_symbol(vmtloc.reference,objectlibrary.newasmsymbol(
reference_reset_symbol(vmtloc.reference,objectlibrary.newasmsymboldata(
tobjectdef(methodpointer.resulttype.def).vmt_mangledname),0);
vmtrefaddr:=true;
end;
@ -1448,7 +1448,10 @@ begin
end.
{
$Log$
Revision 1.42 2003-04-04 15:38:56 peter
Revision 1.43 2003-04-06 21:11:23 olle
* changed newasmsymbol to newasmsymboldata for data symbols
Revision 1.42 2003/04/04 15:38:56 peter
* moved generic code from n386cal to ncgcal, i386 now also
uses the generic ncgcal

View File

@ -136,7 +136,7 @@ interface
(str_length(left)=0) then
begin
reference_reset(hr);
hr.symbol:=objectlibrary.newasmsymbol('FPC_EMPTYCHAR');
hr.symbol:=objectlibrary.newasmsymboldata('FPC_EMPTYCHAR');
location.register:=rg.getaddressregister(exprasmlist);
cg.a_loadaddr_ref_reg(exprasmlist,hr,location.register);
end
@ -157,7 +157,7 @@ interface
(str_length(left)=0) then
begin
reference_reset(hr);
hr.symbol:=objectlibrary.newasmsymbol('FPC_EMPTYCHAR');
hr.symbol:=objectlibrary.newasmsymboldata('FPC_EMPTYCHAR');
location.register:=rg.getaddressregister(exprasmlist);
cg.a_loadaddr_ref_reg(exprasmlist,hr,location.register);
end
@ -385,7 +385,7 @@ interface
end;
cg.a_cmp_const_reg_label(exprasmlist,OS_32,OC_NE,0,location.register,l1);
reference_reset(hr);
hr.symbol:=objectlibrary.newasmsymbol('FPC_EMPTYCHAR');
hr.symbol:=objectlibrary.newasmsymboldata('FPC_EMPTYCHAR');
cg.a_loadaddr_ref_reg(exprasmlist,hr,location.register);
cg.a_label(exprasmlist,l1);
end;
@ -511,7 +511,10 @@ end.
{
$Log$
Revision 1.37 2003-03-28 19:16:56 peter
Revision 1.38 2003-04-06 21:11:23 olle
* changed newasmsymbol to newasmsymboldata for data symbols
Revision 1.37 2003/03/28 19:16:56 peter
* generic constructor working for i386
* remove fixed self register
* esi added as address register for i386

View File

@ -1225,7 +1225,7 @@ implementation
objectlibrary.getlabel(nextonlabel);
{ send the vmt parameter }
reference_reset_symbol(href2,objectlibrary.newasmsymbol(excepttype.vmt_mangledname),0);
reference_reset_symbol(href2,objectlibrary.newasmsymboldata(excepttype.vmt_mangledname),0);
cg.a_paramaddr_ref(exprasmlist,href2,paramanager.getintparaloc(1));
cg.a_call_name(exprasmlist,'FPC_CATCHES');
@ -1483,7 +1483,10 @@ begin
end.
{
$Log$
Revision 1.52 2003-03-28 19:16:56 peter
Revision 1.53 2003-04-06 21:11:23 olle
* changed newasmsymbol to newasmsymboldata for data symbols
Revision 1.52 2003/03/28 19:16:56 peter
* generic constructor working for i386
* remove fixed self register
* esi added as address register for i386

View File

@ -228,7 +228,7 @@ implementation
if left.nodetype=typen then
begin
hregister:=rg.getaddressregister(exprasmlist);
reference_reset_symbol(href,objectlibrary.newasmsymbol(tobjectdef(left.resulttype.def).vmt_mangledname),0);
reference_reset_symbol(href,objectlibrary.newasmsymboldata(tobjectdef(left.resulttype.def).vmt_mangledname),0);
cg.a_loadaddr_ref_reg(exprasmlist,href,hregister);
end
else
@ -646,7 +646,10 @@ end.
{
$Log$
Revision 1.22 2003-03-28 19:16:56 peter
Revision 1.23 2003-04-06 21:11:23 olle
* changed newasmsymbol to newasmsymboldata for data symbols
Revision 1.22 2003/03/28 19:16:56 peter
* generic constructor working for i386
* remove fixed self register
* esi added as address register for i386

View File

@ -92,14 +92,14 @@ implementation
location.reference.offset:=tabsolutesym(symtableentry).address;
end
else
location.reference.symbol:=objectlibrary.newasmsymbol(tabsolutesym(symtableentry).mangledname);
location.reference.symbol:=objectlibrary.newasmsymboldata(tabsolutesym(symtableentry).mangledname);
end;
constsym:
begin
if tconstsym(symtableentry).consttyp=constresourcestring then
begin
location_reset(location,LOC_CREFERENCE,OS_ADDR);
location.reference.symbol:=objectlibrary.newasmsymbol(tconstsym(symtableentry).owner.name^+'_RESOURCESTRINGLIST');
location.reference.symbol:=objectlibrary.newasmsymboldata(tconstsym(symtableentry).owner.name^+'_RESOURCESTRINGLIST');
location.reference.offset:=tconstsym(symtableentry).resstrindex*16+8;
end
else
@ -112,20 +112,20 @@ implementation
{ C variable }
if (vo_is_C_var in tvarsym(symtableentry).varoptions) then
begin
location.reference.symbol:=objectlibrary.newasmsymbol(tvarsym(symtableentry).mangledname);
location.reference.symbol:=objectlibrary.newasmsymboldata(tvarsym(symtableentry).mangledname);
end
{ DLL variable }
else if (vo_is_dll_var in tvarsym(symtableentry).varoptions) then
begin
hregister:=rg.getaddressregister(exprasmlist);
location.reference.symbol:=objectlibrary.newasmsymbol(tvarsym(symtableentry).mangledname);
location.reference.symbol:=objectlibrary.newasmsymboldata(tvarsym(symtableentry).mangledname);
cg.a_load_ref_reg(exprasmlist,OS_ADDR,location.reference,hregister);
reference_reset_base(location.reference,hregister,0);
end
{ external variable }
else if (vo_is_external in tvarsym(symtableentry).varoptions) then
begin
location.reference.symbol:=objectlibrary.newasmsymbol(tvarsym(symtableentry).mangledname);
location.reference.symbol:=objectlibrary.newasmsymboldata(tvarsym(symtableentry).mangledname);
end
{ thread variable }
else if (vo_is_thread_var in tvarsym(symtableentry).varoptions) then
@ -134,14 +134,14 @@ implementation
objectlibrary.getlabel(norelocatelab);
{ we've to allocate the register before we save the used registers }
hregister:=rg.getaddressregister(exprasmlist);
reference_reset_symbol(href,objectlibrary.newasmsymbol('FPC_THREADVAR_RELOCATE'),0);
reference_reset_symbol(href,objectlibrary.newasmsymboldata('FPC_THREADVAR_RELOCATE'),0);
cg.a_load_ref_reg(exprasmlist,OS_ADDR,href,hregister);
cg.a_cmp_const_reg_label(exprasmlist,OS_ADDR,OC_NE,0,hregister,dorelocatelab);
{ no relocation needed, load the address of the variable only, the
layout of a threadvar is (4 bytes pointer):
0 - Threadvar index
4 - Threadvar value in single threading }
reference_reset_symbol(href,objectlibrary.newasmsymbol(tvarsym(symtableentry).mangledname),POINTER_SIZE);
reference_reset_symbol(href,objectlibrary.newasmsymboldata(tvarsym(symtableentry).mangledname),POINTER_SIZE);
cg.a_loadaddr_ref_reg(exprasmlist,href,hregister);
cg.a_jmp_always(exprasmlist,norelocatelab);
cg.a_label(exprasmlist,dorelocatelab);
@ -149,7 +149,7 @@ implementation
internalerror(200301171);
{ don't save the allocated register else the result will be destroyed later }
rg.saveusedintregisters(exprasmlist,pushed,[RS_ACCUMULATOR]-[hregister.number shr 8]);
reference_reset_symbol(href,objectlibrary.newasmsymbol(tvarsym(symtableentry).mangledname),0);
reference_reset_symbol(href,objectlibrary.newasmsymboldata(tvarsym(symtableentry).mangledname),0);
cg.a_param_ref(exprasmlist,OS_ADDR,href,paramanager.getintparaloc(1));
{ the called procedure isn't allowed to change }
{ any register except EAX }
@ -238,7 +238,7 @@ implementation
globalsymtable,
staticsymtable :
begin
location.reference.symbol:=objectlibrary.newasmsymbol(tvarsym(symtableentry).mangledname);
location.reference.symbol:=objectlibrary.newasmsymboldata(tvarsym(symtableentry).mangledname);
end;
stt_exceptsymtable:
begin
@ -248,7 +248,7 @@ implementation
objectsymtable:
begin
if (sp_static in tvarsym(symtableentry).symoptions) then
location.reference.symbol:=objectlibrary.newasmsymbol(tvarsym(symtableentry).mangledname)
location.reference.symbol:=objectlibrary.newasmsymboldata(tvarsym(symtableentry).mangledname)
else
begin
location.reference.base:=cg.g_load_self(exprasmlist);
@ -377,7 +377,7 @@ implementation
end;
typedconstsym :
begin
location.reference.symbol:=objectlibrary.newasmsymbol(ttypedconstsym(symtableentry).mangledname);
location.reference.symbol:=objectlibrary.newasmsymboldata(ttypedconstsym(symtableentry).mangledname);
end;
else internalerror(4);
end;
@ -970,7 +970,10 @@ begin
end.
{
$Log$
Revision 1.46 2003-03-28 19:16:56 peter
Revision 1.47 2003-04-06 21:11:23 olle
* changed newasmsymbol to newasmsymboldata for data symbols
Revision 1.46 2003/03/28 19:16:56 peter
* generic constructor working for i386
* remove fixed self register
* esi added as address register for i386

View File

@ -122,7 +122,7 @@ implementation
location.register:=rg.getaddressregister(exprasmlist);
{ on 80386, LEA is the same as mov imm32 }
reference_reset_symbol(href,
objectlibrary.newasmsymbol(tobjectdef(tclassrefdef(resulttype.def).pointertype.def).vmt_mangledname),0);
objectlibrary.newasmsymboldata(tobjectdef(tclassrefdef(resulttype.def).pointertype.def).vmt_mangledname),0);
cg.a_loadaddr_ref_reg(exprasmlist,href,location.register);
end;
@ -919,7 +919,10 @@ begin
end.
{
$Log$
Revision 1.44 2003-03-28 19:16:56 peter
Revision 1.45 2003-04-06 21:11:23 olle
* changed newasmsymbol to newasmsymboldata for data symbols
Revision 1.44 2003/03/28 19:16:56 peter
* generic constructor working for i386
* remove fixed self register
* esi added as address register for i386

View File

@ -995,7 +995,7 @@ implementation
if tsym(p).owner.symtabletype in [localsymtable,inlinelocalsymtable] then
reference_reset_base(href,procinfo.framepointer,-tvarsym(p).address+tvarsym(p).owner.address_fixup)
else
reference_reset_symbol(href,objectlibrary.newasmsymbol(tvarsym(p).mangledname),0);
reference_reset_symbol(href,objectlibrary.newasmsymboldata(tvarsym(p).mangledname),0);
cg.g_initialize(list,tvarsym(p).vartype.def,href,false);
end;
end;
@ -1019,7 +1019,7 @@ implementation
if tsym(p).owner.symtabletype in [localsymtable,inlinelocalsymtable] then
reference_reset_base(href,procinfo.framepointer,-tvarsym(p).address+tvarsym(p).owner.address_fixup)
else
reference_reset_symbol(href,objectlibrary.newasmsymbol(tvarsym(p).mangledname),0);
reference_reset_symbol(href,objectlibrary.newasmsymboldata(tvarsym(p).mangledname),0);
cg.g_finalize(list,tvarsym(p).vartype.def,href,false);
end;
end;
@ -1028,7 +1028,7 @@ implementation
if ttypedconstsym(p).is_writable and
ttypedconstsym(p).typedconsttype.def.needs_inittable then
begin
reference_reset_symbol(href,objectlibrary.newasmsymbol(ttypedconstsym(p).mangledname),0);
reference_reset_symbol(href,objectlibrary.newasmsymboldata(ttypedconstsym(p).mangledname),0);
cg.g_finalize(list,ttypedconstsym(p).typedconsttype.def,href,false);
end;
end;
@ -1466,9 +1466,9 @@ function returns in a register and the caller receives it in an other one}
if (target_info.system in [system_i386_win32,system_i386_wdosx]) and
(cs_profile in aktmoduleswitches) then
begin
reference_reset_symbol(href,objectlibrary.newasmsymbol('etext'),0);
reference_reset_symbol(href,objectlibrary.newasmsymboldata('etext'),0);
cg.a_paramaddr_ref(list,href,paraloc);
reference_reset_symbol(href,objectlibrary.newasmsymbol('__image_base__'),0);
reference_reset_symbol(href,objectlibrary.newasmsymboldata('__image_base__'),0);
cg.a_paramaddr_ref(list,href,paraloc);
cg.a_call_name(list,'_monstartup');
end;
@ -1708,7 +1708,7 @@ function returns in a register and the caller receives it in an other one}
else if is_object(procinfo._class) then
begin
cg.a_param_reg(list,OS_ADDR,r,paramanager.getintparaloc(2));
reference_reset_symbol(href,objectlibrary.newasmsymbol(procinfo._class.vmt_mangledname),0);
reference_reset_symbol(href,objectlibrary.newasmsymboldata(procinfo._class.vmt_mangledname),0);
cg.a_paramaddr_ref(list,href,paramanager.getintparaloc(1));
end
else
@ -2005,7 +2005,10 @@ function returns in a register and the caller receives it in an other one}
end.
{
$Log$
Revision 1.82 2003-03-30 20:59:07 peter
Revision 1.83 2003-04-06 21:11:23 olle
* changed newasmsymbol to newasmsymboldata for data symbols
Revision 1.82 2003/03/30 20:59:07 peter
* fix classmethod from classmethod call
* move BeforeDestruction/AfterConstruction calls to
genentrycode/genexitcode instead of generating them on the fly

View File

@ -236,7 +236,7 @@ implementation
if not(tobjectdef(tclassrefdef(p.resulttype.def).pointertype.def).is_related(
tobjectdef(tclassrefdef(t.def).pointertype.def))) then
Message(cg_e_illegal_expression);
curconstSegment.concat(Tai_const_symbol.Create(objectlibrary.newasmsymbol(tobjectdef(
curconstSegment.concat(Tai_const_symbol.Create(objectlibrary.newasmsymboldata(tobjectdef(
tclassrefdef(p.resulttype.def).pointertype.def).vmt_mangledname)));
end;
niln:
@ -995,7 +995,10 @@ implementation
end.
{
$Log$
Revision 1.65 2003-03-17 21:42:32 peter
Revision 1.66 2003-04-06 21:11:23 olle
* changed newasmsymbol to newasmsymboldata for data symbols
Revision 1.65 2003/03/17 21:42:32 peter
* allow nil initialization of dynamic array
Revision 1.64 2003/01/02 20:45:08 peter

View File

@ -820,7 +820,7 @@ Begin
end;
globalsymtable,
staticsymtable :
opr.ref.symbol:=objectlibrary.newasmsymbol(tvarsym(sym).mangledname);
opr.ref.symbol:=objectlibrary.newasmsymboldata(tvarsym(sym).mangledname);
parasymtable :
begin
{ if we only want the offset we don't have to care
@ -865,7 +865,7 @@ Begin
localsymtable :
begin
if (vo_is_external in tvarsym(sym).varoptions) then
opr.ref.symbol:=objectlibrary.newasmsymbol(tvarsym(sym).mangledname)
opr.ref.symbol:=objectlibrary.newasmsymboldata(tvarsym(sym).mangledname)
else
begin
{ if we only want the offset we don't have to care
@ -926,7 +926,7 @@ Begin
end;
typedconstsym :
begin
opr.ref.symbol:=objectlibrary.newasmsymbol(ttypedconstsym(sym).mangledname);
opr.ref.symbol:=objectlibrary.newasmsymboldata(ttypedconstsym(sym).mangledname);
case ttypedconstsym(sym).typedconsttype.def.deftype of
orddef,
enumdef,
@ -1582,7 +1582,10 @@ end;
end.
{
$Log$
Revision 1.54 2003-03-28 19:16:57 peter
Revision 1.55 2003-04-06 21:11:23 olle
* changed newasmsymbol to newasmsymboldata for data symbols
Revision 1.54 2003/03/28 19:16:57 peter
* generic constructor working for i386
* remove fixed self register
* esi added as address register for i386