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); }