* dotnet format style --severity info Some changes were manually reverted. * dotnet format analyzers --serverity info Some changes have been minimally adapted. * Restore a few unused methods and variables * Silence dotnet format IDE0060 warnings * Silence dotnet format IDE0059 warnings * Address or silence dotnet format IDE1006 warnings * Address dotnet format CA1816 warnings * Address or silence dotnet format CA2211 warnings * Silence CA1806 and CA1834 issues * Fix formatting for switch expressions * Address most dotnet format whitespace warnings * Apply dotnet format whitespace formatting A few of them have been manually reverted and the corresponding warning was silenced * Revert formatting changes for while and for-loops * Format if-blocks correctly * Run dotnet format whitespace after rebase * Run dotnet format style after rebase * Run dotnet format analyzers after rebase * Run dotnet format after rebase and remove unused usings - analyzers - style - whitespace * Add comments to disabled warnings * Remove a few unused parameters * Replace MmeShadowScratch with Array256<uint> * Simplify properties and array initialization, Use const when possible, Remove trailing commas * Run dotnet format after rebase * Address IDE0251 warnings * Revert "Simplify properties and array initialization, Use const when possible, Remove trailing commas" This reverts commit 9462e4136c0a2100dc28b20cf9542e06790aa67e. * dotnet format whitespace after rebase * First dotnet format pass * Second dotnet format pass * Fix build issues * Fix StructArrayHelpers.cs * Apply suggestions from code review Co-authored-by: Ac_K <Acoustik666@gmail.com> * Fix return statements * Fix naming rule violations * Update src/Ryujinx.Common/Utilities/StreamUtils.cs Co-authored-by: Ac_K <Acoustik666@gmail.com> * Add trailing commas * Address review feedback * Address review feedback * Rename remaining type parameters to TKey and TValue * Fix manual formatting for logging levels * Fix spacing before comments --------- Co-authored-by: Ac_K <Acoustik666@gmail.com>
59 lines
1.7 KiB
C#
59 lines
1.7 KiB
C#
using System.Numerics;
|
|
|
|
namespace Ryujinx.Common
|
|
{
|
|
public static class BitUtils
|
|
{
|
|
public static T AlignUp<T>(T value, T size)
|
|
where T : IBinaryInteger<T>
|
|
{
|
|
return (value + (size - T.One)) & -size;
|
|
}
|
|
|
|
public static T AlignDown<T>(T value, T size)
|
|
where T : IBinaryInteger<T>
|
|
{
|
|
return value & -size;
|
|
}
|
|
|
|
public static T DivRoundUp<T>(T value, T dividend)
|
|
where T : IBinaryInteger<T>
|
|
{
|
|
return (value + (dividend - T.One)) / 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 BitOperations.IsPow2(value) ? value : Pow2RoundUp(value) >> 1;
|
|
}
|
|
|
|
public static long ReverseBits64(long value)
|
|
{
|
|
return (long)ReverseBits64((ulong)value);
|
|
}
|
|
|
|
private static ulong ReverseBits64(ulong value)
|
|
{
|
|
value = ((value & 0xaaaaaaaaaaaaaaaa) >> 1) | ((value & 0x5555555555555555) << 1);
|
|
value = ((value & 0xcccccccccccccccc) >> 2) | ((value & 0x3333333333333333) << 2);
|
|
value = ((value & 0xf0f0f0f0f0f0f0f0) >> 4) | ((value & 0x0f0f0f0f0f0f0f0f) << 4);
|
|
value = ((value & 0xff00ff00ff00ff00) >> 8) | ((value & 0x00ff00ff00ff00ff) << 8);
|
|
value = ((value & 0xffff0000ffff0000) >> 16) | ((value & 0x0000ffff0000ffff) << 16);
|
|
|
|
return (value >> 32) | (value << 32);
|
|
}
|
|
}
|
|
}
|