Home | History | Annotate | Line # | Download | only in sparc64
      1 #include "sparc_arch.h"
      2 
      3 #ifdef __arch64__
      4 .register	%g2,#scratch
      5 .register	%g3,#scratch
      6 #endif
      7 
      8 .section	".text",#alloc,#execinstr
      9 
     10 .align	64
     11 K256:
     12 .type	K256,#object
     13 	.long	0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5
     14 	.long	0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5
     15 	.long	0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3
     16 	.long	0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174
     17 	.long	0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc
     18 	.long	0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da
     19 	.long	0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7
     20 	.long	0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967
     21 	.long	0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13
     22 	.long	0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85
     23 	.long	0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3
     24 	.long	0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070
     25 	.long	0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5
     26 	.long	0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3
     27 	.long	0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208
     28 	.long	0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2
     29 .size	K256,.-K256
     30 
     31 #ifdef __PIC__
     32 SPARC_PIC_THUNK(%g1)
     33 #endif
     34 
     35 .globl	sha256_block_data_order
     36 .align	32
     37 sha256_block_data_order:
     38 	SPARC_LOAD_ADDRESS_LEAF(OPENSSL_sparcv9cap_P,%g1,%g5)
     39 	ld	[%g1+4],%g1		! OPENSSL_sparcv9cap_P[1]
     40 
     41 	andcc	%g1, CFR_SHA256, %g0
     42 	be	.Lsoftware
     43 	nop
     44 	ld	[%o0 + 0x00], %f0
     45 	ld	[%o0 + 0x04], %f1
     46 	ld	[%o0 + 0x08], %f2
     47 	ld	[%o0 + 0x0c], %f3
     48 	ld	[%o0 + 0x10], %f4
     49 	ld	[%o0 + 0x14], %f5
     50 	andcc	%o1, 0x7, %g0
     51 	ld	[%o0 + 0x18], %f6
     52 	bne,pn	%icc, .Lhwunaligned
     53 	 ld	[%o0 + 0x1c], %f7
     54 
     55 .Lhwloop:
     56 	ldd	[%o1 + 0x00], %f8
     57 	ldd	[%o1 + 0x08], %f10
     58 	ldd	[%o1 + 0x10], %f12
     59 	ldd	[%o1 + 0x18], %f14
     60 	ldd	[%o1 + 0x20], %f16
     61 	ldd	[%o1 + 0x28], %f18
     62 	ldd	[%o1 + 0x30], %f20
     63 	subcc	%o2, 1, %o2		! done yet?
     64 	ldd	[%o1 + 0x38], %f22
     65 	add	%o1, 0x40, %o1
     66 	prefetch [%o1 + 63], 20
     67 
     68 	.word	0x81b02840		! SHA256
     69 
     70 	bne,pt	SIZE_T_CC, .Lhwloop
     71 	nop
     72 
     73 .Lhwfinish:
     74 	st	%f0, [%o0 + 0x00]	! store context
     75 	st	%f1, [%o0 + 0x04]
     76 	st	%f2, [%o0 + 0x08]
     77 	st	%f3, [%o0 + 0x0c]
     78 	st	%f4, [%o0 + 0x10]
     79 	st	%f5, [%o0 + 0x14]
     80 	st	%f6, [%o0 + 0x18]
     81 	retl
     82 	 st	%f7, [%o0 + 0x1c]
     83 
     84 .align	8
     85 .Lhwunaligned:
     86 	.word	0x93b24300 !alignaddr	%o1,%g0,%o1
     87 
     88 	ldd	[%o1 + 0x00], %f10
     89 .Lhwunaligned_loop:
     90 	ldd	[%o1 + 0x08], %f12
     91 	ldd	[%o1 + 0x10], %f14
     92 	ldd	[%o1 + 0x18], %f16
     93 	ldd	[%o1 + 0x20], %f18
     94 	ldd	[%o1 + 0x28], %f20
     95 	ldd	[%o1 + 0x30], %f22
     96 	ldd	[%o1 + 0x38], %f24
     97 	subcc	%o2, 1, %o2		! done yet?
     98 	ldd	[%o1 + 0x40], %f26
     99 	add	%o1, 0x40, %o1
    100 	prefetch [%o1 + 63], 20
    101 
    102 	.word	0x91b2890c !faligndata	%f10,%f12,%f8
    103 	.word	0x95b3090e !faligndata	%f12,%f14,%f10
    104 	.word	0x99b38910 !faligndata	%f14,%f16,%f12
    105 	.word	0x9db40912 !faligndata	%f16,%f18,%f14
    106 	.word	0xa1b48914 !faligndata	%f18,%f20,%f16
    107 	.word	0xa5b50916 !faligndata	%f20,%f22,%f18
    108 	.word	0xa9b58918 !faligndata	%f22,%f24,%f20
    109 	.word	0xadb6091a !faligndata	%f24,%f26,%f22
    110 
    111 	.word	0x81b02840		! SHA256
    112 
    113 	bne,pt	SIZE_T_CC, .Lhwunaligned_loop
    114 	.word	0x95b68f9a !for	%f26,%f26,%f10	! %f10=%f26
    115 
    116 	ba	.Lhwfinish
    117 	nop
    118 .align	16
    119 .Lsoftware:
    120 	save	%sp,-STACK_FRAME-0,%sp
    121 	and	%i1,7,%i4
    122 	sllx	%i2,6,%i2
    123 	andn	%i1,7,%i1
    124 	sll	%i4,3,%i4
    125 	add	%i1,%i2,%i2
    126 .Lpic:	call	.+8
    127 	add	%o7,K256-.Lpic,%i3
    128 
    129 	ld	[%i0+0],%l0
    130 	ld	[%i0+4],%l1
    131 	ld	[%i0+8],%l2
    132 	ld	[%i0+12],%l3
    133 	ld	[%i0+16],%l4
    134 	ld	[%i0+20],%l5
    135 	ld	[%i0+24],%l6
    136 	ld	[%i0+28],%l7
    137 
    138 .Lloop:
    139 	ldx	[%i1+0],%o0
    140 	ldx	[%i1+16],%o2
    141 	ldx	[%i1+32],%o4
    142 	ldx	[%i1+48],%g1
    143 	ldx	[%i1+8],%o1
    144 	ldx	[%i1+24],%o3
    145 	subcc	%g0,%i4,%i5 ! should be 64-%i4, but -%i4 works too
    146 	ldx	[%i1+40],%o5
    147 	bz,pt	%icc,.Laligned
    148 	ldx	[%i1+56],%o7
    149 
    150 	sllx	%o0,%i4,%o0
    151 	ldx	[%i1+64],%g2
    152 	srlx	%o1,%i5,%g4
    153 	sllx	%o1,%i4,%o1
    154 	or	%g4,%o0,%o0
    155 	srlx	%o2,%i5,%g4
    156 	sllx	%o2,%i4,%o2
    157 	or	%g4,%o1,%o1
    158 	srlx	%o3,%i5,%g4
    159 	sllx	%o3,%i4,%o3
    160 	or	%g4,%o2,%o2
    161 	srlx	%o4,%i5,%g4
    162 	sllx	%o4,%i4,%o4
    163 	or	%g4,%o3,%o3
    164 	srlx	%o5,%i5,%g4
    165 	sllx	%o5,%i4,%o5
    166 	or	%g4,%o4,%o4
    167 	srlx	%g1,%i5,%g4
    168 	sllx	%g1,%i4,%g1
    169 	or	%g4,%o5,%o5
    170 	srlx	%o7,%i5,%g4
    171 	sllx	%o7,%i4,%o7
    172 	or	%g4,%g1,%g1
    173 	srlx	%g2,%i5,%g2
    174 	or	%g2,%o7,%o7
    175 .Laligned:
    176 	srlx	%o0,32,%g2
    177 	add	%l7,%g2,%g2
    178 	srl	%l4,6,%l7	!! 0
    179 	xor	%l5,%l6,%g5
    180 	sll	%l4,7,%g4
    181 	and	%l4,%g5,%g5
    182 	srl	%l4,11,%g3
    183 	xor	%g4,%l7,%l7
    184 	sll	%l4,21,%g4
    185 	xor	%g3,%l7,%l7
    186 	srl	%l4,25,%g3
    187 	xor	%g4,%l7,%l7
    188 	sll	%l4,26,%g4
    189 	xor	%g3,%l7,%l7
    190 	xor	%l6,%g5,%g5		! Ch(e,f,g)
    191 	xor	%g4,%l7,%g3		! Sigma1(e)
    192 
    193 	srl	%l0,2,%l7
    194 	add	%g5,%g2,%g2
    195 	ld	[%i3+0],%g5	! K[0]
    196 	sll	%l0,10,%g4
    197 	add	%g3,%g2,%g2
    198 	srl	%l0,13,%g3
    199 	xor	%g4,%l7,%l7
    200 	sll	%l0,19,%g4
    201 	xor	%g3,%l7,%l7
    202 	srl	%l0,22,%g3
    203 	xor	%g4,%l7,%l7
    204 	sll	%l0,30,%g4
    205 	xor	%g3,%l7,%l7
    206 	xor	%g4,%l7,%l7		! Sigma0(a)
    207 
    208 	or	%l0,%l1,%g3
    209 	and	%l0,%l1,%g4
    210 	and	%l2,%g3,%g3
    211 	or	%g3,%g4,%g4	! Maj(a,b,c)
    212 	add	%g5,%g2,%g2		! +=K[0]
    213 	add	%g4,%l7,%l7
    214 
    215 	add	%g2,%l3,%l3
    216 	add	%g2,%l7,%l7
    217 	add	%o0,%l6,%g2
    218 	srl	%l3,6,%l6	!! 1
    219 	xor	%l4,%l5,%g5
    220 	sll	%l3,7,%g4
    221 	and	%l3,%g5,%g5
    222 	srl	%l3,11,%g3
    223 	xor	%g4,%l6,%l6
    224 	sll	%l3,21,%g4
    225 	xor	%g3,%l6,%l6
    226 	srl	%l3,25,%g3
    227 	xor	%g4,%l6,%l6
    228 	sll	%l3,26,%g4
    229 	xor	%g3,%l6,%l6
    230 	xor	%l5,%g5,%g5		! Ch(e,f,g)
    231 	xor	%g4,%l6,%g3		! Sigma1(e)
    232 
    233 	srl	%l7,2,%l6
    234 	add	%g5,%g2,%g2
    235 	ld	[%i3+4],%g5	! K[1]
    236 	sll	%l7,10,%g4
    237 	add	%g3,%g2,%g2
    238 	srl	%l7,13,%g3
    239 	xor	%g4,%l6,%l6
    240 	sll	%l7,19,%g4
    241 	xor	%g3,%l6,%l6
    242 	srl	%l7,22,%g3
    243 	xor	%g4,%l6,%l6
    244 	sll	%l7,30,%g4
    245 	xor	%g3,%l6,%l6
    246 	xor	%g4,%l6,%l6		! Sigma0(a)
    247 
    248 	or	%l7,%l0,%g3
    249 	and	%l7,%l0,%g4
    250 	and	%l1,%g3,%g3
    251 	or	%g3,%g4,%g4	! Maj(a,b,c)
    252 	add	%g5,%g2,%g2		! +=K[1]
    253 	add	%g4,%l6,%l6
    254 
    255 	add	%g2,%l2,%l2
    256 	add	%g2,%l6,%l6
    257 	srlx	%o1,32,%g2
    258 	add	%l5,%g2,%g2
    259 	srl	%l2,6,%l5	!! 2
    260 	xor	%l3,%l4,%g5
    261 	sll	%l2,7,%g4
    262 	and	%l2,%g5,%g5
    263 	srl	%l2,11,%g3
    264 	xor	%g4,%l5,%l5
    265 	sll	%l2,21,%g4
    266 	xor	%g3,%l5,%l5
    267 	srl	%l2,25,%g3
    268 	xor	%g4,%l5,%l5
    269 	sll	%l2,26,%g4
    270 	xor	%g3,%l5,%l5
    271 	xor	%l4,%g5,%g5		! Ch(e,f,g)
    272 	xor	%g4,%l5,%g3		! Sigma1(e)
    273 
    274 	srl	%l6,2,%l5
    275 	add	%g5,%g2,%g2
    276 	ld	[%i3+8],%g5	! K[2]
    277 	sll	%l6,10,%g4
    278 	add	%g3,%g2,%g2
    279 	srl	%l6,13,%g3
    280 	xor	%g4,%l5,%l5
    281 	sll	%l6,19,%g4
    282 	xor	%g3,%l5,%l5
    283 	srl	%l6,22,%g3
    284 	xor	%g4,%l5,%l5
    285 	sll	%l6,30,%g4
    286 	xor	%g3,%l5,%l5
    287 	xor	%g4,%l5,%l5		! Sigma0(a)
    288 
    289 	or	%l6,%l7,%g3
    290 	and	%l6,%l7,%g4
    291 	and	%l0,%g3,%g3
    292 	or	%g3,%g4,%g4	! Maj(a,b,c)
    293 	add	%g5,%g2,%g2		! +=K[2]
    294 	add	%g4,%l5,%l5
    295 
    296 	add	%g2,%l1,%l1
    297 	add	%g2,%l5,%l5
    298 	add	%o1,%l4,%g2
    299 	srl	%l1,6,%l4	!! 3
    300 	xor	%l2,%l3,%g5
    301 	sll	%l1,7,%g4
    302 	and	%l1,%g5,%g5
    303 	srl	%l1,11,%g3
    304 	xor	%g4,%l4,%l4
    305 	sll	%l1,21,%g4
    306 	xor	%g3,%l4,%l4
    307 	srl	%l1,25,%g3
    308 	xor	%g4,%l4,%l4
    309 	sll	%l1,26,%g4
    310 	xor	%g3,%l4,%l4
    311 	xor	%l3,%g5,%g5		! Ch(e,f,g)
    312 	xor	%g4,%l4,%g3		! Sigma1(e)
    313 
    314 	srl	%l5,2,%l4
    315 	add	%g5,%g2,%g2
    316 	ld	[%i3+12],%g5	! K[3]
    317 	sll	%l5,10,%g4
    318 	add	%g3,%g2,%g2
    319 	srl	%l5,13,%g3
    320 	xor	%g4,%l4,%l4
    321 	sll	%l5,19,%g4
    322 	xor	%g3,%l4,%l4
    323 	srl	%l5,22,%g3
    324 	xor	%g4,%l4,%l4
    325 	sll	%l5,30,%g4
    326 	xor	%g3,%l4,%l4
    327 	xor	%g4,%l4,%l4		! Sigma0(a)
    328 
    329 	or	%l5,%l6,%g3
    330 	and	%l5,%l6,%g4
    331 	and	%l7,%g3,%g3
    332 	or	%g3,%g4,%g4	! Maj(a,b,c)
    333 	add	%g5,%g2,%g2		! +=K[3]
    334 	add	%g4,%l4,%l4
    335 
    336 	add	%g2,%l0,%l0
    337 	add	%g2,%l4,%l4
    338 	srlx	%o2,32,%g2
    339 	add	%l3,%g2,%g2
    340 	srl	%l0,6,%l3	!! 4
    341 	xor	%l1,%l2,%g5
    342 	sll	%l0,7,%g4
    343 	and	%l0,%g5,%g5
    344 	srl	%l0,11,%g3
    345 	xor	%g4,%l3,%l3
    346 	sll	%l0,21,%g4
    347 	xor	%g3,%l3,%l3
    348 	srl	%l0,25,%g3
    349 	xor	%g4,%l3,%l3
    350 	sll	%l0,26,%g4
    351 	xor	%g3,%l3,%l3
    352 	xor	%l2,%g5,%g5		! Ch(e,f,g)
    353 	xor	%g4,%l3,%g3		! Sigma1(e)
    354 
    355 	srl	%l4,2,%l3
    356 	add	%g5,%g2,%g2
    357 	ld	[%i3+16],%g5	! K[4]
    358 	sll	%l4,10,%g4
    359 	add	%g3,%g2,%g2
    360 	srl	%l4,13,%g3
    361 	xor	%g4,%l3,%l3
    362 	sll	%l4,19,%g4
    363 	xor	%g3,%l3,%l3
    364 	srl	%l4,22,%g3
    365 	xor	%g4,%l3,%l3
    366 	sll	%l4,30,%g4
    367 	xor	%g3,%l3,%l3
    368 	xor	%g4,%l3,%l3		! Sigma0(a)
    369 
    370 	or	%l4,%l5,%g3
    371 	and	%l4,%l5,%g4
    372 	and	%l6,%g3,%g3
    373 	or	%g3,%g4,%g4	! Maj(a,b,c)
    374 	add	%g5,%g2,%g2		! +=K[4]
    375 	add	%g4,%l3,%l3
    376 
    377 	add	%g2,%l7,%l7
    378 	add	%g2,%l3,%l3
    379 	add	%o2,%l2,%g2
    380 	srl	%l7,6,%l2	!! 5
    381 	xor	%l0,%l1,%g5
    382 	sll	%l7,7,%g4
    383 	and	%l7,%g5,%g5
    384 	srl	%l7,11,%g3
    385 	xor	%g4,%l2,%l2
    386 	sll	%l7,21,%g4
    387 	xor	%g3,%l2,%l2
    388 	srl	%l7,25,%g3
    389 	xor	%g4,%l2,%l2
    390 	sll	%l7,26,%g4
    391 	xor	%g3,%l2,%l2
    392 	xor	%l1,%g5,%g5		! Ch(e,f,g)
    393 	xor	%g4,%l2,%g3		! Sigma1(e)
    394 
    395 	srl	%l3,2,%l2
    396 	add	%g5,%g2,%g2
    397 	ld	[%i3+20],%g5	! K[5]
    398 	sll	%l3,10,%g4
    399 	add	%g3,%g2,%g2
    400 	srl	%l3,13,%g3
    401 	xor	%g4,%l2,%l2
    402 	sll	%l3,19,%g4
    403 	xor	%g3,%l2,%l2
    404 	srl	%l3,22,%g3
    405 	xor	%g4,%l2,%l2
    406 	sll	%l3,30,%g4
    407 	xor	%g3,%l2,%l2
    408 	xor	%g4,%l2,%l2		! Sigma0(a)
    409 
    410 	or	%l3,%l4,%g3
    411 	and	%l3,%l4,%g4
    412 	and	%l5,%g3,%g3
    413 	or	%g3,%g4,%g4	! Maj(a,b,c)
    414 	add	%g5,%g2,%g2		! +=K[5]
    415 	add	%g4,%l2,%l2
    416 
    417 	add	%g2,%l6,%l6
    418 	add	%g2,%l2,%l2
    419 	srlx	%o3,32,%g2
    420 	add	%l1,%g2,%g2
    421 	srl	%l6,6,%l1	!! 6
    422 	xor	%l7,%l0,%g5
    423 	sll	%l6,7,%g4
    424 	and	%l6,%g5,%g5
    425 	srl	%l6,11,%g3
    426 	xor	%g4,%l1,%l1
    427 	sll	%l6,21,%g4
    428 	xor	%g3,%l1,%l1
    429 	srl	%l6,25,%g3
    430 	xor	%g4,%l1,%l1
    431 	sll	%l6,26,%g4
    432 	xor	%g3,%l1,%l1
    433 	xor	%l0,%g5,%g5		! Ch(e,f,g)
    434 	xor	%g4,%l1,%g3		! Sigma1(e)
    435 
    436 	srl	%l2,2,%l1
    437 	add	%g5,%g2,%g2
    438 	ld	[%i3+24],%g5	! K[6]
    439 	sll	%l2,10,%g4
    440 	add	%g3,%g2,%g2
    441 	srl	%l2,13,%g3
    442 	xor	%g4,%l1,%l1
    443 	sll	%l2,19,%g4
    444 	xor	%g3,%l1,%l1
    445 	srl	%l2,22,%g3
    446 	xor	%g4,%l1,%l1
    447 	sll	%l2,30,%g4
    448 	xor	%g3,%l1,%l1
    449 	xor	%g4,%l1,%l1		! Sigma0(a)
    450 
    451 	or	%l2,%l3,%g3
    452 	and	%l2,%l3,%g4
    453 	and	%l4,%g3,%g3
    454 	or	%g3,%g4,%g4	! Maj(a,b,c)
    455 	add	%g5,%g2,%g2		! +=K[6]
    456 	add	%g4,%l1,%l1
    457 
    458 	add	%g2,%l5,%l5
    459 	add	%g2,%l1,%l1
    460 	add	%o3,%l0,%g2
    461 	srl	%l5,6,%l0	!! 7
    462 	xor	%l6,%l7,%g5
    463 	sll	%l5,7,%g4
    464 	and	%l5,%g5,%g5
    465 	srl	%l5,11,%g3
    466 	xor	%g4,%l0,%l0
    467 	sll	%l5,21,%g4
    468 	xor	%g3,%l0,%l0
    469 	srl	%l5,25,%g3
    470 	xor	%g4,%l0,%l0
    471 	sll	%l5,26,%g4
    472 	xor	%g3,%l0,%l0
    473 	xor	%l7,%g5,%g5		! Ch(e,f,g)
    474 	xor	%g4,%l0,%g3		! Sigma1(e)
    475 
    476 	srl	%l1,2,%l0
    477 	add	%g5,%g2,%g2
    478 	ld	[%i3+28],%g5	! K[7]
    479 	sll	%l1,10,%g4
    480 	add	%g3,%g2,%g2
    481 	srl	%l1,13,%g3
    482 	xor	%g4,%l0,%l0
    483 	sll	%l1,19,%g4
    484 	xor	%g3,%l0,%l0
    485 	srl	%l1,22,%g3
    486 	xor	%g4,%l0,%l0
    487 	sll	%l1,30,%g4
    488 	xor	%g3,%l0,%l0
    489 	xor	%g4,%l0,%l0		! Sigma0(a)
    490 
    491 	or	%l1,%l2,%g3
    492 	and	%l1,%l2,%g4
    493 	and	%l3,%g3,%g3
    494 	or	%g3,%g4,%g4	! Maj(a,b,c)
    495 	add	%g5,%g2,%g2		! +=K[7]
    496 	add	%g4,%l0,%l0
    497 
    498 	add	%g2,%l4,%l4
    499 	add	%g2,%l0,%l0
    500 	srlx	%o4,32,%g2
    501 	add	%l7,%g2,%g2
    502 	srl	%l4,6,%l7	!! 8
    503 	xor	%l5,%l6,%g5
    504 	sll	%l4,7,%g4
    505 	and	%l4,%g5,%g5
    506 	srl	%l4,11,%g3
    507 	xor	%g4,%l7,%l7
    508 	sll	%l4,21,%g4
    509 	xor	%g3,%l7,%l7
    510 	srl	%l4,25,%g3
    511 	xor	%g4,%l7,%l7
    512 	sll	%l4,26,%g4
    513 	xor	%g3,%l7,%l7
    514 	xor	%l6,%g5,%g5		! Ch(e,f,g)
    515 	xor	%g4,%l7,%g3		! Sigma1(e)
    516 
    517 	srl	%l0,2,%l7
    518 	add	%g5,%g2,%g2
    519 	ld	[%i3+32],%g5	! K[8]
    520 	sll	%l0,10,%g4
    521 	add	%g3,%g2,%g2
    522 	srl	%l0,13,%g3
    523 	xor	%g4,%l7,%l7
    524 	sll	%l0,19,%g4
    525 	xor	%g3,%l7,%l7
    526 	srl	%l0,22,%g3
    527 	xor	%g4,%l7,%l7
    528 	sll	%l0,30,%g4
    529 	xor	%g3,%l7,%l7
    530 	xor	%g4,%l7,%l7		! Sigma0(a)
    531 
    532 	or	%l0,%l1,%g3
    533 	and	%l0,%l1,%g4
    534 	and	%l2,%g3,%g3
    535 	or	%g3,%g4,%g4	! Maj(a,b,c)
    536 	add	%g5,%g2,%g2		! +=K[8]
    537 	add	%g4,%l7,%l7
    538 
    539 	add	%g2,%l3,%l3
    540 	add	%g2,%l7,%l7
    541 	add	%o4,%l6,%g2
    542 	srl	%l3,6,%l6	!! 9
    543 	xor	%l4,%l5,%g5
    544 	sll	%l3,7,%g4
    545 	and	%l3,%g5,%g5
    546 	srl	%l3,11,%g3
    547 	xor	%g4,%l6,%l6
    548 	sll	%l3,21,%g4
    549 	xor	%g3,%l6,%l6
    550 	srl	%l3,25,%g3
    551 	xor	%g4,%l6,%l6
    552 	sll	%l3,26,%g4
    553 	xor	%g3,%l6,%l6
    554 	xor	%l5,%g5,%g5		! Ch(e,f,g)
    555 	xor	%g4,%l6,%g3		! Sigma1(e)
    556 
    557 	srl	%l7,2,%l6
    558 	add	%g5,%g2,%g2
    559 	ld	[%i3+36],%g5	! K[9]
    560 	sll	%l7,10,%g4
    561 	add	%g3,%g2,%g2
    562 	srl	%l7,13,%g3
    563 	xor	%g4,%l6,%l6
    564 	sll	%l7,19,%g4
    565 	xor	%g3,%l6,%l6
    566 	srl	%l7,22,%g3
    567 	xor	%g4,%l6,%l6
    568 	sll	%l7,30,%g4
    569 	xor	%g3,%l6,%l6
    570 	xor	%g4,%l6,%l6		! Sigma0(a)
    571 
    572 	or	%l7,%l0,%g3
    573 	and	%l7,%l0,%g4
    574 	and	%l1,%g3,%g3
    575 	or	%g3,%g4,%g4	! Maj(a,b,c)
    576 	add	%g5,%g2,%g2		! +=K[9]
    577 	add	%g4,%l6,%l6
    578 
    579 	add	%g2,%l2,%l2
    580 	add	%g2,%l6,%l6
    581 	srlx	%o5,32,%g2
    582 	add	%l5,%g2,%g2
    583 	srl	%l2,6,%l5	!! 10
    584 	xor	%l3,%l4,%g5
    585 	sll	%l2,7,%g4
    586 	and	%l2,%g5,%g5
    587 	srl	%l2,11,%g3
    588 	xor	%g4,%l5,%l5
    589 	sll	%l2,21,%g4
    590 	xor	%g3,%l5,%l5
    591 	srl	%l2,25,%g3
    592 	xor	%g4,%l5,%l5
    593 	sll	%l2,26,%g4
    594 	xor	%g3,%l5,%l5
    595 	xor	%l4,%g5,%g5		! Ch(e,f,g)
    596 	xor	%g4,%l5,%g3		! Sigma1(e)
    597 
    598 	srl	%l6,2,%l5
    599 	add	%g5,%g2,%g2
    600 	ld	[%i3+40],%g5	! K[10]
    601 	sll	%l6,10,%g4
    602 	add	%g3,%g2,%g2
    603 	srl	%l6,13,%g3
    604 	xor	%g4,%l5,%l5
    605 	sll	%l6,19,%g4
    606 	xor	%g3,%l5,%l5
    607 	srl	%l6,22,%g3
    608 	xor	%g4,%l5,%l5
    609 	sll	%l6,30,%g4
    610 	xor	%g3,%l5,%l5
    611 	xor	%g4,%l5,%l5		! Sigma0(a)
    612 
    613 	or	%l6,%l7,%g3
    614 	and	%l6,%l7,%g4
    615 	and	%l0,%g3,%g3
    616 	or	%g3,%g4,%g4	! Maj(a,b,c)
    617 	add	%g5,%g2,%g2		! +=K[10]
    618 	add	%g4,%l5,%l5
    619 
    620 	add	%g2,%l1,%l1
    621 	add	%g2,%l5,%l5
    622 	add	%o5,%l4,%g2
    623 	srl	%l1,6,%l4	!! 11
    624 	xor	%l2,%l3,%g5
    625 	sll	%l1,7,%g4
    626 	and	%l1,%g5,%g5
    627 	srl	%l1,11,%g3
    628 	xor	%g4,%l4,%l4
    629 	sll	%l1,21,%g4
    630 	xor	%g3,%l4,%l4
    631 	srl	%l1,25,%g3
    632 	xor	%g4,%l4,%l4
    633 	sll	%l1,26,%g4
    634 	xor	%g3,%l4,%l4
    635 	xor	%l3,%g5,%g5		! Ch(e,f,g)
    636 	xor	%g4,%l4,%g3		! Sigma1(e)
    637 
    638 	srl	%l5,2,%l4
    639 	add	%g5,%g2,%g2
    640 	ld	[%i3+44],%g5	! K[11]
    641 	sll	%l5,10,%g4
    642 	add	%g3,%g2,%g2
    643 	srl	%l5,13,%g3
    644 	xor	%g4,%l4,%l4
    645 	sll	%l5,19,%g4
    646 	xor	%g3,%l4,%l4
    647 	srl	%l5,22,%g3
    648 	xor	%g4,%l4,%l4
    649 	sll	%l5,30,%g4
    650 	xor	%g3,%l4,%l4
    651 	xor	%g4,%l4,%l4		! Sigma0(a)
    652 
    653 	or	%l5,%l6,%g3
    654 	and	%l5,%l6,%g4
    655 	and	%l7,%g3,%g3
    656 	or	%g3,%g4,%g4	! Maj(a,b,c)
    657 	add	%g5,%g2,%g2		! +=K[11]
    658 	add	%g4,%l4,%l4
    659 
    660 	add	%g2,%l0,%l0
    661 	add	%g2,%l4,%l4
    662 	srlx	%g1,32,%g2
    663 	add	%l3,%g2,%g2
    664 	srl	%l0,6,%l3	!! 12
    665 	xor	%l1,%l2,%g5
    666 	sll	%l0,7,%g4
    667 	and	%l0,%g5,%g5
    668 	srl	%l0,11,%g3
    669 	xor	%g4,%l3,%l3
    670 	sll	%l0,21,%g4
    671 	xor	%g3,%l3,%l3
    672 	srl	%l0,25,%g3
    673 	xor	%g4,%l3,%l3
    674 	sll	%l0,26,%g4
    675 	xor	%g3,%l3,%l3
    676 	xor	%l2,%g5,%g5		! Ch(e,f,g)
    677 	xor	%g4,%l3,%g3		! Sigma1(e)
    678 
    679 	srl	%l4,2,%l3
    680 	add	%g5,%g2,%g2
    681 	ld	[%i3+48],%g5	! K[12]
    682 	sll	%l4,10,%g4
    683 	add	%g3,%g2,%g2
    684 	srl	%l4,13,%g3
    685 	xor	%g4,%l3,%l3
    686 	sll	%l4,19,%g4
    687 	xor	%g3,%l3,%l3
    688 	srl	%l4,22,%g3
    689 	xor	%g4,%l3,%l3
    690 	sll	%l4,30,%g4
    691 	xor	%g3,%l3,%l3
    692 	xor	%g4,%l3,%l3		! Sigma0(a)
    693 
    694 	or	%l4,%l5,%g3
    695 	and	%l4,%l5,%g4
    696 	and	%l6,%g3,%g3
    697 	or	%g3,%g4,%g4	! Maj(a,b,c)
    698 	add	%g5,%g2,%g2		! +=K[12]
    699 	add	%g4,%l3,%l3
    700 
    701 	add	%g2,%l7,%l7
    702 	add	%g2,%l3,%l3
    703 	add	%g1,%l2,%g2
    704 	srl	%l7,6,%l2	!! 13
    705 	xor	%l0,%l1,%g5
    706 	sll	%l7,7,%g4
    707 	and	%l7,%g5,%g5
    708 	srl	%l7,11,%g3
    709 	xor	%g4,%l2,%l2
    710 	sll	%l7,21,%g4
    711 	xor	%g3,%l2,%l2
    712 	srl	%l7,25,%g3
    713 	xor	%g4,%l2,%l2
    714 	sll	%l7,26,%g4
    715 	xor	%g3,%l2,%l2
    716 	xor	%l1,%g5,%g5		! Ch(e,f,g)
    717 	xor	%g4,%l2,%g3		! Sigma1(e)
    718 
    719 	srl	%l3,2,%l2
    720 	add	%g5,%g2,%g2
    721 	ld	[%i3+52],%g5	! K[13]
    722 	sll	%l3,10,%g4
    723 	add	%g3,%g2,%g2
    724 	srl	%l3,13,%g3
    725 	xor	%g4,%l2,%l2
    726 	sll	%l3,19,%g4
    727 	xor	%g3,%l2,%l2
    728 	srl	%l3,22,%g3
    729 	xor	%g4,%l2,%l2
    730 	sll	%l3,30,%g4
    731 	xor	%g3,%l2,%l2
    732 	xor	%g4,%l2,%l2		! Sigma0(a)
    733 
    734 	or	%l3,%l4,%g3
    735 	and	%l3,%l4,%g4
    736 	and	%l5,%g3,%g3
    737 	or	%g3,%g4,%g4	! Maj(a,b,c)
    738 	add	%g5,%g2,%g2		! +=K[13]
    739 	add	%g4,%l2,%l2
    740 
    741 	add	%g2,%l6,%l6
    742 	add	%g2,%l2,%l2
    743 	srlx	%o7,32,%g2
    744 	add	%l1,%g2,%g2
    745 	srl	%l6,6,%l1	!! 14
    746 	xor	%l7,%l0,%g5
    747 	sll	%l6,7,%g4
    748 	and	%l6,%g5,%g5
    749 	srl	%l6,11,%g3
    750 	xor	%g4,%l1,%l1
    751 	sll	%l6,21,%g4
    752 	xor	%g3,%l1,%l1
    753 	srl	%l6,25,%g3
    754 	xor	%g4,%l1,%l1
    755 	sll	%l6,26,%g4
    756 	xor	%g3,%l1,%l1
    757 	xor	%l0,%g5,%g5		! Ch(e,f,g)
    758 	xor	%g4,%l1,%g3		! Sigma1(e)
    759 
    760 	srl	%l2,2,%l1
    761 	add	%g5,%g2,%g2
    762 	ld	[%i3+56],%g5	! K[14]
    763 	sll	%l2,10,%g4
    764 	add	%g3,%g2,%g2
    765 	srl	%l2,13,%g3
    766 	xor	%g4,%l1,%l1
    767 	sll	%l2,19,%g4
    768 	xor	%g3,%l1,%l1
    769 	srl	%l2,22,%g3
    770 	xor	%g4,%l1,%l1
    771 	sll	%l2,30,%g4
    772 	xor	%g3,%l1,%l1
    773 	xor	%g4,%l1,%l1		! Sigma0(a)
    774 
    775 	or	%l2,%l3,%g3
    776 	and	%l2,%l3,%g4
    777 	and	%l4,%g3,%g3
    778 	or	%g3,%g4,%g4	! Maj(a,b,c)
    779 	add	%g5,%g2,%g2		! +=K[14]
    780 	add	%g4,%l1,%l1
    781 
    782 	add	%g2,%l5,%l5
    783 	add	%g2,%l1,%l1
    784 	add	%o7,%l0,%g2
    785 	srl	%l5,6,%l0	!! 15
    786 	xor	%l6,%l7,%g5
    787 	sll	%l5,7,%g4
    788 	and	%l5,%g5,%g5
    789 	srl	%l5,11,%g3
    790 	xor	%g4,%l0,%l0
    791 	sll	%l5,21,%g4
    792 	xor	%g3,%l0,%l0
    793 	srl	%l5,25,%g3
    794 	xor	%g4,%l0,%l0
    795 	sll	%l5,26,%g4
    796 	xor	%g3,%l0,%l0
    797 	xor	%l7,%g5,%g5		! Ch(e,f,g)
    798 	xor	%g4,%l0,%g3		! Sigma1(e)
    799 
    800 	srl	%l1,2,%l0
    801 	add	%g5,%g2,%g2
    802 	ld	[%i3+60],%g5	! K[15]
    803 	sll	%l1,10,%g4
    804 	add	%g3,%g2,%g2
    805 	srl	%l1,13,%g3
    806 	xor	%g4,%l0,%l0
    807 	sll	%l1,19,%g4
    808 	xor	%g3,%l0,%l0
    809 	srl	%l1,22,%g3
    810 	xor	%g4,%l0,%l0
    811 	sll	%l1,30,%g4
    812 	xor	%g3,%l0,%l0
    813 	xor	%g4,%l0,%l0		! Sigma0(a)
    814 
    815 	or	%l1,%l2,%g3
    816 	and	%l1,%l2,%g4
    817 	and	%l3,%g3,%g3
    818 	or	%g3,%g4,%g4	! Maj(a,b,c)
    819 	add	%g5,%g2,%g2		! +=K[15]
    820 	add	%g4,%l0,%l0
    821 
    822 	add	%g2,%l4,%l4
    823 	add	%g2,%l0,%l0
    824 .L16_xx:
    825 	srl	%o0,3,%g2		!! Xupdate(16)
    826 	sll	%o0,14,%g4
    827 	srl	%o0,7,%g3
    828 	xor	%g4,%g2,%g2
    829 	sll	%g4,11,%g4
    830 	xor	%g3,%g2,%g2
    831 	srl	%o0,18,%g3
    832 	xor	%g4,%g2,%g2
    833 	srlx	%o7,32,%i5
    834 	srl	%i5,10,%g5
    835 	xor	%g3,%g2,%g2			! T1=sigma0(X[i+1])
    836 	sll	%i5,13,%g4
    837 	srl	%i5,17,%g3
    838 	xor	%g4,%g5,%g5
    839 	sll	%g4,2,%g4
    840 	xor	%g3,%g5,%g5
    841 	srl	%i5,19,%g3
    842 	xor	%g4,%g5,%g5
    843 	srlx	%o0,32,%g4		! X[i]
    844 	xor	%g3,%g5,%g5		! sigma1(X[i+14])
    845 	add	%o4,%g2,%g2			! +=X[i+9]
    846 	add	%g5,%g4,%g4
    847 	srl	%o0,0,%o0
    848 	add	%g4,%g2,%g2
    849 
    850 	sllx	%g2,32,%g3
    851 	or	%g3,%o0,%o0
    852 	add	%l7,%g2,%g2
    853 	srl	%l4,6,%l7	!! 16
    854 	xor	%l5,%l6,%g5
    855 	sll	%l4,7,%g4
    856 	and	%l4,%g5,%g5
    857 	srl	%l4,11,%g3
    858 	xor	%g4,%l7,%l7
    859 	sll	%l4,21,%g4
    860 	xor	%g3,%l7,%l7
    861 	srl	%l4,25,%g3
    862 	xor	%g4,%l7,%l7
    863 	sll	%l4,26,%g4
    864 	xor	%g3,%l7,%l7
    865 	xor	%l6,%g5,%g5		! Ch(e,f,g)
    866 	xor	%g4,%l7,%g3		! Sigma1(e)
    867 
    868 	srl	%l0,2,%l7
    869 	add	%g5,%g2,%g2
    870 	ld	[%i3+64],%g5	! K[16]
    871 	sll	%l0,10,%g4
    872 	add	%g3,%g2,%g2
    873 	srl	%l0,13,%g3
    874 	xor	%g4,%l7,%l7
    875 	sll	%l0,19,%g4
    876 	xor	%g3,%l7,%l7
    877 	srl	%l0,22,%g3
    878 	xor	%g4,%l7,%l7
    879 	sll	%l0,30,%g4
    880 	xor	%g3,%l7,%l7
    881 	xor	%g4,%l7,%l7		! Sigma0(a)
    882 
    883 	or	%l0,%l1,%g3
    884 	and	%l0,%l1,%g4
    885 	and	%l2,%g3,%g3
    886 	or	%g3,%g4,%g4	! Maj(a,b,c)
    887 	add	%g5,%g2,%g2		! +=K[16]
    888 	add	%g4,%l7,%l7
    889 
    890 	add	%g2,%l3,%l3
    891 	add	%g2,%l7,%l7
    892 	srlx	%o1,32,%i5
    893 	srl	%i5,3,%g2		!! Xupdate(17)
    894 	sll	%i5,14,%g4
    895 	srl	%i5,7,%g3
    896 	xor	%g4,%g2,%g2
    897 	sll	%g4,11,%g4
    898 	xor	%g3,%g2,%g2
    899 	srl	%i5,18,%g3
    900 	xor	%g4,%g2,%g2
    901 	srl	%o7,10,%g5
    902 	xor	%g3,%g2,%g2			! T1=sigma0(X[i+1])
    903 	sll	%o7,13,%g4
    904 	srl	%o7,17,%g3
    905 	xor	%g4,%g5,%g5
    906 	sll	%g4,2,%g4
    907 	xor	%g3,%g5,%g5
    908 	srl	%o7,19,%g3
    909 	xor	%g4,%g5,%g5
    910 	srlx	%o5,32,%g4	! X[i+9]
    911 	xor	%g3,%g5,%g5		! sigma1(X[i+14])
    912 	srl	%o0,0,%g3
    913 	add	%g5,%g4,%g4
    914 	add	%o0,%g2,%g2			! +=X[i]
    915 	xor	%g3,%o0,%o0
    916 	add	%g4,%g2,%g2
    917 
    918 	srl	%g2,0,%g2
    919 	or	%g2,%o0,%o0
    920 	add	%l6,%g2,%g2
    921 	srl	%l3,6,%l6	!! 17
    922 	xor	%l4,%l5,%g5
    923 	sll	%l3,7,%g4
    924 	and	%l3,%g5,%g5
    925 	srl	%l3,11,%g3
    926 	xor	%g4,%l6,%l6
    927 	sll	%l3,21,%g4
    928 	xor	%g3,%l6,%l6
    929 	srl	%l3,25,%g3
    930 	xor	%g4,%l6,%l6
    931 	sll	%l3,26,%g4
    932 	xor	%g3,%l6,%l6
    933 	xor	%l5,%g5,%g5		! Ch(e,f,g)
    934 	xor	%g4,%l6,%g3		! Sigma1(e)
    935 
    936 	srl	%l7,2,%l6
    937 	add	%g5,%g2,%g2
    938 	ld	[%i3+68],%g5	! K[17]
    939 	sll	%l7,10,%g4
    940 	add	%g3,%g2,%g2
    941 	srl	%l7,13,%g3
    942 	xor	%g4,%l6,%l6
    943 	sll	%l7,19,%g4
    944 	xor	%g3,%l6,%l6
    945 	srl	%l7,22,%g3
    946 	xor	%g4,%l6,%l6
    947 	sll	%l7,30,%g4
    948 	xor	%g3,%l6,%l6
    949 	xor	%g4,%l6,%l6		! Sigma0(a)
    950 
    951 	or	%l7,%l0,%g3
    952 	and	%l7,%l0,%g4
    953 	and	%l1,%g3,%g3
    954 	or	%g3,%g4,%g4	! Maj(a,b,c)
    955 	add	%g5,%g2,%g2		! +=K[17]
    956 	add	%g4,%l6,%l6
    957 
    958 	add	%g2,%l2,%l2
    959 	add	%g2,%l6,%l6
    960 	srl	%o1,3,%g2		!! Xupdate(18)
    961 	sll	%o1,14,%g4
    962 	srl	%o1,7,%g3
    963 	xor	%g4,%g2,%g2
    964 	sll	%g4,11,%g4
    965 	xor	%g3,%g2,%g2
    966 	srl	%o1,18,%g3
    967 	xor	%g4,%g2,%g2
    968 	srlx	%o0,32,%i5
    969 	srl	%i5,10,%g5
    970 	xor	%g3,%g2,%g2			! T1=sigma0(X[i+1])
    971 	sll	%i5,13,%g4
    972 	srl	%i5,17,%g3
    973 	xor	%g4,%g5,%g5
    974 	sll	%g4,2,%g4
    975 	xor	%g3,%g5,%g5
    976 	srl	%i5,19,%g3
    977 	xor	%g4,%g5,%g5
    978 	srlx	%o1,32,%g4		! X[i]
    979 	xor	%g3,%g5,%g5		! sigma1(X[i+14])
    980 	add	%o5,%g2,%g2			! +=X[i+9]
    981 	add	%g5,%g4,%g4
    982 	srl	%o1,0,%o1
    983 	add	%g4,%g2,%g2
    984 
    985 	sllx	%g2,32,%g3
    986 	or	%g3,%o1,%o1
    987 	add	%l5,%g2,%g2
    988 	srl	%l2,6,%l5	!! 18
    989 	xor	%l3,%l4,%g5
    990 	sll	%l2,7,%g4
    991 	and	%l2,%g5,%g5
    992 	srl	%l2,11,%g3
    993 	xor	%g4,%l5,%l5
    994 	sll	%l2,21,%g4
    995 	xor	%g3,%l5,%l5
    996 	srl	%l2,25,%g3
    997 	xor	%g4,%l5,%l5
    998 	sll	%l2,26,%g4
    999 	xor	%g3,%l5,%l5
   1000 	xor	%l4,%g5,%g5		! Ch(e,f,g)
   1001 	xor	%g4,%l5,%g3		! Sigma1(e)
   1002 
   1003 	srl	%l6,2,%l5
   1004 	add	%g5,%g2,%g2
   1005 	ld	[%i3+72],%g5	! K[18]
   1006 	sll	%l6,10,%g4
   1007 	add	%g3,%g2,%g2
   1008 	srl	%l6,13,%g3
   1009 	xor	%g4,%l5,%l5
   1010 	sll	%l6,19,%g4
   1011 	xor	%g3,%l5,%l5
   1012 	srl	%l6,22,%g3
   1013 	xor	%g4,%l5,%l5
   1014 	sll	%l6,30,%g4
   1015 	xor	%g3,%l5,%l5
   1016 	xor	%g4,%l5,%l5		! Sigma0(a)
   1017 
   1018 	or	%l6,%l7,%g3
   1019 	and	%l6,%l7,%g4
   1020 	and	%l0,%g3,%g3
   1021 	or	%g3,%g4,%g4	! Maj(a,b,c)
   1022 	add	%g5,%g2,%g2		! +=K[18]
   1023 	add	%g4,%l5,%l5
   1024 
   1025 	add	%g2,%l1,%l1
   1026 	add	%g2,%l5,%l5
   1027 	srlx	%o2,32,%i5
   1028 	srl	%i5,3,%g2		!! Xupdate(19)
   1029 	sll	%i5,14,%g4
   1030 	srl	%i5,7,%g3
   1031 	xor	%g4,%g2,%g2
   1032 	sll	%g4,11,%g4
   1033 	xor	%g3,%g2,%g2
   1034 	srl	%i5,18,%g3
   1035 	xor	%g4,%g2,%g2
   1036 	srl	%o0,10,%g5
   1037 	xor	%g3,%g2,%g2			! T1=sigma0(X[i+1])
   1038 	sll	%o0,13,%g4
   1039 	srl	%o0,17,%g3
   1040 	xor	%g4,%g5,%g5
   1041 	sll	%g4,2,%g4
   1042 	xor	%g3,%g5,%g5
   1043 	srl	%o0,19,%g3
   1044 	xor	%g4,%g5,%g5
   1045 	srlx	%g1,32,%g4	! X[i+9]
   1046 	xor	%g3,%g5,%g5		! sigma1(X[i+14])
   1047 	srl	%o1,0,%g3
   1048 	add	%g5,%g4,%g4
   1049 	add	%o1,%g2,%g2			! +=X[i]
   1050 	xor	%g3,%o1,%o1
   1051 	add	%g4,%g2,%g2
   1052 
   1053 	srl	%g2,0,%g2
   1054 	or	%g2,%o1,%o1
   1055 	add	%l4,%g2,%g2
   1056 	srl	%l1,6,%l4	!! 19
   1057 	xor	%l2,%l3,%g5
   1058 	sll	%l1,7,%g4
   1059 	and	%l1,%g5,%g5
   1060 	srl	%l1,11,%g3
   1061 	xor	%g4,%l4,%l4
   1062 	sll	%l1,21,%g4
   1063 	xor	%g3,%l4,%l4
   1064 	srl	%l1,25,%g3
   1065 	xor	%g4,%l4,%l4
   1066 	sll	%l1,26,%g4
   1067 	xor	%g3,%l4,%l4
   1068 	xor	%l3,%g5,%g5		! Ch(e,f,g)
   1069 	xor	%g4,%l4,%g3		! Sigma1(e)
   1070 
   1071 	srl	%l5,2,%l4
   1072 	add	%g5,%g2,%g2
   1073 	ld	[%i3+76],%g5	! K[19]
   1074 	sll	%l5,10,%g4
   1075 	add	%g3,%g2,%g2
   1076 	srl	%l5,13,%g3
   1077 	xor	%g4,%l4,%l4
   1078 	sll	%l5,19,%g4
   1079 	xor	%g3,%l4,%l4
   1080 	srl	%l5,22,%g3
   1081 	xor	%g4,%l4,%l4
   1082 	sll	%l5,30,%g4
   1083 	xor	%g3,%l4,%l4
   1084 	xor	%g4,%l4,%l4		! Sigma0(a)
   1085 
   1086 	or	%l5,%l6,%g3
   1087 	and	%l5,%l6,%g4
   1088 	and	%l7,%g3,%g3
   1089 	or	%g3,%g4,%g4	! Maj(a,b,c)
   1090 	add	%g5,%g2,%g2		! +=K[19]
   1091 	add	%g4,%l4,%l4
   1092 
   1093 	add	%g2,%l0,%l0
   1094 	add	%g2,%l4,%l4
   1095 	srl	%o2,3,%g2		!! Xupdate(20)
   1096 	sll	%o2,14,%g4
   1097 	srl	%o2,7,%g3
   1098 	xor	%g4,%g2,%g2
   1099 	sll	%g4,11,%g4
   1100 	xor	%g3,%g2,%g2
   1101 	srl	%o2,18,%g3
   1102 	xor	%g4,%g2,%g2
   1103 	srlx	%o1,32,%i5
   1104 	srl	%i5,10,%g5
   1105 	xor	%g3,%g2,%g2			! T1=sigma0(X[i+1])
   1106 	sll	%i5,13,%g4
   1107 	srl	%i5,17,%g3
   1108 	xor	%g4,%g5,%g5
   1109 	sll	%g4,2,%g4
   1110 	xor	%g3,%g5,%g5
   1111 	srl	%i5,19,%g3
   1112 	xor	%g4,%g5,%g5
   1113 	srlx	%o2,32,%g4		! X[i]
   1114 	xor	%g3,%g5,%g5		! sigma1(X[i+14])
   1115 	add	%g1,%g2,%g2			! +=X[i+9]
   1116 	add	%g5,%g4,%g4
   1117 	srl	%o2,0,%o2
   1118 	add	%g4,%g2,%g2
   1119 
   1120 	sllx	%g2,32,%g3
   1121 	or	%g3,%o2,%o2
   1122 	add	%l3,%g2,%g2
   1123 	srl	%l0,6,%l3	!! 20
   1124 	xor	%l1,%l2,%g5
   1125 	sll	%l0,7,%g4
   1126 	and	%l0,%g5,%g5
   1127 	srl	%l0,11,%g3
   1128 	xor	%g4,%l3,%l3
   1129 	sll	%l0,21,%g4
   1130 	xor	%g3,%l3,%l3
   1131 	srl	%l0,25,%g3
   1132 	xor	%g4,%l3,%l3
   1133 	sll	%l0,26,%g4
   1134 	xor	%g3,%l3,%l3
   1135 	xor	%l2,%g5,%g5		! Ch(e,f,g)
   1136 	xor	%g4,%l3,%g3		! Sigma1(e)
   1137 
   1138 	srl	%l4,2,%l3
   1139 	add	%g5,%g2,%g2
   1140 	ld	[%i3+80],%g5	! K[20]
   1141 	sll	%l4,10,%g4
   1142 	add	%g3,%g2,%g2
   1143 	srl	%l4,13,%g3
   1144 	xor	%g4,%l3,%l3
   1145 	sll	%l4,19,%g4
   1146 	xor	%g3,%l3,%l3
   1147 	srl	%l4,22,%g3
   1148 	xor	%g4,%l3,%l3
   1149 	sll	%l4,30,%g4
   1150 	xor	%g3,%l3,%l3
   1151 	xor	%g4,%l3,%l3		! Sigma0(a)
   1152 
   1153 	or	%l4,%l5,%g3
   1154 	and	%l4,%l5,%g4
   1155 	and	%l6,%g3,%g3
   1156 	or	%g3,%g4,%g4	! Maj(a,b,c)
   1157 	add	%g5,%g2,%g2		! +=K[20]
   1158 	add	%g4,%l3,%l3
   1159 
   1160 	add	%g2,%l7,%l7
   1161 	add	%g2,%l3,%l3
   1162 	srlx	%o3,32,%i5
   1163 	srl	%i5,3,%g2		!! Xupdate(21)
   1164 	sll	%i5,14,%g4
   1165 	srl	%i5,7,%g3
   1166 	xor	%g4,%g2,%g2
   1167 	sll	%g4,11,%g4
   1168 	xor	%g3,%g2,%g2
   1169 	srl	%i5,18,%g3
   1170 	xor	%g4,%g2,%g2
   1171 	srl	%o1,10,%g5
   1172 	xor	%g3,%g2,%g2			! T1=sigma0(X[i+1])
   1173 	sll	%o1,13,%g4
   1174 	srl	%o1,17,%g3
   1175 	xor	%g4,%g5,%g5
   1176 	sll	%g4,2,%g4
   1177 	xor	%g3,%g5,%g5
   1178 	srl	%o1,19,%g3
   1179 	xor	%g4,%g5,%g5
   1180 	srlx	%o7,32,%g4	! X[i+9]
   1181 	xor	%g3,%g5,%g5		! sigma1(X[i+14])
   1182 	srl	%o2,0,%g3
   1183 	add	%g5,%g4,%g4
   1184 	add	%o2,%g2,%g2			! +=X[i]
   1185 	xor	%g3,%o2,%o2
   1186 	add	%g4,%g2,%g2
   1187 
   1188 	srl	%g2,0,%g2
   1189 	or	%g2,%o2,%o2
   1190 	add	%l2,%g2,%g2
   1191 	srl	%l7,6,%l2	!! 21
   1192 	xor	%l0,%l1,%g5
   1193 	sll	%l7,7,%g4
   1194 	and	%l7,%g5,%g5
   1195 	srl	%l7,11,%g3
   1196 	xor	%g4,%l2,%l2
   1197 	sll	%l7,21,%g4
   1198 	xor	%g3,%l2,%l2
   1199 	srl	%l7,25,%g3
   1200 	xor	%g4,%l2,%l2
   1201 	sll	%l7,26,%g4
   1202 	xor	%g3,%l2,%l2
   1203 	xor	%l1,%g5,%g5		! Ch(e,f,g)
   1204 	xor	%g4,%l2,%g3		! Sigma1(e)
   1205 
   1206 	srl	%l3,2,%l2
   1207 	add	%g5,%g2,%g2
   1208 	ld	[%i3+84],%g5	! K[21]
   1209 	sll	%l3,10,%g4
   1210 	add	%g3,%g2,%g2
   1211 	srl	%l3,13,%g3
   1212 	xor	%g4,%l2,%l2
   1213 	sll	%l3,19,%g4
   1214 	xor	%g3,%l2,%l2
   1215 	srl	%l3,22,%g3
   1216 	xor	%g4,%l2,%l2
   1217 	sll	%l3,30,%g4
   1218 	xor	%g3,%l2,%l2
   1219 	xor	%g4,%l2,%l2		! Sigma0(a)
   1220 
   1221 	or	%l3,%l4,%g3
   1222 	and	%l3,%l4,%g4
   1223 	and	%l5,%g3,%g3
   1224 	or	%g3,%g4,%g4	! Maj(a,b,c)
   1225 	add	%g5,%g2,%g2		! +=K[21]
   1226 	add	%g4,%l2,%l2
   1227 
   1228 	add	%g2,%l6,%l6
   1229 	add	%g2,%l2,%l2
   1230 	srl	%o3,3,%g2		!! Xupdate(22)
   1231 	sll	%o3,14,%g4
   1232 	srl	%o3,7,%g3
   1233 	xor	%g4,%g2,%g2
   1234 	sll	%g4,11,%g4
   1235 	xor	%g3,%g2,%g2
   1236 	srl	%o3,18,%g3
   1237 	xor	%g4,%g2,%g2
   1238 	srlx	%o2,32,%i5
   1239 	srl	%i5,10,%g5
   1240 	xor	%g3,%g2,%g2			! T1=sigma0(X[i+1])
   1241 	sll	%i5,13,%g4
   1242 	srl	%i5,17,%g3
   1243 	xor	%g4,%g5,%g5
   1244 	sll	%g4,2,%g4
   1245 	xor	%g3,%g5,%g5
   1246 	srl	%i5,19,%g3
   1247 	xor	%g4,%g5,%g5
   1248 	srlx	%o3,32,%g4		! X[i]
   1249 	xor	%g3,%g5,%g5		! sigma1(X[i+14])
   1250 	add	%o7,%g2,%g2			! +=X[i+9]
   1251 	add	%g5,%g4,%g4
   1252 	srl	%o3,0,%o3
   1253 	add	%g4,%g2,%g2
   1254 
   1255 	sllx	%g2,32,%g3
   1256 	or	%g3,%o3,%o3
   1257 	add	%l1,%g2,%g2
   1258 	srl	%l6,6,%l1	!! 22
   1259 	xor	%l7,%l0,%g5
   1260 	sll	%l6,7,%g4
   1261 	and	%l6,%g5,%g5
   1262 	srl	%l6,11,%g3
   1263 	xor	%g4,%l1,%l1
   1264 	sll	%l6,21,%g4
   1265 	xor	%g3,%l1,%l1
   1266 	srl	%l6,25,%g3
   1267 	xor	%g4,%l1,%l1
   1268 	sll	%l6,26,%g4
   1269 	xor	%g3,%l1,%l1
   1270 	xor	%l0,%g5,%g5		! Ch(e,f,g)
   1271 	xor	%g4,%l1,%g3		! Sigma1(e)
   1272 
   1273 	srl	%l2,2,%l1
   1274 	add	%g5,%g2,%g2
   1275 	ld	[%i3+88],%g5	! K[22]
   1276 	sll	%l2,10,%g4
   1277 	add	%g3,%g2,%g2
   1278 	srl	%l2,13,%g3
   1279 	xor	%g4,%l1,%l1
   1280 	sll	%l2,19,%g4
   1281 	xor	%g3,%l1,%l1
   1282 	srl	%l2,22,%g3
   1283 	xor	%g4,%l1,%l1
   1284 	sll	%l2,30,%g4
   1285 	xor	%g3,%l1,%l1
   1286 	xor	%g4,%l1,%l1		! Sigma0(a)
   1287 
   1288 	or	%l2,%l3,%g3
   1289 	and	%l2,%l3,%g4
   1290 	and	%l4,%g3,%g3
   1291 	or	%g3,%g4,%g4	! Maj(a,b,c)
   1292 	add	%g5,%g2,%g2		! +=K[22]
   1293 	add	%g4,%l1,%l1
   1294 
   1295 	add	%g2,%l5,%l5
   1296 	add	%g2,%l1,%l1
   1297 	srlx	%o4,32,%i5
   1298 	srl	%i5,3,%g2		!! Xupdate(23)
   1299 	sll	%i5,14,%g4
   1300 	srl	%i5,7,%g3
   1301 	xor	%g4,%g2,%g2
   1302 	sll	%g4,11,%g4
   1303 	xor	%g3,%g2,%g2
   1304 	srl	%i5,18,%g3
   1305 	xor	%g4,%g2,%g2
   1306 	srl	%o2,10,%g5
   1307 	xor	%g3,%g2,%g2			! T1=sigma0(X[i+1])
   1308 	sll	%o2,13,%g4
   1309 	srl	%o2,17,%g3
   1310 	xor	%g4,%g5,%g5
   1311 	sll	%g4,2,%g4
   1312 	xor	%g3,%g5,%g5
   1313 	srl	%o2,19,%g3
   1314 	xor	%g4,%g5,%g5
   1315 	srlx	%o0,32,%g4	! X[i+9]
   1316 	xor	%g3,%g5,%g5		! sigma1(X[i+14])
   1317 	srl	%o3,0,%g3
   1318 	add	%g5,%g4,%g4
   1319 	add	%o3,%g2,%g2			! +=X[i]
   1320 	xor	%g3,%o3,%o3
   1321 	add	%g4,%g2,%g2
   1322 
   1323 	srl	%g2,0,%g2
   1324 	or	%g2,%o3,%o3
   1325 	add	%l0,%g2,%g2
   1326 	srl	%l5,6,%l0	!! 23
   1327 	xor	%l6,%l7,%g5
   1328 	sll	%l5,7,%g4
   1329 	and	%l5,%g5,%g5
   1330 	srl	%l5,11,%g3
   1331 	xor	%g4,%l0,%l0
   1332 	sll	%l5,21,%g4
   1333 	xor	%g3,%l0,%l0
   1334 	srl	%l5,25,%g3
   1335 	xor	%g4,%l0,%l0
   1336 	sll	%l5,26,%g4
   1337 	xor	%g3,%l0,%l0
   1338 	xor	%l7,%g5,%g5		! Ch(e,f,g)
   1339 	xor	%g4,%l0,%g3		! Sigma1(e)
   1340 
   1341 	srl	%l1,2,%l0
   1342 	add	%g5,%g2,%g2
   1343 	ld	[%i3+92],%g5	! K[23]
   1344 	sll	%l1,10,%g4
   1345 	add	%g3,%g2,%g2
   1346 	srl	%l1,13,%g3
   1347 	xor	%g4,%l0,%l0
   1348 	sll	%l1,19,%g4
   1349 	xor	%g3,%l0,%l0
   1350 	srl	%l1,22,%g3
   1351 	xor	%g4,%l0,%l0
   1352 	sll	%l1,30,%g4
   1353 	xor	%g3,%l0,%l0
   1354 	xor	%g4,%l0,%l0		! Sigma0(a)
   1355 
   1356 	or	%l1,%l2,%g3
   1357 	and	%l1,%l2,%g4
   1358 	and	%l3,%g3,%g3
   1359 	or	%g3,%g4,%g4	! Maj(a,b,c)
   1360 	add	%g5,%g2,%g2		! +=K[23]
   1361 	add	%g4,%l0,%l0
   1362 
   1363 	add	%g2,%l4,%l4
   1364 	add	%g2,%l0,%l0
   1365 	srl	%o4,3,%g2		!! Xupdate(24)
   1366 	sll	%o4,14,%g4
   1367 	srl	%o4,7,%g3
   1368 	xor	%g4,%g2,%g2
   1369 	sll	%g4,11,%g4
   1370 	xor	%g3,%g2,%g2
   1371 	srl	%o4,18,%g3
   1372 	xor	%g4,%g2,%g2
   1373 	srlx	%o3,32,%i5
   1374 	srl	%i5,10,%g5
   1375 	xor	%g3,%g2,%g2			! T1=sigma0(X[i+1])
   1376 	sll	%i5,13,%g4
   1377 	srl	%i5,17,%g3
   1378 	xor	%g4,%g5,%g5
   1379 	sll	%g4,2,%g4
   1380 	xor	%g3,%g5,%g5
   1381 	srl	%i5,19,%g3
   1382 	xor	%g4,%g5,%g5
   1383 	srlx	%o4,32,%g4		! X[i]
   1384 	xor	%g3,%g5,%g5		! sigma1(X[i+14])
   1385 	add	%o0,%g2,%g2			! +=X[i+9]
   1386 	add	%g5,%g4,%g4
   1387 	srl	%o4,0,%o4
   1388 	add	%g4,%g2,%g2
   1389 
   1390 	sllx	%g2,32,%g3
   1391 	or	%g3,%o4,%o4
   1392 	add	%l7,%g2,%g2
   1393 	srl	%l4,6,%l7	!! 24
   1394 	xor	%l5,%l6,%g5
   1395 	sll	%l4,7,%g4
   1396 	and	%l4,%g5,%g5
   1397 	srl	%l4,11,%g3
   1398 	xor	%g4,%l7,%l7
   1399 	sll	%l4,21,%g4
   1400 	xor	%g3,%l7,%l7
   1401 	srl	%l4,25,%g3
   1402 	xor	%g4,%l7,%l7
   1403 	sll	%l4,26,%g4
   1404 	xor	%g3,%l7,%l7
   1405 	xor	%l6,%g5,%g5		! Ch(e,f,g)
   1406 	xor	%g4,%l7,%g3		! Sigma1(e)
   1407 
   1408 	srl	%l0,2,%l7
   1409 	add	%g5,%g2,%g2
   1410 	ld	[%i3+96],%g5	! K[24]
   1411 	sll	%l0,10,%g4
   1412 	add	%g3,%g2,%g2
   1413 	srl	%l0,13,%g3
   1414 	xor	%g4,%l7,%l7
   1415 	sll	%l0,19,%g4
   1416 	xor	%g3,%l7,%l7
   1417 	srl	%l0,22,%g3
   1418 	xor	%g4,%l7,%l7
   1419 	sll	%l0,30,%g4
   1420 	xor	%g3,%l7,%l7
   1421 	xor	%g4,%l7,%l7		! Sigma0(a)
   1422 
   1423 	or	%l0,%l1,%g3
   1424 	and	%l0,%l1,%g4
   1425 	and	%l2,%g3,%g3
   1426 	or	%g3,%g4,%g4	! Maj(a,b,c)
   1427 	add	%g5,%g2,%g2		! +=K[24]
   1428 	add	%g4,%l7,%l7
   1429 
   1430 	add	%g2,%l3,%l3
   1431 	add	%g2,%l7,%l7
   1432 	srlx	%o5,32,%i5
   1433 	srl	%i5,3,%g2		!! Xupdate(25)
   1434 	sll	%i5,14,%g4
   1435 	srl	%i5,7,%g3
   1436 	xor	%g4,%g2,%g2
   1437 	sll	%g4,11,%g4
   1438 	xor	%g3,%g2,%g2
   1439 	srl	%i5,18,%g3
   1440 	xor	%g4,%g2,%g2
   1441 	srl	%o3,10,%g5
   1442 	xor	%g3,%g2,%g2			! T1=sigma0(X[i+1])
   1443 	sll	%o3,13,%g4
   1444 	srl	%o3,17,%g3
   1445 	xor	%g4,%g5,%g5
   1446 	sll	%g4,2,%g4
   1447 	xor	%g3,%g5,%g5
   1448 	srl	%o3,19,%g3
   1449 	xor	%g4,%g5,%g5
   1450 	srlx	%o1,32,%g4	! X[i+9]
   1451 	xor	%g3,%g5,%g5		! sigma1(X[i+14])
   1452 	srl	%o4,0,%g3
   1453 	add	%g5,%g4,%g4
   1454 	add	%o4,%g2,%g2			! +=X[i]
   1455 	xor	%g3,%o4,%o4
   1456 	add	%g4,%g2,%g2
   1457 
   1458 	srl	%g2,0,%g2
   1459 	or	%g2,%o4,%o4
   1460 	add	%l6,%g2,%g2
   1461 	srl	%l3,6,%l6	!! 25
   1462 	xor	%l4,%l5,%g5
   1463 	sll	%l3,7,%g4
   1464 	and	%l3,%g5,%g5
   1465 	srl	%l3,11,%g3
   1466 	xor	%g4,%l6,%l6
   1467 	sll	%l3,21,%g4
   1468 	xor	%g3,%l6,%l6
   1469 	srl	%l3,25,%g3
   1470 	xor	%g4,%l6,%l6
   1471 	sll	%l3,26,%g4
   1472 	xor	%g3,%l6,%l6
   1473 	xor	%l5,%g5,%g5		! Ch(e,f,g)
   1474 	xor	%g4,%l6,%g3		! Sigma1(e)
   1475 
   1476 	srl	%l7,2,%l6
   1477 	add	%g5,%g2,%g2
   1478 	ld	[%i3+100],%g5	! K[25]
   1479 	sll	%l7,10,%g4
   1480 	add	%g3,%g2,%g2
   1481 	srl	%l7,13,%g3
   1482 	xor	%g4,%l6,%l6
   1483 	sll	%l7,19,%g4
   1484 	xor	%g3,%l6,%l6
   1485 	srl	%l7,22,%g3
   1486 	xor	%g4,%l6,%l6
   1487 	sll	%l7,30,%g4
   1488 	xor	%g3,%l6,%l6
   1489 	xor	%g4,%l6,%l6		! Sigma0(a)
   1490 
   1491 	or	%l7,%l0,%g3
   1492 	and	%l7,%l0,%g4
   1493 	and	%l1,%g3,%g3
   1494 	or	%g3,%g4,%g4	! Maj(a,b,c)
   1495 	add	%g5,%g2,%g2		! +=K[25]
   1496 	add	%g4,%l6,%l6
   1497 
   1498 	add	%g2,%l2,%l2
   1499 	add	%g2,%l6,%l6
   1500 	srl	%o5,3,%g2		!! Xupdate(26)
   1501 	sll	%o5,14,%g4
   1502 	srl	%o5,7,%g3
   1503 	xor	%g4,%g2,%g2
   1504 	sll	%g4,11,%g4
   1505 	xor	%g3,%g2,%g2
   1506 	srl	%o5,18,%g3
   1507 	xor	%g4,%g2,%g2
   1508 	srlx	%o4,32,%i5
   1509 	srl	%i5,10,%g5
   1510 	xor	%g3,%g2,%g2			! T1=sigma0(X[i+1])
   1511 	sll	%i5,13,%g4
   1512 	srl	%i5,17,%g3
   1513 	xor	%g4,%g5,%g5
   1514 	sll	%g4,2,%g4
   1515 	xor	%g3,%g5,%g5
   1516 	srl	%i5,19,%g3
   1517 	xor	%g4,%g5,%g5
   1518 	srlx	%o5,32,%g4		! X[i]
   1519 	xor	%g3,%g5,%g5		! sigma1(X[i+14])
   1520 	add	%o1,%g2,%g2			! +=X[i+9]
   1521 	add	%g5,%g4,%g4
   1522 	srl	%o5,0,%o5
   1523 	add	%g4,%g2,%g2
   1524 
   1525 	sllx	%g2,32,%g3
   1526 	or	%g3,%o5,%o5
   1527 	add	%l5,%g2,%g2
   1528 	srl	%l2,6,%l5	!! 26
   1529 	xor	%l3,%l4,%g5
   1530 	sll	%l2,7,%g4
   1531 	and	%l2,%g5,%g5
   1532 	srl	%l2,11,%g3
   1533 	xor	%g4,%l5,%l5
   1534 	sll	%l2,21,%g4
   1535 	xor	%g3,%l5,%l5
   1536 	srl	%l2,25,%g3
   1537 	xor	%g4,%l5,%l5
   1538 	sll	%l2,26,%g4
   1539 	xor	%g3,%l5,%l5
   1540 	xor	%l4,%g5,%g5		! Ch(e,f,g)
   1541 	xor	%g4,%l5,%g3		! Sigma1(e)
   1542 
   1543 	srl	%l6,2,%l5
   1544 	add	%g5,%g2,%g2
   1545 	ld	[%i3+104],%g5	! K[26]
   1546 	sll	%l6,10,%g4
   1547 	add	%g3,%g2,%g2
   1548 	srl	%l6,13,%g3
   1549 	xor	%g4,%l5,%l5
   1550 	sll	%l6,19,%g4
   1551 	xor	%g3,%l5,%l5
   1552 	srl	%l6,22,%g3
   1553 	xor	%g4,%l5,%l5
   1554 	sll	%l6,30,%g4
   1555 	xor	%g3,%l5,%l5
   1556 	xor	%g4,%l5,%l5		! Sigma0(a)
   1557 
   1558 	or	%l6,%l7,%g3
   1559 	and	%l6,%l7,%g4
   1560 	and	%l0,%g3,%g3
   1561 	or	%g3,%g4,%g4	! Maj(a,b,c)
   1562 	add	%g5,%g2,%g2		! +=K[26]
   1563 	add	%g4,%l5,%l5
   1564 
   1565 	add	%g2,%l1,%l1
   1566 	add	%g2,%l5,%l5
   1567 	srlx	%g1,32,%i5
   1568 	srl	%i5,3,%g2		!! Xupdate(27)
   1569 	sll	%i5,14,%g4
   1570 	srl	%i5,7,%g3
   1571 	xor	%g4,%g2,%g2
   1572 	sll	%g4,11,%g4
   1573 	xor	%g3,%g2,%g2
   1574 	srl	%i5,18,%g3
   1575 	xor	%g4,%g2,%g2
   1576 	srl	%o4,10,%g5
   1577 	xor	%g3,%g2,%g2			! T1=sigma0(X[i+1])
   1578 	sll	%o4,13,%g4
   1579 	srl	%o4,17,%g3
   1580 	xor	%g4,%g5,%g5
   1581 	sll	%g4,2,%g4
   1582 	xor	%g3,%g5,%g5
   1583 	srl	%o4,19,%g3
   1584 	xor	%g4,%g5,%g5
   1585 	srlx	%o2,32,%g4	! X[i+9]
   1586 	xor	%g3,%g5,%g5		! sigma1(X[i+14])
   1587 	srl	%o5,0,%g3
   1588 	add	%g5,%g4,%g4
   1589 	add	%o5,%g2,%g2			! +=X[i]
   1590 	xor	%g3,%o5,%o5
   1591 	add	%g4,%g2,%g2
   1592 
   1593 	srl	%g2,0,%g2
   1594 	or	%g2,%o5,%o5
   1595 	add	%l4,%g2,%g2
   1596 	srl	%l1,6,%l4	!! 27
   1597 	xor	%l2,%l3,%g5
   1598 	sll	%l1,7,%g4
   1599 	and	%l1,%g5,%g5
   1600 	srl	%l1,11,%g3
   1601 	xor	%g4,%l4,%l4
   1602 	sll	%l1,21,%g4
   1603 	xor	%g3,%l4,%l4
   1604 	srl	%l1,25,%g3
   1605 	xor	%g4,%l4,%l4
   1606 	sll	%l1,26,%g4
   1607 	xor	%g3,%l4,%l4
   1608 	xor	%l3,%g5,%g5		! Ch(e,f,g)
   1609 	xor	%g4,%l4,%g3		! Sigma1(e)
   1610 
   1611 	srl	%l5,2,%l4
   1612 	add	%g5,%g2,%g2
   1613 	ld	[%i3+108],%g5	! K[27]
   1614 	sll	%l5,10,%g4
   1615 	add	%g3,%g2,%g2
   1616 	srl	%l5,13,%g3
   1617 	xor	%g4,%l4,%l4
   1618 	sll	%l5,19,%g4
   1619 	xor	%g3,%l4,%l4
   1620 	srl	%l5,22,%g3
   1621 	xor	%g4,%l4,%l4
   1622 	sll	%l5,30,%g4
   1623 	xor	%g3,%l4,%l4
   1624 	xor	%g4,%l4,%l4		! Sigma0(a)
   1625 
   1626 	or	%l5,%l6,%g3
   1627 	and	%l5,%l6,%g4
   1628 	and	%l7,%g3,%g3
   1629 	or	%g3,%g4,%g4	! Maj(a,b,c)
   1630 	add	%g5,%g2,%g2		! +=K[27]
   1631 	add	%g4,%l4,%l4
   1632 
   1633 	add	%g2,%l0,%l0
   1634 	add	%g2,%l4,%l4
   1635 	srl	%g1,3,%g2		!! Xupdate(28)
   1636 	sll	%g1,14,%g4
   1637 	srl	%g1,7,%g3
   1638 	xor	%g4,%g2,%g2
   1639 	sll	%g4,11,%g4
   1640 	xor	%g3,%g2,%g2
   1641 	srl	%g1,18,%g3
   1642 	xor	%g4,%g2,%g2
   1643 	srlx	%o5,32,%i5
   1644 	srl	%i5,10,%g5
   1645 	xor	%g3,%g2,%g2			! T1=sigma0(X[i+1])
   1646 	sll	%i5,13,%g4
   1647 	srl	%i5,17,%g3
   1648 	xor	%g4,%g5,%g5
   1649 	sll	%g4,2,%g4
   1650 	xor	%g3,%g5,%g5
   1651 	srl	%i5,19,%g3
   1652 	xor	%g4,%g5,%g5
   1653 	srlx	%g1,32,%g4		! X[i]
   1654 	xor	%g3,%g5,%g5		! sigma1(X[i+14])
   1655 	add	%o2,%g2,%g2			! +=X[i+9]
   1656 	add	%g5,%g4,%g4
   1657 	srl	%g1,0,%g1
   1658 	add	%g4,%g2,%g2
   1659 
   1660 	sllx	%g2,32,%g3
   1661 	or	%g3,%g1,%g1
   1662 	add	%l3,%g2,%g2
   1663 	srl	%l0,6,%l3	!! 28
   1664 	xor	%l1,%l2,%g5
   1665 	sll	%l0,7,%g4
   1666 	and	%l0,%g5,%g5
   1667 	srl	%l0,11,%g3
   1668 	xor	%g4,%l3,%l3
   1669 	sll	%l0,21,%g4
   1670 	xor	%g3,%l3,%l3
   1671 	srl	%l0,25,%g3
   1672 	xor	%g4,%l3,%l3
   1673 	sll	%l0,26,%g4
   1674 	xor	%g3,%l3,%l3
   1675 	xor	%l2,%g5,%g5		! Ch(e,f,g)
   1676 	xor	%g4,%l3,%g3		! Sigma1(e)
   1677 
   1678 	srl	%l4,2,%l3
   1679 	add	%g5,%g2,%g2
   1680 	ld	[%i3+112],%g5	! K[28]
   1681 	sll	%l4,10,%g4
   1682 	add	%g3,%g2,%g2
   1683 	srl	%l4,13,%g3
   1684 	xor	%g4,%l3,%l3
   1685 	sll	%l4,19,%g4
   1686 	xor	%g3,%l3,%l3
   1687 	srl	%l4,22,%g3
   1688 	xor	%g4,%l3,%l3
   1689 	sll	%l4,30,%g4
   1690 	xor	%g3,%l3,%l3
   1691 	xor	%g4,%l3,%l3		! Sigma0(a)
   1692 
   1693 	or	%l4,%l5,%g3
   1694 	and	%l4,%l5,%g4
   1695 	and	%l6,%g3,%g3
   1696 	or	%g3,%g4,%g4	! Maj(a,b,c)
   1697 	add	%g5,%g2,%g2		! +=K[28]
   1698 	add	%g4,%l3,%l3
   1699 
   1700 	add	%g2,%l7,%l7
   1701 	add	%g2,%l3,%l3
   1702 	srlx	%o7,32,%i5
   1703 	srl	%i5,3,%g2		!! Xupdate(29)
   1704 	sll	%i5,14,%g4
   1705 	srl	%i5,7,%g3
   1706 	xor	%g4,%g2,%g2
   1707 	sll	%g4,11,%g4
   1708 	xor	%g3,%g2,%g2
   1709 	srl	%i5,18,%g3
   1710 	xor	%g4,%g2,%g2
   1711 	srl	%o5,10,%g5
   1712 	xor	%g3,%g2,%g2			! T1=sigma0(X[i+1])
   1713 	sll	%o5,13,%g4
   1714 	srl	%o5,17,%g3
   1715 	xor	%g4,%g5,%g5
   1716 	sll	%g4,2,%g4
   1717 	xor	%g3,%g5,%g5
   1718 	srl	%o5,19,%g3
   1719 	xor	%g4,%g5,%g5
   1720 	srlx	%o3,32,%g4	! X[i+9]
   1721 	xor	%g3,%g5,%g5		! sigma1(X[i+14])
   1722 	srl	%g1,0,%g3
   1723 	add	%g5,%g4,%g4
   1724 	add	%g1,%g2,%g2			! +=X[i]
   1725 	xor	%g3,%g1,%g1
   1726 	add	%g4,%g2,%g2
   1727 
   1728 	srl	%g2,0,%g2
   1729 	or	%g2,%g1,%g1
   1730 	add	%l2,%g2,%g2
   1731 	srl	%l7,6,%l2	!! 29
   1732 	xor	%l0,%l1,%g5
   1733 	sll	%l7,7,%g4
   1734 	and	%l7,%g5,%g5
   1735 	srl	%l7,11,%g3
   1736 	xor	%g4,%l2,%l2
   1737 	sll	%l7,21,%g4
   1738 	xor	%g3,%l2,%l2
   1739 	srl	%l7,25,%g3
   1740 	xor	%g4,%l2,%l2
   1741 	sll	%l7,26,%g4
   1742 	xor	%g3,%l2,%l2
   1743 	xor	%l1,%g5,%g5		! Ch(e,f,g)
   1744 	xor	%g4,%l2,%g3		! Sigma1(e)
   1745 
   1746 	srl	%l3,2,%l2
   1747 	add	%g5,%g2,%g2
   1748 	ld	[%i3+116],%g5	! K[29]
   1749 	sll	%l3,10,%g4
   1750 	add	%g3,%g2,%g2
   1751 	srl	%l3,13,%g3
   1752 	xor	%g4,%l2,%l2
   1753 	sll	%l3,19,%g4
   1754 	xor	%g3,%l2,%l2
   1755 	srl	%l3,22,%g3
   1756 	xor	%g4,%l2,%l2
   1757 	sll	%l3,30,%g4
   1758 	xor	%g3,%l2,%l2
   1759 	xor	%g4,%l2,%l2		! Sigma0(a)
   1760 
   1761 	or	%l3,%l4,%g3
   1762 	and	%l3,%l4,%g4
   1763 	and	%l5,%g3,%g3
   1764 	or	%g3,%g4,%g4	! Maj(a,b,c)
   1765 	add	%g5,%g2,%g2		! +=K[29]
   1766 	add	%g4,%l2,%l2
   1767 
   1768 	add	%g2,%l6,%l6
   1769 	add	%g2,%l2,%l2
   1770 	srl	%o7,3,%g2		!! Xupdate(30)
   1771 	sll	%o7,14,%g4
   1772 	srl	%o7,7,%g3
   1773 	xor	%g4,%g2,%g2
   1774 	sll	%g4,11,%g4
   1775 	xor	%g3,%g2,%g2
   1776 	srl	%o7,18,%g3
   1777 	xor	%g4,%g2,%g2
   1778 	srlx	%g1,32,%i5
   1779 	srl	%i5,10,%g5
   1780 	xor	%g3,%g2,%g2			! T1=sigma0(X[i+1])
   1781 	sll	%i5,13,%g4
   1782 	srl	%i5,17,%g3
   1783 	xor	%g4,%g5,%g5
   1784 	sll	%g4,2,%g4
   1785 	xor	%g3,%g5,%g5
   1786 	srl	%i5,19,%g3
   1787 	xor	%g4,%g5,%g5
   1788 	srlx	%o7,32,%g4		! X[i]
   1789 	xor	%g3,%g5,%g5		! sigma1(X[i+14])
   1790 	add	%o3,%g2,%g2			! +=X[i+9]
   1791 	add	%g5,%g4,%g4
   1792 	srl	%o7,0,%o7
   1793 	add	%g4,%g2,%g2
   1794 
   1795 	sllx	%g2,32,%g3
   1796 	or	%g3,%o7,%o7
   1797 	add	%l1,%g2,%g2
   1798 	srl	%l6,6,%l1	!! 30
   1799 	xor	%l7,%l0,%g5
   1800 	sll	%l6,7,%g4
   1801 	and	%l6,%g5,%g5
   1802 	srl	%l6,11,%g3
   1803 	xor	%g4,%l1,%l1
   1804 	sll	%l6,21,%g4
   1805 	xor	%g3,%l1,%l1
   1806 	srl	%l6,25,%g3
   1807 	xor	%g4,%l1,%l1
   1808 	sll	%l6,26,%g4
   1809 	xor	%g3,%l1,%l1
   1810 	xor	%l0,%g5,%g5		! Ch(e,f,g)
   1811 	xor	%g4,%l1,%g3		! Sigma1(e)
   1812 
   1813 	srl	%l2,2,%l1
   1814 	add	%g5,%g2,%g2
   1815 	ld	[%i3+120],%g5	! K[30]
   1816 	sll	%l2,10,%g4
   1817 	add	%g3,%g2,%g2
   1818 	srl	%l2,13,%g3
   1819 	xor	%g4,%l1,%l1
   1820 	sll	%l2,19,%g4
   1821 	xor	%g3,%l1,%l1
   1822 	srl	%l2,22,%g3
   1823 	xor	%g4,%l1,%l1
   1824 	sll	%l2,30,%g4
   1825 	xor	%g3,%l1,%l1
   1826 	xor	%g4,%l1,%l1		! Sigma0(a)
   1827 
   1828 	or	%l2,%l3,%g3
   1829 	and	%l2,%l3,%g4
   1830 	and	%l4,%g3,%g3
   1831 	or	%g3,%g4,%g4	! Maj(a,b,c)
   1832 	add	%g5,%g2,%g2		! +=K[30]
   1833 	add	%g4,%l1,%l1
   1834 
   1835 	add	%g2,%l5,%l5
   1836 	add	%g2,%l1,%l1
   1837 	srlx	%o0,32,%i5
   1838 	srl	%i5,3,%g2		!! Xupdate(31)
   1839 	sll	%i5,14,%g4
   1840 	srl	%i5,7,%g3
   1841 	xor	%g4,%g2,%g2
   1842 	sll	%g4,11,%g4
   1843 	xor	%g3,%g2,%g2
   1844 	srl	%i5,18,%g3
   1845 	xor	%g4,%g2,%g2
   1846 	srl	%g1,10,%g5
   1847 	xor	%g3,%g2,%g2			! T1=sigma0(X[i+1])
   1848 	sll	%g1,13,%g4
   1849 	srl	%g1,17,%g3
   1850 	xor	%g4,%g5,%g5
   1851 	sll	%g4,2,%g4
   1852 	xor	%g3,%g5,%g5
   1853 	srl	%g1,19,%g3
   1854 	xor	%g4,%g5,%g5
   1855 	srlx	%o4,32,%g4	! X[i+9]
   1856 	xor	%g3,%g5,%g5		! sigma1(X[i+14])
   1857 	srl	%o7,0,%g3
   1858 	add	%g5,%g4,%g4
   1859 	add	%o7,%g2,%g2			! +=X[i]
   1860 	xor	%g3,%o7,%o7
   1861 	add	%g4,%g2,%g2
   1862 
   1863 	srl	%g2,0,%g2
   1864 	or	%g2,%o7,%o7
   1865 	add	%l0,%g2,%g2
   1866 	srl	%l5,6,%l0	!! 31
   1867 	xor	%l6,%l7,%g5
   1868 	sll	%l5,7,%g4
   1869 	and	%l5,%g5,%g5
   1870 	srl	%l5,11,%g3
   1871 	xor	%g4,%l0,%l0
   1872 	sll	%l5,21,%g4
   1873 	xor	%g3,%l0,%l0
   1874 	srl	%l5,25,%g3
   1875 	xor	%g4,%l0,%l0
   1876 	sll	%l5,26,%g4
   1877 	xor	%g3,%l0,%l0
   1878 	xor	%l7,%g5,%g5		! Ch(e,f,g)
   1879 	xor	%g4,%l0,%g3		! Sigma1(e)
   1880 
   1881 	srl	%l1,2,%l0
   1882 	add	%g5,%g2,%g2
   1883 	ld	[%i3+124],%g5	! K[31]
   1884 	sll	%l1,10,%g4
   1885 	add	%g3,%g2,%g2
   1886 	srl	%l1,13,%g3
   1887 	xor	%g4,%l0,%l0
   1888 	sll	%l1,19,%g4
   1889 	xor	%g3,%l0,%l0
   1890 	srl	%l1,22,%g3
   1891 	xor	%g4,%l0,%l0
   1892 	sll	%l1,30,%g4
   1893 	xor	%g3,%l0,%l0
   1894 	xor	%g4,%l0,%l0		! Sigma0(a)
   1895 
   1896 	or	%l1,%l2,%g3
   1897 	and	%l1,%l2,%g4
   1898 	and	%l3,%g3,%g3
   1899 	or	%g3,%g4,%g4	! Maj(a,b,c)
   1900 	add	%g5,%g2,%g2		! +=K[31]
   1901 	add	%g4,%l0,%l0
   1902 
   1903 	add	%g2,%l4,%l4
   1904 	add	%g2,%l0,%l0
   1905 	and	%g5,0xfff,%g5
   1906 	cmp	%g5,2290
   1907 	bne	.L16_xx
   1908 	add	%i3,64,%i3	! Ktbl+=16
   1909 
   1910 	ld	[%i0+0],%o0
   1911 	ld	[%i0+4],%o1
   1912 	ld	[%i0+8],%o2
   1913 	ld	[%i0+12],%o3
   1914 	ld	[%i0+16],%o4
   1915 	ld	[%i0+20],%o5
   1916 	ld	[%i0+24],%g1
   1917 	ld	[%i0+28],%o7
   1918 
   1919 	add	%l0,%o0,%l0
   1920 	st	%l0,[%i0+0]
   1921 	add	%l1,%o1,%l1
   1922 	st	%l1,[%i0+4]
   1923 	add	%l2,%o2,%l2
   1924 	st	%l2,[%i0+8]
   1925 	add	%l3,%o3,%l3
   1926 	st	%l3,[%i0+12]
   1927 	add	%l4,%o4,%l4
   1928 	st	%l4,[%i0+16]
   1929 	add	%l5,%o5,%l5
   1930 	st	%l5,[%i0+20]
   1931 	add	%l6,%g1,%l6
   1932 	st	%l6,[%i0+24]
   1933 	add	%l7,%o7,%l7
   1934 	st	%l7,[%i0+28]
   1935 	add	%i1,64,%i1		! advance inp
   1936 	cmp	%i1,%i2
   1937 	bne	SIZE_T_CC,.Lloop
   1938 	sub	%i3,192,%i3	! rewind Ktbl
   1939 
   1940 	ret
   1941 	restore
   1942 .type	sha256_block_data_order,#function
   1943 .size	sha256_block_data_order,(.-sha256_block_data_order)
   1944 .asciz	"SHA256 block transform for SPARCv9, CRYPTOGAMS by <appro (at) openssl.org>"
   1945 .align	4
   1946