Subzero, MIPS32: MOVZ instruction encoding

Implements MOVZ instruction encoding

R=stichnot@chromium.org

Review URL: https://codereview.chromium.org/2377783002 .

Patch from Srdjan Obucina <Srdjan.Obucina@imgtec.com>.
diff --git a/src/IceAssemblerMIPS32.cpp b/src/IceAssemblerMIPS32.cpp
index 5d56cff..00ef9fe 100644
--- a/src/IceAssemblerMIPS32.cpp
+++ b/src/IceAssemblerMIPS32.cpp
@@ -709,6 +709,12 @@
   emitCOP1FmtFtFsFd(Opcode, SinglePrecision, OpFd, OpFs, OpFt, "movz.d");
 }
 
+void AssemblerMIPS32::movz(const Operand *OpRd, const Operand *OpRs,
+                           const Operand *OpRt) {
+  static constexpr IValueT Opcode = 0x0000000A;
+  emitRdRsRt(Opcode, OpRd, OpRs, OpRt, "movz");
+}
+
 void AssemblerMIPS32::movz_s(const Operand *OpFd, const Operand *OpFs,
                              const Operand *OpFt) {
   static constexpr IValueT Opcode = 0x44000012;
diff --git a/src/IceAssemblerMIPS32.h b/src/IceAssemblerMIPS32.h
index ce9511b..c9f097a 100644
--- a/src/IceAssemblerMIPS32.h
+++ b/src/IceAssemblerMIPS32.h
@@ -191,6 +191,8 @@
 
   void movt(const Operand *OpRd, const Operand *OpRs, const Operand *OpCc);
 
+  void movz(const Operand *OpRd, const Operand *OpRs, const Operand *OpRt);
+
   void movz_d(const Operand *OpFd, const Operand *OpFs, const Operand *OpFt);
 
   void movz_s(const Operand *OpFd, const Operand *OpFs, const Operand *OpFt);
diff --git a/src/IceInstMIPS32.cpp b/src/IceInstMIPS32.cpp
index fb66b4d..25282ea 100644
--- a/src/IceInstMIPS32.cpp
+++ b/src/IceInstMIPS32.cpp
@@ -994,6 +994,11 @@
   Asm->movt(getDest(), getSrc(1), getSrc(2));
 }
 
+template <> void InstMIPS32Movz::emitIAS(const Cfg *Func) const {
+  auto *Asm = Func->getAssembler<MIPS32::AssemblerMIPS32>();
+  Asm->movz(getDest(), getSrc(0), getSrc(1));
+}
+
 template <> void InstMIPS32Movz_d::emitIAS(const Cfg *Func) const {
   auto *Asm = Func->getAssembler<MIPS32::AssemblerMIPS32>();
   Asm->movz_d(getDest(), getSrc(0), getSrc(1));
diff --git a/src/IceInstMIPS32.h b/src/IceInstMIPS32.h
index 038276f..5a738e7 100644
--- a/src/IceInstMIPS32.h
+++ b/src/IceInstMIPS32.h
@@ -1286,6 +1286,7 @@
 template <> void InstMIPS32Movn_d::emitIAS(const Cfg *Func) const;
 template <> void InstMIPS32Movn_s::emitIAS(const Cfg *Func) const;
 template <> void InstMIPS32Movt::emitIAS(const Cfg *Func) const;
+template <> void InstMIPS32Movz::emitIAS(const Cfg *Func) const;
 template <> void InstMIPS32Movz_d::emitIAS(const Cfg *Func) const;
 template <> void InstMIPS32Movz_s::emitIAS(const Cfg *Func) const;
 template <> void InstMIPS32Mtc1::emit(const Cfg *Func) const;