Home | History | Annotate | Download | only in cgo
      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	runtimeload_g(SB)
     47 	BL	(R19)
     48 
     49 	MOVD	(8*1)(RSP), R1
     50 	MOVD	(8*2)(RSP), R2
     51 	MOVD	(8*3)(RSP), R3
     52 	MOVD	(8*4)(RSP), R19
     53 	MOVD	(8*5)(RSP), R20
     54 	MOVD	(8*6)(RSP), R21
     55 	MOVD	(8*7)(RSP), R22
     56 	MOVD	(8*8)(RSP), R23
     57 	MOVD	(8*9)(RSP), R24
     58 	MOVD	(8*10)(RSP), R25
     59 	MOVD	(8*11)(RSP), R26
     60 	MOVD	(8*12)(RSP), R27
     61 	MOVD	(8*13)(RSP), g
     62 	MOVD	(8*14)(RSP), R29
     63 	MOVD	(8*15)(RSP), R30
     64 	FMOVD	(8*16)(RSP), F8
     65 	FMOVD	(8*17)(RSP), F9
     66 	FMOVD	(8*18)(RSP), F10
     67 	FMOVD	(8*19)(RSP), F11
     68 	FMOVD	(8*20)(RSP), F12
     69 	FMOVD	(8*21)(RSP), F13
     70 	FMOVD	(8*22)(RSP), F14
     71 	FMOVD	(8*23)(RSP), F15
     72 	ADD	$(8*24), RSP
     73 	RET
     74