asm_riscv64.s 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. // Copyright 2020 The Go Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style
  3. // license that can be found in the LICENSE file.
  4. #include "textflag.h"
  5. // Called by C code generated by cmd/cgo.
  6. // func crosscall2(fn, a unsafe.Pointer, n int32, ctxt uintptr)
  7. // Saves C callee-saved registers and calls cgocallback with three arguments.
  8. // fn is the PC of a func(a unsafe.Pointer) function.
  9. TEXT crosscall2(SB), NOSPLIT|NOFRAME, $0
  10. /*
  11. * Push arguments for fn (X10, X11, X13), along with all callee-save
  12. * registers. Note that at procedure entry the first argument is at
  13. * 8(X2).
  14. */
  15. ADD $(-8*29), X2
  16. MOV X10, (8*1)(X2) // fn unsafe.Pointer
  17. MOV X11, (8*2)(X2) // a unsafe.Pointer
  18. MOV X13, (8*3)(X2) // ctxt uintptr
  19. MOV X8, (8*4)(X2)
  20. MOV X9, (8*5)(X2)
  21. MOV X18, (8*6)(X2)
  22. MOV X19, (8*7)(X2)
  23. MOV X20, (8*8)(X2)
  24. MOV X21, (8*9)(X2)
  25. MOV X22, (8*10)(X2)
  26. MOV X23, (8*11)(X2)
  27. MOV X24, (8*12)(X2)
  28. MOV X25, (8*13)(X2)
  29. MOV X26, (8*14)(X2)
  30. MOV g, (8*15)(X2)
  31. MOV X1, (8*16)(X2)
  32. MOVD F8, (8*17)(X2)
  33. MOVD F9, (8*18)(X2)
  34. MOVD F18, (8*19)(X2)
  35. MOVD F19, (8*20)(X2)
  36. MOVD F20, (8*21)(X2)
  37. MOVD F21, (8*22)(X2)
  38. MOVD F22, (8*23)(X2)
  39. MOVD F23, (8*24)(X2)
  40. MOVD F24, (8*25)(X2)
  41. MOVD F25, (8*26)(X2)
  42. MOVD F26, (8*27)(X2)
  43. MOVD F27, (8*28)(X2)
  44. // Initialize Go ABI environment
  45. CALL runtime·load_g(SB)
  46. CALL runtime·cgocallback(SB)
  47. MOV (8*4)(X2), X8
  48. MOV (8*5)(X2), X9
  49. MOV (8*6)(X2), X18
  50. MOV (8*7)(X2), X19
  51. MOV (8*8)(X2), X20
  52. MOV (8*9)(X2), X21
  53. MOV (8*10)(X2), X22
  54. MOV (8*11)(X2), X23
  55. MOV (8*12)(X2), X24
  56. MOV (8*13)(X2), X25
  57. MOV (8*14)(X2), X26
  58. MOV (8*15)(X2), g
  59. MOV (8*16)(X2), X1
  60. MOVD (8*17)(X2), F8
  61. MOVD (8*18)(X2), F9
  62. MOVD (8*19)(X2), F18
  63. MOVD (8*20)(X2), F19
  64. MOVD (8*21)(X2), F20
  65. MOVD (8*22)(X2), F21
  66. MOVD (8*23)(X2), F22
  67. MOVD (8*24)(X2), F23
  68. MOVD (8*25)(X2), F24
  69. MOVD (8*26)(X2), F25
  70. MOVD (8*27)(X2), F26
  71. MOVD (8*28)(X2), F27
  72. ADD $(8*29), X2
  73. RET