| 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 242 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 253 Context.insert(InstX8632Cmpps::create(Func, Dest, Src0, Condition)); | 253 Context.insert(InstX8632Cmpps::create(Func, Dest, Src0, Condition)); |
| 254 } | 254 } |
| 255 void _cmpxchg(Operand *DestOrAddr, Variable *Eax, Variable *Desired, | 255 void _cmpxchg(Operand *DestOrAddr, Variable *Eax, Variable *Desired, |
| 256 bool Locked) { | 256 bool Locked) { |
| 257 Context.insert( | 257 Context.insert( |
| 258 InstX8632Cmpxchg::create(Func, DestOrAddr, Eax, Desired, Locked)); | 258 InstX8632Cmpxchg::create(Func, DestOrAddr, Eax, Desired, Locked)); |
| 259 // Mark eax as possibly modified by cmpxchg. | 259 // Mark eax as possibly modified by cmpxchg. |
| 260 Context.insert( | 260 Context.insert( |
| 261 InstFakeDef::create(Func, Eax, llvm::dyn_cast<Variable>(DestOrAddr))); | 261 InstFakeDef::create(Func, Eax, llvm::dyn_cast<Variable>(DestOrAddr))); |
| 262 _set_dest_nonkillable(); | 262 _set_dest_nonkillable(); |
| 263 Context.insert(InstFakeUse::create(Func, Eax)); |
| 263 } | 264 } |
| 264 void _cmpxchg8b(OperandX8632Mem *Addr, Variable *Edx, Variable *Eax, | 265 void _cmpxchg8b(OperandX8632Mem *Addr, Variable *Edx, Variable *Eax, |
| 265 Variable *Ecx, Variable *Ebx, bool Locked) { | 266 Variable *Ecx, Variable *Ebx, bool Locked) { |
| 266 Context.insert( | 267 Context.insert( |
| 267 InstX8632Cmpxchg8b::create(Func, Addr, Edx, Eax, Ecx, Ebx, Locked)); | 268 InstX8632Cmpxchg8b::create(Func, Addr, Edx, Eax, Ecx, Ebx, Locked)); |
| 268 // Mark edx, and eax as possibly modified by cmpxchg8b. | 269 // Mark edx, and eax as possibly modified by cmpxchg8b. |
| 269 Context.insert(InstFakeDef::create(Func, Edx)); | 270 Context.insert(InstFakeDef::create(Func, Edx)); |
| 270 _set_dest_nonkillable(); | 271 _set_dest_nonkillable(); |
| 272 Context.insert(InstFakeUse::create(Func, Edx)); |
| 271 Context.insert(InstFakeDef::create(Func, Eax)); | 273 Context.insert(InstFakeDef::create(Func, Eax)); |
| 272 _set_dest_nonkillable(); | 274 _set_dest_nonkillable(); |
| 275 Context.insert(InstFakeUse::create(Func, Eax)); |
| 273 } | 276 } |
| 274 void _cvt(Variable *Dest, Operand *Src0, InstX8632Cvt::CvtVariant Variant) { | 277 void _cvt(Variable *Dest, Operand *Src0, InstX8632Cvt::CvtVariant Variant) { |
| 275 Context.insert(InstX8632Cvt::create(Func, Dest, Src0, Variant)); | 278 Context.insert(InstX8632Cvt::create(Func, Dest, Src0, Variant)); |
| 276 } | 279 } |
| 277 void _div(Variable *Dest, Operand *Src0, Operand *Src1) { | 280 void _div(Variable *Dest, Operand *Src0, Operand *Src1) { |
| 278 Context.insert(InstX8632Div::create(Func, Dest, Src0, Src1)); | 281 Context.insert(InstX8632Div::create(Func, Dest, Src0, Src1)); |
| 279 } | 282 } |
| 280 void _divps(Variable *Dest, Operand *Src0) { | 283 void _divps(Variable *Dest, Operand *Src0) { |
| 281 Context.insert(InstX8632Divps::create(Func, Dest, Src0)); | 284 Context.insert(InstX8632Divps::create(Func, Dest, Src0)); |
| 282 } | 285 } |
| (...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 461 void _test(Operand *Src0, Operand *Src1) { | 464 void _test(Operand *Src0, Operand *Src1) { |
| 462 Context.insert(InstX8632Test::create(Func, Src0, Src1)); | 465 Context.insert(InstX8632Test::create(Func, Src0, Src1)); |
| 463 } | 466 } |
| 464 void _ucomiss(Operand *Src0, Operand *Src1) { | 467 void _ucomiss(Operand *Src0, Operand *Src1) { |
| 465 Context.insert(InstX8632Ucomiss::create(Func, Src0, Src1)); | 468 Context.insert(InstX8632Ucomiss::create(Func, Src0, Src1)); |
| 466 } | 469 } |
| 467 void _ud2() { Context.insert(InstX8632UD2::create(Func)); } | 470 void _ud2() { Context.insert(InstX8632UD2::create(Func)); } |
| 468 void _xadd(Operand *Dest, Variable *Src, bool Locked) { | 471 void _xadd(Operand *Dest, Variable *Src, bool Locked) { |
| 469 Context.insert(InstX8632Xadd::create(Func, Dest, Src, Locked)); | 472 Context.insert(InstX8632Xadd::create(Func, Dest, Src, Locked)); |
| 470 // The xadd exchanges Dest and Src (modifying Src). | 473 // The xadd exchanges Dest and Src (modifying Src). |
| 471 // Model that update with a FakeDef. | 474 // Model that update with a FakeDef followed by a FakeUse. |
| 472 Context.insert( | 475 Context.insert( |
| 473 InstFakeDef::create(Func, Src, llvm::dyn_cast<Variable>(Dest))); | 476 InstFakeDef::create(Func, Src, llvm::dyn_cast<Variable>(Dest))); |
| 474 _set_dest_nonkillable(); | 477 _set_dest_nonkillable(); |
| 478 Context.insert(InstFakeUse::create(Func, Src)); |
| 475 } | 479 } |
| 476 void _xchg(Operand *Dest, Variable *Src) { | 480 void _xchg(Operand *Dest, Variable *Src) { |
| 477 Context.insert(InstX8632Xchg::create(Func, Dest, Src)); | 481 Context.insert(InstX8632Xchg::create(Func, Dest, Src)); |
| 478 // The xchg modifies Dest and Src -- model that update with a FakeDef. | 482 // The xchg modifies Dest and Src -- model that update with a |
| 483 // FakeDef/FakeUse. |
| 479 Context.insert( | 484 Context.insert( |
| 480 InstFakeDef::create(Func, Src, llvm::dyn_cast<Variable>(Dest))); | 485 InstFakeDef::create(Func, Src, llvm::dyn_cast<Variable>(Dest))); |
| 481 _set_dest_nonkillable(); | 486 _set_dest_nonkillable(); |
| 487 Context.insert(InstFakeUse::create(Func, Src)); |
| 482 } | 488 } |
| 483 void _xor(Variable *Dest, Operand *Src0) { | 489 void _xor(Variable *Dest, Operand *Src0) { |
| 484 Context.insert(InstX8632Xor::create(Func, Dest, Src0)); | 490 Context.insert(InstX8632Xor::create(Func, Dest, Src0)); |
| 485 } | 491 } |
| 486 void _set_dest_nonkillable() { | 492 void _set_dest_nonkillable() { |
| 487 Context.getLastInserted()->setDestNonKillable(); | 493 Context.getLastInserted()->setDestNonKillable(); |
| 488 } | 494 } |
| 489 | 495 |
| 490 const X86InstructionSet InstructionSet; | 496 const X86InstructionSet InstructionSet; |
| 491 bool IsEbpBasedFrame; | 497 bool IsEbpBasedFrame; |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 526 }; | 532 }; |
| 527 | 533 |
| 528 template <> void ConstantInteger32::emit(GlobalContext *Ctx) const; | 534 template <> void ConstantInteger32::emit(GlobalContext *Ctx) const; |
| 529 template <> void ConstantInteger64::emit(GlobalContext *Ctx) const; | 535 template <> void ConstantInteger64::emit(GlobalContext *Ctx) const; |
| 530 template <> void ConstantFloat::emit(GlobalContext *Ctx) const; | 536 template <> void ConstantFloat::emit(GlobalContext *Ctx) const; |
| 531 template <> void ConstantDouble::emit(GlobalContext *Ctx) const; | 537 template <> void ConstantDouble::emit(GlobalContext *Ctx) const; |
| 532 | 538 |
| 533 } // end of namespace Ice | 539 } // end of namespace Ice |
| 534 | 540 |
| 535 #endif // SUBZERO_SRC_ICETARGETLOWERINGX8632_H | 541 #endif // SUBZERO_SRC_ICETARGETLOWERINGX8632_H |
| OLD | NEW |