| 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 229 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 240   void _cmpps(Variable *Dest, Operand *Src0, CondX86::CmppsCond Condition) { | 240   void _cmpps(Variable *Dest, Operand *Src0, CondX86::CmppsCond Condition) { | 
| 241     Context.insert(InstX8632Cmpps::create(Func, Dest, Src0, Condition)); | 241     Context.insert(InstX8632Cmpps::create(Func, Dest, Src0, Condition)); | 
| 242   } | 242   } | 
| 243   void _cmpxchg(Operand *DestOrAddr, Variable *Eax, Variable *Desired, | 243   void _cmpxchg(Operand *DestOrAddr, Variable *Eax, Variable *Desired, | 
| 244                 bool Locked) { | 244                 bool Locked) { | 
| 245     Context.insert( | 245     Context.insert( | 
| 246         InstX8632Cmpxchg::create(Func, DestOrAddr, Eax, Desired, Locked)); | 246         InstX8632Cmpxchg::create(Func, DestOrAddr, Eax, Desired, Locked)); | 
| 247     // Mark eax as possibly modified by cmpxchg. | 247     // Mark eax as possibly modified by cmpxchg. | 
| 248     Context.insert( | 248     Context.insert( | 
| 249         InstFakeDef::create(Func, Eax, llvm::dyn_cast<Variable>(DestOrAddr))); | 249         InstFakeDef::create(Func, Eax, llvm::dyn_cast<Variable>(DestOrAddr))); | 
|  | 250     _set_dest_nonkillable(); | 
| 250   } | 251   } | 
| 251   void _cmpxchg8b(OperandX8632Mem *Addr, Variable *Edx, Variable *Eax, | 252   void _cmpxchg8b(OperandX8632Mem *Addr, Variable *Edx, Variable *Eax, | 
| 252                   Variable *Ecx, Variable *Ebx, bool Locked) { | 253                   Variable *Ecx, Variable *Ebx, bool Locked) { | 
| 253     Context.insert( | 254     Context.insert( | 
| 254         InstX8632Cmpxchg8b::create(Func, Addr, Edx, Eax, Ecx, Ebx, Locked)); | 255         InstX8632Cmpxchg8b::create(Func, Addr, Edx, Eax, Ecx, Ebx, Locked)); | 
| 255     // Mark edx, and eax as possibly modified by cmpxchg8b. | 256     // Mark edx, and eax as possibly modified by cmpxchg8b. | 
| 256     Context.insert(InstFakeDef::create(Func, Edx)); | 257     Context.insert(InstFakeDef::create(Func, Edx)); | 
|  | 258     _set_dest_nonkillable(); | 
| 257     Context.insert(InstFakeDef::create(Func, Eax)); | 259     Context.insert(InstFakeDef::create(Func, Eax)); | 
|  | 260     _set_dest_nonkillable(); | 
| 258   } | 261   } | 
| 259   void _cvt(Variable *Dest, Operand *Src0, InstX8632Cvt::CvtVariant Variant) { | 262   void _cvt(Variable *Dest, Operand *Src0, InstX8632Cvt::CvtVariant Variant) { | 
| 260     Context.insert(InstX8632Cvt::create(Func, Dest, Src0, Variant)); | 263     Context.insert(InstX8632Cvt::create(Func, Dest, Src0, Variant)); | 
| 261   } | 264   } | 
| 262   void _div(Variable *Dest, Operand *Src0, Operand *Src1) { | 265   void _div(Variable *Dest, Operand *Src0, Operand *Src1) { | 
| 263     Context.insert(InstX8632Div::create(Func, Dest, Src0, Src1)); | 266     Context.insert(InstX8632Div::create(Func, Dest, Src0, Src1)); | 
| 264   } | 267   } | 
| 265   void _divps(Variable *Dest, Operand *Src0) { | 268   void _divps(Variable *Dest, Operand *Src0) { | 
| 266     Context.insert(InstX8632Divps::create(Func, Dest, Src0)); | 269     Context.insert(InstX8632Divps::create(Func, Dest, Src0)); | 
| 267   } | 270   } | 
| (...skipping 19 matching lines...) Expand all  Loading... | 
| 287   void _mfence() { Context.insert(InstX8632Mfence::create(Func)); } | 290   void _mfence() { Context.insert(InstX8632Mfence::create(Func)); } | 
| 288   // If Dest=NULL is passed in, then a new variable is created, marked | 291   // If Dest=NULL is passed in, then a new variable is created, marked | 
| 289   // as infinite register allocation weight, and returned through the | 292   // as infinite register allocation weight, and returned through the | 
| 290   // in/out Dest argument. | 293   // in/out Dest argument. | 
| 291   void _mov(Variable *&Dest, Operand *Src0, | 294   void _mov(Variable *&Dest, Operand *Src0, | 
| 292             int32_t RegNum = Variable::NoRegister) { | 295             int32_t RegNum = Variable::NoRegister) { | 
| 293     if (Dest == NULL) | 296     if (Dest == NULL) | 
| 294       Dest = makeReg(Src0->getType(), RegNum); | 297       Dest = makeReg(Src0->getType(), RegNum); | 
| 295     Context.insert(InstX8632Mov::create(Func, Dest, Src0)); | 298     Context.insert(InstX8632Mov::create(Func, Dest, Src0)); | 
| 296   } | 299   } | 
|  | 300   void _mov_nonkillable(Variable *Dest, Operand *Src0) { | 
|  | 301     Inst *NewInst = InstX8632Mov::create(Func, Dest, Src0); | 
|  | 302     NewInst->setDestNonKillable(); | 
|  | 303     Context.insert(NewInst); | 
|  | 304   } | 
| 297   void _movd(Variable *Dest, Operand *Src0) { | 305   void _movd(Variable *Dest, Operand *Src0) { | 
| 298     Context.insert(InstX8632Movd::create(Func, Dest, Src0)); | 306     Context.insert(InstX8632Movd::create(Func, Dest, Src0)); | 
| 299   } | 307   } | 
| 300   void _movp(Variable *Dest, Operand *Src0) { | 308   void _movp(Variable *Dest, Operand *Src0) { | 
| 301     Context.insert(InstX8632Movp::create(Func, Dest, Src0)); | 309     Context.insert(InstX8632Movp::create(Func, Dest, Src0)); | 
| 302   } | 310   } | 
| 303   void _movq(Variable *Dest, Operand *Src0) { | 311   void _movq(Variable *Dest, Operand *Src0) { | 
| 304     Context.insert(InstX8632Movq::create(Func, Dest, Src0)); | 312     Context.insert(InstX8632Movq::create(Func, Dest, Src0)); | 
| 305   } | 313   } | 
| 306   void _movss(Variable *Dest, Variable *Src0) { | 314   void _movss(Variable *Dest, Variable *Src0) { | 
| (...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 438   void _ucomiss(Operand *Src0, Operand *Src1) { | 446   void _ucomiss(Operand *Src0, Operand *Src1) { | 
| 439     Context.insert(InstX8632Ucomiss::create(Func, Src0, Src1)); | 447     Context.insert(InstX8632Ucomiss::create(Func, Src0, Src1)); | 
| 440   } | 448   } | 
| 441   void _ud2() { Context.insert(InstX8632UD2::create(Func)); } | 449   void _ud2() { Context.insert(InstX8632UD2::create(Func)); } | 
| 442   void _xadd(Operand *Dest, Variable *Src, bool Locked) { | 450   void _xadd(Operand *Dest, Variable *Src, bool Locked) { | 
| 443     Context.insert(InstX8632Xadd::create(Func, Dest, Src, Locked)); | 451     Context.insert(InstX8632Xadd::create(Func, Dest, Src, Locked)); | 
| 444     // The xadd exchanges Dest and Src (modifying Src). | 452     // The xadd exchanges Dest and Src (modifying Src). | 
| 445     // Model that update with a FakeDef. | 453     // Model that update with a FakeDef. | 
| 446     Context.insert( | 454     Context.insert( | 
| 447         InstFakeDef::create(Func, Src, llvm::dyn_cast<Variable>(Dest))); | 455         InstFakeDef::create(Func, Src, llvm::dyn_cast<Variable>(Dest))); | 
|  | 456     _set_dest_nonkillable(); | 
| 448   } | 457   } | 
| 449   void _xchg(Operand *Dest, Variable *Src) { | 458   void _xchg(Operand *Dest, Variable *Src) { | 
| 450     Context.insert(InstX8632Xchg::create(Func, Dest, Src)); | 459     Context.insert(InstX8632Xchg::create(Func, Dest, Src)); | 
| 451     // The xchg modifies Dest and Src -- model that update with a FakeDef. | 460     // The xchg modifies Dest and Src -- model that update with a FakeDef. | 
| 452     Context.insert( | 461     Context.insert( | 
| 453         InstFakeDef::create(Func, Src, llvm::dyn_cast<Variable>(Dest))); | 462         InstFakeDef::create(Func, Src, llvm::dyn_cast<Variable>(Dest))); | 
|  | 463     _set_dest_nonkillable(); | 
| 454   } | 464   } | 
| 455   void _xor(Variable *Dest, Operand *Src0) { | 465   void _xor(Variable *Dest, Operand *Src0) { | 
| 456     Context.insert(InstX8632Xor::create(Func, Dest, Src0)); | 466     Context.insert(InstX8632Xor::create(Func, Dest, Src0)); | 
| 457   } | 467   } | 
|  | 468   void _set_dest_nonkillable() { | 
|  | 469     Context.getLastInserted()->setDestNonKillable(); | 
|  | 470   } | 
| 458 | 471 | 
| 459   const X86InstructionSet InstructionSet; | 472   const X86InstructionSet InstructionSet; | 
| 460   bool IsEbpBasedFrame; | 473   bool IsEbpBasedFrame; | 
| 461   bool NeedsStackAlignment; | 474   bool NeedsStackAlignment; | 
| 462   size_t FrameSizeLocals; | 475   size_t FrameSizeLocals; | 
| 463   size_t SpillAreaSizeBytes; | 476   size_t SpillAreaSizeBytes; | 
| 464   llvm::SmallBitVector TypeToRegisterSet[IceType_NUM]; | 477   llvm::SmallBitVector TypeToRegisterSet[IceType_NUM]; | 
| 465   llvm::SmallBitVector ScratchRegs; | 478   llvm::SmallBitVector ScratchRegs; | 
| 466   llvm::SmallBitVector RegsUsed; | 479   llvm::SmallBitVector RegsUsed; | 
| 467   SizeT NextLabelNumber; | 480   SizeT NextLabelNumber; | 
| (...skipping 26 matching lines...) Expand all  Loading... | 
| 494 }; | 507 }; | 
| 495 | 508 | 
| 496 template <> void ConstantInteger32::emit(GlobalContext *Ctx) const; | 509 template <> void ConstantInteger32::emit(GlobalContext *Ctx) const; | 
| 497 template <> void ConstantInteger64::emit(GlobalContext *Ctx) const; | 510 template <> void ConstantInteger64::emit(GlobalContext *Ctx) const; | 
| 498 template <> void ConstantFloat::emit(GlobalContext *Ctx) const; | 511 template <> void ConstantFloat::emit(GlobalContext *Ctx) const; | 
| 499 template <> void ConstantDouble::emit(GlobalContext *Ctx) const; | 512 template <> void ConstantDouble::emit(GlobalContext *Ctx) const; | 
| 500 | 513 | 
| 501 } // end of namespace Ice | 514 } // end of namespace Ice | 
| 502 | 515 | 
| 503 #endif // SUBZERO_SRC_ICETARGETLOWERINGX8632_H | 516 #endif // SUBZERO_SRC_ICETARGETLOWERINGX8632_H | 
| OLD | NEW | 
|---|