From 83bc4907d4646626e8a9631250cbf402044f19bc Mon Sep 17 00:00:00 2001
From: Doug Coleman <doug.coleman@gmail.com>
Date: Wed, 7 Oct 2009 21:05:51 -0500
Subject: [PATCH] load random.sfmt by default, and use it as default
 random-generator if sse2 is present

---
 basis/random/backend/authors.txt                      |  1 +
 basis/random/backend/backend.factor                   | 10 ++++++++++
 basis/random/mersenne-twister/mersenne-twister.factor |  4 ----
 basis/random/random.factor                            |  2 +-
 basis/random/sfmt/sfmt.factor                         |  3 +++
 5 files changed, 15 insertions(+), 5 deletions(-)
 create mode 100644 basis/random/backend/authors.txt
 create mode 100644 basis/random/backend/backend.factor

diff --git a/basis/random/backend/authors.txt b/basis/random/backend/authors.txt
new file mode 100644
index 0000000000..b4bd0e7b35
--- /dev/null
+++ b/basis/random/backend/authors.txt
@@ -0,0 +1 @@
+Doug Coleman
\ No newline at end of file
diff --git a/basis/random/backend/backend.factor b/basis/random/backend/backend.factor
new file mode 100644
index 0000000000..eaed73f421
--- /dev/null
+++ b/basis/random/backend/backend.factor
@@ -0,0 +1,10 @@
+! Copyright (C) 2009 Doug Coleman.
+! See http://factorcode.org/license.txt for BSD license.
+USING: cpu.x86.features init kernel namespaces random
+random.mersenne-twister random.sfmt ;
+IN: random.backend
+
+[
+    sse2? [ default-sfmt ] [ default-mersenne-twister ] if
+    random-generator set-global
+] "bootstrap.random" add-init-hook
diff --git a/basis/random/mersenne-twister/mersenne-twister.factor b/basis/random/mersenne-twister/mersenne-twister.factor
index 51112ae980..0c1683a8bc 100644
--- a/basis/random/mersenne-twister/mersenne-twister.factor
+++ b/basis/random/mersenne-twister/mersenne-twister.factor
@@ -76,7 +76,3 @@ M: mersenne-twister random-32* ( mt -- r )
 : default-mersenne-twister ( -- mersenne-twister )
     [ 32 random-bits ] with-system-random
     <mersenne-twister> ;
-
-[
-    default-mersenne-twister random-generator set-global
-] "bootstrap.random" add-init-hook
diff --git a/basis/random/random.factor b/basis/random/random.factor
index 197c232404..06be2778e7 100755
--- a/basis/random/random.factor
+++ b/basis/random/random.factor
@@ -112,4 +112,4 @@ PRIVATE>
     { [ os unix? ] [ "random.unix" require ] }
 } cond
 
-"random.mersenne-twister" require
+"random.backend" require
diff --git a/basis/random/sfmt/sfmt.factor b/basis/random/sfmt/sfmt.factor
index 8be330ec20..28883838ce 100644
--- a/basis/random/sfmt/sfmt.factor
+++ b/basis/random/sfmt/sfmt.factor
@@ -152,3 +152,6 @@ M: sfmt seed-random ( sfmt seed -- sfmt )
     uint-4{ HEX: dfffffef HEX: ddfecb7f HEX: bffaffff HEX: bffffff6 }
     uint-4{ HEX: 1 HEX: 0 HEX: 0 HEX: 13c9e684 }
     <sfmt> ; inline
+
+: default-sfmt ( -- sfmt )
+    [ random-32 ] with-secure-random <sfmt-19937> ;