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