base: Add endianness conversion functions for std::array types.
authorGabe Black <gabeblack@google.com>
Wed, 13 Dec 2017 01:49:35 +0000 (17:49 -0800)
committerGabe Black <gabeblack@google.com>
Wed, 13 Dec 2017 19:12:23 +0000 (19:12 +0000)
These swap the endianness of each element within the array
individually.

They probably obsolute the Twin(32|64)_t types which I believe were
used for SPARC.

Change-Id: Ic389eb24bdcdc0081068b0c5a37abdf416f6c924
Reviewed-on: https://gem5-review.googlesource.com/6581
Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com>
Reviewed-by: Jason Lowe-Power <jason@lowepower.com>
Maintainer: Andreas Sandberg <andreas.sandberg@arm.com>

src/sim/byteswap.hh

index 23786bb713428a9804178bf20c11c32b827957fd..02a05330810e29018d18252d6cc3f59b37cb26cd 100644 (file)
@@ -139,6 +139,15 @@ inline Twin32_t swap_byte<Twin32_t>(Twin32_t x)
     return x;
 }
 
+template <typename T, size_t N>
+inline std::array<T, N>
+swap_byte(std::array<T, N> a)
+{
+    for (T &v: a)
+        v = swap_byte(v);
+    return a;
+}
+
 //The conversion functions with fixed endianness on both ends don't need to
 //be in a namespace
 template <typename T> inline T betole(T value) {return swap_byte(value);}