diff --git a/src/libraries/System.Numerics.Vectors/tests/GenericVectorTests.cs b/src/libraries/System.Numerics.Vectors/tests/GenericVectorTests.cs index 14b1a2ec62833..dc13ea9c1117b 100644 --- a/src/libraries/System.Numerics.Vectors/tests/GenericVectorTests.cs +++ b/src/libraries/System.Numerics.Vectors/tests/GenericVectorTests.cs @@ -4546,7 +4546,7 @@ public void CosDoubleTest(double value, double expectedResult, double variance) [Theory] [MemberData(nameof(GenericMathTestMemberData.CosSingle), MemberType = typeof(GenericMathTestMemberData))] - public void CosCosgleTest(float value, float expectedResult, float variance) + public void CosSingleTest(float value, float expectedResult, float variance) { Vector actualResult = Vector.Cos(Vector.Create(value)); AssertEqual(Vector.Create(expectedResult), actualResult, Vector.Create(variance)); diff --git a/src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/Vector128.cs b/src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/Vector128.cs index 70c28d0924a83..27bd7c10fa3e0 100644 --- a/src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/Vector128.cs +++ b/src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/Vector128.cs @@ -3207,7 +3207,7 @@ public static Vector128 Sin(Vector128 vector) { if (IsHardwareAccelerated) { - return VectorMath.CosDouble, Vector128>(vector); + return VectorMath.SinDouble, Vector128>(vector); } else { @@ -3226,11 +3226,11 @@ public static Vector128 Sin(Vector128 vector) { if (Vector256.IsHardwareAccelerated) { - return VectorMath.CosSingle, Vector128, Vector256, Vector256>(vector); + return VectorMath.SinSingle, Vector128, Vector256, Vector256>(vector); } else { - return VectorMath.CosSingle, Vector128, Vector128, Vector128>(vector); + return VectorMath.SinSingle, Vector128, Vector128, Vector128>(vector); } } else diff --git a/src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/Vector256.cs b/src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/Vector256.cs index c90524a56bdee..eb2aa61fce4ed 100644 --- a/src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/Vector256.cs +++ b/src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/Vector256.cs @@ -3090,7 +3090,7 @@ public static Vector256 Sin(Vector256 vector) { if (IsHardwareAccelerated) { - return VectorMath.CosDouble, Vector256>(vector); + return VectorMath.SinDouble, Vector256>(vector); } else { @@ -3109,11 +3109,11 @@ public static Vector256 Sin(Vector256 vector) { if (Vector512.IsHardwareAccelerated) { - return VectorMath.CosSingle, Vector256, Vector512, Vector512>(vector); + return VectorMath.SinSingle, Vector256, Vector512, Vector512>(vector); } else { - return VectorMath.CosSingle, Vector256, Vector256, Vector256>(vector); + return VectorMath.SinSingle, Vector256, Vector256, Vector256>(vector); } } else diff --git a/src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/Vector512.cs b/src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/Vector512.cs index f5d3c0c1b9d6c..8f12942a7cfc5 100644 --- a/src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/Vector512.cs +++ b/src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/Vector512.cs @@ -3131,7 +3131,7 @@ public static Vector512 Sin(Vector512 vector) { if (IsHardwareAccelerated) { - return VectorMath.CosDouble, Vector512>(vector); + return VectorMath.SinDouble, Vector512>(vector); } else { @@ -3148,7 +3148,7 @@ public static Vector512 Sin(Vector512 vector) { if (IsHardwareAccelerated) { - return VectorMath.CosSingle, Vector512, Vector512, Vector512>(vector); + return VectorMath.SinSingle, Vector512, Vector512, Vector512>(vector); } else { diff --git a/src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/VectorMath.cs b/src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/VectorMath.cs index 066deab0dc410..cf8df6927558f 100644 --- a/src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/VectorMath.cs +++ b/src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/VectorMath.cs @@ -211,30 +211,29 @@ public static TVectorSingle CosSingle(x); + TVectorInt32 ux = Unsafe.BitCast(ax); TVectorSingle result; - if (TVectorSingle.LessThanOrEqualAll(ax, TVectorSingle.Create(ARG_LARGE))) + if (TVectorInt32.LessThanOrEqualAll(ux, TVectorInt32.Create(ARG_LARGE))) { // We must be a finite value: (pi / 4) >= |x| if (TVectorInt32.GreaterThanAny(ux, TVectorInt32.Create(ARG_SMALL - 1))) { // at least one element is: |x| >= 2^-13 - TVectorSingle x2 = x * x; if (TVectorSingle.Count == TVectorDouble.Count) { result = Narrow( - CosSingleSmall(Widen(x2)) + CosSingleSmall(Widen(x)) ); } else { result = Narrow( - CosSingleSmall(WidenLower(x2)), - CosSingleSmall(WidenUpper(x2)) + CosSingleSmall(WidenLower(x)), + CosSingleSmall(WidenUpper(x)) ); } } @@ -1760,8 +1759,8 @@ public static (TVectorDouble Sin, TVectorDouble Cos) SinCosDouble(TVectorInt64.Equals(((sign & region) | (~sign & ~region)) & TVectorInt64.One, TVectorInt64.Zero)), - -sinResult, // negative in region 1 or 3, positive in region 0 or 2 - +sinResult // negative in region 0 or 2, positive in region 1 or 3 + +sinResult, // negative in region 1 or 3, positive in region 0 or 2 + -sinResult // negative in region 0 or 2, positive in region 1 or 3 ); cosResult = TVectorDouble.ConditionalSelect( @@ -1806,12 +1805,12 @@ public static (TVectorDouble Sin, TVectorDouble Cos) SinCosDouble= 2^-27, infinity, or NaN - TVectorDouble.One // for elements: 2^-27 > |x| + x // for elements: 2^-27 > |x| ); cosResult = TVectorDouble.ConditionalSelect( argNotSmallerMask, - cosResult, // for elements: |x| >= 2^-27, infinity, or NaN + cosResult, // for elements: |x| >= 2^-27, infinity, or NaN TVectorDouble.One // for elements: 2^-27 > |x| ); @@ -1838,11 +1837,11 @@ public static (TVectorSingle Sin, TVectorSingle Cos) SinCosSingle(x); + TVectorInt32 ux = Unsafe.BitCast(ax); TVectorSingle sinResult, cosResult; - if (TVectorSingle.LessThanOrEqualAll(ax, TVectorSingle.Create(ARG_LARGE))) + if (TVectorInt32.LessThanOrEqualAll(ux, TVectorInt32.Create(ARG_LARGE))) { // We must be a finite value: (pi / 4) >= |x| @@ -1945,7 +1944,7 @@ public static (TVectorSingle Sin, TVectorSingle Cos) SinCosSingle= 2^-27, infinity, or NaN - TVectorSingle.One // for elements: 2^-27 > |x| + x // for elements: 2^-27 > |x| ); cosResult = TVectorSingle.ConditionalSelect( @@ -1982,8 +1981,8 @@ public static (TVectorSingle Sin, TVectorSingle Cos) SinCosSingle(TVectorInt64.Equals(((sign & region) | (~sign & ~region)) & TVectorInt64.One, TVectorInt64.Zero)), - -sinResult, // negative in region 1 or 3, positive in region 0 or 2 - +sinResult // negative in region 0 or 2, positive in region 1 or 3 + +sinResult, // negative in region 1 or 3, positive in region 0 or 2 + -sinResult // negative in region 0 or 2, positive in region 1 or 3 ); cosResult = TVectorDouble.ConditionalSelect( @@ -2095,8 +2094,8 @@ public static TVectorDouble SinDouble(TVectorDouble result = TVectorDouble.ConditionalSelect( Unsafe.BitCast(TVectorInt64.Equals(((sign & region) | (~sign & ~region)) & TVectorInt64.One, TVectorInt64.Zero)), - -result, // negative in region 1 or 3, positive in region 0 or 2 - +result // negative in region 0 or 2, positive in region 1 or 3 + +result, // negative in region 1 or 3, positive in region 0 or 2 + -result // negative in region 0 or 2, positive in region 1 or 3 ); // Propagate the NaN that was passed in @@ -2116,8 +2115,8 @@ public static TVectorDouble SinDouble(TVectorDouble return TVectorDouble.ConditionalSelect( Unsafe.BitCast(TVectorInt64.GreaterThan(ux, TVectorInt64.Create(ARG_SMALLER - 1))), - result, // for elements: |x| >= 2^-27, infinity, or NaN - TVectorDouble.One // for elements: 2^-27 > |x| + result, // for elements: |x| >= 2^-27, infinity, or NaN + x // for elements: 2^-27 > |x| ); } @@ -2183,11 +2182,11 @@ public static TVectorSingle SinSingle(x); + TVectorInt32 ux = Unsafe.BitCast(ax); TVectorSingle result; - if (TVectorSingle.LessThanOrEqualAll(ax, TVectorSingle.Create(ARG_LARGE))) + if (TVectorInt32.LessThanOrEqualAll(ux, TVectorInt32.Create(ARG_LARGE))) { // We must be a finite value: (pi / 4) >= |x| @@ -2251,8 +2250,8 @@ public static TVectorSingle SinSingle(TVectorInt32.GreaterThan(ux, TVectorInt32.Create(ARG_SMALLER - 1))), - result, // for elements: |x| >= 2^-27, infinity, or NaN - TVectorSingle.One // for elements: 2^-27 > |x| + result, // for elements: |x| >= 2^-27, infinity, or NaN + x // for elements: 2^-27 > |x| ); [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -2274,8 +2273,8 @@ static TVectorDouble CoreImpl(TVectorDouble x) return TVectorDouble.ConditionalSelect( Unsafe.BitCast(TVectorInt64.Equals(((sign & region) | (~sign & ~region)) & TVectorInt64.One, TVectorInt64.Zero)), - -result, // negative in region 1 or 3, positive in region 0 or 2 - +result // negative in region 0 or 2, positive in region 1 or 3 + +result, // negative in region 1 or 3, positive in region 0 or 2 + -result // negative in region 0 or 2, positive in region 1 or 3 ); } }