1 | //==-- LoongArch64TargetParser - Parser for LoongArch64 features --*- C++ -*-=// |
2 | // |
3 | // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
4 | // See https://llvm.org/LICENSE.txt for license information. |
5 | // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
6 | // |
7 | //===----------------------------------------------------------------------===// |
8 | // |
9 | // This file implements a target parser to recognise LoongArch hardware features |
10 | // such as CPU/ARCH and extension names. |
11 | // |
12 | //===----------------------------------------------------------------------===// |
13 | |
14 | #ifndef LLVM_TARGETPARSER_LOONGARCHTARGETPARSER_H |
15 | #define LLVM_TARGETPARSER_LOONGARCHTARGETPARSER_H |
16 | |
17 | #include "llvm/TargetParser/Triple.h" |
18 | #include <vector> |
19 | |
20 | namespace llvm { |
21 | class StringRef; |
22 | |
23 | namespace LoongArch { |
24 | |
25 | enum FeatureKind : uint32_t { |
26 | // 64-bit ISA is available. |
27 | FK_64BIT = 1 << 1, |
28 | |
29 | // Single-precision floating-point instructions are available. |
30 | FK_FP32 = 1 << 2, |
31 | |
32 | // Double-precision floating-point instructions are available. |
33 | FK_FP64 = 1 << 3, |
34 | |
35 | // Loongson SIMD Extension is available. |
36 | FK_LSX = 1 << 4, |
37 | |
38 | // Loongson Advanced SIMD Extension is available. |
39 | FK_LASX = 1 << 5, |
40 | |
41 | // Loongson Binary Translation Extension is available. |
42 | FK_LBT = 1 << 6, |
43 | |
44 | // Loongson Virtualization Extension is available. |
45 | FK_LVZ = 1 << 7, |
46 | |
47 | // Allow memory accesses to be unaligned. |
48 | FK_UAL = 1 << 8, |
49 | }; |
50 | |
51 | struct FeatureInfo { |
52 | StringRef Name; |
53 | FeatureKind Kind; |
54 | }; |
55 | |
56 | enum class ArchKind { |
57 | #define LOONGARCH_ARCH(NAME, KIND, FEATURES) KIND, |
58 | #include "LoongArchTargetParser.def" |
59 | }; |
60 | |
61 | struct ArchInfo { |
62 | StringRef Name; |
63 | ArchKind Kind; |
64 | uint32_t Features; |
65 | }; |
66 | |
67 | bool isValidArchName(StringRef Arch); |
68 | bool getArchFeatures(StringRef Arch, std::vector<StringRef> &Features); |
69 | bool isValidCPUName(StringRef TuneCPU); |
70 | void fillValidCPUList(SmallVectorImpl<StringRef> &Values); |
71 | StringRef getDefaultArch(bool Is64Bit); |
72 | |
73 | } // namespace LoongArch |
74 | |
75 | } // namespace llvm |
76 | |
77 | #endif // LLVM_TARGETPARSER_LOONGARCHTARGETPARSER_H |
78 | |