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%ifdef __YASM_VERSION_ID__
11%if __YASM_VERSION_ID__ < 01010000h
12%error yasm version 1.1.0 or later needed.
13%endif
14; Yasm automatically includes .00 and complains about redefining it.
15; https://www.tortall.net/projects/yasm/manual/html/objfmt-win32-safeseh.html
16%else
17$@feat.00 equ 1
18%endif
19section	.text	code align=64
20%else
21section	.text	code
22%endif
23align	16
24__x86_AES_encrypt_compact:
25	mov	DWORD [20+esp],edi
26	xor	eax,DWORD [edi]
27	xor	ebx,DWORD [4+edi]
28	xor	ecx,DWORD [8+edi]
29	xor	edx,DWORD [12+edi]
30	mov	esi,DWORD [240+edi]
31	lea	esi,[esi*1+esi-2]
32	lea	esi,[esi*8+edi]
33	mov	DWORD [24+esp],esi
34	mov	edi,DWORD [ebp-128]
35	mov	esi,DWORD [ebp-96]
36	mov	edi,DWORD [ebp-64]
37	mov	esi,DWORD [ebp-32]
38	mov	edi,DWORD [ebp]
39	mov	esi,DWORD [32+ebp]
40	mov	edi,DWORD [64+ebp]
41	mov	esi,DWORD [96+ebp]
42align	16
43L$000loop:
44	mov	esi,eax
45	and	esi,255
46	movzx	esi,BYTE [esi*1+ebp-128]
47	movzx	edi,bh
48	movzx	edi,BYTE [edi*1+ebp-128]
49	shl	edi,8
50	xor	esi,edi
51	mov	edi,ecx
52	shr	edi,16
53	and	edi,255
54	movzx	edi,BYTE [edi*1+ebp-128]
55	shl	edi,16
56	xor	esi,edi
57	mov	edi,edx
58	shr	edi,24
59	movzx	edi,BYTE [edi*1+ebp-128]
60	shl	edi,24
61	xor	esi,edi
62	mov	DWORD [4+esp],esi
63	mov	esi,ebx
64	and	esi,255
65	shr	ebx,16
66	movzx	esi,BYTE [esi*1+ebp-128]
67	movzx	edi,ch
68	movzx	edi,BYTE [edi*1+ebp-128]
69	shl	edi,8
70	xor	esi,edi
71	mov	edi,edx
72	shr	edi,16
73	and	edi,255
74	movzx	edi,BYTE [edi*1+ebp-128]
75	shl	edi,16
76	xor	esi,edi
77	mov	edi,eax
78	shr	edi,24
79	movzx	edi,BYTE [edi*1+ebp-128]
80	shl	edi,24
81	xor	esi,edi
82	mov	DWORD [8+esp],esi
83	mov	esi,ecx
84	and	esi,255
85	shr	ecx,24
86	movzx	esi,BYTE [esi*1+ebp-128]
87	movzx	edi,dh
88	movzx	edi,BYTE [edi*1+ebp-128]
89	shl	edi,8
90	xor	esi,edi
91	mov	edi,eax
92	shr	edi,16
93	and	edx,255
94	and	edi,255
95	movzx	edi,BYTE [edi*1+ebp-128]
96	shl	edi,16
97	xor	esi,edi
98	movzx	edi,bh
99	movzx	edi,BYTE [edi*1+ebp-128]
100	shl	edi,24
101	xor	esi,edi
102	and	edx,255
103	movzx	edx,BYTE [edx*1+ebp-128]
104	movzx	eax,ah
105	movzx	eax,BYTE [eax*1+ebp-128]
106	shl	eax,8
107	xor	edx,eax
108	mov	eax,DWORD [4+esp]
109	and	ebx,255
110	movzx	ebx,BYTE [ebx*1+ebp-128]
111	shl	ebx,16
112	xor	edx,ebx
113	mov	ebx,DWORD [8+esp]
114	movzx	ecx,BYTE [ecx*1+ebp-128]
115	shl	ecx,24
116	xor	edx,ecx
117	mov	ecx,esi
118	mov	ebp,2155905152
119	and	ebp,ecx
120	lea	edi,[ecx*1+ecx]
121	mov	esi,ebp
122	shr	ebp,7
123	and	edi,4278124286
124	sub	esi,ebp
125	mov	ebp,ecx
126	and	esi,454761243
127	ror	ebp,16
128	xor	esi,edi
129	mov	edi,ecx
130	xor	ecx,esi
131	ror	edi,24
132	xor	esi,ebp
133	rol	ecx,24
134	xor	esi,edi
135	mov	ebp,2155905152
136	xor	ecx,esi
137	and	ebp,edx
138	lea	edi,[edx*1+edx]
139	mov	esi,ebp
140	shr	ebp,7
141	and	edi,4278124286
142	sub	esi,ebp
143	mov	ebp,edx
144	and	esi,454761243
145	ror	ebp,16
146	xor	esi,edi
147	mov	edi,edx
148	xor	edx,esi
149	ror	edi,24
150	xor	esi,ebp
151	rol	edx,24
152	xor	esi,edi
153	mov	ebp,2155905152
154	xor	edx,esi
155	and	ebp,eax
156	lea	edi,[eax*1+eax]
157	mov	esi,ebp
158	shr	ebp,7
159	and	edi,4278124286
160	sub	esi,ebp
161	mov	ebp,eax
162	and	esi,454761243
163	ror	ebp,16
164	xor	esi,edi
165	mov	edi,eax
166	xor	eax,esi
167	ror	edi,24
168	xor	esi,ebp
169	rol	eax,24
170	xor	esi,edi
171	mov	ebp,2155905152
172	xor	eax,esi
173	and	ebp,ebx
174	lea	edi,[ebx*1+ebx]
175	mov	esi,ebp
176	shr	ebp,7
177	and	edi,4278124286
178	sub	esi,ebp
179	mov	ebp,ebx
180	and	esi,454761243
181	ror	ebp,16
182	xor	esi,edi
183	mov	edi,ebx
184	xor	ebx,esi
185	ror	edi,24
186	xor	esi,ebp
187	rol	ebx,24
188	xor	esi,edi
189	xor	ebx,esi
190	mov	edi,DWORD [20+esp]
191	mov	ebp,DWORD [28+esp]
192	add	edi,16
193	xor	eax,DWORD [edi]
194	xor	ebx,DWORD [4+edi]
195	xor	ecx,DWORD [8+edi]
196	xor	edx,DWORD [12+edi]
197	cmp	edi,DWORD [24+esp]
198	mov	DWORD [20+esp],edi
199	jb	NEAR L$000loop
200	mov	esi,eax
201	and	esi,255
202	movzx	esi,BYTE [esi*1+ebp-128]
203	movzx	edi,bh
204	movzx	edi,BYTE [edi*1+ebp-128]
205	shl	edi,8
206	xor	esi,edi
207	mov	edi,ecx
208	shr	edi,16
209	and	edi,255
210	movzx	edi,BYTE [edi*1+ebp-128]
211	shl	edi,16
212	xor	esi,edi
213	mov	edi,edx
214	shr	edi,24
215	movzx	edi,BYTE [edi*1+ebp-128]
216	shl	edi,24
217	xor	esi,edi
218	mov	DWORD [4+esp],esi
219	mov	esi,ebx
220	and	esi,255
221	shr	ebx,16
222	movzx	esi,BYTE [esi*1+ebp-128]
223	movzx	edi,ch
224	movzx	edi,BYTE [edi*1+ebp-128]
225	shl	edi,8
226	xor	esi,edi
227	mov	edi,edx
228	shr	edi,16
229	and	edi,255
230	movzx	edi,BYTE [edi*1+ebp-128]
231	shl	edi,16
232	xor	esi,edi
233	mov	edi,eax
234	shr	edi,24
235	movzx	edi,BYTE [edi*1+ebp-128]
236	shl	edi,24
237	xor	esi,edi
238	mov	DWORD [8+esp],esi
239	mov	esi,ecx
240	and	esi,255
241	shr	ecx,24
242	movzx	esi,BYTE [esi*1+ebp-128]
243	movzx	edi,dh
244	movzx	edi,BYTE [edi*1+ebp-128]
245	shl	edi,8
246	xor	esi,edi
247	mov	edi,eax
248	shr	edi,16
249	and	edx,255
250	and	edi,255
251	movzx	edi,BYTE [edi*1+ebp-128]
252	shl	edi,16
253	xor	esi,edi
254	movzx	edi,bh
255	movzx	edi,BYTE [edi*1+ebp-128]
256	shl	edi,24
257	xor	esi,edi
258	mov	edi,DWORD [20+esp]
259	and	edx,255
260	movzx	edx,BYTE [edx*1+ebp-128]
261	movzx	eax,ah
262	movzx	eax,BYTE [eax*1+ebp-128]
263	shl	eax,8
264	xor	edx,eax
265	mov	eax,DWORD [4+esp]
266	and	ebx,255
267	movzx	ebx,BYTE [ebx*1+ebp-128]
268	shl	ebx,16
269	xor	edx,ebx
270	mov	ebx,DWORD [8+esp]
271	movzx	ecx,BYTE [ecx*1+ebp-128]
272	shl	ecx,24
273	xor	edx,ecx
274	mov	ecx,esi
275	xor	eax,DWORD [16+edi]
276	xor	ebx,DWORD [20+edi]
277	xor	ecx,DWORD [24+edi]
278	xor	edx,DWORD [28+edi]
279	ret
280align	16
281__sse_AES_encrypt_compact:
282	pxor	mm0,[edi]
283	pxor	mm4,[8+edi]
284	mov	esi,DWORD [240+edi]
285	lea	esi,[esi*1+esi-2]
286	lea	esi,[esi*8+edi]
287	mov	DWORD [24+esp],esi
288	mov	eax,454761243
289	mov	DWORD [8+esp],eax
290	mov	DWORD [12+esp],eax
291	mov	eax,DWORD [ebp-128]
292	mov	ebx,DWORD [ebp-96]
293	mov	ecx,DWORD [ebp-64]
294	mov	edx,DWORD [ebp-32]
295	mov	eax,DWORD [ebp]
296	mov	ebx,DWORD [32+ebp]
297	mov	ecx,DWORD [64+ebp]
298	mov	edx,DWORD [96+ebp]
299align	16
300L$001loop:
301	pshufw	mm1,mm0,8
302	pshufw	mm5,mm4,13
303	movd	eax,mm1
304	movd	ebx,mm5
305	mov	DWORD [20+esp],edi
306	movzx	esi,al
307	movzx	edx,ah
308	pshufw	mm2,mm0,13
309	movzx	ecx,BYTE [esi*1+ebp-128]
310	movzx	edi,bl
311	movzx	edx,BYTE [edx*1+ebp-128]
312	shr	eax,16
313	shl	edx,8
314	movzx	esi,BYTE [edi*1+ebp-128]
315	movzx	edi,bh
316	shl	esi,16
317	pshufw	mm6,mm4,8
318	or	ecx,esi
319	movzx	esi,BYTE [edi*1+ebp-128]
320	movzx	edi,ah
321	shl	esi,24
322	shr	ebx,16
323	or	edx,esi
324	movzx	esi,BYTE [edi*1+ebp-128]
325	movzx	edi,bh
326	shl	esi,8
327	or	ecx,esi
328	movzx	esi,BYTE [edi*1+ebp-128]
329	movzx	edi,al
330	shl	esi,24
331	or	ecx,esi
332	movzx	esi,BYTE [edi*1+ebp-128]
333	movzx	edi,bl
334	movd	eax,mm2
335	movd	mm0,ecx
336	movzx	ecx,BYTE [edi*1+ebp-128]
337	movzx	edi,ah
338	shl	ecx,16
339	movd	ebx,mm6
340	or	ecx,esi
341	movzx	esi,BYTE [edi*1+ebp-128]
342	movzx	edi,bh
343	shl	esi,24
344	or	ecx,esi
345	movzx	esi,BYTE [edi*1+ebp-128]
346	movzx	edi,bl
347	shl	esi,8
348	shr	ebx,16
349	or	ecx,esi
350	movzx	esi,BYTE [edi*1+ebp-128]
351	movzx	edi,al
352	shr	eax,16
353	movd	mm1,ecx
354	movzx	ecx,BYTE [edi*1+ebp-128]
355	movzx	edi,ah
356	shl	ecx,16
357	and	eax,255
358	or	ecx,esi
359	punpckldq	mm0,mm1
360	movzx	esi,BYTE [edi*1+ebp-128]
361	movzx	edi,bh
362	shl	esi,24
363	and	ebx,255
364	movzx	eax,BYTE [eax*1+ebp-128]
365	or	ecx,esi
366	shl	eax,16
367	movzx	esi,BYTE [edi*1+ebp-128]
368	or	edx,eax
369	shl	esi,8
370	movzx	ebx,BYTE [ebx*1+ebp-128]
371	or	ecx,esi
372	or	edx,ebx
373	mov	edi,DWORD [20+esp]
374	movd	mm4,ecx
375	movd	mm5,edx
376	punpckldq	mm4,mm5
377	add	edi,16
378	cmp	edi,DWORD [24+esp]
379	ja	NEAR L$002out
380	movq	mm2,[8+esp]
381	pxor	mm3,mm3
382	pxor	mm7,mm7
383	movq	mm1,mm0
384	movq	mm5,mm4
385	pcmpgtb	mm3,mm0
386	pcmpgtb	mm7,mm4
387	pand	mm3,mm2
388	pand	mm7,mm2
389	pshufw	mm2,mm0,177
390	pshufw	mm6,mm4,177
391	paddb	mm0,mm0
392	paddb	mm4,mm4
393	pxor	mm0,mm3
394	pxor	mm4,mm7
395	pshufw	mm3,mm2,177
396	pshufw	mm7,mm6,177
397	pxor	mm1,mm0
398	pxor	mm5,mm4
399	pxor	mm0,mm2
400	pxor	mm4,mm6
401	movq	mm2,mm3
402	movq	mm6,mm7
403	pslld	mm3,8
404	pslld	mm7,8
405	psrld	mm2,24
406	psrld	mm6,24
407	pxor	mm0,mm3
408	pxor	mm4,mm7
409	pxor	mm0,mm2
410	pxor	mm4,mm6
411	movq	mm3,mm1
412	movq	mm7,mm5
413	movq	mm2,[edi]
414	movq	mm6,[8+edi]
415	psrld	mm1,8
416	psrld	mm5,8
417	mov	eax,DWORD [ebp-128]
418	pslld	mm3,24
419	pslld	mm7,24
420	mov	ebx,DWORD [ebp-64]
421	pxor	mm0,mm1
422	pxor	mm4,mm5
423	mov	ecx,DWORD [ebp]
424	pxor	mm0,mm3
425	pxor	mm4,mm7
426	mov	edx,DWORD [64+ebp]
427	pxor	mm0,mm2
428	pxor	mm4,mm6
429	jmp	NEAR L$001loop
430align	16
431L$002out:
432	pxor	mm0,[edi]
433	pxor	mm4,[8+edi]
434	ret
435align	16
436__x86_AES_encrypt:
437	mov	DWORD [20+esp],edi
438	xor	eax,DWORD [edi]
439	xor	ebx,DWORD [4+edi]
440	xor	ecx,DWORD [8+edi]
441	xor	edx,DWORD [12+edi]
442	mov	esi,DWORD [240+edi]
443	lea	esi,[esi*1+esi-2]
444	lea	esi,[esi*8+edi]
445	mov	DWORD [24+esp],esi
446align	16
447L$003loop:
448	mov	esi,eax
449	and	esi,255
450	mov	esi,DWORD [esi*8+ebp]
451	movzx	edi,bh
452	xor	esi,DWORD [3+edi*8+ebp]
453	mov	edi,ecx
454	shr	edi,16
455	and	edi,255
456	xor	esi,DWORD [2+edi*8+ebp]
457	mov	edi,edx
458	shr	edi,24
459	xor	esi,DWORD [1+edi*8+ebp]
460	mov	DWORD [4+esp],esi
461	mov	esi,ebx
462	and	esi,255
463	shr	ebx,16
464	mov	esi,DWORD [esi*8+ebp]
465	movzx	edi,ch
466	xor	esi,DWORD [3+edi*8+ebp]
467	mov	edi,edx
468	shr	edi,16
469	and	edi,255
470	xor	esi,DWORD [2+edi*8+ebp]
471	mov	edi,eax
472	shr	edi,24
473	xor	esi,DWORD [1+edi*8+ebp]
474	mov	DWORD [8+esp],esi
475	mov	esi,ecx
476	and	esi,255
477	shr	ecx,24
478	mov	esi,DWORD [esi*8+ebp]
479	movzx	edi,dh
480	xor	esi,DWORD [3+edi*8+ebp]
481	mov	edi,eax
482	shr	edi,16
483	and	edx,255
484	and	edi,255
485	xor	esi,DWORD [2+edi*8+ebp]
486	movzx	edi,bh
487	xor	esi,DWORD [1+edi*8+ebp]
488	mov	edi,DWORD [20+esp]
489	mov	edx,DWORD [edx*8+ebp]
490	movzx	eax,ah
491	xor	edx,DWORD [3+eax*8+ebp]
492	mov	eax,DWORD [4+esp]
493	and	ebx,255
494	xor	edx,DWORD [2+ebx*8+ebp]
495	mov	ebx,DWORD [8+esp]
496	xor	edx,DWORD [1+ecx*8+ebp]
497	mov	ecx,esi
498	add	edi,16
499	xor	eax,DWORD [edi]
500	xor	ebx,DWORD [4+edi]
501	xor	ecx,DWORD [8+edi]
502	xor	edx,DWORD [12+edi]
503	cmp	edi,DWORD [24+esp]
504	mov	DWORD [20+esp],edi
505	jb	NEAR L$003loop
506	mov	esi,eax
507	and	esi,255
508	mov	esi,DWORD [2+esi*8+ebp]
509	and	esi,255
510	movzx	edi,bh
511	mov	edi,DWORD [edi*8+ebp]
512	and	edi,65280
513	xor	esi,edi
514	mov	edi,ecx
515	shr	edi,16
516	and	edi,255
517	mov	edi,DWORD [edi*8+ebp]
518	and	edi,16711680
519	xor	esi,edi
520	mov	edi,edx
521	shr	edi,24
522	mov	edi,DWORD [2+edi*8+ebp]
523	and	edi,4278190080
524	xor	esi,edi
525	mov	DWORD [4+esp],esi
526	mov	esi,ebx
527	and	esi,255
528	shr	ebx,16
529	mov	esi,DWORD [2+esi*8+ebp]
530	and	esi,255
531	movzx	edi,ch
532	mov	edi,DWORD [edi*8+ebp]
533	and	edi,65280
534	xor	esi,edi
535	mov	edi,edx
536	shr	edi,16
537	and	edi,255
538	mov	edi,DWORD [edi*8+ebp]
539	and	edi,16711680
540	xor	esi,edi
541	mov	edi,eax
542	shr	edi,24
543	mov	edi,DWORD [2+edi*8+ebp]
544	and	edi,4278190080
545	xor	esi,edi
546	mov	DWORD [8+esp],esi
547	mov	esi,ecx
548	and	esi,255
549	shr	ecx,24
550	mov	esi,DWORD [2+esi*8+ebp]
551	and	esi,255
552	movzx	edi,dh
553	mov	edi,DWORD [edi*8+ebp]
554	and	edi,65280
555	xor	esi,edi
556	mov	edi,eax
557	shr	edi,16
558	and	edx,255
559	and	edi,255
560	mov	edi,DWORD [edi*8+ebp]
561	and	edi,16711680
562	xor	esi,edi
563	movzx	edi,bh
564	mov	edi,DWORD [2+edi*8+ebp]
565	and	edi,4278190080
566	xor	esi,edi
567	mov	edi,DWORD [20+esp]
568	and	edx,255
569	mov	edx,DWORD [2+edx*8+ebp]
570	and	edx,255
571	movzx	eax,ah
572	mov	eax,DWORD [eax*8+ebp]
573	and	eax,65280
574	xor	edx,eax
575	mov	eax,DWORD [4+esp]
576	and	ebx,255
577	mov	ebx,DWORD [ebx*8+ebp]
578	and	ebx,16711680
579	xor	edx,ebx
580	mov	ebx,DWORD [8+esp]
581	mov	ecx,DWORD [2+ecx*8+ebp]
582	and	ecx,4278190080
583	xor	edx,ecx
584	mov	ecx,esi
585	add	edi,16
586	xor	eax,DWORD [edi]
587	xor	ebx,DWORD [4+edi]
588	xor	ecx,DWORD [8+edi]
589	xor	edx,DWORD [12+edi]
590	ret
591align	64
592L$AES_Te:
593dd	2774754246,2774754246
594dd	2222750968,2222750968
595dd	2574743534,2574743534
596dd	2373680118,2373680118
597dd	234025727,234025727
598dd	3177933782,3177933782
599dd	2976870366,2976870366
600dd	1422247313,1422247313
601dd	1345335392,1345335392
602dd	50397442,50397442
603dd	2842126286,2842126286
604dd	2099981142,2099981142
605dd	436141799,436141799
606dd	1658312629,1658312629
607dd	3870010189,3870010189
608dd	2591454956,2591454956
609dd	1170918031,1170918031
610dd	2642575903,2642575903
611dd	1086966153,1086966153
612dd	2273148410,2273148410
613dd	368769775,368769775
614dd	3948501426,3948501426
615dd	3376891790,3376891790
616dd	200339707,200339707
617dd	3970805057,3970805057
618dd	1742001331,1742001331
619dd	4255294047,4255294047
620dd	3937382213,3937382213
621dd	3214711843,3214711843
622dd	4154762323,4154762323
623dd	2524082916,2524082916
624dd	1539358875,1539358875
625dd	3266819957,3266819957
626dd	486407649,486407649
627dd	2928907069,2928907069
628dd	1780885068,1780885068
629dd	1513502316,1513502316
630dd	1094664062,1094664062
631dd	49805301,49805301
632dd	1338821763,1338821763
633dd	1546925160,1546925160
634dd	4104496465,4104496465
635dd	887481809,887481809
636dd	150073849,150073849
637dd	2473685474,2473685474
638dd	1943591083,1943591083
639dd	1395732834,1395732834
640dd	1058346282,1058346282
641dd	201589768,201589768
642dd	1388824469,1388824469
643dd	1696801606,1696801606
644dd	1589887901,1589887901
645dd	672667696,672667696
646dd	2711000631,2711000631
647dd	251987210,251987210
648dd	3046808111,3046808111
649dd	151455502,151455502
650dd	907153956,907153956
651dd	2608889883,2608889883
652dd	1038279391,1038279391
653dd	652995533,652995533
654dd	1764173646,1764173646
655dd	3451040383,3451040383
656dd	2675275242,2675275242
657dd	453576978,453576978
658dd	2659418909,2659418909
659dd	1949051992,1949051992
660dd	773462580,773462580
661dd	756751158,756751158
662dd	2993581788,2993581788
663dd	3998898868,3998898868
664dd	4221608027,4221608027
665dd	4132590244,4132590244
666dd	1295727478,1295727478
667dd	1641469623,1641469623
668dd	3467883389,3467883389
669dd	2066295122,2066295122
670dd	1055122397,1055122397
671dd	1898917726,1898917726
672dd	2542044179,2542044179
673dd	4115878822,4115878822
674dd	1758581177,1758581177
675dd	0,0
676dd	753790401,753790401
677dd	1612718144,1612718144
678dd	536673507,536673507
679dd	3367088505,3367088505
680dd	3982187446,3982187446
681dd	3194645204,3194645204
682dd	1187761037,1187761037
683dd	3653156455,3653156455
684dd	1262041458,1262041458
685dd	3729410708,3729410708
686dd	3561770136,3561770136
687dd	3898103984,3898103984
688dd	1255133061,1255133061
689dd	1808847035,1808847035
690dd	720367557,720367557
691dd	3853167183,3853167183
692dd	385612781,385612781
693dd	3309519750,3309519750
694dd	3612167578,3612167578
695dd	1429418854,1429418854
696dd	2491778321,2491778321
697dd	3477423498,3477423498
698dd	284817897,284817897
699dd	100794884,100794884
700dd	2172616702,2172616702
701dd	4031795360,4031795360
702dd	1144798328,1144798328
703dd	3131023141,3131023141
704dd	3819481163,3819481163
705dd	4082192802,4082192802
706dd	4272137053,4272137053
707dd	3225436288,3225436288
708dd	2324664069,2324664069
709dd	2912064063,2912064063
710dd	3164445985,3164445985
711dd	1211644016,1211644016
712dd	83228145,83228145
713dd	3753688163,3753688163
714dd	3249976951,3249976951
715dd	1977277103,1977277103
716dd	1663115586,1663115586
717dd	806359072,806359072
718dd	452984805,452984805
719dd	250868733,250868733
720dd	1842533055,1842533055
721dd	1288555905,1288555905
722dd	336333848,336333848
723dd	890442534,890442534
724dd	804056259,804056259
725dd	3781124030,3781124030
726dd	2727843637,2727843637
727dd	3427026056,3427026056
728dd	957814574,957814574
729dd	1472513171,1472513171
730dd	4071073621,4071073621
731dd	2189328124,2189328124
732dd	1195195770,1195195770
733dd	2892260552,2892260552
734dd	3881655738,3881655738
735dd	723065138,723065138
736dd	2507371494,2507371494
737dd	2690670784,2690670784
738dd	2558624025,2558624025
739dd	3511635870,3511635870
740dd	2145180835,2145180835
741dd	1713513028,1713513028
742dd	2116692564,2116692564
743dd	2878378043,2878378043
744dd	2206763019,2206763019
745dd	3393603212,3393603212
746dd	703524551,703524551
747dd	3552098411,3552098411
748dd	1007948840,1007948840
749dd	2044649127,2044649127
750dd	3797835452,3797835452
751dd	487262998,487262998
752dd	1994120109,1994120109
753dd	1004593371,1004593371
754dd	1446130276,1446130276
755dd	1312438900,1312438900
756dd	503974420,503974420
757dd	3679013266,3679013266
758dd	168166924,168166924
759dd	1814307912,1814307912
760dd	3831258296,3831258296
761dd	1573044895,1573044895
762dd	1859376061,1859376061
763dd	4021070915,4021070915
764dd	2791465668,2791465668
765dd	2828112185,2828112185
766dd	2761266481,2761266481
767dd	937747667,937747667
768dd	2339994098,2339994098
769dd	854058965,854058965
770dd	1137232011,1137232011
771dd	1496790894,1496790894
772dd	3077402074,3077402074
773dd	2358086913,2358086913
774dd	1691735473,1691735473
775dd	3528347292,3528347292
776dd	3769215305,3769215305
777dd	3027004632,3027004632
778dd	4199962284,4199962284
779dd	133494003,133494003
780dd	636152527,636152527
781dd	2942657994,2942657994
782dd	2390391540,2390391540
783dd	3920539207,3920539207
784dd	403179536,403179536
785dd	3585784431,3585784431
786dd	2289596656,2289596656
787dd	1864705354,1864705354
788dd	1915629148,1915629148
789dd	605822008,605822008
790dd	4054230615,4054230615
791dd	3350508659,3350508659
792dd	1371981463,1371981463
793dd	602466507,602466507
794dd	2094914977,2094914977
795dd	2624877800,2624877800
796dd	555687742,555687742
797dd	3712699286,3712699286
798dd	3703422305,3703422305
799dd	2257292045,2257292045
800dd	2240449039,2240449039
801dd	2423288032,2423288032
802dd	1111375484,1111375484
803dd	3300242801,3300242801
804dd	2858837708,2858837708
805dd	3628615824,3628615824
806dd	84083462,84083462
807dd	32962295,32962295
808dd	302911004,302911004
809dd	2741068226,2741068226
810dd	1597322602,1597322602
811dd	4183250862,4183250862
812dd	3501832553,3501832553
813dd	2441512471,2441512471
814dd	1489093017,1489093017
815dd	656219450,656219450
816dd	3114180135,3114180135
817dd	954327513,954327513
818dd	335083755,335083755
819dd	3013122091,3013122091
820dd	856756514,856756514
821dd	3144247762,3144247762
822dd	1893325225,1893325225
823dd	2307821063,2307821063
824dd	2811532339,2811532339
825dd	3063651117,3063651117
826dd	572399164,572399164
827dd	2458355477,2458355477
828dd	552200649,552200649
829dd	1238290055,1238290055
830dd	4283782570,4283782570
831dd	2015897680,2015897680
832dd	2061492133,2061492133
833dd	2408352771,2408352771
834dd	4171342169,4171342169
835dd	2156497161,2156497161
836dd	386731290,386731290
837dd	3669999461,3669999461
838dd	837215959,837215959
839dd	3326231172,3326231172
840dd	3093850320,3093850320
841dd	3275833730,3275833730
842dd	2962856233,2962856233
843dd	1999449434,1999449434
844dd	286199582,286199582
845dd	3417354363,3417354363
846dd	4233385128,4233385128
847dd	3602627437,3602627437
848dd	974525996,974525996
849db	99,124,119,123,242,107,111,197
850db	48,1,103,43,254,215,171,118
851db	202,130,201,125,250,89,71,240
852db	173,212,162,175,156,164,114,192
853db	183,253,147,38,54,63,247,204
854db	52,165,229,241,113,216,49,21
855db	4,199,35,195,24,150,5,154
856db	7,18,128,226,235,39,178,117
857db	9,131,44,26,27,110,90,160
858db	82,59,214,179,41,227,47,132
859db	83,209,0,237,32,252,177,91
860db	106,203,190,57,74,76,88,207
861db	208,239,170,251,67,77,51,133
862db	69,249,2,127,80,60,159,168
863db	81,163,64,143,146,157,56,245
864db	188,182,218,33,16,255,243,210
865db	205,12,19,236,95,151,68,23
866db	196,167,126,61,100,93,25,115
867db	96,129,79,220,34,42,144,136
868db	70,238,184,20,222,94,11,219
869db	224,50,58,10,73,6,36,92
870db	194,211,172,98,145,149,228,121
871db	231,200,55,109,141,213,78,169
872db	108,86,244,234,101,122,174,8
873db	186,120,37,46,28,166,180,198
874db	232,221,116,31,75,189,139,138
875db	112,62,181,102,72,3,246,14
876db	97,53,87,185,134,193,29,158
877db	225,248,152,17,105,217,142,148
878db	155,30,135,233,206,85,40,223
879db	140,161,137,13,191,230,66,104
880db	65,153,45,15,176,84,187,22
881db	99,124,119,123,242,107,111,197
882db	48,1,103,43,254,215,171,118
883db	202,130,201,125,250,89,71,240
884db	173,212,162,175,156,164,114,192
885db	183,253,147,38,54,63,247,204
886db	52,165,229,241,113,216,49,21
887db	4,199,35,195,24,150,5,154
888db	7,18,128,226,235,39,178,117
889db	9,131,44,26,27,110,90,160
890db	82,59,214,179,41,227,47,132
891db	83,209,0,237,32,252,177,91
892db	106,203,190,57,74,76,88,207
893db	208,239,170,251,67,77,51,133
894db	69,249,2,127,80,60,159,168
895db	81,163,64,143,146,157,56,245
896db	188,182,218,33,16,255,243,210
897db	205,12,19,236,95,151,68,23
898db	196,167,126,61,100,93,25,115
899db	96,129,79,220,34,42,144,136
900db	70,238,184,20,222,94,11,219
901db	224,50,58,10,73,6,36,92
902db	194,211,172,98,145,149,228,121
903db	231,200,55,109,141,213,78,169
904db	108,86,244,234,101,122,174,8
905db	186,120,37,46,28,166,180,198
906db	232,221,116,31,75,189,139,138
907db	112,62,181,102,72,3,246,14
908db	97,53,87,185,134,193,29,158
909db	225,248,152,17,105,217,142,148
910db	155,30,135,233,206,85,40,223
911db	140,161,137,13,191,230,66,104
912db	65,153,45,15,176,84,187,22
913db	99,124,119,123,242,107,111,197
914db	48,1,103,43,254,215,171,118
915db	202,130,201,125,250,89,71,240
916db	173,212,162,175,156,164,114,192
917db	183,253,147,38,54,63,247,204
918db	52,165,229,241,113,216,49,21
919db	4,199,35,195,24,150,5,154
920db	7,18,128,226,235,39,178,117
921db	9,131,44,26,27,110,90,160
922db	82,59,214,179,41,227,47,132
923db	83,209,0,237,32,252,177,91
924db	106,203,190,57,74,76,88,207
925db	208,239,170,251,67,77,51,133
926db	69,249,2,127,80,60,159,168
927db	81,163,64,143,146,157,56,245
928db	188,182,218,33,16,255,243,210
929db	205,12,19,236,95,151,68,23
930db	196,167,126,61,100,93,25,115
931db	96,129,79,220,34,42,144,136
932db	70,238,184,20,222,94,11,219
933db	224,50,58,10,73,6,36,92
934db	194,211,172,98,145,149,228,121
935db	231,200,55,109,141,213,78,169
936db	108,86,244,234,101,122,174,8
937db	186,120,37,46,28,166,180,198
938db	232,221,116,31,75,189,139,138
939db	112,62,181,102,72,3,246,14
940db	97,53,87,185,134,193,29,158
941db	225,248,152,17,105,217,142,148
942db	155,30,135,233,206,85,40,223
943db	140,161,137,13,191,230,66,104
944db	65,153,45,15,176,84,187,22
945db	99,124,119,123,242,107,111,197
946db	48,1,103,43,254,215,171,118
947db	202,130,201,125,250,89,71,240
948db	173,212,162,175,156,164,114,192
949db	183,253,147,38,54,63,247,204
950db	52,165,229,241,113,216,49,21
951db	4,199,35,195,24,150,5,154
952db	7,18,128,226,235,39,178,117
953db	9,131,44,26,27,110,90,160
954db	82,59,214,179,41,227,47,132
955db	83,209,0,237,32,252,177,91
956db	106,203,190,57,74,76,88,207
957db	208,239,170,251,67,77,51,133
958db	69,249,2,127,80,60,159,168
959db	81,163,64,143,146,157,56,245
960db	188,182,218,33,16,255,243,210
961db	205,12,19,236,95,151,68,23
962db	196,167,126,61,100,93,25,115
963db	96,129,79,220,34,42,144,136
964db	70,238,184,20,222,94,11,219
965db	224,50,58,10,73,6,36,92
966db	194,211,172,98,145,149,228,121
967db	231,200,55,109,141,213,78,169
968db	108,86,244,234,101,122,174,8
969db	186,120,37,46,28,166,180,198
970db	232,221,116,31,75,189,139,138
971db	112,62,181,102,72,3,246,14
972db	97,53,87,185,134,193,29,158
973db	225,248,152,17,105,217,142,148
974db	155,30,135,233,206,85,40,223
975db	140,161,137,13,191,230,66,104
976db	65,153,45,15,176,84,187,22
977dd	1,2,4,8
978dd	16,32,64,128
979dd	27,54,0,0
980dd	0,0,0,0
981global	_aes_nohw_encrypt
982align	16
983_aes_nohw_encrypt:
984L$_aes_nohw_encrypt_begin:
985	push	ebp
986	push	ebx
987	push	esi
988	push	edi
989	mov	esi,DWORD [20+esp]
990	mov	edi,DWORD [28+esp]
991	mov	eax,esp
992	sub	esp,36
993	and	esp,-64
994	lea	ebx,[edi-127]
995	sub	ebx,esp
996	neg	ebx
997	and	ebx,960
998	sub	esp,ebx
999	add	esp,4
1000	mov	DWORD [28+esp],eax
1001	call	L$004pic_point
1002L$004pic_point:
1003	pop	ebp
1004	lea	eax,[_OPENSSL_ia32cap_P]
1005	lea	ebp,[(L$AES_Te-L$004pic_point)+ebp]
1006	lea	ebx,[764+esp]
1007	sub	ebx,ebp
1008	and	ebx,768
1009	lea	ebp,[2176+ebx*1+ebp]
1010	bt	DWORD [eax],25
1011	jnc	NEAR L$005x86
1012	movq	mm0,[esi]
1013	movq	mm4,[8+esi]
1014	call	__sse_AES_encrypt_compact
1015	mov	esp,DWORD [28+esp]
1016	mov	esi,DWORD [24+esp]
1017	movq	[esi],mm0
1018	movq	[8+esi],mm4
1019	emms
1020	pop	edi
1021	pop	esi
1022	pop	ebx
1023	pop	ebp
1024	ret
1025align	16
1026L$005x86:
1027	mov	DWORD [24+esp],ebp
1028	mov	eax,DWORD [esi]
1029	mov	ebx,DWORD [4+esi]
1030	mov	ecx,DWORD [8+esi]
1031	mov	edx,DWORD [12+esi]
1032	call	__x86_AES_encrypt_compact
1033	mov	esp,DWORD [28+esp]
1034	mov	esi,DWORD [24+esp]
1035	mov	DWORD [esi],eax
1036	mov	DWORD [4+esi],ebx
1037	mov	DWORD [8+esi],ecx
1038	mov	DWORD [12+esi],edx
1039	pop	edi
1040	pop	esi
1041	pop	ebx
1042	pop	ebp
1043	ret
1044align	16
1045__x86_AES_decrypt_compact:
1046	mov	DWORD [20+esp],edi
1047	xor	eax,DWORD [edi]
1048	xor	ebx,DWORD [4+edi]
1049	xor	ecx,DWORD [8+edi]
1050	xor	edx,DWORD [12+edi]
1051	mov	esi,DWORD [240+edi]
1052	lea	esi,[esi*1+esi-2]
1053	lea	esi,[esi*8+edi]
1054	mov	DWORD [24+esp],esi
1055	mov	edi,DWORD [ebp-128]
1056	mov	esi,DWORD [ebp-96]
1057	mov	edi,DWORD [ebp-64]
1058	mov	esi,DWORD [ebp-32]
1059	mov	edi,DWORD [ebp]
1060	mov	esi,DWORD [32+ebp]
1061	mov	edi,DWORD [64+ebp]
1062	mov	esi,DWORD [96+ebp]
1063align	16
1064L$006loop:
1065	mov	esi,eax
1066	and	esi,255
1067	movzx	esi,BYTE [esi*1+ebp-128]
1068	movzx	edi,dh
1069	movzx	edi,BYTE [edi*1+ebp-128]
1070	shl	edi,8
1071	xor	esi,edi
1072	mov	edi,ecx
1073	shr	edi,16
1074	and	edi,255
1075	movzx	edi,BYTE [edi*1+ebp-128]
1076	shl	edi,16
1077	xor	esi,edi
1078	mov	edi,ebx
1079	shr	edi,24
1080	movzx	edi,BYTE [edi*1+ebp-128]
1081	shl	edi,24
1082	xor	esi,edi
1083	mov	DWORD [4+esp],esi
1084	mov	esi,ebx
1085	and	esi,255
1086	movzx	esi,BYTE [esi*1+ebp-128]
1087	movzx	edi,ah
1088	movzx	edi,BYTE [edi*1+ebp-128]
1089	shl	edi,8
1090	xor	esi,edi
1091	mov	edi,edx
1092	shr	edi,16
1093	and	edi,255
1094	movzx	edi,BYTE [edi*1+ebp-128]
1095	shl	edi,16
1096	xor	esi,edi
1097	mov	edi,ecx
1098	shr	edi,24
1099	movzx	edi,BYTE [edi*1+ebp-128]
1100	shl	edi,24
1101	xor	esi,edi
1102	mov	DWORD [8+esp],esi
1103	mov	esi,ecx
1104	and	esi,255
1105	movzx	esi,BYTE [esi*1+ebp-128]
1106	movzx	edi,bh
1107	movzx	edi,BYTE [edi*1+ebp-128]
1108	shl	edi,8
1109	xor	esi,edi
1110	mov	edi,eax
1111	shr	edi,16
1112	and	edi,255
1113	movzx	edi,BYTE [edi*1+ebp-128]
1114	shl	edi,16
1115	xor	esi,edi
1116	mov	edi,edx
1117	shr	edi,24
1118	movzx	edi,BYTE [edi*1+ebp-128]
1119	shl	edi,24
1120	xor	esi,edi
1121	and	edx,255
1122	movzx	edx,BYTE [edx*1+ebp-128]
1123	movzx	ecx,ch
1124	movzx	ecx,BYTE [ecx*1+ebp-128]
1125	shl	ecx,8
1126	xor	edx,ecx
1127	mov	ecx,esi
1128	shr	ebx,16
1129	and	ebx,255
1130	movzx	ebx,BYTE [ebx*1+ebp-128]
1131	shl	ebx,16
1132	xor	edx,ebx
1133	shr	eax,24
1134	movzx	eax,BYTE [eax*1+ebp-128]
1135	shl	eax,24
1136	xor	edx,eax
1137	mov	edi,2155905152
1138	and	edi,ecx
1139	mov	esi,edi
1140	shr	edi,7
1141	lea	eax,[ecx*1+ecx]
1142	sub	esi,edi
1143	and	eax,4278124286
1144	and	esi,454761243
1145	xor	eax,esi
1146	mov	edi,2155905152
1147	and	edi,eax
1148	mov	esi,edi
1149	shr	edi,7
1150	lea	ebx,[eax*1+eax]
1151	sub	esi,edi
1152	and	ebx,4278124286
1153	and	esi,454761243
1154	xor	eax,ecx
1155	xor	ebx,esi
1156	mov	edi,2155905152
1157	and	edi,ebx
1158	mov	esi,edi
1159	shr	edi,7
1160	lea	ebp,[ebx*1+ebx]
1161	sub	esi,edi
1162	and	ebp,4278124286
1163	and	esi,454761243
1164	xor	ebx,ecx
1165	rol	ecx,8
1166	xor	ebp,esi
1167	xor	ecx,eax
1168	xor	eax,ebp
1169	xor	ecx,ebx
1170	xor	ebx,ebp
1171	rol	eax,24
1172	xor	ecx,ebp
1173	rol	ebx,16
1174	xor	ecx,eax
1175	rol	ebp,8
1176	xor	ecx,ebx
1177	mov	eax,DWORD [4+esp]
1178	xor	ecx,ebp
1179	mov	DWORD [12+esp],ecx
1180	mov	edi,2155905152
1181	and	edi,edx
1182	mov	esi,edi
1183	shr	edi,7
1184	lea	ebx,[edx*1+edx]
1185	sub	esi,edi
1186	and	ebx,4278124286
1187	and	esi,454761243
1188	xor	ebx,esi
1189	mov	edi,2155905152
1190	and	edi,ebx
1191	mov	esi,edi
1192	shr	edi,7
1193	lea	ecx,[ebx*1+ebx]
1194	sub	esi,edi
1195	and	ecx,4278124286
1196	and	esi,454761243
1197	xor	ebx,edx
1198	xor	ecx,esi
1199	mov	edi,2155905152
1200	and	edi,ecx
1201	mov	esi,edi
1202	shr	edi,7
1203	lea	ebp,[ecx*1+ecx]
1204	sub	esi,edi
1205	and	ebp,4278124286
1206	and	esi,454761243
1207	xor	ecx,edx
1208	rol	edx,8
1209	xor	ebp,esi
1210	xor	edx,ebx
1211	xor	ebx,ebp
1212	xor	edx,ecx
1213	xor	ecx,ebp
1214	rol	ebx,24
1215	xor	edx,ebp
1216	rol	ecx,16
1217	xor	edx,ebx
1218	rol	ebp,8
1219	xor	edx,ecx
1220	mov	ebx,DWORD [8+esp]
1221	xor	edx,ebp
1222	mov	DWORD [16+esp],edx
1223	mov	edi,2155905152
1224	and	edi,eax
1225	mov	esi,edi
1226	shr	edi,7
1227	lea	ecx,[eax*1+eax]
1228	sub	esi,edi
1229	and	ecx,4278124286
1230	and	esi,454761243
1231	xor	ecx,esi
1232	mov	edi,2155905152
1233	and	edi,ecx
1234	mov	esi,edi
1235	shr	edi,7
1236	lea	edx,[ecx*1+ecx]
1237	sub	esi,edi
1238	and	edx,4278124286
1239	and	esi,454761243
1240	xor	ecx,eax
1241	xor	edx,esi
1242	mov	edi,2155905152
1243	and	edi,edx
1244	mov	esi,edi
1245	shr	edi,7
1246	lea	ebp,[edx*1+edx]
1247	sub	esi,edi
1248	and	ebp,4278124286
1249	and	esi,454761243
1250	xor	edx,eax
1251	rol	eax,8
1252	xor	ebp,esi
1253	xor	eax,ecx
1254	xor	ecx,ebp
1255	xor	eax,edx
1256	xor	edx,ebp
1257	rol	ecx,24
1258	xor	eax,ebp
1259	rol	edx,16
1260	xor	eax,ecx
1261	rol	ebp,8
1262	xor	eax,edx
1263	xor	eax,ebp
1264	mov	edi,2155905152
1265	and	edi,ebx
1266	mov	esi,edi
1267	shr	edi,7
1268	lea	ecx,[ebx*1+ebx]
1269	sub	esi,edi
1270	and	ecx,4278124286
1271	and	esi,454761243
1272	xor	ecx,esi
1273	mov	edi,2155905152
1274	and	edi,ecx
1275	mov	esi,edi
1276	shr	edi,7
1277	lea	edx,[ecx*1+ecx]
1278	sub	esi,edi
1279	and	edx,4278124286
1280	and	esi,454761243
1281	xor	ecx,ebx
1282	xor	edx,esi
1283	mov	edi,2155905152
1284	and	edi,edx
1285	mov	esi,edi
1286	shr	edi,7
1287	lea	ebp,[edx*1+edx]
1288	sub	esi,edi
1289	and	ebp,4278124286
1290	and	esi,454761243
1291	xor	edx,ebx
1292	rol	ebx,8
1293	xor	ebp,esi
1294	xor	ebx,ecx
1295	xor	ecx,ebp
1296	xor	ebx,edx
1297	xor	edx,ebp
1298	rol	ecx,24
1299	xor	ebx,ebp
1300	rol	edx,16
1301	xor	ebx,ecx
1302	rol	ebp,8
1303	xor	ebx,edx
1304	mov	ecx,DWORD [12+esp]
1305	xor	ebx,ebp
1306	mov	edx,DWORD [16+esp]
1307	mov	edi,DWORD [20+esp]
1308	mov	ebp,DWORD [28+esp]
1309	add	edi,16
1310	xor	eax,DWORD [edi]
1311	xor	ebx,DWORD [4+edi]
1312	xor	ecx,DWORD [8+edi]
1313	xor	edx,DWORD [12+edi]
1314	cmp	edi,DWORD [24+esp]
1315	mov	DWORD [20+esp],edi
1316	jb	NEAR L$006loop
1317	mov	esi,eax
1318	and	esi,255
1319	movzx	esi,BYTE [esi*1+ebp-128]
1320	movzx	edi,dh
1321	movzx	edi,BYTE [edi*1+ebp-128]
1322	shl	edi,8
1323	xor	esi,edi
1324	mov	edi,ecx
1325	shr	edi,16
1326	and	edi,255
1327	movzx	edi,BYTE [edi*1+ebp-128]
1328	shl	edi,16
1329	xor	esi,edi
1330	mov	edi,ebx
1331	shr	edi,24
1332	movzx	edi,BYTE [edi*1+ebp-128]
1333	shl	edi,24
1334	xor	esi,edi
1335	mov	DWORD [4+esp],esi
1336	mov	esi,ebx
1337	and	esi,255
1338	movzx	esi,BYTE [esi*1+ebp-128]
1339	movzx	edi,ah
1340	movzx	edi,BYTE [edi*1+ebp-128]
1341	shl	edi,8
1342	xor	esi,edi
1343	mov	edi,edx
1344	shr	edi,16
1345	and	edi,255
1346	movzx	edi,BYTE [edi*1+ebp-128]
1347	shl	edi,16
1348	xor	esi,edi
1349	mov	edi,ecx
1350	shr	edi,24
1351	movzx	edi,BYTE [edi*1+ebp-128]
1352	shl	edi,24
1353	xor	esi,edi
1354	mov	DWORD [8+esp],esi
1355	mov	esi,ecx
1356	and	esi,255
1357	movzx	esi,BYTE [esi*1+ebp-128]
1358	movzx	edi,bh
1359	movzx	edi,BYTE [edi*1+ebp-128]
1360	shl	edi,8
1361	xor	esi,edi
1362	mov	edi,eax
1363	shr	edi,16
1364	and	edi,255
1365	movzx	edi,BYTE [edi*1+ebp-128]
1366	shl	edi,16
1367	xor	esi,edi
1368	mov	edi,edx
1369	shr	edi,24
1370	movzx	edi,BYTE [edi*1+ebp-128]
1371	shl	edi,24
1372	xor	esi,edi
1373	mov	edi,DWORD [20+esp]
1374	and	edx,255
1375	movzx	edx,BYTE [edx*1+ebp-128]
1376	movzx	ecx,ch
1377	movzx	ecx,BYTE [ecx*1+ebp-128]
1378	shl	ecx,8
1379	xor	edx,ecx
1380	mov	ecx,esi
1381	shr	ebx,16
1382	and	ebx,255
1383	movzx	ebx,BYTE [ebx*1+ebp-128]
1384	shl	ebx,16
1385	xor	edx,ebx
1386	mov	ebx,DWORD [8+esp]
1387	shr	eax,24
1388	movzx	eax,BYTE [eax*1+ebp-128]
1389	shl	eax,24
1390	xor	edx,eax
1391	mov	eax,DWORD [4+esp]
1392	xor	eax,DWORD [16+edi]
1393	xor	ebx,DWORD [20+edi]
1394	xor	ecx,DWORD [24+edi]
1395	xor	edx,DWORD [28+edi]
1396	ret
1397align	16
1398__sse_AES_decrypt_compact:
1399	pxor	mm0,[edi]
1400	pxor	mm4,[8+edi]
1401	mov	esi,DWORD [240+edi]
1402	lea	esi,[esi*1+esi-2]
1403	lea	esi,[esi*8+edi]
1404	mov	DWORD [24+esp],esi
1405	mov	eax,454761243
1406	mov	DWORD [8+esp],eax
1407	mov	DWORD [12+esp],eax
1408	mov	eax,DWORD [ebp-128]
1409	mov	ebx,DWORD [ebp-96]
1410	mov	ecx,DWORD [ebp-64]
1411	mov	edx,DWORD [ebp-32]
1412	mov	eax,DWORD [ebp]
1413	mov	ebx,DWORD [32+ebp]
1414	mov	ecx,DWORD [64+ebp]
1415	mov	edx,DWORD [96+ebp]
1416align	16
1417L$007loop:
1418	pshufw	mm1,mm0,12
1419	pshufw	mm5,mm4,9
1420	movd	eax,mm1
1421	movd	ebx,mm5
1422	mov	DWORD [20+esp],edi
1423	movzx	esi,al
1424	movzx	edx,ah
1425	pshufw	mm2,mm0,6
1426	movzx	ecx,BYTE [esi*1+ebp-128]
1427	movzx	edi,bl
1428	movzx	edx,BYTE [edx*1+ebp-128]
1429	shr	eax,16
1430	shl	edx,8
1431	movzx	esi,BYTE [edi*1+ebp-128]
1432	movzx	edi,bh
1433	shl	esi,16
1434	pshufw	mm6,mm4,3
1435	or	ecx,esi
1436	movzx	esi,BYTE [edi*1+ebp-128]
1437	movzx	edi,ah
1438	shl	esi,24
1439	shr	ebx,16
1440	or	edx,esi
1441	movzx	esi,BYTE [edi*1+ebp-128]
1442	movzx	edi,bh
1443	shl	esi,24
1444	or	ecx,esi
1445	movzx	esi,BYTE [edi*1+ebp-128]
1446	movzx	edi,al
1447	shl	esi,8
1448	movd	eax,mm2
1449	or	ecx,esi
1450	movzx	esi,BYTE [edi*1+ebp-128]
1451	movzx	edi,bl
1452	shl	esi,16
1453	movd	ebx,mm6
1454	movd	mm0,ecx
1455	movzx	ecx,BYTE [edi*1+ebp-128]
1456	movzx	edi,al
1457	or	ecx,esi
1458	movzx	esi,BYTE [edi*1+ebp-128]
1459	movzx	edi,bl
1460	or	edx,esi
1461	movzx	esi,BYTE [edi*1+ebp-128]
1462	movzx	edi,ah
1463	shl	esi,16
1464	shr	eax,16
1465	or	edx,esi
1466	movzx	esi,BYTE [edi*1+ebp-128]
1467	movzx	edi,bh
1468	shr	ebx,16
1469	shl	esi,8
1470	movd	mm1,edx
1471	movzx	edx,BYTE [edi*1+ebp-128]
1472	movzx	edi,bh
1473	shl	edx,24
1474	and	ebx,255
1475	or	edx,esi
1476	punpckldq	mm0,mm1
1477	movzx	esi,BYTE [edi*1+ebp-128]
1478	movzx	edi,al
1479	shl	esi,8
1480	movzx	eax,ah
1481	movzx	ebx,BYTE [ebx*1+ebp-128]
1482	or	ecx,esi
1483	movzx	esi,BYTE [edi*1+ebp-128]
1484	or	edx,ebx
1485	shl	esi,16
1486	movzx	eax,BYTE [eax*1+ebp-128]
1487	or	edx,esi
1488	shl	eax,24
1489	or	ecx,eax
1490	mov	edi,DWORD [20+esp]
1491	movd	mm4,edx
1492	movd	mm5,ecx
1493	punpckldq	mm4,mm5
1494	add	edi,16
1495	cmp	edi,DWORD [24+esp]
1496	ja	NEAR L$008out
1497	movq	mm3,mm0
1498	movq	mm7,mm4
1499	pshufw	mm2,mm0,228
1500	pshufw	mm6,mm4,228
1501	movq	mm1,mm0
1502	movq	mm5,mm4
1503	pshufw	mm0,mm0,177
1504	pshufw	mm4,mm4,177
1505	pslld	mm2,8
1506	pslld	mm6,8
1507	psrld	mm3,8
1508	psrld	mm7,8
1509	pxor	mm0,mm2
1510	pxor	mm4,mm6
1511	pxor	mm0,mm3
1512	pxor	mm4,mm7
1513	pslld	mm2,16
1514	pslld	mm6,16
1515	psrld	mm3,16
1516	psrld	mm7,16
1517	pxor	mm0,mm2
1518	pxor	mm4,mm6
1519	pxor	mm0,mm3
1520	pxor	mm4,mm7
1521	movq	mm3,[8+esp]
1522	pxor	mm2,mm2
1523	pxor	mm6,mm6
1524	pcmpgtb	mm2,mm1
1525	pcmpgtb	mm6,mm5
1526	pand	mm2,mm3
1527	pand	mm6,mm3
1528	paddb	mm1,mm1
1529	paddb	mm5,mm5
1530	pxor	mm1,mm2
1531	pxor	mm5,mm6
1532	movq	mm3,mm1
1533	movq	mm7,mm5
1534	movq	mm2,mm1
1535	movq	mm6,mm5
1536	pxor	mm0,mm1
1537	pxor	mm4,mm5
1538	pslld	mm3,24
1539	pslld	mm7,24
1540	psrld	mm2,8
1541	psrld	mm6,8
1542	pxor	mm0,mm3
1543	pxor	mm4,mm7
1544	pxor	mm0,mm2
1545	pxor	mm4,mm6
1546	movq	mm2,[8+esp]
1547	pxor	mm3,mm3
1548	pxor	mm7,mm7
1549	pcmpgtb	mm3,mm1
1550	pcmpgtb	mm7,mm5
1551	pand	mm3,mm2
1552	pand	mm7,mm2
1553	paddb	mm1,mm1
1554	paddb	mm5,mm5
1555	pxor	mm1,mm3
1556	pxor	mm5,mm7
1557	pshufw	mm3,mm1,177
1558	pshufw	mm7,mm5,177
1559	pxor	mm0,mm1
1560	pxor	mm4,mm5
1561	pxor	mm0,mm3
1562	pxor	mm4,mm7
1563	pxor	mm3,mm3
1564	pxor	mm7,mm7
1565	pcmpgtb	mm3,mm1
1566	pcmpgtb	mm7,mm5
1567	pand	mm3,mm2
1568	pand	mm7,mm2
1569	paddb	mm1,mm1
1570	paddb	mm5,mm5
1571	pxor	mm1,mm3
1572	pxor	mm5,mm7
1573	pxor	mm0,mm1
1574	pxor	mm4,mm5
1575	movq	mm3,mm1
1576	movq	mm7,mm5
1577	pshufw	mm2,mm1,177
1578	pshufw	mm6,mm5,177
1579	pxor	mm0,mm2
1580	pxor	mm4,mm6
1581	pslld	mm1,8
1582	pslld	mm5,8
1583	psrld	mm3,8
1584	psrld	mm7,8
1585	movq	mm2,[edi]
1586	movq	mm6,[8+edi]
1587	pxor	mm0,mm1
1588	pxor	mm4,mm5
1589	pxor	mm0,mm3
1590	pxor	mm4,mm7
1591	mov	eax,DWORD [ebp-128]
1592	pslld	mm1,16
1593	pslld	mm5,16
1594	mov	ebx,DWORD [ebp-64]
1595	psrld	mm3,16
1596	psrld	mm7,16
1597	mov	ecx,DWORD [ebp]
1598	pxor	mm0,mm1
1599	pxor	mm4,mm5
1600	mov	edx,DWORD [64+ebp]
1601	pxor	mm0,mm3
1602	pxor	mm4,mm7
1603	pxor	mm0,mm2
1604	pxor	mm4,mm6
1605	jmp	NEAR L$007loop
1606align	16
1607L$008out:
1608	pxor	mm0,[edi]
1609	pxor	mm4,[8+edi]
1610	ret
1611align	16
1612__x86_AES_decrypt:
1613	mov	DWORD [20+esp],edi
1614	xor	eax,DWORD [edi]
1615	xor	ebx,DWORD [4+edi]
1616	xor	ecx,DWORD [8+edi]
1617	xor	edx,DWORD [12+edi]
1618	mov	esi,DWORD [240+edi]
1619	lea	esi,[esi*1+esi-2]
1620	lea	esi,[esi*8+edi]
1621	mov	DWORD [24+esp],esi
1622align	16
1623L$009loop:
1624	mov	esi,eax
1625	and	esi,255
1626	mov	esi,DWORD [esi*8+ebp]
1627	movzx	edi,dh
1628	xor	esi,DWORD [3+edi*8+ebp]
1629	mov	edi,ecx
1630	shr	edi,16
1631	and	edi,255
1632	xor	esi,DWORD [2+edi*8+ebp]
1633	mov	edi,ebx
1634	shr	edi,24
1635	xor	esi,DWORD [1+edi*8+ebp]
1636	mov	DWORD [4+esp],esi
1637	mov	esi,ebx
1638	and	esi,255
1639	mov	esi,DWORD [esi*8+ebp]
1640	movzx	edi,ah
1641	xor	esi,DWORD [3+edi*8+ebp]
1642	mov	edi,edx
1643	shr	edi,16
1644	and	edi,255
1645	xor	esi,DWORD [2+edi*8+ebp]
1646	mov	edi,ecx
1647	shr	edi,24
1648	xor	esi,DWORD [1+edi*8+ebp]
1649	mov	DWORD [8+esp],esi
1650	mov	esi,ecx
1651	and	esi,255
1652	mov	esi,DWORD [esi*8+ebp]
1653	movzx	edi,bh
1654	xor	esi,DWORD [3+edi*8+ebp]
1655	mov	edi,eax
1656	shr	edi,16
1657	and	edi,255
1658	xor	esi,DWORD [2+edi*8+ebp]
1659	mov	edi,edx
1660	shr	edi,24
1661	xor	esi,DWORD [1+edi*8+ebp]
1662	mov	edi,DWORD [20+esp]
1663	and	edx,255
1664	mov	edx,DWORD [edx*8+ebp]
1665	movzx	ecx,ch
1666	xor	edx,DWORD [3+ecx*8+ebp]
1667	mov	ecx,esi
1668	shr	ebx,16
1669	and	ebx,255
1670	xor	edx,DWORD [2+ebx*8+ebp]
1671	mov	ebx,DWORD [8+esp]
1672	shr	eax,24
1673	xor	edx,DWORD [1+eax*8+ebp]
1674	mov	eax,DWORD [4+esp]
1675	add	edi,16
1676	xor	eax,DWORD [edi]
1677	xor	ebx,DWORD [4+edi]
1678	xor	ecx,DWORD [8+edi]
1679	xor	edx,DWORD [12+edi]
1680	cmp	edi,DWORD [24+esp]
1681	mov	DWORD [20+esp],edi
1682	jb	NEAR L$009loop
1683	lea	ebp,[2176+ebp]
1684	mov	edi,DWORD [ebp-128]
1685	mov	esi,DWORD [ebp-96]
1686	mov	edi,DWORD [ebp-64]
1687	mov	esi,DWORD [ebp-32]
1688	mov	edi,DWORD [ebp]
1689	mov	esi,DWORD [32+ebp]
1690	mov	edi,DWORD [64+ebp]
1691	mov	esi,DWORD [96+ebp]
1692	lea	ebp,[ebp-128]
1693	mov	esi,eax
1694	and	esi,255
1695	movzx	esi,BYTE [esi*1+ebp]
1696	movzx	edi,dh
1697	movzx	edi,BYTE [edi*1+ebp]
1698	shl	edi,8
1699	xor	esi,edi
1700	mov	edi,ecx
1701	shr	edi,16
1702	and	edi,255
1703	movzx	edi,BYTE [edi*1+ebp]
1704	shl	edi,16
1705	xor	esi,edi
1706	mov	edi,ebx
1707	shr	edi,24
1708	movzx	edi,BYTE [edi*1+ebp]
1709	shl	edi,24
1710	xor	esi,edi
1711	mov	DWORD [4+esp],esi
1712	mov	esi,ebx
1713	and	esi,255
1714	movzx	esi,BYTE [esi*1+ebp]
1715	movzx	edi,ah
1716	movzx	edi,BYTE [edi*1+ebp]
1717	shl	edi,8
1718	xor	esi,edi
1719	mov	edi,edx
1720	shr	edi,16
1721	and	edi,255
1722	movzx	edi,BYTE [edi*1+ebp]
1723	shl	edi,16
1724	xor	esi,edi
1725	mov	edi,ecx
1726	shr	edi,24
1727	movzx	edi,BYTE [edi*1+ebp]
1728	shl	edi,24
1729	xor	esi,edi
1730	mov	DWORD [8+esp],esi
1731	mov	esi,ecx
1732	and	esi,255
1733	movzx	esi,BYTE [esi*1+ebp]
1734	movzx	edi,bh
1735	movzx	edi,BYTE [edi*1+ebp]
1736	shl	edi,8
1737	xor	esi,edi
1738	mov	edi,eax
1739	shr	edi,16
1740	and	edi,255
1741	movzx	edi,BYTE [edi*1+ebp]
1742	shl	edi,16
1743	xor	esi,edi
1744	mov	edi,edx
1745	shr	edi,24
1746	movzx	edi,BYTE [edi*1+ebp]
1747	shl	edi,24
1748	xor	esi,edi
1749	mov	edi,DWORD [20+esp]
1750	and	edx,255
1751	movzx	edx,BYTE [edx*1+ebp]
1752	movzx	ecx,ch
1753	movzx	ecx,BYTE [ecx*1+ebp]
1754	shl	ecx,8
1755	xor	edx,ecx
1756	mov	ecx,esi
1757	shr	ebx,16
1758	and	ebx,255
1759	movzx	ebx,BYTE [ebx*1+ebp]
1760	shl	ebx,16
1761	xor	edx,ebx
1762	mov	ebx,DWORD [8+esp]
1763	shr	eax,24
1764	movzx	eax,BYTE [eax*1+ebp]
1765	shl	eax,24
1766	xor	edx,eax
1767	mov	eax,DWORD [4+esp]
1768	lea	ebp,[ebp-2048]
1769	add	edi,16
1770	xor	eax,DWORD [edi]
1771	xor	ebx,DWORD [4+edi]
1772	xor	ecx,DWORD [8+edi]
1773	xor	edx,DWORD [12+edi]
1774	ret
1775align	64
1776L$AES_Td:
1777dd	1353184337,1353184337
1778dd	1399144830,1399144830
1779dd	3282310938,3282310938
1780dd	2522752826,2522752826
1781dd	3412831035,3412831035
1782dd	4047871263,4047871263
1783dd	2874735276,2874735276
1784dd	2466505547,2466505547
1785dd	1442459680,1442459680
1786dd	4134368941,4134368941
1787dd	2440481928,2440481928
1788dd	625738485,625738485
1789dd	4242007375,4242007375
1790dd	3620416197,3620416197
1791dd	2151953702,2151953702
1792dd	2409849525,2409849525
1793dd	1230680542,1230680542
1794dd	1729870373,1729870373
1795dd	2551114309,2551114309
1796dd	3787521629,3787521629
1797dd	41234371,41234371
1798dd	317738113,317738113
1799dd	2744600205,2744600205
1800dd	3338261355,3338261355
1801dd	3881799427,3881799427
1802dd	2510066197,2510066197
1803dd	3950669247,3950669247
1804dd	3663286933,3663286933
1805dd	763608788,763608788
1806dd	3542185048,3542185048
1807dd	694804553,694804553
1808dd	1154009486,1154009486
1809dd	1787413109,1787413109
1810dd	2021232372,2021232372
1811dd	1799248025,1799248025
1812dd	3715217703,3715217703
1813dd	3058688446,3058688446
1814dd	397248752,397248752
1815dd	1722556617,1722556617
1816dd	3023752829,3023752829
1817dd	407560035,407560035
1818dd	2184256229,2184256229
1819dd	1613975959,1613975959
1820dd	1165972322,1165972322
1821dd	3765920945,3765920945
1822dd	2226023355,2226023355
1823dd	480281086,480281086
1824dd	2485848313,2485848313
1825dd	1483229296,1483229296
1826dd	436028815,436028815
1827dd	2272059028,2272059028
1828dd	3086515026,3086515026
1829dd	601060267,601060267
1830dd	3791801202,3791801202
1831dd	1468997603,1468997603
1832dd	715871590,715871590
1833dd	120122290,120122290
1834dd	63092015,63092015
1835dd	2591802758,2591802758
1836dd	2768779219,2768779219
1837dd	4068943920,4068943920
1838dd	2997206819,2997206819
1839dd	3127509762,3127509762
1840dd	1552029421,1552029421
1841dd	723308426,723308426
1842dd	2461301159,2461301159
1843dd	4042393587,4042393587
1844dd	2715969870,2715969870
1845dd	3455375973,3455375973
1846dd	3586000134,3586000134
1847dd	526529745,526529745
1848dd	2331944644,2331944644
1849dd	2639474228,2639474228
1850dd	2689987490,2689987490
1851dd	853641733,853641733
1852dd	1978398372,1978398372
1853dd	971801355,971801355
1854dd	2867814464,2867814464
1855dd	111112542,111112542
1856dd	1360031421,1360031421
1857dd	4186579262,4186579262
1858dd	1023860118,1023860118
1859dd	2919579357,2919579357
1860dd	1186850381,1186850381
1861dd	3045938321,3045938321
1862dd	90031217,90031217
1863dd	1876166148,1876166148
1864dd	4279586912,4279586912
1865dd	620468249,620468249
1866dd	2548678102,2548678102
1867dd	3426959497,3426959497
1868dd	2006899047,2006899047
1869dd	3175278768,3175278768
1870dd	2290845959,2290845959
1871dd	945494503,945494503
1872dd	3689859193,3689859193
1873dd	1191869601,1191869601
1874dd	3910091388,3910091388
1875dd	3374220536,3374220536
1876dd	0,0
1877dd	2206629897,2206629897
1878dd	1223502642,1223502642
1879dd	2893025566,2893025566
1880dd	1316117100,1316117100
1881dd	4227796733,4227796733
1882dd	1446544655,1446544655
1883dd	517320253,517320253
1884dd	658058550,658058550
1885dd	1691946762,1691946762
1886dd	564550760,564550760
1887dd	3511966619,3511966619
1888dd	976107044,976107044
1889dd	2976320012,2976320012
1890dd	266819475,266819475
1891dd	3533106868,3533106868
1892dd	2660342555,2660342555
1893dd	1338359936,1338359936
1894dd	2720062561,2720062561
1895dd	1766553434,1766553434
1896dd	370807324,370807324
1897dd	179999714,179999714
1898dd	3844776128,3844776128
1899dd	1138762300,1138762300
1900dd	488053522,488053522
1901dd	185403662,185403662
1902dd	2915535858,2915535858
1903dd	3114841645,3114841645
1904dd	3366526484,3366526484
1905dd	2233069911,2233069911
1906dd	1275557295,1275557295
1907dd	3151862254,3151862254
1908dd	4250959779,4250959779
1909dd	2670068215,2670068215
1910dd	3170202204,3170202204
1911dd	3309004356,3309004356
1912dd	880737115,880737115
1913dd	1982415755,1982415755
1914dd	3703972811,3703972811
1915dd	1761406390,1761406390
1916dd	1676797112,1676797112
1917dd	3403428311,3403428311
1918dd	277177154,277177154
1919dd	1076008723,1076008723
1920dd	538035844,538035844
1921dd	2099530373,2099530373
1922dd	4164795346,4164795346
1923dd	288553390,288553390
1924dd	1839278535,1839278535
1925dd	1261411869,1261411869
1926dd	4080055004,4080055004
1927dd	3964831245,3964831245
1928dd	3504587127,3504587127
1929dd	1813426987,1813426987
1930dd	2579067049,2579067049
1931dd	4199060497,4199060497
1932dd	577038663,577038663
1933dd	3297574056,3297574056
1934dd	440397984,440397984
1935dd	3626794326,3626794326
1936dd	4019204898,4019204898
1937dd	3343796615,3343796615
1938dd	3251714265,3251714265
1939dd	4272081548,4272081548
1940dd	906744984,906744984
1941dd	3481400742,3481400742
1942dd	685669029,685669029
1943dd	646887386,646887386
1944dd	2764025151,2764025151
1945dd	3835509292,3835509292
1946dd	227702864,227702864
1947dd	2613862250,2613862250
1948dd	1648787028,1648787028
1949dd	3256061430,3256061430
1950dd	3904428176,3904428176
1951dd	1593260334,1593260334
1952dd	4121936770,4121936770
1953dd	3196083615,3196083615
1954dd	2090061929,2090061929
1955dd	2838353263,2838353263
1956dd	3004310991,3004310991
1957dd	999926984,999926984
1958dd	2809993232,2809993232
1959dd	1852021992,1852021992
1960dd	2075868123,2075868123
1961dd	158869197,158869197
1962dd	4095236462,4095236462
1963dd	28809964,28809964
1964dd	2828685187,2828685187
1965dd	1701746150,1701746150
1966dd	2129067946,2129067946
1967dd	147831841,147831841
1968dd	3873969647,3873969647
1969dd	3650873274,3650873274
1970dd	3459673930,3459673930
1971dd	3557400554,3557400554
1972dd	3598495785,3598495785
1973dd	2947720241,2947720241
1974dd	824393514,824393514
1975dd	815048134,815048134
1976dd	3227951669,3227951669
1977dd	935087732,935087732
1978dd	2798289660,2798289660
1979dd	2966458592,2966458592
1980dd	366520115,366520115
1981dd	1251476721,1251476721
1982dd	4158319681,4158319681
1983dd	240176511,240176511
1984dd	804688151,804688151
1985dd	2379631990,2379631990
1986dd	1303441219,1303441219
1987dd	1414376140,1414376140
1988dd	3741619940,3741619940
1989dd	3820343710,3820343710
1990dd	461924940,461924940
1991dd	3089050817,3089050817
1992dd	2136040774,2136040774
1993dd	82468509,82468509
1994dd	1563790337,1563790337
1995dd	1937016826,1937016826
1996dd	776014843,776014843
1997dd	1511876531,1511876531
1998dd	1389550482,1389550482
1999dd	861278441,861278441
2000dd	323475053,323475053
2001dd	2355222426,2355222426
2002dd	2047648055,2047648055
2003dd	2383738969,2383738969
2004dd	2302415851,2302415851
2005dd	3995576782,3995576782
2006dd	902390199,902390199
2007dd	3991215329,3991215329
2008dd	1018251130,1018251130
2009dd	1507840668,1507840668
2010dd	1064563285,1064563285
2011dd	2043548696,2043548696
2012dd	3208103795,3208103795
2013dd	3939366739,3939366739
2014dd	1537932639,1537932639
2015dd	342834655,342834655
2016dd	2262516856,2262516856
2017dd	2180231114,2180231114
2018dd	1053059257,1053059257
2019dd	741614648,741614648
2020dd	1598071746,1598071746
2021dd	1925389590,1925389590
2022dd	203809468,203809468
2023dd	2336832552,2336832552
2024dd	1100287487,1100287487
2025dd	1895934009,1895934009
2026dd	3736275976,3736275976
2027dd	2632234200,2632234200
2028dd	2428589668,2428589668
2029dd	1636092795,1636092795
2030dd	1890988757,1890988757
2031dd	1952214088,1952214088
2032dd	1113045200,1113045200
2033db	82,9,106,213,48,54,165,56
2034db	191,64,163,158,129,243,215,251
2035db	124,227,57,130,155,47,255,135
2036db	52,142,67,68,196,222,233,203
2037db	84,123,148,50,166,194,35,61
2038db	238,76,149,11,66,250,195,78
2039db	8,46,161,102,40,217,36,178
2040db	118,91,162,73,109,139,209,37
2041db	114,248,246,100,134,104,152,22
2042db	212,164,92,204,93,101,182,146
2043db	108,112,72,80,253,237,185,218
2044db	94,21,70,87,167,141,157,132
2045db	144,216,171,0,140,188,211,10
2046db	247,228,88,5,184,179,69,6
2047db	208,44,30,143,202,63,15,2
2048db	193,175,189,3,1,19,138,107
2049db	58,145,17,65,79,103,220,234
2050db	151,242,207,206,240,180,230,115
2051db	150,172,116,34,231,173,53,133
2052db	226,249,55,232,28,117,223,110
2053db	71,241,26,113,29,41,197,137
2054db	111,183,98,14,170,24,190,27
2055db	252,86,62,75,198,210,121,32
2056db	154,219,192,254,120,205,90,244
2057db	31,221,168,51,136,7,199,49
2058db	177,18,16,89,39,128,236,95
2059db	96,81,127,169,25,181,74,13
2060db	45,229,122,159,147,201,156,239
2061db	160,224,59,77,174,42,245,176
2062db	200,235,187,60,131,83,153,97
2063db	23,43,4,126,186,119,214,38
2064db	225,105,20,99,85,33,12,125
2065db	82,9,106,213,48,54,165,56
2066db	191,64,163,158,129,243,215,251
2067db	124,227,57,130,155,47,255,135
2068db	52,142,67,68,196,222,233,203
2069db	84,123,148,50,166,194,35,61
2070db	238,76,149,11,66,250,195,78
2071db	8,46,161,102,40,217,36,178
2072db	118,91,162,73,109,139,209,37
2073db	114,248,246,100,134,104,152,22
2074db	212,164,92,204,93,101,182,146
2075db	108,112,72,80,253,237,185,218
2076db	94,21,70,87,167,141,157,132
2077db	144,216,171,0,140,188,211,10
2078db	247,228,88,5,184,179,69,6
2079db	208,44,30,143,202,63,15,2
2080db	193,175,189,3,1,19,138,107
2081db	58,145,17,65,79,103,220,234
2082db	151,242,207,206,240,180,230,115
2083db	150,172,116,34,231,173,53,133
2084db	226,249,55,232,28,117,223,110
2085db	71,241,26,113,29,41,197,137
2086db	111,183,98,14,170,24,190,27
2087db	252,86,62,75,198,210,121,32
2088db	154,219,192,254,120,205,90,244
2089db	31,221,168,51,136,7,199,49
2090db	177,18,16,89,39,128,236,95
2091db	96,81,127,169,25,181,74,13
2092db	45,229,122,159,147,201,156,239
2093db	160,224,59,77,174,42,245,176
2094db	200,235,187,60,131,83,153,97
2095db	23,43,4,126,186,119,214,38
2096db	225,105,20,99,85,33,12,125
2097db	82,9,106,213,48,54,165,56
2098db	191,64,163,158,129,243,215,251
2099db	124,227,57,130,155,47,255,135
2100db	52,142,67,68,196,222,233,203
2101db	84,123,148,50,166,194,35,61
2102db	238,76,149,11,66,250,195,78
2103db	8,46,161,102,40,217,36,178
2104db	118,91,162,73,109,139,209,37
2105db	114,248,246,100,134,104,152,22
2106db	212,164,92,204,93,101,182,146
2107db	108,112,72,80,253,237,185,218
2108db	94,21,70,87,167,141,157,132
2109db	144,216,171,0,140,188,211,10
2110db	247,228,88,5,184,179,69,6
2111db	208,44,30,143,202,63,15,2
2112db	193,175,189,3,1,19,138,107
2113db	58,145,17,65,79,103,220,234
2114db	151,242,207,206,240,180,230,115
2115db	150,172,116,34,231,173,53,133
2116db	226,249,55,232,28,117,223,110
2117db	71,241,26,113,29,41,197,137
2118db	111,183,98,14,170,24,190,27
2119db	252,86,62,75,198,210,121,32
2120db	154,219,192,254,120,205,90,244
2121db	31,221,168,51,136,7,199,49
2122db	177,18,16,89,39,128,236,95
2123db	96,81,127,169,25,181,74,13
2124db	45,229,122,159,147,201,156,239
2125db	160,224,59,77,174,42,245,176
2126db	200,235,187,60,131,83,153,97
2127db	23,43,4,126,186,119,214,38
2128db	225,105,20,99,85,33,12,125
2129db	82,9,106,213,48,54,165,56
2130db	191,64,163,158,129,243,215,251
2131db	124,227,57,130,155,47,255,135
2132db	52,142,67,68,196,222,233,203
2133db	84,123,148,50,166,194,35,61
2134db	238,76,149,11,66,250,195,78
2135db	8,46,161,102,40,217,36,178
2136db	118,91,162,73,109,139,209,37
2137db	114,248,246,100,134,104,152,22
2138db	212,164,92,204,93,101,182,146
2139db	108,112,72,80,253,237,185,218
2140db	94,21,70,87,167,141,157,132
2141db	144,216,171,0,140,188,211,10
2142db	247,228,88,5,184,179,69,6
2143db	208,44,30,143,202,63,15,2
2144db	193,175,189,3,1,19,138,107
2145db	58,145,17,65,79,103,220,234
2146db	151,242,207,206,240,180,230,115
2147db	150,172,116,34,231,173,53,133
2148db	226,249,55,232,28,117,223,110
2149db	71,241,26,113,29,41,197,137
2150db	111,183,98,14,170,24,190,27
2151db	252,86,62,75,198,210,121,32
2152db	154,219,192,254,120,205,90,244
2153db	31,221,168,51,136,7,199,49
2154db	177,18,16,89,39,128,236,95
2155db	96,81,127,169,25,181,74,13
2156db	45,229,122,159,147,201,156,239
2157db	160,224,59,77,174,42,245,176
2158db	200,235,187,60,131,83,153,97
2159db	23,43,4,126,186,119,214,38
2160db	225,105,20,99,85,33,12,125
2161global	_aes_nohw_decrypt
2162align	16
2163_aes_nohw_decrypt:
2164L$_aes_nohw_decrypt_begin:
2165	push	ebp
2166	push	ebx
2167	push	esi
2168	push	edi
2169	mov	esi,DWORD [20+esp]
2170	mov	edi,DWORD [28+esp]
2171	mov	eax,esp
2172	sub	esp,36
2173	and	esp,-64
2174	lea	ebx,[edi-127]
2175	sub	ebx,esp
2176	neg	ebx
2177	and	ebx,960
2178	sub	esp,ebx
2179	add	esp,4
2180	mov	DWORD [28+esp],eax
2181	call	L$010pic_point
2182L$010pic_point:
2183	pop	ebp
2184	lea	eax,[_OPENSSL_ia32cap_P]
2185	lea	ebp,[(L$AES_Td-L$010pic_point)+ebp]
2186	lea	ebx,[764+esp]
2187	sub	ebx,ebp
2188	and	ebx,768
2189	lea	ebp,[2176+ebx*1+ebp]
2190	bt	DWORD [eax],25
2191	jnc	NEAR L$011x86
2192	movq	mm0,[esi]
2193	movq	mm4,[8+esi]
2194	call	__sse_AES_decrypt_compact
2195	mov	esp,DWORD [28+esp]
2196	mov	esi,DWORD [24+esp]
2197	movq	[esi],mm0
2198	movq	[8+esi],mm4
2199	emms
2200	pop	edi
2201	pop	esi
2202	pop	ebx
2203	pop	ebp
2204	ret
2205align	16
2206L$011x86:
2207	mov	DWORD [24+esp],ebp
2208	mov	eax,DWORD [esi]
2209	mov	ebx,DWORD [4+esi]
2210	mov	ecx,DWORD [8+esi]
2211	mov	edx,DWORD [12+esi]
2212	call	__x86_AES_decrypt_compact
2213	mov	esp,DWORD [28+esp]
2214	mov	esi,DWORD [24+esp]
2215	mov	DWORD [esi],eax
2216	mov	DWORD [4+esi],ebx
2217	mov	DWORD [8+esi],ecx
2218	mov	DWORD [12+esi],edx
2219	pop	edi
2220	pop	esi
2221	pop	ebx
2222	pop	ebp
2223	ret
2224global	_aes_nohw_cbc_encrypt
2225align	16
2226_aes_nohw_cbc_encrypt:
2227L$_aes_nohw_cbc_encrypt_begin:
2228	push	ebp
2229	push	ebx
2230	push	esi
2231	push	edi
2232	mov	ecx,DWORD [28+esp]
2233	cmp	ecx,0
2234	je	NEAR L$012drop_out
2235	call	L$013pic_point
2236L$013pic_point:
2237	pop	ebp
2238	lea	eax,[_OPENSSL_ia32cap_P]
2239	cmp	DWORD [40+esp],0
2240	lea	ebp,[(L$AES_Te-L$013pic_point)+ebp]
2241	jne	NEAR L$014picked_te
2242	lea	ebp,[(L$AES_Td-L$AES_Te)+ebp]
2243L$014picked_te:
2244	pushfd
2245	cld
2246	cmp	ecx,512
2247	jb	NEAR L$015slow_way
2248	test	ecx,15
2249	jnz	NEAR L$015slow_way
2250	bt	DWORD [eax],28
2251	jc	NEAR L$015slow_way
2252	lea	esi,[esp-324]
2253	and	esi,-64
2254	mov	eax,ebp
2255	lea	ebx,[2304+ebp]
2256	mov	edx,esi
2257	and	eax,4095
2258	and	ebx,4095
2259	and	edx,4095
2260	cmp	edx,ebx
2261	jb	NEAR L$016tbl_break_out
2262	sub	edx,ebx
2263	sub	esi,edx
2264	jmp	NEAR L$017tbl_ok
2265align	4
2266L$016tbl_break_out:
2267	sub	edx,eax
2268	and	edx,4095
2269	add	edx,384
2270	sub	esi,edx
2271align	4
2272L$017tbl_ok:
2273	lea	edx,[24+esp]
2274	xchg	esp,esi
2275	add	esp,4
2276	mov	DWORD [24+esp],ebp
2277	mov	DWORD [28+esp],esi
2278	mov	eax,DWORD [edx]
2279	mov	ebx,DWORD [4+edx]
2280	mov	edi,DWORD [12+edx]
2281	mov	esi,DWORD [16+edx]
2282	mov	edx,DWORD [20+edx]
2283	mov	DWORD [32+esp],eax
2284	mov	DWORD [36+esp],ebx
2285	mov	DWORD [40+esp],ecx
2286	mov	DWORD [44+esp],edi
2287	mov	DWORD [48+esp],esi
2288	mov	DWORD [316+esp],0
2289	mov	ebx,edi
2290	mov	ecx,61
2291	sub	ebx,ebp
2292	mov	esi,edi
2293	and	ebx,4095
2294	lea	edi,[76+esp]
2295	cmp	ebx,2304
2296	jb	NEAR L$018do_copy
2297	cmp	ebx,3852
2298	jb	NEAR L$019skip_copy
2299align	4
2300L$018do_copy:
2301	mov	DWORD [44+esp],edi
2302dd	2784229001
2303L$019skip_copy:
2304	mov	edi,16
2305align	4
2306L$020prefetch_tbl:
2307	mov	eax,DWORD [ebp]
2308	mov	ebx,DWORD [32+ebp]
2309	mov	ecx,DWORD [64+ebp]
2310	mov	esi,DWORD [96+ebp]
2311	lea	ebp,[128+ebp]
2312	sub	edi,1
2313	jnz	NEAR L$020prefetch_tbl
2314	sub	ebp,2048
2315	mov	esi,DWORD [32+esp]
2316	mov	edi,DWORD [48+esp]
2317	cmp	edx,0
2318	je	NEAR L$021fast_decrypt
2319	mov	eax,DWORD [edi]
2320	mov	ebx,DWORD [4+edi]
2321align	16
2322L$022fast_enc_loop:
2323	mov	ecx,DWORD [8+edi]
2324	mov	edx,DWORD [12+edi]
2325	xor	eax,DWORD [esi]
2326	xor	ebx,DWORD [4+esi]
2327	xor	ecx,DWORD [8+esi]
2328	xor	edx,DWORD [12+esi]
2329	mov	edi,DWORD [44+esp]
2330	call	__x86_AES_encrypt
2331	mov	esi,DWORD [32+esp]
2332	mov	edi,DWORD [36+esp]
2333	mov	DWORD [edi],eax
2334	mov	DWORD [4+edi],ebx
2335	mov	DWORD [8+edi],ecx
2336	mov	DWORD [12+edi],edx
2337	lea	esi,[16+esi]
2338	mov	ecx,DWORD [40+esp]
2339	mov	DWORD [32+esp],esi
2340	lea	edx,[16+edi]
2341	mov	DWORD [36+esp],edx
2342	sub	ecx,16
2343	mov	DWORD [40+esp],ecx
2344	jnz	NEAR L$022fast_enc_loop
2345	mov	esi,DWORD [48+esp]
2346	mov	ecx,DWORD [8+edi]
2347	mov	edx,DWORD [12+edi]
2348	mov	DWORD [esi],eax
2349	mov	DWORD [4+esi],ebx
2350	mov	DWORD [8+esi],ecx
2351	mov	DWORD [12+esi],edx
2352	cmp	DWORD [316+esp],0
2353	mov	edi,DWORD [44+esp]
2354	je	NEAR L$023skip_ezero
2355	mov	ecx,60
2356	xor	eax,eax
2357align	4
2358dd	2884892297
2359L$023skip_ezero:
2360	mov	esp,DWORD [28+esp]
2361	popfd
2362L$012drop_out:
2363	pop	edi
2364	pop	esi
2365	pop	ebx
2366	pop	ebp
2367	ret
2368	pushfd
2369align	16
2370L$021fast_decrypt:
2371	cmp	esi,DWORD [36+esp]
2372	je	NEAR L$024fast_dec_in_place
2373	mov	DWORD [52+esp],edi
2374align	4
2375align	16
2376L$025fast_dec_loop:
2377	mov	eax,DWORD [esi]
2378	mov	ebx,DWORD [4+esi]
2379	mov	ecx,DWORD [8+esi]
2380	mov	edx,DWORD [12+esi]
2381	mov	edi,DWORD [44+esp]
2382	call	__x86_AES_decrypt
2383	mov	edi,DWORD [52+esp]
2384	mov	esi,DWORD [40+esp]
2385	xor	eax,DWORD [edi]
2386	xor	ebx,DWORD [4+edi]
2387	xor	ecx,DWORD [8+edi]
2388	xor	edx,DWORD [12+edi]
2389	mov	edi,DWORD [36+esp]
2390	mov	esi,DWORD [32+esp]
2391	mov	DWORD [edi],eax
2392	mov	DWORD [4+edi],ebx
2393	mov	DWORD [8+edi],ecx
2394	mov	DWORD [12+edi],edx
2395	mov	ecx,DWORD [40+esp]
2396	mov	DWORD [52+esp],esi
2397	lea	esi,[16+esi]
2398	mov	DWORD [32+esp],esi
2399	lea	edi,[16+edi]
2400	mov	DWORD [36+esp],edi
2401	sub	ecx,16
2402	mov	DWORD [40+esp],ecx
2403	jnz	NEAR L$025fast_dec_loop
2404	mov	edi,DWORD [52+esp]
2405	mov	esi,DWORD [48+esp]
2406	mov	eax,DWORD [edi]
2407	mov	ebx,DWORD [4+edi]
2408	mov	ecx,DWORD [8+edi]
2409	mov	edx,DWORD [12+edi]
2410	mov	DWORD [esi],eax
2411	mov	DWORD [4+esi],ebx
2412	mov	DWORD [8+esi],ecx
2413	mov	DWORD [12+esi],edx
2414	jmp	NEAR L$026fast_dec_out
2415align	16
2416L$024fast_dec_in_place:
2417L$027fast_dec_in_place_loop:
2418	mov	eax,DWORD [esi]
2419	mov	ebx,DWORD [4+esi]
2420	mov	ecx,DWORD [8+esi]
2421	mov	edx,DWORD [12+esi]
2422	lea	edi,[60+esp]
2423	mov	DWORD [edi],eax
2424	mov	DWORD [4+edi],ebx
2425	mov	DWORD [8+edi],ecx
2426	mov	DWORD [12+edi],edx
2427	mov	edi,DWORD [44+esp]
2428	call	__x86_AES_decrypt
2429	mov	edi,DWORD [48+esp]
2430	mov	esi,DWORD [36+esp]
2431	xor	eax,DWORD [edi]
2432	xor	ebx,DWORD [4+edi]
2433	xor	ecx,DWORD [8+edi]
2434	xor	edx,DWORD [12+edi]
2435	mov	DWORD [esi],eax
2436	mov	DWORD [4+esi],ebx
2437	mov	DWORD [8+esi],ecx
2438	mov	DWORD [12+esi],edx
2439	lea	esi,[16+esi]
2440	mov	DWORD [36+esp],esi
2441	lea	esi,[60+esp]
2442	mov	eax,DWORD [esi]
2443	mov	ebx,DWORD [4+esi]
2444	mov	ecx,DWORD [8+esi]
2445	mov	edx,DWORD [12+esi]
2446	mov	DWORD [edi],eax
2447	mov	DWORD [4+edi],ebx
2448	mov	DWORD [8+edi],ecx
2449	mov	DWORD [12+edi],edx
2450	mov	esi,DWORD [32+esp]
2451	mov	ecx,DWORD [40+esp]
2452	lea	esi,[16+esi]
2453	mov	DWORD [32+esp],esi
2454	sub	ecx,16
2455	mov	DWORD [40+esp],ecx
2456	jnz	NEAR L$027fast_dec_in_place_loop
2457align	4
2458L$026fast_dec_out:
2459	cmp	DWORD [316+esp],0
2460	mov	edi,DWORD [44+esp]
2461	je	NEAR L$028skip_dzero
2462	mov	ecx,60
2463	xor	eax,eax
2464align	4
2465dd	2884892297
2466L$028skip_dzero:
2467	mov	esp,DWORD [28+esp]
2468	popfd
2469	pop	edi
2470	pop	esi
2471	pop	ebx
2472	pop	ebp
2473	ret
2474	pushfd
2475align	16
2476L$015slow_way:
2477	mov	eax,DWORD [eax]
2478	mov	edi,DWORD [36+esp]
2479	lea	esi,[esp-80]
2480	and	esi,-64
2481	lea	ebx,[edi-143]
2482	sub	ebx,esi
2483	neg	ebx
2484	and	ebx,960
2485	sub	esi,ebx
2486	lea	ebx,[768+esi]
2487	sub	ebx,ebp
2488	and	ebx,768
2489	lea	ebp,[2176+ebx*1+ebp]
2490	lea	edx,[24+esp]
2491	xchg	esp,esi
2492	add	esp,4
2493	mov	DWORD [24+esp],ebp
2494	mov	DWORD [28+esp],esi
2495	mov	DWORD [52+esp],eax
2496	mov	eax,DWORD [edx]
2497	mov	ebx,DWORD [4+edx]
2498	mov	esi,DWORD [16+edx]
2499	mov	edx,DWORD [20+edx]
2500	mov	DWORD [32+esp],eax
2501	mov	DWORD [36+esp],ebx
2502	mov	DWORD [40+esp],ecx
2503	mov	DWORD [44+esp],edi
2504	mov	DWORD [48+esp],esi
2505	mov	edi,esi
2506	mov	esi,eax
2507	cmp	edx,0
2508	je	NEAR L$029slow_decrypt
2509	cmp	ecx,16
2510	mov	edx,ebx
2511	jb	NEAR L$030slow_enc_tail
2512	bt	DWORD [52+esp],25
2513	jnc	NEAR L$031slow_enc_x86
2514	movq	mm0,[edi]
2515	movq	mm4,[8+edi]
2516align	16
2517L$032slow_enc_loop_sse:
2518	pxor	mm0,[esi]
2519	pxor	mm4,[8+esi]
2520	mov	edi,DWORD [44+esp]
2521	call	__sse_AES_encrypt_compact
2522	mov	esi,DWORD [32+esp]
2523	mov	edi,DWORD [36+esp]
2524	mov	ecx,DWORD [40+esp]
2525	movq	[edi],mm0
2526	movq	[8+edi],mm4
2527	lea	esi,[16+esi]
2528	mov	DWORD [32+esp],esi
2529	lea	edx,[16+edi]
2530	mov	DWORD [36+esp],edx
2531	sub	ecx,16
2532	cmp	ecx,16
2533	mov	DWORD [40+esp],ecx
2534	jae	NEAR L$032slow_enc_loop_sse
2535	test	ecx,15
2536	jnz	NEAR L$030slow_enc_tail
2537	mov	esi,DWORD [48+esp]
2538	movq	[esi],mm0
2539	movq	[8+esi],mm4
2540	emms
2541	mov	esp,DWORD [28+esp]
2542	popfd
2543	pop	edi
2544	pop	esi
2545	pop	ebx
2546	pop	ebp
2547	ret
2548	pushfd
2549align	16
2550L$031slow_enc_x86:
2551	mov	eax,DWORD [edi]
2552	mov	ebx,DWORD [4+edi]
2553align	4
2554L$033slow_enc_loop_x86:
2555	mov	ecx,DWORD [8+edi]
2556	mov	edx,DWORD [12+edi]
2557	xor	eax,DWORD [esi]
2558	xor	ebx,DWORD [4+esi]
2559	xor	ecx,DWORD [8+esi]
2560	xor	edx,DWORD [12+esi]
2561	mov	edi,DWORD [44+esp]
2562	call	__x86_AES_encrypt_compact
2563	mov	esi,DWORD [32+esp]
2564	mov	edi,DWORD [36+esp]
2565	mov	DWORD [edi],eax
2566	mov	DWORD [4+edi],ebx
2567	mov	DWORD [8+edi],ecx
2568	mov	DWORD [12+edi],edx
2569	mov	ecx,DWORD [40+esp]
2570	lea	esi,[16+esi]
2571	mov	DWORD [32+esp],esi
2572	lea	edx,[16+edi]
2573	mov	DWORD [36+esp],edx
2574	sub	ecx,16
2575	cmp	ecx,16
2576	mov	DWORD [40+esp],ecx
2577	jae	NEAR L$033slow_enc_loop_x86
2578	test	ecx,15
2579	jnz	NEAR L$030slow_enc_tail
2580	mov	esi,DWORD [48+esp]
2581	mov	ecx,DWORD [8+edi]
2582	mov	edx,DWORD [12+edi]
2583	mov	DWORD [esi],eax
2584	mov	DWORD [4+esi],ebx
2585	mov	DWORD [8+esi],ecx
2586	mov	DWORD [12+esi],edx
2587	mov	esp,DWORD [28+esp]
2588	popfd
2589	pop	edi
2590	pop	esi
2591	pop	ebx
2592	pop	ebp
2593	ret
2594	pushfd
2595align	16
2596L$030slow_enc_tail:
2597	emms
2598	mov	edi,edx
2599	mov	ebx,16
2600	sub	ebx,ecx
2601	cmp	edi,esi
2602	je	NEAR L$034enc_in_place
2603align	4
2604dd	2767451785
2605	jmp	NEAR L$035enc_skip_in_place
2606L$034enc_in_place:
2607	lea	edi,[ecx*1+edi]
2608L$035enc_skip_in_place:
2609	mov	ecx,ebx
2610	xor	eax,eax
2611align	4
2612dd	2868115081
2613	mov	edi,DWORD [48+esp]
2614	mov	esi,edx
2615	mov	eax,DWORD [edi]
2616	mov	ebx,DWORD [4+edi]
2617	mov	DWORD [40+esp],16
2618	jmp	NEAR L$033slow_enc_loop_x86
2619align	16
2620L$029slow_decrypt:
2621	bt	DWORD [52+esp],25
2622	jnc	NEAR L$036slow_dec_loop_x86
2623align	4
2624L$037slow_dec_loop_sse:
2625	movq	mm0,[esi]
2626	movq	mm4,[8+esi]
2627	mov	edi,DWORD [44+esp]
2628	call	__sse_AES_decrypt_compact
2629	mov	esi,DWORD [32+esp]
2630	lea	eax,[60+esp]
2631	mov	ebx,DWORD [36+esp]
2632	mov	ecx,DWORD [40+esp]
2633	mov	edi,DWORD [48+esp]
2634	movq	mm1,[esi]
2635	movq	mm5,[8+esi]
2636	pxor	mm0,[edi]
2637	pxor	mm4,[8+edi]
2638	movq	[edi],mm1
2639	movq	[8+edi],mm5
2640	sub	ecx,16
2641	jc	NEAR L$038slow_dec_partial_sse
2642	movq	[ebx],mm0
2643	movq	[8+ebx],mm4
2644	lea	ebx,[16+ebx]
2645	mov	DWORD [36+esp],ebx
2646	lea	esi,[16+esi]
2647	mov	DWORD [32+esp],esi
2648	mov	DWORD [40+esp],ecx
2649	jnz	NEAR L$037slow_dec_loop_sse
2650	emms
2651	mov	esp,DWORD [28+esp]
2652	popfd
2653	pop	edi
2654	pop	esi
2655	pop	ebx
2656	pop	ebp
2657	ret
2658	pushfd
2659align	16
2660L$038slow_dec_partial_sse:
2661	movq	[eax],mm0
2662	movq	[8+eax],mm4
2663	emms
2664	add	ecx,16
2665	mov	edi,ebx
2666	mov	esi,eax
2667align	4
2668dd	2767451785
2669	mov	esp,DWORD [28+esp]
2670	popfd
2671	pop	edi
2672	pop	esi
2673	pop	ebx
2674	pop	ebp
2675	ret
2676	pushfd
2677align	16
2678L$036slow_dec_loop_x86:
2679	mov	eax,DWORD [esi]
2680	mov	ebx,DWORD [4+esi]
2681	mov	ecx,DWORD [8+esi]
2682	mov	edx,DWORD [12+esi]
2683	lea	edi,[60+esp]
2684	mov	DWORD [edi],eax
2685	mov	DWORD [4+edi],ebx
2686	mov	DWORD [8+edi],ecx
2687	mov	DWORD [12+edi],edx
2688	mov	edi,DWORD [44+esp]
2689	call	__x86_AES_decrypt_compact
2690	mov	edi,DWORD [48+esp]
2691	mov	esi,DWORD [40+esp]
2692	xor	eax,DWORD [edi]
2693	xor	ebx,DWORD [4+edi]
2694	xor	ecx,DWORD [8+edi]
2695	xor	edx,DWORD [12+edi]
2696	sub	esi,16
2697	jc	NEAR L$039slow_dec_partial_x86
2698	mov	DWORD [40+esp],esi
2699	mov	esi,DWORD [36+esp]
2700	mov	DWORD [esi],eax
2701	mov	DWORD [4+esi],ebx
2702	mov	DWORD [8+esi],ecx
2703	mov	DWORD [12+esi],edx
2704	lea	esi,[16+esi]
2705	mov	DWORD [36+esp],esi
2706	lea	esi,[60+esp]
2707	mov	eax,DWORD [esi]
2708	mov	ebx,DWORD [4+esi]
2709	mov	ecx,DWORD [8+esi]
2710	mov	edx,DWORD [12+esi]
2711	mov	DWORD [edi],eax
2712	mov	DWORD [4+edi],ebx
2713	mov	DWORD [8+edi],ecx
2714	mov	DWORD [12+edi],edx
2715	mov	esi,DWORD [32+esp]
2716	lea	esi,[16+esi]
2717	mov	DWORD [32+esp],esi
2718	jnz	NEAR L$036slow_dec_loop_x86
2719	mov	esp,DWORD [28+esp]
2720	popfd
2721	pop	edi
2722	pop	esi
2723	pop	ebx
2724	pop	ebp
2725	ret
2726	pushfd
2727align	16
2728L$039slow_dec_partial_x86:
2729	lea	esi,[60+esp]
2730	mov	DWORD [esi],eax
2731	mov	DWORD [4+esi],ebx
2732	mov	DWORD [8+esi],ecx
2733	mov	DWORD [12+esi],edx
2734	mov	esi,DWORD [32+esp]
2735	mov	eax,DWORD [esi]
2736	mov	ebx,DWORD [4+esi]
2737	mov	ecx,DWORD [8+esi]
2738	mov	edx,DWORD [12+esi]
2739	mov	DWORD [edi],eax
2740	mov	DWORD [4+edi],ebx
2741	mov	DWORD [8+edi],ecx
2742	mov	DWORD [12+edi],edx
2743	mov	ecx,DWORD [40+esp]
2744	mov	edi,DWORD [36+esp]
2745	lea	esi,[60+esp]
2746align	4
2747dd	2767451785
2748	mov	esp,DWORD [28+esp]
2749	popfd
2750	pop	edi
2751	pop	esi
2752	pop	ebx
2753	pop	ebp
2754	ret
2755align	16
2756__x86_AES_set_encrypt_key:
2757	push	ebp
2758	push	ebx
2759	push	esi
2760	push	edi
2761	mov	esi,DWORD [24+esp]
2762	mov	edi,DWORD [32+esp]
2763	test	esi,-1
2764	jz	NEAR L$040badpointer
2765	test	edi,-1
2766	jz	NEAR L$040badpointer
2767	call	L$041pic_point
2768L$041pic_point:
2769	pop	ebp
2770	lea	ebp,[(L$AES_Te-L$041pic_point)+ebp]
2771	lea	ebp,[2176+ebp]
2772	mov	eax,DWORD [ebp-128]
2773	mov	ebx,DWORD [ebp-96]
2774	mov	ecx,DWORD [ebp-64]
2775	mov	edx,DWORD [ebp-32]
2776	mov	eax,DWORD [ebp]
2777	mov	ebx,DWORD [32+ebp]
2778	mov	ecx,DWORD [64+ebp]
2779	mov	edx,DWORD [96+ebp]
2780	mov	ecx,DWORD [28+esp]
2781	cmp	ecx,128
2782	je	NEAR L$04210rounds
2783	cmp	ecx,192
2784	je	NEAR L$04312rounds
2785	cmp	ecx,256
2786	je	NEAR L$04414rounds
2787	mov	eax,-2
2788	jmp	NEAR L$045exit
2789L$04210rounds:
2790	mov	eax,DWORD [esi]
2791	mov	ebx,DWORD [4+esi]
2792	mov	ecx,DWORD [8+esi]
2793	mov	edx,DWORD [12+esi]
2794	mov	DWORD [edi],eax
2795	mov	DWORD [4+edi],ebx
2796	mov	DWORD [8+edi],ecx
2797	mov	DWORD [12+edi],edx
2798	xor	ecx,ecx
2799	jmp	NEAR L$04610shortcut
2800align	4
2801L$04710loop:
2802	mov	eax,DWORD [edi]
2803	mov	edx,DWORD [12+edi]
2804L$04610shortcut:
2805	movzx	esi,dl
2806	movzx	ebx,BYTE [esi*1+ebp-128]
2807	movzx	esi,dh
2808	shl	ebx,24
2809	xor	eax,ebx
2810	movzx	ebx,BYTE [esi*1+ebp-128]
2811	shr	edx,16
2812	movzx	esi,dl
2813	xor	eax,ebx
2814	movzx	ebx,BYTE [esi*1+ebp-128]
2815	movzx	esi,dh
2816	shl	ebx,8
2817	xor	eax,ebx
2818	movzx	ebx,BYTE [esi*1+ebp-128]
2819	shl	ebx,16
2820	xor	eax,ebx
2821	xor	eax,DWORD [896+ecx*4+ebp]
2822	mov	DWORD [16+edi],eax
2823	xor	eax,DWORD [4+edi]
2824	mov	DWORD [20+edi],eax
2825	xor	eax,DWORD [8+edi]
2826	mov	DWORD [24+edi],eax
2827	xor	eax,DWORD [12+edi]
2828	mov	DWORD [28+edi],eax
2829	inc	ecx
2830	add	edi,16
2831	cmp	ecx,10
2832	jl	NEAR L$04710loop
2833	mov	DWORD [80+edi],10
2834	xor	eax,eax
2835	jmp	NEAR L$045exit
2836L$04312rounds:
2837	mov	eax,DWORD [esi]
2838	mov	ebx,DWORD [4+esi]
2839	mov	ecx,DWORD [8+esi]
2840	mov	edx,DWORD [12+esi]
2841	mov	DWORD [edi],eax
2842	mov	DWORD [4+edi],ebx
2843	mov	DWORD [8+edi],ecx
2844	mov	DWORD [12+edi],edx
2845	mov	ecx,DWORD [16+esi]
2846	mov	edx,DWORD [20+esi]
2847	mov	DWORD [16+edi],ecx
2848	mov	DWORD [20+edi],edx
2849	xor	ecx,ecx
2850	jmp	NEAR L$04812shortcut
2851align	4
2852L$04912loop:
2853	mov	eax,DWORD [edi]
2854	mov	edx,DWORD [20+edi]
2855L$04812shortcut:
2856	movzx	esi,dl
2857	movzx	ebx,BYTE [esi*1+ebp-128]
2858	movzx	esi,dh
2859	shl	ebx,24
2860	xor	eax,ebx
2861	movzx	ebx,BYTE [esi*1+ebp-128]
2862	shr	edx,16
2863	movzx	esi,dl
2864	xor	eax,ebx
2865	movzx	ebx,BYTE [esi*1+ebp-128]
2866	movzx	esi,dh
2867	shl	ebx,8
2868	xor	eax,ebx
2869	movzx	ebx,BYTE [esi*1+ebp-128]
2870	shl	ebx,16
2871	xor	eax,ebx
2872	xor	eax,DWORD [896+ecx*4+ebp]
2873	mov	DWORD [24+edi],eax
2874	xor	eax,DWORD [4+edi]
2875	mov	DWORD [28+edi],eax
2876	xor	eax,DWORD [8+edi]
2877	mov	DWORD [32+edi],eax
2878	xor	eax,DWORD [12+edi]
2879	mov	DWORD [36+edi],eax
2880	cmp	ecx,7
2881	je	NEAR L$05012break
2882	inc	ecx
2883	xor	eax,DWORD [16+edi]
2884	mov	DWORD [40+edi],eax
2885	xor	eax,DWORD [20+edi]
2886	mov	DWORD [44+edi],eax
2887	add	edi,24
2888	jmp	NEAR L$04912loop
2889L$05012break:
2890	mov	DWORD [72+edi],12
2891	xor	eax,eax
2892	jmp	NEAR L$045exit
2893L$04414rounds:
2894	mov	eax,DWORD [esi]
2895	mov	ebx,DWORD [4+esi]
2896	mov	ecx,DWORD [8+esi]
2897	mov	edx,DWORD [12+esi]
2898	mov	DWORD [edi],eax
2899	mov	DWORD [4+edi],ebx
2900	mov	DWORD [8+edi],ecx
2901	mov	DWORD [12+edi],edx
2902	mov	eax,DWORD [16+esi]
2903	mov	ebx,DWORD [20+esi]
2904	mov	ecx,DWORD [24+esi]
2905	mov	edx,DWORD [28+esi]
2906	mov	DWORD [16+edi],eax
2907	mov	DWORD [20+edi],ebx
2908	mov	DWORD [24+edi],ecx
2909	mov	DWORD [28+edi],edx
2910	xor	ecx,ecx
2911	jmp	NEAR L$05114shortcut
2912align	4
2913L$05214loop:
2914	mov	edx,DWORD [28+edi]
2915L$05114shortcut:
2916	mov	eax,DWORD [edi]
2917	movzx	esi,dl
2918	movzx	ebx,BYTE [esi*1+ebp-128]
2919	movzx	esi,dh
2920	shl	ebx,24
2921	xor	eax,ebx
2922	movzx	ebx,BYTE [esi*1+ebp-128]
2923	shr	edx,16
2924	movzx	esi,dl
2925	xor	eax,ebx
2926	movzx	ebx,BYTE [esi*1+ebp-128]
2927	movzx	esi,dh
2928	shl	ebx,8
2929	xor	eax,ebx
2930	movzx	ebx,BYTE [esi*1+ebp-128]
2931	shl	ebx,16
2932	xor	eax,ebx
2933	xor	eax,DWORD [896+ecx*4+ebp]
2934	mov	DWORD [32+edi],eax
2935	xor	eax,DWORD [4+edi]
2936	mov	DWORD [36+edi],eax
2937	xor	eax,DWORD [8+edi]
2938	mov	DWORD [40+edi],eax
2939	xor	eax,DWORD [12+edi]
2940	mov	DWORD [44+edi],eax
2941	cmp	ecx,6
2942	je	NEAR L$05314break
2943	inc	ecx
2944	mov	edx,eax
2945	mov	eax,DWORD [16+edi]
2946	movzx	esi,dl
2947	movzx	ebx,BYTE [esi*1+ebp-128]
2948	movzx	esi,dh
2949	xor	eax,ebx
2950	movzx	ebx,BYTE [esi*1+ebp-128]
2951	shr	edx,16
2952	shl	ebx,8
2953	movzx	esi,dl
2954	xor	eax,ebx
2955	movzx	ebx,BYTE [esi*1+ebp-128]
2956	movzx	esi,dh
2957	shl	ebx,16
2958	xor	eax,ebx
2959	movzx	ebx,BYTE [esi*1+ebp-128]
2960	shl	ebx,24
2961	xor	eax,ebx
2962	mov	DWORD [48+edi],eax
2963	xor	eax,DWORD [20+edi]
2964	mov	DWORD [52+edi],eax
2965	xor	eax,DWORD [24+edi]
2966	mov	DWORD [56+edi],eax
2967	xor	eax,DWORD [28+edi]
2968	mov	DWORD [60+edi],eax
2969	add	edi,32
2970	jmp	NEAR L$05214loop
2971L$05314break:
2972	mov	DWORD [48+edi],14
2973	xor	eax,eax
2974	jmp	NEAR L$045exit
2975L$040badpointer:
2976	mov	eax,-1
2977L$045exit:
2978	pop	edi
2979	pop	esi
2980	pop	ebx
2981	pop	ebp
2982	ret
2983global	_aes_nohw_set_encrypt_key
2984align	16
2985_aes_nohw_set_encrypt_key:
2986L$_aes_nohw_set_encrypt_key_begin:
2987	call	__x86_AES_set_encrypt_key
2988	ret
2989global	_aes_nohw_set_decrypt_key
2990align	16
2991_aes_nohw_set_decrypt_key:
2992L$_aes_nohw_set_decrypt_key_begin:
2993	call	__x86_AES_set_encrypt_key
2994	cmp	eax,0
2995	je	NEAR L$054proceed
2996	ret
2997L$054proceed:
2998	push	ebp
2999	push	ebx
3000	push	esi
3001	push	edi
3002	mov	esi,DWORD [28+esp]
3003	mov	ecx,DWORD [240+esi]
3004	lea	ecx,[ecx*4]
3005	lea	edi,[ecx*4+esi]
3006align	4
3007L$055invert:
3008	mov	eax,DWORD [esi]
3009	mov	ebx,DWORD [4+esi]
3010	mov	ecx,DWORD [edi]
3011	mov	edx,DWORD [4+edi]
3012	mov	DWORD [edi],eax
3013	mov	DWORD [4+edi],ebx
3014	mov	DWORD [esi],ecx
3015	mov	DWORD [4+esi],edx
3016	mov	eax,DWORD [8+esi]
3017	mov	ebx,DWORD [12+esi]
3018	mov	ecx,DWORD [8+edi]
3019	mov	edx,DWORD [12+edi]
3020	mov	DWORD [8+edi],eax
3021	mov	DWORD [12+edi],ebx
3022	mov	DWORD [8+esi],ecx
3023	mov	DWORD [12+esi],edx
3024	add	esi,16
3025	sub	edi,16
3026	cmp	esi,edi
3027	jne	NEAR L$055invert
3028	mov	edi,DWORD [28+esp]
3029	mov	esi,DWORD [240+edi]
3030	lea	esi,[esi*1+esi-2]
3031	lea	esi,[esi*8+edi]
3032	mov	DWORD [28+esp],esi
3033	mov	eax,DWORD [16+edi]
3034align	4
3035L$056permute:
3036	add	edi,16
3037	mov	ebp,2155905152
3038	and	ebp,eax
3039	lea	ebx,[eax*1+eax]
3040	mov	esi,ebp
3041	shr	ebp,7
3042	sub	esi,ebp
3043	and	ebx,4278124286
3044	and	esi,454761243
3045	xor	ebx,esi
3046	mov	ebp,2155905152
3047	and	ebp,ebx
3048	lea	ecx,[ebx*1+ebx]
3049	mov	esi,ebp
3050	shr	ebp,7
3051	sub	esi,ebp
3052	and	ecx,4278124286
3053	and	esi,454761243
3054	xor	ebx,eax
3055	xor	ecx,esi
3056	mov	ebp,2155905152
3057	and	ebp,ecx
3058	lea	edx,[ecx*1+ecx]
3059	mov	esi,ebp
3060	shr	ebp,7
3061	xor	ecx,eax
3062	sub	esi,ebp
3063	and	edx,4278124286
3064	and	esi,454761243
3065	rol	eax,8
3066	xor	edx,esi
3067	mov	ebp,DWORD [4+edi]
3068	xor	eax,ebx
3069	xor	ebx,edx
3070	xor	eax,ecx
3071	rol	ebx,24
3072	xor	ecx,edx
3073	xor	eax,edx
3074	rol	ecx,16
3075	xor	eax,ebx
3076	rol	edx,8
3077	xor	eax,ecx
3078	mov	ebx,ebp
3079	xor	eax,edx
3080	mov	DWORD [edi],eax
3081	mov	ebp,2155905152
3082	and	ebp,ebx
3083	lea	ecx,[ebx*1+ebx]
3084	mov	esi,ebp
3085	shr	ebp,7
3086	sub	esi,ebp
3087	and	ecx,4278124286
3088	and	esi,454761243
3089	xor	ecx,esi
3090	mov	ebp,2155905152
3091	and	ebp,ecx
3092	lea	edx,[ecx*1+ecx]
3093	mov	esi,ebp
3094	shr	ebp,7
3095	sub	esi,ebp
3096	and	edx,4278124286
3097	and	esi,454761243
3098	xor	ecx,ebx
3099	xor	edx,esi
3100	mov	ebp,2155905152
3101	and	ebp,edx
3102	lea	eax,[edx*1+edx]
3103	mov	esi,ebp
3104	shr	ebp,7
3105	xor	edx,ebx
3106	sub	esi,ebp
3107	and	eax,4278124286
3108	and	esi,454761243
3109	rol	ebx,8
3110	xor	eax,esi
3111	mov	ebp,DWORD [8+edi]
3112	xor	ebx,ecx
3113	xor	ecx,eax
3114	xor	ebx,edx
3115	rol	ecx,24
3116	xor	edx,eax
3117	xor	ebx,eax
3118	rol	edx,16
3119	xor	ebx,ecx
3120	rol	eax,8
3121	xor	ebx,edx
3122	mov	ecx,ebp
3123	xor	ebx,eax
3124	mov	DWORD [4+edi],ebx
3125	mov	ebp,2155905152
3126	and	ebp,ecx
3127	lea	edx,[ecx*1+ecx]
3128	mov	esi,ebp
3129	shr	ebp,7
3130	sub	esi,ebp
3131	and	edx,4278124286
3132	and	esi,454761243
3133	xor	edx,esi
3134	mov	ebp,2155905152
3135	and	ebp,edx
3136	lea	eax,[edx*1+edx]
3137	mov	esi,ebp
3138	shr	ebp,7
3139	sub	esi,ebp
3140	and	eax,4278124286
3141	and	esi,454761243
3142	xor	edx,ecx
3143	xor	eax,esi
3144	mov	ebp,2155905152
3145	and	ebp,eax
3146	lea	ebx,[eax*1+eax]
3147	mov	esi,ebp
3148	shr	ebp,7
3149	xor	eax,ecx
3150	sub	esi,ebp
3151	and	ebx,4278124286
3152	and	esi,454761243
3153	rol	ecx,8
3154	xor	ebx,esi
3155	mov	ebp,DWORD [12+edi]
3156	xor	ecx,edx
3157	xor	edx,ebx
3158	xor	ecx,eax
3159	rol	edx,24
3160	xor	eax,ebx
3161	xor	ecx,ebx
3162	rol	eax,16
3163	xor	ecx,edx
3164	rol	ebx,8
3165	xor	ecx,eax
3166	mov	edx,ebp
3167	xor	ecx,ebx
3168	mov	DWORD [8+edi],ecx
3169	mov	ebp,2155905152
3170	and	ebp,edx
3171	lea	eax,[edx*1+edx]
3172	mov	esi,ebp
3173	shr	ebp,7
3174	sub	esi,ebp
3175	and	eax,4278124286
3176	and	esi,454761243
3177	xor	eax,esi
3178	mov	ebp,2155905152
3179	and	ebp,eax
3180	lea	ebx,[eax*1+eax]
3181	mov	esi,ebp
3182	shr	ebp,7
3183	sub	esi,ebp
3184	and	ebx,4278124286
3185	and	esi,454761243
3186	xor	eax,edx
3187	xor	ebx,esi
3188	mov	ebp,2155905152
3189	and	ebp,ebx
3190	lea	ecx,[ebx*1+ebx]
3191	mov	esi,ebp
3192	shr	ebp,7
3193	xor	ebx,edx
3194	sub	esi,ebp
3195	and	ecx,4278124286
3196	and	esi,454761243
3197	rol	edx,8
3198	xor	ecx,esi
3199	mov	ebp,DWORD [16+edi]
3200	xor	edx,eax
3201	xor	eax,ecx
3202	xor	edx,ebx
3203	rol	eax,24
3204	xor	ebx,ecx
3205	xor	edx,ecx
3206	rol	ebx,16
3207	xor	edx,eax
3208	rol	ecx,8
3209	xor	edx,ebx
3210	mov	eax,ebp
3211	xor	edx,ecx
3212	mov	DWORD [12+edi],edx
3213	cmp	edi,DWORD [28+esp]
3214	jb	NEAR L$056permute
3215	xor	eax,eax
3216	pop	edi
3217	pop	esi
3218	pop	ebx
3219	pop	ebp
3220	ret
3221db	65,69,83,32,102,111,114,32,120,56,54,44,32,67,82,89
3222db	80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114
3223db	111,64,111,112,101,110,115,115,108,46,111,114,103,62,0
3224segment	.bss
3225common	_OPENSSL_ia32cap_P 16
3226