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
14global	_gcm_init_clmul
15align	16
16_gcm_init_clmul:
17L$_gcm_init_clmul_begin:
18	mov	edx,DWORD [4+esp]
19	mov	eax,DWORD [8+esp]
20	call	L$000pic
21L$000pic:
22	pop	ecx
23	lea	ecx,[(L$bswap-L$000pic)+ecx]
24	movdqu	xmm2,[eax]
25	pshufd	xmm2,xmm2,78
26	pshufd	xmm4,xmm2,255
27	movdqa	xmm3,xmm2
28	psllq	xmm2,1
29	pxor	xmm5,xmm5
30	psrlq	xmm3,63
31	pcmpgtd	xmm5,xmm4
32	pslldq	xmm3,8
33	por	xmm2,xmm3
34	pand	xmm5,[16+ecx]
35	pxor	xmm2,xmm5
36	movdqa	xmm0,xmm2
37	movdqa	xmm1,xmm0
38	pshufd	xmm3,xmm0,78
39	pshufd	xmm4,xmm2,78
40	pxor	xmm3,xmm0
41	pxor	xmm4,xmm2
42db	102,15,58,68,194,0
43db	102,15,58,68,202,17
44db	102,15,58,68,220,0
45	xorps	xmm3,xmm0
46	xorps	xmm3,xmm1
47	movdqa	xmm4,xmm3
48	psrldq	xmm3,8
49	pslldq	xmm4,8
50	pxor	xmm1,xmm3
51	pxor	xmm0,xmm4
52	movdqa	xmm4,xmm0
53	movdqa	xmm3,xmm0
54	psllq	xmm0,5
55	pxor	xmm3,xmm0
56	psllq	xmm0,1
57	pxor	xmm0,xmm3
58	psllq	xmm0,57
59	movdqa	xmm3,xmm0
60	pslldq	xmm0,8
61	psrldq	xmm3,8
62	pxor	xmm0,xmm4
63	pxor	xmm1,xmm3
64	movdqa	xmm4,xmm0
65	psrlq	xmm0,1
66	pxor	xmm1,xmm4
67	pxor	xmm4,xmm0
68	psrlq	xmm0,5
69	pxor	xmm0,xmm4
70	psrlq	xmm0,1
71	pxor	xmm0,xmm1
72	pshufd	xmm3,xmm2,78
73	pshufd	xmm4,xmm0,78
74	pxor	xmm3,xmm2
75	movdqu	[edx],xmm2
76	pxor	xmm4,xmm0
77	movdqu	[16+edx],xmm0
78db	102,15,58,15,227,8
79	movdqu	[32+edx],xmm4
80	ret
81global	_gcm_gmult_clmul
82align	16
83_gcm_gmult_clmul:
84L$_gcm_gmult_clmul_begin:
85	mov	eax,DWORD [4+esp]
86	mov	edx,DWORD [8+esp]
87	call	L$001pic
88L$001pic:
89	pop	ecx
90	lea	ecx,[(L$bswap-L$001pic)+ecx]
91	movdqu	xmm0,[eax]
92	movdqa	xmm5,[ecx]
93	movups	xmm2,[edx]
94db	102,15,56,0,197
95	movups	xmm4,[32+edx]
96	movdqa	xmm1,xmm0
97	pshufd	xmm3,xmm0,78
98	pxor	xmm3,xmm0
99db	102,15,58,68,194,0
100db	102,15,58,68,202,17
101db	102,15,58,68,220,0
102	xorps	xmm3,xmm0
103	xorps	xmm3,xmm1
104	movdqa	xmm4,xmm3
105	psrldq	xmm3,8
106	pslldq	xmm4,8
107	pxor	xmm1,xmm3
108	pxor	xmm0,xmm4
109	movdqa	xmm4,xmm0
110	movdqa	xmm3,xmm0
111	psllq	xmm0,5
112	pxor	xmm3,xmm0
113	psllq	xmm0,1
114	pxor	xmm0,xmm3
115	psllq	xmm0,57
116	movdqa	xmm3,xmm0
117	pslldq	xmm0,8
118	psrldq	xmm3,8
119	pxor	xmm0,xmm4
120	pxor	xmm1,xmm3
121	movdqa	xmm4,xmm0
122	psrlq	xmm0,1
123	pxor	xmm1,xmm4
124	pxor	xmm4,xmm0
125	psrlq	xmm0,5
126	pxor	xmm0,xmm4
127	psrlq	xmm0,1
128	pxor	xmm0,xmm1
129db	102,15,56,0,197
130	movdqu	[eax],xmm0
131	ret
132global	_gcm_ghash_clmul
133align	16
134_gcm_ghash_clmul:
135L$_gcm_ghash_clmul_begin:
136	push	ebp
137	push	ebx
138	push	esi
139	push	edi
140	mov	eax,DWORD [20+esp]
141	mov	edx,DWORD [24+esp]
142	mov	esi,DWORD [28+esp]
143	mov	ebx,DWORD [32+esp]
144	call	L$002pic
145L$002pic:
146	pop	ecx
147	lea	ecx,[(L$bswap-L$002pic)+ecx]
148	movdqu	xmm0,[eax]
149	movdqa	xmm5,[ecx]
150	movdqu	xmm2,[edx]
151db	102,15,56,0,197
152	sub	ebx,16
153	jz	NEAR L$003odd_tail
154	movdqu	xmm3,[esi]
155	movdqu	xmm6,[16+esi]
156db	102,15,56,0,221
157db	102,15,56,0,245
158	movdqu	xmm5,[32+edx]
159	pxor	xmm0,xmm3
160	pshufd	xmm3,xmm6,78
161	movdqa	xmm7,xmm6
162	pxor	xmm3,xmm6
163	lea	esi,[32+esi]
164db	102,15,58,68,242,0
165db	102,15,58,68,250,17
166db	102,15,58,68,221,0
167	movups	xmm2,[16+edx]
168	nop
169	sub	ebx,32
170	jbe	NEAR L$004even_tail
171	jmp	NEAR L$005mod_loop
172align	32
173L$005mod_loop:
174	pshufd	xmm4,xmm0,78
175	movdqa	xmm1,xmm0
176	pxor	xmm4,xmm0
177	nop
178db	102,15,58,68,194,0
179db	102,15,58,68,202,17
180db	102,15,58,68,229,16
181	movups	xmm2,[edx]
182	xorps	xmm0,xmm6
183	movdqa	xmm5,[ecx]
184	xorps	xmm1,xmm7
185	movdqu	xmm7,[esi]
186	pxor	xmm3,xmm0
187	movdqu	xmm6,[16+esi]
188	pxor	xmm3,xmm1
189db	102,15,56,0,253
190	pxor	xmm4,xmm3
191	movdqa	xmm3,xmm4
192	psrldq	xmm4,8
193	pslldq	xmm3,8
194	pxor	xmm1,xmm4
195	pxor	xmm0,xmm3
196db	102,15,56,0,245
197	pxor	xmm1,xmm7
198	movdqa	xmm7,xmm6
199	movdqa	xmm4,xmm0
200	movdqa	xmm3,xmm0
201	psllq	xmm0,5
202	pxor	xmm3,xmm0
203	psllq	xmm0,1
204	pxor	xmm0,xmm3
205db	102,15,58,68,242,0
206	movups	xmm5,[32+edx]
207	psllq	xmm0,57
208	movdqa	xmm3,xmm0
209	pslldq	xmm0,8
210	psrldq	xmm3,8
211	pxor	xmm0,xmm4
212	pxor	xmm1,xmm3
213	pshufd	xmm3,xmm7,78
214	movdqa	xmm4,xmm0
215	psrlq	xmm0,1
216	pxor	xmm3,xmm7
217	pxor	xmm1,xmm4
218db	102,15,58,68,250,17
219	movups	xmm2,[16+edx]
220	pxor	xmm4,xmm0
221	psrlq	xmm0,5
222	pxor	xmm0,xmm4
223	psrlq	xmm0,1
224	pxor	xmm0,xmm1
225db	102,15,58,68,221,0
226	lea	esi,[32+esi]
227	sub	ebx,32
228	ja	NEAR L$005mod_loop
229L$004even_tail:
230	pshufd	xmm4,xmm0,78
231	movdqa	xmm1,xmm0
232	pxor	xmm4,xmm0
233db	102,15,58,68,194,0
234db	102,15,58,68,202,17
235db	102,15,58,68,229,16
236	movdqa	xmm5,[ecx]
237	xorps	xmm0,xmm6
238	xorps	xmm1,xmm7
239	pxor	xmm3,xmm0
240	pxor	xmm3,xmm1
241	pxor	xmm4,xmm3
242	movdqa	xmm3,xmm4
243	psrldq	xmm4,8
244	pslldq	xmm3,8
245	pxor	xmm1,xmm4
246	pxor	xmm0,xmm3
247	movdqa	xmm4,xmm0
248	movdqa	xmm3,xmm0
249	psllq	xmm0,5
250	pxor	xmm3,xmm0
251	psllq	xmm0,1
252	pxor	xmm0,xmm3
253	psllq	xmm0,57
254	movdqa	xmm3,xmm0
255	pslldq	xmm0,8
256	psrldq	xmm3,8
257	pxor	xmm0,xmm4
258	pxor	xmm1,xmm3
259	movdqa	xmm4,xmm0
260	psrlq	xmm0,1
261	pxor	xmm1,xmm4
262	pxor	xmm4,xmm0
263	psrlq	xmm0,5
264	pxor	xmm0,xmm4
265	psrlq	xmm0,1
266	pxor	xmm0,xmm1
267	test	ebx,ebx
268	jnz	NEAR L$006done
269	movups	xmm2,[edx]
270L$003odd_tail:
271	movdqu	xmm3,[esi]
272db	102,15,56,0,221
273	pxor	xmm0,xmm3
274	movdqa	xmm1,xmm0
275	pshufd	xmm3,xmm0,78
276	pshufd	xmm4,xmm2,78
277	pxor	xmm3,xmm0
278	pxor	xmm4,xmm2
279db	102,15,58,68,194,0
280db	102,15,58,68,202,17
281db	102,15,58,68,220,0
282	xorps	xmm3,xmm0
283	xorps	xmm3,xmm1
284	movdqa	xmm4,xmm3
285	psrldq	xmm3,8
286	pslldq	xmm4,8
287	pxor	xmm1,xmm3
288	pxor	xmm0,xmm4
289	movdqa	xmm4,xmm0
290	movdqa	xmm3,xmm0
291	psllq	xmm0,5
292	pxor	xmm3,xmm0
293	psllq	xmm0,1
294	pxor	xmm0,xmm3
295	psllq	xmm0,57
296	movdqa	xmm3,xmm0
297	pslldq	xmm0,8
298	psrldq	xmm3,8
299	pxor	xmm0,xmm4
300	pxor	xmm1,xmm3
301	movdqa	xmm4,xmm0
302	psrlq	xmm0,1
303	pxor	xmm1,xmm4
304	pxor	xmm4,xmm0
305	psrlq	xmm0,5
306	pxor	xmm0,xmm4
307	psrlq	xmm0,1
308	pxor	xmm0,xmm1
309L$006done:
310db	102,15,56,0,197
311	movdqu	[eax],xmm0
312	pop	edi
313	pop	esi
314	pop	ebx
315	pop	ebp
316	ret
317align	64
318L$bswap:
319db	15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0
320db	1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,194
321db	71,72,65,83,72,32,102,111,114,32,120,56,54,44,32,67
322db	82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112
323db	112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62
324db	0
325%else
326; Work around https://bugzilla.nasm.us/show_bug.cgi?id=3392738
327ret
328%endif
329