diff options
author | Maxime Chevalier-Boisvert <maxime.chevalierboisvert@shopify.com> | 2020-09-11 15:10:16 -0400 |
---|---|---|
committer | Alan Wu <XrXr@users.noreply.github.com> | 2021-10-20 18:19:23 -0400 |
commit | 6a12fb2067e1d0a9ce610b0affd6a3113d13ff1c (patch) | |
tree | 4d556af05b294fb33f9a1138311480b4b6f3e0a8 /ujit_asm_tests.c | |
parent | 1c8fb90f6bde0c630f5dc532dfe198218bc9f910 (diff) |
Ported label linking and conditional jumps
Diffstat (limited to 'ujit_asm_tests.c')
-rw-r--r-- | ujit_asm_tests.c | 28 |
1 files changed, 16 insertions, 12 deletions
diff --git a/ujit_asm_tests.c b/ujit_asm_tests.c index cbb115eec7..3dece1dc1a 100644 --- a/ujit_asm_tests.c +++ b/ujit_asm_tests.c @@ -92,20 +92,24 @@ void run_tests() cb_set_pos(cb, 0); call(cb, RAX); check_bytes(cb, "FFD0"); cb_set_pos(cb, 0); call(cb, mem_opnd(64, RSP, 8)); check_bytes(cb, "FF542408"); - /* // jcc - test( - delegate void (CodeBlock cb) { auto l = cb.label(Label.LOOP); cb.jge(l); }, - "0F8DFAFFFFFF" - ); - test( - delegate void (CodeBlock cb) { cb.label(Label.LOOP); cb.jo(Label.LOOP); }, - "0F80FAFFFFFF" - ); - */ + { + cb_set_pos(cb, 0); + size_t loop_label = cb_new_label(cb, "loop"); + jge(cb, loop_label); + cb_link_labels(cb); + check_bytes(cb, "0F8DFAFFFFFF"); + } + { + cb_set_pos(cb, 0); + size_t loop_label = cb_new_label(cb, "loop"); + jo(cb, loop_label); + cb_link_labels(cb); + check_bytes(cb, "0F80FAFFFFFF"); + } - // jmp - cb_set_pos(cb, 0); jmp(cb, R12); check_bytes(cb, "41FFE4"); + // jmp with RM operand + cb_set_pos(cb, 0); jmp_rm(cb, R12); check_bytes(cb, "41FFE4"); // lea //cb_set_pos(cb, 0); lea(cb, EBX, mem_opnd(32, RSP, 4)); check_bytes(cb, "8D5C2404"); |