| 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
|
|
|