Text file src/runtime/secret_loong64.s

     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  #include "go_asm.h"
     6  #include "textflag.h"
     7  #include "funcdata.h"
     8  
     9  TEXT ·secretEraseRegisters(SB),NOFRAME|NOSPLIT,$0-0
    10  	MOVV	R0, R4
    11  	MOVV	R0, R29
    12  	JMP ·secretEraseRegistersMcall(SB)
    13  
    14  // Mcall requires an argument in R4 and does not have a
    15  // stack frame to spill into. Additionally, there is no stack
    16  // to spill the link register into. This function deliberately
    17  // doesn't clear R4 and R29, and Mcall uses R29 as a link register.
    18  TEXT ·secretEraseRegistersMcall(SB),NOFRAME|NOSPLIT,$0-0
    19  	MOVBU internal∕cpu·Loong64+const_offsetLOONG64HasLASX(SB), R5
    20  	BNE R5, eraseLasx
    21  	MOVBU internal∕cpu·Loong64+const_offsetLOONG64HasLSX(SB), R5
    22  	BNE R5, eraseLsx
    23  
    24  	// floating-point registers
    25  	MOVV	R0, F0
    26  	MOVV	R0, F1
    27  	MOVV	R0, F2
    28  	MOVV	R0, F3
    29  	MOVV	R0, F4
    30  	MOVV	R0, F5
    31  	MOVV	R0, F6
    32  	MOVV	R0, F7
    33  	MOVV	R0, F8
    34  	MOVV	R0, F9
    35  	MOVV	R0, F10
    36  	MOVV	R0, F11
    37  	MOVV	R0, F12
    38  	MOVV	R0, F13
    39  	MOVV	R0, F14
    40  	MOVV	R0, F15
    41  	MOVV	R0, F16
    42  	MOVV	R0, F17
    43  	MOVV	R0, F18
    44  	MOVV	R0, F19
    45  	MOVV	R0, F20
    46  	MOVV	R0, F21
    47  	MOVV	R0, F22
    48  	MOVV	R0, F23
    49  	MOVV	R0, F24
    50  	MOVV	R0, F25
    51  	MOVV	R0, F26
    52  	MOVV	R0, F27
    53  	MOVV	R0, F28
    54  	MOVV	R0, F29
    55  	MOVV	R0, F30
    56  	MOVV	R0, F31
    57  	JMP	eraseInt
    58  
    59  	// lsx registers
    60  eraseLsx:
    61  	VXORV	V0,  V0
    62  	VXORV	V1,  V1
    63  	VXORV	V2,  V2
    64  	VXORV	V4,  V3
    65  	VXORV	V4,  V4
    66  	VXORV	V5,  V5
    67  	VXORV	V6,  V6
    68  	VXORV	V7,  V7
    69  	VXORV	V8,  V8
    70  	VXORV	V9,  V9
    71  	VXORV	V10, V10
    72  	VXORV	V11, V11
    73  	VXORV	V12, V12
    74  	VXORV	V13, V13
    75  	VXORV	V14, V14
    76  	VXORV	V15, V15
    77  	VXORV	V16, V16
    78  	VXORV	V17, V17
    79  	VXORV	V18, V18
    80  	VXORV	V19, V19
    81  	VXORV	V20, V20
    82  	VXORV	V21, V21
    83  	VXORV	V22, V22
    84  	VXORV	V23, V23
    85  	VXORV	V24, V24
    86  	VXORV	V25, V25
    87  	VXORV	V26, V26
    88  	VXORV	V27, V27
    89  	VXORV	V28, V28
    90  	VXORV	V29, V29
    91  	VXORV	V30, V30
    92  	VXORV	V31, V31
    93  	JMP	eraseInt
    94  
    95  	// lasx registers
    96  eraseLasx:
    97  	XVXORV	X0, X0
    98  	XVXORV	X1, X1
    99  	XVXORV	X2, X2
   100  	XVXORV	X3, X3
   101  	XVXORV	X4, X4
   102  	XVXORV	X5, X5
   103  	XVXORV	X6, X6
   104  	XVXORV	X7, X7
   105  	XVXORV	X8, X8
   106  	XVXORV	X9, X9
   107  	XVXORV	X10, X10
   108  	XVXORV	X11, X11
   109  	XVXORV	X12, X12
   110  	XVXORV	X13, X13
   111  	XVXORV	X14, X14
   112  	XVXORV	X15, X15
   113  	XVXORV	X16, X16
   114  	XVXORV	X17, X17
   115  	XVXORV	X18, X18
   116  	XVXORV	X19, X19
   117  	XVXORV	X20, X20
   118  	XVXORV	X21, X21
   119  	XVXORV	X22, X22
   120  	XVXORV	X23, X23
   121  	XVXORV	X24, X24
   122  	XVXORV	X25, X25
   123  	XVXORV	X26, X26
   124  	XVXORV	X27, X27
   125  	XVXORV	X28, X28
   126  	XVXORV	X29, X29
   127  	XVXORV	X30, X30
   128  	XVXORV	X31, X31
   129  
   130  eraseInt:
   131  	// integer registers
   132  	//   R1 = link pointer (return address)
   133  	//   R2 = TP
   134  	//   R3 = stack pointer
   135  	//   R4
   136  	//   R22 = g
   137  	//   R29 used for extra link register in mcall where we can't spill
   138  
   139  	XOR	R5, R5
   140  	XOR	R6, R6
   141  	XOR	R7, R7
   142  	XOR	R8, R8
   143  	XOR	R9, R9
   144  	XOR	R10, R10
   145  	XOR	R11, R11
   146  	XOR	R12, R12
   147  	XOR	R13, R13
   148  	XOR	R14, R14
   149  	XOR	R15, R15
   150  	XOR	R16, R16
   151  	XOR	R17, R17
   152  	XOR	R18, R18
   153  	XOR	R19, R19
   154  	XOR	R20, R20
   155  	XOR	R21, R21
   156  	XOR	R23, R23
   157  	XOR	R24, R24
   158  	XOR	R25, R25
   159  	XOR	R26, R26
   160  	XOR	R27, R27
   161  	XOR	R28, R28
   162  	XOR	R30, R30
   163  	XOR	R31, R31
   164  
   165  	// misc registers
   166  	MOVV	R0, FCC0
   167  	MOVV	R0, FCC1
   168  	MOVV	R0, FCC2
   169  	MOVV	R0, FCC3
   170  	MOVV	R0, FCC4
   171  	MOVV	R0, FCC5
   172  	MOVV	R0, FCC6
   173  	MOVV	R0, FCC7
   174  	MOVV	R0, FCSR0
   175  	RET
   176  

View as plain text