]> CyberLeo.Net >> Repos - FreeBSD/stable/10.git/blob - secure/lib/libcrypto/amd64/x86_64-mont.S
- Make libcrypto.so position independent on i386.
[FreeBSD/stable/10.git] / secure / lib / libcrypto / amd64 / x86_64-mont.S
1 # $FreeBSD$
2 # Do not modify. This file is auto-generated from x86_64-mont.pl.
3 .text   
4
5 .globl  bn_mul_mont
6 .type   bn_mul_mont,@function
7 .align  16
8 bn_mul_mont:
9         testl   $3,%r9d
10         jnz     .Lmul_enter
11         cmpl    $8,%r9d
12         jb      .Lmul_enter
13         cmpq    %rsi,%rdx
14         jne     .Lmul4x_enter
15         jmp     .Lsqr4x_enter
16
17 .align  16
18 .Lmul_enter:
19         pushq   %rbx
20         pushq   %rbp
21         pushq   %r12
22         pushq   %r13
23         pushq   %r14
24         pushq   %r15
25
26         movl    %r9d,%r9d
27         leaq    2(%r9),%r10
28         movq    %rsp,%r11
29         negq    %r10
30         leaq    (%rsp,%r10,8),%rsp
31         andq    $-1024,%rsp
32
33         movq    %r11,8(%rsp,%r9,8)
34 .Lmul_body:
35
36
37
38
39
40
41         subq    %rsp,%r11
42         andq    $-4096,%r11
43 .Lmul_page_walk:
44         movq    (%rsp,%r11,1),%r10
45         subq    $4096,%r11
46 .byte   0x66,0x2e               
47         jnc     .Lmul_page_walk
48
49         movq    %rdx,%r12
50         movq    (%r8),%r8
51         movq    (%r12),%rbx
52         movq    (%rsi),%rax
53
54         xorq    %r14,%r14
55         xorq    %r15,%r15
56
57         movq    %r8,%rbp
58         mulq    %rbx
59         movq    %rax,%r10
60         movq    (%rcx),%rax
61
62         imulq   %r10,%rbp
63         movq    %rdx,%r11
64
65         mulq    %rbp
66         addq    %rax,%r10
67         movq    8(%rsi),%rax
68         adcq    $0,%rdx
69         movq    %rdx,%r13
70
71         leaq    1(%r15),%r15
72         jmp     .L1st_enter
73
74 .align  16
75 .L1st:
76         addq    %rax,%r13
77         movq    (%rsi,%r15,8),%rax
78         adcq    $0,%rdx
79         addq    %r11,%r13
80         movq    %r10,%r11
81         adcq    $0,%rdx
82         movq    %r13,-16(%rsp,%r15,8)
83         movq    %rdx,%r13
84
85 .L1st_enter:
86         mulq    %rbx
87         addq    %rax,%r11
88         movq    (%rcx,%r15,8),%rax
89         adcq    $0,%rdx
90         leaq    1(%r15),%r15
91         movq    %rdx,%r10
92
93         mulq    %rbp
94         cmpq    %r9,%r15
95         jne     .L1st
96
97         addq    %rax,%r13
98         movq    (%rsi),%rax
99         adcq    $0,%rdx
100         addq    %r11,%r13
101         adcq    $0,%rdx
102         movq    %r13,-16(%rsp,%r15,8)
103         movq    %rdx,%r13
104         movq    %r10,%r11
105
106         xorq    %rdx,%rdx
107         addq    %r11,%r13
108         adcq    $0,%rdx
109         movq    %r13,-8(%rsp,%r9,8)
110         movq    %rdx,(%rsp,%r9,8)
111
112         leaq    1(%r14),%r14
113         jmp     .Louter
114 .align  16
115 .Louter:
116         movq    (%r12,%r14,8),%rbx
117         xorq    %r15,%r15
118         movq    %r8,%rbp
119         movq    (%rsp),%r10
120         mulq    %rbx
121         addq    %rax,%r10
122         movq    (%rcx),%rax
123         adcq    $0,%rdx
124
125         imulq   %r10,%rbp
126         movq    %rdx,%r11
127
128         mulq    %rbp
129         addq    %rax,%r10
130         movq    8(%rsi),%rax
131         adcq    $0,%rdx
132         movq    8(%rsp),%r10
133         movq    %rdx,%r13
134
135         leaq    1(%r15),%r15
136         jmp     .Linner_enter
137
138 .align  16
139 .Linner:
140         addq    %rax,%r13
141         movq    (%rsi,%r15,8),%rax
142         adcq    $0,%rdx
143         addq    %r10,%r13
144         movq    (%rsp,%r15,8),%r10
145         adcq    $0,%rdx
146         movq    %r13,-16(%rsp,%r15,8)
147         movq    %rdx,%r13
148
149 .Linner_enter:
150         mulq    %rbx
151         addq    %rax,%r11
152         movq    (%rcx,%r15,8),%rax
153         adcq    $0,%rdx
154         addq    %r11,%r10
155         movq    %rdx,%r11
156         adcq    $0,%r11
157         leaq    1(%r15),%r15
158
159         mulq    %rbp
160         cmpq    %r9,%r15
161         jne     .Linner
162
163         addq    %rax,%r13
164         movq    (%rsi),%rax
165         adcq    $0,%rdx
166         addq    %r10,%r13
167         movq    (%rsp,%r15,8),%r10
168         adcq    $0,%rdx
169         movq    %r13,-16(%rsp,%r15,8)
170         movq    %rdx,%r13
171
172         xorq    %rdx,%rdx
173         addq    %r11,%r13
174         adcq    $0,%rdx
175         addq    %r10,%r13
176         adcq    $0,%rdx
177         movq    %r13,-8(%rsp,%r9,8)
178         movq    %rdx,(%rsp,%r9,8)
179
180         leaq    1(%r14),%r14
181         cmpq    %r9,%r14
182         jl      .Louter
183
184         xorq    %r14,%r14
185         movq    (%rsp),%rax
186         leaq    (%rsp),%rsi
187         movq    %r9,%r15
188         jmp     .Lsub
189 .align  16
190 .Lsub:  sbbq    (%rcx,%r14,8),%rax
191         movq    %rax,(%rdi,%r14,8)
192         movq    8(%rsi,%r14,8),%rax
193         leaq    1(%r14),%r14
194         decq    %r15
195         jnz     .Lsub
196
197         sbbq    $0,%rax
198         xorq    %r14,%r14
199         andq    %rax,%rsi
200         notq    %rax
201         movq    %rdi,%rcx
202         andq    %rax,%rcx
203         movq    %r9,%r15
204         orq     %rcx,%rsi
205 .align  16
206 .Lcopy:
207         movq    (%rsi,%r14,8),%rax
208         movq    %r14,(%rsp,%r14,8)
209         movq    %rax,(%rdi,%r14,8)
210         leaq    1(%r14),%r14
211         subq    $1,%r15
212         jnz     .Lcopy
213
214         movq    8(%rsp,%r9,8),%rsi
215         movq    $1,%rax
216         movq    (%rsi),%r15
217         movq    8(%rsi),%r14
218         movq    16(%rsi),%r13
219         movq    24(%rsi),%r12
220         movq    32(%rsi),%rbp
221         movq    40(%rsi),%rbx
222         leaq    48(%rsi),%rsp
223 .Lmul_epilogue:
224         .byte   0xf3,0xc3
225 .size   bn_mul_mont,.-bn_mul_mont
226 .type   bn_mul4x_mont,@function
227 .align  16
228 bn_mul4x_mont:
229 .Lmul4x_enter:
230         pushq   %rbx
231         pushq   %rbp
232         pushq   %r12
233         pushq   %r13
234         pushq   %r14
235         pushq   %r15
236
237         movl    %r9d,%r9d
238         leaq    4(%r9),%r10
239         movq    %rsp,%r11
240         negq    %r10
241         leaq    (%rsp,%r10,8),%rsp
242         andq    $-1024,%rsp
243
244         movq    %r11,8(%rsp,%r9,8)
245 .Lmul4x_body:
246         subq    %rsp,%r11
247         andq    $-4096,%r11
248 .Lmul4x_page_walk:
249         movq    (%rsp,%r11,1),%r10
250         subq    $4096,%r11
251 .byte   0x2e                    
252         jnc     .Lmul4x_page_walk
253
254         movq    %rdi,16(%rsp,%r9,8)
255         movq    %rdx,%r12
256         movq    (%r8),%r8
257         movq    (%r12),%rbx
258         movq    (%rsi),%rax
259
260         xorq    %r14,%r14
261         xorq    %r15,%r15
262
263         movq    %r8,%rbp
264         mulq    %rbx
265         movq    %rax,%r10
266         movq    (%rcx),%rax
267
268         imulq   %r10,%rbp
269         movq    %rdx,%r11
270
271         mulq    %rbp
272         addq    %rax,%r10
273         movq    8(%rsi),%rax
274         adcq    $0,%rdx
275         movq    %rdx,%rdi
276
277         mulq    %rbx
278         addq    %rax,%r11
279         movq    8(%rcx),%rax
280         adcq    $0,%rdx
281         movq    %rdx,%r10
282
283         mulq    %rbp
284         addq    %rax,%rdi
285         movq    16(%rsi),%rax
286         adcq    $0,%rdx
287         addq    %r11,%rdi
288         leaq    4(%r15),%r15
289         adcq    $0,%rdx
290         movq    %rdi,(%rsp)
291         movq    %rdx,%r13
292         jmp     .L1st4x
293 .align  16
294 .L1st4x:
295         mulq    %rbx
296         addq    %rax,%r10
297         movq    -16(%rcx,%r15,8),%rax
298         adcq    $0,%rdx
299         movq    %rdx,%r11
300
301         mulq    %rbp
302         addq    %rax,%r13
303         movq    -8(%rsi,%r15,8),%rax
304         adcq    $0,%rdx
305         addq    %r10,%r13
306         adcq    $0,%rdx
307         movq    %r13,-24(%rsp,%r15,8)
308         movq    %rdx,%rdi
309
310         mulq    %rbx
311         addq    %rax,%r11
312         movq    -8(%rcx,%r15,8),%rax
313         adcq    $0,%rdx
314         movq    %rdx,%r10
315
316         mulq    %rbp
317         addq    %rax,%rdi
318         movq    (%rsi,%r15,8),%rax
319         adcq    $0,%rdx
320         addq    %r11,%rdi
321         adcq    $0,%rdx
322         movq    %rdi,-16(%rsp,%r15,8)
323         movq    %rdx,%r13
324
325         mulq    %rbx
326         addq    %rax,%r10
327         movq    (%rcx,%r15,8),%rax
328         adcq    $0,%rdx
329         movq    %rdx,%r11
330
331         mulq    %rbp
332         addq    %rax,%r13
333         movq    8(%rsi,%r15,8),%rax
334         adcq    $0,%rdx
335         addq    %r10,%r13
336         adcq    $0,%rdx
337         movq    %r13,-8(%rsp,%r15,8)
338         movq    %rdx,%rdi
339
340         mulq    %rbx
341         addq    %rax,%r11
342         movq    8(%rcx,%r15,8),%rax
343         adcq    $0,%rdx
344         leaq    4(%r15),%r15
345         movq    %rdx,%r10
346
347         mulq    %rbp
348         addq    %rax,%rdi
349         movq    -16(%rsi,%r15,8),%rax
350         adcq    $0,%rdx
351         addq    %r11,%rdi
352         adcq    $0,%rdx
353         movq    %rdi,-32(%rsp,%r15,8)
354         movq    %rdx,%r13
355         cmpq    %r9,%r15
356         jl      .L1st4x
357
358         mulq    %rbx
359         addq    %rax,%r10
360         movq    -16(%rcx,%r15,8),%rax
361         adcq    $0,%rdx
362         movq    %rdx,%r11
363
364         mulq    %rbp
365         addq    %rax,%r13
366         movq    -8(%rsi,%r15,8),%rax
367         adcq    $0,%rdx
368         addq    %r10,%r13
369         adcq    $0,%rdx
370         movq    %r13,-24(%rsp,%r15,8)
371         movq    %rdx,%rdi
372
373         mulq    %rbx
374         addq    %rax,%r11
375         movq    -8(%rcx,%r15,8),%rax
376         adcq    $0,%rdx
377         movq    %rdx,%r10
378
379         mulq    %rbp
380         addq    %rax,%rdi
381         movq    (%rsi),%rax
382         adcq    $0,%rdx
383         addq    %r11,%rdi
384         adcq    $0,%rdx
385         movq    %rdi,-16(%rsp,%r15,8)
386         movq    %rdx,%r13
387
388         xorq    %rdi,%rdi
389         addq    %r10,%r13
390         adcq    $0,%rdi
391         movq    %r13,-8(%rsp,%r15,8)
392         movq    %rdi,(%rsp,%r15,8)
393
394         leaq    1(%r14),%r14
395 .align  4
396 .Louter4x:
397         movq    (%r12,%r14,8),%rbx
398         xorq    %r15,%r15
399         movq    (%rsp),%r10
400         movq    %r8,%rbp
401         mulq    %rbx
402         addq    %rax,%r10
403         movq    (%rcx),%rax
404         adcq    $0,%rdx
405
406         imulq   %r10,%rbp
407         movq    %rdx,%r11
408
409         mulq    %rbp
410         addq    %rax,%r10
411         movq    8(%rsi),%rax
412         adcq    $0,%rdx
413         movq    %rdx,%rdi
414
415         mulq    %rbx
416         addq    %rax,%r11
417         movq    8(%rcx),%rax
418         adcq    $0,%rdx
419         addq    8(%rsp),%r11
420         adcq    $0,%rdx
421         movq    %rdx,%r10
422
423         mulq    %rbp
424         addq    %rax,%rdi
425         movq    16(%rsi),%rax
426         adcq    $0,%rdx
427         addq    %r11,%rdi
428         leaq    4(%r15),%r15
429         adcq    $0,%rdx
430         movq    %rdi,(%rsp)
431         movq    %rdx,%r13
432         jmp     .Linner4x
433 .align  16
434 .Linner4x:
435         mulq    %rbx
436         addq    %rax,%r10
437         movq    -16(%rcx,%r15,8),%rax
438         adcq    $0,%rdx
439         addq    -16(%rsp,%r15,8),%r10
440         adcq    $0,%rdx
441         movq    %rdx,%r11
442
443         mulq    %rbp
444         addq    %rax,%r13
445         movq    -8(%rsi,%r15,8),%rax
446         adcq    $0,%rdx
447         addq    %r10,%r13
448         adcq    $0,%rdx
449         movq    %r13,-24(%rsp,%r15,8)
450         movq    %rdx,%rdi
451
452         mulq    %rbx
453         addq    %rax,%r11
454         movq    -8(%rcx,%r15,8),%rax
455         adcq    $0,%rdx
456         addq    -8(%rsp,%r15,8),%r11
457         adcq    $0,%rdx
458         movq    %rdx,%r10
459
460         mulq    %rbp
461         addq    %rax,%rdi
462         movq    (%rsi,%r15,8),%rax
463         adcq    $0,%rdx
464         addq    %r11,%rdi
465         adcq    $0,%rdx
466         movq    %rdi,-16(%rsp,%r15,8)
467         movq    %rdx,%r13
468
469         mulq    %rbx
470         addq    %rax,%r10
471         movq    (%rcx,%r15,8),%rax
472         adcq    $0,%rdx
473         addq    (%rsp,%r15,8),%r10
474         adcq    $0,%rdx
475         movq    %rdx,%r11
476
477         mulq    %rbp
478         addq    %rax,%r13
479         movq    8(%rsi,%r15,8),%rax
480         adcq    $0,%rdx
481         addq    %r10,%r13
482         adcq    $0,%rdx
483         movq    %r13,-8(%rsp,%r15,8)
484         movq    %rdx,%rdi
485
486         mulq    %rbx
487         addq    %rax,%r11
488         movq    8(%rcx,%r15,8),%rax
489         adcq    $0,%rdx
490         addq    8(%rsp,%r15,8),%r11
491         adcq    $0,%rdx
492         leaq    4(%r15),%r15
493         movq    %rdx,%r10
494
495         mulq    %rbp
496         addq    %rax,%rdi
497         movq    -16(%rsi,%r15,8),%rax
498         adcq    $0,%rdx
499         addq    %r11,%rdi
500         adcq    $0,%rdx
501         movq    %rdi,-32(%rsp,%r15,8)
502         movq    %rdx,%r13
503         cmpq    %r9,%r15
504         jl      .Linner4x
505
506         mulq    %rbx
507         addq    %rax,%r10
508         movq    -16(%rcx,%r15,8),%rax
509         adcq    $0,%rdx
510         addq    -16(%rsp,%r15,8),%r10
511         adcq    $0,%rdx
512         movq    %rdx,%r11
513
514         mulq    %rbp
515         addq    %rax,%r13
516         movq    -8(%rsi,%r15,8),%rax
517         adcq    $0,%rdx
518         addq    %r10,%r13
519         adcq    $0,%rdx
520         movq    %r13,-24(%rsp,%r15,8)
521         movq    %rdx,%rdi
522
523         mulq    %rbx
524         addq    %rax,%r11
525         movq    -8(%rcx,%r15,8),%rax
526         adcq    $0,%rdx
527         addq    -8(%rsp,%r15,8),%r11
528         adcq    $0,%rdx
529         leaq    1(%r14),%r14
530         movq    %rdx,%r10
531
532         mulq    %rbp
533         addq    %rax,%rdi
534         movq    (%rsi),%rax
535         adcq    $0,%rdx
536         addq    %r11,%rdi
537         adcq    $0,%rdx
538         movq    %rdi,-16(%rsp,%r15,8)
539         movq    %rdx,%r13
540
541         xorq    %rdi,%rdi
542         addq    %r10,%r13
543         adcq    $0,%rdi
544         addq    (%rsp,%r9,8),%r13
545         adcq    $0,%rdi
546         movq    %r13,-8(%rsp,%r15,8)
547         movq    %rdi,(%rsp,%r15,8)
548
549         cmpq    %r9,%r14
550         jl      .Louter4x
551         movq    16(%rsp,%r9,8),%rdi
552         movq    0(%rsp),%rax
553         pxor    %xmm0,%xmm0
554         movq    8(%rsp),%rdx
555         shrq    $2,%r9
556         leaq    (%rsp),%rsi
557         xorq    %r14,%r14
558
559         subq    0(%rcx),%rax
560         movq    16(%rsi),%rbx
561         movq    24(%rsi),%rbp
562         sbbq    8(%rcx),%rdx
563         leaq    -1(%r9),%r15
564         jmp     .Lsub4x
565 .align  16
566 .Lsub4x:
567         movq    %rax,0(%rdi,%r14,8)
568         movq    %rdx,8(%rdi,%r14,8)
569         sbbq    16(%rcx,%r14,8),%rbx
570         movq    32(%rsi,%r14,8),%rax
571         movq    40(%rsi,%r14,8),%rdx
572         sbbq    24(%rcx,%r14,8),%rbp
573         movq    %rbx,16(%rdi,%r14,8)
574         movq    %rbp,24(%rdi,%r14,8)
575         sbbq    32(%rcx,%r14,8),%rax
576         movq    48(%rsi,%r14,8),%rbx
577         movq    56(%rsi,%r14,8),%rbp
578         sbbq    40(%rcx,%r14,8),%rdx
579         leaq    4(%r14),%r14
580         decq    %r15
581         jnz     .Lsub4x
582
583         movq    %rax,0(%rdi,%r14,8)
584         movq    32(%rsi,%r14,8),%rax
585         sbbq    16(%rcx,%r14,8),%rbx
586         movq    %rdx,8(%rdi,%r14,8)
587         sbbq    24(%rcx,%r14,8),%rbp
588         movq    %rbx,16(%rdi,%r14,8)
589
590         sbbq    $0,%rax
591         movq    %rbp,24(%rdi,%r14,8)
592         xorq    %r14,%r14
593         andq    %rax,%rsi
594         notq    %rax
595         movq    %rdi,%rcx
596         andq    %rax,%rcx
597         leaq    -1(%r9),%r15
598         orq     %rcx,%rsi
599
600         movdqu  (%rsi),%xmm1
601         movdqa  %xmm0,(%rsp)
602         movdqu  %xmm1,(%rdi)
603         jmp     .Lcopy4x
604 .align  16
605 .Lcopy4x:
606         movdqu  16(%rsi,%r14,1),%xmm2
607         movdqu  32(%rsi,%r14,1),%xmm1
608         movdqa  %xmm0,16(%rsp,%r14,1)
609         movdqu  %xmm2,16(%rdi,%r14,1)
610         movdqa  %xmm0,32(%rsp,%r14,1)
611         movdqu  %xmm1,32(%rdi,%r14,1)
612         leaq    32(%r14),%r14
613         decq    %r15
614         jnz     .Lcopy4x
615
616         shlq    $2,%r9
617         movdqu  16(%rsi,%r14,1),%xmm2
618         movdqa  %xmm0,16(%rsp,%r14,1)
619         movdqu  %xmm2,16(%rdi,%r14,1)
620         movq    8(%rsp,%r9,8),%rsi
621         movq    $1,%rax
622         movq    (%rsi),%r15
623         movq    8(%rsi),%r14
624         movq    16(%rsi),%r13
625         movq    24(%rsi),%r12
626         movq    32(%rsi),%rbp
627         movq    40(%rsi),%rbx
628         leaq    48(%rsi),%rsp
629 .Lmul4x_epilogue:
630         .byte   0xf3,0xc3
631 .size   bn_mul4x_mont,.-bn_mul4x_mont
632 .type   bn_sqr4x_mont,@function
633 .align  16
634 bn_sqr4x_mont:
635 .Lsqr4x_enter:
636         movq    %rsp,%rax
637         pushq   %rbx
638         pushq   %rbp
639         pushq   %r12
640         pushq   %r13
641         pushq   %r14
642         pushq   %r15
643
644         shll    $3,%r9d
645         movq    %rsp,%r11
646         negq    %r9
647         movq    (%r8),%r8
648         leaq    -72(%rsp,%r9,2),%rsp
649         andq    $-1024,%rsp
650
651         subq    %rsp,%r11
652         andq    $-4096,%r11
653 .Lsqr4x_page_walk:
654         movq    (%rsp,%r11,1),%r10
655         subq    $4096,%r11
656 .byte   0x2e                    
657         jnc     .Lsqr4x_page_walk
658
659         movq    %r9,%r10
660         negq    %r9
661         leaq    -48(%rax),%r11
662
663
664
665
666
667
668
669
670
671
672
673         movq    %rdi,32(%rsp)
674         movq    %rcx,40(%rsp)
675         movq    %r8,48(%rsp)
676         movq    %r11,56(%rsp)
677 .Lsqr4x_body:
678
679
680
681
682
683
684
685         leaq    32(%r10),%rbp
686         leaq    (%rsi,%r9,1),%rsi
687
688         movq    %r9,%rcx
689
690
691         movq    -32(%rsi,%rbp,1),%r14
692         leaq    64(%rsp,%r9,2),%rdi
693         movq    -24(%rsi,%rbp,1),%rax
694         leaq    -32(%rdi,%rbp,1),%rdi
695         movq    -16(%rsi,%rbp,1),%rbx
696         movq    %rax,%r15
697
698         mulq    %r14
699         movq    %rax,%r10
700         movq    %rbx,%rax
701         movq    %rdx,%r11
702         movq    %r10,-24(%rdi,%rbp,1)
703
704         xorq    %r10,%r10
705         mulq    %r14
706         addq    %rax,%r11
707         movq    %rbx,%rax
708         adcq    %rdx,%r10
709         movq    %r11,-16(%rdi,%rbp,1)
710
711         leaq    -16(%rbp),%rcx
712
713
714         movq    8(%rsi,%rcx,1),%rbx
715         mulq    %r15
716         movq    %rax,%r12
717         movq    %rbx,%rax
718         movq    %rdx,%r13
719
720         xorq    %r11,%r11
721         addq    %r12,%r10
722         leaq    16(%rcx),%rcx
723         adcq    $0,%r11
724         mulq    %r14
725         addq    %rax,%r10
726         movq    %rbx,%rax
727         adcq    %rdx,%r11
728         movq    %r10,-8(%rdi,%rcx,1)
729         jmp     .Lsqr4x_1st
730
731 .align  16
732 .Lsqr4x_1st:
733         movq    (%rsi,%rcx,1),%rbx
734         xorq    %r12,%r12
735         mulq    %r15
736         addq    %rax,%r13
737         movq    %rbx,%rax
738         adcq    %rdx,%r12
739
740         xorq    %r10,%r10
741         addq    %r13,%r11
742         adcq    $0,%r10
743         mulq    %r14
744         addq    %rax,%r11
745         movq    %rbx,%rax
746         adcq    %rdx,%r10
747         movq    %r11,(%rdi,%rcx,1)
748
749
750         movq    8(%rsi,%rcx,1),%rbx
751         xorq    %r13,%r13
752         mulq    %r15
753         addq    %rax,%r12
754         movq    %rbx,%rax
755         adcq    %rdx,%r13
756
757         xorq    %r11,%r11
758         addq    %r12,%r10
759         adcq    $0,%r11
760         mulq    %r14
761         addq    %rax,%r10
762         movq    %rbx,%rax
763         adcq    %rdx,%r11
764         movq    %r10,8(%rdi,%rcx,1)
765
766         movq    16(%rsi,%rcx,1),%rbx
767         xorq    %r12,%r12
768         mulq    %r15
769         addq    %rax,%r13
770         movq    %rbx,%rax
771         adcq    %rdx,%r12
772
773         xorq    %r10,%r10
774         addq    %r13,%r11
775         adcq    $0,%r10
776         mulq    %r14
777         addq    %rax,%r11
778         movq    %rbx,%rax
779         adcq    %rdx,%r10
780         movq    %r11,16(%rdi,%rcx,1)
781
782
783         movq    24(%rsi,%rcx,1),%rbx
784         xorq    %r13,%r13
785         mulq    %r15
786         addq    %rax,%r12
787         movq    %rbx,%rax
788         adcq    %rdx,%r13
789
790         xorq    %r11,%r11
791         addq    %r12,%r10
792         leaq    32(%rcx),%rcx
793         adcq    $0,%r11
794         mulq    %r14
795         addq    %rax,%r10
796         movq    %rbx,%rax
797         adcq    %rdx,%r11
798         movq    %r10,-8(%rdi,%rcx,1)
799
800         cmpq    $0,%rcx
801         jne     .Lsqr4x_1st
802
803         xorq    %r12,%r12
804         addq    %r11,%r13
805         adcq    $0,%r12
806         mulq    %r15
807         addq    %rax,%r13
808         adcq    %rdx,%r12
809
810         movq    %r13,(%rdi)
811         leaq    16(%rbp),%rbp
812         movq    %r12,8(%rdi)
813         jmp     .Lsqr4x_outer
814
815 .align  16
816 .Lsqr4x_outer:
817         movq    -32(%rsi,%rbp,1),%r14
818         leaq    64(%rsp,%r9,2),%rdi
819         movq    -24(%rsi,%rbp,1),%rax
820         leaq    -32(%rdi,%rbp,1),%rdi
821         movq    -16(%rsi,%rbp,1),%rbx
822         movq    %rax,%r15
823
824         movq    -24(%rdi,%rbp,1),%r10
825         xorq    %r11,%r11
826         mulq    %r14
827         addq    %rax,%r10
828         movq    %rbx,%rax
829         adcq    %rdx,%r11
830         movq    %r10,-24(%rdi,%rbp,1)
831
832         xorq    %r10,%r10
833         addq    -16(%rdi,%rbp,1),%r11
834         adcq    $0,%r10
835         mulq    %r14
836         addq    %rax,%r11
837         movq    %rbx,%rax
838         adcq    %rdx,%r10
839         movq    %r11,-16(%rdi,%rbp,1)
840
841         leaq    -16(%rbp),%rcx
842         xorq    %r12,%r12
843
844
845         movq    8(%rsi,%rcx,1),%rbx
846         xorq    %r13,%r13
847         addq    8(%rdi,%rcx,1),%r12
848         adcq    $0,%r13
849         mulq    %r15
850         addq    %rax,%r12
851         movq    %rbx,%rax
852         adcq    %rdx,%r13
853
854         xorq    %r11,%r11
855         addq    %r12,%r10
856         adcq    $0,%r11
857         mulq    %r14
858         addq    %rax,%r10
859         movq    %rbx,%rax
860         adcq    %rdx,%r11
861         movq    %r10,8(%rdi,%rcx,1)
862
863         leaq    16(%rcx),%rcx
864         jmp     .Lsqr4x_inner
865
866 .align  16
867 .Lsqr4x_inner:
868         movq    (%rsi,%rcx,1),%rbx
869         xorq    %r12,%r12
870         addq    (%rdi,%rcx,1),%r13
871         adcq    $0,%r12
872         mulq    %r15
873         addq    %rax,%r13
874         movq    %rbx,%rax
875         adcq    %rdx,%r12
876
877         xorq    %r10,%r10
878         addq    %r13,%r11
879         adcq    $0,%r10
880         mulq    %r14
881         addq    %rax,%r11
882         movq    %rbx,%rax
883         adcq    %rdx,%r10
884         movq    %r11,(%rdi,%rcx,1)
885
886         movq    8(%rsi,%rcx,1),%rbx
887         xorq    %r13,%r13
888         addq    8(%rdi,%rcx,1),%r12
889         adcq    $0,%r13
890         mulq    %r15
891         addq    %rax,%r12
892         movq    %rbx,%rax
893         adcq    %rdx,%r13
894
895         xorq    %r11,%r11
896         addq    %r12,%r10
897         leaq    16(%rcx),%rcx
898         adcq    $0,%r11
899         mulq    %r14
900         addq    %rax,%r10
901         movq    %rbx,%rax
902         adcq    %rdx,%r11
903         movq    %r10,-8(%rdi,%rcx,1)
904
905         cmpq    $0,%rcx
906         jne     .Lsqr4x_inner
907
908         xorq    %r12,%r12
909         addq    %r11,%r13
910         adcq    $0,%r12
911         mulq    %r15
912         addq    %rax,%r13
913         adcq    %rdx,%r12
914
915         movq    %r13,(%rdi)
916         movq    %r12,8(%rdi)
917
918         addq    $16,%rbp
919         jnz     .Lsqr4x_outer
920
921
922         movq    -32(%rsi),%r14
923         leaq    64(%rsp,%r9,2),%rdi
924         movq    -24(%rsi),%rax
925         leaq    -32(%rdi,%rbp,1),%rdi
926         movq    -16(%rsi),%rbx
927         movq    %rax,%r15
928
929         xorq    %r11,%r11
930         mulq    %r14
931         addq    %rax,%r10
932         movq    %rbx,%rax
933         adcq    %rdx,%r11
934         movq    %r10,-24(%rdi)
935
936         xorq    %r10,%r10
937         addq    %r13,%r11
938         adcq    $0,%r10
939         mulq    %r14
940         addq    %rax,%r11
941         movq    %rbx,%rax
942         adcq    %rdx,%r10
943         movq    %r11,-16(%rdi)
944
945         movq    -8(%rsi),%rbx
946         mulq    %r15
947         addq    %rax,%r12
948         movq    %rbx,%rax
949         adcq    $0,%rdx
950
951         xorq    %r11,%r11
952         addq    %r12,%r10
953         movq    %rdx,%r13
954         adcq    $0,%r11
955         mulq    %r14
956         addq    %rax,%r10
957         movq    %rbx,%rax
958         adcq    %rdx,%r11
959         movq    %r10,-8(%rdi)
960
961         xorq    %r12,%r12
962         addq    %r11,%r13
963         adcq    $0,%r12
964         mulq    %r15
965         addq    %rax,%r13
966         movq    -16(%rsi),%rax
967         adcq    %rdx,%r12
968
969         movq    %r13,(%rdi)
970         movq    %r12,8(%rdi)
971
972         mulq    %rbx
973         addq    $16,%rbp
974         xorq    %r14,%r14
975         subq    %r9,%rbp
976         xorq    %r15,%r15
977
978         addq    %r12,%rax
979         adcq    $0,%rdx
980         movq    %rax,8(%rdi)
981         movq    %rdx,16(%rdi)
982         movq    %r15,24(%rdi)
983
984         movq    -16(%rsi,%rbp,1),%rax
985         leaq    64(%rsp,%r9,2),%rdi
986         xorq    %r10,%r10
987         movq    -24(%rdi,%rbp,2),%r11
988
989         leaq    (%r14,%r10,2),%r12
990         shrq    $63,%r10
991         leaq    (%rcx,%r11,2),%r13
992         shrq    $63,%r11
993         orq     %r10,%r13
994         movq    -16(%rdi,%rbp,2),%r10
995         movq    %r11,%r14
996         mulq    %rax
997         negq    %r15
998         movq    -8(%rdi,%rbp,2),%r11
999         adcq    %rax,%r12
1000         movq    -8(%rsi,%rbp,1),%rax
1001         movq    %r12,-32(%rdi,%rbp,2)
1002         adcq    %rdx,%r13
1003
1004         leaq    (%r14,%r10,2),%rbx
1005         movq    %r13,-24(%rdi,%rbp,2)
1006         sbbq    %r15,%r15
1007         shrq    $63,%r10
1008         leaq    (%rcx,%r11,2),%r8
1009         shrq    $63,%r11
1010         orq     %r10,%r8
1011         movq    0(%rdi,%rbp,2),%r10
1012         movq    %r11,%r14
1013         mulq    %rax
1014         negq    %r15
1015         movq    8(%rdi,%rbp,2),%r11
1016         adcq    %rax,%rbx
1017         movq    0(%rsi,%rbp,1),%rax
1018         movq    %rbx,-16(%rdi,%rbp,2)
1019         adcq    %rdx,%r8
1020         leaq    16(%rbp),%rbp
1021         movq    %r8,-40(%rdi,%rbp,2)
1022         sbbq    %r15,%r15
1023         jmp     .Lsqr4x_shift_n_add
1024
1025 .align  16
1026 .Lsqr4x_shift_n_add:
1027         leaq    (%r14,%r10,2),%r12
1028         shrq    $63,%r10
1029         leaq    (%rcx,%r11,2),%r13
1030         shrq    $63,%r11
1031         orq     %r10,%r13
1032         movq    -16(%rdi,%rbp,2),%r10
1033         movq    %r11,%r14
1034         mulq    %rax
1035         negq    %r15
1036         movq    -8(%rdi,%rbp,2),%r11
1037         adcq    %rax,%r12
1038         movq    -8(%rsi,%rbp,1),%rax
1039         movq    %r12,-32(%rdi,%rbp,2)
1040         adcq    %rdx,%r13
1041
1042         leaq    (%r14,%r10,2),%rbx
1043         movq    %r13,-24(%rdi,%rbp,2)
1044         sbbq    %r15,%r15
1045         shrq    $63,%r10
1046         leaq    (%rcx,%r11,2),%r8
1047         shrq    $63,%r11
1048         orq     %r10,%r8
1049         movq    0(%rdi,%rbp,2),%r10
1050         movq    %r11,%r14
1051         mulq    %rax
1052         negq    %r15
1053         movq    8(%rdi,%rbp,2),%r11
1054         adcq    %rax,%rbx
1055         movq    0(%rsi,%rbp,1),%rax
1056         movq    %rbx,-16(%rdi,%rbp,2)
1057         adcq    %rdx,%r8
1058
1059         leaq    (%r14,%r10,2),%r12
1060         movq    %r8,-8(%rdi,%rbp,2)
1061         sbbq    %r15,%r15
1062         shrq    $63,%r10
1063         leaq    (%rcx,%r11,2),%r13
1064         shrq    $63,%r11
1065         orq     %r10,%r13
1066         movq    16(%rdi,%rbp,2),%r10
1067         movq    %r11,%r14
1068         mulq    %rax
1069         negq    %r15
1070         movq    24(%rdi,%rbp,2),%r11
1071         adcq    %rax,%r12
1072         movq    8(%rsi,%rbp,1),%rax
1073         movq    %r12,0(%rdi,%rbp,2)
1074         adcq    %rdx,%r13
1075
1076         leaq    (%r14,%r10,2),%rbx
1077         movq    %r13,8(%rdi,%rbp,2)
1078         sbbq    %r15,%r15
1079         shrq    $63,%r10
1080         leaq    (%rcx,%r11,2),%r8
1081         shrq    $63,%r11
1082         orq     %r10,%r8
1083         movq    32(%rdi,%rbp,2),%r10
1084         movq    %r11,%r14
1085         mulq    %rax
1086         negq    %r15
1087         movq    40(%rdi,%rbp,2),%r11
1088         adcq    %rax,%rbx
1089         movq    16(%rsi,%rbp,1),%rax
1090         movq    %rbx,16(%rdi,%rbp,2)
1091         adcq    %rdx,%r8
1092         movq    %r8,24(%rdi,%rbp,2)
1093         sbbq    %r15,%r15
1094         addq    $32,%rbp
1095         jnz     .Lsqr4x_shift_n_add
1096
1097         leaq    (%r14,%r10,2),%r12
1098         shrq    $63,%r10
1099         leaq    (%rcx,%r11,2),%r13
1100         shrq    $63,%r11
1101         orq     %r10,%r13
1102         movq    -16(%rdi),%r10
1103         movq    %r11,%r14
1104         mulq    %rax
1105         negq    %r15
1106         movq    -8(%rdi),%r11
1107         adcq    %rax,%r12
1108         movq    -8(%rsi),%rax
1109         movq    %r12,-32(%rdi)
1110         adcq    %rdx,%r13
1111
1112         leaq    (%r14,%r10,2),%rbx
1113         movq    %r13,-24(%rdi)
1114         sbbq    %r15,%r15
1115         shrq    $63,%r10
1116         leaq    (%rcx,%r11,2),%r8
1117         shrq    $63,%r11
1118         orq     %r10,%r8
1119         mulq    %rax
1120         negq    %r15
1121         adcq    %rax,%rbx
1122         adcq    %rdx,%r8
1123         movq    %rbx,-16(%rdi)
1124         movq    %r8,-8(%rdi)
1125         movq    40(%rsp),%rsi
1126         movq    48(%rsp),%r8
1127         xorq    %rcx,%rcx
1128         movq    %r9,0(%rsp)
1129         subq    %r9,%rcx
1130         movq    64(%rsp),%r10
1131         movq    %r8,%r14
1132         leaq    64(%rsp,%r9,2),%rax
1133         leaq    64(%rsp,%r9,1),%rdi
1134         movq    %rax,8(%rsp)
1135         leaq    (%rsi,%r9,1),%rsi
1136         xorq    %rbp,%rbp
1137
1138         movq    0(%rsi,%rcx,1),%rax
1139         movq    8(%rsi,%rcx,1),%r9
1140         imulq   %r10,%r14
1141         movq    %rax,%rbx
1142         jmp     .Lsqr4x_mont_outer
1143
1144 .align  16
1145 .Lsqr4x_mont_outer:
1146         xorq    %r11,%r11
1147         mulq    %r14
1148         addq    %rax,%r10
1149         movq    %r9,%rax
1150         adcq    %rdx,%r11
1151         movq    %r8,%r15
1152
1153         xorq    %r10,%r10
1154         addq    8(%rdi,%rcx,1),%r11
1155         adcq    $0,%r10
1156         mulq    %r14
1157         addq    %rax,%r11
1158         movq    %rbx,%rax
1159         adcq    %rdx,%r10
1160
1161         imulq   %r11,%r15
1162
1163         movq    16(%rsi,%rcx,1),%rbx
1164         xorq    %r13,%r13
1165         addq    %r11,%r12
1166         adcq    $0,%r13
1167         mulq    %r15
1168         addq    %rax,%r12
1169         movq    %rbx,%rax
1170         adcq    %rdx,%r13
1171         movq    %r12,8(%rdi,%rcx,1)
1172
1173         xorq    %r11,%r11
1174         addq    16(%rdi,%rcx,1),%r10
1175         adcq    $0,%r11
1176         mulq    %r14
1177         addq    %rax,%r10
1178         movq    %r9,%rax
1179         adcq    %rdx,%r11
1180
1181         movq    24(%rsi,%rcx,1),%r9
1182         xorq    %r12,%r12
1183         addq    %r10,%r13
1184         adcq    $0,%r12
1185         mulq    %r15
1186         addq    %rax,%r13
1187         movq    %r9,%rax
1188         adcq    %rdx,%r12
1189         movq    %r13,16(%rdi,%rcx,1)
1190
1191         xorq    %r10,%r10
1192         addq    24(%rdi,%rcx,1),%r11
1193         leaq    32(%rcx),%rcx
1194         adcq    $0,%r10
1195         mulq    %r14
1196         addq    %rax,%r11
1197         movq    %rbx,%rax
1198         adcq    %rdx,%r10
1199         jmp     .Lsqr4x_mont_inner
1200
1201 .align  16
1202 .Lsqr4x_mont_inner:
1203         movq    (%rsi,%rcx,1),%rbx
1204         xorq    %r13,%r13
1205         addq    %r11,%r12
1206         adcq    $0,%r13
1207         mulq    %r15
1208         addq    %rax,%r12
1209         movq    %rbx,%rax
1210         adcq    %rdx,%r13
1211         movq    %r12,-8(%rdi,%rcx,1)
1212
1213         xorq    %r11,%r11
1214         addq    (%rdi,%rcx,1),%r10
1215         adcq    $0,%r11
1216         mulq    %r14
1217         addq    %rax,%r10
1218         movq    %r9,%rax
1219         adcq    %rdx,%r11
1220
1221         movq    8(%rsi,%rcx,1),%r9
1222         xorq    %r12,%r12
1223         addq    %r10,%r13
1224         adcq    $0,%r12
1225         mulq    %r15
1226         addq    %rax,%r13
1227         movq    %r9,%rax
1228         adcq    %rdx,%r12
1229         movq    %r13,(%rdi,%rcx,1)
1230
1231         xorq    %r10,%r10
1232         addq    8(%rdi,%rcx,1),%r11
1233         adcq    $0,%r10
1234         mulq    %r14
1235         addq    %rax,%r11
1236         movq    %rbx,%rax
1237         adcq    %rdx,%r10
1238
1239
1240         movq    16(%rsi,%rcx,1),%rbx
1241         xorq    %r13,%r13
1242         addq    %r11,%r12
1243         adcq    $0,%r13
1244         mulq    %r15
1245         addq    %rax,%r12
1246         movq    %rbx,%rax
1247         adcq    %rdx,%r13
1248         movq    %r12,8(%rdi,%rcx,1)
1249
1250         xorq    %r11,%r11
1251         addq    16(%rdi,%rcx,1),%r10
1252         adcq    $0,%r11
1253         mulq    %r14
1254         addq    %rax,%r10
1255         movq    %r9,%rax
1256         adcq    %rdx,%r11
1257
1258         movq    24(%rsi,%rcx,1),%r9
1259         xorq    %r12,%r12
1260         addq    %r10,%r13
1261         adcq    $0,%r12
1262         mulq    %r15
1263         addq    %rax,%r13
1264         movq    %r9,%rax
1265         adcq    %rdx,%r12
1266         movq    %r13,16(%rdi,%rcx,1)
1267
1268         xorq    %r10,%r10
1269         addq    24(%rdi,%rcx,1),%r11
1270         leaq    32(%rcx),%rcx
1271         adcq    $0,%r10
1272         mulq    %r14
1273         addq    %rax,%r11
1274         movq    %rbx,%rax
1275         adcq    %rdx,%r10
1276         cmpq    $0,%rcx
1277         jne     .Lsqr4x_mont_inner
1278
1279         subq    0(%rsp),%rcx
1280         movq    %r8,%r14
1281
1282         xorq    %r13,%r13
1283         addq    %r11,%r12
1284         adcq    $0,%r13
1285         mulq    %r15
1286         addq    %rax,%r12
1287         movq    %r9,%rax
1288         adcq    %rdx,%r13
1289         movq    %r12,-8(%rdi)
1290
1291         xorq    %r11,%r11
1292         addq    (%rdi),%r10
1293         adcq    $0,%r11
1294         movq    0(%rsi,%rcx,1),%rbx
1295         addq    %rbp,%r10
1296         adcq    $0,%r11
1297
1298         imulq   16(%rdi,%rcx,1),%r14
1299         xorq    %r12,%r12
1300         movq    8(%rsi,%rcx,1),%r9
1301         addq    %r10,%r13
1302         movq    16(%rdi,%rcx,1),%r10
1303         adcq    $0,%r12
1304         mulq    %r15
1305         addq    %rax,%r13
1306         movq    %rbx,%rax
1307         adcq    %rdx,%r12
1308         movq    %r13,(%rdi)
1309
1310         xorq    %rbp,%rbp
1311         addq    8(%rdi),%r12
1312         adcq    %rbp,%rbp
1313         addq    %r11,%r12
1314         leaq    16(%rdi),%rdi
1315         adcq    $0,%rbp
1316         movq    %r12,-8(%rdi)
1317         cmpq    8(%rsp),%rdi
1318         jb      .Lsqr4x_mont_outer
1319
1320         movq    0(%rsp),%r9
1321         movq    %rbp,(%rdi)
1322         movq    64(%rsp,%r9,1),%rax
1323         leaq    64(%rsp,%r9,1),%rbx
1324         movq    40(%rsp),%rsi
1325         shrq    $5,%r9
1326         movq    8(%rbx),%rdx
1327         xorq    %rbp,%rbp
1328
1329         movq    32(%rsp),%rdi
1330         subq    0(%rsi),%rax
1331         movq    16(%rbx),%r10
1332         movq    24(%rbx),%r11
1333         sbbq    8(%rsi),%rdx
1334         leaq    -1(%r9),%rcx
1335         jmp     .Lsqr4x_sub
1336 .align  16
1337 .Lsqr4x_sub:
1338         movq    %rax,0(%rdi,%rbp,8)
1339         movq    %rdx,8(%rdi,%rbp,8)
1340         sbbq    16(%rsi,%rbp,8),%r10
1341         movq    32(%rbx,%rbp,8),%rax
1342         movq    40(%rbx,%rbp,8),%rdx
1343         sbbq    24(%rsi,%rbp,8),%r11
1344         movq    %r10,16(%rdi,%rbp,8)
1345         movq    %r11,24(%rdi,%rbp,8)
1346         sbbq    32(%rsi,%rbp,8),%rax
1347         movq    48(%rbx,%rbp,8),%r10
1348         movq    56(%rbx,%rbp,8),%r11
1349         sbbq    40(%rsi,%rbp,8),%rdx
1350         leaq    4(%rbp),%rbp
1351         decq    %rcx
1352         jnz     .Lsqr4x_sub
1353
1354         movq    %rax,0(%rdi,%rbp,8)
1355         movq    32(%rbx,%rbp,8),%rax
1356         sbbq    16(%rsi,%rbp,8),%r10
1357         movq    %rdx,8(%rdi,%rbp,8)
1358         sbbq    24(%rsi,%rbp,8),%r11
1359         movq    %r10,16(%rdi,%rbp,8)
1360
1361         sbbq    $0,%rax
1362         movq    %r11,24(%rdi,%rbp,8)
1363         xorq    %rbp,%rbp
1364         andq    %rax,%rbx
1365         notq    %rax
1366         movq    %rdi,%rsi
1367         andq    %rax,%rsi
1368         leaq    -1(%r9),%rcx
1369         orq     %rsi,%rbx
1370
1371         pxor    %xmm0,%xmm0
1372         leaq    64(%rsp,%r9,8),%rsi
1373         movdqu  (%rbx),%xmm1
1374         leaq    (%rsi,%r9,8),%rsi
1375         movdqa  %xmm0,64(%rsp)
1376         movdqa  %xmm0,(%rsi)
1377         movdqu  %xmm1,(%rdi)
1378         jmp     .Lsqr4x_copy
1379 .align  16
1380 .Lsqr4x_copy:
1381         movdqu  16(%rbx,%rbp,1),%xmm2
1382         movdqu  32(%rbx,%rbp,1),%xmm1
1383         movdqa  %xmm0,80(%rsp,%rbp,1)
1384         movdqa  %xmm0,96(%rsp,%rbp,1)
1385         movdqa  %xmm0,16(%rsi,%rbp,1)
1386         movdqa  %xmm0,32(%rsi,%rbp,1)
1387         movdqu  %xmm2,16(%rdi,%rbp,1)
1388         movdqu  %xmm1,32(%rdi,%rbp,1)
1389         leaq    32(%rbp),%rbp
1390         decq    %rcx
1391         jnz     .Lsqr4x_copy
1392
1393         movdqu  16(%rbx,%rbp,1),%xmm2
1394         movdqa  %xmm0,80(%rsp,%rbp,1)
1395         movdqa  %xmm0,16(%rsi,%rbp,1)
1396         movdqu  %xmm2,16(%rdi,%rbp,1)
1397         movq    56(%rsp),%rsi
1398         movq    $1,%rax
1399         movq    0(%rsi),%r15
1400         movq    8(%rsi),%r14
1401         movq    16(%rsi),%r13
1402         movq    24(%rsi),%r12
1403         movq    32(%rsi),%rbp
1404         movq    40(%rsi),%rbx
1405         leaq    48(%rsi),%rsp
1406 .Lsqr4x_epilogue:
1407         .byte   0xf3,0xc3
1408 .size   bn_sqr4x_mont,.-bn_sqr4x_mont
1409 .byte   77,111,110,116,103,111,109,101,114,121,32,77,117,108,116,105,112,108,105,99,97,116,105,111,110,32,102,111,114,32,120,56,54,95,54,52,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0
1410 .align  16