181ad6265SDimitry Andric //=- LoongArchBaseInfo.h - Top level definitions for LoongArch MC -*- C++ -*-=// 281ad6265SDimitry Andric // 381ad6265SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 481ad6265SDimitry Andric // See https://llvm.org/LICENSE.txt for license information. 581ad6265SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 681ad6265SDimitry Andric // 781ad6265SDimitry Andric //===----------------------------------------------------------------------===// 881ad6265SDimitry Andric // 981ad6265SDimitry Andric // This file contains small standalone enum definitions and helper function 1081ad6265SDimitry Andric // definitions for the LoongArch target useful for the compiler back-end and the 1181ad6265SDimitry Andric // MC libraries. 1281ad6265SDimitry Andric // 1381ad6265SDimitry Andric //===----------------------------------------------------------------------===// 1481ad6265SDimitry Andric #ifndef LLVM_LIB_TARGET_LOONGARCH_MCTARGETDESC_LOONGARCHBASEINFO_H 1581ad6265SDimitry Andric #define LLVM_LIB_TARGET_LOONGARCH_MCTARGETDESC_LOONGARCHBASEINFO_H 1681ad6265SDimitry Andric 1781ad6265SDimitry Andric #include "MCTargetDesc/LoongArchMCTargetDesc.h" 1881ad6265SDimitry Andric #include "llvm/ADT/StringRef.h" 1981ad6265SDimitry Andric #include "llvm/ADT/StringSwitch.h" 2081ad6265SDimitry Andric #include "llvm/MC/MCInstrDesc.h" 2106c3fb27SDimitry Andric #include "llvm/TargetParser/SubtargetFeature.h" 2281ad6265SDimitry Andric 2381ad6265SDimitry Andric namespace llvm { 2481ad6265SDimitry Andric 25bdd1243dSDimitry Andric // This namespace holds all of the target specific flags that instruction info 26bdd1243dSDimitry Andric // tracks. 27bdd1243dSDimitry Andric namespace LoongArchII { 28bdd1243dSDimitry Andric enum { 29bdd1243dSDimitry Andric MO_None, 30bdd1243dSDimitry Andric MO_CALL, 31bdd1243dSDimitry Andric MO_CALL_PLT, 32bdd1243dSDimitry Andric MO_PCREL_HI, 33bdd1243dSDimitry Andric MO_PCREL_LO, 3406c3fb27SDimitry Andric MO_PCREL64_LO, 3506c3fb27SDimitry Andric MO_PCREL64_HI, 36bdd1243dSDimitry Andric MO_GOT_PC_HI, 37bdd1243dSDimitry Andric MO_GOT_PC_LO, 3806c3fb27SDimitry Andric MO_GOT_PC64_LO, 3906c3fb27SDimitry Andric MO_GOT_PC64_HI, 40bdd1243dSDimitry Andric MO_LE_HI, 41bdd1243dSDimitry Andric MO_LE_LO, 4206c3fb27SDimitry Andric MO_LE64_LO, 4306c3fb27SDimitry Andric MO_LE64_HI, 44bdd1243dSDimitry Andric MO_IE_PC_HI, 45bdd1243dSDimitry Andric MO_IE_PC_LO, 4606c3fb27SDimitry Andric MO_IE_PC64_LO, 4706c3fb27SDimitry Andric MO_IE_PC64_HI, 48bdd1243dSDimitry Andric MO_LD_PC_HI, 49bdd1243dSDimitry Andric MO_GD_PC_HI, 50*0fca6ea1SDimitry Andric MO_CALL36, 51*0fca6ea1SDimitry Andric MO_DESC_PC_HI, 52*0fca6ea1SDimitry Andric MO_DESC_PC_LO, 53*0fca6ea1SDimitry Andric MO_DESC64_PC_HI, 54*0fca6ea1SDimitry Andric MO_DESC64_PC_LO, 55*0fca6ea1SDimitry Andric MO_DESC_LD, 56*0fca6ea1SDimitry Andric MO_DESC_CALL, 57bdd1243dSDimitry Andric // TODO: Add more flags. 58bdd1243dSDimitry Andric }; 59bdd1243dSDimitry Andric } // end namespace LoongArchII 60bdd1243dSDimitry Andric 6181ad6265SDimitry Andric namespace LoongArchABI { 6281ad6265SDimitry Andric enum ABI { 6381ad6265SDimitry Andric ABI_ILP32S, 6481ad6265SDimitry Andric ABI_ILP32F, 6581ad6265SDimitry Andric ABI_ILP32D, 6681ad6265SDimitry Andric ABI_LP64S, 6781ad6265SDimitry Andric ABI_LP64F, 6881ad6265SDimitry Andric ABI_LP64D, 6981ad6265SDimitry Andric ABI_Unknown 7081ad6265SDimitry Andric }; 7181ad6265SDimitry Andric 72*0fca6ea1SDimitry Andric ABI computeTargetABI(const Triple &TT, const FeatureBitset &FeatureBits, 73*0fca6ea1SDimitry Andric StringRef ABIName); 7481ad6265SDimitry Andric ABI getTargetABI(StringRef ABIName); 7581ad6265SDimitry Andric 7681ad6265SDimitry Andric // Returns the register used to hold the stack pointer after realignment. 7781ad6265SDimitry Andric MCRegister getBPReg(); 78972a253aSDimitry Andric } // end namespace LoongArchABI 7981ad6265SDimitry Andric 80972a253aSDimitry Andric } // end namespace llvm 8181ad6265SDimitry Andric 8281ad6265SDimitry Andric #endif // LLVM_LIB_TARGET_LOONGARCH_MCTARGETDESC_LOONGARCHBASEINFO_H 83