Text file src/runtime/cgo/abi_riscv64.h

     1  // Copyright 2026 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  // Macros for transitioning from the host ABI to Go ABI0.
     6  //
     7  // These macros save and restore the callee-saved registers
     8  // from the stack, but they don't adjust stack pointer, so
     9  // the user should prepare stack space in advance.
    10  // SAVE_GPR(offset) saves X8, X9, X18-X27 to the stack space
    11  // of ((offset)+0*8)(X2) ~ ((offset)+11*8)(X2).
    12  //
    13  // SAVE_FPR(offset) saves F8, F9, F18-F27 to the stack space
    14  // of ((offset)+0*8)(X2) ~ ((offset)+11*8)(X2).
    15  //
    16  // Note: g is X27
    17  
    18  #define SAVE_GPR(offset) \
    19  	MOV X8, ((offset)+0*8)(X2)   \
    20  	MOV X9, ((offset)+1*8)(X2)   \
    21  	MOV X18, ((offset)+2*8)(X2)  \
    22  	MOV X19, ((offset)+3*8)(X2)  \
    23  	MOV X20, ((offset)+4*8)(X2)  \
    24  	MOV X21, ((offset)+5*8)(X2)  \
    25  	MOV X22, ((offset)+6*8)(X2)  \
    26  	MOV X23, ((offset)+7*8)(X2)  \
    27  	MOV X24, ((offset)+8*8)(X2)  \
    28  	MOV X25, ((offset)+9*8)(X2)  \
    29  	MOV X26, ((offset)+10*8)(X2) \
    30  	MOV g, ((offset)+11*8)(X2)
    31  
    32  #define RESTORE_GPR(offset) \
    33  	MOV ((offset)+0*8)(X2), X8   \
    34  	MOV ((offset)+1*8)(X2), X9   \
    35  	MOV ((offset)+2*8)(X2), X18  \
    36  	MOV ((offset)+3*8)(X2), X19  \
    37  	MOV ((offset)+4*8)(X2), X20  \
    38  	MOV ((offset)+5*8)(X2), X21  \
    39  	MOV ((offset)+6*8)(X2), X22  \
    40  	MOV ((offset)+7*8)(X2), X23  \
    41  	MOV ((offset)+8*8)(X2), X24  \
    42  	MOV ((offset)+9*8)(X2), X25  \
    43  	MOV ((offset)+10*8)(X2), X26 \
    44  	MOV ((offset)+11*8)(X2), g
    45  
    46  #define SAVE_FPR(offset) \
    47  	MOVD F8, ((offset)+0*8)(X2)   \
    48  	MOVD F9, ((offset)+1*8)(X2)   \
    49  	MOVD F18, ((offset)+2*8)(X2)  \
    50  	MOVD F19, ((offset)+3*8)(X2)  \
    51  	MOVD F20, ((offset)+4*8)(X2)  \
    52  	MOVD F21, ((offset)+5*8)(X2)  \
    53  	MOVD F22, ((offset)+6*8)(X2)  \
    54  	MOVD F23, ((offset)+7*8)(X2)  \
    55  	MOVD F24, ((offset)+8*8)(X2)  \
    56  	MOVD F25, ((offset)+9*8)(X2)  \
    57  	MOVD F26, ((offset)+10*8)(X2) \
    58  	MOVD F27, ((offset)+11*8)(X2)
    59  
    60  #define RESTORE_FPR(offset) \
    61  	MOVD ((offset)+0*8)(X2), F8   \
    62  	MOVD ((offset)+1*8)(X2), F9   \
    63  	MOVD ((offset)+2*8)(X2), F18  \
    64  	MOVD ((offset)+3*8)(X2), F19  \
    65  	MOVD ((offset)+4*8)(X2), F20  \
    66  	MOVD ((offset)+5*8)(X2), F21  \
    67  	MOVD ((offset)+6*8)(X2), F22  \
    68  	MOVD ((offset)+7*8)(X2), F23  \
    69  	MOVD ((offset)+8*8)(X2), F24  \
    70  	MOVD ((offset)+9*8)(X2), F25  \
    71  	MOVD ((offset)+10*8)(X2), F26 \
    72  	MOVD ((offset)+11*8)(X2), F27
    73  

View as plain text