trampolines_riscv64.s 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. // SPDX-License-Identifier: Apache-2.0
  2. // SPDX-FileCopyrightText: 2026 The Ebitengine Authors
  3. //go:build !cgo && linux
  4. #include "textflag.h"
  5. #include "go_asm.h"
  6. // these trampolines map the gcc ABI to Go ABI and then calls into the Go equivalent functions.
  7. // X5 is used as temporary register.
  8. TEXT x_cgo_init_trampoline(SB), NOSPLIT, $16
  9. MOV X10, 8(SP)
  10. MOV X11, 16(SP)
  11. MOV ·x_cgo_init_call(SB), X5
  12. MOV (X5), X5
  13. CALL X5
  14. RET
  15. TEXT x_cgo_thread_start_trampoline(SB), NOSPLIT, $8
  16. MOV X10, 8(SP)
  17. MOV ·x_cgo_thread_start_call(SB), X5
  18. MOV (X5), X5
  19. CALL X5
  20. RET
  21. TEXT x_cgo_setenv_trampoline(SB), NOSPLIT, $8
  22. MOV X10, 8(SP)
  23. MOV ·x_cgo_setenv_call(SB), X5
  24. MOV (X5), X5
  25. CALL X5
  26. RET
  27. TEXT x_cgo_unsetenv_trampoline(SB), NOSPLIT, $8
  28. MOV X10, 8(SP)
  29. MOV ·x_cgo_unsetenv_call(SB), X5
  30. MOV (X5), X5
  31. CALL X5
  32. RET
  33. TEXT x_cgo_notify_runtime_init_done_trampoline(SB), NOSPLIT, $0
  34. CALL ·x_cgo_notify_runtime_init_done(SB)
  35. RET
  36. TEXT x_cgo_bindm_trampoline(SB), NOSPLIT, $0
  37. CALL ·x_cgo_bindm(SB)
  38. RET
  39. // func setg_trampoline(setg uintptr, g uintptr)
  40. TEXT ·setg_trampoline(SB), NOSPLIT, $0
  41. MOV gp+8(FP), X10
  42. MOV setg+0(FP), X5
  43. CALL X5
  44. RET
  45. TEXT threadentry_trampoline(SB), NOSPLIT, $16
  46. MOV X10, 8(SP)
  47. MOV ·threadentry_call(SB), X5
  48. MOV (X5), X5
  49. CALL X5
  50. RET
  51. TEXT ·call5(SB), NOSPLIT, $0-48
  52. MOV fn+0(FP), X5
  53. MOV a1+8(FP), X10
  54. MOV a2+16(FP), X11
  55. MOV a3+24(FP), X12
  56. MOV a4+32(FP), X13
  57. MOV a5+40(FP), X14
  58. CALL X5
  59. MOV X10, ret+48(FP)
  60. RET