summaryrefslogtreecommitdiffstats
path: root/libc/upstream-netbsd
diff options
context:
space:
mode:
authorElliott Hughes <enh@google.com>2012-10-01 14:05:08 -0700
committerGerrit Code Review <noreply-gerritcodereview@google.com>2012-10-01 14:05:09 -0700
commitcd195eba1f9235b9b9d4dda70142d927b1b9802d (patch)
tree3dc911f915d8d120089ca5afd60bb84b6d51e71e /libc/upstream-netbsd
parent5b6346f6d5dca4022fe0044dd2807c19ac596788 (diff)
parent774c7f54ff375d71106283d42779b0cc5f238f87 (diff)
downloadbionic-cd195eba1f9235b9b9d4dda70142d927b1b9802d.zip
bionic-cd195eba1f9235b9b9d4dda70142d927b1b9802d.tar.gz
bionic-cd195eba1f9235b9b9d4dda70142d927b1b9802d.tar.bz2
Merge "Upgrade to the current NetBSD rand implementation."
Diffstat (limited to 'libc/upstream-netbsd')
-rw-r--r--libc/upstream-netbsd/libc/stdlib/_rand48.c57
-rw-r--r--libc/upstream-netbsd/libc/stdlib/drand48.c32
-rw-r--r--libc/upstream-netbsd/libc/stdlib/erand48.c42
-rw-r--r--libc/upstream-netbsd/libc/stdlib/jrand48.c39
-rw-r--r--libc/upstream-netbsd/libc/stdlib/lrand48.c34
-rw-r--r--libc/upstream-netbsd/libc/stdlib/mrand48.c33
-rw-r--r--libc/upstream-netbsd/libc/stdlib/nrand48.c39
-rw-r--r--libc/upstream-netbsd/libc/stdlib/srand48.c38
8 files changed, 314 insertions, 0 deletions
diff --git a/libc/upstream-netbsd/libc/stdlib/_rand48.c b/libc/upstream-netbsd/libc/stdlib/_rand48.c
new file mode 100644
index 0000000..0468026
--- /dev/null
+++ b/libc/upstream-netbsd/libc/stdlib/_rand48.c
@@ -0,0 +1,57 @@
+/* $NetBSD: _rand48.c,v 1.7 2005/06/12 05:21:27 lukem Exp $ */
+
+/*
+ * Copyright (c) 1993 Martin Birgmeier
+ * All rights reserved.
+ *
+ * You may redistribute unmodified or modified versions of this source
+ * code provided that the above copyright notice and this and the
+ * following conditions are retained.
+ *
+ * This software is provided ``as is'', and comes with no warranties
+ * of any kind. I shall in no event be liable for anything that happens
+ * to anyone/anything when using this software.
+ */
+
+#include <sys/cdefs.h>
+#if defined(LIBC_SCCS) && !defined(lint)
+__RCSID("$NetBSD: _rand48.c,v 1.7 2005/06/12 05:21:27 lukem Exp $");
+#endif /* LIBC_SCCS and not lint */
+
+#include <assert.h>
+
+#include "rand48.h"
+
+unsigned short __rand48_seed[3] = {
+ RAND48_SEED_0,
+ RAND48_SEED_1,
+ RAND48_SEED_2
+};
+unsigned short __rand48_mult[3] = {
+ RAND48_MULT_0,
+ RAND48_MULT_1,
+ RAND48_MULT_2
+};
+unsigned short __rand48_add = RAND48_ADD;
+
+void
+__dorand48(unsigned short xseed[3])
+{
+ unsigned long accu;
+ unsigned short temp[2];
+
+ _DIAGASSERT(xseed != NULL);
+
+ accu = (unsigned long) __rand48_mult[0] * (unsigned long) xseed[0] +
+ (unsigned long) __rand48_add;
+ temp[0] = (unsigned short) accu; /* lower 16 bits */
+ accu >>= sizeof(unsigned short) * 8;
+ accu += (unsigned long) __rand48_mult[0] * (unsigned long) xseed[1] +
+ (unsigned long) __rand48_mult[1] * (unsigned long) xseed[0];
+ temp[1] = (unsigned short) accu; /* middle 16 bits */
+ accu >>= sizeof(unsigned short) * 8;
+ accu += __rand48_mult[0] * xseed[2] + __rand48_mult[1] * xseed[1] + __rand48_mult[2] * xseed[0];
+ xseed[0] = temp[0];
+ xseed[1] = temp[1];
+ xseed[2] = (unsigned short) accu;
+}
diff --git a/libc/upstream-netbsd/libc/stdlib/drand48.c b/libc/upstream-netbsd/libc/stdlib/drand48.c
new file mode 100644
index 0000000..6fba607
--- /dev/null
+++ b/libc/upstream-netbsd/libc/stdlib/drand48.c
@@ -0,0 +1,32 @@
+/* $NetBSD: drand48.c,v 1.6 2005/06/12 05:21:28 lukem Exp $ */
+
+/*
+ * Copyright (c) 1993 Martin Birgmeier
+ * All rights reserved.
+ *
+ * You may redistribute unmodified or modified versions of this source
+ * code provided that the above copyright notice and this and the
+ * following conditions are retained.
+ *
+ * This software is provided ``as is'', and comes with no warranties
+ * of any kind. I shall in no event be liable for anything that happens
+ * to anyone/anything when using this software.
+ */
+
+#include <sys/cdefs.h>
+#if defined(LIBC_SCCS) && !defined(lint)
+__RCSID("$NetBSD: drand48.c,v 1.6 2005/06/12 05:21:28 lukem Exp $");
+#endif /* LIBC_SCCS and not lint */
+
+#include "namespace.h"
+#include "rand48.h"
+
+#ifdef __weak_alias
+__weak_alias(drand48,_drand48)
+#endif
+
+double
+drand48(void)
+{
+ return erand48(__rand48_seed);
+}
diff --git a/libc/upstream-netbsd/libc/stdlib/erand48.c b/libc/upstream-netbsd/libc/stdlib/erand48.c
new file mode 100644
index 0000000..f1d8b4d
--- /dev/null
+++ b/libc/upstream-netbsd/libc/stdlib/erand48.c
@@ -0,0 +1,42 @@
+/* $NetBSD: erand48.c,v 1.9 2006/03/22 20:52:16 drochner Exp $ */
+
+/*
+ * Copyright (c) 1993 Martin Birgmeier
+ * All rights reserved.
+ *
+ * You may redistribute unmodified or modified versions of this source
+ * code provided that the above copyright notice and this and the
+ * following conditions are retained.
+ *
+ * This software is provided ``as is'', and comes with no warranties
+ * of any kind. I shall in no event be liable for anything that happens
+ * to anyone/anything when using this software.
+ */
+
+#include <sys/cdefs.h>
+#if defined(LIBC_SCCS) && !defined(lint)
+__RCSID("$NetBSD: erand48.c,v 1.9 2006/03/22 20:52:16 drochner Exp $");
+#endif /* LIBC_SCCS and not lint */
+
+#include "namespace.h"
+
+#include <assert.h>
+#include <math.h>
+
+#include "rand48.h"
+
+#ifdef __weak_alias
+__weak_alias(erand48,_erand48)
+#endif
+
+double
+erand48(unsigned short xseed[3])
+{
+
+ _DIAGASSERT(xseed != NULL);
+
+ __dorand48(xseed);
+ return ldexp((double) xseed[0], -48) +
+ ldexp((double) xseed[1], -32) +
+ ldexp((double) xseed[2], -16);
+}
diff --git a/libc/upstream-netbsd/libc/stdlib/jrand48.c b/libc/upstream-netbsd/libc/stdlib/jrand48.c
new file mode 100644
index 0000000..0ab594e
--- /dev/null
+++ b/libc/upstream-netbsd/libc/stdlib/jrand48.c
@@ -0,0 +1,39 @@
+/* $NetBSD: jrand48.c,v 1.8 2005/06/12 05:21:28 lukem Exp $ */
+
+/*
+ * Copyright (c) 1993 Martin Birgmeier
+ * All rights reserved.
+ *
+ * You may redistribute unmodified or modified versions of this source
+ * code provided that the above copyright notice and this and the
+ * following conditions are retained.
+ *
+ * This software is provided ``as is'', and comes with no warranties
+ * of any kind. I shall in no event be liable for anything that happens
+ * to anyone/anything when using this software.
+ */
+
+#include <sys/cdefs.h>
+#if defined(LIBC_SCCS) && !defined(lint)
+__RCSID("$NetBSD: jrand48.c,v 1.8 2005/06/12 05:21:28 lukem Exp $");
+#endif /* LIBC_SCCS and not lint */
+
+#include "namespace.h"
+
+#include <assert.h>
+
+#include "rand48.h"
+
+#ifdef __weak_alias
+__weak_alias(jrand48,_jrand48)
+#endif
+
+long
+jrand48(unsigned short xseed[3])
+{
+
+ _DIAGASSERT(xseed != NULL);
+
+ __dorand48(xseed);
+ return ((long) xseed[2] << 16) + (long) xseed[1];
+}
diff --git a/libc/upstream-netbsd/libc/stdlib/lrand48.c b/libc/upstream-netbsd/libc/stdlib/lrand48.c
new file mode 100644
index 0000000..78f869e
--- /dev/null
+++ b/libc/upstream-netbsd/libc/stdlib/lrand48.c
@@ -0,0 +1,34 @@
+/* $NetBSD: lrand48.c,v 1.8 2005/06/12 05:21:28 lukem Exp $ */
+
+/*
+ * Copyright (c) 1993 Martin Birgmeier
+ * All rights reserved.
+ *
+ * You may redistribute unmodified or modified versions of this source
+ * code provided that the above copyright notice and this and the
+ * following conditions are retained.
+ *
+ * This software is provided ``as is'', and comes with no warranties
+ * of any kind. I shall in no event be liable for anything that happens
+ * to anyone/anything when using this software.
+ */
+
+#include <sys/cdefs.h>
+#if defined(LIBC_SCCS) && !defined(lint)
+__RCSID("$NetBSD: lrand48.c,v 1.8 2005/06/12 05:21:28 lukem Exp $");
+#endif /* LIBC_SCCS and not lint */
+
+#include "namespace.h"
+#include "rand48.h"
+
+#ifdef __weak_alias
+__weak_alias(lrand48,_lrand48)
+#endif
+
+long
+lrand48(void)
+{
+ __dorand48(__rand48_seed);
+ return (long)((unsigned long) __rand48_seed[2] << 15) +
+ ((unsigned long) __rand48_seed[1] >> 1);
+}
diff --git a/libc/upstream-netbsd/libc/stdlib/mrand48.c b/libc/upstream-netbsd/libc/stdlib/mrand48.c
new file mode 100644
index 0000000..c787ce6
--- /dev/null
+++ b/libc/upstream-netbsd/libc/stdlib/mrand48.c
@@ -0,0 +1,33 @@
+/* $NetBSD: mrand48.c,v 1.7 2005/06/12 05:21:28 lukem Exp $ */
+
+/*
+ * Copyright (c) 1993 Martin Birgmeier
+ * All rights reserved.
+ *
+ * You may redistribute unmodified or modified versions of this source
+ * code provided that the above copyright notice and this and the
+ * following conditions are retained.
+ *
+ * This software is provided ``as is'', and comes with no warranties
+ * of any kind. I shall in no event be liable for anything that happens
+ * to anyone/anything when using this software.
+ */
+
+#include <sys/cdefs.h>
+#if defined(LIBC_SCCS) && !defined(lint)
+__RCSID("$NetBSD: mrand48.c,v 1.7 2005/06/12 05:21:28 lukem Exp $");
+#endif /* LIBC_SCCS and not lint */
+
+#include "namespace.h"
+#include "rand48.h"
+
+#ifdef __weak_alias
+__weak_alias(mrand48,_mrand48)
+#endif
+
+long
+mrand48(void)
+{
+ __dorand48(__rand48_seed);
+ return ((long) __rand48_seed[2] << 16) + (long) __rand48_seed[1];
+}
diff --git a/libc/upstream-netbsd/libc/stdlib/nrand48.c b/libc/upstream-netbsd/libc/stdlib/nrand48.c
new file mode 100644
index 0000000..fc73185
--- /dev/null
+++ b/libc/upstream-netbsd/libc/stdlib/nrand48.c
@@ -0,0 +1,39 @@
+/* $NetBSD: nrand48.c,v 1.9 2005/06/12 05:21:28 lukem Exp $ */
+
+/*
+ * Copyright (c) 1993 Martin Birgmeier
+ * All rights reserved.
+ *
+ * You may redistribute unmodified or modified versions of this source
+ * code provided that the above copyright notice and this and the
+ * following conditions are retained.
+ *
+ * This software is provided ``as is'', and comes with no warranties
+ * of any kind. I shall in no event be liable for anything that happens
+ * to anyone/anything when using this software.
+ */
+
+#include <sys/cdefs.h>
+#if defined(LIBC_SCCS) && !defined(lint)
+__RCSID("$NetBSD: nrand48.c,v 1.9 2005/06/12 05:21:28 lukem Exp $");
+#endif /* LIBC_SCCS and not lint */
+
+#include "namespace.h"
+
+#include <assert.h>
+
+#include "rand48.h"
+
+#ifdef __weak_alias
+__weak_alias(nrand48,_nrand48)
+#endif
+
+long
+nrand48(unsigned short xseed[3])
+{
+ _DIAGASSERT(xseed != NULL);
+
+ __dorand48(xseed);
+ return (long)((unsigned long) xseed[2] << 15) +
+ ((unsigned long) xseed[1] >> 1);
+}
diff --git a/libc/upstream-netbsd/libc/stdlib/srand48.c b/libc/upstream-netbsd/libc/stdlib/srand48.c
new file mode 100644
index 0000000..a9673fe
--- /dev/null
+++ b/libc/upstream-netbsd/libc/stdlib/srand48.c
@@ -0,0 +1,38 @@
+/* $NetBSD: srand48.c,v 1.7 2005/06/12 05:21:28 lukem Exp $ */
+
+/*
+ * Copyright (c) 1993 Martin Birgmeier
+ * All rights reserved.
+ *
+ * You may redistribute unmodified or modified versions of this source
+ * code provided that the above copyright notice and this and the
+ * following conditions are retained.
+ *
+ * This software is provided ``as is'', and comes with no warranties
+ * of any kind. I shall in no event be liable for anything that happens
+ * to anyone/anything when using this software.
+ */
+
+#include <sys/cdefs.h>
+#if defined(LIBC_SCCS) && !defined(lint)
+__RCSID("$NetBSD: srand48.c,v 1.7 2005/06/12 05:21:28 lukem Exp $");
+#endif /* LIBC_SCCS and not lint */
+
+#include "namespace.h"
+#include "rand48.h"
+
+#ifdef __weak_alias
+__weak_alias(srand48,_srand48)
+#endif
+
+void
+srand48(long seed)
+{
+ __rand48_seed[0] = RAND48_SEED_0;
+ __rand48_seed[1] = (unsigned short) seed;
+ __rand48_seed[2] = (unsigned short) ((unsigned long)seed >> 16);
+ __rand48_mult[0] = RAND48_MULT_0;
+ __rand48_mult[1] = RAND48_MULT_1;
+ __rand48_mult[2] = RAND48_MULT_2;
+ __rand48_add = RAND48_ADD;
+}