Index: src/IceInstX8632.cpp |
diff --git a/src/IceInstX8632.cpp b/src/IceInstX8632.cpp |
index 457f56e2d62f20b5ef57fbfeb27c974f87274821..03cdb952fce3e7313bd6bb8a01b0877dab69313a 100644 |
--- a/src/IceInstX8632.cpp |
+++ b/src/IceInstX8632.cpp |
@@ -136,11 +136,6 @@ InstX8632Call::InstX8632Call(Cfg *Func, Variable *Dest, Operand *CallTarget) |
addSource(CallTarget); |
} |
-InstX8632Cbwdq::InstX8632Cbwdq(Cfg *Func, Variable *Dest, Operand *Source) |
- : InstX8632(Func, InstX8632::Cbwdq, 1, Dest) { |
- addSource(Source); |
-} |
- |
InstX8632Cmov::InstX8632Cmov(Cfg *Func, Variable *Dest, Operand *Source, |
InstX8632::BrCond Condition) |
: InstX8632(Func, InstX8632::Cmov, 2, Dest), Condition(Condition) { |
@@ -452,6 +447,7 @@ template <> const char *InstX8632Bsr::Opcode = "bsr"; |
template <> const char *InstX8632Lea::Opcode = "lea"; |
template <> const char *InstX8632Movd::Opcode = "movd"; |
template <> const char *InstX8632Sqrtss::Opcode = "sqrtss"; |
+template <> const char *InstX8632Cbwdq::Opcode = "cbw/cwd/cdq"; |
// Binary ops |
template <> const char *InstX8632Add::Opcode = "add"; |
template <> const char *InstX8632Addps::Opcode = "addps"; |
@@ -647,6 +643,31 @@ template <> void InstX8632Imul::emit(const Cfg *Func) const { |
} |
} |
+template <> void InstX8632Cbwdq::emit(const Cfg *Func) const { |
+ Ostream &Str = Func->getContext()->getStrEmit(); |
+ assert(getSrcSize() == 1); |
+ 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 InstX8632Mul::emit(const Cfg *Func) const { |
Ostream &Str = Func->getContext()->getStrEmit(); |
assert(getSrcSize() == 2); |
@@ -718,38 +739,6 @@ void InstX8632Shrd::dump(const Cfg *Func) const { |
dumpSources(Func); |
} |
-void InstX8632Cbwdq::emit(const Cfg *Func) const { |
- Ostream &Str = Func->getContext()->getStrEmit(); |
- assert(getSrcSize() == 1); |
- 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 InstX8632Cbwdq::dump(const Cfg *Func) const { |
- Ostream &Str = Func->getContext()->getStrDump(); |
- dumpDest(Func); |
- Str << " = cbw/cwd/cdq." << getSrc(0)->getType() << " "; |
- dumpSources(Func); |
-} |
- |
void InstX8632Cmov::emit(const Cfg *Func) const { |
Ostream &Str = Func->getContext()->getStrEmit(); |
Str << "\t"; |