Make byteswap work correctly on Twin??_t types.
authorGabe Black <gblack@eecs.umich.edu>
Wed, 7 Mar 2007 17:46:04 +0000 (17:46 +0000)
committerGabe Black <gblack@eecs.umich.edu>
Wed, 7 Mar 2007 17:46:04 +0000 (17:46 +0000)
--HG--
extra : convert_revision : a8a14078d62c24e480ffa69591edfc775d1d76cc

src/mem/packet_access.hh
src/sim/byteswap.hh

index 552b6dd273d6d25885ce75ebcf83e85bf2673dfb..d1edd00aa3833ad97cf148a128a1d36c371c5ba8 100644 (file)
 // these functions and make the users do their own byte swapping since
 // the memory system does not in fact have an endianness.
 
-template<>
-inline Twin64_t
-Packet::get()
-{
-    Twin64_t d;
-    assert(staticData || dynamicData);
-    assert(sizeof(Twin64_t) <= size);
-    d.a = TheISA::gtoh(*(uint64_t*)data);
-    d.b = TheISA::gtoh(*((uint64_t*)data + 1));
-    return d;
-}
-
-template<>
-inline Twin32_t
-Packet::get()
-{
-    Twin32_t d;
-    assert(staticData || dynamicData);
-    assert(sizeof(Twin32_t) <= size);
-    d.a = TheISA::gtoh(*(uint32_t*)data);
-    d.b = TheISA::gtoh(*((uint32_t*)data + 1));
-    return d;
-}
-
-
 /** return the value of what is pointed to in the packet. */
 template <typename T>
 inline T
index cbc0b5088331971e2df2c88deaf8dabc6c7cc415..062fc45135b9c6fda56289915140017b47a52fc6 100644 (file)
@@ -37,6 +37,7 @@
 #ifndef __SIM_BYTE_SWAP_HH__
 #define __SIM_BYTE_SWAP_HH__
 
+#include "base/bigint.hh"
 #include "base/misc.hh"
 #include "sim/host.hh"
 
@@ -109,7 +110,7 @@ swap_byte16(uint16_t x)
 
 // This function lets the compiler figure out how to call the
 // swap_byte functions above for different data types.  Since the
-// sizeof() values are known at compiel time, it should inline to a
+// sizeof() values are known at compile time, it should inline to a
 // direct call to the right swap_byteNN() function.
 template <typename T>
 static inline T swap_byte(T x) {
@@ -125,6 +126,22 @@ static inline T swap_byte(T x) {
         panic("Can't byte-swap values larger than 64 bits");
 }
 
+template<>
+static inline Twin64_t swap_byte<Twin64_t>(Twin64_t x)
+{
+    x.a = swap_byte(x.a);
+    x.b = swap_byte(x.b);
+    return x;
+}
+
+template<>
+static inline Twin32_t swap_byte<Twin32_t>(Twin32_t x)
+{
+    x.a = swap_byte(x.a);
+    x.b = swap_byte(x.b);
+    return x;
+}
+
 //The conversion functions with fixed endianness on both ends don't need to
 //be in a namespace
 template <typename T> static inline T betole(T value) {return swap_byte(value);}