Text file src/crypto/internal/fips140/subtle/xor_mipsx.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 (mips || mipsle) && !purego
     6  
     7  #include "textflag.h"
     8  
     9  // func xorBytes(dst, a, b *byte, n int)
    10  TEXT ·xorBytes(SB), NOSPLIT|NOFRAME, $0
    11  	MOVW	dst+0(FP), R1
    12  	MOVW	a+4(FP), R2
    13  	MOVW	b+8(FP), R3
    14  	MOVW	n+12(FP), R4
    15  
    16  	SGTU	$64, R4, R5 // R5 = 1 if (64 > R4)
    17  	BNE	R5, xor_32_check
    18  xor_64:
    19  	MOVW	(R2), R6
    20  	MOVW	4(R2), R7
    21  	MOVW	8(R2), R8
    22  	MOVW	12(R2), R9
    23  	MOVW	(R3), R10
    24  	MOVW	4(R3), R11
    25  	MOVW	8(R3), R12
    26  	MOVW	12(R3), R13
    27  	XOR	R6, R10
    28  	XOR	R7, R11
    29  	XOR	R8, R12
    30  	XOR	R9, R13
    31  	MOVW	R10, (R1)
    32  	MOVW	R11, 4(R1)
    33  	MOVW	R12, 8(R1)
    34  	MOVW	R13, 12(R1)
    35  	MOVW	16(R2), R6
    36  	MOVW	20(R2), R7
    37  	MOVW	24(R2), R8
    38  	MOVW	28(R2), R9
    39  	MOVW	16(R3), R10
    40  	MOVW	20(R3), R11
    41  	MOVW	24(R3), R12
    42  	MOVW	28(R3), R13
    43  	XOR	R6, R10
    44  	XOR	R7, R11
    45  	XOR	R8, R12
    46  	XOR	R9, R13
    47  	MOVW	R10, 16(R1)
    48  	MOVW	R11, 20(R1)
    49  	MOVW	R12, 24(R1)
    50  	MOVW	R13, 28(R1)
    51  	MOVW	32(R2), R6
    52  	MOVW	36(R2), R7
    53  	MOVW	40(R2), R8
    54  	MOVW	44(R2), R9
    55  	MOVW	32(R3), R10
    56  	MOVW	36(R3), R11
    57  	MOVW	40(R3), R12
    58  	MOVW	44(R3), R13
    59  	XOR	R6, R10
    60  	XOR	R7, R11
    61  	XOR	R8, R12
    62  	XOR	R9, R13
    63  	MOVW	R10, 32(R1)
    64  	MOVW	R11, 36(R1)
    65  	MOVW	R12, 40(R1)
    66  	MOVW	R13, 44(R1)
    67  	MOVW	48(R2), R6
    68  	MOVW	52(R2), R7
    69  	MOVW	56(R2), R8
    70  	MOVW	60(R2), R9
    71  	MOVW	48(R3), R10
    72  	MOVW	52(R3), R11
    73  	MOVW	56(R3), R12
    74  	MOVW	60(R3), R13
    75  	XOR	R6, R10
    76  	XOR	R7, R11
    77  	XOR	R8, R12
    78  	XOR	R9, R13
    79  	MOVW	R10, 48(R1)
    80  	MOVW	R11, 52(R1)
    81  	MOVW	R12, 56(R1)
    82  	MOVW	R13, 60(R1)
    83  	ADD	$64, R2
    84  	ADD	$64, R3
    85  	ADD	$64, R1
    86  	SUB	$64, R4
    87  	SGTU	$64, R4, R5
    88  	BEQ	R0, R5, xor_64
    89  	BEQ	R0, R4, end
    90  
    91  xor_32_check:
    92  	SGTU	$32, R4, R5
    93  	BNE	R5, xor_16_check
    94  xor_32:
    95  	MOVW	(R2), R6
    96  	MOVW	4(R2), R7
    97  	MOVW	8(R2), R8
    98  	MOVW	12(R2), R9
    99  	MOVW	(R3), R10
   100  	MOVW	4(R3), R11
   101  	MOVW	8(R3), R12
   102  	MOVW	12(R3), R13
   103  	XOR	R6, R10
   104  	XOR	R7, R11
   105  	XOR	R8, R12
   106  	XOR	R9, R13
   107  	MOVW	R10, (R1)
   108  	MOVW	R11, 4(R1)
   109  	MOVW	R12, 8(R1)
   110  	MOVW	R13, 12(R1)
   111  	MOVW	16(R2), R6
   112  	MOVW	20(R2), R7
   113  	MOVW	24(R2), R8
   114  	MOVW	28(R2), R9
   115  	MOVW	16(R3), R10
   116  	MOVW	20(R3), R11
   117  	MOVW	24(R3), R12
   118  	MOVW	28(R3), R13
   119  	XOR	R6, R10
   120  	XOR	R7, R11
   121  	XOR	R8, R12
   122  	XOR	R9, R13
   123  	MOVW	R10, 16(R1)
   124  	MOVW	R11, 20(R1)
   125  	MOVW	R12, 24(R1)
   126  	MOVW	R13, 28(R1)
   127  	ADD	$32, R2
   128  	ADD	$32, R3
   129  	ADD	$32, R1
   130  	SUB	$32, R4
   131  	BEQ	R0, R4, end
   132  
   133  xor_16_check:
   134  	SGTU	$16, R4, R5
   135  	BNE	R5, xor_8_check
   136  xor_16:
   137  	MOVW	(R2), R6
   138  	MOVW	4(R2), R7
   139  	MOVW	8(R2), R8
   140  	MOVW	12(R2), R9
   141  	MOVW	(R3), R10
   142  	MOVW	4(R3), R11
   143  	MOVW	8(R3), R12
   144  	MOVW	12(R3), R13
   145  	XOR	R6, R10
   146  	XOR	R7, R11
   147  	XOR	R8, R12
   148  	XOR	R9, R13
   149  	MOVW	R10, (R1)
   150  	MOVW	R11, 4(R1)
   151  	MOVW	R12, 8(R1)
   152  	MOVW	R13, 12(R1)
   153  	ADD	$16, R2
   154  	ADD	$16, R3
   155  	ADD	$16, R1
   156  	SUB	$16, R4
   157  	BEQ	R0, R4, end
   158  
   159  xor_8_check:
   160  	SGTU	$8, R4, R5
   161  	BNE	R5, xor_4_check
   162  xor_8:
   163  	MOVW	(R2), R6
   164  	MOVW	4(R2), R7
   165  	MOVW	(R3), R8
   166  	MOVW	4(R3), R9
   167  	XOR	R6, R8
   168  	XOR	R7, R9
   169  	MOVW	R8, (R1)
   170  	MOVW	R9, 4(R1)
   171  	ADD	$8, R1
   172  	ADD	$8, R2
   173  	ADD	$8, R3
   174  	SUB	$8, R4
   175  	BEQ	R0, R4, end
   176  
   177  xor_4_check:
   178  	SGTU	$4, R4, R5
   179  	BNE	R5, xor_2_check
   180  xor_4:
   181  	MOVW	(R2), R6
   182  	MOVW	(R3), R7
   183  	XOR	R6, R7
   184  	MOVW	R7, (R1)
   185  	ADD	$4, R2
   186  	ADD	$4, R3
   187  	ADD	$4, R1
   188  	SUB	$4, R4
   189  	BEQ	R0, R4, end
   190  
   191  xor_2_check:
   192  	SGTU	$2, R4, R5
   193  	BNE	R5, xor_1
   194  xor_2:
   195  	MOVH	(R2), R6
   196  	MOVH	(R3), R7
   197  	XOR	R6, R7
   198  	MOVH	R7, (R1)
   199  	ADD	$2, R2
   200  	ADD	$2, R3
   201  	ADD	$2, R1
   202  	SUB	$2, R4
   203  	BEQ	R0, R4, end
   204  
   205  xor_1:
   206  	MOVB	(R2), R6
   207  	MOVB	(R3), R7
   208  	XOR	R6, R7
   209  	MOVB	R7, (R1)
   210  
   211  end:
   212  	RET
   213  

View as plain text