xref: /aosp_15_r20/external/llvm/lib/Target/SystemZ/MCTargetDesc/SystemZMCTargetDesc.h (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker //===-- SystemZMCTargetDesc.h - SystemZ target descriptions -----*- C++ -*-===//
2*9880d681SAndroid Build Coastguard Worker //
3*9880d681SAndroid Build Coastguard Worker //                     The LLVM Compiler Infrastructure
4*9880d681SAndroid Build Coastguard Worker //
5*9880d681SAndroid Build Coastguard Worker // This file is distributed under the University of Illinois Open Source
6*9880d681SAndroid Build Coastguard Worker // License. See LICENSE.TXT for details.
7*9880d681SAndroid Build Coastguard Worker //
8*9880d681SAndroid Build Coastguard Worker //===----------------------------------------------------------------------===//
9*9880d681SAndroid Build Coastguard Worker 
10*9880d681SAndroid Build Coastguard Worker #ifndef LLVM_LIB_TARGET_SYSTEMZ_MCTARGETDESC_SYSTEMZMCTARGETDESC_H
11*9880d681SAndroid Build Coastguard Worker #define LLVM_LIB_TARGET_SYSTEMZ_MCTARGETDESC_SYSTEMZMCTARGETDESC_H
12*9880d681SAndroid Build Coastguard Worker 
13*9880d681SAndroid Build Coastguard Worker #include "llvm/Support/DataTypes.h"
14*9880d681SAndroid Build Coastguard Worker 
15*9880d681SAndroid Build Coastguard Worker namespace llvm {
16*9880d681SAndroid Build Coastguard Worker 
17*9880d681SAndroid Build Coastguard Worker class MCAsmBackend;
18*9880d681SAndroid Build Coastguard Worker class MCCodeEmitter;
19*9880d681SAndroid Build Coastguard Worker class MCContext;
20*9880d681SAndroid Build Coastguard Worker class MCInstrInfo;
21*9880d681SAndroid Build Coastguard Worker class MCObjectWriter;
22*9880d681SAndroid Build Coastguard Worker class MCRegisterInfo;
23*9880d681SAndroid Build Coastguard Worker class MCSubtargetInfo;
24*9880d681SAndroid Build Coastguard Worker class StringRef;
25*9880d681SAndroid Build Coastguard Worker class Target;
26*9880d681SAndroid Build Coastguard Worker class Triple;
27*9880d681SAndroid Build Coastguard Worker class raw_pwrite_stream;
28*9880d681SAndroid Build Coastguard Worker class raw_ostream;
29*9880d681SAndroid Build Coastguard Worker 
30*9880d681SAndroid Build Coastguard Worker extern Target TheSystemZTarget;
31*9880d681SAndroid Build Coastguard Worker 
32*9880d681SAndroid Build Coastguard Worker namespace SystemZMC {
33*9880d681SAndroid Build Coastguard Worker // How many bytes are in the ABI-defined, caller-allocated part of
34*9880d681SAndroid Build Coastguard Worker // a stack frame.
35*9880d681SAndroid Build Coastguard Worker const int64_t CallFrameSize = 160;
36*9880d681SAndroid Build Coastguard Worker 
37*9880d681SAndroid Build Coastguard Worker // The offset of the DWARF CFA from the incoming stack pointer.
38*9880d681SAndroid Build Coastguard Worker const int64_t CFAOffsetFromInitialSP = CallFrameSize;
39*9880d681SAndroid Build Coastguard Worker 
40*9880d681SAndroid Build Coastguard Worker // Maps of asm register numbers to LLVM register numbers, with 0 indicating
41*9880d681SAndroid Build Coastguard Worker // an invalid register.  In principle we could use 32-bit and 64-bit register
42*9880d681SAndroid Build Coastguard Worker // classes directly, provided that we relegated the GPR allocation order
43*9880d681SAndroid Build Coastguard Worker // in SystemZRegisterInfo.td to an AltOrder and left the default order
44*9880d681SAndroid Build Coastguard Worker // as %r0-%r15.  It seems better to provide the same interface for
45*9880d681SAndroid Build Coastguard Worker // all classes though.
46*9880d681SAndroid Build Coastguard Worker extern const unsigned GR32Regs[16];
47*9880d681SAndroid Build Coastguard Worker extern const unsigned GRH32Regs[16];
48*9880d681SAndroid Build Coastguard Worker extern const unsigned GR64Regs[16];
49*9880d681SAndroid Build Coastguard Worker extern const unsigned GR128Regs[16];
50*9880d681SAndroid Build Coastguard Worker extern const unsigned FP32Regs[16];
51*9880d681SAndroid Build Coastguard Worker extern const unsigned FP64Regs[16];
52*9880d681SAndroid Build Coastguard Worker extern const unsigned FP128Regs[16];
53*9880d681SAndroid Build Coastguard Worker extern const unsigned VR32Regs[32];
54*9880d681SAndroid Build Coastguard Worker extern const unsigned VR64Regs[32];
55*9880d681SAndroid Build Coastguard Worker extern const unsigned VR128Regs[32];
56*9880d681SAndroid Build Coastguard Worker 
57*9880d681SAndroid Build Coastguard Worker // Return the 0-based number of the first architectural register that
58*9880d681SAndroid Build Coastguard Worker // contains the given LLVM register.   E.g. R1D -> 1.
59*9880d681SAndroid Build Coastguard Worker unsigned getFirstReg(unsigned Reg);
60*9880d681SAndroid Build Coastguard Worker 
61*9880d681SAndroid Build Coastguard Worker // Return the given register as a GR64.
getRegAsGR64(unsigned Reg)62*9880d681SAndroid Build Coastguard Worker inline unsigned getRegAsGR64(unsigned Reg) {
63*9880d681SAndroid Build Coastguard Worker   return GR64Regs[getFirstReg(Reg)];
64*9880d681SAndroid Build Coastguard Worker }
65*9880d681SAndroid Build Coastguard Worker 
66*9880d681SAndroid Build Coastguard Worker // Return the given register as a low GR32.
getRegAsGR32(unsigned Reg)67*9880d681SAndroid Build Coastguard Worker inline unsigned getRegAsGR32(unsigned Reg) {
68*9880d681SAndroid Build Coastguard Worker   return GR32Regs[getFirstReg(Reg)];
69*9880d681SAndroid Build Coastguard Worker }
70*9880d681SAndroid Build Coastguard Worker 
71*9880d681SAndroid Build Coastguard Worker // Return the given register as a high GR32.
getRegAsGRH32(unsigned Reg)72*9880d681SAndroid Build Coastguard Worker inline unsigned getRegAsGRH32(unsigned Reg) {
73*9880d681SAndroid Build Coastguard Worker   return GRH32Regs[getFirstReg(Reg)];
74*9880d681SAndroid Build Coastguard Worker }
75*9880d681SAndroid Build Coastguard Worker 
76*9880d681SAndroid Build Coastguard Worker // Return the given register as a VR128.
getRegAsVR128(unsigned Reg)77*9880d681SAndroid Build Coastguard Worker inline unsigned getRegAsVR128(unsigned Reg) {
78*9880d681SAndroid Build Coastguard Worker   return VR128Regs[getFirstReg(Reg)];
79*9880d681SAndroid Build Coastguard Worker }
80*9880d681SAndroid Build Coastguard Worker } // end namespace SystemZMC
81*9880d681SAndroid Build Coastguard Worker 
82*9880d681SAndroid Build Coastguard Worker MCCodeEmitter *createSystemZMCCodeEmitter(const MCInstrInfo &MCII,
83*9880d681SAndroid Build Coastguard Worker                                           const MCRegisterInfo &MRI,
84*9880d681SAndroid Build Coastguard Worker                                           MCContext &Ctx);
85*9880d681SAndroid Build Coastguard Worker 
86*9880d681SAndroid Build Coastguard Worker MCAsmBackend *createSystemZMCAsmBackend(const Target &T,
87*9880d681SAndroid Build Coastguard Worker                                         const MCRegisterInfo &MRI,
88*9880d681SAndroid Build Coastguard Worker                                         const Triple &TT, StringRef CPU);
89*9880d681SAndroid Build Coastguard Worker 
90*9880d681SAndroid Build Coastguard Worker MCObjectWriter *createSystemZObjectWriter(raw_pwrite_stream &OS, uint8_t OSABI);
91*9880d681SAndroid Build Coastguard Worker } // end namespace llvm
92*9880d681SAndroid Build Coastguard Worker 
93*9880d681SAndroid Build Coastguard Worker // Defines symbolic names for SystemZ registers.
94*9880d681SAndroid Build Coastguard Worker // This defines a mapping from register name to register number.
95*9880d681SAndroid Build Coastguard Worker #define GET_REGINFO_ENUM
96*9880d681SAndroid Build Coastguard Worker #include "SystemZGenRegisterInfo.inc"
97*9880d681SAndroid Build Coastguard Worker 
98*9880d681SAndroid Build Coastguard Worker // Defines symbolic names for the SystemZ instructions.
99*9880d681SAndroid Build Coastguard Worker #define GET_INSTRINFO_ENUM
100*9880d681SAndroid Build Coastguard Worker #include "SystemZGenInstrInfo.inc"
101*9880d681SAndroid Build Coastguard Worker 
102*9880d681SAndroid Build Coastguard Worker #define GET_SUBTARGETINFO_ENUM
103*9880d681SAndroid Build Coastguard Worker #include "SystemZGenSubtargetInfo.inc"
104*9880d681SAndroid Build Coastguard Worker 
105*9880d681SAndroid Build Coastguard Worker #endif
106