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" 2181ad6265SDimitry Andric #include "llvm/MC/SubtargetFeature.h" 2281ad6265SDimitry Andric 2381ad6265SDimitry Andric namespace llvm { 2481ad6265SDimitry Andric 25*bdd1243dSDimitry Andric // This namespace holds all of the target specific flags that instruction info 26*bdd1243dSDimitry Andric // tracks. 27*bdd1243dSDimitry Andric namespace LoongArchII { 28*bdd1243dSDimitry Andric enum { 29*bdd1243dSDimitry Andric MO_None, 30*bdd1243dSDimitry Andric MO_CALL, 31*bdd1243dSDimitry Andric MO_CALL_PLT, 32*bdd1243dSDimitry Andric MO_PCREL_HI, 33*bdd1243dSDimitry Andric MO_PCREL_LO, 34*bdd1243dSDimitry Andric MO_GOT_PC_HI, 35*bdd1243dSDimitry Andric MO_GOT_PC_LO, 36*bdd1243dSDimitry Andric MO_LE_HI, 37*bdd1243dSDimitry Andric MO_LE_LO, 38*bdd1243dSDimitry Andric MO_IE_PC_HI, 39*bdd1243dSDimitry Andric MO_IE_PC_LO, 40*bdd1243dSDimitry Andric MO_LD_PC_HI, 41*bdd1243dSDimitry Andric MO_GD_PC_HI, 42*bdd1243dSDimitry Andric // TODO: Add more flags. 43*bdd1243dSDimitry Andric }; 44*bdd1243dSDimitry Andric } // end namespace LoongArchII 45*bdd1243dSDimitry Andric 4681ad6265SDimitry Andric namespace LoongArchABI { 4781ad6265SDimitry Andric enum ABI { 4881ad6265SDimitry Andric ABI_ILP32S, 4981ad6265SDimitry Andric ABI_ILP32F, 5081ad6265SDimitry Andric ABI_ILP32D, 5181ad6265SDimitry Andric ABI_LP64S, 5281ad6265SDimitry Andric ABI_LP64F, 5381ad6265SDimitry Andric ABI_LP64D, 5481ad6265SDimitry Andric ABI_Unknown 5581ad6265SDimitry Andric }; 5681ad6265SDimitry Andric 5781ad6265SDimitry Andric ABI getTargetABI(StringRef ABIName); 5881ad6265SDimitry Andric 5981ad6265SDimitry Andric // Returns the register used to hold the stack pointer after realignment. 6081ad6265SDimitry Andric MCRegister getBPReg(); 61972a253aSDimitry Andric } // end namespace LoongArchABI 6281ad6265SDimitry Andric 63972a253aSDimitry Andric } // end namespace llvm 6481ad6265SDimitry Andric 6581ad6265SDimitry Andric #endif // LLVM_LIB_TARGET_LOONGARCH_MCTARGETDESC_LOONGARCHBASEINFO_H 66