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