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