Use the new hash table function library to store labels

Use the new hash table function library to store labels.  When
compiling on my 64-bit system, it reduces the assembly time for the
output of test/perf/label.pl from 73 to 7 seconds.
This commit is contained in:
H. Peter Anvin 2007-09-14 18:03:29 -07:00
parent cde08292d6
commit 6244f4b5b9
21 changed files with 163 additions and 88 deletions

View File

@ -51,7 +51,8 @@ X = @EXEEXT@
$(NROFF) -man $< > $@
NASM = nasm.$(O) nasmlib.$(O) float.$(O) insnsa.$(O) assemble.$(O) \
labels.$(O) parser.$(O) outform.$(O) output/outbin.$(O) \
labels.$(O) hashtbl.$(O) crc64.$(O) parser.$(O) \
outform.$(O) output/outbin.$(O) \
output/outaout.$(O) output/outcoff.$(O) \
output/outelf32.$(O) output/outelf64.$(O) \
output/outobj.$(O) output/outas86.$(O) output/outrdf2.$(O) \
@ -208,15 +209,19 @@ alldeps: perlreq
#-- Everything below is generated by mkdep.pl - do not edit --#
assemble.$(O): assemble.c preproc.h insns.h pptok.h regs.h regflags.c \
config.h version.h nasmlib.h nasm.h regvals.c insnsi.h assemble.h
crc64.$(O): crc64.c
disasm.$(O): disasm.c insns.h sync.h regdis.c regs.h config.h regs.c \
version.h nasm.h insnsn.c names.c insnsi.h disasm.h
eval.$(O): eval.c labels.h eval.h regs.h config.h version.h nasmlib.h nasm.h \
insnsi.h
float.$(O): float.c regs.h config.h version.h nasm.h insnsi.h
hashtbl.$(O): hashtbl.c regs.h config.h version.h nasmlib.h hashtbl.h nasm.h \
insnsi.h
insnsa.$(O): insnsa.c insns.h regs.h config.h version.h nasm.h insnsi.h
insnsd.$(O): insnsd.c insns.h regs.h config.h version.h nasm.h insnsi.h
insnsn.$(O): insnsn.c
labels.$(O): labels.c regs.h config.h version.h nasmlib.h nasm.h insnsi.h
labels.$(O): labels.c regs.h config.h version.h hashtbl.h nasmlib.h nasm.h \
insnsi.h
listing.$(O): listing.c regs.h config.h version.h nasmlib.h nasm.h insnsi.h \
listing.h
macros.$(O): macros.c

View File

@ -175,15 +175,19 @@ clean:
#-- Everything below is generated by mkdep.pl - do not edit --#
assemble.$(OBJ): assemble.c preproc.h insns.h pptok.h regs.h regflags.c \
config.h version.h nasmlib.h nasm.h regvals.c assemble.h insnsi.h
crc64.$(OBJ): crc64.c
disasm.$(OBJ): disasm.c insns.h sync.h regdis.c regs.h config.h regs.c \
version.h nasm.h insnsn.c names.c insnsi.h disasm.h
eval.$(OBJ): eval.c labels.h eval.h regs.h config.h version.h nasmlib.h \
nasm.h insnsi.h
float.$(OBJ): float.c regs.h config.h version.h nasm.h insnsi.h
hashtbl.$(OBJ): hashtbl.c regs.h config.h version.h nasmlib.h hashtbl.h \
nasm.h insnsi.h
insnsa.$(OBJ): insnsa.c insns.h regs.h config.h version.h nasm.h insnsi.h
insnsd.$(OBJ): insnsd.c insns.h regs.h config.h version.h nasm.h insnsi.h
insnsn.$(OBJ): insnsn.c
labels.$(OBJ): labels.c regs.h config.h version.h nasmlib.h nasm.h insnsi.h
labels.$(OBJ): labels.c regs.h config.h version.h hashtbl.h nasmlib.h nasm.h \
insnsi.h
listing.$(OBJ): listing.c regs.h config.h version.h nasmlib.h nasm.h \
insnsi.h listing.h
macros.$(OBJ): macros.c

View File

