From 395af2246b028691a323c1fcba35114b36efb525 Mon Sep 17 00:00:00 2001
From: Raymond Toy <toy.raymond@gmail.com>
Date: Fri, 29 Dec 2017 15:57:59 -0800
Subject: [PATCH] RANDOM should do the same as the deftransform would do.

Make RANDOM compute the value the same way as the deftransform would
do when the arg is a 32-bit integer.

The deftransform is still currently disabled for random-xoroshiro,
though.
---
 src/code/rand-xoroshiro.lisp | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/src/code/rand-xoroshiro.lisp b/src/code/rand-xoroshiro.lisp
index cfad7a392..67324ec5a 100644
--- a/src/code/rand-xoroshiro.lisp
+++ b/src/code/rand-xoroshiro.lisp
@@ -474,8 +474,11 @@
   (declare (inline %random-single-float %random-double-float))
   (cond
     ((typep arg '(integer 1 #x100000000))
-     ;; Let the compiler deftransform take care of this case.
-     (%random-integer arg state))
+     ;; Do the same thing as the deftransform would do.
+     (if (= arg (expt 2 32))
+	 (random-chunk state)
+	 (values (bignum::%multiply (random-chunk state)
+				    arg))))
     ((and (typep arg 'single-float) (> arg 0.0F0))
      (%random-single-float arg state))
     ((and (typep arg 'double-float) (> arg 0.0D0))
-- 
GitLab