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
23namespace llvm {
24
25// This namespace holds all of the target specific flags that instruction info
26// tracks.
27namespace LoongArchII {
28enum {
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
61namespace LoongArchABI {
62enum ABI {
63 ABI_ILP32S,
64 ABI_ILP32F,
65 ABI_ILP32D,
66 ABI_LP64S,
67 ABI_LP64F,
68 ABI_LP64D,
69 ABI_Unknown
70};
71
72ABI computeTargetABI(const Triple &TT, const FeatureBitset &FeatureBits,
73 StringRef ABIName);
74ABI getTargetABI(StringRef ABIName);
75
76// Returns the register used to hold the stack pointer after realignment.
77MCRegister getBPReg();
78} // end namespace LoongArchABI
79
80} // end namespace llvm
81
82#endif // LLVM_LIB_TARGET_LOONGARCH_MCTARGETDESC_LOONGARCHBASEINFO_H
83