@ -135,15 +135,19 @@ clean :
#-- Everything below is generated by mkdep.pl - do not edit --#
assemble.$(OBJ): assemble.c preproc.h insns.h pptok.h regs.h regflags.c \
config.h version.h nasmlib.h nasm.h regvals.c assemble.h insnsi.h
crc64.$(OBJ): crc64.c
disasm.$(OBJ): disasm.c insns.h sync.h regdis.c regs.h config.h regs.c \
version.h nasm.h insnsn.c names.c insnsi.h disasm.h
eval.$(OBJ): eval.c labels.h eval.h regs.h config.h version.h nasmlib.h \
nasm.h insnsi.h
float.$(OBJ): float.c regs.h config.h version.h nasm.h insnsi.h
hashtbl.$(OBJ): hashtbl.c regs.h config.h version.h nasmlib.h hashtbl.h \
nasm.h insnsi.h
insnsa.$(OBJ): insnsa.c insns.h regs.h config.h version.h nasm.h insnsi.h
insnsd.$(OBJ): insnsd.c insns.h regs.h config.h version.h nasm.h insnsi.h
insnsn.$(OBJ): insnsn.c
labels.$(OBJ): labels.c regs.h config.h version.h nasmlib.h nasm.h insnsi.h
labels.$(OBJ): labels.c regs.h config.h version.h hashtbl.h nasmlib.h nasm.h \
insnsi.h
listing.$(OBJ): listing.c regs.h config.h version.h nasmlib.h nasm.h \
insnsi.h listing.h
macros.$(OBJ): macros.c

View File

@ -64,15 +64,19 @@ clean :
#-- Everything below is generated by mkdep.pl - do not edit --#
assemble.$(OBJ): assemble.c preproc.h insns.h pptok.h regs.h regflags.c \
config.h version.h nasmlib.h nasm.h regvals.c assemble.h insnsi.h
crc64.$(OBJ): crc64.c
disasm.$(OBJ): disasm.c insns.h sync.h regdis.c regs.h config.h regs.c \
version.h nasm.h insnsn.c names.c insnsi.h disasm.h
eval.$(OBJ): eval.c labels.h eval.h regs.h config.h version.h nasmlib.h \
nasm.h insnsi.h
float.$(OBJ): float.c regs.h config.h version.h nasm.h insnsi.h
hashtbl.$(OBJ): hashtbl.c regs.h config.h version.h nasmlib.h hashtbl.h \
nasm.h insnsi.h
insnsa.$(OBJ): insnsa.c insns.h regs.h config.h version.h nasm.h insnsi.h
insnsd.$(OBJ): insnsd.c insns.h regs.h config.h version.h nasm.h insnsi.h
insnsn.$(OBJ): insnsn.c
labels.$(OBJ): labels.c regs.h config.h version.h nasmlib.h nasm.h insnsi.h
labels.$(OBJ): labels.c regs.h config.h version.h hashtbl.h nasmlib.h nasm.h \
insnsi.h
listing.$(OBJ): listing.c regs.h config.h version.h nasmlib.h nasm.h \
insnsi.h listing.h
macros.$(OBJ): macros.c

View File

@ -159,15 +159,19 @@ sync.o: sync.c sync.h
#-- Everything below is generated by mkdep.pl - do not edit --#
assemble.o: assemble.c preproc.h insns.h pptok.h regs.h regflags.c config.h \
version.h nasmlib.h nasm.h regvals.c assemble.h insnsi.h
crc64.o: crc64.c
disasm.o: disasm.c insns.h sync.h regdis.c regs.h config.h regs.c version.h \
nasm.h insnsn.c names.c insnsi.h disasm.h
eval.o: eval.c labels.h eval.h regs.h config.h version.h nasmlib.h nasm.h \
insnsi.h
float.o: float.c regs.h config.h version.h nasm.h insnsi.h
hashtbl.o: hashtbl.c regs.h config.h version.h nasmlib.h hashtbl.h nasm.h \
insnsi.h
insnsa.o: insnsa.c insns.h regs.h config.h version.h nasm.h insnsi.h
insnsd.o: insnsd.c insns.h regs.h config.h version.h nasm.h insnsi.h
insnsn.o: insnsn.c
labels.o: labels.c regs.h config.h version.h nasmlib.h nasm.h insnsi.h
labels.o: labels.c regs.h config.h version.h hashtbl.h nasmlib.h nasm.h \
insnsi.h
listing.o: listing.c regs.h config.h version.h nasmlib.h nasm.h insnsi.h \
listing.h
macros.o: macros.c

View File

