1 // Code generated by command: go run ctr_amd64_asm.go -out ../../ctr_amd64.s. DO NOT EDIT.
2
3 //go:build !purego
4
5 #include "textflag.h"
6
7 // func ctrBlocks1Asm(nr int, xk *[60]uint32, dst *[16]byte, src *[16]byte, ivlo uint64, ivhi uint64)
8 // Requires: AES, SSE, SSE2, SSE4.1, SSSE3
9 TEXT ·ctrBlocks1Asm(SB), $0-48
10 MOVQ nr+0(FP), AX
11 MOVQ xk+8(FP), CX
12 MOVQ dst+16(FP), DX
13 MOVQ src+24(FP), BX
14 MOVQ ivlo+32(FP), SI
15 MOVQ ivhi+40(FP), DI
16 MOVOU bswapMask<>+0(SB), X0
17 MOVQ SI, X1
18 PINSRQ $0x01, DI, X1
19 PSHUFB X0, X1
20 MOVUPS (CX), X0
21 PXOR X0, X1
22 ADDQ $0x10, CX
23 SUBQ $0x0c, AX
24 JE enc192
25 JB enc128
26 MOVUPS (CX), X0
27 AESENC X0, X1
28 MOVUPS 16(CX), X0
29 AESENC X0, X1
30 ADDQ $0x20, CX
31
32 enc192:
33 MOVUPS (CX), X0
34 AESENC X0, X1
35 MOVUPS 16(CX), X0
36 AESENC X0, X1
37 ADDQ $0x20, CX
38
39 enc128:
40 MOVUPS (CX), X0
41 AESENC X0, X1
42 MOVUPS 16(CX), X0
43 AESENC X0, X1
44 MOVUPS 32(CX), X0
45 AESENC X0, X1
46 MOVUPS 48(CX), X0
47 AESENC X0, X1
48 MOVUPS 64(CX), X0
49 AESENC X0, X1
50 MOVUPS 80(CX), X0
51 AESENC X0, X1
52 MOVUPS 96(CX), X0
53 AESENC X0, X1
54 MOVUPS 112(CX), X0
55 AESENC X0, X1
56 MOVUPS 128(CX), X0
57 AESENC X0, X1
58 MOVUPS 144(CX), X0
59 AESENCLAST X0, X1
60 MOVUPS (BX), X0
61 PXOR X1, X0
62 MOVUPS X0, (DX)
63 RET
64
65 DATA bswapMask<>+0(SB)/8, $0x08090a0b0c0d0e0f
66 DATA bswapMask<>+8(SB)/8, $0x0001020304050607
67 GLOBL bswapMask<>(SB), RODATA|NOPTR, $16
68
69 // func ctrBlocks2Asm(nr int, xk *[60]uint32, dst *[32]byte, src *[32]byte, ivlo uint64, ivhi uint64)
70 // Requires: AES, SSE, SSE2, SSE4.1, SSSE3
71 TEXT ·ctrBlocks2Asm(SB), $0-48
72 MOVQ nr+0(FP), AX
73 MOVQ xk+8(FP), CX
74 MOVQ dst+16(FP), DX
75 MOVQ src+24(FP), BX
76 MOVQ ivlo+32(FP), SI
77 MOVQ ivhi+40(FP), DI
78 MOVOU bswapMask<>+0(SB), X0
79 MOVQ SI, X1
80 PINSRQ $0x01, DI, X1
81 PSHUFB X0, X1
82 ADDQ $0x01, SI
83 ADCQ $0x00, DI
84 MOVQ SI, X2
85 PINSRQ $0x01, DI, X2
86 PSHUFB X0, X2
87 MOVUPS (CX), X0
88 PXOR X0, X1
89 PXOR X0, X2
90 ADDQ $0x10, CX
91 SUBQ $0x0c, AX
92 JE enc192
93 JB enc128
94 MOVUPS (CX), X0
95 AESENC X0, X1
96 AESENC X0, X2
97 MOVUPS 16(CX), X0
98 AESENC X0, X1
99 AESENC X0, X2
100 ADDQ $0x20, CX
101
102 enc192:
103 MOVUPS (CX), X0
104 AESENC X0, X1
105 AESENC X0, X2
106 MOVUPS 16(CX), X0
107 AESENC X0, X1
108 AESENC X0, X2
109 ADDQ $0x20, CX
110
111 enc128:
112 MOVUPS (CX), X0
113 AESENC X0, X1
114 AESENC X0, X2
115 MOVUPS 16(CX), X0
116 AESENC X0, X1
117 AESENC X0, X2
118 MOVUPS 32(CX), X0
119 AESENC X0, X1
120 AESENC X0, X2
121 MOVUPS 48(CX), X0
122 AESENC X0, X1
123 AESENC X0, X2
124 MOVUPS 64(CX), X0
125 AESENC X0, X1
126 AESENC X0, X2
127 MOVUPS 80(CX), X0
128 AESENC X0, X1
129 AESENC X0, X2
130 MOVUPS 96(CX), X0
131 AESENC X0, X1
132 AESENC X0, X2
133 MOVUPS 112(CX), X0
134 AESENC X0, X1
135 AESENC X0, X2
136 MOVUPS 128(CX), X0
137 AESENC X0, X1
138 AESENC X0, X2
139 MOVUPS 144(CX), X0
140 AESENCLAST X0, X1
141 AESENCLAST X0, X2
142 MOVUPS (BX), X0
143 PXOR X1, X0
144 MOVUPS X0, (DX)
145 MOVUPS 16(BX), X0
146 PXOR X2, X0
147 MOVUPS X0, 16(DX)
148 RET
149
150 // func ctrBlocks4Asm(nr int, xk *[60]uint32, dst *[64]byte, src *[64]byte, ivlo uint64, ivhi uint64)
151 // Requires: AES, SSE, SSE2, SSE4.1, SSSE3
152 TEXT ·ctrBlocks4Asm(SB), $0-48
153 MOVQ nr+0(FP), AX
154 MOVQ xk+8(FP), CX
155 MOVQ dst+16(FP), DX
156 MOVQ src+24(FP), BX
157 MOVQ ivlo+32(FP), SI
158 MOVQ ivhi+40(FP), DI
159 MOVOU bswapMask<>+0(SB), X0
160 MOVQ SI, X1
161 PINSRQ $0x01, DI, X1
162 PSHUFB X0, X1
163 ADDQ $0x01, SI
164 ADCQ $0x00, DI
165 MOVQ SI, X2
166 PINSRQ $0x01, DI, X2
167 PSHUFB X0, X2
168 ADDQ $0x01, SI
169 ADCQ $0x00, DI
170 MOVQ SI, X3
171 PINSRQ $0x01, DI, X3
172 PSHUFB X0, X3
173 ADDQ $0x01, SI
174 ADCQ $0x00, DI
175 MOVQ SI, X4
176 PINSRQ $0x01, DI, X4
177 PSHUFB X0, X4
178 MOVUPS (CX), X0
179 PXOR X0, X1
180 PXOR X0, X2
181 PXOR X0, X3
182 PXOR X0, X4
183 ADDQ $0x10, CX
184 SUBQ $0x0c, AX
185 JE enc192
186 JB enc128
187 MOVUPS (CX), X0
188 AESENC X0, X1
189 AESENC X0, X2
190 AESENC X0, X3
191 AESENC X0, X4
192 MOVUPS 16(CX), X0
193 AESENC X0, X1
194 AESENC X0, X2
195 AESENC X0, X3
196 AESENC X0, X4
197 ADDQ $0x20, CX
198
199 enc192:
200 MOVUPS (CX), X0
201 AESENC X0, X1
202 AESENC X0, X2
203 AESENC X0, X3
204 AESENC X0, X4
205 MOVUPS 16(CX), X0
206 AESENC X0, X1
207 AESENC X0, X2
208 AESENC X0, X3
209 AESENC X0, X4
210 ADDQ $0x20, CX
211
212 enc128:
213 MOVUPS (CX), X0
214 AESENC X0, X1
215 AESENC X0, X2
216 AESENC X0, X3
217 AESENC X0, X4
218 MOVUPS 16(CX), X0
219 AESENC X0, X1
220 AESENC X0, X2
221 AESENC X0, X3
222 AESENC X0, X4
223 MOVUPS 32(CX), X0
224 AESENC X0, X1
225 AESENC X0, X2
226 AESENC X0, X3
227 AESENC X0, X4
228 MOVUPS 48(CX), X0
229 AESENC X0, X1
230 AESENC X0, X2
231 AESENC X0, X3
232 AESENC X0, X4
233 MOVUPS 64(CX), X0
234 AESENC X0, X1
235 AESENC X0, X2
236 AESENC X0, X3
237 AESENC X0, X4
238 MOVUPS 80(CX), X0
239 AESENC X0, X1
240 AESENC X0, X2
241 AESENC X0, X3
242 AESENC X0, X4
243 MOVUPS 96(CX), X0
244 AESENC X0, X1
245 AESENC X0, X2
246 AESENC X0, X3
247 AESENC X0, X4
248 MOVUPS 112(CX), X0
249 AESENC X0, X1
250 AESENC X0, X2
251 AESENC X0, X3
252 AESENC X0, X4
253 MOVUPS 128(CX), X0
254 AESENC X0, X1
255 AESENC X0, X2
256 AESENC X0, X3
257 AESENC X0, X4
258 MOVUPS 144(CX), X0
259 AESENCLAST X0, X1
260 AESENCLAST X0, X2
261 AESENCLAST X0, X3
262 AESENCLAST X0, X4
263 MOVUPS (BX), X0
264 PXOR X1, X0
265 MOVUPS X0, (DX)
266 MOVUPS 16(BX), X0
267 PXOR X2, X0
268 MOVUPS X0, 16(DX)
269 MOVUPS 32(BX), X0
270 PXOR X3, X0
271 MOVUPS X0, 32(DX)
272 MOVUPS 48(BX), X0
273 PXOR X4, X0
274 MOVUPS X0, 48(DX)
275 RET
276
277 // func ctrBlocks8Asm(nr int, xk *[60]uint32, dst *[128]byte, src *[128]byte, ivlo uint64, ivhi uint64)
278 // Requires: AES, SSE, SSE2, SSE4.1, SSSE3
279 TEXT ·ctrBlocks8Asm(SB), $0-48
280 MOVQ nr+0(FP), AX
281 MOVQ xk+8(FP), CX
282 MOVQ dst+16(FP), DX
283 MOVQ src+24(FP), BX
284 MOVQ ivlo+32(FP), SI
285 MOVQ ivhi+40(FP), DI
286 MOVOU bswapMask<>+0(SB), X0
287 MOVQ SI, X1
288 PINSRQ $0x01, DI, X1
289 PSHUFB X0, X1
290 ADDQ $0x01, SI
291 ADCQ $0x00, DI
292 MOVQ SI, X2
293 PINSRQ $0x01, DI, X2
294 PSHUFB X0, X2
295 ADDQ $0x01, SI
296 ADCQ $0x00, DI
297 MOVQ SI, X3
298 PINSRQ $0x01, DI, X3
299 PSHUFB X0, X3
300 ADDQ $0x01, SI
301 ADCQ $0x00, DI
302 MOVQ SI, X4
303 PINSRQ $0x01, DI, X4
304 PSHUFB X0, X4
305 ADDQ $0x01, SI
306 ADCQ $0x00, DI
307 MOVQ SI, X5
308 PINSRQ $0x01, DI, X5
309 PSHUFB X0, X5
310 ADDQ $0x01, SI
311 ADCQ $0x00, DI
312 MOVQ SI, X6
313 PINSRQ $0x01, DI, X6
314 PSHUFB X0, X6
315 ADDQ $0x01, SI
316 ADCQ $0x00, DI
317 MOVQ SI, X7
318 PINSRQ $0x01, DI, X7
319 PSHUFB X0, X7
320 ADDQ $0x01, SI
321 ADCQ $0x00, DI
322 MOVQ SI, X8
323 PINSRQ $0x01, DI, X8
324 PSHUFB X0, X8
325 MOVUPS (CX), X0
326 PXOR X0, X1
327 PXOR X0, X2
328 PXOR X0, X3
329 PXOR X0, X4
330 PXOR X0, X5
331 PXOR X0, X6
332 PXOR X0, X7
333 PXOR X0, X8
334 ADDQ $0x10, CX
335 SUBQ $0x0c, AX
336 JE enc192
337 JB enc128
338 MOVUPS (CX), X0
339 AESENC X0, X1
340 AESENC X0, X2
341 AESENC X0, X3
342 AESENC X0, X4
343 AESENC X0, X5
344 AESENC X0, X6
345 AESENC X0, X7
346 AESENC X0, X8
347 MOVUPS 16(CX), X0
348 AESENC X0, X1
349 AESENC X0, X2
350 AESENC X0, X3
351 AESENC X0, X4
352 AESENC X0, X5
353 AESENC X0, X6
354 AESENC X0, X7
355 AESENC X0, X8
356 ADDQ $0x20, CX
357
358 enc192:
359 MOVUPS (CX), X0
360 AESENC X0, X1
361 AESENC X0, X2
362 AESENC X0, X3
363 AESENC X0, X4
364 AESENC X0, X5
365 AESENC X0, X6
366 AESENC X0, X7
367 AESENC X0, X8
368 MOVUPS 16(CX), X0
369 AESENC X0, X1
370 AESENC X0, X2
371 AESENC X0, X3
372 AESENC X0, X4
373 AESENC X0, X5
374 AESENC X0, X6
375 AESENC X0, X7
376 AESENC X0, X8
377 ADDQ $0x20, CX
378
379 enc128:
380 MOVUPS (CX), X0
381 AESENC X0, X1
382 AESENC X0, X2
383 AESENC X0, X3
384 AESENC X0, X4
385 AESENC X0, X5
386 AESENC X0, X6
387 AESENC X0, X7
388 AESENC X0, X8
389 MOVUPS 16(CX), X0
390 AESENC X0, X1
391 AESENC X0, X2
392 AESENC X0, X3
393 AESENC X0, X4
394 AESENC X0, X5
395 AESENC X0, X6
396 AESENC X0, X7
397 AESENC X0, X8
398 MOVUPS 32(CX), X0
399 AESENC X0, X1
400 AESENC X0, X2
401 AESENC X0, X3
402 AESENC X0, X4
403 AESENC X0, X5
404 AESENC X0, X6
405 AESENC X0, X7
406 AESENC X0, X8
407 MOVUPS 48(CX), X0
408 AESENC X0, X1
409 AESENC X0, X2
410 AESENC X0, X3
411 AESENC X0, X4
412 AESENC X0, X5
413 AESENC X0, X6
414 AESENC X0, X7
415 AESENC X0, X8
416 MOVUPS 64(CX), X0
417 AESENC X0, X1
418 AESENC X0, X2
419 AESENC X0, X3
420 AESENC X0, X4
421 AESENC X0, X5
422 AESENC X0, X6
423 AESENC X0, X7
424 AESENC X0, X8
425 MOVUPS 80(CX), X0
426 AESENC X0, X1
427 AESENC X0, X2
428 AESENC X0, X3
429 AESENC X0, X4
430 AESENC X0, X5
431 AESENC X0, X6
432 AESENC X0, X7
433 AESENC X0, X8
434 MOVUPS 96(CX), X0
435 AESENC X0, X1
436 AESENC X0, X2
437 AESENC X0, X3
438 AESENC X0, X4
439 AESENC X0, X5
440 AESENC X0, X6
441 AESENC X0, X7
442 AESENC X0, X8
443 MOVUPS 112(CX), X0
444 AESENC X0, X1
445 AESENC X0, X2
446 AESENC X0, X3
447 AESENC X0, X4
448 AESENC X0, X5
449 AESENC X0, X6
450 AESENC X0, X7
451 AESENC X0, X8
452 MOVUPS 128(CX), X0
453 AESENC X0, X1
454 AESENC X0, X2
455 AESENC X0, X3
456 AESENC X0, X4
457 AESENC X0, X5
458 AESENC X0, X6
459 AESENC X0, X7
460 AESENC X0, X8
461 MOVUPS 144(CX), X0
462 AESENCLAST X0, X1
463 AESENCLAST X0, X2
464 AESENCLAST X0, X3
465 AESENCLAST X0, X4
466 AESENCLAST X0, X5
467 AESENCLAST X0, X6
468 AESENCLAST X0, X7
469 AESENCLAST X0, X8
470 MOVUPS (BX), X0
471 PXOR X1, X0
472 MOVUPS X0, (DX)
473 MOVUPS 16(BX), X0
474 PXOR X2, X0
475 MOVUPS X0, 16(DX)
476 MOVUPS 32(BX), X0
477 PXOR X3, X0
478 MOVUPS X0, 32(DX)
479 MOVUPS 48(BX), X0
480 PXOR X4, X0
481 MOVUPS X0, 48(DX)
482 MOVUPS 64(BX), X0
483 PXOR X5, X0
484 MOVUPS X0, 64(DX)
485 MOVUPS 80(BX), X0
486 PXOR X6, X0
487 MOVUPS X0, 80(DX)
488 MOVUPS 96(BX), X0
489 PXOR X7, X0
490 MOVUPS X0, 96(DX)
491 MOVUPS 112(BX), X0
492 PXOR X8, X0
493 MOVUPS X0, 112(DX)
494 RET
495
View as plain text