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