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