Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(9)

Unified Diff: src/base/bits.h

Issue 2013393002: Fix wrong endianness of wasm header in WasmModuleWriter on big-endian platforms (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « include/v8config.h ('k') | src/wasm/encoder.cc » ('j') | src/wasm/encoder.cc » ('J')
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
« no previous file with comments | « include/v8config.h ('k') | src/wasm/encoder.cc » ('j') | src/wasm/encoder.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698