...

Text file src/runtime/cgo/abi_riscv64.h

Documentation: runtime/cgo

     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

View as plain text