1; This file is generated from a similarly-named Perl script in the BoringSSL
2; source tree. Do not edit by hand.
3
4%ifdef BORINGSSL_PREFIX
5%include "boringssl_prefix_symbols_nasm.inc"
6%endif
7%ifidn __OUTPUT_FORMAT__,obj
8section	code	use32 class=code align=64
9%elifidn __OUTPUT_FORMAT__,win32
10$@feat.00 equ 1
11section	.text	code align=64
12%else
13section	.text	code
14%endif
15;extern	_GFp_ia32cap_P
16global	_GFp_aes_hw_encrypt
17align	16
18_GFp_aes_hw_encrypt:
19L$_GFp_aes_hw_encrypt_begin:
20	mov	eax,DWORD [4+esp]
21	mov	edx,DWORD [12+esp]
22	movups	xmm2,[eax]
23	mov	ecx,DWORD [240+edx]
24	mov	eax,DWORD [8+esp]
25	movups	xmm0,[edx]
26	movups	xmm1,[16+edx]
27	lea	edx,[32+edx]
28	xorps	xmm2,xmm0
29L$000enc1_loop_1:
30db	102,15,56,220,209
31	dec	ecx
32	movups	xmm1,[edx]
33	lea	edx,[16+edx]
34	jnz	NEAR L$000enc1_loop_1
35db	102,15,56,221,209
36	pxor	xmm0,xmm0
37	pxor	xmm1,xmm1
38	movups	[eax],xmm2
39	pxor	xmm2,xmm2
40	ret
41align	16
42__aesni_encrypt2:
43	movups	xmm0,[edx]
44	shl	ecx,4
45	movups	xmm1,[16+edx]
46	xorps	xmm2,xmm0
47	pxor	xmm3,xmm0
48	movups	xmm0,[32+edx]
49	lea	edx,[32+ecx*1+edx]
50	neg	ecx
51	add	ecx,16
52L$001enc2_loop:
53db	102,15,56,220,209
54db	102,15,56,220,217
55	movups	xmm1,[ecx*1+edx]
56	add	ecx,32
57db	102,15,56,220,208
58db	102,15,56,220,216
59	movups	xmm0,[ecx*1+edx-16]
60	jnz	NEAR L$001enc2_loop
61db	102,15,56,220,209
62db	102,15,56,220,217
63db	102,15,56,221,208
64db	102,15,56,221,216
65	ret
66align	16
67__aesni_encrypt3:
68	movups	xmm0,[edx]
69	shl	ecx,4
70	movups	xmm1,[16+edx]
71	xorps	xmm2,xmm0
72	pxor	xmm3,xmm0
73	pxor	xmm4,xmm0
74	movups	xmm0,[32+edx]
75	lea	edx,[32+ecx*1+edx]
76	neg	ecx
77	add	ecx,16
78L$002enc3_loop:
79db	102,15,56,220,209
80db	102,15,56,220,217
81db	102,15,56,220,225
82	movups	xmm1,[ecx*1+edx]
83	add	ecx,32
84db	102,15,56,220,208
85db	102,15,56,220,216
86db	102,15,56,220,224
87	movups	xmm0,[ecx*1+edx-16]
88	jnz	NEAR L$002enc3_loop
89db	102,15,56,220,209
90db	102,15,56,220,217
91db	102,15,56,220,225
92db	102,15,56,221,208
93db	102,15,56,221,216
94db	102,15,56,221,224
95	ret
96align	16
97__aesni_encrypt4:
98	movups	xmm0,[edx]
99	movups	xmm1,[16+edx]
100	shl	ecx,4
101	xorps	xmm2,xmm0
102	pxor	xmm3,xmm0
103	pxor	xmm4,xmm0
104	pxor	xmm5,xmm0
105	movups	xmm0,[32+edx]
106	lea	edx,[32+ecx*1+edx]
107	neg	ecx
108db	15,31,64,0
109	add	ecx,16
110L$003enc4_loop:
111db	102,15,56,220,209
112db	102,15,56,220,217
113db	102,15,56,220,225
114db	102,15,56,220,233
115	movups	xmm1,[ecx*1+edx]
116	add	ecx,32
117db	102,15,56,220,208
118db	102,15,56,220,216
119db	102,15,56,220,224
120db	102,15,56,220,232
121	movups	xmm0,[ecx*1+edx-16]
122	jnz	NEAR L$003enc4_loop
123db	102,15,56,220,209
124db	102,15,56,220,217
125db	102,15,56,220,225
126db	102,15,56,220,233
127db	102,15,56,221,208
128db	102,15,56,221,216
129db	102,15,56,221,224
130db	102,15,56,221,232
131	ret
132align	16
133__aesni_encrypt6:
134	movups	xmm0,[edx]
135	shl	ecx,4
136	movups	xmm1,[16+edx]
137	xorps	xmm2,xmm0
138	pxor	xmm3,xmm0
139	pxor	xmm4,xmm0
140db	102,15,56,220,209
141	pxor	xmm5,xmm0
142	pxor	xmm6,xmm0
143db	102,15,56,220,217
144	lea	edx,[32+ecx*1+edx]
145	neg	ecx
146db	102,15,56,220,225
147	pxor	xmm7,xmm0
148	movups	xmm0,[ecx*1+edx]
149	add	ecx,16
150	jmp	NEAR L$004_aesni_encrypt6_inner
151align	16
152L$005enc6_loop:
153db	102,15,56,220,209
154db	102,15,56,220,217
155db	102,15,56,220,225
156L$004_aesni_encrypt6_inner:
157db	102,15,56,220,233
158db	102,15,56,220,241
159db	102,15,56,220,249
160L$_aesni_encrypt6_enter:
161	movups	xmm1,[ecx*1+edx]
162	add	ecx,32
163db	102,15,56,220,208
164db	102,15,56,220,216
165db	102,15,56,220,224
166db	102,15,56,220,232
167db	102,15,56,220,240
168db	102,15,56,220,248
169	movups	xmm0,[ecx*1+edx-16]
170	jnz	NEAR L$005enc6_loop
171db	102,15,56,220,209
172db	102,15,56,220,217
173db	102,15,56,220,225
174db	102,15,56,220,233
175db	102,15,56,220,241
176db	102,15,56,220,249
177db	102,15,56,221,208
178db	102,15,56,221,216
179db	102,15,56,221,224
180db	102,15,56,221,232
181db	102,15,56,221,240
182db	102,15,56,221,248
183	ret
184global	_GFp_aes_hw_ctr32_encrypt_blocks
185align	16
186_GFp_aes_hw_ctr32_encrypt_blocks:
187L$_GFp_aes_hw_ctr32_encrypt_blocks_begin:
188	push	ebp
189	push	ebx
190	push	esi
191	push	edi
192	mov	esi,DWORD [20+esp]
193	mov	edi,DWORD [24+esp]
194	mov	eax,DWORD [28+esp]
195	mov	edx,DWORD [32+esp]
196	mov	ebx,DWORD [36+esp]
197	mov	ebp,esp
198	sub	esp,88
199	and	esp,-16
200	mov	DWORD [80+esp],ebp
201	cmp	eax,1
202	je	NEAR L$006ctr32_one_shortcut
203	movdqu	xmm7,[ebx]
204	mov	DWORD [esp],202182159
205	mov	DWORD [4+esp],134810123
206	mov	DWORD [8+esp],67438087
207	mov	DWORD [12+esp],66051
208	mov	ecx,6
209	xor	ebp,ebp
210	mov	DWORD [16+esp],ecx
211	mov	DWORD [20+esp],ecx
212	mov	DWORD [24+esp],ecx
213	mov	DWORD [28+esp],ebp
214db	102,15,58,22,251,3
215db	102,15,58,34,253,3
216	mov	ecx,DWORD [240+edx]
217	bswap	ebx
218	pxor	xmm0,xmm0
219	pxor	xmm1,xmm1
220	movdqa	xmm2,[esp]
221db	102,15,58,34,195,0
222	lea	ebp,[3+ebx]
223db	102,15,58,34,205,0
224	inc	ebx
225db	102,15,58,34,195,1
226	inc	ebp
227db	102,15,58,34,205,1
228	inc	ebx
229db	102,15,58,34,195,2
230	inc	ebp
231db	102,15,58,34,205,2
232	movdqa	[48+esp],xmm0
233db	102,15,56,0,194
234	movdqu	xmm6,[edx]
235	movdqa	[64+esp],xmm1
236db	102,15,56,0,202
237	pshufd	xmm2,xmm0,192
238	pshufd	xmm3,xmm0,128
239	cmp	eax,6
240	jb	NEAR L$007ctr32_tail
241	pxor	xmm7,xmm6
242	shl	ecx,4
243	mov	ebx,16
244	movdqa	[32+esp],xmm7
245	mov	ebp,edx
246	sub	ebx,ecx
247	lea	edx,[32+ecx*1+edx]
248	sub	eax,6
249	jmp	NEAR L$008ctr32_loop6
250align	16
251L$008ctr32_loop6:
252	pshufd	xmm4,xmm0,64
253	movdqa	xmm0,[32+esp]
254	pshufd	xmm5,xmm1,192
255	pxor	xmm2,xmm0
256	pshufd	xmm6,xmm1,128
257	pxor	xmm3,xmm0
258	pshufd	xmm7,xmm1,64
259	movups	xmm1,[16+ebp]
260	pxor	xmm4,xmm0
261	pxor	xmm5,xmm0
262db	102,15,56,220,209
263	pxor	xmm6,xmm0
264	pxor	xmm7,xmm0
265db	102,15,56,220,217
266	movups	xmm0,[32+ebp]
267	mov	ecx,ebx
268db	102,15,56,220,225
269db	102,15,56,220,233
270db	102,15,56,220,241
271db	102,15,56,220,249
272	call	L$_aesni_encrypt6_enter
273	movups	xmm1,[esi]
274	movups	xmm0,[16+esi]
275	xorps	xmm2,xmm1
276	movups	xmm1,[32+esi]
277	xorps	xmm3,xmm0
278	movups	[edi],xmm2
279	movdqa	xmm0,[16+esp]
280	xorps	xmm4,xmm1
281	movdqa	xmm1,[64+esp]
282	movups	[16+edi],xmm3
283	movups	[32+edi],xmm4
284	paddd	xmm1,xmm0
285	paddd	xmm0,[48+esp]
286	movdqa	xmm2,[esp]
287	movups	xmm3,[48+esi]
288	movups	xmm4,[64+esi]
289	xorps	xmm5,xmm3
290	movups	xmm3,[80+esi]
291	lea	esi,[96+esi]
292	movdqa	[48+esp],xmm0
293db	102,15,56,0,194
294	xorps	xmm6,xmm4
295	movups	[48+edi],xmm5
296	xorps	xmm7,xmm3
297	movdqa	[64+esp],xmm1
298db	102,15,56,0,202
299	movups	[64+edi],xmm6
300	pshufd	xmm2,xmm0,192
301	movups	[80+edi],xmm7
302	lea	edi,[96+edi]
303	pshufd	xmm3,xmm0,128
304	sub	eax,6
305	jnc	NEAR L$008ctr32_loop6
306	add	eax,6
307	jz	NEAR L$009ctr32_ret
308	movdqu	xmm7,[ebp]
309	mov	edx,ebp
310	pxor	xmm7,[32+esp]
311	mov	ecx,DWORD [240+ebp]
312L$007ctr32_tail:
313	por	xmm2,xmm7
314	cmp	eax,2
315	jb	NEAR L$010ctr32_one
316	pshufd	xmm4,xmm0,64
317	por	xmm3,xmm7
318	je	NEAR L$011ctr32_two
319	pshufd	xmm5,xmm1,192
320	por	xmm4,xmm7
321	cmp	eax,4
322	jb	NEAR L$012ctr32_three
323	pshufd	xmm6,xmm1,128
324	por	xmm5,xmm7
325	je	NEAR L$013ctr32_four
326	por	xmm6,xmm7
327	call	__aesni_encrypt6
328	movups	xmm1,[esi]
329	movups	xmm0,[16+esi]
330	xorps	xmm2,xmm1
331	movups	xmm1,[32+esi]
332	xorps	xmm3,xmm0
333	movups	xmm0,[48+esi]
334	xorps	xmm4,xmm1
335	movups	xmm1,[64+esi]
336	xorps	xmm5,xmm0
337	movups	[edi],xmm2
338	xorps	xmm6,xmm1
339	movups	[16+edi],xmm3
340	movups	[32+edi],xmm4
341	movups	[48+edi],xmm5
342	movups	[64+edi],xmm6
343	jmp	NEAR L$009ctr32_ret
344align	16
345L$006ctr32_one_shortcut:
346	movups	xmm2,[ebx]
347	mov	ecx,DWORD [240+edx]
348L$010ctr32_one:
349	movups	xmm0,[edx]
350	movups	xmm1,[16+edx]
351	lea	edx,[32+edx]
352	xorps	xmm2,xmm0
353L$014enc1_loop_2:
354db	102,15,56,220,209
355	dec	ecx
356	movups	xmm1,[edx]
357	lea	edx,[16+edx]
358	jnz	NEAR L$014enc1_loop_2
359db	102,15,56,221,209
360	movups	xmm6,[esi]
361	xorps	xmm6,xmm2
362	movups	[edi],xmm6
363	jmp	NEAR L$009ctr32_ret
364align	16
365L$011ctr32_two:
366	call	__aesni_encrypt2
367	movups	xmm5,[esi]
368	movups	xmm6,[16+esi]
369	xorps	xmm2,xmm5
370	xorps	xmm3,xmm6
371	movups	[edi],xmm2
372	movups	[16+edi],xmm3
373	jmp	NEAR L$009ctr32_ret
374align	16
375L$012ctr32_three:
376	call	__aesni_encrypt3
377	movups	xmm5,[esi]
378	movups	xmm6,[16+esi]
379	xorps	xmm2,xmm5
380	movups	xmm7,[32+esi]
381	xorps	xmm3,xmm6
382	movups	[edi],xmm2
383	xorps	xmm4,xmm7
384	movups	[16+edi],xmm3
385	movups	[32+edi],xmm4
386	jmp	NEAR L$009ctr32_ret
387align	16
388L$013ctr32_four:
389	call	__aesni_encrypt4
390	movups	xmm6,[esi]
391	movups	xmm7,[16+esi]
392	movups	xmm1,[32+esi]
393	xorps	xmm2,xmm6
394	movups	xmm0,[48+esi]
395	xorps	xmm3,xmm7
396	movups	[edi],xmm2
397	xorps	xmm4,xmm1
398	movups	[16+edi],xmm3
399	xorps	xmm5,xmm0
400	movups	[32+edi],xmm4
401	movups	[48+edi],xmm5
402L$009ctr32_ret:
403	pxor	xmm0,xmm0
404	pxor	xmm1,xmm1
405	pxor	xmm2,xmm2
406	pxor	xmm3,xmm3
407	pxor	xmm4,xmm4
408	movdqa	[32+esp],xmm0
409	pxor	xmm5,xmm5
410	movdqa	[48+esp],xmm0
411	pxor	xmm6,xmm6
412	movdqa	[64+esp],xmm0
413	pxor	xmm7,xmm7
414	mov	esp,DWORD [80+esp]
415	pop	edi
416	pop	esi
417	pop	ebx
418	pop	ebp
419	ret
420align	16
421__aesni_set_encrypt_key:
422	push	ebp
423	push	ebx
424	test	eax,eax
425	jz	NEAR L$015bad_pointer
426	test	edx,edx
427	jz	NEAR L$015bad_pointer
428	call	L$016pic
429L$016pic:
430	pop	ebx
431	lea	ebx,[(L$key_const-L$016pic)+ebx]
432	lea	ebp,[_GFp_ia32cap_P]
433	movups	xmm0,[eax]
434	xorps	xmm4,xmm4
435	mov	ebp,DWORD [4+ebp]
436	lea	edx,[16+edx]
437	and	ebp,268437504
438	cmp	ecx,256
439	je	NEAR L$01714rounds
440	cmp	ecx,128
441	jne	NEAR L$018bad_keybits
442align	16
443L$01910rounds:
444	cmp	ebp,268435456
445	je	NEAR L$02010rounds_alt
446	mov	ecx,9
447	movups	[edx-16],xmm0
448db	102,15,58,223,200,1
449	call	L$021key_128_cold
450db	102,15,58,223,200,2
451	call	L$022key_128
452db	102,15,58,223,200,4
453	call	L$022key_128
454db	102,15,58,223,200,8
455	call	L$022key_128
456db	102,15,58,223,200,16
457	call	L$022key_128
458db	102,15,58,223,200,32
459	call	L$022key_128
460db	102,15,58,223,200,64
461	call	L$022key_128
462db	102,15,58,223,200,128
463	call	L$022key_128
464db	102,15,58,223,200,27
465	call	L$022key_128
466db	102,15,58,223,200,54
467	call	L$022key_128
468	movups	[edx],xmm0
469	mov	DWORD [80+edx],ecx
470	jmp	NEAR L$023good_key
471align	16
472L$022key_128:
473	movups	[edx],xmm0
474	lea	edx,[16+edx]
475L$021key_128_cold:
476	shufps	xmm4,xmm0,16
477	xorps	xmm0,xmm4
478	shufps	xmm4,xmm0,140
479	xorps	xmm0,xmm4
480	shufps	xmm1,xmm1,255
481	xorps	xmm0,xmm1
482	ret
483align	16
484L$02010rounds_alt:
485	movdqa	xmm5,[ebx]
486	mov	ecx,8
487	movdqa	xmm4,[32+ebx]
488	movdqa	xmm2,xmm0
489	movdqu	[edx-16],xmm0
490L$024loop_key128:
491db	102,15,56,0,197
492db	102,15,56,221,196
493	pslld	xmm4,1
494	lea	edx,[16+edx]
495	movdqa	xmm3,xmm2
496	pslldq	xmm2,4
497	pxor	xmm3,xmm2
498	pslldq	xmm2,4
499	pxor	xmm3,xmm2
500	pslldq	xmm2,4
501	pxor	xmm2,xmm3
502	pxor	xmm0,xmm2
503	movdqu	[edx-16],xmm0
504	movdqa	xmm2,xmm0
505	dec	ecx
506	jnz	NEAR L$024loop_key128
507	movdqa	xmm4,[48+ebx]
508db	102,15,56,0,197
509db	102,15,56,221,196
510	pslld	xmm4,1
511	movdqa	xmm3,xmm2
512	pslldq	xmm2,4
513	pxor	xmm3,xmm2
514	pslldq	xmm2,4
515	pxor	xmm3,xmm2
516	pslldq	xmm2,4
517	pxor	xmm2,xmm3
518	pxor	xmm0,xmm2
519	movdqu	[edx],xmm0
520	movdqa	xmm2,xmm0
521db	102,15,56,0,197
522db	102,15,56,221,196
523	movdqa	xmm3,xmm2
524	pslldq	xmm2,4
525	pxor	xmm3,xmm2
526	pslldq	xmm2,4
527	pxor	xmm3,xmm2
528	pslldq	xmm2,4
529	pxor	xmm2,xmm3
530	pxor	xmm0,xmm2
531	movdqu	[16+edx],xmm0
532	mov	ecx,9
533	mov	DWORD [96+edx],ecx
534	jmp	NEAR L$023good_key
535align	16
536L$01714rounds:
537	movups	xmm2,[16+eax]
538	lea	edx,[16+edx]
539	cmp	ebp,268435456
540	je	NEAR L$02514rounds_alt
541	mov	ecx,13
542	movups	[edx-32],xmm0
543	movups	[edx-16],xmm2
544db	102,15,58,223,202,1
545	call	L$026key_256a_cold
546db	102,15,58,223,200,1
547	call	L$027key_256b
548db	102,15,58,223,202,2
549	call	L$028key_256a
550db	102,15,58,223,200,2
551	call	L$027key_256b
552db	102,15,58,223,202,4
553	call	L$028key_256a
554db	102,15,58,223,200,4
555	call	L$027key_256b
556db	102,15,58,223,202,8
557	call	L$028key_256a
558db	102,15,58,223,200,8
559	call	L$027key_256b
560db	102,15,58,223,202,16
561	call	L$028key_256a
562db	102,15,58,223,200,16
563	call	L$027key_256b
564db	102,15,58,223,202,32
565	call	L$028key_256a
566db	102,15,58,223,200,32
567	call	L$027key_256b
568db	102,15,58,223,202,64
569	call	L$028key_256a
570	movups	[edx],xmm0
571	mov	DWORD [16+edx],ecx
572	xor	eax,eax
573	jmp	NEAR L$023good_key
574align	16
575L$028key_256a:
576	movups	[edx],xmm2
577	lea	edx,[16+edx]
578L$026key_256a_cold:
579	shufps	xmm4,xmm0,16
580	xorps	xmm0,xmm4
581	shufps	xmm4,xmm0,140
582	xorps	xmm0,xmm4
583	shufps	xmm1,xmm1,255
584	xorps	xmm0,xmm1
585	ret
586align	16
587L$027key_256b:
588	movups	[edx],xmm0
589	lea	edx,[16+edx]
590	shufps	xmm4,xmm2,16
591	xorps	xmm2,xmm4
592	shufps	xmm4,xmm2,140
593	xorps	xmm2,xmm4
594	shufps	xmm1,xmm1,170
595	xorps	xmm2,xmm1
596	ret
597align	16
598L$02514rounds_alt:
599	movdqa	xmm5,[ebx]
600	movdqa	xmm4,[32+ebx]
601	mov	ecx,7
602	movdqu	[edx-32],xmm0
603	movdqa	xmm1,xmm2
604	movdqu	[edx-16],xmm2
605L$029loop_key256:
606db	102,15,56,0,213
607db	102,15,56,221,212
608	movdqa	xmm3,xmm0
609	pslldq	xmm0,4
610	pxor	xmm3,xmm0
611	pslldq	xmm0,4
612	pxor	xmm3,xmm0
613	pslldq	xmm0,4
614	pxor	xmm0,xmm3
615	pslld	xmm4,1
616	pxor	xmm0,xmm2
617	movdqu	[edx],xmm0
618	dec	ecx
619	jz	NEAR L$030done_key256
620	pshufd	xmm2,xmm0,255
621	pxor	xmm3,xmm3
622db	102,15,56,221,211
623	movdqa	xmm3,xmm1
624	pslldq	xmm1,4
625	pxor	xmm3,xmm1
626	pslldq	xmm1,4
627	pxor	xmm3,xmm1
628	pslldq	xmm1,4
629	pxor	xmm1,xmm3
630	pxor	xmm2,xmm1
631	movdqu	[16+edx],xmm2
632	lea	edx,[32+edx]
633	movdqa	xmm1,xmm2
634	jmp	NEAR L$029loop_key256
635L$030done_key256:
636	mov	ecx,13
637	mov	DWORD [16+edx],ecx
638L$023good_key:
639	pxor	xmm0,xmm0
640	pxor	xmm1,xmm1
641	pxor	xmm2,xmm2
642	pxor	xmm3,xmm3
643	pxor	xmm4,xmm4
644	pxor	xmm5,xmm5
645	xor	eax,eax
646	pop	ebx
647	pop	ebp
648	ret
649align	4
650L$015bad_pointer:
651	mov	eax,-1
652	pop	ebx
653	pop	ebp
654	ret
655align	4
656L$018bad_keybits:
657	pxor	xmm0,xmm0
658	mov	eax,-2
659	pop	ebx
660	pop	ebp
661	ret
662global	_GFp_aes_hw_set_encrypt_key
663align	16
664_GFp_aes_hw_set_encrypt_key:
665L$_GFp_aes_hw_set_encrypt_key_begin:
666	mov	eax,DWORD [4+esp]
667	mov	ecx,DWORD [8+esp]
668	mov	edx,DWORD [12+esp]
669	call	__aesni_set_encrypt_key
670	ret
671align	64
672L$key_const:
673dd	202313229,202313229,202313229,202313229
674dd	67569157,67569157,67569157,67569157
675dd	1,1,1,1
676dd	27,27,27,27
677db	65,69,83,32,102,111,114,32,73,110,116,101,108,32,65,69
678db	83,45,78,73,44,32,67,82,89,80,84,79,71,65,77,83
679db	32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115
680db	115,108,46,111,114,103,62,0
681segment	.bss
682common	_GFp_ia32cap_P 16
683