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