abi_loong64.h raw

   1  // Copyright 2022 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_R22_TO_R31(offset) saves R22 ~ R31 to the stack space
  11  // of ((offset)+0*8)(R3) ~ ((offset)+9*8)(R3).
  12  //
  13  // SAVE_F24_TO_F31(offset) saves F24 ~ F31 to the stack space
  14  // of ((offset)+0*8)(R3) ~ ((offset)+7*8)(R3).
  15  //
  16  // Note: g is R22
  17  
  18  #define SAVE_R22_TO_R31(offset)	\
  19  	MOVV	g,   ((offset)+(0*8))(R3)	\
  20  	MOVV	R23, ((offset)+(1*8))(R3)	\
  21  	MOVV	R24, ((offset)+(2*8))(R3)	\
  22  	MOVV	R25, ((offset)+(3*8))(R3)	\
  23  	MOVV	R26, ((offset)+(4*8))(R3)	\
  24  	MOVV	R27, ((offset)+(5*8))(R3)	\
  25  	MOVV	R28, ((offset)+(6*8))(R3)	\
  26  	MOVV	R29, ((offset)+(7*8))(R3)	\
  27  	MOVV	R30, ((offset)+(8*8))(R3)	\
  28  	MOVV	R31, ((offset)+(9*8))(R3)
  29  
  30  #define SAVE_F24_TO_F31(offset)	\
  31  	MOVD	F24, ((offset)+(0*8))(R3)	\
  32  	MOVD	F25, ((offset)+(1*8))(R3)	\
  33  	MOVD	F26, ((offset)+(2*8))(R3)	\
  34  	MOVD	F27, ((offset)+(3*8))(R3)	\
  35  	MOVD	F28, ((offset)+(4*8))(R3)	\
  36  	MOVD	F29, ((offset)+(5*8))(R3)	\
  37  	MOVD	F30, ((offset)+(6*8))(R3)	\
  38  	MOVD	F31, ((offset)+(7*8))(R3)
  39  
  40  #define RESTORE_R22_TO_R31(offset)	\
  41  	MOVV	((offset)+(0*8))(R3),  g	\
  42  	MOVV	((offset)+(1*8))(R3), R23	\
  43  	MOVV	((offset)+(2*8))(R3), R24	\
  44  	MOVV	((offset)+(3*8))(R3), R25	\
  45  	MOVV	((offset)+(4*8))(R3), R26	\
  46  	MOVV	((offset)+(5*8))(R3), R27	\
  47  	MOVV	((offset)+(6*8))(R3), R28	\
  48  	MOVV	((offset)+(7*8))(R3), R29	\
  49  	MOVV	((offset)+(8*8))(R3), R30	\
  50  	MOVV	((offset)+(9*8))(R3), R31
  51  
  52  #define RESTORE_F24_TO_F31(offset)	\
  53  	MOVD	((offset)+(0*8))(R3), F24	\
  54  	MOVD	((offset)+(1*8))(R3), F25	\
  55  	MOVD	((offset)+(2*8))(R3), F26	\
  56  	MOVD	((offset)+(3*8))(R3), F27	\
  57  	MOVD	((offset)+(4*8))(R3), F28	\
  58  	MOVD	((offset)+(5*8))(R3), F29	\
  59  	MOVD	((offset)+(6*8))(R3), F30	\
  60  	MOVD	((offset)+(7*8))(R3), F31
  61