mirror of
https://github.com/netwide-assembler/nasm.git
synced 2025-04-12 18:40:23 +08:00
Avoid #including .c files; instead compile as separate units
Don't #include .c files, even if they are auto-generated; instead compile them as separate compilation units and let the linker do its job.
This commit is contained in:
parent
73252a92ae
commit
a4835d466c
41
Makefile.in
41
Makefile.in
@ -65,11 +65,12 @@ NASM = nasm.$(O) nasmlib.$(O) float.$(O) insnsa.$(O) insnsb.$(O) \
|
||||
output/outelf32.$(O) output/outelf64.$(O) \
|
||||
output/outobj.$(O) output/outas86.$(O) output/outrdf2.$(O) \
|
||||
output/outdbg.$(O) output/outieee.$(O) output/outmacho.$(O) \
|
||||
preproc.$(O) pptok.$(O) \
|
||||
listing.$(O) eval.$(O) exprlib.$(O) stdscan.$(O) tokhash.$(O)
|
||||
preproc.$(O) pptok.$(O) macros.$(O) \
|
||||
listing.$(O) eval.$(O) exprlib.$(O) stdscan.$(O) tokhash.$(O) \
|
||||
regvals.$(O) regflags.$(O)
|
||||
|
||||
NDISASM = ndisasm.$(O) disasm.$(O) sync.$(O) nasmlib.$(O) \
|
||||
insnsd.$(O) insnsb.$(O)
|
||||
insnsd.$(O) insnsb.$(O) insnsn.$(O) regs.$(O) regdis.$(O)
|
||||
|
||||
all: nasm$(X) ndisasm$(X) nasm.man ndisasm.man
|
||||
cd rdoff && $(MAKE) all
|
||||
@ -122,6 +123,8 @@ regflags.c: regs.dat regs.pl
|
||||
$(PERL) $(srcdir)/regs.pl fc $(srcdir)/regs.dat > regflags.c
|
||||
regdis.c: regs.dat regs.pl
|
||||
$(PERL) $(srcdir)/regs.pl dc $(srcdir)/regs.dat > regdis.c
|
||||
regdis.h: regs.dat regs.pl
|
||||
$(PERL) $(srcdir)/regs.pl dh $(srcdir)/regs.dat > regdis.h
|
||||
regvals.c: regs.dat regs.pl
|
||||
$(PERL) $(srcdir)/regs.pl vc $(srcdir)/regs.dat > regvals.c
|
||||
regs.h: regs.dat regs.pl
|
||||
@ -146,8 +149,9 @@ pptok.c: pptok.dat pptok.pl perllib/phash.ph
|
||||
# This target generates all files that require perl.
|
||||
# This allows easier generation of distribution (see dist target).
|
||||
PERLREQ = macros.c insnsb.c insnsa.c insnsd.c insnsi.h insnsn.c \
|
||||
regs.c regs.h regflags.c regdis.c regvals.c tokhash.c tokens.h \
|
||||
version.h version.mac pptok.h pptok.c
|
||||
regs.c regs.h regflags.c regdis.c regdis.h regvals.c \
|
||||
tokhash.c tokens.h pptok.h pptok.c \
|
||||
version.h version.mac
|
||||
perlreq: $(PERLREQ)
|
||||
|
||||
install: nasm$(X) ndisasm$(X)
|
||||
@ -228,11 +232,10 @@ alldeps: perlreq
|
||||
# @path-separator: "/"
|
||||
#-- Everything below is generated by mkdep.pl - do not edit --#
|
||||
assemble.$(O): assemble.c assemble.h compiler.h config.h insns.h insnsi.h \
|
||||
nasm.h nasmlib.h pptok.h preproc.h regflags.c regs.h regvals.c tokens.h \
|
||||
version.h
|
||||
nasm.h nasmlib.h pptok.h preproc.h regs.h tables.h tokens.h version.h
|
||||
crc64.$(O): crc64.c compiler.h config.h
|
||||
disasm.$(O): disasm.c compiler.h config.h disasm.h insns.h insnsi.h insnsn.c \
|
||||
names.c nasm.h nasmlib.h regdis.c regs.c regs.h sync.h tokens.h version.h
|
||||
disasm.$(O): disasm.c compiler.h config.h disasm.h insns.h insnsi.h nasm.h \
|
||||
nasmlib.h regdis.h regs.h sync.h tables.h tokens.h version.h
|
||||
eval.$(O): eval.c compiler.h config.h eval.h float.h insnsi.h labels.h \
|
||||
nasm.h nasmlib.h regs.h version.h
|
||||
exprlib.$(O): exprlib.c compiler.h config.h insnsi.h nasm.h nasmlib.h regs.h \
|
||||
@ -247,15 +250,14 @@ insnsb.$(O): insnsb.c compiler.h config.h insns.h insnsi.h nasm.h nasmlib.h \
|
||||
regs.h tokens.h version.h
|
||||
insnsd.$(O): insnsd.c compiler.h config.h insns.h insnsi.h nasm.h nasmlib.h \
|
||||
regs.h tokens.h version.h
|
||||
insnsn.$(O): insnsn.c
|
||||
insnsn.$(O): insnsn.c compiler.h config.h insnsi.h tables.h
|
||||
labels.$(O): labels.c compiler.h config.h hashtbl.h insnsi.h nasm.h \
|
||||
nasmlib.h regs.h version.h
|
||||
lib/snprintf.$(O): lib/snprintf.c compiler.h config.h nasmlib.h
|
||||
lib/vsnprintf.$(O): lib/vsnprintf.c compiler.h config.h nasmlib.h
|
||||
listing.$(O): listing.c compiler.h config.h insnsi.h listing.h nasm.h \
|
||||
nasmlib.h regs.h version.h
|
||||
macros.$(O): macros.c compiler.h config.h
|
||||
names.$(O): names.c compiler.h config.h insnsn.c regs.c
|
||||
macros.$(O): macros.c compiler.h config.h insnsi.h tables.h
|
||||
nasm.$(O): nasm.c assemble.h compiler.h config.h eval.h float.h insns.h \
|
||||
insnsi.h labels.h listing.h nasm.h nasmlib.h outform.h parser.h pptok.h \
|
||||
preproc.h regs.h stdscan.h tokens.h version.h
|
||||
@ -290,15 +292,16 @@ output/outrdf.$(O): output/outrdf.c compiler.h config.h insnsi.h nasm.h \
|
||||
output/outrdf2.$(O): output/outrdf2.c compiler.h config.h insnsi.h nasm.h \
|
||||
nasmlib.h outform.h rdoff/rdoff.h regs.h version.h
|
||||
parser.$(O): parser.c compiler.h config.h float.h insns.h insnsi.h nasm.h \
|
||||
nasmlib.h parser.h regflags.c regs.h stdscan.h tokens.h version.h
|
||||
nasmlib.h parser.h regs.h stdscan.h tables.h tokens.h version.h
|
||||
pptok.$(O): pptok.c compiler.h config.h hashtbl.h nasmlib.h pptok.h \
|
||||
preproc.h
|
||||
preproc.$(O): preproc.c compiler.h config.h hashtbl.h insnsi.h macros.c \
|
||||
nasm.h nasmlib.h pptok.h preproc.h regs.h stdscan.h tokens.h version.h
|
||||
regdis.$(O): regdis.c
|
||||
regflags.$(O): regflags.c
|
||||
regs.$(O): regs.c compiler.h config.h
|
||||
regvals.$(O): regvals.c
|
||||
preproc.$(O): preproc.c compiler.h config.h hashtbl.h insnsi.h nasm.h \
|
||||
nasmlib.h pptok.h preproc.h regs.h stdscan.h tables.h tokens.h version.h
|
||||
regdis.$(O): regdis.c regs.h
|
||||
regflags.$(O): regflags.c compiler.h config.h insnsi.h nasm.h nasmlib.h \
|
||||
regs.h tables.h version.h
|
||||
regs.$(O): regs.c compiler.h config.h insnsi.h tables.h
|
||||
regvals.$(O): regvals.c compiler.h config.h insnsi.h tables.h
|
||||
stdscan.$(O): stdscan.c compiler.h config.h insns.h insnsi.h nasm.h \
|
||||
nasmlib.h regs.h stdscan.h tokens.h version.h
|
||||
sync.$(O): sync.c compiler.h config.h nasmlib.h sync.h
|
||||
|
@ -39,11 +39,12 @@ NASM = nasm.$(O) nasmlib.$(O) float.$(O) insnsa.$(O) insnsb.$(O) \
|
||||
output/outelf32.$(O) output/outelf64.$(O) \
|
||||
output/outobj.$(O) output/outas86.$(O) output/outrdf2.$(O) \
|
||||
output/outdbg.$(O) output/outieee.$(O) output/outmacho.$(O) \
|
||||
preproc.$(O) pptok.$(O) \
|
||||
listing.$(O) eval.$(O) exprlib.$(O) stdscan.$(O) tokhash.$(O)
|
||||
preproc.$(O) pptok.$(O) macros.$(O) \
|
||||
listing.$(O) eval.$(O) exprlib.$(O) stdscan.$(O) tokhash.$(O) \
|
||||
regvals.$(O) regflags.$(O)
|
||||
|
||||
NDISASM = ndisasm.$(O) disasm.$(O) sync.$(O) nasmlib.$(O) \
|
||||
insnsd.$(O) insnsb.$(O)
|
||||
insnsd.$(O) insnsb.$(O) insnsn.$(O) regs.$(O) regdis.$(O)
|
||||
|
||||
all: nasm$(X) ndisasm$(X)
|
||||
rem cd rdoff && $(MAKE) all
|
||||
@ -177,10 +178,10 @@ everything: all doc rdf
|
||||
# @exclude: "config.h"
|
||||
#-- Everything below is generated by mkdep.pl - do not edit --#
|
||||
assemble.$(O): assemble.c assemble.h compiler.h insns.h insnsi.h nasm.h \
|
||||
nasmlib.h pptok.h preproc.h regflags.c regs.h regvals.c tokens.h version.h
|
||||
nasmlib.h pptok.h preproc.h regs.h tables.h tokens.h version.h
|
||||
crc64.$(O): crc64.c compiler.h
|
||||
disasm.$(O): disasm.c compiler.h disasm.h insns.h insnsi.h insnsn.c names.c \
|
||||
nasm.h nasmlib.h regdis.c regs.c regs.h sync.h tokens.h version.h
|
||||
disasm.$(O): disasm.c compiler.h disasm.h insns.h insnsi.h nasm.h nasmlib.h \
|
||||
regdis.h regs.h sync.h tables.h tokens.h version.h
|
||||
eval.$(O): eval.c compiler.h eval.h float.h insnsi.h labels.h nasm.h \
|
||||
nasmlib.h regs.h version.h
|
||||
exprlib.$(O): exprlib.c compiler.h insnsi.h nasm.h nasmlib.h regs.h \
|
||||
@ -195,15 +196,14 @@ insnsb.$(O): insnsb.c compiler.h insns.h insnsi.h nasm.h nasmlib.h regs.h \
|
||||
tokens.h version.h
|
||||
insnsd.$(O): insnsd.c compiler.h insns.h insnsi.h nasm.h nasmlib.h regs.h \
|
||||
tokens.h version.h
|
||||
insnsn.$(O): insnsn.c
|
||||
insnsn.$(O): insnsn.c compiler.h insnsi.h tables.h
|
||||
labels.$(O): labels.c compiler.h hashtbl.h insnsi.h nasm.h nasmlib.h regs.h \
|
||||
version.h
|
||||
lib/snprintf.$(O): lib/snprintf.c compiler.h nasmlib.h
|
||||
lib/vsnprintf.$(O): lib/vsnprintf.c compiler.h nasmlib.h
|
||||
listing.$(O): listing.c compiler.h insnsi.h listing.h nasm.h nasmlib.h \
|
||||
regs.h version.h
|
||||
macros.$(O): macros.c compiler.h
|
||||
names.$(O): names.c compiler.h insnsn.c regs.c
|
||||
macros.$(O): macros.c compiler.h insnsi.h tables.h
|
||||
nasm.$(O): nasm.c assemble.h compiler.h eval.h float.h insns.h insnsi.h \
|
||||
labels.h listing.h nasm.h nasmlib.h outform.h parser.h pptok.h preproc.h \
|
||||
regs.h stdscan.h tokens.h version.h
|
||||
@ -238,14 +238,15 @@ output/outrdf.$(O): output/outrdf.c compiler.h insnsi.h nasm.h nasmlib.h \
|
||||
output/outrdf2.$(O): output/outrdf2.c compiler.h insnsi.h nasm.h nasmlib.h \
|
||||
outform.h rdoff/rdoff.h regs.h version.h
|
||||
parser.$(O): parser.c compiler.h float.h insns.h insnsi.h nasm.h nasmlib.h \
|
||||
parser.h regflags.c regs.h stdscan.h tokens.h version.h
|
||||
parser.h regs.h stdscan.h tables.h tokens.h version.h
|
||||
pptok.$(O): pptok.c compiler.h hashtbl.h nasmlib.h pptok.h preproc.h
|
||||
preproc.$(O): preproc.c compiler.h hashtbl.h insnsi.h macros.c nasm.h \
|
||||
nasmlib.h pptok.h preproc.h regs.h stdscan.h tokens.h version.h
|
||||
regdis.$(O): regdis.c
|
||||
regflags.$(O): regflags.c
|
||||
regs.$(O): regs.c compiler.h
|
||||
regvals.$(O): regvals.c
|
||||
preproc.$(O): preproc.c compiler.h hashtbl.h insnsi.h nasm.h nasmlib.h \
|
||||
pptok.h preproc.h regs.h stdscan.h tables.h tokens.h version.h
|
||||
regdis.$(O): regdis.c regs.h
|
||||
regflags.$(O): regflags.c compiler.h insnsi.h nasm.h nasmlib.h regs.h \
|
||||
tables.h version.h
|
||||
regs.$(O): regs.c compiler.h insnsi.h tables.h
|
||||
regvals.$(O): regvals.c compiler.h insnsi.h tables.h
|
||||
stdscan.$(O): stdscan.c compiler.h insns.h insnsi.h nasm.h nasmlib.h regs.h \
|
||||
stdscan.h tokens.h version.h
|
||||
sync.$(O): sync.c compiler.h nasmlib.h sync.h
|
||||
|
@ -26,46 +26,24 @@ LDFLAGS+=-Wl,--nlm-kernelspace
|
||||
LDFLAGS+=-Wl,--nlm-posixflag
|
||||
LDFLAGS+=-s
|
||||
|
||||
NASM_OBJ = \
|
||||
$(OBJDIR)/nasm.o\
|
||||
$(OBJDIR)/nasmlib.o\
|
||||
$(OBJDIR)/float.o\
|
||||
$(OBJDIR)/insnsa.o\
|
||||
$(OBJDIR)/insnsb.o\
|
||||
$(OBJDIR)/assemble.o\
|
||||
$(OBJDIR)/labels.o\
|
||||
$(OBJDIR)/hashtbl.o\
|
||||
$(OBJDIR)/crc64.o\
|
||||
$(OBJDIR)/parser.o\
|
||||
$(OBJDIR)/outform.o\
|
||||
$(OBJDIR)/outbin.o\
|
||||
$(OBJDIR)/outaout.o\
|
||||
$(OBJDIR)/outcoff.o\
|
||||
$(OBJDIR)/outelf32.o\
|
||||
$(OBJDIR)/outelf64.o\
|
||||
$(OBJDIR)/outobj.o\
|
||||
$(OBJDIR)/outas86.o\
|
||||
$(OBJDIR)/outrdf2.o\
|
||||
$(OBJDIR)/outdbg.o\
|
||||
$(OBJDIR)/outieee.o\
|
||||
$(OBJDIR)/outmacho.o\
|
||||
$(OBJDIR)/preproc.o\
|
||||
$(OBJDIR)/pptok.o\
|
||||
$(OBJDIR)/listing.o\
|
||||
$(OBJDIR)/eval.o\
|
||||
$(OBJDIR)/exprlib.o\
|
||||
$(OBJDIR)/stdscan.o\
|
||||
$(OBJDIR)/tokhash.o\
|
||||
$(EOLIST)
|
||||
O = o
|
||||
|
||||
NDIS_OBJ = \
|
||||
$(OBJDIR)/ndisasm.o\
|
||||
$(OBJDIR)/nasmlib.o\
|
||||
$(OBJDIR)/disasm.o\
|
||||
$(OBJDIR)/sync.o\
|
||||
$(OBJDIR)/insnsd.o\
|
||||
$(OBJDIR)/insnsb.o\
|
||||
$(EOLIST)
|
||||
NASM = nasm.$(O) nasmlib.$(O) float.$(O) insnsa.$(O) insnsb.$(O) \
|
||||
assemble.$(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) \
|
||||
output/outdbg.$(O) output/outieee.$(O) output/outmacho.$(O) \
|
||||
preproc.$(O) pptok.$(O) macros.$(O) \
|
||||
listing.$(O) eval.$(O) exprlib.$(O) stdscan.$(O) tokhash.$(O) \
|
||||
regvals.$(O) regflags.$(O)
|
||||
|
||||
NDISASM = ndisasm.$(O) disasm.$(O) sync.$(O) nasmlib.$(O) \
|
||||
insnsd.$(O) insnsb.$(O) insnsn.$(O) regs.$(O) regdis.$(O)
|
||||
|
||||
NASM_OBJ = $(addprefix $(OBJDIR)/,$(notdir $(NASM))) $(EOLIST)
|
||||
NDIS_OBJ = $(addprefix $(OBJDIR)/,$(notdir $(NDISASM))) $(EOLIST)
|
||||
|
||||
VPATH = *.c $(PROOT) $(PROOT)/output
|
||||
|
||||
@ -140,11 +118,10 @@ $(OBJDIR)/version.inc: $(PROOT)/version $(PROOT)/version.pl $(OBJDIR)
|
||||
# @continuation: "\"
|
||||
#-- Everything below is generated by mkdep.pl - do not edit --#
|
||||
assemble.o: assemble.c assemble.h compiler.h config.h insns.h insnsi.h \
|
||||
nasm.h nasmlib.h pptok.h preproc.h regflags.c regs.h regvals.c tokens.h \
|
||||
version.h
|
||||
nasm.h nasmlib.h pptok.h preproc.h regs.h tables.h tokens.h version.h
|
||||
crc64.o: crc64.c compiler.h config.h
|
||||
disasm.o: disasm.c compiler.h config.h disasm.h insns.h insnsi.h insnsn.c \
|
||||
names.c nasm.h nasmlib.h regdis.c regs.c regs.h sync.h tokens.h version.h
|
||||
disasm.o: disasm.c compiler.h config.h disasm.h insns.h insnsi.h nasm.h \
|
||||
nasmlib.h regdis.h regs.h sync.h tables.h tokens.h version.h
|
||||
eval.o: eval.c compiler.h config.h eval.h float.h insnsi.h labels.h nasm.h \
|
||||
nasmlib.h regs.h version.h
|
||||
exprlib.o: exprlib.c compiler.h config.h insnsi.h nasm.h nasmlib.h regs.h \
|
||||
@ -159,15 +136,14 @@ insnsb.o: insnsb.c compiler.h config.h insns.h insnsi.h nasm.h nasmlib.h \
|
||||
regs.h tokens.h version.h
|
||||
insnsd.o: insnsd.c compiler.h config.h insns.h insnsi.h nasm.h nasmlib.h \
|
||||
regs.h tokens.h version.h
|
||||
insnsn.o: insnsn.c
|
||||
insnsn.o: insnsn.c compiler.h config.h insnsi.h tables.h
|
||||
labels.o: labels.c compiler.h config.h hashtbl.h insnsi.h nasm.h nasmlib.h \
|
||||
regs.h version.h
|
||||
lib/snprintf.o: lib/snprintf.c compiler.h config.h nasmlib.h
|
||||
lib/vsnprintf.o: lib/vsnprintf.c compiler.h config.h nasmlib.h
|
||||
listing.o: listing.c compiler.h config.h insnsi.h listing.h nasm.h nasmlib.h \
|
||||
regs.h version.h
|
||||
macros.o: macros.c compiler.h config.h
|
||||
names.o: names.c compiler.h config.h insnsn.c regs.c
|
||||
macros.o: macros.c compiler.h config.h insnsi.h tables.h
|
||||
nasm.o: nasm.c assemble.h compiler.h config.h eval.h float.h insns.h \
|
||||
insnsi.h labels.h listing.h nasm.h nasmlib.h outform.h parser.h pptok.h \
|
||||
preproc.h regs.h stdscan.h tokens.h version.h
|
||||
@ -202,14 +178,15 @@ output/outrdf.o: output/outrdf.c compiler.h config.h insnsi.h nasm.h \
|
||||
output/outrdf2.o: output/outrdf2.c compiler.h config.h insnsi.h nasm.h \
|
||||
nasmlib.h outform.h rdoff/rdoff.h regs.h version.h
|
||||
parser.o: parser.c compiler.h config.h float.h insns.h insnsi.h nasm.h \
|
||||
nasmlib.h parser.h regflags.c regs.h stdscan.h tokens.h version.h
|
||||
nasmlib.h parser.h regs.h stdscan.h tables.h tokens.h version.h
|
||||
pptok.o: pptok.c compiler.h config.h hashtbl.h nasmlib.h pptok.h preproc.h
|
||||
preproc.o: preproc.c compiler.h config.h hashtbl.h insnsi.h macros.c nasm.h \
|
||||
nasmlib.h pptok.h preproc.h regs.h stdscan.h tokens.h version.h
|
||||
regdis.o: regdis.c
|
||||
regflags.o: regflags.c
|
||||
regs.o: regs.c compiler.h config.h
|
||||
regvals.o: regvals.c
|
||||
preproc.o: preproc.c compiler.h config.h hashtbl.h insnsi.h nasm.h nasmlib.h \
|
||||
pptok.h preproc.h regs.h stdscan.h tables.h tokens.h version.h
|
||||
regdis.o: regdis.c regs.h
|
||||
regflags.o: regflags.c compiler.h config.h insnsi.h nasm.h nasmlib.h regs.h \
|
||||
tables.h version.h
|
||||
regs.o: regs.c compiler.h config.h insnsi.h tables.h
|
||||
regvals.o: regvals.c compiler.h config.h insnsi.h tables.h
|
||||
stdscan.o: stdscan.c compiler.h config.h insns.h insnsi.h nasm.h nasmlib.h \
|
||||
regs.h stdscan.h tokens.h version.h
|
||||
sync.o: sync.c compiler.h config.h nasmlib.h sync.h
|
||||
|
@ -51,11 +51,12 @@ NASM = nasm.$(O) nasmlib.$(O) float.$(O) insnsa.$(O) insnsb.$(O) &
|
||||
output\outelf32.$(O) output\outelf64.$(O) &
|
||||
output\outobj.$(O) output\outas86.$(O) output\outrdf2.$(O) &
|
||||
output\outdbg.$(O) output\outieee.$(O) output\outmacho.$(O) &
|
||||
preproc.$(O) pptok.$(O) &
|
||||
listing.$(O) eval.$(O) exprlib.$(O) stdscan.$(O) tokhash.$(O)
|
||||
preproc.$(O) pptok.$(O) macros.$(O) &
|
||||
listing.$(O) eval.$(O) exprlib.$(O) stdscan.$(O) tokhash.$(O) &
|
||||
regvals.$(O) regflags.$(O)
|
||||
|
||||
NDISASM = ndisasm.$(O) disasm.$(O) sync.$(O) nasmlib.$(O) &
|
||||
insnsd.$(O) insnsb.$(O)
|
||||
insnsd.$(O) insnsb.$(O) insnsn.$(O) regs.$(O) regdis.$(O)
|
||||
|
||||
what: .SYMBOLIC
|
||||
@echo Please build "dos", "win32" or "os2"
|
||||
@ -117,6 +118,8 @@ regflags.c: regs.dat regs.pl
|
||||
$(PERL) $(srcdir)/regs.pl fc $(srcdir)/regs.dat > regflags.c
|
||||
regdis.c: regs.dat regs.pl
|
||||
$(PERL) $(srcdir)/regs.pl dc $(srcdir)/regs.dat > regdis.c
|
||||
regdis.h: regs.dat regs.pl
|
||||
$(PERL) $(srcdir)/regs.pl dh $(srcdir)/regs.dat > regdis.h
|
||||
regvals.c: regs.dat regs.pl
|
||||
$(PERL) $(srcdir)/regs.pl vc $(srcdir)/regs.dat > regvals.c
|
||||
regs.h: regs.dat regs.pl
|
||||
@ -140,9 +143,10 @@ pptok.c: pptok.dat pptok.pl perllib/phash.ph
|
||||
|
||||
# This target generates all files that require perl.
|
||||
# This allows easier generation of distribution (see dist target).
|
||||
PERLREQ = macros.c insnsb.c insnsa.c insnsd.c insnsi.h insnsn.c &
|
||||
regs.c regs.h regflags.c regdis.c regvals.c tokhash.c tokens.h &
|
||||
version.h version.mac pptok.h pptok.c
|
||||
PERLREQ = macros.c insnsb.c insnsa.c insnsd.c insnsi.h insnsn.c \
|
||||
regs.c regs.h regflags.c regdis.c regdis.h regvals.c \
|
||||
tokhash.c tokens.h pptok.h pptok.c \
|
||||
version.h version.mac
|
||||
perlreq: $(PERLREQ)
|
||||
|
||||
clean: .SYMBOLIC
|
||||
@ -203,10 +207,10 @@ everything: all doc rdf
|
||||
# @continuation: "&"
|
||||
#-- Everything below is generated by mkdep.pl - do not edit --#
|
||||
assemble.$(O): assemble.c assemble.h compiler.h insns.h insnsi.h nasm.h &
|
||||
nasmlib.h pptok.h preproc.h regflags.c regs.h regvals.c tokens.h version.h
|
||||
nasmlib.h pptok.h preproc.h regs.h tables.h tokens.h version.h
|
||||
crc64.$(O): crc64.c compiler.h
|
||||
disasm.$(O): disasm.c compiler.h disasm.h insns.h insnsi.h insnsn.c names.c &
|
||||
nasm.h nasmlib.h regdis.c regs.c regs.h sync.h tokens.h version.h
|
||||
disasm.$(O): disasm.c compiler.h disasm.h insns.h insnsi.h nasm.h nasmlib.h &
|
||||
regdis.h regs.h sync.h tables.h tokens.h version.h
|
||||
eval.$(O): eval.c compiler.h eval.h float.h insnsi.h labels.h nasm.h &
|
||||
nasmlib.h regs.h version.h
|
||||
exprlib.$(O): exprlib.c compiler.h insnsi.h nasm.h nasmlib.h regs.h &
|
||||
@ -221,15 +225,14 @@ insnsb.$(O): insnsb.c compiler.h insns.h insnsi.h nasm.h nasmlib.h regs.h &
|
||||
tokens.h version.h
|
||||
insnsd.$(O): insnsd.c compiler.h insns.h insnsi.h nasm.h nasmlib.h regs.h &
|
||||
tokens.h version.h
|
||||
insnsn.$(O): insnsn.c
|
||||
insnsn.$(O): insnsn.c compiler.h insnsi.h tables.h
|
||||
labels.$(O): labels.c compiler.h hashtbl.h insnsi.h nasm.h nasmlib.h regs.h &
|
||||
version.h
|
||||
lib\snprintf.$(O): lib\snprintf.c compiler.h nasmlib.h
|
||||
lib\vsnprintf.$(O): lib\vsnprintf.c compiler.h nasmlib.h
|
||||
listing.$(O): listing.c compiler.h insnsi.h listing.h nasm.h nasmlib.h &
|
||||
regs.h version.h
|
||||
macros.$(O): macros.c compiler.h
|
||||
names.$(O): names.c compiler.h insnsn.c regs.c
|
||||
macros.$(O): macros.c compiler.h insnsi.h tables.h
|
||||
nasm.$(O): nasm.c assemble.h compiler.h eval.h float.h insns.h insnsi.h &
|
||||
labels.h listing.h nasm.h nasmlib.h outform.h parser.h pptok.h preproc.h &
|
||||
regs.h stdscan.h tokens.h version.h
|
||||
@ -264,14 +267,15 @@ output\outrdf.$(O): output\outrdf.c compiler.h insnsi.h nasm.h nasmlib.h &
|
||||
output\outrdf2.$(O): output\outrdf2.c compiler.h insnsi.h nasm.h nasmlib.h &
|
||||
outform.h rdoff\rdoff.h regs.h version.h
|
||||
parser.$(O): parser.c compiler.h float.h insns.h insnsi.h nasm.h nasmlib.h &
|
||||
parser.h regflags.c regs.h stdscan.h tokens.h version.h
|
||||
parser.h regs.h stdscan.h tables.h tokens.h version.h
|
||||
pptok.$(O): pptok.c compiler.h hashtbl.h nasmlib.h pptok.h preproc.h
|
||||
preproc.$(O): preproc.c compiler.h hashtbl.h insnsi.h macros.c nasm.h &
|
||||
nasmlib.h pptok.h preproc.h regs.h stdscan.h tokens.h version.h
|
||||
regdis.$(O): regdis.c
|
||||
regflags.$(O): regflags.c
|
||||
regs.$(O): regs.c compiler.h
|
||||
regvals.$(O): regvals.c
|
||||
preproc.$(O): preproc.c compiler.h hashtbl.h insnsi.h nasm.h nasmlib.h &
|
||||
pptok.h preproc.h regs.h stdscan.h tables.h tokens.h version.h
|
||||
regdis.$(O): regdis.c regs.h
|
||||
regflags.$(O): regflags.c compiler.h insnsi.h nasm.h nasmlib.h regs.h &
|
||||
tables.h version.h
|
||||
regs.$(O): regs.c compiler.h insnsi.h tables.h
|
||||
regvals.$(O): regvals.c compiler.h insnsi.h tables.h
|
||||
stdscan.$(O): stdscan.c compiler.h insns.h insnsi.h nasm.h nasmlib.h regs.h &
|
||||
stdscan.h tokens.h version.h
|
||||
sync.$(O): sync.c compiler.h nasmlib.h sync.h
|
||||
|
@ -62,11 +62,12 @@ NASM = nasm.$(O) nasmlib.$(O) float.$(O) insnsa.$(O) insnsb.$(O) \
|
||||
output/outelf32.$(O) output/outelf64.$(O) \
|
||||
output/outobj.$(O) output/outas86.$(O) output/outrdf2.$(O) \
|
||||
output/outdbg.$(O) output/outieee.$(O) output/outmacho.$(O) \
|
||||
preproc.$(O) pptok.$(O) \
|
||||
listing.$(O) eval.$(O) exprlib.$(O) stdscan.$(O) tokhash.$(O)
|
||||
preproc.$(O) pptok.$(O) macros.$(O) \
|
||||
listing.$(O) eval.$(O) exprlib.$(O) stdscan.$(O) tokhash.$(O) \
|
||||
regvals.$(O) regflags.$(O)
|
||||
|
||||
NDISASM = ndisasm.$(O) disasm.$(O) sync.$(O) nasmlib.$(O) \
|
||||
insnsd.$(O) insnsb.$(O)
|
||||
insnsd.$(O) insnsb.$(O) insnsn.$(O) regs.$(O) regdis.$(O)
|
||||
|
||||
what:
|
||||
@echo 'Please build "dos", "win32" or "os2"'
|
||||
@ -127,6 +128,8 @@ regflags.c: regs.dat regs.pl
|
||||
$(PERL) $(srcdir)/regs.pl fc $(srcdir)/regs.dat > regflags.c
|
||||
regdis.c: regs.dat regs.pl
|
||||
$(PERL) $(srcdir)/regs.pl dc $(srcdir)/regs.dat > regdis.c
|
||||
regdis.h: regs.dat regs.pl
|
||||
$(PERL) $(srcdir)/regs.pl dh $(srcdir)/regs.dat > regdis.h
|
||||
regvals.c: regs.dat regs.pl
|
||||
$(PERL) $(srcdir)/regs.pl vc $(srcdir)/regs.dat > regvals.c
|
||||
regs.h: regs.dat regs.pl
|
||||
@ -151,8 +154,9 @@ pptok.c: pptok.dat pptok.pl perllib/phash.ph
|
||||
# This target generates all files that require perl.
|
||||
# This allows easier generation of distribution (see dist target).
|
||||
PERLREQ = macros.c insnsb.c insnsa.c insnsd.c insnsi.h insnsn.c \
|
||||
regs.c regs.h regflags.c regdis.c regvals.c tokhash.c tokens.h \
|
||||
version.h version.mac pptok.h pptok.c
|
||||
regs.c regs.h regflags.c regdis.c regdis.h regvals.c \
|
||||
tokhash.c tokens.h pptok.h pptok.c \
|
||||
version.h version.mac
|
||||
perlreq: $(PERLREQ)
|
||||
|
||||
clean:
|
||||
@ -213,10 +217,10 @@ everything: all doc rdf
|
||||
# @continuation: "\"
|
||||
#-- Everything below is generated by mkdep.pl - do not edit --#
|
||||
assemble.$(O): assemble.c assemble.h compiler.h insns.h insnsi.h nasm.h \
|
||||
nasmlib.h pptok.h preproc.h regflags.c regs.h regvals.c tokens.h version.h
|
||||
nasmlib.h pptok.h preproc.h regs.h tables.h tokens.h version.h
|
||||
crc64.$(O): crc64.c compiler.h
|
||||
disasm.$(O): disasm.c compiler.h disasm.h insns.h insnsi.h insnsn.c names.c \
|
||||
nasm.h nasmlib.h regdis.c regs.c regs.h sync.h tokens.h version.h
|
||||
disasm.$(O): disasm.c compiler.h disasm.h insns.h insnsi.h nasm.h nasmlib.h \
|
||||
regdis.h regs.h sync.h tables.h tokens.h version.h
|
||||
eval.$(O): eval.c compiler.h eval.h float.h insnsi.h labels.h nasm.h \
|
||||
nasmlib.h regs.h version.h
|
||||
exprlib.$(O): exprlib.c compiler.h insnsi.h nasm.h nasmlib.h regs.h \
|
||||
@ -231,15 +235,14 @@ insnsb.$(O): insnsb.c compiler.h insns.h insnsi.h nasm.h nasmlib.h regs.h \
|
||||
tokens.h version.h
|
||||
insnsd.$(O): insnsd.c compiler.h insns.h insnsi.h nasm.h nasmlib.h regs.h \
|
||||
tokens.h version.h
|
||||
insnsn.$(O): insnsn.c
|
||||
insnsn.$(O): insnsn.c compiler.h insnsi.h tables.h
|
||||
labels.$(O): labels.c compiler.h hashtbl.h insnsi.h nasm.h nasmlib.h regs.h \
|
||||
version.h
|
||||
lib/snprintf.$(O): lib/snprintf.c compiler.h nasmlib.h
|
||||
lib/vsnprintf.$(O): lib/vsnprintf.c compiler.h nasmlib.h
|
||||
listing.$(O): listing.c compiler.h insnsi.h listing.h nasm.h nasmlib.h \
|
||||
regs.h version.h
|
||||
macros.$(O): macros.c compiler.h
|
||||
names.$(O): names.c compiler.h insnsn.c regs.c
|
||||
macros.$(O): macros.c compiler.h insnsi.h tables.h
|
||||
nasm.$(O): nasm.c assemble.h compiler.h eval.h float.h insns.h insnsi.h \
|
||||
labels.h listing.h nasm.h nasmlib.h outform.h parser.h pptok.h preproc.h \
|
||||
regs.h stdscan.h tokens.h version.h
|
||||
@ -274,14 +277,15 @@ output/outrdf.$(O): output/outrdf.c compiler.h insnsi.h nasm.h nasmlib.h \
|
||||
output/outrdf2.$(O): output/outrdf2.c compiler.h insnsi.h nasm.h nasmlib.h \
|
||||
outform.h rdoff/rdoff.h regs.h version.h
|
||||
parser.$(O): parser.c compiler.h float.h insns.h insnsi.h nasm.h nasmlib.h \
|
||||
parser.h regflags.c regs.h stdscan.h tokens.h version.h
|
||||
parser.h regs.h stdscan.h tables.h tokens.h version.h
|
||||
pptok.$(O): pptok.c compiler.h hashtbl.h nasmlib.h pptok.h preproc.h
|
||||
preproc.$(O): preproc.c compiler.h hashtbl.h insnsi.h macros.c nasm.h \
|
||||
nasmlib.h pptok.h preproc.h regs.h stdscan.h tokens.h version.h
|
||||
regdis.$(O): regdis.c
|
||||
regflags.$(O): regflags.c
|
||||
regs.$(O): regs.c compiler.h
|
||||
regvals.$(O): regvals.c
|
||||
preproc.$(O): preproc.c compiler.h hashtbl.h insnsi.h nasm.h nasmlib.h \
|
||||
pptok.h preproc.h regs.h stdscan.h tables.h tokens.h version.h
|
||||
regdis.$(O): regdis.c regs.h
|
||||
regflags.$(O): regflags.c compiler.h insnsi.h nasm.h nasmlib.h regs.h \
|
||||
tables.h version.h
|
||||
regs.$(O): regs.c compiler.h insnsi.h tables.h
|
||||
regvals.$(O): regvals.c compiler.h insnsi.h tables.h
|
||||
stdscan.$(O): stdscan.c compiler.h insns.h insnsi.h nasm.h nasmlib.h regs.h \
|
||||
stdscan.h tokens.h version.h
|
||||
sync.$(O): sync.c compiler.h nasmlib.h sync.h
|
||||
|
33
assemble.c
33
assemble.c
@ -116,8 +116,7 @@
|
||||
#include "assemble.h"
|
||||
#include "insns.h"
|
||||
#include "preproc.h"
|
||||
#include "regflags.c"
|
||||
#include "regvals.c"
|
||||
#include "tables.h"
|
||||
|
||||
/* Initialized to zero by the C standard */
|
||||
static const uint8_t const_zero_buf[256];
|
||||
@ -1123,7 +1122,7 @@ static int64_t calcsize(int32_t segment, int64_t offset, int bits,
|
||||
if (c <= 0177) {
|
||||
/* pick rfield from operand b */
|
||||
rflags = regflag(&ins->oprs[c & 7]);
|
||||
rfield = regvals[ins->oprs[c & 7].basereg];
|
||||
rfield = nasm_regvals[ins->oprs[c & 7].basereg];
|
||||
} else {
|
||||
rflags = 0;
|
||||
rfield = c & 7;
|
||||
@ -1585,7 +1584,7 @@ static void gencode(int32_t segment, int64_t offset, int bits,
|
||||
case 0172:
|
||||
c = *codes++;
|
||||
opx = &ins->oprs[c >> 3];
|
||||
bytes[0] = regvals[opx->basereg] << 4;
|
||||
bytes[0] = nasm_regvals[opx->basereg] << 4;
|
||||
opx = &ins->oprs[c & 7];
|
||||
if (opx->segment != NO_SEG || opx->wrt != NO_SEG) {
|
||||
errfunc(ERR_NONFATAL,
|
||||
@ -1605,7 +1604,7 @@ static void gencode(int32_t segment, int64_t offset, int bits,
|
||||
case 0173:
|
||||
c = *codes++;
|
||||
opx = &ins->oprs[c >> 4];
|
||||
bytes[0] = regvals[opx->basereg] << 4;
|
||||
bytes[0] = nasm_regvals[opx->basereg] << 4;
|
||||
bytes[0] |= c & 15;
|
||||
out(offset, segment, bytes, OUT_RAWDATA, 1, NO_SEG, NO_SEG);
|
||||
offset++;
|
||||
@ -1803,7 +1802,7 @@ static void gencode(int32_t segment, int64_t offset, int bits,
|
||||
if (c <= 0177) {
|
||||
/* pick rfield from operand b */
|
||||
rflags = regflag(&ins->oprs[c & 7]);
|
||||
rfield = regvals[ins->oprs[c & 7].basereg];
|
||||
rfield = nasm_regvals[ins->oprs[c & 7].basereg];
|
||||
} else {
|
||||
/* rfield is constant */
|
||||
rflags = 0;
|
||||
@ -1877,7 +1876,7 @@ static int32_t regflag(const operand * o)
|
||||
if (o->basereg < EXPR_REG_START || o->basereg >= REG_ENUM_LIMIT) {
|
||||
errfunc(ERR_PANIC, "invalid operand passed to regflag()");
|
||||
}
|
||||
return reg_flags[o->basereg];
|
||||
return nasm_reg_flags[o->basereg];
|
||||
}
|
||||
|
||||
static int32_t regval(const operand * o)
|
||||
@ -1885,7 +1884,7 @@ static int32_t regval(const operand * o)
|
||||
if (o->basereg < EXPR_REG_START || o->basereg >= REG_ENUM_LIMIT) {
|
||||
errfunc(ERR_PANIC, "invalid operand passed to regval()");
|
||||
}
|
||||
return regvals[o->basereg];
|
||||
return nasm_regvals[o->basereg];
|
||||
}
|
||||
|
||||
static int op_rexflags(const operand * o, int mask)
|
||||
@ -1897,8 +1896,8 @@ static int op_rexflags(const operand * o, int mask)
|
||||
errfunc(ERR_PANIC, "invalid operand passed to op_rexflags()");
|
||||
}
|
||||
|
||||
flags = reg_flags[o->basereg];
|
||||
val = regvals[o->basereg];
|
||||
flags = nasm_reg_flags[o->basereg];
|
||||
val = nasm_regvals[o->basereg];
|
||||
|
||||
return rexflags(val, flags, mask);
|
||||
}
|
||||
@ -2113,7 +2112,7 @@ static ea *process_ea(operand * input, ea * output, int bits,
|
||||
|| input->basereg >= REG_ENUM_LIMIT)
|
||||
return NULL;
|
||||
f = regflag(input);
|
||||
i = regvals[input->basereg];
|
||||
i = nasm_regvals[input->basereg];
|
||||
|
||||
if (REG_EA & ~f)
|
||||
return NULL; /* Invalid EA register */
|
||||
@ -2155,16 +2154,16 @@ static ea *process_ea(operand * input, ea * output, int bits,
|
||||
i = -1; /* make this easy, at least */
|
||||
|
||||
if (i >= EXPR_REG_START && i < REG_ENUM_LIMIT) {
|
||||
it = regvals[i];
|
||||
ix = reg_flags[i];
|
||||
it = nasm_regvals[i];
|
||||
ix = nasm_reg_flags[i];
|
||||
} else {
|
||||
it = -1;
|
||||
ix = 0;
|
||||
}
|
||||
|
||||
if (b >= EXPR_REG_START && b < REG_ENUM_LIMIT) {
|
||||
bt = regvals[b];
|
||||
bx = reg_flags[b];
|
||||
bt = nasm_regvals[b];
|
||||
bx = nasm_reg_flags[b];
|
||||
} else {
|
||||
bt = -1;
|
||||
bx = 0;
|
||||
@ -2437,14 +2436,14 @@ static void add_asp(insn *ins, int addrbits)
|
||||
|| ins->oprs[j].indexreg >= REG_ENUM_LIMIT)
|
||||
i = 0;
|
||||
else
|
||||
i = reg_flags[ins->oprs[j].indexreg];
|
||||
i = nasm_reg_flags[ins->oprs[j].indexreg];
|
||||
|
||||
/* Verify as Register */
|
||||
if (ins->oprs[j].basereg < EXPR_REG_START
|
||||
|| ins->oprs[j].basereg >= REG_ENUM_LIMIT)
|
||||
b = 0;
|
||||
else
|
||||
b = reg_flags[ins->oprs[j].basereg];
|
||||
b = nasm_reg_flags[ins->oprs[j].basereg];
|
||||
|
||||
if (ins->oprs[j].scale == 0)
|
||||
i = 0;
|
||||
|
86
disasm.c
86
disasm.c
@ -19,8 +19,8 @@
|
||||
#include "disasm.h"
|
||||
#include "sync.h"
|
||||
#include "insns.h"
|
||||
|
||||
#include "names.c"
|
||||
#include "tables.h"
|
||||
#include "regdis.h"
|
||||
|
||||
/*
|
||||
* Flags that go into the `segment' field of `insn' structures
|
||||
@ -36,8 +36,6 @@
|
||||
#define SEG_SIGNED 128
|
||||
#define SEG_64BIT 256
|
||||
|
||||
#include "regdis.c"
|
||||
|
||||
/*
|
||||
* Prefix information
|
||||
*/
|
||||
@ -120,11 +118,11 @@ static enum reg_enum whichreg(int32_t regflags, int regval, int rex)
|
||||
return (regval == 1) ? R_CS : 0;
|
||||
if (!(REG_DESS & ~regflags))
|
||||
return (regval == 0 || regval == 2
|
||||
|| regval == 3 ? rd_sreg[regval] : 0);
|
||||
|| regval == 3 ? nasm_rd_sreg[regval] : 0);
|
||||
if (!(REG_FSGS & ~regflags))
|
||||
return (regval == 4 || regval == 5 ? rd_sreg[regval] : 0);
|
||||
return (regval == 4 || regval == 5 ? nasm_rd_sreg[regval] : 0);
|
||||
if (!(REG_SEG67 & ~regflags))
|
||||
return (regval == 6 || regval == 7 ? rd_sreg[regval] : 0);
|
||||
return (regval == 6 || regval == 7 ? nasm_rd_sreg[regval] : 0);
|
||||
|
||||
/* All the entries below look up regval in an 16-entry array */
|
||||
if (regval < 0 || regval > 15)
|
||||
@ -132,48 +130,39 @@ static enum reg_enum whichreg(int32_t regflags, int regval, int rex)
|
||||
|
||||
if (!(REG8 & ~regflags)) {
|
||||
if (rex & REX_P)
|
||||
return rd_reg8_rex[regval];
|
||||
return nasm_rd_reg8_rex[regval];
|
||||
else
|
||||
return rd_reg8[regval];
|
||||
return nasm_rd_reg8[regval];
|
||||
}
|
||||
if (!(REG16 & ~regflags))
|
||||
return rd_reg16[regval];
|
||||
return nasm_rd_reg16[regval];
|
||||
if (!(REG32 & ~regflags))
|
||||
return rd_reg32[regval];
|
||||
return nasm_rd_reg32[regval];
|
||||
if (!(REG64 & ~regflags))
|
||||
return rd_reg64[regval];
|
||||
return nasm_rd_reg64[regval];
|
||||
if (!(REG_SREG & ~regflags))
|
||||
return rd_sreg[regval & 7]; /* Ignore REX */
|
||||
return nasm_rd_sreg[regval & 7]; /* Ignore REX */
|
||||
if (!(REG_CREG & ~regflags))
|
||||
return rd_creg[regval];
|
||||
return nasm_rd_creg[regval];
|
||||
if (!(REG_DREG & ~regflags))
|
||||
return rd_dreg[regval];
|
||||
return nasm_rd_dreg[regval];
|
||||
if (!(REG_TREG & ~regflags)) {
|
||||
if (rex & REX_P)
|
||||
return 0; /* TR registers are ill-defined with rex */
|
||||
return rd_treg[regval];
|
||||
return nasm_rd_treg[regval];
|
||||
}
|
||||
if (!(FPUREG & ~regflags))
|
||||
return rd_fpureg[regval & 7]; /* Ignore REX */
|
||||
return nasm_rd_fpureg[regval & 7]; /* Ignore REX */
|
||||
if (!(MMXREG & ~regflags))
|
||||
return rd_mmxreg[regval & 7]; /* Ignore REX */
|
||||
return nasm_rd_mmxreg[regval & 7]; /* Ignore REX */
|
||||
if (!(XMMREG & ~regflags))
|
||||
return rd_xmmreg[regval];
|
||||
return nasm_rd_xmmreg[regval];
|
||||
if (!(YMMREG & ~regflags))
|
||||
return rd_ymmreg[regval];
|
||||
return nasm_rd_ymmreg[regval];
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const char *whichcond(int condval)
|
||||
{
|
||||
static int conds[] = {
|
||||
C_O, C_NO, C_C, C_NC, C_Z, C_NZ, C_NA, C_A,
|
||||
C_S, C_NS, C_PE, C_PO, C_L, C_NL, C_NG, C_G
|
||||
};
|
||||
return conditions[conds[condval]];
|
||||
}
|
||||
|
||||
/*
|
||||
* Process a DREX suffix
|
||||
*/
|
||||
@ -301,9 +290,9 @@ static uint8_t *do_ea(uint8_t *data, int modrm, int asize,
|
||||
op->indexreg = -1;
|
||||
|
||||
if (a64)
|
||||
op->basereg = rd_reg64[rm | ((rex & REX_B) ? 8 : 0)];
|
||||
op->basereg = nasm_rd_reg64[rm | ((rex & REX_B) ? 8 : 0)];
|
||||
else
|
||||
op->basereg = rd_reg32[rm | ((rex & REX_B) ? 8 : 0)];
|
||||
op->basereg = nasm_rd_reg32[rm | ((rex & REX_B) ? 8 : 0)];
|
||||
|
||||
if (rm == 5 && mod == 0) {
|
||||
if (segsize == 64) {
|
||||
@ -329,17 +318,17 @@ static uint8_t *do_ea(uint8_t *data, int modrm, int asize,
|
||||
if (index == 4)
|
||||
op->indexreg = -1; /* ESP/RSP/R12 cannot be an index */
|
||||
else if (a64)
|
||||
op->indexreg = rd_reg64[index | ((rex & REX_X) ? 8 : 0)];
|
||||
op->indexreg = nasm_rd_reg64[index | ((rex & REX_X) ? 8 : 0)];
|
||||
else
|
||||
op->indexreg = rd_reg32[index | ((rex & REX_X) ? 8 : 0)];
|
||||
op->indexreg = nasm_rd_reg32[index | ((rex & REX_X) ? 8 : 0)];
|
||||
|
||||
if (base == 5 && mod == 0) {
|
||||
op->basereg = -1;
|
||||
mod = 2; /* Fake disp32 */
|
||||
} else if (a64)
|
||||
op->basereg = rd_reg64[base | ((rex & REX_B) ? 8 : 0)];
|
||||
op->basereg = nasm_rd_reg64[base | ((rex & REX_B) ? 8 : 0)];
|
||||
else
|
||||
op->basereg = rd_reg32[base | ((rex & REX_B) ? 8 : 0)];
|
||||
op->basereg = nasm_rd_reg32[base | ((rex & REX_B) ? 8 : 0)];
|
||||
|
||||
if (segsize == 16)
|
||||
op->disp_size = 32;
|
||||
@ -975,6 +964,12 @@ static int matches(const struct itemplate *t, uint8_t *data,
|
||||
return data - origdata;
|
||||
}
|
||||
|
||||
/* Condition names for disassembly, sorted by x86 code */
|
||||
static const char * const condition_name[16] = {
|
||||
"o", "no", "c", "nc", "z", "nz", "na", "a",
|
||||
"s", "ns", "pe", "po", "l", "nl", "ng", "g"
|
||||
};
|
||||
|
||||
int32_t disasm(uint8_t *data, char *output, int outbufsize, int segsize,
|
||||
int32_t offset, int autosync, uint32_t prefer)
|
||||
{
|
||||
@ -1213,17 +1208,18 @@ int32_t disasm(uint8_t *data, char *output, int outbufsize, int segsize,
|
||||
break;
|
||||
}
|
||||
|
||||
for (i = 0; i < (int)elements(ico); i++)
|
||||
if ((*p)->opcode == ico[i]) {
|
||||
for (i = 0; i < NCOND_OPCODES; i++)
|
||||
if ((*p)->opcode == nasm_cond_insn_opcodes[i]) {
|
||||
slen +=
|
||||
snprintf(output + slen, outbufsize - slen, "%s%s", icn[i],
|
||||
whichcond(ins.condition));
|
||||
snprintf(output + slen, outbufsize - slen, "%s%s",
|
||||
nasm_cond_insn_names[i],
|
||||
condition_name[ins.condition]);
|
||||
break;
|
||||
}
|
||||
if (i >= (int)elements(ico))
|
||||
if (i >= NCOND_OPCODES)
|
||||
slen +=
|
||||
snprintf(output + slen, outbufsize - slen, "%s",
|
||||
insn_names[(*p)->opcode]);
|
||||
nasm_insn_names[(*p)->opcode]);
|
||||
colon = false;
|
||||
length += data - origdata; /* fix up for prefixes */
|
||||
for (i = 0; i < (*p)->operands; i++) {
|
||||
@ -1268,7 +1264,7 @@ int32_t disasm(uint8_t *data, char *output, int outbufsize, int segsize,
|
||||
if (t & TO)
|
||||
slen += snprintf(output + slen, outbufsize - slen, "to ");
|
||||
slen += snprintf(output + slen, outbufsize - slen, "%s",
|
||||
reg_names[reg - EXPR_REG_START]);
|
||||
nasm_reg_names[reg-EXPR_REG_START]);
|
||||
} else if (!(UNITY & ~t)) {
|
||||
output[slen++] = '1';
|
||||
} else if (t & IMMEDIATE) {
|
||||
@ -1356,16 +1352,14 @@ int32_t disasm(uint8_t *data, char *output, int outbufsize, int segsize,
|
||||
}
|
||||
if (o->basereg != -1) {
|
||||
slen += snprintf(output + slen, outbufsize - slen, "%s",
|
||||
reg_names[(o->basereg -
|
||||
EXPR_REG_START)]);
|
||||
nasm_reg_names[(o->basereg-EXPR_REG_START)]);
|
||||
started = true;
|
||||
}
|
||||
if (o->indexreg != -1) {
|
||||
if (started)
|
||||
output[slen++] = '+';
|
||||
slen += snprintf(output + slen, outbufsize - slen, "%s",
|
||||
reg_names[(o->indexreg -
|
||||
EXPR_REG_START)]);
|
||||
nasm_reg_names[(o->indexreg-EXPR_REG_START)]);
|
||||
if (o->scale > 1)
|
||||
slen +=
|
||||
snprintf(output + slen, outbufsize - slen, "*%d",
|
||||
|
10
insns.pl
10
insns.pl
@ -231,6 +231,7 @@ if ( !defined($output) || $output eq 'i' ) {
|
||||
print I "\tI_none = -1\n";
|
||||
print I "\n};\n\n";
|
||||
print I "#define MAX_INSLEN ", $maxlen, "\n\n";
|
||||
print I "#define NCOND_OPCODES ", scalar @opcodes_cc, "\n\n";
|
||||
print I "#endif /* NASM_INSNSI_H */\n";
|
||||
|
||||
close I;
|
||||
@ -243,9 +244,9 @@ if ( !defined($output) || $output eq 'n' ) {
|
||||
|
||||
print N "/* This file is auto-generated from insns.dat by insns.pl" .
|
||||
" - don't edit it */\n\n";
|
||||
print N "/* This file in included by names.c */\n\n";
|
||||
print N "#include \"tables.h\"\n\n";
|
||||
|
||||
print N "static const char * const insn_names[] = {";
|
||||
print N "const char * const nasm_insn_names[] = {";
|
||||
$first = 1;
|
||||
foreach $i (@opcodes) {
|
||||
print N "," if ( !$first );
|
||||
@ -256,7 +257,7 @@ if ( !defined($output) || $output eq 'n' ) {
|
||||
}
|
||||
print N "\n};\n\n";
|
||||
print N "/* Conditional instructions */\n";
|
||||
print N "static const char *icn[] = {";
|
||||
print N "const char * const nasm_cond_insn_names[] = {";
|
||||
$first = 1;
|
||||
foreach $i (@opcodes_cc) {
|
||||
print N "," if ( !$first );
|
||||
@ -269,7 +270,7 @@ if ( !defined($output) || $output eq 'n' ) {
|
||||
|
||||
print N "\n};\n\n";
|
||||
print N "/* and the corresponding opcodes */\n";
|
||||
print N "static const enum opcode ico[] = {";
|
||||
print N "const enum opcode nasm_cond_insn_opcodes[] = {";
|
||||
$first = 1;
|
||||
foreach $i (@opcodes_cc) {
|
||||
print N "," if ( !$first );
|
||||
@ -278,7 +279,6 @@ if ( !defined($output) || $output eq 'n' ) {
|
||||
}
|
||||
|
||||
print N "\n};\n";
|
||||
|
||||
close N;
|
||||
}
|
||||
|
||||
|
@ -21,9 +21,9 @@ open(OUTPUT,">macros.c") or die "unable to open macros.c\n";
|
||||
print OUTPUT "/* This file auto-generated from standard.mac by macros.pl" .
|
||||
" - don't edit it */\n";
|
||||
print OUTPUT "\n";
|
||||
print OUTPUT "#include \"compiler.h\"\n";
|
||||
print OUTPUT "#include \"tables.h\"\n";
|
||||
print OUTPUT "\n";
|
||||
print OUTPUT "static const char * const stdmac[] = {\n";
|
||||
print OUTPUT "const char * const nasm_stdmac[] = {\n";
|
||||
|
||||
foreach $fname ( @ARGV ) {
|
||||
open(INPUT,$fname) or die "unable to open $fname\n";
|
||||
@ -46,7 +46,8 @@ foreach $fname ( @ARGV ) {
|
||||
}
|
||||
close(INPUT);
|
||||
}
|
||||
print OUTPUT " NULL\n};\n";
|
||||
print OUTPUT " NULL\n};\n\n";
|
||||
$tasm_count = $index unless ( defined($tasm_count) );
|
||||
print OUTPUT "#define TASM_MACRO_COUNT $tasm_count\n";
|
||||
print OUTPUT "const char * const * nasm_stdmac_after_tasm = ",
|
||||
"&nasm_stdmac[$tasm_count];\n";
|
||||
close(OUTPUT);
|
||||
|
20
names.c
20
names.c
@ -1,20 +0,0 @@
|
||||
/* names.c included source file defining instruction and register
|
||||
* names for the Netwide [Dis]Assembler
|
||||
*
|
||||
* The Netwide Assembler is copyright (C) 1996 Simon Tatham and
|
||||
* Julian Hall. All rights reserved. The software is
|
||||
* redistributable under the license given in the file "LICENSE"
|
||||
* distributed in the NASM archive.
|
||||
*/
|
||||
|
||||
static const char *conditions[] = { /* condition code names */
|
||||
"a", "ae", "b", "be", "c", "e", "g", "ge", "l", "le", "na", "nae",
|
||||
"nb", "nbe", "nc", "ne", "ng", "nge", "nl", "nle", "no", "np",
|
||||
"ns", "nz", "o", "p", "pe", "po", "s", "z"
|
||||
};
|
||||
|
||||
/* Register names automatically generated from regs.dat */
|
||||
#include "regs.c"
|
||||
|
||||
/* Instruction names automatically generated from insns.dat */
|
||||
#include "insnsn.c"
|
13
parser.c
13
parser.c
@ -23,13 +23,12 @@
|
||||
#include "stdscan.h"
|
||||
#include "parser.h"
|
||||
#include "float.h"
|
||||
#include "tables.h"
|
||||
|
||||
extern int in_abs_seg; /* ABSOLUTE segment flag */
|
||||
extern int32_t abs_seg; /* ABSOLUTE segment */
|
||||
extern int32_t abs_offset; /* ABSOLUTE segment offset */
|
||||
|
||||
#include "regflags.c" /* List of register flags */
|
||||
|
||||
static int is_comma_next(void);
|
||||
|
||||
static int i;
|
||||
@ -192,7 +191,7 @@ restart_parse:
|
||||
return result;
|
||||
}
|
||||
if (i != TOKEN_ID && i != TOKEN_INSN && i != TOKEN_PREFIX &&
|
||||
(i != TOKEN_REG || (REG_SREG & ~reg_flags[tokval.t_integer]))) {
|
||||
(i != TOKEN_REG || (REG_SREG & ~nasm_reg_flags[tokval.t_integer]))) {
|
||||
error(ERR_NONFATAL, "label or instruction expected"
|
||||
" at start of line");
|
||||
result->opcode = -1;
|
||||
@ -233,7 +232,7 @@ restart_parse:
|
||||
result->times = 1L;
|
||||
|
||||
while (i == TOKEN_PREFIX ||
|
||||
(i == TOKEN_REG && !(REG_SREG & ~reg_flags[tokval.t_integer])))
|
||||
(i == TOKEN_REG && !(REG_SREG & ~nasm_reg_flags[tokval.t_integer])))
|
||||
{
|
||||
first = false;
|
||||
|
||||
@ -621,14 +620,14 @@ restart_parse:
|
||||
* Process the segment override.
|
||||
*/
|
||||
if (value[1].type != 0 || value->value != 1 ||
|
||||
REG_SREG & ~reg_flags[value->type])
|
||||
REG_SREG & ~nasm_reg_flags[value->type])
|
||||
error(ERR_NONFATAL, "invalid segment override");
|
||||
else if (result->prefixes[PPS_SEG])
|
||||
error(ERR_NONFATAL,
|
||||
"instruction has conflicting segment overrides");
|
||||
else {
|
||||
result->prefixes[PPS_SEG] = value->type;
|
||||
if (!(REG_FSGS & ~reg_flags[value->type]))
|
||||
if (!(REG_FSGS & ~nasm_reg_flags[value->type]))
|
||||
result->oprs[operand].eaflags |= EAF_FSGS;
|
||||
}
|
||||
|
||||
@ -846,7 +845,7 @@ restart_parse:
|
||||
|
||||
result->oprs[operand].type &= TO;
|
||||
result->oprs[operand].type |= REGISTER;
|
||||
result->oprs[operand].type |= reg_flags[value->type];
|
||||
result->oprs[operand].type |= nasm_reg_flags[value->type];
|
||||
result->oprs[operand].basereg = value->type;
|
||||
|
||||
if (rs && (result->oprs[operand].type & SIZE_MASK) != rs)
|
||||
|
10
preproc.c
10
preproc.c
@ -50,6 +50,7 @@
|
||||
#include "hashtbl.h"
|
||||
#include "stdscan.h"
|
||||
#include "tokens.h"
|
||||
#include "tables.h"
|
||||
|
||||
typedef struct SMacro SMacro;
|
||||
typedef struct MMacro MMacro;
|
||||
@ -352,10 +353,9 @@ static MMacro *defining;
|
||||
#define PARAM_DELTA 16
|
||||
|
||||
/*
|
||||
* The standard macro set: defined as `static char *stdmac[]'. Also
|
||||
* gives our position in the macro set, when we're processing it.
|
||||
* The standard macro set: defined in macros.c in the array nasm_stdmac.
|
||||
* This gives our position in the macro set, when we're processing it.
|
||||
*/
|
||||
#include "macros.c"
|
||||
static const char * const *stdmacpos;
|
||||
|
||||
/*
|
||||
@ -3723,9 +3723,9 @@ pp_reset(char *file, int apass, efunc errfunc, evalfunc eval,
|
||||
init_macros();
|
||||
unique = 0;
|
||||
if (tasm_compatible_mode) {
|
||||
stdmacpos = stdmac;
|
||||
stdmacpos = nasm_stdmac;
|
||||
} else {
|
||||
stdmacpos = &stdmac[TASM_MACRO_COUNT];
|
||||
stdmacpos = nasm_stdmac_after_tasm;
|
||||
}
|
||||
any_extrastdmac = (extrastdmac != NULL);
|
||||
list = listgen;
|
||||
|
28
regs.pl
28
regs.pl
@ -102,8 +102,8 @@ if ( $fmt eq 'h' ) {
|
||||
} elsif ( $fmt eq 'c' ) {
|
||||
# Output regs.c
|
||||
print "/* automatically generated from $file - do not edit */\n\n";
|
||||
print "#include \"compiler.h\"\n\n";
|
||||
print "static const char * const reg_names[] = "; $ch = '{';
|
||||
print "#include \"tables.h\"\n\n";
|
||||
print "const char * const nasm_reg_names[] = "; $ch = '{';
|
||||
# This one has no dummy entry for 0
|
||||
foreach $reg ( sort(keys(%regs)) ) {
|
||||
print "$ch\n \"${reg}\"";
|
||||
@ -112,8 +112,10 @@ if ( $fmt eq 'h' ) {
|
||||
print "\n};\n";
|
||||
} elsif ( $fmt eq 'fc' ) {
|
||||
# Output regflags.c
|
||||
print "/* automatically generated from $file - do not edit */\n";
|
||||
print "static const int32_t reg_flags[] = {\n";
|
||||
print "/* automatically generated from $file - do not edit */\n\n";
|
||||
print "#include \"tables.h\"\n";
|
||||
print "#include \"nasm.h\"\n\n";
|
||||
print "const int32_t nasm_reg_flags[] = {\n";
|
||||
print " 0"; # Dummy entry for 0
|
||||
foreach $reg ( sort(keys(%regs)) ) {
|
||||
print ",\n ", $regs{$reg}; # Print the class of the register
|
||||
@ -121,8 +123,9 @@ if ( $fmt eq 'h' ) {
|
||||
print "\n};\n";
|
||||
} elsif ( $fmt eq 'vc' ) {
|
||||
# Output regvals.c
|
||||
print "/* automatically generated from $file - do not edit */\n";
|
||||
print "static const int regvals[] = {\n";
|
||||
print "/* automatically generated from $file - do not edit */\n\n";
|
||||
print "#include \"tables.h\"\n\n";
|
||||
print "const int nasm_regvals[] = {\n";
|
||||
print " -1"; # Dummy entry for 0
|
||||
foreach $reg ( sort(keys(%regs)) ) {
|
||||
printf ",\n %2d", $regvals{$reg}; # Print the regval of the register
|
||||
@ -130,9 +133,11 @@ if ( $fmt eq 'h' ) {
|
||||
print "\n};\n";
|
||||
} elsif ( $fmt eq 'dc' ) {
|
||||
# Output regdis.c
|
||||
print "/* automatically generated from $file - do not edit */\n";
|
||||
print "/* automatically generated from $file - do not edit */\n\n";
|
||||
print "#include \"regs.h\"\n\n";
|
||||
foreach $class ( sort(keys(%disclass)) ) {
|
||||
printf "static const enum reg_enum rd_%-8s[] = {", $class;
|
||||
printf "const enum reg_enum nasm_rd_%-8s[%d] = {\n",
|
||||
$class, scalar @{$disclass{$class}};
|
||||
@foo = @{$disclass{$class}};
|
||||
@bar = ();
|
||||
for ( $i = 0 ; $i < scalar(@foo) ; $i++ ) {
|
||||
@ -144,6 +149,13 @@ if ( $fmt eq 'h' ) {
|
||||
}
|
||||
print join(',', @bar), "};\n";
|
||||
}
|
||||
} elsif ( $fmt eq 'dh' ) {
|
||||
# Output regdis.h
|
||||
print "/* automatically generated from $file - do not edit */\n";
|
||||
foreach $class ( sort(keys(%disclass)) ) {
|
||||
printf "const enum reg_enum nasm_rd_%-8s[%d];\n",
|
||||
$class, scalar @{$disclass{$class}};
|
||||
}
|
||||
} else {
|
||||
die "$0: Unknown output format\n";
|
||||
}
|
||||
|
36
tables.h
Normal file
36
tables.h
Normal file
@ -0,0 +1,36 @@
|
||||
/*
|
||||
* tables.h
|
||||
*
|
||||
* Declarations for auto-generated tables
|
||||
*/
|
||||
|
||||
#ifndef TABLES_H
|
||||
#define TABLES_H
|
||||
|
||||
#include "compiler.h"
|
||||
#include <inttypes.h>
|
||||
#include "insnsi.h" /* For enum opcode */
|
||||
|
||||
/* --- From standard.mac via macros.pl: --- */
|
||||
|
||||
/* macros.c */
|
||||
extern const char * const nasm_stdmac[];
|
||||
extern const char * const * nasm_stdmac_after_tasm;
|
||||
|
||||
/* --- From insns.dat via insns.pl: --- */
|
||||
|
||||
/* insnsn.c */
|
||||
extern const char * const nasm_insn_names[];
|
||||
extern const char * const nasm_cond_insn_names[];
|
||||
extern const enum opcode nasm_cond_insn_opcodes[];
|
||||
|
||||
/* --- From regs.dat via regs.pl: --- */
|
||||
|
||||
/* regs.c */
|
||||
extern const char * const nasm_reg_names[];
|
||||
/* regflags.c */
|
||||
extern const int32_t nasm_reg_flags[];
|
||||
/* regvals.c */
|
||||
extern const int nasm_regvals[];
|
||||
|
||||
#endif /* TABLES_H */
|
Loading…
x
Reference in New Issue
Block a user