summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--yjit_asm.c10
-rw-r--r--yjit_asm_tests.c2
2 files changed, 11 insertions, 1 deletions
diff --git a/yjit_asm.c b/yjit_asm.c
index c47e1fd274..76fc3bf8db 100644
--- a/yjit_asm.c
+++ b/yjit_asm.c
@@ -1664,7 +1664,15 @@ void test(codeblock_t* cb, x86opnd_t rm_opnd, x86opnd_t test_opnd)
else
{
assert (test_opnd.num_bits == rm_opnd.num_bits);
- cb_write_rm(cb, false, rm_opnd.num_bits == 64, test_opnd, rm_opnd, 0xFF, 1, 0x85);
+
+ if (rm_opnd.num_bits == 8)
+ {
+ cb_write_rm(cb, false, false, test_opnd, rm_opnd, 0xFF, 1, 0x84);
+ }
+ else
+ {
+ cb_write_rm(cb, rm_opnd.num_bits == 16, rm_opnd.num_bits == 64, test_opnd, rm_opnd, 0xFF, 1, 0x85);
+ }
}
}
diff --git a/yjit_asm_tests.c b/yjit_asm_tests.c
index da58bdd3b5..7fc40d497b 100644
--- a/yjit_asm_tests.c
+++ b/yjit_asm_tests.c
@@ -323,6 +323,8 @@ void run_tests()
cb_set_pos(cb, 0); sub(cb, RAX, imm_opnd(2)); check_bytes(cb, "4883E802");
// test
+ cb_set_pos(cb, 0); test(cb, AL, AL); check_bytes(cb, "84C0");
+ cb_set_pos(cb, 0); test(cb, AX, AX); check_bytes(cb, "6685C0");
cb_set_pos(cb, 0); test(cb, CL, imm_opnd(8)); check_bytes(cb, "F6C108");
cb_set_pos(cb, 0); test(cb, DL, imm_opnd(7)); check_bytes(cb, "F6C207");
cb_set_pos(cb, 0); test(cb, RCX, imm_opnd(8)); check_bytes(cb, "F6C108");