Lines Matching full:emit
99 static inline void emit(const u32 insn, struct jit_ctx *ctx) in emit() function
115 emit(A64_MOVN(is64, reg, (u16)~lo, 0), ctx); in emit_a64_mov_i()
117 emit(A64_MOVN(is64, reg, (u16)~hi, 16), ctx); in emit_a64_mov_i()
119 emit(A64_MOVK(is64, reg, lo, 0), ctx); in emit_a64_mov_i()
122 emit(A64_MOVZ(is64, reg, lo, 0), ctx); in emit_a64_mov_i()
124 emit(A64_MOVK(is64, reg, hi, 16), ctx); in emit_a64_mov_i()
150 emit(A64_MOVN(1, reg, (rev_tmp >> shift) & 0xffff, shift), ctx); in emit_a64_mov_i64()
152 emit(A64_MOVZ(1, reg, (nrm_tmp >> shift) & 0xffff, shift), ctx); in emit_a64_mov_i64()
156 emit(A64_MOVK(1, reg, (nrm_tmp >> shift) & 0xffff, shift), ctx); in emit_a64_mov_i64()
164 emit(insn, ctx); in emit_bti()
178 emit(A64_MOVN(1, reg, ~tmp & 0xffff, shift), ctx); in emit_addr_mov_i64()
182 emit(A64_MOVK(1, reg, tmp & 0xffff, shift), ctx); in emit_addr_mov_i64()
191 * emit indirect call in should_emit_indirect_call()
207 emit(insn, ctx); in emit_direct_call()
216 emit(A64_BLR(tmp), ctx); in emit_indirect_call()
274 emit(A64_ADD_I(is64, dst, src, imm), ctx); in emit_a64_add_i()
276 emit(A64_SUB_I(is64, dst, src, -imm), ctx); in emit_a64_add_i()
279 emit(A64_ADD(is64, dst, src, tmp), ctx); in emit_a64_add_i()
343 emit(A64_PUSH(A64_ZR, ptr, A64_SP), ctx); in prepare_bpf_tail_call_cnt()
344 emit(A64_MOV(1, ptr, A64_SP), ctx); in prepare_bpf_tail_call_cnt()
346 emit(A64_PUSH(ptr, ptr, A64_SP), ctx); in prepare_bpf_tail_call_cnt()
408 emit(A64_PUSH(A64_R(19), A64_R(20), A64_SP), ctx); in push_callee_regs()
409 emit(A64_PUSH(A64_R(21), A64_R(22), A64_SP), ctx); in push_callee_regs()
410 emit(A64_PUSH(A64_R(23), A64_R(24), A64_SP), ctx); in push_callee_regs()
411 emit(A64_PUSH(A64_R(25), A64_R(26), A64_SP), ctx); in push_callee_regs()
412 emit(A64_PUSH(A64_R(27), A64_R(28), A64_SP), ctx); in push_callee_regs()
418 emit(A64_PUSH(reg1, reg2, A64_SP), ctx); in push_callee_regs()
423 emit(A64_PUSH(reg1, A64_ZR, A64_SP), ctx); in push_callee_regs()
441 emit(A64_POP(A64_R(27), A64_R(28), A64_SP), ctx); in pop_callee_regs()
442 emit(A64_POP(A64_R(25), A64_R(26), A64_SP), ctx); in pop_callee_regs()
443 emit(A64_POP(A64_R(23), A64_R(24), A64_SP), ctx); in pop_callee_regs()
444 emit(A64_POP(A64_R(21), A64_R(22), A64_SP), ctx); in pop_callee_regs()
445 emit(A64_POP(A64_R(19), A64_R(20), A64_SP), ctx); in pop_callee_regs()
450 emit(A64_POP(reg1, A64_ZR, A64_SP), ctx); in pop_callee_regs()
456 emit(A64_POP(reg1, reg2, A64_SP), ctx); in pop_callee_regs()
511 emit(A64_MOV(1, A64_R(9), A64_LR), ctx); in build_prologue()
512 emit(A64_NOP, ctx); in build_prologue()
517 emit(A64_PACIASP, ctx); in build_prologue()
520 emit(A64_PUSH(A64_FP, A64_LR, A64_SP), ctx); in build_prologue()
521 emit(A64_MOV(1, A64_FP, A64_SP), ctx); in build_prologue()
541 emit(A64_MOV(1, A64_FP, A64_R(2)), ctx); in build_prologue()
549 emit(A64_SUB_I(1, A64_SP, A64_FP, 96), ctx); in build_prologue()
554 emit(A64_MOV(1, fp, A64_SP), ctx); in build_prologue()
561 emit(A64_SUB_I(1, A64_SP, A64_SP, ctx->stack_size), ctx); in build_prologue()
589 emit(A64_LDR32(tmp, r2, tmp), ctx); in emit_bpf_tail_call()
590 emit(A64_MOV(0, r3, r3), ctx); in emit_bpf_tail_call()
591 emit(A64_CMP(0, r3, tmp), ctx); in emit_bpf_tail_call()
593 emit(A64_NOP, ctx); in emit_bpf_tail_call()
600 emit(A64_LDR64I(tcc, ptr, 0), ctx); in emit_bpf_tail_call()
601 emit(A64_CMP(1, tcc, tmp), ctx); in emit_bpf_tail_call()
603 emit(A64_NOP, ctx); in emit_bpf_tail_call()
606 emit(A64_ADD_I(1, tcc, tcc, 1), ctx); in emit_bpf_tail_call()
614 emit(A64_ADD(1, tmp, r2, tmp), ctx); in emit_bpf_tail_call()
615 emit(A64_LSL(1, prg, r3, 3), ctx); in emit_bpf_tail_call()
616 emit(A64_LDR64(prg, tmp, prg), ctx); in emit_bpf_tail_call()
618 emit(A64_NOP, ctx); in emit_bpf_tail_call()
621 emit(A64_STR64I(tcc, ptr, 0), ctx); in emit_bpf_tail_call()
625 emit(A64_ADD_I(1, A64_SP, A64_SP, ctx->stack_size), ctx); in emit_bpf_tail_call()
632 emit(A64_LDR64(tmp, prg, tmp), ctx); in emit_bpf_tail_call()
633 emit(A64_ADD_I(1, tmp, tmp, sizeof(u32) * PROLOGUE_OFFSET), ctx); in emit_bpf_tail_call()
634 emit(A64_BR(tmp), ctx); in emit_bpf_tail_call()
669 emit(A64_ADD(1, tmp, reg, arena_vm_base), ctx); in emit_lse_atomic()
676 emit(A64_STADD(isdw, reg, src), ctx); in emit_lse_atomic()
679 emit(A64_MVN(isdw, tmp2, src), ctx); in emit_lse_atomic()
680 emit(A64_STCLR(isdw, reg, tmp2), ctx); in emit_lse_atomic()
683 emit(A64_STSET(isdw, reg, src), ctx); in emit_lse_atomic()
686 emit(A64_STEOR(isdw, reg, src), ctx); in emit_lse_atomic()
690 emit(A64_LDADDAL(isdw, src, reg, src), ctx); in emit_lse_atomic()
693 emit(A64_MVN(isdw, tmp2, src), ctx); in emit_lse_atomic()
694 emit(A64_LDCLRAL(isdw, src, reg, tmp2), ctx); in emit_lse_atomic()
697 emit(A64_LDSETAL(isdw, src, reg, src), ctx); in emit_lse_atomic()
700 emit(A64_LDEORAL(isdw, src, reg, src), ctx); in emit_lse_atomic()
704 emit(A64_SWPAL(isdw, src, reg, src), ctx); in emit_lse_atomic()
708 emit(A64_CASAL(isdw, src, reg, bpf2a64[BPF_REG_0]), ctx); in emit_lse_atomic()
753 emit(A64_LDXR(isdw, tmp2, reg), ctx); in emit_ll_sc_atomic()
755 emit(A64_ADD(isdw, tmp2, tmp2, src), ctx); in emit_ll_sc_atomic()
757 emit(A64_AND(isdw, tmp2, tmp2, src), ctx); in emit_ll_sc_atomic()
759 emit(A64_ORR(isdw, tmp2, tmp2, src), ctx); in emit_ll_sc_atomic()
761 emit(A64_EOR(isdw, tmp2, tmp2, src), ctx); in emit_ll_sc_atomic()
762 emit(A64_STXR(isdw, tmp2, reg, tmp3), ctx); in emit_ll_sc_atomic()
765 emit(A64_CBNZ(0, tmp3, jmp_offset), ctx); in emit_ll_sc_atomic()
773 emit(A64_MOV(isdw, ax, src), ctx); in emit_ll_sc_atomic()
774 emit(A64_LDXR(isdw, src, reg), ctx); in emit_ll_sc_atomic()
776 emit(A64_ADD(isdw, tmp2, src, ax), ctx); in emit_ll_sc_atomic()
778 emit(A64_AND(isdw, tmp2, src, ax), ctx); in emit_ll_sc_atomic()
780 emit(A64_ORR(isdw, tmp2, src, ax), ctx); in emit_ll_sc_atomic()
782 emit(A64_EOR(isdw, tmp2, src, ax), ctx); in emit_ll_sc_atomic()
783 emit(A64_STLXR(isdw, tmp2, reg, tmp3), ctx); in emit_ll_sc_atomic()
786 emit(A64_CBNZ(0, tmp3, jmp_offset), ctx); in emit_ll_sc_atomic()
787 emit(A64_DMB_ISH, ctx); in emit_ll_sc_atomic()
790 emit(A64_MOV(isdw, tmp2, src), ctx); in emit_ll_sc_atomic()
791 emit(A64_LDXR(isdw, src, reg), ctx); in emit_ll_sc_atomic()
792 emit(A64_STLXR(isdw, tmp2, reg, tmp3), ctx); in emit_ll_sc_atomic()
795 emit(A64_CBNZ(0, tmp3, jmp_offset), ctx); in emit_ll_sc_atomic()
796 emit(A64_DMB_ISH, ctx); in emit_ll_sc_atomic()
801 emit(A64_MOV(isdw, tmp2, r0), ctx); in emit_ll_sc_atomic()
802 emit(A64_LDXR(isdw, r0, reg), ctx); in emit_ll_sc_atomic()
803 emit(A64_EOR(isdw, tmp3, r0, tmp2), ctx); in emit_ll_sc_atomic()
806 emit(A64_CBNZ(isdw, tmp3, jmp_offset), ctx); in emit_ll_sc_atomic()
807 emit(A64_STLXR(isdw, src, reg, tmp3), ctx); in emit_ll_sc_atomic()
810 emit(A64_CBNZ(0, tmp3, jmp_offset), ctx); in emit_ll_sc_atomic()
811 emit(A64_DMB_ISH, ctx); in emit_ll_sc_atomic()
856 emit(A64_NOP, ctx); in build_plt()
860 emit(A64_LDR64LIT(tmp, 2 * AARCH64_INSN_SIZE), ctx); in build_plt()
861 emit(A64_BR(tmp), ctx); in build_plt()
874 emit(A64_ADD_I(1, A64_SP, A64_SP, ctx->stack_size), ctx); in build_epilogue()
878 emit(A64_POP(A64_ZR, ptr, A64_SP), ctx); in build_epilogue()
881 emit(A64_POP(A64_FP, A64_LR, A64_SP), ctx); in build_epilogue()
884 emit(A64_MOV(1, A64_R(0), r0), ctx); in build_epilogue()
888 emit(A64_AUTIASP, ctx); in build_epilogue()
890 emit(A64_RET(A64_LR), ctx); in build_epilogue()
1018 emit(A64_MOV(0, tmp, src), ctx); // 32-bit mov clears the upper 32 bits in build_insn()
1020 emit(A64_LSL(1, dst, dst, 32), ctx); in build_insn()
1021 emit(A64_CBZ(1, tmp, 2), ctx); in build_insn()
1022 emit(A64_ORR(1, tmp, dst, tmp), ctx); in build_insn()
1023 emit(A64_MOV(1, dst, tmp), ctx); in build_insn()
1027 emit(A64_MOV(1, dst, src), ctx); in build_insn()
1029 emit(A64_MRS_TPIDR_EL2(tmp), ctx); in build_insn()
1031 emit(A64_MRS_TPIDR_EL1(tmp), ctx); in build_insn()
1032 emit(A64_ADD(1, dst, dst, tmp), ctx); in build_insn()
1037 emit(A64_MOV(is64, dst, src), ctx); in build_insn()
1040 emit(A64_SXTB(is64, dst, src), ctx); in build_insn()
1043 emit(A64_SXTH(is64, dst, src), ctx); in build_insn()
1046 emit(A64_SXTW(is64, dst, src), ctx); in build_insn()
1053 emit(A64_ADD(is64, dst, dst, src), ctx); in build_insn()
1057 emit(A64_SUB(is64, dst, dst, src), ctx); in build_insn()
1061 emit(A64_AND(is64, dst, dst, src), ctx); in build_insn()
1065 emit(A64_ORR(is64, dst, dst, src), ctx); in build_insn()
1069 emit(A64_EOR(is64, dst, dst, src), ctx); in build_insn()
1073 emit(A64_MUL(is64, dst, dst, src), ctx); in build_insn()
1078 emit(A64_UDIV(is64, dst, dst, src), ctx); in build_insn()
1080 emit(A64_SDIV(is64, dst, dst, src), ctx); in build_insn()
1085 emit(A64_UDIV(is64, tmp, dst, src), ctx); in build_insn()
1087 emit(A64_SDIV(is64, tmp, dst, src), ctx); in build_insn()
1088 emit(A64_MSUB(is64, dst, dst, tmp, src), ctx); in build_insn()
1092 emit(A64_LSLV(is64, dst, dst, src), ctx); in build_insn()
1096 emit(A64_LSRV(is64, dst, dst, src), ctx); in build_insn()
1100 emit(A64_ASRV(is64, dst, dst, src), ctx); in build_insn()
1105 emit(A64_NEG(is64, dst, dst), ctx); in build_insn()
1120 emit(A64_REV16(is64, dst, dst), ctx); in build_insn()
1122 emit(A64_UXTH(is64, dst, dst), ctx); in build_insn()
1125 emit(A64_REV32(0, dst, dst), ctx); in build_insn()
1129 emit(A64_REV64(dst, dst), ctx); in build_insn()
1137 emit(A64_UXTH(is64, dst, dst), ctx); in build_insn()
1141 emit(A64_UXTW(is64, dst, dst), ctx); in build_insn()
1161 emit(A64_SUB_I(is64, dst, dst, imm), ctx); in build_insn()
1163 emit(A64_ADD_I(is64, dst, dst, -imm), ctx); in build_insn()
1166 emit(A64_SUB(is64, dst, dst, tmp), ctx); in build_insn()
1173 emit(a64_insn, ctx); in build_insn()
1176 emit(A64_AND(is64, dst, dst, tmp), ctx); in build_insn()
1183 emit(a64_insn, ctx); in build_insn()
1186 emit(A64_ORR(is64, dst, dst, tmp), ctx); in build_insn()
1193 emit(a64_insn, ctx); in build_insn()
1196 emit(A64_EOR(is64, dst, dst, tmp), ctx); in build_insn()
1202 emit(A64_MUL(is64, dst, dst, tmp), ctx); in build_insn()
1208 emit(A64_UDIV(is64, dst, dst, tmp), ctx); in build_insn()
1210 emit(A64_SDIV(is64, dst, dst, tmp), ctx); in build_insn()
1216 emit(A64_UDIV(is64, tmp, dst, tmp2), ctx); in build_insn()
1218 emit(A64_SDIV(is64, tmp, dst, tmp2), ctx); in build_insn()
1219 emit(A64_MSUB(is64, dst, dst, tmp, tmp2), ctx); in build_insn()
1223 emit(A64_LSL(is64, dst, dst, imm), ctx); in build_insn()
1227 emit(A64_LSR(is64, dst, dst, imm), ctx); in build_insn()
1231 emit(A64_ASR(is64, dst, dst, imm), ctx); in build_insn()
1242 emit(A64_B(jmp_offset), ctx); in build_insn()
1265 emit(A64_CMP(is64, dst, src), ctx); in build_insn()
1304 emit(A64_B_(jmp_cond, jmp_offset), ctx); in build_insn()
1308 emit(A64_TST(is64, dst, src), ctx); in build_insn()
1332 emit(A64_CMP_I(is64, dst, imm), ctx); in build_insn()
1334 emit(A64_CMN_I(is64, dst, -imm), ctx); in build_insn()
1337 emit(A64_CMP(is64, dst, tmp), ctx); in build_insn()
1344 emit(a64_insn, ctx); in build_insn()
1347 emit(A64_TST(is64, dst, tmp), ctx); in build_insn()
1362 emit(A64_MRS_SP_EL0(tmp), ctx); in build_insn()
1364 emit(A64_LDR32I(r0, tmp, cpu_offset), ctx); in build_insn()
1367 emit(A64_LDR32(r0, tmp, tmp2), ctx); in build_insn()
1375 emit(A64_MRS_SP_EL0(r0), ctx); in build_insn()
1384 emit(A64_MOV(1, r0, A64_R(0)), ctx); in build_insn()
1400 emit(A64_B(jmp_offset), ctx); in build_insn()
1439 emit(A64_ADD(1, tmp2, src, arena_vm_base), ctx); in build_insn()
1455 emit(A64_LDRSWI(dst, src_adj, off_adj), ctx); in build_insn()
1457 emit(A64_LDR32I(dst, src_adj, off_adj), ctx); in build_insn()
1461 emit(A64_LDRSW(dst, src, tmp), ctx); in build_insn()
1463 emit(A64_LDR32(dst, src, tmp), ctx); in build_insn()
1469 emit(A64_LDRSHI(dst, src_adj, off_adj), ctx); in build_insn()
1471 emit(A64_LDRHI(dst, src_adj, off_adj), ctx); in build_insn()
1475 emit(A64_LDRSH(dst, src, tmp), ctx); in build_insn()
1477 emit(A64_LDRH(dst, src, tmp), ctx); in build_insn()
1483 emit(A64_LDRSBI(dst, src_adj, off_adj), ctx); in build_insn()
1485 emit(A64_LDRBI(dst, src_adj, off_adj), ctx); in build_insn()
1489 emit(A64_LDRSB(dst, src, tmp), ctx); in build_insn()
1491 emit(A64_LDRB(dst, src, tmp), ctx); in build_insn()
1496 emit(A64_LDR64I(dst, src_adj, off_adj), ctx); in build_insn()
1499 emit(A64_LDR64(dst, src, tmp), ctx); in build_insn()
1532 emit(A64_ADD(1, tmp2, dst, arena_vm_base), ctx); in build_insn()
1547 emit(A64_STR32I(tmp, dst_adj, off_adj), ctx); in build_insn()
1550 emit(A64_STR32(tmp, dst, tmp2), ctx); in build_insn()
1555 emit(A64_STRHI(tmp, dst_adj, off_adj), ctx); in build_insn()
1558 emit(A64_STRH(tmp, dst, tmp2), ctx); in build_insn()
1563 emit(A64_STRBI(tmp, dst_adj, off_adj), ctx); in build_insn()
1566 emit(A64_STRB(tmp, dst, tmp2), ctx); in build_insn()
1571 emit(A64_STR64I(tmp, dst_adj, off_adj), ctx); in build_insn()
1574 emit(A64_STR64(tmp, dst, tmp2), ctx); in build_insn()
1594 emit(A64_ADD(1, tmp2, dst, arena_vm_base), ctx); in build_insn()
1607 emit(A64_STR32I(src, dst_adj, off_adj), ctx); in build_insn()
1610 emit(A64_STR32(src, dst, tmp), ctx); in build_insn()
1615 emit(A64_STRHI(src, dst_adj, off_adj), ctx); in build_insn()
1618 emit(A64_STRH(src, dst, tmp), ctx); in build_insn()
1623 emit(A64_STRBI(src, dst_adj, off_adj), ctx); in build_insn()
1626 emit(A64_STRB(src, dst, tmp), ctx); in build_insn()
1631 emit(A64_STR64I(src, dst_adj, off_adj), ctx); in build_insn()
1634 emit(A64_STR64(src, dst, tmp), ctx); in build_insn()
2000 emit(A64_STR64I(A64_ZR, A64_SP, run_ctx_off + cookie_off), ctx); in invoke_bpf_prog()
2003 emit(A64_STR64I(A64_R(10), A64_SP, run_ctx_off + cookie_off), in invoke_bpf_prog()
2013 emit(A64_MOV(1, A64_R(0), A64_R(19)), ctx); in invoke_bpf_prog()
2015 emit(A64_ADD_I(1, A64_R(1), A64_SP, run_ctx_off), ctx); in invoke_bpf_prog()
2020 emit(A64_MOV(1, A64_R(20), A64_R(0)), ctx); in invoke_bpf_prog()
2026 emit(A64_NOP, ctx); in invoke_bpf_prog()
2028 emit(A64_ADD_I(1, A64_R(0), A64_SP, args_off), ctx); in invoke_bpf_prog()
2035 emit(A64_STR64I(A64_R(0), A64_SP, retval_off), ctx); in invoke_bpf_prog()
2043 emit(A64_MOV(1, A64_R(0), A64_R(19)), ctx); in invoke_bpf_prog()
2045 emit(A64_MOV(1, A64_R(1), A64_R(20)), ctx); in invoke_bpf_prog()
2047 emit(A64_ADD_I(1, A64_R(2), A64_SP, run_ctx_off), ctx); in invoke_bpf_prog()
2061 emit(A64_STR64I(A64_ZR, A64_SP, retval_off), ctx); in invoke_bpf_mod_ret()
2068 emit(A64_LDR64I(A64_R(10), A64_SP, retval_off), ctx); in invoke_bpf_mod_ret()
2073 emit(A64_NOP, ctx); in invoke_bpf_mod_ret()
2082 emit(A64_STR64I(i, A64_SP, args_off), ctx); in save_args()
2092 emit(A64_LDR64I(i, A64_SP, args_off), ctx); in restore_args()
2204 emit(A64_PUSH(A64_FP, A64_R(9), A64_SP), ctx); in prepare_trampoline()
2205 emit(A64_MOV(1, A64_FP, A64_SP), ctx); in prepare_trampoline()
2209 emit(A64_PUSH(A64_FP, A64_LR, A64_SP), ctx); in prepare_trampoline()
2210 emit(A64_MOV(1, A64_FP, A64_SP), ctx); in prepare_trampoline()
2213 emit(A64_SUB_I(1, A64_SP, A64_SP, stack_size), ctx); in prepare_trampoline()
2218 emit(A64_STR64I(A64_R(10), A64_SP, ip_off), ctx); in prepare_trampoline()
2222 emit(A64_MOVZ(1, A64_R(10), nregs, 0), ctx); in prepare_trampoline()
2223 emit(A64_STR64I(A64_R(10), A64_SP, nregs_off), ctx); in prepare_trampoline()
2229 emit(A64_STR64I(A64_R(19), A64_SP, regs_off), ctx); in prepare_trampoline()
2230 emit(A64_STR64I(A64_R(20), A64_SP, regs_off + 8), ctx); in prepare_trampoline()
2259 emit(A64_LDR64I(A64_R(10), A64_SP, retaddr_off), ctx); in prepare_trampoline()
2260 emit(A64_ADR(A64_LR, AARCH64_INSN_SIZE * 2), ctx); in prepare_trampoline()
2261 emit(A64_RET(A64_R(10)), ctx); in prepare_trampoline()
2263 emit(A64_STR64I(A64_R(0), A64_SP, retval_off), ctx); in prepare_trampoline()
2266 emit(A64_NOP, ctx); in prepare_trampoline()
2293 emit(A64_LDR64I(A64_R(19), A64_SP, regs_off), ctx); in prepare_trampoline()
2294 emit(A64_LDR64I(A64_R(20), A64_SP, regs_off + 8), ctx); in prepare_trampoline()
2297 emit(A64_LDR64I(A64_R(0), A64_SP, retval_off), ctx); in prepare_trampoline()
2300 emit(A64_MOV(1, A64_SP, A64_FP), ctx); in prepare_trampoline()
2303 emit(A64_POP(A64_FP, A64_LR, A64_SP), ctx); in prepare_trampoline()
2304 emit(A64_RET(A64_LR), ctx); in prepare_trampoline()
2307 emit(A64_POP(A64_FP, A64_LR, A64_SP), ctx); in prepare_trampoline()
2308 emit(A64_POP(A64_FP, A64_R(9), A64_SP), ctx); in prepare_trampoline()
2312 emit(A64_MOV(1, A64_LR, A64_R(9)), ctx); in prepare_trampoline()
2313 emit(A64_RET(A64_R(9)), ctx); in prepare_trampoline()
2316 emit(A64_MOV(1, A64_R(10), A64_LR), ctx); in prepare_trampoline()
2317 emit(A64_MOV(1, A64_LR, A64_R(9)), ctx); in prepare_trampoline()
2318 emit(A64_RET(A64_R(10)), ctx); in prepare_trampoline()