Text file src/crypto/internal/fips140/subtle/xor_arm.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 !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), R0
    12  	MOVW	a+4(FP), R1
    13  	MOVW	b+8(FP), R2
    14  	MOVW	n+12(FP), R3
    15  
    16  xor_32_check:
    17  	CMP	$32, R3
    18  	BLT	xor_16_check
    19  xor_32_loop:
    20  	MOVW	(R1), R4
    21  	MOVW	4(R1), R5
    22  	MOVW	8(R1), R6
    23  	MOVW	(R2), R7
    24  	MOVW	4(R2), R8
    25  	MOVW	8(R2), R9
    26  	EOR	R4, R7
    27  	EOR	R5, R8
    28  	EOR	R6, R9
    29  	MOVW	R7, (R0)
    30  	MOVW	R8, 4(R0)
    31  	MOVW	R9, 8(R0)
    32  
    33  	MOVW	12(R1), R4
    34  	MOVW	16(R1), R5
    35  	MOVW	20(R1), R6
    36  	MOVW	12(R2), R7
    37  	MOVW	16(R2), R8
    38  	MOVW	20(R2), R9
    39  	EOR	R4, R7
    40  	EOR	R5, R8
    41  	EOR	R6, R9
    42  	MOVW	R7, 12(R0)
    43  	MOVW	R8, 16(R0)
    44  	MOVW	R9, 20(R0)
    45  
    46  	MOVW	24(R1), R4
    47  	MOVW	28(R1), R5
    48  	MOVW	24(R2), R6
    49  	MOVW	28(R2), R7
    50  	EOR	 R4, R6
    51  	EOR	 R5, R7
    52  	MOVW	R6, 24(R0)
    53  	MOVW	R7, 28(R0)
    54  
    55  	ADD	$32, R1
    56  	ADD	$32, R2
    57  	ADD	$32, R0
    58  	SUB	$32, R3
    59  	CMP	$32, R3
    60  	BGE	xor_32_loop
    61  	CMP	$0, R3
    62  	BEQ	end
    63  
    64  xor_16_check:
    65  	CMP	$16, R3
    66  	BLT	xor_8_check
    67  xor_16:
    68  	MOVW	(R1), R4
    69  	MOVW	4(R1), R5
    70  	MOVW	(R2), R6
    71  	MOVW	4(R2), R7
    72  	EOR	R4, R6
    73  	EOR	R5, R7
    74  	MOVW	R6, (R0)
    75  	MOVW	R7, 4(R0)
    76  
    77  	MOVW	8(R1), R4
    78  	MOVW	12(R1), R5
    79  	MOVW	8(R2), R6
    80  	MOVW	12(R2), R7
    81  	EOR	R4, R6
    82  	EOR	R5, R7
    83  	MOVW	R6, 8(R0)
    84  	MOVW	R7, 12(R0)
    85  	ADD	$16, R1
    86  	ADD	$16, R2
    87  	ADD	$16, R0
    88  	SUB	$16, R3
    89  	CMP	$0, R3
    90  	BEQ	end
    91  
    92  xor_8_check:
    93  	CMP	$8, R3
    94  	BLT	xor_4_check
    95  xor_8:
    96  	MOVW	(R1), R4
    97  	MOVW	4(R1), R5
    98  	MOVW	(R2), R6
    99  	MOVW	4(R2), R7
   100  	EOR	R4, R6
   101  	EOR	R5, R7
   102  	MOVW	R6, (R0)
   103  	MOVW	R7, 4(R0)
   104  
   105  	ADD	$8, R0
   106  	ADD	$8, R1
   107  	ADD	$8, R2
   108  	SUB	$8, R3
   109  	CMP	$0, R3
   110  	BEQ	end
   111  
   112  xor_4_check:
   113  	CMP	$4, R3
   114  	BLT	xor_2_check
   115  xor_4:
   116  	MOVW	(R1), R4
   117  	MOVW	(R2), R5
   118  	EOR	R4, R5
   119  	MOVW	R5, (R0)
   120  	ADD	$4, R1
   121  	ADD	$4, R2
   122  	ADD	$4, R0
   123  	SUB	$4, R3
   124  	CMP	$0, R3
   125  	BEQ	end
   126  
   127  xor_2_check:
   128  	CMP	$2, R3
   129  	BLT	xor_1
   130  xor_2:
   131  	MOVH	(R1), R4
   132  	MOVH	(R2), R5
   133  	EOR	R4, R5
   134  	MOVH	R5, (R0)
   135  	ADD	$2, R1
   136  	ADD	$2, R2
   137  	ADD	$2, R0
   138  	SUB	$2, R3
   139  	CMP	$0, R3
   140  	BEQ	end
   141  
   142  xor_1:
   143  	MOVB	(R1), R4
   144  	MOVB	(R2), R5
   145  	EOR	R4, R5
   146  	MOVB	R5, (R0)
   147  
   148  end:
   149  	RET
   150  

View as plain text