Support for FP Paired Single Operations
[gem5.git] / base / random.hh
index 0bfed100c3d36653395b31cf45a39fe97c0e42e0..def7a4bcefaaa26343a04004a9f906718b29aeeb 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003 The Regents of The University of Michigan
+ * Copyright (c) 2003-2005 The Regents of The University of Michigan
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
 
 long getLong();
 double getDouble();
+uint64_t getUniformPos(uint64_t min, uint64_t max);
+int64_t getUniform(int64_t min, int64_t max);
 
 template <typename T>
 struct Random;
 
-struct Random<int8_t>
+template<> struct Random<int8_t>
 {
     static int8_t get()
     { return getLong() & (int8_t)-1; }
+
+    static int8_t uniform(int8_t min, int8_t max)
+    { return getUniform(min, max); }
 };
 
-struct Random<uint8_t>
+template<> struct Random<uint8_t>
 {
     static uint8_t get()
     { return getLong() & (uint8_t)-1; }
+
+    static uint8_t uniform(uint8_t min, uint8_t max)
+    { return getUniformPos(min, max); }
 };
 
-struct Random<int16_t>
+template<> struct Random<int16_t>
 {
     static int16_t get()
     { return getLong() & (int16_t)-1; }
+
+    static int16_t uniform(int16_t min, int16_t max)
+    { return getUniform(min, max); }
 };
 
-struct Random<uint16_t>
+template<> struct Random<uint16_t>
 {
     static uint16_t get()
     { return getLong() & (uint16_t)-1; }
+
+    static uint16_t uniform(uint16_t min, uint16_t max)
+    { return getUniformPos(min, max); }
 };
 
-struct Random<int32_t>
+template<> struct Random<int32_t>
 {
     static int32_t get()
     { return (int32_t)getLong(); }
+
+    static int32_t uniform(int32_t min, int32_t max)
+    { return getUniform(min, max); }
 };
 
-struct Random<uint32_t>
+template<> struct Random<uint32_t>
 {
     static uint32_t get()
     { return (uint32_t)getLong(); }
+
+    static uint32_t uniform(uint32_t min, uint32_t max)
+    { return getUniformPos(min, max); }
 };
 
-struct Random<int64_t>
+template<> struct Random<int64_t>
 {
     static int64_t get()
     { return (int64_t)getLong() << 32 || (uint64_t)getLong(); }
+
+    static int64_t uniform(int64_t min, int64_t max)
+    { return getUniform(min, max); }
 };
 
-struct Random<uint64_t>
+template<> struct Random<uint64_t>
 {
     static uint64_t get()
     { return (uint64_t)getLong() << 32 || (uint64_t)getLong(); }
+
+    static uint64_t uniform(uint64_t min, uint64_t max)
+    { return getUniformPos(min, max); }
 };
 
-struct Random<float>
+template<> struct Random<float>
 {
     static float get()
     { return getDouble(); }
 };
 
-struct Random<double>
+template<> struct Random<double>
 {
     static double get()
     { return getDouble(); }