mirror of
https://git.suyu.dev/suyu/dynarmic.git
synced 2025-12-23 15:54:17 +01:00
commit
213fe7a452
62 changed files with 5179 additions and 2059 deletions
124
externals/xbyak/test/misc.cpp
vendored
124
externals/xbyak/test/misc.cpp
vendored
|
|
@ -1949,6 +1949,12 @@ CYBOZU_TEST_AUTO(misc)
|
|||
movdiri(ptr[rax+r12], r9);
|
||||
movdiri(ptr[rax+r12*2+4], r9d);
|
||||
movdir64b(r10, ptr[r8]);
|
||||
clui();
|
||||
senduipi(rax);
|
||||
senduipi(r10);
|
||||
stui();
|
||||
testui();
|
||||
uiret();
|
||||
#endif
|
||||
}
|
||||
} c;
|
||||
|
|
@ -1972,6 +1978,12 @@ CYBOZU_TEST_AUTO(misc)
|
|||
0x4e, 0x0f, 0x38, 0xf9, 0x0c, 0x20, // movdiri
|
||||
0x46, 0x0f, 0x38, 0xf9, 0x4c, 0x60, 0x04, // movdiri
|
||||
0x66, 0x45, 0x0f, 0x38, 0xf8, 0x10, // movdir64b
|
||||
0xf3, 0x0f, 0x01, 0xee, // clui
|
||||
0xf3, 0x0f, 0xc7, 0xf0, // senduipi rax
|
||||
0xf3, 0x41, 0x0f, 0xc7, 0xf2, // senduipi r10
|
||||
0xf3, 0x0f, 0x01, 0xef, // stui
|
||||
0xf3, 0x0f, 0x01, 0xed, // testui
|
||||
0xf3, 0x0f, 0x01, 0xec, // uiret
|
||||
#endif
|
||||
};
|
||||
const size_t n = sizeof(tbl) / sizeof(tbl[0]);
|
||||
|
|
@ -2157,4 +2169,116 @@ CYBOZU_TEST_AUTO(prefetchiti)
|
|||
CYBOZU_TEST_EQUAL(c.getSize(), n);
|
||||
CYBOZU_TEST_EQUAL_ARRAY(c.getCode(), tbl, n);
|
||||
}
|
||||
|
||||
CYBOZU_TEST_AUTO(crypto)
|
||||
{
|
||||
struct Code : Xbyak::CodeGenerator {
|
||||
Code()
|
||||
{
|
||||
vsha512msg1(ymm3, xmm5);
|
||||
vsha512msg2(ymm9, ymm10);
|
||||
vsha512rnds2(ymm1, ymm3, xmm2);
|
||||
|
||||
vsm3msg1(xmm1, xmm2, xmm3);
|
||||
vsm3msg1(xmm1, xmm2, ptr [rax]);
|
||||
vsm3msg2(xmm5, xmm7, xmm3);
|
||||
vsm3msg2(xmm5, xmm6, ptr [rax]);
|
||||
vsm3rnds2(xmm5, xmm7, xmm3, 0x12);
|
||||
vsm3rnds2(xmm5, xmm7, ptr [rcx], 0x34);
|
||||
|
||||
vsm4key4(xmm1, xmm2, xmm3);
|
||||
vsm4key4(xmm1, xmm2, ptr [rdx]);
|
||||
vsm4rnds4(xmm1, xmm2, xmm3);
|
||||
vsm4rnds4(xmm5, xmm6, ptr [rcx+rax*4]);
|
||||
}
|
||||
} c;
|
||||
const uint8_t tbl[] = {
|
||||
// sha512
|
||||
0xc4, 0xe2, 0x7f, 0xcc, 0xdd,
|
||||
0xc4, 0x42, 0x7f, 0xcd, 0xca,
|
||||
0xc4, 0xe2, 0x67, 0xcb, 0xca,
|
||||
|
||||
// sm3
|
||||
0xC4, 0xE2, 0x68, 0xDA, 0xCB,
|
||||
0xC4, 0xE2, 0x68, 0xDA, 0x08,
|
||||
0xC4, 0xE2, 0x41, 0xDA, 0xEB,
|
||||
0xC4, 0xE2, 0x49, 0xDA, 0x28,
|
||||
0xC4, 0xE3, 0x41, 0xDE, 0xEB, 0x12,
|
||||
0xC4, 0xE3, 0x41, 0xDE, 0x29, 0x34,
|
||||
|
||||
// sm4
|
||||
0xc4, 0xe2, 0x6a, 0xda, 0xcb,
|
||||
0xc4, 0xe2, 0x6a, 0xda, 0x0a,
|
||||
0xc4, 0xe2, 0x6b, 0xda, 0xcb,
|
||||
0xc4, 0xe2, 0x4b, 0xda, 0x2c, 0x81,
|
||||
};
|
||||
const size_t n = sizeof(tbl) / sizeof(tbl[0]);
|
||||
CYBOZU_TEST_EQUAL(c.getSize(), n);
|
||||
CYBOZU_TEST_EQUAL_ARRAY(c.getCode(), tbl, n);
|
||||
}
|
||||
|
||||
CYBOZU_TEST_AUTO(avx_vnni_int)
|
||||
{
|
||||
struct Code : Xbyak::CodeGenerator {
|
||||
Code()
|
||||
{
|
||||
vpdpbssd(xmm1, xmm2, xmm3);
|
||||
vpdpbssd(ymm1, ymm2, ptr [rax]);
|
||||
vpdpbssds(xmm1, xmm2, xmm3);
|
||||
vpdpbssds(ymm1, ymm2, ptr [rax]);
|
||||
vpdpbsud(xmm1, xmm2, xmm3);
|
||||
vpdpbsud(ymm1, ymm2, ptr [rax]);
|
||||
vpdpbsuds(xmm1, xmm2, xmm3);
|
||||
vpdpbsuds(ymm1, ymm2, ptr [rax]);
|
||||
vpdpbuud(xmm1, xmm2, xmm3);
|
||||
vpdpbuud(ymm1, ymm2, ptr [rax]);
|
||||
vpdpbuuds(xmm1, xmm2, xmm3);
|
||||
vpdpbuuds(ymm1, ymm2, ptr [rax]);
|
||||
|
||||
vpdpwsud(xmm1, xmm2, xmm3);
|
||||
vpdpwsud(ymm1, ymm2, ptr [rax]);
|
||||
vpdpwsuds(xmm1, xmm2, xmm3);
|
||||
vpdpwsuds(ymm1, ymm2, ptr [rax]);
|
||||
vpdpwusd(xmm1, xmm2, xmm3);
|
||||
vpdpwusd(ymm1, ymm2, ptr [rax]);
|
||||
vpdpwusds(xmm1, xmm2, xmm3);
|
||||
vpdpwusds(ymm1, ymm2, ptr [rax]);
|
||||
vpdpwuud(xmm1, xmm2, xmm3);
|
||||
vpdpwuud(ymm1, ymm2, ptr [rax]);
|
||||
vpdpwuuds(xmm1, xmm2, xmm3);
|
||||
vpdpwuuds(ymm1, ymm2, ptr [rax]);
|
||||
}
|
||||
} c;
|
||||
const uint8_t tbl[] = {
|
||||
0xc4, 0xe2, 0x6b, 0x50, 0xcb,
|
||||
0xc4, 0xe2, 0x6f, 0x50, 0x08,
|
||||
0xc4, 0xe2, 0x6b, 0x51, 0xcb,
|
||||
0xc4, 0xe2, 0x6f, 0x51, 0x08,
|
||||
0xc4, 0xe2, 0x6a, 0x50, 0xcb,
|
||||
0xc4, 0xe2, 0x6e, 0x50, 0x08,
|
||||
0xc4, 0xe2, 0x6a, 0x51, 0xcb,
|
||||
0xc4, 0xe2, 0x6e, 0x51, 0x08,
|
||||
0xc4, 0xe2, 0x68, 0x50, 0xcb,
|
||||
0xc4, 0xe2, 0x6c, 0x50, 0x08,
|
||||
0xc4, 0xe2, 0x68, 0x51, 0xcb,
|
||||
0xc4, 0xe2, 0x6c, 0x51, 0x08,
|
||||
0xc4, 0xe2, 0x6a, 0xd2, 0xcb,
|
||||
0xc4, 0xe2, 0x6e, 0xd2, 0x08,
|
||||
0xc4, 0xe2, 0x6a, 0xd3, 0xcb,
|
||||
0xc4, 0xe2, 0x6e, 0xd3, 0x08,
|
||||
0xc4, 0xe2, 0x69, 0xd2, 0xcb,
|
||||
0xc4, 0xe2, 0x6d, 0xd2, 0x08,
|
||||
0xc4, 0xe2, 0x69, 0xd3, 0xcb,
|
||||
0xc4, 0xe2, 0x6d, 0xd3, 0x08,
|
||||
0xc4, 0xe2, 0x68, 0xd2, 0xcb,
|
||||
0xc4, 0xe2, 0x6c, 0xd2, 0x08,
|
||||
0xc4, 0xe2, 0x68, 0xd3, 0xcb,
|
||||
0xc4, 0xe2, 0x6c, 0xd3, 0x08,
|
||||
};
|
||||
const size_t n = sizeof(tbl) / sizeof(tbl[0]);
|
||||
CYBOZU_TEST_EQUAL(c.getSize(), n);
|
||||
CYBOZU_TEST_EQUAL_ARRAY(c.getCode(), tbl, n);
|
||||
}
|
||||
|
||||
|
||||
#endif
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue