Subject: Re: Waving the lambda flag again (was: Constants and DEFCONSTANT)
From: Erik Naggum <erik@naggum.no>
Date: 1999/04/09
Newsgroups: comp.lang.lisp
Message-ID: <3132650111013059@naggum.no>

* pvaneynd@mail.inthan.be (Peter Van Eynde)
| I meant that we can waste space on the fields that require less than 8
| bits.  Instead of packing them together as close as possible.  On the x86
| at least (and on modern Alpha's I believe, but I'm no expert, I just keep
| dreaming of buying one) the
| extract-8bits-on-a-8bit-boundary-from-that-register[1] commands are
| pretty common and fast[2], so this would give a speed bonus.

  this presupposes a number of hard-to-presuppose things.  fixnums have to
  live in the same 32-bit space as addresses.  first, this frequently means
  that some least or most significant bits are used for type information,
  and this impacts the 8-bit boundaries.  second, even if you could extract
  a byte with a register operation, the same considerations as for the
  whole fixnum would apply to the result.  in practice, it's easier to
  shift.

  since we're dealing with Intels and I'm sure everybody has Pentium II by
  now :), a shift immediate is only one µop, and if you interleave the
  shifts, masks, and the register transfers or memory writes, you can fill
  the decoder and exploit the entire pipeline; you would save nothing by
  using other sequences of µops that also filled the pipeline, so there is
  nothing to be gained by handling 8-bit "shifts" specially.  I don't think
  we want to get into the details, though...

#:Erik