Chromium Code Reviews| Index: src/IceInstX8632.cpp |
| diff --git a/src/IceInstX8632.cpp b/src/IceInstX8632.cpp |
| index c30c9f55ee1f451a58588cefe0f64050036204bb..f0eb3d1b4c6de84f77cacdbb79be9a2a13cc3c71 100644 |
| --- a/src/IceInstX8632.cpp |
| +++ b/src/IceInstX8632.cpp |
| @@ -136,11 +136,8 @@ InstX8632Call::InstX8632Call(Cfg *Func, Variable *Dest, Operand *CallTarget) |
| addSource(CallTarget); |
| } |
| -InstX8632Cdq::InstX8632Cdq(Cfg *Func, Variable *Dest, Operand *Source) |
| - : InstX8632(Func, InstX8632::Cdq, 1, Dest) { |
| - assert(Dest->getRegNum() == TargetX8632::Reg_edx); |
| - assert(llvm::isa<Variable>(Source)); |
| - assert(llvm::dyn_cast<Variable>(Source)->getRegNum() == TargetX8632::Reg_eax); |
| +InstX8632Cbwdq::InstX8632Cbwdq(Cfg *Func, Variable *Dest, Operand *Source) |
| + : InstX8632(Func, InstX8632::Cbwdq, 1, Dest) { |
| addSource(Source); |
| } |
| @@ -721,16 +718,38 @@ void InstX8632Shrd::dump(const Cfg *Func) const { |
| dumpSources(Func); |
| } |
| -void InstX8632Cdq::emit(const Cfg *Func) const { |
| +void InstX8632Cbwdq::emit(const Cfg *Func) const { |
| Ostream &Str = Func->getContext()->getStrEmit(); |
| assert(getSrcSize() == 1); |
| - Str << "\tcdq\n"; |
| + Variable *Dest = getDest(); |
| + (void)Dest; |
| + Operand *Src0 = getSrc(0); |
| + assert(llvm::isa<Variable>(Dest)); |
|
Jim Stichnoth
2014/08/07 19:58:10
This is redundant, since Dest is types as a Variab
wala
2014/08/07 20:30:35
Woops, done.
|
| + assert(llvm::isa<Variable>(Src0)); |
| + assert(llvm::cast<Variable>(Src0)->getRegNum() == TargetX8632::Reg_eax); |
| + switch (Src0->getType()) { |
| + default: |
| + llvm_unreachable("unexpected source type!"); |
| + break; |
| + case IceType_i8: |
| + assert(llvm::cast<Variable>(Dest)->getRegNum() == TargetX8632::Reg_eax); |
|
Jim Stichnoth
2014/08/07 19:58:10
Don't need to cast Dest to Variable, here and belo
wala
2014/08/07 20:30:35
Done.
|
| + Str << "\tcbw\n"; |
| + break; |
| + case IceType_i16: |
| + assert(llvm::cast<Variable>(Dest)->getRegNum() == TargetX8632::Reg_edx); |
| + Str << "\tcwd\n"; |
| + break; |
| + case IceType_i32: |
| + assert(llvm::cast<Variable>(Dest)->getRegNum() == TargetX8632::Reg_edx); |
| + Str << "\tcdq\n"; |
| + break; |
| + } |
| } |
| -void InstX8632Cdq::dump(const Cfg *Func) const { |
| +void InstX8632Cbwdq::dump(const Cfg *Func) const { |
| Ostream &Str = Func->getContext()->getStrDump(); |
| dumpDest(Func); |
| - Str << " = cdq." << getSrc(0)->getType() << " "; |
| + Str << " = cbw/cwd/cdq." << getSrc(0)->getType() << " "; |
| dumpSources(Func); |
| } |