Merge zizzer.eecs.umich.edu:/m5/Bitkeeper/m5
authorNathan Binkert <binkertn@umich.edu>
Mon, 9 Feb 2004 15:36:32 +0000 (10:36 -0500)
committerNathan Binkert <binkertn@umich.edu>
Mon, 9 Feb 2004 15:36:32 +0000 (10:36 -0500)
into zizzer.eecs.umich.edu:/.automount/ziff/z/binkertn/research/m5/memory

--HG--
extra : convert_revision : 9f385ee5b6958373a9a1bc600eb3e5e8b7987f38

arch/alpha/alpha_memory.cc
base/range.hh

index 0f9ad2cfc0bef76824c9c64b5290925e9ca503d9..00e97250f812069b923f55ace1e233b47ed2f83a 100644 (file)
@@ -90,8 +90,17 @@ AlphaTlb::checkCacheability(MemReqPtr &req)
     if (req->paddr & PA_UNCACHED_BIT) {
         if (PA_IPR_SPACE(req->paddr)) {
             // IPR memory space not implemented
-            if (!req->xc->misspeculating())
-                panic("IPR memory space not implemented! PA=%x\n", req->paddr);
+            if (!req->xc->misspeculating()) {
+                switch (req->paddr) {
+                  case 0xFFFFF00188:
+                    req->data = 0;
+                    break;
+
+                  default:
+                    panic("IPR memory space not implemented! PA=%x\n",
+                          req->paddr);
+                }
+            }
         } else {
             // mark request as uncacheable
             req->flags |= UNCACHEABLE;
index 34bd34136d376ba4ee5aa6decc4d4a3b5bd2a591..d72aa9755d971ff44dd32b1b6016ee2524d7b76c 100644 (file)
@@ -62,6 +62,10 @@ struct Range
         invalidate();
     }
 
+    Range(T first, T second)
+        : start(first), end(second)
+    {}
+
     template <class U>
     Range(const Range<U> &r)
         : start(r.start), end(r.end)
@@ -100,11 +104,18 @@ struct Range
     }
 
     void invalidate() { start = 0; end = 0; }
-    bool size() const { return end - start; }
+    T size() const { return end - start; }
     bool valid() const { return start < end; }
 };
 
