sb-disassem: Better call convention for prefilters.
commit93ac0eaba030a055ceccade34e9c2ed6cd4ba7ae
authorDouglas Katzman <dougk@google.com>
Fri, 22 Jan 2016 02:05:31 +0000 (21 21:05 -0500)
committerDouglas Katzman <dougk@google.com>
Fri, 22 Jan 2016 02:15:10 +0000 (21 21:15 -0500)
tree30c54fa7f202d2e1f4aeba5f5fa6bc7173bcd619
parent0f750f2697a4185b6bba65a085d9c8b5cc21a9d7
sb-disassem: Better call convention for prefilters.

The following changes are limited to x86[-64] based on limited
ability to test other backends (it's architecture-independent,
but the prefilter functions have to be updated).

* Don't construct and compile a new lambda expression that calls
  each prefilter for the current instruction - instead just loop
  over operands based on the instruction's metadata.

* Call each prefilter with the right number of arguments: 0, 1, >1,
  depending on how many byte specifiers correspond to the operand.
  This makes the ModR/M prefilter receive 2 separate bytes instead
  of a list, and eliminates most of the (IGNORE) declarations.

Despite the unoptimized calls of LDB in CALL-PREFILTERS, this is a
win, because bit extraction does not cons, nor do we cons arglists.
src/compiler/disassem.lisp
src/compiler/target-disassem.lisp
src/compiler/x86-64/insts.lisp
src/compiler/x86/insts.lisp