diff options
author | Elliott Hughes <enh@google.com> | 2012-10-01 14:05:08 -0700 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2012-10-01 14:05:09 -0700 |
commit | cd195eba1f9235b9b9d4dda70142d927b1b9802d (patch) | |
tree | 3dc911f915d8d120089ca5afd60bb84b6d51e71e /libc/upstream-netbsd | |
parent | 5b6346f6d5dca4022fe0044dd2807c19ac596788 (diff) | |
parent | 774c7f54ff375d71106283d42779b0cc5f238f87 (diff) | |
download | bionic-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.c | 57 | ||||
-rw-r--r-- | libc/upstream-netbsd/libc/stdlib/drand48.c | 32 | ||||
-rw-r--r-- | libc/upstream-netbsd/libc/stdlib/erand48.c | 42 | ||||
-rw-r--r-- | libc/upstream-netbsd/libc/stdlib/jrand48.c | 39 | ||||
-rw-r--r-- | libc/upstream-netbsd/libc/stdlib/lrand48.c | 34 | ||||
-rw-r--r-- | libc/upstream-netbsd/libc/stdlib/mrand48.c | 33 | ||||
-rw-r--r-- | libc/upstream-netbsd/libc/stdlib/nrand48.c | 39 | ||||
-rw-r--r-- | libc/upstream-netbsd/libc/stdlib/srand48.c | 38 |
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; +} |