#define __SIM_BYTE_SWAP_HH__
#include "base/bigint.hh"
-#include "base/misc.hh"
#include "base/types.hh"
// This lets us figure out what the byte order of the host system is
-#if defined(linux)
+#if defined(__linux__)
#include <endian.h>
// If this is a linux system, lets used the optimized definitions if they exist.
// If one doesn't exist, we pretty much get what is listed below, so it all
#include <libkern/OSByteOrder.h>
#endif
-enum ByteOrder {BigEndianByteOrder, LittleEndianByteOrder};
-
//These functions actually perform the swapping for parameters
//of various bit lengths
inline uint64_t
swap_byte64(uint64_t x)
{
-#if defined(linux)
+#if defined(__linux__)
return bswap_64(x);
#elif defined(__APPLE__)
return OSSwapInt64(x);
inline uint32_t
swap_byte32(uint32_t x)
{
-#if defined(linux)
+#if defined(__linux__)
return bswap_32(x);
#elif defined(__APPLE__)
return OSSwapInt32(x);
inline uint16_t
swap_byte16(uint16_t x)
{
-#if defined(linux)
+#if defined(__linux__)
return bswap_16(x);
#elif defined(__APPLE__)
return OSSwapInt16(x);
//For conversions not involving the guest system, we can define the functions
//conditionally based on the BYTE_ORDER macro and outside of the namespaces
-#if defined(_BIG_ENDIAN) || !defined(_LITTLE_ENDIAN) && BYTE_ORDER == BIG_ENDIAN
+#if (defined(_BIG_ENDIAN) || !defined(_LITTLE_ENDIAN)) && BYTE_ORDER == BIG_ENDIAN
const ByteOrder HostByteOrder = BigEndianByteOrder;
template <typename T> inline T htole(T value) {return swap_byte(value);}
template <typename T> inline T letoh(T value) {return swap_byte(value);}