OLD | NEW |
1 //===- subzero/src/IceTargetLoweringX8632.h - x86-32 lowering ---*- C++ -*-===// | 1 //===- subzero/src/IceTargetLoweringX8632.h - x86-32 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 // This file declares the TargetLoweringX8632 class, which | 10 // This file declares the TargetLoweringX8632 class, which |
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
178 | 178 |
179 // The following are helpers that insert lowered x86 instructions | 179 // The following are helpers that insert lowered x86 instructions |
180 // with minimal syntactic overhead, so that the lowering code can | 180 // with minimal syntactic overhead, so that the lowering code can |
181 // look as close to assembly as practical. | 181 // look as close to assembly as practical. |
182 void _adc(Variable *Dest, Operand *Src0) { | 182 void _adc(Variable *Dest, Operand *Src0) { |
183 Context.insert(InstX8632Adc::create(Func, Dest, Src0)); | 183 Context.insert(InstX8632Adc::create(Func, Dest, Src0)); |
184 } | 184 } |
185 void _add(Variable *Dest, Operand *Src0) { | 185 void _add(Variable *Dest, Operand *Src0) { |
186 Context.insert(InstX8632Add::create(Func, Dest, Src0)); | 186 Context.insert(InstX8632Add::create(Func, Dest, Src0)); |
187 } | 187 } |
| 188 void _adjust_stack(int32_t Amount) { |
| 189 Context.insert(InstX8632AdjustStack::create(Func, Amount)); |
| 190 } |
188 void _addps(Variable *Dest, Operand *Src0) { | 191 void _addps(Variable *Dest, Operand *Src0) { |
189 Context.insert(InstX8632Addps::create(Func, Dest, Src0)); | 192 Context.insert(InstX8632Addps::create(Func, Dest, Src0)); |
190 } | 193 } |
191 void _addss(Variable *Dest, Operand *Src0) { | 194 void _addss(Variable *Dest, Operand *Src0) { |
192 Context.insert(InstX8632Addss::create(Func, Dest, Src0)); | 195 Context.insert(InstX8632Addss::create(Func, Dest, Src0)); |
193 } | 196 } |
194 void _and(Variable *Dest, Operand *Src0) { | 197 void _and(Variable *Dest, Operand *Src0) { |
195 Context.insert(InstX8632And::create(Func, Dest, Src0)); | 198 Context.insert(InstX8632And::create(Func, Dest, Src0)); |
196 } | 199 } |
197 void _blendvps(Variable *Dest, Operand *Src0, Operand *Src1) { | 200 void _blendvps(Variable *Dest, Operand *Src0, Operand *Src1) { |
(...skipping 204 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
402 } | 405 } |
403 void _shufps(Variable *Dest, Operand *Src0, Operand *Src1) { | 406 void _shufps(Variable *Dest, Operand *Src0, Operand *Src1) { |
404 Context.insert(InstX8632Shufps::create(Func, Dest, Src0, Src1)); | 407 Context.insert(InstX8632Shufps::create(Func, Dest, Src0, Src1)); |
405 } | 408 } |
406 void _sqrtss(Variable *Dest, Operand *Src0) { | 409 void _sqrtss(Variable *Dest, Operand *Src0) { |
407 Context.insert(InstX8632Sqrtss::create(Func, Dest, Src0)); | 410 Context.insert(InstX8632Sqrtss::create(Func, Dest, Src0)); |
408 } | 411 } |
409 void _store(Operand *Value, OperandX8632 *Mem) { | 412 void _store(Operand *Value, OperandX8632 *Mem) { |
410 Context.insert(InstX8632Store::create(Func, Value, Mem)); | 413 Context.insert(InstX8632Store::create(Func, Value, Mem)); |
411 } | 414 } |
| 415 void _storep(Operand *Value, OperandX8632 *Mem) { |
| 416 Context.insert(InstX8632StoreP::create(Func, Value, Mem)); |
| 417 } |
412 void _storeq(Operand *Value, OperandX8632 *Mem) { | 418 void _storeq(Operand *Value, OperandX8632 *Mem) { |
413 Context.insert(InstX8632StoreQ::create(Func, Value, Mem)); | 419 Context.insert(InstX8632StoreQ::create(Func, Value, Mem)); |
414 } | 420 } |
415 void _sub(Variable *Dest, Operand *Src0) { | 421 void _sub(Variable *Dest, Operand *Src0) { |
416 Context.insert(InstX8632Sub::create(Func, Dest, Src0)); | 422 Context.insert(InstX8632Sub::create(Func, Dest, Src0)); |
417 } | 423 } |
418 void _subps(Variable *Dest, Operand *Src0) { | 424 void _subps(Variable *Dest, Operand *Src0) { |
419 Context.insert(InstX8632Subps::create(Func, Dest, Src0)); | 425 Context.insert(InstX8632Subps::create(Func, Dest, Src0)); |
420 } | 426 } |
421 void _subss(Variable *Dest, Operand *Src0) { | 427 void _subss(Variable *Dest, Operand *Src0) { |
(...skipping 18 matching lines...) Expand all Loading... |
440 // The xchg modifies Dest and Src -- model that update with a FakeDef. | 446 // The xchg modifies Dest and Src -- model that update with a FakeDef. |
441 Context.insert( | 447 Context.insert( |
442 InstFakeDef::create(Func, Src, llvm::dyn_cast<Variable>(Dest))); | 448 InstFakeDef::create(Func, Src, llvm::dyn_cast<Variable>(Dest))); |
443 } | 449 } |
444 void _xor(Variable *Dest, Operand *Src0) { | 450 void _xor(Variable *Dest, Operand *Src0) { |
445 Context.insert(InstX8632Xor::create(Func, Dest, Src0)); | 451 Context.insert(InstX8632Xor::create(Func, Dest, Src0)); |
446 } | 452 } |
447 | 453 |
448 const X86InstructionSet InstructionSet; | 454 const X86InstructionSet InstructionSet; |
449 bool IsEbpBasedFrame; | 455 bool IsEbpBasedFrame; |
| 456 bool NeedsStackAlignment; |
450 size_t FrameSizeLocals; | 457 size_t FrameSizeLocals; |
451 size_t LocalsSizeBytes; | 458 size_t LocalsSizeBytes; |
452 llvm::SmallBitVector TypeToRegisterSet[IceType_NUM]; | 459 llvm::SmallBitVector TypeToRegisterSet[IceType_NUM]; |
453 llvm::SmallBitVector ScratchRegs; | 460 llvm::SmallBitVector ScratchRegs; |
454 llvm::SmallBitVector RegsUsed; | 461 llvm::SmallBitVector RegsUsed; |
455 SizeT NextLabelNumber; | 462 SizeT NextLabelNumber; |
456 bool ComputedLiveRanges; | 463 bool ComputedLiveRanges; |
457 VarList PhysicalRegisters; | 464 VarList PhysicalRegisters; |
458 static IceString RegNames[]; | 465 static IceString RegNames[]; |
459 | 466 |
(...skipping 23 matching lines...) Expand all Loading... |
483 virtual ~TargetGlobalInitX8632() {} | 490 virtual ~TargetGlobalInitX8632() {} |
484 }; | 491 }; |
485 | 492 |
486 template <> void ConstantInteger::emit(GlobalContext *Ctx) const; | 493 template <> void ConstantInteger::emit(GlobalContext *Ctx) const; |
487 template <> void ConstantFloat::emit(GlobalContext *Ctx) const; | 494 template <> void ConstantFloat::emit(GlobalContext *Ctx) const; |
488 template <> void ConstantDouble::emit(GlobalContext *Ctx) const; | 495 template <> void ConstantDouble::emit(GlobalContext *Ctx) const; |
489 | 496 |
490 } // end of namespace Ice | 497 } // end of namespace Ice |
491 | 498 |
492 #endif // SUBZERO_SRC_ICETARGETLOWERINGX8632_H | 499 #endif // SUBZERO_SRC_ICETARGETLOWERINGX8632_H |
OLD | NEW |