// vim: ft=arm .non_linear: sub x0, x0, 40 .non_linear_loop: add x0, x0, 40 ldr x2, [x0] mov x4, #{{ jump_table | size }} cmp x2, #{{ jump_table | size }} csel x2, x2, x4, lt cmp x2, #0 csel x2, x4, x2, lt adr x3, .jmp_table add x3, x3, x2, LSL#2 br x3 .jmp_table: {% for j in jump_table %} b .{{j}} {% endfor %} b .unsupported add x0, x2, #4000 b .return .unsupported: mov x0, #1 b .return .done: mov x0, 0 b .return