Index: src/IceInstX8632.h |
diff --git a/src/IceInstX8632.h b/src/IceInstX8632.h |
index 0f1a336d6c4719ddd6240633510a3b624f248993..9facb2b75d9c5037b197f7060ea54ee9f339434e 100644 |
--- a/src/IceInstX8632.h |
+++ b/src/IceInstX8632.h |
@@ -837,7 +837,7 @@ typedef InstX8632BinopGPR<InstX8632::Or> InstX8632Or; |
typedef InstX8632BinopXmm<InstX8632::Por, false> InstX8632Por; |
typedef InstX8632BinopGPR<InstX8632::Xor> InstX8632Xor; |
typedef InstX8632BinopXmm<InstX8632::Pxor, false> InstX8632Pxor; |
-typedef InstX8632Binop<InstX8632::Imul> InstX8632Imul; |
+typedef InstX8632BinopGPR<InstX8632::Imul> InstX8632Imul; |
typedef InstX8632BinopXmm<InstX8632::Mulps, true> InstX8632Mulps; |
typedef InstX8632BinopXmm<InstX8632::Mulss, false> InstX8632Mulss; |
typedef InstX8632Binop<InstX8632::Pmull> InstX8632Pmull; |
@@ -850,8 +850,8 @@ typedef InstX8632Binop<InstX8632::Psll> InstX8632Psll; |
typedef InstX8632Binop<InstX8632::Shr, true> InstX8632Shr; |
typedef InstX8632Binop<InstX8632::Sar, true> InstX8632Sar; |
typedef InstX8632Binop<InstX8632::Psra> InstX8632Psra; |
-typedef InstX8632Binop<InstX8632::Pcmpeq> InstX8632Pcmpeq; |
-typedef InstX8632Binop<InstX8632::Pcmpgt> InstX8632Pcmpgt; |
+typedef InstX8632BinopXmm<InstX8632::Pcmpeq, true> InstX8632Pcmpeq; |
+typedef InstX8632BinopXmm<InstX8632::Pcmpgt, true> InstX8632Pcmpgt; |
// TODO: movss is only a binary operation when the source and dest |
// operands are both registers. In other cases, it behaves like a copy |
// (mov-like) operation. Eventually, InstX8632Movss should assert that |
@@ -1450,6 +1450,7 @@ template <> void InstX8632Subss::emit(const Cfg *Func) const; |
template <> void InstX8632Div::emitIAS(const Cfg *Func) const; |
template <> void InstX8632Idiv::emitIAS(const Cfg *Func) const; |
+template <> void InstX8632Imul::emitIAS(const Cfg *Func) const; |
template <> void InstX8632Cbwdq::emitIAS(const Cfg *Func) const; |
template <> void InstX8632Movd::emitIAS(const Cfg *Func) const; |