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 MOVAPS X1, X8
290 PSHUFB X0, X1
291 MOVQ SI, R8
292 ADDQ $0x07, R8
293 JC ctr8_slow
294 XORQ R8, R8
295 INCQ R8
296 PXOR X9, X9
297 PINSRQ $0x00, R8, X9
298 PADDQ X9, X8
299 MOVAPS X8, X2
300 PADDQ X9, X8
301 MOVAPS X8, X3
302 PADDQ X9, X8
303 MOVAPS X8, X4
304 PADDQ X9, X8
305 MOVAPS X8, X5
306 PADDQ X9, X8
307 MOVAPS X8, X6
308 PADDQ X9, X8
309 MOVAPS X8, X7
310 PADDQ X9, X8
311 MOVAPS X8, X8
312 JMP ctr8_done
313
314 ctr8_slow:
315 ADDQ $0x01, SI
316 ADCQ $0x00, DI
317 MOVQ SI, X2
318 PINSRQ $0x01, DI, X2
319 ADDQ $0x01, SI
320 ADCQ $0x00, DI
321 MOVQ SI, X3
322 PINSRQ $0x01, DI, X3
323 ADDQ $0x01, SI
324 ADCQ $0x00, DI
325 MOVQ SI, X4
326 PINSRQ $0x01, DI, X4
327 ADDQ $0x01, SI
328 ADCQ $0x00, DI
329 MOVQ SI, X5
330 PINSRQ $0x01, DI, X5
331 ADDQ $0x01, SI
332 ADCQ $0x00, DI
333 MOVQ SI, X6
334 PINSRQ $0x01, DI, X6
335 ADDQ $0x01, SI
336 ADCQ $0x00, DI
337 MOVQ SI, X7
338 PINSRQ $0x01, DI, X7
339 ADDQ $0x01, SI
340 ADCQ $0x00, DI
341 MOVQ SI, X8
342 PINSRQ $0x01, DI, X8
343
344 ctr8_done:
345 PSHUFB X0, X2
346 PSHUFB X0, X3
347 PSHUFB X0, X4
348 PSHUFB X0, X5
349 PSHUFB X0, X6
350 PSHUFB X0, X7
351 PSHUFB X0, X8
352 MOVUPS (CX), X0
353 PXOR X0, X1
354 PXOR X0, X2
355 PXOR X0, X3
356 PXOR X0, X4
357 PXOR X0, X5
358 PXOR X0, X6
359 PXOR X0, X7
360 PXOR X0, X8
361 ADDQ $0x10, CX
362 SUBQ $0x0c, AX
363 JE enc192
364 JB enc128
365 MOVUPS (CX), X0
366 AESENC X0, X1
367 AESENC X0, X2
368 AESENC X0, X3
369 AESENC X0, X4
370 AESENC X0, X5
371 AESENC X0, X6
372 AESENC X0, X7
373 AESENC X0, X8
374 MOVUPS 16(CX), X0
375 AESENC X0, X1
376 AESENC X0, X2
377 AESENC X0, X3
378 AESENC X0, X4
379 AESENC X0, X5
380 AESENC X0, X6
381 AESENC X0, X7
382 AESENC X0, X8
383 ADDQ $0x20, CX
384
385 enc192:
386 MOVUPS (CX), X0
387 AESENC X0, X1
388 AESENC X0, X2
389 AESENC X0, X3
390 AESENC X0, X4
391 AESENC X0, X5
392 AESENC X0, X6
393 AESENC X0, X7
394 AESENC X0, X8
395 MOVUPS 16(CX), X0
396 AESENC X0, X1
397 AESENC X0, X2
398 AESENC X0, X3
399 AESENC X0, X4
400 AESENC X0, X5
401 AESENC X0, X6
402 AESENC X0, X7
403 AESENC X0, X8
404 ADDQ $0x20, CX
405
406 enc128:
407 MOVUPS (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 16(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 32(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 48(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 64(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 80(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 96(CX), X0
462 AESENC X0, X1
463 AESENC X0, X2
464 AESENC X0, X3
465 AESENC X0, X4
466 AESENC X0, X5
467 AESENC X0, X6
468 AESENC X0, X7
469 AESENC X0, X8
470 MOVUPS 112(CX), X0
471 AESENC X0, X1
472 AESENC X0, X2
473 AESENC X0, X3
474 AESENC X0, X4
475 AESENC X0, X5
476 AESENC X0, X6
477 AESENC X0, X7
478 AESENC X0, X8
479 MOVUPS 128(CX), X0
480 AESENC X0, X1
481 AESENC X0, X2
482 AESENC X0, X3
483 AESENC X0, X4
484 AESENC X0, X5
485 AESENC X0, X6
486 AESENC X0, X7
487 AESENC X0, X8
488 MOVUPS 144(CX), X0
489 AESENCLAST X0, X1
490 AESENCLAST X0, X2
491 AESENCLAST X0, X3
492 AESENCLAST X0, X4
493 AESENCLAST X0, X5
494 AESENCLAST X0, X6
495 AESENCLAST X0, X7
496 AESENCLAST X0, X8
497 MOVUPS (BX), X0
498 PXOR X1, X0
499 MOVUPS X0, (DX)
500 MOVUPS 16(BX), X0
501 PXOR X2, X0
502 MOVUPS X0, 16(DX)
503 MOVUPS 32(BX), X0
504 PXOR X3, X0
505 MOVUPS X0, 32(DX)
506 MOVUPS 48(BX), X0
507 PXOR X4, X0
508 MOVUPS X0, 48(DX)
509 MOVUPS 64(BX), X0
510 PXOR X5, X0
511 MOVUPS X0, 64(DX)
512 MOVUPS 80(BX), X0
513 PXOR X6, X0
514 MOVUPS X0, 80(DX)
515 MOVUPS 96(BX), X0
516 PXOR X7, X0
517 MOVUPS X0, 96(DX)
518 MOVUPS 112(BX), X0
519 PXOR X8, X0
520 MOVUPS X0, 112(DX)
521 RET
522
View as plain text