On Tue, 2008-12-09 at 20:39 +0000, Christophe Rhodes wrote:
> Guenther Thomsen <guenthert@...> writes:
>
> > Am I wrong to expect an "ADD" in the disassembled code below?
> > --8<--
> > CL-USER> (defun h (x)
> > (declare (type fixnum x) (optimize (safety 0)))
> > (the fixnum (+ x 3)))
> >
> > STYLE-WARNING: redefining H in DEFUN
> > H
> > CL-USER> (disassemble 'h)
> > ; 02C3D4D2: 488D5118 LEA RDX, [RCX+24] ; no-arg-parsing entry point
>
> Yes. On x86oids, fixnum adds of constants can be implemented using
> the Load Effective Address instruction. (I haven't measured recently
> to find whether or not this is faster than using ADD, but it has been
> at least at some points in the past.
>
> Best,
>
> Christophe
Ah, I see. With a variant of that function (adding 5 instead of 3, the
LEA instruction becomes "LEA RDX, [RCX+40]", the 3 bit left shift is due
to implied type information, I suppose).
Thanks
Guenther
|