LLVM 24.0.0git
MipsABIInfo.h
Go to the documentation of this file.
1//===---- MipsABIInfo.h - Information about MIPS ABI's --------------------===//
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#ifndef LLVM_LIB_TARGET_MIPS_MCTARGETDESC_MIPSABIINFO_H
10#define LLVM_LIB_TARGET_MIPS_MCTARGETDESC_MIPSABIINFO_H
11
12#include "llvm/IR/CallingConv.h"
15
16namespace llvm {
17
18template <typename T> class ArrayRef;
19class MCTargetOptions;
20class StringRef;
21
23public:
24 enum class ABI { Unknown, O32, N32, N64 };
25
26protected:
28
29public:
31
33 static MipsABIInfo O32() { return MipsABIInfo(ABI::O32); }
34 static MipsABIInfo N32() { return MipsABIInfo(ABI::N32); }
35 static MipsABIInfo N64() { return MipsABIInfo(ABI::N64); }
36 static MipsABIInfo computeTargetABI(const Triple &TT, StringRef ABIName);
37
38 bool IsKnown() const { return ThisABI != ABI::Unknown; }
39 bool IsO32() const { return ThisABI == ABI::O32; }
40 bool IsN32() const { return ThisABI == ABI::N32; }
41 bool IsN64() const { return ThisABI == ABI::N64; }
42 ABI GetEnumValue() const { return ThisABI; }
43
44 /// Register naming convention for this ABI.
45 unsigned getRegAltNameIndex() const;
46
47 /// Integer argument registers in calling-convention order.
48 ArrayRef<MCPhysReg> getArgRegs(bool Is64Bit) const;
49
50 /// ABI register accessors default to the ABI's GPR width. Use the *RegPtr
51 /// variants for pointer-sized values; N32 has 32-bit pointers and 64-bit
52 /// GPRs.
53 MCRegister getArgReg(unsigned I, bool Is64Bit) const;
54 MCRegister getArgReg(unsigned I) const {
55 return getArgReg(I, AreGprs64bit());
56 }
57 MCRegister getArgRegPtr(unsigned I) const {
58 return getArgReg(I, ArePtrs64bit());
59 }
60 /// I is the suffix in tI (NABI has t0-t3 and t8-t9).
61 MCRegister getTempReg(unsigned I, bool Is64Bit) const;
62 MCRegister getTempReg(unsigned I) const {
63 return getTempReg(I, AreGprs64bit());
64 }
65 MCRegister getTempRegPtr(unsigned I) const {
66 return getTempReg(I, ArePtrs64bit());
67 }
68 MCRegister getSavedReg(unsigned I, bool Is64Bit) const;
69 MCRegister getSavedReg(unsigned I) const {
70 return getSavedReg(I, AreGprs64bit());
71 }
72 MCRegister getSavedRegPtr(unsigned I) const {
73 return getSavedReg(I, ArePtrs64bit());
74 }
75 /// Integer return-value registers.
76 MCRegister getReturnReg(unsigned I, bool Is64Bit) const;
77 MCRegister getReturnReg(unsigned I) const {
78 return getReturnReg(I, AreGprs64bit());
79 }
80 MCRegister getReturnRegPtr(unsigned I) const {
81 return getReturnReg(I, ArePtrs64bit());
82 }
83
84 /// The registers to use for byval arguments.
86
87 /// The registers to use for the variable argument list.
88 ArrayRef<MCPhysReg> getVarArgRegs(bool isGP64bit) const;
89
90 /// Obtain the size of the area allocated by the callee for arguments.
91 /// CallingConv::FastCall affects the value for O32.
93
94 /// Ordering of ABI's
95 /// MipsGenSubtargetInfo.inc will use this to resolve conflicts when given
96 /// multiple ABI options.
97 bool operator<(const MipsABIInfo Other) const {
98 return ThisABI < Other.GetEnumValue();
99 }
100
101 unsigned GetStackPtr() const;
102 unsigned GetFramePtr() const;
103 unsigned GetBasePtr() const;
104 unsigned GetGlobalPtr() const;
105 unsigned GetNullPtr() const;
106 unsigned GetZeroReg() const;
107 unsigned GetPtrAdduOp() const;
108 unsigned GetPtrAddiuOp() const;
109 unsigned GetPtrSubuOp() const;
110 unsigned GetPtrAndOp() const;
111 unsigned GetGPRMoveOp() const;
112 inline bool ArePtrs64bit() const { return IsN64(); }
113 inline bool AreGprs64bit() const { return IsN32() || IsN64(); }
114
115 unsigned GetEhDataReg(unsigned I) const;
116};
117}
118
119#endif
#define I(x, y, z)
Definition MD5.cpp:57
Represent a constant reference to an array (0 or more elements consecutively in memory),...
Definition ArrayRef.h:40
Wrapper class representing physical registers. Should be passed by value.
Definition MCRegister.h:41
MCRegister getArgReg(unsigned I) const
Definition MipsABIInfo.h:54
bool AreGprs64bit() const
bool IsN64() const
Definition MipsABIInfo.h:41
unsigned GetGlobalPtr() const
ABI GetEnumValue() const
Definition MipsABIInfo.h:42
static MipsABIInfo O32()
Definition MipsABIInfo.h:33
MipsABIInfo(ABI ThisABI)
Definition MipsABIInfo.h:30
unsigned GetEhDataReg(unsigned I) const
bool ArePtrs64bit() const
unsigned GetGPRMoveOp() const
MCRegister getArgReg(unsigned I, bool Is64Bit) const
ABI register accessors default to the ABI's GPR width.
unsigned GetStackPtr() const
MCRegister getSavedReg(unsigned I) const
Definition MipsABIInfo.h:69
static MipsABIInfo N32()
Definition MipsABIInfo.h:34
MCRegister getTempReg(unsigned I) const
Definition MipsABIInfo.h:62
unsigned GetZeroReg() const
unsigned GetCalleeAllocdArgSizeInBytes(CallingConv::ID CC) const
Obtain the size of the area allocated by the callee for arguments.
static MipsABIInfo N64()
Definition MipsABIInfo.h:35
bool operator<(const MipsABIInfo Other) const
Ordering of ABI's MipsGenSubtargetInfo.inc will use this to resolve conflicts when given multiple ABI...
Definition MipsABIInfo.h:97
unsigned GetPtrAddiuOp() const
unsigned GetPtrAndOp() const
unsigned GetFramePtr() const
unsigned getRegAltNameIndex() const
Register naming convention for this ABI.
static MipsABIInfo computeTargetABI(const Triple &TT, StringRef ABIName)
static MipsABIInfo Unknown()
Definition MipsABIInfo.h:32
MCRegister getReturnReg(unsigned I) const
Definition MipsABIInfo.h:77
ArrayRef< MCPhysReg > GetByValArgRegs() const
The registers to use for byval arguments.
unsigned GetNullPtr() const
ArrayRef< MCPhysReg > getVarArgRegs(bool isGP64bit) const
The registers to use for the variable argument list.
unsigned GetPtrAdduOp() const
bool IsKnown() const
Definition MipsABIInfo.h:38
bool IsN32() const
Definition MipsABIInfo.h:40
MCRegister getReturnReg(unsigned I, bool Is64Bit) const
Integer return-value registers.
MCRegister getSavedReg(unsigned I, bool Is64Bit) const
unsigned GetBasePtr() const
unsigned GetPtrSubuOp() const
MCRegister getSavedRegPtr(unsigned I) const
Definition MipsABIInfo.h:72
MCRegister getTempRegPtr(unsigned I) const
Definition MipsABIInfo.h:65
bool IsO32() const
Definition MipsABIInfo.h:39
MCRegister getReturnRegPtr(unsigned I) const
Definition MipsABIInfo.h:80
MCRegister getTempReg(unsigned I, bool Is64Bit) const
I is the suffix in tI (NABI has t0-t3 and t8-t9).
ArrayRef< MCPhysReg > getArgRegs(bool Is64Bit) const
Integer argument registers in calling-convention order.
MCRegister getArgRegPtr(unsigned I) const
Definition MipsABIInfo.h:57
Represent a constant reference to a string, i.e.
Definition StringRef.h:56
Triple - Helper class for working with autoconf configuration names.
Definition Triple.h:48
unsigned ID
LLVM IR allows to use arbitrary numbers as calling convention identifiers.
Definition CallingConv.h:24
This is an optimization pass for GlobalISel generic memory operations.
@ Other
Any other memory.
Definition ModRef.h:68