]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - secure/lib/libcrypto/amd64/poly1305-x86_64.S
MFC: r359060, r359061, r359066
[FreeBSD/FreeBSD.git] / secure / lib / libcrypto / amd64 / poly1305-x86_64.S
1 /* $FreeBSD$ */
2 /* Do not modify. This file is auto-generated from poly1305-x86_64.pl. */
3 .text   
4
5
6
7 .globl  poly1305_init
8 .hidden poly1305_init
9 .globl  poly1305_blocks
10 .hidden poly1305_blocks
11 .globl  poly1305_emit
12 .hidden poly1305_emit
13
14 .type   poly1305_init,@function
15 .align  32
16 poly1305_init:
17 .cfi_startproc  
18         xorq    %rax,%rax
19         movq    %rax,0(%rdi)
20         movq    %rax,8(%rdi)
21         movq    %rax,16(%rdi)
22
23         cmpq    $0,%rsi
24         je      .Lno_key
25
26         leaq    poly1305_blocks(%rip),%r10
27         leaq    poly1305_emit(%rip),%r11
28         movq    $0x0ffffffc0fffffff,%rax
29         movq    $0x0ffffffc0ffffffc,%rcx
30         andq    0(%rsi),%rax
31         andq    8(%rsi),%rcx
32         movq    %rax,24(%rdi)
33         movq    %rcx,32(%rdi)
34         movq    %r10,0(%rdx)
35         movq    %r11,8(%rdx)
36         movl    $1,%eax
37 .Lno_key:
38         .byte   0xf3,0xc3
39 .cfi_endproc    
40 .size   poly1305_init,.-poly1305_init
41
42 .type   poly1305_blocks,@function
43 .align  32
44 poly1305_blocks:
45 .cfi_startproc  
46 .Lblocks:
47         shrq    $4,%rdx
48         jz      .Lno_data
49
50         pushq   %rbx
51 .cfi_adjust_cfa_offset  8
52 .cfi_offset     %rbx,-16
53         pushq   %rbp
54 .cfi_adjust_cfa_offset  8
55 .cfi_offset     %rbp,-24
56         pushq   %r12
57 .cfi_adjust_cfa_offset  8
58 .cfi_offset     %r12,-32
59         pushq   %r13
60 .cfi_adjust_cfa_offset  8
61 .cfi_offset     %r13,-40
62         pushq   %r14
63 .cfi_adjust_cfa_offset  8
64 .cfi_offset     %r14,-48
65         pushq   %r15
66 .cfi_adjust_cfa_offset  8
67 .cfi_offset     %r15,-56
68 .Lblocks_body:
69
70         movq    %rdx,%r15
71
72         movq    24(%rdi),%r11
73         movq    32(%rdi),%r13
74
75         movq    0(%rdi),%r14
76         movq    8(%rdi),%rbx
77         movq    16(%rdi),%rbp
78
79         movq    %r13,%r12
80         shrq    $2,%r13
81         movq    %r12,%rax
82         addq    %r12,%r13
83         jmp     .Loop
84
85 .align  32
86 .Loop:
87         addq    0(%rsi),%r14
88         adcq    8(%rsi),%rbx
89         leaq    16(%rsi),%rsi
90         adcq    %rcx,%rbp
91         mulq    %r14
92         movq    %rax,%r9
93         movq    %r11,%rax
94         movq    %rdx,%r10
95
96         mulq    %r14
97         movq    %rax,%r14
98         movq    %r11,%rax
99         movq    %rdx,%r8
100
101         mulq    %rbx
102         addq    %rax,%r9
103         movq    %r13,%rax
104         adcq    %rdx,%r10
105
106         mulq    %rbx
107         movq    %rbp,%rbx
108         addq    %rax,%r14
109         adcq    %rdx,%r8
110
111         imulq   %r13,%rbx
112         addq    %rbx,%r9
113         movq    %r8,%rbx
114         adcq    $0,%r10
115
116         imulq   %r11,%rbp
117         addq    %r9,%rbx
118         movq    $-4,%rax
119         adcq    %rbp,%r10
120
121         andq    %r10,%rax
122         movq    %r10,%rbp
123         shrq    $2,%r10
124         andq    $3,%rbp
125         addq    %r10,%rax
126         addq    %rax,%r14
127         adcq    $0,%rbx
128         adcq    $0,%rbp
129         movq    %r12,%rax
130         decq    %r15
131         jnz     .Loop
132
133         movq    %r14,0(%rdi)
134         movq    %rbx,8(%rdi)
135         movq    %rbp,16(%rdi)
136
137         movq    0(%rsp),%r15
138 .cfi_restore    %r15
139         movq    8(%rsp),%r14
140 .cfi_restore    %r14
141         movq    16(%rsp),%r13
142 .cfi_restore    %r13
143         movq    24(%rsp),%r12
144 .cfi_restore    %r12
145         movq    32(%rsp),%rbp
146 .cfi_restore    %rbp
147         movq    40(%rsp),%rbx
148 .cfi_restore    %rbx
149         leaq    48(%rsp),%rsp
150 .cfi_adjust_cfa_offset  -48
151 .Lno_data:
152 .Lblocks_epilogue:
153         .byte   0xf3,0xc3
154 .cfi_endproc    
155 .size   poly1305_blocks,.-poly1305_blocks
156
157 .type   poly1305_emit,@function
158 .align  32
159 poly1305_emit:
160 .cfi_startproc  
161 .Lemit:
162         movq    0(%rdi),%r8
163         movq    8(%rdi),%r9
164         movq    16(%rdi),%r10
165
166         movq    %r8,%rax
167         addq    $5,%r8
168         movq    %r9,%rcx
169         adcq    $0,%r9
170         adcq    $0,%r10
171         shrq    $2,%r10
172         cmovnzq %r8,%rax
173         cmovnzq %r9,%rcx
174
175         addq    0(%rdx),%rax
176         adcq    8(%rdx),%rcx
177         movq    %rax,0(%rsi)
178         movq    %rcx,8(%rsi)
179
180         .byte   0xf3,0xc3
181 .cfi_endproc    
182 .size   poly1305_emit,.-poly1305_emit
183 .byte   80,111,108,121,49,51,48,53,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
184 .align  16
185 .globl  xor128_encrypt_n_pad
186 .type   xor128_encrypt_n_pad,@function
187 .align  16
188 xor128_encrypt_n_pad:
189 .cfi_startproc  
190         subq    %rdx,%rsi
191         subq    %rdx,%rdi
192         movq    %rcx,%r10
193         shrq    $4,%rcx
194         jz      .Ltail_enc
195         nop
196 .Loop_enc_xmm:
197         movdqu  (%rsi,%rdx,1),%xmm0
198         pxor    (%rdx),%xmm0
199         movdqu  %xmm0,(%rdi,%rdx,1)
200         movdqa  %xmm0,(%rdx)
201         leaq    16(%rdx),%rdx
202         decq    %rcx
203         jnz     .Loop_enc_xmm
204
205         andq    $15,%r10
206         jz      .Ldone_enc
207
208 .Ltail_enc:
209         movq    $16,%rcx
210         subq    %r10,%rcx
211         xorl    %eax,%eax
212 .Loop_enc_byte:
213         movb    (%rsi,%rdx,1),%al
214         xorb    (%rdx),%al
215         movb    %al,(%rdi,%rdx,1)
216         movb    %al,(%rdx)
217         leaq    1(%rdx),%rdx
218         decq    %r10
219         jnz     .Loop_enc_byte
220
221         xorl    %eax,%eax
222 .Loop_enc_pad:
223         movb    %al,(%rdx)
224         leaq    1(%rdx),%rdx
225         decq    %rcx
226         jnz     .Loop_enc_pad
227
228 .Ldone_enc:
229         movq    %rdx,%rax
230         .byte   0xf3,0xc3
231 .cfi_endproc    
232 .size   xor128_encrypt_n_pad,.-xor128_encrypt_n_pad
233
234 .globl  xor128_decrypt_n_pad
235 .type   xor128_decrypt_n_pad,@function
236 .align  16
237 xor128_decrypt_n_pad:
238 .cfi_startproc  
239         subq    %rdx,%rsi
240         subq    %rdx,%rdi
241         movq    %rcx,%r10
242         shrq    $4,%rcx
243         jz      .Ltail_dec
244         nop
245 .Loop_dec_xmm:
246         movdqu  (%rsi,%rdx,1),%xmm0
247         movdqa  (%rdx),%xmm1
248         pxor    %xmm0,%xmm1
249         movdqu  %xmm1,(%rdi,%rdx,1)
250         movdqa  %xmm0,(%rdx)
251         leaq    16(%rdx),%rdx
252         decq    %rcx
253         jnz     .Loop_dec_xmm
254
255         pxor    %xmm1,%xmm1
256         andq    $15,%r10
257         jz      .Ldone_dec
258
259 .Ltail_dec:
260         movq    $16,%rcx
261         subq    %r10,%rcx
262         xorl    %eax,%eax
263         xorq    %r11,%r11
264 .Loop_dec_byte:
265         movb    (%rsi,%rdx,1),%r11b
266         movb    (%rdx),%al
267         xorb    %r11b,%al
268         movb    %al,(%rdi,%rdx,1)
269         movb    %r11b,(%rdx)
270         leaq    1(%rdx),%rdx
271         decq    %r10
272         jnz     .Loop_dec_byte
273
274         xorl    %eax,%eax
275 .Loop_dec_pad:
276         movb    %al,(%rdx)
277         leaq    1(%rdx),%rdx
278         decq    %rcx
279         jnz     .Loop_dec_pad
280
281 .Ldone_dec:
282         movq    %rdx,%rax
283         .byte   0xf3,0xc3
284 .cfi_endproc    
285 .size   xor128_decrypt_n_pad,.-xor128_decrypt_n_pad