trampolines_loong64.s 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. // SPDX-License-Identifier: Apache-2.0
  2. // SPDX-FileCopyrightText: 2025 The Ebitengine Authors
  3. //go:build !cgo && linux
  4. #include "textflag.h"
  5. #include "go_asm.h"
  6. #include "abi_loong64.h"
  7. // these trampolines map the gcc ABI to Go ABI and then calls into the Go equivalent functions.
  8. // R23 is used as temporary register.
  9. TEXT x_cgo_init_trampoline(SB), NOSPLIT, $16
  10. MOVV R4, 8(R3)
  11. MOVV R5, 16(R3)
  12. MOVV ·x_cgo_init_call(SB), R23
  13. MOVV (R23), R23
  14. CALL (R23)
  15. RET
  16. TEXT x_cgo_thread_start_trampoline(SB), NOSPLIT, $8
  17. MOVV R4, 8(R3)
  18. MOVV ·x_cgo_thread_start_call(SB), R23
  19. MOVV (R23), R23
  20. CALL (R23)
  21. RET
  22. TEXT x_cgo_setenv_trampoline(SB), NOSPLIT, $8
  23. MOVV R4, 8(R3)
  24. MOVV ·x_cgo_setenv_call(SB), R23
  25. MOVV (R23), R23
  26. CALL (R23)
  27. RET
  28. TEXT x_cgo_unsetenv_trampoline(SB), NOSPLIT, $8
  29. MOVV R4, 8(R3)
  30. MOVV ·x_cgo_unsetenv_call(SB), R23
  31. MOVV (R23), R23
  32. CALL (R23)
  33. RET
  34. TEXT x_cgo_notify_runtime_init_done_trampoline(SB), NOSPLIT, $0
  35. CALL ·x_cgo_notify_runtime_init_done(SB)
  36. RET
  37. TEXT x_cgo_bindm_trampoline(SB), NOSPLIT, $0
  38. CALL ·x_cgo_bindm(SB)
  39. RET
  40. // func setg_trampoline(setg uintptr, g uintptr)
  41. TEXT ·setg_trampoline(SB), NOSPLIT, $0
  42. MOVV G+8(FP), R4
  43. MOVV setg+0(FP), R23
  44. CALL (R23)
  45. RET
  46. TEXT threadentry_trampoline(SB), NOSPLIT, $0
  47. // See crosscall2.
  48. ADDV $(-23*8), R3
  49. MOVV R4, (1*8)(R3) // fn unsafe.Pointer
  50. MOVV R5, (2*8)(R3) // a unsafe.Pointer
  51. MOVV R7, (3*8)(R3) // ctxt uintptr
  52. SAVE_R22_TO_R31((4*8))
  53. SAVE_F24_TO_F31((14*8))
  54. MOVV R1, (22*8)(R3)
  55. MOVV ·threadentry_call(SB), R23
  56. MOVV (R23), R23
  57. CALL (R23)
  58. RESTORE_R22_TO_R31((4*8))
  59. RESTORE_F24_TO_F31((14*8))
  60. MOVV (22*8)(R3), R1
  61. ADDV $(23*8), R3
  62. RET
  63. TEXT ·call5(SB), NOSPLIT, $0-0
  64. MOVV fn+0(FP), R23
  65. MOVV a1+8(FP), R4
  66. MOVV a2+16(FP), R5
  67. MOVV a3+24(FP), R6
  68. MOVV a4+32(FP), R7
  69. MOVV a5+40(FP), R8
  70. CALL (R23)
  71. MOVV R4, ret+48(FP)
  72. RET