github.com/geraldss/go/src@v0.0.0-20210511222824-ac7d0ebfc235/runtime/cgo/asm_riscv64.s (about) 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 5 // +build riscv64 6 7 #include "textflag.h" 8 9 // Called by C code generated by cmd/cgo. 10 // func crosscall2(fn, a unsafe.Pointer, n int32, ctxt uintptr) 11 // Saves C callee-saved registers and calls cgocallback with three arguments. 12 // fn is the PC of a func(a unsafe.Pointer) function. 13 TEXT crosscall2(SB),NOSPLIT|NOFRAME,$0 14 /* 15 * Push arguments for fn (X10, X11, X13), along with all callee-save 16 * registers. Note that at procedure entry the first argument is at 17 * 8(X2). 18 */ 19 ADD $(-8*31), X2 20 MOV X10, (8*1)(X2) // fn unsafe.Pointer 21 MOV X11, (8*2)(X2) // a unsafe.Pointer 22 MOV X13, (8*3)(X2) // ctxt uintptr 23 MOV X8, (8*4)(X2) 24 MOV X9, (8*5)(X2) 25 MOV X18, (8*6)(X2) 26 MOV X19, (8*7)(X2) 27 MOV X20, (8*8)(X2) 28 MOV X21, (8*9)(X2) 29 MOV X22, (8*10)(X2) 30 MOV X23, (8*11)(X2) 31 MOV X24, (8*12)(X2) 32 MOV X25, (8*13)(X2) 33 MOV X26, (8*14)(X2) 34 MOV g, (8*15)(X2) 35 MOV X3, (8*16)(X2) 36 MOV X4, (8*17)(X2) 37 MOV X1, (8*18)(X2) 38 MOVD F8, (8*19)(X2) 39 MOVD F9, (8*20)(X2) 40 MOVD F18, (8*21)(X2) 41 MOVD F19, (8*22)(X2) 42 MOVD F20, (8*23)(X2) 43 MOVD F21, (8*24)(X2) 44 MOVD F22, (8*25)(X2) 45 MOVD F23, (8*26)(X2) 46 MOVD F24, (8*27)(X2) 47 MOVD F25, (8*28)(X2) 48 MOVD F26, (8*29)(X2) 49 MOVD F27, (8*30)(X2) 50 51 // Initialize Go ABI environment 52 CALL runtimeĀ·load_g(SB) 53 CALL runtimeĀ·cgocallback(SB) 54 55 MOV (8*4)(X2), X8 56 MOV (8*5)(X2), X9 57 MOV (8*6)(X2), X18 58 MOV (8*7)(X2), X19 59 MOV (8*8)(X2), X20 60 MOV (8*9)(X2), X21 61 MOV (8*10)(X2), X22 62 MOV (8*11)(X2), X23 63 MOV (8*12)(X2), X24 64 MOV (8*13)(X2), X25 65 MOV (8*14)(X2), X26 66 MOV (8*15)(X2), g 67 MOV (8*16)(X2), X3 68 MOV (8*17)(X2), X4 69 MOV (8*18)(X2), X1 70 MOVD (8*19)(X2), F8 71 MOVD (8*20)(X2), F9 72 MOVD (8*21)(X2), F18 73 MOVD (8*22)(X2), F19 74 MOVD (8*23)(X2), F20 75 MOVD (8*24)(X2), F21 76 MOVD (8*25)(X2), F22 77 MOVD (8*26)(X2), F23 78 MOVD (8*27)(X2), F24 79 MOVD (8*28)(X2), F25 80 MOVD (8*29)(X2), F26 81 MOVD (8*30)(X2), F27 82 ADD $(8*31), X2 83 84 RET