VirtualBox

source: vbox/trunk/src/libs/openssl-3.0.2/crypto/genasm-elf/poly1305-x86_64.S@ 94403

Last change on this file since 94403 was 94320, checked in by vboxsync, 3 years ago

libs/openssl-3.0.1: Export to OSE and fix copyright headers in Makefiles, bugref:10128

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 4.8 KB
Line 
1.text
2
3
4
5.globl poly1305_init
6.hidden poly1305_init
7.globl poly1305_blocks
8.hidden poly1305_blocks
9.globl poly1305_emit
10.hidden poly1305_emit
11
12.type poly1305_init,@function
13.align 32
14poly1305_init:
15.cfi_startproc
16 xorq %rax,%rax
17 movq %rax,0(%rdi)
18 movq %rax,8(%rdi)
19 movq %rax,16(%rdi)
20
21 cmpq $0,%rsi
22 je .Lno_key
23
24 leaq poly1305_blocks(%rip),%r10
25 leaq poly1305_emit(%rip),%r11
26 movq $0x0ffffffc0fffffff,%rax
27 movq $0x0ffffffc0ffffffc,%rcx
28 andq 0(%rsi),%rax
29 andq 8(%rsi),%rcx
30 movq %rax,24(%rdi)
31 movq %rcx,32(%rdi)
32 movq %r10,0(%rdx)
33 movq %r11,8(%rdx)
34 movl $1,%eax
35.Lno_key:
36 .byte 0xf3,0xc3
37.cfi_endproc
38.size poly1305_init,.-poly1305_init
39
40.type poly1305_blocks,@function
41.align 32
42poly1305_blocks:
43.cfi_startproc
44.Lblocks:
45 shrq $4,%rdx
46 jz .Lno_data
47
48 pushq %rbx
49.cfi_adjust_cfa_offset 8
50.cfi_offset %rbx,-16
51 pushq %rbp
52.cfi_adjust_cfa_offset 8
53.cfi_offset %rbp,-24
54 pushq %r12
55.cfi_adjust_cfa_offset 8
56.cfi_offset %r12,-32
57 pushq %r13
58.cfi_adjust_cfa_offset 8
59.cfi_offset %r13,-40
60 pushq %r14
61.cfi_adjust_cfa_offset 8
62.cfi_offset %r14,-48
63 pushq %r15
64.cfi_adjust_cfa_offset 8
65.cfi_offset %r15,-56
66.Lblocks_body:
67
68 movq %rdx,%r15
69
70 movq 24(%rdi),%r11
71 movq 32(%rdi),%r13
72
73 movq 0(%rdi),%r14
74 movq 8(%rdi),%rbx
75 movq 16(%rdi),%rbp
76
77 movq %r13,%r12
78 shrq $2,%r13
79 movq %r12,%rax
80 addq %r12,%r13
81 jmp .Loop
82
83.align 32
84.Loop:
85 addq 0(%rsi),%r14
86 adcq 8(%rsi),%rbx
87 leaq 16(%rsi),%rsi
88 adcq %rcx,%rbp
89 mulq %r14
90 movq %rax,%r9
91 movq %r11,%rax
92 movq %rdx,%r10
93
94 mulq %r14
95 movq %rax,%r14
96 movq %r11,%rax
97 movq %rdx,%r8
98
99 mulq %rbx
100 addq %rax,%r9
101 movq %r13,%rax
102 adcq %rdx,%r10
103
104 mulq %rbx
105 movq %rbp,%rbx
106 addq %rax,%r14
107 adcq %rdx,%r8
108
109 imulq %r13,%rbx
110 addq %rbx,%r9
111 movq %r8,%rbx
112 adcq $0,%r10
113
114 imulq %r11,%rbp
115 addq %r9,%rbx
116 movq $-4,%rax
117 adcq %rbp,%r10
118
119 andq %r10,%rax
120 movq %r10,%rbp
121 shrq $2,%r10
122 andq $3,%rbp
123 addq %r10,%rax
124 addq %rax,%r14
125 adcq $0,%rbx
126 adcq $0,%rbp
127 movq %r12,%rax
128 decq %r15
129 jnz .Loop
130
131 movq %r14,0(%rdi)
132 movq %rbx,8(%rdi)
133 movq %rbp,16(%rdi)
134
135 movq 0(%rsp),%r15
136.cfi_restore %r15
137 movq 8(%rsp),%r14
138.cfi_restore %r14
139 movq 16(%rsp),%r13
140.cfi_restore %r13
141 movq 24(%rsp),%r12
142.cfi_restore %r12
143 movq 32(%rsp),%rbp
144.cfi_restore %rbp
145 movq 40(%rsp),%rbx
146.cfi_restore %rbx
147 leaq 48(%rsp),%rsp
148.cfi_adjust_cfa_offset -48
149.Lno_data:
150.Lblocks_epilogue:
151 .byte 0xf3,0xc3
152.cfi_endproc
153.size poly1305_blocks,.-poly1305_blocks
154
155.type poly1305_emit,@function
156.align 32
157poly1305_emit:
158.cfi_startproc
159.Lemit:
160 movq 0(%rdi),%r8
161 movq 8(%rdi),%r9
162 movq 16(%rdi),%r10
163
164 movq %r8,%rax
165 addq $5,%r8
166 movq %r9,%rcx
167 adcq $0,%r9
168 adcq $0,%r10
169 shrq $2,%r10
170 cmovnzq %r8,%rax
171 cmovnzq %r9,%rcx
172
173 addq 0(%rdx),%rax
174 adcq 8(%rdx),%rcx
175 movq %rax,0(%rsi)
176 movq %rcx,8(%rsi)
177
178 .byte 0xf3,0xc3
179.cfi_endproc
180.size poly1305_emit,.-poly1305_emit
181.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
182.align 16
183.globl xor128_encrypt_n_pad
184.type xor128_encrypt_n_pad,@function
185.align 16
186xor128_encrypt_n_pad:
187.cfi_startproc
188 subq %rdx,%rsi
189 subq %rdx,%rdi
190 movq %rcx,%r10
191 shrq $4,%rcx
192 jz .Ltail_enc
193 nop
194.Loop_enc_xmm:
195 movdqu (%rsi,%rdx,1),%xmm0
196 pxor (%rdx),%xmm0
197 movdqu %xmm0,(%rdi,%rdx,1)
198 movdqa %xmm0,(%rdx)
199 leaq 16(%rdx),%rdx
200 decq %rcx
201 jnz .Loop_enc_xmm
202
203 andq $15,%r10
204 jz .Ldone_enc
205
206.Ltail_enc:
207 movq $16,%rcx
208 subq %r10,%rcx
209 xorl %eax,%eax
210.Loop_enc_byte:
211 movb (%rsi,%rdx,1),%al
212 xorb (%rdx),%al
213 movb %al,(%rdi,%rdx,1)
214 movb %al,(%rdx)
215 leaq 1(%rdx),%rdx
216 decq %r10
217 jnz .Loop_enc_byte
218
219 xorl %eax,%eax
220.Loop_enc_pad:
221 movb %al,(%rdx)
222 leaq 1(%rdx),%rdx
223 decq %rcx
224 jnz .Loop_enc_pad
225
226.Ldone_enc:
227 movq %rdx,%rax
228 .byte 0xf3,0xc3
229.cfi_endproc
230.size xor128_encrypt_n_pad,.-xor128_encrypt_n_pad
231
232.globl xor128_decrypt_n_pad
233.type xor128_decrypt_n_pad,@function
234.align 16
235xor128_decrypt_n_pad:
236.cfi_startproc
237 subq %rdx,%rsi
238 subq %rdx,%rdi
239 movq %rcx,%r10
240 shrq $4,%rcx
241 jz .Ltail_dec
242 nop
243.Loop_dec_xmm:
244 movdqu (%rsi,%rdx,1),%xmm0
245 movdqa (%rdx),%xmm1
246 pxor %xmm0,%xmm1
247 movdqu %xmm1,(%rdi,%rdx,1)
248 movdqa %xmm0,(%rdx)
249 leaq 16(%rdx),%rdx
250 decq %rcx
251 jnz .Loop_dec_xmm
252
253 pxor %xmm1,%xmm1
254 andq $15,%r10
255 jz .Ldone_dec
256
257.Ltail_dec:
258 movq $16,%rcx
259 subq %r10,%rcx
260 xorl %eax,%eax
261 xorq %r11,%r11
262.Loop_dec_byte:
263 movb (%rsi,%rdx,1),%r11b
264 movb (%rdx),%al
265 xorb %r11b,%al
266 movb %al,(%rdi,%rdx,1)
267 movb %r11b,(%rdx)
268 leaq 1(%rdx),%rdx
269 decq %r10
270 jnz .Loop_dec_byte
271
272 xorl %eax,%eax
273.Loop_dec_pad:
274 movb %al,(%rdx)
275 leaq 1(%rdx),%rdx
276 decq %rcx
277 jnz .Loop_dec_pad
278
279.Ldone_dec:
280 movq %rdx,%rax
281 .byte 0xf3,0xc3
282.cfi_endproc
283.size xor128_decrypt_n_pad,.-xor128_decrypt_n_pad
284 .section ".note.gnu.property", "a"
285 .p2align 3
286 .long 1f - 0f
287 .long 4f - 1f
288 .long 5
2890:
290 # "GNU" encoded with .byte, since .asciz isn't supported
291 # on Solaris.
292 .byte 0x47
293 .byte 0x4e
294 .byte 0x55
295 .byte 0
2961:
297 .p2align 3
298 .long 0xc0000002
299 .long 3f - 2f
3002:
301 .long 3
3023:
303 .p2align 3
3044:
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette