github.com/euank/go@v0.0.0-20160829210321-495514729181/src/runtime/cgo/asm_arm64.s (about) 1 // Copyright 2015 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 #include "textflag.h" 6 7 // Called by C code generated by cmd/cgo. 8 // func crosscall2(fn func(a unsafe.Pointer, n int32, ctxt uintptr), a unsafe.Pointer, n int32, ctxt uintptr) 9 // Saves C callee-saved registers and calls fn with three arguments. 10 TEXT crosscall2(SB),NOSPLIT,$-8 11 /* 12 * We still need to save all callee save register as before, and then 13 * push 3 args for fn (R1, R2, R3). 14 * Also note that at procedure entry in gc world, 8(RSP) will be the 15 * first arg. 16 * TODO(minux): use LDP/STP here if it matters. 17 */ 18 SUB $(8*24), RSP 19 MOVD R1, (8*1)(RSP) 20 MOVD R2, (8*2)(RSP) 21 MOVD R3, (8*3)(RSP) 22 MOVD R19, (8*4)(RSP) 23 MOVD R20, (8*5)(RSP) 24 MOVD R21, (8*6)(RSP) 25 MOVD R22, (8*7)(RSP) 26 MOVD R23, (8*8)(RSP) 27 MOVD R24, (8*9)(RSP) 28 MOVD R25, (8*10)(RSP) 29 MOVD R26, (8*11)(RSP) 30 MOVD R27, (8*12)(RSP) 31 MOVD g, (8*13)(RSP) 32 MOVD R29, (8*14)(RSP) 33 MOVD R30, (8*15)(RSP) 34 FMOVD F8, (8*16)(RSP) 35 FMOVD F9, (8*17)(RSP) 36 FMOVD F10, (8*18)(RSP) 37 FMOVD F11, (8*19)(RSP) 38 FMOVD F12, (8*20)(RSP) 39 FMOVD F13, (8*21)(RSP) 40 FMOVD F14, (8*22)(RSP) 41 FMOVD F15, (8*23)(RSP) 42 43 MOVD R0, R19 44 45 // Initialize Go ABI environment 46 BL runtimeĀ·reginit(SB) 47 BL runtimeĀ·load_g(SB) 48 BL (R19) 49 50 MOVD (8*1)(RSP), R1 51 MOVD (8*2)(RSP), R2 52 MOVD (8*3)(RSP), R3 53 MOVD (8*4)(RSP), R19 54 MOVD (8*5)(RSP), R20 55 MOVD (8*6)(RSP), R21 56 MOVD (8*7)(RSP), R22 57 MOVD (8*8)(RSP), R23 58 MOVD (8*9)(RSP), R24 59 MOVD (8*10)(RSP), R25 60 MOVD (8*11)(RSP), R26 61 MOVD (8*12)(RSP), R27 62 MOVD (8*13)(RSP), g 63 MOVD (8*14)(RSP), R29 64 MOVD (8*15)(RSP), R30 65 FMOVD (8*16)(RSP), F8 66 FMOVD (8*17)(RSP), F9 67 FMOVD (8*18)(RSP), F10 68 FMOVD (8*19)(RSP), F11 69 FMOVD (8*20)(RSP), F12 70 FMOVD (8*21)(RSP), F13 71 FMOVD (8*22)(RSP), F14 72 FMOVD (8*23)(RSP), F15 73 ADD $(8*24), RSP 74 RET