OLD | NEW |
1 //===- subzero/src/IceTargetLoweringMIPS32.h - MIPS32 lowering ---*- C++-*-===// | 1 //===- subzero/src/IceTargetLoweringMIPS32.h - MIPS32 lowering ---*- C++-*-===// |
2 // | 2 // |
3 // The Subzero Code Generator | 3 // The Subzero Code Generator |
4 // | 4 // |
5 // This file is distributed under the University of Illinois Open Source | 5 // This file is distributed under the University of Illinois Open Source |
6 // License. See LICENSE.TXT for details. | 6 // License. See LICENSE.TXT for details. |
7 // | 7 // |
8 //===----------------------------------------------------------------------===// | 8 //===----------------------------------------------------------------------===// |
9 /// | 9 /// |
10 /// \file | 10 /// \file |
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
143 } | 143 } |
144 | 144 |
145 void _addu(Variable *Dest, Variable *Src0, Variable *Src1) { | 145 void _addu(Variable *Dest, Variable *Src0, Variable *Src1) { |
146 Context.insert<InstMIPS32Addu>(Dest, Src0, Src1); | 146 Context.insert<InstMIPS32Addu>(Dest, Src0, Src1); |
147 } | 147 } |
148 | 148 |
149 void _and(Variable *Dest, Variable *Src0, Variable *Src1) { | 149 void _and(Variable *Dest, Variable *Src0, Variable *Src1) { |
150 Context.insert<InstMIPS32And>(Dest, Src0, Src1); | 150 Context.insert<InstMIPS32And>(Dest, Src0, Src1); |
151 } | 151 } |
152 | 152 |
| 153 void _andi(Variable *Dest, Variable *Src, ConstantInteger32 *Imm) { |
| 154 Context.insert<InstMIPS32Andi>(Dest, Src, Imm); |
| 155 } |
| 156 |
153 void _br(CfgNode *Target) { Context.insert<InstMIPS32Br>(Target); } | 157 void _br(CfgNode *Target) { Context.insert<InstMIPS32Br>(Target); } |
154 | 158 |
155 void _ret(Variable *RA, Variable *Src0 = nullptr) { | 159 void _ret(Variable *RA, Variable *Src0 = nullptr) { |
156 Context.insert<InstMIPS32Ret>(RA, Src0); | 160 Context.insert<InstMIPS32Ret>(RA, Src0); |
157 } | 161 } |
158 | 162 |
159 void _addiu(Variable *Dest, Variable *Src, uint32_t Imm) { | 163 void _addiu(Variable *Dest, Variable *Src, ConstantInteger32 *Imm) { |
160 Context.insert<InstMIPS32Addiu>(Dest, Src, Imm); | 164 Context.insert<InstMIPS32Addiu>(Dest, Src, Imm); |
161 } | 165 } |
162 | 166 |
163 void _lui(Variable *Dest, uint32_t Imm) { | 167 void _lui(Variable *Dest, uint32_t Imm) { |
164 Context.insert<InstMIPS32Lui>(Dest, Imm); | 168 Context.insert<InstMIPS32Lui>(Dest, Imm); |
165 } | 169 } |
166 | 170 |
167 void _mov(Variable *Dest, Operand *Src0) { | 171 void _mov(Variable *Dest, Operand *Src0) { |
168 assert(Dest != nullptr); | 172 assert(Dest != nullptr); |
169 // Variable* Src0_ = llvm::dyn_cast<Variable>(Src0); | 173 // Variable* Src0_ = llvm::dyn_cast<Variable>(Src0); |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
209 } | 213 } |
210 | 214 |
211 void _or(Variable *Dest, Variable *Src0, Variable *Src1) { | 215 void _or(Variable *Dest, Variable *Src0, Variable *Src1) { |
212 Context.insert<InstMIPS32Or>(Dest, Src0, Src1); | 216 Context.insert<InstMIPS32Or>(Dest, Src0, Src1); |
213 } | 217 } |
214 | 218 |
215 void _ori(Variable *Dest, Variable *Src, uint32_t Imm) { | 219 void _ori(Variable *Dest, Variable *Src, uint32_t Imm) { |
216 Context.insert<InstMIPS32Ori>(Dest, Src, Imm); | 220 Context.insert<InstMIPS32Ori>(Dest, Src, Imm); |
217 } | 221 } |
218 | 222 |
| 223 void _sll(Variable *Dest, Variable *Src, ConstantInteger32 *Imm) { |
| 224 Context.insert<InstMIPS32Sll>(Dest, Src, Imm); |
| 225 } |
| 226 |
219 void _slt(Variable *Dest, Variable *Src0, Variable *Src1) { | 227 void _slt(Variable *Dest, Variable *Src0, Variable *Src1) { |
220 Context.insert<InstMIPS32Slt>(Dest, Src0, Src1); | 228 Context.insert<InstMIPS32Slt>(Dest, Src0, Src1); |
221 } | 229 } |
222 | 230 |
223 void _slti(Variable *Dest, Variable *Src, uint32_t Imm) { | 231 void _slti(Variable *Dest, Variable *Src, uint32_t Imm) { |
224 Context.insert<InstMIPS32Slti>(Dest, Src, Imm); | 232 Context.insert<InstMIPS32Slti>(Dest, Src, Imm); |
225 } | 233 } |
226 | 234 |
227 void _sltiu(Variable *Dest, Variable *Src, uint32_t Imm) { | 235 void _sltiu(Variable *Dest, Variable *Src, uint32_t Imm) { |
228 Context.insert<InstMIPS32Sltiu>(Dest, Src, Imm); | 236 Context.insert<InstMIPS32Sltiu>(Dest, Src, Imm); |
229 } | 237 } |
230 | 238 |
231 void _sltu(Variable *Dest, Variable *Src0, Variable *Src1) { | 239 void _sltu(Variable *Dest, Variable *Src0, Variable *Src1) { |
232 Context.insert<InstMIPS32Sltu>(Dest, Src0, Src1); | 240 Context.insert<InstMIPS32Sltu>(Dest, Src0, Src1); |
233 } | 241 } |
234 | 242 |
| 243 void _sra(Variable *Dest, Variable *Src, ConstantInteger32 *Imm) { |
| 244 Context.insert<InstMIPS32Sra>(Dest, Src, Imm); |
| 245 } |
| 246 |
235 void _sub(Variable *Dest, Variable *Src0, Variable *Src1) { | 247 void _sub(Variable *Dest, Variable *Src0, Variable *Src1) { |
236 Context.insert<InstMIPS32Sub>(Dest, Src0, Src1); | 248 Context.insert<InstMIPS32Sub>(Dest, Src0, Src1); |
237 } | 249 } |
238 | 250 |
239 void _subu(Variable *Dest, Variable *Src0, Variable *Src1) { | 251 void _subu(Variable *Dest, Variable *Src0, Variable *Src1) { |
240 Context.insert<InstMIPS32Subu>(Dest, Src0, Src1); | 252 Context.insert<InstMIPS32Subu>(Dest, Src0, Src1); |
241 } | 253 } |
242 | 254 |
243 void _xor(Variable *Dest, Variable *Src0, Variable *Src1) { | 255 void _xor(Variable *Dest, Variable *Src0, Variable *Src1) { |
244 Context.insert<InstMIPS32Xor>(Dest, Src0, Src1); | 256 Context.insert<InstMIPS32Xor>(Dest, Src0, Src1); |
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
339 const SmallBitVector &ExcludeRegisters, | 351 const SmallBitVector &ExcludeRegisters, |
340 uint64_t Salt) const override; | 352 uint64_t Salt) const override; |
341 | 353 |
342 bool UsesFramePointer = false; | 354 bool UsesFramePointer = false; |
343 bool NeedsStackAlignment = false; | 355 bool NeedsStackAlignment = false; |
344 static SmallBitVector TypeToRegisterSet[RCMIPS32_NUM]; | 356 static SmallBitVector TypeToRegisterSet[RCMIPS32_NUM]; |
345 static SmallBitVector TypeToRegisterSetUnfiltered[RCMIPS32_NUM]; | 357 static SmallBitVector TypeToRegisterSetUnfiltered[RCMIPS32_NUM]; |
346 static SmallBitVector RegisterAliases[RegMIPS32::Reg_NUM]; | 358 static SmallBitVector RegisterAliases[RegMIPS32::Reg_NUM]; |
347 SmallBitVector RegsUsed; | 359 SmallBitVector RegsUsed; |
348 VarList PhysicalRegisters[IceType_NUM]; | 360 VarList PhysicalRegisters[IceType_NUM]; |
| 361 static constexpr uint32_t CHAR_BITS = 8; |
| 362 static constexpr uint32_t INT32_BITS = 32; |
349 | 363 |
350 private: | 364 private: |
351 ENABLE_MAKE_UNIQUE; | 365 ENABLE_MAKE_UNIQUE; |
352 }; | 366 }; |
353 | 367 |
354 class TargetDataMIPS32 final : public TargetDataLowering { | 368 class TargetDataMIPS32 final : public TargetDataLowering { |
355 TargetDataMIPS32() = delete; | 369 TargetDataMIPS32() = delete; |
356 TargetDataMIPS32(const TargetDataMIPS32 &) = delete; | 370 TargetDataMIPS32(const TargetDataMIPS32 &) = delete; |
357 TargetDataMIPS32 &operator=(const TargetDataMIPS32 &) = delete; | 371 TargetDataMIPS32 &operator=(const TargetDataMIPS32 &) = delete; |
358 | 372 |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
390 explicit TargetHeaderMIPS32(GlobalContext *Ctx); | 404 explicit TargetHeaderMIPS32(GlobalContext *Ctx); |
391 | 405 |
392 private: | 406 private: |
393 ~TargetHeaderMIPS32() = default; | 407 ~TargetHeaderMIPS32() = default; |
394 }; | 408 }; |
395 | 409 |
396 } // end of namespace MIPS32 | 410 } // end of namespace MIPS32 |
397 } // end of namespace Ice | 411 } // end of namespace Ice |
398 | 412 |
399 #endif // SUBZERO_SRC_ICETARGETLOWERINGMIPS32_H | 413 #endif // SUBZERO_SRC_ICETARGETLOWERINGMIPS32_H |
OLD | NEW |