github.com/xushiwei/go@v0.0.0-20130601165731-2b9d83f45bc9/src/pkg/runtime/cgo/asm_arm.s (about) 1 // Copyright 2012 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 /* 6 * void crosscall2(void (*fn)(void*, int32), void*, int32) 7 * Save registers and call fn with two arguments. 8 */ 9 TEXT crosscall2(SB),7,$-4 10 /* 11 * We still need to save all callee save register as before, and then 12 * push 2 args for fn (R1 and R2). 13 * Also note that at procedure entry in 5c/5g world, 4(R13) will be the 14 * first arg, so we must push another dummy reg (R0) for 0(R13). 15 * Additionally, cgo_tls_set_gm will clobber R0, so we need to save R0 16 * nevertheless. 17 */ 18 MOVM.WP [R0, R1, R2, R4, R5, R6, R7, R8, R9, R10, R11, R12, R14], (R13) 19 MOVW _cgo_load_gm(SB), R0 20 BL (R0) 21 MOVW PC, R14 22 MOVW 0(R13), PC 23 MOVM.IAW (R13), [R0, R1, R2, R4, R5, R6, R7, R8, R9, R10, R11, R12, PC]