diff --git a/src/coreclr/jit/fgdiagnostic.cpp b/src/coreclr/jit/fgdiagnostic.cpp index 146866f961d696..b28794d8cdd067 100644 --- a/src/coreclr/jit/fgdiagnostic.cpp +++ b/src/coreclr/jit/fgdiagnostic.cpp @@ -3428,10 +3428,12 @@ void Compiler::fgDebugCheckFlags(GenTree* tree, BasicBlock* block) case NI_Sve_Prefetch64Bit: case NI_Sve_Prefetch8Bit: case NI_Sve_GetFfrByte: + case NI_Sve_GetFfrDouble: case NI_Sve_GetFfrInt16: case NI_Sve_GetFfrInt32: case NI_Sve_GetFfrInt64: case NI_Sve_GetFfrSByte: + case NI_Sve_GetFfrSingle: case NI_Sve_GetFfrUInt16: case NI_Sve_GetFfrUInt32: case NI_Sve_GetFfrUInt64: diff --git a/src/coreclr/jit/gentree.cpp b/src/coreclr/jit/gentree.cpp index a5f5f9fda75aed..2634ad8e0632c2 100644 --- a/src/coreclr/jit/gentree.cpp +++ b/src/coreclr/jit/gentree.cpp @@ -28802,10 +28802,12 @@ bool GenTreeHWIntrinsic::OperRequiresCallFlag() const case NI_Sve_GatherPrefetch64Bit: case NI_Sve_GatherPrefetch8Bit: case NI_Sve_GetFfrByte: + case NI_Sve_GetFfrDouble: case NI_Sve_GetFfrInt16: case NI_Sve_GetFfrInt32: case NI_Sve_GetFfrInt64: case NI_Sve_GetFfrSByte: + case NI_Sve_GetFfrSingle: case NI_Sve_GetFfrUInt16: case NI_Sve_GetFfrUInt32: case NI_Sve_GetFfrUInt64: @@ -29020,10 +29022,12 @@ void GenTreeHWIntrinsic::Initialize(NamedIntrinsic intrinsicId) case NI_Sve_Prefetch64Bit: case NI_Sve_Prefetch8Bit: case NI_Sve_GetFfrByte: + case NI_Sve_GetFfrDouble: case NI_Sve_GetFfrInt16: case NI_Sve_GetFfrInt32: case NI_Sve_GetFfrInt64: case NI_Sve_GetFfrSByte: + case NI_Sve_GetFfrSingle: case NI_Sve_GetFfrUInt16: case NI_Sve_GetFfrUInt32: case NI_Sve_GetFfrUInt64: diff --git a/src/coreclr/jit/hwintrinsiclistarm64sve.h b/src/coreclr/jit/hwintrinsiclistarm64sve.h index 75e9603c8946ea..6fb3f89104ec06 100644 --- a/src/coreclr/jit/hwintrinsiclistarm64sve.h +++ b/src/coreclr/jit/hwintrinsiclistarm64sve.h @@ -58,11 +58,11 @@ HARDWARE_INTRINSIC(Sve, Count16BitElements, HARDWARE_INTRINSIC(Sve, Count32BitElements, 0, 1, {INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_sve_cntw, INS_invalid, INS_invalid, INS_invalid}, HW_Category_Scalar, HW_Flag_Scalable|HW_Flag_HasImmediateOperand|HW_Flag_SpecialCodeGen|HW_Flag_NoFloatingPointUsed) HARDWARE_INTRINSIC(Sve, Count64BitElements, 0, 1, {INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_sve_cntd, INS_invalid, INS_invalid, INS_invalid}, HW_Category_Scalar, HW_Flag_Scalable|HW_Flag_HasImmediateOperand|HW_Flag_SpecialCodeGen|HW_Flag_NoFloatingPointUsed) HARDWARE_INTRINSIC(Sve, Count8BitElements, 0, 1, {INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_sve_cntb, INS_invalid, INS_invalid, INS_invalid}, HW_Category_Scalar, HW_Flag_Scalable|HW_Flag_HasImmediateOperand|HW_Flag_SpecialCodeGen|HW_Flag_NoFloatingPointUsed) -HARDWARE_INTRINSIC(Sve, CreateBreakAfterMask, -1, 2, {INS_sve_brka, INS_sve_brka, INS_sve_brka, INS_sve_brka, INS_sve_brka, INS_sve_brka, INS_sve_brka, INS_sve_brka, INS_invalid, INS_invalid}, HW_Category_SIMD, HW_Flag_Scalable|HW_Flag_ExplicitMaskedOperation|HW_Flag_ReturnsPerElementMask|HW_Flag_SpecialCodeGen) -HARDWARE_INTRINSIC(Sve, CreateBreakAfterPropagateMask, -1, 3, {INS_sve_brkpa, INS_sve_brkpa, INS_sve_brkpa, INS_sve_brkpa, INS_sve_brkpa, INS_sve_brkpa, INS_sve_brkpa, INS_sve_brkpa, INS_invalid, INS_invalid}, HW_Category_SIMD, HW_Flag_Scalable|HW_Flag_ExplicitMaskedOperation|HW_Flag_ReturnsPerElementMask|HW_Flag_SpecialCodeGen|HW_Flag_ZeroingMaskedOperation) -HARDWARE_INTRINSIC(Sve, CreateBreakBeforeMask, -1, 2, {INS_sve_brkb, INS_sve_brkb, INS_sve_brkb, INS_sve_brkb, INS_sve_brkb, INS_sve_brkb, INS_sve_brkb, INS_sve_brkb, INS_invalid, INS_invalid}, HW_Category_SIMD, HW_Flag_Scalable|HW_Flag_ExplicitMaskedOperation|HW_Flag_ReturnsPerElementMask|HW_Flag_SpecialCodeGen) -HARDWARE_INTRINSIC(Sve, CreateBreakBeforePropagateMask, -1, 3, {INS_sve_brkpb, INS_sve_brkpb, INS_sve_brkpb, INS_sve_brkpb, INS_sve_brkpb, INS_sve_brkpb, INS_sve_brkpb, INS_sve_brkpb, INS_invalid, INS_invalid}, HW_Category_SIMD, HW_Flag_Scalable|HW_Flag_ExplicitMaskedOperation|HW_Flag_ReturnsPerElementMask|HW_Flag_SpecialCodeGen|HW_Flag_ZeroingMaskedOperation) -HARDWARE_INTRINSIC(Sve, CreateBreakPropagateMask, -1, -1, {INS_sve_brkn, INS_sve_brkn, INS_sve_brkn, INS_sve_brkn, INS_sve_brkn, INS_sve_brkn, INS_sve_brkn, INS_sve_brkn, INS_invalid, INS_invalid}, HW_Category_SIMD, HW_Flag_Scalable|HW_Flag_EmbeddedMaskedOperation|HW_Flag_ReturnsPerElementMask|HW_Flag_HasRMWSemantics|HW_Flag_ZeroingMaskedOperation) +HARDWARE_INTRINSIC(Sve, CreateBreakAfterMask, -1, 2, {INS_sve_brka, INS_sve_brka, INS_sve_brka, INS_sve_brka, INS_sve_brka, INS_sve_brka, INS_sve_brka, INS_sve_brka, INS_sve_brka, INS_sve_brka}, HW_Category_SIMD, HW_Flag_Scalable|HW_Flag_ExplicitMaskedOperation|HW_Flag_ReturnsPerElementMask|HW_Flag_SpecialCodeGen) +HARDWARE_INTRINSIC(Sve, CreateBreakAfterPropagateMask, -1, 3, {INS_sve_brkpa, INS_sve_brkpa, INS_sve_brkpa, INS_sve_brkpa, INS_sve_brkpa, INS_sve_brkpa, INS_sve_brkpa, INS_sve_brkpa, INS_sve_brkpa, INS_sve_brkpa}, HW_Category_SIMD, HW_Flag_Scalable|HW_Flag_ExplicitMaskedOperation|HW_Flag_ReturnsPerElementMask|HW_Flag_SpecialCodeGen|HW_Flag_ZeroingMaskedOperation) +HARDWARE_INTRINSIC(Sve, CreateBreakBeforeMask, -1, 2, {INS_sve_brkb, INS_sve_brkb, INS_sve_brkb, INS_sve_brkb, INS_sve_brkb, INS_sve_brkb, INS_sve_brkb, INS_sve_brkb, INS_sve_brkb, INS_sve_brkb}, HW_Category_SIMD, HW_Flag_Scalable|HW_Flag_ExplicitMaskedOperation|HW_Flag_ReturnsPerElementMask|HW_Flag_SpecialCodeGen) +HARDWARE_INTRINSIC(Sve, CreateBreakBeforePropagateMask, -1, 3, {INS_sve_brkpb, INS_sve_brkpb, INS_sve_brkpb, INS_sve_brkpb, INS_sve_brkpb, INS_sve_brkpb, INS_sve_brkpb, INS_sve_brkpb, INS_sve_brkpb, INS_sve_brkpb}, HW_Category_SIMD, HW_Flag_Scalable|HW_Flag_ExplicitMaskedOperation|HW_Flag_ReturnsPerElementMask|HW_Flag_SpecialCodeGen|HW_Flag_ZeroingMaskedOperation) +HARDWARE_INTRINSIC(Sve, CreateBreakPropagateMask, -1, -1, {INS_sve_brkn, INS_sve_brkn, INS_sve_brkn, INS_sve_brkn, INS_sve_brkn, INS_sve_brkn, INS_sve_brkn, INS_sve_brkn, INS_sve_brkn, INS_sve_brkn}, HW_Category_SIMD, HW_Flag_Scalable|HW_Flag_EmbeddedMaskedOperation|HW_Flag_ReturnsPerElementMask|HW_Flag_HasRMWSemantics|HW_Flag_ZeroingMaskedOperation) HARDWARE_INTRINSIC(Sve, CreateFalseMaskByte, -1, 0, {INS_invalid, INS_sve_pfalse, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid}, HW_Category_SIMD, HW_Flag_Scalable|HW_Flag_SpecialImport) HARDWARE_INTRINSIC(Sve, CreateFalseMaskDouble, -1, 0, {INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_sve_pfalse}, HW_Category_SIMD, HW_Flag_Scalable|HW_Flag_SpecialImport) HARDWARE_INTRINSIC(Sve, CreateFalseMaskInt16, -1, 0, {INS_invalid, INS_invalid, INS_sve_pfalse, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid}, HW_Category_SIMD, HW_Flag_Scalable|HW_Flag_SpecialImport) @@ -73,7 +73,7 @@ HARDWARE_INTRINSIC(Sve, CreateFalseMaskSingle, HARDWARE_INTRINSIC(Sve, CreateFalseMaskUInt16, -1, 0, {INS_invalid, INS_invalid, INS_invalid, INS_sve_pfalse, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid}, HW_Category_SIMD, HW_Flag_Scalable|HW_Flag_SpecialImport) HARDWARE_INTRINSIC(Sve, CreateFalseMaskUInt32, -1, 0, {INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_sve_pfalse, INS_invalid, INS_invalid, INS_invalid, INS_invalid}, HW_Category_SIMD, HW_Flag_Scalable|HW_Flag_SpecialImport) HARDWARE_INTRINSIC(Sve, CreateFalseMaskUInt64, -1, 0, {INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_sve_pfalse, INS_invalid, INS_invalid}, HW_Category_SIMD, HW_Flag_Scalable|HW_Flag_SpecialImport) -HARDWARE_INTRINSIC(Sve, CreateMaskForFirstActiveElement, -1, 2, {INS_sve_pfirst, INS_sve_pfirst, INS_sve_pfirst, INS_sve_pfirst, INS_sve_pfirst, INS_sve_pfirst, INS_sve_pfirst, INS_sve_pfirst, INS_invalid, INS_invalid}, HW_Category_SIMD, HW_Flag_Scalable|HW_Flag_ExplicitMaskedOperation|HW_Flag_ReturnsPerElementMask|HW_Flag_SpecialCodeGen|HW_Flag_HasRMWSemantics) +HARDWARE_INTRINSIC(Sve, CreateMaskForFirstActiveElement, -1, 2, {INS_sve_pfirst, INS_sve_pfirst, INS_sve_pfirst, INS_sve_pfirst, INS_sve_pfirst, INS_sve_pfirst, INS_sve_pfirst, INS_sve_pfirst, INS_sve_pfirst, INS_sve_pfirst}, HW_Category_SIMD, HW_Flag_Scalable|HW_Flag_ExplicitMaskedOperation|HW_Flag_ReturnsPerElementMask|HW_Flag_SpecialCodeGen|HW_Flag_HasRMWSemantics) HARDWARE_INTRINSIC(Sve, CreateMaskForNextActiveElement, -1, 2, {INS_invalid, INS_sve_pnext, INS_invalid, INS_sve_pnext, INS_invalid, INS_sve_pnext, INS_invalid, INS_sve_pnext, INS_invalid, INS_invalid}, HW_Category_SIMD, HW_Flag_Scalable|HW_Flag_ExplicitMaskedOperation|HW_Flag_ReturnsPerElementMask|HW_Flag_HasRMWSemantics) HARDWARE_INTRINSIC(Sve, CreateTrueMaskByte, -1, 1, {INS_invalid, INS_sve_ptrue, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid}, HW_Category_SIMD, HW_Flag_Scalable|HW_Flag_HasImmediateOperand|HW_Flag_SpecialImport) HARDWARE_INTRINSIC(Sve, CreateTrueMaskDouble, -1, 1, {INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_sve_ptrue}, HW_Category_SIMD, HW_Flag_Scalable|HW_Flag_HasImmediateOperand|HW_Flag_SpecialImport) @@ -139,10 +139,12 @@ HARDWARE_INTRINSIC(Sve, GatherVectorWithByteOffsetFirstFaulting, HARDWARE_INTRINSIC(Sve, GatherVectorWithByteOffsets, -1, 3, {INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_sve_ld1w, INS_sve_ld1w, INS_sve_ld1d, INS_sve_ld1d, INS_sve_ld1w, INS_sve_ld1d}, HW_Category_MemoryLoad, HW_Flag_Scalable|HW_Flag_SpecialCodeGen|HW_Flag_ExplicitMaskedOperation|HW_Flag_LowMaskedOperation|HW_Flag_ZeroingMaskedOperation) HARDWARE_INTRINSIC(Sve, GetActiveElementCount, -1, 2, {INS_sve_cntp, INS_sve_cntp, INS_sve_cntp, INS_sve_cntp, INS_sve_cntp, INS_sve_cntp, INS_sve_cntp, INS_sve_cntp, INS_sve_cntp, INS_sve_cntp}, HW_Category_SIMD, HW_Flag_Scalable|HW_Flag_BaseTypeFromFirstArg|HW_Flag_ExplicitMaskedOperation) HARDWARE_INTRINSIC(Sve, GetFfrByte, -1, 0, {INS_invalid, INS_sve_rdffr, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid}, HW_Category_SIMD, HW_Flag_Scalable|HW_Flag_SpecialCodeGen|HW_Flag_ReturnsPerElementMask|HW_Flag_SpecialSideEffect_Other) +HARDWARE_INTRINSIC(Sve, GetFfrDouble, -1, 0, {INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_sve_rdffr}, HW_Category_SIMD, HW_Flag_Scalable|HW_Flag_SpecialCodeGen|HW_Flag_ReturnsPerElementMask|HW_Flag_SpecialSideEffect_Other) HARDWARE_INTRINSIC(Sve, GetFfrInt16, -1, 0, {INS_invalid, INS_invalid, INS_sve_rdffr, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid}, HW_Category_SIMD, HW_Flag_Scalable|HW_Flag_SpecialCodeGen|HW_Flag_ReturnsPerElementMask|HW_Flag_SpecialSideEffect_Other) HARDWARE_INTRINSIC(Sve, GetFfrInt32, -1, 0, {INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_sve_rdffr, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid}, HW_Category_SIMD, HW_Flag_Scalable|HW_Flag_SpecialCodeGen|HW_Flag_ReturnsPerElementMask|HW_Flag_SpecialSideEffect_Other) HARDWARE_INTRINSIC(Sve, GetFfrInt64, -1, 0, {INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_sve_rdffr, INS_invalid, INS_invalid, INS_invalid}, HW_Category_SIMD, HW_Flag_Scalable|HW_Flag_SpecialCodeGen|HW_Flag_ReturnsPerElementMask|HW_Flag_SpecialSideEffect_Other) HARDWARE_INTRINSIC(Sve, GetFfrSByte, -1, 0, {INS_sve_rdffr, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid}, HW_Category_SIMD, HW_Flag_Scalable|HW_Flag_SpecialCodeGen|HW_Flag_ReturnsPerElementMask|HW_Flag_SpecialSideEffect_Other) +HARDWARE_INTRINSIC(Sve, GetFfrSingle, -1, 0, {INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_sve_rdffr, INS_invalid}, HW_Category_SIMD, HW_Flag_Scalable|HW_Flag_SpecialCodeGen|HW_Flag_ReturnsPerElementMask|HW_Flag_SpecialSideEffect_Other) HARDWARE_INTRINSIC(Sve, GetFfrUInt16, -1, 0, {INS_invalid, INS_invalid, INS_invalid, INS_sve_rdffr, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid}, HW_Category_SIMD, HW_Flag_Scalable|HW_Flag_SpecialCodeGen|HW_Flag_ReturnsPerElementMask|HW_Flag_SpecialSideEffect_Other) HARDWARE_INTRINSIC(Sve, GetFfrUInt32, -1, 0, {INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_sve_rdffr, INS_invalid, INS_invalid, INS_invalid, INS_invalid}, HW_Category_SIMD, HW_Flag_Scalable|HW_Flag_SpecialCodeGen|HW_Flag_ReturnsPerElementMask|HW_Flag_SpecialSideEffect_Other) HARDWARE_INTRINSIC(Sve, GetFfrUInt64, -1, 0, {INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_sve_rdffr, INS_invalid, INS_invalid}, HW_Category_SIMD, HW_Flag_Scalable|HW_Flag_SpecialCodeGen|HW_Flag_ReturnsPerElementMask|HW_Flag_SpecialSideEffect_Other) @@ -269,7 +271,7 @@ HARDWARE_INTRINSIC(Sve, Scatter32BitWithByteOffsetsNarrowing, HARDWARE_INTRINSIC(Sve, Scatter8BitNarrowing, -1, -1, {INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_sve_st1b, INS_sve_st1b, INS_sve_st1b, INS_sve_st1b, INS_invalid, INS_invalid}, HW_Category_MemoryStore, HW_Flag_Scalable|HW_Flag_BaseTypeFromFirstArg|HW_Flag_SpecialCodeGen|HW_Flag_ExplicitMaskedOperation|HW_Flag_LowMaskedOperation) HARDWARE_INTRINSIC(Sve, Scatter8BitWithByteOffsetsNarrowing, -1, -1, {INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_sve_st1b, INS_sve_st1b, INS_sve_st1b, INS_sve_st1b, INS_invalid, INS_invalid}, HW_Category_MemoryStore, HW_Flag_Scalable|HW_Flag_BaseTypeFromFirstArg|HW_Flag_SpecialCodeGen|HW_Flag_ExplicitMaskedOperation|HW_Flag_LowMaskedOperation) HARDWARE_INTRINSIC(Sve, ScatterWithByteOffsets, -1, -1, {INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_sve_st1w, INS_sve_st1w, INS_sve_st1d, INS_sve_st1d, INS_sve_st1w, INS_sve_st1d}, HW_Category_MemoryStore, HW_Flag_Scalable|HW_Flag_BaseTypeFromFirstArg|HW_Flag_SpecialCodeGen|HW_Flag_ExplicitMaskedOperation|HW_Flag_LowMaskedOperation) -HARDWARE_INTRINSIC(Sve, SetFfr, -1, 1, {INS_sve_wrffr, INS_sve_wrffr, INS_sve_wrffr, INS_sve_wrffr, INS_sve_wrffr, INS_sve_wrffr, INS_sve_wrffr, INS_sve_wrffr, INS_invalid, INS_invalid}, HW_Category_SIMD, HW_Flag_Scalable|HW_Flag_ExplicitMaskedOperation|HW_Flag_BaseTypeFromFirstArg|HW_Flag_SpecialSideEffect_Other|HW_Flag_SpecialCodeGen) +HARDWARE_INTRINSIC(Sve, SetFfr, -1, 1, {INS_sve_wrffr, INS_sve_wrffr, INS_sve_wrffr, INS_sve_wrffr, INS_sve_wrffr, INS_sve_wrffr, INS_sve_wrffr, INS_sve_wrffr, INS_sve_wrffr, INS_sve_wrffr}, HW_Category_SIMD, HW_Flag_Scalable|HW_Flag_ExplicitMaskedOperation|HW_Flag_BaseTypeFromFirstArg|HW_Flag_SpecialSideEffect_Other|HW_Flag_SpecialCodeGen) HARDWARE_INTRINSIC(Sve, ShiftLeftLogical, -1, -1, {INS_sve_lsl, INS_sve_lsl, INS_sve_lsl, INS_sve_lsl, INS_sve_lsl, INS_sve_lsl, INS_sve_lsl, INS_sve_lsl, INS_invalid, INS_invalid}, HW_Category_SIMD, HW_Flag_Scalable|HW_Flag_BaseTypeFromFirstArg|HW_Flag_EmbeddedMaskedOperation|HW_Flag_LowMaskedOperation|HW_Flag_HasRMWSemantics) HARDWARE_INTRINSIC(Sve, ShiftRightArithmetic, -1, -1, {INS_sve_asr, INS_invalid, INS_sve_asr, INS_invalid, INS_sve_asr, INS_invalid, INS_sve_asr, INS_invalid, INS_invalid, INS_invalid}, HW_Category_SIMD, HW_Flag_Scalable|HW_Flag_BaseTypeFromFirstArg|HW_Flag_EmbeddedMaskedOperation|HW_Flag_LowMaskedOperation|HW_Flag_HasRMWSemantics) HARDWARE_INTRINSIC(Sve, ShiftRightArithmeticForDivide, -1, -1, {INS_sve_asrd, INS_invalid, INS_sve_asrd, INS_invalid, INS_sve_asrd, INS_invalid, INS_sve_asrd, INS_invalid, INS_invalid, INS_invalid}, HW_Category_ShiftRightByImmediate, HW_Flag_Scalable|HW_Flag_EmbeddedMaskedOperation|HW_Flag_LowMaskedOperation|HW_Flag_HasRMWSemantics|HW_Flag_HasImmediateOperand) @@ -286,9 +288,9 @@ HARDWARE_INTRINSIC(Sve, StoreNarrowing, HARDWARE_INTRINSIC(Sve, StoreNonTemporal, -1, 3, {INS_sve_stnt1b, INS_sve_stnt1b, INS_sve_stnt1h, INS_sve_stnt1h, INS_sve_stnt1w, INS_sve_stnt1w, INS_sve_stnt1d, INS_sve_stnt1d, INS_sve_stnt1w, INS_sve_stnt1d}, HW_Category_MemoryStore, HW_Flag_Scalable|HW_Flag_BaseTypeFromFirstArg|HW_Flag_ExplicitMaskedOperation|HW_Flag_SpecialCodeGen|HW_Flag_LowMaskedOperation) HARDWARE_INTRINSIC(Sve, Subtract, -1, 2, {INS_sve_sub, INS_sve_sub, INS_sve_sub, INS_sve_sub, INS_sve_sub, INS_sve_sub, INS_sve_sub, INS_sve_sub, INS_sve_fsub, INS_sve_fsub}, HW_Category_SIMD, HW_Flag_Scalable|HW_Flag_OptionalEmbeddedMaskedOperation|HW_Flag_HasRMWSemantics|HW_Flag_LowMaskedOperation) HARDWARE_INTRINSIC(Sve, SubtractSaturate, -1, 2, {INS_sve_sqsub, INS_sve_uqsub, INS_sve_sqsub, INS_sve_uqsub, INS_sve_sqsub, INS_sve_uqsub, INS_sve_sqsub, INS_sve_uqsub, INS_invalid, INS_invalid}, HW_Category_SIMD, HW_Flag_Scalable) -HARDWARE_INTRINSIC(Sve, TestAnyTrue, -1, 2, {INS_sve_ptest, INS_sve_ptest, INS_sve_ptest, INS_sve_ptest, INS_sve_ptest, INS_sve_ptest, INS_sve_ptest, INS_sve_ptest, INS_invalid, INS_invalid}, HW_Category_SIMD, HW_Flag_Scalable|HW_Flag_ExplicitMaskedOperation|HW_Flag_LowMaskedOperation|HW_Flag_BaseTypeFromFirstArg|HW_Flag_SpecialCodeGen) -HARDWARE_INTRINSIC(Sve, TestFirstTrue, -1, 2, {INS_sve_ptest, INS_sve_ptest, INS_sve_ptest, INS_sve_ptest, INS_sve_ptest, INS_sve_ptest, INS_sve_ptest, INS_sve_ptest, INS_invalid, INS_invalid}, HW_Category_SIMD, HW_Flag_Scalable|HW_Flag_ExplicitMaskedOperation|HW_Flag_LowMaskedOperation|HW_Flag_BaseTypeFromFirstArg|HW_Flag_SpecialCodeGen) -HARDWARE_INTRINSIC(Sve, TestLastTrue, -1, 2, {INS_sve_ptest, INS_sve_ptest, INS_sve_ptest, INS_sve_ptest, INS_sve_ptest, INS_sve_ptest, INS_sve_ptest, INS_sve_ptest, INS_invalid, INS_invalid}, HW_Category_SIMD, HW_Flag_Scalable|HW_Flag_ExplicitMaskedOperation|HW_Flag_LowMaskedOperation|HW_Flag_BaseTypeFromFirstArg|HW_Flag_SpecialCodeGen) +HARDWARE_INTRINSIC(Sve, TestAnyTrue, -1, 2, {INS_sve_ptest, INS_sve_ptest, INS_sve_ptest, INS_sve_ptest, INS_sve_ptest, INS_sve_ptest, INS_sve_ptest, INS_sve_ptest, INS_sve_ptest, INS_sve_ptest}, HW_Category_SIMD, HW_Flag_Scalable|HW_Flag_ExplicitMaskedOperation|HW_Flag_LowMaskedOperation|HW_Flag_BaseTypeFromFirstArg|HW_Flag_SpecialCodeGen) +HARDWARE_INTRINSIC(Sve, TestFirstTrue, -1, 2, {INS_sve_ptest, INS_sve_ptest, INS_sve_ptest, INS_sve_ptest, INS_sve_ptest, INS_sve_ptest, INS_sve_ptest, INS_sve_ptest, INS_sve_ptest, INS_sve_ptest}, HW_Category_SIMD, HW_Flag_Scalable|HW_Flag_ExplicitMaskedOperation|HW_Flag_LowMaskedOperation|HW_Flag_BaseTypeFromFirstArg|HW_Flag_SpecialCodeGen) +HARDWARE_INTRINSIC(Sve, TestLastTrue, -1, 2, {INS_sve_ptest, INS_sve_ptest, INS_sve_ptest, INS_sve_ptest, INS_sve_ptest, INS_sve_ptest, INS_sve_ptest, INS_sve_ptest, INS_sve_ptest, INS_sve_ptest}, HW_Category_SIMD, HW_Flag_Scalable|HW_Flag_ExplicitMaskedOperation|HW_Flag_LowMaskedOperation|HW_Flag_BaseTypeFromFirstArg|HW_Flag_SpecialCodeGen) HARDWARE_INTRINSIC(Sve, TransposeEven, -1, 2, {INS_sve_trn1, INS_sve_trn1, INS_sve_trn1, INS_sve_trn1, INS_sve_trn1, INS_sve_trn1, INS_sve_trn1, INS_sve_trn1, INS_sve_trn1, INS_sve_trn1}, HW_Category_SIMD, HW_Flag_Scalable|HW_Flag_SpecialCodeGen|HW_Flag_HasAllMaskVariant) HARDWARE_INTRINSIC(Sve, TransposeOdd, -1, 2, {INS_sve_trn2, INS_sve_trn2, INS_sve_trn2, INS_sve_trn2, INS_sve_trn2, INS_sve_trn2, INS_sve_trn2, INS_sve_trn2, INS_sve_trn2, INS_sve_trn2}, HW_Category_SIMD, HW_Flag_Scalable|HW_Flag_SpecialCodeGen|HW_Flag_HasAllMaskVariant) HARDWARE_INTRINSIC(Sve, TrigonometricMultiplyAddCoefficient, -1, 3, {INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_sve_ftmad, INS_sve_ftmad}, HW_Category_SIMD, HW_Flag_Scalable|HW_Flag_HasImmediateOperand|HW_Flag_HasRMWSemantics|HW_Flag_SpecialCodeGen) diff --git a/src/coreclr/jit/lowerarmarch.cpp b/src/coreclr/jit/lowerarmarch.cpp index c8f677347601cc..602cf4f2b4624f 100644 --- a/src/coreclr/jit/lowerarmarch.cpp +++ b/src/coreclr/jit/lowerarmarch.cpp @@ -1875,10 +1875,12 @@ GenTree* Lowering::LowerHWIntrinsic(GenTreeHWIntrinsic* node) } case NI_Sve_GetFfrByte: + case NI_Sve_GetFfrDouble: case NI_Sve_GetFfrInt16: case NI_Sve_GetFfrInt32: case NI_Sve_GetFfrInt64: case NI_Sve_GetFfrSByte: + case NI_Sve_GetFfrSingle: case NI_Sve_GetFfrUInt16: case NI_Sve_GetFfrUInt32: case NI_Sve_GetFfrUInt64: diff --git a/src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/Arm/Sve.PlatformNotSupported.cs b/src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/Arm/Sve.PlatformNotSupported.cs index f37e70545e9dcf..819b72cec57008 100644 --- a/src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/Arm/Sve.PlatformNotSupported.cs +++ b/src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/Arm/Sve.PlatformNotSupported.cs @@ -2086,6 +2086,12 @@ internal Arm64() { } // Break after first true condition + /// + /// svbool_t svbrka[_b]_z(svbool_t pg, svbool_t op) + /// BRKA Presult.B, Pg/Z, Pop.B + /// + public static Vector CreateBreakAfterMask(Vector totalMask, Vector fromMask) { throw new PlatformNotSupportedException(); } + /// /// svbool_t svbrka[_b]_z(svbool_t pg, svbool_t op) /// BRKA Presult.B, Pg/Z, Pop.B @@ -2134,9 +2140,21 @@ internal Arm64() { } /// public static Vector CreateBreakAfterMask(Vector totalMask, Vector fromMask) { throw new PlatformNotSupportedException(); } + /// + /// svbool_t svbrka[_b]_z(svbool_t pg, svbool_t op) + /// BRKA Presult.B, Pg/Z, Pop.B + /// + public static Vector CreateBreakAfterMask(Vector totalMask, Vector fromMask) { throw new PlatformNotSupportedException(); } + // Break after first true condition, propagating from previous partition + /// + /// svbool_t svbrkpa[_b]_z(svbool_t pg, svbool_t op1, svbool_t op2) + /// BRKPA Presult.B, Pg/Z, Pop1.B, Pop2.B + /// + public static Vector CreateBreakAfterPropagateMask(Vector mask, Vector left, Vector right) { throw new PlatformNotSupportedException(); } + /// /// svbool_t svbrkpa[_b]_z(svbool_t pg, svbool_t op1, svbool_t op2) /// BRKPA Presult.B, Pg/Z, Pop1.B, Pop2.B @@ -2185,9 +2203,21 @@ internal Arm64() { } /// public static Vector CreateBreakAfterPropagateMask(Vector mask, Vector left, Vector right) { throw new PlatformNotSupportedException(); } + /// + /// svbool_t svbrkpa[_b]_z(svbool_t pg, svbool_t op1, svbool_t op2) + /// BRKPA Presult.B, Pg/Z, Pop1.B, Pop2.B + /// + public static Vector CreateBreakAfterPropagateMask(Vector mask, Vector left, Vector right) { throw new PlatformNotSupportedException(); } + // Break before first true condition + /// + /// svbool_t svbrkb[_b]_z(svbool_t pg, svbool_t op) + /// BRKB Presult.B, Pg/Z, Pop.B + /// + public static Vector CreateBreakBeforeMask(Vector totalMask, Vector fromMask) { throw new PlatformNotSupportedException(); } + /// /// svbool_t svbrkb[_b]_z(svbool_t pg, svbool_t op) /// BRKB Presult.B, Pg/Z, Pop.B @@ -2236,9 +2266,21 @@ internal Arm64() { } /// public static Vector CreateBreakBeforeMask(Vector totalMask, Vector fromMask) { throw new PlatformNotSupportedException(); } + /// + /// svbool_t svbrkb[_b]_z(svbool_t pg, svbool_t op) + /// BRKB Presult.B, Pg/Z, Pop.B + /// + public static Vector CreateBreakBeforeMask(Vector totalMask, Vector fromMask) { throw new PlatformNotSupportedException(); } + // Break before first true condition, propagating from previous partition + /// + /// svbool_t svbrkpb[_b]_z(svbool_t pg, svbool_t op1, svbool_t op2) + /// BRKPB Presult.B, Pg/Z, Pop1.B, Pop2.B + /// + public static Vector CreateBreakBeforePropagateMask(Vector mask, Vector left, Vector right) { throw new PlatformNotSupportedException(); } + /// /// svbool_t svbrkpb[_b]_z(svbool_t pg, svbool_t op1, svbool_t op2) /// BRKPB Presult.B, Pg/Z, Pop1.B, Pop2.B @@ -2287,9 +2329,21 @@ internal Arm64() { } /// public static Vector CreateBreakBeforePropagateMask(Vector mask, Vector left, Vector right) { throw new PlatformNotSupportedException(); } + /// + /// svbool_t svbrkpb[_b]_z(svbool_t pg, svbool_t op1, svbool_t op2) + /// BRKPB Presult.B, Pg/Z, Pop1.B, Pop2.B + /// + public static Vector CreateBreakBeforePropagateMask(Vector mask, Vector left, Vector right) { throw new PlatformNotSupportedException(); } + // Propagate break to next partition + /// + /// svbool_t svbrkn[_b]_z(svbool_t pg, svbool_t op1, svbool_t op2) + /// BRKN Ptied2.B, Pg/Z, Pop1.B, Ptied2.B + /// + public static Vector CreateBreakPropagateMask(Vector totalMask, Vector fromMask) { throw new PlatformNotSupportedException(); } + /// /// svbool_t svbrkn[_b]_z(svbool_t pg, svbool_t op1, svbool_t op2) /// BRKN Ptied2.B, Pg/Z, Pop1.B, Ptied2.B @@ -2338,6 +2392,12 @@ internal Arm64() { } /// public static Vector CreateBreakPropagateMask(Vector totalMask, Vector fromMask) { throw new PlatformNotSupportedException(); } + /// + /// svbool_t svbrkn[_b]_z(svbool_t pg, svbool_t op1, svbool_t op2) + /// BRKN Ptied2.B, Pg/Z, Pop1.B, Ptied2.B + /// + public static Vector CreateBreakPropagateMask(Vector totalMask, Vector fromMask) { throw new PlatformNotSupportedException(); } + // Set all predicate elements to false @@ -2431,6 +2491,12 @@ internal Arm64() { } // Set the first active predicate element to true + /// + /// svbool_t svpfirst[_b](svbool_t pg, svbool_t op) + /// PFIRST Ptied.B, Pg, Ptied.B + /// + public static Vector CreateMaskForFirstActiveElement(Vector totalMask, Vector fromMask) { throw new PlatformNotSupportedException(); } + /// /// svbool_t svpfirst[_b](svbool_t pg, svbool_t op) /// PFIRST Ptied.B, Pg, Ptied.B @@ -2479,6 +2545,12 @@ internal Arm64() { } /// public static Vector CreateMaskForFirstActiveElement(Vector totalMask, Vector fromMask) { throw new PlatformNotSupportedException(); } + /// + /// svbool_t svpfirst[_b](svbool_t pg, svbool_t op) + /// PFIRST Ptied.B, Pg, Ptied.B + /// + public static Vector CreateMaskForFirstActiveElement(Vector totalMask, Vector fromMask) { throw new PlatformNotSupportedException(); } + // Find next active predicate @@ -5341,6 +5413,12 @@ internal Arm64() { } /// public static Vector GetFfrByte() { throw new PlatformNotSupportedException(); } + /// + /// svbool_t svrdffr() + /// RDFFR Presult.B + /// + public static Vector GetFfrDouble() { throw new PlatformNotSupportedException(); } + /// /// svbool_t svrdffr() /// RDFFR Presult.B @@ -5365,6 +5443,12 @@ internal Arm64() { } /// public static Vector GetFfrSByte() { throw new PlatformNotSupportedException(); } + /// + /// svbool_t svrdffr() + /// RDFFR Presult.B + /// + public static Vector GetFfrSingle() { throw new PlatformNotSupportedException(); } + /// /// svbool_t svrdffr() /// RDFFR Presult.B @@ -9154,6 +9238,12 @@ internal Arm64() { } // Write to the first-fault register + /// + /// void svwrffr(svbool_t op) + /// WRFFR Pop.B + /// + public static void SetFfr(Vector value) { throw new PlatformNotSupportedException(); } + /// /// void svwrffr(svbool_t op) /// WRFFR Pop.B @@ -9202,6 +9292,12 @@ internal Arm64() { } /// public static void SetFfr(Vector value) { throw new PlatformNotSupportedException(); } + /// + /// void svwrffr(svbool_t op) + /// WRFFR Pop.B + /// + public static void SetFfr(Vector value) { throw new PlatformNotSupportedException(); } + // Logical shift left @@ -10169,6 +10265,12 @@ internal Arm64() { } // Test whether any active element is true + /// + /// bool svptest_any(svbool_t pg, svbool_t op) + /// PTEST + /// + public static bool TestAnyTrue(Vector mask, Vector rightMask) { throw new PlatformNotSupportedException(); } + /// /// bool svptest_any(svbool_t pg, svbool_t op) /// PTEST @@ -10217,9 +10319,21 @@ internal Arm64() { } /// public static bool TestAnyTrue(Vector mask, Vector rightMask) { throw new PlatformNotSupportedException(); } + /// + /// bool svptest_any(svbool_t pg, svbool_t op) + /// PTEST + /// + public static bool TestAnyTrue(Vector mask, Vector rightMask) { throw new PlatformNotSupportedException(); } + // Test whether the first active element is true + /// + /// bool svptest_first(svbool_t pg, svbool_t op) + /// PTEST + /// + public static bool TestFirstTrue(Vector leftMask, Vector rightMask) { throw new PlatformNotSupportedException(); } + /// /// bool svptest_first(svbool_t pg, svbool_t op) /// PTEST @@ -10268,9 +10382,21 @@ internal Arm64() { } /// public static bool TestFirstTrue(Vector leftMask, Vector rightMask) { throw new PlatformNotSupportedException(); } + /// + /// bool svptest_first(svbool_t pg, svbool_t op) + /// PTEST + /// + public static bool TestFirstTrue(Vector leftMask, Vector rightMask) { throw new PlatformNotSupportedException(); } + // Test whether the last active element is true + /// + /// bool svptest_last(svbool_t pg, svbool_t op) + /// PTEST + /// + public static bool TestLastTrue(Vector leftMask, Vector rightMask) { throw new PlatformNotSupportedException(); } + /// /// bool svptest_last(svbool_t pg, svbool_t op) /// PTEST @@ -10319,6 +10445,12 @@ internal Arm64() { } /// public static bool TestLastTrue(Vector leftMask, Vector rightMask) { throw new PlatformNotSupportedException(); } + /// + /// bool svptest_last(svbool_t pg, svbool_t op) + /// PTEST + /// + public static bool TestLastTrue(Vector leftMask, Vector rightMask) { throw new PlatformNotSupportedException(); } + // Interleave even elements from two inputs diff --git a/src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/Arm/Sve.cs b/src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/Arm/Sve.cs index bd752b482cd150..69d4375549fd7d 100644 --- a/src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/Arm/Sve.cs +++ b/src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/Arm/Sve.cs @@ -2083,6 +2083,12 @@ internal Arm64() { } // Break after first true condition + /// + /// svbool_t svbrka[_b]_z(svbool_t pg, svbool_t op) + /// BRKA Presult.B, Pg/Z, Pop.B + /// + public static Vector CreateBreakAfterMask(Vector totalMask, Vector fromMask) => CreateBreakAfterMask(totalMask, fromMask); + /// /// svbool_t svbrka[_b]_z(svbool_t pg, svbool_t op) /// BRKA Presult.B, Pg/Z, Pop.B @@ -2131,9 +2137,21 @@ internal Arm64() { } /// public static Vector CreateBreakAfterMask(Vector totalMask, Vector fromMask) => CreateBreakAfterMask(totalMask, fromMask); + /// + /// svbool_t svbrka[_b]_z(svbool_t pg, svbool_t op) + /// BRKA Presult.B, Pg/Z, Pop.B + /// + public static Vector CreateBreakAfterMask(Vector totalMask, Vector fromMask) => CreateBreakAfterMask(totalMask, fromMask); + // Break after first true condition, propagating from previous partition + /// + /// svbool_t svbrkpa[_b]_z(svbool_t pg, svbool_t op1, svbool_t op2) + /// BRKPA Presult.B, Pg/Z, Pop1.B, Pop2.B + /// + public static Vector CreateBreakAfterPropagateMask(Vector mask, Vector left, Vector right) => CreateBreakAfterPropagateMask(mask, left, right); + /// /// svbool_t svbrkpa[_b]_z(svbool_t pg, svbool_t op1, svbool_t op2) /// BRKPA Presult.B, Pg/Z, Pop1.B, Pop2.B @@ -2182,9 +2200,21 @@ internal Arm64() { } /// public static Vector CreateBreakAfterPropagateMask(Vector mask, Vector left, Vector right) => CreateBreakAfterPropagateMask(mask, left, right); + /// + /// svbool_t svbrkpa[_b]_z(svbool_t pg, svbool_t op1, svbool_t op2) + /// BRKPA Presult.B, Pg/Z, Pop1.B, Pop2.B + /// + public static Vector CreateBreakAfterPropagateMask(Vector mask, Vector left, Vector right) => CreateBreakAfterPropagateMask(mask, left, right); + // Break before first true condition + /// + /// svbool_t svbrkb[_b]_z(svbool_t pg, svbool_t op) + /// BRKB Presult.B, Pg/Z, Pop.B + /// + public static Vector CreateBreakBeforeMask(Vector totalMask, Vector fromMask) => CreateBreakBeforeMask(totalMask, fromMask); + /// /// svbool_t svbrkb[_b]_z(svbool_t pg, svbool_t op) /// BRKB Presult.B, Pg/Z, Pop.B @@ -2233,9 +2263,21 @@ internal Arm64() { } /// public static Vector CreateBreakBeforeMask(Vector totalMask, Vector fromMask) => CreateBreakBeforeMask(totalMask, fromMask); + /// + /// svbool_t svbrkb[_b]_z(svbool_t pg, svbool_t op) + /// BRKB Presult.B, Pg/Z, Pop.B + /// + public static Vector CreateBreakBeforeMask(Vector totalMask, Vector fromMask) => CreateBreakBeforeMask(totalMask, fromMask); + // Break before first true condition, propagating from previous partition + /// + /// svbool_t svbrkpb[_b]_z(svbool_t pg, svbool_t op1, svbool_t op2) + /// BRKPB Presult.B, Pg/Z, Pop1.B, Pop2.B + /// + public static Vector CreateBreakBeforePropagateMask(Vector mask, Vector left, Vector right) => CreateBreakBeforePropagateMask(mask, left, right); + /// /// svbool_t svbrkpb[_b]_z(svbool_t pg, svbool_t op1, svbool_t op2) /// BRKPB Presult.B, Pg/Z, Pop1.B, Pop2.B @@ -2284,9 +2326,21 @@ internal Arm64() { } /// public static Vector CreateBreakBeforePropagateMask(Vector mask, Vector left, Vector right) => CreateBreakBeforePropagateMask(mask, left, right); + /// + /// svbool_t svbrkpb[_b]_z(svbool_t pg, svbool_t op1, svbool_t op2) + /// BRKPB Presult.B, Pg/Z, Pop1.B, Pop2.B + /// + public static Vector CreateBreakBeforePropagateMask(Vector mask, Vector left, Vector right) => CreateBreakBeforePropagateMask(mask, left, right); + // Propagate break to next partition + /// + /// svbool_t svbrkn[_b]_z(svbool_t pg, svbool_t op1, svbool_t op2) + /// BRKN Ptied2.B, Pg/Z, Pop1.B, Ptied2.B + /// + public static Vector CreateBreakPropagateMask(Vector totalMask, Vector fromMask) => CreateBreakPropagateMask(totalMask, fromMask); + /// /// svbool_t svbrkn[_b]_z(svbool_t pg, svbool_t op1, svbool_t op2) /// BRKN Ptied2.B, Pg/Z, Pop1.B, Ptied2.B @@ -2335,6 +2389,12 @@ internal Arm64() { } /// public static Vector CreateBreakPropagateMask(Vector totalMask, Vector fromMask) => CreateBreakPropagateMask(totalMask, fromMask); + /// + /// svbool_t svbrkn[_b]_z(svbool_t pg, svbool_t op1, svbool_t op2) + /// BRKN Ptied2.B, Pg/Z, Pop1.B, Ptied2.B + /// + public static Vector CreateBreakPropagateMask(Vector totalMask, Vector fromMask) => CreateBreakPropagateMask(totalMask, fromMask); + // Set all predicate elements to false @@ -2428,6 +2488,12 @@ internal Arm64() { } // Set the first active predicate element to true + /// + /// svbool_t svpfirst[_b](svbool_t pg, svbool_t op) + /// PFIRST Ptied.B, Pg, Ptied.B + /// + public static Vector CreateMaskForFirstActiveElement(Vector totalMask, Vector fromMask) => CreateMaskForFirstActiveElement(totalMask, fromMask); + /// /// svbool_t svpfirst[_b](svbool_t pg, svbool_t op) /// PFIRST Ptied.B, Pg, Ptied.B @@ -2476,6 +2542,12 @@ internal Arm64() { } /// public static Vector CreateMaskForFirstActiveElement(Vector totalMask, Vector fromMask) => CreateMaskForFirstActiveElement(totalMask, fromMask); + /// + /// svbool_t svpfirst[_b](svbool_t pg, svbool_t op) + /// PFIRST Ptied.B, Pg, Ptied.B + /// + public static Vector CreateMaskForFirstActiveElement(Vector totalMask, Vector fromMask) => CreateMaskForFirstActiveElement(totalMask, fromMask); + // Find next active predicate @@ -5338,6 +5410,12 @@ internal Arm64() { } /// public static Vector GetFfrByte() => GetFfrByte(); + /// + /// svbool_t svrdffr() + /// RDFFR Presult.B + /// + public static Vector GetFfrDouble() => GetFfrDouble(); + /// /// svbool_t svrdffr() /// RDFFR Presult.B @@ -5362,6 +5440,12 @@ internal Arm64() { } /// public static Vector GetFfrSByte() => GetFfrSByte(); + /// + /// svbool_t svrdffr() + /// RDFFR Presult.B + /// + public static Vector GetFfrSingle() => GetFfrSingle(); + /// /// svbool_t svrdffr() /// RDFFR Presult.B @@ -9145,6 +9229,12 @@ internal Arm64() { } // Write to the first-fault register + /// + /// void svwrffr(svbool_t op) + /// WRFFR Pop.B + /// + public static void SetFfr(Vector value) => SetFfr(value); + /// /// void svwrffr(svbool_t op) /// WRFFR Pop.B @@ -9193,6 +9283,12 @@ internal Arm64() { } /// public static void SetFfr(Vector value) => SetFfr(value); + /// + /// void svwrffr(svbool_t op) + /// WRFFR Pop.B + /// + public static void SetFfr(Vector value) => SetFfr(value); + // Logical shift left @@ -10160,6 +10256,12 @@ internal Arm64() { } // Test whether any active element is true + /// + /// bool svptest_any(svbool_t pg, svbool_t op) + /// PTEST + /// + public static bool TestAnyTrue(Vector mask, Vector rightMask) => TestAnyTrue(mask, rightMask); + /// /// bool svptest_any(svbool_t pg, svbool_t op) /// PTEST @@ -10208,9 +10310,21 @@ internal Arm64() { } /// public static bool TestAnyTrue(Vector mask, Vector rightMask) => TestAnyTrue(mask, rightMask); + /// + /// bool svptest_any(svbool_t pg, svbool_t op) + /// PTEST + /// + public static bool TestAnyTrue(Vector mask, Vector rightMask) => TestAnyTrue(mask, rightMask); + // Test whether the first active element is true + /// + /// bool svptest_first(svbool_t pg, svbool_t op) + /// PTEST + /// + public static bool TestFirstTrue(Vector leftMask, Vector rightMask) => TestFirstTrue(leftMask, rightMask); + /// /// bool svptest_first(svbool_t pg, svbool_t op) /// PTEST @@ -10259,9 +10373,21 @@ internal Arm64() { } /// public static bool TestFirstTrue(Vector leftMask, Vector rightMask) => TestFirstTrue(leftMask, rightMask); + /// + /// bool svptest_first(svbool_t pg, svbool_t op) + /// PTEST + /// + public static bool TestFirstTrue(Vector leftMask, Vector rightMask) => TestFirstTrue(leftMask, rightMask); + // Test whether the last active element is true + /// + /// bool svptest_last(svbool_t pg, svbool_t op) + /// PTEST + /// + public static bool TestLastTrue(Vector leftMask, Vector rightMask) => TestLastTrue(leftMask, rightMask); + /// /// bool svptest_last(svbool_t pg, svbool_t op) /// PTEST @@ -10310,6 +10436,12 @@ internal Arm64() { } /// public static bool TestLastTrue(Vector leftMask, Vector rightMask) => TestLastTrue(leftMask, rightMask); + /// + /// bool svptest_last(svbool_t pg, svbool_t op) + /// PTEST + /// + public static bool TestLastTrue(Vector leftMask, Vector rightMask) => TestLastTrue(leftMask, rightMask); + // Interleave even elements from two inputs diff --git a/src/libraries/System.Runtime.Intrinsics/ref/System.Runtime.Intrinsics.cs b/src/libraries/System.Runtime.Intrinsics/ref/System.Runtime.Intrinsics.cs index 479501776f2a19..b52aa5f58fc4f6 100644 --- a/src/libraries/System.Runtime.Intrinsics/ref/System.Runtime.Intrinsics.cs +++ b/src/libraries/System.Runtime.Intrinsics/ref/System.Runtime.Intrinsics.cs @@ -4876,6 +4876,7 @@ internal Arm64() { } public static ulong Count32BitElements([ConstantExpected] SveMaskPattern pattern = SveMaskPattern.All) { throw null; } public static ulong Count64BitElements([ConstantExpected] SveMaskPattern pattern = SveMaskPattern.All) { throw null; } public static ulong Count8BitElements([ConstantExpected] SveMaskPattern pattern = SveMaskPattern.All) { throw null; } + public static System.Numerics.Vector CreateBreakAfterMask(System.Numerics.Vector totalMask, System.Numerics.Vector fromMask) { throw null; } public static System.Numerics.Vector CreateBreakAfterMask(System.Numerics.Vector totalMask, System.Numerics.Vector fromMask) { throw null; } public static System.Numerics.Vector CreateBreakAfterMask(System.Numerics.Vector totalMask, System.Numerics.Vector fromMask) { throw null; } public static System.Numerics.Vector CreateBreakAfterMask(System.Numerics.Vector totalMask, System.Numerics.Vector fromMask) { throw null; } @@ -4884,6 +4885,8 @@ internal Arm64() { } public static System.Numerics.Vector CreateBreakAfterMask(System.Numerics.Vector totalMask, System.Numerics.Vector fromMask) { throw null; } public static System.Numerics.Vector CreateBreakAfterMask(System.Numerics.Vector totalMask, System.Numerics.Vector fromMask) { throw null; } public static System.Numerics.Vector CreateBreakAfterMask(System.Numerics.Vector totalMask, System.Numerics.Vector fromMask) { throw null; } + public static System.Numerics.Vector CreateBreakAfterMask(System.Numerics.Vector totalMask, System.Numerics.Vector fromMask) { throw null; } + public static System.Numerics.Vector CreateBreakAfterPropagateMask(System.Numerics.Vector mask, System.Numerics.Vector left, System.Numerics.Vector right) { throw null; } public static System.Numerics.Vector CreateBreakAfterPropagateMask(System.Numerics.Vector mask, System.Numerics.Vector left, System.Numerics.Vector right) { throw null; } public static System.Numerics.Vector CreateBreakAfterPropagateMask(System.Numerics.Vector mask, System.Numerics.Vector left, System.Numerics.Vector right) { throw null; } public static System.Numerics.Vector CreateBreakAfterPropagateMask(System.Numerics.Vector mask, System.Numerics.Vector left, System.Numerics.Vector right) { throw null; } @@ -4892,6 +4895,8 @@ internal Arm64() { } public static System.Numerics.Vector CreateBreakAfterPropagateMask(System.Numerics.Vector mask, System.Numerics.Vector left, System.Numerics.Vector right) { throw null; } public static System.Numerics.Vector CreateBreakAfterPropagateMask(System.Numerics.Vector mask, System.Numerics.Vector left, System.Numerics.Vector right) { throw null; } public static System.Numerics.Vector CreateBreakAfterPropagateMask(System.Numerics.Vector mask, System.Numerics.Vector left, System.Numerics.Vector right) { throw null; } + public static System.Numerics.Vector CreateBreakAfterPropagateMask(System.Numerics.Vector mask, System.Numerics.Vector left, System.Numerics.Vector right) { throw null; } + public static System.Numerics.Vector CreateBreakBeforeMask(System.Numerics.Vector totalMask, System.Numerics.Vector fromMask) { throw null; } public static System.Numerics.Vector CreateBreakBeforeMask(System.Numerics.Vector totalMask, System.Numerics.Vector fromMask) { throw null; } public static System.Numerics.Vector CreateBreakBeforeMask(System.Numerics.Vector totalMask, System.Numerics.Vector fromMask) { throw null; } public static System.Numerics.Vector CreateBreakBeforeMask(System.Numerics.Vector totalMask, System.Numerics.Vector fromMask) { throw null; } @@ -4900,6 +4905,8 @@ internal Arm64() { } public static System.Numerics.Vector CreateBreakBeforeMask(System.Numerics.Vector totalMask, System.Numerics.Vector fromMask) { throw null; } public static System.Numerics.Vector CreateBreakBeforeMask(System.Numerics.Vector totalMask, System.Numerics.Vector fromMask) { throw null; } public static System.Numerics.Vector CreateBreakBeforeMask(System.Numerics.Vector totalMask, System.Numerics.Vector fromMask) { throw null; } + public static System.Numerics.Vector CreateBreakBeforeMask(System.Numerics.Vector totalMask, System.Numerics.Vector fromMask) { throw null; } + public static System.Numerics.Vector CreateBreakBeforePropagateMask(System.Numerics.Vector mask, System.Numerics.Vector left, System.Numerics.Vector right) { throw null; } public static System.Numerics.Vector CreateBreakBeforePropagateMask(System.Numerics.Vector mask, System.Numerics.Vector left, System.Numerics.Vector right) { throw null; } public static System.Numerics.Vector CreateBreakBeforePropagateMask(System.Numerics.Vector mask, System.Numerics.Vector left, System.Numerics.Vector right) { throw null; } public static System.Numerics.Vector CreateBreakBeforePropagateMask(System.Numerics.Vector mask, System.Numerics.Vector left, System.Numerics.Vector right) { throw null; } @@ -4908,6 +4915,8 @@ internal Arm64() { } public static System.Numerics.Vector CreateBreakBeforePropagateMask(System.Numerics.Vector mask, System.Numerics.Vector left, System.Numerics.Vector right) { throw null; } public static System.Numerics.Vector CreateBreakBeforePropagateMask(System.Numerics.Vector mask, System.Numerics.Vector left, System.Numerics.Vector right) { throw null; } public static System.Numerics.Vector CreateBreakBeforePropagateMask(System.Numerics.Vector mask, System.Numerics.Vector left, System.Numerics.Vector right) { throw null; } + public static System.Numerics.Vector CreateBreakBeforePropagateMask(System.Numerics.Vector mask, System.Numerics.Vector left, System.Numerics.Vector right) { throw null; } + public static System.Numerics.Vector CreateBreakPropagateMask(System.Numerics.Vector totalMask, System.Numerics.Vector fromMask) { throw null; } public static System.Numerics.Vector CreateBreakPropagateMask(System.Numerics.Vector totalMask, System.Numerics.Vector fromMask) { throw null; } public static System.Numerics.Vector CreateBreakPropagateMask(System.Numerics.Vector totalMask, System.Numerics.Vector fromMask) { throw null; } public static System.Numerics.Vector CreateBreakPropagateMask(System.Numerics.Vector totalMask, System.Numerics.Vector fromMask) { throw null; } @@ -4916,6 +4925,7 @@ internal Arm64() { } public static System.Numerics.Vector CreateBreakPropagateMask(System.Numerics.Vector totalMask, System.Numerics.Vector fromMask) { throw null; } public static System.Numerics.Vector CreateBreakPropagateMask(System.Numerics.Vector totalMask, System.Numerics.Vector fromMask) { throw null; } public static System.Numerics.Vector CreateBreakPropagateMask(System.Numerics.Vector totalMask, System.Numerics.Vector fromMask) { throw null; } + public static System.Numerics.Vector CreateBreakPropagateMask(System.Numerics.Vector totalMask, System.Numerics.Vector fromMask) { throw null; } public static System.Numerics.Vector CreateFalseMaskByte() { throw null; } public static System.Numerics.Vector CreateFalseMaskDouble() { throw null; } public static System.Numerics.Vector CreateFalseMaskInt16() { throw null; } @@ -4926,6 +4936,7 @@ internal Arm64() { } public static System.Numerics.Vector CreateFalseMaskUInt16() { throw null; } public static System.Numerics.Vector CreateFalseMaskUInt32() { throw null; } public static System.Numerics.Vector CreateFalseMaskUInt64() { throw null; } + public static System.Numerics.Vector CreateMaskForFirstActiveElement(System.Numerics.Vector totalMask, System.Numerics.Vector fromMask) { throw null; } public static System.Numerics.Vector CreateMaskForFirstActiveElement(System.Numerics.Vector totalMask, System.Numerics.Vector fromMask) { throw null; } public static System.Numerics.Vector CreateMaskForFirstActiveElement(System.Numerics.Vector totalMask, System.Numerics.Vector fromMask) { throw null; } public static System.Numerics.Vector CreateMaskForFirstActiveElement(System.Numerics.Vector totalMask, System.Numerics.Vector fromMask) { throw null; } @@ -4934,6 +4945,7 @@ internal Arm64() { } public static System.Numerics.Vector CreateMaskForFirstActiveElement(System.Numerics.Vector totalMask, System.Numerics.Vector fromMask) { throw null; } public static System.Numerics.Vector CreateMaskForFirstActiveElement(System.Numerics.Vector totalMask, System.Numerics.Vector fromMask) { throw null; } public static System.Numerics.Vector CreateMaskForFirstActiveElement(System.Numerics.Vector totalMask, System.Numerics.Vector fromMask) { throw null; } + public static System.Numerics.Vector CreateMaskForFirstActiveElement(System.Numerics.Vector totalMask, System.Numerics.Vector fromMask) { throw null; } public static System.Numerics.Vector CreateMaskForNextActiveElement(System.Numerics.Vector totalMask, System.Numerics.Vector fromMask) { throw null; } public static System.Numerics.Vector CreateMaskForNextActiveElement(System.Numerics.Vector totalMask, System.Numerics.Vector fromMask) { throw null; } public static System.Numerics.Vector CreateMaskForNextActiveElement(System.Numerics.Vector totalMask, System.Numerics.Vector fromMask) { throw null; } @@ -5371,10 +5383,12 @@ internal Arm64() { } public static ulong GetActiveElementCount(System.Numerics.Vector mask, System.Numerics.Vector from) { throw null; } public static ulong GetActiveElementCount(System.Numerics.Vector mask, System.Numerics.Vector from) { throw null; } public static System.Numerics.Vector GetFfrByte() { throw null; } + public static System.Numerics.Vector GetFfrDouble() { throw null; } public static System.Numerics.Vector GetFfrInt16() { throw null; } public static System.Numerics.Vector GetFfrInt32() { throw null; } public static System.Numerics.Vector GetFfrInt64() { throw null; } public static System.Numerics.Vector GetFfrSByte() { throw null; } + public static System.Numerics.Vector GetFfrSingle() { throw null; } public static System.Numerics.Vector GetFfrUInt16() { throw null; } public static System.Numerics.Vector GetFfrUInt32() { throw null; } public static System.Numerics.Vector GetFfrUInt64() { throw null; } @@ -5889,6 +5903,7 @@ internal Arm64() { } public static unsafe void ScatterWithByteOffsets(System.Numerics.Vector mask, uint* address, System.Numerics.Vector offsets, System.Numerics.Vector data) { throw null; } public static unsafe void ScatterWithByteOffsets(System.Numerics.Vector mask, ulong* address, System.Numerics.Vector offsets, System.Numerics.Vector data) { throw null; } public static unsafe void ScatterWithByteOffsets(System.Numerics.Vector mask, ulong* address, System.Numerics.Vector offsets, System.Numerics.Vector data) { throw null; } + public static void SetFfr(System.Numerics.Vector value) { throw null; } public static void SetFfr(System.Numerics.Vector value) { throw null; } public static void SetFfr(System.Numerics.Vector value) { throw null; } public static void SetFfr(System.Numerics.Vector value) { throw null; } @@ -5897,6 +5912,7 @@ internal Arm64() { } public static void SetFfr(System.Numerics.Vector value) { throw null; } public static void SetFfr(System.Numerics.Vector value) { throw null; } public static void SetFfr(System.Numerics.Vector value) { throw null; } + public static void SetFfr(System.Numerics.Vector value) { throw null; } public static System.Numerics.Vector ShiftLeftLogical(System.Numerics.Vector left, System.Numerics.Vector right) { throw null; } public static System.Numerics.Vector ShiftLeftLogical(System.Numerics.Vector left, System.Numerics.Vector right) { throw null; } public static System.Numerics.Vector ShiftLeftLogical(System.Numerics.Vector left, System.Numerics.Vector right) { throw null; } @@ -6033,6 +6049,7 @@ internal Arm64() { } public static System.Numerics.Vector SubtractSaturate(System.Numerics.Vector left, System.Numerics.Vector right) { throw null; } public static System.Numerics.Vector SubtractSaturate(System.Numerics.Vector left, System.Numerics.Vector right) { throw null; } public static System.Numerics.Vector SubtractSaturate(System.Numerics.Vector left, System.Numerics.Vector right) { throw null; } + public static bool TestAnyTrue(System.Numerics.Vector mask, System.Numerics.Vector rightMask) { throw null; } public static bool TestAnyTrue(System.Numerics.Vector mask, System.Numerics.Vector rightMask) { throw null; } public static bool TestAnyTrue(System.Numerics.Vector mask, System.Numerics.Vector rightMask) { throw null; } public static bool TestAnyTrue(System.Numerics.Vector mask, System.Numerics.Vector rightMask) { throw null; } @@ -6041,6 +6058,8 @@ internal Arm64() { } public static bool TestAnyTrue(System.Numerics.Vector mask, System.Numerics.Vector rightMask) { throw null; } public static bool TestAnyTrue(System.Numerics.Vector mask, System.Numerics.Vector rightMask) { throw null; } public static bool TestAnyTrue(System.Numerics.Vector mask, System.Numerics.Vector rightMask) { throw null; } + public static bool TestAnyTrue(System.Numerics.Vector mask, System.Numerics.Vector rightMask) { throw null; } + public static bool TestFirstTrue(System.Numerics.Vector leftMask, System.Numerics.Vector rightMask) { throw null; } public static bool TestFirstTrue(System.Numerics.Vector leftMask, System.Numerics.Vector rightMask) { throw null; } public static bool TestFirstTrue(System.Numerics.Vector leftMask, System.Numerics.Vector rightMask) { throw null; } public static bool TestFirstTrue(System.Numerics.Vector leftMask, System.Numerics.Vector rightMask) { throw null; } @@ -6049,6 +6068,8 @@ internal Arm64() { } public static bool TestFirstTrue(System.Numerics.Vector leftMask, System.Numerics.Vector rightMask) { throw null; } public static bool TestFirstTrue(System.Numerics.Vector leftMask, System.Numerics.Vector rightMask) { throw null; } public static bool TestFirstTrue(System.Numerics.Vector leftMask, System.Numerics.Vector rightMask) { throw null; } + public static bool TestFirstTrue(System.Numerics.Vector leftMask, System.Numerics.Vector rightMask) { throw null; } + public static bool TestLastTrue(System.Numerics.Vector leftMask, System.Numerics.Vector rightMask) { throw null; } public static bool TestLastTrue(System.Numerics.Vector leftMask, System.Numerics.Vector rightMask) { throw null; } public static bool TestLastTrue(System.Numerics.Vector leftMask, System.Numerics.Vector rightMask) { throw null; } public static bool TestLastTrue(System.Numerics.Vector leftMask, System.Numerics.Vector rightMask) { throw null; } @@ -6057,6 +6078,7 @@ internal Arm64() { } public static bool TestLastTrue(System.Numerics.Vector leftMask, System.Numerics.Vector rightMask) { throw null; } public static bool TestLastTrue(System.Numerics.Vector leftMask, System.Numerics.Vector rightMask) { throw null; } public static bool TestLastTrue(System.Numerics.Vector leftMask, System.Numerics.Vector rightMask) { throw null; } + public static bool TestLastTrue(System.Numerics.Vector leftMask, System.Numerics.Vector rightMask) { throw null; } public static System.Numerics.Vector TransposeEven(System.Numerics.Vector left, System.Numerics.Vector right) { throw null; } public static System.Numerics.Vector TransposeEven(System.Numerics.Vector left, System.Numerics.Vector right) { throw null; } public static System.Numerics.Vector TransposeEven(System.Numerics.Vector left, System.Numerics.Vector right) { throw null; } diff --git a/src/tests/Common/GenerateHWIntrinsicTests/Arm/SveTests.cs b/src/tests/Common/GenerateHWIntrinsicTests/Arm/SveTests.cs index 00171e3fdd9510..a646a4603193e4 100644 --- a/src/tests/Common/GenerateHWIntrinsicTests/Arm/SveTests.cs +++ b/src/tests/Common/GenerateHWIntrinsicTests/Arm/SveTests.cs @@ -238,6 +238,7 @@ static class SveTests (Templates.ScalarUnOpTest, new Dictionary { ["TestName"] = "Sve_Count64BitElements", ["Method"] = "Count64BitElements", ["RetBaseType"] = "UInt64", ["Op1BaseType"] = "SveMaskPattern", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "SveMaskPattern.All", ["ValidateResult"] = "isUnexpectedResult = (result != (UInt64)(Unsafe.SizeOf>() / sizeof(Int64)));",}), (Templates.ScalarUnOpTest, new Dictionary { ["TestName"] = "Sve_Count8BitElements", ["Method"] = "Count8BitElements", ["RetBaseType"] = "UInt64", ["Op1BaseType"] = "SveMaskPattern", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "SveMaskPattern.All", ["ValidateResult"] = "isUnexpectedResult = (result != (UInt64)(Unsafe.SizeOf>() / sizeof(Byte)));",}), + (Templates.SveVecBinOpVecTest, new Dictionary { ["TestName"] = "Sve_CreateBreakAfterMask_double", ["Method"] = "CreateBreakAfterMask", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Double", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Double", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "Double", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskDouble()", ["NextValueOp2"] = "Helpers.getMaskDouble()", ["ValidateVectorResult"] = "!result.SequenceEqual(Helpers.CreateBreakAfterMask(left, right))", ["GetVectorResult"] = "Helpers.CreateBreakAfterMask(left, right)"}), (Templates.SveVecBinOpVecTest, new Dictionary { ["TestName"] = "Sve_CreateBreakAfterMask_byte", ["Method"] = "CreateBreakAfterMask", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Byte", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Byte", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "Byte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskByte()", ["NextValueOp2"] = "Helpers.getMaskByte()", ["ValidateVectorResult"] = "!result.SequenceEqual(Helpers.CreateBreakAfterMask(left, right))", ["GetVectorResult"] = "Helpers.CreateBreakAfterMask(left, right)"}), (Templates.SveVecBinOpVecTest, new Dictionary { ["TestName"] = "Sve_CreateBreakAfterMask_ushort", ["Method"] = "CreateBreakAfterMask", ["RetVectorType"] = "Vector", ["RetBaseType"] = "UInt16", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "UInt16", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "UInt16", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskUInt16()", ["NextValueOp2"] = "Helpers.getMaskUInt16()", ["ValidateVectorResult"] = "!result.SequenceEqual(Helpers.CreateBreakAfterMask(left, right))", ["GetVectorResult"] = "Helpers.CreateBreakAfterMask(left, right)"}), (Templates.SveVecBinOpVecTest, new Dictionary { ["TestName"] = "Sve_CreateBreakAfterMask_uint", ["Method"] = "CreateBreakAfterMask", ["RetVectorType"] = "Vector", ["RetBaseType"] = "UInt32", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "UInt32", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "UInt32", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskUInt32()", ["NextValueOp2"] = "Helpers.getMaskUInt32()", ["ValidateVectorResult"] = "!result.SequenceEqual(Helpers.CreateBreakAfterMask(left, right))", ["GetVectorResult"] = "Helpers.CreateBreakAfterMask(left, right)"}), @@ -246,7 +247,9 @@ static class SveTests (Templates.SveVecBinOpVecTest, new Dictionary { ["TestName"] = "Sve_CreateBreakAfterMask_short", ["Method"] = "CreateBreakAfterMask", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Int16", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int16", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "Int16", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskInt16()", ["NextValueOp2"] = "Helpers.getMaskInt16()", ["ValidateVectorResult"] = "!result.SequenceEqual(Helpers.CreateBreakAfterMask(left, right))", ["GetVectorResult"] = "Helpers.CreateBreakAfterMask(left, right)"}), (Templates.SveVecBinOpVecTest, new Dictionary { ["TestName"] = "Sve_CreateBreakAfterMask_int", ["Method"] = "CreateBreakAfterMask", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Int32", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int32", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "Int32", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskInt32()", ["NextValueOp2"] = "Helpers.getMaskInt32()", ["ValidateVectorResult"] = "!result.SequenceEqual(Helpers.CreateBreakAfterMask(left, right))", ["GetVectorResult"] = "Helpers.CreateBreakAfterMask(left, right)"}), (Templates.SveVecBinOpVecTest, new Dictionary { ["TestName"] = "Sve_CreateBreakAfterMask_long", ["Method"] = "CreateBreakAfterMask", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Int64", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int64", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "Int64", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskInt64()", ["NextValueOp2"] = "Helpers.getMaskInt64()", ["ValidateVectorResult"] = "!result.SequenceEqual(Helpers.CreateBreakAfterMask(left, right))", ["GetVectorResult"] = "Helpers.CreateBreakAfterMask(left, right)"}), + (Templates.SveVecBinOpVecTest, new Dictionary { ["TestName"] = "Sve_CreateBreakAfterMask_float", ["Method"] = "CreateBreakAfterMask", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Single", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Single", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "Single", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskSingle()", ["NextValueOp2"] = "Helpers.getMaskSingle()", ["ValidateVectorResult"] = "!result.SequenceEqual(Helpers.CreateBreakAfterMask(left, right))", ["GetVectorResult"] = "Helpers.CreateBreakAfterMask(left, right)"}), + (Templates.SveVecTernOpVecTest, new Dictionary { ["TestName"] = "Sve_CreateBreakAfterPropagateMask_double", ["Method"] = "CreateBreakAfterPropagateMask", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Double", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Double", ["Op2BaseType"] = "Double", ["Op3BaseType"] = "Double", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskDouble()", ["NextValueOp2"] = "Helpers.getMaskDouble()", ["NextValueOp3"] = "Helpers.getMaskDouble()", ["ValidateVectorResult"] = "!result.SequenceEqual(Helpers.CreateBreakAfterPropagateMask(firstOp, secondOp, thirdOp))", ["GetVectorResult"] = "Helpers.CreateBreakAfterPropagateMask(first, second, third)"}), (Templates.SveVecTernOpVecTest, new Dictionary { ["TestName"] = "Sve_CreateBreakAfterPropagateMask_byte", ["Method"] = "CreateBreakAfterPropagateMask", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Byte", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Byte", ["Op2BaseType"] = "Byte", ["Op3BaseType"] = "Byte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskByte()", ["NextValueOp2"] = "Helpers.getMaskByte()", ["NextValueOp3"] = "Helpers.getMaskByte()", ["ValidateVectorResult"] = "!result.SequenceEqual(Helpers.CreateBreakAfterPropagateMask(firstOp, secondOp, thirdOp))", ["GetVectorResult"] = "Helpers.CreateBreakAfterPropagateMask(first, second, third)"}), (Templates.SveVecTernOpVecTest, new Dictionary { ["TestName"] = "Sve_CreateBreakAfterPropagateMask_ushort", ["Method"] = "CreateBreakAfterPropagateMask", ["RetVectorType"] = "Vector", ["RetBaseType"] = "UInt16", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "UInt16", ["Op2BaseType"] = "UInt16", ["Op3BaseType"] = "UInt16", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskUInt16()", ["NextValueOp2"] = "Helpers.getMaskUInt16()", ["NextValueOp3"] = "Helpers.getMaskUInt16()", ["ValidateVectorResult"] = "!result.SequenceEqual(Helpers.CreateBreakAfterPropagateMask(firstOp, secondOp, thirdOp))", ["GetVectorResult"] = "Helpers.CreateBreakAfterPropagateMask(first, second, third)"}), (Templates.SveVecTernOpVecTest, new Dictionary { ["TestName"] = "Sve_CreateBreakAfterPropagateMask_uint", ["Method"] = "CreateBreakAfterPropagateMask", ["RetVectorType"] = "Vector", ["RetBaseType"] = "UInt32", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "UInt32", ["Op2BaseType"] = "UInt32", ["Op3BaseType"] = "UInt32", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskUInt32()", ["NextValueOp2"] = "Helpers.getMaskUInt32()", ["NextValueOp3"] = "Helpers.getMaskUInt32()", ["ValidateVectorResult"] = "!result.SequenceEqual(Helpers.CreateBreakAfterPropagateMask(firstOp, secondOp, thirdOp))", ["GetVectorResult"] = "Helpers.CreateBreakAfterPropagateMask(first, second, third)"}), @@ -255,7 +258,9 @@ static class SveTests (Templates.SveVecTernOpVecTest, new Dictionary { ["TestName"] = "Sve_CreateBreakAfterPropagateMask_short", ["Method"] = "CreateBreakAfterPropagateMask", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Int16", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int16", ["Op2BaseType"] = "Int16", ["Op3BaseType"] = "Int16", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskInt16()", ["NextValueOp2"] = "Helpers.getMaskInt16()", ["NextValueOp3"] = "Helpers.getMaskInt16()", ["ValidateVectorResult"] = "!result.SequenceEqual(Helpers.CreateBreakAfterPropagateMask(firstOp, secondOp, thirdOp))", ["GetVectorResult"] = "Helpers.CreateBreakAfterPropagateMask(first, second, third)"}), (Templates.SveVecTernOpVecTest, new Dictionary { ["TestName"] = "Sve_CreateBreakAfterPropagateMask_int", ["Method"] = "CreateBreakAfterPropagateMask", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Int32", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int32", ["Op2BaseType"] = "Int32", ["Op3BaseType"] = "Int32", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskInt32()", ["NextValueOp2"] = "Helpers.getMaskInt32()", ["NextValueOp3"] = "Helpers.getMaskInt32()", ["ValidateVectorResult"] = "!result.SequenceEqual(Helpers.CreateBreakAfterPropagateMask(firstOp, secondOp, thirdOp))", ["GetVectorResult"] = "Helpers.CreateBreakAfterPropagateMask(first, second, third)"}), (Templates.SveVecTernOpVecTest, new Dictionary { ["TestName"] = "Sve_CreateBreakAfterPropagateMask_long", ["Method"] = "CreateBreakAfterPropagateMask", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Int64", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int64", ["Op2BaseType"] = "Int64", ["Op3BaseType"] = "Int64", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskInt64()", ["NextValueOp2"] = "Helpers.getMaskInt64()", ["NextValueOp3"] = "Helpers.getMaskInt64()", ["ValidateVectorResult"] = "!result.SequenceEqual(Helpers.CreateBreakAfterPropagateMask(firstOp, secondOp, thirdOp))", ["GetVectorResult"] = "Helpers.CreateBreakAfterPropagateMask(first, second, third)"}), + (Templates.SveVecTernOpVecTest, new Dictionary { ["TestName"] = "Sve_CreateBreakAfterPropagateMask_float", ["Method"] = "CreateBreakAfterPropagateMask", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Single", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Single", ["Op2BaseType"] = "Single", ["Op3BaseType"] = "Single", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskSingle()", ["NextValueOp2"] = "Helpers.getMaskSingle()", ["NextValueOp3"] = "Helpers.getMaskSingle()", ["ValidateVectorResult"] = "!result.SequenceEqual(Helpers.CreateBreakAfterPropagateMask(firstOp, secondOp, thirdOp))", ["GetVectorResult"] = "Helpers.CreateBreakAfterPropagateMask(first, second, third)"}), + (Templates.SveVecBinOpVecTest, new Dictionary { ["TestName"] = "Sve_CreateBreakBeforeMask_double", ["Method"] = "CreateBreakBeforeMask", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Double", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Double", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "Double", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskDouble()", ["NextValueOp2"] = "Helpers.getMaskDouble()", ["ValidateVectorResult"] = "!result.SequenceEqual(Helpers.CreateBreakBeforeMask(left, right))", ["GetVectorResult"] = "Helpers.CreateBreakBeforeMask(left, right)"}), (Templates.SveVecBinOpVecTest, new Dictionary { ["TestName"] = "Sve_CreateBreakBeforeMask_byte", ["Method"] = "CreateBreakBeforeMask", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Byte", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Byte", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "Byte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskByte()", ["NextValueOp2"] = "Helpers.getMaskByte()", ["ValidateVectorResult"] = "!result.SequenceEqual(Helpers.CreateBreakBeforeMask(left, right))", ["GetVectorResult"] = "Helpers.CreateBreakBeforeMask(left, right)"}), (Templates.SveVecBinOpVecTest, new Dictionary { ["TestName"] = "Sve_CreateBreakBeforeMask_ushort", ["Method"] = "CreateBreakBeforeMask", ["RetVectorType"] = "Vector", ["RetBaseType"] = "UInt16", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "UInt16", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "UInt16", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskUInt16()", ["NextValueOp2"] = "Helpers.getMaskUInt16()", ["ValidateVectorResult"] = "!result.SequenceEqual(Helpers.CreateBreakBeforeMask(left, right))", ["GetVectorResult"] = "Helpers.CreateBreakBeforeMask(left, right)"}), (Templates.SveVecBinOpVecTest, new Dictionary { ["TestName"] = "Sve_CreateBreakBeforeMask_uint", ["Method"] = "CreateBreakBeforeMask", ["RetVectorType"] = "Vector", ["RetBaseType"] = "UInt32", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "UInt32", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "UInt32", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskUInt32()", ["NextValueOp2"] = "Helpers.getMaskUInt32()", ["ValidateVectorResult"] = "!result.SequenceEqual(Helpers.CreateBreakBeforeMask(left, right))", ["GetVectorResult"] = "Helpers.CreateBreakBeforeMask(left, right)"}), @@ -264,7 +269,9 @@ static class SveTests (Templates.SveVecBinOpVecTest, new Dictionary { ["TestName"] = "Sve_CreateBreakBeforeMask_short", ["Method"] = "CreateBreakBeforeMask", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Int16", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int16", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "Int16", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskInt16()", ["NextValueOp2"] = "Helpers.getMaskInt16()", ["ValidateVectorResult"] = "!result.SequenceEqual(Helpers.CreateBreakBeforeMask(left, right))", ["GetVectorResult"] = "Helpers.CreateBreakBeforeMask(left, right)"}), (Templates.SveVecBinOpVecTest, new Dictionary { ["TestName"] = "Sve_CreateBreakBeforeMask_int", ["Method"] = "CreateBreakBeforeMask", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Int32", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int32", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "Int32", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskInt32()", ["NextValueOp2"] = "Helpers.getMaskInt32()", ["ValidateVectorResult"] = "!result.SequenceEqual(Helpers.CreateBreakBeforeMask(left, right))", ["GetVectorResult"] = "Helpers.CreateBreakBeforeMask(left, right)"}), (Templates.SveVecBinOpVecTest, new Dictionary { ["TestName"] = "Sve_CreateBreakBeforeMask_long", ["Method"] = "CreateBreakBeforeMask", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Int64", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int64", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "Int64", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskInt64()", ["NextValueOp2"] = "Helpers.getMaskInt64()", ["ValidateVectorResult"] = "!result.SequenceEqual(Helpers.CreateBreakBeforeMask(left, right))", ["GetVectorResult"] = "Helpers.CreateBreakBeforeMask(left, right)"}), + (Templates.SveVecBinOpVecTest, new Dictionary { ["TestName"] = "Sve_CreateBreakBeforeMask_float", ["Method"] = "CreateBreakBeforeMask", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Single", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Single", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "Single", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskSingle()", ["NextValueOp2"] = "Helpers.getMaskSingle()", ["ValidateVectorResult"] = "!result.SequenceEqual(Helpers.CreateBreakBeforeMask(left, right))", ["GetVectorResult"] = "Helpers.CreateBreakBeforeMask(left, right)"}), + (Templates.SveVecTernOpVecTest, new Dictionary { ["TestName"] = "Sve_CreateBreakBeforePropagateMask_double", ["Method"] = "CreateBreakBeforePropagateMask", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Double", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Double", ["Op2BaseType"] = "Double", ["Op3BaseType"] = "Double", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskDouble()", ["NextValueOp2"] = "Helpers.getMaskDouble()", ["NextValueOp3"] = "Helpers.getMaskDouble()", ["ValidateVectorResult"] = "!result.SequenceEqual(Helpers.CreateBreakBeforePropagateMask(firstOp, secondOp, thirdOp))", ["GetVectorResult"] = "Helpers.CreateBreakBeforePropagateMask(first, second, third)"}), (Templates.SveVecTernOpVecTest, new Dictionary { ["TestName"] = "Sve_CreateBreakBeforePropagateMask_byte", ["Method"] = "CreateBreakBeforePropagateMask", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Byte", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Byte", ["Op2BaseType"] = "Byte", ["Op3BaseType"] = "Byte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskByte()", ["NextValueOp2"] = "Helpers.getMaskByte()", ["NextValueOp3"] = "Helpers.getMaskByte()", ["ValidateVectorResult"] = "!result.SequenceEqual(Helpers.CreateBreakBeforePropagateMask(firstOp, secondOp, thirdOp))", ["GetVectorResult"] = "Helpers.CreateBreakBeforePropagateMask(first, second, third)"}), (Templates.SveVecTernOpVecTest, new Dictionary { ["TestName"] = "Sve_CreateBreakBeforePropagateMask_ushort", ["Method"] = "CreateBreakBeforePropagateMask", ["RetVectorType"] = "Vector", ["RetBaseType"] = "UInt16", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "UInt16", ["Op2BaseType"] = "UInt16", ["Op3BaseType"] = "UInt16", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskUInt16()", ["NextValueOp2"] = "Helpers.getMaskUInt16()", ["NextValueOp3"] = "Helpers.getMaskUInt16()", ["ValidateVectorResult"] = "!result.SequenceEqual(Helpers.CreateBreakBeforePropagateMask(firstOp, secondOp, thirdOp))", ["GetVectorResult"] = "Helpers.CreateBreakBeforePropagateMask(first, second, third)"}), (Templates.SveVecTernOpVecTest, new Dictionary { ["TestName"] = "Sve_CreateBreakBeforePropagateMask_uint", ["Method"] = "CreateBreakBeforePropagateMask", ["RetVectorType"] = "Vector", ["RetBaseType"] = "UInt32", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "UInt32", ["Op2BaseType"] = "UInt32", ["Op3BaseType"] = "UInt32", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskUInt32()", ["NextValueOp2"] = "Helpers.getMaskUInt32()", ["NextValueOp3"] = "Helpers.getMaskUInt32()", ["ValidateVectorResult"] = "!result.SequenceEqual(Helpers.CreateBreakBeforePropagateMask(firstOp, secondOp, thirdOp))", ["GetVectorResult"] = "Helpers.CreateBreakBeforePropagateMask(first, second, third)"}), @@ -273,7 +280,9 @@ static class SveTests (Templates.SveVecTernOpVecTest, new Dictionary { ["TestName"] = "Sve_CreateBreakBeforePropagateMask_short", ["Method"] = "CreateBreakBeforePropagateMask", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Int16", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int16", ["Op2BaseType"] = "Int16", ["Op3BaseType"] = "Int16", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskInt16()", ["NextValueOp2"] = "Helpers.getMaskInt16()", ["NextValueOp3"] = "Helpers.getMaskInt16()", ["ValidateVectorResult"] = "!result.SequenceEqual(Helpers.CreateBreakBeforePropagateMask(firstOp, secondOp, thirdOp))", ["GetVectorResult"] = "Helpers.CreateBreakBeforePropagateMask(first, second, third)"}), (Templates.SveVecTernOpVecTest, new Dictionary { ["TestName"] = "Sve_CreateBreakBeforePropagateMask_int", ["Method"] = "CreateBreakBeforePropagateMask", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Int32", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int32", ["Op2BaseType"] = "Int32", ["Op3BaseType"] = "Int32", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskInt32()", ["NextValueOp2"] = "Helpers.getMaskInt32()", ["NextValueOp3"] = "Helpers.getMaskInt32()", ["ValidateVectorResult"] = "!result.SequenceEqual(Helpers.CreateBreakBeforePropagateMask(firstOp, secondOp, thirdOp))", ["GetVectorResult"] = "Helpers.CreateBreakBeforePropagateMask(first, second, third)"}), (Templates.SveVecTernOpVecTest, new Dictionary { ["TestName"] = "Sve_CreateBreakBeforePropagateMask_long", ["Method"] = "CreateBreakBeforePropagateMask", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Int64", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int64", ["Op2BaseType"] = "Int64", ["Op3BaseType"] = "Int64", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskInt64()", ["NextValueOp2"] = "Helpers.getMaskInt64()", ["NextValueOp3"] = "Helpers.getMaskInt64()", ["ValidateVectorResult"] = "!result.SequenceEqual(Helpers.CreateBreakBeforePropagateMask(firstOp, secondOp, thirdOp))", ["GetVectorResult"] = "Helpers.CreateBreakBeforePropagateMask(first, second, third)"}), + (Templates.SveVecTernOpVecTest, new Dictionary { ["TestName"] = "Sve_CreateBreakBeforePropagateMask_float", ["Method"] = "CreateBreakBeforePropagateMask", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Single", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Single", ["Op2BaseType"] = "Single", ["Op3BaseType"] = "Single", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskSingle()", ["NextValueOp2"] = "Helpers.getMaskSingle()", ["NextValueOp3"] = "Helpers.getMaskSingle()", ["ValidateVectorResult"] = "!result.SequenceEqual(Helpers.CreateBreakBeforePropagateMask(firstOp, secondOp, thirdOp))", ["GetVectorResult"] = "Helpers.CreateBreakBeforePropagateMask(first, second, third)"}), + (Templates.SveVecBinOpVecTest, new Dictionary { ["TestName"] = "Sve_CreateBreakPropagateMask_double", ["Method"] = "CreateBreakPropagateMask", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Double", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Double", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "Double", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskDouble()", ["NextValueOp2"] = "Helpers.getMaskDouble()", ["ValidateVectorResult"] = "!result.SequenceEqual(Helpers.CreateBreakPropagateMask(left, right))", ["GetVectorResult"] = "Helpers.CreateBreakPropagateMask(left, right)"}), (Templates.SveVecBinOpVecTest, new Dictionary { ["TestName"] = "Sve_CreateBreakPropagateMask_byte", ["Method"] = "CreateBreakPropagateMask", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Byte", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Byte", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "Byte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskByte()", ["NextValueOp2"] = "Helpers.getMaskByte()", ["ValidateVectorResult"] = "!result.SequenceEqual(Helpers.CreateBreakPropagateMask(left, right))", ["GetVectorResult"] = "Helpers.CreateBreakPropagateMask(left, right)"}), (Templates.SveVecBinOpVecTest, new Dictionary { ["TestName"] = "Sve_CreateBreakPropagateMask_ushort", ["Method"] = "CreateBreakPropagateMask", ["RetVectorType"] = "Vector", ["RetBaseType"] = "UInt16", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "UInt16", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "UInt16", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskUInt16()", ["NextValueOp2"] = "Helpers.getMaskUInt16()", ["ValidateVectorResult"] = "!result.SequenceEqual(Helpers.CreateBreakPropagateMask(left, right))", ["GetVectorResult"] = "Helpers.CreateBreakPropagateMask(left, right)"}), (Templates.SveVecBinOpVecTest, new Dictionary { ["TestName"] = "Sve_CreateBreakPropagateMask_uint", ["Method"] = "CreateBreakPropagateMask", ["RetVectorType"] = "Vector", ["RetBaseType"] = "UInt32", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "UInt32", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "UInt32", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskUInt32()", ["NextValueOp2"] = "Helpers.getMaskUInt32()", ["ValidateVectorResult"] = "!result.SequenceEqual(Helpers.CreateBreakPropagateMask(left, right))", ["GetVectorResult"] = "Helpers.CreateBreakPropagateMask(left, right)"}), @@ -282,6 +291,7 @@ static class SveTests (Templates.SveVecBinOpVecTest, new Dictionary { ["TestName"] = "Sve_CreateBreakPropagateMask_short", ["Method"] = "CreateBreakPropagateMask", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Int16", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int16", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "Int16", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskInt16()", ["NextValueOp2"] = "Helpers.getMaskInt16()", ["ValidateVectorResult"] = "!result.SequenceEqual(Helpers.CreateBreakPropagateMask(left, right))", ["GetVectorResult"] = "Helpers.CreateBreakPropagateMask(left, right)"}), (Templates.SveVecBinOpVecTest, new Dictionary { ["TestName"] = "Sve_CreateBreakPropagateMask_int", ["Method"] = "CreateBreakPropagateMask", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Int32", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int32", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "Int32", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskInt32()", ["NextValueOp2"] = "Helpers.getMaskInt32()", ["ValidateVectorResult"] = "!result.SequenceEqual(Helpers.CreateBreakPropagateMask(left, right))", ["GetVectorResult"] = "Helpers.CreateBreakPropagateMask(left, right)"}), (Templates.SveVecBinOpVecTest, new Dictionary { ["TestName"] = "Sve_CreateBreakPropagateMask_long", ["Method"] = "CreateBreakPropagateMask", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Int64", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int64", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "Int64", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskInt64()", ["NextValueOp2"] = "Helpers.getMaskInt64()", ["ValidateVectorResult"] = "!result.SequenceEqual(Helpers.CreateBreakPropagateMask(left, right))", ["GetVectorResult"] = "Helpers.CreateBreakPropagateMask(left, right)"}), + (Templates.SveVecBinOpVecTest, new Dictionary { ["TestName"] = "Sve_CreateBreakPropagateMask_float", ["Method"] = "CreateBreakPropagateMask", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Single", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Single", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "Single", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskSingle()", ["NextValueOp2"] = "Helpers.getMaskSingle()", ["ValidateVectorResult"] = "!result.SequenceEqual(Helpers.CreateBreakPropagateMask(left, right))", ["GetVectorResult"] = "Helpers.CreateBreakPropagateMask(left, right)"}), (Templates.ScalarBinOpRetVecTest,new Dictionary {["TestName"] = "Sve_CreateWhileLessThanMask16Bit_Int32", ["Method"] = "CreateWhileLessThanMask16Bit", ["RetVectorType"] = "Vector", ["RetBaseType"] = "UInt16", ["Op1BaseType"] = "Int32", ["Op2BaseType"] = "Int32", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt32()", ["NextValueOp2"] = "TestLibrary.Generator.GetInt32()", ["ValidateIterResult"] = "Helpers.WhileLessThanMask(left + (Int32)i, right) != (Int32)result[i]",}), (Templates.ScalarBinOpRetVecTest,new Dictionary {["TestName"] = "Sve_CreateWhileLessThanMask16Bit_Int64", ["Method"] = "CreateWhileLessThanMask16Bit", ["RetVectorType"] = "Vector", ["RetBaseType"] = "UInt16", ["Op1BaseType"] = "Int64", ["Op2BaseType"] = "Int64", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetInt64()", ["NextValueOp2"] = "TestLibrary.Generator.GetInt64()", ["ValidateIterResult"] = "Helpers.WhileLessThanMask(left + (Int64)i, right) != (Int64)result[i]",}), @@ -428,6 +438,7 @@ static class SveTests (Templates.SveVecImmUnOpTest, new Dictionary { ["TestName"] = "Sve_DuplicateSelectedScalarToVector_uint", ["Method"] = "DuplicateSelectedScalarToVector", ["RetVectorType"] = "Vector", ["RetBaseType"] = "UInt32", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "UInt32", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetUInt32()", ["InvalidImm"] = "16", ["Imm"] = "(Byte)14", ["ValidateIterResult"] = "result[i] != (Imm < Op1ElementCount ? firstOp[Imm] : 0)", ["GetIterResult"] = "(UInt32)(Imm < Op1ElementCount ? firstOp[Imm] : 0)"}), (Templates.SveVecImmUnOpTest, new Dictionary { ["TestName"] = "Sve_DuplicateSelectedScalarToVector_ulong", ["Method"] = "DuplicateSelectedScalarToVector", ["RetVectorType"] = "Vector", ["RetBaseType"] = "UInt64", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "UInt64", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetUInt64()", ["InvalidImm"] = "8", ["Imm"] = "(Byte)1", ["ValidateIterResult"] = "result[i] != (Imm < Op1ElementCount ? firstOp[Imm] : 0)", ["GetIterResult"] = "(UInt64)(Imm < Op1ElementCount ? firstOp[Imm] : 0)"}), + (Templates.SveVecBinOpVecTest, new Dictionary { ["TestName"] = "Sve_CreateMaskForFirstActiveElement_double", ["Method"] = "CreateMaskForFirstActiveElement", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Double", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Double", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "Double", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskDouble()", ["NextValueOp2"] = "Helpers.getMaskDouble()", ["ValidateVectorResult"] = "!result.SequenceEqual(Helpers.CreateMaskForFirstActiveElement(left, right))", ["GetVectorResult"] = "Helpers.CreateMaskForFirstActiveElement(left, right)"}), (Templates.SveVecBinOpVecTest, new Dictionary { ["TestName"] = "Sve_CreateMaskForFirstActiveElement_sbyte", ["Method"] = "CreateMaskForFirstActiveElement", ["RetVectorType"] = "Vector", ["RetBaseType"] = "SByte", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "SByte", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "SByte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskSByte()", ["NextValueOp2"] = "Helpers.getMaskSByte()", ["ValidateVectorResult"] = "!result.SequenceEqual(Helpers.CreateMaskForFirstActiveElement(left, right))", ["GetVectorResult"] = "Helpers.CreateMaskForFirstActiveElement(left, right)"}), (Templates.SveVecBinOpVecTest, new Dictionary { ["TestName"] = "Sve_CreateMaskForFirstActiveElement_short", ["Method"] = "CreateMaskForFirstActiveElement", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Int16", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int16", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "Int16", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskInt16()", ["NextValueOp2"] = "Helpers.getMaskInt16()", ["ValidateVectorResult"] = "!result.SequenceEqual(Helpers.CreateMaskForFirstActiveElement(left, right))", ["GetVectorResult"] = "Helpers.CreateMaskForFirstActiveElement(left, right)"}), (Templates.SveVecBinOpVecTest, new Dictionary { ["TestName"] = "Sve_CreateMaskForFirstActiveElement_int", ["Method"] = "CreateMaskForFirstActiveElement", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Int32", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Int32", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "Int32", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskInt32()", ["NextValueOp2"] = "Helpers.getMaskInt32()", ["ValidateVectorResult"] = "!result.SequenceEqual(Helpers.CreateMaskForFirstActiveElement(left, right))", ["GetVectorResult"] = "Helpers.CreateMaskForFirstActiveElement(left, right)"}), @@ -436,6 +447,7 @@ static class SveTests (Templates.SveVecBinOpVecTest, new Dictionary { ["TestName"] = "Sve_CreateMaskForFirstActiveElement_ushort", ["Method"] = "CreateMaskForFirstActiveElement", ["RetVectorType"] = "Vector", ["RetBaseType"] = "UInt16", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "UInt16", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "UInt16", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskUInt16()", ["NextValueOp2"] = "Helpers.getMaskUInt16()", ["ValidateVectorResult"] = "!result.SequenceEqual(Helpers.CreateMaskForFirstActiveElement(left, right))", ["GetVectorResult"] = "Helpers.CreateMaskForFirstActiveElement(left, right)"}), (Templates.SveVecBinOpVecTest, new Dictionary { ["TestName"] = "Sve_CreateMaskForFirstActiveElement_uint", ["Method"] = "CreateMaskForFirstActiveElement", ["RetVectorType"] = "Vector", ["RetBaseType"] = "UInt32", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "UInt32", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "UInt32", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskUInt32()", ["NextValueOp2"] = "Helpers.getMaskUInt32()", ["ValidateVectorResult"] = "!result.SequenceEqual(Helpers.CreateMaskForFirstActiveElement(left, right))", ["GetVectorResult"] = "Helpers.CreateMaskForFirstActiveElement(left, right)"}), (Templates.SveVecBinOpVecTest, new Dictionary { ["TestName"] = "Sve_CreateMaskForFirstActiveElement_ulong", ["Method"] = "CreateMaskForFirstActiveElement", ["RetVectorType"] = "Vector", ["RetBaseType"] = "UInt64", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "UInt64", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "UInt64", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskUInt64()", ["NextValueOp2"] = "Helpers.getMaskUInt64()", ["ValidateVectorResult"] = "!result.SequenceEqual(Helpers.CreateMaskForFirstActiveElement(left, right))", ["GetVectorResult"] = "Helpers.CreateMaskForFirstActiveElement(left, right)"}), + (Templates.SveVecBinOpVecTest, new Dictionary { ["TestName"] = "Sve_CreateMaskForFirstActiveElement_float", ["Method"] = "CreateMaskForFirstActiveElement", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Single", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Single", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "Single", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskSingle()", ["NextValueOp2"] = "Helpers.getMaskSingle()", ["ValidateVectorResult"] = "!result.SequenceEqual(Helpers.CreateMaskForFirstActiveElement(left, right))", ["GetVectorResult"] = "Helpers.CreateMaskForFirstActiveElement(left, right)"}), (Templates.SveVecBinOpVecTest, new Dictionary { ["TestName"] = "Sve_CreateMaskForNextActiveElement_byte", ["Method"] = "CreateMaskForNextActiveElement", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Byte", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Byte", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "Byte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskByte()", ["NextValueOp2"] = "Helpers.getMaskByte()", ["ValidateVectorResult"] = "!result.SequenceEqual(Helpers.CreateMaskForNextActiveElement(left, right))", ["GetVectorResult"] = "Helpers.CreateMaskForNextActiveElement(left, right)"}), (Templates.SveVecBinOpVecTest, new Dictionary { ["TestName"] = "Sve_CreateMaskForNextActiveElement_ushort", ["Method"] = "CreateMaskForNextActiveElement", ["RetVectorType"] = "Vector", ["RetBaseType"] = "UInt16", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "UInt16", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "UInt16", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskUInt16()", ["NextValueOp2"] = "Helpers.getMaskUInt16()", ["ValidateVectorResult"] = "!result.SequenceEqual(Helpers.CreateMaskForNextActiveElement(left, right))", ["GetVectorResult"] = "Helpers.CreateMaskForNextActiveElement(left, right)"}), @@ -496,11 +508,13 @@ static class SveTests (Templates.SveExtractVectorTest, new Dictionary { ["TestName"] = "Sve_ExtractVector_UInt64_1", ["Method"] = "ExtractVector", ["RetVectorType"] = "Vector", ["RetBaseType"] = "UInt64", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "UInt64", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "UInt64", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetUInt64()", ["NextValueOp2"] = "TestLibrary.Generator.GetUInt64()", ["ElementIndex"] = "1", ["ValidateIterResult"] = "Helpers.ExtractVector(firstOp, secondOp, ElementIndex, i) != result[i]"}), (Templates.SveFfrTest, new Dictionary { ["TestName"] = "Sve_Ffr_byte", ["VectorBaseType"] = "Byte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskByte()"}), + (Templates.SveFfrTest, new Dictionary { ["TestName"] = "Sve_Ffr_double", ["VectorBaseType"] = "Double", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskDouble()"}), (Templates.SveFfrTest, new Dictionary { ["TestName"] = "Sve_Ffr_short", ["VectorBaseType"] = "Int16", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskInt16()"}), (Templates.SveFfrTest, new Dictionary { ["TestName"] = "Sve_Ffr_int", ["VectorBaseType"] = "Int32", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskInt32()"}), (Templates.SveFfrTest, new Dictionary { ["TestName"] = "Sve_Ffr_long", ["VectorBaseType"] = "Int64", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskInt64()"}), (Templates.SveFfrTest, new Dictionary { ["TestName"] = "Sve_Ffr_sbyte", ["VectorBaseType"] = "SByte", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskSByte()"}), (Templates.SveFfrTest, new Dictionary { ["TestName"] = "Sve_Ffr_ushort", ["VectorBaseType"] = "UInt16", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskUInt16()"}), + (Templates.SveFfrTest, new Dictionary { ["TestName"] = "Sve_Ffr_float", ["VectorBaseType"] = "Single", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskSingle()"}), (Templates.SveFfrTest, new Dictionary { ["TestName"] = "Sve_Ffr_uint", ["VectorBaseType"] = "UInt32", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskUInt32()"}), (Templates.SveFfrTest, new Dictionary { ["TestName"] = "Sve_Ffr_ulong", ["VectorBaseType"] = "UInt64", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "Helpers.getMaskUInt64()"}), @@ -1651,6 +1665,7 @@ static class SveTests (Templates.SveSimpleVecOpTest, new Dictionary { ["TestName"] = "Sve_RoundToZero_float", ["Method"] = "RoundToZero", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Single", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Single", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetSingle()", ["ValidateIterResult"] = "Helpers.RoundToZero(firstOp[i]) != result[i]", ["GetIterResult"] = "Helpers.RoundToZero(leftOp[i])"}), (Templates.SveSimpleVecOpTest, new Dictionary { ["TestName"] = "Sve_RoundToZero_double", ["Method"] = "RoundToZero", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Double", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Double", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetDouble()", ["ValidateIterResult"] = "Helpers.RoundToZero(firstOp[i]) != result[i]", ["GetIterResult"] = "Helpers.RoundToZero(leftOp[i])"}), + (Templates.SveTestTest, new Dictionary { ["TestName"] = "Sve_TestAnyTrue_double", ["Method"] = "TestAnyTrue", ["MaskBaseType"] = "Double", ["Op1Value"] = "Helpers.InitVector(_ => Helpers.getMaskDouble())", ["Op2Value"] = "Helpers.InitVector(_ => Helpers.getMaskDouble())", ["ValidateEntry"] = "TestAnyTrue(op1, op2) != result"}), (Templates.SveTestTest, new Dictionary { ["TestName"] = "Sve_TestAnyTrue_sbyte", ["Method"] = "TestAnyTrue", ["MaskBaseType"] = "SByte", ["Op1Value"] = "Helpers.InitVector(_ => Helpers.getMaskSByte())", ["Op2Value"] = "Helpers.InitVector(_ => Helpers.getMaskSByte())", ["ValidateEntry"] = "TestAnyTrue(op1, op2) != result"}), (Templates.SveTestTest, new Dictionary { ["TestName"] = "Sve_TestAnyTrue_short", ["Method"] = "TestAnyTrue", ["MaskBaseType"] = "Int16", ["Op1Value"] = "Helpers.InitVector(_ => Helpers.getMaskInt16())", ["Op2Value"] = "Helpers.InitVector(_ => Helpers.getMaskInt16())", ["ValidateEntry"] = "TestAnyTrue(op1, op2) != result"}), (Templates.SveTestTest, new Dictionary { ["TestName"] = "Sve_TestAnyTrue_int", ["Method"] = "TestAnyTrue", ["MaskBaseType"] = "Int32", ["Op1Value"] = "Helpers.InitVector(_ => Helpers.getMaskInt32())", ["Op2Value"] = "Helpers.InitVector(_ => Helpers.getMaskInt32())", ["ValidateEntry"] = "TestAnyTrue(op1, op2) != result"}), @@ -1659,7 +1674,9 @@ static class SveTests (Templates.SveTestTest, new Dictionary { ["TestName"] = "Sve_TestAnyTrue_ushort", ["Method"] = "TestAnyTrue", ["MaskBaseType"] = "UInt16", ["Op1Value"] = "Helpers.InitVector(_ => Helpers.getMaskUInt16())", ["Op2Value"] = "Helpers.InitVector(_ => Helpers.getMaskUInt16())", ["ValidateEntry"] = "TestAnyTrue(op1, op2) != result"}), (Templates.SveTestTest, new Dictionary { ["TestName"] = "Sve_TestAnyTrue_uint", ["Method"] = "TestAnyTrue", ["MaskBaseType"] = "UInt32", ["Op1Value"] = "Helpers.InitVector(_ => Helpers.getMaskUInt32())", ["Op2Value"] = "Helpers.InitVector(_ => Helpers.getMaskUInt32())", ["ValidateEntry"] = "TestAnyTrue(op1, op2) != result"}), (Templates.SveTestTest, new Dictionary { ["TestName"] = "Sve_TestAnyTrue_ulong", ["Method"] = "TestAnyTrue", ["MaskBaseType"] = "UInt64", ["Op1Value"] = "Helpers.InitVector(_ => Helpers.getMaskUInt64())", ["Op2Value"] = "Helpers.InitVector(_ => Helpers.getMaskUInt64())", ["ValidateEntry"] = "TestAnyTrue(op1, op2) != result"}), + (Templates.SveTestTest, new Dictionary { ["TestName"] = "Sve_TestAnyTrue_float", ["Method"] = "TestAnyTrue", ["MaskBaseType"] = "Single", ["Op1Value"] = "Helpers.InitVector(_ => Helpers.getMaskSingle())", ["Op2Value"] = "Helpers.InitVector(_ => Helpers.getMaskSingle())", ["ValidateEntry"] = "TestAnyTrue(op1, op2) != result"}), + (Templates.SveTestTest, new Dictionary { ["TestName"] = "Sve_TestFirstTrue_double", ["Method"] = "TestFirstTrue", ["MaskBaseType"] = "Double", ["Op1Value"] = "Helpers.InitVector(_ => Helpers.getMaskDouble())", ["Op2Value"] = "Helpers.InitVector(_ => Helpers.getMaskDouble())", ["ValidateEntry"] = "TestFirstTrue(op1, op2) != result"}), (Templates.SveTestTest, new Dictionary { ["TestName"] = "Sve_TestFirstTrue_sbyte", ["Method"] = "TestFirstTrue", ["MaskBaseType"] = "SByte", ["Op1Value"] = "Helpers.InitVector(_ => Helpers.getMaskSByte())", ["Op2Value"] = "Helpers.InitVector(_ => Helpers.getMaskSByte())", ["ValidateEntry"] = "TestFirstTrue(op1, op2) != result"}), (Templates.SveTestTest, new Dictionary { ["TestName"] = "Sve_TestFirstTrue_short", ["Method"] = "TestFirstTrue", ["MaskBaseType"] = "Int16", ["Op1Value"] = "Helpers.InitVector(_ => Helpers.getMaskInt16())", ["Op2Value"] = "Helpers.InitVector(_ => Helpers.getMaskInt16())", ["ValidateEntry"] = "TestFirstTrue(op1, op2) != result"}), (Templates.SveTestTest, new Dictionary { ["TestName"] = "Sve_TestFirstTrue_int", ["Method"] = "TestFirstTrue", ["MaskBaseType"] = "Int32", ["Op1Value"] = "Helpers.InitVector(_ => Helpers.getMaskInt32())", ["Op2Value"] = "Helpers.InitVector(_ => Helpers.getMaskInt32())", ["ValidateEntry"] = "TestFirstTrue(op1, op2) != result"}), @@ -1668,7 +1685,9 @@ static class SveTests (Templates.SveTestTest, new Dictionary { ["TestName"] = "Sve_TestFirstTrue_ushort", ["Method"] = "TestFirstTrue", ["MaskBaseType"] = "UInt16", ["Op1Value"] = "Helpers.InitVector(_ => Helpers.getMaskUInt16())", ["Op2Value"] = "Helpers.InitVector(_ => Helpers.getMaskUInt16())", ["ValidateEntry"] = "TestFirstTrue(op1, op2) != result"}), (Templates.SveTestTest, new Dictionary { ["TestName"] = "Sve_TestFirstTrue_uint", ["Method"] = "TestFirstTrue", ["MaskBaseType"] = "UInt32", ["Op1Value"] = "Helpers.InitVector(_ => Helpers.getMaskUInt32())", ["Op2Value"] = "Helpers.InitVector(_ => Helpers.getMaskUInt32())", ["ValidateEntry"] = "TestFirstTrue(op1, op2) != result"}), (Templates.SveTestTest, new Dictionary { ["TestName"] = "Sve_TestFirstTrue_ulong", ["Method"] = "TestFirstTrue", ["MaskBaseType"] = "UInt64", ["Op1Value"] = "Helpers.InitVector(_ => Helpers.getMaskUInt64())", ["Op2Value"] = "Helpers.InitVector(_ => Helpers.getMaskUInt64())", ["ValidateEntry"] = "TestFirstTrue(op1, op2) != result"}), + (Templates.SveTestTest, new Dictionary { ["TestName"] = "Sve_TestFirstTrue_float", ["Method"] = "TestFirstTrue", ["MaskBaseType"] = "Single", ["Op1Value"] = "Helpers.InitVector(_ => Helpers.getMaskSingle())", ["Op2Value"] = "Helpers.InitVector(_ => Helpers.getMaskSingle())", ["ValidateEntry"] = "TestFirstTrue(op1, op2) != result"}), + (Templates.SveTestTest, new Dictionary { ["TestName"] = "Sve_TestLastTrue_double", ["Method"] = "TestLastTrue", ["MaskBaseType"] = "Double", ["Op1Value"] = "Helpers.InitVector(_ => Helpers.getMaskDouble())", ["Op2Value"] = "Helpers.InitVector(_ => Helpers.getMaskDouble())", ["ValidateEntry"] = "TestLastTrue(op1, op2) != result"}), (Templates.SveTestTest, new Dictionary { ["TestName"] = "Sve_TestLastTrue_sbyte", ["Method"] = "TestLastTrue", ["MaskBaseType"] = "SByte", ["Op1Value"] = "Helpers.InitVector(_ => Helpers.getMaskSByte())", ["Op2Value"] = "Helpers.InitVector(_ => Helpers.getMaskSByte())", ["ValidateEntry"] = "TestLastTrue(op1, op2) != result"}), (Templates.SveTestTest, new Dictionary { ["TestName"] = "Sve_TestLastTrue_short", ["Method"] = "TestLastTrue", ["MaskBaseType"] = "Int16", ["Op1Value"] = "Helpers.InitVector(_ => Helpers.getMaskInt16())", ["Op2Value"] = "Helpers.InitVector(_ => Helpers.getMaskInt16())", ["ValidateEntry"] = "TestLastTrue(op1, op2) != result"}), (Templates.SveTestTest, new Dictionary { ["TestName"] = "Sve_TestLastTrue_int", ["Method"] = "TestLastTrue", ["MaskBaseType"] = "Int32", ["Op1Value"] = "Helpers.InitVector(_ => Helpers.getMaskInt32())", ["Op2Value"] = "Helpers.InitVector(_ => Helpers.getMaskInt32())", ["ValidateEntry"] = "TestLastTrue(op1, op2) != result"}), @@ -1677,6 +1696,7 @@ static class SveTests (Templates.SveTestTest, new Dictionary { ["TestName"] = "Sve_TestLastTrue_ushort", ["Method"] = "TestLastTrue", ["MaskBaseType"] = "UInt16", ["Op1Value"] = "Helpers.InitVector(_ => Helpers.getMaskUInt16())", ["Op2Value"] = "Helpers.InitVector(_ => Helpers.getMaskUInt16())", ["ValidateEntry"] = "TestLastTrue(op1, op2) != result"}), (Templates.SveTestTest, new Dictionary { ["TestName"] = "Sve_TestLastTrue_uint", ["Method"] = "TestLastTrue", ["MaskBaseType"] = "UInt32", ["Op1Value"] = "Helpers.InitVector(_ => Helpers.getMaskUInt32())", ["Op2Value"] = "Helpers.InitVector(_ => Helpers.getMaskUInt32())", ["ValidateEntry"] = "TestLastTrue(op1, op2) != result"}), (Templates.SveTestTest, new Dictionary { ["TestName"] = "Sve_TestLastTrue_ulong", ["Method"] = "TestLastTrue", ["MaskBaseType"] = "UInt64", ["Op1Value"] = "Helpers.InitVector(_ => Helpers.getMaskUInt64())", ["Op2Value"] = "Helpers.InitVector(_ => Helpers.getMaskUInt64())", ["ValidateEntry"] = "TestLastTrue(op1, op2) != result"}), + (Templates.SveTestTest, new Dictionary { ["TestName"] = "Sve_TestLastTrue_float", ["Method"] = "TestLastTrue", ["MaskBaseType"] = "Single", ["Op1Value"] = "Helpers.InitVector(_ => Helpers.getMaskSingle())", ["Op2Value"] = "Helpers.InitVector(_ => Helpers.getMaskSingle())", ["ValidateEntry"] = "TestLastTrue(op1, op2) != result"}), (Templates.SveVecPairBinOpTest, new Dictionary { ["TestName"] = "Sve_TransposeEven_float", ["Method"] = "TransposeEven", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Single", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Single", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "Single", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetSingle()", ["NextValueOp2"] = "TestLibrary.Generator.GetSingle()", ["ValidateEntry"] = "result[i] != left[index * 2] || result[i + 1] != right[index * 2]"}), (Templates.SveVecPairBinOpTest, new Dictionary { ["TestName"] = "Sve_TransposeEven_double", ["Method"] = "TransposeEven", ["RetVectorType"] = "Vector", ["RetBaseType"] = "Double", ["Op1VectorType"] = "Vector", ["Op1BaseType"] = "Double", ["Op2VectorType"] = "Vector", ["Op2BaseType"] = "Double", ["LargestVectorSize"] = "64", ["NextValueOp1"] = "TestLibrary.Generator.GetDouble()", ["NextValueOp2"] = "TestLibrary.Generator.GetDouble()", ["ValidateEntry"] = "result[i] != left[index * 2] || result[i + 1] != right[index * 2]"}), diff --git a/src/tests/JIT/HardwareIntrinsics/Arm/Shared/Helpers.cs b/src/tests/JIT/HardwareIntrinsics/Arm/Shared/Helpers.cs index 8fb200330b34b0..37d53a0d58f4c5 100644 --- a/src/tests/JIT/HardwareIntrinsics/Arm/Shared/Helpers.cs +++ b/src/tests/JIT/HardwareIntrinsics/Arm/Shared/Helpers.cs @@ -58,6 +58,48 @@ public static T[] CreateMaskForFirstActiveElement(T[] mask, T[] srcMask) return result; } + public static float[] CreateMaskForFirstActiveElement(float[] mask, float[] srcMask) + { + int count = srcMask.Length; + var maskBits = new int[count]; + var srcMaskBits = new int[count]; + for (int i = 0; i < count; i++) + { + maskBits[i] = BitConverter.SingleToInt32Bits(mask[i]); + srcMaskBits[i] = BitConverter.SingleToInt32Bits(srcMask[i]); + } + + var resultBits = CreateMaskForFirstActiveElement(maskBits, srcMaskBits); + var result = new float[count]; + for (int i = 0; i < count; i++) + { + result[i] = BitConverter.Int32BitsToSingle(resultBits[i]); + } + + return result; + } + + public static double[] CreateMaskForFirstActiveElement(double[] mask, double[] srcMask) + { + int count = srcMask.Length; + var maskBits = new long[count]; + var srcMaskBits = new long[count]; + for (int i = 0; i < count; i++) + { + maskBits[i] = BitConverter.DoubleToInt64Bits(mask[i]); + srcMaskBits[i] = BitConverter.DoubleToInt64Bits(srcMask[i]); + } + + var resultBits = CreateMaskForFirstActiveElement(maskBits, srcMaskBits); + var result = new double[count]; + for (int i = 0; i < count; i++) + { + result[i] = BitConverter.Int64BitsToDouble(resultBits[i]); + } + + return result; + } + public static int LastActiveElement(T[] v) where T : INumber { for (int i = v.Length - 1; i >= 0; i--) @@ -6351,12 +6393,12 @@ public static ulong getMaskUInt64() public static float getMaskSingle() { - return (float)(TestLibrary.Generator.GetUInt32() % 2); + return BitConverter.UInt32BitsToSingle((TestLibrary.Generator.GetUInt32() % 2)); } public static double getMaskDouble() { - return (double)(TestLibrary.Generator.GetUInt64() % 2); + return BitConverter.UInt64BitsToDouble((TestLibrary.Generator.GetUInt64() % 2)); } public static int MaskNumberOfElementsVector(int elems, SveMaskPattern pattern) @@ -6838,6 +6880,46 @@ public static T[] CreateBreakAfterMask(T[] mask, T[] op) where T : IBinaryInt return result; } + public static float[] CreateBreakAfterMask(float[] mask, float[] op) + { + var count = mask.Length; + var maskBits = new int[count]; + var opBits = new int[count]; + for (var i = 0; i < count; i++) + { + maskBits[i] = BitConverter.SingleToInt32Bits(mask[i]); + opBits[i] = BitConverter.SingleToInt32Bits(op[i]); + } + + var resultBits = CreateBreakAfterMask(maskBits, opBits); + var result = new float[count]; + for (var i = 0; i < count; i++) + { + result[i] = BitConverter.Int32BitsToSingle(resultBits[i]); + } + return result; + } + + public static double[] CreateBreakAfterMask(double[] mask, double[] op) + { + var count = mask.Length; + var maskBits = new long[count]; + var opBits = new long[count]; + for (var i = 0; i < count; i++) + { + maskBits[i] = BitConverter.DoubleToInt64Bits(mask[i]); + opBits[i] = BitConverter.DoubleToInt64Bits(op[i]); + } + + var resultBits = CreateBreakAfterMask(maskBits, opBits); + var result = new double[count]; + for (var i = 0; i < count; i++) + { + result[i] = BitConverter.Int64BitsToDouble(resultBits[i]); + } + return result; + } + public static T[] CreateBreakAfterPropagateMask(T[] mask, T[] op1, T[] op2) where T : IBinaryInteger { var count = mask.Length; @@ -6865,6 +6947,50 @@ public static T[] CreateBreakAfterPropagateMask(T[] mask, T[] op1, T[] op2) w return result; } + public static float[] CreateBreakAfterPropagateMask(float[] mask, float[] op1, float[] op2) + { + var count = mask.Length; + var maskBits = new int[count]; + var op1Bits = new int[count]; + var op2Bits = new int[count]; + for (var i = 0; i < count; i++) + { + maskBits[i] = BitConverter.SingleToInt32Bits(mask[i]); + op1Bits[i] = BitConverter.SingleToInt32Bits(op1[i]); + op2Bits[i] = BitConverter.SingleToInt32Bits(op2[i]); + } + + var resultBits = CreateBreakAfterPropagateMask(maskBits, op1Bits, op2Bits); + var result = new float[count]; + for (var i = 0; i < count; i++) + { + result[i] = BitConverter.Int32BitsToSingle(resultBits[i]); + } + return result; + } + + public static double[] CreateBreakAfterPropagateMask(double[] mask, double[] op1, double[] op2) + { + var count = mask.Length; + var maskBits = new long[count]; + var op1Bits = new long[count]; + var op2Bits = new long[count]; + for (var i = 0; i < count; i++) + { + maskBits[i] = BitConverter.DoubleToInt64Bits(mask[i]); + op1Bits[i] = BitConverter.DoubleToInt64Bits(op1[i]); + op2Bits[i] = BitConverter.DoubleToInt64Bits(op2[i]); + } + + var resultBits = CreateBreakAfterPropagateMask(maskBits, op1Bits, op2Bits); + var result = new double[count]; + for (var i = 0; i < count; i++) + { + result[i] = BitConverter.Int64BitsToDouble(resultBits[i]); + } + return result; + } + public static T[] CreateBreakBeforeMask(T[] mask, T[] op) where T : IBinaryInteger { var count = mask.Length; @@ -6893,6 +7019,46 @@ public static T[] CreateBreakBeforeMask(T[] mask, T[] op) where T : IBinaryIn return result; } + public static float[] CreateBreakBeforeMask(float[] mask, float[] op) + { + var count = mask.Length; + var maskBits = new int[count]; + var opBits = new int[count]; + for (var i = 0; i < count; i++) + { + maskBits[i] = BitConverter.SingleToInt32Bits(mask[i]); + opBits[i] = BitConverter.SingleToInt32Bits(op[i]); + } + + var resultBits = CreateBreakBeforeMask(maskBits, opBits); + var result = new float[count]; + for (var i = 0; i < count; i++) + { + result[i] = BitConverter.Int32BitsToSingle(resultBits[i]); + } + return result; + } + + public static double[] CreateBreakBeforeMask(double[] mask, double[] op) + { + var count = mask.Length; + var maskBits = new long[count]; + var opBits = new long[count]; + for (var i = 0; i < count; i++) + { + maskBits[i] = BitConverter.DoubleToInt64Bits(mask[i]); + opBits[i] = BitConverter.DoubleToInt64Bits(op[i]); + } + + var resultBits = CreateBreakBeforeMask(maskBits, opBits); + var result = new double[count]; + for (var i = 0; i < count; i++) + { + result[i] = BitConverter.Int64BitsToDouble(resultBits[i]); + } + return result; + } + public static T[] CreateBreakBeforePropagateMask(T[] mask, T[] op1, T[] op2) where T : IBinaryInteger { var count = mask.Length; @@ -6920,6 +7086,50 @@ public static T[] CreateBreakBeforePropagateMask(T[] mask, T[] op1, T[] op2) return result; } + public static float[] CreateBreakBeforePropagateMask(float[] mask, float[] op1, float[] op2) + { + var count = mask.Length; + var maskBits = new int[count]; + var op1Bits = new int[count]; + var op2Bits = new int[count]; + for (var i = 0; i < count; i++) + { + maskBits[i] = BitConverter.SingleToInt32Bits(mask[i]); + op1Bits[i] = BitConverter.SingleToInt32Bits(op1[i]); + op2Bits[i] = BitConverter.SingleToInt32Bits(op2[i]); + } + + var resultBits = CreateBreakBeforePropagateMask(maskBits, op1Bits, op2Bits); + var result = new float[count]; + for (var i = 0; i < count; i++) + { + result[i] = BitConverter.Int32BitsToSingle(resultBits[i]); + } + return result; + } + + public static double[] CreateBreakBeforePropagateMask(double[] mask, double[] op1, double[] op2) + { + var count = mask.Length; + var maskBits = new long[count]; + var op1Bits = new long[count]; + var op2Bits = new long[count]; + for (var i = 0; i < count; i++) + { + maskBits[i] = BitConverter.DoubleToInt64Bits(mask[i]); + op1Bits[i] = BitConverter.DoubleToInt64Bits(op1[i]); + op2Bits[i] = BitConverter.DoubleToInt64Bits(op2[i]); + } + + var resultBits = CreateBreakBeforePropagateMask(maskBits, op1Bits, op2Bits); + var result = new double[count]; + for (var i = 0; i < count; i++) + { + result[i] = BitConverter.Int64BitsToDouble(resultBits[i]); + } + return result; + } + private static T ConditionalSelectResult(T maskResult, T result, T falseResult) where T : INumberBase { return (maskResult != T.Zero) ? result : falseResult; @@ -7397,6 +7607,46 @@ public static T[] CreateBreakPropagateMask(T[] op1, T[] op2) where T : IBinar return result; } + public static float[] CreateBreakPropagateMask(float[] op1, float[] op2) + { + var count = op1.Length; + var op1Bits = new int[count]; + var op2Bits = new int[count]; + for (var i = 0; i < count; i++) + { + op1Bits[i] = BitConverter.SingleToInt32Bits(op1[i]); + op2Bits[i] = BitConverter.SingleToInt32Bits(op2[i]); + } + + var resultBits = CreateBreakPropagateMask(op1Bits, op2Bits); + var result = new float[count]; + for (var i = 0; i < count; i++) + { + result[i] = BitConverter.Int32BitsToSingle(resultBits[i]); + } + return result; + } + + public static double[] CreateBreakPropagateMask(double[] op1, double[] op2) + { + var count = op1.Length; + var op1Bits = new long[count]; + var op2Bits = new long[count]; + for (var i = 0; i < count; i++) + { + op1Bits[i] = BitConverter.DoubleToInt64Bits(op1[i]); + op2Bits[i] = BitConverter.DoubleToInt64Bits(op2[i]); + } + + var resultBits = CreateBreakPropagateMask(op1Bits, op2Bits); + var result = new double[count]; + for (var i = 0; i < count; i++) + { + result[i] = BitConverter.Int64BitsToDouble(resultBits[i]); + } + return result; + } + public static T ConditionalExtract(T[] op1, T op2, T[] op3, bool after) where T : INumber { int last = LastActiveElement(op1);