xref: /freebsd-src/contrib/llvm-project/llvm/lib/Target/LoongArch/MCTargetDesc/LoongArchBaseInfo.h (revision bdd1243df58e60e85101c09001d9812a789b6bc4)
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