Commit | Line | Data |
---|---|---|
9a7dafbb TSH |
1 | # enter ECRYPT_encrypt_bytes |
2 | .text | |
3 | .p2align 5 | |
4 | .globl ECRYPT_encrypt_bytes | |
5 | ECRYPT_encrypt_bytes: | |
6 | mov %rsp,%r11 | |
7 | and $31,%r11 | |
8 | add $256,%r11 | |
9 | sub %r11,%rsp | |
10 | # x = arg1 | |
11 | mov %rdi,%r8 | |
12 | # m = arg2 | |
13 | mov %rsi,%rsi | |
14 | # out = arg3 | |
15 | mov %rdx,%rdi | |
16 | # bytes = arg4 | |
17 | mov %rcx,%rdx | |
18 | # unsigned>? bytes - 0 | |
19 | cmp $0,%rdx | |
20 | # comment:fp stack unchanged by jump | |
21 | # goto done if !unsigned> | |
22 | jbe ._done | |
23 | # comment:fp stack unchanged by fallthrough | |
24 | # start: | |
25 | ._start: | |
26 | # r11_stack = r11 | |
27 | movq %r11,0(%rsp) | |
28 | # r12_stack = r12 | |
29 | movq %r12,8(%rsp) | |
30 | # r13_stack = r13 | |
31 | movq %r13,16(%rsp) | |
32 | # r14_stack = r14 | |
33 | movq %r14,24(%rsp) | |
34 | # r15_stack = r15 | |
35 | movq %r15,32(%rsp) | |
36 | # rbx_stack = rbx | |
37 | movq %rbx,40(%rsp) | |
38 | # rbp_stack = rbp | |
39 | movq %rbp,48(%rsp) | |
40 | # in0 = *(uint64 *) (x + 0) | |
41 | movq 0(%r8),%rcx | |
42 | # in2 = *(uint64 *) (x + 8) | |
43 | movq 8(%r8),%r9 | |
44 | # in4 = *(uint64 *) (x + 16) | |
45 | movq 16(%r8),%rax | |
46 | # in6 = *(uint64 *) (x + 24) | |
47 | movq 24(%r8),%r10 | |
48 | # in8 = *(uint64 *) (x + 32) | |
49 | movq 32(%r8),%r11 | |
50 | # in10 = *(uint64 *) (x + 40) | |
51 | movq 40(%r8),%r12 | |
52 | # in12 = *(uint64 *) (x + 48) | |
53 | movq 48(%r8),%r13 | |
54 | # in14 = *(uint64 *) (x + 56) | |
55 | movq 56(%r8),%r14 | |
56 | # j0 = in0 | |
57 | movq %rcx,56(%rsp) | |
58 | # j2 = in2 | |
59 | movq %r9,64(%rsp) | |
60 | # j4 = in4 | |
61 | movq %rax,72(%rsp) | |
62 | # j6 = in6 | |
63 | movq %r10,80(%rsp) | |
64 | # j8 = in8 | |
65 | movq %r11,88(%rsp) | |
66 | # j10 = in10 | |
67 | movq %r12,96(%rsp) | |
68 | # j12 = in12 | |
69 | movq %r13,104(%rsp) | |
70 | # j14 = in14 | |
71 | movq %r14,112(%rsp) | |
72 | # x_backup = x | |
73 | movq %r8,120(%rsp) | |
74 | # bytesatleast1: | |
75 | ._bytesatleast1: | |
76 | # unsigned<? bytes - 64 | |
77 | cmp $64,%rdx | |
78 | # comment:fp stack unchanged by jump | |
79 | # goto nocopy if !unsigned< | |
80 | jae ._nocopy | |
81 | # ctarget = out | |
82 | movq %rdi,128(%rsp) | |
83 | # out = &tmp | |
84 | leaq 192(%rsp),%rdi | |
85 | # i = bytes | |
86 | mov %rdx,%rcx | |
87 | # while (i) { *out++ = *m++; --i } | |
88 | rep movsb | |
89 | # out = &tmp | |
90 | leaq 192(%rsp),%rdi | |
91 | # m = &tmp | |
92 | leaq 192(%rsp),%rsi | |
93 | # comment:fp stack unchanged by fallthrough | |
94 | # nocopy: | |
95 | ._nocopy: | |
96 | # out_backup = out | |
97 | movq %rdi,136(%rsp) | |
98 | # m_backup = m | |
99 | movq %rsi,144(%rsp) | |
100 | # bytes_backup = bytes | |
101 | movq %rdx,152(%rsp) | |
102 | # x1 = j0 | |
103 | movq 56(%rsp),%rdi | |
104 | # x0 = x1 | |
105 | mov %rdi,%rdx | |
106 | # (uint64) x1 >>= 32 | |
107 | shr $32,%rdi | |
108 | # x3 = j2 | |
109 | movq 64(%rsp),%rsi | |
110 | # x2 = x3 | |
111 | mov %rsi,%rcx | |
112 | # (uint64) x3 >>= 32 | |
113 | shr $32,%rsi | |
114 | # x5 = j4 | |
115 | movq 72(%rsp),%r8 | |
116 | # x4 = x5 | |
117 | mov %r8,%r9 | |
118 | # (uint64) x5 >>= 32 | |
119 | shr $32,%r8 | |
120 | # x5_stack = x5 | |
121 | movq %r8,160(%rsp) | |
122 | # x7 = j6 | |
123 | movq 80(%rsp),%r8 | |
124 | # x6 = x7 | |
125 | mov %r8,%rax | |
126 | # (uint64) x7 >>= 32 | |
127 | shr $32,%r8 | |
128 | # x9 = j8 | |
129 | movq 88(%rsp),%r10 | |
130 | # x8 = x9 | |
131 | mov %r10,%r11 | |
132 | # (uint64) x9 >>= 32 | |
133 | shr $32,%r10 | |
134 | # x11 = j10 | |
135 | movq 96(%rsp),%r12 | |
136 | # x10 = x11 | |
137 | mov %r12,%r13 | |
138 | # x10_stack = x10 | |
139 | movq %r13,168(%rsp) | |
140 | # (uint64) x11 >>= 32 | |
141 | shr $32,%r12 | |
142 | # x13 = j12 | |
143 | movq 104(%rsp),%r13 | |
144 | # x12 = x13 | |
145 | mov %r13,%r14 | |
146 | # (uint64) x13 >>= 32 | |
147 | shr $32,%r13 | |
148 | # x15 = j14 | |
149 | movq 112(%rsp),%r15 | |
150 | # x14 = x15 | |
151 | mov %r15,%rbx | |
152 | # (uint64) x15 >>= 32 | |
153 | shr $32,%r15 | |
154 | # x15_stack = x15 | |
155 | movq %r15,176(%rsp) | |
156 | # i = 20 | |
157 | mov $20,%r15 | |
158 | # mainloop: | |
159 | ._mainloop: | |
160 | # i_backup = i | |
161 | movq %r15,184(%rsp) | |
162 | # x5 = x5_stack | |
163 | movq 160(%rsp),%r15 | |
164 | # a = x12 + x0 | |
165 | lea (%r14,%rdx),%rbp | |
166 | # (uint32) a <<<= 7 | |
167 | rol $7,%ebp | |
168 | # x4 ^= a | |
169 | xor %rbp,%r9 | |
170 | # b = x1 + x5 | |
171 | lea (%rdi,%r15),%rbp | |
172 | # (uint32) b <<<= 7 | |
173 | rol $7,%ebp | |
174 | # x9 ^= b | |
175 | xor %rbp,%r10 | |
176 | # a = x0 + x4 | |
177 | lea (%rdx,%r9),%rbp | |
178 | # (uint32) a <<<= 9 | |
179 | rol $9,%ebp | |
180 | # x8 ^= a | |
181 | xor %rbp,%r11 | |
182 | # b = x5 + x9 | |
183 | lea (%r15,%r10),%rbp | |
184 | # (uint32) b <<<= 9 | |
185 | rol $9,%ebp | |
186 | # x13 ^= b | |
187 | xor %rbp,%r13 | |
188 | # a = x4 + x8 | |
189 | lea (%r9,%r11),%rbp | |
190 | # (uint32) a <<<= 13 | |
191 | rol $13,%ebp | |
192 | # x12 ^= a | |
193 | xor %rbp,%r14 | |
194 | # b = x9 + x13 | |
195 | lea (%r10,%r13),%rbp | |
196 | # (uint32) b <<<= 13 | |
197 | rol $13,%ebp | |
198 | # x1 ^= b | |
199 | xor %rbp,%rdi | |
200 | # a = x8 + x12 | |
201 | lea (%r11,%r14),%rbp | |
202 | # (uint32) a <<<= 18 | |
203 | rol $18,%ebp | |
204 | # x0 ^= a | |
205 | xor %rbp,%rdx | |
206 | # b = x13 + x1 | |
207 | lea (%r13,%rdi),%rbp | |
208 | # (uint32) b <<<= 18 | |
209 | rol $18,%ebp | |
210 | # x5 ^= b | |
211 | xor %rbp,%r15 | |
212 | # x10 = x10_stack | |
213 | movq 168(%rsp),%rbp | |
214 | # x5_stack = x5 | |
215 | movq %r15,160(%rsp) | |
216 | # c = x6 + x10 | |
217 | lea (%rax,%rbp),%r15 | |
218 | # (uint32) c <<<= 7 | |
219 | rol $7,%r15d | |
220 | # x14 ^= c | |
221 | xor %r15,%rbx | |
222 | # c = x10 + x14 | |
223 | lea (%rbp,%rbx),%r15 | |
224 | # (uint32) c <<<= 9 | |
225 | rol $9,%r15d | |
226 | # x2 ^= c | |
227 | xor %r15,%rcx | |
228 | # c = x14 + x2 | |
229 | lea (%rbx,%rcx),%r15 | |
230 | # (uint32) c <<<= 13 | |
231 | rol $13,%r15d | |
232 | # x6 ^= c | |
233 | xor %r15,%rax | |
234 | # c = x2 + x6 | |
235 | lea (%rcx,%rax),%r15 | |
236 | # (uint32) c <<<= 18 | |
237 | rol $18,%r15d | |
238 | # x10 ^= c | |
239 | xor %r15,%rbp | |
240 | # x15 = x15_stack | |
241 | movq 176(%rsp),%r15 | |
242 | # x10_stack = x10 | |
243 | movq %rbp,168(%rsp) | |
244 | # d = x11 + x15 | |
245 | lea (%r12,%r15),%rbp | |
246 | # (uint32) d <<<= 7 | |
247 | rol $7,%ebp | |
248 | # x3 ^= d | |
249 | xor %rbp,%rsi | |
250 | # d = x15 + x3 | |
251 | lea (%r15,%rsi),%rbp | |
252 | # (uint32) d <<<= 9 | |
253 | rol $9,%ebp | |
254 | # x7 ^= d | |
255 | xor %rbp,%r8 | |
256 | # d = x3 + x7 | |
257 | lea (%rsi,%r8),%rbp | |
258 | # (uint32) d <<<= 13 | |
259 | rol $13,%ebp | |
260 | # x11 ^= d | |
261 | xor %rbp,%r12 | |
262 | # d = x7 + x11 | |
263 | lea (%r8,%r12),%rbp | |
264 | # (uint32) d <<<= 18 | |
265 | rol $18,%ebp | |
266 | # x15 ^= d | |
267 | xor %rbp,%r15 | |
268 | # x15_stack = x15 | |
269 | movq %r15,176(%rsp) | |
270 | # x5 = x5_stack | |
271 | movq 160(%rsp),%r15 | |
272 | # a = x3 + x0 | |
273 | lea (%rsi,%rdx),%rbp | |
274 | # (uint32) a <<<= 7 | |
275 | rol $7,%ebp | |
276 | # x1 ^= a | |
277 | xor %rbp,%rdi | |
278 | # b = x4 + x5 | |
279 | lea (%r9,%r15),%rbp | |
280 | # (uint32) b <<<= 7 | |
281 | rol $7,%ebp | |
282 | # x6 ^= b | |
283 | xor %rbp,%rax | |
284 | # a = x0 + x1 | |
285 | lea (%rdx,%rdi),%rbp | |
286 | # (uint32) a <<<= 9 | |
287 | rol $9,%ebp | |
288 | # x2 ^= a | |
289 | xor %rbp,%rcx | |
290 | # b = x5 + x6 | |
291 | lea (%r15,%rax),%rbp | |
292 | # (uint32) b <<<= 9 | |
293 | rol $9,%ebp | |
294 | # x7 ^= b | |
295 | xor %rbp,%r8 | |
296 | # a = x1 + x2 | |
297 | lea (%rdi,%rcx),%rbp | |
298 | # (uint32) a <<<= 13 | |
299 | rol $13,%ebp | |
300 | # x3 ^= a | |
301 | xor %rbp,%rsi | |
302 | # b = x6 + x7 | |
303 | lea (%rax,%r8),%rbp | |
304 | # (uint32) b <<<= 13 | |
305 | rol $13,%ebp | |
306 | # x4 ^= b | |
307 | xor %rbp,%r9 | |
308 | # a = x2 + x3 | |
309 | lea (%rcx,%rsi),%rbp | |
310 | # (uint32) a <<<= 18 | |
311 | rol $18,%ebp | |
312 | # x0 ^= a | |
313 | xor %rbp,%rdx | |
314 | # b = x7 + x4 | |
315 | lea (%r8,%r9),%rbp | |
316 | # (uint32) b <<<= 18 | |
317 | rol $18,%ebp | |
318 | # x5 ^= b | |
319 | xor %rbp,%r15 | |
320 | # x10 = x10_stack | |
321 | movq 168(%rsp),%rbp | |
322 | # x5_stack = x5 | |
323 | movq %r15,160(%rsp) | |
324 | # c = x9 + x10 | |
325 | lea (%r10,%rbp),%r15 | |
326 | # (uint32) c <<<= 7 | |
327 | rol $7,%r15d | |
328 | # x11 ^= c | |
329 | xor %r15,%r12 | |
330 | # c = x10 + x11 | |
331 | lea (%rbp,%r12),%r15 | |
332 | # (uint32) c <<<= 9 | |
333 | rol $9,%r15d | |
334 | # x8 ^= c | |
335 | xor %r15,%r11 | |
336 | # c = x11 + x8 | |
337 | lea (%r12,%r11),%r15 | |
338 | # (uint32) c <<<= 13 | |
339 | rol $13,%r15d | |
340 | # x9 ^= c | |
341 | xor %r15,%r10 | |
342 | # c = x8 + x9 | |
343 | lea (%r11,%r10),%r15 | |
344 | # (uint32) c <<<= 18 | |
345 | rol $18,%r15d | |
346 | # x10 ^= c | |
347 | xor %r15,%rbp | |
348 | # x15 = x15_stack | |
349 | movq 176(%rsp),%r15 | |
350 | # x10_stack = x10 | |
351 | movq %rbp,168(%rsp) | |
352 | # d = x14 + x15 | |
353 | lea (%rbx,%r15),%rbp | |
354 | # (uint32) d <<<= 7 | |
355 | rol $7,%ebp | |
356 | # x12 ^= d | |
357 | xor %rbp,%r14 | |
358 | # d = x15 + x12 | |
359 | lea (%r15,%r14),%rbp | |
360 | # (uint32) d <<<= 9 | |
361 | rol $9,%ebp | |
362 | # x13 ^= d | |
363 | xor %rbp,%r13 | |
364 | # d = x12 + x13 | |
365 | lea (%r14,%r13),%rbp | |
366 | # (uint32) d <<<= 13 | |
367 | rol $13,%ebp | |
368 | # x14 ^= d | |
369 | xor %rbp,%rbx | |
370 | # d = x13 + x14 | |
371 | lea (%r13,%rbx),%rbp | |
372 | # (uint32) d <<<= 18 | |
373 | rol $18,%ebp | |
374 | # x15 ^= d | |
375 | xor %rbp,%r15 | |
376 | # x15_stack = x15 | |
377 | movq %r15,176(%rsp) | |
378 | # x5 = x5_stack | |
379 | movq 160(%rsp),%r15 | |
380 | # a = x12 + x0 | |
381 | lea (%r14,%rdx),%rbp | |
382 | # (uint32) a <<<= 7 | |
383 | rol $7,%ebp | |
384 | # x4 ^= a | |
385 | xor %rbp,%r9 | |
386 | # b = x1 + x5 | |
387 | lea (%rdi,%r15),%rbp | |
388 | # (uint32) b <<<= 7 | |
389 | rol $7,%ebp | |
390 | # x9 ^= b | |
391 | xor %rbp,%r10 | |
392 | # a = x0 + x4 | |
393 | lea (%rdx,%r9),%rbp | |
394 | # (uint32) a <<<= 9 | |
395 | rol $9,%ebp | |
396 | # x8 ^= a | |
397 | xor %rbp,%r11 | |
398 | # b = x5 + x9 | |
399 | lea (%r15,%r10),%rbp | |
400 | # (uint32) b <<<= 9 | |
401 | rol $9,%ebp | |
402 | # x13 ^= b | |
403 | xor %rbp,%r13 | |
404 | # a = x4 + x8 | |
405 | lea (%r9,%r11),%rbp | |
406 | # (uint32) a <<<= 13 | |
407 | rol $13,%ebp | |
408 | # x12 ^= a | |
409 | xor %rbp,%r14 | |
410 | # b = x9 + x13 | |
411 | lea (%r10,%r13),%rbp | |
412 | # (uint32) b <<<= 13 | |
413 | rol $13,%ebp | |
414 | # x1 ^= b | |
415 | xor %rbp,%rdi | |
416 | # a = x8 + x12 | |
417 | lea (%r11,%r14),%rbp | |
418 | # (uint32) a <<<= 18 | |
419 | rol $18,%ebp | |
420 | # x0 ^= a | |
421 | xor %rbp,%rdx | |
422 | # b = x13 + x1 | |
423 | lea (%r13,%rdi),%rbp | |
424 | # (uint32) b <<<= 18 | |
425 | rol $18,%ebp | |
426 | # x5 ^= b | |
427 | xor %rbp,%r15 | |
428 | # x10 = x10_stack | |
429 | movq 168(%rsp),%rbp | |
430 | # x5_stack = x5 | |
431 | movq %r15,160(%rsp) | |
432 | # c = x6 + x10 | |
433 | lea (%rax,%rbp),%r15 | |
434 | # (uint32) c <<<= 7 | |
435 | rol $7,%r15d | |
436 | # x14 ^= c | |
437 | xor %r15,%rbx | |
438 | # c = x10 + x14 | |
439 | lea (%rbp,%rbx),%r15 | |
440 | # (uint32) c <<<= 9 | |
441 | rol $9,%r15d | |
442 | # x2 ^= c | |
443 | xor %r15,%rcx | |
444 | # c = x14 + x2 | |
445 | lea (%rbx,%rcx),%r15 | |
446 | # (uint32) c <<<= 13 | |
447 | rol $13,%r15d | |
448 | # x6 ^= c | |
449 | xor %r15,%rax | |
450 | # c = x2 + x6 | |
451 | lea (%rcx,%rax),%r15 | |
452 | # (uint32) c <<<= 18 | |
453 | rol $18,%r15d | |
454 | # x10 ^= c | |
455 | xor %r15,%rbp | |
456 | # x15 = x15_stack | |
457 | movq 176(%rsp),%r15 | |
458 | # x10_stack = x10 | |
459 | movq %rbp,168(%rsp) | |
460 | # d = x11 + x15 | |
461 | lea (%r12,%r15),%rbp | |
462 | # (uint32) d <<<= 7 | |
463 | rol $7,%ebp | |
464 | # x3 ^= d | |
465 | xor %rbp,%rsi | |
466 | # d = x15 + x3 | |
467 | lea (%r15,%rsi),%rbp | |
468 | # (uint32) d <<<= 9 | |
469 | rol $9,%ebp | |
470 | # x7 ^= d | |
471 | xor %rbp,%r8 | |
472 | # d = x3 + x7 | |
473 | lea (%rsi,%r8),%rbp | |
474 | # (uint32) d <<<= 13 | |
475 | rol $13,%ebp | |
476 | # x11 ^= d | |
477 | xor %rbp,%r12 | |
478 | # d = x7 + x11 | |
479 | lea (%r8,%r12),%rbp | |
480 | # (uint32) d <<<= 18 | |
481 | rol $18,%ebp | |
482 | # x15 ^= d | |
483 | xor %rbp,%r15 | |
484 | # x15_stack = x15 | |
485 | movq %r15,176(%rsp) | |
486 | # x5 = x5_stack | |
487 | movq 160(%rsp),%r15 | |
488 | # a = x3 + x0 | |
489 | lea (%rsi,%rdx),%rbp | |
490 | # (uint32) a <<<= 7 | |
491 | rol $7,%ebp | |
492 | # x1 ^= a | |
493 | xor %rbp,%rdi | |
494 | # b = x4 + x5 | |
495 | lea (%r9,%r15),%rbp | |
496 | # (uint32) b <<<= 7 | |
497 | rol $7,%ebp | |
498 | # x6 ^= b | |
499 | xor %rbp,%rax | |
500 | # a = x0 + x1 | |
501 | lea (%rdx,%rdi),%rbp | |
502 | # (uint32) a <<<= 9 | |
503 | rol $9,%ebp | |
504 | # x2 ^= a | |
505 | xor %rbp,%rcx | |
506 | # b = x5 + x6 | |
507 | lea (%r15,%rax),%rbp | |
508 | # (uint32) b <<<= 9 | |
509 | rol $9,%ebp | |
510 | # x7 ^= b | |
511 | xor %rbp,%r8 | |
512 | # a = x1 + x2 | |
513 | lea (%rdi,%rcx),%rbp | |
514 | # (uint32) a <<<= 13 | |
515 | rol $13,%ebp | |
516 | # x3 ^= a | |
517 | xor %rbp,%rsi | |
518 | # b = x6 + x7 | |
519 | lea (%rax,%r8),%rbp | |
520 | # (uint32) b <<<= 13 | |
521 | rol $13,%ebp | |
522 | # x4 ^= b | |
523 | xor %rbp,%r9 | |
524 | # a = x2 + x3 | |
525 | lea (%rcx,%rsi),%rbp | |
526 | # (uint32) a <<<= 18 | |
527 | rol $18,%ebp | |
528 | # x0 ^= a | |
529 | xor %rbp,%rdx | |
530 | # b = x7 + x4 | |
531 | lea (%r8,%r9),%rbp | |
532 | # (uint32) b <<<= 18 | |
533 | rol $18,%ebp | |
534 | # x5 ^= b | |
535 | xor %rbp,%r15 | |
536 | # x10 = x10_stack | |
537 | movq 168(%rsp),%rbp | |
538 | # x5_stack = x5 | |
539 | movq %r15,160(%rsp) | |
540 | # c = x9 + x10 | |
541 | lea (%r10,%rbp),%r15 | |
542 | # (uint32) c <<<= 7 | |
543 | rol $7,%r15d | |
544 | # x11 ^= c | |
545 | xor %r15,%r12 | |
546 | # c = x10 + x11 | |
547 | lea (%rbp,%r12),%r15 | |
548 | # (uint32) c <<<= 9 | |
549 | rol $9,%r15d | |
550 | # x8 ^= c | |
551 | xor %r15,%r11 | |
552 | # c = x11 + x8 | |
553 | lea (%r12,%r11),%r15 | |
554 | # (uint32) c <<<= 13 | |
555 | rol $13,%r15d | |
556 | # x9 ^= c | |
557 | xor %r15,%r10 | |
558 | # c = x8 + x9 | |
559 | lea (%r11,%r10),%r15 | |
560 | # (uint32) c <<<= 18 | |
561 | rol $18,%r15d | |
562 | # x10 ^= c | |
563 | xor %r15,%rbp | |
564 | # x15 = x15_stack | |
565 | movq 176(%rsp),%r15 | |
566 | # x10_stack = x10 | |
567 | movq %rbp,168(%rsp) | |
568 | # d = x14 + x15 | |
569 | lea (%rbx,%r15),%rbp | |
570 | # (uint32) d <<<= 7 | |
571 | rol $7,%ebp | |
572 | # x12 ^= d | |
573 | xor %rbp,%r14 | |
574 | # d = x15 + x12 | |
575 | lea (%r15,%r14),%rbp | |
576 | # (uint32) d <<<= 9 | |
577 | rol $9,%ebp | |
578 | # x13 ^= d | |
579 | xor %rbp,%r13 | |
580 | # d = x12 + x13 | |
581 | lea (%r14,%r13),%rbp | |
582 | # (uint32) d <<<= 13 | |
583 | rol $13,%ebp | |
584 | # x14 ^= d | |
585 | xor %rbp,%rbx | |
586 | # d = x13 + x14 | |
587 | lea (%r13,%rbx),%rbp | |
588 | # (uint32) d <<<= 18 | |
589 | rol $18,%ebp | |
590 | # x15 ^= d | |
591 | xor %rbp,%r15 | |
592 | # x15_stack = x15 | |
593 | movq %r15,176(%rsp) | |
594 | # i = i_backup | |
595 | movq 184(%rsp),%r15 | |
596 | # unsigned>? i -= 4 | |
597 | sub $4,%r15 | |
598 | # comment:fp stack unchanged by jump | |
599 | # goto mainloop if unsigned> | |
600 | ja ._mainloop | |
601 | # (uint32) x2 += j2 | |
602 | addl 64(%rsp),%ecx | |
603 | # x3 <<= 32 | |
604 | shl $32,%rsi | |
605 | # x3 += j2 | |
606 | addq 64(%rsp),%rsi | |
607 | # (uint64) x3 >>= 32 | |
608 | shr $32,%rsi | |
609 | # x3 <<= 32 | |
610 | shl $32,%rsi | |
611 | # x2 += x3 | |
612 | add %rsi,%rcx | |
613 | # (uint32) x6 += j6 | |
614 | addl 80(%rsp),%eax | |
615 | # x7 <<= 32 | |
616 | shl $32,%r8 | |
617 | # x7 += j6 | |
618 | addq 80(%rsp),%r8 | |
619 | # (uint64) x7 >>= 32 | |
620 | shr $32,%r8 | |
621 | # x7 <<= 32 | |
622 | shl $32,%r8 | |
623 | # x6 += x7 | |
624 | add %r8,%rax | |
625 | # (uint32) x8 += j8 | |
626 | addl 88(%rsp),%r11d | |
627 | # x9 <<= 32 | |
628 | shl $32,%r10 | |
629 | # x9 += j8 | |
630 | addq 88(%rsp),%r10 | |
631 | # (uint64) x9 >>= 32 | |
632 | shr $32,%r10 | |
633 | # x9 <<= 32 | |
634 | shl $32,%r10 | |
635 | # x8 += x9 | |
636 | add %r10,%r11 | |
637 | # (uint32) x12 += j12 | |
638 | addl 104(%rsp),%r14d | |
639 | # x13 <<= 32 | |
640 | shl $32,%r13 | |
641 | # x13 += j12 | |
642 | addq 104(%rsp),%r13 | |
643 | # (uint64) x13 >>= 32 | |
644 | shr $32,%r13 | |
645 | # x13 <<= 32 | |
646 | shl $32,%r13 | |
647 | # x12 += x13 | |
648 | add %r13,%r14 | |
649 | # (uint32) x0 += j0 | |
650 | addl 56(%rsp),%edx | |
651 | # x1 <<= 32 | |
652 | shl $32,%rdi | |
653 | # x1 += j0 | |
654 | addq 56(%rsp),%rdi | |
655 | # (uint64) x1 >>= 32 | |
656 | shr $32,%rdi | |
657 | # x1 <<= 32 | |
658 | shl $32,%rdi | |
659 | # x0 += x1 | |
660 | add %rdi,%rdx | |
661 | # x5 = x5_stack | |
662 | movq 160(%rsp),%rdi | |
663 | # (uint32) x4 += j4 | |
664 | addl 72(%rsp),%r9d | |
665 | # x5 <<= 32 | |
666 | shl $32,%rdi | |
667 | # x5 += j4 | |
668 | addq 72(%rsp),%rdi | |
669 | # (uint64) x5 >>= 32 | |
670 | shr $32,%rdi | |
671 | # x5 <<= 32 | |
672 | shl $32,%rdi | |
673 | # x4 += x5 | |
674 | add %rdi,%r9 | |
675 | # x10 = x10_stack | |
676 | movq 168(%rsp),%r8 | |
677 | # (uint32) x10 += j10 | |
678 | addl 96(%rsp),%r8d | |
679 | # x11 <<= 32 | |
680 | shl $32,%r12 | |
681 | # x11 += j10 | |
682 | addq 96(%rsp),%r12 | |
683 | # (uint64) x11 >>= 32 | |
684 | shr $32,%r12 | |
685 | # x11 <<= 32 | |
686 | shl $32,%r12 | |
687 | # x10 += x11 | |
688 | add %r12,%r8 | |
689 | # x15 = x15_stack | |
690 | movq 176(%rsp),%rdi | |
691 | # (uint32) x14 += j14 | |
692 | addl 112(%rsp),%ebx | |
693 | # x15 <<= 32 | |
694 | shl $32,%rdi | |
695 | # x15 += j14 | |
696 | addq 112(%rsp),%rdi | |
697 | # (uint64) x15 >>= 32 | |
698 | shr $32,%rdi | |
699 | # x15 <<= 32 | |
700 | shl $32,%rdi | |
701 | # x14 += x15 | |
702 | add %rdi,%rbx | |
703 | # out = out_backup | |
704 | movq 136(%rsp),%rdi | |
705 | # m = m_backup | |
706 | movq 144(%rsp),%rsi | |
707 | # x0 ^= *(uint64 *) (m + 0) | |
708 | xorq 0(%rsi),%rdx | |
709 | # *(uint64 *) (out + 0) = x0 | |
710 | movq %rdx,0(%rdi) | |
711 | # x2 ^= *(uint64 *) (m + 8) | |
712 | xorq 8(%rsi),%rcx | |
713 | # *(uint64 *) (out + 8) = x2 | |
714 | movq %rcx,8(%rdi) | |
715 | # x4 ^= *(uint64 *) (m + 16) | |
716 | xorq 16(%rsi),%r9 | |
717 | # *(uint64 *) (out + 16) = x4 | |
718 | movq %r9,16(%rdi) | |
719 | # x6 ^= *(uint64 *) (m + 24) | |
720 | xorq 24(%rsi),%rax | |
721 | # *(uint64 *) (out + 24) = x6 | |
722 | movq %rax,24(%rdi) | |
723 | # x8 ^= *(uint64 *) (m + 32) | |
724 | xorq 32(%rsi),%r11 | |
725 | # *(uint64 *) (out + 32) = x8 | |
726 | movq %r11,32(%rdi) | |
727 | # x10 ^= *(uint64 *) (m + 40) | |
728 | xorq 40(%rsi),%r8 | |
729 | # *(uint64 *) (out + 40) = x10 | |
730 | movq %r8,40(%rdi) | |
731 | # x12 ^= *(uint64 *) (m + 48) | |
732 | xorq 48(%rsi),%r14 | |
733 | # *(uint64 *) (out + 48) = x12 | |
734 | movq %r14,48(%rdi) | |
735 | # x14 ^= *(uint64 *) (m + 56) | |
736 | xorq 56(%rsi),%rbx | |
737 | # *(uint64 *) (out + 56) = x14 | |
738 | movq %rbx,56(%rdi) | |
739 | # bytes = bytes_backup | |
740 | movq 152(%rsp),%rdx | |
741 | # in8 = j8 | |
742 | movq 88(%rsp),%rcx | |
743 | # in8 += 1 | |
744 | add $1,%rcx | |
745 | # j8 = in8 | |
746 | movq %rcx,88(%rsp) | |
747 | # unsigned>? unsigned<? bytes - 64 | |
748 | cmp $64,%rdx | |
749 | # comment:fp stack unchanged by jump | |
750 | # goto bytesatleast65 if unsigned> | |
751 | ja ._bytesatleast65 | |
752 | # comment:fp stack unchanged by jump | |
753 | # goto bytesatleast64 if !unsigned< | |
754 | jae ._bytesatleast64 | |
755 | # m = out | |
756 | mov %rdi,%rsi | |
757 | # out = ctarget | |
758 | movq 128(%rsp),%rdi | |
759 | # i = bytes | |
760 | mov %rdx,%rcx | |
761 | # while (i) { *out++ = *m++; --i } | |
762 | rep movsb | |
763 | # comment:fp stack unchanged by fallthrough | |
764 | # bytesatleast64: | |
765 | ._bytesatleast64: | |
766 | # x = x_backup | |
767 | movq 120(%rsp),%rdi | |
768 | # in8 = j8 | |
769 | movq 88(%rsp),%rsi | |
770 | # *(uint64 *) (x + 32) = in8 | |
771 | movq %rsi,32(%rdi) | |
772 | # r11 = r11_stack | |
773 | movq 0(%rsp),%r11 | |
774 | # r12 = r12_stack | |
775 | movq 8(%rsp),%r12 | |
776 | # r13 = r13_stack | |
777 | movq 16(%rsp),%r13 | |
778 | # r14 = r14_stack | |
779 | movq 24(%rsp),%r14 | |
780 | # r15 = r15_stack | |
781 | movq 32(%rsp),%r15 | |
782 | # rbx = rbx_stack | |
783 | movq 40(%rsp),%rbx | |
784 | # rbp = rbp_stack | |
785 | movq 48(%rsp),%rbp | |
786 | # comment:fp stack unchanged by fallthrough | |
787 | # done: | |
788 | ._done: | |
789 | # leave | |
790 | add %r11,%rsp | |
791 | mov %rdi,%rax | |
792 | mov %rsi,%rdx | |
793 | ret | |
794 | # bytesatleast65: | |
795 | ._bytesatleast65: | |
796 | # bytes -= 64 | |
797 | sub $64,%rdx | |
798 | # out += 64 | |
799 | add $64,%rdi | |
800 | # m += 64 | |
801 | add $64,%rsi | |
802 | # comment:fp stack unchanged by jump | |
803 | # goto bytesatleast1 | |
804 | jmp ._bytesatleast1 | |
805 | # enter ECRYPT_keysetup | |
806 | .text | |
807 | .p2align 5 | |
808 | .globl ECRYPT_keysetup | |
809 | ECRYPT_keysetup: | |
810 | mov %rsp,%r11 | |
811 | and $31,%r11 | |
812 | add $256,%r11 | |
813 | sub %r11,%rsp | |
814 | # k = arg2 | |
815 | mov %rsi,%rsi | |
816 | # kbits = arg3 | |
817 | mov %rdx,%rdx | |
818 | # x = arg1 | |
819 | mov %rdi,%rdi | |
820 | # in0 = *(uint64 *) (k + 0) | |
821 | movq 0(%rsi),%r8 | |
822 | # in2 = *(uint64 *) (k + 8) | |
823 | movq 8(%rsi),%r9 | |
824 | # *(uint64 *) (x + 4) = in0 | |
825 | movq %r8,4(%rdi) | |
826 | # *(uint64 *) (x + 12) = in2 | |
827 | movq %r9,12(%rdi) | |
828 | # unsigned<? kbits - 256 | |
829 | cmp $256,%rdx | |
830 | # comment:fp stack unchanged by jump | |
831 | # goto kbits128 if unsigned< | |
832 | jb ._kbits128 | |
833 | # kbits256: | |
834 | ._kbits256: | |
835 | # in10 = *(uint64 *) (k + 16) | |
836 | movq 16(%rsi),%rdx | |
837 | # in12 = *(uint64 *) (k + 24) | |
838 | movq 24(%rsi),%rsi | |
839 | # *(uint64 *) (x + 44) = in10 | |
840 | movq %rdx,44(%rdi) | |
841 | # *(uint64 *) (x + 52) = in12 | |
842 | movq %rsi,52(%rdi) | |
843 | # in0 = 1634760805 | |
844 | mov $1634760805,%rsi | |
845 | # in4 = 857760878 | |
846 | mov $857760878,%rdx | |
847 | # in10 = 2036477234 | |
848 | mov $2036477234,%rcx | |
849 | # in14 = 1797285236 | |
850 | mov $1797285236,%r8 | |
851 | # *(uint32 *) (x + 0) = in0 | |
852 | movl %esi,0(%rdi) | |
853 | # *(uint32 *) (x + 20) = in4 | |
854 | movl %edx,20(%rdi) | |
855 | # *(uint32 *) (x + 40) = in10 | |
856 | movl %ecx,40(%rdi) | |
857 | # *(uint32 *) (x + 60) = in14 | |
858 | movl %r8d,60(%rdi) | |
859 | # comment:fp stack unchanged by jump | |
860 | # goto keysetupdone | |
861 | jmp ._keysetupdone | |
862 | # kbits128: | |
863 | ._kbits128: | |
864 | # in10 = *(uint64 *) (k + 0) | |
865 | movq 0(%rsi),%rdx | |
866 | # in12 = *(uint64 *) (k + 8) | |
867 | movq 8(%rsi),%rsi | |
868 | # *(uint64 *) (x + 44) = in10 | |
869 | movq %rdx,44(%rdi) | |
870 | # *(uint64 *) (x + 52) = in12 | |
871 | movq %rsi,52(%rdi) | |
872 | # in0 = 1634760805 | |
873 | mov $1634760805,%rsi | |
874 | # in4 = 824206446 | |
875 | mov $824206446,%rdx | |
876 | # in10 = 2036477238 | |
877 | mov $2036477238,%rcx | |
878 | # in14 = 1797285236 | |
879 | mov $1797285236,%r8 | |
880 | # *(uint32 *) (x + 0) = in0 | |
881 | movl %esi,0(%rdi) | |
882 | # *(uint32 *) (x + 20) = in4 | |
883 | movl %edx,20(%rdi) | |
884 | # *(uint32 *) (x + 40) = in10 | |
885 | movl %ecx,40(%rdi) | |
886 | # *(uint32 *) (x + 60) = in14 | |
887 | movl %r8d,60(%rdi) | |
888 | # keysetupdone: | |
889 | ._keysetupdone: | |
890 | # leave | |
891 | add %r11,%rsp | |
892 | mov %rdi,%rax | |
893 | mov %rsi,%rdx | |
894 | ret | |
895 | # enter ECRYPT_ivsetup | |
896 | .text | |
897 | .p2align 5 | |
898 | .globl ECRYPT_ivsetup | |
899 | ECRYPT_ivsetup: | |
900 | mov %rsp,%r11 | |
901 | and $31,%r11 | |
902 | add $256,%r11 | |
903 | sub %r11,%rsp | |
904 | # iv = arg2 | |
905 | mov %rsi,%rsi | |
906 | # x = arg1 | |
907 | mov %rdi,%rdi | |
908 | # in6 = *(uint64 *) (iv + 0) | |
909 | movq 0(%rsi),%rsi | |
910 | # in8 = 0 | |
911 | mov $0,%r8 | |
912 | # *(uint64 *) (x + 24) = in6 | |
913 | movq %rsi,24(%rdi) | |
914 | # *(uint64 *) (x + 32) = in8 | |
915 | movq %r8,32(%rdi) | |
916 | # leave | |
917 | add %r11,%rsp | |
918 | mov %rdi,%rax | |
919 | mov %rsi,%rdx | |
920 | ret |