0.8.8.10:
commitcd875f8c1fb306067521330fbf84411713b7c20d
authorChristophe Rhodes <csr21@cam.ac.uk>
Mon, 1 Mar 2004 23:22:25 +0000 (1 23:22 +0000)
committerChristophe Rhodes <csr21@cam.ac.uk>
Mon, 1 Mar 2004 23:22:25 +0000 (1 23:22 +0000)
tree173c05a23e911984ac1532d6d917d88f16a78940
parenta2feba471e773f549aa575586370adb5438856f2
0.8.8.10:
MORE MICRO-OPTIMIZATION
... renumber all widetags.  (LESS BINARY-COMPATIBILITY)
... implement some smarter type tag checking on the x86.

The smarter type checking comes in several flavours.

* If we have two adjacent lowtags, in three cases out of four
  we can do "and, cmp, branch", rather than
  "cmp, branch, cmp, branch";
* If we have two lowtags that are unadjacent but differ by
  just one bit, we can likewise do "and, cmp, branch" rather
  than "cmp, branch, cmp, branch";
* If we have a contiguous range of lowtags that includes the
  most positive lowtag, we do not need to test the upper bound;
* If we have four lowtags with only two bits different, we can
  do "and, cmp, branch" rather than *four* "cmp, branch" pairs.

This change will conflict with ongoing 64-bit ports.  The
conflict is resolvable (there are enough widetags in the "array"
range (which in practice is 130 - 254; currently there are five
in this range unused (or three with long-float arrays)
src/code/early-fasl.lisp
src/compiler/generic/early-objdef.lisp
src/compiler/x86/type-vops.lisp
version.lisp-expr