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;