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