LLVM: lib/Target/PowerPC/MCTargetDesc/PPCMCTargetDesc.h Source File (original) (raw)

1

2

3

4

5

6

7

8

9

10

11

12

13#ifndef LLVM_LIB_TARGET_POWERPC_MCTARGETDESC_PPCMCTARGETDESC_H

14#define LLVM_LIB_TARGET_POWERPC_MCTARGETDESC_PPCMCTARGETDESC_H

15

16

17#undef PPC

18

21#include

22#include

23

24namespace llvm {

25

36

37namespace PPC {

38

39

41

42

43

44

45

46

47

48

49

51 unsigned OpNo);

52

53}

54

57

61

62

64 uint8_t OSABI);

65

66std::unique_ptr

68

69

71

72

73

74

75

76static inline bool isRunOfOnes(unsigned Val, unsigned &MB, unsigned &ME) {

77 if (!Val)

78 return false;

79

81

83

85 return true;

86 } else {

87 Val = ~Val;

89

91

93 return true;

94 }

95 }

96

97 return false;

98}

99

101 if (!Val)

102 return false;

103

105

107

109 return true;

110 } else {

111 Val = ~Val;

113

115

117 return true;

118 }

119 }

120

121 return false;

122}

123

124

125

126

128enum {

129

130

131

132

133

134

136

137

138

140

141

142

144

145

146

149};

162

163enum {

164

166

167

169

171

173

175

177};

178}

179

180}

181

182

183

184

185#define GET_REGINFO_ENUM

186#include "PPCGenRegisterInfo.inc"

187

188

189

190#define GET_INSTRINFO_ENUM

191#define GET_INSTRINFO_SCHED_ENUM

192#define GET_INSTRINFO_MC_HELPER_DECLS

193#include "PPCGenInstrInfo.inc"

194

195#define GET_SUBTARGETINFO_ENUM

196#include "PPCGenSubtargetInfo.inc"

197

198#define PPC_REGS0_7(X) \

199 { \

200 X##0, X##1, X##2, X##3, X##4, X##5, X##6, X##7 \

201 }

202

203#define PPC_REGS0_31(X) \

204 { \

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 \

208 }

209

210#define PPC_REGS_EVEN0_30(X) \

211 { \

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 \

214 }

215

216#define PPC_REGS0_63(X) \

217 { \

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, \

224 X##62, X##63 \

225 }

226

227#define PPC_REGS_NO0_31(Z, X) \

228 { \

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 \

232 }

233

234#define PPC_REGS_LO_HI(LO, HI) \

235 { \

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 \

244 }

245

246#define PPC_REGS0_7(X) \

247 { \

248 X##0, X##1, X##2, X##3, X##4, X##5, X##6, X##7 \

249 }

250

251#define PPC_REGS0_3(X) \

252 { \

253 X##0, X##1, X##2, X##3 \

254 }

255

257

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);

287

288namespace llvm {

289namespace PPC {

291 return Reg >= PPC::VF0 && Reg <= PPC::VF31;

292}

293

295 return Reg >= PPC::V0 && Reg <= PPC::V31;

296}

297

299 return Reg >= PPC::DMRROWp0 && Reg <= PPC::DMRROWp31;

300}

301}

302}

303

304#endif

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...

Wrapper class representing physical registers. Should be passed by value.

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.

Definition PPCMCTargetDesc.h:127

@ ZExt32To64

This instruction produced a zero extended result.

Definition PPCMCTargetDesc.h:174

@ NewDef_Shift

Shift count to bypass PPC970 flags.

Definition PPCMCTargetDesc.h:165

@ SExt32To64

This instruction produced a sign extended result.

Definition PPCMCTargetDesc.h:172

@ Prefixed

This instruction is prefixed.

Definition PPCMCTargetDesc.h:170

@ MemriOp

This instruction takes a register+immediate memory operand.

Definition PPCMCTargetDesc.h:176

@ XFormMemOp

This instruction is an X-Form memory operation.

Definition PPCMCTargetDesc.h:168

PPC970_Unit

Definition PPCMCTargetDesc.h:150

@ PPC970_LSU

Definition PPCMCTargetDesc.h:155

@ PPC970_VALU

Definition PPCMCTargetDesc.h:158

@ PPC970_VPERM

Definition PPCMCTargetDesc.h:159

@ PPC970_FPU

Definition PPCMCTargetDesc.h:156

@ PPC970_FXU

Definition PPCMCTargetDesc.h:154

@ PPC970_Pseudo

These are the various PPC970 execution unit pipelines.

Definition PPCMCTargetDesc.h:153

@ PPC970_BRU

Definition PPCMCTargetDesc.h:160

@ PPC970_CRU

Definition PPCMCTargetDesc.h:157

@ PPC970_Mask

Definition PPCMCTargetDesc.h:148

@ PPC970_First

PPC970_First - This instruction starts a new dispatch group, so it will always be the first one in th...

Definition PPCMCTargetDesc.h:135

@ PPC970_Cracked

PPC970_Cracked - This instruction is cracked into two pieces, requiring two dispatch pipes to be avai...

Definition PPCMCTargetDesc.h:143

@ PPC970_Shift

PPC970_Mask/Shift - This is a bitmask that selects the pipeline type that an instruction is issued to...

Definition PPCMCTargetDesc.h:147

@ PPC970_Single

PPC970_Single - This instruction starts a new dispatch group and terminates it, so it will be the sol...

Definition PPCMCTargetDesc.h:139

Define some predicates that are used for node matching.

static bool isDMRROWpRegister(unsigned Reg)

Definition PPCMCTargetDesc.h:298

const char * stripRegisterPrefix(const char *RegName)

stripRegisterPrefix - This method strips the character prefix from a register name so that only the n...

MCRegister getRegNumForOperand(const MCInstrDesc &Desc, MCRegister Reg, unsigned OpNo)

getRegNumForOperand - some operands use different numbering schemes for the same registers.

static bool isVRRegister(MCRegister Reg)

Definition PPCMCTargetDesc.h:294

static bool isVFRegister(MCRegister Reg)

Definition PPCMCTargetDesc.h:290

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)

Definition PPCMCTargetDesc.h:100

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.

Definition PPCMCTargetDesc.h:76