Text file src/crypto/internal/fips140/subtle/xor_mips64x.s

     1  // Copyright 2025 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  //go:build (mips64 || mips64le) && !purego
     6  
     7  #include "textflag.h"
     8  
     9  // func xorBytes(dst, a, b *byte, n int)
    10  TEXT ·xorBytes(SB), NOSPLIT|NOFRAME, $0
    11  	MOVV	dst+0(FP), R1
    12  	MOVV	a+8(FP), R2
    13  	MOVV	b+16(FP), R3
    14  	MOVV	n+24(FP), R4
    15  
    16  xor_64_check:
    17  	SGTU	$64, R4, R5 // R5 = 1 if (64 > R4)
    18  	BNE	R5, xor_32_check
    19  xor_64:
    20  	MOVV	(R2), R6
    21  	MOVV	8(R2), R7
    22  	MOVV	16(R2), R8
    23  	MOVV	24(R2), R9
    24  	MOVV	(R3), R10
    25  	MOVV	8(R3), R11
    26  	MOVV	16(R3), R12
    27  	MOVV	24(R3), R13
    28  	XOR	R6, R10
    29  	XOR	R7, R11
    30  	XOR	R8, R12
    31  	XOR	R9, R13
    32  	MOVV	R10, (R1)
    33  	MOVV	R11, 8(R1)
    34  	MOVV	R12, 16(R1)
    35  	MOVV	R13, 24(R1)
    36  	MOVV	32(R2), R6
    37  	MOVV	40(R2), R7
    38  	MOVV	48(R2), R8
    39  	MOVV	56(R2), R9
    40  	MOVV	32(R3), R10
    41  	MOVV	40(R3), R11
    42  	MOVV	48(R3), R12
    43  	MOVV	56(R3), R13
    44  	XOR	R6, R10
    45  	XOR	R7, R11
    46  	XOR	R8, R12
    47  	XOR	R9, R13
    48  	MOVV	R10, 32(R1)
    49  	MOVV	R11, 40(R1)
    50  	MOVV	R12, 48(R1)
    51  	MOVV	R13, 56(R1)
    52  	ADDV	$64, R2
    53  	ADDV	$64, R3
    54  	ADDV	$64, R1
    55  	SUBV	$64, R4
    56  	SGTU	$64, R4, R5
    57  	BEQ	R0, R5, xor_64
    58  	BEQ	R0, R4, end
    59  
    60  xor_32_check:
    61  	SGTU	$32, R4, R5
    62  	BNE	R5, xor_16_check
    63  xor_32:
    64  	MOVV	(R2), R6
    65  	MOVV	8(R2), R7
    66  	MOVV	16(R2), R8
    67  	MOVV	24(R2), R9
    68  	MOVV	(R3), R10
    69  	MOVV	8(R3), R11
    70  	MOVV	16(R3), R12
    71  	MOVV	24(R3), R13
    72  	XOR	R6, R10
    73  	XOR	R7, R11
    74  	XOR	R8, R12
    75  	XOR	R9, R13
    76  	MOVV	R10, (R1)
    77  	MOVV	R11, 8(R1)
    78  	MOVV	R12, 16(R1)
    79  	MOVV	R13, 24(R1)
    80  	ADDV	$32, R2
    81  	ADDV	$32, R3
    82  	ADDV	$32, R1
    83  	SUBV	$32, R4
    84  	BEQ	R0, R4, end
    85  
    86  xor_16_check:
    87  	SGTU	$16, R4, R5
    88  	BNE	R5, xor_8_check
    89  xor_16:
    90  	MOVV	(R2), R6
    91  	MOVV	8(R2), R7
    92  	MOVV	(R3), R8
    93  	MOVV	8(R3), R9
    94  	XOR	R6, R8
    95  	XOR	R7, R9
    96  	MOVV	R8, (R1)
    97  	MOVV	R9, 8(R1)
    98  	ADDV	$16, R2
    99  	ADDV	$16, R3
   100  	ADDV	$16, R1
   101  	SUBV	$16, R4
   102  	BEQ	R0, R4, end
   103  
   104  xor_8_check:
   105  	SGTU	$8, R4, R5
   106  	BNE	R5, xor_4_check
   107  xor_8:
   108  	MOVV	(R2), R6
   109  	MOVV	(R3), R7
   110  	XOR	R6, R7
   111  	MOVV	R7, (R1)
   112  	ADDV	$8, R1
   113  	ADDV	$8, R2
   114  	ADDV	$8, R3
   115  	SUBV	$8, R4
   116  	BEQ	R0, R4, end
   117  
   118  xor_4_check:
   119  	SGTU	$4, R4, R5
   120  	BNE	R5, xor_2_check
   121  xor_4:
   122  	MOVW	(R2), R6
   123  	MOVW	(R3), R7
   124  	XOR	R6, R7
   125  	MOVW	R7, (R1)
   126  	ADDV	$4, R2
   127  	ADDV	$4, R3
   128  	ADDV	$4, R1
   129  	SUBV	$4, R4
   130  	BEQ	R0, R4, end
   131  
   132  xor_2_check:
   133  	SGTU	$2, R4, R5
   134  	BNE	R5, xor_1
   135  xor_2:
   136  	MOVH	(R2), R6
   137  	MOVH	(R3), R7
   138  	XOR	R6, R7
   139  	MOVH	R7, (R1)
   140  	ADDV	$2, R2
   141  	ADDV	$2, R3
   142  	ADDV	$2, R1
   143  	SUBV	$2, R4
   144  	BEQ	R0, R4, end
   145  
   146  xor_1:
   147  	MOVB	(R2), R6
   148  	MOVB	(R3), R7
   149  	XOR	R6, R7
   150  	MOVB	R7, (R1)
   151  
   152  end:
   153  	RET
   154  

View as plain text