aboutsummaryrefslogtreecommitdiffhomepage
path: root/test/apx.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'test/apx.cpp')
-rw-r--r--test/apx.cpp35
1 files changed, 35 insertions, 0 deletions
diff --git a/test/apx.cpp b/test/apx.cpp
index 08cbbb9..29a7850 100644
--- a/test/apx.cpp
+++ b/test/apx.cpp
@@ -895,3 +895,38 @@ CYBOZU_TEST_AUTO(imul_2op)
CYBOZU_TEST_EQUAL(c.getSize(), n);
CYBOZU_TEST_EQUAL_ARRAY(c.getCode(), tbl, n);
}
+
+CYBOZU_TEST_AUTO(imul_zu)
+{
+ struct Code : Xbyak::CodeGenerator {
+ Code()
+ {
+ imul(ax|T_zu, cx, 0x1234);
+ imul(ax|T_nf, cx, 0x1234);
+ imul(ax|T_zu|T_nf, cx, 0x1234);
+ imul(r30w, ax, 0x1234);
+ imul(r30d, eax, 0x12345678);
+ imul(r30, rax, 0x12345678);
+ imul(r30|T_zu, rax, 0x12345678);
+ imul(r30|T_nf, rax, 0x12345678);
+ imul(r30|T_nf|T_zu, rax, 0x12345678);
+ imul(rcx, ptr [r30], 0x12345678);
+ }
+ } c;
+ const uint8_t tbl[] = {
+ 0x62, 0xf4, 0x7d, 0x18, 0x69, 0xc1, 0x34, 0x12, // T_zu
+ 0x62, 0xf4, 0x7d, 0x0c, 0x69, 0xc1, 0x34, 0x12, // T_nf
+ 0x62, 0xf4, 0x7d, 0x1c, 0x69, 0xc1, 0x34, 0x12, // T_zu|T_nf
+ 0x62, 0x64, 0x7d, 0x08, 0x69, 0xf0, 0x34, 0x12, // w
+ 0x62, 0x64, 0x7c, 0x08, 0x69, 0xf0, 0x78, 0x56, 0x34, 0x12, // d
+ 0x62, 0x64, 0xfc, 0x08, 0x69, 0xf0, 0x78, 0x56, 0x34, 0x12,
+ 0x62, 0x64, 0xfc, 0x18, 0x69, 0xf0, 0x78, 0x56, 0x34, 0x12, // T_zu
+ 0x62, 0x64, 0xfc, 0x0c, 0x69, 0xf0, 0x78, 0x56, 0x34, 0x12, // T_nf
+ 0x62, 0x64, 0xfc, 0x1c, 0x69, 0xf0, 0x78, 0x56, 0x34, 0x12, // T_nf|T_zu
+ 0x62, 0xdc, 0xfc, 0x08, 0x69, 0x0e, 0x78, 0x56, 0x34, 0x12,
+
+ };
+ const size_t n = sizeof(tbl);
+ CYBOZU_TEST_EQUAL(c.getSize(), n);
+ CYBOZU_TEST_EQUAL_ARRAY(c.getCode(), tbl, n);
+}