xor_mipsx.s raw

   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