| Index: src/IceInstX8632.cpp
|
| diff --git a/src/IceInstX8632.cpp b/src/IceInstX8632.cpp
|
| index cf99e844b61451341b5a3c309d77c2eef0b7c6f0..457f56e2d62f20b5ef57fbfeb27c974f87274821 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,35 @@ 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";
|
| + Operand *Src0 = getSrc(0);
|
| + 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(getDest()->getRegNum() == TargetX8632::Reg_eax);
|
| + Str << "\tcbw\n";
|
| + break;
|
| + case IceType_i16:
|
| + assert(getDest()->getRegNum() == TargetX8632::Reg_edx);
|
| + Str << "\tcwd\n";
|
| + break;
|
| + case IceType_i32:
|
| + assert(getDest()->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);
|
| }
|
|
|
|
|