LLVM: lib/Target/Xtensa/MCTargetDesc/XtensaMCTargetDesc.cpp Source File (original) (raw)

1

2

3

4

5

6

7

8

9

23

24#define GET_INSTRINFO_MC_DESC

25#include "XtensaGenInstrInfo.inc"

26

27#define GET_REGINFO_MC_DESC

28#include "XtensaGenRegisterInfo.inc"

29

30#define GET_SUBTARGETINFO_MC_DESC

31#include "XtensaGenSubtargetInfo.inc"

32

33using namespace llvm;

34

36 bool Valid = false;

37

38 switch (Scale) {

39 case 1:

40 Valid = (OffsetVal >= 0 && OffsetVal <= 255);

41 break;

42 case 2:

43 Valid = (OffsetVal >= 0 && OffsetVal <= 510) && ((OffsetVal & 0x1) == 0);

44 break;

45 case 4:

46 Valid = (OffsetVal >= 0 && OffsetVal <= 1020) && ((OffsetVal & 0x3) == 0);

47 break;

48 default:

49 break;

50 }

51 return Valid;

52}

53

55 int Scale = 0;

56

57 switch (Opcode) {

58 case Xtensa::L8UI:

59 case Xtensa::S8I:

60 Scale = 1;

61 break;

62 case Xtensa::L16SI:

63 case Xtensa::L16UI:

64 case Xtensa::S16I:

65 Scale = 2;

66 break;

67 case Xtensa::LEA_ADD:

69 default:

70

71 Scale = 4;

72 break;

73 }

75}

76

77

80 switch (RegNo) {

81 case Xtensa::BREG:

82 return FeatureBits[Xtensa::FeatureBoolean];

83 case Xtensa::CCOUNT:

84 case Xtensa::CCOMPARE0:

85 if (FeatureBits[Xtensa::FeatureTimers1])

86 return true;

87 [[fallthrough]];

88 case Xtensa::CCOMPARE1:

89 if (FeatureBits[Xtensa::FeatureTimers2])

90 return true;

91 [[fallthrough]];

92 case Xtensa::CCOMPARE2:

93 if (FeatureBits[Xtensa::FeatureTimers3])

94 return true;

95 return false;

96 case Xtensa::CONFIGID0:

98 case Xtensa::CONFIGID1:

100 case Xtensa::CPENABLE:

101 return FeatureBits[Xtensa::FeatureCoprocessor];

102 case Xtensa::DEBUGCAUSE:

104 case Xtensa::DEPC:

105 case Xtensa::EPC1:

106 case Xtensa::EXCCAUSE:

107 case Xtensa::EXCSAVE1:

108 case Xtensa::EXCVADDR:

109 return FeatureBits[Xtensa::FeatureException];

110 [[fallthrough]];

111 case Xtensa::EPC2:

112 case Xtensa::EPS2:

113 case Xtensa::EXCSAVE2:

114 if (FeatureBits[Xtensa::FeatureHighPriInterrupts])

115 return true;

116 [[fallthrough]];

117 case Xtensa::EPC3:

118 case Xtensa::EPS3:

119 case Xtensa::EXCSAVE3:

120 if (FeatureBits[Xtensa::FeatureHighPriInterruptsLevel3])

121 return true;

122 [[fallthrough]];

123 case Xtensa::EPC4:

124 case Xtensa::EPS4:

125 case Xtensa::EXCSAVE4:

126 if (FeatureBits[Xtensa::FeatureHighPriInterruptsLevel4])

127 return true;

128 [[fallthrough]];

129 case Xtensa::EPC5:

130 case Xtensa::EPS5:

131 case Xtensa::EXCSAVE5:

132 if (FeatureBits[Xtensa::FeatureHighPriInterruptsLevel5])

133 return true;

134 [[fallthrough]];

135 case Xtensa::EPC6:

136 case Xtensa::EPS6:

137 case Xtensa::EXCSAVE6:

138 if (FeatureBits[Xtensa::FeatureHighPriInterruptsLevel6])

139 return true;

140 [[fallthrough]];

141 case Xtensa::EPC7:

142 case Xtensa::EPS7:

143 case Xtensa::EXCSAVE7:

144 if (FeatureBits[Xtensa::FeatureHighPriInterruptsLevel7])

145 return true;

146 return false;

147 case Xtensa::INTENABLE:

148 return FeatureBits[Xtensa::FeatureInterrupt];

149 case Xtensa::INTERRUPT:

151 FeatureBits[Xtensa::FeatureInterrupt];

152 case Xtensa::INTSET:

153 case Xtensa::INTCLEAR:

155 FeatureBits[Xtensa::FeatureInterrupt];

156 case Xtensa::ICOUNT:

157 case Xtensa::ICOUNTLEVEL:

158 case Xtensa::IBREAKENABLE:

159 case Xtensa::DDR:

160 case Xtensa::IBREAKA0:

161 case Xtensa::IBREAKA1:

162 case Xtensa::DBREAKA0:

163 case Xtensa::DBREAKA1:

164 case Xtensa::DBREAKC0:

165 case Xtensa::DBREAKC1:

166 return FeatureBits[Xtensa::FeatureDebug];

167 case Xtensa::LBEG:

168 case Xtensa::LEND:

169 case Xtensa::LCOUNT:

170 return FeatureBits[Xtensa::FeatureLoop];

171 case Xtensa::LITBASE:

172 return FeatureBits[Xtensa::FeatureExtendedL32R];

173 case Xtensa::MEMCTL:

174 return FeatureBits[Xtensa::FeatureDataCache];

175 case Xtensa::ACCLO:

176 case Xtensa::ACCHI:

177 case Xtensa::M0:

178 case Xtensa::M1:

179 case Xtensa::M2:

180 case Xtensa::M3:

181 return FeatureBits[Xtensa::FeatureMAC16];

182 case Xtensa::MISC0:

183 case Xtensa::MISC1:

184 case Xtensa::MISC2:

185 case Xtensa::MISC3:

186 return FeatureBits[Xtensa::FeatureMiscSR];

187 case Xtensa::PRID:

189 case Xtensa::THREADPTR:

190 return FeatureBits[FeatureTHREADPTR];

191 case Xtensa::VECBASE:

192 return FeatureBits[Xtensa::FeatureRelocatableVector];

193 case Xtensa::FCR:

194 case Xtensa::FSR:

195 return FeatureBits[FeatureSingleFloat];

196 case Xtensa::F64R_LO:

197 case Xtensa::F64R_HI:

198 case Xtensa::F64S:

199 return FeatureBits[FeatureDFPAccel];

200 case Xtensa::WINDOWBASE:

201 case Xtensa::WINDOWSTART:

202 return FeatureBits[Xtensa::FeatureWindowed];

203 case Xtensa::ATOMCTL:

204 case Xtensa::SCOMPARE1:

205 return FeatureBits[Xtensa::FeatureS32C1I];

206 case Xtensa::NoRegister:

207 return false;

208 }

