summaryrefslogtreecommitdiff
path: root/ujit_asm_tests.c
diff options
context:
space:
mode:
authorMaxime Chevalier-Boisvert <maxime.chevalierboisvert@shopify.com>2020-09-11 15:10:16 -0400
committerAlan Wu <XrXr@users.noreply.github.com>2021-10-20 18:19:23 -0400
commit6a12fb2067e1d0a9ce610b0affd6a3113d13ff1c (patch)
tree4d556af05b294fb33f9a1138311480b4b6f3e0a8 /ujit_asm_tests.c
parent1c8fb90f6bde0c630f5dc532dfe198218bc9f910 (diff)
Ported label linking and conditional jumps
Diffstat (limited to 'ujit_asm_tests.c')
-rw-r--r--ujit_asm_tests.c28
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");