Index: base/sys_byteorder.h |
diff --git a/base/sys_byteorder.h b/base/sys_byteorder.h |
index 8d9066c70228bfd7c36ec0cb3a2afe30dc006a2d..9ee1827e1e6d8ae8ea0dbf2a6d30cefb953dd4d3 100644 |
--- a/base/sys_byteorder.h |
+++ b/base/sys_byteorder.h |
@@ -13,6 +13,7 @@ |
#include <stdint.h> |
+#include "base/logging.h" |
#include "build/build_config.h" |
#if defined(COMPILER_MSVC) |
@@ -46,6 +47,21 @@ inline uint64_t ByteSwap(uint64_t x) { |
#endif |
} |
+inline uintptr_t ByteSwapUintPtrT(uintptr_t x) { |
+ // We do it this way because some build configurations are ILP32 even when |
+ // defined(ARCH_CPU_64_BITS). Unfortunately, we can't use sizeof in #ifs. But, |
+ // because these conditionals are constexprs, the irrelevant branches will |
+ // likely be optimized away, so this construction should not result in code |
+ // bloat. |
+ if (sizeof(uintptr_t) == 4) { |
+ return ByteSwap(static_cast<uint32_t>(x)); |
+ } else if (sizeof(uintptr_t) == 8) { |
+ return ByteSwap(static_cast<uint64_t>(x)); |
+ } else { |
+ NOTREACHED(); |
+ } |
+} |
+ |
// Converts the bytes in |x| from host order (endianness) to little endian, and |
// returns the result. |
inline uint16_t ByteSwapToLE16(uint16_t x) { |