Use three-address form of imul

Previously we did not take advantage of the three address versions of the
imul instruction.  With this we are able to avoid some copies before imuls.

BUG=
R=stichnot@chromium.org

Review URL: https://codereview.chromium.org/1365433004 .
diff --git a/src/IceAssemblerX86Base.h b/src/IceAssemblerX86Base.h
index 7c4be6f..f9de5a5 100644
--- a/src/IceAssemblerX86Base.h
+++ b/src/IceAssemblerX86Base.h
@@ -751,6 +751,11 @@
   void imul(Type Ty, typename Traits::GPRRegister reg);
   void imul(Type Ty, const typename Traits::Address &address);
 
+  void imul(Type Ty, typename Traits::GPRRegister dst,
+            typename Traits::GPRRegister src, const Immediate &imm);
+  void imul(Type Ty, typename Traits::GPRRegister dst,
+            const typename Traits::Address &address, const Immediate &imm);
+
   void mul(Type Ty, typename Traits::GPRRegister reg);
   void mul(Type Ty, const typename Traits::Address &address);