@@ -41,6 +41,10 @@ HARDWARE_INTRINSIC(Sve, Compute16BitAddresses,
41
41
HARDWARE_INTRINSIC (Sve , Compute32BitAddresses , -1 , 2 , true, {INS_invalid , INS_invalid , INS_invalid , INS_invalid , INS_invalid , INS_sve_adr , INS_invalid , INS_sve_adr , INS_invalid , INS_invalid }, HW_Category_SIMD , HW_Flag_Scalable |HW_Flag_SpecialCodeGen )
42
42
HARDWARE_INTRINSIC (Sve , Compute64BitAddresses , -1 , 2 , true, {INS_invalid , INS_invalid , INS_invalid , INS_invalid , INS_invalid , INS_sve_adr , INS_invalid , INS_sve_adr , INS_invalid , INS_invalid }, HW_Category_SIMD , HW_Flag_Scalable |HW_Flag_SpecialCodeGen )
43
43
HARDWARE_INTRINSIC (Sve , Compute8BitAddresses , -1 , 2 , true, {INS_invalid , INS_invalid , INS_invalid , INS_invalid , INS_invalid , INS_sve_adr , INS_invalid , INS_sve_adr , INS_invalid , INS_invalid }, HW_Category_SIMD , HW_Flag_Scalable |HW_Flag_SpecialCodeGen )
44
+ HARDWARE_INTRINSIC (Sve , ConditionalExtractAfterLastActiveElement , -1 , 3 , true, {INS_sve_clasta , INS_sve_clasta , INS_sve_clasta , INS_sve_clasta , INS_sve_clasta , INS_sve_clasta , INS_sve_clasta , INS_sve_clasta , INS_sve_clasta , INS_sve_clasta }, HW_Category_SIMD , HW_Flag_Scalable |HW_Flag_ExplicitMaskedOperation |HW_Flag_LowMaskedOperation |HW_Flag_HasRMWSemantics |HW_Flag_HasScalarInputVariant |HW_Flag_SpecialCodeGen )
45
+ HARDWARE_INTRINSIC (Sve , ConditionalExtractAfterLastActiveElementAndReplicate , -1 , 3 , true, {INS_sve_clasta , INS_sve_clasta , INS_sve_clasta , INS_sve_clasta , INS_sve_clasta , INS_sve_clasta , INS_sve_clasta , INS_sve_clasta , INS_sve_clasta , INS_sve_clasta }, HW_Category_SIMD , HW_Flag_Scalable |HW_Flag_ExplicitMaskedOperation |HW_Flag_LowMaskedOperation |HW_Flag_HasRMWSemantics )
46
+ HARDWARE_INTRINSIC (Sve , ConditionalExtractLastActiveElement , -1 , 3 , true, {INS_sve_clastb , INS_sve_clastb , INS_sve_clastb , INS_sve_clastb , INS_sve_clastb , INS_sve_clastb , INS_sve_clastb , INS_sve_clastb , INS_sve_clastb , INS_sve_clastb }, HW_Category_SIMD , HW_Flag_Scalable |HW_Flag_ExplicitMaskedOperation |HW_Flag_LowMaskedOperation |HW_Flag_HasRMWSemantics |HW_Flag_HasScalarInputVariant |HW_Flag_SpecialCodeGen )
47
+ HARDWARE_INTRINSIC (Sve , ConditionalExtractLastActiveElementAndReplicate , -1 , 3 , true, {INS_sve_clastb , INS_sve_clastb , INS_sve_clastb , INS_sve_clastb , INS_sve_clastb , INS_sve_clastb , INS_sve_clastb , INS_sve_clastb , INS_sve_clastb , INS_sve_clastb }, HW_Category_SIMD , HW_Flag_Scalable |HW_Flag_ExplicitMaskedOperation |HW_Flag_LowMaskedOperation |HW_Flag_HasRMWSemantics )
44
48
HARDWARE_INTRINSIC (Sve , ConditionalSelect , -1 , 3 , true, {INS_sve_sel , INS_sve_sel , INS_sve_sel , INS_sve_sel , INS_sve_sel , INS_sve_sel , INS_sve_sel , INS_sve_sel , INS_sve_sel , INS_sve_sel }, HW_Category_SIMD , HW_Flag_Scalable |HW_Flag_ExplicitMaskedOperation |HW_Flag_SupportsContainment )
45
49
HARDWARE_INTRINSIC (Sve , ConvertToInt32 , -1 , -1 , false, {INS_invalid , INS_invalid , INS_invalid , INS_invalid , INS_invalid , INS_invalid , INS_invalid , INS_invalid , INS_sve_fcvtzs , INS_sve_fcvtzs }, HW_Category_SIMD , HW_Flag_Scalable |HW_Flag_BaseTypeFromFirstArg |HW_Flag_EmbeddedMaskedOperation |HW_Flag_LowMaskedOperation )
46
50
HARDWARE_INTRINSIC (Sve , ConvertToInt64 , -1 , -1 , false, {INS_invalid , INS_invalid , INS_invalid , INS_invalid , INS_invalid , INS_invalid , INS_invalid , INS_invalid , INS_sve_fcvtzs , INS_sve_fcvtzs }, HW_Category_SIMD , HW_Flag_Scalable |HW_Flag_BaseTypeFromFirstArg |HW_Flag_EmbeddedMaskedOperation |HW_Flag_LowMaskedOperation )
@@ -259,21 +263,22 @@ HARDWARE_INTRINSIC(Sve, ZipLow,
259
263
// ***************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************
260
264
// Special intrinsics that are generated during importing or lowering
261
265
262
- #define SPECIAL_NI_Sve NI_Sve_ConvertMaskToVector
266
+ #define SPECIAL_NI_Sve NI_Sve_ConditionalExtractAfterLastActiveElementScalar
267
+ HARDWARE_INTRINSIC (Sve , ConditionalExtractAfterLastActiveElementScalar , 0 , 3 , false, {INS_sve_clasta , INS_sve_clasta , INS_sve_clasta , INS_sve_clasta , INS_sve_clasta , INS_sve_clasta , INS_sve_clasta , INS_sve_clasta , INS_sve_clasta , INS_sve_clasta }, HW_Category_Scalar , HW_Flag_Scalable |HW_Flag_SpecialCodeGen |HW_Flag_SpecialImport |HW_Flag_HasRMWSemantics |HW_Flag_ExplicitMaskedOperation |HW_Flag_LowMaskedOperation )
268
+ HARDWARE_INTRINSIC (Sve , ConditionalExtractLastActiveElementScalar , 0 , 3 , false, {INS_sve_clastb , INS_sve_clastb , INS_sve_clastb , INS_sve_clastb , INS_sve_clastb , INS_sve_clastb , INS_sve_clastb , INS_sve_clastb , INS_sve_clastb , INS_sve_clastb }, HW_Category_Scalar , HW_Flag_Scalable |HW_Flag_SpecialCodeGen |HW_Flag_SpecialImport |HW_Flag_HasRMWSemantics |HW_Flag_ExplicitMaskedOperation |HW_Flag_LowMaskedOperation )
263
269
HARDWARE_INTRINSIC (Sve , ConvertMaskToVector , -1 , 1 , true, {INS_sve_mov , INS_sve_mov , INS_sve_mov , INS_sve_mov , INS_sve_mov , INS_sve_mov , INS_sve_mov , INS_sve_mov , INS_sve_mov , INS_sve_mov }, HW_Category_Helper , HW_Flag_Scalable |HW_Flag_ExplicitMaskedOperation )
264
270
HARDWARE_INTRINSIC (Sve , ConvertVectorToMask , -1 , 2 , true, {INS_sve_cmpne , INS_sve_cmpne , INS_sve_cmpne , INS_sve_cmpne , INS_sve_cmpne , INS_sve_cmpne , INS_sve_cmpne , INS_sve_cmpne , INS_sve_cmpne , INS_sve_cmpne }, HW_Category_Helper , HW_Flag_Scalable |HW_Flag_ReturnsPerElementMask |HW_Flag_LowMaskedOperation )
265
271
HARDWARE_INTRINSIC (Sve , CreateTrueMaskAll , -1 , -1 , false, {INS_sve_ptrue , INS_sve_ptrue , INS_sve_ptrue , INS_sve_ptrue , INS_sve_ptrue , INS_sve_ptrue , INS_sve_ptrue , INS_sve_ptrue , INS_sve_ptrue , INS_sve_ptrue }, HW_Category_Helper , HW_Flag_Scalable |HW_Flag_ReturnsPerElementMask )
266
- HARDWARE_INTRINSIC (Sve , StoreAndZipx2 , -1 , 3 , true, {INS_sve_st2b , INS_sve_st2b , INS_sve_st2h , INS_sve_st2h , INS_sve_st2w , INS_sve_st2w , INS_sve_st2d , INS_sve_st2d , INS_sve_st2w , INS_sve_st2d }, HW_Category_MemoryStore , HW_Flag_Scalable |HW_Flag_SpecialCodeGen |HW_Flag_ExplicitMaskedOperation |HW_Flag_LowMaskedOperation |HW_Flag_NeedsConsecutiveRegisters )
267
- HARDWARE_INTRINSIC (Sve , StoreAndZipx3 , -1 , 3 , true, {INS_sve_st3b , INS_sve_st3b , INS_sve_st3h , INS_sve_st3h , INS_sve_st3w , INS_sve_st3w , INS_sve_st3d , INS_sve_st3d , INS_sve_st3w , INS_sve_st3d }, HW_Category_MemoryStore , HW_Flag_Scalable |HW_Flag_SpecialCodeGen |HW_Flag_ExplicitMaskedOperation |HW_Flag_LowMaskedOperation |HW_Flag_NeedsConsecutiveRegisters )
268
- HARDWARE_INTRINSIC (Sve , StoreAndZipx4 , -1 , 3 , true, {INS_sve_st4b , INS_sve_st4b , INS_sve_st4h , INS_sve_st4h , INS_sve_st4w , INS_sve_st4w , INS_sve_st4d , INS_sve_st4d , INS_sve_st4w , INS_sve_st4d }, HW_Category_MemoryStore , HW_Flag_Scalable |HW_Flag_SpecialCodeGen |HW_Flag_ExplicitMaskedOperation |HW_Flag_LowMaskedOperation |HW_Flag_NeedsConsecutiveRegisters )
269
-
270
272
// Scalar variants of Saturating*By*BitElementCount. There is 8bit versions as the generic version is scalar only.
271
273
HARDWARE_INTRINSIC (Sve , SaturatingDecrementBy16BitElementCountScalar , 0 , 3 , false, {INS_invalid , INS_invalid , INS_invalid , INS_invalid , INS_sve_sqdech , INS_sve_uqdech , INS_sve_sqdech , INS_sve_uqdech , INS_invalid , INS_invalid }, HW_Category_Scalar , HW_Flag_Scalable |HW_Flag_HasImmediateOperand |HW_Flag_HasEnumOperand |HW_Flag_SpecialCodeGen |HW_Flag_SpecialImport |HW_Flag_HasRMWSemantics )
272
274
HARDWARE_INTRINSIC (Sve , SaturatingDecrementBy32BitElementCountScalar , 0 , 3 , false, {INS_invalid , INS_invalid , INS_invalid , INS_invalid , INS_sve_sqdecw , INS_sve_uqdecw , INS_sve_sqdecw , INS_sve_uqdecw , INS_invalid , INS_invalid }, HW_Category_Scalar , HW_Flag_Scalable |HW_Flag_HasImmediateOperand |HW_Flag_HasEnumOperand |HW_Flag_SpecialCodeGen |HW_Flag_SpecialImport |HW_Flag_HasRMWSemantics )
273
275
HARDWARE_INTRINSIC (Sve , SaturatingDecrementBy64BitElementCountScalar , 0 , 3 , false, {INS_invalid , INS_invalid , INS_invalid , INS_invalid , INS_sve_sqdecd , INS_sve_uqdecd , INS_sve_sqdecd , INS_sve_uqdecd , INS_invalid , INS_invalid }, HW_Category_Scalar , HW_Flag_Scalable |HW_Flag_HasImmediateOperand |HW_Flag_HasEnumOperand |HW_Flag_SpecialCodeGen |HW_Flag_SpecialImport |HW_Flag_HasRMWSemantics )
274
276
HARDWARE_INTRINSIC (Sve , SaturatingIncrementBy16BitElementCountScalar , 0 , 3 , false, {INS_invalid , INS_invalid , INS_invalid , INS_invalid , INS_sve_sqinch , INS_sve_uqinch , INS_sve_sqinch , INS_sve_uqinch , INS_invalid , INS_invalid }, HW_Category_Scalar , HW_Flag_Scalable |HW_Flag_HasImmediateOperand |HW_Flag_HasEnumOperand |HW_Flag_SpecialCodeGen |HW_Flag_SpecialImport |HW_Flag_HasRMWSemantics )
275
277
HARDWARE_INTRINSIC (Sve , SaturatingIncrementBy32BitElementCountScalar , 0 , 3 , false, {INS_invalid , INS_invalid , INS_invalid , INS_invalid , INS_sve_sqincw , INS_sve_uqincw , INS_sve_sqincw , INS_sve_uqincw , INS_invalid , INS_invalid }, HW_Category_Scalar , HW_Flag_Scalable |HW_Flag_HasImmediateOperand |HW_Flag_HasEnumOperand |HW_Flag_SpecialCodeGen |HW_Flag_SpecialImport |HW_Flag_HasRMWSemantics )
276
278
HARDWARE_INTRINSIC (Sve , SaturatingIncrementBy64BitElementCountScalar , 0 , 3 , false, {INS_invalid , INS_invalid , INS_invalid , INS_invalid , INS_sve_sqincd , INS_sve_uqincd , INS_sve_sqincd , INS_sve_uqincd , INS_invalid , INS_invalid }, HW_Category_Scalar , HW_Flag_Scalable |HW_Flag_HasImmediateOperand |HW_Flag_HasEnumOperand |HW_Flag_SpecialCodeGen |HW_Flag_SpecialImport |HW_Flag_HasRMWSemantics )
279
+ HARDWARE_INTRINSIC (Sve , StoreAndZipx2 , -1 , 3 , true, {INS_sve_st2b , INS_sve_st2b , INS_sve_st2h , INS_sve_st2h , INS_sve_st2w , INS_sve_st2w , INS_sve_st2d , INS_sve_st2d , INS_sve_st2w , INS_sve_st2d }, HW_Category_MemoryStore , HW_Flag_Scalable |HW_Flag_SpecialCodeGen |HW_Flag_ExplicitMaskedOperation |HW_Flag_LowMaskedOperation |HW_Flag_NeedsConsecutiveRegisters )
280
+ HARDWARE_INTRINSIC (Sve , StoreAndZipx3 , -1 , 3 , true, {INS_sve_st3b , INS_sve_st3b , INS_sve_st3h , INS_sve_st3h , INS_sve_st3w , INS_sve_st3w , INS_sve_st3d , INS_sve_st3d , INS_sve_st3w , INS_sve_st3d }, HW_Category_MemoryStore , HW_Flag_Scalable |HW_Flag_SpecialCodeGen |HW_Flag_ExplicitMaskedOperation |HW_Flag_LowMaskedOperation |HW_Flag_NeedsConsecutiveRegisters )
281
+ HARDWARE_INTRINSIC (Sve , StoreAndZipx4 , -1 , 3 , true, {INS_sve_st4b , INS_sve_st4b , INS_sve_st4h , INS_sve_st4h , INS_sve_st4w , INS_sve_st4w , INS_sve_st4d , INS_sve_st4d , INS_sve_st4w , INS_sve_st4d }, HW_Category_MemoryStore , HW_Flag_Scalable |HW_Flag_SpecialCodeGen |HW_Flag_ExplicitMaskedOperation |HW_Flag_LowMaskedOperation |HW_Flag_NeedsConsecutiveRegisters )
277
282
278
283
279
284
#endif // FEATURE_HW_INTRINSIC
0 commit comments