github.com/ebitengine/purego@v0.8.0-alpha.2.0.20240512170805-6cd12240d332/internal/fakecgo/trampolines_arm64.s (about)

     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