Files

62 lines
1.3 KiB
ArmAsm

# expected: 000001BC, 000002BC, 000003BC, 000004BC, 000006BC, 000000BC, 00003BC
.text
_start:
li x5, 0x0
# case1: greater -> should jump -> write 0x1BC
add x1, x0, 0x010
add x2, x0, 0x00F
bge x1, x2, case1_target
add x31, x0, 0x3BC
case1_target:
add x31, x0, 0x1BC
# case2: equal -> should jump -> write 0x2BC
add x1, x0, 0x1BC
add x2, x0, 0x1BC
bge x1, x2, case2_target
add x31, x0, 0x3BC
case2_target:
add x31, x0, 0x2BC
back_label:
bne x5, x0, back_label_flagged
# no-flag path (fall-through)
add x1, x0, 0x000
add x2, x0, 0x001
li x31, 0x3BC
jal x0, back_label_cont
back_label_flagged:
li x31, 0x0BC
li x5, 0x0
jal x0, after_backward
back_label_cont:
# case3: less -> should not jump -> write 0x4BC
add x1, x0, 0x001
add x2, x0, 0x002
bge x1, x2, case3_target
add x31, x0, 0x4BC
case3_target:
# case4: negative values -> signed compare, should jump
add x1, x0, -1
add x2, x0, -2
bge x1, x2, case4_target
add x31, x0, 0x7BC
case4_target:
add x31, x0, 0x6BC
add x5, x0, 0x1
add x1, x0, 0x002
add x2, x0, 0x001
bge x1, x2, back_label
li x1, 0xABC
bge x1, x1, same_reg_target
li x31, 0x2BC
same_reg_target:
li x31, 0x1BC
after_backward:
# final marker
li x31, 0x3BC