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