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__, win32
6%ifidn __OUTPUT_FORMAT__,obj
7section	code	use32 class=code align=64
8%elifidn __OUTPUT_FORMAT__,win32
9$@feat.00 equ 1
10section	.text	code align=64
11%else
12section	.text	code
13%endif
14%ifdef BORINGSSL_DISPATCH_TEST
15extern	_BORINGSSL_function_hit
16%endif
17align	64
18L$_vpaes_consts:
19dd	218628480,235210255,168496130,67568393
20dd	252381056,17041926,33884169,51187212
21dd	252645135,252645135,252645135,252645135
22dd	1512730624,3266504856,1377990664,3401244816
23dd	830229760,1275146365,2969422977,3447763452
24dd	3411033600,2979783055,338359620,2782886510
25dd	4209124096,907596821,221174255,1006095553
26dd	191964160,3799684038,3164090317,1589111125
27dd	182528256,1777043520,2877432650,3265356744
28dd	1874708224,3503451415,3305285752,363511674
29dd	1606117888,3487855781,1093350906,2384367825
30dd	197121,67569157,134941193,202313229
31dd	67569157,134941193,202313229,197121
32dd	134941193,202313229,197121,67569157
33dd	202313229,197121,67569157,134941193
34dd	33619971,100992007,168364043,235736079
35dd	235736079,33619971,100992007,168364043
36dd	168364043,235736079,33619971,100992007
37dd	100992007,168364043,235736079,33619971
38dd	50462976,117835012,185207048,252579084
39dd	252314880,51251460,117574920,184942860
40dd	184682752,252054788,50987272,118359308
41dd	118099200,185467140,251790600,50727180
42dd	2946363062,528716217,1300004225,1881839624
43dd	1532713819,1532713819,1532713819,1532713819
44dd	3602276352,4288629033,3737020424,4153884961
45dd	1354558464,32357713,2958822624,3775749553
46dd	1201988352,132424512,1572796698,503232858
47dd	2213177600,1597421020,4103937655,675398315
48db	86,101,99,116,111,114,32,80,101,114,109,117,116,97,116,105
49db	111,110,32,65,69,83,32,102,111,114,32,120,56,54,47,83
50db	83,83,69,51,44,32,77,105,107,101,32,72,97,109,98,117
51db	114,103,32,40,83,116,97,110,102,111,114,100,32,85,110,105
52db	118,101,114,115,105,116,121,41,0
53align	64
54align	16
55__vpaes_preheat:
56	add	ebp,DWORD [esp]
57	movdqa	xmm7,[ebp-48]
58	movdqa	xmm6,[ebp-16]
59	ret
60align	16
61__vpaes_encrypt_core:
62	mov	ecx,16
63	mov	eax,DWORD [240+edx]
64	movdqa	xmm1,xmm6
65	movdqa	xmm2,[ebp]
66	pandn	xmm1,xmm0
67	pand	xmm0,xmm6
68	movdqu	xmm5,[edx]
69db	102,15,56,0,208
70	movdqa	xmm0,[16+ebp]
71	pxor	xmm2,xmm5
72	psrld	xmm1,4
73	add	edx,16
74db	102,15,56,0,193
75	lea	ebx,[192+ebp]
76	pxor	xmm0,xmm2
77	jmp	NEAR L$000enc_entry
78align	16
79L$001enc_loop:
80	movdqa	xmm4,[32+ebp]
81	movdqa	xmm0,[48+ebp]
82db	102,15,56,0,226
83db	102,15,56,0,195
84	pxor	xmm4,xmm5
85	movdqa	xmm5,[64+ebp]
86	pxor	xmm0,xmm4
87	movdqa	xmm1,[ecx*1+ebx-64]
88db	102,15,56,0,234
89	movdqa	xmm2,[80+ebp]
90	movdqa	xmm4,[ecx*1+ebx]
91db	102,15,56,0,211
92	movdqa	xmm3,xmm0
93	pxor	xmm2,xmm5
94db	102,15,56,0,193
95	add	edx,16
96	pxor	xmm0,xmm2
97db	102,15,56,0,220
98	add	ecx,16
99	pxor	xmm3,xmm0
100db	102,15,56,0,193
101	and	ecx,48
102	sub	eax,1
103	pxor	xmm0,xmm3
104L$000enc_entry:
105	movdqa	xmm1,xmm6
106	movdqa	xmm5,[ebp-32]
107	pandn	xmm1,xmm0
108	psrld	xmm1,4
109	pand	xmm0,xmm6
110db	102,15,56,0,232
111	movdqa	xmm3,xmm7
112	pxor	xmm0,xmm1
113db	102,15,56,0,217
114	movdqa	xmm4,xmm7
115	pxor	xmm3,xmm5
116db	102,15,56,0,224
117	movdqa	xmm2,xmm7
118	pxor	xmm4,xmm5
119db	102,15,56,0,211
120	movdqa	xmm3,xmm7
121	pxor	xmm2,xmm0
122db	102,15,56,0,220
123	movdqu	xmm5,[edx]
124	pxor	xmm3,xmm1
125	jnz	NEAR L$001enc_loop
126	movdqa	xmm4,[96+ebp]
127	movdqa	xmm0,[112+ebp]
128db	102,15,56,0,226
129	pxor	xmm4,xmm5
130db	102,15,56,0,195
131	movdqa	xmm1,[64+ecx*1+ebx]
132	pxor	xmm0,xmm4
133db	102,15,56,0,193
134	ret
135align	16
136__vpaes_schedule_core:
137	add	ebp,DWORD [esp]
138	movdqu	xmm0,[esi]
139	movdqa	xmm2,[320+ebp]
140	movdqa	xmm3,xmm0
141	lea	ebx,[ebp]
142	movdqa	[4+esp],xmm2
143	call	__vpaes_schedule_transform
144	movdqa	xmm7,xmm0
145	test	edi,edi
146	jnz	NEAR L$002schedule_am_decrypting
147	movdqu	[edx],xmm0
148	jmp	NEAR L$003schedule_go
149L$002schedule_am_decrypting:
150	movdqa	xmm1,[256+ecx*1+ebp]
151db	102,15,56,0,217
152	movdqu	[edx],xmm3
153	xor	ecx,48
154L$003schedule_go:
155	cmp	eax,192
156	ja	NEAR L$004schedule_256
157L$005schedule_128:
158	mov	eax,10
159L$006loop_schedule_128:
160	call	__vpaes_schedule_round
161	dec	eax
162	jz	NEAR L$007schedule_mangle_last
163	call	__vpaes_schedule_mangle
164	jmp	NEAR L$006loop_schedule_128
165align	16
166L$004schedule_256:
167	movdqu	xmm0,[16+esi]
168	call	__vpaes_schedule_transform
169	mov	eax,7
170L$008loop_schedule_256:
171	call	__vpaes_schedule_mangle
172	movdqa	xmm6,xmm0
173	call	__vpaes_schedule_round
174	dec	eax
175	jz	NEAR L$007schedule_mangle_last
176	call	__vpaes_schedule_mangle
177	pshufd	xmm0,xmm0,255
178	movdqa	[20+esp],xmm7
179	movdqa	xmm7,xmm6
180	call	L$_vpaes_schedule_low_round
181	movdqa	xmm7,[20+esp]
182	jmp	NEAR L$008loop_schedule_256
183align	16
184L$007schedule_mangle_last:
185	lea	ebx,[384+ebp]
186	test	edi,edi
187	jnz	NEAR L$009schedule_mangle_last_dec
188	movdqa	xmm1,[256+ecx*1+ebp]
189db	102,15,56,0,193
190	lea	ebx,[352+ebp]
191	add	edx,32
192L$009schedule_mangle_last_dec:
193	add	edx,-16
194	pxor	xmm0,[336+ebp]
195	call	__vpaes_schedule_transform
196	movdqu	[edx],xmm0
197	pxor	xmm0,xmm0
198	pxor	xmm1,xmm1
199	pxor	xmm2,xmm2
200	pxor	xmm3,xmm3
201	pxor	xmm4,xmm4
202	pxor	xmm5,xmm5
203	pxor	xmm6,xmm6
204	pxor	xmm7,xmm7
205	ret
206align	16
207__vpaes_schedule_round:
208	movdqa	xmm2,[8+esp]
209	pxor	xmm1,xmm1
210db	102,15,58,15,202,15
211db	102,15,58,15,210,15
212	pxor	xmm7,xmm1
213	pshufd	xmm0,xmm0,255
214db	102,15,58,15,192,1
215	movdqa	[8+esp],xmm2
216L$_vpaes_schedule_low_round:
217	movdqa	xmm1,xmm7
218	pslldq	xmm7,4
219	pxor	xmm7,xmm1
220	movdqa	xmm1,xmm7
221	pslldq	xmm7,8
222	pxor	xmm7,xmm1
223	pxor	xmm7,[336+ebp]
224	movdqa	xmm4,[ebp-16]
225	movdqa	xmm5,[ebp-48]
226	movdqa	xmm1,xmm4
227	pandn	xmm1,xmm0
228	psrld	xmm1,4
229	pand	xmm0,xmm4
230	movdqa	xmm2,[ebp-32]
231db	102,15,56,0,208
232	pxor	xmm0,xmm1
233	movdqa	xmm3,xmm5
234db	102,15,56,0,217
235	pxor	xmm3,xmm2
236	movdqa	xmm4,xmm5
237db	102,15,56,0,224
238	pxor	xmm4,xmm2
239	movdqa	xmm2,xmm5
240db	102,15,56,0,211
241	pxor	xmm2,xmm0
242	movdqa	xmm3,xmm5
243db	102,15,56,0,220
244	pxor	xmm3,xmm1
245	movdqa	xmm4,[32+ebp]
246db	102,15,56,0,226
247	movdqa	xmm0,[48+ebp]
248db	102,15,56,0,195
249	pxor	xmm0,xmm4
250	pxor	xmm0,xmm7
251	movdqa	xmm7,xmm0
252	ret
253align	16
254__vpaes_schedule_transform:
255	movdqa	xmm2,[ebp-16]
256	movdqa	xmm1,xmm2
257	pandn	xmm1,xmm0
258	psrld	xmm1,4
259	pand	xmm0,xmm2
260	movdqa	xmm2,[ebx]
261db	102,15,56,0,208
262	movdqa	xmm0,[16+ebx]
263db	102,15,56,0,193
264	pxor	xmm0,xmm2
265	ret
266align	16
267__vpaes_schedule_mangle:
268	movdqa	xmm4,xmm0
269	movdqa	xmm5,[128+ebp]
270	test	edi,edi
271	jnz	NEAR L$010schedule_mangle_dec
272	add	edx,16
273	pxor	xmm4,[336+ebp]
274db	102,15,56,0,229
275	movdqa	xmm3,xmm4
276db	102,15,56,0,229
277	pxor	xmm3,xmm4
278db	102,15,56,0,229
279	pxor	xmm3,xmm4
280	jmp	NEAR L$011schedule_mangle_both
281align	16
282L$010schedule_mangle_dec:
283	movdqa	xmm2,[ebp-16]
284	lea	esi,[ebp]
285	movdqa	xmm1,xmm2
286	pandn	xmm1,xmm4
287	psrld	xmm1,4
288	pand	xmm4,xmm2
289	movdqa	xmm2,[esi]
290db	102,15,56,0,212
291	movdqa	xmm3,[16+esi]
292db	102,15,56,0,217
293	pxor	xmm3,xmm2
294db	102,15,56,0,221
295	movdqa	xmm2,[32+esi]
296db	102,15,56,0,212
297	pxor	xmm2,xmm3
298	movdqa	xmm3,[48+esi]
299db	102,15,56,0,217
300	pxor	xmm3,xmm2
301db	102,15,56,0,221
302	movdqa	xmm2,[64+esi]
303db	102,15,56,0,212
304	pxor	xmm2,xmm3
305	movdqa	xmm3,[80+esi]
306db	102,15,56,0,217
307	pxor	xmm3,xmm2
308db	102,15,56,0,221
309	movdqa	xmm2,[96+esi]
310db	102,15,56,0,212
311	pxor	xmm2,xmm3
312	movdqa	xmm3,[112+esi]
313db	102,15,56,0,217
314	pxor	xmm3,xmm2
315	add	edx,-16
316L$011schedule_mangle_both:
317	movdqa	xmm1,[256+ecx*1+ebp]
318db	102,15,56,0,217
319	add	ecx,-16
320	and	ecx,48
321	movdqu	[edx],xmm3
322	ret
323global	_vpaes_set_encrypt_key
324align	16
325_vpaes_set_encrypt_key:
326L$_vpaes_set_encrypt_key_begin:
327	push	ebp
328	push	ebx
329	push	esi
330	push	edi
331%ifdef BORINGSSL_DISPATCH_TEST
332	push	ebx
333	push	edx
334	call	L$012pic
335L$012pic:
336	pop	ebx
337	lea	ebx,[(_BORINGSSL_function_hit+5-L$012pic)+ebx]
338	mov	edx,1
339	mov	BYTE [ebx],dl
340	pop	edx
341	pop	ebx
342%endif
343	mov	esi,DWORD [20+esp]
344	lea	ebx,[esp-56]
345	mov	eax,DWORD [24+esp]
346	and	ebx,-16
347	mov	edx,DWORD [28+esp]
348	xchg	ebx,esp
349	mov	DWORD [48+esp],ebx
350	mov	ebx,eax
351	shr	ebx,5
352	add	ebx,5
353	mov	DWORD [240+edx],ebx
354	mov	ecx,48
355	mov	edi,0
356	lea	ebp,[(L$_vpaes_consts+0x30-L$013pic_point)]
357	call	__vpaes_schedule_core
358L$013pic_point:
359	mov	esp,DWORD [48+esp]
360	xor	eax,eax
361	pop	edi
362	pop	esi
363	pop	ebx
364	pop	ebp
365	ret
366global	_vpaes_encrypt
367align	16
368_vpaes_encrypt:
369L$_vpaes_encrypt_begin:
370	push	ebp
371	push	ebx
372	push	esi
373	push	edi
374%ifdef BORINGSSL_DISPATCH_TEST
375	push	ebx
376	push	edx
377	call	L$014pic
378L$014pic:
379	pop	ebx
380	lea	ebx,[(_BORINGSSL_function_hit+4-L$014pic)+ebx]
381	mov	edx,1
382	mov	BYTE [ebx],dl
383	pop	edx
384	pop	ebx
385%endif
386	lea	ebp,[(L$_vpaes_consts+0x30-L$015pic_point)]
387	call	__vpaes_preheat
388L$015pic_point:
389	mov	esi,DWORD [20+esp]
390	lea	ebx,[esp-56]
391	mov	edi,DWORD [24+esp]
392	and	ebx,-16
393	mov	edx,DWORD [28+esp]
394	xchg	ebx,esp
395	mov	DWORD [48+esp],ebx
396	movdqu	xmm0,[esi]
397	call	__vpaes_encrypt_core
398	movdqu	[edi],xmm0
399	mov	esp,DWORD [48+esp]
400	pop	edi
401	pop	esi
402	pop	ebx
403	pop	ebp
404	ret
405%else
406; Work around https://bugzilla.nasm.us/show_bug.cgi?id=3392738
407ret
408%endif
409