try to get everything to compile correctly again
authorNathan Binkert <binkertn@umich.edu>
Tue, 14 Oct 2003 22:04:20 +0000 (18:04 -0400)
committerNathan Binkert <binkertn@umich.edu>
Tue, 14 Oct 2003 22:04:20 +0000 (18:04 -0400)
base/intmath.hh:
    Don't return -1 in FloorLog2.  That's wierd.  Assert instead.
    If you care about this, you should check for zero yourself.
    Create seprate versions for uint32_t, uint64_t, int32_t, and
    int64_t.  signed vs unsigned so that error checking can be done
    correctly.  32 vs 64 for speed.
    Finally, fix a little bug in CeilLog2 that will make it return
    the correct result for 1.
kern/tru64/tru64_events.cc:
    fix #includes

--HG--
extra : convert_revision : c47915fc417fdc194a5561949a5366ffb266e693

base/intmath.hh
kern/tru64/tru64_events.cc

index a17492728ec483910968ac76890f1476d58bafa1..ca1cce1e01b23fc4d4adb65d734cb8510f8cc34a 100644 (file)
 #ifndef __INTMATH_HH__
 #define __INTMATH_HH__
 
+#include <assert.h>
+
+#include "sim/host.hh"
+
 // Returns the prime number one less than n.
 int PrevPrime(int n);
 
@@ -68,12 +72,10 @@ IsPowerOf2(T n)
     return n != 0 && LeastSigBit(n) == n;
 }
 
-template <class T>
 inline int
-FloorLog2(T x)
+FloorLog2(uint32_t x)
 {
-    if (x == 0)
-        return -1;
+    assert(x > 0);
 
     int y = 0;
 
@@ -86,11 +88,45 @@ FloorLog2(T x)
     return y;
 }
 
+inline int
+FloorLog2(uint64_t x)
+{
+    assert(x > 0);
+
+    int y = 0;
+
+    if (x & ULL(0xffffffff00000000)) { y += 32; x >>= 32; }
+    if (x & ULL(0x00000000ffff0000)) { y += 16; x >>= 16; }
+    if (x & ULL(0x000000000000ff00)) { y +=  8; x >>=  8; }
+    if (x & ULL(0x00000000000000f0)) { y +=  4; x >>=  4; }
+    if (x & ULL(0x000000000000000c)) { y +=  2; x >>=  2; }
+    if (x & ULL(0x0000000000000002)) { y +=  1; }
+
+    return y;
+}
+
+inline int
+FloorLog2(int32_t x)
+{
+    assert(x > 0);
+    return FloorLog2(x);
+}
+
+inline int
+FloorLog2(int64_t x)
+{
+    assert(x > 0);
+    return FloorLog2(x);
+}
+
 template <class T>
 inline int
 CeilLog2(T n)
 {
-    return FloorLog2(n - 1) + 1;
+    if (n == 1)
+        return 0;
+
+    return FloorLog2(n - (T)1) + 1;
 }
 
 template <class T>
index ac25129e6446c1775772ae637a47e6e516c4fb80..3717fd9a2fbcde69dc448d642bdefbb8a233b222 100644 (file)
@@ -27,8 +27,9 @@
  */
 
 #include "cpu/exec_context.hh"
+#include "cpu/base_cpu.hh"
 #include "cpu/full_cpu/bpred.hh"
-#include "cpu/full_cpu/cpu.hh"
+#include "cpu/full_cpu/full_cpu.hh"
 #include "kern/tru64/dump_mbuf.hh"
 #include "kern/tru64/printf.hh"
 #include "kern/tru64/tru64_events.hh"