aboutsummaryrefslogtreecommitdiffhomepage
path: root/test/misc.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'test/misc.cpp')
-rw-r--r--test/misc.cpp84
1 files changed, 84 insertions, 0 deletions
diff --git a/test/misc.cpp b/test/misc.cpp
index 7653673..f0e577f 100644
--- a/test/misc.cpp
+++ b/test/misc.cpp
@@ -2056,3 +2056,87 @@ CYBOZU_TEST_AUTO(rao_int)
CYBOZU_TEST_EQUAL(c.getSize(), n);
CYBOZU_TEST_EQUAL_ARRAY(c.getCode(), tbl, n);
}
+
+#ifdef XBYAK64
+CYBOZU_TEST_AUTO(CMPccXADD)
+{
+ struct Code : Xbyak::CodeGenerator {
+ Code()
+ {
+ // 32bit reg
+ cmpbexadd(ptr[rax+r10*4], ecx, edx);
+ cmpbxadd(ptr[rax+r10*4], ecx, edx);
+ cmplexadd(ptr[rax+r10*4], ecx, edx);
+ cmplxadd(ptr[rax+r10*4], ecx, edx);
+ cmpnbexadd(ptr[rax+r10*4], ecx, edx);
+ cmpnbxadd(ptr[rax+r10*4], ecx, edx);
+ cmpnlexadd(ptr[rax+r10*4], ecx, edx);
+ cmpnlxadd(ptr[rax+r10*4], ecx, edx);
+ cmpnoxadd(ptr[rax+r10*4], ecx, edx);
+ cmpnpxadd(ptr[rax+r10*4], ecx, edx);
+ cmpnsxadd(ptr[rax+r10*4], ecx, edx);
+ cmpnzxadd(ptr[rax+r10*4], ecx, edx);
+ cmpoxadd(ptr[rax+r10*4], ecx, edx);
+ cmppxadd(ptr[rax+r10*4], ecx, edx);
+ cmpsxadd(ptr[rax+r10*4], ecx, edx);
+ cmpzxadd(ptr[rax+r10*4], ecx, edx);
+ // 64bit reg
+ cmpbexadd(ptr[rax+r10*4], rcx, rdx);
+ cmpbxadd(ptr[rax+r10*4], rcx, rdx);
+ cmplexadd(ptr[rax+r10*4], rcx, rdx);
+ cmplxadd(ptr[rax+r10*4], rcx, rdx);
+ cmpnbexadd(ptr[rax+r10*4], rcx, rdx);
+ cmpnbxadd(ptr[rax+r10*4], rcx, rdx);
+ cmpnlexadd(ptr[rax+r10*4], rcx, rdx);
+ cmpnlxadd(ptr[rax+r10*4], rcx, rdx);
+ cmpnoxadd(ptr[rax+r10*4], rcx, rdx);
+ cmpnpxadd(ptr[rax+r10*4], rcx, rdx);
+ cmpnsxadd(ptr[rax+r10*4], rcx, rdx);
+ cmpnzxadd(ptr[rax+r10*4], rcx, rdx);
+ cmpoxadd(ptr[rax+r10*4], rcx, rdx);
+ cmppxadd(ptr[rax+r10*4], rcx, rdx);
+ cmpsxadd(ptr[rax+r10*4], rcx, rdx);
+ cmpzxadd(ptr[rax+r10*4], rcx, rdx);
+ }
+ } c;
+ const uint8_t tbl[] = {
+ // 32bit reg
+ 0xc4, 0xa2, 0x69, 0xe6, 0x0c, 0x90,
+ 0xc4, 0xa2, 0x69, 0xe2, 0x0c, 0x90,
+ 0xc4, 0xa2, 0x69, 0xee, 0x0c, 0x90,
+ 0xc4, 0xa2, 0x69, 0xec, 0x0c, 0x90,
+ 0xc4, 0xa2, 0x69, 0xe7, 0x0c, 0x90,
+ 0xc4, 0xa2, 0x69, 0xe3, 0x0c, 0x90,
+ 0xc4, 0xa2, 0x69, 0xef, 0x0c, 0x90,
+ 0xc4, 0xa2, 0x69, 0xed, 0x0c, 0x90,
+ 0xc4, 0xa2, 0x69, 0xe1, 0x0c, 0x90,
+ 0xc4, 0xa2, 0x69, 0xeb, 0x0c, 0x90,
+ 0xc4, 0xa2, 0x69, 0xe9, 0x0c, 0x90,
+ 0xc4, 0xa2, 0x69, 0xe5, 0x0c, 0x90,
+ 0xc4, 0xa2, 0x69, 0xe0, 0x0c, 0x90,
+ 0xc4, 0xa2, 0x69, 0xea, 0x0c, 0x90,
+ 0xc4, 0xa2, 0x69, 0xe8, 0x0c, 0x90,
+ 0xc4, 0xa2, 0x69, 0xe4, 0x0c, 0x90,
+ // 64bit reg
+ 0xc4, 0xa2, 0xe9, 0xe6, 0x0c, 0x90,
+ 0xc4, 0xa2, 0xe9, 0xe2, 0x0c, 0x90,
+ 0xc4, 0xa2, 0xe9, 0xee, 0x0c, 0x90,
+ 0xc4, 0xa2, 0xe9, 0xec, 0x0c, 0x90,
+ 0xc4, 0xa2, 0xe9, 0xe7, 0x0c, 0x90,
+ 0xc4, 0xa2, 0xe9, 0xe3, 0x0c, 0x90,
+ 0xc4, 0xa2, 0xe9, 0xef, 0x0c, 0x90,
+ 0xc4, 0xa2, 0xe9, 0xed, 0x0c, 0x90,
+ 0xc4, 0xa2, 0xe9, 0xe1, 0x0c, 0x90,
+ 0xc4, 0xa2, 0xe9, 0xeb, 0x0c, 0x90,
+ 0xc4, 0xa2, 0xe9, 0xe9, 0x0c, 0x90,
+ 0xc4, 0xa2, 0xe9, 0xe5, 0x0c, 0x90,
+ 0xc4, 0xa2, 0xe9, 0xe0, 0x0c, 0x90,
+ 0xc4, 0xa2, 0xe9, 0xea, 0x0c, 0x90,
+ 0xc4, 0xa2, 0xe9, 0xe8, 0x0c, 0x90,
+ 0xc4, 0xa2, 0xe9, 0xe4, 0x0c, 0x90,
+ };
+ const size_t n = sizeof(tbl) / sizeof(tbl[0]);
+ CYBOZU_TEST_EQUAL(c.getSize(), n);
+ CYBOZU_TEST_EQUAL_ARRAY(c.getCode(), tbl, n);
+}
+#endif