diff options
author | Gabe Black <gblack@eecs.umich.edu> | 2007-03-07 17:46:04 +0000 |
---|---|---|
committer | Gabe Black <gblack@eecs.umich.edu> | 2007-03-07 17:46:04 +0000 |
commit | b7ea19760ab96b70013cd0ce6f54ed6a89f0e1ca (patch) | |
tree | 53b4acf14af06c00a754db6d9e6e32e7c18c48b8 /src | |
parent | ea7bdf9f60c404761dfc568d5291c75747a2dd88 (diff) | |
download | gem5-b7ea19760ab96b70013cd0ce6f54ed6a89f0e1ca.tar.xz |
Make byteswap work correctly on Twin??_t types.
--HG--
extra : convert_revision : a8a14078d62c24e480ffa69591edfc775d1d76cc
Diffstat (limited to 'src')
-rw-r--r-- | src/mem/packet_access.hh | 25 | ||||
-rw-r--r-- | src/sim/byteswap.hh | 19 |
2 files changed, 18 insertions, 26 deletions
diff --git a/src/mem/packet_access.hh b/src/mem/packet_access.hh index 552b6dd27..d1edd00aa 100644 --- a/src/mem/packet_access.hh +++ b/src/mem/packet_access.hh @@ -41,31 +41,6 @@ // 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 diff --git a/src/sim/byteswap.hh b/src/sim/byteswap.hh index cbc0b5088..062fc4513 100644 --- a/src/sim/byteswap.hh +++ b/src/sim/byteswap.hh @@ -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);} |