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