Support for FP Paired Single Operations
[gem5.git] / base / random.cc
index a6d9da6c1304a4187f20aed7203ece85e59da277..4aac14101b3ca96a9f12931d20dd1ce8f5f246a8 100644 (file)
@@ -31,6 +31,7 @@
 
 #include "sim/param.hh"
 #include "base/random.hh"
+#include "base/trace.hh"
 
 using namespace std;
 
@@ -52,15 +53,32 @@ seed(&paramContext, "seed", "seed to random number generator", 1);
 void
 RandomContext::checkParams()
 {
-    ::srandom(seed);
+    ::srand48(seed);
 }
 
 long
 getLong()
 {
-    return random();
+    return mrand48();
 }
 
+int64_t
+getUniform(int64_t min, int64_t max)
+{
+    double r;
+    r = drand48() * (max-min) + min;
+    return (int64_t)round(r);
+}
+
+uint64_t
+getUniformPos(uint64_t min, uint64_t max)
+{
+    double r;
+    r = drand48() * (max-min) + min;
+    return (uint64_t)round(r);
+}
+
+
 // idea for generating a double from erand48
 double
 getDouble()
@@ -70,8 +88,8 @@ getDouble()
         uint16_t _short[4];
     };
 
-    _long[0] = random();
-    _long[1] = random();
+    _long[0] = mrand48();
+    _long[1] = mrand48();
 
     return ldexp((double) _short[0], -48) +
         ldexp((double) _short[1], -32) +