...

Text file src/runtime/cgo/asm_arm64.s

     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|NOFRAME,$0
    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Ā·load_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

View as plain text