@ -88,15 +88,19 @@ clean:
#-- Everything below is generated by mkdep.pl - do not edit --#
assemble.o: assemble.c preproc.h insns.h pptok.h regs.h regflags.c config.h \
version.h nasmlib.h nasm.h regvals.c assemble.h insnsi.h
crc64.o: crc64.c
disasm.o: disasm.c insns.h sync.h regdis.c regs.h config.h regs.c version.h \
nasm.h insnsn.c names.c insnsi.h disasm.h
eval.o: eval.c labels.h eval.h regs.h config.h version.h nasmlib.h nasm.h \
insnsi.h
float.o: float.c regs.h config.h version.h nasm.h insnsi.h
hashtbl.o: hashtbl.c regs.h config.h version.h nasmlib.h hashtbl.h nasm.h \
insnsi.h
insnsa.o: insnsa.c insns.h regs.h config.h version.h nasm.h insnsi.h
insnsd.o: insnsd.c insns.h regs.h config.h version.h nasm.h insnsi.h
insnsn.o: insnsn.c
labels.o: labels.c regs.h config.h version.h nasmlib.h nasm.h insnsi.h
labels.o: labels.c regs.h config.h version.h hashtbl.h nasmlib.h nasm.h \
insnsi.h
listing.o: listing.c regs.h config.h version.h nasmlib.h nasm.h insnsi.h \
listing.h
macros.o: macros.c

View File

@ -95,15 +95,19 @@ clean:
#-- Everything below is generated by mkdep.pl - do not edit --#
assemble.o: assemble.c preproc.h insns.h pptok.h regs.h regflags.c config.h \
version.h nasmlib.h nasm.h regvals.c assemble.h insnsi.h
crc64.o: crc64.c
disasm.o: disasm.c insns.h sync.h regdis.c regs.h config.h regs.c version.h \
nasm.h insnsn.c names.c insnsi.h disasm.h
eval.o: eval.c labels.h eval.h regs.h config.h version.h nasmlib.h nasm.h \
insnsi.h
float.o: float.c regs.h config.h version.h nasm.h insnsi.h
hashtbl.o: hashtbl.c regs.h config.h version.h nasmlib.h hashtbl.h nasm.h \
insnsi.h
insnsa.o: insnsa.c insns.h regs.h config.h version.h nasm.h insnsi.h
insnsd.o: insnsd.c insns.h regs.h config.h version.h nasm.h insnsi.h
insnsn.o: insnsn.c
labels.o: labels.c regs.h config.h version.h nasmlib.h nasm.h insnsi.h
labels.o: labels.c regs.h config.h version.h hashtbl.h nasmlib.h nasm.h \
insnsi.h
listing.o: listing.c regs.h config.h version.h nasmlib.h nasm.h insnsi.h \
listing.h
macros.o: macros.c

View File

@ -49,15 +49,19 @@ clean :
#-- Everything below is generated by mkdep.pl - do not edit --#
assemble.$(OBJ): assemble.c preproc.h insns.h pptok.h regs.h regflags.c \
config.h version.h nasmlib.h nasm.h regvals.c assemble.h insnsi.h
crc64.$(OBJ): crc64.c
disasm.$(OBJ): disasm.c insns.h sync.h regdis.c regs.h config.h regs.c \
version.h nasm.h insnsn.c names.c insnsi.h disasm.h
eval.$(OBJ): eval.c labels.h eval.h regs.h config.h version.h nasmlib.h \
nasm.h insnsi.h
float.$(OBJ): float.c regs.h config.h version.h nasm.h insnsi.h
hashtbl.$(OBJ): hashtbl.c regs.h config.h version.h nasmlib.h hashtbl.h \
nasm.h insnsi.h
insnsa.$(OBJ): insnsa.c insns.h regs.h config.h version.h nasm.h insnsi.h
insnsd.$(OBJ): insnsd.c insns.h regs.h config.h version.h nasm.h insnsi.h
insnsn.$(OBJ): insnsn.c
labels.$(OBJ): labels.c regs.h config.h version.h nasmlib.h nasm.h insnsi.h
labels.$(OBJ): labels.c regs.h config.h version.h hashtbl.h nasmlib.h nasm.h \
insnsi.h
listing.$(OBJ): listing.c regs.h config.h version.h nasmlib.h nasm.h \
insnsi.h listing.h
macros.$(OBJ): macros.c

View File

@ -62,15 +62,19 @@ clean :
#-- Everything below is generated by mkdep.pl - do not edit --#
assemble.$(OBJ): assemble.c preproc.h insns.h pptok.h regs.h regflags.c \
config.h version.h nasmlib.h nasm.h regvals.c assemble.h insnsi.h
crc64.$(OBJ): crc64.c
disasm.$(OBJ): disasm.c insns.h sync.h regdis.c regs.h config.h regs.c \
version.h nasm.h insnsn.c names.c insnsi.h disasm.h
eval.$(OBJ): eval.c labels.h eval.h regs.h config.h version.h nasmlib.h \
nasm.h insnsi.h
float.$(OBJ): float.c regs.h config.h version.h nasm.h insnsi.h
hashtbl.$(OBJ): hashtbl.c regs.h config.h version.h nasmlib.h hashtbl.h \
nasm.h insnsi.h
insnsa.$(OBJ): insnsa.c insns.h regs.h config.h version.h nasm.h insnsi.h
insnsd.$(OBJ): insnsd.c insns.h regs.h config.h version.h nasm.h insnsi.h
insnsn.$(OBJ): insnsn.c
labels.$(OBJ): labels.c regs.h config.h version.h nasmlib.h nasm.h insnsi.h
labels.$(OBJ): labels.c regs.h config.h version.h hashtbl.h nasmlib.h nasm.h \
insnsi.h
listing.$(OBJ): listing.c regs.h config.h version.h nasmlib.h nasm.h \
insnsi.h listing.h
macros.$(OBJ): macros.c

