7fcde605b8b8bf1c6a3ac52c5d0cccb3450a9c7e
[platform/upstream/coreclr.git] / src / jit / hwintrinsicArm64.h
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.
4
5 #ifndef _HW_INTIRNSIC_ARM64_H_
6 #define _HW_INTIRNSIC_ARM64_H_
7
8 #ifdef FEATURE_HW_INTRINSICS
9
10 struct HWIntrinsicInfo
11 {
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
15     enum Form
16     {
17         // Shared forms
18         IsSupported, // The IsSupported property will use this form
19         Unsupported, // Any intrisic which is unsupported and must throw PlatformNotSupportException will use this form
20         // Non SIMD forms
21         UnaryOp, // Non SIMD intrinsics which take a single argument
22         CrcOp,   // Crc intrinsics.
23         // SIMD common forms
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         // SIMD custom forms
27         SimdExtractOp, // SIMD intrinsics which take one vector operand and a lane index and return an element
28         SimdInsertOp,  // SIMD intrinsics which take one vector operand and a lane index and value and return a vector
29         SimdSelectOp,  // BitwiseSelect intrinsic which takes three vector operands and returns a vector
30         SimdSetAllOp,  // Simd intrinsics which take one numeric operand and return a vector
31     };
32
33     // Flags will be used to handle secondary meta-data which will help
34     // Reduce the number of forms
35     enum Flags
36     {
37         None          = 0,
38         LowerCmpUZero = (1UL << 0), // Unsigned zero compare form must be lowered
39     };
40
41     NamedIntrinsic intrinsicID;
42     const char*    intrinsicName;
43     uint64_t       isaflags;
44     Form           form;
45     Flags          flags;
46     instruction    instrs[3];
47 };
48
49 #endif // FEATURE_HW_INTRINSICS
50 #endif // _HW_INTIRNSIC_ARM64_H_