// vim: ft=arm .non_linear: .non_linear_loop_entry: sub r0, #20 .non_linear_loop: add r0, #20 ldm r0, { r2, r3, r4, r5, r6 } cmp r2, #{{ jump_table | size }} movgt r2, #{{ jump_table | size }} cmp r2, #0 movlt r2, #{{ jump_table | size }} add pc, pc, r2, LSL#2 nop // pc in Rn above is start of the add instruction + 8, hence a nop is needed // This is A32 asm, for T32/Thump2 use nop.w and b.w to avoid problems. {% for j in jump_table %} b .{{j}} {% endfor %} b .unsupported .unsupported: mov r0, #1 b .return .done: mov r0, #0 b .return