1// SPDX-License-Identifier: Apache-2.0
2// SPDX-FileCopyrightText: 2022 The Ebitengine Authors
3
4//go:build darwin || 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
11TEXT 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
19TEXT 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
26TEXT 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
33TEXT 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
40TEXT x_cgo_notify_runtime_init_done_trampoline(SB), NOSPLIT, $0-0
41 CALL ·x_cgo_notify_runtime_init_done(SB)
42 RET
43
44// func setg_trampoline(setg uintptr, g uintptr)
45TEXT ·setg_trampoline(SB), NOSPLIT, $0-16
46 MOVD G+8(FP), R0
47 MOVD setg+0(FP), R1
48 CALL R1
49 RET
50
51TEXT threadentry_trampoline(SB), NOSPLIT, $0-0
52 MOVD R0, 8(RSP)
53 MOVD ·threadentry_call(SB), R26
54 MOVD (R26), R2
55 CALL (R2)
56 MOVD $0, R0 // TODO: get the return value from threadentry
57 RET
58
59TEXT ·call5(SB), NOSPLIT, $0-0
60 MOVD fn+0(FP), R6
61 MOVD a1+8(FP), R0
62 MOVD a2+16(FP), R1
63 MOVD a3+24(FP), R2
64 MOVD a4+32(FP), R3
65 MOVD a5+40(FP), R4
66 CALL R6
67 MOVD R0, ret+48(FP)
68 RET