add ucomi{sd,ss}
diff --git a/gen/gen_code.cpp b/gen/gen_code.cpp
index 3d5e7f0..ba33edd 100644
--- a/gen/gen_code.cpp
+++ b/gen/gen_code.cpp
@@ -1244,8 +1244,8 @@
 			{ 0x51, "sqrtpd", T_0F | T_66 | T_YMM, false },
 			{ 0x51, "sqrtps", T_0F | T_YMM, false },
 
-			{ 0x2E, "ucomisd", T_0F | T_66, false },
-			{ 0x2E, "ucomiss", T_0F, false },
+			{ 0x2E, "ucomisd", T_0F | T_66 | T_EVEX | T_EW1 | T_SAE_X, false },
+			{ 0x2E, "ucomiss", T_0F | T_EVEX | T_EW0 | T_SAE_X, false },
 		};
 		for (size_t i = 0; i < NUM_OF_ARRAY(tbl); i++) {
 			const Tbl *p = &tbl[i];
diff --git a/test/make_nm.cpp b/test/make_nm.cpp
index d22aba2..2eba900 100644
--- a/test/make_nm.cpp
+++ b/test/make_nm.cpp
@@ -2533,8 +2533,20 @@
 		}
 		put("vcmppd", K2, ZMM, ZMM_SAE, IMM);
 #ifdef XBYAK64
-		put("vcomisd", _XMM3, XMM | MEM);
-		put("vcomisd", XMM, XMM_SAE);
+		{
+			const struct Tbl {
+				const char *name;
+			} tbl[] = {
+				{ "vcomisd" },
+				{ "vcomiss" },
+				{ "vucomisd" },
+				{ "vucomiss" },
+			};
+			for (size_t i = 0; i < NUM_OF_ARRAY(tbl); i++) {
+				const Tbl *p = &tbl[i];
+				put(p->name, XMM | _XMM3, XMM_SAE | XMM | MEM);
+			}
+		}
 		put("vcomiss", _XMM3, XMM | MEM);
 		put("vcomiss", XMM, XMM_SAE);
 #endif
diff --git a/xbyak/xbyak_mnemonic.h b/xbyak/xbyak_mnemonic.h
index af06495..8692a7e 100644
--- a/xbyak/xbyak_mnemonic.h
+++ b/xbyak/xbyak_mnemonic.h
@@ -1011,8 +1011,8 @@
 void vrsqrtps(const Xmm& xm, const Operand& op) { opAVX_X_XM_IMM(xm, op, T_0F | T_YMM, 0x52); }
 void vsqrtpd(const Xmm& xm, const Operand& op) { opAVX_X_XM_IMM(xm, op, T_0F | T_66 | T_YMM, 0x51); }
 void vsqrtps(const Xmm& xm, const Operand& op) { opAVX_X_XM_IMM(xm, op, T_0F | T_YMM, 0x51); }
-void vucomisd(const Xmm& xm, const Operand& op) { opAVX_X_XM_IMM(xm, op, T_0F | T_66, 0x2E); }
-void vucomiss(const Xmm& xm, const Operand& op) { opAVX_X_XM_IMM(xm, op, T_0F, 0x2E); }
+void vucomisd(const Xmm& xm, const Operand& op) { opAVX_X_XM_IMM(xm, op, T_0F | T_66 | T_EW1 | T_EVEX | T_SAE_X, 0x2E); }
+void vucomiss(const Xmm& xm, const Operand& op) { opAVX_X_XM_IMM(xm, op, T_0F | T_EW0 | T_EVEX | T_SAE_X, 0x2E); }
 void vmovapd(const Address& addr, const Xmm& xmm) { opAVX_X_XM_IMM(xmm, addr, T_0F | T_66 | T_YMM, 0x29); }
 void vmovaps(const Address& addr, const Xmm& xmm) { opAVX_X_XM_IMM(xmm, addr, T_0F | T_YMM, 0x29); }
 void vmovdqa(const Address& addr, const Xmm& xmm) { opAVX_X_XM_IMM(xmm, addr, T_0F | T_66 | T_YMM, 0x7F); }