aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorMITSUNARI Shigeo <[email protected]>2024-10-13 11:16:27 +0900
committerMITSUNARI Shigeo <[email protected]>2024-10-13 13:51:06 +0900
commitdedb7f52af9ee648c41ae27fb48978a5ae68901e (patch)
treee1b6709531172ad9538d11cee9b94937f3c15048
parent6e083527507052145d99585eb028342cba81df60 (diff)
downloadxbyak-dedb7f52af9ee648c41ae27fb48978a5ae68901e.tar.gz
xbyak-dedb7f52af9ee648c41ae27fb48978a5ae68901e.zip
add vdpphps
-rw-r--r--gen/gen_avx512.cpp4
-rw-r--r--test/avx10/misc.txt13
-rw-r--r--xbyak/xbyak_mnemonic.h1
3 files changed, 18 insertions, 0 deletions
diff --git a/gen/gen_avx512.cpp b/gen/gen_avx512.cpp
index 44ef945..e7b2336 100644
--- a/gen/gen_avx512.cpp
+++ b/gen/gen_avx512.cpp
@@ -445,6 +445,9 @@ void putX_X_XM_IMM()
{ 0x74, "vcvtne2ph2bf8s", T_MUST_EVEX | T_F2 | T_MAP5 | T_EW0 | T_YMM | T_B16 | T_N1, false },
{ 0x18, "vcvtne2ph2hf8", T_MUST_EVEX | T_F2 | T_MAP5 | T_EW0 | T_YMM | T_B16 | T_N1, false },
{ 0x1B, "vcvtne2ph2hf8s", T_MUST_EVEX | T_F2 | T_MAP5 | T_EW0 | T_YMM | T_B16 | T_N1, false },
+
+ { 0x52, "vdpphps", T_MUST_EVEX | T_0F38 | T_EW0 | T_YMM | T_B32, false },
+// { 0x42, "vmpsadbw", T_MUST_EVEX | T_F3 | T_0F3A | T_EW0 | T_YMM | T_B32, true },
};
for (size_t i = 0; i < NUM_OF_ARRAY(tbl); i++) {
const Tbl *p = &tbl[i];
@@ -452,6 +455,7 @@ void putX_X_XM_IMM()
printf("void %s(const Xmm& x1, const Xmm& x2, const Operand& op%s) { opAVX_X_X_XM(x1, x2, op, %s, 0x%02X%s); }\n"
, p->name, p->hasIMM ? ", uint8_t imm" : "", s.c_str(), p->code, p->hasIMM ? ", imm" : "");
}
+// puts("void vmpsadbw(const Xmm& x1, const Xmm& x2, const Operand& op, uint8_t imm, PreferredEncoding encoding = DefaultEncoding) { opEncoding(x1, x2, op, T_0F3A | T_YMM, 0x42, encoding, imm, T_66 | T_W0 | T_YMM, T_F3 | T_EW0 | T_B32); }");
}
void putShift()
diff --git a/test/avx10/misc.txt b/test/avx10/misc.txt
new file mode 100644
index 0000000..f7d1351
--- /dev/null
+++ b/test/avx10/misc.txt
@@ -0,0 +1,13 @@
+vdpphps(xm1, xm2, xm3);
+vdpphps(xm1, xm2, ptr[rax+128]);
+vdpphps(xm1, xm2, ptr_b[rax+128]);
+
+vdpphps(ym1, ym2, ym3);
+vdpphps(ym1, ym2, ptr[rax+128]);
+vdpphps(ym1, ym2, ptr_b[rax+128]);
+
+vdpphps(zm1, zm2, zm3);
+vdpphps(zm1, zm2, ptr[rax+128]);
+vdpphps(zm1, zm2, ptr_b[rax+128]);
+
+// skip vmpsadbw
diff --git a/xbyak/xbyak_mnemonic.h b/xbyak/xbyak_mnemonic.h
index 891deea..cc88238 100644
--- a/xbyak/xbyak_mnemonic.h
+++ b/xbyak/xbyak_mnemonic.h
@@ -2280,6 +2280,7 @@ void vdivnepbf16(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM
void vdivph(const Xmm& xmm, const Operand& op1, const Operand& op2 = Operand()) { opAVX_X_X_XM(xmm, op1, op2, T_MAP5 | T_EW0 | T_YMM | T_MUST_EVEX | T_ER_Z | T_B16, 0x5E); }
void vdivsh(const Xmm& xmm, const Operand& op1, const Operand& op2 = Operand()) { opAVX_X_X_XM(xmm, op1, op2, T_MAP5 | T_F3 | T_EW0 | T_MUST_EVEX | T_ER_X | T_N2, 0x5E); }
void vdpbf16ps(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, T_F3|T_0F38|T_EW0|T_YMM|T_SAE_Z|T_MUST_EVEX|T_B32, 0x52); }
+void vdpphps(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, T_0F38|T_EW0|T_YMM|T_MUST_EVEX|T_B32, 0x52); }
void vexp2pd(const Zmm& z, const Operand& op) { opAVX_X_XM_IMM(z, op, T_66 | T_0F38 | T_MUST_EVEX | T_YMM | T_EW1 | T_B64 | T_SAE_Z, 0xC8); }
void vexp2ps(const Zmm& z, const Operand& op) { opAVX_X_XM_IMM(z, op, T_66 | T_0F38 | T_MUST_EVEX | T_YMM | T_EW0 | T_B32 | T_SAE_Z, 0xC8); }
void vexpandpd(const Xmm& x, const Operand& op) { opAVX_X_XM_IMM(x, op, T_N8|T_66|T_0F38|T_EW1|T_YMM|T_MUST_EVEX, 0x88); }