Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 //===- subzero/src/IceInstX8632.cpp - X86-32 instruction implementation ---===// | 1 //===- subzero/src/IceInstX8632.cpp - X86-32 instruction implementation ---===// |
| 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 implements the InstX8632 and OperandX8632 classes, | 10 // This file implements the InstX8632 and OperandX8632 classes, |
| (...skipping 575 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 586 | 586 |
| 587 template <> void InstX8632Pblendvb::emit(const Cfg *Func) const { | 587 template <> void InstX8632Pblendvb::emit(const Cfg *Func) const { |
| 588 assert(static_cast<TargetX8632 *>(Func->getTarget())->getInstructionSet() >= | 588 assert(static_cast<TargetX8632 *>(Func->getTarget())->getInstructionSet() >= |
| 589 TargetX8632::SSE4_1); | 589 TargetX8632::SSE4_1); |
| 590 emitVariableBlendInst(Opcode, this, Func); | 590 emitVariableBlendInst(Opcode, this, Func); |
| 591 } | 591 } |
| 592 | 592 |
| 593 template <> void InstX8632Imul::emit(const Cfg *Func) const { | 593 template <> void InstX8632Imul::emit(const Cfg *Func) const { |
| 594 Ostream &Str = Func->getContext()->getStrEmit(); | 594 Ostream &Str = Func->getContext()->getStrEmit(); |
| 595 assert(getSrcSize() == 2); | 595 assert(getSrcSize() == 2); |
| 596 if (getDest()->getType() == IceType_i8) { | 596 if (getDest()->getType() == IceType_i1 || |
|
jvoung (off chromium)
2014/09/05 23:07:15
I don't think arithmetic is allowed on i1, only an
Jim Stichnoth
2014/09/05 23:46:48
Interesting, I didn't realize we were simplifying
| |
| 597 getDest()->getType() == IceType_i8) { | |
| 597 // The 8-bit version of imul only allows the form "imul r/m8". | 598 // The 8-bit version of imul only allows the form "imul r/m8". |
| 598 Variable *Src0 = llvm::dyn_cast<Variable>(getSrc(0)); | 599 Variable *Src0 = llvm::dyn_cast<Variable>(getSrc(0)); |
| 599 (void)Src0; | 600 (void)Src0; |
| 600 assert(Src0 && Src0->getRegNum() == TargetX8632::Reg_eax); | 601 assert(Src0 && Src0->getRegNum() == TargetX8632::Reg_eax); |
| 601 Str << "\timul\t"; | 602 Str << "\timul\t"; |
| 602 getSrc(1)->emit(Func); | 603 getSrc(1)->emit(Func); |
| 603 Str << "\n"; | 604 Str << "\n"; |
| 604 } else if (llvm::isa<Constant>(getSrc(1))) { | 605 } else if (llvm::isa<Constant>(getSrc(1))) { |
| 605 Str << "\timul\t"; | 606 Str << "\timul\t"; |
| 606 getDest()->emit(Func); | 607 getDest()->emit(Func); |
| (...skipping 866 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1473 default: | 1474 default: |
| 1474 Str << "???"; | 1475 Str << "???"; |
| 1475 break; | 1476 break; |
| 1476 } | 1477 } |
| 1477 Str << "("; | 1478 Str << "("; |
| 1478 Var->dump(Func); | 1479 Var->dump(Func); |
| 1479 Str << ")"; | 1480 Str << ")"; |
| 1480 } | 1481 } |
| 1481 | 1482 |
| 1482 } // end of namespace Ice | 1483 } // end of namespace Ice |
| OLD | NEW |