summaryrefslogtreecommitdiffstats
path: root/runtime/arith.c
diff options
context:
space:
mode:
authorFrank Ch. Eigler <fche@elastic.org>2009-09-23 16:41:40 -0400
committerFrank Ch. Eigler <fche@elastic.org>2009-09-23 16:41:40 -0400
commitd098276239dd9f2e1ad031b48519a5a21779c369 (patch)
tree9b288ad5fcf9ac9b7a13f3bdc986621230d60dc2 /runtime/arith.c
parent09846ceb72c27dfe87f0b5c8d0a6296fc09bbc36 (diff)
downloadsystemtap-steved-d098276239dd9f2e1ad031b48519a5a21779c369.tar.gz
systemtap-steved-d098276239dd9f2e1ad031b48519a5a21779c369.tar.xz
systemtap-steved-d098276239dd9f2e1ad031b48519a5a21779c369.zip
PR10632: simplify randint() implementation
* tapset/random.stp (randint): Make it 1-arity (imply min=0). Document with kerneldoc. * doc/Systemtap_Tapset_Reference/tapsets.tmpl: Extract the docs. * runtime/arith.c (_stp_random_pm_u): Rename without _pm. (_stp_random_pm): Rewrite in terms of ..._u. * testsuite/random.stp: Adapt & simplify.
Diffstat (limited to 'runtime/arith.c')
-rw-r--r--runtime/arith.c34
1 files changed, 10 insertions, 24 deletions
diff --git a/runtime/arith.c b/runtime/arith.c
index 4b0e6c9e..4c818a76 100644
--- a/runtime/arith.c
+++ b/runtime/arith.c
@@ -84,48 +84,34 @@ static int64_t _stp_mod64 (const char **error, int64_t x, int64_t y)
}
-#ifndef _STP_TEST_
-/** Return a random integer between -n and n.
+/** Return a random integer between 0 and n - 1.
* @param n how far from zero to go. Make it positive but less than a million or so.
*/
-static int _stp_random_pm (int n)
+static unsigned long _stp_random_u (unsigned long n)
{
static unsigned long seed;
static int initialized_p = 0;
-
+
if (unlikely (! initialized_p)) {
seed = (unsigned long) jiffies;
initialized_p = 1;
}
-
+
/* from glibc rand man page */
seed = seed * 1103515245 + 12345;
-
- return (seed % (2*n+1)-n);
+
+ return (n == 0 ? 0 : seed % n);
}
-#endif /* _STP_TEST_ */
-#ifndef _STP_TEST_
-/** Return a random integer between 0 and n - 1.
+/** Return a random integer between -n and n.
* @param n how far from zero to go. Make it positive but less than a million or so.
*/
-static int _stp_random_pm_u (int n)
+static int _stp_random_pm (unsigned n)
{
- static unsigned long seed;
- static int initialized_p = 0;
-
- if (unlikely (! initialized_p)) {
- seed = (unsigned long) jiffies;
- initialized_p = 1;
- }
-
- /* from glibc rand man page */
- seed = seed * 1103515245 + 12345;
-
- return (seed % n);
+ return -(int)n + (int)_stp_random_u (2*n + 1);
}
-#endif /* _STP_TEST_ */
+
#if defined (__i386__) || defined (__arm__)