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