diff options
-rw-r--r-- | gen/gen_code.cpp | 1 | ||||
-rw-r--r-- | test/apx.cpp | 8 | ||||
-rw-r--r-- | xbyak/xbyak_mnemonic.h | 1 |
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); } |