56 lines
1.2 KiB
ArmAsm
56 lines
1.2 KiB
ArmAsm
# expected: 000001BC, 000003BC, 000002BC, 000003BC, 000000AC
|
|
.text
|
|
_start:
|
|
li x5, 0x0
|
|
# case1: not equal -> should jump -> write 0x1BC
|
|
add x1, x0, 0x00A
|
|
add x2, x0, 0x00B
|
|
bne x1, x2, case1_target
|
|
add x31, x0, 0x3BC
|
|
case1_target:
|
|
add x31, x0, 0x1BC
|
|
|
|
back_label:
|
|
bne x5, x0, back_label_flagged
|
|
# fall-through
|
|
add x1, x0, 0x000
|
|
add x2, x0, 0x001
|
|
add x31, x0, 0x3BC
|
|
jal x0, back_label_cont
|
|
back_label_flagged:
|
|
add x5, x0, 0x0
|
|
jal x0, after_backward
|
|
back_label_cont:
|
|
|
|
# case2: equal -> should not jump -> write 0x2BC
|
|
add x1, x0, 0x1BC
|
|
add x2, x0, 0x1BC
|
|
bne x1, x2, case2_target
|
|
add x31, x0, 0x2BC
|
|
case2_target:
|
|
add x31, x0, 0x3BC
|
|
|
|
# case3: zero vs non-zero -> should jump -> write 0x4BC
|
|
add x1, x0, 0x000
|
|
add x2, x0, 0x001
|
|
bne x1, x2, case3_target
|
|
add x31, x0, 0x5BC
|
|
case3_target:
|
|
|
|
# backward branch trigger
|
|
add x5, x0, 0x1
|
|
add x1, x0, 0x002
|
|
add x2, x0, 0x001
|
|
bne x1, x2, back_label
|
|
|
|
# same-reg: should not jump (since equal) -> write 0x0AC after fall-through
|
|
add x1, x0, 0x00A
|
|
add x2, x0, 0x00A
|
|
bne x1, x2, same_reg_target
|
|
add x31, x0, 0x0AC
|
|
same_reg_target:
|
|
add x31, x0, 0x6BC
|
|
|
|
after_backward:
|
|
add x31, x0, 0x0AC
|