[cmucl-ticket] Re: #20: Modular arith bug?
cmucl
cmucl-devel at common-lisp.net
Wed Aug 13 03:00:53 UTC 2008
#20: Modular arith bug?
---------------------+------------------------------------------------------
Reporter: rtoy | Owner: somebody
Type: defect | Status: new
Priority: major | Milestone:
Component: Core | Version: 19e
Resolution: | Keywords:
---------------------+------------------------------------------------------
Old description:
> {{{
> (defun mat3neg (tt v)
> (ldb (byte 32 0) (ash v (- tt))))
>
> (defun mat3neg-a (tt v)
> (logand #xffffffff (ash v (- tt))))
>
> (defun zot (z2)
> (declare (type (unsigned-byte 32) z2)
> (optimize speed (safety 0)))
> (mat3neg -28 z2))
>
> (defun zot-a (z2)
> (declare (type (unsigned-byte 32) z2)
> (optimize speed (safety 0)))
> (mat3neg-a -28 z2))
> }}}
>
> Compile {{{zot}}} and there are lots of compiler notes, from
> {{{mat3neg}}}. But compile {{{zot-a}}} and there's just one for boxing
> up the result.
>
> However, {{{zot}}} and {{{zot-a}}} are functionally identical, so
> {{{zot}}} and {{{zot-a}}} should produce the same code. But {{{zot}}}
> has to do a full call to {{{ash}}} and {{{two-arg-and}}}.
>
> The {{{ldb}}} must be confusing the compiler somehow.
New description:
{{{
(declaim (inline mat3neg mat3neg-a))
(defun mat3neg (tt v)
(ldb (byte 32 0) (ash v (- tt))))
(defun mat3neg-a (tt v)
(logand #xffffffff (ash v (- tt))))
(defun zot (z2)
(declare (type (unsigned-byte 32) z2)
(optimize speed (safety 0)))
(mat3neg -28 z2))
(defun zot-a (z2)
(declare (type (unsigned-byte 32) z2)
(optimize speed (safety 0)))
(mat3neg-a -28 z2))
}}}
Compile {{{zot}}} and there are lots of compiler notes, from
{{{mat3neg}}}. But compile {{{zot-a}}} and there's just one for boxing up
the result.
However, {{{zot}}} and {{{zot-a}}} are functionally identical, so
{{{zot}}} and {{{zot-a}}} should produce the same code. But {{{zot}}} has
to do a full call to {{{ash}}} and {{{two-arg-and}}}.
The {{{ldb}}} must be confusing the compiler somehow.
--
Ticket URL: <http://trac.common-lisp.net/cmucl/ticket/20>
cmucl <http://common-lisp.net/project/cmucl>
cmucl
More information about the cmucl-ticket
mailing list