Home | History | Annotate | Download | only in sun4u
      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 */
     45 int
     46 sha1_savefp(kfpu_t *fpu, int svfp_ok)
     47 { return(0); }
     48 
     49 /* ARGSUSED */
     50 void
     51 sha1_restorefp(kfpu_t *fpu)
     52 {}
     53 
     54 #endif /* _KERNEL */
     55 
     56 /* ARGSUSED */
     57 void
     58 SHA1TransformVIS(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)
    113 1:
    114 	retl
    115 	or	%g0, 1, %o0
    116 2:
    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
    132 1:
    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