1/*
2 * CDDL HEADER START
3 *
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
7 *
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
12 *
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
18 *
19 * CDDL HEADER END
20 */
21/*
22 * Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
23 * Use is subject to license terms.
24 */
25
26#pragma ident	"%Z%%M%	%I%	%E% SMI"
27
28#include <sys/asm_linkage.h>
29#include <sys/stack.h>
30
31#ifdef _KERNEL
32
33#include <sys/privregs.h>
34#include <sys/regset.h>
35#include <sys/vis.h>
36#include <sys/machthread.h>
37
38#endif /* _KERNEL */
39
40#if defined(lint)
41
42#ifdef _KERNEL
43
44/* ARGSUSED */
45int
46sha1_savefp(kfpu_t *fpu, int svfp_ok)
47{ return(0); }
48
49/* ARGSUSED */
50void
51sha1_restorefp(kfpu_t *fpu)
52{}
53
54#endif /* _KERNEL */
55
56/* ARGSUSED */
57void
58SHA1TransformVIS(uint64_t *X0, uint64_t *blk, uint32_t *cstate, uint64_t *VIS)
59{}
60
61#else /* defined(lint) */
62
63#ifdef _KERNEL
64
65#define	FZERO				\
66	fzero	%f0			;\
67	fzero	%f2			;\
68	faddd	%f0, %f2, %f4		;\
69	fmuld	%f0, %f2, %f6		;\
70	faddd	%f0, %f2, %f8		;\
71	fmuld	%f0, %f2, %f10		;\
72	faddd	%f0, %f2, %f12		;\
73	fmuld	%f0, %f2, %f14		;\
74	faddd	%f0, %f2, %f16		;\
75	fmuld	%f0, %f2, %f18		;\
76	faddd	%f0, %f2, %f20		;\
77	fmuld	%f0, %f2, %f22		;\
78	faddd	%f0, %f2, %f24		;\
79	fmuld	%f0, %f2, %f26		;\
80	faddd	%f0, %f2, %f28		;\
81	fmuld	%f0, %f2, %f30		;\
82	faddd	%f0, %f2, %f32		;\
83	fmuld	%f0, %f2, %f34		;\
84	faddd	%f0, %f2, %f36		;\
85	fmuld	%f0, %f2, %f38		;\
86	faddd	%f0, %f2, %f40		;\
87	fmuld	%f0, %f2, %f42		;\
88	faddd	%f0, %f2, %f44		;\
89	fmuld	%f0, %f2, %f46		;\
90	faddd	%f0, %f2, %f48		;\
91	fmuld	%f0, %f2, %f50		;\
92	faddd	%f0, %f2, %f52		;\
93	fmuld	%f0, %f2, %f54		;\
94	faddd	%f0, %f2, %f56		;\
95	fmuld	%f0, %f2, %f58		;\
96	faddd	%f0, %f2, %f60		;\
97	fmuld	%f0, %f2, %f62
98
99#include "assym.h"
100
101	ENTRY(sha1_savefp)
102	rd	%fprs, %o2
103	st	%o2, [%o0 + FPU_FPRS]
104	andcc	%o2, FPRS_FEF, %g0
105	bz,a,pt	%icc, 1f
106	wr	%g0, FPRS_FEF, %fprs
107	brz,pt	%o1, 2f
108	nop
109	rd	%gsr, %o3
110	stx	%o3, [%o0 + FPU_GSR]
111	stx	%fsr, [%o0 + FPU_FSR]
112	BSTORE_FPREGS(%o0, %o4)
1131:
114	retl
115	or	%g0, 1, %o0
1162:
117	retl
118	clr	%o0
119	SET_SIZE(sha1_savefp)
120
121	ENTRY(sha1_restorefp)
122	ld	[%o0 + FPU_FPRS], %o1
123	andcc	%o1, FPRS_FEF, %g0
124	bz,pt	%icc, 1f
125	nop
126	BLOAD_FPREGS(%o0, %o2)
127	wr	%o1, 0, %fprs
128	ldx	[%o0 + FPU_FSR], %fsr
129	ldx	[%o0 + FPU_GSR], %o3
130	retl
131	wr	%o3, 0, %gsr
1321:
133	FZERO
134	retl
135	wr	%o1, 0, %fprs
136	SET_SIZE(sha1_restorefp)
137
138#endif /* _KERNEL */
139
140	ENTRY(SHA1TransformVIS)
141	save		%sp, -SA(MINFRAME), %sp
142
143	ld		[%i2 + 0], %o0
144	mov		5, %g1
145
146	ld		[%i2 + 4], %o1
147	alignaddr	%g0, %g1, %g0
148
149	ld		[%i2 + 8], %o2
150
151	ld		[%i2 + 12], %o3
152
153	ld		[%i2 + 16], %o4
154
155	ld		[%i3 + 0 + 16], %g1
156
157! Starting round 0
158	sll		%o0, 5, %l0
159	and		%o1, %o2, %l1
160	ld		[%i1 + (0 * 4)], %l2
161
162	srl		%o0, 27, %l3
163	andn		%o3, %o1, %l4
164	ld		[%i1 + 0], %f16
165
166	sll		%o1, 30, %l5
167	xor		%l1, %l4, %l1
168	ld		[%i1 + 4], %f17
169
170	srl		%o1,  2, %l7
171	or		%l0, %l3, %l0
172	ld		[%i1 + 8], %f30
173
174	add		%l0, %l1, %l0
175	add		%o4, %g1, %l1
176	ld		[%i1 + 12], %f31
177
178	or		%l5, %l7, %o1
179	add		%l0, %l1, %l0
180	ld		[%i1 + 16], %f28
181
182	add		%l0, %l2, %o5
183	ld		[%i1 + 20], %f29
184
185! Starting round 1
186	sll		%o5, 5, %l0
187	and		%o0, %o1, %l1
188	ld		[%i1 + (1 * 4)], %l2
189
190	srl		%o5, 27, %l3
191	andn		%o2, %o0, %l4
192	ld		[%i1 + 24], %f26
193
194	sll		%o0, 30, %l5
195	xor		%l1, %l4, %l1
196	ld		[%i1 + 28], %f27
197	fzero		%f52
198
199	srl		%o0,  2, %l7
200	or		%l0, %l3, %l0
201	ld		[%i1 + 32], %f24
202
203	add		%l0, %l1, %l0
204	add		%o3, %g1, %l1
205	ld		[%i1 + 36], %f25
206
207	or		%l5, %l7, %o0
208	add		%l0, %l1, %l0
209	ld		[%i1 + 40], %f22
210
211	add		%l0, %l2, %o4
212	ld		[%i1 + 44], %f23
213
214! Starting round 2
215	sll		%o4, 5, %l0
216	and		%o5, %o0, %l1
217	ld		[%i1 + (2 * 4)], %l2
218
219	srl		%o4, 27, %l3
220	andn		%o1, %o5, %l4
221	ld		[%i1 + 48], %f20
222
223	sll		%o5, 30, %l5
224	xor		%l1, %l4, %l1
225	ld		[%i1 + 52], %f21
226
227	srl		%o5,  2, %l7
228	or		%l0, %l3, %l0
229	fxor		%f16, %f30, %f38
230	ld		[%i1 + 56], %f18
231
232	add		%l0, %l1, %l0
233	add		%o2, %g1, %l1
234	fxor		%f28, %f30, %f14
235	ld		[%i1 + 60], %f19
236
237	or		%l5, %l7, %o5
238	add		%l0, %l1, %l0
239	ld		[%i1 + 52], %f0
240
241	add		%l0, %l2, %o3
242
243! Starting round 3
244	sll		%o3, 5, %l0
245	and		%o4, %o5, %l1
246	ld		[%i1 + (3 * 4)], %l2
247
248	srl		%o3, 27, %l3
249	andn		%o0, %o4, %l4
250	ld		[%i1 + 56], %f1
251
252	sll		%o4, 30, %l5
253	xor		%l1, %l4, %l1
254	ldd		[%i3 + 8], %f54
255	fxor		%f38, %f24, %f38
256
257	srl		%o4,  2, %l7
258	or		%l0, %l3, %l0
259	ldd		[%i3 + 0], %f50
260	fxor		%f14, %f22, %f14
261
262	add		%l0, %l1, %l0
263	add		%o1, %g1, %l1
264	ld		[%i1 + 60], %f8
265
266	or		%l5, %l7, %o4
267	add		%l0, %l1, %l0
268
269	add		%l0, %l2, %o2
270
271! Starting round 4
272	and		%o3, %o4, %l1
273	sll		%o2, 5, %l0
274	ld		[%i1 + (4 * 4)], %l2
275	fxor		%f38, %f0, %f36
276
277	srl		%o2, 27, %l3
278	andn		%o5, %o3, %l4
279	fxors		%f14, %f8, %f12
280
281	sll		%o3, 30, %l5
282	xor		%l1, %l4, %l1
283	fxor		%f28, %f30, %f14
284
285	srl		%o3,  2, %l7
286	or		%l0, %l3, %l0
287	fand		%f50, %f36, %f2
288
289	add		%l0, %l1, %l0
290	add		%o0, %g1, %l1
291	fand		%f50, %f12, %f10
292
293	or		%l5, %l7, %o3
294	add		%l0, %l1, %l0
295	fpadd32		%f36, %f36, %f4
296
297	add		%l0, %l2, %o1
298! Starting round 5
299	and		%o2, %o3, %l1
300	sll		%o1, 5, %l0
301	ld		[%i1 + (5 * 4)], %l2
302	faligndata	%f52, %f2, %f2
303
304	srl		%o1, 27, %l3
305	andn		%o4, %o2, %l4
306	faligndata	%f52, %f10, %f10
307
308	sll		%o2, 30, %l5
309	xor		%l1, %l4, %l1
310	fpadd32s	%f12, %f12, %f12
311
312	srl		%o2,  2, %l7
313	or		%l0, %l3, %l0
314	fxor		%f26, %f28, %f38
315	fmul8x16	%f2, %f54, %f6
316
317	add		%l0, %l1, %l0
318	add		%o5, %g1, %l1
319	fxor		%f14, %f22, %f14
320	fmul8x16	%f3, %f54, %f2
321
322	or		%l5, %l7, %o2
323	add		%l0, %l1, %l0
324	fmul8x16	%f10, %f54, %f10
325
326	add		%l0, %l2, %o0
327
328! Starting round 6
329	and		%o1, %o2, %l1
330	sll		%o0, 5, %l0
331	ld		[%i1 + (6 * 4)], %l2
332	fxor		%f38, %f20, %f38
333
334	srl		%o0, 27, %l3
335	andn		%o3, %o1, %l4
336	fors		%f4, %f7, %f8
337	st		%f8, [%i0 + (16*4) + (0)]
338
339	sll		%o1, 30, %l5
340	xor		%l1, %l4, %l1
341	fors		%f5, %f3, %f0
342	st		%f0, [%i0 + (16*4) + (4)]
343
344	srl		%o1,  2, %l7
345	or		%l0, %l3, %l0
346	fors		%f12, %f11, %f1
347	st		%f1, [%i0 + (16*4) + (8)]
348
349	add		%l0, %l1, %l0
350	add		%o4, %g1, %l1
351	fors		%f4, %f7, %f16
352
353	or		%l5, %l7, %o1
354	add		%l0, %l1, %l0
355	fors		%f5, %f3, %f17
356
357	add		%l0, %l2, %o5
358	fors		%f12, %f11, %f9
359
360! Starting round 7
361	and		%o0, %o1, %l1
362	sll		%o5, 5, %l0
363	ld		[%i1 + (7 * 4)], %l2
364	fxor		%f38, %f0, %f36
365
366	srl		%o5, 27, %l3
367	andn		%o2, %o0, %l4
368	fxors		%f15, %f8, %f12
369
370	sll		%o0, 30, %l5
371	xor		%l1, %l4, %l1
372	fxor		%f24, %f26, %f38
373
374	srl		%o0,  2, %l7
375	or		%l0, %l3, %l0
376	fand		%f50, %f36, %f2
377
378	add		%l0, %l1, %l0
379	add		%o3, %g1, %l1
380	fand		%f50, %f12, %f10
381
382	or		%l5, %l7, %o0
383	add		%l0, %l1, %l0
384	fpadd32		%f36, %f36, %f4
385
386	add		%l0, %l2, %o4
387! Starting round 8
388	and		%o5, %o0, %l1
389	sll		%o4, 5, %l0
390	ld		[%i1 + (8 * 4)], %l2
391	faligndata	%f52, %f2, %f2
392
393	srl		%o4, 27, %l3
394	andn		%o1, %o5, %l4
395	faligndata	%f52, %f10, %f10
396
397	sll		%o5, 30, %l5
398	xor		%l1, %l4, %l1
399	fpadd32s	%f12, %f12, %f12
400
401	srl		%o5,  2, %l7
402	or		%l0, %l3, %l0
403	fxor		%f22, %f24, %f14
404	fmul8x16	%f2, %f54, %f6
405
406	add		%l0, %l1, %l0
407	add		%o2, %g1, %l1
408	fxor		%f38, %f18, %f38
409	fmul8x16	%f3, %f54, %f2
410
411	or		%l5, %l7, %o5
412	add		%l0, %l1, %l0
413	fmovs		%f9, %f30
414	fmul8x16	%f10, %f54, %f10
415
416	add		%l0, %l2, %o3
417
418! Starting round 9
419	and		%o4, %o5, %l1
420	sll		%o3, 5, %l0
421	ld		[%i1 + (9 * 4)], %l2
422	fxor		%f14, %f16, %f14
423
424	srl		%o3, 27, %l3
425	andn		%o0, %o4, %l4
426	fors		%f4, %f7, %f1
427	st		%f1, [%i0 + (19*4) + (4)]
428
429	sll		%o4, 30, %l5
430	xor		%l1, %l4, %l1
431	fors		%f5, %f3, %f8
432	st		%f8, [%i0 + (19*4) + (8)]
433
434	srl		%o4,  2, %l7
435	or		%l0, %l3, %l0
436	fors		%f12, %f11, %f0
437	st		%f0, [%i0 + (19*4) + (0)]
438
439	add		%l0, %l1, %l0
440	add		%o1, %g1, %l1
441	fors		%f4, %f7, %f28
442
443	or		%l5, %l7, %o4
444	add		%l0, %l1, %l0
445	fors		%f5, %f3, %f29
446
447	add		%l0, %l2, %o2
448	fors		%f12, %f11, %f31
449
450! Starting round 10
451	and		%o3, %o4, %l1
452	sll		%o2, 5, %l0
453	ld		[%i1 + (10 * 4)], %l2
454	fxor		%f38, %f0, %f36
455
456	srl		%o2, 27, %l3
457	andn		%o5, %o3, %l4
458	fxors		%f14, %f8, %f12
459
460	sll		%o3, 30, %l5
461	xor		%l1, %l4, %l1
462	fxor		%f22, %f24, %f14
463
464	srl		%o3,  2, %l7
465	or		%l0, %l3, %l0
466	fand		%f50, %f36, %f2
467
468	add		%l0, %l1, %l0
469	add		%o0, %g1, %l1
470	fand		%f50, %f12, %f10
471
472	or		%l5, %l7, %o3
473	add		%l0, %l1, %l0
474	fpadd32		%f36, %f36, %f4
475
476	add		%l0, %l2, %o1
477
478! Starting round 11
479	and		%o2, %o3, %l1
480	sll		%o1, 5, %l0
481	ld		[%i1 + (11 * 4)], %l2
482	faligndata	%f52, %f2, %f2
483
484	srl		%o1, 27, %l3
485	andn		%o4, %o2, %l4
486	faligndata	%f52, %f10, %f10
487
488	sll		%o2, 30, %l5
489	xor		%l1, %l4, %l1
490	fpadd32s	%f12, %f12, %f12
491
492	srl		%o2,  2, %l7
493	or		%l0, %l3, %l0
494	fxor		%f20, %f22, %f38
495	fmul8x16	%f2, %f54, %f6
496
497	add		%l0, %l1, %l0
498	add		%o5, %g1, %l1
499	fxor		%f14, %f16, %f14
500	fmul8x16	%f3, %f54, %f2
501
502	or		%l5, %l7, %o2
503	add		%l0, %l1, %l0
504	fmul8x16	%f10, %f54, %f10
505
506	add		%l0, %l2, %o0
507
508! Starting round 12
509	and		%o1, %o2, %l1
510	sll		%o0, 5, %l0
511	ld		[%i1 + (12 * 4)], %l2
512	fxor		%f38, %f30, %f38
513
514	srl		%o0, 27, %l3
515	andn		%o3, %o1, %l4
516	fors		%f4, %f7, %f8
517	st		%f8, [%i0 + (22*4) + (0)]
518
519	sll		%o1, 30, %l5
520	xor		%l1, %l4, %l1
521	fors		%f5, %f3, %f0
522	st		%f0, [%i0 + (22*4) + (4)]
523
524	srl		%o1,  2, %l7
525	or		%l0, %l3, %l0
526	fors		%f12, %f11, %f1
527	st		%f1, [%i0 + (22*4) + (8)]
528
529	add		%l0, %l1, %l0
530	add		%o4, %g1, %l1
531	fors		%f4, %f7, %f26
532
533	or		%l5, %l7, %o1
534	add		%l0, %l1, %l0
535	fors		%f5, %f3, %f27
536
537	add		%l0, %l2, %o5
538	fors		%f12, %f11, %f9
539
540! Starting round 13
541	and		%o0, %o1, %l1
542	sll		%o5, 5, %l0
543	ld		[%i1 + (13 * 4)], %l2
544	fxor		%f38, %f0, %f36
545
546	srl		%o5, 27, %l3
547	andn		%o2, %o0, %l4
548	fxors		%f15, %f8, %f12
549
550	sll		%o0, 30, %l5
551	xor		%l1, %l4, %l1
552	fxor		%f18, %f20, %f38
553
554	srl		%o0,  2, %l7
555	or		%l0, %l3, %l0
556	fand		%f50, %f36, %f2
557
558	add		%l0, %l1, %l0
559	add		%o3, %g1, %l1
560	fand		%f50, %f12, %f10
561
562	or		%l5, %l7, %o0
563	add		%l0, %l1, %l0
564	fpadd32		%f36, %f36, %f4
565
566	add		%l0, %l2, %o4
567! Starting round 14
568	and		%o5, %o0, %l1
569	sll		%o4, 5, %l0
570	ld		[%i1 + (14 * 4)], %l2
571	faligndata	%f52, %f2, %f2
572
573	srl		%o4, 27, %l3
574	andn		%o1, %o5, %l4
575	faligndata	%f52, %f10, %f10
576
577	sll		%o5, 30, %l5
578	xor		%l1, %l4, %l1
579	fpadd32s	%f12, %f12, %f12
580
581	srl		%o5,  2, %l7
582	or		%l0, %l3, %l0
583	fxor		%f16, %f18, %f14
584	fmul8x16	%f2, %f54, %f6
585
586	add		%l0, %l1, %l0
587	add		%o2, %g1, %l1
588	fxor		%f38, %f28, %f38
589	fmul8x16	%f3, %f54, %f2
590
591	or		%l5, %l7, %o5
592	add		%l0, %l1, %l0
593	fmovs		%f9, %f24
594	fmul8x16	%f10, %f54, %f10
595
596	add		%l0, %l2, %o3
597
598! Starting round 15
599	and		%o4, %o5, %l1
600	sll		%o3, 5, %l0
601	ld		[%i1 + (15 * 4)], %l2
602	fxor		%f14, %f26, %f14
603
604	srl		%o3, 27, %l3
605	andn		%o0, %o4, %l4
606	fors		%f4, %f7, %f1
607	st		%f1, [%i0 + (25*4) + (4)]
608
609	sll		%o4, 30, %l5
610	xor		%l1, %l4, %l1
611	fors		%f5, %f3, %f8
612	st		%f8, [%i0 + (25*4) + (8)]
613
614	srl		%o4,  2, %l7
615	or		%l0, %l3, %l0
616	fors		%f12, %f11, %f0
617	st		%f0, [%i0 + (25*4) + (0)]
618
619	add		%l0, %l1, %l0
620	add		%o1, %g1, %l1
621	fors		%f4, %f7, %f22
622
623	or		%l5, %l7, %o4
624	add		%l0, %l1, %l0
625	fors		%f5, %f3, %f23
626
627	add		%l0, %l2, %o2
628	fors		%f12, %f11, %f25
629
630! Starting round 16
631	and		%o3, %o4, %l1
632	sll		%o2, 5, %l0
633	ld		[%i0 + (16 * 4)], %l2
634	fxor		%f38, %f0, %f36
635
636	srl		%o2, 27, %l3
637	andn		%o5, %o3, %l4
638	fxors		%f14, %f8, %f12
639
640	sll		%o3, 30, %l5
641	xor		%l1, %l4, %l1
642	fxor		%f16, %f18, %f14
643
644	srl		%o3,  2, %l7
645	or		%l0, %l3, %l0
646	fand		%f50, %f36, %f2
647
648	add		%l0, %l1, %l0
649	add		%o0, %g1, %l1
650	fand		%f50, %f12, %f10
651
652	or		%l5, %l7, %o3
653	add		%l0, %l1, %l0
654	fpadd32		%f36, %f36, %f4
655
656	add		%l0, %l2, %o1
657
658! Starting round 17
659	and		%o2, %o3, %l1
660	sll		%o1, 5, %l0
661	ld		[%i0 + (17 * 4)], %l2
662	faligndata	%f52, %f2, %f2
663
664	srl		%o1, 27, %l3
665	andn		%o4, %o2, %l4
666	faligndata	%f52, %f10, %f10
667
668	sll		%o2, 30, %l5
669	xor		%l1, %l4, %l1
670	fpadd32s	%f12, %f12, %f12
671
672	srl		%o2,  2, %l7
673	or		%l0, %l3, %l0
674	fxor		%f30, %f16, %f38
675	fmul8x16	%f2, %f54, %f6
676
677	add		%l0, %l1, %l0
678	add		%o5, %g1, %l1
679	fxor		%f14, %f26, %f14
680	fmul8x16	%f3, %f54, %f2
681
682	or		%l5, %l7, %o2
683	add		%l0, %l1, %l0
684	fmul8x16	%f10, %f54, %f10
685
686	add		%l0, %l2, %o0
687
688! Starting round 18
689	and		%o1, %o2, %l1
690	sll		%o0, 5, %l0
691	ld		[%i0 + (18 * 4)], %l2
692	fxor		%f38, %f24, %f38
693
694	srl		%o0, 27, %l3
695	andn		%o3, %o1, %l4
696	fors		%f4, %f7, %f8
697	st		%f8, [%i0 + (28*4) + (0)]
698
699	sll		%o1, 30, %l5
700	xor		%l1, %l4, %l1
701	fors		%f5, %f3, %f0
702	st		%f0, [%i0 + (28*4) + (4)]
703
704	srl		%o1,  2, %l7
705	or		%l0, %l3, %l0
706	fors		%f12, %f11, %f1
707	st		%f1, [%i0 + (28*4) + (8)]
708
709	add		%l0, %l1, %l0
710	add		%o4, %g1, %l1
711	fors		%f4, %f7, %f20
712
713	or		%l5, %l7, %o1
714	add		%l0, %l1, %l0
715	fors		%f5, %f3, %f21
716
717	add		%l0, %l2, %o5
718	fors		%f12, %f11, %f9
719
720! Starting round 19
721	and		%o0, %o1, %l1
722	sll		%o5, 5, %l0
723	ld		[%i0 + (19 * 4)], %l2
724	fxor		%f38, %f0, %f36
725
726	srl		%o5, 27, %l3
727	andn		%o2, %o0, %l4
728	fxors		%f15, %f8, %f12
729
730	sll		%o0, 30, %l5
731	xor		%l1, %l4, %l1
732	fxor		%f28, %f30, %f38
733
734	srl		%o0,  2, %l7
735	or		%l0, %l3, %l0
736	fand		%f50, %f36, %f2
737
738	add		%l0, %l1, %l0
739	add		%o3, %g1, %l1
740	fand		%f50, %f12, %f10
741
742	or		%l5, %l7, %o0
743	add		%l0, %l1, %l0
744	fpadd32		%f36, %f36, %f4
745
746	add		%l0, %l2, %o4
747
748	ld 		[%i3 + 4 + 16], %g1
749
750! Starting round 20
751	sll		%o4, 5, %l0
752	xor		%o5, %o0, %l1
753	ld		[%i0 + (20 * 4)], %l2
754	faligndata	%f52, %f2, %f2
755
756	srl		%o4, 27, %l3
757	xor		%l1, %o1, %l1
758	faligndata	%f52, %f10, %f10
759
760	sll		%o5, 30, %l5
761	or		%l0, %l3, %l0
762	fpadd32s	%f12, %f12, %f12
763
764	add		%o2, %g1, %l4
765	add		%l0, %l1, %l0
766	fxor		%f26, %f28, %f14
767	fmul8x16	%f2, %f54, %f6
768
769	srl		%o5,  2, %l7
770	add		%l0, %l4, %l0
771	fxor		%f38, %f22, %f38
772	fmul8x16	%f3, %f54, %f2
773
774	or		%l5, %l7, %o5
775	add		%l0, %l2, %o3
776	fmovs		%f9, %f18
777	fmul8x16	%f10, %f54, %f10
778
779! Starting round 21
780	sll		%o3, 5, %l0
781	xor		%o4, %o5, %l1
782	ld		[%i0 + (21 * 4)], %l2
783
784	fxor		%f14, %f20, %f14
785	srl		%o3, 27, %l3
786	xor		%l1, %o0, %l1
787	fors		%f4, %f7, %f1
788	st		%f1, [%i0 + (31*4) + (4)]
789
790	sll		%o4, 30, %l5
791	or		%l0, %l3, %l0
792	fors		%f5, %f3, %f8
793	st		%f8, [%i0 + (31*4) + (8)]
794
795	add		%o1, %g1, %l4
796	add		%l0, %l1, %l0
797	fors		%f12, %f11, %f0
798	st		%f0, [%i0 + (31*4) + (0)]
799
800	srl		%o4,  2, %l7
801	add		%l0, %l4, %l0
802	fors		%f4, %f7, %f16
803
804	or		%l5, %l7, %o4
805	add		%l0, %l2, %o2
806	fors		%f5, %f3, %f17
807
808	fors		%f12, %f11, %f19
809
810! Starting round 22
811	sll		%o2, 5, %l0
812	xor		%o3, %o4, %l1
813	ld		[%i0 + (22 * 4)], %l2
814	fxor		%f38, %f0, %f36
815
816	srl		%o2, 27, %l3
817	xor		%l1, %o5, %l1
818	fxors		%f14, %f8, %f12
819
820	sll		%o3, 30, %l5
821	or		%l0, %l3, %l0
822	fxor		%f26, %f28, %f14
823
824	add		%o0, %g1, %l4
825	add		%l0, %l1, %l0
826	fand		%f50, %f36, %f2
827
828	srl		%o3,  2, %l7
829	add		%l0, %l4, %l0
830	fand		%f50, %f12, %f10
831
832	or		%l5, %l7, %o3
833	add		%l0, %l2, %o1
834
835	fpadd32		%f36, %f36, %f4
836
837! Starting round 23
838	sll		%o1, 5, %l0
839	xor		%o2, %o3, %l1
840	ld		[%i0 + (23 * 4)], %l2
841	faligndata	%f52, %f2, %f2
842
843	srl		%o1, 27, %l3
844	xor		%l1, %o4, %l1
845
846	faligndata	%f52, %f10, %f10
847
848	sll		%o2, 30, %l5
849	or		%l0, %l3, %l0
850	fpadd32s	%f12, %f12, %f12
851
852	add		%o5, %g1, %l4
853	add		%l0, %l1, %l0
854	fxor		%f24, %f26, %f38
855	fmul8x16	%f2, %f54, %f6
856
857	srl		%o2,  2, %l7
858	add		%l0, %l4, %l0
859	fxor		%f14, %f20, %f14
860	fmul8x16	%f3, %f54, %f2
861
862	or		%l5, %l7, %o2
863	add		%l0, %l2, %o0
864	fmul8x16	%f10, %f54, %f10
865
866! Starting round 24
867	sll		%o0, 5, %l0
868	xor		%o1, %o2, %l1
869	ld		[%i0 + (24 * 4)], %l2
870
871	fxor		%f38, %f18, %f38
872	srl		%o0, 27, %l3
873	xor		%l1, %o3, %l1
874	fors		%f4, %f7, %f8
875	st		%f8, [%i0 + (34*4) + (0)]
876
877	sll		%o1, 30, %l5
878	or		%l0, %l3, %l0
879	fors		%f5, %f3, %f0
880	st		%f0, [%i0 + (34*4) + (4)]
881
882	add		%o4, %g1, %l4
883	add		%l0, %l1, %l0
884	fors		%f12, %f11, %f1
885	st		%f1, [%i0 + (34*4) + (8)]
886
887	srl		%o1,  2, %l7
888	add		%l0, %l4, %l0
889	fors		%f4, %f7, %f30
890
891	or		%l5, %l7, %o1
892	add		%l0, %l2, %o5
893	fors		%f5, %f3, %f31
894
895	fors		%f12, %f11, %f9
896
897! Starting round 25
898	sll		%o5, 5, %l0
899	xor		%o0, %o1, %l1
900	ld		[%i0 + (25 * 4)], %l2
901	fxor		%f38, %f0, %f36
902
903	srl		%o5, 27, %l3
904	xor		%l1, %o2, %l1
905	fxors		%f15, %f8, %f12
906
907	sll		%o0, 30, %l5
908	or		%l0, %l3, %l0
909	fxor		%f22, %f24, %f38
910
911	add		%o3, %g1, %l4
912	add		%l0, %l1, %l0
913	fand		%f50, %f36, %f2
914
915	srl		%o0,  2, %l7
916	add		%l0, %l4, %l0
917	fand		%f50, %f12, %f10
918
919	or		%l5, %l7, %o0
920	add		%l0, %l2, %o4
921
922	fpadd32		%f36, %f36, %f4
923
924! Starting round 26
925	sll		%o4, 5, %l0
926	xor		%o5, %o0, %l1
927	ld		[%i0 + (26 * 4)], %l2
928	faligndata	%f52, %f2, %f2
929
930	srl		%o4, 27, %l3
931	xor		%l1, %o1, %l1
932
933	faligndata	%f52, %f10, %f10
934
935	sll		%o5, 30, %l5
936	or		%l0, %l3, %l0
937	fpadd32s	%f12, %f12, %f12
938
939	add		%o2, %g1, %l4
940	add		%l0, %l1, %l0
941	fxor		%f20, %f22, %f14
942	fmul8x16	%f2, %f54, %f6
943
944	srl		%o5,  2, %l7
945	add		%l0, %l4, %l0
946	fxor		%f38, %f16, %f38
947	fmul8x16	%f3, %f54, %f2
948
949	or		%l5, %l7, %o5
950	add		%l0, %l2, %o3
951	fmovs		%f9, %f28
952	fmul8x16	%f10, %f54, %f10
953
954! Starting round 27
955	sll		%o3, 5, %l0
956	xor		%o4, %o5, %l1
957	ld		[%i0 + (27 * 4)], %l2
958
959	fxor		%f14, %f30, %f14
960	srl		%o3, 27, %l3
961	xor		%l1, %o0, %l1
962	fors		%f4, %f7, %f1
963	st		%f1, [%i0 + (37*4) + (4)]
964
965	sll		%o4, 30, %l5
966	or		%l0, %l3, %l0
967	fors		%f5, %f3, %f8
968	st		%f8, [%i0 + (37*4) + (8)]
969
970	add		%o1, %g1, %l4
971	add		%l0, %l1, %l0
972	fors		%f12, %f11, %f0
973	st		%f0, [%i0 + (37*4) + (0)]
974
975	srl		%o4,  2, %l7
976	add		%l0, %l4, %l0
977	fors		%f4, %f7, %f26
978
979	or		%l5, %l7, %o4
980	add		%l0, %l2, %o2
981	fors		%f5, %f3, %f27
982
983	fors		%f12, %f11, %f29
984
985! Starting round 28
986	sll		%o2, 5, %l0
987	xor		%o3, %o4, %l1
988	ld		[%i0 + (28 * 4)], %l2
989	fxor		%f38, %f0, %f36
990
991	srl		%o2, 27, %l3
992	xor		%l1, %o5, %l1
993	fxors		%f14, %f8, %f12
994
995	sll		%o3, 30, %l5
996	or		%l0, %l3, %l0
997	fxor		%f20, %f22, %f14
998
999	add		%o0, %g1, %l4
1000	add		%l0, %l1, %l0
1001	fand		%f50, %f36, %f2
1002
1003	srl		%o3,  2, %l7
1004	add		%l0, %l4, %l0
1005	fand		%f50, %f12, %f10
1006
1007	or		%l5, %l7, %o3
1008	add		%l0, %l2, %o1
1009
1010	fpadd32		%f36, %f36, %f4
1011
1012! Starting round 29
1013	sll		%o1, 5, %l0
1014	xor		%o2, %o3, %l1
1015	ld		[%i0 + (29 * 4)], %l2
1016	faligndata	%f52, %f2, %f2
1017
1018	srl		%o1, 27, %l3
1019	xor		%l1, %o4, %l1
1020
1021	faligndata	%f52, %f10, %f10
1022
1023	sll		%o2, 30, %l5
1024	or		%l0, %l3, %l0
1025	fpadd32s	%f12, %f12, %f12
1026
1027	add		%o5, %g1, %l4
1028	add		%l0, %l1, %l0
1029	fxor		%f18, %f20, %f38
1030	fmul8x16	%f2, %f54, %f6
1031
1032	srl		%o2,  2, %l7
1033	add		%l0, %l4, %l0
1034	fxor		%f14, %f30, %f14
1035	fmul8x16	%f3, %f54, %f2
1036
1037	or		%l5, %l7, %o2
1038	add		%l0, %l2, %o0
1039	fmul8x16	%f10, %f54, %f10
1040
1041! Starting round 30
1042	sll		%o0, 5, %l0
1043	xor		%o1, %o2, %l1
1044	ld		[%i0 + (30 * 4)], %l2
1045
1046	fxor		%f38, %f28, %f38
1047	srl		%o0, 27, %l3
1048	xor		%l1, %o3, %l1
1049	fors		%f4, %f7, %f8
1050	st		%f8, [%i0 + (40*4) + (0)]
1051
1052	sll		%o1, 30, %l5
1053	or		%l0, %l3, %l0
1054	fors		%f5, %f3, %f0
1055	st		%f0, [%i0 + (40*4) + (4)]
1056
1057	add		%o4, %g1, %l4
1058	add		%l0, %l1, %l0
1059	fors		%f12, %f11, %f1
1060	st		%f1, [%i0 + (40*4) + (8)]
1061
1062	srl		%o1,  2, %l7
1063	add		%l0, %l4, %l0
1064	fors		%f4, %f7, %f24
1065
1066	or		%l5, %l7, %o1
1067	add		%l0, %l2, %o5
1068	fors		%f5, %f3, %f25
1069
1070	fors		%f12, %f11, %f9
1071
1072! Starting round 31
1073	sll		%o5, 5, %l0
1074	xor		%o0, %o1, %l1
1075	ld		[%i0 + (31 * 4)], %l2
1076	fxor		%f38, %f0, %f36
1077
1078	srl		%o5, 27, %l3
1079	xor		%l1, %o2, %l1
1080	fxors		%f15, %f8, %f12
1081
1082	sll		%o0, 30, %l5
1083	or		%l0, %l3, %l0
1084	fxor		%f16, %f18, %f38
1085
1086	add		%o3, %g1, %l4
1087	add		%l0, %l1, %l0
1088	fand		%f50, %f36, %f2
1089
1090	srl		%o0,  2, %l7
1091	add		%l0, %l4, %l0
1092	fand		%f50, %f12, %f10
1093
1094	or		%l5, %l7, %o0
1095	add		%l0, %l2, %o4
1096	fpadd32		%f36, %f36, %f4
1097
1098! Starting round 32
1099	sll		%o4, 5, %l0
1100	xor		%o5, %o0, %l1
1101	ld		[%i0 + (32 * 4)], %l2
1102	faligndata	%f52, %f2, %f2
1103
1104	srl		%o4, 27, %l3
1105	xor		%l1, %o1, %l1
1106	faligndata	%f52, %f10, %f10
1107
1108	sll		%o5, 30, %l5
1109	or		%l0, %l3, %l0
1110	fpadd32s	%f12, %f12, %f12
1111
1112	add		%o2, %g1, %l4
1113	add		%l0, %l1, %l0
1114	fxor		%f30, %f16, %f14
1115	fmul8x16	%f2, %f54, %f6
1116
1117	srl		%o5,  2, %l7
1118	add		%l0, %l4, %l0
1119	fxor		%f38, %f26, %f38
1120	fmul8x16	%f3, %f54, %f2
1121
1122	or		%l5, %l7, %o5
1123	add		%l0, %l2, %o3
1124	fmovs		%f9, %f22
1125	fmul8x16	%f10, %f54, %f10
1126
1127! Starting round 33
1128	sll		%o3, 5, %l0
1129	xor		%o4, %o5, %l1
1130	ld		[%i0 + (33 * 4)], %l2
1131	fxor		%f14, %f24, %f14
1132
1133	srl		%o3, 27, %l3
1134	xor		%l1, %o0, %l1
1135	fors		%f4, %f7, %f1
1136	st		%f1, [%i0 + (43*4) + (4)]
1137
1138	sll		%o4, 30, %l5
1139	or		%l0, %l3, %l0
1140	fors		%f5, %f3, %f8
1141	st		%f8, [%i0 + (43*4) + (8)]
1142
1143	add		%o1, %g1, %l4
1144	add		%l0, %l1, %l0
1145	fors		%f12, %f11, %f0
1146	st		%f0, [%i0 + (43*4) + (0)]
1147
1148	srl		%o4,  2, %l7
1149	add		%l0, %l4, %l0
1150	fors		%f4, %f7, %f20
1151
1152	or		%l5, %l7, %o4
1153	add		%l0, %l2, %o2
1154	fors		%f5, %f3, %f21
1155
1156	fors		%f12, %f11, %f23
1157
1158! Starting round 34
1159	sll		%o2, 5, %l0
1160	xor		%o3, %o4, %l1
1161	ld		[%i0 + (34 * 4)], %l2
1162	fxor		%f38, %f0, %f36
1163
1164	srl		%o2, 27, %l3
1165	xor		%l1, %o5, %l1
1166	fxors		%f14, %f8, %f12
1167
1168	sll		%o3, 30, %l5
1169	or		%l0, %l3, %l0
1170	fxor		%f30, %f16, %f14
1171
1172	add		%o0, %g1, %l4
1173	add		%l0, %l1, %l0
1174	fand		%f50, %f36, %f2
1175
1176	srl		%o3,  2, %l7
1177	add		%l0, %l4, %l0
1178	fand		%f50, %f12, %f10
1179
1180	or		%l5, %l7, %o3
1181	add		%l0, %l2, %o1
1182	fpadd32		%f36, %f36, %f4
1183
1184! Starting round 35
1185	sll		%o1, 5, %l0
1186	xor		%o2, %o3, %l1
1187	ld		[%i0 + (35 * 4)], %l2
1188	faligndata	%f52, %f2, %f2
1189
1190	srl		%o1, 27, %l3
1191	xor		%l1, %o4, %l1
1192	faligndata	%f52, %f10, %f10
1193
1194	sll		%o2, 30, %l5
1195	or		%l0, %l3, %l0
1196	fpadd32s	%f12, %f12, %f12
1197
1198	add		%o5, %g1, %l4
1199	add		%l0, %l1, %l0
1200	fxor		%f28, %f30, %f38
1201	fmul8x16	%f2, %f54, %f6
1202
1203	srl		%o2,  2, %l7
1204	add		%l0, %l4, %l0
1205	fxor		%f14, %f24, %f14
1206	fmul8x16	%f3, %f54, %f2
1207
1208	or		%l5, %l7, %o2
1209	add		%l0, %l2, %o0
1210	fmul8x16	%f10, %f54, %f10
1211
1212! Starting round 36
1213	sll		%o0, 5, %l0
1214	xor		%o1, %o2, %l1
1215	ld		[%i0 + (36 * 4)], %l2
1216	fxor		%f38, %f22, %f38
1217
1218	srl		%o0, 27, %l3
1219	xor		%l1, %o3, %l1
1220	fors		%f4, %f7, %f8
1221	st		%f8, [%i0 + (46*4) + (0)]
1222
1223	sll		%o1, 30, %l5
1224	or		%l0, %l3, %l0
1225	fors		%f5, %f3, %f0
1226	st		%f0, [%i0 + (46*4) + (4)]
1227
1228	add		%o4, %g1, %l4
1229	add		%l0, %l1, %l0
1230	fors		%f12, %f11, %f1
1231	st		%f1, [%i0 + (46*4) + (8)]
1232
1233	srl		%o1,  2, %l7
1234	add		%l0, %l4, %l0
1235	fors		%f4, %f7, %f18
1236
1237	or		%l5, %l7, %o1
1238	add		%l0, %l2, %o5
1239	fors		%f5, %f3, %f19
1240
1241	fors		%f12, %f11, %f9
1242
1243! Starting round 37
1244	sll		%o5, 5, %l0
1245	xor		%o0, %o1, %l1
1246	ld		[%i0 + (37 * 4)], %l2
1247	fxor		%f38, %f0, %f36
1248
1249	srl		%o5, 27, %l3
1250	xor		%l1, %o2, %l1
1251	fxors		%f15, %f8, %f12
1252
1253	sll		%o0, 30, %l5
1254	or		%l0, %l3, %l0
1255	fxor		%f26, %f28, %f38
1256
1257	add		%o3, %g1, %l4
1258	add		%l0, %l1, %l0
1259	fand		%f50, %f36, %f2
1260
1261	srl		%o0,  2, %l7
1262	add		%l0, %l4, %l0
1263	fand		%f50, %f12, %f10
1264
1265	or		%l5, %l7, %o0
1266	add		%l0, %l2, %o4
1267	fpadd32		%f36, %f36, %f4
1268
1269! Starting round 38
1270	sll		%o4, 5, %l0
1271	xor		%o5, %o0, %l1
1272	ld		[%i0 + (38 * 4)], %l2
1273	faligndata	%f52, %f2, %f2
1274
1275	srl		%o4, 27, %l3
1276	xor		%l1, %o1, %l1
1277	faligndata	%f52, %f10, %f10
1278
1279	sll		%o5, 30, %l5
1280	or		%l0, %l3, %l0
1281	fpadd32s	%f12, %f12, %f12
1282
1283	add		%o2, %g1, %l4
1284	add		%l0, %l1, %l0
1285	fxor		%f24, %f26, %f14
1286	fmul8x16	%f2, %f54, %f6
1287
1288	srl		%o5,  2, %l7
1289	add		%l0, %l4, %l0
1290	fxor		%f38, %f20, %f38
1291	fmul8x16	%f3, %f54, %f2
1292
1293	or		%l5, %l7, %o5
1294	add		%l0, %l2, %o3
1295	fmovs		%f9, %f16
1296	fmul8x16	%f10, %f54, %f10
1297
1298! Starting round 39
1299	sll		%o3, 5, %l0
1300	xor		%o4, %o5, %l1
1301	ld		[%i0 + (39 * 4)], %l2
1302	fxor		%f14, %f18, %f14
1303
1304	srl		%o3, 27, %l3
1305	xor		%l1, %o0, %l1
1306	fors		%f4, %f7, %f1
1307	st		%f1, [%i0 + (49*4) + (4)]
1308
1309	sll		%o4, 30, %l5
1310	or		%l0, %l3, %l0
1311	fors		%f5, %f3, %f8
1312	st		%f8, [%i0 + (49*4) + (8)]
1313
1314	add		%o1, %g1, %l4
1315	add		%l0, %l1, %l0
1316	fors		%f12, %f11, %f0
1317	st		%f0, [%i0 + (49*4) + (0)]
1318
1319	srl		%o4,  2, %l7
1320	add		%l0, %l4, %l0
1321	fors		%f4, %f7, %f30
1322
1323	or		%l5, %l7, %o4
1324	add		%l0, %l2, %o2
1325	fors		%f5, %f3, %f31
1326
1327	fors		%f12, %f11, %f17
1328	ld 		[%i3 + 8 + 16], %g1
1329
1330! Starting round 40
1331	sll		%o2, 5, %l0
1332	and		%o3, %o4, %l1
1333	ld		[%i0 + (40 * 4)], %l2
1334	fxor		%f38, %f0, %f36
1335
1336	srl		%o2, 27, %l3
1337	or		%o3, %o4, %l4
1338	fxors		%f14, %f8, %f12
1339
1340	sll		%o3, 30, %l5
1341	and		%l4, %o5, %l4
1342	fxor		%f24, %f26, %f14
1343
1344	add		%o0, %g1, %l6
1345	or		%l1, %l4, %l1
1346	fand		%f50, %f36, %f2
1347
1348	or		%l0, %l3, %l0
1349	add		%l6, %l1, %l1
1350	fand		%f50, %f12, %f10
1351
1352	srl		%o3,  2, %l7
1353	add		%l0, %l1, %l0
1354	fpadd32		%f36, %f36, %f4
1355
1356	or		%l5, %l7, %o3
1357	add		%l0, %l2, %o1
1358
1359! Starting round 41
1360	sll		%o1, 5, %l0
1361	and		%o2, %o3, %l1
1362	ld		[%i0 + (41 * 4)], %l2
1363	faligndata	%f52, %f2, %f2
1364
1365	srl		%o1, 27, %l3
1366	or		%o2, %o3, %l4
1367	faligndata	%f52, %f10, %f10
1368
1369	sll		%o2, 30, %l5
1370	and		%l4, %o4, %l4
1371	fpadd32s	%f12, %f12, %f12
1372
1373	add		%o5, %g1, %l6
1374	or		%l1, %l4, %l1
1375	fxor		%f22, %f24, %f38
1376	fmul8x16	%f2, %f54, %f6
1377
1378	or		%l0, %l3, %l0
1379	add		%l6, %l1, %l1
1380	fxor		%f14, %f18, %f14
1381	fmul8x16	%f3, %f54, %f2
1382
1383	srl		%o2,  2, %l7
1384	add		%l0, %l1, %l0
1385	fmul8x16	%f10, %f54, %f10
1386
1387	or		%l5, %l7, %o2
1388	add		%l0, %l2, %o0
1389
1390! Starting round 42
1391	sll		%o0, 5, %l0
1392	and		%o1, %o2, %l1
1393	ld		[%i0 + (42 * 4)], %l2
1394	fxor		%f38, %f16, %f38
1395
1396	srl		%o0, 27, %l3
1397	or		%o1, %o2, %l4
1398	fors		%f4, %f7, %f8
1399	st		%f8, [%i0 + (52*4) +(0)]
1400
1401	sll		%o1, 30, %l5
1402	and		%l4, %o3, %l4
1403	fors		%f5, %f3, %f0
1404	st		%f0, [%i0 + (52*4) + (4)]
1405
1406	add		%o4, %g1, %l6
1407	or		%l1, %l4, %l1
1408	fors		%f12, %f11, %f1
1409	st		%f1, [%i0 + (52*4) + (8)]
1410
1411	or		%l0, %l3, %l0
1412	add		%l6, %l1, %l1
1413	fors		%f4, %f7, %f28
1414
1415	srl		%o1,  2, %l7
1416	add		%l0, %l1, %l0
1417	fors		%f5, %f3, %f29
1418
1419	or		%l5, %l7, %o1
1420	add		%l0, %l2, %o5
1421	fors		%f12, %f11, %f9
1422
1423! Starting round 43
1424	sll		%o5, 5, %l0
1425	and		%o0, %o1, %l1
1426	ld		[%i0 + (43 * 4)], %l2
1427	fxor		%f38, %f0, %f36
1428
1429	srl		%o5, 27, %l3
1430	or		%o0, %o1, %l4
1431	fxors		%f15, %f8, %f12
1432
1433	sll		%o0, 30, %l5
1434	and		%l4, %o2, %l4
1435	fxor		%f20, %f22, %f38
1436
1437	add		%o3, %g1, %l6
1438	or		%l1, %l4, %l1
1439	fand		%f50, %f36, %f2
1440
1441	or		%l0, %l3, %l0
1442	add		%l6, %l1, %l1
1443	fand		%f50, %f12, %f10
1444
1445	srl		%o0,  2, %l7
1446	add		%l0, %l1, %l0
1447	fpadd32		%f36, %f36, %f4
1448
1449	or		%l5, %l7, %o0
1450	add		%l0, %l2, %o4
1451
1452! Starting round 44
1453	sll		%o4, 5, %l0
1454	and		%o5, %o0, %l1
1455	ld		[%i0 + (44 * 4)], %l2
1456	faligndata	%f52, %f2, %f2
1457
1458	srl		%o4, 27, %l3
1459	or		%o5, %o0, %l4
1460	faligndata	%f52, %f10, %f10
1461
1462	sll		%o5, 30, %l5
1463	and		%l4, %o1, %l4
1464	fpadd32s	%f12, %f12, %f12
1465
1466	add		%o2, %g1, %l6
1467	or		%l1, %l4, %l1
1468	fxor		%f18, %f20, %f14
1469	fmul8x16	%f2, %f54, %f6
1470
1471	or		%l0, %l3, %l0
1472	add		%l6, %l1, %l1
1473	fxor		%f38, %f30, %f38
1474	fmul8x16	%f3, %f54, %f2
1475
1476	srl		%o5,  2, %l7
1477	add		%l0, %l1, %l0
1478	fmovs		%f9, %f26
1479	fmul8x16	%f10, %f54, %f10
1480
1481	or		%l5, %l7, %o5
1482	add		%l0, %l2, %o3
1483
1484! Starting round 45
1485	sll		%o3, 5, %l0
1486	and		%o4, %o5, %l1
1487	ld		[%i0 + (45 * 4)], %l2
1488	fxor		%f14, %f28, %f14
1489
1490	srl		%o3, 27, %l3
1491	or		%o4, %o5, %l4
1492	fors		%f4, %f7, %f1
1493	st		%f1, [%i0 + (55*4) +(4)]
1494
1495	sll		%o4, 30, %l5
1496	and		%l4, %o0, %l4
1497	fors		%f5, %f3, %f8
1498	st		%f8, [%i0 + (55*4) + (8)]
1499
1500	add		%o1, %g1, %l6
1501	or		%l1, %l4, %l1
1502	fors		%f12, %f11, %f0
1503	st		%f0, [%i0 + (55*4) + (0)]
1504
1505	or		%l0, %l3, %l0
1506	add		%l6, %l1, %l1
1507	fors		%f4, %f7, %f24
1508
1509	srl		%o4,  2, %l7
1510	add		%l0, %l1, %l0
1511	fors		%f5, %f3, %f25
1512
1513	or		%l5, %l7, %o4
1514	add		%l0, %l2, %o2
1515	fors		%f12, %f11, %f27
1516
1517! Starting round 46
1518	sll		%o2, 5, %l0
1519	and		%o3, %o4, %l1
1520	ld		[%i0 + (46 * 4)], %l2
1521	fxor		%f38, %f0, %f36
1522
1523	srl		%o2, 27, %l3
1524	or		%o3, %o4, %l4
1525	fxors		%f14, %f8, %f12
1526
1527	sll		%o3, 30, %l5
1528	and		%l4, %o5, %l4
1529	fxor		%f18, %f20, %f14
1530
1531	add		%o0, %g1, %l6
1532	or		%l1, %l4, %l1
1533	fand		%f50, %f36, %f2
1534
1535	or		%l0, %l3, %l0
1536	add		%l6, %l1, %l1
1537	fand		%f50, %f12, %f10
1538
1539	srl		%o3,  2, %l7
1540	add		%l0, %l1, %l0
1541	fpadd32		%f36, %f36, %f4
1542
1543	or		%l5, %l7, %o3
1544	add		%l0, %l2, %o1
1545
1546! Starting round 47
1547	sll		%o1, 5, %l0
1548	and		%o2, %o3, %l1
1549	ld		[%i0 + (47 * 4)], %l2
1550	faligndata	%f52, %f2, %f2
1551
1552	srl		%o1, 27, %l3
1553	or		%o2, %o3, %l4
1554	faligndata	%f52, %f10, %f10
1555
1556	sll		%o2, 30, %l5
1557	and		%l4, %o4, %l4
1558	fpadd32s	%f12, %f12, %f12
1559
1560	add		%o5, %g1, %l6
1561	or		%l1, %l4, %l1
1562	fxor		%f16, %f18, %f38
1563	fmul8x16	%f2, %f54, %f6
1564
1565	or		%l0, %l3, %l0
1566	add		%l6, %l1, %l1
1567	fxor		%f14, %f28, %f14
1568	fmul8x16	%f3, %f54, %f2
1569
1570	srl		%o2,  2, %l7
1571	add		%l0, %l1, %l0
1572	fmul8x16	%f10, %f54, %f10
1573
1574	or		%l5, %l7, %o2
1575	add		%l0, %l2, %o0
1576
1577! Starting round 48
1578	sll		%o0, 5, %l0
1579	and		%o1, %o2, %l1
1580	ld		[%i0 + (48 * 4)], %l2
1581	fxor		%f38, %f26, %f38
1582
1583	srl		%o0, 27, %l3
1584	or		%o1, %o2, %l4
1585	fors		%f4, %f7, %f8
1586	st		%f8, [%i0 + (58*4) +(0)]
1587
1588	sll		%o1, 30, %l5
1589	and		%l4, %o3, %l4
1590	fors		%f5, %f3, %f0
1591	st		%f0, [%i0 + (58*4) + (4)]
1592
1593	add		%o4, %g1, %l6
1594	or		%l1, %l4, %l1
1595	fors		%f12, %f11, %f1
1596	st		%f1, [%i0 + (58*4) + (8)]
1597
1598	or		%l0, %l3, %l0
1599	add		%l6, %l1, %l1
1600	fors		%f4, %f7, %f22
1601
1602	srl		%o1,  2, %l7
1603	add		%l0, %l1, %l0
1604	fors		%f5, %f3, %f23
1605
1606	or		%l5, %l7, %o1
1607	add		%l0, %l2, %o5
1608	fors		%f12, %f11, %f9
1609
1610! Starting round 49
1611	sll		%o5, 5, %l0
1612	and		%o0, %o1, %l1
1613	ld		[%i0 + (49 * 4)], %l2
1614	fxor		%f38, %f0, %f36
1615
1616	srl		%o5, 27, %l3
1617	or		%o0, %o1, %l4
1618	fxors		%f15, %f8, %f12
1619
1620	sll		%o0, 30, %l5
1621	and		%l4, %o2, %l4
1622	fxor		%f30, %f16, %f38
1623
1624	add		%o3, %g1, %l6
1625	or		%l1, %l4, %l1
1626	fand		%f50, %f36, %f2
1627
1628	or		%l0, %l3, %l0
1629	add		%l6, %l1, %l1
1630	fand		%f50, %f12, %f10
1631
1632	srl		%o0,  2, %l7
1633	add		%l0, %l1, %l0
1634	fpadd32		%f36, %f36, %f4
1635
1636	or		%l5, %l7, %o0
1637	add		%l0, %l2, %o4
1638
1639! Starting round 50
1640	sll		%o4, 5, %l0
1641	and		%o5, %o0, %l1
1642	ld		[%i0 + (50 * 4)], %l2
1643	faligndata	%f52, %f2, %f2
1644
1645	srl		%o4, 27, %l3
1646	or		%o5, %o0, %l4
1647	faligndata	%f52, %f10, %f10
1648
1649	sll		%o5, 30, %l5
1650	and		%l4, %o1, %l4
1651	fpadd32s	%f12, %f12, %f12
1652
1653	add		%o2, %g1, %l6
1654	or		%l1, %l4, %l1
1655	fxor		%f28, %f30, %f14
1656	fmul8x16	%f2, %f54, %f6
1657
1658	or		%l0, %l3, %l0
1659	add		%l6, %l1, %l1
1660	fxor		%f38, %f24, %f38
1661	fmul8x16	%f3, %f54, %f2
1662
1663	srl		%o5,  2, %l7
1664	add		%l0, %l1, %l0
1665	fmovs		%f9, %f20
1666	fmul8x16	%f10, %f54, %f10
1667
1668	or		%l5, %l7, %o5
1669	add		%l0, %l2, %o3
1670
1671! Starting round 51
1672	sll		%o3, 5, %l0
1673	and		%o4, %o5, %l1
1674	ld		[%i0 + (51 * 4)], %l2
1675	fxor		%f14, %f22, %f14
1676
1677	srl		%o3, 27, %l3
1678	or		%o4, %o5, %l4
1679	fors		%f4, %f7, %f1
1680	st		%f1, [%i0 + (61*4) +(4)]
1681
1682	sll		%o4, 30, %l5
1683	and		%l4, %o0, %l4
1684	fors		%f5, %f3, %f8
1685	st		%f8, [%i0 + (61*4) + (8)]
1686
1687	add		%o1, %g1, %l6
1688	or		%l1, %l4, %l1
1689	fors		%f12, %f11, %f0
1690	st		%f0, [%i0 + (61*4) + (0)]
1691
1692	or		%l0, %l3, %l0
1693	add		%l6, %l1, %l1
1694	fors		%f4, %f7, %f18
1695
1696	srl		%o4,  2, %l7
1697	add		%l0, %l1, %l0
1698	fors		%f5, %f3, %f19
1699
1700	or		%l5, %l7, %o4
1701	add		%l0, %l2, %o2
1702	fors		%f12, %f11, %f21
1703
1704! Starting round 52
1705	sll		%o2, 5, %l0
1706	and		%o3, %o4, %l1
1707	ld		[%i0 + (52 * 4)], %l2
1708	fxor		%f38, %f0, %f36
1709
1710	srl		%o2, 27, %l3
1711	or		%o3, %o4, %l4
1712	fxors		%f14, %f8, %f12
1713
1714	sll		%o3, 30, %l5
1715	and		%l4, %o5, %l4
1716	fxor		%f28, %f30, %f14
1717
1718	add		%o0, %g1, %l6
1719	or		%l1, %l4, %l1
1720	fand		%f50, %f36, %f2
1721
1722	or		%l0, %l3, %l0
1723	add		%l6, %l1, %l1
1724	fand		%f50, %f12, %f10
1725
1726	srl		%o3,  2, %l7
1727	add		%l0, %l1, %l0
1728	fpadd32		%f36, %f36, %f4
1729
1730	or		%l5, %l7, %o3
1731	add		%l0, %l2, %o1
1732
1733! Starting round 53
1734	sll		%o1, 5, %l0
1735	and		%o2, %o3, %l1
1736	ld		[%i0 + (53 * 4)], %l2
1737	faligndata	%f52, %f2, %f2
1738
1739	srl		%o1, 27, %l3
1740	or		%o2, %o3, %l4
1741	faligndata	%f52, %f10, %f10
1742
1743	sll		%o2, 30, %l5
1744	and		%l4, %o4, %l4
1745	fpadd32s	%f12, %f12, %f12
1746
1747	add		%o5, %g1, %l6
1748	or		%l1, %l4, %l1
1749	fxor		%f26, %f28, %f38
1750	fmul8x16	%f2, %f54, %f6
1751
1752	or		%l0, %l3, %l0
1753	add		%l6, %l1, %l1
1754	fxor		%f14, %f22, %f14
1755	fmul8x16	%f3, %f54, %f2
1756
1757	srl		%o2,  2, %l7
1758	add		%l0, %l1, %l0
1759	fmul8x16	%f10, %f54, %f10
1760
1761	or		%l5, %l7, %o2
1762	add		%l0, %l2, %o0
1763
1764! Starting round 54
1765	sll		%o0, 5, %l0
1766	and		%o1, %o2, %l1
1767	ld		[%i0 + (54 * 4)], %l2
1768	fxor		%f38, %f20, %f38
1769
1770	srl		%o0, 27, %l3
1771	or		%o1, %o2, %l4
1772	fors		%f4, %f7, %f8
1773	st		%f8, [%i0 + (64*4) +(0)]
1774
1775	sll		%o1, 30, %l5
1776	and		%l4, %o3, %l4
1777	fors		%f5, %f3, %f0
1778	st		%f0, [%i0 + (64*4) + (4)]
1779
1780	add		%o4, %g1, %l6
1781	or		%l1, %l4, %l1
1782	fors		%f12, %f11, %f1
1783	st		%f1, [%i0 + (64*4) + (8)]
1784
1785	or		%l0, %l3, %l0
1786	add		%l6, %l1, %l1
1787	fors		%f4, %f7, %f16
1788
1789	srl		%o1,  2, %l7
1790	add		%l0, %l1, %l0
1791	fors		%f5, %f3, %f17
1792
1793	or		%l5, %l7, %o1
1794	add		%l0, %l2, %o5
1795	fors		%f12, %f11, %f9
1796
1797! Starting round 55
1798	sll		%o5, 5, %l0
1799	and		%o0, %o1, %l1
1800	ld		[%i0 + (55 * 4)], %l2
1801	fxor		%f38, %f0, %f36
1802
1803	srl		%o5, 27, %l3
1804	or		%o0, %o1, %l4
1805	fxors		%f15, %f8, %f12
1806
1807	sll		%o0, 30, %l5
1808	and		%l4, %o2, %l4
1809	fxor		%f24, %f26, %f38
1810
1811	add		%o3, %g1, %l6
1812	or		%l1, %l4, %l1
1813	fand		%f50, %f36, %f2
1814
1815	or		%l0, %l3, %l0
1816	add		%l6, %l1, %l1
1817	fand		%f50, %f12, %f10
1818
1819	srl		%o0,  2, %l7
1820	add		%l0, %l1, %l0
1821	fpadd32		%f36, %f36, %f4
1822
1823	or		%l5, %l7, %o0
1824	add		%l0, %l2, %o4
1825
1826! Starting round 56
1827	sll		%o4, 5, %l0
1828	and		%o5, %o0, %l1
1829	ld		[%i0 + (56 * 4)], %l2
1830	faligndata	%f52, %f2, %f2
1831
1832	srl		%o4, 27, %l3
1833	or		%o5, %o0, %l4
1834	faligndata	%f52, %f10, %f10
1835
1836	sll		%o5, 30, %l5
1837	and		%l4, %o1, %l4
1838	fpadd32s	%f12, %f12, %f12
1839
1840	add		%o2, %g1, %l6
1841	or		%l1, %l4, %l1
1842	fxor		%f22, %f24, %f14
1843	fmul8x16	%f2, %f54, %f6
1844
1845	or		%l0, %l3, %l0
1846	add		%l6, %l1, %l1
1847	fxor		%f38, %f18, %f38
1848	fmul8x16	%f3, %f54, %f2
1849
1850	srl		%o5,  2, %l7
1851	add		%l0, %l1, %l0
1852	fmovs		%f9, %f30
1853	fmul8x16	%f10, %f54, %f10
1854
1855	or		%l5, %l7, %o5
1856	add		%l0, %l2, %o3
1857
1858! Starting round 57
1859	sll		%o3, 5, %l0
1860	and		%o4, %o5, %l1
1861	ld		[%i0 + (57 * 4)], %l2
1862	fxor		%f14, %f16, %f14
1863
1864	srl		%o3, 27, %l3
1865	or		%o4, %o5, %l4
1866	fors		%f4, %f7, %f1
1867	st		%f1, [%i0 + (67*4) +(4)]
1868
1869	sll		%o4, 30, %l5
1870	and		%l4, %o0, %l4
1871	fors		%f5, %f3, %f8
1872	st		%f8, [%i0 + (67*4) + (8)]
1873
1874	add		%o1, %g1, %l6
1875	or		%l1, %l4, %l1
1876	fors		%f12, %f11, %f0
1877	st		%f0, [%i0 + (67*4) + (0)]
1878
1879	or		%l0, %l3, %l0
1880	add		%l6, %l1, %l1
1881	fors		%f4, %f7, %f28
1882
1883	srl		%o4,  2, %l7
1884	add		%l0, %l1, %l0
1885	fors		%f5, %f3, %f29
1886
1887	or		%l5, %l7, %o4
1888	add		%l0, %l2, %o2
1889	fors		%f12, %f11, %f31
1890
1891! Starting round 58
1892	sll		%o2, 5, %l0
1893	and		%o3, %o4, %l1
1894	ld		[%i0 + (58 * 4)], %l2
1895	fxor		%f38, %f0, %f36
1896
1897	srl		%o2, 27, %l3
1898	or		%o3, %o4, %l4
1899	fxors		%f14, %f8, %f12
1900
1901	sll		%o3, 30, %l5
1902	and		%l4, %o5, %l4
1903	fxor		%f22, %f24, %f14
1904
1905	add		%o0, %g1, %l6
1906	or		%l1, %l4, %l1
1907	fand		%f50, %f36, %f2
1908
1909	or		%l0, %l3, %l0
1910	add		%l6, %l1, %l1
1911	fand		%f50, %f12, %f10
1912
1913	srl		%o3,  2, %l7
1914	add		%l0, %l1, %l0
1915	fpadd32		%f36, %f36, %f4
1916
1917	or		%l5, %l7, %o3
1918	add		%l0, %l2, %o1
1919
1920! Starting round 59
1921	sll		%o1, 5, %l0
1922	and		%o2, %o3, %l1
1923	ld		[%i0 + (59 * 4)], %l2
1924	faligndata	%f52, %f2, %f2
1925
1926	srl		%o1, 27, %l3
1927	or		%o2, %o3, %l4
1928	faligndata	%f52, %f10, %f10
1929
1930	sll		%o2, 30, %l5
1931	and		%l4, %o4, %l4
1932	fpadd32s	%f12, %f12, %f12
1933
1934	add		%o5, %g1, %l6
1935	or		%l1, %l4, %l1
1936	fxor		%f20, %f22, %f38
1937	fmul8x16	%f2, %f54, %f6
1938
1939	or		%l0, %l3, %l0
1940	add		%l6, %l1, %l1
1941	fxor		%f14, %f16, %f14
1942	fmul8x16	%f3, %f54, %f2
1943
1944	srl		%o2,  2, %l7
1945	add		%l0, %l1, %l0
1946	fmul8x16	%f10, %f54, %f10
1947
1948	or		%l5, %l7, %o2
1949	add		%l0, %l2, %o0
1950	ld 		[%i3 + 12 + 16], %g1
1951
1952! Starting round 60
1953	sll		%o0, 5, %l0
1954	xor		%o1, %o2, %l1
1955	ld		[%i0 + (60 * 4)], %l2
1956
1957	fxor		%f38, %f30, %f38
1958	srl		%o0, 27, %l3
1959	xor		%l1, %o3, %l1
1960	fors		%f4, %f7, %f8
1961	st		%f8, [%i0 + (70*4) + (0)]
1962
1963	sll		%o1, 30, %l5
1964	or		%l0, %l3, %l0
1965	fors		%f5, %f3, %f0
1966	st		%f0, [%i0 + (70*4) + (4)]
1967
1968	add		%o4, %g1, %l4
1969	add		%l0, %l1, %l0
1970	fors		%f12, %f11, %f1
1971	st		%f1, [%i0 + (70*4) + (8)]
1972
1973	srl		%o1,  2, %l7
1974	add		%l0, %l4, %l0
1975	fors		%f4, %f7, %f26
1976
1977	or		%l5, %l7, %o1
1978	add		%l0, %l2, %o5
1979	fors		%f5, %f3, %f27
1980
1981	fors		%f12, %f11, %f9
1982
1983! Starting round 61
1984	sll		%o5, 5, %l0
1985	xor		%o0, %o1, %l1
1986	ld		[%i0 + (61 * 4)], %l2
1987	fxor		%f38, %f0, %f36
1988
1989	srl		%o5, 27, %l3
1990	xor		%l1, %o2, %l1
1991	fxors		%f15, %f8, %f12
1992
1993	sll		%o0, 30, %l5
1994	or		%l0, %l3, %l0
1995	fxor		%f18, %f20, %f38
1996
1997	add		%o3, %g1, %l4
1998	add		%l0, %l1, %l0
1999	fand		%f50, %f36, %f2
2000
2001	srl		%o0,  2, %l7
2002	add		%l0, %l4, %l0
2003	fand		%f50, %f12, %f10
2004
2005	or		%l5, %l7, %o0
2006	add		%l0, %l2, %o4
2007	fpadd32		%f36, %f36, %f4
2008
2009! Starting round 62
2010	sll		%o4, 5, %l0
2011	xor		%o5, %o0, %l1
2012	ld		[%i0 + (62 * 4)], %l2
2013	faligndata	%f52, %f2, %f2
2014
2015	srl		%o4, 27, %l3
2016	xor		%l1, %o1, %l1
2017	faligndata	%f52, %f10, %f10
2018
2019	sll		%o5, 30, %l5
2020	or		%l0, %l3, %l0
2021	fpadd32s	%f12, %f12, %f12
2022
2023	add		%o2, %g1, %l4
2024	add		%l0, %l1, %l0
2025	fxor		%f16, %f18, %f14
2026	fmul8x16	%f2, %f54, %f6
2027
2028	srl		%o5,  2, %l7
2029	add		%l0, %l4, %l0
2030	fxor		%f38, %f28, %f38
2031	fmul8x16	%f3, %f54, %f2
2032
2033	or		%l5, %l7, %o5
2034	add		%l0, %l2, %o3
2035	fmovs		%f9, %f24
2036	fmul8x16	%f10, %f54, %f10
2037
2038! Starting round 63
2039	sll		%o3, 5, %l0
2040	xor		%o4, %o5, %l1
2041	ld		[%i0 + (63 * 4)], %l2
2042	fxor		%f14, %f26, %f14
2043
2044	srl		%o3, 27, %l3
2045	xor		%l1, %o0, %l1
2046	fors		%f4, %f7, %f1
2047	st		%f1, [%i0 + (73*4) + (4)]
2048
2049	sll		%o4, 30, %l5
2050	or		%l0, %l3, %l0
2051	fors		%f5, %f3, %f8
2052	st		%f8, [%i0 + (73*4) + (8)]
2053
2054	add		%o1, %g1, %l4
2055	add		%l0, %l1, %l0
2056	fors		%f12, %f11, %f0
2057	st		%f0, [%i0 + (73*4) + (0)]
2058
2059	srl		%o4,  2, %l7
2060	add		%l0, %l4, %l0
2061	fors		%f4, %f7, %f22
2062
2063	or		%l5, %l7, %o4
2064	add		%l0, %l2, %o2
2065	fors		%f5, %f3, %f23
2066
2067	fors		%f12, %f11, %f25
2068
2069! Starting round 64
2070	sll		%o2, 5, %l0
2071	xor		%o3, %o4, %l1
2072	ld		[%i0 + (64 * 4)], %l2
2073	fxor		%f38, %f0, %f36
2074
2075	srl		%o2, 27, %l3
2076	xor		%l1, %o5, %l1
2077	fxors		%f14, %f8, %f12
2078
2079	sll		%o3, 30, %l5
2080	or		%l0, %l3, %l0
2081	fxor		%f16, %f18, %f14
2082
2083	add		%o0, %g1, %l4
2084	add		%l0, %l1, %l0
2085	fand		%f50, %f36, %f2
2086
2087	srl		%o3,  2, %l7
2088	add		%l0, %l4, %l0
2089	fand		%f50, %f12, %f10
2090
2091	or		%l5, %l7, %o3
2092	add		%l0, %l2, %o1
2093	fpadd32		%f36, %f36, %f4
2094
2095! Starting round 65
2096	sll		%o1, 5, %l0
2097	xor		%o2, %o3, %l1
2098	ld		[%i0 + (65 * 4)], %l2
2099	faligndata	%f52, %f2, %f2
2100
2101	srl		%o1, 27, %l3
2102	xor		%l1, %o4, %l1
2103	faligndata	%f52, %f10, %f10
2104
2105	sll		%o2, 30, %l5
2106	or		%l0, %l3, %l0
2107	fpadd32s	%f12, %f12, %f12
2108
2109	add		%o5, %g1, %l4
2110	add		%l0, %l1, %l0
2111	fxor		%f30, %f16, %f38
2112	fmul8x16	%f2, %f54, %f6
2113
2114	srl		%o2,  2, %l7
2115	add		%l0, %l4, %l0
2116	fxor		%f14, %f26, %f14
2117	fmul8x16	%f3, %f54, %f2
2118
2119	or		%l5, %l7, %o2
2120	add		%l0, %l2, %o0
2121	fmul8x16	%f10, %f54, %f10
2122
2123! Starting round 66
2124	sll		%o0, 5, %l0
2125	xor		%o1, %o2, %l1
2126	ld		[%i0 + (66 * 4)], %l2
2127	fxor		%f38, %f24, %f38
2128
2129	srl		%o0, 27, %l3
2130	xor		%l1, %o3, %l1
2131	fors		%f4, %f7, %f8
2132	st		%f8, [%i0 + (76*4) + (0)]
2133
2134	sll		%o1, 30, %l5
2135	or		%l0, %l3, %l0
2136	fors		%f5, %f3, %f0
2137	st		%f0, [%i0 + (76*4) + (4)]
2138
2139	add		%o4, %g1, %l4
2140	add		%l0, %l1, %l0
2141	fors		%f12, %f11, %f1
2142	st		%f1, [%i0 + (76*4) + (8)]
2143
2144	srl		%o1,  2, %l7
2145	add		%l0, %l4, %l0
2146	fors		%f4, %f7, %f20
2147
2148	or		%l5, %l7, %o1
2149	add		%l0, %l2, %o5
2150	fors		%f5, %f3, %f21
2151
2152	fors		%f12, %f11, %f9
2153
2154! Starting round 67
2155	sll		%o5, 5, %l0
2156	xor		%o0, %o1, %l1
2157	ld		[%i0 + (67 * 4)], %l2
2158	fxor		%f38, %f0, %f36
2159
2160	srl		%o5, 27, %l3
2161	xor		%l1, %o2, %l1
2162	fxors		%f15, %f8, %f12
2163
2164	sll		%o0, 30, %l5
2165	or		%l0, %l3, %l0
2166	fxor		%f28, %f30, %f38
2167
2168	add		%o3, %g1, %l4
2169	add		%l0, %l1, %l0
2170	fand		%f50, %f36, %f2
2171
2172	srl		%o0,  2, %l7
2173	add		%l0, %l4, %l0
2174	fand		%f50, %f12, %f10
2175
2176	or		%l5, %l7, %o0
2177	add		%l0, %l2, %o4
2178	fpadd32		%f36, %f36, %f4
2179
2180! Starting round 68
2181	sll		%o4, 5, %l0
2182	xor		%o5, %o0, %l1
2183	ld		[%i0 + (68 * 4)], %l2
2184	faligndata	%f52, %f2, %f2
2185
2186	srl		%o4, 27, %l3
2187	xor		%l1, %o1, %l1
2188	faligndata	%f52, %f10, %f10
2189
2190	sll		%o5, 30, %l5
2191	or		%l0, %l3, %l0
2192	fpadd32s	%f12, %f12, %f12
2193
2194	add		%o2, %g1, %l4
2195	add		%l0, %l1, %l0
2196	fxor		%f26, %f28, %f14
2197	fmul8x16	%f2, %f54, %f6
2198
2199	srl		%o5,  2, %l7
2200	add		%l0, %l4, %l0
2201	fxor		%f38, %f22, %f38
2202	fmul8x16	%f3, %f54, %f2
2203
2204	or		%l5, %l7, %o5
2205	add		%l0, %l2, %o3
2206	fmovs		%f9, %f18
2207	fmul8x16	%f10, %f54, %f10
2208
2209! Starting round 69
2210	sll		%o3, 5, %l0
2211	xor		%o4, %o5, %l1
2212	ld		[%i0 + (69 * 4)], %l2
2213
2214	fxor		%f14, %f20, %f14
2215	srl		%o3, 27, %l3
2216	xor		%l1, %o0, %l1
2217
2218	sll		%o4, 30, %l5
2219	or		%l0, %l3, %l0
2220
2221	add		%o1, %g1, %l4
2222	add		%l0, %l1, %l0
2223	fors		%f12, %f11, %f0
2224	st		%f0, [%i0 + (79*4) + (0)]
2225
2226	srl		%o4,  2, %l7
2227	add		%l0, %l4, %l0
2228
2229	or		%l5, %l7, %o4
2230	add		%l0, %l2, %o2
2231
2232! Starting round 70
2233	sll		%o2, 5, %l0
2234	xor		%o3, %o4, %l1
2235	ld		[%i0 + (70 * 4)], %l2
2236
2237	srl		%o2, 27, %l3
2238	xor		%l1, %o5, %l1
2239
2240	sll		%o3, 30, %l5
2241	or		%l0, %l3, %l0
2242
2243	srl		%o3,  2, %l7
2244	add		%l0, %l1, %l0
2245
2246	add		%o0, %g1, %l1
2247	add		%l0, %l2, %l0
2248
2249	add		%l0, %l1, %o1
2250	or		%l5, %l7, %o3
2251
2252! Starting round 71
2253	sll		%o1, 5, %l0
2254	xor		%o2, %o3, %l1
2255	ld		[%i0 + (71 * 4)], %l2
2256
2257	srl		%o1, 27, %l3
2258	xor		%l1, %o4, %l1
2259
2260	sll		%o2, 30, %l5
2261	or		%l0, %l3, %l0
2262
2263	srl		%o2,  2, %l7
2264	add		%l0, %l1, %l0
2265
2266	add		%o5, %g1, %l1
2267	add		%l0, %l2, %l0
2268
2269	add		%l0, %l1, %o0
2270	or		%l5, %l7, %o2
2271
2272! Starting round 72
2273	sll		%o0, 5, %l0
2274	xor		%o1, %o2, %l1
2275	ld		[%i0 + (72 * 4)], %l2
2276
2277	srl		%o0, 27, %l3
2278	xor		%l1, %o3, %l1
2279
2280	sll		%o1, 30, %l5
2281	or		%l0, %l3, %l0
2282
2283	srl		%o1,  2, %l7
2284	add		%l0, %l1, %l0
2285
2286	add		%o4, %g1, %l1
2287	add		%l0, %l2, %l0
2288
2289	add		%l0, %l1, %o5
2290	or		%l5, %l7, %o1
2291
2292! Starting round 73
2293	sll		%o5, 5, %l0
2294	xor		%o0, %o1, %l1
2295	ld		[%i0 + (73 * 4)], %l2
2296
2297	srl		%o5, 27, %l3
2298	xor		%l1, %o2, %l1
2299
2300	sll		%o0, 30, %l5
2301	or		%l0, %l3, %l0
2302
2303	srl		%o0,  2, %l7
2304	add		%l0, %l1, %l0
2305
2306	add		%o3, %g1, %l1
2307	add		%l0, %l2, %l0
2308
2309	add		%l0, %l1, %o4
2310	or		%l5, %l7, %o0
2311
2312! Starting round 74
2313	sll		%o4, 5, %l0
2314	xor		%o5, %o0, %l1
2315	ld		[%i0 + (74 * 4)], %l2
2316
2317	srl		%o4, 27, %l3
2318	xor		%l1, %o1, %l1
2319
2320	sll		%o5, 30, %l5
2321	or		%l0, %l3, %l0
2322
2323	srl		%o5,  2, %l7
2324	add		%l0, %l1, %l0
2325
2326	add		%o2, %g1, %l1
2327	add		%l0, %l2, %l0
2328
2329	add		%l0, %l1, %o3
2330	or		%l5, %l7, %o5
2331
2332! Starting round 75
2333	sll		%o3, 5, %l0
2334	xor		%o4, %o5, %l1
2335	ld		[%i0 + (75 * 4)], %l2
2336
2337	srl		%o3, 27, %l3
2338	xor		%l1, %o0, %l1
2339
2340	sll		%o4, 30, %l5
2341	or		%l0, %l3, %l0
2342
2343	srl		%o4,  2, %l7
2344	add		%l0, %l1, %l0
2345
2346	add		%o1, %g1, %l1
2347	add		%l0, %l2, %l0
2348
2349	add		%l0, %l1, %o2
2350	or		%l5, %l7, %o4
2351
2352! Starting round 76
2353	sll		%o2, 5, %l0
2354	xor		%o3, %o4, %l1
2355	ld		[%i0 + (76 * 4)], %l2
2356
2357	srl		%o2, 27, %l3
2358	xor		%l1, %o5, %l1
2359
2360	sll		%o3, 30, %l5
2361	or		%l0, %l3, %l0
2362
2363	srl		%o3,  2, %l7
2364	add		%l0, %l1, %l0
2365
2366	add		%o0, %g1, %l1
2367	add		%l0, %l2, %l0
2368
2369	add		%l0, %l1, %o1
2370	or		%l5, %l7, %o3
2371
2372! Starting round 77
2373	sll		%o1, 5, %l0
2374	xor		%o2, %o3, %l1
2375	ld		[%i0 + (77 * 4)], %l2
2376
2377	srl		%o1, 27, %l3
2378	xor		%l1, %o4, %l1
2379
2380	sll		%o2, 30, %l5
2381	or		%l0, %l3, %l0
2382
2383	srl		%o2,  2, %l7
2384	add		%l0, %l1, %l0
2385
2386	add		%o5, %g1, %l1
2387	add		%l0, %l2, %l0
2388
2389	add		%l0, %l1, %o0
2390	or		%l5, %l7, %o2
2391
2392! Starting round 78
2393	sll		%o0, 5, %l0
2394	xor		%o1, %o2, %l1
2395	ld		[%i0 + (78 * 4)], %l2
2396
2397	srl		%o0, 27, %l3
2398	xor		%l1, %o3, %l1
2399
2400	sll		%o1, 30, %l5
2401	or		%l0, %l3, %l0
2402
2403	srl		%o1,  2, %l7
2404	add		%l0, %l1, %l0
2405
2406	add		%o4, %g1, %l1
2407	add		%l0, %l2, %l0
2408
2409	add		%l0, %l1, %o5
2410	or		%l5, %l7, %o1
2411
2412! Starting round 79
2413	sll		%o5, 5, %l0
2414	xor		%o0, %o1, %l1
2415	ld		[%i0 + (79 * 4)], %l2
2416
2417	srl		%o5, 27, %l3
2418	xor		%l1, %o2, %l1
2419	ld		[%i2 + 0], %i0
2420
2421	sll		%o0, 30, %l5
2422	or		%l0, %l3, %l0
2423	ld		[%i2 + 4], %i1
2424
2425	srl		%o0,  2, %l7
2426	add		%l0, %l1, %l0
2427	ld		[%i2 + 8], %i3
2428
2429	add		%o3, %g1, %l1
2430	add		%l0, %l2, %l0
2431	ld		[%i2 + 12], %i4
2432
2433	add		%l0, %l1, %o4
2434	or		%l5, %l7, %o0
2435	ld		[%i2 + 16], %i5
2436
2437! Compute final hash values for this block and store back to SHA1_CTX
2438	add 		%i0, %o4, %o4
2439	st 		%o4, [%i2 + 0]
2440
2441	add 		%i1, %o5, %o5
2442	st 		%o5, [%i2 + 4]
2443
2444	add 		%i3, %o0, %o0
2445	st 		%o0, [%i2 + 8]
2446
2447	add 		%i4, %o1, %o1
2448	st 		%o1, [%i2 + 12]
2449
2450	add 		%i5, %o2, %o2
2451	st 		%o2, [%i2 + 16]
2452
2453	ret
2454	restore
2455	SET_SIZE(SHA1TransformVIS)
2456
2457#endif	/* defined(lint) */
2458