aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.Common/Utilities/BitUtils.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Ryujinx.Common/Utilities/BitUtils.cs')
-rw-r--r--Ryujinx.Common/Utilities/BitUtils.cs35
1 files changed, 35 insertions, 0 deletions
diff --git a/Ryujinx.Common/Utilities/BitUtils.cs b/Ryujinx.Common/Utilities/BitUtils.cs
index 135b397d..b6fba4fb 100644
--- a/Ryujinx.Common/Utilities/BitUtils.cs
+++ b/Ryujinx.Common/Utilities/BitUtils.cs
@@ -34,6 +34,11 @@ namespace Ryujinx.Common
return value & -(long)size;
}
+ public static int DivRoundUp(int value, int dividend)
+ {
+ return (value + dividend - 1) / dividend;
+ }
+
public static ulong DivRoundUp(ulong value, uint dividend)
{
return (value + dividend - 1) / dividend;
@@ -44,6 +49,24 @@ namespace Ryujinx.Common
return (value + dividend - 1) / dividend;
}
+ public static int Pow2RoundUp(int value)
+ {
+ value--;
+
+ value |= (value >> 1);
+ value |= (value >> 2);
+ value |= (value >> 4);
+ value |= (value >> 8);
+ value |= (value >> 16);
+
+ return ++value;
+ }
+
+ public static int Pow2RoundDown(int value)
+ {
+ return IsPowerOfTwo32(value) ? value : Pow2RoundUp(value) >> 1;
+ }
+
public static bool IsPowerOfTwo32(int value)
{
return value != 0 && (value & (value - 1)) == 0;
@@ -85,6 +108,18 @@ namespace Ryujinx.Common
return (ulong)count;
}
+ public static int CountTrailingZeros32(int value)
+ {
+ int count = 0;
+
+ while (((value >> count) & 1) == 0)
+ {
+ count++;
+ }
+
+ return count;
+ }
+
public static long ReverseBits64(long value)
{
return (long)ReverseBits64((ulong)value);