-template<class T>
+template <class T>
+inline Range<T>
+make_range(T start, T end)
+{
+    return Range<T>(start, end);
+}
+
+template <class T>
 inline std::ostream &
 operator<<(std::ostream &o, const Range<T> &r)
 {
@@ -124,7 +135,7 @@ operator<<(std::ostream &o, const Range<T> &r)
  * @param range2 is a range.
  * @return if range1 and range2 are identical.
  */
-template<class T, class U>
+template <class T, class U>
 inline bool
 operator==(const Range<T> &range1, const Range<U> &range2)
 {
@@ -137,7 +148,7 @@ operator==(const Range<T> &range1, const Range<U> &range2)
  * @param range2 is a range.
  * @return if range1 and range2 are not identical.
  */
-template<class T, class U>
+template <class T, class U>
 inline bool
 operator!=(const Range<T> &range1, const Range<U> &range2)
 {
@@ -150,7 +161,7 @@ operator!=(const Range<T> &range1, const Range<U> &range2)
  * @param range2 is a range.
  * @return if range1 is less than range2 and does not overlap range1.
  */
-template<class T, class U>
+template <class T, class U>
 inline bool
 operator<(const Range<T> &range1, const Range<U> &range2)
 {
@@ -164,7 +175,7 @@ operator<(const Range<T> &range1, const Range<U> &range2)
  * @return if range1 is less than range2.  range1 may overlap range2,
  * but not extend beyond the end of range2.
  */
-template<class T, class U>
+template <class T, class U>
 inline bool
 operator<=(const Range<T> &range1, const Range<U> &range2)
 {
@@ -177,7 +188,7 @@ operator<=(const Range<T> &range1, const Range<U> &range2)
  * @param range2 is a range.
  * @return if range1 is greater than range2 and does not overlap range2.
  */
-template<class T, class U>
+template <class T, class U>
 inline bool
 operator>(const Range<T> &range1, const Range<U> &range2)
 {
@@ -191,7 +202,7 @@ operator>(const Range<T> &range1, const Range<U> &range2)
  * @return if range1 is greater than range2.  range1 may overlap range2,
  * but not extend beyond the beginning of range2.
  */
-template<class T, class U>
+template <class T, class U>
 inline bool
 operator>=(const Range<T> &range1, const Range<U> &range2)
 {
@@ -209,7 +220,7 @@ operator>=(const Range<T> &range1, const Range<U> &range2)
  * @param range range compared against.
  * @return indicates that position pos is within the range.
  */
-template<class T, class U>
+template <class T, class U>
 inline bool
 operator==(const T &pos, const Range<U> &range)
 {
@@ -222,7 +233,7 @@ operator==(const T &pos, const Range<U> &range)
  * @param range range compared against.
  * @return indicates that position pos is not within the range.
  */
-template<class T, class U>
+template <class T, class U>
 inline bool
 operator!=(const T &pos, const Range<U> &range)
 {
@@ -235,7 +246,7 @@ operator!=(const T &pos, const Range<U> &range)
  * @param range range compared against.
  * @return indicates that position pos is below the range.
  */
-template<class T, class U>
+template <class T, class U>
 inline bool
 operator<(const T &pos, const Range<U> &range)
 {
@@ -248,7 +259,7 @@ operator<(const T &pos, const Range<U> &range)
  * @param range range compared against.
  * @return indicates that position pos is below or in the range.
  */
-template<class T, class U>
+template <class T, class U>
 inline bool
 operator<=(const T &pos, const Range<U> &range)
 {
@@ -261,7 +272,7 @@ operator<=(const T &pos, const Range<U> &range)
  * @param range range compared against.
  * @return indicates that position pos is above the range.
  */
-template<class T, class U>
+template <class T, class U>
 inline bool
 operator>(const T &pos, const Range<U> &range)
 {
@@ -274,7 +285,7 @@ operator>(const T &pos, const Range<U> &range)
  * @param range range compared against.
  * @return indicates that position pos is above or in the range.
  */
-template<class T, class U>
+template <class T, class U>
 inline bool
 operator>=(const T &pos, const Range<U> &range)
 {
@@ -292,7 +303,7 @@ operator>=(const T &pos, const Range<U> &range)
  * @param pos position compared to the range.
  * @return indicates that position pos is within the range.
  */
-template<class T, class U>
+template <class T, class U>
 inline bool
 operator==(const Range<T> &range, const U &pos)
 {
@@ -305,7 +316,7 @@ operator==(const Range<T> &range, const U &pos)
  * @param pos position compared to the range.
  * @return indicates that position pos is not within the range.
  */
-template<class T, class U>
+template <class T, class U>
 inline bool
 operator!=(const Range<T> &range, const U &pos)
 {
@@ -318,7 +329,7 @@ operator!=(const Range<T> &range, const U &pos)
  * @param pos position compared to the range.
  * @return indicates that position pos is above the range.
  */
-template<class T, class U>
+template <class T, class U>
 inline bool
 operator<(const Range<T> &range, const U &pos)
 {
@@ -331,7 +342,7 @@ operator<(const Range<T> &range, const U &pos)
  * @param pos position compared to the range.
  * @return indicates that position pos is above or in the range.
  */
-template<class T, class U>
+template <class T, class U>
 inline bool
 operator<=(const Range<T> &range, const U &pos)
 {
@@ -344,7 +355,7 @@ operator<=(const Range<T> &range, const U &pos)
  * @param pos position compared to the range.
  * 'range > pos' indicates that position pos is below the range.
  */
-template<class T, class U>
+template <class T, class U>
 inline bool
 operator>(const Range<T> &range, const U &pos)
 {
@@ -357,7 +368,7 @@ operator>(const Range<T> &range, const U &pos)
  * @param pos position compared to the range.
  * 'range >= pos' indicates that position pos is below or in the range.
  */
-template<class T, class U>
+template <class T, class U>
 inline bool
 operator>=(const Range<T> &range, const U &pos)
 {