View File

@ -144,15 +144,19 @@ install_everything: everything install install_doc install_rdf
#-- Everything below is generated by mkdep.pl - do not edit --#
assemble.o: assemble.c preproc.h insns.h pptok.h regs.h regflags.c config.h \
version.h nasmlib.h nasm.h regvals.c assemble.h insnsi.h
crc64.o: crc64.c
disasm.o: disasm.c insns.h sync.h regdis.c regs.h config.h regs.c version.h \
nasm.h insnsn.c names.c insnsi.h disasm.h
eval.o: eval.c labels.h eval.h regs.h config.h version.h nasmlib.h nasm.h \
insnsi.h
float.o: float.c regs.h config.h version.h nasm.h insnsi.h
hashtbl.o: hashtbl.c regs.h config.h version.h nasmlib.h hashtbl.h nasm.h \
insnsi.h
insnsa.o: insnsa.c insns.h regs.h config.h version.h nasm.h insnsi.h
insnsd.o: insnsd.c insns.h regs.h config.h version.h nasm.h insnsi.h
insnsn.o: insnsn.c
labels.o: labels.c regs.h config.h version.h nasmlib.h nasm.h insnsi.h
labels.o: labels.c regs.h config.h version.h hashtbl.h nasmlib.h nasm.h \
insnsi.h
listing.o: listing.c regs.h config.h version.h nasmlib.h nasm.h insnsi.h \
listing.h
macros.o: macros.c

View File

@ -115,15 +115,19 @@ clean:
#-- Everything below is generated by mkdep.pl - do not edit --#
assemble.${OBJ}: assemble.c preproc.h insns.h pptok.h regs.h regflags.c \
config.h version.h nasmlib.h nasm.h regvals.c assemble.h insnsi.h
crc64.${OBJ}: crc64.c
disasm.${OBJ}: disasm.c insns.h sync.h regdis.c regs.h config.h regs.c \
version.h nasm.h insnsn.c names.c insnsi.h disasm.h
eval.${OBJ}: eval.c labels.h eval.h regs.h config.h version.h nasmlib.h \
nasm.h insnsi.h
float.${OBJ}: float.c regs.h config.h version.h nasm.h insnsi.h
hashtbl.${OBJ}: hashtbl.c regs.h config.h version.h nasmlib.h hashtbl.h \
nasm.h insnsi.h
insnsa.${OBJ}: insnsa.c insns.h regs.h config.h version.h nasm.h insnsi.h
insnsd.${OBJ}: insnsd.c insns.h regs.h config.h version.h nasm.h insnsi.h
insnsn.${OBJ}: insnsn.c
labels.${OBJ}: labels.c regs.h config.h version.h nasmlib.h nasm.h insnsi.h
labels.${OBJ}: labels.c regs.h config.h version.h hashtbl.h nasmlib.h nasm.h \
insnsi.h
listing.${OBJ}: listing.c regs.h config.h version.h nasmlib.h nasm.h \
insnsi.h listing.h
macros.${OBJ}: macros.c

View File

@ -158,15 +158,19 @@ spotless: clean
#-- Everything below is generated by mkdep.pl - do not edit --#
assemble.$(OBJ): assemble.c preproc.h insns.h pptok.h regs.h regflags.c \
config.h version.h nasmlib.h nasm.h regvals.c assemble.h insnsi.h
crc64.$(OBJ): crc64.c
disasm.$(OBJ): disasm.c insns.h sync.h regdis.c regs.h config.h regs.c \
version.h nasm.h insnsn.c names.c insnsi.h disasm.h
eval.$(OBJ): eval.c labels.h eval.h regs.h config.h version.h nasmlib.h \
nasm.h insnsi.h
float.$(OBJ): float.c regs.h config.h version.h nasm.h insnsi.h
hashtbl.$(OBJ): hashtbl.c regs.h config.h version.h nasmlib.h hashtbl.h \
nasm.h insnsi.h
insnsa.$(OBJ): insnsa.c insns.h regs.h config.h version.h nasm.h insnsi.h
insnsd.$(OBJ): insnsd.c insns.h regs.h config.h version.h nasm.h insnsi.h
insnsn.$(OBJ): insnsn.c
labels.$(OBJ): labels.c regs.h config.h version.h nasmlib.h nasm.h insnsi.h
labels.$(OBJ): labels.c regs.h config.h version.h hashtbl.h nasmlib.h nasm.h \
insnsi.h
listing.$(OBJ): listing.c regs.h config.h version.h nasmlib.h nasm.h \
insnsi.h listing.h
macros.$(OBJ): macros.c

