Fix MSVC build.
authorbmeurer@chromium.org <bmeurer@chromium.org@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Thu, 14 Aug 2014 09:24:40 +0000 (09:24 +0000)
committerbmeurer@chromium.org <bmeurer@chromium.org@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Thu, 14 Aug 2014 09:24:40 +0000 (09:24 +0000)
And while we are at it, use the stupid MSVC compiler intrinsics.

TEST=base-unittests/BitTest
TBR=jarin@chromium.org

Review URL: https://codereview.chromium.org/473773003

git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@23123 ce2b1a6d-e550-0410-aec6-3dcde31c8c00

src/base/bits.h
src/base/win32-headers.h

index e16eed1..2cfce1e 100644 (file)
@@ -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
index e6b88bb..2d94abd 100644 (file)
@@ -75,5 +75,7 @@
 #undef GetObject
 #undef CreateSemaphore
 #undef Yield
+#undef RotateRight32
+#undef RotateRight64
 
 #endif  // V8_BASE_WIN32_HEADERS_H_