1#include <machine/asm.h>
2.text
3.globl	gcm_gmult_4bit_x86
4.type	gcm_gmult_4bit_x86,@function
5.align	16
6gcm_gmult_4bit_x86:
7.L_gcm_gmult_4bit_x86_begin:
8	pushl	%ebp
9	pushl	%ebx
10	pushl	%esi
11	pushl	%edi
12	subl	$84,%esp
13	movl	104(%esp),%edi
14	movl	108(%esp),%esi
15	movl	(%edi),%ebp
16	movl	4(%edi),%edx
17	movl	8(%edi),%ecx
18	movl	12(%edi),%ebx
19	movl	$0,16(%esp)
20	movl	$471859200,20(%esp)
21	movl	$943718400,24(%esp)
22	movl	$610271232,28(%esp)
23	movl	$1887436800,32(%esp)
24	movl	$1822425088,36(%esp)
25	movl	$1220542464,40(%esp)
26	movl	$1423966208,44(%esp)
27	movl	$3774873600,48(%esp)
28	movl	$4246732800,52(%esp)
29	movl	$3644850176,56(%esp)
30	movl	$3311403008,60(%esp)
31	movl	$2441084928,64(%esp)
32	movl	$2376073216,68(%esp)
33	movl	$2847932416,72(%esp)
34	movl	$3051356160,76(%esp)
35	movl	%ebp,(%esp)
36	movl	%edx,4(%esp)
37	movl	%ecx,8(%esp)
38	movl	%ebx,12(%esp)
39	shrl	$20,%ebx
40	andl	$240,%ebx
41	movl	4(%esi,%ebx,1),%ebp
42	movl	(%esi,%ebx,1),%edx
43	movl	12(%esi,%ebx,1),%ecx
44	movl	8(%esi,%ebx,1),%ebx
45	xorl	%eax,%eax
46	movl	$15,%edi
47	jmp	.L000x86_loop
48.align	16
49.L000x86_loop:
50	movb	%bl,%al
51	shrdl	$4,%ecx,%ebx
52	andb	$15,%al
53	shrdl	$4,%edx,%ecx
54	shrdl	$4,%ebp,%edx
55	shrl	$4,%ebp
56	xorl	16(%esp,%eax,4),%ebp
57	movb	(%esp,%edi,1),%al
58	andb	$240,%al
59	xorl	8(%esi,%eax,1),%ebx
60	xorl	12(%esi,%eax,1),%ecx
61	xorl	(%esi,%eax,1),%edx
62	xorl	4(%esi,%eax,1),%ebp
63	decl	%edi
64	js	.L001x86_break
65	movb	%bl,%al
66	shrdl	$4,%ecx,%ebx
67	andb	$15,%al
68	shrdl	$4,%edx,%ecx
69	shrdl	$4,%ebp,%edx
70	shrl	$4,%ebp
71	xorl	16(%esp,%eax,4),%ebp
72	movb	(%esp,%edi,1),%al
73	shlb	$4,%al
74	xorl	8(%esi,%eax,1),%ebx
75	xorl	12(%esi,%eax,1),%ecx
76	xorl	(%esi,%eax,1),%edx
77	xorl	4(%esi,%eax,1),%ebp
78	jmp	.L000x86_loop
79.align	16
80.L001x86_break:
81	bswap	%ebx
82	bswap	%ecx
83	bswap	%edx
84	bswap	%ebp
85	movl	104(%esp),%edi
86	movl	%ebx,12(%edi)
87	movl	%ecx,8(%edi)
88	movl	%edx,4(%edi)
89	movl	%ebp,(%edi)
90	addl	$84,%esp
91	popl	%edi
92	popl	%esi
93	popl	%ebx
94	popl	%ebp
95	ret
96.size	gcm_gmult_4bit_x86,.-.L_gcm_gmult_4bit_x86_begin
97.globl	gcm_ghash_4bit_x86
98.type	gcm_ghash_4bit_x86,@function
99.align	16
100gcm_ghash_4bit_x86:
101.L_gcm_ghash_4bit_x86_begin:
102	pushl	%ebp
103	pushl	%ebx
104	pushl	%esi
105	pushl	%edi
106	subl	$84,%esp
107	movl	104(%esp),%ebx
108	movl	108(%esp),%esi
109	movl	112(%esp),%edi
110	movl	116(%esp),%ecx
111	addl	%edi,%ecx
112	movl	%ecx,116(%esp)
113	movl	(%ebx),%ebp
114	movl	4(%ebx),%edx
115	movl	8(%ebx),%ecx
116	movl	12(%ebx),%ebx
117	movl	$0,16(%esp)
118	movl	$471859200,20(%esp)
119	movl	$943718400,24(%esp)
120	movl	$610271232,28(%esp)
121	movl	$1887436800,32(%esp)
122	movl	$1822425088,36(%esp)
123	movl	$1220542464,40(%esp)
124	movl	$1423966208,44(%esp)
125	movl	$3774873600,48(%esp)
126	movl	$4246732800,52(%esp)
127	movl	$3644850176,56(%esp)
128	movl	$3311403008,60(%esp)
129	movl	$2441084928,64(%esp)
130	movl	$2376073216,68(%esp)
131	movl	$2847932416,72(%esp)
132	movl	$3051356160,76(%esp)
133.align	16
134.L002x86_outer_loop:
135	xorl	12(%edi),%ebx
136	xorl	8(%edi),%ecx
137	xorl	4(%edi),%edx
138	xorl	(%edi),%ebp
139	movl	%ebx,12(%esp)
140	movl	%ecx,8(%esp)
141	movl	%edx,4(%esp)
142	movl	%ebp,(%esp)
143	shrl	$20,%ebx
144	andl	$240,%ebx
145	movl	4(%esi,%ebx,1),%ebp
146	movl	(%esi,%ebx,1),%edx
147	movl	12(%esi,%ebx,1),%ecx
148	movl	8(%esi,%ebx,1),%ebx
149	xorl	%eax,%eax
150	movl	$15,%edi
151	jmp	.L003x86_loop
152.align	16
153.L003x86_loop:
154	movb	%bl,%al
155	shrdl	$4,%ecx,%ebx
156	andb	$15,%al
157	shrdl	$4,%edx,%ecx
158	shrdl	$4,%ebp,%edx
159	shrl	$4,%ebp
160	xorl	16(%esp,%eax,4),%ebp
161	movb	(%esp,%edi,1),%al
162	andb	$240,%al
163	xorl	8(%esi,%eax,1),%ebx
164	xorl	12(%esi,%eax,1),%ecx
165	xorl	(%esi,%eax,1),%edx
166	xorl	4(%esi,%eax,1),%ebp
167	decl	%edi
168	js	.L004x86_break
169	movb	%bl,%al
170	shrdl	$4,%ecx,%ebx
171	andb	$15,%al
172	shrdl	$4,%edx,%ecx
173	shrdl	$4,%ebp,%edx
174	shrl	$4,%ebp
175	xorl	16(%esp,%eax,4),%ebp
176	movb	(%esp,%edi,1),%al
177	shlb	$4,%al
178	xorl	8(%esi,%eax,1),%ebx
179	xorl	12(%esi,%eax,1),%ecx
180	xorl	(%esi,%eax,1),%edx
181	xorl	4(%esi,%eax,1),%ebp
182	jmp	.L003x86_loop
183.align	16
184.L004x86_break:
185	bswap	%ebx
186	bswap	%ecx
187	bswap	%edx
188	bswap	%ebp
189	movl	112(%esp),%edi
190	leal	16(%edi),%edi
191	cmpl	116(%esp),%edi
192	movl	%edi,112(%esp)
193	jb	.L002x86_outer_loop
194	movl	104(%esp),%edi
195	movl	%ebx,12(%edi)
196	movl	%ecx,8(%edi)
197	movl	%edx,4(%edi)
198	movl	%ebp,(%edi)
199	addl	$84,%esp
200	popl	%edi
201	popl	%esi
202	popl	%ebx
203	popl	%ebp
204	ret
205.size	gcm_ghash_4bit_x86,.-.L_gcm_ghash_4bit_x86_begin
206.type	_mmx_gmult_4bit_inner,@function
207.align	16
208_mmx_gmult_4bit_inner:
209	xorl	%ecx,%ecx
210	movl	%ebx,%edx
211	movb	%dl,%cl
212	shlb	$4,%cl
213	andl	$240,%edx
214	movq	8(%esi,%ecx,1),%mm0
215	movq	(%esi,%ecx,1),%mm1
216	movd	%mm0,%ebp
217	psrlq	$4,%mm0
218	movq	%mm1,%mm2
219	psrlq	$4,%mm1
220	pxor	8(%esi,%edx,1),%mm0
221	movb	14(%edi),%cl
222	psllq	$60,%mm2
223	andl	$15,%ebp
224	pxor	(%esi,%edx,1),%mm1
225	movl	%ecx,%edx
226	movd	%mm0,%ebx
227	pxor	%mm2,%mm0
228	shlb	$4,%cl
229	psrlq	$4,%mm0
230	movq	%mm1,%mm2
231	psrlq	$4,%mm1
232	pxor	8(%esi,%ecx,1),%mm0
233	psllq	$60,%mm2
234	andl	$240,%edx
235	pxor	(%eax,%ebp,8),%mm1
236	andl	$15,%ebx
237	pxor	(%esi,%ecx,1),%mm1
238	movd	%mm0,%ebp
239	pxor	%mm2,%mm0
240	psrlq	$4,%mm0
241	movq	%mm1,%mm2
242	psrlq	$4,%mm1
243	pxor	8(%esi,%edx,1),%mm0
244	movb	13(%edi),%cl
245	psllq	$60,%mm2
246	pxor	(%eax,%ebx,8),%mm1
247	andl	$15,%ebp
248	pxor	(%esi,%edx,1),%mm1
249	movl	%ecx,%edx
250	movd	%mm0,%ebx
251	pxor	%mm2,%mm0
252	shlb	$4,%cl
253	psrlq	$4,%mm0
254	movq	%mm1,%mm2
255	psrlq	$4,%mm1
256	pxor	8(%esi,%ecx,1),%mm0
257	psllq	$60,%mm2
258	andl	$240,%edx
259	pxor	(%eax,%ebp,8),%mm1
260	andl	$15,%ebx
261	pxor	(%esi,%ecx,1),%mm1
262	movd	%mm0,%ebp
263	pxor	%mm2,%mm0
264	psrlq	$4,%mm0
265	movq	%mm1,%mm2
266	psrlq	$4,%mm1
267	pxor	8(%esi,%edx,1),%mm0
268	movb	12(%edi),%cl
269	psllq	$60,%mm2
270	pxor	(%eax,%ebx,8),%mm1
271	andl	$15,%ebp
272	pxor	(%esi,%edx,1),%mm1
273	movl	%ecx,%edx
274	movd	%mm0,%ebx
275	pxor	%mm2,%mm0
276	shlb	$4,%cl
277	psrlq	$4,%mm0
278	movq	%mm1,%mm2
279	psrlq	$4,%mm1
280	pxor	8(%esi,%ecx,1),%mm0
281	psllq	$60,%mm2
282	andl	$240,%edx
283	pxor	(%eax,%ebp,8),%mm1
284	andl	$15,%ebx
285	pxor	(%esi,%ecx,1),%mm1
286	movd	%mm0,%ebp
287	pxor	%mm2,%mm0
288	psrlq	$4,%mm0
289	movq	%mm1,%mm2
290	psrlq	$4,%mm1
291	pxor	8(%esi,%edx,1),%mm0
292	movb	11(%edi),%cl
293	psllq	$60,%mm2
294	pxor	(%eax,%ebx,8),%mm1
295	andl	$15,%ebp
296	pxor	(%esi,%edx,1),%mm1
297	movl	%ecx,%edx
298	movd	%mm0,%ebx
299	pxor	%mm2,%mm0
300	shlb	$4,%cl
301	psrlq	$4,%mm0
302	movq	%mm1,%mm2
303	psrlq	$4,%mm1
304	pxor	8(%esi,%ecx,1),%mm0
305	psllq	$60,%mm2
306	andl	$240,%edx
307	pxor	(%eax,%ebp,8),%mm1
308	andl	$15,%ebx
309	pxor	(%esi,%ecx,1),%mm1
310	movd	%mm0,%ebp
311	pxor	%mm2,%mm0
312	psrlq	$4,%mm0
313	movq	%mm1,%mm2
314	psrlq	$4,%mm1
315	pxor	8(%esi,%edx,1),%mm0
316	movb	10(%edi),%cl
317	psllq	$60,%mm2
318	pxor	(%eax,%ebx,8),%mm1
319	andl	$15,%ebp
320	pxor	(%esi,%edx,1),%mm1
321	movl	%ecx,%edx
322	movd	%mm0,%ebx
323	pxor	%mm2,%mm0
324	shlb	$4,%cl
325	psrlq	$4,%mm0
326	movq	%mm1,%mm2
327	psrlq	$4,%mm1
328	pxor	8(%esi,%ecx,1),%mm0
329	psllq	$60,%mm2
330	andl	$240,%edx
331	pxor	(%eax,%ebp,8),%mm1
332	andl	$15,%ebx
333	pxor	(%esi,%ecx,1),%mm1
334	movd	%mm0,%ebp
335	pxor	%mm2,%mm0
336	psrlq	$4,%mm0
337	movq	%mm1,%mm2
338	psrlq	$4,%mm1
339	pxor	8(%esi,%edx,1),%mm0
340	movb	9(%edi),%cl
341	psllq	$60,%mm2
342	pxor	(%eax,%ebx,8),%mm1
343	andl	$15,%ebp
344	pxor	(%esi,%edx,1),%mm1
345	movl	%ecx,%edx
346	movd	%mm0,%ebx
347	pxor	%mm2,%mm0
348	shlb	$4,%cl
349	psrlq	$4,%mm0
350	movq	%mm1,%mm2
351	psrlq	$4,%mm1
352	pxor	8(%esi,%ecx,1),%mm0
353	psllq	$60,%mm2
354	andl	$240,%edx
355	pxor	(%eax,%ebp,8),%mm1
356	andl	$15,%ebx
357	pxor	(%esi,%ecx,1),%mm1
358	movd	%mm0,%ebp
359	pxor	%mm2,%mm0
360	psrlq	$4,%mm0
361	movq	%mm1,%mm2
362	psrlq	$4,%mm1
363	pxor	8(%esi,%edx,1),%mm0
364	movb	8(%edi),%cl
365	psllq	$60,%mm2
366	pxor	(%eax,%ebx,8),%mm1
367	andl	$15,%ebp
368	pxor	(%esi,%edx,1),%mm1
369	movl	%ecx,%edx
370	movd	%mm0,%ebx
371	pxor	%mm2,%mm0
372	shlb	$4,%cl
373	psrlq	$4,%mm0
374	movq	%mm1,%mm2
375	psrlq	$4,%mm1
376	pxor	8(%esi,%ecx,1),%mm0
377	psllq	$60,%mm2
378	andl	$240,%edx
379	pxor	(%eax,%ebp,8),%mm1
380	andl	$15,%ebx
381	pxor	(%esi,%ecx,1),%mm1
382	movd	%mm0,%ebp
383	pxor	%mm2,%mm0
384	psrlq	$4,%mm0
385	movq	%mm1,%mm2
386	psrlq	$4,%mm1
387	pxor	8(%esi,%edx,1),%mm0
388	movb	7(%edi),%cl
389	psllq	$60,%mm2
390	pxor	(%eax,%ebx,8),%mm1
391	andl	$15,%ebp
392	pxor	(%esi,%edx,1),%mm1
393	movl	%ecx,%edx
394	movd	%mm0,%ebx
395	pxor	%mm2,%mm0
396	shlb	$4,%cl
397	psrlq	$4,%mm0
398	movq	%mm1,%mm2
399	psrlq	$4,%mm1
400	pxor	8(%esi,%ecx,1),%mm0
401	psllq	$60,%mm2
402	andl	$240,%edx
403	pxor	(%eax,%ebp,8),%mm1
404	andl	$15,%ebx
405	pxor	(%esi,%ecx,1),%mm1
406	movd	%mm0,%ebp
407	pxor	%mm2,%mm0
408	psrlq	$4,%mm0
409	movq	%mm1,%mm2
410	psrlq	$4,%mm1
411	pxor	8(%esi,%edx,1),%mm0
412	movb	6(%edi),%cl
413	psllq	$60,%mm2
414	pxor	(%eax,%ebx,8),%mm1
415	andl	$15,%ebp
416	pxor	(%esi,%edx,1),%mm1
417	movl	%ecx,%edx
418	movd	%mm0,%ebx
419	pxor	%mm2,%mm0
420	shlb	$4,%cl
421	psrlq	$4,%mm0
422	movq	%mm1,%mm2
423	psrlq	$4,%mm1
424	pxor	8(%esi,%ecx,1),%mm0
425	psllq	$60,%mm2
426	andl	$240,%edx
427	pxor	(%eax,%ebp,8),%mm1
428	andl	$15,%ebx
429	pxor	(%esi,%ecx,1),%mm1
430	movd	%mm0,%ebp
431	pxor	%mm2,%mm0
432	psrlq	$4,%mm0
433	movq	%mm1,%mm2
434	psrlq	$4,%mm1
435	pxor	8(%esi,%edx,1),%mm0
436	movb	5(%edi),%cl
437	psllq	$60,%mm2
438	pxor	(%eax,%ebx,8),%mm1
439	andl	$15,%ebp
440	pxor	(%esi,%edx,1),%mm1
441	movl	%ecx,%edx
442	movd	%mm0,%ebx
443	pxor	%mm2,%mm0
444	shlb	$4,%cl
445	psrlq	$4,%mm0
446	movq	%mm1,%mm2
447	psrlq	$4,%mm1
448	pxor	8(%esi,%ecx,1),%mm0
449	psllq	$60,%mm2
450	andl	$240,%edx
451	pxor	(%eax,%ebp,8),%mm1
452	andl	$15,%ebx
453	pxor	(%esi,%ecx,1),%mm1
454	movd	%mm0,%ebp
455	pxor	%mm2,%mm0
456	psrlq	$4,%mm0
457	movq	%mm1,%mm2
458	psrlq	$4,%mm1
459	pxor	8(%esi,%edx,1),%mm0
460	movb	4(%edi),%cl
461	psllq	$60,%mm2
462	pxor	(%eax,%ebx,8),%mm1
463	andl	$15,%ebp
464	pxor	(%esi,%edx,1),%mm1
465	movl	%ecx,%edx
466	movd	%mm0,%ebx
467	pxor	%mm2,%mm0
468	shlb	$4,%cl
469	psrlq	$4,%mm0
470	movq	%mm1,%mm2
471	psrlq	$4,%mm1
472	pxor	8(%esi,%ecx,1),%mm0
473	psllq	$60,%mm2
474	andl	$240,%edx
475	pxor	(%eax,%ebp,8),%mm1
476	andl	$15,%ebx
477	pxor	(%esi,%ecx,1),%mm1
478	movd	%mm0,%ebp
479	pxor	%mm2,%mm0
480	psrlq	$4,%mm0
481	movq	%mm1,%mm2
482	psrlq	$4,%mm1
483	pxor	8(%esi,%edx,1),%mm0
484	movb	3(%edi),%cl
485	psllq	$60,%mm2
486	pxor	(%eax,%ebx,8),%mm1
487	andl	$15,%ebp
488	pxor	(%esi,%edx,1),%mm1
489	movl	%ecx,%edx
490	movd	%mm0,%ebx
491	pxor	%mm2,%mm0
492	shlb	$4,%cl
493	psrlq	$4,%mm0
494	movq	%mm1,%mm2
495	psrlq	$4,%mm1
496	pxor	8(%esi,%ecx,1),%mm0
497	psllq	$60,%mm2
498	andl	$240,%edx
499	pxor	(%eax,%ebp,8),%mm1
500	andl	$15,%ebx
501	pxor	(%esi,%ecx,1),%mm1
502	movd	%mm0,%ebp
503	pxor	%mm2,%mm0
504	psrlq	$4,%mm0
505	movq	%mm1,%mm2
506	psrlq	$4,%mm1
507	pxor	8(%esi,%edx,1),%mm0
508	movb	2(%edi),%cl
509	psllq	$60,%mm2
510	pxor	(%eax,%ebx,8),%mm1
511	andl	$15,%ebp
512	pxor	(%esi,%edx,1),%mm1
513	movl	%ecx,%edx
514	movd	%mm0,%ebx
515	pxor	%mm2,%mm0
516	shlb	$4,%cl
517	psrlq	$4,%mm0
518	movq	%mm1,%mm2
519	psrlq	$4,%mm1
520	pxor	8(%esi,%ecx,1),%mm0
521	psllq	$60,%mm2
522	andl	$240,%edx
523	pxor	(%eax,%ebp,8),%mm1
524	andl	$15,%ebx
525	pxor	(%esi,%ecx,1),%mm1
526	movd	%mm0,%ebp
527	pxor	%mm2,%mm0
528	psrlq	$4,%mm0
529	movq	%mm1,%mm2
530	psrlq	$4,%mm1
531	pxor	8(%esi,%edx,1),%mm0
532	movb	1(%edi),%cl
533	psllq	$60,%mm2
534	pxor	(%eax,%ebx,8),%mm1
535	andl	$15,%ebp
536	pxor	(%esi,%edx,1),%mm1
537	movl	%ecx,%edx
538	movd	%mm0,%ebx
539	pxor	%mm2,%mm0
540	shlb	$4,%cl
541	psrlq	$4,%mm0
542	movq	%mm1,%mm2
543	psrlq	$4,%mm1
544	pxor	8(%esi,%ecx,1),%mm0
545	psllq	$60,%mm2
546	andl	$240,%edx
547	pxor	(%eax,%ebp,8),%mm1
548	andl	$15,%ebx
549	pxor	(%esi,%ecx,1),%mm1
550	movd	%mm0,%ebp
551	pxor	%mm2,%mm0
552	psrlq	$4,%mm0
553	movq	%mm1,%mm2
554	psrlq	$4,%mm1
555	pxor	8(%esi,%edx,1),%mm0
556	movb	(%edi),%cl
557	psllq	$60,%mm2
558	pxor	(%eax,%ebx,8),%mm1
559	andl	$15,%ebp
560	pxor	(%esi,%edx,1),%mm1
561	movl	%ecx,%edx
562	movd	%mm0,%ebx
563	pxor	%mm2,%mm0
564	shlb	$4,%cl
565	psrlq	$4,%mm0
566	movq	%mm1,%mm2
567	psrlq	$4,%mm1
568	pxor	8(%esi,%ecx,1),%mm0
569	psllq	$60,%mm2
570	andl	$240,%edx
571	pxor	(%eax,%ebp,8),%mm1
572	andl	$15,%ebx
573	pxor	(%esi,%ecx,1),%mm1
574	movd	%mm0,%ebp
575	pxor	%mm2,%mm0
576	psrlq	$4,%mm0
577	movq	%mm1,%mm2
578	psrlq	$4,%mm1
579	pxor	8(%esi,%edx,1),%mm0
580	psllq	$60,%mm2
581	pxor	(%eax,%ebx,8),%mm1
582	andl	$15,%ebp
583	pxor	(%esi,%edx,1),%mm1
584	movd	%mm0,%ebx
585	pxor	%mm2,%mm0
586	movl	4(%eax,%ebp,8),%edi
587	psrlq	$32,%mm0
588	movd	%mm1,%edx
589	psrlq	$32,%mm1
590	movd	%mm0,%ecx
591	movd	%mm1,%ebp
592	shll	$4,%edi
593	bswap	%ebx
594	bswap	%edx
595	bswap	%ecx
596	xorl	%edi,%ebp
597	bswap	%ebp
598	ret
599.size	_mmx_gmult_4bit_inner,.-_mmx_gmult_4bit_inner
600.globl	gcm_gmult_4bit_mmx
601.type	gcm_gmult_4bit_mmx,@function
602.align	16
603gcm_gmult_4bit_mmx:
604.L_gcm_gmult_4bit_mmx_begin:
605	pushl	%ebp
606	pushl	%ebx
607	pushl	%esi
608	pushl	%edi
609	movl	20(%esp),%edi
610	movl	24(%esp),%esi
611	call	.L005pic_point
612.L005pic_point:
613	popl	%eax
614	leal	.Lrem_4bit-.L005pic_point(%eax),%eax
615	movzbl	15(%edi),%ebx
616	call	_mmx_gmult_4bit_inner
617	movl	20(%esp),%edi
618	emms
619	movl	%ebx,12(%edi)
620	movl	%edx,4(%edi)
621	movl	%ecx,8(%edi)
622	movl	%ebp,(%edi)
623	popl	%edi
624	popl	%esi
625	popl	%ebx
626	popl	%ebp
627	ret
628.size	gcm_gmult_4bit_mmx,.-.L_gcm_gmult_4bit_mmx_begin
629.globl	gcm_ghash_4bit_mmx
630.type	gcm_ghash_4bit_mmx,@function
631.align	16
632gcm_ghash_4bit_mmx:
633.L_gcm_ghash_4bit_mmx_begin:
634	pushl	%ebp
635	pushl	%ebx
636	pushl	%esi
637	pushl	%edi
638	movl	20(%esp),%ebp
639	movl	24(%esp),%esi
640	movl	28(%esp),%edi
641	movl	32(%esp),%ecx
642	call	.L006pic_point
643.L006pic_point:
644	popl	%eax
645	leal	.Lrem_4bit-.L006pic_point(%eax),%eax
646	addl	%edi,%ecx
647	movl	%ecx,32(%esp)
648	subl	$20,%esp
649	movl	12(%ebp),%ebx
650	movl	4(%ebp),%edx
651	movl	8(%ebp),%ecx
652	movl	(%ebp),%ebp
653	jmp	.L007mmx_outer_loop
654.align	16
655.L007mmx_outer_loop:
656	xorl	12(%edi),%ebx
657	xorl	4(%edi),%edx
658	xorl	8(%edi),%ecx
659	xorl	(%edi),%ebp
660	movl	%edi,48(%esp)
661	movl	%ebx,12(%esp)
662	movl	%edx,4(%esp)
663	movl	%ecx,8(%esp)
664	movl	%ebp,(%esp)
665	movl	%esp,%edi
666	shrl	$24,%ebx
667	call	_mmx_gmult_4bit_inner
668	movl	48(%esp),%edi
669	leal	16(%edi),%edi
670	cmpl	52(%esp),%edi
671	jb	.L007mmx_outer_loop
672	movl	40(%esp),%edi
673	emms
674	movl	%ebx,12(%edi)
675	movl	%edx,4(%edi)
676	movl	%ecx,8(%edi)
677	movl	%ebp,(%edi)
678	addl	$20,%esp
679	popl	%edi
680	popl	%esi
681	popl	%ebx
682	popl	%ebp
683	ret
684.size	gcm_ghash_4bit_mmx,.-.L_gcm_ghash_4bit_mmx_begin
685.align	64
686.Lrem_4bit:
687.long	0,0,0,29491200,0,58982400,0,38141952
688.long	0,117964800,0,113901568,0,76283904,0,88997888
689.long	0,235929600,0,265420800,0,227803136,0,206962688
690.long	0,152567808,0,148504576,0,177995776,0,190709760
691.align	64
692.L008rem_8bit:
693.value	0,450,900,582,1800,1738,1164,1358
694.value	3600,4050,3476,3158,2328,2266,2716,2910
695.value	7200,7650,8100,7782,6952,6890,6316,6510
696.value	4656,5106,4532,4214,5432,5370,5820,6014
697.value	14400,14722,15300,14854,16200,16010,15564,15630
698.value	13904,14226,13780,13334,12632,12442,13020,13086
699.value	9312,9634,10212,9766,9064,8874,8428,8494
700.value	10864,11186,10740,10294,11640,11450,12028,12094
701.value	28800,28994,29444,29382,30600,30282,29708,30158
702.value	32400,32594,32020,31958,31128,30810,31260,31710
703.value	27808,28002,28452,28390,27560,27242,26668,27118
704.value	25264,25458,24884,24822,26040,25722,26172,26622
705.value	18624,18690,19268,19078,20424,19978,19532,19854
706.value	18128,18194,17748,17558,16856,16410,16988,17310
707.value	21728,21794,22372,22182,21480,21034,20588,20910
708.value	23280,23346,22900,22710,24056,23610,24188,24510
709.value	57600,57538,57988,58182,58888,59338,58764,58446
710.value	61200,61138,60564,60758,59416,59866,60316,59998
711.value	64800,64738,65188,65382,64040,64490,63916,63598
712.value	62256,62194,61620,61814,62520,62970,63420,63102
713.value	55616,55426,56004,56070,56904,57226,56780,56334
714.value	55120,54930,54484,54550,53336,53658,54236,53790
715.value	50528,50338,50916,50982,49768,50090,49644,49198
716.value	52080,51890,51444,51510,52344,52666,53244,52798
717.value	37248,36930,37380,37830,38536,38730,38156,38094
718.value	40848,40530,39956,40406,39064,39258,39708,39646
719.value	36256,35938,36388,36838,35496,35690,35116,35054
720.value	33712,33394,32820,33270,33976,34170,34620,34558
721.value	43456,43010,43588,43910,44744,44810,44364,44174
722.value	42960,42514,42068,42390,41176,41242,41820,41630
723.value	46560,46114,46692,47014,45800,45866,45420,45230
724.value	48112,47666,47220,47542,48376,48442,49020,48830
725.byte	71,72,65,83,72,32,102,111,114,32,120,56,54,44,32,67
726.byte	82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112
727.byte	112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62
728.byte	0
729