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