trampolines_arm64.s raw
1 // SPDX-License-Identifier: Apache-2.0
2 // SPDX-FileCopyrightText: 2022 The Ebitengine Authors
3
4 //go:build !cgo && (darwin || freebsd || 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, $0-0
12 MOVD R0, 8(RSP)
13 MOVD R1, 16(RSP)
14 MOVD ·x_cgo_init_call(SB), R26
15 MOVD (R26), R2
16 CALL (R2)
17 RET
18
19 TEXT x_cgo_thread_start_trampoline(SB), NOSPLIT, $0-0
20 MOVD R0, 8(RSP)
21 MOVD ·x_cgo_thread_start_call(SB), R26
22 MOVD (R26), R2
23 CALL (R2)
24 RET
25
26 TEXT x_cgo_setenv_trampoline(SB), NOSPLIT, $0-0
27 MOVD R0, 8(RSP)
28 MOVD ·x_cgo_setenv_call(SB), R26
29 MOVD (R26), R2
30 CALL (R2)
31 RET
32
33 TEXT x_cgo_unsetenv_trampoline(SB), NOSPLIT, $0-0
34 MOVD R0, 8(RSP)
35 MOVD ·x_cgo_unsetenv_call(SB), R26
36 MOVD (R26), R2
37 CALL (R2)
38 RET
39
40 TEXT x_cgo_notify_runtime_init_done_trampoline(SB), NOSPLIT, $0-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-16
50 MOVD G+8(FP), R0
51 MOVD setg+0(FP), R1
52 CALL R1
53 RET
54
55 TEXT threadentry_trampoline(SB), NOSPLIT, $0-0
56 MOVD R0, 8(RSP)
57 MOVD ·threadentry_call(SB), R26
58 MOVD (R26), R2
59 CALL (R2)
60 MOVD $0, R0 // TODO: get the return value from threadentry
61 RET
62
63 TEXT ·call5(SB), NOSPLIT, $0-0
64 MOVD fn+0(FP), R6
65 MOVD a1+8(FP), R0
66 MOVD a2+16(FP), R1
67 MOVD a3+24(FP), R2
68 MOVD a4+32(FP), R3
69 MOVD a5+40(FP), R4
70 CALL R6
71 MOVD R0, ret+48(FP)
72 RET
73