View File

@ -109,15 +109,19 @@ clean :
#-- Everything below is generated by mkdep.pl - do not edit --#
assemble.$(OBJ): assemble.c preproc.h insns.h pptok.h regs.h regflags.c \
config.h version.h nasmlib.h nasm.h regvals.c assemble.h insnsi.h
crc64.$(OBJ): crc64.c
disasm.$(OBJ): disasm.c insns.h sync.h regdis.c regs.h config.h regs.c \
version.h nasm.h insnsn.c names.c insnsi.h disasm.h
eval.$(OBJ): eval.c labels.h eval.h regs.h config.h version.h nasmlib.h \
nasm.h insnsi.h
float.$(OBJ): float.c regs.h config.h version.h nasm.h insnsi.h
hashtbl.$(OBJ): hashtbl.c regs.h config.h version.h nasmlib.h hashtbl.h \
nasm.h insnsi.h
insnsa.$(OBJ): insnsa.c insns.h regs.h config.h version.h nasm.h insnsi.h
insnsd.$(OBJ): insnsd.c insns.h regs.h config.h version.h nasm.h insnsi.h
insnsn.$(OBJ): insnsn.c
labels.$(OBJ): labels.c regs.h config.h version.h nasmlib.h nasm.h insnsi.h
labels.$(OBJ): labels.c regs.h config.h version.h hashtbl.h nasmlib.h nasm.h \
insnsi.h
listing.$(OBJ): listing.c regs.h config.h version.h nasmlib.h nasm.h \
insnsi.h listing.h
macros.$(OBJ): macros.c

View File

@ -91,15 +91,19 @@ clean :
#-- Everything below is generated by mkdep.pl - do not edit --#
assemble.$(OBJ): assemble.c preproc.h insns.h pptok.h regs.h regflags.c \
config.h version.h nasmlib.h nasm.h regvals.c assemble.h insnsi.h
crc64.$(OBJ): crc64.c
disasm.$(OBJ): disasm.c insns.h sync.h regdis.c regs.h config.h regs.c \
version.h nasm.h insnsn.c names.c insnsi.h disasm.h
eval.$(OBJ): eval.c labels.h eval.h regs.h config.h version.h nasmlib.h \
nasm.h insnsi.h
float.$(OBJ): float.c regs.h config.h version.h nasm.h insnsi.h
hashtbl.$(OBJ): hashtbl.c regs.h config.h version.h nasmlib.h hashtbl.h \
nasm.h insnsi.h
insnsa.$(OBJ): insnsa.c insns.h regs.h config.h version.h nasm.h insnsi.h
insnsd.$(OBJ): insnsd.c insns.h regs.h config.h version.h nasm.h insnsi.h
insnsn.$(OBJ): insnsn.c
labels.$(OBJ): labels.c regs.h config.h version.h nasmlib.h nasm.h insnsi.h
labels.$(OBJ): labels.c regs.h config.h version.h hashtbl.h nasmlib.h nasm.h \
insnsi.h
listing.$(OBJ): listing.c regs.h config.h version.h nasmlib.h nasm.h \
insnsi.h listing.h
macros.$(OBJ): macros.c

View File

@ -88,15 +88,19 @@ clean :
#-- Everything below is generated by mkdep.pl - do not edit --#
assemble.$(OBJ): assemble.c preproc.h insns.h pptok.h regs.h regflags.c \
config.h version.h nasmlib.h nasm.h regvals.c assemble.h insnsi.h
crc64.$(OBJ): crc64.c
disasm.$(OBJ): disasm.c insns.h sync.h regdis.c regs.h config.h regs.c \
version.h nasm.h insnsn.c names.c insnsi.h disasm.h
eval.$(OBJ): eval.c labels.h eval.h regs.h config.h version.h nasmlib.h \
nasm.h insnsi.h
float.$(OBJ): float.c regs.h config.h version.h nasm.h insnsi.h
hashtbl.$(OBJ): hashtbl.c regs.h config.h version.h nasmlib.h hashtbl.h \
nasm.h insnsi.h
insnsa.$(OBJ): insnsa.c insns.h regs.h config.h version.h nasm.h insnsi.h
insnsd.$(OBJ): insnsd.c insns.h regs.h config.h version.h nasm.h insnsi.h
insnsn.$(OBJ): insnsn.c
labels.$(OBJ): labels.c regs.h config.h version.h nasmlib.h nasm.h insnsi.h
labels.$(OBJ): labels.c regs.h config.h version.h hashtbl.h nasmlib.h nasm.h \
insnsi.h
listing.$(OBJ): listing.c regs.h config.h version.h nasmlib.h nasm.h \
insnsi.h listing.h
macros.$(OBJ): macros.c

