public static Vector128<double> CompareNotEqual(Vector128<double> left, Vector128<double> right) { throw new PlatformNotSupportedException(); }
public static Vector128<nint> CompareNotEqual(Vector128<nint> left, Vector128<nint> right) { throw new PlatformNotSupportedException(); }
public static Vector128<nuint> CompareNotEqual(Vector128<nuint> left, Vector128<nuint> right) { throw new PlatformNotSupportedException(); }
+
+ internal static Vector128<sbyte> ConvertNarrowingSignedSaturate(Vector128<short> lower, Vector128<short> upper) { throw new PlatformNotSupportedException(); }
+ internal static Vector128<short> ConvertNarrowingSignedSaturate(Vector128<int> lower, Vector128<int> upper) { throw new PlatformNotSupportedException(); }
+
+ internal static Vector128<byte> ConvertNarrowingUnsignedSaturate(Vector128<short> lower, Vector128<short> upper) { throw new PlatformNotSupportedException(); }
+ internal static Vector128<ushort> ConvertNarrowingUnsignedSaturate(Vector128<int> lower, Vector128<int> upper) { throw new PlatformNotSupportedException(); }
}
}
/// </summary>
[Intrinsic]
public static Vector128<nuint> CompareNotEqual(Vector128<nuint> left, Vector128<nuint> right) => CompareNotEqual(left, right);
+
+ /// <summary>
+ /// i8x16.narrow_i16x8_s
+ /// </summary>
+ [Intrinsic]
+ internal static Vector128<sbyte> ConvertNarrowingSignedSaturate(Vector128<short> lower, Vector128<short> upper) => ConvertNarrowingSignedSaturate(lower, upper);
+
+ /// <summary>
+ /// i16x8.narrow_i32x4_s
+ /// </summary>
+ [Intrinsic]
+ internal static Vector128<short> ConvertNarrowingSignedSaturate(Vector128<int> lower, Vector128<int> upper) => ConvertNarrowingSignedSaturate(lower, upper);
+
+ /// <summary>
+ /// i8x16.narrow_i16x8_u
+ /// </summary>
+ [Intrinsic]
+ internal static Vector128<byte> ConvertNarrowingUnsignedSaturate(Vector128<short> lower, Vector128<short> upper) => ConvertNarrowingUnsignedSaturate(lower, upper);
+
+ /// <summary>
+ /// i16x8.narrow_i32x4_u
+ /// </summary>
+ [Intrinsic]
+ internal static Vector128<ushort> ConvertNarrowingUnsignedSaturate(Vector128<int> lower, Vector128<int> upper) => ConvertNarrowingUnsignedSaturate(lower, upper);
}
}
{SN_Bitmask},
{SN_CompareEqual},
{SN_CompareNotEqual},
+ {SN_ConvertNarrowingSignedSaturate},
+ {SN_ConvertNarrowingUnsignedSaturate},
{SN_Dot},
{SN_ExtractLane},
{SN_Multiply},
return emit_simd_ins_for_sig (cfg, klass, type_enum_is_float (arg0_type) ? OP_XCOMPARE_FP : OP_XCOMPARE, CMP_EQ, arg0_type, fsig, args);
case SN_CompareNotEqual:
return emit_simd_ins_for_sig (cfg, klass, type_enum_is_float (arg0_type) ? OP_XCOMPARE_FP : OP_XCOMPARE, CMP_NE, arg0_type, fsig, args);
+ case SN_ConvertNarrowingSignedSaturate: {
+ int intrins = -1;
+ switch (arg0_type) {
+ case MONO_TYPE_I2:
+ intrins = INTRINS_WASM_NARROW_SIGNED_V16;
+ break;
+ case MONO_TYPE_I4:
+ intrins = INTRINS_WASM_NARROW_SIGNED_V8;
+ break;
+ }
+ if (intrins != -1)
+ return emit_simd_ins_for_sig (cfg, klass, OP_XOP_X_X_X, intrins, arg0_type, fsig, args);
+
+ return NULL;
+ }
+ case SN_ConvertNarrowingUnsignedSaturate: {
+ int intrins = -1;
+ switch (arg0_type) {
+ case MONO_TYPE_I2:
+ intrins = INTRINS_WASM_NARROW_UNSIGNED_V16;
+ break;
+ case MONO_TYPE_I4:
+ intrins = INTRINS_WASM_NARROW_UNSIGNED_V8;
+ break;
+ }
+ if (intrins != -1)
+ return emit_simd_ins_for_sig (cfg, klass, OP_XOP_X_X_X, intrins, arg0_type, fsig, args);
+
+ return NULL;
+ }
case SN_ExtractLane: {
int extract_op = type_to_xextract_op (arg0_type);
return emit_simd_ins_for_sig (cfg, klass, extract_op, -1, arg0_type, fsig, args);