209

210 return true;

211}

212

213

215 MCRegister UserReg = Xtensa::NoRegister;

216

217 if (MRI.getEncodingValue(Xtensa::FCR) == Code) {

218 UserReg = Xtensa::FCR;

219 } else if (MRI.getEncodingValue(Xtensa::FSR) == Code) {

220 UserReg = Xtensa::FSR;

221 } else if (MRI.getEncodingValue(Xtensa::F64R_LO) == Code) {

222 UserReg = Xtensa::F64R_LO;

223 } else if (MRI.getEncodingValue(Xtensa::F64R_HI) == Code) {

224 UserReg = Xtensa::F64R_HI;

225 } else if (MRI.getEncodingValue(Xtensa::F64S) == Code) {

226 UserReg = Xtensa::F64S;

227 } else if (MRI.getEncodingValue(Xtensa::THREADPTR) == Code) {

228 UserReg = Xtensa::THREADPTR;

229 }

230

231 return UserReg;

232}

233

240

243 InitXtensaMCInstrInfo(X);

244 return X;

245}

246

248 unsigned SyntaxVariant,

253}

254

257 InitXtensaMCRegisterInfo(X, Xtensa::SP);

258 return X;

259}

260

263 return createXtensaMCSubtargetInfoImpl(TT, CPU, CPU, FS);

264}

265

271

276

278

281

282

285

286

289

290

293

294

297

298

301

302

305

306

309

310

313}

unsigned const MachineRegisterInfo * MRI

#define LLVM_EXTERNAL_VISIBILITY

static TableGen::Emitter::OptClass< SkeletonEmitter > X("gen-skeleton-class", "Generate example skeleton class")

static MCTargetStreamer * createXtensaObjectTargetStreamer(MCStreamer &S, const MCSubtargetInfo &STI)

