diff --git a/ChocolArm64/Instruction/ASoftFallback.cs b/ChocolArm64/Instruction/ASoftFallback.cs index 705ca4a296..c059441315 100644 --- a/ChocolArm64/Instruction/ASoftFallback.cs +++ b/ChocolArm64/Instruction/ASoftFallback.cs @@ -20,6 +20,14 @@ namespace ChocolArm64.Instruction Context.EmitCall(typeof(ASoftFallback), MthdName); } + public static uint CountLeadingSigns32(uint Value) => (uint)CountLeadingSigns(Value, 32); + public static ulong CountLeadingSigns64(ulong Value) => (ulong)CountLeadingSigns(Value, 64); + + private static ulong CountLeadingSigns(ulong Value, int Size) + { + return CountLeadingZeros((Value >> 1) ^ Value, Size - 1); + } + public static uint CountLeadingZeros32(uint Value) => (uint)CountLeadingZeros(Value, 32); public static ulong CountLeadingZeros64(ulong Value) => (ulong)CountLeadingZeros(Value, 64); @@ -398,4 +406,4 @@ namespace ChocolArm64.Instruction throw new ArgumentOutOfRangeException(nameof(Size)); } } -} \ No newline at end of file +}