sim: Add gtoh/htog helpers that take an explicit endianness
authorChuan Zhu <chuan.zhu@arm.com>
Wed, 2 Aug 2017 08:52:28 +0000 (09:52 +0100)
committerAndreas Sandberg <andreas.sandberg@arm.com>
Fri, 16 Feb 2018 09:25:14 +0000 (09:25 +0000)
Add helper functions to swap between guest byte order and host byte
order that take a guest endianness as a parameter. These functions are
called htog and htog to be consistent with the helper functions that
extract guest byte order from a compile time constant.

Change-Id: Ie6be7dfd3b7a58ad6bfb57b25be5f85b5f425929
Signed-off-by: Andreas Sandberg <andreas.sandberg@arm.com>
Reviewed-on: https://gem5-review.googlesource.com/8201
Reviewed-by: Jason Lowe-Power <jason@lowepower.com>
src/sim/byteswap.hh

index 2c3517f2496c4e88e7ee103bd5b1b9c52e4fa423..a46f8f5918b6c47f6ace3980bf935ee9bc3fd3ac 100644 (file)
@@ -154,6 +154,20 @@ template <typename T> inline T betoh(T value) {return swap_byte(value);}
         #error Invalid Endianess
 #endif
 
+template <typename T>
+inline T htog(T value, ByteOrder guest_byte_order)
+{
+    return guest_byte_order == BigEndianByteOrder ?
+        htobe(value) : htole(value);
+}
+
+template <typename T>
+inline T gtoh(T value, ByteOrder guest_byte_order)
+{
+    return guest_byte_order == BigEndianByteOrder ?
+        betoh(value) : letoh(value);
+}
+
 namespace BigEndianGuest
 {
     const ByteOrder GuestByteOrder = BigEndianByteOrder;