aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorMITSUNARI Shigeo <[email protected]>2023-12-19 16:36:41 +0900
committerMITSUNARI Shigeo <[email protected]>2023-12-19 16:36:41 +0900
commitcd5231de096408cb82c747761e55d80188ac639b (patch)
treedfa8d9a7dbf01e86cfccbb301317645654695a96
parentfcb3d0dbb8ff30601547539de8fb47620f164f37 (diff)
downloadxbyak-cd5231de096408cb82c747761e55d80188ac639b.tar.gz
xbyak-cd5231de096408cb82c747761e55d80188ac639b.zip
add aesdec256kl
-rw-r--r--gen/gen_code.cpp1
-rw-r--r--test/apx.cpp8
-rw-r--r--xbyak/xbyak_mnemonic.h1
3 files changed, 10 insertions, 0 deletions
diff --git a/gen/gen_code.cpp b/gen/gen_code.cpp
index e7cff6c..cdf015c 100644
--- a/gen/gen_code.cpp
+++ b/gen/gen_code.cpp
@@ -2023,6 +2023,7 @@ void put64()
int n;
} tbl[] = {
{ "aesdec128kl", T_F3|T_0F38, T_MUST_EVEX|T_F3, 0xDD, 2 },
+ { "aesdec256kl", T_F3|T_0F38, T_MUST_EVEX|T_F3, 0xDF, 2 },
};
for (size_t i = 0; i < NUM_OF_ARRAY(tbl); i++) {
const Tbl *p = &tbl[i];
diff --git a/test/apx.cpp b/test/apx.cpp
index 89760cb..fc29653 100644
--- a/test/apx.cpp
+++ b/test/apx.cpp
@@ -1782,11 +1782,19 @@ CYBOZU_TEST_AUTO(aeskl)
{
aesdec128kl(xmm15, ptr[rax+rcx*4+0x12]);
aesdec128kl(xmm15, ptr[r30+r29*8+0x34]);
+
+
+ aesdec256kl(xmm15, ptr[rax+rcx*4+0x12]);
+ aesdec256kl(xmm15, ptr[r30+r29*8+0x34]);
}
} c;
const uint8_t tbl[] = {
+ // aesdec128kl
0xf3, 0x44, 0x0f, 0x38, 0xdd, 0x7c, 0x88, 0x12,
0x62, 0x1c, 0x7a, 0x08, 0xdd, 0x7c, 0xee, 0x34,
+ // aesdec256kl
+ 0xf3, 0x44, 0x0f, 0x38, 0xdf, 0x7c, 0x88, 0x12,
+ 0x62, 0x1c, 0x7a, 0x08, 0xdf, 0x7c, 0xee, 0x34,
};
const size_t n = sizeof(tbl);
CYBOZU_TEST_EQUAL(c.getSize(), n);
diff --git a/xbyak/xbyak_mnemonic.h b/xbyak/xbyak_mnemonic.h
index 0f2b03e..2ea7699 100644
--- a/xbyak/xbyak_mnemonic.h
+++ b/xbyak/xbyak_mnemonic.h
@@ -1927,6 +1927,7 @@ void cmppxadd(const Address& addr, const Reg32e& r1, const Reg32e& r2) { opRRO(r
void cmpsxadd(const Address& addr, const Reg32e& r1, const Reg32e& r2) { opRRO(r1, r2, addr, T_APX|T_66|T_0F38, 0xE8); }
void cmpzxadd(const Address& addr, const Reg32e& r1, const Reg32e& r2) { opRRO(r1, r2, addr, T_APX|T_66|T_0F38, 0xE4); }
void aesdec128kl(const Xmm& x, const Address& addr) { opAESKL(&x, addr, T_F3|T_0F38, T_F3|T_MUST_EVEX, 0xDD); }
+void aesdec256kl(const Xmm& x, const Address& addr) { opAESKL(&x, addr, T_F3|T_0F38, T_F3|T_MUST_EVEX, 0xDF); }
void ldtilecfg(const Address& addr) { if (opROO(Reg(), addr, tmm0, T_APX|T_0F38|T_W0, 0x49)) return; opVex(tmm0, &tmm0, addr, T_0F38|T_W0, 0x49); }
void sttilecfg(const Address& addr) { if (opROO(Reg(), addr, tmm0, T_APX|T_66|T_0F38|T_W0, 0x49)) return; opVex(tmm0, &tmm0, addr, T_66|T_0F38 | T_W0, 0x49); }
void tileloadd(const Tmm& tm, const Address& addr) { opAMX(tm, addr, T_F2|T_0F38|T_W0, 0x4B); }