| Index: src/compiler-intrinsics.h
|
| diff --git a/src/compiler-intrinsics.h b/src/compiler-intrinsics.h
|
| index bce5d56e25ef91a2b8af5dcf6b68e0596548609e..79ddac8720664af9986e441c177068955e7ddd04 100644
|
| --- a/src/compiler-intrinsics.h
|
| +++ b/src/compiler-intrinsics.h
|
| @@ -50,6 +50,24 @@ int CompilerIntrinsics::CountTrailingZeros(uint32_t value) {
|
| int CompilerIntrinsics::CountLeadingZeros(uint32_t value) {
|
| return __builtin_clz(value);
|
| }
|
| +
|
| +#elif defined(_MSC_VER)
|
| +
|
| +#pragma intrinsic(_BitScanForward)
|
| +#pragma intrinsic(_BitScanReverse)
|
| +
|
| +int CompilerIntrinsics::CountTrailingZeros(uint32_t value) {
|
| + unsigned long result;
|
| + _BitScanForward(&result, static_cast<long>(value));
|
| + return static_cast<int>(result);
|
| +}
|
| +
|
| +int CompilerIntrinsics::CountLeadingZeros(uint32_t value) {
|
| + unsigned long result;
|
| + _BitScanReverse(&result, static_cast<long>(value));
|
| + return 31 - static_cast<int>(result);
|
| +}
|
| +
|
| #else
|
| #error Unsupported compiler
|
| #endif
|
|
|