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