1.0.15.16: New modular arithmetic representation decision
authorChristophe Rhodes <csr21@cantab.net>
Fri, 7 Mar 2008 12:26:37 +0000 (12:26 +0000)
committerChristophe Rhodes <csr21@cantab.net>
Fri, 7 Mar 2008 12:26:37 +0000 (12:26 +0000)
commit1907ad030ca773162bcd9ff90fdc485a035591f4
treea3c6721f47ff97d7657d08e7a5875ee1963dcfd0
parent1a19da9ff50a45962fc2cf42c7a241a2ce97a364
1.0.15.16: New modular arithmetic representation decision
Prefers any exactly-matching modular implementation, then tagged
if possible, then untagged.  Should make code of the form
          (logand xxx most-positive-fixnum)
more tolerable.

Also includes better lognot/fixnum implementation on all
platforms.

Squashed commit of the following:

commit 81776d9aab531db20711320ecea920453e058cef
Author: Christophe Rhodes <csr21@cantab.net>
Date:   Fri Mar 7 04:54:03 2008 -0700

    Fix lognot for fixnums on alpha.

commit 27ce80579851bf9227d7d1121cf1554dc383049d
Author: SBCL devs <sbcl-dev@aleph.math.ualberta.ca>
Date:   Thu Mar 6 15:02:03 2008 -0700

    New modular arithmetic ported to alpha

    (as yet untested beyond make-genesis-2: lognot/fixnum is buggy)

commit d6ae6339374983ae874d85f3c52103c77ccad222
Author: Christophe Rhodes <csr21@localhost.localdomain>
Date:   Fri Jan 11 17:38:19 2008 +0000

    New modular arithmetic ported to mips.

    Tested by Thiemo Seufer.

commit 50e2e51d25bb3d3997e4b884b7a15f7ba1992391
Author: Christophe Rhodes <csr21@localhost.localdomain>
Date:   Fri Jan 11 17:37:41 2008 +0000

    Make find-modular-class get signed and unsigned the right way round.

    As it happened, this all worked by accident anyway, because the only
    other user of the *foo-modular-class* specials didn't rely on the
    separation between the classes, but instead used other data.  Hmm...

    (Noticed by Nikodemus Siivola)

commit d3de3d27b212999672644d8a4fccfce9676dbf4f
Author: Christophe Rhodes <csr21@zeus.jesus.cam.ac.uk>
Date:   Tue Jan 1 14:25:33 2008 +0000

    New modular arithmetic ported to sparc.

    As with ppc, the signed modular arithmetic is not terribly useful, as
    only good functions have been implemented (so no +, -, * and ash)

commit e99c204ab165139f4c8f8aacb59d4a825b90b7d1
Author: Christophe Rhodes <mas01cr@gibbons.doc.gold.ac.uk>
Date:   Mon Dec 31 18:15:41 2007 +0000

    Fix for fixnum LOGNOT on PPC

    Use subfic res, x, -4 rather than xori res, x, -4 -- xori's immediate
    argument is not sign-extended.

    (Thanks to Andy Hefner for the idea to use subfic rather than xori+xoris)

commit db8ffb719750c8bc655519b03c2081cc3b8d0b2e
Author: Christophe Rhodes <mas01cr@gibbons.doc.gold.ac.uk>
Date:   Mon Dec 31 18:13:21 2007 +0000

    New modular arithmetic ported to ppc.

    Simple modifications only.  It remains for someone to add signed modular
    definitions of +, -, * and so on for this to become useful on ppc.

commit 5c7562fc1e2a96a81d9bc32fb77ad70ed1794e6e
Author: Christophe Rhodes <crhodes@gibbons.doc.gold.ac.uk>
Date:   Mon Dec 31 10:12:26 2007 +0000

    New modular arithmetic choice for x86-64

    Simply adapt x86-64/arith.lisp by

    * removing logxor implementation (as it's now :good)
    * adapting %LEA implementation

commit 39054fae6e5a2e55856a506ad497978adcbbd6c2
Author: Christophe Rhodes <csr21@omega.localdomain>
Date:   Sun Dec 30 21:50:16 2007 +0000

    Better fixnum LOGNOT implementations.

    Apparently inherited from cmucl, our fixnum and signed LOGNOT VOPs had
    generator costs that preferred the signed representation over the tagged.
    Fix this (on all backends; tested only on x86)

commit 6eee19de7a49762ea2f3bbfe89d9ea1b0dcee47f
Author: Christophe Rhodes <csr21@omega.localdomain>
Date:   Sun Dec 30 21:29:39 2007 +0000

    Better signed modular arithmetic.

    All the LOGFOO functions are :good modular functions for signed
    modular arithmetic.

    LOGXOR is a :good modular function for untagged unsigned modular
    arithmetic.

commit 32961ecb51bcfea655f985d1f774a8fc46bd155b
Author: Christophe Rhodes <csr21@omega.localdomain>
Date:   Sun Dec 30 19:30:57 2007 +0000

    Split untagged modular class into unsigned and signed variants.

    FIND-MODULAR-VERSION now takes both KIND and SIGNEDP arguments.

commit e3b88693c3721cd84d9fb4a01d624d450c120cdd
Author: Christophe Rhodes <csr21@omega.localdomain>
Date:   Sun Dec 30 17:58:49 2007 +0000

    Choice of modular version, initial commit

    Commit of approximately September vintage work, x86-only.
15 files changed:
NEWS
src/code/cross-modular.lisp
src/code/numbers.lisp
src/compiler/aliencomp.lisp
src/compiler/alpha/arith.lisp
src/compiler/generic/vm-macs.lisp
src/compiler/generic/vm-tran.lisp
src/compiler/hppa/arith.lisp
src/compiler/mips/arith.lisp
src/compiler/ppc/arith.lisp
src/compiler/sparc/arith.lisp
src/compiler/srctran.lisp
src/compiler/x86-64/arith.lisp
src/compiler/x86/arith.lisp
version.lisp-expr