// Copyright 2022 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. #include "textflag.h" // Called by C code generated by cmd/cgo. // func crosscall2(fn, a unsafe.Pointer, n int32, ctxt uintptr) // Saves C callee-saved registers and calls cgocallback with three arguments. // fn is the PC of a func(a unsafe.Pointer) function. TEXT crosscall2(SB),NOSPLIT|NOFRAME,$0 /* * We still need to save all callee save register as before, and then * push 3 args for fn (R4, R5, R7), skipping R6. * Also note that at procedure entry in gc world, 8(R29) will be the * first arg. */ ADDV $(-8*22), R3 MOVV R4, (8*1)(R3) // fn unsafe.Pointer MOVV R5, (8*2)(R3) // a unsafe.Pointer MOVV R7, (8*3)(R3) // ctxt uintptr MOVV R23, (8*4)(R3) MOVV R24, (8*5)(R3) MOVV R25, (8*6)(R3) MOVV R26, (8*7)(R3) MOVV R27, (8*8)(R3) MOVV R28, (8*9)(R3) MOVV R29, (8*10)(R3) MOVV R30, (8*11)(R3) MOVV g, (8*12)(R3) MOVV R1, (8*13)(R3) MOVD F24, (8*14)(R3) MOVD F25, (8*15)(R3) MOVD F26, (8*16)(R3) MOVD F27, (8*17)(R3) MOVD F28, (8*18)(R3) MOVD F29, (8*19)(R3) MOVD F30, (8*20)(R3) MOVD F31, (8*21)(R3) // Initialize Go ABI environment JAL runtimeĀ·load_g(SB) JAL runtimeĀ·cgocallback(SB) MOVV (8*4)(R3), R23 MOVV (8*5)(R3), R24 MOVV (8*6)(R3), R25 MOVV (8*7)(R3), R26 MOVV (8*8)(R3), R27 MOVV (8*9)(R3), R28 MOVV (8*10)(R3), R29 MOVV (8*11)(R3), R30 MOVV (8*12)(R3), g MOVV (8*13)(R3), R1 MOVD (8*14)(R3), F24 MOVD (8*15)(R3), F25 MOVD (8*16)(R3), F26 MOVD (8*17)(R3), F27 MOVD (8*18)(R3), F28 MOVD (8*19)(R3), F29 MOVD (8*20)(R3), F30 MOVD (8*21)(R3), F31 ADDV $(8*22), R3 RET