7
7
using System . Runtime . Intrinsics ;
8
8
using System . Runtime . Intrinsics . Arm ;
9
9
using System . Runtime . Intrinsics . X86 ;
10
+ using System . Security . Cryptography ;
10
11
11
12
namespace System . Numerics . Tensors
12
13
{
@@ -3028,7 +3029,6 @@ public static Vector512<float> Invoke(Vector512<float> x)
3028
3029
// coshf = v/2 * exp(x - log(v)) where v = 0x1.0000e8p-1
3029
3030
3030
3031
private const uint SIGN_MASK = 0x7FFFFFFF ;
3031
- private const uint ARG_MAX = 0x42B2D4FC ;
3032
3032
private const uint LOGV = 0x3f317300 ;
3033
3033
private const uint HALFV = 0x3f800074 ;
3034
3034
private const uint INVV2 = 0x3e7ffe30 ;
@@ -3037,46 +3037,24 @@ public static Vector512<float> Invoke(Vector512<float> x)
3037
3037
3038
3038
public static Vector128 < float > Invoke ( Vector128 < float > x )
3039
3039
{
3040
- Vector128 < uint > ux = x . AsUInt32 ( ) & Vector128 . Create ( SIGN_MASK ) ;
3041
- if ( Vector128 . GreaterThanAny ( ux , Vector128 . Create ( ARG_MAX ) ) )
3042
- {
3043
- return Vector128 . Create (
3044
- MathF . Cosh ( x . GetElement ( 0 ) ) ,
3045
- MathF . Cosh ( x . GetElement ( 1 ) ) ,
3046
- MathF . Cosh ( x . GetElement ( 2 ) ) ,
3047
- MathF . Cosh ( x . GetElement ( 3 ) ) ) ;
3048
- }
3049
-
3050
- Vector128 < float > y = ux . AsSingle ( ) ;
3040
+ Vector128 < float > y = ( x . AsUInt32 ( ) & Vector128 . Create ( SIGN_MASK ) ) . AsSingle ( ) ;
3051
3041
Vector128 < float > z = ExpOperator . Invoke ( y - Vector128 . Create ( LOGV ) . AsSingle ( ) ) ;
3052
- return Vector128 . Create ( HALFV ) . AsSingle ( ) * ( z + Vector128 . Create ( INVV2 ) . AsSingle ( ) * 1f / z ) ;
3042
+ return Vector128 . Create ( HALFV ) . AsSingle ( ) * ( z + ( Vector128 . Create ( INVV2 ) . AsSingle ( ) / z ) ) ;
3053
3043
}
3054
3044
3055
3045
public static Vector256 < float > Invoke ( Vector256 < float > x )
3056
3046
{
3057
- Vector256 < uint > ux = x . AsUInt32 ( ) & Vector256 . Create ( SIGN_MASK ) ;
3058
- if ( Vector256 . GreaterThanAny ( ux , Vector256 . Create ( ARG_MAX ) ) )
3059
- {
3060
- return Vector256 . Create ( Invoke ( x . GetLower ( ) ) , Invoke ( x . GetUpper ( ) ) ) ;
3061
- }
3062
-
3063
- Vector256 < float > y = ux . AsSingle ( ) ;
3047
+ Vector256 < float > y = ( x . AsUInt32 ( ) & Vector256 . Create ( SIGN_MASK ) ) . AsSingle ( ) ;
3064
3048
Vector256 < float > z = ExpOperator . Invoke ( y - Vector256 . Create ( LOGV ) . AsSingle ( ) ) ;
3065
- return Vector256 . Create ( HALFV ) . AsSingle ( ) * ( z + Vector256 . Create ( INVV2 ) . AsSingle ( ) * 1f / z ) ;
3049
+ return Vector256 . Create ( HALFV ) . AsSingle ( ) * ( z + ( Vector256 . Create ( INVV2 ) . AsSingle ( ) / z ) ) ;
3066
3050
}
3067
3051
3068
3052
#if NET8_0_OR_GREATER
3069
3053
public static Vector512 < float > Invoke ( Vector512 < float > x )
3070
3054
{
3071
- Vector512 < uint > ux = x . AsUInt32 ( ) & Vector512 . Create ( SIGN_MASK ) ;
3072
- if ( Vector512 . GreaterThanAny ( ux , Vector512 . Create ( ARG_MAX ) ) )
3073
- {
3074
- return Vector512 . Create ( Invoke ( x . GetLower ( ) ) , Invoke ( x . GetUpper ( ) ) ) ;
3075
- }
3076
-
3077
- Vector512 < float > y = ux . AsSingle ( ) ;
3055
+ Vector512 < float > y = ( x . AsUInt32 ( ) & Vector512 . Create ( SIGN_MASK ) ) . AsSingle ( ) ;
3078
3056
Vector512 < float > z = ExpOperator . Invoke ( y - Vector512 . Create ( LOGV ) . AsSingle ( ) ) ;
3079
- return Vector512 . Create ( HALFV ) . AsSingle ( ) * ( z + Vector512 . Create ( INVV2 ) . AsSingle ( ) * 1f / z ) ;
3057
+ return Vector512 . Create ( HALFV ) . AsSingle ( ) * ( z + ( Vector512 . Create ( INVV2 ) . AsSingle ( ) / z ) ) ;
3080
3058
}
3081
3059
#endif
3082
3060
}
0 commit comments