summaryrefslogtreecommitdiff
path: root/src/base/random.cc
diff options
context:
space:
mode:
authorAli Saidi <saidi@eecs.umich.edu>2006-11-04 21:41:10 -0500
committerAli Saidi <saidi@eecs.umich.edu>2006-11-04 21:41:10 -0500
commitde90ae482507207566139c58911bc8e2894ad856 (patch)
tree25493eb5fddf7348aeea74b428ec25e6437638fd /src/base/random.cc
parente71ccde66369951c23eb20281c68a8cb66c4a504 (diff)
parent21cf4a46b9e9ce52266aac873aa107cad82cc847 (diff)
downloadgem5-de90ae482507207566139c58911bc8e2894ad856.tar.xz
Merge zizzer:/bk/newmem
into zeep.pool:/z/saidi/work/m5.newmem --HG-- extra : convert_revision : d7133e32cfca9f15869ee9ab7a93e3470e7d9038
Diffstat (limited to 'src/base/random.cc')
-rw-r--r--src/base/random.cc24
1 files changed, 22 insertions, 2 deletions
diff --git a/src/base/random.cc b/src/base/random.cc
index e135b55f5..82c9e3566 100644
--- a/src/base/random.cc
+++ b/src/base/random.cc
@@ -32,6 +32,10 @@
#include <cstdlib>
#include <cmath>
+#if defined(__sun__)
+#include <ieeefp.h>
+#endif
+
#include "sim/param.hh"
#include "base/random.hh"
#include "base/trace.hh"
@@ -65,12 +69,27 @@ getLong()
return mrand48();
}
+double
+m5round(double r)
+{
+#if defined(__sun__)
+ double val;
+ fp_rnd oldrnd = fpsetround(FP_RN);
+ val = rint(r);
+ fpsetround(oldrnd);
+ return val;
+#else
+ return round(r);
+#endif
+}
+
int64_t
getUniform(int64_t min, int64_t max)
{
double r;
r = drand48() * (max-min) + min;
- return (int64_t)round(r);
+
+ return (int64_t)m5round(r);
}
uint64_t
@@ -78,7 +97,8 @@ getUniformPos(uint64_t min, uint64_t max)
{
double r;
r = drand48() * (max-min) + min;
- return (uint64_t)round(r);
+
+ return (uint64_t)m5round(r);
}