namespaceSystem.Runtime.Intrinsics.Wasm{publicabstractclassWasmBase{publicboolIsSupported{get;}// Constructing SIMD ValuespublicstaticVector128<T>Constant(ImmByte[16]imm);publicstaticVector128<sbyte>Splat(intx);publicstaticVector128<byte>Splat(uintx);publicstaticVector128<short>Splat(intx);publicstaticVector128<ushort>Splat(uintx);publicstaticVector128<int>Splat(intx);publicstaticVector128<uint>Splat(uintx);publicstaticVector128<long>Splat(longx);publicstaticVector128<ulong>Splat(ulongx);publicstaticVector128<float>Splat(floatx);publicstaticVector128<double>Splat(doublex);publicstaticVector128<nint>Splat(nintx);publicstaticVector128<nuint>Splat(nuintx);// Accessing lanespublicstaticintExtractLane(Vector128<sbyte>a,byteimm);// takes ImmLaneIdx16publicstaticuintExtractLane(Vector128<byte>a,byteimm);// takes ImmLaneIdx16publicstaticintExtractLane(Vector128<short>a,byteimm);// takes ImmLaneIdx8publicstaticuintExtractLane(Vector128<ushort>a,byteimm);// takes ImmLaneIdx8publicstaticintExtractLane(Vector128<int>a,byteimm);// takes ImmLaneIdx4publicstaticuintExtractLane(Vector128<uint>a,byteimm);// takes ImmLaneIdx4publicstaticlongExtractLane(Vector128<long>a,byteimm);// takes ImmLaneIdx2publicstaticulongExtractLane(Vector128<ulong>a,byteimm);// takes ImmLaneIdx2publicstaticfloatExtractLane(Vector128<float>a,byteimm);// takes ImmLaneIdx4publicstaticdoubleExtractLane(Vector128<double>a,byteimm);// takes ImmLaneIdx2publicstaticnintExtractLane(Vector128<nint>a,byteimm);publicstaticnuintExtractLane(Vector128<nuint>a,byteimm);publicstaticVector128<sbyte>ReplaceLane(Vector128<sbyte>a,byteimm,intx);// takes ImmLaneIdx16publicstaticVector128<byte>ReplaceLane(Vector128<byte>a,byteimm,uintx);// takes ImmLaneIdx16publicstaticVector128<short>ReplaceLane(Vector128<short>a,byteimm,intx);// takes ImmLaneIdx8publicstaticVector128<ushort>ReplaceLane(Vector128<ushort>a,byteimm,uintx);// takes ImmLaneIdx8publicstaticVector128<int>ReplaceLane(Vector128<int>a,byteimm,intx);// takes ImmLaneIdx4publicstaticVector128<int>ReplaceLane(Vector128<uint>a,byteimm,uintx);// takes ImmLaneIdx4publicstaticVector128<long>ReplaceLane(Vector128<long>a,byteimm,longx);// takes ImmLaneIdx2publicstaticVector128<ulong>ReplaceLane(Vector128<ulong>a,byteimm,ulongx);// takes ImmLaneIdx2publicstaticVector128<float>ReplaceLane(Vector128<float>a,byteimm,floatx);// takes ImmLaneIdx4publicstaticVector128<double>ReplaceLane(Vector128<double>a,byteimm,doublex);// takes ImmLaneIdx2publicstaticVector128<nint>ReplaceLane(Vector128<nint>a,byteimm,nintx);publicstaticVector128<nuint>ReplaceLane(Vector128<nuint>a,byteimm,nuintx);publicstaticVector128<sbyte>Shuffle(Vector128<sbyte>a,Vector128<sbyte>b,ImmLaneIdx32[16]imm);publicstaticVector128<byte>Shuffle(Vector128<byte>a,Vector128<byte>b,ImmLaneIdx32[16]imm);publicstaticVector128<sbyte>Swizzle(Vector128<sbyte>a,Vector128<sbyte>s);publicstaticVector128<byte>Swizzle(Vector128<byte>a,Vector128<byte>s);// Integer arithmeticpublicstaticVector128<sbyte>Add(Vector128<sbyte>a,Vector128<sbyte>b);publicstaticVector128<byte>Add(Vector128<byte>a,Vector128<byte>b);publicstaticVector128<short>Add(Vector128<short>a,Vector128<short>b);publicstaticVector128<ushort>Add(Vector128<ushort>a,Vector128<ushort>b);publicstaticVector128<int>Add(Vector128<int>a,Vector128<int>b);publicstaticVector128<uint>Add(Vector128<uint>a,Vector128<uint>b);publicstaticVector128<long>Add(Vector128<long>a,Vector128<long>b);publicstaticVector128<ulong>Add(Vector128<ulong>a,Vector128<ulong>b);publicstaticVector128<nint>Add(Vector128<nint>a,Vector128<nint>b);publicstaticVector128<nuint>Add(Vector128<nuint>a,Vector128<nuint>b);publicstaticVector128<sbyte>Subtract(Vector128<sbyte>a,Vector128<sbyte>b);publicstaticVector128<byte>Subtract(Vector128<byte>a,Vector128<byte>b);publicstaticVector128<short>Subtract(Vector128<short>a,Vector128<short>b);publicstaticVector128<ushort>Subtract(Vector128<ushort>a,Vector128<ushort>b);publicstaticVector128<int>Subtract(Vector128<int>a,Vector128<int>b);publicstaticVector128<uint>Subtract(Vector128<uint>a,Vector128<uint>b);publicstaticVector128<long>Subtract(Vector128<long>a,Vector128<long>b);publicstaticVector128<ulong>Subtract(Vector128<ulong>a,Vector128<ulong>b);publicstaticVector128<nint>Subtract(Vector128<nint>a,Vector128<nint>b);publicstaticVector128<nuint>Subtract(Vector128<nuint>a,Vector128<nuint>b);publicstaticVector128<short>Multiply(Vector128<short>a,Vector128<short>b);publicstaticVector128<ushort>Multiply(Vector128<ushort>a,Vector128<ushort>b);publicstaticVector128<int>Multiply(Vector128<int>a,Vector128<int>b);publicstaticVector128<uint>Multiply(Vector128<uint>a,Vector128<uint>b);publicstaticVector128<long>Multiply(Vector128<long>a,Vector128<long>b);publicstaticVector128<ulong>Multiply(Vector128<ulong>a,Vector128<ulong>b);publicstaticVector128<nint>Multiply(Vector128<nint>a,Vector128<nint>b);publicstaticVector128<nuint>Multiply(Vector128<nuint>a,Vector128<nuint>b);publicstaticVector128<int>Dot(Vector128<short>a,Vector128<short>b);publicstaticVector128<sbyte>Negate(Vector128<sbyte>a);publicstaticVector128<byte>Negate(Vector128<byte>a);publicstaticVector128<short>Negate(Vector128<short>a);publicstaticVector128<ushort>Negate(Vector128<ushort>a);publicstaticVector128<int>Negate(Vector128<int>a);publicstaticVector128<uint>Negate(Vector128<uint>a);publicstaticVector128<long>Negate(Vector128<long>a);publicstaticVector128<ulong>Negate(Vector128<ulong>a);publicstaticVector128<nint>Negate(Vector128<nint>a);publicstaticVector128<nuint>Negate(Vector128<nuint>a);// Extended integer arithmeticpublicstaticVector128<short>MultiplyWideningLower(Vector128<sbyte>a,Vector128<sbyte>b);publicstaticVector128<ushort>MultiplyWideningLower(Vector128<byte>a,Vector128<byte>b);publicstaticVector128<int>MultiplyWideningLower(Vector128<short>a,Vector128<short>b);publicstaticVector128<uint>MultiplyWideningLower(Vector128<ushort>a,Vector128<ushort>b);publicstaticVector128<long>MultiplyWideningLower(Vector128<int>a,Vector128<int>b);publicstaticVector128<ulong>MultiplyWideningLower(Vector128<uint>a,Vector128<uint>b);publicstaticVector128<short>MultiplyWideningUpper(Vector128<sbyte>a,Vector128<sbyte>b);publicstaticVector128<ushort>MultiplyWideningUpper(Vector128<byte>a,Vector128<byte>b);publicstaticVector128<int>MultiplyWideningUpper(Vector128<short>a,Vector128<short>b);publicstaticVector128<uint>MultiplyWideningUpper(Vector128<ushort>a,Vector128<ushort>b);publicstaticVector128<long>MultiplyWideningUpper(Vector128<int>a,Vector128<int>b);publicstaticVector128<ulong>MultiplyWideningUpper(Vector128<uint>a,Vector128<uint>b);publicstaticVector128<short>AddPairwiseWidening(Vector128<sbyte>a);publicstaticVector128<ushort>AddPairwiseWidening(Vector128<byte>a);publicstaticVector128<int>AddPairwiseWidening(Vector128<short>a);publicstaticVector128<uint>AddPairwiseWidening(Vector128<ushort>a);// Saturating integer arithmeticpublicstaticVector128<sbyte>AddSaturate(Vector128<sbyte>a,Vector128<sbyte>b);publicstaticVector128<byte>AddSaturate(Vector128<byte>a,Vector128<byte>b);publicstaticVector128<short>AddSaturate(Vector128<short>a,Vector128<short>b);publicstaticVector128<ushort>AddSaturate(Vector128<ushort>a,Vector128<ushort>b);publicstaticVector128<sbyte>SubtractSaturate(Vector128<sbyte>a,Vector128<sbyte>b);publicstaticVector128<byte>SubtractSaturate(Vector128<byte>a,Vector128<byte>b);publicstaticVector128<short>SubtractSaturate(Vector128<short>a,Vector128<short>b);publicstaticVector128<ushort>SubtractSaturate(Vector128<ushort>a,Vector128<ushort>b);publicstaticVector128<short>MultiplyRoundedSaturateQ15(Vector128<short>a,Vector128<short>b);publicstaticVector128<sbyte>Min(Vector128<sbyte>a,Vector128<sbyte>b);publicstaticVector128<byte>Min(Vector128<byte>a,Vector128<byte>b);publicstaticVector128<short>Min(Vector128<short>a,Vector128<short>b);publicstaticVector128<ushort>Min(Vector128<ushort>a,Vector128<ushort>b);publicstaticVector128<int>Min(Vector128<int>a,Vector128<int>b);publicstaticVector128<uint>Min(Vector128<uint>a,Vector128<uint>b);publicstaticVector128<sbyte>Max(Vector128<sbyte>a,Vector128<sbyte>b);publicstaticVector128<byte>Max(Vector128<byte>a,Vector128<byte>b);publicstaticVector128<short>Max(Vector128<short>a,Vector128<short>b);publicstaticVector128<ushort>Max(Vector128<ushort>a,Vector128<ushort>b);publicstaticVector128<int>Max(Vector128<int>a,Vector128<int>b);publicstaticVector128<uint>Max(Vector128<uint>a,Vector128<uint>b);publicstaticVector128<byte>AverageRounded(Vector128<byte>a,Vector128<byte>b);publicstaticVector128<ushort>AverageRounded(Vector128<ushort>a,Vector128<ushort>b);publicstaticVector128<sbyte>Abs(Vector128<sbyte>a);publicstaticVector128<short>Abs(Vector128<short>a);publicstaticVector128<int>Abs(Vector128<int>a);publicstaticVector128<long>Abs(Vector128<long>a);publicstaticVector128<nint>Abs(Vector128<nint>a);// Bit shiftspublicstaticVector128<sbyte>ShiftLeft(Vector128<sbyte>a,inty);publicstaticVector128<byte>ShiftLeft(Vector128<byte>a,inty);publicstaticVector128<short>ShiftLeft(Vector128<short>a,inty);publicstaticVector128<ushort>ShiftLeft(Vector128<ushort>a,inty);publicstaticVector128<int>ShiftLeft(Vector128<int>a,inty);publicstaticVector128<uint>ShiftLeft(Vector128<uint>a,inty);publicstaticVector128<long>ShiftLeft(Vector128<long>a,inty);publicstaticVector128<ulong>ShiftLeft(Vector128<ulong>a,inty);publicstaticVector128<nint>ShiftLeft(Vector128<nint>a,inty);publicstaticVector128<nuint>ShiftLeft(Vector128<nuint>a,inty);publicstaticVector128<sbyte>ShiftRightArithmetic(Vector128<sbyte>a,inty);publicstaticVector128<byte>ShiftRightArithmetic(Vector128<byte>a,inty);publicstaticVector128<short>ShiftRightArithmetic(Vector128<short>a,inty);publicstaticVector128<ushort>ShiftRightArithmetic(Vector128<ushort>a,inty);publicstaticVector128<int>ShiftRightArithmetic(Vector128<int>a,inty);publicstaticVector128<uint>ShiftRightArithmetic(Vector128<uint>a,inty);publicstaticVector128<long>ShiftRightArithmetic(Vector128<long>a,inty);publicstaticVector128<ulong>ShiftRightArithmetic(Vector128<ulong>a,inty);publicstaticVector128<nint>ShiftRightArithmetic(Vector128<nint>a,inty);publicstaticVector128<nuint>ShiftRightArithmetic(Vector128<nuint>a,inty);publicstaticVector128<sbyte>ShiftRightLogical(Vector128<sbyte>a,inty);publicstaticVector128<byte>ShiftRightLogical(Vector128<byte>a,inty);publicstaticVector128<short>ShiftRightLogical(Vector128<short>a,inty);publicstaticVector128<ushort>ShiftRightLogical(Vector128<ushort>a,inty);publicstaticVector128<int>ShiftRightLogical(Vector128<int>a,inty);publicstaticVector128<uint>ShiftRightLogical(Vector128<uint>a,inty);publicstaticVector128<long>ShiftRightLogical(Vector128<long>a,inty);publicstaticVector128<ulong>ShiftRightLogical(Vector128<ulong>a,inty);publicstaticVector128<nint>ShiftRightLogical(Vector128<nint>a,inty);publicstaticVector128<nuint>ShiftRightLogical(Vector128<nuint>a,inty);// Bitwise operationspublicstaticVector128<sbyte>And(Vector128<sbyte>a,Vector128<sbyte>b);publicstaticVector128<byte>And(Vector128<byte>a,Vector128<byte>b);publicstaticVector128<short>And(Vector128<short>a,Vector128<short>b);publicstaticVector128<ushort>And(Vector128<ushort>a,Vector128<ushort>b);publicstaticVector128<int>And(Vector128<int>a,Vector128<int>b);publicstaticVector128<uint>And(Vector128<uint>a,Vector128<uint>b);publicstaticVector128<long>And(Vector128<long>a,Vector128<long>b);publicstaticVector128<ulong>And(Vector128<ulong>a,Vector128<ulong>b);publicstaticVector128<float>And(Vector128<float>a,Vector128<float>b);publicstaticVector128<double>And(Vector128<double>a,Vector128<double>b);publicstaticVector128<nint>And(Vector128<nint>a,Vector128<nint>b);publicstaticVector128<nuint>And(Vector128<nuint>a,Vector128<nuint>b);publicstaticVector128<sbyte>Or(Vector128<sbyte>a,Vector128<sbyte>b);publicstaticVector128<byte>Or(Vector128<byte>a,Vector128<byte>b);publicstaticVector128<short>Or(Vector128<short>a,Vector128<short>b);publicstaticVector128<ushort>Or(Vector128<ushort>a,Vector128<ushort>b);publicstaticVector128<int>Or(Vector128<int>a,Vector128<int>b);publicstaticVector128<uint>Or(Vector128<uint>a,Vector128<uint>b);publicstaticVector128<long>Or(Vector128<long>a,Vector128<long>b);publicstaticVector128<ulong>Or(Vector128<ulong>a,Vector128<ulong>b);publicstaticVector128<float>Or(Vector128<float>a,Vector128<float>b);publicstaticVector128<double>Or(Vector128<double>a,Vector128<double>b);publicstaticVector128<nint>Or(Vector128<nint>a,Vector128<nint>b);publicstaticVector128<nuint>Or(Vector128<nuint>a,Vector128<nuint>b);publicstaticVector128<sbyte>Xor(Vector128<sbyte>a,Vector128<sbyte>b);publicstaticVector128<byte>Xor(Vector128<byte>a,Vector128<byte>b);publicstaticVector128<short>Xor(Vector128<short>a,Vector128<short>b);publicstaticVector128<ushort>Xor(Vector128<ushort>a,Vector128<ushort>b);publicstaticVector128<int>Xor(Vector128<int>a,Vector128<int>b);publicstaticVector128<uint>Xor(Vector128<uint>a,Vector128<uint>b);publicstaticVector128<long>Xor(Vector128<long>a,Vector128<long>b);publicstaticVector128<ulong>Xor(Vector128<ulong>a,Vector128<ulong>b);publicstaticVector128<float>Xor(Vector128<float>a,Vector128<float>b);publicstaticVector128<double>Xor(Vector128<double>a,Vector128<double>b);publicstaticVector128<nint>Xor(Vector128<nint>a,Vector128<nint>b);publicstaticVector128<nuint>Xor(Vector128<nuint>a,Vector128<nuint>b);publicstaticVector128<sbyte>Not(Vector128<sbyte>a);publicstaticVector128<byte>Not(Vector128<byte>a);publicstaticVector128<short>Not(Vector128<short>a);publicstaticVector128<ushort>Not(Vector128<ushort>a);publicstaticVector128<int>Not(Vector128<int>a);publicstaticVector128<uint>Not(Vector128<uint>a);publicstaticVector128<long>Not(Vector128<long>a);publicstaticVector128<ulong>Not(Vector128<ulong>a);publicstaticVector128<float>Not(Vector128<float>a);publicstaticVector128<double>Not(Vector128<double>a);publicstaticVector128<nint>Not(Vector128<nint>a);publicstaticVector128<nuint>Not(Vector128<nuint>a);publicstaticVector128<sbyte>AndNot(Vector128<sbyte>a,Vector128<sbyte>b);publicstaticVector128<byte>AndNot(Vector128<byte>a,Vector128<byte>b);publicstaticVector128<short>AndNot(Vector128<short>a,Vector128<short>b);publicstaticVector128<ushort>AndNot(Vector128<ushort>a,Vector128<ushort>b);publicstaticVector128<int>AndNot(Vector128<int>a,Vector128<int>b);publicstaticVector128<uint>AndNot(Vector128<uint>a,Vector128<uint>b);publicstaticVector128<long>AndNot(Vector128<long>a,Vector128<long>b);publicstaticVector128<ulong>AndNot(Vector128<ulong>a,Vector128<ulong>b);publicstaticVector128<float>AndNot(Vector128<float>a,Vector128<float>b);publicstaticVector128<double>AndNot(Vector128<double>a,Vector128<double>b);publicstaticVector128<nint>AndNot(Vector128<nint>a,Vector128<nint>b);publicstaticVector128<nuint>AndNot(Vector128<nuint>a,Vector128<nuint>b);publicstaticVector128<sbyte>BitwiseSelect(Vector128<sbyte>a,Vector128<sbyte>b,Vector128<sbyte>c);publicstaticVector128<byte>BitwiseSelect(Vector128<byte>a,Vector128<byte>b,Vector128<byte>c);publicstaticVector128<short>BitwiseSelect(Vector128<short>a,Vector128<short>b,Vector128<short>c);publicstaticVector128<ushort>BitwiseSelect(Vector128<ushort>a,Vector128<ushort>b,Vector128<ushort>c);publicstaticVector128<int>BitwiseSelect(Vector128<int>a,Vector128<int>b,Vector128<int>c);publicstaticVector128<uint>BitwiseSelect(Vector128<uint>a,Vector128<uint>b,Vector128<uint>c);publicstaticVector128<long>BitwiseSelect(Vector128<long>a,Vector128<long>b,Vector128<long>c);publicstaticVector128<ulong>BitwiseSelect(Vector128<ulong>a,Vector128<ulong>b,Vector128<ulong>c);publicstaticVector128<float>BitwiseSelect(Vector128<float>a,Vector128<float>b,Vector128<float>c);publicstaticVector128<double>BitwiseSelect(Vector128<double>a,Vector128<double>b,Vector128<double>c);publicstaticVector128<nint>BitwiseSelect(Vector128<nint>a,Vector128<nint>b,Vector128<nint>c);publicstaticVector128<nuint>BitwiseSelect(Vector128<nuint>a,Vector128<nuint>b,Vector128<nuint>c);publicstaticVector128<byte>PopCount(Vector128<byte>v);// Boolean horizontal reductionspublicstaticboolAnyTrue(Vector128<sbyte>a);// returns i32, AnyBitSet?publicstaticboolAnyTrue(Vector128<byte>a);// returns i32publicstaticboolAnyTrue(Vector128<short>a);// returns i32publicstaticboolAnyTrue(Vector128<ushort>a);// returns i32publicstaticboolAnyTrue(Vector128<int>a);// returns i32publicstaticboolAnyTrue(Vector128<uint>a);// returns i32publicstaticboolAnyTrue(Vector128<long>a);// returns i32publicstaticboolAnyTrue(Vector128<ulong>a);// returns i32publicstaticboolAnyTrue(Vector128<float>a);// returns i32publicstaticboolAnyTrue(Vector128<double>a);// returns i32publicstaticboolAnyTrue(Vector128<nint>a);// returns i32publicstaticboolAnyTrue(Vector128<nuint>a);// returns i32publicstaticboolAllTrue(Vector128<sbyte>a);// returns i32, AreAllNonZero?publicstaticboolAllTrue(Vector128<byte>a);// returns i32publicstaticboolAllTrue(Vector128<short>a);// returns i32publicstaticboolAllTrue(Vector128<ushort>a);// returns i32publicstaticboolAllTrue(Vector128<int>a);// returns i32publicstaticboolAllTrue(Vector128<uint>a);// returns i32publicstaticboolAllTrue(Vector128<long>a);// returns i32publicstaticboolAllTrue(Vector128<ulong>a);// returns i32publicstaticboolAllTrue(Vector128<nint>a);// returns i32publicstaticboolAllTrue(Vector128<nuint>a);// returns i32// Bitmask extractionpublicstaticintBitmask(Vector128<sbyte>a);publicstaticintBitmask(Vector128<byte>a);publicstaticintBitmask(Vector128<short>a);publicstaticintBitmask(Vector128<ushort>a);publicstaticintBitmask(Vector128<int>a);publicstaticintBitmask(Vector128<uint>a);publicstaticintBitmask(Vector128<long>a);publicstaticintBitmask(Vector128<ulong>a);publicstaticintBitmask(Vector128<nint>a);publicstaticintBitmask(Vector128<nuint>a);// ComparisonspublicstaticVector128<sbyte>CompareEqual(Vector128<sbyte>a,Vector128<sbyte>b);publicstaticVector128<byte>CompareEqual(Vector128<byte>a,Vector128<byte>b);publicstaticVector128<short>CompareEqual(Vector128<short>a,Vector128<short>b);publicstaticVector128<ushort>CompareEqual(Vector128<ushort>a,Vector128<ushort>b);publicstaticVector128<int>CompareEqual(Vector128<int>a,Vector128<int>b);publicstaticVector128<uint>CompareEqual(Vector128<uint>a,Vector128<uint>b);publicstaticVector128<long>CompareEqual(Vector128<long>a,Vector128<long>b);publicstaticVector128<ulong>CompareEqual(Vector128<ulong>a,Vector128<ulong>b);publicstaticVector128<float>CompareEqual(Vector128<float>a,Vector128<float>b);publicstaticVector128<double>CompareEqual(Vector128<double>a,Vector128<double>b);publicstaticVector128<nint>CompareEqual(Vector128<nint>a,Vector128<nint>b);publicstaticVector128<nuint>CompareEqual(Vector128<nuint>a,Vector128<nuint>b);publicstaticVector128<sbyte>CompareNotEqual(Vector128<sbyte>a,Vector128<sbyte>b);publicstaticVector128<byte>CompareNotEqual(Vector128<byte>a,Vector128<byte>b);publicstaticVector128<short>CompareNotEqual(Vector128<short>a,Vector128<short>b);publicstaticVector128<ushort>CompareNotEqual(Vector128<ushort>a,Vector128<ushort>b);publicstaticVector128<int>CompareNotEqual(Vector128<int>a,Vector128<int>b);publicstaticVector128<uint>CompareNotEqual(Vector128<uint>a,Vector128<uint>b);publicstaticVector128<long>CompareNotEqual(Vector128<long>a,Vector128<long>b);publicstaticVector128<ulong>CompareNotEqual(Vector128<ulong>a,Vector128<ulong>b);publicstaticVector128<float>CompareNotEqual(Vector128<float>a,Vector128<float>b);publicstaticVector128<double>CompareNotEqual(Vector128<double>a,Vector128<double>b);publicstaticVector128<nint>CompareNotEqual(Vector128<nint>a,Vector128<nint>b);publicstaticVector128<nuint>CompareNotEqual(Vector128<nuint>a,Vector128<nuint>b);publicstaticVector128<sbyte>CompareLessThan(Vector128<sbyte>a,Vector128<sbyte>b);publicstaticVector128<byte>CompareLessThan(Vector128<byte>a,Vector128<byte>b);publicstaticVector128<short>CompareLessThan(Vector128<short>a,Vector128<short>b);publicstaticVector128<ushort>CompareLessThan(Vector128<ushort>a,Vector128<ushort>b);publicstaticVector128<int>CompareLessThan(Vector128<int>a,Vector128<int>b);publicstaticVector128<uint>CompareLessThan(Vector128<uint>a,Vector128<uint>b);publicstaticVector128<long>CompareLessThan(Vector128<long>a,Vector128<long>b);publicstaticVector128<ulong>CompareLessThan(Vector128<ulong>a,Vector128<ulong>b);publicstaticVector128<float>CompareLessThan(Vector128<float>a,Vector128<float>b);publicstaticVector128<double>CompareLessThan(Vector128<double>a,Vector128<double>b);publicstaticVector128<nint>CompareLessThan(Vector128<nint>a,Vector128<nint>b);publicstaticVector128<nuint>CompareLessThan(Vector128<nuint>a,Vector128<nuint>b);publicstaticVector128<sbyte>CompareLessThanOrEqual(Vector128<sbyte>a,Vector128<sbyte>b);publicstaticVector128<byte>CompareLessThanOrEqual(Vector128<byte>a,Vector128<byte>b);publicstaticVector128<short>CompareLessThanOrEqual(Vector128<short>a,Vector128<short>b);publicstaticVector128<ushort>CompareLessThanOrEqual(Vector128<ushort>a,Vector128<ushort>b);publicstaticVector128<int>CompareLessThanOrEqual(Vector128<int>a,Vector128<int>b);publicstaticVector128<uint>CompareLessThanOrEqual(Vector128<uint>a,Vector128<uint>b);publicstaticVector128<long>CompareLessThanOrEqual(Vector128<long>a,Vector128<long>b);publicstaticVector128<ulong>CompareLessThanOrEqual(Vector128<ulong>a,Vector128<ulong>b);publicstaticVector128<float>CompareLessThanOrEqual(Vector128<float>a,Vector128<float>b);publicstaticVector128<double>CompareLessThanOrEqual(Vector128<double>a,Vector128<double>b);publicstaticVector128<nint>CompareLessThanOrEqual(Vector128<nint>a,Vector128<nint>b);publicstaticVector128<nuint>CompareLessThanOrEqual(Vector128<nuint>a,Vector128<nuint>b);publicstaticVector128<sbyte>CompareGreaterThan(Vector128<sbyte>a,Vector128<sbyte>b);publicstaticVector128<byte>CompareGreaterThan(Vector128<byte>a,Vector128<byte>b);publicstaticVector128<short>CompareGreaterThan(Vector128<short>a,Vector128<short>b);publicstaticVector128<ushort>CompareGreaterThan(Vector128<ushort>a,Vector128<ushort>b);publicstaticVector128<int>CompareGreaterThan(Vector128<int>a,Vector128<int>b);publicstaticVector128<uint>CompareGreaterThan(Vector128<uint>a,Vector128<uint>b);publicstaticVector128<long>CompareGreaterThan(Vector128<long>a,Vector128<long>b);publicstaticVector128<ulong>CompareGreaterThan(Vector128<ulong>a,Vector128<ulong>b);publicstaticVector128<float>CompareGreaterThan(Vector128<float>a,Vector128<float>b);publicstaticVector128<double>CompareGreaterThan(Vector128<double>a,Vector128<double>b);publicstaticVector128<nint>CompareGreaterThan(Vector128<nint>a,Vector128<nint>b);publicstaticVector128<nuint>CompareGreaterThan(Vector128<nuint>a,Vector128<nuint>b);publicstaticVector128<sbyte>CompareGreaterThanOrEqual(Vector128<sbyte>a,Vector128<sbyte>b);publicstaticVector128<byte>CompareGreaterThanOrEqual(Vector128<byte>a,Vector128<byte>b);publicstaticVector128<short>CompareGreaterThanOrEqual(Vector128<short>a,Vector128<short>b);publicstaticVector128<ushort>CompareGreaterThanOrEqual(Vector128<ushort>a,Vector128<ushort>b);publicstaticVector128<int>CompareGreaterThanOrEqual(Vector128<int>a,Vector128<int>b);publicstaticVector128<uint>CompareGreaterThanOrEqual(Vector128<uint>a,Vector128<uint>b);publicstaticVector128<long>CompareGreaterThanOrEqual(Vector128<long>a,Vector128<long>b);publicstaticVector128<ulong>CompareGreaterThanOrEqual(Vector128<ulong>a,Vector128<ulong>b);publicstaticVector128<float>CompareGreaterThanOrEqual(Vector128<float>a,Vector128<float>b);publicstaticVector128<double>CompareGreaterThanOrEqual(Vector128<double>a,Vector128<double>b);publicstaticVector128<nint>CompareGreaterThanOrEqual(Vector128<nint>a,Vector128<nint>b);publicstaticVector128<nuint>CompareGreaterThanOrEqual(Vector128<nuint>a,Vector128<nuint>b);// Load and storepublicstaticVector128<sbyte>LoadVector128(sbyte*memarg);publicstaticVector128<byte>LoadVector128(byte*memarg);publicstaticVector128<short>LoadVector128(short*memarg);publicstaticVector128<ushort>LoadVector128(ushort*memarg);publicstaticVector128<int>LoadVector128(int*memarg);publicstaticVector128<uint>LoadVector128(uint*memarg);publicstaticVector128<long>LoadVector128(long*memarg);publicstaticVector128<ulong>LoadVector128(ulong*memarg);publicstaticVector128<float>LoadVector128(float*memarg);publicstaticVector128<double>LoadVector128(double*memarg);publicstaticVector128<nint>LoadVector128(nint*memarg);publicstaticVector128<nuint>LoadVector128(nuint*memarg);publicstaticVector128<int>LoadScalarVector128(int*memarg);publicstaticVector128<uint>LoadScalarVector128(uint*memarg);publicstaticVector128<long>LoadScalarVector128(long*memarg);publicstaticVector128<ulong>LoadScalarVector128(ulong*memarg);publicstaticVector128<float>LoadScalarVector128(float*memarg);publicstaticVector128<double>LoadScalarVector128(double*memarg);publicstaticVector128<nint>LoadScalarVector128(nint*memarg);publicstaticVector128<nuint>LoadScalarVector128(nuint*memarg);publicstaticVector128<sbyte>LoadScalarAndSplatVector128(sbyte*memarg);publicstaticVector128<byte>LoadScalarAndSplatVector128(byte*memarg);publicstaticVector128<short>LoadScalarAndSplatVector128(short*memarg);publicstaticVector128<ushort>LoadScalarAndSplatVector128(ushort*memarg);publicstaticVector128<int>LoadScalarAndSplatVector128(int*memarg);publicstaticVector128<uint>LoadScalarAndSplatVector128(uint*memarg);publicstaticVector128<long>LoadScalarAndSplatVector128(long*memarg);publicstaticVector128<ulong>LoadScalarAndSplatVector128(ulong*memarg);publicstaticVector128<float>LoadScalarAndSplatVector128(float*memarg);publicstaticVector128<double>LoadScalarAndSplatVector128(double*memarg);publicstaticVector128<nint>LoadScalarAndSplatVector128(nint*memarg);publicstaticVector128<nuint>LoadScalarAndSplatVector128(nuint*memarg);publicstaticVector128<sbyte>LoadScalarAndInsert(sbyte*memarg,Vector128<sbyte>x,byteimm);// takes ImmLaneIdx16publicstaticVector128<byte>LoadScalarAndInsert(byte*memarg,Vector128<byte>x,byteimm);// takes ImmLaneIdx16publicstaticVector128<short>LoadScalarAndInsert(short*memarg,Vector128<short>x,byteimm);// takes ImmLaneIdx8publicstaticVector128<ushort>LoadScalarAndInsert(ushort*memarg,Vector128<ushort>x,byteimm);// takes ImmLaneIdx8publicstaticVector128<int>LoadScalarAndInsert(int*memarg,Vector128<int>x,byteimm);// takes ImmLaneIdx4publicstaticVector128<uint>LoadScalarAndInsert(uint*memarg,Vector128<uint>x,byteimm);// takes ImmLaneIdx4publicstaticVector128<long>LoadScalarAndInsert(long*memarg,Vector128<long>x,byteimm);// takes ImmLaneIdx2publicstaticVector128<ulong>LoadScalarAndInsert(ulong*memarg,Vector128<ulong>x,byteimm);// takes ImmLaneIdx2publicstaticVector128<float>LoadScalarAndInsert(float*memarg,Vector128<float>x,byteimm);// takes ImmLaneIdx4publicstaticVector128<double>LoadScalarAndInsert(double*memarg,Vector128<double>x,byteimm);// takes ImmLaneIdx2publicstaticVector128<nint>LoadScalarAndInsert(nint*memarg,Vector128<nint>x,byteimm);publicstaticVector128<nuint>LoadScalarAndInsert(nuint*memarg,Vector128<nuint>x,byteimm);publicstaticVector128<short>LoadWideningVector128(sbyte*memarg);// takes ImmLaneIdx16publicstaticVector128<ushort>LoadWideningVector128(byte*memarg);// takes ImmLaneIdx16publicstaticVector128<int>LoadWideningVector128(short*memarg);// takes ImmLaneIdx8publicstaticVector128<uint>LoadWideningVector128(ushort*memarg);// takes ImmLaneIdx8publicstaticVector128<long>LoadWideningVector128(int*memarg);// takes ImmLaneIdx4publicstaticVector128<ulong>LoadWideningVector128(uint*memarg);// takes ImmLaneIdx4publicstaticvoidStore(sbyte*memarg,Vector128<sbyte>data);publicstaticvoidStore(byte*memarg,Vector128<byte>data);publicstaticvoidStore(short*memarg,Vector128<short>data);publicstaticvoidStore(ushort*memarg,Vector128<ushort>data);publicstaticvoidStore(int*memarg,Vector128<int>data);publicstaticvoidStore(uint*memarg,Vector128<uint>data);publicstaticvoidStore(long*memarg,Vector128<long>data);publicstaticvoidStore(ulong*memarg,Vector128<ulong>data);publicstaticvoidStore(float*memarg,Vector128<float>data);publicstaticvoidStore(double*memarg,Vector128<double>data);publicstaticvoidStore(nint*memarg,Vector128<nint>data);publicstaticvoidStore(nuint*memarg,Vector128<nuint>data);publicstaticvoidStoreSelectedScalar(sbyte*memarg,Vector128<sbyte>data,byteimm);// takes ImmLaneIdx16publicstaticvoidStoreSelectedScalar(byte*memarg,Vector128<byte>data,byteimm);// takes ImmLaneIdx16publicstaticvoidStoreSelectedScalar(short*memarg,Vector128<short>data,byteimm);// takes ImmLaneIdx8publicstaticvoidStoreSelectedScalar(ushort*memarg,Vector128<ushort>data,byteimm);// takes ImmLaneIdx8publicstaticvoidStoreSelectedScalar(int*memarg,Vector128<int>data,byteimm);// takes ImmLaneIdx4publicstaticvoidStoreSelectedScalar(uint*memarg,Vector128<uint>data,byteimm);// takes ImmLaneIdx4publicstaticvoidStoreSelectedScalar(long*memarg,Vector128<long>data,byteimm);// takes ImmLaneIdx2publicstaticvoidStoreSelectedScalar(ulong*memarg,Vector128<ulong>data,byteimm);// takes ImmLaneIdx2publicstaticvoidStoreSelectedScalar(float*memarg,Vector128<float>data,byteimm);// takes ImmLaneIdx4publicstaticvoidStoreSelectedScalar(double*memarg,Vector128<double>data,byteimm);// takes ImmLaneIdx2publicstaticvoidStoreSelectedScalar(nint*memarg,Vector128<nint>data,byteimm);publicstaticvoidStoreSelectedScalar(nuint*memarg,Vector128<nuint>data,byteimm);// Floating-point sign bit operationspublicstaticVector128<float>Negate(Vector128<float>a);publicstaticVector128<double>Negate(Vector128<double>a);publicstaticVector128<float>Abs(Vector128<float>a);publicstaticVector128<double>Abs(Vector128<double>a);// Floating-point min and maxpublicstaticVector128<float>Min(Vector128<float>a,Vector128<float>b);publicstaticVector128<double>Min(Vector128<double>a,Vector128<double>b);publicstaticVector128<float>Max(Vector128<float>a,Vector128<float>b);publicstaticVector128<double>Max(Vector128<double>a,Vector128<double>b);publicstaticVector128<float>PseudoMin(Vector128<float>a,Vector128<float>b);publicstaticVector128<double>PseudoMin(Vector128<double>a,Vector128<double>b);publicstaticVector128<float>PseudoMax(Vector128<float>a,Vector128<float>b);publicstaticVector128<double>PseudoMax(Vector128<double>a,Vector128<double>b);// Floating-point arithmeticpublicstaticVector128<float>Add(Vector128<float>a,Vector128<float>b);publicstaticVector128<double>Add(Vector128<double>a,Vector128<double>b);publicstaticVector128<float>Subtract(Vector128<float>a,Vector128<float>b);publicstaticVector128<double>Subtract(Vector128<double>a,Vector128<double>b);publicstaticVector128<float>Divide(Vector128<float>a,Vector128<float>b);publicstaticVector128<double>Divide(Vector128<double>a,Vector128<double>b);publicstaticVector128<float>Multiply(Vector128<float>a,Vector128<float>b);publicstaticVector128<double>Multiply(Vector128<double>a,Vector128<double>b);publicstaticVector128<float>Sqrt(Vector128<float>a);publicstaticVector128<double>Sqrt(Vector128<double>a);publicstaticVector128<float>Ceiling(Vector128<float>a);publicstaticVector128<double>Ceiling(Vector128<double>a);publicstaticVector128<float>Floor(Vector128<float>a);publicstaticVector128<double>Floor(Vector128<double>a);publicstaticVector128<float>Truncate(Vector128<float>a);publicstaticVector128<double>Truncate(Vector128<double>a);publicstaticVector128<float>RoundToNearest(Vector128<float>a,Vector128<float>b);publicstaticVector128<double>RoundToNearest(Vector128<double>a,Vector128<double>b);// ConversionspublicstaticVector128<float>ConvertToSingle(Vector128<int>a);publicstaticVector128<float>ConvertToSingle(Vector128<uint>a);publicstaticVector128<float>ConvertToSingle(Vector128<double>a);publicstaticVector128<double>ConvertToDoubleLower(Vector128<int>a);publicstaticVector128<double>ConvertToDoubleLower(Vector128<uint>a);publicstaticVector128<double>ConvertToDoubleLower(Vector128<float>a);publicstaticVector128<int>ConvertToInt32Saturate(Vector128<float>a);publicstaticVector128<uint>ConvertToInt32Saturate(Vector128<float>a);publicstaticVector128<int>ConvertToInt32Saturate(Vector128<double>a);publicstaticVector128<uint>ConvertToInt32Saturate(Vector128<double>a);publicstaticVector128<sbyte>ConvertNarrowingSaturate(Vector128<short>a,Vector128<short>b);publicstaticVector128<byte>ConvertNarrowingSaturate(Vector128<ushort>a,Vector128<ushort>b);publicstaticVector128<short>ConvertNarrowingSaturate(Vector128<int>a,Vector128<int>b);publicstaticVector128<ushort>ConvertNarrowingSaturate(Vector128<uint>a,Vector128<uint>b);publicstaticVector128<int>ConvertNarrowingSaturate(Vector128<long>a,Vector128<long>b);publicstaticVector128<uint>ConvertNarrowingSaturate(Vector128<ulong>a,Vector128<ulong>b);publicstaticVector128<short>SignExtendWideningLower(Vector128<sbyte>a);publicstaticVector128<ushort>SignExtendWideningLower(Vector128<byte>a);publicstaticVector128<int>SignExtendWideningLower(Vector128<short>a);publicstaticVector128<uint>SignExtendWideningLower(Vector128<ushort>a);publicstaticVector128<long>SignExtendWideningLower(Vector128<int>a);publicstaticVector128<ulong>SignExtendWideningLower(Vector128<uint>a);publicstaticVector128<short>SignExtendWideningUpper(Vector128<sbyte>a);publicstaticVector128<ushort>SignExtendWideningUpper(Vector128<byte>a);publicstaticVector128<int>SignExtendWideningUpper(Vector128<short>a);publicstaticVector128<uint>SignExtendWideningUpper(Vector128<ushort>a);publicstaticVector128<long>SignExtendWideningUpper(Vector128<int>a);publicstaticVector128<ulong>SignExtendWideningUpper(Vector128<uint>a);publicstaticVector128<short>ZeroExtendWideningLower(Vector128<sbyte>a);publicstaticVector128<ushort>ZeroExtendWideningLower(Vector128<byte>a);publicstaticVector128<int>ZeroExtendWideningLower(Vector128<short>a);publicstaticVector128<uint>ZeroExtendWideningLower(Vector128<ushort>a);publicstaticVector128<long>ZeroExtendWideningLower(Vector128<int>a);publicstaticVector128<ulong>ZeroExtendWideningLower(Vector128<uint>a);publicstaticVector128<short>ZeroExtendWideningUpper(Vector128<sbyte>a);publicstaticVector128<ushort>ZeroExtendWideningUpper(Vector128<byte>a);publicstaticVector128<int>ZeroExtendWideningUpper(Vector128<short>a);publicstaticVector128<uint>ZeroExtendWideningUpper(Vector128<ushort>a);publicstaticVector128<long>ZeroExtendWideningUpper(Vector128<int>a);publicstaticVector128<ulong>ZeroExtendWideningUpper(Vector128<uint>a);}}
Background and Motivation
Over the past few releases of
.NET Core(now called just.NET), we have released a set of APIs calledhardware intrinsicsthat provide access to platform/architecture specific functionality in order to allow developers the ability to accelerate their code. This started withx86/x64support in .NET Core 3 and was extended with Arm64 support in .NET 5.WASMis also looking at providing SIMD support and currently has a nearly complete, but not yet approved, draft specification: https://github.com/WebAssembly/simd/blob/main/proposals/simd/SIMD.md. As such, we should look at adding the relevant APIs to support this platform and to eventually tie it into the "cross platform" helpers so we can trivially light up our existing code paths to also run onWASM: #49397-- This could be reviewed, approved, and implemented using the
[RequiresPreviewFeatures]attribute as most browsers have some experimental support for the feature already: https://github.com/WebAssembly/simd/blob/main/proposals/simd/ImplementationStatus.md. It would then become stable, with the relevant fixups, when the spec becomes finalized.Proposed API