[Openmcl-devel] Bug in integer arithmetic (AMD64)

Ron Garret ron at flownet.com
Wed Jul 20 17:31:26 UTC 2011


The analogous bug exists in ccl32 as well:

Welcome to Clozure Common Lisp Version 1.7-dev-r14832M-trunk  (DarwinX8632)!
? (let ((a 1)) (* 33554433 -1 a))
33554432

My bet is it's a bug in this assembly code:

(define-x8664-vinsn multiply-fixnums (((dest :imm))
                                      ((x :imm)
                                       (y :imm))
                                      ((unboxed :s64)))
  ((:pred =
          (:apply %hard-regspec-value x)
          (:apply %hard-regspec-value dest))
   (movq (:%q y) (:%q unboxed))
   (sarq (:$ub x8664::fixnumshift) (:%q unboxed))
   (imulq (:%q unboxed) (:%q dest)))
  ((:and (:not (:pred =
                      (:apply %hard-regspec-value x)
                      (:apply %hard-regspec-value dest)))
         (:pred =
                (:apply %hard-regspec-value y)
                (:apply %hard-regspec-value dest)))
   (movq (:%q x) (:%q unboxed))
   (sarq (:$ub x8664::fixnumshift) (:%q unboxed))
   (imulq (:%q unboxed) (:%q dest)))
  ((:and (:not (:pred =
                      (:apply %hard-regspec-value x)
                      (:apply %hard-regspec-value dest)))
         (:not (:pred =
                      (:apply %hard-regspec-value y)
                      (:apply %hard-regspec-value dest))))
   (movq (:%q y) (:%q dest))
   (movq (:%q x) (:%q unboxed))
   (sarq (:$ub x8664::fixnumshift) (:%q unboxed))
   (imulq (:%q unboxed) (:%q dest))))

But this is beyond my ability to decipher.

rg

On Jul 20, 2011, at 3:52 AM, Eric Marsden wrote:

> Surprising!
> 
> ,----
> | ? (lisp-implementation-version)
> | "Version 1.7-dev-r14890M  (LinuxX8664)"
> | ? (let ((a 1)) (* 144115188075855873 a -1))
> | 144115188075855872
> `----
> 
> -- 
> Eric Marsden
> 
> _______________________________________________
> Openmcl-devel mailing list
> Openmcl-devel at clozure.com
> http://clozure.com/mailman/listinfo/openmcl-devel




More information about the Openmcl-devel mailing list