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
20namespace llvm {
21class StringRef;
22
23namespace LoongArch {
24
25enum 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
51struct FeatureInfo {
52 StringRef Name;
53 FeatureKind Kind;
54};
55
56enum class ArchKind {
57#define LOONGARCH_ARCH(NAME, KIND, FEATURES) KIND,
58#include "LoongArchTargetParser.def"
59};
60
61struct ArchInfo {
62 StringRef Name;
63 ArchKind Kind;
64 uint32_t Features;
65};
66
67bool isValidArchName(StringRef Arch);
68bool getArchFeatures(StringRef Arch, std::vector<StringRef> &Features);
69bool isValidCPUName(StringRef TuneCPU);
70void fillValidCPUList(SmallVectorImpl<StringRef> &Values);
71StringRef getDefaultArch(bool Is64Bit);
72
73} // namespace LoongArch
74
75} // namespace llvm
76
77#endif // LLVM_TARGETPARSER_LOONGARCHTARGETPARSER_H
78

source code of llvm/include/llvm/TargetParser/LoongArchTargetParser.h