0x4: PMULUDQ(Pq,Qq);
                         0x5: PMADDWD(Pq,Qq);
                         0x6: PSADBW(Pq,Qq);
-                        0x7: WarnUnimpl::maskmovq_Pq_PRq();
+                        0x7: MASKMOVQ(Pq,PRq);
                         default: UD2();
                     }
                     // operand size (0x66)
                         0x4: PMULUDQ(Vo,Wo);
                         0x5: PMADDWD(Vo,Wo);
                         0x6: PSADBW(Vo,Wo);
-                        0x7: WarnUnimpl::maskmovdqu_Vo_VRo();
+                        0x7: MASKMOVDQU(Vo,VRo);
                         default: UD2();
                     }
                     // repne (0xF2)
 
 
 microcode = '''
 # MOVNTDQ
-# MASKMOVDQU
+
+def macroop MASKMOVDQU_XMM_XMM {
+    ldfp ufp1, ds, [1, t0, rdi], dataSize=8
+    ldfp ufp2, ds, [1, t0, rdi], 8, dataSize=8
+    maskmov ufp1, xmml, xmmlm, size=1
+    maskmov ufp2, xmmh, xmmhm, size=1
+    stfp ufp1, ds, [1, t0, rdi], dataSize=8
+    stfp ufp2, ds, [1, t0, rdi], 8, dataSize=8
+};
 '''
 
 
 microcode = '''
 # MOVNTQ
-# MASKMOVQ
+
+def macroop MASKMOVQ_MMX_MMX {
+    ldfp ufp1, ds, [1, t0, rdi], dataSize=8
+    maskmov ufp1, mmx, mmxm, size=1
+    stfp ufp1, ds, [1, t0, rdi], dataSize=8
+};
 '''