trampolines_loong64.s raw
1 // SPDX-License-Identifier: Apache-2.0
2 // SPDX-FileCopyrightText: 2025 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
11 TEXT x_cgo_init_trampoline(SB), NOSPLIT, $16
12 MOVV R4, 8(R3)
13 MOVV R5, 16(R3)
14 MOVV ·x_cgo_init_call(SB), R6
15 MOVV (R6), R7
16 CALL (R7)
17 RET
18
19 TEXT x_cgo_thread_start_trampoline(SB), NOSPLIT, $8
20 MOVV R4, 8(R3)
21 MOVV ·x_cgo_thread_start_call(SB), R5
22 MOVV (R5), R6
23 CALL (R6)
24 RET
25
26 TEXT x_cgo_setenv_trampoline(SB), NOSPLIT, $8
27 MOVV R4, 8(R3)
28 MOVV ·x_cgo_setenv_call(SB), R5
29 MOVV (R5), R6
30 CALL (R6)
31 RET
32
33 TEXT x_cgo_unsetenv_trampoline(SB), NOSPLIT, $8
34 MOVV R4, 8(R3)
35 MOVV ·x_cgo_unsetenv_call(SB), R5
36 MOVV (R5), R6
37 CALL (R6)
38 RET
39
40 TEXT x_cgo_notify_runtime_init_done_trampoline(SB), NOSPLIT, $0
41 CALL ·x_cgo_notify_runtime_init_done(SB)
42 RET
43
44 TEXT x_cgo_bindm_trampoline(SB), NOSPLIT, $0
45 CALL ·x_cgo_bindm(SB)
46 RET
47
48 // func setg_trampoline(setg uintptr, g uintptr)
49 TEXT ·setg_trampoline(SB), NOSPLIT, $0
50 MOVV G+8(FP), R4
51 MOVV setg+0(FP), R5
52 CALL (R5)
53 RET
54
55 TEXT threadentry_trampoline(SB), NOSPLIT, $16
56 MOVV R4, 8(R3)
57 MOVV ·threadentry_call(SB), R5
58 MOVV (R5), R6
59 CALL (R6)
60 RET
61
62 TEXT ·call5(SB), NOSPLIT, $0-0
63 MOVV fn+0(FP), R9
64 MOVV a1+8(FP), R4
65 MOVV a2+16(FP), R5
66 MOVV a3+24(FP), R6
67 MOVV a4+32(FP), R7
68 MOVV a5+40(FP), R8
69 CALL (R9)
70 MOVV R4, ret+48(FP)
71 RET
72