13#ifndef LLVM_LIB_TARGET_POWERPC_MCTARGETDESC_PPCMCTARGETDESC_H
14#define LLVM_LIB_TARGET_POWERPC_MCTARGETDESC_PPCMCTARGETDESC_H
66std::unique_ptr<MCObjectTargetWriter>
76static inline bool isRunOfOnes(
unsigned Val,
unsigned &MB,
unsigned &ME) {
185#define GET_REGINFO_ENUM
186#include "PPCGenRegisterInfo.inc"
190#define GET_INSTRINFO_ENUM
191#define GET_INSTRINFO_SCHED_ENUM
192#define GET_INSTRINFO_MC_HELPER_DECLS
193#include "PPCGenInstrInfo.inc"
195#define GET_SUBTARGETINFO_ENUM
196#include "PPCGenSubtargetInfo.inc"
198#define PPC_REGS0_7(X) \
200 X##0, X##1, X##2, X##3, X##4, X##5, X##6, X##7 \
203#define PPC_REGS0_31(X) \
205 X##0, X##1, X##2, X##3, X##4, X##5, X##6, X##7, X##8, X##9, X##10, X##11, \
206 X##12, X##13, X##14, X##15, X##16, X##17, X##18, X##19, X##20, X##21, \
207 X##22, X##23, X##24, X##25, X##26, X##27, X##28, X##29, X##30, X##31 \
210#define PPC_REGS_EVEN0_30(X) \
212 X##0, X##2, X##4, X##6, X##8, X##10, X##12, X##14, X##16, X##18, X##20, \
213 X##22, X##24, X##26, X##28, X##30 \
216#define PPC_REGS0_63(X) \
218 X##0, X##1, X##2, X##3, X##4, X##5, X##6, X##7, X##8, X##9, X##10, X##11, \
219 X##12, X##13, X##14, X##15, X##16, X##17, X##18, X##19, X##20, X##21, \
220 X##22, X##23, X##24, X##25, X##26, X##27, X##28, X##29, X##30, X##31, \
221 X##32, X##33, X##34, X##35, X##36, X##37, X##38, X##39, X##40, X##41, \
222 X##42, X##43, X##44, X##45, X##46, X##47, X##48, X##49, X##50, X##51, \
223 X##52, X##53, X##54, X##55, X##56, X##57, X##58, X##59, X##60, X##61, \
227#define PPC_REGS_NO0_31(Z, X) \
229 Z, X##1, X##2, X##3, X##4, X##5, X##6, X##7, X##8, X##9, X##10, X##11, \
230 X##12, X##13, X##14, X##15, X##16, X##17, X##18, X##19, X##20, X##21, \
231 X##22, X##23, X##24, X##25, X##26, X##27, X##28, X##29, X##30, X##31 \
234#define PPC_REGS_LO_HI(LO, HI) \
236 LO##0, LO##1, LO##2, LO##3, LO##4, LO##5, LO##6, LO##7, LO##8, LO##9, \
237 LO##10, LO##11, LO##12, LO##13, LO##14, LO##15, LO##16, LO##17, \
238 LO##18, LO##19, LO##20, LO##21, LO##22, LO##23, LO##24, LO##25, \
239 LO##26, LO##27, LO##28, LO##29, LO##30, LO##31, HI##0, HI##1, HI##2, \
240 HI##3, HI##4, HI##5, HI##6, HI##7, HI##8, HI##9, HI##10, HI##11, \
241 HI##12, HI##13, HI##14, HI##15, HI##16, HI##17, HI##18, HI##19, \
242 HI##20, HI##21, HI##22, HI##23, HI##24, HI##25, HI##26, HI##27, \
243 HI##28, HI##29, HI##30, HI##31 \
246#define PPC_REGS0_7(X) \
248 X##0, X##1, X##2, X##3, X##4, X##5, X##6, X##7 \
251#define PPC_REGS0_3(X) \
253 X##0, X##1, X##2, X##3 \
258#define DEFINE_PPC_REGCLASSES \
259 static const MCPhysReg RRegs[32] = PPC_REGS0_31(PPC::R); \
260 static const MCPhysReg XRegs[32] = PPC_REGS0_31(PPC::X); \
261 static const MCPhysReg FRegs[32] = PPC_REGS0_31(PPC::F); \
262 static const MCPhysReg FpRegs[16] = PPC_REGS_EVEN0_30(PPC::Fpair); \
263 static const MCPhysReg VSRpRegs[32] = PPC_REGS0_31(PPC::VSRp); \
264 static const MCPhysReg SPERegs[32] = PPC_REGS0_31(PPC::S); \
265 static const MCPhysReg VFRegs[32] = PPC_REGS0_31(PPC::VF); \
266 static const MCPhysReg VRegs[32] = PPC_REGS0_31(PPC::V); \
267 static const MCPhysReg RRegsNoR0[32] = PPC_REGS_NO0_31(PPC::ZERO, PPC::R); \
268 static const MCPhysReg XRegsNoX0[32] = PPC_REGS_NO0_31(PPC::ZERO8, PPC::X); \
269 static const MCPhysReg VSRegs[64] = PPC_REGS_LO_HI(PPC::VSL, PPC::V); \
270 static const MCPhysReg VSFRegs[64] = PPC_REGS_LO_HI(PPC::F, PPC::VF); \
271 static const MCPhysReg VSSRegs[64] = PPC_REGS_LO_HI(PPC::F, PPC::VF); \
272 static const MCPhysReg CRBITRegs[32] = { \
273 PPC::CR0LT, PPC::CR0GT, PPC::CR0EQ, PPC::CR0UN, PPC::CR1LT, PPC::CR1GT, \
274 PPC::CR1EQ, PPC::CR1UN, PPC::CR2LT, PPC::CR2GT, PPC::CR2EQ, PPC::CR2UN, \
275 PPC::CR3LT, PPC::CR3GT, PPC::CR3EQ, PPC::CR3UN, PPC::CR4LT, PPC::CR4GT, \
276 PPC::CR4EQ, PPC::CR4UN, PPC::CR5LT, PPC::CR5GT, PPC::CR5EQ, PPC::CR5UN, \
277 PPC::CR6LT, PPC::CR6GT, PPC::CR6EQ, PPC::CR6UN, PPC::CR7LT, PPC::CR7GT, \
278 PPC::CR7EQ, PPC::CR7UN}; \
279 static const MCPhysReg CRRegs[8] = PPC_REGS0_7(PPC::CR); \
280 static const MCPhysReg ACCRegs[8] = PPC_REGS0_7(PPC::ACC); \
281 static const MCPhysReg WACCRegs[8] = PPC_REGS0_7(PPC::WACC); \
282 static const MCPhysReg WACC_HIRegs[8] = PPC_REGS0_7(PPC::WACC_HI); \
283 static const MCPhysReg DMRROWpRegs[32] = PPC_REGS0_31(PPC::DMRROWp); \
284 static const MCPhysReg DMRROWRegs[64] = PPC_REGS0_63(PPC::DMRROW); \
285 static const MCPhysReg DMRRegs[8] = PPC_REGS0_7(PPC::DMR); \
286 static const MCPhysReg DMRpRegs[4] = PPC_REGS0_3(PPC::DMRp);
291 return Reg >= PPC::VF0 &&
Reg <= PPC::VF31;
295 return Reg >= PPC::V0 &&
Reg <= PPC::V31;
299 return Reg >= PPC::DMRROWp0 &&
Reg <= PPC::DMRROWp31;
unsigned const MachineRegisterInfo * MRI
Generic interface to target specific assembler backends.
MCCodeEmitter - Generic instruction encoding interface.
Context object for machine code objects.
Describe properties that are true of each instruction in the target description file.
Interface to description of machine instruction set.
Base class for classes that define behaviour that is specific to both the target and the object forma...
MCRegisterInfo base class - We assume that the target defines a static array of MCRegisterDesc object...
Generic base class for all target subtargets.
Target - Wrapper for Target specific information.
PPCII - This namespace holds all of the PowerPC target-specific per-instruction flags.
@ ZExt32To64
This instruction produced a zero extended result.
@ NewDef_Shift
Shift count to bypass PPC970 flags.
@ SExt32To64
This instruction produced a sign extended result.
@ Prefixed
This instruction is prefixed.
@ MemriOp
This instruction takes a register+immediate memory operand.
@ XFormMemOp
This instruction is an X-Form memory operation.
@ PPC970_Pseudo
These are the various PPC970 execution unit pipelines.
@ PPC970_First
PPC970_First - This instruction starts a new dispatch group, so it will always be the first one in th...
@ PPC970_Cracked
PPC970_Cracked - This instruction is cracked into two pieces, requiring two dispatch pipes to be avai...
@ PPC970_Shift
PPC970_Mask/Shift - This is a bitmask that selects the pipeline type that an instruction is issued to...
@ PPC970_Single
PPC970_Single - This instruction starts a new dispatch group and terminates it, so it will be the sol...
Define some predicates that are used for node matching.
static bool isDMRROWpRegister(unsigned Reg)
const char * stripRegisterPrefix(const char *RegName)
stripRegisterPrefix - This method strips the character prefix from a register name so that only the n...
static bool isVRRegister(unsigned Reg)
MCRegister getRegNumForOperand(const MCInstrDesc &Desc, MCRegister Reg, unsigned OpNo)
getRegNumForOperand - some operands use different numbering schemes for the same registers.
static bool isVFRegister(unsigned Reg)
This is an optimization pass for GlobalISel generic memory operations.
std::unique_ptr< MCObjectTargetWriter > createPPCMachObjectWriter(bool Is64Bit, uint32_t CPUType, uint32_t CPUSubtype)
Construct a PPC Mach-O object writer.
MCAsmBackend * createPPCAsmBackend(const Target &T, const MCSubtargetInfo &STI, const MCRegisterInfo &MRI, const MCTargetOptions &Options)
static bool isRunOfOnes64(uint64_t Val, unsigned &MB, unsigned &ME)
constexpr bool isShiftedMask_32(uint32_t Value)
Return true if the argument contains a non-empty sequence of ones with the remainder zero (32 bit ver...
constexpr bool isShiftedMask_64(uint64_t Value)
Return true if the argument contains a non-empty sequence of ones with the remainder zero (64 bit ver...
int countl_zero(T Val)
Count number of 0's from the most significant bit to the least stopping at the first 1.
std::unique_ptr< MCObjectTargetWriter > createPPCXCOFFObjectWriter(bool Is64Bit)
Construct a PPC XCOFF object writer.
uint16_t MCPhysReg
An unsigned integer type large enough to represent all physical registers, but not necessarily virtua...
MCCodeEmitter * createPPCMCCodeEmitter(const MCInstrInfo &MCII, MCContext &Ctx)
std::unique_ptr< MCObjectTargetWriter > createPPCELFObjectWriter(bool Is64Bit, uint8_t OSABI)
Construct an PPC ELF object writer.
static bool isRunOfOnes(unsigned Val, unsigned &MB, unsigned &ME)
Returns true iff Val consists of one contiguous run of 1s with any number of 0s on either side.