Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(10)

Unified Diff: src/IceInstX8632.cpp

Issue 443203003: Subzero: Use scalar arithmetic when no vector instruction exists. (Closed) Base URL: https://gerrit.chromium.org/gerrit/p/native_client/pnacl-subzero.git@master
Patch Set: Minor fixes: whitespace, formatting, variable names, etc. Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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);
}

Powered by Google App Engine
This is Rietveld 408576698