1 // Copyright 2026 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 #include "textflag.h"
6
7 // func memHash32AES(p unsafe.Pointer, h uintptr) uintptr
8 TEXT ·memHash32AES<ABIInternal>(SB),NOSPLIT|NOFRAME,$0-24
9 MOVD $·aeskeysched+0(SB), R3
10
11 VEOR V0.B16, V0.B16, V0.B16
12 VLD1 (R3), [V2.B16]
13 VLD1 (R0), V0.S[2]
14 VMOV R1, V0.D[0]
15
16 AESE V2.B16, V0.B16
17 AESMC V0.B16, V0.B16
18 AESE V2.B16, V0.B16
19 AESMC V0.B16, V0.B16
20 AESE V2.B16, V0.B16
21
22 VMOV V0.D[0], R0
23 RET
24
25 // func memHash64AES(p unsafe.Pointer, h uintptr) uintptr
26 TEXT ·memHash64AES<ABIInternal>(SB),NOSPLIT|NOFRAME,$0-24
27 MOVD $·aeskeysched+0(SB), R3
28
29 VEOR V0.B16, V0.B16, V0.B16
30 VLD1 (R3), [V2.B16]
31 VLD1 (R0), V0.D[1]
32 VMOV R1, V0.D[0]
33
34 AESE V2.B16, V0.B16
35 AESMC V0.B16, V0.B16
36 AESE V2.B16, V0.B16
37 AESMC V0.B16, V0.B16
38 AESE V2.B16, V0.B16
39
40 VMOV V0.D[0], R0
41 RET
42
43 // func memHashAES(p unsafe.Pointer, h, size uintptr) uintptr
44 TEXT ·memHashAES<ABIInternal>(SB),NOSPLIT|NOFRAME,$0-32
45 B ·aeshashbody<>(SB)
46
47 // func strHashAES(p unsafe.Pointer, h uintptr) uintptr
48 TEXT ·strHashAES<ABIInternal>(SB),NOSPLIT|NOFRAME,$0-24
49 LDP (R0), (R0, R2) // string data / length
50 B ·aeshashbody<>(SB)
51
52 // R0: data
53 // R1: seed data
54 // R2: length
55 // At return, R0 = return value
56 TEXT ·aeshashbody<>(SB),NOSPLIT|NOFRAME,$0
57 VEOR V30.B16, V30.B16, V30.B16
58 VMOV R1, V30.D[0]
59 VMOV R2, V30.D[1] // load length into seed
60
61 MOVD $·aeskeysched+0(SB), R4
62 VLD1.P 16(R4), [V0.B16]
63 AESE V30.B16, V0.B16
64 AESMC V0.B16, V0.B16
65 CMP $16, R2
66 BLO aes0to15
67 BEQ aes16
68 CMP $32, R2
69 BLS aes17to32
70 CMP $64, R2
71 BLS aes33to64
72 CMP $128, R2
73 BLS aes65to128
74 B aes129plus
75
76 aes0to15:
77 CBZ R2, aes0
78 VEOR V2.B16, V2.B16, V2.B16
79 TBZ $3, R2, less_than_8
80 VLD1.P 8(R0), V2.D[0]
81
82 less_than_8:
83 TBZ $2, R2, less_than_4
84 VLD1.P 4(R0), V2.S[2]
85
86 less_than_4:
87 TBZ $1, R2, less_than_2
88 VLD1.P 2(R0), V2.H[6]
89
90 less_than_2:
91 TBZ $0, R2, done
92 VLD1 (R0), V2.B[14]
93 done:
94 AESE V0.B16, V2.B16
95 AESMC V2.B16, V2.B16
96 AESE V0.B16, V2.B16
97 AESMC V2.B16, V2.B16
98 AESE V0.B16, V2.B16
99 AESMC V2.B16, V2.B16
100
101 VMOV V2.D[0], R0
102 RET
103
104 aes0:
105 VMOV V0.D[0], R0
106 RET
107
108 aes16:
109 VLD1 (R0), [V2.B16]
110 B done
111
112 aes17to32:
113 // make second seed
114 VLD1 (R4), [V1.B16]
115 AESE V30.B16, V1.B16
116 AESMC V1.B16, V1.B16
117 SUB $16, R2, R10
118 VLD1.P (R0)(R10), [V2.B16]
119 VLD1 (R0), [V3.B16]
120
121 AESE V0.B16, V2.B16
122 AESMC V2.B16, V2.B16
123 AESE V1.B16, V3.B16
124 AESMC V3.B16, V3.B16
125
126 AESE V0.B16, V2.B16
127 AESMC V2.B16, V2.B16
128 AESE V1.B16, V3.B16
129 AESMC V3.B16, V3.B16
130
131 AESE V0.B16, V2.B16
132 AESE V1.B16, V3.B16
133
134 VEOR V3.B16, V2.B16, V2.B16
135
136 VMOV V2.D[0], R0
137 RET
138
139 aes33to64:
140 VLD1 (R4), [V1.B16, V2.B16, V3.B16]
141 AESE V30.B16, V1.B16
142 AESMC V1.B16, V1.B16
143 AESE V30.B16, V2.B16
144 AESMC V2.B16, V2.B16
145 AESE V30.B16, V3.B16
146 AESMC V3.B16, V3.B16
147 SUB $32, R2, R10
148
149 VLD1.P (R0)(R10), [V4.B16, V5.B16]
150 VLD1 (R0), [V6.B16, V7.B16]
151
152 AESE V0.B16, V4.B16
153 AESMC V4.B16, V4.B16
154 AESE V1.B16, V5.B16
155 AESMC V5.B16, V5.B16
156 AESE V2.B16, V6.B16
157 AESMC V6.B16, V6.B16
158 AESE V3.B16, V7.B16
159 AESMC V7.B16, V7.B16
160
161 AESE V0.B16, V4.B16
162 AESMC V4.B16, V4.B16
163 AESE V1.B16, V5.B16
164 AESMC V5.B16, V5.B16
165 AESE V2.B16, V6.B16
166 AESMC V6.B16, V6.B16
167 AESE V3.B16, V7.B16
168 AESMC V7.B16, V7.B16
169
170 AESE V0.B16, V4.B16
171 AESE V1.B16, V5.B16
172 AESE V2.B16, V6.B16
173 AESE V3.B16, V7.B16
174
175 VEOR V6.B16, V4.B16, V4.B16
176 VEOR V7.B16, V5.B16, V5.B16
177 VEOR V5.B16, V4.B16, V4.B16
178
179 VMOV V4.D[0], R0
180 RET
181
182 aes65to128:
183 VLD1.P 64(R4), [V1.B16, V2.B16, V3.B16, V4.B16]
184 VLD1 (R4), [V5.B16, V6.B16, V7.B16]
185 AESE V30.B16, V1.B16
186 AESMC V1.B16, V1.B16
187 AESE V30.B16, V2.B16
188 AESMC V2.B16, V2.B16
189 AESE V30.B16, V3.B16
190 AESMC V3.B16, V3.B16
191 AESE V30.B16, V4.B16
192 AESMC V4.B16, V4.B16
193 AESE V30.B16, V5.B16
194 AESMC V5.B16, V5.B16
195 AESE V30.B16, V6.B16
196 AESMC V6.B16, V6.B16
197 AESE V30.B16, V7.B16
198 AESMC V7.B16, V7.B16
199
200 SUB $64, R2, R10
201 VLD1.P (R0)(R10), [V8.B16, V9.B16, V10.B16, V11.B16]
202 VLD1 (R0), [V12.B16, V13.B16, V14.B16, V15.B16]
203 AESE V0.B16, V8.B16
204 AESMC V8.B16, V8.B16
205 AESE V1.B16, V9.B16
206 AESMC V9.B16, V9.B16
207 AESE V2.B16, V10.B16
208 AESMC V10.B16, V10.B16
209 AESE V3.B16, V11.B16
210 AESMC V11.B16, V11.B16
211 AESE V4.B16, V12.B16
212 AESMC V12.B16, V12.B16
213 AESE V5.B16, V13.B16
214 AESMC V13.B16, V13.B16
215 AESE V6.B16, V14.B16
216 AESMC V14.B16, V14.B16
217 AESE V7.B16, V15.B16
218 AESMC V15.B16, V15.B16
219
220 AESE V0.B16, V8.B16
221 AESMC V8.B16, V8.B16
222 AESE V1.B16, V9.B16
223 AESMC V9.B16, V9.B16
224 AESE V2.B16, V10.B16
225 AESMC V10.B16, V10.B16
226 AESE V3.B16, V11.B16
227 AESMC V11.B16, V11.B16
228 AESE V4.B16, V12.B16
229 AESMC V12.B16, V12.B16
230 AESE V5.B16, V13.B16
231 AESMC V13.B16, V13.B16
232 AESE V6.B16, V14.B16
233 AESMC V14.B16, V14.B16
234 AESE V7.B16, V15.B16
235 AESMC V15.B16, V15.B16
236
237 AESE V0.B16, V8.B16
238 AESE V1.B16, V9.B16
239 AESE V2.B16, V10.B16
240 AESE V3.B16, V11.B16
241 AESE V4.B16, V12.B16
242 AESE V5.B16, V13.B16
243 AESE V6.B16, V14.B16
244 AESE V7.B16, V15.B16
245
246 VEOR V12.B16, V8.B16, V8.B16
247 VEOR V13.B16, V9.B16, V9.B16
248 VEOR V14.B16, V10.B16, V10.B16
249 VEOR V15.B16, V11.B16, V11.B16
250 VEOR V10.B16, V8.B16, V8.B16
251 VEOR V11.B16, V9.B16, V9.B16
252 VEOR V9.B16, V8.B16, V8.B16
253
254 VMOV V8.D[0], R0
255 RET
256
257 aes129plus:
258 PRFM (R0), PLDL1KEEP
259 VLD1.P 64(R4), [V1.B16, V2.B16, V3.B16, V4.B16]
260 VLD1 (R4), [V5.B16, V6.B16, V7.B16]
261 AESE V30.B16, V1.B16
262 AESMC V1.B16, V1.B16
263 AESE V30.B16, V2.B16
264 AESMC V2.B16, V2.B16
265 AESE V30.B16, V3.B16
266 AESMC V3.B16, V3.B16
267 AESE V30.B16, V4.B16
268 AESMC V4.B16, V4.B16
269 AESE V30.B16, V5.B16
270 AESMC V5.B16, V5.B16
271 AESE V30.B16, V6.B16
272 AESMC V6.B16, V6.B16
273 AESE V30.B16, V7.B16
274 AESMC V7.B16, V7.B16
275 ADD R0, R2, R10
276 SUB $128, R10, R10
277 VLD1.P 64(R10), [V8.B16, V9.B16, V10.B16, V11.B16]
278 VLD1 (R10), [V12.B16, V13.B16, V14.B16, V15.B16]
279 SUB $1, R2, R2
280 LSR $7, R2, R2
281
282 aesloop:
283 AESE V8.B16, V0.B16
284 AESMC V0.B16, V0.B16
285 AESE V9.B16, V1.B16
286 AESMC V1.B16, V1.B16
287 AESE V10.B16, V2.B16
288 AESMC V2.B16, V2.B16
289 AESE V11.B16, V3.B16
290 AESMC V3.B16, V3.B16
291 AESE V12.B16, V4.B16
292 AESMC V4.B16, V4.B16
293 AESE V13.B16, V5.B16
294 AESMC V5.B16, V5.B16
295 AESE V14.B16, V6.B16
296 AESMC V6.B16, V6.B16
297 AESE V15.B16, V7.B16
298 AESMC V7.B16, V7.B16
299
300 VLD1.P 64(R0), [V8.B16, V9.B16, V10.B16, V11.B16]
301 AESE V8.B16, V0.B16
302 AESMC V0.B16, V0.B16
303 AESE V9.B16, V1.B16
304 AESMC V1.B16, V1.B16
305 AESE V10.B16, V2.B16
306 AESMC V2.B16, V2.B16
307 AESE V11.B16, V3.B16
308 AESMC V3.B16, V3.B16
309
310 VLD1.P 64(R0), [V12.B16, V13.B16, V14.B16, V15.B16]
311 AESE V12.B16, V4.B16
312 AESMC V4.B16, V4.B16
313 AESE V13.B16, V5.B16
314 AESMC V5.B16, V5.B16
315 AESE V14.B16, V6.B16
316 AESMC V6.B16, V6.B16
317 AESE V15.B16, V7.B16
318 AESMC V7.B16, V7.B16
319 SUB $1, R2, R2
320 CBNZ R2, aesloop
321
322 AESE V8.B16, V0.B16
323 AESMC V0.B16, V0.B16
324 AESE V9.B16, V1.B16
325 AESMC V1.B16, V1.B16
326 AESE V10.B16, V2.B16
327 AESMC V2.B16, V2.B16
328 AESE V11.B16, V3.B16
329 AESMC V3.B16, V3.B16
330 AESE V12.B16, V4.B16
331 AESMC V4.B16, V4.B16
332 AESE V13.B16, V5.B16
333 AESMC V5.B16, V5.B16
334 AESE V14.B16, V6.B16
335 AESMC V6.B16, V6.B16
336 AESE V15.B16, V7.B16
337 AESMC V7.B16, V7.B16
338
339 AESE V8.B16, V0.B16
340 AESMC V0.B16, V0.B16
341 AESE V9.B16, V1.B16
342 AESMC V1.B16, V1.B16
343 AESE V10.B16, V2.B16
344 AESMC V2.B16, V2.B16
345 AESE V11.B16, V3.B16
346 AESMC V3.B16, V3.B16
347 AESE V12.B16, V4.B16
348 AESMC V4.B16, V4.B16
349 AESE V13.B16, V5.B16
350 AESMC V5.B16, V5.B16
351 AESE V14.B16, V6.B16
352 AESMC V6.B16, V6.B16
353 AESE V15.B16, V7.B16
354 AESMC V7.B16, V7.B16
355
356 AESE V8.B16, V0.B16
357 AESE V9.B16, V1.B16
358 AESE V10.B16, V2.B16
359 AESE V11.B16, V3.B16
360 AESE V12.B16, V4.B16
361 AESE V13.B16, V5.B16
362 AESE V14.B16, V6.B16
363 AESE V15.B16, V7.B16
364
365 VEOR V0.B16, V1.B16, V0.B16
366 VEOR V2.B16, V3.B16, V2.B16
367 VEOR V4.B16, V5.B16, V4.B16
368 VEOR V6.B16, V7.B16, V6.B16
369 VEOR V0.B16, V2.B16, V0.B16
370 VEOR V4.B16, V6.B16, V4.B16
371 VEOR V4.B16, V0.B16, V0.B16
372
373 VMOV V0.D[0], R0
374 RET
375
View as plain text