aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBerkan Diler <b.diler@gmx.de>2022-02-18 02:35:23 +0100
committerGitHub <noreply@github.com>2022-02-18 02:35:23 +0100
commit98c838b24c464fd627ad09078250e4801db8967e (patch)
treeff1fcd0371d55255bcd39876cc2d685a7fe7485b
parent63c9c64196465bd97abacceb1d83fa53de358d23 (diff)
Use BitOperations methods and delete now unused BitUtils methods (#3134)1.1.42
Replaces BitUtils.CountTrailingZeros/CountLeadingZeros/IsPowerOfTwo with BitOperations methods
-rw-r--r--Ryujinx.Common/Utilities/BitUtils.cs58
-rw-r--r--Ryujinx.Graphics.Texture/BlockLinearLayout.cs9
-rw-r--r--Ryujinx.HLE/HOS/Kernel/Common/MersenneTwister.cs5
-rw-r--r--Ryujinx.HLE/HOS/Kernel/Memory/KMemoryRegionManager.cs9
-rw-r--r--Ryujinx.HLE/HOS/Kernel/Process/KContextIdManager.cs3
-rw-r--r--Ryujinx.HLE/HOS/Kernel/Process/KProcessCapabilities.cs3
6 files changed, 19 insertions, 68 deletions
diff --git a/Ryujinx.Common/Utilities/BitUtils.cs b/Ryujinx.Common/Utilities/BitUtils.cs
index 180f1063..b231886f 100644
--- a/Ryujinx.Common/Utilities/BitUtils.cs
+++ b/Ryujinx.Common/Utilities/BitUtils.cs
@@ -1,11 +1,10 @@
using System;
+using System.Numerics;
namespace Ryujinx.Common
{
public static class BitUtils
{
- private static ReadOnlySpan<byte> ClzNibbleTbl => new byte[] { 4, 3, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0 };
-
public static uint AlignUp(uint value, int size)
{
return (uint)AlignUp((int)value, size);
@@ -76,60 +75,7 @@ namespace Ryujinx.Common
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;
- }
-
- public static bool IsPowerOfTwo64(long value)
- {
- return value != 0 && (value & (value - 1)) == 0;
- }
-
- public static int CountLeadingZeros32(int value)
- {
- return (int)CountLeadingZeros((ulong)value, 32);
- }
-
- public static int CountLeadingZeros64(long value)
- {
- return (int)CountLeadingZeros((ulong)value, 64);
- }
-
- private static ulong CountLeadingZeros(ulong value, int size)
- {
- if (value == 0ul)
- {
- return (ulong)size;
- }
-
- int nibbleIdx = size;
- int preCount, count = 0;
-
- do
- {
- nibbleIdx -= 4;
- preCount = ClzNibbleTbl[(int)(value >> nibbleIdx) & 0b1111];
- count += preCount;
- }
- while (preCount == 4);
-
- return (ulong)count;
- }
-
- public static int CountTrailingZeros32(int value)
- {
- int count = 0;
-
- while (((value >> count) & 1) == 0)
- {
- count++;
- }
-
- return count;
+ return BitOperations.IsPow2(value) ? value : Pow2RoundUp(value) >> 1;
}
public static long ReverseBits64(long value)
diff --git a/Ryujinx.Graphics.Texture/BlockLinearLayout.cs b/Ryujinx.Graphics.Texture/BlockLinearLayout.cs
index 02b69987..e098e959 100644
--- a/Ryujinx.Graphics.Texture/BlockLinearLayout.cs
+++ b/Ryujinx.Graphics.Texture/BlockLinearLayout.cs
@@ -1,4 +1,5 @@
using Ryujinx.Common;
+using System.Numerics;
using System.Runtime.CompilerServices;
using static Ryujinx.Graphics.Texture.BlockLinearConstants;
@@ -47,15 +48,15 @@ namespace Ryujinx.Graphics.Texture
{
_texBpp = bpp;
- _bppShift = BitUtils.CountTrailingZeros32(bpp);
+ _bppShift = BitOperations.TrailingZeroCount(bpp);
_bhMask = gobBlocksInY - 1;
_bdMask = gobBlocksInZ - 1;
- _bhShift = BitUtils.CountTrailingZeros32(gobBlocksInY);
- _bdShift = BitUtils.CountTrailingZeros32(gobBlocksInZ);
+ _bhShift = BitOperations.TrailingZeroCount(gobBlocksInY);
+ _bdShift = BitOperations.TrailingZeroCount(gobBlocksInZ);
- _xShift = BitUtils.CountTrailingZeros32(GobSize * gobBlocksInY * gobBlocksInZ);
+ _xShift = BitOperations.TrailingZeroCount(GobSize * gobBlocksInY * gobBlocksInZ);
RobAndSliceSizes rsSizes = GetRobAndSliceSizes(width, height, gobBlocksInY, gobBlocksInZ);
diff --git a/Ryujinx.HLE/HOS/Kernel/Common/MersenneTwister.cs b/Ryujinx.HLE/HOS/Kernel/Common/MersenneTwister.cs
index 7f767c1c..8b4c2dda 100644
--- a/Ryujinx.HLE/HOS/Kernel/Common/MersenneTwister.cs
+++ b/Ryujinx.HLE/HOS/Kernel/Common/MersenneTwister.cs
@@ -1,4 +1,5 @@
using Ryujinx.Common;
+using System.Numerics;
namespace Ryujinx.HLE.HOS.Kernel.Common
{
@@ -41,10 +42,10 @@ namespace Ryujinx.HLE.HOS.Kernel.Common
range++;
// This is log2(Range) plus one.
- int nextRangeLog2 = 64 - BitUtils.CountLeadingZeros64(range);
+ int nextRangeLog2 = 64 - BitOperations.LeadingZeroCount((ulong)range);
// If Range is already power of 2, subtract one to use log2(Range) directly.
- int rangeLog2 = nextRangeLog2 - (BitUtils.IsPowerOfTwo64(range) ? 1 : 0);
+ int rangeLog2 = nextRangeLog2 - (BitOperations.IsPow2(range) ? 1 : 0);
int parts = rangeLog2 > 32 ? 2 : 1;
int bitsPerPart = rangeLog2 / parts;
diff --git a/Ryujinx.HLE/HOS/Kernel/Memory/KMemoryRegionManager.cs b/Ryujinx.HLE/HOS/Kernel/Memory/KMemoryRegionManager.cs
index f35a3c36..43e3e820 100644
--- a/Ryujinx.HLE/HOS/Kernel/Memory/KMemoryRegionManager.cs
+++ b/Ryujinx.HLE/HOS/Kernel/Memory/KMemoryRegionManager.cs
@@ -1,6 +1,7 @@
using Ryujinx.Common;
using Ryujinx.HLE.HOS.Kernel.Common;
using System.Diagnostics;
+using System.Numerics;
namespace Ryujinx.HLE.HOS.Kernel.Memory
{
@@ -259,11 +260,11 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
if (backwards)
{
- index = (index * 64 + 63) - BitUtils.CountLeadingZeros64(mask);
+ index = (index * 64 + 63) - BitOperations.LeadingZeroCount((ulong)mask);
}
else
{
- index = index * 64 + BitUtils.CountLeadingZeros64(BitUtils.ReverseBits64(mask));
+ index = index * 64 + BitOperations.LeadingZeroCount((ulong)BitUtils.ReverseBits64(mask));
}
}
@@ -312,11 +313,11 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
if (backwards)
{
- index = index * 64 + BitUtils.CountLeadingZeros64(BitUtils.ReverseBits64(mask));
+ index = index * 64 + BitOperations.LeadingZeroCount((ulong)BitUtils.ReverseBits64(mask));
}
else
{
- index = (index * 64 + 63) - BitUtils.CountLeadingZeros64(mask);
+ index = (index * 64 + 63) - BitOperations.LeadingZeroCount((ulong)mask);
}
}
diff --git a/Ryujinx.HLE/HOS/Kernel/Process/KContextIdManager.cs b/Ryujinx.HLE/HOS/Kernel/Process/KContextIdManager.cs
index 0392b930..ed57ae04 100644
--- a/Ryujinx.HLE/HOS/Kernel/Process/KContextIdManager.cs
+++ b/Ryujinx.HLE/HOS/Kernel/Process/KContextIdManager.cs
@@ -1,5 +1,6 @@
using Ryujinx.Common;
using System;
+using System.Numerics;
namespace Ryujinx.HLE.HOS.Kernel.Process
{
@@ -32,7 +33,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Process
{
int mask = _idMasks[index];
- int firstFreeBit = BitUtils.CountLeadingZeros32((mask + 1) & ~mask);
+ int firstFreeBit = BitOperations.LeadingZeroCount((uint)((mask + 1) & ~mask));
if (firstFreeBit < 32)
{
diff --git a/Ryujinx.HLE/HOS/Kernel/Process/KProcessCapabilities.cs b/Ryujinx.HLE/HOS/Kernel/Process/KProcessCapabilities.cs
index 55e839ab..7fb98017 100644
--- a/Ryujinx.HLE/HOS/Kernel/Process/KProcessCapabilities.cs
+++ b/Ryujinx.HLE/HOS/Kernel/Process/KProcessCapabilities.cs
@@ -3,6 +3,7 @@ using Ryujinx.HLE.HOS.Kernel.Common;
using Ryujinx.HLE.HOS.Kernel.Memory;
using Ryujinx.HLE.HOS.Kernel.Threading;
using System;
+using System.Numerics;
namespace Ryujinx.HLE.HOS.Kernel.Process
{
@@ -130,7 +131,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Process
return KernelResult.Success;
}
- int codeMask = 1 << (32 - BitUtils.CountLeadingZeros32(code + 1));
+ int codeMask = 1 << (32 - BitOperations.LeadingZeroCount((uint)code + 1));
// Check if the property was already set.
if (((mask0 & codeMask) & 0x1e008) != 0)