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