1 // Licensed to the .NET Foundation under one or more agreements.
2 // The .NET Foundation licenses this file to you under the MIT license.
3 // See the LICENSE file in the project root for more information.
5 #ifndef _HW_INTIRNSIC_ARM64_H_
6 #define _HW_INTIRNSIC_ARM64_H_
8 #ifdef FEATURE_HW_INTRINSICS
10 struct HWIntrinsicInfo
12 // Forms are used to gather inrinsics with similar characteristics
13 // Generally instructions with the same form will be treated
14 // identically by the Importer, LSRA, Lowering, and CodeGen
18 IsSupported, // The IsSupported property will use this form
19 Unsupported, // Any intrisic which is unsupported and must throw PlatformNotSupportException will use this form
21 UnaryOp, // Non SIMD intrinsics which take a single argument
22 CrcOp, // Crc intrinsics.
24 SimdBinaryOp, // SIMD intrinsics which take two vector operands and return a vector
25 SimdUnaryOp, // SIMD intrinsics which take one vector operand and return a vector
26 SimdBinaryRMWOp, // Same as SimdBinaryOp , with first source vector used as destination vector also.
28 SimdExtractOp, // SIMD intrinsics which take one vector operand and a lane index and return an element
29 SimdInsertOp, // SIMD intrinsics which take one vector operand and a lane index and value and return a vector
30 SimdSelectOp, // BitwiseSelect intrinsic which takes three vector operands and returns a vector
31 SimdSetAllOp, // Simd intrinsics which take one numeric operand and return a vector
34 // Flags will be used to handle secondary meta-data which will help
35 // Reduce the number of forms
39 LowerCmpUZero = (1UL << 0), // Unsigned zero compare form must be lowered
42 NamedIntrinsic intrinsicID;
43 const char* intrinsicName;
47 instruction instrs[3];
50 #endif // FEATURE_HW_INTRINSICS
51 #endif // _HW_INTIRNSIC_ARM64_H_