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