// Copyright 2012 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 "../../../cmd/ld/textflag.h" /* * void crosscall2(void (*fn)(void*, int32), void*, int32) * Save registers and call fn with two arguments. */ TEXT crosscall2(SB),NOSPLIT,$-4 /* * We still need to save all callee save register as before, and then * push 2 args for fn (R1 and R2). * Also note that at procedure entry in 5c/5g world, 4(R13) will be the * first arg, so we must push another dummy reg (R0) for 0(R13). * Additionally, runtimeĀ·load_gm will clobber R0, so we need to save R0 * nevertheless. */ MOVM.WP [R0, R1, R2, R4, R5, R6, R7, R8, m, g, R11, R12, R14], (R13) BL runtimeĀ·load_gm(SB) MOVW PC, R14 MOVW 0(R13), PC MOVM.IAW (R13), [R0, R1, R2, R4, R5, R6, R7, R8, m, g, R11, R12, PC]