| .text | |
| .globl _Py_trampoline_func_start | |
| # The following assembly is equivalent to: | |
| # PyObject * | |
| # trampoline(PyThreadState *ts, _PyInterpreterFrame *f, | |
| # int throwflag, py_evaluator evaluator) | |
| # { | |
| # return evaluator(ts, f, throwflag); | |
| # } | |
| _Py_trampoline_func_start: | |
| #ifdef __x86_64__ | |
| sub $8, %rsp | |
| call *%rcx | |
| add $8, %rsp | |
| ret | |
| #endif // __x86_64__ | |
| #if defined(__aarch64__) && defined(__AARCH64EL__) && !defined(__ILP32__) | |
| // ARM64 little endian, 64bit ABI | |
| // generate with aarch64-linux-gnu-gcc 12.1 | |
| stp x29, x30, [sp, -16]! | |
| mov x29, sp | |
| blr x3 | |
| ldp x29, x30, [sp], 16 | |
| ret | |
| #endif | |
| #ifdef __riscv | |
| addi sp,sp,-16 | |
| sd ra,8(sp) | |
| jalr a3 | |
| ld ra,8(sp) | |
| addi sp,sp,16 | |
| jr ra | |
| #endif | |
| .globl _Py_trampoline_func_end | |
| _Py_trampoline_func_end: | |
| .section .note.GNU-stack,"",@progbits |