trampolines_riscv64.s raw

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