trampolines_riscv64.s raw
1 // SPDX-License-Identifier: Apache-2.0
2 // SPDX-FileCopyrightText: 2026 The Ebitengine Authors
3
4 //go:build !cgo && linux
5
6 #include "textflag.h"
7 #include "go_asm.h"
8
9 // these trampolines map the gcc ABI to Go ABI and then calls into the Go equivalent functions.
10 // X5 is used as temporary register.
11
12 TEXT x_cgo_init_trampoline(SB), NOSPLIT, $16
13 MOV X10, 8(SP)
14 MOV X11, 16(SP)
15 MOV ·x_cgo_init_call(SB), X5
16 MOV (X5), X5
17 CALL X5
18 RET
19
20 TEXT x_cgo_thread_start_trampoline(SB), NOSPLIT, $8
21 MOV X10, 8(SP)
22 MOV ·x_cgo_thread_start_call(SB), X5
23 MOV (X5), X5
24 CALL X5
25 RET
26
27 TEXT x_cgo_setenv_trampoline(SB), NOSPLIT, $8
28 MOV X10, 8(SP)
29 MOV ·x_cgo_setenv_call(SB), X5
30 MOV (X5), X5
31 CALL X5
32 RET
33
34 TEXT x_cgo_unsetenv_trampoline(SB), NOSPLIT, $8
35 MOV X10, 8(SP)
36 MOV ·x_cgo_unsetenv_call(SB), X5
37 MOV (X5), X5
38 CALL X5
39 RET
40
41 TEXT x_cgo_notify_runtime_init_done_trampoline(SB), NOSPLIT, $0
42 CALL ·x_cgo_notify_runtime_init_done(SB)
43 RET
44
45 TEXT x_cgo_bindm_trampoline(SB), NOSPLIT, $0
46 CALL ·x_cgo_bindm(SB)
47 RET
48
49 // func setg_trampoline(setg uintptr, g uintptr)
50 TEXT ·setg_trampoline(SB), NOSPLIT, $0
51 MOV gp+8(FP), X10
52 MOV setg+0(FP), X5
53 CALL X5
54 RET
55
56 TEXT threadentry_trampoline(SB), NOSPLIT, $16
57 MOV X10, 8(SP)
58 MOV ·threadentry_call(SB), X5
59 MOV (X5), X5
60 CALL X5
61 RET
62
63 TEXT ·call5(SB), NOSPLIT, $0-48
64 MOV fn+0(FP), X5
65 MOV a1+8(FP), X10
66 MOV a2+16(FP), X11
67 MOV a3+24(FP), X12
68 MOV a4+32(FP), X13
69 MOV a5+40(FP), X14
70 CALL X5
71 MOV X10, ret+48(FP)
72 RET
73