diff options
author | Peter Johnson <peter@tortall.net> | 2006-03-04 22:09:26 +0000 |
---|---|---|
committer | Peter Johnson <peter@tortall.net> | 2006-03-04 22:09:26 +0000 |
commit | 90a38d71b05fe4e79eab744d79ba555ff4c80986 (patch) | |
tree | 6ce8fabcedf697b50adfb859159eea4cb80b4e69 /Makefile.am | |
parent | df944f90c107976fa7cfc86fab99169d140a1aa4 (diff) | |
download | yasm-90a38d71b05fe4e79eab744d79ba555ff4c80986.tar.gz |
Rewrite x86 identifier recognition to use a minimal perfect hash table
instead of re2c-generated code. This gives identifier recognition a
significant speedup and also drastically shortens compilation time of yasm
itself. This rewrite encouraged combining instruction and prefix
recognition into one function and register and target modifier
recognition into a second function (rather than having 5 or so separate
functions).
Also created a state in the NASM parser (as was done in the GAS parser),
so instructions/prefixes are only looked for until an instruction is
recognized. This avoids search time in the instructions hash for operands.
The tool used to generate the new identifier recognition is called GAP.
Someday we might extend this to generate more code than just the perfect
hash lookup.
* tools/gap: New tool to Generate Architecture Parser (aka perfect hashes).
* phash.c, phash.h: Helper functions used by GAP-generated code.
* x86id.re: Delete. Split into..
* x86parse.gap: Contains all identifier recognition portions.
* x86id.c: Contains instruction operand tables and code and higher-level
entry points into x86parse.gap perfect hash recognizers. Chose to flow
history of x86id.re into this file.
* arch.h: Combine instruction/prefix entry points and register/target
modifier entry points.
* lc3barch.c, lc3bid.re, lc3barch.h: Update to match.
* x86arch.c, x86arch.h: Update to match.
* Makefile.am, various Makefile.inc: Update.
* POTFILES.in: Update due to numerous file changes (not just this commit).
* Mkfiles: Update. VC build files untested at the moment.
svn path=/trunk/yasm/; revision=1395
Diffstat (limited to 'Makefile.am')
-rw-r--r-- | Makefile.am | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/Makefile.am b/Makefile.am index 8e938d61..45e5dde3 100644 --- a/Makefile.am +++ b/Makefile.am @@ -67,6 +67,8 @@ EXTRA_DIST += Mkfiles/vc/libyasm/libyasm.vcproj EXTRA_DIST += Mkfiles/vc/modules/modules.vcproj EXTRA_DIST += Mkfiles/vc/re2c/re2c.vcproj EXTRA_DIST += Mkfiles/vc/re2c/run.bat +EXTRA_DIST += Mkfiles/vc/gap/gap.vcproj +EXTRA_DIST += Mkfiles/vc/gap/run.bat EXTRA_DIST += Mkfiles/vc8/yasm.sln EXTRA_DIST += Mkfiles/vc8/yasm.vcproj EXTRA_DIST += Mkfiles/vc8/config.h @@ -81,6 +83,8 @@ EXTRA_DIST += Mkfiles/vc8/libyasm/libyasm.vcproj EXTRA_DIST += Mkfiles/vc8/modules/modules.vcproj EXTRA_DIST += Mkfiles/vc8/re2c/re2c.vcproj EXTRA_DIST += Mkfiles/vc8/re2c/run.bat +EXTRA_DIST += Mkfiles/vc8/gap/gap.vcproj +EXTRA_DIST += Mkfiles/vc8/gap/run.bat # Until this gets fixed in automake DISTCLEANFILES = libyasm/stamp-h libyasm/stamp-h[0-9]* |