summaryrefslogtreecommitdiff
path: root/Source/Core
diff options
context:
space:
mode:
authorJordan Woyak <jordan.woyak@gmail.com>2013-03-05 15:48:57 -0600
committerJordan Woyak <jordan.woyak@gmail.com>2013-03-05 15:48:57 -0600
commitfe3a54d7fd8c85960fed04d28d5dedbc1d94845d (patch)
tree7942c99de3dc5212b16af991364de97789a8586d /Source/Core
parent10d57a3402cc698cffc4bf3299113073264eb314 (diff)
Buildfix!
Diffstat (limited to 'Source/Core')
-rw-r--r--Source/Core/Common/Src/MathUtil.h19
1 files changed, 9 insertions, 10 deletions
diff --git a/Source/Core/Common/Src/MathUtil.h b/Source/Core/Common/Src/MathUtil.h
index c6c29ff368..ec9c9cc8a3 100644
--- a/Source/Core/Common/Src/MathUtil.h
+++ b/Source/Core/Common/Src/MathUtil.h
@@ -152,18 +152,17 @@ float MathFloatVectorSum(const std::vector<float>&);
#define ROUND_UP(x, a) (((x) + (a) - 1) & ~((a) - 1))
#define ROUND_DOWN(x, a) ((x) & ~((a) - 1))
-template <typename T>
-T Log2(T val)
+// Rounds down. 0 -> undefined
+inline u64 Log2(u64 val)
{
-#if defined(_M_X64)
- T result;
- asm
- (
- "bsr %1, %0"
- : "=r"(result)
- : "r"(val)
- );
+#if defined(__GNUC__)
+ return 63 - __builtin_clzll(val);
+
+#elif defined(_MSC_VER)
+ unsigned long result = -1;
+ _BitScanReverse64(&result, val);
return result;
+
#else
T result = -1;
while (val != 0)