View File

@ -115,15 +115,19 @@ rdf_install install_rdf:
#-- Everything below is generated by mkdep.pl - do not edit --#
assemble.o: assemble.c preproc.h insns.h pptok.h regs.h regflags.c config.h \
version.h nasmlib.h nasm.h regvals.c assemble.h insnsi.h
crc64.o: crc64.c
disasm.o: disasm.c insns.h sync.h regdis.c regs.h config.h regs.c version.h \
nasm.h insnsn.c names.c insnsi.h disasm.h
eval.o: eval.c labels.h eval.h regs.h config.h version.h nasmlib.h nasm.h \
insnsi.h
float.o: float.c regs.h config.h version.h nasm.h insnsi.h
hashtbl.o: hashtbl.c regs.h config.h version.h nasmlib.h hashtbl.h nasm.h \
insnsi.h
insnsa.o: insnsa.c insns.h regs.h config.h version.h nasm.h insnsi.h
insnsd.o: insnsd.c insns.h regs.h config.h version.h nasm.h insnsi.h
insnsn.o: insnsn.c
labels.o: labels.c regs.h config.h version.h nasmlib.h nasm.h insnsi.h
labels.o: labels.c regs.h config.h version.h hashtbl.h nasmlib.h nasm.h \
insnsi.h
listing.o: listing.c regs.h config.h version.h nasmlib.h nasm.h insnsi.h \
listing.h
macros.o: macros.c

View File

@ -103,15 +103,19 @@ clean :
#-- Everything below is generated by mkdep.pl - do not edit --#
assemble.$(OBJ): assemble.c preproc.h insns.h pptok.h regs.h regflags.c \
config.h version.h nasmlib.h nasm.h regvals.c assemble.h insnsi.h
crc64.$(OBJ): crc64.c
disasm.$(OBJ): disasm.c insns.h sync.h regdis.c regs.h config.h regs.c \
version.h nasm.h insnsn.c names.c insnsi.h disasm.h
eval.$(OBJ): eval.c labels.h eval.h regs.h config.h version.h nasmlib.h \
nasm.h insnsi.h
float.$(OBJ): float.c regs.h config.h version.h nasm.h insnsi.h
hashtbl.$(OBJ): hashtbl.c regs.h config.h version.h nasmlib.h hashtbl.h \
nasm.h insnsi.h
insnsa.$(OBJ): insnsa.c insns.h regs.h config.h version.h nasm.h insnsi.h
insnsd.$(OBJ): insnsd.c insns.h regs.h config.h version.h nasm.h insnsi.h
insnsn.$(OBJ): insnsn.c
labels.$(OBJ): labels.c regs.h config.h version.h nasmlib.h nasm.h insnsi.h
labels.$(OBJ): labels.c regs.h config.h version.h hashtbl.h nasmlib.h nasm.h \
insnsi.h
listing.$(OBJ): listing.c regs.h config.h version.h nasmlib.h nasm.h \
insnsi.h listing.h
macros.$(OBJ): macros.c

View File

@ -105,15 +105,19 @@ clean :
#-- Everything below is generated by mkdep.pl - do not edit --#
assemble.$(OBJ): assemble.c preproc.h insns.h pptok.h regs.h regflags.c \
config.h version.h nasmlib.h nasm.h regvals.c assemble.h insnsi.h
crc64.$(OBJ): crc64.c
disasm.$(OBJ): disasm.c insns.h sync.h regdis.c regs.h config.h regs.c \
version.h nasm.h insnsn.c names.c insnsi.h disasm.h
eval.$(OBJ): eval.c labels.h eval.h regs.h config.h version.h nasmlib.h \
nasm.h insnsi.h
float.$(OBJ): float.c regs.h config.h version.h nasm.h insnsi.h
hashtbl.$(OBJ): hashtbl.c regs.h config.h version.h nasmlib.h hashtbl.h \
nasm.h insnsi.h
insnsa.$(OBJ): insnsa.c insns.h regs.h config.h version.h nasm.h insnsi.h
insnsd.$(OBJ): insnsd.c insns.h regs.h config.h version.h nasm.h insnsi.h
insnsn.$(OBJ): insnsn.c
labels.$(OBJ): labels.c regs.h config.h version.h nasmlib.h nasm.h insnsi.h
labels.$(OBJ): labels.c regs.h config.h version.h hashtbl.h nasmlib.h nasm.h \
insnsi.h
listing.$(OBJ): listing.c regs.h config.h version.h nasmlib.h nasm.h \
insnsi.h listing.h
macros.$(OBJ): macros.c

