Text file src/runtime/cgo/gcc_riscv64.S

     1  // Copyright 2020 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  .file "gcc_riscv64.S"
     6  
     7  /*
     8   * void crosscall1(void (*fn)(void), void (*setg_gcc)(void *g), void *g)
     9   *
    10   * Calling into the gc tool chain, where all registers are caller save.
    11   * Called from standard RISCV ELF psABI, where x8-x9, x18-x27, f8-f9 and
    12   * f18-f27 are callee-save, so they must be saved explicitly, along with
    13   * x1 (LR).
    14   */
    15  .globl crosscall1
    16  crosscall1:
    17  	sd	x1, -200(sp)
    18  	addi	sp, sp, -200
    19  	sd	x8, 8(sp)
    20  	sd	x9, 16(sp)
    21  	sd	x18, 24(sp)
    22  	sd	x19, 32(sp)
    23  	sd	x20, 40(sp)
    24  	sd	x21, 48(sp)
    25  	sd	x22, 56(sp)
    26  	sd	x23, 64(sp)
    27  	sd	x24, 72(sp)
    28  	sd	x25, 80(sp)
    29  	sd	x26, 88(sp)
    30  	sd	x27, 96(sp)
    31  	fsd	f8, 104(sp)
    32  	fsd	f9, 112(sp)
    33  	fsd	f18, 120(sp)
    34  	fsd	f19, 128(sp)
    35  	fsd	f20, 136(sp)
    36  	fsd	f21, 144(sp)
    37  	fsd	f22, 152(sp)
    38  	fsd	f23, 160(sp)
    39  	fsd	f24, 168(sp)
    40  	fsd	f25, 176(sp)
    41  	fsd	f26, 184(sp)
    42  	fsd	f27, 192(sp)
    43  
    44  	// a0 = *fn, a1 = *setg_gcc, a2 = *g
    45  	mv	s1, a0
    46  	mv	s0, a1
    47  	mv	a0, a2
    48  	jalr	ra, s0	// call setg_gcc (clobbers x30 aka g)
    49  	jalr	ra, s1	// call fn
    50  
    51  	ld	x1, 0(sp)
    52  	ld	x8, 8(sp)
    53  	ld	x9, 16(sp)
    54  	ld	x18, 24(sp)
    55  	ld	x19, 32(sp)
    56  	ld	x20, 40(sp)
    57  	ld	x21, 48(sp)
    58  	ld	x22, 56(sp)
    59  	ld	x23, 64(sp)
    60  	ld	x24, 72(sp)
    61  	ld	x25, 80(sp)
    62  	ld	x26, 88(sp)
    63  	ld	x27, 96(sp)
    64  	fld	f8, 104(sp)
    65  	fld	f9, 112(sp)
    66  	fld	f18, 120(sp)
    67  	fld	f19, 128(sp)
    68  	fld	f20, 136(sp)
    69  	fld	f21, 144(sp)
    70  	fld	f22, 152(sp)
    71  	fld	f23, 160(sp)
    72  	fld	f24, 168(sp)
    73  	fld	f25, 176(sp)
    74  	fld	f26, 184(sp)
    75  	fld	f27, 192(sp)
    76  	addi	sp, sp, 200
    77  
    78  	jr	ra
    79  
    80  #ifdef __ELF__
    81  .section .note.GNU-stack,"",%progbits
    82  #endif
    83  

View as plain text