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