View File

@ -90,15 +90,19 @@ clean : .SYMBOLIC
#-- Everything below is generated by mkdep.pl - do not edit --#
assemble.$(OBJ): assemble.c preproc.h insns.h pptok.h regs.h regflags.c \
config.h version.h nasmlib.h nasm.h regvals.c assemble.h insnsi.h
crc64.$(OBJ): crc64.c
disasm.$(OBJ): disasm.c insns.h sync.h regdis.c regs.h config.h regs.c \
version.h nasm.h insnsn.c names.c insnsi.h disasm.h
eval.$(OBJ): eval.c labels.h eval.h regs.h config.h version.h nasmlib.h \
nasm.h insnsi.h
float.$(OBJ): float.c regs.h config.h version.h nasm.h insnsi.h
hashtbl.$(OBJ): hashtbl.c regs.h config.h version.h nasmlib.h hashtbl.h \
nasm.h insnsi.h
insnsa.$(OBJ): insnsa.c insns.h regs.h config.h version.h nasm.h insnsi.h
insnsd.$(OBJ): insnsd.c insns.h regs.h config.h version.h nasm.h insnsi.h
insnsn.$(OBJ): insnsn.c
labels.$(OBJ): labels.c regs.h config.h version.h nasmlib.h nasm.h insnsi.h
labels.$(OBJ): labels.c regs.h config.h version.h hashtbl.h nasmlib.h nasm.h \
insnsi.h
listing.$(OBJ): listing.c regs.h config.h version.h nasmlib.h nasm.h \
insnsi.h listing.h
macros.$(OBJ): macros.c

View File

@ -105,15 +105,19 @@ clean :
#-- Everything below is generated by mkdep.pl - do not edit --#
assemble.$(OBJ): assemble.c preproc.h insns.h pptok.h regs.h regflags.c \
config.h version.h nasmlib.h nasm.h regvals.c assemble.h insnsi.h
crc64.$(OBJ): crc64.c
disasm.$(OBJ): disasm.c insns.h sync.h regdis.c regs.h config.h regs.c \
version.h nasm.h insnsn.c names.c insnsi.h disasm.h
eval.$(OBJ): eval.c labels.h eval.h regs.h config.h version.h nasmlib.h \
nasm.h insnsi.h
float.$(OBJ): float.c regs.h config.h version.h nasm.h insnsi.h
hashtbl.$(OBJ): hashtbl.c regs.h config.h version.h nasmlib.h hashtbl.h \
nasm.h insnsi.h
insnsa.$(OBJ): insnsa.c insns.h regs.h config.h version.h nasm.h insnsi.h
insnsd.$(OBJ): insnsd.c insns.h regs.h config.h version.h nasm.h insnsi.h
insnsn.$(OBJ): insnsn.c
labels.$(OBJ): labels.c regs.h config.h version.h nasmlib.h nasm.h insnsi.h
labels.$(OBJ): labels.c regs.h config.h version.h hashtbl.h nasmlib.h nasm.h \
insnsi.h
listing.$(OBJ): listing.c regs.h config.h version.h nasmlib.h nasm.h \
insnsi.h listing.h
macros.$(OBJ): macros.c

128
labels.c
View File