Definition XtensaMCTargetDesc.cpp:273

static MCInstrInfo * createXtensaMCInstrInfo()

Definition XtensaMCTargetDesc.cpp:241

static MCInstPrinter * createXtensaMCInstPrinter(const Triple &TT, unsigned SyntaxVariant, const MCAsmInfo &MAI, const MCInstrInfo &MII, const MCRegisterInfo &MRI)

Definition XtensaMCTargetDesc.cpp:247

static MCAsmInfo * createXtensaMCAsmInfo(const MCRegisterInfo &MRI, const Triple &TT, const MCTargetOptions &Options)

Definition XtensaMCTargetDesc.cpp:234

static MCTargetStreamer * createXtensaAsmTargetStreamer(MCStreamer &S, formatted_raw_ostream &OS, MCInstPrinter *InstPrint)

Definition XtensaMCTargetDesc.cpp:267

static MCRegisterInfo * createXtensaMCRegisterInfo(const Triple &TT)

Definition XtensaMCTargetDesc.cpp:255

LLVM_EXTERNAL_VISIBILITY void LLVMInitializeXtensaTargetMC()

Definition XtensaMCTargetDesc.cpp:277

static MCSubtargetInfo * createXtensaMCSubtargetInfo(const Triple &TT, StringRef CPU, StringRef FS)

Definition XtensaMCTargetDesc.cpp:262

Container class for subtarget features.

This class is intended to be used as a base class for asm properties and features specific to the tar...

This is an instance of a target assembly language printer that converts an MCInst to valid target ass...

Interface to description of machine instruction set.

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.

Streaming machine code generation interface.

Generic base class for all target subtargets.

Target specific streamer interface.

StringRef - Represent a constant reference to a string, i.e.

Triple - Helper class for working with autoconf configuration names.

formatted_raw_ostream - A raw_ostream that wraps another one and keeps track of line and column posit...

bool checkRegister(MCRegister RegNo, const FeatureBitset &FeatureBits, RegisterAccessType RA)

Definition XtensaMCTargetDesc.cpp:78

bool isValidAddrOffset(int Scale, int64_t OffsetVal)

Definition XtensaMCTargetDesc.cpp:35

MCRegister getUserRegister(unsigned Code, const MCRegisterInfo &MRI)

Definition XtensaMCTargetDesc.cpp:214

bool isValidAddrOffsetForOpcode(unsigned Opcode, int64_t Offset)

Definition XtensaMCTargetDesc.cpp:54

This is an optimization pass for GlobalISel generic memory operations.

Target & getTheXtensaTarget()

MCAsmBackend * createXtensaAsmBackend(const Target &T, const MCSubtargetInfo &STI, const MCRegisterInfo &MRI, const MCTargetOptions &Options)

MCCodeEmitter * createXtensaMCCodeEmitter(const MCInstrInfo &MCII, MCContext &Ctx)

static void RegisterMCRegInfo(Target &T, Target::MCRegInfoCtorFnTy Fn)

RegisterMCRegInfo - Register a MCRegisterInfo implementation for the given target.

static void RegisterMCAsmBackend(Target &T, Target::MCAsmBackendCtorTy Fn)

RegisterMCAsmBackend - Register a MCAsmBackend implementation for the given target.

static void RegisterMCCodeEmitter(Target &T, Target::MCCodeEmitterCtorTy Fn)

RegisterMCCodeEmitter - Register a MCCodeEmitter implementation for the given target.

static void RegisterMCAsmInfo(Target &T, Target::MCAsmInfoCtorFnTy Fn)

RegisterMCAsmInfo - Register a MCAsmInfo implementation for the given target.

static void RegisterMCSubtargetInfo(Target &T, Target::MCSubtargetInfoCtorFnTy Fn)

RegisterMCSubtargetInfo - Register a MCSubtargetInfo implementation for the given target.

static void RegisterObjectTargetStreamer(Target &T, Target::ObjectTargetStreamerCtorTy Fn)

static void RegisterMCInstPrinter(Target &T, Target::MCInstPrinterCtorTy Fn)

RegisterMCInstPrinter - Register a MCInstPrinter implementation for the given target.

static void RegisterMCInstrInfo(Target &T, Target::MCInstrInfoCtorFnTy Fn)

RegisterMCInstrInfo - Register a MCInstrInfo implementation for the given target.

static void RegisterAsmTargetStreamer(Target &T, Target::AsmTargetStreamerCtorTy Fn)