diff options
Diffstat (limited to 'ChocolArm64/Instruction/AVectorHelper.cs')
| -rw-r--r-- | ChocolArm64/Instruction/AVectorHelper.cs | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/ChocolArm64/Instruction/AVectorHelper.cs b/ChocolArm64/Instruction/AVectorHelper.cs index b2d53740..3e4452ab 100644 --- a/ChocolArm64/Instruction/AVectorHelper.cs +++ b/ChocolArm64/Instruction/AVectorHelper.cs @@ -9,6 +9,18 @@ namespace ChocolArm64.Instruction { static class AVectorHelper { + private static readonly Vector128<float> Zero32_128Mask; + + static AVectorHelper() + { + if (!Sse2.IsSupported) + { + throw new PlatformNotSupportedException(); + } + + Zero32_128Mask = Sse.StaticCast<uint, float>(Sse2.SetVector128(0, 0, 0, 0xffffffff)); + } + public static void EmitCall(AILEmitterCtx Context, string Name64, string Name128) { bool IsSimd64 = Context.CurrOp.RegisterSize == ARegisterSize.SIMD64; @@ -449,6 +461,17 @@ namespace ChocolArm64.Instruction } [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector128<float> VectorZero32_128(Vector128<float> Vector) + { + if (Sse.IsSupported) + { + return Sse.And(Vector, Zero32_128Mask); + } + + throw new PlatformNotSupportedException(); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Vector128<sbyte> VectorSingleToSByte(Vector128<float> Vector) { if (Sse.IsSupported) |
