Bignum multiplication on the Alpha...
... when creating notionally unsigned 32-bit quantities from
notionally unsigned 64-bit quantities, it's quite
important to do a logical and not an arithmetic shift.
with negative last argument.
** byte specifiers with zero size and position no longer cause
an error during type derivation.
+ ** bignum multiplication on the Alpha platform now returns the
+ right answer.
planned incompatible changes in 0.8.x:
* (not done yet, but planned:) When the profiling interface settles
(:generator 6
(inst mulq x y lo)
(inst addq lo carry-in lo)
- (inst sra lo 32 hi)
+ (inst srl lo 32 hi)
(inst mskll lo 4 lo)))
(inst mulq x y lo)
(inst addq lo prev lo)
(inst addq lo carry-in lo)
- (inst sra lo 32 hi)
+ (inst srl lo 32 hi)
(inst mskll lo 4 lo)))
(define-vop (bignum-mult)
(assert (= (funcall f 1) 0))
(assert (= (funcall f most-positive-fixnum) 0))
(assert (= (funcall f -1) 0)))
+
+;;; Alpha bignum arithmetic bug:
+(assert (= (* 966082078641 419216044685) 404997107848943140073085))
;;; checkins which aren't released. (And occasionally for internal
;;; versions, especially for internal versions off the main CVS
;;; branch, it gets hairier, e.g. "0.pre7.14.flaky4.13".)
-"0.8.3.62"
+"0.8.3.63"