uncle_blake3 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (40) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE.md +27 -0
  3. data/README.md +89 -0
  4. data/ext/Rakefile +55 -0
  5. data/ext/binding/uncle_blake3.c +41 -0
  6. data/ext/blake3/c/Makefile.testing +82 -0
  7. data/ext/blake3/c/README.md +316 -0
  8. data/ext/blake3/c/blake3.c +616 -0
  9. data/ext/blake3/c/blake3.h +60 -0
  10. data/ext/blake3/c/blake3_avx2.c +326 -0
  11. data/ext/blake3/c/blake3_avx2_x86-64_unix.S +1815 -0
  12. data/ext/blake3/c/blake3_avx2_x86-64_windows_gnu.S +1817 -0
  13. data/ext/blake3/c/blake3_avx2_x86-64_windows_msvc.asm +1828 -0
  14. data/ext/blake3/c/blake3_avx512.c +1207 -0
  15. data/ext/blake3/c/blake3_avx512_x86-64_unix.S +2585 -0
  16. data/ext/blake3/c/blake3_avx512_x86-64_windows_gnu.S +2615 -0
  17. data/ext/blake3/c/blake3_avx512_x86-64_windows_msvc.asm +2634 -0
  18. data/ext/blake3/c/blake3_dispatch.c +276 -0
  19. data/ext/blake3/c/blake3_impl.h +282 -0
  20. data/ext/blake3/c/blake3_neon.c +351 -0
  21. data/ext/blake3/c/blake3_portable.c +160 -0
  22. data/ext/blake3/c/blake3_sse2.c +566 -0
  23. data/ext/blake3/c/blake3_sse2_x86-64_unix.S +2291 -0
  24. data/ext/blake3/c/blake3_sse2_x86-64_windows_gnu.S +2332 -0
  25. data/ext/blake3/c/blake3_sse2_x86-64_windows_msvc.asm +2350 -0
  26. data/ext/blake3/c/blake3_sse41.c +560 -0
  27. data/ext/blake3/c/blake3_sse41_x86-64_unix.S +2028 -0
  28. data/ext/blake3/c/blake3_sse41_x86-64_windows_gnu.S +2069 -0
  29. data/ext/blake3/c/blake3_sse41_x86-64_windows_msvc.asm +2089 -0
  30. data/ext/blake3/c/example.c +37 -0
  31. data/ext/blake3/c/main.c +166 -0
  32. data/ext/blake3/c/test.py +97 -0
  33. data/lib/uncle_blake3/binding.rb +20 -0
  34. data/lib/uncle_blake3/build/loader.rb +40 -0
  35. data/lib/uncle_blake3/build/platform.rb +37 -0
  36. data/lib/uncle_blake3/build.rb +4 -0
  37. data/lib/uncle_blake3/digest.rb +119 -0
  38. data/lib/uncle_blake3/version.rb +5 -0
  39. data/lib/uncle_blake3.rb +7 -0
  40. metadata +112 -0
