ARM_SP
emit(ARM_MOV_R(ARM_IP, ARM_SP), ctx);
emit(ARM_MOV_R(ARM_FP, ARM_SP), ctx);
emit(ARM_SUB_I(bpf_r1[1], ARM_SP, SCRATCH_SIZE), ctx);
emit(ARM_SUB_I(ARM_SP, ARM_SP, ctx->stack_size), ctx);
u16 reg_set = CALLEE_POP_MASK | 1 << ARM_SP;
emit(ARM_SUB_I(ARM_SP, ARM_FP, hweight16(reg_set) * 4), ctx);
emit(ARM_LDM(ARM_SP, reg_set), ctx);
emit(ARM_MOV_R(ARM_SP, ARM_FP), ctx);
emit(ARM_ADD_I(ARM_SP, ARM_SP, imm8m(24)), ctx); // callee clean
emit(ARM_ADD_I(ARM_SP, ARM_SP, 8), ctx);
emit(ARM_ADD_I(ARM_SP, ARM_SP, 8), ctx);