@ -13,6 +13,7 @@
#include "nasm.h"
#include "nasmlib.h"
#include "hashtbl.h"
/*
* A local label is one that begins with exactly one period. Things
@ -31,9 +32,8 @@
((c) == '.' || (c) == '@') : \
((c) == '.'))
#define LABEL_BLOCK 32 /* no. of labels/block */
#define LABEL_BLOCK 128 /* no. of labels/block */
#define LBLK_SIZE (LABEL_BLOCK*sizeof(union label))
#define LABEL_HASHES 37 /* no. of hash table entries */
#define END_LIST -3 /* don't clash with NO_SEG! */
#define END_BLOCK -2
@ -75,8 +75,9 @@ struct permts { /* permanent text storage */
extern int global_offset_changed; /* defined in nasm.c */
static union label *ltab[LABEL_HASHES]; /* using a hash table */
static union label *lfree[LABEL_HASHES]; /* pointer into the above */
static struct hash_table *ltab; /* labels hash table */
static union label *ldata; /* all label data blocks */
static union label *lfree; /* labels free block */
static struct permts *perm_head; /* start of perm. text storage */
static struct permts *perm_tail; /* end of perm. text storage */
@ -97,53 +98,50 @@ char lpostfix[PREFIX_MAX] = { 0 };
*/
static union label *find_label(char *label, int create)
{
int hash = 0;
char *p, *prev;
int prevlen;
char *prev;
int prevlen, len;
union label *lptr;
char label_str[IDLEN_MAX];
struct hash_insert ip;
if (islocal(label))
if (islocal(label)) {
prev = prevlabel;
else
prevlen = strlen(prev);
len = strlen(label);
if (prevlen+len >= IDLEN_MAX)
return NULL; /* Error... */
memcpy(label_str, prev, prevlen);
memcpy(label_str+prevlen, label, len);
label_str[len += prevlen] = '\0';
label = label_str;
} else {
prev = "";
prevlen = strlen(prev);
p = prev;
while (*p)
hash += *p++;
p = label;
while (*p)
hash += *p++;
hash %= LABEL_HASHES;
lptr = ltab[hash];
while (lptr->admin.movingon != END_LIST) {
if (lptr->admin.movingon == END_BLOCK) {
lptr = lptr->admin.next;
if (!lptr)
break;
}
if (!strncmp(lptr->defn.label, prev, prevlen) &&
!strcmp(lptr->defn.label + prevlen, label))
return lptr;
lptr++;
prevlen = 0;
}
if (create) {
if (lfree[hash]->admin.movingon == END_BLOCK) {
/*
* must allocate a new block
*/
lfree[hash]->admin.next =
(union label *)nasm_malloc(LBLK_SIZE);
lfree[hash] = lfree[hash]->admin.next;
init_block(lfree[hash]);
}
lfree[hash]->admin.movingon = BOGUS_VALUE;
lfree[hash]->defn.label = perm_copy(prev, label);
lfree[hash]->defn.special = NULL;
lfree[hash]->defn.is_global = NOT_DEFINED_YET;
return lfree[hash]++;
} else
return NULL;
lptr = hash_find(ltab, label, &ip);
if (lptr || !create)
return lptr;
/* Create a new label... */
if (lfree->admin.movingon == END_BLOCK) {
/*
* must allocate a new block
*/
lfree->admin.next =
(union label *)nasm_malloc(LBLK_SIZE);
lfree = lfree->admin.next;
init_block(lfree);
}
lfree->admin.movingon = BOGUS_VALUE;
lfree->defn.label = perm_copy(prev, label);
lfree->defn.special = NULL;
lfree->defn.is_global = NOT_DEFINED_YET;
hash_add(&ip, lfree->defn.label, lfree);
return lfree++;
}
int lookup_label(char *label, int32_t *segment, int32_t *offset)
@ -372,22 +370,14 @@ void declare_as_global(char *label, char *special, efunc error)
int init_labels(void)
{
int i;
ltab = hash_init();
for (i = 0; i < LABEL_HASHES; i++) {
ltab[i] = (union label *)nasm_malloc(LBLK_SIZE);
if (!ltab[i])
return -1; /* can't initialise, panic */
init_block(ltab[i]);
lfree[i] = ltab[i];
}
ldata = lfree = (union label *)nasm_malloc(LBLK_SIZE);
init_block(lfree);
perm_head =
perm_tail = (struct permts *)nasm_malloc(sizeof(struct permts));
if (!perm_head)
return -1;
perm_head->next = NULL;
perm_head->size = PERMTS_SIZE;
perm_head->usage = 0;
@ -399,24 +389,28 @@ int init_labels(void)
return 0;
}
static void cleanup_hashed_label(char *key, void *data)
{
/* The key is part of the permanent string storage */
/* The data is part of the ldata chain */
(void)key; (void)data;
}
void cleanup_labels(void)
{
int i;
union label *lptr, *lhold;
initialized = FALSE;
for (i = 0; i < LABEL_HASHES; i++) {
union label *lptr, *lhold;
hash_free(ltab, cleanup_hashed_label);
lptr = lhold = ltab[i];
while (lptr) {
while (lptr->admin.movingon != END_BLOCK)
lptr++;
lptr = lptr->admin.next;
nasm_free(lhold);
lhold = lptr;
}
lptr = lhold = ldata;
while (lptr) {
lptr = &lptr[LABEL_BLOCK-1];
lptr = lptr->admin.next;
nasm_free(lhold);
lhold = lptr;
}
while (perm_head) {