Index: src/base/bits.h |
diff --git a/src/base/bits.h b/src/base/bits.h |
index e16eed1b67c9da5c45cec66892da4ed33852c7ad..2cfce1edc2be934a30bc0965cf20c32119c9f871 100644 |
--- a/src/base/bits.h |
+++ b/src/base/bits.h |
@@ -6,22 +6,43 @@ |
#define V8_BASE_BITS_H_ |
#include "include/v8stdint.h" |
+#if V8_OS_WIN32 |
+#include "src/base/win32-headers.h" |
+#endif |
namespace v8 { |
namespace base { |
namespace bits { |
+#if V8_CC_MSVC |
+ |
+#pragma intrinsic(_rotr) |
+#pragma intrinsic(_rotr64) |
+ |
+inline uint32_t RotateRight32(uint32_t value, uint32_t shift) { |
+ return _rotr(value, shift); |
+} |
+ |
+ |
+inline uint64_t RotateRight64(uint64_t value, uint32_t shift) { |
+ return _rotr64(value, shift); |
+} |
+ |
+#else // V8_CC_MSVC |
+ |
inline uint32_t RotateRight32(uint32_t value, uint32_t shift) { |
if (shift == 0) return value; |
return (value >> shift) | (value << (32 - shift)); |
} |
-inline uint64_t RotateRight64(uint64_t value, uint64_t shift) { |
+inline uint64_t RotateRight64(uint64_t value, uint32_t shift) { |
if (shift == 0) return value; |
return (value >> shift) | (value << (64 - shift)); |
} |
+#endif // V8_CC_MSVC |
+ |
} // namespace bits |
} // namespace base |
} // namespace v8 |