diff --git a/src/ImageSharp/Common/Helpers/ImageMaths.cs b/src/ImageSharp/Common/Helpers/ImageMaths.cs index 147a5914b..fc94c689f 100644 --- a/src/ImageSharp/Common/Helpers/ImageMaths.cs +++ b/src/ImageSharp/Common/Helpers/ImageMaths.cs @@ -25,7 +25,8 @@ namespace ImageSharp [MethodImpl(MethodImplOptions.AggressiveInlining)] public static int FastAbs(int x) { - return (x ^ (x >> 31)) - (x >> 31); + int y = x >> 31; + return (x ^ y) - y; } /// diff --git a/tests/ImageSharp.Benchmarks/General/Abs.cs b/tests/ImageSharp.Benchmarks/General/Abs.cs index b0f033b81..b5b449467 100644 --- a/tests/ImageSharp.Benchmarks/General/Abs.cs +++ b/tests/ImageSharp.Benchmarks/General/Abs.cs @@ -29,5 +29,13 @@ int x = this.X; return (x ^ (x >> 31)) - (x >> 31); } + + [Benchmark(Description = "Bitwise Abs With Variable")] + public int AbsBitwiseVer() + { + int x = this.X; + int y = x >> 31; + return (x ^ y) - y; + } } }