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