Index: src/base/bits.h |
diff --git a/src/base/bits.h b/src/base/bits.h |
index 2e6527b0548ec54f6640cc629d06c0a729959fe3..0db2778b6709395b687930aeb9861042dbfca3e4 100644 |
--- a/src/base/bits.h |
+++ b/src/base/bits.h |
@@ -131,6 +131,67 @@ inline unsigned CountTrailingZeros32(uint32_t value) { |
#endif |
} |
+inline int16_t ChangeEndianness(int16_t value) { |
+#if V8_HAS_BUILTIN_BSWAP16 |
+ return __builtin_bswap16(value); |
+#else |
+ return (value << 8) | ((value >> 8) & 0xFF); |
+#endif |
+} |
+ |
+inline uint16_t ChangeEndianness(uint16_t value) { |
+#if V8_HAS_BUILTIN_BSWAP16 |
+ return __builtin_bswap16(value); |
+#else |
+ return (value << 8) | (value >> 8); |
+#endif |
+} |
+ |
+inline int32_t ChangeEndianness(int32_t value) { |
+#if V8_HAS_BUILTIN_BSWAP32 |
+ return __builtin_bswap32(value); |
+#else |
+ int32_t tmp; |
+ tmp = ((value << 8) & 0xFF00FF00) | ((value >> 8) & 0xFF00FF); |
+ return (tmp << 16) | ((tmp >> 16) & 0xFFFF); |
+#endif |
+} |
+ |
+inline uint32_t ChangeEndianness(uint32_t value) { |
+#if V8_HAS_BUILTIN_BSWAP32 |
+ return __builtin_bswap32(value); |
+#else |
+ int32_t tmp; |
+ tmp = ((value << 8) & 0xFF00FF00) | ((value >> 8) & 0xFF00FF); |
+ return (tmp << 16) | (tmp >> 16); |
+#endif |
+} |
+ |
+inline int64_t ChangeEndianness(int64_t value) { |
+#if V8_HAS_BUILTIN_BSWAP64 |
+ return __builtin_bswap64(value); |
+#else |
+ int64_t tmp; |
+ tmp = ((value << 8) & 0xFF00FF00FF00FF00ULL) | |
+ ((value >> 8) & 0x00FF00FF00FF00FFULL); |
+ tmp = ((tmp << 16) & 0xFFFF0000FFFF0000ULL) | |
+ ((tmp >> 16) & 0x0000FFFF0000FFFFULL); |
+ return (tmp << 32) | ((tmp >> 32) & 0xFFFFFFFFULL); |
+#endif |
+} |
+ |
+inline int64_t ChangeEndianness(uint64_t value) { |
+#if V8_HAS_BUILTIN_BSWAP64 |
+ return __builtin_bswap64(value); |
+#else |
+ int64_t tmp; |
+ tmp = ((value << 8) & 0xFF00FF00FF00FF00ULL) | |
+ ((value >> 8) & 0x00FF00FF00FF00FFULL); |
+ tmp = ((tmp << 16) & 0xFFFF0000FFFF0000ULL) | |
+ ((tmp >> 16) & 0x0000FFFF0000FFFFULL); |
+ return (tmp << 32) | (tmp >> 32); |
+#endif |
+} |
// CountTrailingZeros64(value) returns the number of zero bits preceding the |
// least significant 1 bit in |value| if |value| is non-zero, otherwise it |