@@ -0,0 +1,2585 @@
1
+ #if defined(__ELF__) && defined(__linux__)
2
+ .section .note.GNU-stack,"",%progbits
3
+ #endif
4
+
5
+ #if defined(__ELF__) && defined(__CET__) && defined(__has_include)
6
+ #if __has_include(<cet.h>)
7
+ #include <cet.h>
8
+ #endif
9
+ #endif
10
+
11
+ #if !defined(_CET_ENDBR)
12
+ #define _CET_ENDBR
13
+ #endif
14
+
15
+ .intel_syntax noprefix
16
+ .global _blake3_hash_many_avx512
17
+ .global blake3_hash_many_avx512
18
+ .global blake3_compress_in_place_avx512
19
+ .global _blake3_compress_in_place_avx512
20
+ .global blake3_compress_xof_avx512
21
+ .global _blake3_compress_xof_avx512
22
+
23
+ #ifdef __APPLE__
24
+ .text
25
+ #else
26
+ .section .text
27
+ #endif
28
+ .p2align 6
29
+ _blake3_hash_many_avx512:
30
+ blake3_hash_many_avx512:
31
+ _CET_ENDBR
32
+ push r15
33
+ push r14
34
+ push r13
35
+ push r12
36
+ push rbx
37
+ push rbp
38
+ mov rbp, rsp
39
+ sub rsp, 144
40
+ and rsp, 0xFFFFFFFFFFFFFFC0
41
+ neg r9
42
+ kmovw k1, r9d
43
+ vmovd xmm0, r8d
44
+ vpbroadcastd ymm0, xmm0
45
+ shr r8, 32
46
+ vmovd xmm1, r8d
47
+ vpbroadcastd ymm1, xmm1
48
+ vmovdqa ymm4, ymm1
49
+ vmovdqa ymm5, ymm1
50
+ vpaddd ymm2, ymm0, ymmword ptr [ADD0+rip]
51
+ vpaddd ymm3, ymm0, ymmword ptr [ADD0+32+rip]
52
+ vpcmpltud k2, ymm2, ymm0
53
+ vpcmpltud k3, ymm3, ymm0
54
+ vpaddd ymm4 {k2}, ymm4, dword ptr [ADD1+rip] {1to8}
55
+ vpaddd ymm5 {k3}, ymm5, dword ptr [ADD1+rip] {1to8}
56
+ knotw k2, k1
57
+ vmovdqa32 ymm2 {k2}, ymm0
58
+ vmovdqa32 ymm3 {k2}, ymm0
59
+ vmovdqa32 ymm4 {k2}, ymm1
60
+ vmovdqa32 ymm5 {k2}, ymm1
61
+ vmovdqa ymmword ptr [rsp], ymm2
62
+ vmovdqa ymmword ptr [rsp+0x1*0x20], ymm3
63
+ vmovdqa ymmword ptr [rsp+0x2*0x20], ymm4
64
+ vmovdqa ymmword ptr [rsp+0x3*0x20], ymm5
65
+ shl rdx, 6
66
+ mov qword ptr [rsp+0x80], rdx
67
+ cmp rsi, 16
68
+ jc 3f
69
+ 2:
70
+ vpbroadcastd zmm0, dword ptr [rcx]
71
+ vpbroadcastd zmm1, dword ptr [rcx+0x1*0x4]
72
+ vpbroadcastd zmm2, dword ptr [rcx+0x2*0x4]
73
+ vpbroadcastd zmm3, dword ptr [rcx+0x3*0x4]
74
+ vpbroadcastd zmm4, dword ptr [rcx+0x4*0x4]
75
+ vpbroadcastd zmm5, dword ptr [rcx+0x5*0x4]
76
+ vpbroadcastd zmm6, dword ptr [rcx+0x6*0x4]
77
+ vpbroadcastd zmm7, dword ptr [rcx+0x7*0x4]
78
+ movzx eax, byte ptr [rbp+0x38]
79
+ movzx ebx, byte ptr [rbp+0x40]
80
+ or eax, ebx
81
+ xor edx, edx
82
+ .p2align 5
83
+ 9:
84
+ movzx ebx, byte ptr [rbp+0x48]
85
+ or ebx, eax
86
+ add rdx, 64
87
+ cmp rdx, qword ptr [rsp+0x80]
88
+ cmove eax, ebx
89
+ mov dword ptr [rsp+0x88], eax
90
+ mov r8, qword ptr [rdi]
91
+ mov r9, qword ptr [rdi+0x8]
92
+ mov r10, qword ptr [rdi+0x10]
93
+ mov r11, qword ptr [rdi+0x18]
94
+ mov r12, qword ptr [rdi+0x40]
95
+ mov r13, qword ptr [rdi+0x48]
96
+ mov r14, qword ptr [rdi+0x50]
97
+ mov r15, qword ptr [rdi+0x58]
98
+ vmovdqu32 ymm16, ymmword ptr [rdx+r8-0x2*0x20]
99
+ vinserti64x4 zmm16, zmm16, ymmword ptr [rdx+r12-0x2*0x20], 0x01
100
+ vmovdqu32 ymm17, ymmword ptr [rdx+r9-0x2*0x20]
101
+ vinserti64x4 zmm17, zmm17, ymmword ptr [rdx+r13-0x2*0x20], 0x01
102
+ vpunpcklqdq zmm8, zmm16, zmm17
103
+ vpunpckhqdq zmm9, zmm16, zmm17
104
+ vmovdqu32 ymm18, ymmword ptr [rdx+r10-0x2*0x20]
105
+ vinserti64x4 zmm18, zmm18, ymmword ptr [rdx+r14-0x2*0x20], 0x01
106
+ vmovdqu32 ymm19, ymmword ptr [rdx+r11-0x2*0x20]
107
+ vinserti64x4 zmm19, zmm19, ymmword ptr [rdx+r15-0x2*0x20], 0x01
108
+ vpunpcklqdq zmm10, zmm18, zmm19
109
+ vpunpckhqdq zmm11, zmm18, zmm19
110
+ mov r8, qword ptr [rdi+0x20]
111
+ mov r9, qword ptr [rdi+0x28]
112
+ mov r10, qword ptr [rdi+0x30]
113
+ mov r11, qword ptr [rdi+0x38]
114
+ mov r12, qword ptr [rdi+0x60]
115
+ mov r13, qword ptr [rdi+0x68]
116
+ mov r14, qword ptr [rdi+0x70]
117
+ mov r15, qword ptr [rdi+0x78]
118
+ vmovdqu32 ymm16, ymmword ptr [rdx+r8-0x2*0x20]
119
+ vinserti64x4 zmm16, zmm16, ymmword ptr [rdx+r12-0x2*0x20], 0x01
120
+ vmovdqu32 ymm17, ymmword ptr [rdx+r9-0x2*0x20]
121
+ vinserti64x4 zmm17, zmm17, ymmword ptr [rdx+r13-0x2*0x20], 0x01
122
+ vpunpcklqdq zmm12, zmm16, zmm17
123
+ vpunpckhqdq zmm13, zmm16, zmm17
124
+ vmovdqu32 ymm18, ymmword ptr [rdx+r10-0x2*0x20]
125
+ vinserti64x4 zmm18, zmm18, ymmword ptr [rdx+r14-0x2*0x20], 0x01
126
+ vmovdqu32 ymm19, ymmword ptr [rdx+r11-0x2*0x20]
127
+ vinserti64x4 zmm19, zmm19, ymmword ptr [rdx+r15-0x2*0x20], 0x01
128
+ vpunpcklqdq zmm14, zmm18, zmm19
129
+ vpunpckhqdq zmm15, zmm18, zmm19
130
+ vmovdqa32 zmm27, zmmword ptr [INDEX0+rip]
131
+ vmovdqa32 zmm31, zmmword ptr [INDEX1+rip]
132
+ vshufps zmm16, zmm8, zmm10, 136
133
+ vshufps zmm17, zmm12, zmm14, 136
134
+ vmovdqa32 zmm20, zmm16
135
+ vpermt2d zmm16, zmm27, zmm17
136
+ vpermt2d zmm20, zmm31, zmm17
137
+ vshufps zmm17, zmm8, zmm10, 221
138
+ vshufps zmm30, zmm12, zmm14, 221
139
+ vmovdqa32 zmm21, zmm17
140
+ vpermt2d zmm17, zmm27, zmm30
141
+ vpermt2d zmm21, zmm31, zmm30
142
+ vshufps zmm18, zmm9, zmm11, 136
143
+ vshufps zmm8, zmm13, zmm15, 136
144
+ vmovdqa32 zmm22, zmm18
145
+ vpermt2d zmm18, zmm27, zmm8
146
+ vpermt2d zmm22, zmm31, zmm8
147
+ vshufps zmm19, zmm9, zmm11, 221
148
+ vshufps zmm8, zmm13, zmm15, 221
149
+ vmovdqa32 zmm23, zmm19
150
+ vpermt2d zmm19, zmm27, zmm8
151
+ vpermt2d zmm23, zmm31, zmm8
152
+ mov r8, qword ptr [rdi]
153
+ mov r9, qword ptr [rdi+0x8]
154
+ mov r10, qword ptr [rdi+0x10]
155
+ mov r11, qword ptr [rdi+0x18]
156
+ mov r12, qword ptr [rdi+0x40]
157
+ mov r13, qword ptr [rdi+0x48]
158
+ mov r14, qword ptr [rdi+0x50]
159
+ mov r15, qword ptr [rdi+0x58]
160
+ vmovdqu32 ymm24, ymmword ptr [r8+rdx-0x1*0x20]
161
+ vinserti64x4 zmm24, zmm24, ymmword ptr [r12+rdx-0x1*0x20], 0x01
162
+ vmovdqu32 ymm25, ymmword ptr [r9+rdx-0x1*0x20]
163
+ vinserti64x4 zmm25, zmm25, ymmword ptr [r13+rdx-0x1*0x20], 0x01
164
+ vpunpcklqdq zmm8, zmm24, zmm25
165
+ vpunpckhqdq zmm9, zmm24, zmm25
166
+ vmovdqu32 ymm24, ymmword ptr [r10+rdx-0x1*0x20]
167
+ vinserti64x4 zmm24, zmm24, ymmword ptr [r14+rdx-0x1*0x20], 0x01
168
+ vmovdqu32 ymm25, ymmword ptr [r11+rdx-0x1*0x20]
169
+ vinserti64x4 zmm25, zmm25, ymmword ptr [r15+rdx-0x1*0x20], 0x01
170
+ vpunpcklqdq zmm10, zmm24, zmm25
171
+ vpunpckhqdq zmm11, zmm24, zmm25
172
+ prefetcht0 [r8+rdx+0x80]
173
+ prefetcht0 [r12+rdx+0x80]
174
+ prefetcht0 [r9+rdx+0x80]
175
+ prefetcht0 [r13+rdx+0x80]
176
+ prefetcht0 [r10+rdx+0x80]
177
+ prefetcht0 [r14+rdx+0x80]
178
+ prefetcht0 [r11+rdx+0x80]
179
+ prefetcht0 [r15+rdx+0x80]
180
+ mov r8, qword ptr [rdi+0x20]
181
+ mov r9, qword ptr [rdi+0x28]
182
+ mov r10, qword ptr [rdi+0x30]
183
+ mov r11, qword ptr [rdi+0x38]
184
+ mov r12, qword ptr [rdi+0x60]
185
+ mov r13, qword ptr [rdi+0x68]
186
+ mov r14, qword ptr [rdi+0x70]
187
+ mov r15, qword ptr [rdi+0x78]
188
+ vmovdqu32 ymm24, ymmword ptr [r8+rdx-0x1*0x20]
189
+ vinserti64x4 zmm24, zmm24, ymmword ptr [r12+rdx-0x1*0x20], 0x01
190
+ vmovdqu32 ymm25, ymmword ptr [r9+rdx-0x1*0x20]
191
+ vinserti64x4 zmm25, zmm25, ymmword ptr [r13+rdx-0x1*0x20], 0x01
192
+ vpunpcklqdq zmm12, zmm24, zmm25
193
+ vpunpckhqdq zmm13, zmm24, zmm25
194
+ vmovdqu32 ymm24, ymmword ptr [r10+rdx-0x1*0x20]
195
+ vinserti64x4 zmm24, zmm24, ymmword ptr [r14+rdx-0x1*0x20], 0x01
196
+ vmovdqu32 ymm25, ymmword ptr [r11+rdx-0x1*0x20]
197
+ vinserti64x4 zmm25, zmm25, ymmword ptr [r15+rdx-0x1*0x20], 0x01
198
+ vpunpcklqdq zmm14, zmm24, zmm25
199
+ vpunpckhqdq zmm15, zmm24, zmm25
200
+ prefetcht0 [r8+rdx+0x80]
201
+ prefetcht0 [r12+rdx+0x80]
202
+ prefetcht0 [r9+rdx+0x80]
203
+ prefetcht0 [r13+rdx+0x80]
204
+ prefetcht0 [r10+rdx+0x80]
205
+ prefetcht0 [r14+rdx+0x80]
206
+ prefetcht0 [r11+rdx+0x80]
207
+ prefetcht0 [r15+rdx+0x80]
208
+ vshufps zmm24, zmm8, zmm10, 136
209
+ vshufps zmm30, zmm12, zmm14, 136
210
+ vmovdqa32 zmm28, zmm24
211
+ vpermt2d zmm24, zmm27, zmm30
212
+ vpermt2d zmm28, zmm31, zmm30
213
+ vshufps zmm25, zmm8, zmm10, 221
214
+ vshufps zmm30, zmm12, zmm14, 221
215
+ vmovdqa32 zmm29, zmm25
216
+ vpermt2d zmm25, zmm27, zmm30
217
+ vpermt2d zmm29, zmm31, zmm30
218
+ vshufps zmm26, zmm9, zmm11, 136
219
+ vshufps zmm8, zmm13, zmm15, 136
220
+ vmovdqa32 zmm30, zmm26
221
+ vpermt2d zmm26, zmm27, zmm8
222
+ vpermt2d zmm30, zmm31, zmm8
223
+ vshufps zmm8, zmm9, zmm11, 221
224
+ vshufps zmm10, zmm13, zmm15, 221
225
+ vpermi2d zmm27, zmm8, zmm10
226
+ vpermi2d zmm31, zmm8, zmm10
227
+ vpbroadcastd zmm8, dword ptr [BLAKE3_IV_0+rip]
228
+ vpbroadcastd zmm9, dword ptr [BLAKE3_IV_1+rip]
229
+ vpbroadcastd zmm10, dword ptr [BLAKE3_IV_2+rip]
230
+ vpbroadcastd zmm11, dword ptr [BLAKE3_IV_3+rip]
231
+ vmovdqa32 zmm12, zmmword ptr [rsp]
232
+ vmovdqa32 zmm13, zmmword ptr [rsp+0x1*0x40]
233
+ vpbroadcastd zmm14, dword ptr [BLAKE3_BLOCK_LEN+rip]
234
+ vpbroadcastd zmm15, dword ptr [rsp+0x22*0x4]
235
+ vpaddd zmm0, zmm0, zmm16
236
+ vpaddd zmm1, zmm1, zmm18
237
+ vpaddd zmm2, zmm2, zmm20
238
+ vpaddd zmm3, zmm3, zmm22
239
+ vpaddd zmm0, zmm0, zmm4
240
+ vpaddd zmm1, zmm1, zmm5
241
+ vpaddd zmm2, zmm2, zmm6
242
+ vpaddd zmm3, zmm3, zmm7
243
+ vpxord zmm12, zmm12, zmm0
244
+ vpxord zmm13, zmm13, zmm1
245
+ vpxord zmm14, zmm14, zmm2
246
+ vpxord zmm15, zmm15, zmm3
247
+ vprord zmm12, zmm12, 16
248
+ vprord zmm13, zmm13, 16
249
+ vprord zmm14, zmm14, 16
250
+ vprord zmm15, zmm15, 16
251
+ vpaddd zmm8, zmm8, zmm12
252
+ vpaddd zmm9, zmm9, zmm13
253
+ vpaddd zmm10, zmm10, zmm14
254
+ vpaddd zmm11, zmm11, zmm15
255
+ vpxord zmm4, zmm4, zmm8
256
+ vpxord zmm5, zmm5, zmm9
257
+ vpxord zmm6, zmm6, zmm10
258
+ vpxord zmm7, zmm7, zmm11
259
+ vprord zmm4, zmm4, 12
260
+ vprord zmm5, zmm5, 12
261
+ vprord zmm6, zmm6, 12
262
+ vprord zmm7, zmm7, 12
263
+ vpaddd zmm0, zmm0, zmm17
264
+ vpaddd zmm1, zmm1, zmm19
265
+ vpaddd zmm2, zmm2, zmm21
266
+ vpaddd zmm3, zmm3, zmm23
267
+ vpaddd zmm0, zmm0, zmm4
268
+ vpaddd zmm1, zmm1, zmm5
269
+ vpaddd zmm2, zmm2, zmm6
270
+ vpaddd zmm3, zmm3, zmm7
271
+ vpxord zmm12, zmm12, zmm0
272
+ vpxord zmm13, zmm13, zmm1
273
+ vpxord zmm14, zmm14, zmm2
274
+ vpxord zmm15, zmm15, zmm3
275
+ vprord zmm12, zmm12, 8
276
+ vprord zmm13, zmm13, 8
277
+ vprord zmm14, zmm14, 8
278
+ vprord zmm15, zmm15, 8
279
+ vpaddd zmm8, zmm8, zmm12
280
+ vpaddd zmm9, zmm9, zmm13
281
+ vpaddd zmm10, zmm10, zmm14
282
+ vpaddd zmm11, zmm11, zmm15
283
+ vpxord zmm4, zmm4, zmm8
284
+ vpxord zmm5, zmm5, zmm9
285
+ vpxord zmm6, zmm6, zmm10
286
+ vpxord zmm7, zmm7, zmm11
287
+ vprord zmm4, zmm4, 7
288
+ vprord zmm5, zmm5, 7
289
+ vprord zmm6, zmm6, 7
290
+ vprord zmm7, zmm7, 7
291
+ vpaddd zmm0, zmm0, zmm24
292
+ vpaddd zmm1, zmm1, zmm26
293
+ vpaddd zmm2, zmm2, zmm28
294
+ vpaddd zmm3, zmm3, zmm30
295
+ vpaddd zmm0, zmm0, zmm5
296
+ vpaddd zmm1, zmm1, zmm6
297
+ vpaddd zmm2, zmm2, zmm7
298
+ vpaddd zmm3, zmm3, zmm4
299
+ vpxord zmm15, zmm15, zmm0
300
+ vpxord zmm12, zmm12, zmm1
301
+ vpxord zmm13, zmm13, zmm2
302
+ vpxord zmm14, zmm14, zmm3
303
+ vprord zmm15, zmm15, 16
304
+ vprord zmm12, zmm12, 16
305
+ vprord zmm13, zmm13, 16
306
+ vprord zmm14, zmm14, 16
307
+ vpaddd zmm10, zmm10, zmm15
308
+ vpaddd zmm11, zmm11, zmm12
309
+ vpaddd zmm8, zmm8, zmm13
310
+ vpaddd zmm9, zmm9, zmm14
311
+ vpxord zmm5, zmm5, zmm10
312
+ vpxord zmm6, zmm6, zmm11
313
+ vpxord zmm7, zmm7, zmm8
314
+ vpxord zmm4, zmm4, zmm9
315
+ vprord zmm5, zmm5, 12
316
+ vprord zmm6, zmm6, 12
317
+ vprord zmm7, zmm7, 12
318
+ vprord zmm4, zmm4, 12
319
+ vpaddd zmm0, zmm0, zmm25
320
+ vpaddd zmm1, zmm1, zmm27
321
+ vpaddd zmm2, zmm2, zmm29
322
+ vpaddd zmm3, zmm3, zmm31
323
+ vpaddd zmm0, zmm0, zmm5
324
+ vpaddd zmm1, zmm1, zmm6
325
+ vpaddd zmm2, zmm2, zmm7
326
+ vpaddd zmm3, zmm3, zmm4
327
+ vpxord zmm15, zmm15, zmm0
328
+ vpxord zmm12, zmm12, zmm1
329
+ vpxord zmm13, zmm13, zmm2
330
+ vpxord zmm14, zmm14, zmm3
331
+ vprord zmm15, zmm15, 8
332
+ vprord zmm12, zmm12, 8
333
+ vprord zmm13, zmm13, 8
334
+ vprord zmm14, zmm14, 8
335
+ vpaddd zmm10, zmm10, zmm15
336
+ vpaddd zmm11, zmm11, zmm12
337
+ vpaddd zmm8, zmm8, zmm13
338
+ vpaddd zmm9, zmm9, zmm14
339
+ vpxord zmm5, zmm5, zmm10
340
+ vpxord zmm6, zmm6, zmm11
341
+ vpxord zmm7, zmm7, zmm8
342
+ vpxord zmm4, zmm4, zmm9
343
+ vprord zmm5, zmm5, 7
344
+ vprord zmm6, zmm6, 7
345
+ vprord zmm7, zmm7, 7
346
+ vprord zmm4, zmm4, 7
347
+ vpaddd zmm0, zmm0, zmm18
348
+ vpaddd zmm1, zmm1, zmm19
349
+ vpaddd zmm2, zmm2, zmm23
350
+ vpaddd zmm3, zmm3, zmm20
351
+ vpaddd zmm0, zmm0, zmm4
352
+ vpaddd zmm1, zmm1, zmm5
353
+ vpaddd zmm2, zmm2, zmm6
354
+ vpaddd zmm3, zmm3, zmm7
355
+ vpxord zmm12, zmm12, zmm0
356
+ vpxord zmm13, zmm13, zmm1
357
+ vpxord zmm14, zmm14, zmm2
358
+ vpxord zmm15, zmm15, zmm3
359
+ vprord zmm12, zmm12, 16
360
+ vprord zmm13, zmm13, 16
361
+ vprord zmm14, zmm14, 16
362
+ vprord zmm15, zmm15, 16
363
+ vpaddd zmm8, zmm8, zmm12
364
+ vpaddd zmm9, zmm9, zmm13
365
+ vpaddd zmm10, zmm10, zmm14
366
+ vpaddd zmm11, zmm11, zmm15
367
+ vpxord zmm4, zmm4, zmm8
368
+ vpxord zmm5, zmm5, zmm9
369
+ vpxord zmm6, zmm6, zmm10
370
+ vpxord zmm7, zmm7, zmm11
371
+ vprord zmm4, zmm4, 12
372
+ vprord zmm5, zmm5, 12
373
+ vprord zmm6, zmm6, 12
374
+ vprord zmm7, zmm7, 12
375
+ vpaddd zmm0, zmm0, zmm22
376
+ vpaddd zmm1, zmm1, zmm26
377
+ vpaddd zmm2, zmm2, zmm16
378
+ vpaddd zmm3, zmm3, zmm29
379
+ vpaddd zmm0, zmm0, zmm4
380
+ vpaddd zmm1, zmm1, zmm5
381
+ vpaddd zmm2, zmm2, zmm6
382
+ vpaddd zmm3, zmm3, zmm7
383
+ vpxord zmm12, zmm12, zmm0
384
+ vpxord zmm13, zmm13, zmm1
385
+ vpxord zmm14, zmm14, zmm2
386
+ vpxord zmm15, zmm15, zmm3
387
+ vprord zmm12, zmm12, 8
388
+ vprord zmm13, zmm13, 8
389
+ vprord zmm14, zmm14, 8
390
+ vprord zmm15, zmm15, 8
391
+ vpaddd zmm8, zmm8, zmm12
392
+ vpaddd zmm9, zmm9, zmm13
393
+ vpaddd zmm10, zmm10, zmm14
394
+ vpaddd zmm11, zmm11, zmm15
395
+ vpxord zmm4, zmm4, zmm8
396
+ vpxord zmm5, zmm5, zmm9
397
+ vpxord zmm6, zmm6, zmm10
398
+ vpxord zmm7, zmm7, zmm11
399
+ vprord zmm4, zmm4, 7
400
+ vprord zmm5, zmm5, 7
401
+ vprord zmm6, zmm6, 7
402
+ vprord zmm7, zmm7, 7
403
+ vpaddd zmm0, zmm0, zmm17
404
+ vpaddd zmm1, zmm1, zmm28
405
+ vpaddd zmm2, zmm2, zmm25
406
+ vpaddd zmm3, zmm3, zmm31
407
+ vpaddd zmm0, zmm0, zmm5
408
+ vpaddd zmm1, zmm1, zmm6
409
+ vpaddd zmm2, zmm2, zmm7
410
+ vpaddd zmm3, zmm3, zmm4
411
+ vpxord zmm15, zmm15, zmm0
412
+ vpxord zmm12, zmm12, zmm1
413
+ vpxord zmm13, zmm13, zmm2
414
+ vpxord zmm14, zmm14, zmm3
415
+ vprord zmm15, zmm15, 16
416
+ vprord zmm12, zmm12, 16
417
+ vprord zmm13, zmm13, 16
418
+ vprord zmm14, zmm14, 16
419
+ vpaddd zmm10, zmm10, zmm15
420
+ vpaddd zmm11, zmm11, zmm12
421
+ vpaddd zmm8, zmm8, zmm13
422
+ vpaddd zmm9, zmm9, zmm14
423
+ vpxord zmm5, zmm5, zmm10
424
+ vpxord zmm6, zmm6, zmm11
425
+ vpxord zmm7, zmm7, zmm8
426
+ vpxord zmm4, zmm4, zmm9
427
+ vprord zmm5, zmm5, 12
428
+ vprord zmm6, zmm6, 12
429
+ vprord zmm7, zmm7, 12
430
+ vprord zmm4, zmm4, 12
431
+ vpaddd zmm0, zmm0, zmm27
432
+ vpaddd zmm1, zmm1, zmm21
433
+ vpaddd zmm2, zmm2, zmm30
434
+ vpaddd zmm3, zmm3, zmm24
435
+ vpaddd zmm0, zmm0, zmm5
436
+ vpaddd zmm1, zmm1, zmm6
437
+ vpaddd zmm2, zmm2, zmm7
438
+ vpaddd zmm3, zmm3, zmm4
439
+ vpxord zmm15, zmm15, zmm0
440
+ vpxord zmm12, zmm12, zmm1
441
+ vpxord zmm13, zmm13, zmm2
442
+ vpxord zmm14, zmm14, zmm3
443
+ vprord zmm15, zmm15, 8
444
+ vprord zmm12, zmm12, 8
445
+ vprord zmm13, zmm13, 8
446
+ vprord zmm14, zmm14, 8
447
+ vpaddd zmm10, zmm10, zmm15
448
+ vpaddd zmm11, zmm11, zmm12
449
+ vpaddd zmm8, zmm8, zmm13
450
+ vpaddd zmm9, zmm9, zmm14
451
+ vpxord zmm5, zmm5, zmm10
452
+ vpxord zmm6, zmm6, zmm11
453
+ vpxord zmm7, zmm7, zmm8
454
+ vpxord zmm4, zmm4, zmm9
455
+ vprord zmm5, zmm5, 7
456
+ vprord zmm6, zmm6, 7
457
+ vprord zmm7, zmm7, 7
458
+ vprord zmm4, zmm4, 7
459
+ vpaddd zmm0, zmm0, zmm19
460
+ vpaddd zmm1, zmm1, zmm26
461
+ vpaddd zmm2, zmm2, zmm29
462
+ vpaddd zmm3, zmm3, zmm23
463
+ vpaddd zmm0, zmm0, zmm4
464
+ vpaddd zmm1, zmm1, zmm5
465
+ vpaddd zmm2, zmm2, zmm6
466
+ vpaddd zmm3, zmm3, zmm7
467
+ vpxord zmm12, zmm12, zmm0
468
+ vpxord zmm13, zmm13, zmm1
469
+ vpxord zmm14, zmm14, zmm2
470
+ vpxord zmm15, zmm15, zmm3
471
+ vprord zmm12, zmm12, 16
472
+ vprord zmm13, zmm13, 16
473
+ vprord zmm14, zmm14, 16
474
+ vprord zmm15, zmm15, 16
475
+ vpaddd zmm8, zmm8, zmm12
476
+ vpaddd zmm9, zmm9, zmm13
477
+ vpaddd zmm10, zmm10, zmm14
478
+ vpaddd zmm11, zmm11, zmm15
479
+ vpxord zmm4, zmm4, zmm8
480
+ vpxord zmm5, zmm5, zmm9
481
+ vpxord zmm6, zmm6, zmm10
482
+ vpxord zmm7, zmm7, zmm11
483
+ vprord zmm4, zmm4, 12
484
+ vprord zmm5, zmm5, 12
485
+ vprord zmm6, zmm6, 12
486
+ vprord zmm7, zmm7, 12
487
+ vpaddd zmm0, zmm0, zmm20
488
+ vpaddd zmm1, zmm1, zmm28
489
+ vpaddd zmm2, zmm2, zmm18
490
+ vpaddd zmm3, zmm3, zmm30
491
+ vpaddd zmm0, zmm0, zmm4
492
+ vpaddd zmm1, zmm1, zmm5
493
+ vpaddd zmm2, zmm2, zmm6
494
+ vpaddd zmm3, zmm3, zmm7
495
+ vpxord zmm12, zmm12, zmm0
496
+ vpxord zmm13, zmm13, zmm1
497
+ vpxord zmm14, zmm14, zmm2
498
+ vpxord zmm15, zmm15, zmm3
499
+ vprord zmm12, zmm12, 8
500
+ vprord zmm13, zmm13, 8
501
+ vprord zmm14, zmm14, 8
502
+ vprord zmm15, zmm15, 8
503
+ vpaddd zmm8, zmm8, zmm12
504
+ vpaddd zmm9, zmm9, zmm13
505
+ vpaddd zmm10, zmm10, zmm14
506
+ vpaddd zmm11, zmm11, zmm15
507
+ vpxord zmm4, zmm4, zmm8
508
+ vpxord zmm5, zmm5, zmm9
509
+ vpxord zmm6, zmm6, zmm10
510
+ vpxord zmm7, zmm7, zmm11
511
+ vprord zmm4, zmm4, 7
512
+ vprord zmm5, zmm5, 7
513
+ vprord zmm6, zmm6, 7
514
+ vprord zmm7, zmm7, 7
515
+ vpaddd zmm0, zmm0, zmm22
516
+ vpaddd zmm1, zmm1, zmm25
517
+ vpaddd zmm2, zmm2, zmm27
518
+ vpaddd zmm3, zmm3, zmm24
519
+ vpaddd zmm0, zmm0, zmm5
520
+ vpaddd zmm1, zmm1, zmm6
521
+ vpaddd zmm2, zmm2, zmm7
522
+ vpaddd zmm3, zmm3, zmm4
523
+ vpxord zmm15, zmm15, zmm0
524
+ vpxord zmm12, zmm12, zmm1
525
+ vpxord zmm13, zmm13, zmm2
526
+ vpxord zmm14, zmm14, zmm3
527
+ vprord zmm15, zmm15, 16
528
+ vprord zmm12, zmm12, 16
529
+ vprord zmm13, zmm13, 16
530
+ vprord zmm14, zmm14, 16
531
+ vpaddd zmm10, zmm10, zmm15
532
+ vpaddd zmm11, zmm11, zmm12
533
+ vpaddd zmm8, zmm8, zmm13
534
+ vpaddd zmm9, zmm9, zmm14
535
+ vpxord zmm5, zmm5, zmm10
536
+ vpxord zmm6, zmm6, zmm11
537
+ vpxord zmm7, zmm7, zmm8
538
+ vpxord zmm4, zmm4, zmm9
539
+ vprord zmm5, zmm5, 12
540
+ vprord zmm6, zmm6, 12
541
+ vprord zmm7, zmm7, 12
542
+ vprord zmm4, zmm4, 12
543
+ vpaddd zmm0, zmm0, zmm21
544
+ vpaddd zmm1, zmm1, zmm16
545
+ vpaddd zmm2, zmm2, zmm31
546
+ vpaddd zmm3, zmm3, zmm17
547
+ vpaddd zmm0, zmm0, zmm5
548
+ vpaddd zmm1, zmm1, zmm6
549
+ vpaddd zmm2, zmm2, zmm7
550
+ vpaddd zmm3, zmm3, zmm4
551
+ vpxord zmm15, zmm15, zmm0
552
+ vpxord zmm12, zmm12, zmm1
553
+ vpxord zmm13, zmm13, zmm2
554
+ vpxord zmm14, zmm14, zmm3
555
+ vprord zmm15, zmm15, 8
556
+ vprord zmm12, zmm12, 8
557
+ vprord zmm13, zmm13, 8
558
+ vprord zmm14, zmm14, 8
559
+ vpaddd zmm10, zmm10, zmm15
560
+ vpaddd zmm11, zmm11, zmm12
561
+ vpaddd zmm8, zmm8, zmm13
562
+ vpaddd zmm9, zmm9, zmm14
563
+ vpxord zmm5, zmm5, zmm10
564
+ vpxord zmm6, zmm6, zmm11
565
+ vpxord zmm7, zmm7, zmm8
566
+ vpxord zmm4, zmm4, zmm9
567
+ vprord zmm5, zmm5, 7
568
+ vprord zmm6, zmm6, 7
569
+ vprord zmm7, zmm7, 7
570
+ vprord zmm4, zmm4, 7
571
+ vpaddd zmm0, zmm0, zmm26
572
+ vpaddd zmm1, zmm1, zmm28
573
+ vpaddd zmm2, zmm2, zmm30
574
+ vpaddd zmm3, zmm3, zmm29
575
+ vpaddd zmm0, zmm0, zmm4
576
+ vpaddd zmm1, zmm1, zmm5
577
+ vpaddd zmm2, zmm2, zmm6
578
+ vpaddd zmm3, zmm3, zmm7
579
+ vpxord zmm12, zmm12, zmm0
580
+ vpxord zmm13, zmm13, zmm1
581
+ vpxord zmm14, zmm14, zmm2
582
+ vpxord zmm15, zmm15, zmm3
583
+ vprord zmm12, zmm12, 16
584
+ vprord zmm13, zmm13, 16
585
+ vprord zmm14, zmm14, 16
586
+ vprord zmm15, zmm15, 16
587
+ vpaddd zmm8, zmm8, zmm12
588
+ vpaddd zmm9, zmm9, zmm13
589
+ vpaddd zmm10, zmm10, zmm14
590
+ vpaddd zmm11, zmm11, zmm15
591
+ vpxord zmm4, zmm4, zmm8
592
+ vpxord zmm5, zmm5, zmm9
593
+ vpxord zmm6, zmm6, zmm10
594
+ vpxord zmm7, zmm7, zmm11
595
+ vprord zmm4, zmm4, 12
596
+ vprord zmm5, zmm5, 12
597
+ vprord zmm6, zmm6, 12
598
+ vprord zmm7, zmm7, 12
599
+ vpaddd zmm0, zmm0, zmm23
600
+ vpaddd zmm1, zmm1, zmm25
601
+ vpaddd zmm2, zmm2, zmm19
602
+ vpaddd zmm3, zmm3, zmm31
603
+ vpaddd zmm0, zmm0, zmm4
604
+ vpaddd zmm1, zmm1, zmm5
605
+ vpaddd zmm2, zmm2, zmm6
606
+ vpaddd zmm3, zmm3, zmm7
607
+ vpxord zmm12, zmm12, zmm0
608
+ vpxord zmm13, zmm13, zmm1
609
+ vpxord zmm14, zmm14, zmm2
610
+ vpxord zmm15, zmm15, zmm3
611
+ vprord zmm12, zmm12, 8
612
+ vprord zmm13, zmm13, 8
613
+ vprord zmm14, zmm14, 8
614
+ vprord zmm15, zmm15, 8
615
+ vpaddd zmm8, zmm8, zmm12
616
+ vpaddd zmm9, zmm9, zmm13
617
+ vpaddd zmm10, zmm10, zmm14
618
+ vpaddd zmm11, zmm11, zmm15
619
+ vpxord zmm4, zmm4, zmm8
620
+ vpxord zmm5, zmm5, zmm9
621
+ vpxord zmm6, zmm6, zmm10
622
+ vpxord zmm7, zmm7, zmm11
623
+ vprord zmm4, zmm4, 7
624
+ vprord zmm5, zmm5, 7
625
+ vprord zmm6, zmm6, 7
626
+ vprord zmm7, zmm7, 7
627
+ vpaddd zmm0, zmm0, zmm20
628
+ vpaddd zmm1, zmm1, zmm27
629
+ vpaddd zmm2, zmm2, zmm21
630
+ vpaddd zmm3, zmm3, zmm17
631
+ vpaddd zmm0, zmm0, zmm5
632
+ vpaddd zmm1, zmm1, zmm6
633
+ vpaddd zmm2, zmm2, zmm7
634
+ vpaddd zmm3, zmm3, zmm4
635
+ vpxord zmm15, zmm15, zmm0
636
+ vpxord zmm12, zmm12, zmm1
637
+ vpxord zmm13, zmm13, zmm2
638
+ vpxord zmm14, zmm14, zmm3
639
+ vprord zmm15, zmm15, 16
640
+ vprord zmm12, zmm12, 16
641
+ vprord zmm13, zmm13, 16
642
+ vprord zmm14, zmm14, 16
643
+ vpaddd zmm10, zmm10, zmm15
644
+ vpaddd zmm11, zmm11, zmm12
645
+ vpaddd zmm8, zmm8, zmm13
646
+ vpaddd zmm9, zmm9, zmm14
647
+ vpxord zmm5, zmm5, zmm10
648
+ vpxord zmm6, zmm6, zmm11
649
+ vpxord zmm7, zmm7, zmm8
650
+ vpxord zmm4, zmm4, zmm9
651
+ vprord zmm5, zmm5, 12
652
+ vprord zmm6, zmm6, 12
653
+ vprord zmm7, zmm7, 12
654
+ vprord zmm4, zmm4, 12
655
+ vpaddd zmm0, zmm0, zmm16
656
+ vpaddd zmm1, zmm1, zmm18
657
+ vpaddd zmm2, zmm2, zmm24
658
+ vpaddd zmm3, zmm3, zmm22
659
+ vpaddd zmm0, zmm0, zmm5
660
+ vpaddd zmm1, zmm1, zmm6
661
+ vpaddd zmm2, zmm2, zmm7
662
+ vpaddd zmm3, zmm3, zmm4
663
+ vpxord zmm15, zmm15, zmm0
664
+ vpxord zmm12, zmm12, zmm1
665
+ vpxord zmm13, zmm13, zmm2
666
+ vpxord zmm14, zmm14, zmm3
667
+ vprord zmm15, zmm15, 8
668
+ vprord zmm12, zmm12, 8
669
+ vprord zmm13, zmm13, 8
670
+ vprord zmm14, zmm14, 8
671
+ vpaddd zmm10, zmm10, zmm15
672
+ vpaddd zmm11, zmm11, zmm12
673
+ vpaddd zmm8, zmm8, zmm13
674
+ vpaddd zmm9, zmm9, zmm14
675
+ vpxord zmm5, zmm5, zmm10
676
+ vpxord zmm6, zmm6, zmm11
677
+ vpxord zmm7, zmm7, zmm8
678
+ vpxord zmm4, zmm4, zmm9
679
+ vprord zmm5, zmm5, 7
680
+ vprord zmm6, zmm6, 7
681
+ vprord zmm7, zmm7, 7
682
+ vprord zmm4, zmm4, 7
683
+ vpaddd zmm0, zmm0, zmm28
684
+ vpaddd zmm1, zmm1, zmm25
685
+ vpaddd zmm2, zmm2, zmm31
686
+ vpaddd zmm3, zmm3, zmm30
687
+ vpaddd zmm0, zmm0, zmm4
688
+ vpaddd zmm1, zmm1, zmm5
689
+ vpaddd zmm2, zmm2, zmm6
690
+ vpaddd zmm3, zmm3, zmm7
691
+ vpxord zmm12, zmm12, zmm0
692
+ vpxord zmm13, zmm13, zmm1
693
+ vpxord zmm14, zmm14, zmm2
694
+ vpxord zmm15, zmm15, zmm3
695
+ vprord zmm12, zmm12, 16
696
+ vprord zmm13, zmm13, 16
697
+ vprord zmm14, zmm14, 16
698
+ vprord zmm15, zmm15, 16
699
+ vpaddd zmm8, zmm8, zmm12
700
+ vpaddd zmm9, zmm9, zmm13
701
+ vpaddd zmm10, zmm10, zmm14
702
+ vpaddd zmm11, zmm11, zmm15
703
+ vpxord zmm4, zmm4, zmm8
704
+ vpxord zmm5, zmm5, zmm9
705
+ vpxord zmm6, zmm6, zmm10
706
+ vpxord zmm7, zmm7, zmm11
707
+ vprord zmm4, zmm4, 12
708
+ vprord zmm5, zmm5, 12
709
+ vprord zmm6, zmm6, 12
710
+ vprord zmm7, zmm7, 12
711
+ vpaddd zmm0, zmm0, zmm29
712
+ vpaddd zmm1, zmm1, zmm27
713
+ vpaddd zmm2, zmm2, zmm26
714
+ vpaddd zmm3, zmm3, zmm24
715
+ vpaddd zmm0, zmm0, zmm4
716
+ vpaddd zmm1, zmm1, zmm5
717
+ vpaddd zmm2, zmm2, zmm6
718
+ vpaddd zmm3, zmm3, zmm7
719
+ vpxord zmm12, zmm12, zmm0
720
+ vpxord zmm13, zmm13, zmm1
721
+ vpxord zmm14, zmm14, zmm2
722
+ vpxord zmm15, zmm15, zmm3
723
+ vprord zmm12, zmm12, 8
724
+ vprord zmm13, zmm13, 8
725
+ vprord zmm14, zmm14, 8
726
+ vprord zmm15, zmm15, 8
727
+ vpaddd zmm8, zmm8, zmm12
728
+ vpaddd zmm9, zmm9, zmm13
729
+ vpaddd zmm10, zmm10, zmm14
730
+ vpaddd zmm11, zmm11, zmm15
731
+ vpxord zmm4, zmm4, zmm8
732
+ vpxord zmm5, zmm5, zmm9
733
+ vpxord zmm6, zmm6, zmm10
734
+ vpxord zmm7, zmm7, zmm11
735
+ vprord zmm4, zmm4, 7
736
+ vprord zmm5, zmm5, 7
737
+ vprord zmm6, zmm6, 7
738
+ vprord zmm7, zmm7, 7
739
+ vpaddd zmm0, zmm0, zmm23
740
+ vpaddd zmm1, zmm1, zmm21
741
+ vpaddd zmm2, zmm2, zmm16
742
+ vpaddd zmm3, zmm3, zmm22
743
+ vpaddd zmm0, zmm0, zmm5
744
+ vpaddd zmm1, zmm1, zmm6
745
+ vpaddd zmm2, zmm2, zmm7
746
+ vpaddd zmm3, zmm3, zmm4
747
+ vpxord zmm15, zmm15, zmm0
748
+ vpxord zmm12, zmm12, zmm1
749
+ vpxord zmm13, zmm13, zmm2
750
+ vpxord zmm14, zmm14, zmm3
751
+ vprord zmm15, zmm15, 16
752
+ vprord zmm12, zmm12, 16
753
+ vprord zmm13, zmm13, 16
754
+ vprord zmm14, zmm14, 16
755
+ vpaddd zmm10, zmm10, zmm15
756
+ vpaddd zmm11, zmm11, zmm12
757
+ vpaddd zmm8, zmm8, zmm13
758
+ vpaddd zmm9, zmm9, zmm14
759
+ vpxord zmm5, zmm5, zmm10
760
+ vpxord zmm6, zmm6, zmm11
761
+ vpxord zmm7, zmm7, zmm8
762
+ vpxord zmm4, zmm4, zmm9
763
+ vprord zmm5, zmm5, 12
764
+ vprord zmm6, zmm6, 12
765
+ vprord zmm7, zmm7, 12
766
+ vprord zmm4, zmm4, 12
767
+ vpaddd zmm0, zmm0, zmm18
768
+ vpaddd zmm1, zmm1, zmm19
769
+ vpaddd zmm2, zmm2, zmm17
770
+ vpaddd zmm3, zmm3, zmm20
771
+ vpaddd zmm0, zmm0, zmm5
772
+ vpaddd zmm1, zmm1, zmm6
773
+ vpaddd zmm2, zmm2, zmm7
774
+ vpaddd zmm3, zmm3, zmm4
775
+ vpxord zmm15, zmm15, zmm0
776
+ vpxord zmm12, zmm12, zmm1
777
+ vpxord zmm13, zmm13, zmm2
778
+ vpxord zmm14, zmm14, zmm3
779
+ vprord zmm15, zmm15, 8
780
+ vprord zmm12, zmm12, 8
781
+ vprord zmm13, zmm13, 8
782
+ vprord zmm14, zmm14, 8
783
+ vpaddd zmm10, zmm10, zmm15
784
+ vpaddd zmm11, zmm11, zmm12
785
+ vpaddd zmm8, zmm8, zmm13
786
+ vpaddd zmm9, zmm9, zmm14
787
+ vpxord zmm5, zmm5, zmm10
788
+ vpxord zmm6, zmm6, zmm11
789
+ vpxord zmm7, zmm7, zmm8
790
+ vpxord zmm4, zmm4, zmm9
791
+ vprord zmm5, zmm5, 7
792
+ vprord zmm6, zmm6, 7
793
+ vprord zmm7, zmm7, 7
794
+ vprord zmm4, zmm4, 7
795
+ vpaddd zmm0, zmm0, zmm25
796
+ vpaddd zmm1, zmm1, zmm27
797
+ vpaddd zmm2, zmm2, zmm24
798
+ vpaddd zmm3, zmm3, zmm31
799
+ vpaddd zmm0, zmm0, zmm4
800
+ vpaddd zmm1, zmm1, zmm5
801
+ vpaddd zmm2, zmm2, zmm6
802
+ vpaddd zmm3, zmm3, zmm7
803
+ vpxord zmm12, zmm12, zmm0
804
+ vpxord zmm13, zmm13, zmm1
805
+ vpxord zmm14, zmm14, zmm2
806
+ vpxord zmm15, zmm15, zmm3
807
+ vprord zmm12, zmm12, 16
808
+ vprord zmm13, zmm13, 16
809
+ vprord zmm14, zmm14, 16
810
+ vprord zmm15, zmm15, 16
811
+ vpaddd zmm8, zmm8, zmm12
812
+ vpaddd zmm9, zmm9, zmm13
813
+ vpaddd zmm10, zmm10, zmm14
814
+ vpaddd zmm11, zmm11, zmm15
815
+ vpxord zmm4, zmm4, zmm8
816
+ vpxord zmm5, zmm5, zmm9
817
+ vpxord zmm6, zmm6, zmm10
818
+ vpxord zmm7, zmm7, zmm11
819
+ vprord zmm4, zmm4, 12
820
+ vprord zmm5, zmm5, 12
821
+ vprord zmm6, zmm6, 12
822
+ vprord zmm7, zmm7, 12
823
+ vpaddd zmm0, zmm0, zmm30
824
+ vpaddd zmm1, zmm1, zmm21
825
+ vpaddd zmm2, zmm2, zmm28
826
+ vpaddd zmm3, zmm3, zmm17
827
+ vpaddd zmm0, zmm0, zmm4
828
+ vpaddd zmm1, zmm1, zmm5
829
+ vpaddd zmm2, zmm2, zmm6
830
+ vpaddd zmm3, zmm3, zmm7
831
+ vpxord zmm12, zmm12, zmm0
832
+ vpxord zmm13, zmm13, zmm1
833
+ vpxord zmm14, zmm14, zmm2
834
+ vpxord zmm15, zmm15, zmm3
835
+ vprord zmm12, zmm12, 8
836
+ vprord zmm13, zmm13, 8
837
+ vprord zmm14, zmm14, 8
838
+ vprord zmm15, zmm15, 8
839
+ vpaddd zmm8, zmm8, zmm12
840
+ vpaddd zmm9, zmm9, zmm13
841
+ vpaddd zmm10, zmm10, zmm14
842
+ vpaddd zmm11, zmm11, zmm15
843
+ vpxord zmm4, zmm4, zmm8
844
+ vpxord zmm5, zmm5, zmm9
845
+ vpxord zmm6, zmm6, zmm10
846
+ vpxord zmm7, zmm7, zmm11
847
+ vprord zmm4, zmm4, 7
848
+ vprord zmm5, zmm5, 7
849
+ vprord zmm6, zmm6, 7
850
+ vprord zmm7, zmm7, 7
851
+ vpaddd zmm0, zmm0, zmm29
852
+ vpaddd zmm1, zmm1, zmm16
853
+ vpaddd zmm2, zmm2, zmm18
854
+ vpaddd zmm3, zmm3, zmm20
855
+ vpaddd zmm0, zmm0, zmm5
856
+ vpaddd zmm1, zmm1, zmm6
857
+ vpaddd zmm2, zmm2, zmm7
858
+ vpaddd zmm3, zmm3, zmm4
859
+ vpxord zmm15, zmm15, zmm0
860
+ vpxord zmm12, zmm12, zmm1
861
+ vpxord zmm13, zmm13, zmm2
862
+ vpxord zmm14, zmm14, zmm3
863
+ vprord zmm15, zmm15, 16
864
+ vprord zmm12, zmm12, 16
865
+ vprord zmm13, zmm13, 16
866
+ vprord zmm14, zmm14, 16
867
+ vpaddd zmm10, zmm10, zmm15
868
+ vpaddd zmm11, zmm11, zmm12
869
+ vpaddd zmm8, zmm8, zmm13
870
+ vpaddd zmm9, zmm9, zmm14
871
+ vpxord zmm5, zmm5, zmm10
872
+ vpxord zmm6, zmm6, zmm11
873
+ vpxord zmm7, zmm7, zmm8
874
+ vpxord zmm4, zmm4, zmm9
875
+ vprord zmm5, zmm5, 12
876
+ vprord zmm6, zmm6, 12
877
+ vprord zmm7, zmm7, 12
878
+ vprord zmm4, zmm4, 12
879
+ vpaddd zmm0, zmm0, zmm19
880
+ vpaddd zmm1, zmm1, zmm26
881
+ vpaddd zmm2, zmm2, zmm22
882
+ vpaddd zmm3, zmm3, zmm23
883
+ vpaddd zmm0, zmm0, zmm5
884
+ vpaddd zmm1, zmm1, zmm6
885
+ vpaddd zmm2, zmm2, zmm7
886
+ vpaddd zmm3, zmm3, zmm4
887
+ vpxord zmm15, zmm15, zmm0
888
+ vpxord zmm12, zmm12, zmm1
889
+ vpxord zmm13, zmm13, zmm2
890
+ vpxord zmm14, zmm14, zmm3
891
+ vprord zmm15, zmm15, 8
892
+ vprord zmm12, zmm12, 8
893
+ vprord zmm13, zmm13, 8
894
+ vprord zmm14, zmm14, 8
895
+ vpaddd zmm10, zmm10, zmm15
896
+ vpaddd zmm11, zmm11, zmm12
897
+ vpaddd zmm8, zmm8, zmm13
898
+ vpaddd zmm9, zmm9, zmm14
899
+ vpxord zmm5, zmm5, zmm10
900
+ vpxord zmm6, zmm6, zmm11
901
+ vpxord zmm7, zmm7, zmm8
902
+ vpxord zmm4, zmm4, zmm9
903
+ vprord zmm5, zmm5, 7
904
+ vprord zmm6, zmm6, 7
905
+ vprord zmm7, zmm7, 7
906
+ vprord zmm4, zmm4, 7
907
+ vpaddd zmm0, zmm0, zmm27
908
+ vpaddd zmm1, zmm1, zmm21
909
+ vpaddd zmm2, zmm2, zmm17
910
+ vpaddd zmm3, zmm3, zmm24
911
+ vpaddd zmm0, zmm0, zmm4
912
+ vpaddd zmm1, zmm1, zmm5
913
+ vpaddd zmm2, zmm2, zmm6
914
+ vpaddd zmm3, zmm3, zmm7
915
+ vpxord zmm12, zmm12, zmm0
916
+ vpxord zmm13, zmm13, zmm1
917
+ vpxord zmm14, zmm14, zmm2
918
+ vpxord zmm15, zmm15, zmm3
919
+ vprord zmm12, zmm12, 16
920
+ vprord zmm13, zmm13, 16
921
+ vprord zmm14, zmm14, 16
922
+ vprord zmm15, zmm15, 16
923
+ vpaddd zmm8, zmm8, zmm12
924
+ vpaddd zmm9, zmm9, zmm13
925
+ vpaddd zmm10, zmm10, zmm14
926
+ vpaddd zmm11, zmm11, zmm15
927
+ vpxord zmm4, zmm4, zmm8
928
+ vpxord zmm5, zmm5, zmm9
929
+ vpxord zmm6, zmm6, zmm10
930
+ vpxord zmm7, zmm7, zmm11
931
+ vprord zmm4, zmm4, 12
932
+ vprord zmm5, zmm5, 12
933
+ vprord zmm6, zmm6, 12
934
+ vprord zmm7, zmm7, 12
935
+ vpaddd zmm0, zmm0, zmm31
936
+ vpaddd zmm1, zmm1, zmm16
937
+ vpaddd zmm2, zmm2, zmm25
938
+ vpaddd zmm3, zmm3, zmm22
939
+ vpaddd zmm0, zmm0, zmm4
940
+ vpaddd zmm1, zmm1, zmm5
941
+ vpaddd zmm2, zmm2, zmm6
942
+ vpaddd zmm3, zmm3, zmm7
943
+ vpxord zmm12, zmm12, zmm0
944
+ vpxord zmm13, zmm13, zmm1
945
+ vpxord zmm14, zmm14, zmm2
946
+ vpxord zmm15, zmm15, zmm3
947
+ vprord zmm12, zmm12, 8
948
+ vprord zmm13, zmm13, 8
949
+ vprord zmm14, zmm14, 8
950
+ vprord zmm15, zmm15, 8
951
+ vpaddd zmm8, zmm8, zmm12
952
+ vpaddd zmm9, zmm9, zmm13
953
+ vpaddd zmm10, zmm10, zmm14
954
+ vpaddd zmm11, zmm11, zmm15
955
+ vpxord zmm4, zmm4, zmm8
956
+ vpxord zmm5, zmm5, zmm9
957
+ vpxord zmm6, zmm6, zmm10
958
+ vpxord zmm7, zmm7, zmm11
959
+ vprord zmm4, zmm4, 7
960
+ vprord zmm5, zmm5, 7
961
+ vprord zmm6, zmm6, 7
962
+ vprord zmm7, zmm7, 7
963
+ vpaddd zmm0, zmm0, zmm30
964
+ vpaddd zmm1, zmm1, zmm18
965
+ vpaddd zmm2, zmm2, zmm19
966
+ vpaddd zmm3, zmm3, zmm23
967
+ vpaddd zmm0, zmm0, zmm5
968
+ vpaddd zmm1, zmm1, zmm6
969
+ vpaddd zmm2, zmm2, zmm7
970
+ vpaddd zmm3, zmm3, zmm4
971
+ vpxord zmm15, zmm15, zmm0
972
+ vpxord zmm12, zmm12, zmm1
973
+ vpxord zmm13, zmm13, zmm2
974
+ vpxord zmm14, zmm14, zmm3
975
+ vprord zmm15, zmm15, 16
976
+ vprord zmm12, zmm12, 16
977
+ vprord zmm13, zmm13, 16
978
+ vprord zmm14, zmm14, 16
979
+ vpaddd zmm10, zmm10, zmm15
980
+ vpaddd zmm11, zmm11, zmm12
981
+ vpaddd zmm8, zmm8, zmm13
982
+ vpaddd zmm9, zmm9, zmm14
983
+ vpxord zmm5, zmm5, zmm10
984
+ vpxord zmm6, zmm6, zmm11
985
+ vpxord zmm7, zmm7, zmm8
986
+ vpxord zmm4, zmm4, zmm9
987
+ vprord zmm5, zmm5, 12
988
+ vprord zmm6, zmm6, 12
989
+ vprord zmm7, zmm7, 12
990
+ vprord zmm4, zmm4, 12
991
+ vpaddd zmm0, zmm0, zmm26
992
+ vpaddd zmm1, zmm1, zmm28
993
+ vpaddd zmm2, zmm2, zmm20
994
+ vpaddd zmm3, zmm3, zmm29
995
+ vpaddd zmm0, zmm0, zmm5
996
+ vpaddd zmm1, zmm1, zmm6
997
+ vpaddd zmm2, zmm2, zmm7
998
+ vpaddd zmm3, zmm3, zmm4
999
+ vpxord zmm15, zmm15, zmm0
1000
+ vpxord zmm12, zmm12, zmm1
1001
+ vpxord zmm13, zmm13, zmm2
1002
+ vpxord zmm14, zmm14, zmm3
1003
+ vprord zmm15, zmm15, 8
1004
+ vprord zmm12, zmm12, 8
1005
+ vprord zmm13, zmm13, 8
1006
+ vprord zmm14, zmm14, 8
1007
+ vpaddd zmm10, zmm10, zmm15
1008
+ vpaddd zmm11, zmm11, zmm12
1009
+ vpaddd zmm8, zmm8, zmm13
1010
+ vpaddd zmm9, zmm9, zmm14
1011
+ vpxord zmm5, zmm5, zmm10
1012
+ vpxord zmm6, zmm6, zmm11
1013
+ vpxord zmm7, zmm7, zmm8
1014
+ vpxord zmm4, zmm4, zmm9
1015
+ vprord zmm5, zmm5, 7
1016
+ vprord zmm6, zmm6, 7
1017
+ vprord zmm7, zmm7, 7
1018
+ vprord zmm4, zmm4, 7
1019
+ vpxord zmm0, zmm0, zmm8
1020
+ vpxord zmm1, zmm1, zmm9
1021
+ vpxord zmm2, zmm2, zmm10
1022
+ vpxord zmm3, zmm3, zmm11
1023
+ vpxord zmm4, zmm4, zmm12
1024
+ vpxord zmm5, zmm5, zmm13
1025
+ vpxord zmm6, zmm6, zmm14
1026
+ vpxord zmm7, zmm7, zmm15
1027
+ movzx eax, byte ptr [rbp+0x38]
1028
+ jne 9b
1029
+ mov rbx, qword ptr [rbp+0x50]
1030
+ vpunpckldq zmm16, zmm0, zmm1
1031
+ vpunpckhdq zmm17, zmm0, zmm1
1032
+ vpunpckldq zmm18, zmm2, zmm3
1033
+ vpunpckhdq zmm19, zmm2, zmm3
1034
+ vpunpckldq zmm20, zmm4, zmm5
1035
+ vpunpckhdq zmm21, zmm4, zmm5
1036
+ vpunpckldq zmm22, zmm6, zmm7
1037
+ vpunpckhdq zmm23, zmm6, zmm7
1038
+ vpunpcklqdq zmm0, zmm16, zmm18
1039
+ vpunpckhqdq zmm1, zmm16, zmm18
1040
+ vpunpcklqdq zmm2, zmm17, zmm19
1041
+ vpunpckhqdq zmm3, zmm17, zmm19
1042
+ vpunpcklqdq zmm4, zmm20, zmm22
1043
+ vpunpckhqdq zmm5, zmm20, zmm22
1044
+ vpunpcklqdq zmm6, zmm21, zmm23
1045
+ vpunpckhqdq zmm7, zmm21, zmm23
1046
+ vshufi32x4 zmm16, zmm0, zmm4, 0x88
1047
+ vshufi32x4 zmm17, zmm1, zmm5, 0x88
1048
+ vshufi32x4 zmm18, zmm2, zmm6, 0x88
1049
+ vshufi32x4 zmm19, zmm3, zmm7, 0x88
1050
+ vshufi32x4 zmm20, zmm0, zmm4, 0xDD
1051
+ vshufi32x4 zmm21, zmm1, zmm5, 0xDD
1052
+ vshufi32x4 zmm22, zmm2, zmm6, 0xDD
1053
+ vshufi32x4 zmm23, zmm3, zmm7, 0xDD
1054
+ vshufi32x4 zmm0, zmm16, zmm17, 0x88
1055
+ vshufi32x4 zmm1, zmm18, zmm19, 0x88
1056
+ vshufi32x4 zmm2, zmm20, zmm21, 0x88
1057
+ vshufi32x4 zmm3, zmm22, zmm23, 0x88
1058
+ vshufi32x4 zmm4, zmm16, zmm17, 0xDD
1059
+ vshufi32x4 zmm5, zmm18, zmm19, 0xDD
1060
+ vshufi32x4 zmm6, zmm20, zmm21, 0xDD
1061
+ vshufi32x4 zmm7, zmm22, zmm23, 0xDD
1062
+ vmovdqu32 zmmword ptr [rbx], zmm0
1063
+ vmovdqu32 zmmword ptr [rbx+0x1*0x40], zmm1
1064
+ vmovdqu32 zmmword ptr [rbx+0x2*0x40], zmm2
1065
+ vmovdqu32 zmmword ptr [rbx+0x3*0x40], zmm3
1066
+ vmovdqu32 zmmword ptr [rbx+0x4*0x40], zmm4
1067
+ vmovdqu32 zmmword ptr [rbx+0x5*0x40], zmm5
1068
+ vmovdqu32 zmmword ptr [rbx+0x6*0x40], zmm6
1069
+ vmovdqu32 zmmword ptr [rbx+0x7*0x40], zmm7
1070
+ vmovdqa32 zmm0, zmmword ptr [rsp]
1071
+ vmovdqa32 zmm1, zmmword ptr [rsp+0x1*0x40]
1072
+ vmovdqa32 zmm2, zmm0
1073
+ vpaddd zmm2{k1}, zmm0, dword ptr [ADD16+rip] {1to16}
1074
+ vpcmpltud k2, zmm2, zmm0
1075
+ vpaddd zmm1 {k2}, zmm1, dword ptr [ADD1+rip] {1to16}
1076
+ vmovdqa32 zmmword ptr [rsp], zmm2
1077
+ vmovdqa32 zmmword ptr [rsp+0x1*0x40], zmm1
1078
+ add rdi, 128
1079
+ add rbx, 512
1080
+ mov qword ptr [rbp+0x50], rbx
1081
+ sub rsi, 16
1082
+ cmp rsi, 16
1083
+ jnc 2b
1084
+ test rsi, rsi
1085
+ jnz 3f
1086
+ 4:
1087
+ vzeroupper
1088
+ mov rsp, rbp
1089
+ pop rbp
1090
+ pop rbx
1091
+ pop r12
1092
+ pop r13
1093
+ pop r14
1094
+ pop r15
1095
+ ret
1096
+ .p2align 6
1097
+ 3:
1098
+ test esi, 0x8
1099
+ je 3f
1100
+ vpbroadcastd ymm0, dword ptr [rcx]
1101
+ vpbroadcastd ymm1, dword ptr [rcx+0x4]
1102
+ vpbroadcastd ymm2, dword ptr [rcx+0x8]
1103
+ vpbroadcastd ymm3, dword ptr [rcx+0xC]
1104
+ vpbroadcastd ymm4, dword ptr [rcx+0x10]
1105
+ vpbroadcastd ymm5, dword ptr [rcx+0x14]
1106
+ vpbroadcastd ymm6, dword ptr [rcx+0x18]
1107
+ vpbroadcastd ymm7, dword ptr [rcx+0x1C]
1108
+ mov r8, qword ptr [rdi]
1109
+ mov r9, qword ptr [rdi+0x8]
1110
+ mov r10, qword ptr [rdi+0x10]
1111
+ mov r11, qword ptr [rdi+0x18]
1112
+ mov r12, qword ptr [rdi+0x20]
1113
+ mov r13, qword ptr [rdi+0x28]
1114
+ mov r14, qword ptr [rdi+0x30]
1115
+ mov r15, qword ptr [rdi+0x38]
1116
+ movzx eax, byte ptr [rbp+0x38]
1117
+ movzx ebx, byte ptr [rbp+0x40]
1118
+ or eax, ebx
1119
+ xor edx, edx
1120
+ 2:
1121
+ movzx ebx, byte ptr [rbp+0x48]
1122
+ or ebx, eax
1123
+ add rdx, 64
1124
+ cmp rdx, qword ptr [rsp+0x80]
1125
+ cmove eax, ebx
1126
+ mov dword ptr [rsp+0x88], eax
1127
+ vmovups xmm8, xmmword ptr [r8+rdx-0x40]
1128
+ vinsertf128 ymm8, ymm8, xmmword ptr [r12+rdx-0x40], 0x01
1129
+ vmovups xmm9, xmmword ptr [r9+rdx-0x40]
1130
+ vinsertf128 ymm9, ymm9, xmmword ptr [r13+rdx-0x40], 0x01
1131
+ vunpcklpd ymm12, ymm8, ymm9
1132
+ vunpckhpd ymm13, ymm8, ymm9
1133
+ vmovups xmm10, xmmword ptr [r10+rdx-0x40]
1134
+ vinsertf128 ymm10, ymm10, xmmword ptr [r14+rdx-0x40], 0x01
1135
+ vmovups xmm11, xmmword ptr [r11+rdx-0x40]
1136
+ vinsertf128 ymm11, ymm11, xmmword ptr [r15+rdx-0x40], 0x01
1137
+ vunpcklpd ymm14, ymm10, ymm11
1138
+ vunpckhpd ymm15, ymm10, ymm11
1139
+ vshufps ymm16, ymm12, ymm14, 136
1140
+ vshufps ymm17, ymm12, ymm14, 221
1141
+ vshufps ymm18, ymm13, ymm15, 136
1142
+ vshufps ymm19, ymm13, ymm15, 221
1143
+ vmovups xmm8, xmmword ptr [r8+rdx-0x30]
1144
+ vinsertf128 ymm8, ymm8, xmmword ptr [r12+rdx-0x30], 0x01
1145
+ vmovups xmm9, xmmword ptr [r9+rdx-0x30]
1146
+ vinsertf128 ymm9, ymm9, xmmword ptr [r13+rdx-0x30], 0x01
1147
+ vunpcklpd ymm12, ymm8, ymm9
1148
+ vunpckhpd ymm13, ymm8, ymm9
1149
+ vmovups xmm10, xmmword ptr [r10+rdx-0x30]
1150
+ vinsertf128 ymm10, ymm10, xmmword ptr [r14+rdx-0x30], 0x01
1151
+ vmovups xmm11, xmmword ptr [r11+rdx-0x30]
1152
+ vinsertf128 ymm11, ymm11, xmmword ptr [r15+rdx-0x30], 0x01
1153
+ vunpcklpd ymm14, ymm10, ymm11
1154
+ vunpckhpd ymm15, ymm10, ymm11
1155
+ vshufps ymm20, ymm12, ymm14, 136
1156
+ vshufps ymm21, ymm12, ymm14, 221
1157
+ vshufps ymm22, ymm13, ymm15, 136
1158
+ vshufps ymm23, ymm13, ymm15, 221
1159
+ vmovups xmm8, xmmword ptr [r8+rdx-0x20]
1160
+ vinsertf128 ymm8, ymm8, xmmword ptr [r12+rdx-0x20], 0x01
1161
+ vmovups xmm9, xmmword ptr [r9+rdx-0x20]
1162
+ vinsertf128 ymm9, ymm9, xmmword ptr [r13+rdx-0x20], 0x01
1163
+ vunpcklpd ymm12, ymm8, ymm9
1164
+ vunpckhpd ymm13, ymm8, ymm9
1165
+ vmovups xmm10, xmmword ptr [r10+rdx-0x20]
1166
+ vinsertf128 ymm10, ymm10, xmmword ptr [r14+rdx-0x20], 0x01
1167
+ vmovups xmm11, xmmword ptr [r11+rdx-0x20]
1168
+ vinsertf128 ymm11, ymm11, xmmword ptr [r15+rdx-0x20], 0x01
1169
+ vunpcklpd ymm14, ymm10, ymm11
1170
+ vunpckhpd ymm15, ymm10, ymm11
1171
+ vshufps ymm24, ymm12, ymm14, 136
1172
+ vshufps ymm25, ymm12, ymm14, 221
1173
+ vshufps ymm26, ymm13, ymm15, 136
1174
+ vshufps ymm27, ymm13, ymm15, 221
1175
+ vmovups xmm8, xmmword ptr [r8+rdx-0x10]
1176
+ vinsertf128 ymm8, ymm8, xmmword ptr [r12+rdx-0x10], 0x01
1177
+ vmovups xmm9, xmmword ptr [r9+rdx-0x10]
1178
+ vinsertf128 ymm9, ymm9, xmmword ptr [r13+rdx-0x10], 0x01
1179
+ vunpcklpd ymm12, ymm8, ymm9
1180
+ vunpckhpd ymm13, ymm8, ymm9
1181
+ vmovups xmm10, xmmword ptr [r10+rdx-0x10]
1182
+ vinsertf128 ymm10, ymm10, xmmword ptr [r14+rdx-0x10], 0x01
1183
+ vmovups xmm11, xmmword ptr [r11+rdx-0x10]
1184
+ vinsertf128 ymm11, ymm11, xmmword ptr [r15+rdx-0x10], 0x01
1185
+ vunpcklpd ymm14, ymm10, ymm11
1186
+ vunpckhpd ymm15, ymm10, ymm11
1187
+ vshufps ymm28, ymm12, ymm14, 136
1188
+ vshufps ymm29, ymm12, ymm14, 221
1189
+ vshufps ymm30, ymm13, ymm15, 136
1190
+ vshufps ymm31, ymm13, ymm15, 221
1191
+ vpbroadcastd ymm8, dword ptr [BLAKE3_IV_0+rip]
1192
+ vpbroadcastd ymm9, dword ptr [BLAKE3_IV_1+rip]
1193
+ vpbroadcastd ymm10, dword ptr [BLAKE3_IV_2+rip]
1194
+ vpbroadcastd ymm11, dword ptr [BLAKE3_IV_3+rip]
1195
+ vmovdqa ymm12, ymmword ptr [rsp]
1196
+ vmovdqa ymm13, ymmword ptr [rsp+0x40]
1197
+ vpbroadcastd ymm14, dword ptr [BLAKE3_BLOCK_LEN+rip]
1198
+ vpbroadcastd ymm15, dword ptr [rsp+0x88]
1199
+ vpaddd ymm0, ymm0, ymm16
1200
+ vpaddd ymm1, ymm1, ymm18
1201
+ vpaddd ymm2, ymm2, ymm20
1202
+ vpaddd ymm3, ymm3, ymm22
1203
+ vpaddd ymm0, ymm0, ymm4
1204
+ vpaddd ymm1, ymm1, ymm5
1205
+ vpaddd ymm2, ymm2, ymm6
1206
+ vpaddd ymm3, ymm3, ymm7
1207
+ vpxord ymm12, ymm12, ymm0
1208
+ vpxord ymm13, ymm13, ymm1
1209
+ vpxord ymm14, ymm14, ymm2
1210
+ vpxord ymm15, ymm15, ymm3
1211
+ vprord ymm12, ymm12, 16
1212
+ vprord ymm13, ymm13, 16
1213
+ vprord ymm14, ymm14, 16
1214
+ vprord ymm15, ymm15, 16
1215
+ vpaddd ymm8, ymm8, ymm12
1216
+ vpaddd ymm9, ymm9, ymm13
1217
+ vpaddd ymm10, ymm10, ymm14
1218
+ vpaddd ymm11, ymm11, ymm15
1219
+ vpxord ymm4, ymm4, ymm8
1220
+ vpxord ymm5, ymm5, ymm9
1221
+ vpxord ymm6, ymm6, ymm10
1222
+ vpxord ymm7, ymm7, ymm11
1223
+ vprord ymm4, ymm4, 12
1224
+ vprord ymm5, ymm5, 12
1225
+ vprord ymm6, ymm6, 12
1226
+ vprord ymm7, ymm7, 12
1227
+ vpaddd ymm0, ymm0, ymm17
1228
+ vpaddd ymm1, ymm1, ymm19
1229
+ vpaddd ymm2, ymm2, ymm21
1230
+ vpaddd ymm3, ymm3, ymm23
1231
+ vpaddd ymm0, ymm0, ymm4
1232
+ vpaddd ymm1, ymm1, ymm5
1233
+ vpaddd ymm2, ymm2, ymm6
1234
+ vpaddd ymm3, ymm3, ymm7
1235
+ vpxord ymm12, ymm12, ymm0
1236
+ vpxord ymm13, ymm13, ymm1
1237
+ vpxord ymm14, ymm14, ymm2
1238
+ vpxord ymm15, ymm15, ymm3
1239
+ vprord ymm12, ymm12, 8
1240
+ vprord ymm13, ymm13, 8
1241
+ vprord ymm14, ymm14, 8
1242
+ vprord ymm15, ymm15, 8
1243
+ vpaddd ymm8, ymm8, ymm12
1244
+ vpaddd ymm9, ymm9, ymm13
1245
+ vpaddd ymm10, ymm10, ymm14
1246
+ vpaddd ymm11, ymm11, ymm15
1247
+ vpxord ymm4, ymm4, ymm8
1248
+ vpxord ymm5, ymm5, ymm9
1249
+ vpxord ymm6, ymm6, ymm10
1250
+ vpxord ymm7, ymm7, ymm11
1251
+ vprord ymm4, ymm4, 7
1252
+ vprord ymm5, ymm5, 7
1253
+ vprord ymm6, ymm6, 7
1254
+ vprord ymm7, ymm7, 7
1255
+ vpaddd ymm0, ymm0, ymm24
1256
+ vpaddd ymm1, ymm1, ymm26
1257
+ vpaddd ymm2, ymm2, ymm28
1258
+ vpaddd ymm3, ymm3, ymm30
1259
+ vpaddd ymm0, ymm0, ymm5
1260
+ vpaddd ymm1, ymm1, ymm6
1261
+ vpaddd ymm2, ymm2, ymm7
1262
+ vpaddd ymm3, ymm3, ymm4
1263
+ vpxord ymm15, ymm15, ymm0
1264
+ vpxord ymm12, ymm12, ymm1
1265
+ vpxord ymm13, ymm13, ymm2
1266
+ vpxord ymm14, ymm14, ymm3
1267
+ vprord ymm15, ymm15, 16
1268
+ vprord ymm12, ymm12, 16
1269
+ vprord ymm13, ymm13, 16
1270
+ vprord ymm14, ymm14, 16
1271
+ vpaddd ymm10, ymm10, ymm15
1272
+ vpaddd ymm11, ymm11, ymm12
1273
+ vpaddd ymm8, ymm8, ymm13
1274
+ vpaddd ymm9, ymm9, ymm14
1275
+ vpxord ymm5, ymm5, ymm10
1276
+ vpxord ymm6, ymm6, ymm11
1277
+ vpxord ymm7, ymm7, ymm8
1278
+ vpxord ymm4, ymm4, ymm9
1279
+ vprord ymm5, ymm5, 12
1280
+ vprord ymm6, ymm6, 12
1281
+ vprord ymm7, ymm7, 12
1282
+ vprord ymm4, ymm4, 12
1283
+ vpaddd ymm0, ymm0, ymm25
1284
+ vpaddd ymm1, ymm1, ymm27
1285
+ vpaddd ymm2, ymm2, ymm29
1286
+ vpaddd ymm3, ymm3, ymm31
1287
+ vpaddd ymm0, ymm0, ymm5
1288
+ vpaddd ymm1, ymm1, ymm6
1289
+ vpaddd ymm2, ymm2, ymm7
1290
+ vpaddd ymm3, ymm3, ymm4
1291
+ vpxord ymm15, ymm15, ymm0
1292
+ vpxord ymm12, ymm12, ymm1
1293
+ vpxord ymm13, ymm13, ymm2
1294
+ vpxord ymm14, ymm14, ymm3
1295
+ vprord ymm15, ymm15, 8
1296
+ vprord ymm12, ymm12, 8
1297
+ vprord ymm13, ymm13, 8
1298
+ vprord ymm14, ymm14, 8
1299
+ vpaddd ymm10, ymm10, ymm15
1300
+ vpaddd ymm11, ymm11, ymm12
1301
+ vpaddd ymm8, ymm8, ymm13
1302
+ vpaddd ymm9, ymm9, ymm14
1303
+ vpxord ymm5, ymm5, ymm10
1304
+ vpxord ymm6, ymm6, ymm11
1305
+ vpxord ymm7, ymm7, ymm8
1306
+ vpxord ymm4, ymm4, ymm9
1307
+ vprord ymm5, ymm5, 7
1308
+ vprord ymm6, ymm6, 7
1309
+ vprord ymm7, ymm7, 7
1310
+ vprord ymm4, ymm4, 7
1311
+ vpaddd ymm0, ymm0, ymm18
1312
+ vpaddd ymm1, ymm1, ymm19
1313
+ vpaddd ymm2, ymm2, ymm23
1314
+ vpaddd ymm3, ymm3, ymm20
1315
+ vpaddd ymm0, ymm0, ymm4
1316
+ vpaddd ymm1, ymm1, ymm5
1317
+ vpaddd ymm2, ymm2, ymm6
1318
+ vpaddd ymm3, ymm3, ymm7
1319
+ vpxord ymm12, ymm12, ymm0
1320
+ vpxord ymm13, ymm13, ymm1
1321
+ vpxord ymm14, ymm14, ymm2
1322
+ vpxord ymm15, ymm15, ymm3
1323
+ vprord ymm12, ymm12, 16
1324
+ vprord ymm13, ymm13, 16
1325
+ vprord ymm14, ymm14, 16
1326
+ vprord ymm15, ymm15, 16
1327
+ vpaddd ymm8, ymm8, ymm12
1328
+ vpaddd ymm9, ymm9, ymm13
1329
+ vpaddd ymm10, ymm10, ymm14
1330
+ vpaddd ymm11, ymm11, ymm15
1331
+ vpxord ymm4, ymm4, ymm8
1332
+ vpxord ymm5, ymm5, ymm9
1333
+ vpxord ymm6, ymm6, ymm10
1334
+ vpxord ymm7, ymm7, ymm11
1335
+ vprord ymm4, ymm4, 12
1336
+ vprord ymm5, ymm5, 12
1337
+ vprord ymm6, ymm6, 12
1338
+ vprord ymm7, ymm7, 12
1339
+ vpaddd ymm0, ymm0, ymm22
1340
+ vpaddd ymm1, ymm1, ymm26
1341
+ vpaddd ymm2, ymm2, ymm16
1342
+ vpaddd ymm3, ymm3, ymm29
1343
+ vpaddd ymm0, ymm0, ymm4
1344
+ vpaddd ymm1, ymm1, ymm5
1345
+ vpaddd ymm2, ymm2, ymm6
1346
+ vpaddd ymm3, ymm3, ymm7
1347
+ vpxord ymm12, ymm12, ymm0
1348
+ vpxord ymm13, ymm13, ymm1
1349
+ vpxord ymm14, ymm14, ymm2
1350
+ vpxord ymm15, ymm15, ymm3
1351
+ vprord ymm12, ymm12, 8
1352
+ vprord ymm13, ymm13, 8
1353
+ vprord ymm14, ymm14, 8
1354
+ vprord ymm15, ymm15, 8
1355
+ vpaddd ymm8, ymm8, ymm12
1356
+ vpaddd ymm9, ymm9, ymm13
1357
+ vpaddd ymm10, ymm10, ymm14
1358
+ vpaddd ymm11, ymm11, ymm15
1359
+ vpxord ymm4, ymm4, ymm8
1360
+ vpxord ymm5, ymm5, ymm9
1361
+ vpxord ymm6, ymm6, ymm10
1362
+ vpxord ymm7, ymm7, ymm11
1363
+ vprord ymm4, ymm4, 7
1364
+ vprord ymm5, ymm5, 7
1365
+ vprord ymm6, ymm6, 7
1366
+ vprord ymm7, ymm7, 7
1367
+ vpaddd ymm0, ymm0, ymm17
1368
+ vpaddd ymm1, ymm1, ymm28
1369
+ vpaddd ymm2, ymm2, ymm25
1370
+ vpaddd ymm3, ymm3, ymm31
1371
+ vpaddd ymm0, ymm0, ymm5
1372
+ vpaddd ymm1, ymm1, ymm6
1373
+ vpaddd ymm2, ymm2, ymm7
1374
+ vpaddd ymm3, ymm3, ymm4
1375
+ vpxord ymm15, ymm15, ymm0
1376
+ vpxord ymm12, ymm12, ymm1
1377
+ vpxord ymm13, ymm13, ymm2
1378
+ vpxord ymm14, ymm14, ymm3
1379
+ vprord ymm15, ymm15, 16
1380
+ vprord ymm12, ymm12, 16
1381
+ vprord ymm13, ymm13, 16
1382
+ vprord ymm14, ymm14, 16
1383
+ vpaddd ymm10, ymm10, ymm15
1384
+ vpaddd ymm11, ymm11, ymm12
1385
+ vpaddd ymm8, ymm8, ymm13
1386
+ vpaddd ymm9, ymm9, ymm14
1387
+ vpxord ymm5, ymm5, ymm10
1388
+ vpxord ymm6, ymm6, ymm11
1389
+ vpxord ymm7, ymm7, ymm8
1390
+ vpxord ymm4, ymm4, ymm9
1391
+ vprord ymm5, ymm5, 12
1392
+ vprord ymm6, ymm6, 12
1393
+ vprord ymm7, ymm7, 12
1394
+ vprord ymm4, ymm4, 12
1395
+ vpaddd ymm0, ymm0, ymm27
1396
+ vpaddd ymm1, ymm1, ymm21
1397
+ vpaddd ymm2, ymm2, ymm30
1398
+ vpaddd ymm3, ymm3, ymm24
1399
+ vpaddd ymm0, ymm0, ymm5
1400
+ vpaddd ymm1, ymm1, ymm6
1401
+ vpaddd ymm2, ymm2, ymm7
1402
+ vpaddd ymm3, ymm3, ymm4
1403
+ vpxord ymm15, ymm15, ymm0
1404
+ vpxord ymm12, ymm12, ymm1
1405
+ vpxord ymm13, ymm13, ymm2
1406
+ vpxord ymm14, ymm14, ymm3
1407
+ vprord ymm15, ymm15, 8
1408
+ vprord ymm12, ymm12, 8
1409
+ vprord ymm13, ymm13, 8
1410
+ vprord ymm14, ymm14, 8
1411
+ vpaddd ymm10, ymm10, ymm15
1412
+ vpaddd ymm11, ymm11, ymm12
1413
+ vpaddd ymm8, ymm8, ymm13
1414
+ vpaddd ymm9, ymm9, ymm14
1415
+ vpxord ymm5, ymm5, ymm10
1416
+ vpxord ymm6, ymm6, ymm11
1417
+ vpxord ymm7, ymm7, ymm8
1418
+ vpxord ymm4, ymm4, ymm9
1419
+ vprord ymm5, ymm5, 7
1420
+ vprord ymm6, ymm6, 7
1421
+ vprord ymm7, ymm7, 7
1422
+ vprord ymm4, ymm4, 7
1423
+ vpaddd ymm0, ymm0, ymm19
1424
+ vpaddd ymm1, ymm1, ymm26
1425
+ vpaddd ymm2, ymm2, ymm29
1426
+ vpaddd ymm3, ymm3, ymm23
1427
+ vpaddd ymm0, ymm0, ymm4
1428
+ vpaddd ymm1, ymm1, ymm5
1429
+ vpaddd ymm2, ymm2, ymm6
1430
+ vpaddd ymm3, ymm3, ymm7
1431
+ vpxord ymm12, ymm12, ymm0
1432
+ vpxord ymm13, ymm13, ymm1
1433
+ vpxord ymm14, ymm14, ymm2
1434
+ vpxord ymm15, ymm15, ymm3
1435
+ vprord ymm12, ymm12, 16
1436
+ vprord ymm13, ymm13, 16
1437
+ vprord ymm14, ymm14, 16
1438
+ vprord ymm15, ymm15, 16
1439
+ vpaddd ymm8, ymm8, ymm12
1440
+ vpaddd ymm9, ymm9, ymm13
1441
+ vpaddd ymm10, ymm10, ymm14
1442
+ vpaddd ymm11, ymm11, ymm15
1443
+ vpxord ymm4, ymm4, ymm8
1444
+ vpxord ymm5, ymm5, ymm9
1445
+ vpxord ymm6, ymm6, ymm10
1446
+ vpxord ymm7, ymm7, ymm11
1447
+ vprord ymm4, ymm4, 12
1448
+ vprord ymm5, ymm5, 12
1449
+ vprord ymm6, ymm6, 12
1450
+ vprord ymm7, ymm7, 12
1451
+ vpaddd ymm0, ymm0, ymm20
1452
+ vpaddd ymm1, ymm1, ymm28
1453
+ vpaddd ymm2, ymm2, ymm18
1454
+ vpaddd ymm3, ymm3, ymm30
1455
+ vpaddd ymm0, ymm0, ymm4
1456
+ vpaddd ymm1, ymm1, ymm5
1457
+ vpaddd ymm2, ymm2, ymm6
1458
+ vpaddd ymm3, ymm3, ymm7
1459
+ vpxord ymm12, ymm12, ymm0
1460
+ vpxord ymm13, ymm13, ymm1
1461
+ vpxord ymm14, ymm14, ymm2
1462
+ vpxord ymm15, ymm15, ymm3
1463
+ vprord ymm12, ymm12, 8
1464
+ vprord ymm13, ymm13, 8
1465
+ vprord ymm14, ymm14, 8
1466
+ vprord ymm15, ymm15, 8
1467
+ vpaddd ymm8, ymm8, ymm12
1468
+ vpaddd ymm9, ymm9, ymm13
1469
+ vpaddd ymm10, ymm10, ymm14
1470
+ vpaddd ymm11, ymm11, ymm15
1471
+ vpxord ymm4, ymm4, ymm8
1472
+ vpxord ymm5, ymm5, ymm9
1473
+ vpxord ymm6, ymm6, ymm10
1474
+ vpxord ymm7, ymm7, ymm11
1475
+ vprord ymm4, ymm4, 7
1476
+ vprord ymm5, ymm5, 7
1477
+ vprord ymm6, ymm6, 7
1478
+ vprord ymm7, ymm7, 7
1479
+ vpaddd ymm0, ymm0, ymm22
1480
+ vpaddd ymm1, ymm1, ymm25
1481
+ vpaddd ymm2, ymm2, ymm27
1482
+ vpaddd ymm3, ymm3, ymm24
1483
+ vpaddd ymm0, ymm0, ymm5
1484
+ vpaddd ymm1, ymm1, ymm6
1485
+ vpaddd ymm2, ymm2, ymm7
1486
+ vpaddd ymm3, ymm3, ymm4
1487
+ vpxord ymm15, ymm15, ymm0
1488
+ vpxord ymm12, ymm12, ymm1
1489
+ vpxord ymm13, ymm13, ymm2
1490
+ vpxord ymm14, ymm14, ymm3
1491
+ vprord ymm15, ymm15, 16
1492
+ vprord ymm12, ymm12, 16
1493
+ vprord ymm13, ymm13, 16
1494
+ vprord ymm14, ymm14, 16
1495
+ vpaddd ymm10, ymm10, ymm15
1496
+ vpaddd ymm11, ymm11, ymm12
1497
+ vpaddd ymm8, ymm8, ymm13
1498
+ vpaddd ymm9, ymm9, ymm14
1499
+ vpxord ymm5, ymm5, ymm10
1500
+ vpxord ymm6, ymm6, ymm11
1501
+ vpxord ymm7, ymm7, ymm8
1502
+ vpxord ymm4, ymm4, ymm9
1503
+ vprord ymm5, ymm5, 12
1504
+ vprord ymm6, ymm6, 12
1505
+ vprord ymm7, ymm7, 12
1506
+ vprord ymm4, ymm4, 12
1507
+ vpaddd ymm0, ymm0, ymm21
1508
+ vpaddd ymm1, ymm1, ymm16
1509
+ vpaddd ymm2, ymm2, ymm31
1510
+ vpaddd ymm3, ymm3, ymm17
1511
+ vpaddd ymm0, ymm0, ymm5
1512
+ vpaddd ymm1, ymm1, ymm6
1513
+ vpaddd ymm2, ymm2, ymm7
1514
+ vpaddd ymm3, ymm3, ymm4
1515
+ vpxord ymm15, ymm15, ymm0
1516
+ vpxord ymm12, ymm12, ymm1
1517
+ vpxord ymm13, ymm13, ymm2
1518
+ vpxord ymm14, ymm14, ymm3
1519
+ vprord ymm15, ymm15, 8
1520
+ vprord ymm12, ymm12, 8
1521
+ vprord ymm13, ymm13, 8
1522
+ vprord ymm14, ymm14, 8
1523
+ vpaddd ymm10, ymm10, ymm15
1524
+ vpaddd ymm11, ymm11, ymm12
1525
+ vpaddd ymm8, ymm8, ymm13
1526
+ vpaddd ymm9, ymm9, ymm14
1527
+ vpxord ymm5, ymm5, ymm10
1528
+ vpxord ymm6, ymm6, ymm11
1529
+ vpxord ymm7, ymm7, ymm8
1530
+ vpxord ymm4, ymm4, ymm9
1531
+ vprord ymm5, ymm5, 7
1532
+ vprord ymm6, ymm6, 7
1533
+ vprord ymm7, ymm7, 7
1534
+ vprord ymm4, ymm4, 7
1535
+ vpaddd ymm0, ymm0, ymm26
1536
+ vpaddd ymm1, ymm1, ymm28
1537
+ vpaddd ymm2, ymm2, ymm30
1538
+ vpaddd ymm3, ymm3, ymm29
1539
+ vpaddd ymm0, ymm0, ymm4
1540
+ vpaddd ymm1, ymm1, ymm5
1541
+ vpaddd ymm2, ymm2, ymm6
1542
+ vpaddd ymm3, ymm3, ymm7
1543
+ vpxord ymm12, ymm12, ymm0
1544
+ vpxord ymm13, ymm13, ymm1
1545
+ vpxord ymm14, ymm14, ymm2
1546
+ vpxord ymm15, ymm15, ymm3
1547
+ vprord ymm12, ymm12, 16
1548
+ vprord ymm13, ymm13, 16
1549
+ vprord ymm14, ymm14, 16
1550
+ vprord ymm15, ymm15, 16
1551
+ vpaddd ymm8, ymm8, ymm12
1552
+ vpaddd ymm9, ymm9, ymm13
1553
+ vpaddd ymm10, ymm10, ymm14
1554
+ vpaddd ymm11, ymm11, ymm15
1555
+ vpxord ymm4, ymm4, ymm8
1556
+ vpxord ymm5, ymm5, ymm9
1557
+ vpxord ymm6, ymm6, ymm10
1558
+ vpxord ymm7, ymm7, ymm11
1559
+ vprord ymm4, ymm4, 12
1560
+ vprord ymm5, ymm5, 12
1561
+ vprord ymm6, ymm6, 12
1562
+ vprord ymm7, ymm7, 12
1563
+ vpaddd ymm0, ymm0, ymm23
1564
+ vpaddd ymm1, ymm1, ymm25
1565
+ vpaddd ymm2, ymm2, ymm19
1566
+ vpaddd ymm3, ymm3, ymm31
1567
+ vpaddd ymm0, ymm0, ymm4
1568
+ vpaddd ymm1, ymm1, ymm5
1569
+ vpaddd ymm2, ymm2, ymm6
1570
+ vpaddd ymm3, ymm3, ymm7
1571
+ vpxord ymm12, ymm12, ymm0
1572
+ vpxord ymm13, ymm13, ymm1
1573
+ vpxord ymm14, ymm14, ymm2
1574
+ vpxord ymm15, ymm15, ymm3
1575
+ vprord ymm12, ymm12, 8
1576
+ vprord ymm13, ymm13, 8
1577
+ vprord ymm14, ymm14, 8
1578
+ vprord ymm15, ymm15, 8
1579
+ vpaddd ymm8, ymm8, ymm12
1580
+ vpaddd ymm9, ymm9, ymm13
1581
+ vpaddd ymm10, ymm10, ymm14
1582
+ vpaddd ymm11, ymm11, ymm15
1583
+ vpxord ymm4, ymm4, ymm8
1584
+ vpxord ymm5, ymm5, ymm9
1585
+ vpxord ymm6, ymm6, ymm10
1586
+ vpxord ymm7, ymm7, ymm11
1587
+ vprord ymm4, ymm4, 7
1588
+ vprord ymm5, ymm5, 7
1589
+ vprord ymm6, ymm6, 7
1590
+ vprord ymm7, ymm7, 7
1591
+ vpaddd ymm0, ymm0, ymm20
1592
+ vpaddd ymm1, ymm1, ymm27
1593
+ vpaddd ymm2, ymm2, ymm21
1594
+ vpaddd ymm3, ymm3, ymm17
1595
+ vpaddd ymm0, ymm0, ymm5
1596
+ vpaddd ymm1, ymm1, ymm6
1597
+ vpaddd ymm2, ymm2, ymm7
1598
+ vpaddd ymm3, ymm3, ymm4
1599
+ vpxord ymm15, ymm15, ymm0
1600
+ vpxord ymm12, ymm12, ymm1
1601
+ vpxord ymm13, ymm13, ymm2
1602
+ vpxord ymm14, ymm14, ymm3
1603
+ vprord ymm15, ymm15, 16
1604
+ vprord ymm12, ymm12, 16
1605
+ vprord ymm13, ymm13, 16
1606
+ vprord ymm14, ymm14, 16
1607
+ vpaddd ymm10, ymm10, ymm15
1608
+ vpaddd ymm11, ymm11, ymm12
1609
+ vpaddd ymm8, ymm8, ymm13
1610
+ vpaddd ymm9, ymm9, ymm14
1611
+ vpxord ymm5, ymm5, ymm10
1612
+ vpxord ymm6, ymm6, ymm11
1613
+ vpxord ymm7, ymm7, ymm8
1614
+ vpxord ymm4, ymm4, ymm9
1615
+ vprord ymm5, ymm5, 12
1616
+ vprord ymm6, ymm6, 12
1617
+ vprord ymm7, ymm7, 12
1618
+ vprord ymm4, ymm4, 12
1619
+ vpaddd ymm0, ymm0, ymm16
1620
+ vpaddd ymm1, ymm1, ymm18
1621
+ vpaddd ymm2, ymm2, ymm24
1622
+ vpaddd ymm3, ymm3, ymm22
1623
+ vpaddd ymm0, ymm0, ymm5
1624
+ vpaddd ymm1, ymm1, ymm6
1625
+ vpaddd ymm2, ymm2, ymm7
1626
+ vpaddd ymm3, ymm3, ymm4
1627
+ vpxord ymm15, ymm15, ymm0
1628
+ vpxord ymm12, ymm12, ymm1
1629
+ vpxord ymm13, ymm13, ymm2
1630
+ vpxord ymm14, ymm14, ymm3
1631
+ vprord ymm15, ymm15, 8
1632
+ vprord ymm12, ymm12, 8
1633
+ vprord ymm13, ymm13, 8
1634
+ vprord ymm14, ymm14, 8
1635
+ vpaddd ymm10, ymm10, ymm15
1636
+ vpaddd ymm11, ymm11, ymm12
1637
+ vpaddd ymm8, ymm8, ymm13
1638
+ vpaddd ymm9, ymm9, ymm14
1639
+ vpxord ymm5, ymm5, ymm10
1640
+ vpxord ymm6, ymm6, ymm11
1641
+ vpxord ymm7, ymm7, ymm8
1642
+ vpxord ymm4, ymm4, ymm9
1643
+ vprord ymm5, ymm5, 7
1644
+ vprord ymm6, ymm6, 7
1645
+ vprord ymm7, ymm7, 7
1646
+ vprord ymm4, ymm4, 7
1647
+ vpaddd ymm0, ymm0, ymm28
1648
+ vpaddd ymm1, ymm1, ymm25
1649
+ vpaddd ymm2, ymm2, ymm31
1650
+ vpaddd ymm3, ymm3, ymm30
1651
+ vpaddd ymm0, ymm0, ymm4
1652
+ vpaddd ymm1, ymm1, ymm5
1653
+ vpaddd ymm2, ymm2, ymm6
1654
+ vpaddd ymm3, ymm3, ymm7
1655
+ vpxord ymm12, ymm12, ymm0
1656
+ vpxord ymm13, ymm13, ymm1
1657
+ vpxord ymm14, ymm14, ymm2
1658
+ vpxord ymm15, ymm15, ymm3
1659
+ vprord ymm12, ymm12, 16
1660
+ vprord ymm13, ymm13, 16
1661
+ vprord ymm14, ymm14, 16
1662
+ vprord ymm15, ymm15, 16
1663
+ vpaddd ymm8, ymm8, ymm12
1664
+ vpaddd ymm9, ymm9, ymm13
1665
+ vpaddd ymm10, ymm10, ymm14
1666
+ vpaddd ymm11, ymm11, ymm15
1667
+ vpxord ymm4, ymm4, ymm8
1668
+ vpxord ymm5, ymm5, ymm9
1669
+ vpxord ymm6, ymm6, ymm10
1670
+ vpxord ymm7, ymm7, ymm11
1671
+ vprord ymm4, ymm4, 12
1672
+ vprord ymm5, ymm5, 12
1673
+ vprord ymm6, ymm6, 12
1674
+ vprord ymm7, ymm7, 12
1675
+ vpaddd ymm0, ymm0, ymm29
1676
+ vpaddd ymm1, ymm1, ymm27
1677
+ vpaddd ymm2, ymm2, ymm26
1678
+ vpaddd ymm3, ymm3, ymm24
1679
+ vpaddd ymm0, ymm0, ymm4
1680
+ vpaddd ymm1, ymm1, ymm5
1681
+ vpaddd ymm2, ymm2, ymm6
1682
+ vpaddd ymm3, ymm3, ymm7
1683
+ vpxord ymm12, ymm12, ymm0
1684
+ vpxord ymm13, ymm13, ymm1
1685
+ vpxord ymm14, ymm14, ymm2
1686
+ vpxord ymm15, ymm15, ymm3
1687
+ vprord ymm12, ymm12, 8
1688
+ vprord ymm13, ymm13, 8
1689
+ vprord ymm14, ymm14, 8
1690
+ vprord ymm15, ymm15, 8
1691
+ vpaddd ymm8, ymm8, ymm12
1692
+ vpaddd ymm9, ymm9, ymm13
1693
+ vpaddd ymm10, ymm10, ymm14
1694
+ vpaddd ymm11, ymm11, ymm15
1695
+ vpxord ymm4, ymm4, ymm8
1696
+ vpxord ymm5, ymm5, ymm9
1697
+ vpxord ymm6, ymm6, ymm10
1698
+ vpxord ymm7, ymm7, ymm11
1699
+ vprord ymm4, ymm4, 7
1700
+ vprord ymm5, ymm5, 7
1701
+ vprord ymm6, ymm6, 7
1702
+ vprord ymm7, ymm7, 7
1703
+ vpaddd ymm0, ymm0, ymm23
1704
+ vpaddd ymm1, ymm1, ymm21
1705
+ vpaddd ymm2, ymm2, ymm16
1706
+ vpaddd ymm3, ymm3, ymm22
1707
+ vpaddd ymm0, ymm0, ymm5
1708
+ vpaddd ymm1, ymm1, ymm6
1709
+ vpaddd ymm2, ymm2, ymm7
1710
+ vpaddd ymm3, ymm3, ymm4
1711
+ vpxord ymm15, ymm15, ymm0
1712
+ vpxord ymm12, ymm12, ymm1
1713
+ vpxord ymm13, ymm13, ymm2
1714
+ vpxord ymm14, ymm14, ymm3
1715
+ vprord ymm15, ymm15, 16
1716
+ vprord ymm12, ymm12, 16
1717
+ vprord ymm13, ymm13, 16
1718
+ vprord ymm14, ymm14, 16
1719
+ vpaddd ymm10, ymm10, ymm15
1720
+ vpaddd ymm11, ymm11, ymm12
1721
+ vpaddd ymm8, ymm8, ymm13
1722
+ vpaddd ymm9, ymm9, ymm14
1723
+ vpxord ymm5, ymm5, ymm10
1724
+ vpxord ymm6, ymm6, ymm11
1725
+ vpxord ymm7, ymm7, ymm8
1726
+ vpxord ymm4, ymm4, ymm9
1727
+ vprord ymm5, ymm5, 12
1728
+ vprord ymm6, ymm6, 12
1729
+ vprord ymm7, ymm7, 12
1730
+ vprord ymm4, ymm4, 12
1731
+ vpaddd ymm0, ymm0, ymm18
1732
+ vpaddd ymm1, ymm1, ymm19
1733
+ vpaddd ymm2, ymm2, ymm17
1734
+ vpaddd ymm3, ymm3, ymm20
1735
+ vpaddd ymm0, ymm0, ymm5
1736
+ vpaddd ymm1, ymm1, ymm6
1737
+ vpaddd ymm2, ymm2, ymm7
1738
+ vpaddd ymm3, ymm3, ymm4
1739
+ vpxord ymm15, ymm15, ymm0
1740
+ vpxord ymm12, ymm12, ymm1
1741
+ vpxord ymm13, ymm13, ymm2
1742
+ vpxord ymm14, ymm14, ymm3
1743
+ vprord ymm15, ymm15, 8
1744
+ vprord ymm12, ymm12, 8
1745
+ vprord ymm13, ymm13, 8
1746
+ vprord ymm14, ymm14, 8
1747
+ vpaddd ymm10, ymm10, ymm15
1748
+ vpaddd ymm11, ymm11, ymm12
1749
+ vpaddd ymm8, ymm8, ymm13
1750
+ vpaddd ymm9, ymm9, ymm14
1751
+ vpxord ymm5, ymm5, ymm10
1752
+ vpxord ymm6, ymm6, ymm11
1753
+ vpxord ymm7, ymm7, ymm8
1754
+ vpxord ymm4, ymm4, ymm9
1755
+ vprord ymm5, ymm5, 7
1756
+ vprord ymm6, ymm6, 7
1757
+ vprord ymm7, ymm7, 7
1758
+ vprord ymm4, ymm4, 7
1759
+ vpaddd ymm0, ymm0, ymm25
1760
+ vpaddd ymm1, ymm1, ymm27
1761
+ vpaddd ymm2, ymm2, ymm24
1762
+ vpaddd ymm3, ymm3, ymm31
1763
+ vpaddd ymm0, ymm0, ymm4
1764
+ vpaddd ymm1, ymm1, ymm5
1765
+ vpaddd ymm2, ymm2, ymm6
1766
+ vpaddd ymm3, ymm3, ymm7
1767
+ vpxord ymm12, ymm12, ymm0
1768
+ vpxord ymm13, ymm13, ymm1
1769
+ vpxord ymm14, ymm14, ymm2
1770
+ vpxord ymm15, ymm15, ymm3
1771
+ vprord ymm12, ymm12, 16
1772
+ vprord ymm13, ymm13, 16
1773
+ vprord ymm14, ymm14, 16
1774
+ vprord ymm15, ymm15, 16
1775
+ vpaddd ymm8, ymm8, ymm12
1776
+ vpaddd ymm9, ymm9, ymm13
1777
+ vpaddd ymm10, ymm10, ymm14
1778
+ vpaddd ymm11, ymm11, ymm15
1779
+ vpxord ymm4, ymm4, ymm8
1780
+ vpxord ymm5, ymm5, ymm9
1781
+ vpxord ymm6, ymm6, ymm10
1782
+ vpxord ymm7, ymm7, ymm11
1783
+ vprord ymm4, ymm4, 12
1784
+ vprord ymm5, ymm5, 12
1785
+ vprord ymm6, ymm6, 12
1786
+ vprord ymm7, ymm7, 12
1787
+ vpaddd ymm0, ymm0, ymm30
1788
+ vpaddd ymm1, ymm1, ymm21
1789
+ vpaddd ymm2, ymm2, ymm28
1790
+ vpaddd ymm3, ymm3, ymm17
1791
+ vpaddd ymm0, ymm0, ymm4
1792
+ vpaddd ymm1, ymm1, ymm5
1793
+ vpaddd ymm2, ymm2, ymm6
1794
+ vpaddd ymm3, ymm3, ymm7
1795
+ vpxord ymm12, ymm12, ymm0
1796
+ vpxord ymm13, ymm13, ymm1
1797
+ vpxord ymm14, ymm14, ymm2
1798
+ vpxord ymm15, ymm15, ymm3
1799
+ vprord ymm12, ymm12, 8
1800
+ vprord ymm13, ymm13, 8
1801
+ vprord ymm14, ymm14, 8
1802
+ vprord ymm15, ymm15, 8
1803
+ vpaddd ymm8, ymm8, ymm12
1804
+ vpaddd ymm9, ymm9, ymm13
1805
+ vpaddd ymm10, ymm10, ymm14
1806
+ vpaddd ymm11, ymm11, ymm15
1807
+ vpxord ymm4, ymm4, ymm8
1808
+ vpxord ymm5, ymm5, ymm9
1809
+ vpxord ymm6, ymm6, ymm10
1810
+ vpxord ymm7, ymm7, ymm11
1811
+ vprord ymm4, ymm4, 7
1812
+ vprord ymm5, ymm5, 7
1813
+ vprord ymm6, ymm6, 7
1814
+ vprord ymm7, ymm7, 7
1815
+ vpaddd ymm0, ymm0, ymm29
1816
+ vpaddd ymm1, ymm1, ymm16
1817
+ vpaddd ymm2, ymm2, ymm18
1818
+ vpaddd ymm3, ymm3, ymm20
1819
+ vpaddd ymm0, ymm0, ymm5
1820
+ vpaddd ymm1, ymm1, ymm6
1821
+ vpaddd ymm2, ymm2, ymm7
1822
+ vpaddd ymm3, ymm3, ymm4
1823
+ vpxord ymm15, ymm15, ymm0
1824
+ vpxord ymm12, ymm12, ymm1
1825
+ vpxord ymm13, ymm13, ymm2
1826
+ vpxord ymm14, ymm14, ymm3
1827
+ vprord ymm15, ymm15, 16
1828
+ vprord ymm12, ymm12, 16
1829
+ vprord ymm13, ymm13, 16
1830
+ vprord ymm14, ymm14, 16
1831
+ vpaddd ymm10, ymm10, ymm15
1832
+ vpaddd ymm11, ymm11, ymm12
1833
+ vpaddd ymm8, ymm8, ymm13
1834
+ vpaddd ymm9, ymm9, ymm14
1835
+ vpxord ymm5, ymm5, ymm10
1836
+ vpxord ymm6, ymm6, ymm11
1837
+ vpxord ymm7, ymm7, ymm8
1838
+ vpxord ymm4, ymm4, ymm9
1839
+ vprord ymm5, ymm5, 12
1840
+ vprord ymm6, ymm6, 12
1841
+ vprord ymm7, ymm7, 12
1842
+ vprord ymm4, ymm4, 12
1843
+ vpaddd ymm0, ymm0, ymm19
1844
+ vpaddd ymm1, ymm1, ymm26
1845
+ vpaddd ymm2, ymm2, ymm22
1846
+ vpaddd ymm3, ymm3, ymm23
1847
+ vpaddd ymm0, ymm0, ymm5
1848
+ vpaddd ymm1, ymm1, ymm6
1849
+ vpaddd ymm2, ymm2, ymm7
1850
+ vpaddd ymm3, ymm3, ymm4
1851
+ vpxord ymm15, ymm15, ymm0
1852
+ vpxord ymm12, ymm12, ymm1
1853
+ vpxord ymm13, ymm13, ymm2
1854
+ vpxord ymm14, ymm14, ymm3
1855
+ vprord ymm15, ymm15, 8
1856
+ vprord ymm12, ymm12, 8
1857
+ vprord ymm13, ymm13, 8
1858
+ vprord ymm14, ymm14, 8
1859
+ vpaddd ymm10, ymm10, ymm15
1860
+ vpaddd ymm11, ymm11, ymm12
1861
+ vpaddd ymm8, ymm8, ymm13
1862
+ vpaddd ymm9, ymm9, ymm14
1863
+ vpxord ymm5, ymm5, ymm10
1864
+ vpxord ymm6, ymm6, ymm11
1865
+ vpxord ymm7, ymm7, ymm8
1866
+ vpxord ymm4, ymm4, ymm9
1867
+ vprord ymm5, ymm5, 7
1868
+ vprord ymm6, ymm6, 7
1869
+ vprord ymm7, ymm7, 7
1870
+ vprord ymm4, ymm4, 7
1871
+ vpaddd ymm0, ymm0, ymm27
1872
+ vpaddd ymm1, ymm1, ymm21
1873
+ vpaddd ymm2, ymm2, ymm17
1874
+ vpaddd ymm3, ymm3, ymm24
1875
+ vpaddd ymm0, ymm0, ymm4
1876
+ vpaddd ymm1, ymm1, ymm5
1877
+ vpaddd ymm2, ymm2, ymm6
1878
+ vpaddd ymm3, ymm3, ymm7
1879
+ vpxord ymm12, ymm12, ymm0
1880
+ vpxord ymm13, ymm13, ymm1
1881
+ vpxord ymm14, ymm14, ymm2
1882
+ vpxord ymm15, ymm15, ymm3
1883
+ vprord ymm12, ymm12, 16
1884
+ vprord ymm13, ymm13, 16
1885
+ vprord ymm14, ymm14, 16
1886
+ vprord ymm15, ymm15, 16
1887
+ vpaddd ymm8, ymm8, ymm12
1888
+ vpaddd ymm9, ymm9, ymm13
1889
+ vpaddd ymm10, ymm10, ymm14
1890
+ vpaddd ymm11, ymm11, ymm15
1891
+ vpxord ymm4, ymm4, ymm8
1892
+ vpxord ymm5, ymm5, ymm9
1893
+ vpxord ymm6, ymm6, ymm10
1894
+ vpxord ymm7, ymm7, ymm11
1895
+ vprord ymm4, ymm4, 12
1896
+ vprord ymm5, ymm5, 12
1897
+ vprord ymm6, ymm6, 12
1898
+ vprord ymm7, ymm7, 12
1899
+ vpaddd ymm0, ymm0, ymm31
1900
+ vpaddd ymm1, ymm1, ymm16
1901
+ vpaddd ymm2, ymm2, ymm25
1902
+ vpaddd ymm3, ymm3, ymm22
1903
+ vpaddd ymm0, ymm0, ymm4
1904
+ vpaddd ymm1, ymm1, ymm5
1905
+ vpaddd ymm2, ymm2, ymm6
1906
+ vpaddd ymm3, ymm3, ymm7
1907
+ vpxord ymm12, ymm12, ymm0
1908
+ vpxord ymm13, ymm13, ymm1
1909
+ vpxord ymm14, ymm14, ymm2
1910
+ vpxord ymm15, ymm15, ymm3
1911
+ vprord ymm12, ymm12, 8
1912
+ vprord ymm13, ymm13, 8
1913
+ vprord ymm14, ymm14, 8
1914
+ vprord ymm15, ymm15, 8
1915
+ vpaddd ymm8, ymm8, ymm12
1916
+ vpaddd ymm9, ymm9, ymm13
1917
+ vpaddd ymm10, ymm10, ymm14
1918
+ vpaddd ymm11, ymm11, ymm15
1919
+ vpxord ymm4, ymm4, ymm8
1920
+ vpxord ymm5, ymm5, ymm9
1921
+ vpxord ymm6, ymm6, ymm10
1922
+ vpxord ymm7, ymm7, ymm11
1923
+ vprord ymm4, ymm4, 7
1924
+ vprord ymm5, ymm5, 7
1925
+ vprord ymm6, ymm6, 7
1926
+ vprord ymm7, ymm7, 7
1927
+ vpaddd ymm0, ymm0, ymm30
1928
+ vpaddd ymm1, ymm1, ymm18
1929
+ vpaddd ymm2, ymm2, ymm19
1930
+ vpaddd ymm3, ymm3, ymm23
1931
+ vpaddd ymm0, ymm0, ymm5
1932
+ vpaddd ymm1, ymm1, ymm6
1933
+ vpaddd ymm2, ymm2, ymm7
1934
+ vpaddd ymm3, ymm3, ymm4
1935
+ vpxord ymm15, ymm15, ymm0
1936
+ vpxord ymm12, ymm12, ymm1
1937
+ vpxord ymm13, ymm13, ymm2
1938
+ vpxord ymm14, ymm14, ymm3
1939
+ vprord ymm15, ymm15, 16
1940
+ vprord ymm12, ymm12, 16
1941
+ vprord ymm13, ymm13, 16
1942
+ vprord ymm14, ymm14, 16
1943
+ vpaddd ymm10, ymm10, ymm15
1944
+ vpaddd ymm11, ymm11, ymm12
1945
+ vpaddd ymm8, ymm8, ymm13
1946
+ vpaddd ymm9, ymm9, ymm14
1947
+ vpxord ymm5, ymm5, ymm10
1948
+ vpxord ymm6, ymm6, ymm11
1949
+ vpxord ymm7, ymm7, ymm8
1950
+ vpxord ymm4, ymm4, ymm9
1951
+ vprord ymm5, ymm5, 12
1952
+ vprord ymm6, ymm6, 12
1953
+ vprord ymm7, ymm7, 12
1954
+ vprord ymm4, ymm4, 12
1955
+ vpaddd ymm0, ymm0, ymm26
1956
+ vpaddd ymm1, ymm1, ymm28
1957
+ vpaddd ymm2, ymm2, ymm20
1958
+ vpaddd ymm3, ymm3, ymm29
1959
+ vpaddd ymm0, ymm0, ymm5
1960
+ vpaddd ymm1, ymm1, ymm6
1961
+ vpaddd ymm2, ymm2, ymm7
1962
+ vpaddd ymm3, ymm3, ymm4
1963
+ vpxord ymm15, ymm15, ymm0
1964
+ vpxord ymm12, ymm12, ymm1
1965
+ vpxord ymm13, ymm13, ymm2
1966
+ vpxord ymm14, ymm14, ymm3
1967
+ vprord ymm15, ymm15, 8
1968
+ vprord ymm12, ymm12, 8
1969
+ vprord ymm13, ymm13, 8
1970
+ vprord ymm14, ymm14, 8
1971
+ vpaddd ymm10, ymm10, ymm15
1972
+ vpaddd ymm11, ymm11, ymm12
1973
+ vpaddd ymm8, ymm8, ymm13
1974
+ vpaddd ymm9, ymm9, ymm14
1975
+ vpxord ymm5, ymm5, ymm10
1976
+ vpxord ymm6, ymm6, ymm11
1977
+ vpxord ymm7, ymm7, ymm8
1978
+ vpxord ymm4, ymm4, ymm9
1979
+ vprord ymm5, ymm5, 7
1980
+ vprord ymm6, ymm6, 7
1981
+ vprord ymm7, ymm7, 7
1982
+ vprord ymm4, ymm4, 7
1983
+ vpxor ymm0, ymm0, ymm8
1984
+ vpxor ymm1, ymm1, ymm9
1985
+ vpxor ymm2, ymm2, ymm10
1986
+ vpxor ymm3, ymm3, ymm11
1987
+ vpxor ymm4, ymm4, ymm12
1988
+ vpxor ymm5, ymm5, ymm13
1989
+ vpxor ymm6, ymm6, ymm14
1990
+ vpxor ymm7, ymm7, ymm15
1991
+ movzx eax, byte ptr [rbp+0x38]
1992
+ jne 2b
1993
+ mov rbx, qword ptr [rbp+0x50]
1994
+ vunpcklps ymm8, ymm0, ymm1
1995
+ vunpcklps ymm9, ymm2, ymm3
1996
+ vunpckhps ymm10, ymm0, ymm1
1997
+ vunpcklps ymm11, ymm4, ymm5
1998
+ vunpcklps ymm0, ymm6, ymm7
1999
+ vshufps ymm12, ymm8, ymm9, 78
2000
+ vblendps ymm1, ymm8, ymm12, 0xCC
2001
+ vshufps ymm8, ymm11, ymm0, 78
2002
+ vunpckhps ymm13, ymm2, ymm3
2003
+ vblendps ymm2, ymm11, ymm8, 0xCC
2004
+ vblendps ymm3, ymm12, ymm9, 0xCC
2005
+ vperm2f128 ymm12, ymm1, ymm2, 0x20
2006
+ vmovups ymmword ptr [rbx], ymm12
2007
+ vunpckhps ymm14, ymm4, ymm5
2008
+ vblendps ymm4, ymm8, ymm0, 0xCC
2009
+ vunpckhps ymm15, ymm6, ymm7
2010
+ vperm2f128 ymm7, ymm3, ymm4, 0x20
2011
+ vmovups ymmword ptr [rbx+0x20], ymm7
2012
+ vshufps ymm5, ymm10, ymm13, 78
2013
+ vblendps ymm6, ymm5, ymm13, 0xCC
2014
+ vshufps ymm13, ymm14, ymm15, 78
2015
+ vblendps ymm10, ymm10, ymm5, 0xCC
2016
+ vblendps ymm14, ymm14, ymm13, 0xCC
2017
+ vperm2f128 ymm8, ymm10, ymm14, 0x20
2018
+ vmovups ymmword ptr [rbx+0x40], ymm8
2019
+ vblendps ymm15, ymm13, ymm15, 0xCC
2020
+ vperm2f128 ymm13, ymm6, ymm15, 0x20
2021
+ vmovups ymmword ptr [rbx+0x60], ymm13
2022
+ vperm2f128 ymm9, ymm1, ymm2, 0x31
2023
+ vperm2f128 ymm11, ymm3, ymm4, 0x31
2024
+ vmovups ymmword ptr [rbx+0x80], ymm9
2025
+ vperm2f128 ymm14, ymm10, ymm14, 0x31
2026
+ vperm2f128 ymm15, ymm6, ymm15, 0x31
2027
+ vmovups ymmword ptr [rbx+0xA0], ymm11
2028
+ vmovups ymmword ptr [rbx+0xC0], ymm14
2029
+ vmovups ymmword ptr [rbx+0xE0], ymm15
2030
+ vmovdqa ymm0, ymmword ptr [rsp]
2031
+ vmovdqa ymm2, ymmword ptr [rsp+0x2*0x20]
2032
+ vmovdqa32 ymm0 {k1}, ymmword ptr [rsp+0x1*0x20]
2033
+ vmovdqa32 ymm2 {k1}, ymmword ptr [rsp+0x3*0x20]
2034
+ vmovdqa ymmword ptr [rsp], ymm0
2035
+ vmovdqa ymmword ptr [rsp+0x2*0x20], ymm2
2036
+ add rbx, 256
2037
+ mov qword ptr [rbp+0x50], rbx
2038
+ add rdi, 64
2039
+ sub rsi, 8
2040
+ 3:
2041
+ mov rbx, qword ptr [rbp+0x50]
2042
+ mov r15, qword ptr [rsp+0x80]
2043
+ movzx r13, byte ptr [rbp+0x38]
2044
+ movzx r12, byte ptr [rbp+0x48]
2045
+ test esi, 0x4
2046
+ je 3f
2047
+ vbroadcasti32x4 zmm0, xmmword ptr [rcx]
2048
+ vbroadcasti32x4 zmm1, xmmword ptr [rcx+0x1*0x10]
2049
+ vmovdqa xmm12, xmmword ptr [rsp]
2050
+ vmovdqa xmm13, xmmword ptr [rsp+0x4*0x10]
2051
+ vpunpckldq xmm14, xmm12, xmm13
2052
+ vpunpckhdq xmm15, xmm12, xmm13
2053
+ vpermq ymm14, ymm14, 0xDC
2054
+ vpermq ymm15, ymm15, 0xDC
2055
+ vpbroadcastd zmm12, dword ptr [BLAKE3_BLOCK_LEN+rip]
2056
+ vinserti64x4 zmm13, zmm14, ymm15, 0x01
2057
+ mov eax, 17476
2058
+ kmovw k2, eax
2059
+ vpblendmd zmm13 {k2}, zmm13, zmm12
2060
+ vbroadcasti32x4 zmm15, xmmword ptr [BLAKE3_IV+rip]
2061
+ mov r8, qword ptr [rdi]
2062
+ mov r9, qword ptr [rdi+0x8]
2063
+ mov r10, qword ptr [rdi+0x10]
2064
+ mov r11, qword ptr [rdi+0x18]
2065
+ mov eax, 43690
2066
+ kmovw k3, eax
2067
+ mov eax, 34952
2068
+ kmovw k4, eax
2069
+ movzx eax, byte ptr [rbp+0x40]
2070
+ or eax, r13d
2071
+ xor edx, edx
2072
+ .p2align 5
2073
+ 2:
2074
+ mov r14d, eax
2075
+ or eax, r12d
2076
+ add rdx, 64
2077
+ cmp rdx, r15
2078
+ cmovne eax, r14d
2079
+ mov dword ptr [rsp+0x88], eax
2080
+ vmovdqa32 zmm2, zmm15
2081
+ vpbroadcastd zmm8, dword ptr [rsp+0x22*0x4]
2082
+ vpblendmd zmm3 {k4}, zmm13, zmm8
2083
+ vmovups zmm8, zmmword ptr [r8+rdx-0x1*0x40]
2084
+ vinserti32x4 zmm8, zmm8, xmmword ptr [r9+rdx-0x4*0x10], 0x01
2085
+ vinserti32x4 zmm8, zmm8, xmmword ptr [r10+rdx-0x4*0x10], 0x02
2086
+ vinserti32x4 zmm8, zmm8, xmmword ptr [r11+rdx-0x4*0x10], 0x03
2087
+ vmovups zmm9, zmmword ptr [r8+rdx-0x30]
2088
+ vinserti32x4 zmm9, zmm9, xmmword ptr [r9+rdx-0x3*0x10], 0x01
2089
+ vinserti32x4 zmm9, zmm9, xmmword ptr [r10+rdx-0x3*0x10], 0x02
2090
+ vinserti32x4 zmm9, zmm9, xmmword ptr [r11+rdx-0x3*0x10], 0x03
2091
+ vshufps zmm4, zmm8, zmm9, 136
2092
+ vshufps zmm5, zmm8, zmm9, 221
2093
+ vmovups zmm8, zmmword ptr [r8+rdx-0x20]
2094
+ vinserti32x4 zmm8, zmm8, xmmword ptr [r9+rdx-0x2*0x10], 0x01
2095
+ vinserti32x4 zmm8, zmm8, xmmword ptr [r10+rdx-0x2*0x10], 0x02
2096
+ vinserti32x4 zmm8, zmm8, xmmword ptr [r11+rdx-0x2*0x10], 0x03
2097
+ vmovups zmm9, zmmword ptr [r8+rdx-0x10]
2098
+ vinserti32x4 zmm9, zmm9, xmmword ptr [r9+rdx-0x1*0x10], 0x01
2099
+ vinserti32x4 zmm9, zmm9, xmmword ptr [r10+rdx-0x1*0x10], 0x02
2100
+ vinserti32x4 zmm9, zmm9, xmmword ptr [r11+rdx-0x1*0x10], 0x03
2101
+ vshufps zmm6, zmm8, zmm9, 136
2102
+ vshufps zmm7, zmm8, zmm9, 221
2103
+ vpshufd zmm6, zmm6, 0x93
2104
+ vpshufd zmm7, zmm7, 0x93
2105
+ mov al, 7
2106
+ 9:
2107
+ vpaddd zmm0, zmm0, zmm4
2108
+ vpaddd zmm0, zmm0, zmm1
2109
+ vpxord zmm3, zmm3, zmm0
2110
+ vprord zmm3, zmm3, 16
2111
+ vpaddd zmm2, zmm2, zmm3
2112
+ vpxord zmm1, zmm1, zmm2
2113
+ vprord zmm1, zmm1, 12
2114
+ vpaddd zmm0, zmm0, zmm5
2115
+ vpaddd zmm0, zmm0, zmm1
2116
+ vpxord zmm3, zmm3, zmm0
2117
+ vprord zmm3, zmm3, 8
2118
+ vpaddd zmm2, zmm2, zmm3
2119
+ vpxord zmm1, zmm1, zmm2
2120
+ vprord zmm1, zmm1, 7
2121
+ vpshufd zmm0, zmm0, 0x93
2122
+ vpshufd zmm3, zmm3, 0x4E
2123
+ vpshufd zmm2, zmm2, 0x39
2124
+ vpaddd zmm0, zmm0, zmm6
2125
+ vpaddd zmm0, zmm0, zmm1
2126
+ vpxord zmm3, zmm3, zmm0
2127
+ vprord zmm3, zmm3, 16
2128
+ vpaddd zmm2, zmm2, zmm3
2129
+ vpxord zmm1, zmm1, zmm2
2130
+ vprord zmm1, zmm1, 12
2131
+ vpaddd zmm0, zmm0, zmm7
2132
+ vpaddd zmm0, zmm0, zmm1
2133
+ vpxord zmm3, zmm3, zmm0
2134
+ vprord zmm3, zmm3, 8
2135
+ vpaddd zmm2, zmm2, zmm3
2136
+ vpxord zmm1, zmm1, zmm2
2137
+ vprord zmm1, zmm1, 7
2138
+ vpshufd zmm0, zmm0, 0x39
2139
+ vpshufd zmm3, zmm3, 0x4E
2140
+ vpshufd zmm2, zmm2, 0x93
2141
+ dec al
2142
+ jz 9f
2143
+ vshufps zmm8, zmm4, zmm5, 214
2144
+ vpshufd zmm9, zmm4, 0x0F
2145
+ vpshufd zmm4, zmm8, 0x39
2146
+ vshufps zmm8, zmm6, zmm7, 250
2147
+ vpblendmd zmm9 {k3}, zmm9, zmm8
2148
+ vpunpcklqdq zmm8, zmm7, zmm5
2149
+ vpblendmd zmm8 {k4}, zmm8, zmm6
2150
+ vpshufd zmm8, zmm8, 0x78
2151
+ vpunpckhdq zmm5, zmm5, zmm7
2152
+ vpunpckldq zmm6, zmm6, zmm5
2153
+ vpshufd zmm7, zmm6, 0x1E
2154
+ vmovdqa32 zmm5, zmm9
2155
+ vmovdqa32 zmm6, zmm8
2156
+ jmp 9b
2157
+ 9:
2158
+ vpxord zmm0, zmm0, zmm2
2159
+ vpxord zmm1, zmm1, zmm3
2160
+ mov eax, r13d
2161
+ cmp rdx, r15
2162
+ jne 2b
2163
+ vmovdqu xmmword ptr [rbx], xmm0
2164
+ vmovdqu xmmword ptr [rbx+0x10], xmm1
2165
+ vextracti128 xmmword ptr [rbx+0x20], ymm0, 0x01
2166
+ vextracti128 xmmword ptr [rbx+0x30], ymm1, 0x01
2167
+ vextracti32x4 xmmword ptr [rbx+0x4*0x10], zmm0, 0x02
2168
+ vextracti32x4 xmmword ptr [rbx+0x5*0x10], zmm1, 0x02
2169
+ vextracti32x4 xmmword ptr [rbx+0x6*0x10], zmm0, 0x03
2170
+ vextracti32x4 xmmword ptr [rbx+0x7*0x10], zmm1, 0x03
2171
+ vmovdqa xmm0, xmmword ptr [rsp]
2172
+ vmovdqa xmm2, xmmword ptr [rsp+0x40]
2173
+ vmovdqa32 xmm0 {k1}, xmmword ptr [rsp+0x1*0x10]
2174
+ vmovdqa32 xmm2 {k1}, xmmword ptr [rsp+0x5*0x10]
2175
+ vmovdqa xmmword ptr [rsp], xmm0
2176
+ vmovdqa xmmword ptr [rsp+0x40], xmm2
2177
+ add rbx, 128
2178
+ add rdi, 32
2179
+ sub rsi, 4
2180
+ 3:
2181
+ test esi, 0x2
2182
+ je 3f
2183
+ vbroadcasti128 ymm0, xmmword ptr [rcx]
2184
+ vbroadcasti128 ymm1, xmmword ptr [rcx+0x10]
2185
+ vmovd xmm13, dword ptr [rsp]
2186
+ vpinsrd xmm13, xmm13, dword ptr [rsp+0x40], 1
2187
+ vpinsrd xmm13, xmm13, dword ptr [BLAKE3_BLOCK_LEN+rip], 2
2188
+ vmovd xmm14, dword ptr [rsp+0x4]
2189
+ vpinsrd xmm14, xmm14, dword ptr [rsp+0x44], 1
2190
+ vpinsrd xmm14, xmm14, dword ptr [BLAKE3_BLOCK_LEN+rip], 2
2191
+ vinserti128 ymm13, ymm13, xmm14, 0x01
2192
+ mov r8, qword ptr [rdi]
2193
+ mov r9, qword ptr [rdi+0x8]
2194
+ movzx eax, byte ptr [rbp+0x40]
2195
+ or eax, r13d
2196
+ xor edx, edx
2197
+ .p2align 5
2198
+ 2:
2199
+ mov r14d, eax
2200
+ or eax, r12d
2201
+ add rdx, 64
2202
+ cmp rdx, r15
2203
+ cmovne eax, r14d
2204
+ mov dword ptr [rsp+0x88], eax
2205
+ vbroadcasti128 ymm2, xmmword ptr [BLAKE3_IV+rip]
2206
+ vpbroadcastd ymm8, dword ptr [rsp+0x88]
2207
+ vpblendd ymm3, ymm13, ymm8, 0x88
2208
+ vmovups ymm8, ymmword ptr [r8+rdx-0x40]
2209
+ vinsertf128 ymm8, ymm8, xmmword ptr [r9+rdx-0x40], 0x01
2210
+ vmovups ymm9, ymmword ptr [r8+rdx-0x30]
2211
+ vinsertf128 ymm9, ymm9, xmmword ptr [r9+rdx-0x30], 0x01
2212
+ vshufps ymm4, ymm8, ymm9, 136
2213
+ vshufps ymm5, ymm8, ymm9, 221
2214
+ vmovups ymm8, ymmword ptr [r8+rdx-0x20]
2215
+ vinsertf128 ymm8, ymm8, xmmword ptr [r9+rdx-0x20], 0x01
2216
+ vmovups ymm9, ymmword ptr [r8+rdx-0x10]
2217
+ vinsertf128 ymm9, ymm9, xmmword ptr [r9+rdx-0x10], 0x01
2218
+ vshufps ymm6, ymm8, ymm9, 136
2219
+ vshufps ymm7, ymm8, ymm9, 221
2220
+ vpshufd ymm6, ymm6, 0x93
2221
+ vpshufd ymm7, ymm7, 0x93
2222
+ mov al, 7
2223
+ 9:
2224
+ vpaddd ymm0, ymm0, ymm4
2225
+ vpaddd ymm0, ymm0, ymm1
2226
+ vpxord ymm3, ymm3, ymm0
2227
+ vprord ymm3, ymm3, 16
2228
+ vpaddd ymm2, ymm2, ymm3
2229
+ vpxord ymm1, ymm1, ymm2
2230
+ vprord ymm1, ymm1, 12
2231
+ vpaddd ymm0, ymm0, ymm5
2232
+ vpaddd ymm0, ymm0, ymm1
2233
+ vpxord ymm3, ymm3, ymm0
2234
+ vprord ymm3, ymm3, 8
2235
+ vpaddd ymm2, ymm2, ymm3
2236
+ vpxord ymm1, ymm1, ymm2
2237
+ vprord ymm1, ymm1, 7
2238
+ vpshufd ymm0, ymm0, 0x93
2239
+ vpshufd ymm3, ymm3, 0x4E
2240
+ vpshufd ymm2, ymm2, 0x39
2241
+ vpaddd ymm0, ymm0, ymm6
2242
+ vpaddd ymm0, ymm0, ymm1
2243
+ vpxord ymm3, ymm3, ymm0
2244
+ vprord ymm3, ymm3, 16
2245
+ vpaddd ymm2, ymm2, ymm3
2246
+ vpxord ymm1, ymm1, ymm2
2247
+ vprord ymm1, ymm1, 12
2248
+ vpaddd ymm0, ymm0, ymm7
2249
+ vpaddd ymm0, ymm0, ymm1
2250
+ vpxord ymm3, ymm3, ymm0
2251
+ vprord ymm3, ymm3, 8
2252
+ vpaddd ymm2, ymm2, ymm3
2253
+ vpxord ymm1, ymm1, ymm2
2254
+ vprord ymm1, ymm1, 7
2255
+ vpshufd ymm0, ymm0, 0x39
2256
+ vpshufd ymm3, ymm3, 0x4E
2257
+ vpshufd ymm2, ymm2, 0x93
2258
+ dec al
2259
+ jz 9f
2260
+ vshufps ymm8, ymm4, ymm5, 214
2261
+ vpshufd ymm9, ymm4, 0x0F
2262
+ vpshufd ymm4, ymm8, 0x39
2263
+ vshufps ymm8, ymm6, ymm7, 250
2264
+ vpblendd ymm9, ymm9, ymm8, 0xAA
2265
+ vpunpcklqdq ymm8, ymm7, ymm5
2266
+ vpblendd ymm8, ymm8, ymm6, 0x88
2267
+ vpshufd ymm8, ymm8, 0x78
2268
+ vpunpckhdq ymm5, ymm5, ymm7
2269
+ vpunpckldq ymm6, ymm6, ymm5
2270
+ vpshufd ymm7, ymm6, 0x1E
2271
+ vmovdqa ymm5, ymm9
2272
+ vmovdqa ymm6, ymm8
2273
+ jmp 9b
2274
+ 9:
2275
+ vpxor ymm0, ymm0, ymm2
2276
+ vpxor ymm1, ymm1, ymm3
2277
+ mov eax, r13d
2278
+ cmp rdx, r15
2279
+ jne 2b
2280
+ vmovdqu xmmword ptr [rbx], xmm0
2281
+ vmovdqu xmmword ptr [rbx+0x10], xmm1
2282
+ vextracti128 xmmword ptr [rbx+0x20], ymm0, 0x01
2283
+ vextracti128 xmmword ptr [rbx+0x30], ymm1, 0x01
2284
+ vmovdqa xmm0, xmmword ptr [rsp]
2285
+ vmovdqa xmm2, xmmword ptr [rsp+0x4*0x10]
2286
+ vmovdqu32 xmm0 {k1}, xmmword ptr [rsp+0x8]
2287
+ vmovdqu32 xmm2 {k1}, xmmword ptr [rsp+0x48]
2288
+ vmovdqa xmmword ptr [rsp], xmm0
2289
+ vmovdqa xmmword ptr [rsp+0x4*0x10], xmm2
2290
+ add rbx, 64
2291
+ add rdi, 16
2292
+ sub rsi, 2
2293
+ 3:
2294
+ test esi, 0x1
2295
+ je 4b
2296
+ vmovdqu xmm0, xmmword ptr [rcx]
2297
+ vmovdqu xmm1, xmmword ptr [rcx+0x10]
2298
+ vmovd xmm14, dword ptr [rsp]
2299
+ vpinsrd xmm14, xmm14, dword ptr [rsp+0x40], 1
2300
+ vpinsrd xmm14, xmm14, dword ptr [BLAKE3_BLOCK_LEN+rip], 2
2301
+ vmovdqa xmm15, xmmword ptr [BLAKE3_IV+rip]
2302
+ mov r8, qword ptr [rdi]
2303
+ movzx eax, byte ptr [rbp+0x40]
2304
+ or eax, r13d
2305
+ xor edx, edx
2306
+ .p2align 5
2307
+ 2:
2308
+ mov r14d, eax
2309
+ or eax, r12d
2310
+ add rdx, 64
2311
+ cmp rdx, r15
2312
+ cmovne eax, r14d
2313
+ vpinsrd xmm3, xmm14, eax, 3
2314
+ vmovdqa xmm2, xmm15
2315
+ vmovups xmm8, xmmword ptr [r8+rdx-0x40]
2316
+ vmovups xmm9, xmmword ptr [r8+rdx-0x30]
2317
+ vshufps xmm4, xmm8, xmm9, 136
2318
+ vshufps xmm5, xmm8, xmm9, 221
2319
+ vmovups xmm8, xmmword ptr [r8+rdx-0x20]
2320
+ vmovups xmm9, xmmword ptr [r8+rdx-0x10]
2321
+ vshufps xmm6, xmm8, xmm9, 136
2322
+ vshufps xmm7, xmm8, xmm9, 221
2323
+ vpshufd xmm6, xmm6, 0x93
2324
+ vpshufd xmm7, xmm7, 0x93
2325
+ mov al, 7
2326
+ 9:
2327
+ vpaddd xmm0, xmm0, xmm4
2328
+ vpaddd xmm0, xmm0, xmm1
2329
+ vpxord xmm3, xmm3, xmm0
2330
+ vprord xmm3, xmm3, 16
2331
+ vpaddd xmm2, xmm2, xmm3
2332
+ vpxord xmm1, xmm1, xmm2
2333
+ vprord xmm1, xmm1, 12
2334
+ vpaddd xmm0, xmm0, xmm5
2335
+ vpaddd xmm0, xmm0, xmm1
2336
+ vpxord xmm3, xmm3, xmm0
2337
+ vprord xmm3, xmm3, 8
2338
+ vpaddd xmm2, xmm2, xmm3
2339
+ vpxord xmm1, xmm1, xmm2
2340
+ vprord xmm1, xmm1, 7
2341
+ vpshufd xmm0, xmm0, 0x93
2342
+ vpshufd xmm3, xmm3, 0x4E
2343
+ vpshufd xmm2, xmm2, 0x39
2344
+ vpaddd xmm0, xmm0, xmm6
2345
+ vpaddd xmm0, xmm0, xmm1
2346
+ vpxord xmm3, xmm3, xmm0
2347
+ vprord xmm3, xmm3, 16
2348
+ vpaddd xmm2, xmm2, xmm3
2349
+ vpxord xmm1, xmm1, xmm2
2350
+ vprord xmm1, xmm1, 12
2351
+ vpaddd xmm0, xmm0, xmm7
2352
+ vpaddd xmm0, xmm0, xmm1
2353
+ vpxord xmm3, xmm3, xmm0
2354
+ vprord xmm3, xmm3, 8
2355
+ vpaddd xmm2, xmm2, xmm3
2356
+ vpxord xmm1, xmm1, xmm2
2357
+ vprord xmm1, xmm1, 7
2358
+ vpshufd xmm0, xmm0, 0x39
2359
+ vpshufd xmm3, xmm3, 0x4E
2360
+ vpshufd xmm2, xmm2, 0x93
2361
+ dec al
2362
+ jz 9f
2363
+ vshufps xmm8, xmm4, xmm5, 214
2364
+ vpshufd xmm9, xmm4, 0x0F
2365
+ vpshufd xmm4, xmm8, 0x39
2366
+ vshufps xmm8, xmm6, xmm7, 250
2367
+ vpblendd xmm9, xmm9, xmm8, 0xAA
2368
+ vpunpcklqdq xmm8, xmm7, xmm5
2369
+ vpblendd xmm8, xmm8, xmm6, 0x88
2370
+ vpshufd xmm8, xmm8, 0x78
2371
+ vpunpckhdq xmm5, xmm5, xmm7
2372
+ vpunpckldq xmm6, xmm6, xmm5
2373
+ vpshufd xmm7, xmm6, 0x1E
2374
+ vmovdqa xmm5, xmm9
2375
+ vmovdqa xmm6, xmm8
2376
+ jmp 9b
2377
+ 9:
2378
+ vpxor xmm0, xmm0, xmm2
2379
+ vpxor xmm1, xmm1, xmm3
2380
+ mov eax, r13d
2381
+ cmp rdx, r15
2382
+ jne 2b
2383
+ vmovdqu xmmword ptr [rbx], xmm0
2384
+ vmovdqu xmmword ptr [rbx+0x10], xmm1
2385
+ jmp 4b
2386
+ .p2align 6
2387
+ _blake3_compress_in_place_avx512:
2388
+ blake3_compress_in_place_avx512:
2389
+ _CET_ENDBR
2390
+ vmovdqu xmm0, xmmword ptr [rdi]
2391
+ vmovdqu xmm1, xmmword ptr [rdi+0x10]
2392
+ movzx eax, r8b
2393
+ movzx edx, dl
2394
+ shl rax, 32
2395
+ add rdx, rax
2396
+ vmovq xmm3, rcx
2397
+ vmovq xmm4, rdx
2398
+ vpunpcklqdq xmm3, xmm3, xmm4
2399
+ vmovaps xmm2, xmmword ptr [BLAKE3_IV+rip]
2400
+ vmovups xmm8, xmmword ptr [rsi]
2401
+ vmovups xmm9, xmmword ptr [rsi+0x10]
2402
+ vshufps xmm4, xmm8, xmm9, 136
2403
+ vshufps xmm5, xmm8, xmm9, 221
2404
+ vmovups xmm8, xmmword ptr [rsi+0x20]
2405
+ vmovups xmm9, xmmword ptr [rsi+0x30]
2406
+ vshufps xmm6, xmm8, xmm9, 136
2407
+ vshufps xmm7, xmm8, xmm9, 221
2408
+ vpshufd xmm6, xmm6, 0x93
2409
+ vpshufd xmm7, xmm7, 0x93
2410
+ mov al, 7
2411
+ 9:
2412
+ vpaddd xmm0, xmm0, xmm4
2413
+ vpaddd xmm0, xmm0, xmm1
2414
+ vpxord xmm3, xmm3, xmm0
2415
+ vprord xmm3, xmm3, 16
2416
+ vpaddd xmm2, xmm2, xmm3
2417
+ vpxord xmm1, xmm1, xmm2
2418
+ vprord xmm1, xmm1, 12
2419
+ vpaddd xmm0, xmm0, xmm5
2420
+ vpaddd xmm0, xmm0, xmm1
2421
+ vpxord xmm3, xmm3, xmm0
2422
+ vprord xmm3, xmm3, 8
2423
+ vpaddd xmm2, xmm2, xmm3
2424
+ vpxord xmm1, xmm1, xmm2
2425
+ vprord xmm1, xmm1, 7
2426
+ vpshufd xmm0, xmm0, 0x93
2427
+ vpshufd xmm3, xmm3, 0x4E
2428
+ vpshufd xmm2, xmm2, 0x39
2429
+ vpaddd xmm0, xmm0, xmm6
2430
+ vpaddd xmm0, xmm0, xmm1
2431
+ vpxord xmm3, xmm3, xmm0
2432
+ vprord xmm3, xmm3, 16
2433
+ vpaddd xmm2, xmm2, xmm3
2434
+ vpxord xmm1, xmm1, xmm2
2435
+ vprord xmm1, xmm1, 12
2436
+ vpaddd xmm0, xmm0, xmm7
2437
+ vpaddd xmm0, xmm0, xmm1
2438
+ vpxord xmm3, xmm3, xmm0
2439
+ vprord xmm3, xmm3, 8
2440
+ vpaddd xmm2, xmm2, xmm3
2441
+ vpxord xmm1, xmm1, xmm2
2442
+ vprord xmm1, xmm1, 7
2443
+ vpshufd xmm0, xmm0, 0x39
2444
+ vpshufd xmm3, xmm3, 0x4E
2445
+ vpshufd xmm2, xmm2, 0x93
2446
+ dec al
2447
+ jz 9f
2448
+ vshufps xmm8, xmm4, xmm5, 214
2449
+ vpshufd xmm9, xmm4, 0x0F
2450
+ vpshufd xmm4, xmm8, 0x39
2451
+ vshufps xmm8, xmm6, xmm7, 250
2452
+ vpblendd xmm9, xmm9, xmm8, 0xAA
2453
+ vpunpcklqdq xmm8, xmm7, xmm5
2454
+ vpblendd xmm8, xmm8, xmm6, 0x88
2455
+ vpshufd xmm8, xmm8, 0x78
2456
+ vpunpckhdq xmm5, xmm5, xmm7
2457
+ vpunpckldq xmm6, xmm6, xmm5
2458
+ vpshufd xmm7, xmm6, 0x1E
2459
+ vmovdqa xmm5, xmm9
2460
+ vmovdqa xmm6, xmm8
2461
+ jmp 9b
2462
+ 9:
2463
+ vpxor xmm0, xmm0, xmm2
2464
+ vpxor xmm1, xmm1, xmm3
2465
+ vmovdqu xmmword ptr [rdi], xmm0
2466
+ vmovdqu xmmword ptr [rdi+0x10], xmm1
2467
+ ret
2468
+
2469
+ .p2align 6
2470
+ _blake3_compress_xof_avx512:
2471
+ blake3_compress_xof_avx512:
2472
+ _CET_ENDBR
2473
+ vmovdqu xmm0, xmmword ptr [rdi]
2474
+ vmovdqu xmm1, xmmword ptr [rdi+0x10]
2475
+ movzx eax, r8b
2476
+ movzx edx, dl
2477
+ shl rax, 32
2478
+ add rdx, rax
2479
+ vmovq xmm3, rcx
2480
+ vmovq xmm4, rdx
2481
+ vpunpcklqdq xmm3, xmm3, xmm4
2482
+ vmovaps xmm2, xmmword ptr [BLAKE3_IV+rip]
2483
+ vmovups xmm8, xmmword ptr [rsi]
2484
+ vmovups xmm9, xmmword ptr [rsi+0x10]
2485
+ vshufps xmm4, xmm8, xmm9, 136
2486
+ vshufps xmm5, xmm8, xmm9, 221
2487
+ vmovups xmm8, xmmword ptr [rsi+0x20]
2488
+ vmovups xmm9, xmmword ptr [rsi+0x30]
2489
+ vshufps xmm6, xmm8, xmm9, 136
2490
+ vshufps xmm7, xmm8, xmm9, 221
2491
+ vpshufd xmm6, xmm6, 0x93
2492
+ vpshufd xmm7, xmm7, 0x93
2493
+ mov al, 7
2494
+ 9:
2495
+ vpaddd xmm0, xmm0, xmm4
2496
+ vpaddd xmm0, xmm0, xmm1
2497
+ vpxord xmm3, xmm3, xmm0
2498
+ vprord xmm3, xmm3, 16
2499
+ vpaddd xmm2, xmm2, xmm3
2500
+ vpxord xmm1, xmm1, xmm2
2501
+ vprord xmm1, xmm1, 12
2502
+ vpaddd xmm0, xmm0, xmm5
2503
+ vpaddd xmm0, xmm0, xmm1
2504
+ vpxord xmm3, xmm3, xmm0
2505
+ vprord xmm3, xmm3, 8
2506
+ vpaddd xmm2, xmm2, xmm3
2507
+ vpxord xmm1, xmm1, xmm2
2508
+ vprord xmm1, xmm1, 7
2509
+ vpshufd xmm0, xmm0, 0x93
2510
+ vpshufd xmm3, xmm3, 0x4E
2511
+ vpshufd xmm2, xmm2, 0x39
2512
+ vpaddd xmm0, xmm0, xmm6
2513
+ vpaddd xmm0, xmm0, xmm1
2514
+ vpxord xmm3, xmm3, xmm0
2515
+ vprord xmm3, xmm3, 16
2516
+ vpaddd xmm2, xmm2, xmm3
2517
+ vpxord xmm1, xmm1, xmm2
2518
+ vprord xmm1, xmm1, 12
2519
+ vpaddd xmm0, xmm0, xmm7
2520
+ vpaddd xmm0, xmm0, xmm1
2521
+ vpxord xmm3, xmm3, xmm0
2522
+ vprord xmm3, xmm3, 8
2523
+ vpaddd xmm2, xmm2, xmm3
2524
+ vpxord xmm1, xmm1, xmm2
2525
+ vprord xmm1, xmm1, 7
2526
+ vpshufd xmm0, xmm0, 0x39
2527
+ vpshufd xmm3, xmm3, 0x4E
2528
+ vpshufd xmm2, xmm2, 0x93
2529
+ dec al
2530
+ jz 9f
2531
+ vshufps xmm8, xmm4, xmm5, 214
2532
+ vpshufd xmm9, xmm4, 0x0F
2533
+ vpshufd xmm4, xmm8, 0x39
2534
+ vshufps xmm8, xmm6, xmm7, 250
2535
+ vpblendd xmm9, xmm9, xmm8, 0xAA
2536
+ vpunpcklqdq xmm8, xmm7, xmm5
2537
+ vpblendd xmm8, xmm8, xmm6, 0x88
2538
+ vpshufd xmm8, xmm8, 0x78
2539
+ vpunpckhdq xmm5, xmm5, xmm7
2540
+ vpunpckldq xmm6, xmm6, xmm5
2541
+ vpshufd xmm7, xmm6, 0x1E
2542
+ vmovdqa xmm5, xmm9
2543
+ vmovdqa xmm6, xmm8
2544
+ jmp 9b
2545
+ 9:
2546
+ vpxor xmm0, xmm0, xmm2
2547
+ vpxor xmm1, xmm1, xmm3
2548
+ vpxor xmm2, xmm2, [rdi]
2549
+ vpxor xmm3, xmm3, [rdi+0x10]
2550
+ vmovdqu xmmword ptr [r9], xmm0
2551
+ vmovdqu xmmword ptr [r9+0x10], xmm1
2552
+ vmovdqu xmmword ptr [r9+0x20], xmm2
2553
+ vmovdqu xmmword ptr [r9+0x30], xmm3
2554
+ ret
2555
+
2556
+ #ifdef __APPLE__
2557
+ .static_data
2558
+ #else
2559
+ .section .rodata
2560
+ #endif
2561
+ .p2align 6
2562
+ INDEX0:
2563
+ .long 0, 1, 2, 3, 16, 17, 18, 19
2564
+ .long 8, 9, 10, 11, 24, 25, 26, 27
2565
+ INDEX1:
2566
+ .long 4, 5, 6, 7, 20, 21, 22, 23
2567
+ .long 12, 13, 14, 15, 28, 29, 30, 31
2568
+ ADD0:
2569
+ .long 0, 1, 2, 3, 4, 5, 6, 7
2570
+ .long 8, 9, 10, 11, 12, 13, 14, 15
2571
+ ADD1: .long 1
2572
+
2573
+ ADD16: .long 16
2574
+ BLAKE3_BLOCK_LEN:
2575
+ .long 64
2576
+ .p2align 6
2577
+ BLAKE3_IV:
2578
+ BLAKE3_IV_0:
2579
+ .long 0x6A09E667
2580
+ BLAKE3_IV_1:
2581
+ .long 0xBB67AE85
2582
+ BLAKE3_IV_2:
2583
+ .long 0x3C6EF372
2584
+ BLAKE3_IV_3:
2585
+ .long 0xA54FF53A