summaryrefslogtreecommitdiffstats
path: root/src/common/bit_util.h
diff options
context:
space:
mode:
authorbunnei <bunneidev@gmail.com>2019-03-29 02:41:40 +0100
committerGitHub <noreply@github.com>2019-03-29 02:41:40 +0100
commitb404fcdf1443b91ac9994c05ad1fe039fcd9675e (patch)
tree42b6141dcd6a5315f9330f064524963a7915c28a /src/common/bit_util.h
parentMerge pull request #2284 from lioncash/heap-alloc (diff)
parentFixes and corrections on formatting. (diff)
downloadyuzu-b404fcdf1443b91ac9994c05ad1fe039fcd9675e.tar
yuzu-b404fcdf1443b91ac9994c05ad1fe039fcd9675e.tar.gz
yuzu-b404fcdf1443b91ac9994c05ad1fe039fcd9675e.tar.bz2
yuzu-b404fcdf1443b91ac9994c05ad1fe039fcd9675e.tar.lz
yuzu-b404fcdf1443b91ac9994c05ad1fe039fcd9675e.tar.xz
yuzu-b404fcdf1443b91ac9994c05ad1fe039fcd9675e.tar.zst
yuzu-b404fcdf1443b91ac9994c05ad1fe039fcd9675e.zip
Diffstat (limited to 'src/common/bit_util.h')
-rw-r--r--src/common/bit_util.h39
1 files changed, 39 insertions, 0 deletions
diff --git a/src/common/bit_util.h b/src/common/bit_util.h
index 1eea17ba1..a4f9ed4aa 100644
--- a/src/common/bit_util.h
+++ b/src/common/bit_util.h
@@ -58,4 +58,43 @@ inline u64 CountLeadingZeroes64(u64 value) {
return __builtin_clzll(value);
}
#endif
+
+#ifdef _MSC_VER
+inline u32 CountTrailingZeroes32(u32 value) {
+ unsigned long trailing_zero = 0;
+
+ if (_BitScanForward(&trailing_zero, value) != 0) {
+ return trailing_zero;
+ }
+
+ return 32;
+}
+
+inline u64 CountTrailingZeroes64(u64 value) {
+ unsigned long trailing_zero = 0;
+
+ if (_BitScanForward64(&trailing_zero, value) != 0) {
+ return trailing_zero;
+ }
+
+ return 64;
+}
+#else
+inline u32 CountTrailingZeroes32(u32 value) {
+ if (value == 0) {
+ return 32;
+ }
+
+ return __builtin_ctz(value);
+}
+
+inline u64 CountTrailingZeroes64(u64 value) {
+ if (value == 0) {
+ return 64;
+ }
+
+ return __builtin_ctzll(value);
+}
+#endif
+
} // namespace Common