1 //=- LoongArchBaseInfo.h - Top level definitions for LoongArch MC -*- 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 contains small standalone enum definitions and helper function 10 // definitions for the LoongArch target useful for the compiler back-end and the 11 // MC libraries. 12 // 13 //===----------------------------------------------------------------------===// 14 #ifndef LLVM_LIB_TARGET_LOONGARCH_MCTARGETDESC_LOONGARCHBASEINFO_H 15 #define LLVM_LIB_TARGET_LOONGARCH_MCTARGETDESC_LOONGARCHBASEINFO_H 16 17 #include "MCTargetDesc/LoongArchMCTargetDesc.h" 18 #include "llvm/ADT/StringRef.h" 19 #include "llvm/ADT/StringSwitch.h" 20 #include "llvm/MC/MCInstrDesc.h" 21 #include "llvm/TargetParser/SubtargetFeature.h" 22 23 namespace llvm { 24 25 // This namespace holds all of the target specific flags that instruction info 26 // tracks. 27 namespace LoongArchII { 28 enum { 29 MO_None, 30 MO_CALL, 31 MO_CALL_PLT, 32 MO_PCREL_HI, 33 MO_PCREL_LO, 34 MO_PCREL64_LO, 35 MO_PCREL64_HI, 36 MO_GOT_PC_HI, 37 MO_GOT_PC_LO, 38 MO_GOT_PC64_LO, 39 MO_GOT_PC64_HI, 40 MO_LE_HI, 41 MO_LE_LO, 42 MO_LE64_LO, 43 MO_LE64_HI, 44 MO_IE_PC_HI, 45 MO_IE_PC_LO, 46 MO_IE_PC64_LO, 47 MO_IE_PC64_HI, 48 MO_LD_PC_HI, 49 MO_GD_PC_HI, 50 MO_CALL36, 51 MO_DESC_PC_HI, 52 MO_DESC_PC_LO, 53 MO_DESC64_PC_HI, 54 MO_DESC64_PC_LO, 55 MO_DESC_LD, 56 MO_DESC_CALL, 57 // TODO: Add more flags. 58 }; 59 } // end namespace LoongArchII 60 61 namespace LoongArchABI { 62 enum ABI { 63 ABI_ILP32S, 64 ABI_ILP32F, 65 ABI_ILP32D, 66 ABI_LP64S, 67 ABI_LP64F, 68 ABI_LP64D, 69 ABI_Unknown 70 }; 71 72 ABI computeTargetABI(const Triple &TT, const FeatureBitset &FeatureBits, 73 StringRef ABIName); 74 ABI getTargetABI(StringRef ABIName); 75 76 // Returns the register used to hold the stack pointer after realignment. 77 MCRegister getBPReg(); 78 } // end namespace LoongArchABI 79 80 } // end namespace llvm 81 82 #endif // LLVM_LIB_TARGET_LOONGARCH_MCTARGETDESC_LOONGARCHBASEINFO_H 83