blob: 18041d05c05228fbfebecf2fc5b214a53daf5f52 [file] [log] [blame]
Adam Langley4139edb2016-01-13 15:00:54 -08001/* Copyright (c) 2015, Google Inc.
2 *
3 * Permission to use, copy, modify, and/or distribute this software for any
4 * purpose with or without fee is hereby granted, provided that the above
5 * copyright notice and this permission notice appear in all copies.
6 *
7 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
8 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
9 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
10 * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
11 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
12 * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
13 * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
14
15/* This file is adapted from crypto_scalarmult/curve25519/amd64-51/ in
16 * SUPERCOP 20141124 (http://bench.cr.yp.to/supercop.html). That code is public
17 * domain licensed but the standard ISC license is included above to keep
18 * licensing simple. */
19
David Benjamin4969cc92016-04-22 15:02:23 -040020#if !defined(OPENSSL_NO_ASM)
21#if defined(__x86_64__)
22
Adam Langley4139edb2016-01-13 15:00:54 -080023.data
24.p2align 4
25
26#if defined(__APPLE__)
27/* OS X's C ABI prefixes functions with underscore. */
28#define C_ABI(x) _ ## x
29#define HIDDEN .private_extern
30#else
31#define C_ABI(x) x
32#define HIDDEN .hidden
33#endif
34
35x25519_x86_64_REDMASK51: .quad 0x0007FFFFFFFFFFFF
36x25519_x86_64_121666_213: .quad 996687872
37x25519_x86_64_2P0: .quad 0xFFFFFFFFFFFDA
38x25519_x86_64_2P1234: .quad 0xFFFFFFFFFFFFE
39x25519_x86_64_4P0: .quad 0x1FFFFFFFFFFFB4
40x25519_x86_64_4P1234: .quad 0x1FFFFFFFFFFFFC
41x25519_x86_64_MU0: .quad 0xED9CE5A30A2C131B
42x25519_x86_64_MU1: .quad 0x2106215D086329A7
43x25519_x86_64_MU2: .quad 0xFFFFFFFFFFFFFFEB
44x25519_x86_64_MU3: .quad 0xFFFFFFFFFFFFFFFF
45x25519_x86_64_MU4: .quad 0x000000000000000F
46x25519_x86_64_ORDER0: .quad 0x5812631A5CF5D3ED
47x25519_x86_64_ORDER1: .quad 0x14DEF9DEA2F79CD6
48x25519_x86_64_ORDER2: .quad 0x0000000000000000
49x25519_x86_64_ORDER3: .quad 0x1000000000000000
50x25519_x86_64_EC2D0: .quad 1859910466990425
51x25519_x86_64_EC2D1: .quad 932731440258426
52x25519_x86_64_EC2D2: .quad 1072319116312658
53x25519_x86_64_EC2D3: .quad 1815898335770999
54x25519_x86_64_EC2D4: .quad 633789495995903
55x25519_x86_64__38: .quad 38
56
57.text
58.p2align 5
59
60.globl C_ABI(x25519_x86_64_freeze)
61HIDDEN C_ABI(x25519_x86_64_freeze)
62C_ABI(x25519_x86_64_freeze):
Robert Sloan4d1ac502017-02-06 08:36:14 -080063.cfi_startproc
64/* This is a leaf function and uses the redzone for saving registers. */
65movq %r12,-8(%rsp)
66.cfi_rel_offset r12, -8
Adam Langley4139edb2016-01-13 15:00:54 -080067movq 0(%rdi),%rsi
68movq 8(%rdi),%rdx
69movq 16(%rdi),%rcx
70movq 24(%rdi),%r8
71movq 32(%rdi),%r9
72movq x25519_x86_64_REDMASK51(%rip),%rax
73mov %rax,%r10
74sub $18,%r10
75mov $3,%r11
76._reduceloop:
77mov %rsi,%r12
78shr $51,%r12
79and %rax,%rsi
80add %r12,%rdx
81mov %rdx,%r12
82shr $51,%r12
83and %rax,%rdx
84add %r12,%rcx
85mov %rcx,%r12
86shr $51,%r12
87and %rax,%rcx
88add %r12,%r8
89mov %r8,%r12
90shr $51,%r12
91and %rax,%r8
92add %r12,%r9
93mov %r9,%r12
94shr $51,%r12
95and %rax,%r9
96imulq $19,%r12,%r12
97add %r12,%rsi
98sub $1,%r11
99ja ._reduceloop
100mov $1,%r12
101cmp %r10,%rsi
102cmovl %r11,%r12
103cmp %rax,%rdx
104cmovne %r11,%r12
105cmp %rax,%rcx
106cmovne %r11,%r12
107cmp %rax,%r8
108cmovne %r11,%r12
109cmp %rax,%r9
110cmovne %r11,%r12
111neg %r12
112and %r12,%rax
113and %r12,%r10
114sub %r10,%rsi
115sub %rax,%rdx
116sub %rax,%rcx
117sub %rax,%r8
118sub %rax,%r9
119movq %rsi,0(%rdi)
120movq %rdx,8(%rdi)
121movq %rcx,16(%rdi)
122movq %r8,24(%rdi)
123movq %r9,32(%rdi)
Robert Sloan4d1ac502017-02-06 08:36:14 -0800124movq -8(%rsp),%r12
Adam Langley4139edb2016-01-13 15:00:54 -0800125ret
Robert Sloan4d1ac502017-02-06 08:36:14 -0800126.cfi_endproc
Adam Langley4139edb2016-01-13 15:00:54 -0800127
128.p2align 5
129.globl C_ABI(x25519_x86_64_mul)
130HIDDEN C_ABI(x25519_x86_64_mul)
131C_ABI(x25519_x86_64_mul):
Robert Sloan4d1ac502017-02-06 08:36:14 -0800132.cfi_startproc
133/* This is a leaf function and uses the redzone for saving registers. */
134movq %r12,-8(%rsp)
135.cfi_rel_offset r12, -8
136movq %r13,-16(%rsp)
137.cfi_rel_offset r13, -16
138movq %r14,-24(%rsp)
139.cfi_rel_offset r14, -24
140movq %r15,-32(%rsp)
141.cfi_rel_offset r15, -32
142movq %rbx,-40(%rsp)
143.cfi_rel_offset rbx, -40
144movq %rbp,-48(%rsp)
145.cfi_rel_offset rbp, -48
Adam Langley4139edb2016-01-13 15:00:54 -0800146mov %rdx,%rcx
147movq 24(%rsi),%rdx
148imulq $19,%rdx,%rax
Robert Sloan4d1ac502017-02-06 08:36:14 -0800149movq %rax,-64(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -0800150mulq 16(%rcx)
151mov %rax,%r8
152mov %rdx,%r9
153movq 32(%rsi),%rdx
154imulq $19,%rdx,%rax
Robert Sloan4d1ac502017-02-06 08:36:14 -0800155movq %rax,-72(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -0800156mulq 8(%rcx)
157add %rax,%r8
158adc %rdx,%r9
159movq 0(%rsi),%rax
160mulq 0(%rcx)
161add %rax,%r8
162adc %rdx,%r9
163movq 0(%rsi),%rax
164mulq 8(%rcx)
165mov %rax,%r10
166mov %rdx,%r11
167movq 0(%rsi),%rax
168mulq 16(%rcx)
169mov %rax,%r12
170mov %rdx,%r13
171movq 0(%rsi),%rax
172mulq 24(%rcx)
173mov %rax,%r14
174mov %rdx,%r15
175movq 0(%rsi),%rax
176mulq 32(%rcx)
177mov %rax,%rbx
178mov %rdx,%rbp
179movq 8(%rsi),%rax
180mulq 0(%rcx)
181add %rax,%r10
182adc %rdx,%r11
183movq 8(%rsi),%rax
184mulq 8(%rcx)
185add %rax,%r12
186adc %rdx,%r13
187movq 8(%rsi),%rax
188mulq 16(%rcx)
189add %rax,%r14
190adc %rdx,%r15
191movq 8(%rsi),%rax
192mulq 24(%rcx)
193add %rax,%rbx
194adc %rdx,%rbp
195movq 8(%rsi),%rdx
196imulq $19,%rdx,%rax
197mulq 32(%rcx)
198add %rax,%r8
199adc %rdx,%r9
200movq 16(%rsi),%rax
201mulq 0(%rcx)
202add %rax,%r12
203adc %rdx,%r13
204movq 16(%rsi),%rax
205mulq 8(%rcx)
206add %rax,%r14
207adc %rdx,%r15
208movq 16(%rsi),%rax
209mulq 16(%rcx)
210add %rax,%rbx
211adc %rdx,%rbp
212movq 16(%rsi),%rdx
213imulq $19,%rdx,%rax
214mulq 24(%rcx)
215add %rax,%r8
216adc %rdx,%r9
217movq 16(%rsi),%rdx
218imulq $19,%rdx,%rax
219mulq 32(%rcx)
220add %rax,%r10
221adc %rdx,%r11
222movq 24(%rsi),%rax
223mulq 0(%rcx)
224add %rax,%r14
225adc %rdx,%r15
226movq 24(%rsi),%rax
227mulq 8(%rcx)
228add %rax,%rbx
229adc %rdx,%rbp
Robert Sloan4d1ac502017-02-06 08:36:14 -0800230movq -64(%rsp),%rax
Adam Langley4139edb2016-01-13 15:00:54 -0800231mulq 24(%rcx)
232add %rax,%r10
233adc %rdx,%r11
Robert Sloan4d1ac502017-02-06 08:36:14 -0800234movq -64(%rsp),%rax
Adam Langley4139edb2016-01-13 15:00:54 -0800235mulq 32(%rcx)
236add %rax,%r12
237adc %rdx,%r13
238movq 32(%rsi),%rax
239mulq 0(%rcx)
240add %rax,%rbx
241adc %rdx,%rbp
Robert Sloan4d1ac502017-02-06 08:36:14 -0800242movq -72(%rsp),%rax
Adam Langley4139edb2016-01-13 15:00:54 -0800243mulq 16(%rcx)
244add %rax,%r10
245adc %rdx,%r11
Robert Sloan4d1ac502017-02-06 08:36:14 -0800246movq -72(%rsp),%rax
Adam Langley4139edb2016-01-13 15:00:54 -0800247mulq 24(%rcx)
248add %rax,%r12
249adc %rdx,%r13
Robert Sloan4d1ac502017-02-06 08:36:14 -0800250movq -72(%rsp),%rax
Adam Langley4139edb2016-01-13 15:00:54 -0800251mulq 32(%rcx)
252add %rax,%r14
253adc %rdx,%r15
254movq x25519_x86_64_REDMASK51(%rip),%rsi
255shld $13,%r8,%r9
256and %rsi,%r8
257shld $13,%r10,%r11
258and %rsi,%r10
259add %r9,%r10
260shld $13,%r12,%r13
261and %rsi,%r12
262add %r11,%r12
263shld $13,%r14,%r15
264and %rsi,%r14
265add %r13,%r14
266shld $13,%rbx,%rbp
267and %rsi,%rbx
268add %r15,%rbx
269imulq $19,%rbp,%rdx
270add %rdx,%r8
271mov %r8,%rdx
272shr $51,%rdx
273add %r10,%rdx
274mov %rdx,%rcx
275shr $51,%rdx
276and %rsi,%r8
277add %r12,%rdx
278mov %rdx,%r9
279shr $51,%rdx
280and %rsi,%rcx
281add %r14,%rdx
282mov %rdx,%rax
283shr $51,%rdx
284and %rsi,%r9
285add %rbx,%rdx
286mov %rdx,%r10
287shr $51,%rdx
288and %rsi,%rax
289imulq $19,%rdx,%rdx
290add %rdx,%r8
291and %rsi,%r10
292movq %r8,0(%rdi)
293movq %rcx,8(%rdi)
294movq %r9,16(%rdi)
295movq %rax,24(%rdi)
296movq %r10,32(%rdi)
Robert Sloan4d1ac502017-02-06 08:36:14 -0800297movq -8(%rsp),%r12
298movq -16(%rsp),%r13
299movq -24(%rsp),%r14
300movq -32(%rsp),%r15
301movq -40(%rsp),%rbx
302movq -48(%rsp),%rbp
Adam Langley4139edb2016-01-13 15:00:54 -0800303ret
Robert Sloan4d1ac502017-02-06 08:36:14 -0800304.cfi_endproc
Adam Langley4139edb2016-01-13 15:00:54 -0800305
306.p2align 5
307.globl C_ABI(x25519_x86_64_square)
308HIDDEN C_ABI(x25519_x86_64_square)
309C_ABI(x25519_x86_64_square):
Robert Sloan4d1ac502017-02-06 08:36:14 -0800310.cfi_startproc
311/* This is a leaf function and uses the redzone for saving registers. */
312movq %r12,-8(%rsp)
313.cfi_rel_offset r12, -8
314movq %r13,-16(%rsp)
315.cfi_rel_offset r13, -16
316movq %r14,-24(%rsp)
317.cfi_rel_offset r14, -24
318movq %r15,-32(%rsp)
319.cfi_rel_offset r15, -32
320movq %rbx,-40(%rsp)
321.cfi_rel_offset rbx, -40
Adam Langley4139edb2016-01-13 15:00:54 -0800322movq 0(%rsi),%rax
323mulq 0(%rsi)
324mov %rax,%rcx
325mov %rdx,%r8
326movq 0(%rsi),%rax
327shl $1,%rax
328mulq 8(%rsi)
329mov %rax,%r9
330mov %rdx,%r10
331movq 0(%rsi),%rax
332shl $1,%rax
333mulq 16(%rsi)
334mov %rax,%r11
335mov %rdx,%r12
336movq 0(%rsi),%rax
337shl $1,%rax
338mulq 24(%rsi)
339mov %rax,%r13
340mov %rdx,%r14
341movq 0(%rsi),%rax
342shl $1,%rax
343mulq 32(%rsi)
344mov %rax,%r15
345mov %rdx,%rbx
346movq 8(%rsi),%rax
347mulq 8(%rsi)
348add %rax,%r11
349adc %rdx,%r12
350movq 8(%rsi),%rax
351shl $1,%rax
352mulq 16(%rsi)
353add %rax,%r13
354adc %rdx,%r14
355movq 8(%rsi),%rax
356shl $1,%rax
357mulq 24(%rsi)
358add %rax,%r15
359adc %rdx,%rbx
360movq 8(%rsi),%rdx
361imulq $38,%rdx,%rax
362mulq 32(%rsi)
363add %rax,%rcx
364adc %rdx,%r8
365movq 16(%rsi),%rax
366mulq 16(%rsi)
367add %rax,%r15
368adc %rdx,%rbx
369movq 16(%rsi),%rdx
370imulq $38,%rdx,%rax
371mulq 24(%rsi)
372add %rax,%rcx
373adc %rdx,%r8
374movq 16(%rsi),%rdx
375imulq $38,%rdx,%rax
376mulq 32(%rsi)
377add %rax,%r9
378adc %rdx,%r10
379movq 24(%rsi),%rdx
380imulq $19,%rdx,%rax
381mulq 24(%rsi)
382add %rax,%r9
383adc %rdx,%r10
384movq 24(%rsi),%rdx
385imulq $38,%rdx,%rax
386mulq 32(%rsi)
387add %rax,%r11
388adc %rdx,%r12
389movq 32(%rsi),%rdx
390imulq $19,%rdx,%rax
391mulq 32(%rsi)
392add %rax,%r13
393adc %rdx,%r14
394movq x25519_x86_64_REDMASK51(%rip),%rsi
395shld $13,%rcx,%r8
396and %rsi,%rcx
397shld $13,%r9,%r10
398and %rsi,%r9
399add %r8,%r9
400shld $13,%r11,%r12
401and %rsi,%r11
402add %r10,%r11
403shld $13,%r13,%r14
404and %rsi,%r13
405add %r12,%r13
406shld $13,%r15,%rbx
407and %rsi,%r15
408add %r14,%r15
409imulq $19,%rbx,%rdx
410add %rdx,%rcx
411mov %rcx,%rdx
412shr $51,%rdx
413add %r9,%rdx
414and %rsi,%rcx
415mov %rdx,%r8
416shr $51,%rdx
417add %r11,%rdx
418and %rsi,%r8
419mov %rdx,%r9
420shr $51,%rdx
421add %r13,%rdx
422and %rsi,%r9
423mov %rdx,%rax
424shr $51,%rdx
425add %r15,%rdx
426and %rsi,%rax
427mov %rdx,%r10
428shr $51,%rdx
429imulq $19,%rdx,%rdx
430add %rdx,%rcx
431and %rsi,%r10
432movq %rcx,0(%rdi)
433movq %r8,8(%rdi)
434movq %r9,16(%rdi)
435movq %rax,24(%rdi)
436movq %r10,32(%rdi)
Robert Sloan4d1ac502017-02-06 08:36:14 -0800437movq -8(%rsp),%r12
438movq -16(%rsp),%r13
439movq -24(%rsp),%r14
440movq -32(%rsp),%r15
441movq -40(%rsp),%rbx
Adam Langley4139edb2016-01-13 15:00:54 -0800442ret
Robert Sloan4d1ac502017-02-06 08:36:14 -0800443.cfi_endproc
Adam Langley4139edb2016-01-13 15:00:54 -0800444
445.p2align 5
446.globl C_ABI(x25519_x86_64_ladderstep)
447HIDDEN C_ABI(x25519_x86_64_ladderstep)
448C_ABI(x25519_x86_64_ladderstep):
Robert Sloan4d1ac502017-02-06 08:36:14 -0800449.cfi_startproc
450sub $344,%rsp
451.cfi_adjust_cfa_offset 344
452movq %r12,296(%rsp)
453.cfi_rel_offset r12, 296
454movq %r13,304(%rsp)
455.cfi_rel_offset r13, 304
456movq %r14,312(%rsp)
457.cfi_rel_offset r14, 312
458movq %r15,320(%rsp)
459.cfi_rel_offset r15, 320
460movq %rbx,328(%rsp)
461.cfi_rel_offset rbx, 328
462movq %rbp,336(%rsp)
463.cfi_rel_offset rbp, 336
Adam Langley4139edb2016-01-13 15:00:54 -0800464movq 40(%rdi),%rsi
465movq 48(%rdi),%rdx
466movq 56(%rdi),%rcx
467movq 64(%rdi),%r8
468movq 72(%rdi),%r9
469mov %rsi,%rax
470mov %rdx,%r10
471mov %rcx,%r11
472mov %r8,%r12
473mov %r9,%r13
474add x25519_x86_64_2P0(%rip),%rax
475add x25519_x86_64_2P1234(%rip),%r10
476add x25519_x86_64_2P1234(%rip),%r11
477add x25519_x86_64_2P1234(%rip),%r12
478add x25519_x86_64_2P1234(%rip),%r13
479addq 80(%rdi),%rsi
480addq 88(%rdi),%rdx
481addq 96(%rdi),%rcx
482addq 104(%rdi),%r8
483addq 112(%rdi),%r9
484subq 80(%rdi),%rax
485subq 88(%rdi),%r10
486subq 96(%rdi),%r11
487subq 104(%rdi),%r12
488subq 112(%rdi),%r13
Robert Sloan4d1ac502017-02-06 08:36:14 -0800489movq %rsi,0(%rsp)
490movq %rdx,8(%rsp)
491movq %rcx,16(%rsp)
492movq %r8,24(%rsp)
493movq %r9,32(%rsp)
494movq %rax,40(%rsp)
495movq %r10,48(%rsp)
496movq %r11,56(%rsp)
497movq %r12,64(%rsp)
498movq %r13,72(%rsp)
499movq 40(%rsp),%rax
500mulq 40(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -0800501mov %rax,%rsi
502mov %rdx,%rcx
Robert Sloan4d1ac502017-02-06 08:36:14 -0800503movq 40(%rsp),%rax
Adam Langley4139edb2016-01-13 15:00:54 -0800504shl $1,%rax
Robert Sloan4d1ac502017-02-06 08:36:14 -0800505mulq 48(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -0800506mov %rax,%r8
507mov %rdx,%r9
Robert Sloan4d1ac502017-02-06 08:36:14 -0800508movq 40(%rsp),%rax
Adam Langley4139edb2016-01-13 15:00:54 -0800509shl $1,%rax
Robert Sloan4d1ac502017-02-06 08:36:14 -0800510mulq 56(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -0800511mov %rax,%r10
512mov %rdx,%r11
Robert Sloan4d1ac502017-02-06 08:36:14 -0800513movq 40(%rsp),%rax
Adam Langley4139edb2016-01-13 15:00:54 -0800514shl $1,%rax
Robert Sloan4d1ac502017-02-06 08:36:14 -0800515mulq 64(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -0800516mov %rax,%r12
517mov %rdx,%r13
Robert Sloan4d1ac502017-02-06 08:36:14 -0800518movq 40(%rsp),%rax
Adam Langley4139edb2016-01-13 15:00:54 -0800519shl $1,%rax
Robert Sloan4d1ac502017-02-06 08:36:14 -0800520mulq 72(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -0800521mov %rax,%r14
522mov %rdx,%r15
Robert Sloan4d1ac502017-02-06 08:36:14 -0800523movq 48(%rsp),%rax
524mulq 48(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -0800525add %rax,%r10
526adc %rdx,%r11
Robert Sloan4d1ac502017-02-06 08:36:14 -0800527movq 48(%rsp),%rax
Adam Langley4139edb2016-01-13 15:00:54 -0800528shl $1,%rax
Robert Sloan4d1ac502017-02-06 08:36:14 -0800529mulq 56(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -0800530add %rax,%r12
531adc %rdx,%r13
Robert Sloan4d1ac502017-02-06 08:36:14 -0800532movq 48(%rsp),%rax
Adam Langley4139edb2016-01-13 15:00:54 -0800533shl $1,%rax
Robert Sloan4d1ac502017-02-06 08:36:14 -0800534mulq 64(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -0800535add %rax,%r14
536adc %rdx,%r15
Robert Sloan4d1ac502017-02-06 08:36:14 -0800537movq 48(%rsp),%rdx
Adam Langley4139edb2016-01-13 15:00:54 -0800538imulq $38,%rdx,%rax
Robert Sloan4d1ac502017-02-06 08:36:14 -0800539mulq 72(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -0800540add %rax,%rsi
541adc %rdx,%rcx
Adam Langley4139edb2016-01-13 15:00:54 -0800542movq 56(%rsp),%rax
543mulq 56(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -0800544add %rax,%r14
545adc %rdx,%r15
Robert Sloan4d1ac502017-02-06 08:36:14 -0800546movq 56(%rsp),%rdx
547imulq $38,%rdx,%rax
548mulq 64(%rsp)
549add %rax,%rsi
550adc %rdx,%rcx
551movq 56(%rsp),%rdx
552imulq $38,%rdx,%rax
553mulq 72(%rsp)
554add %rax,%r8
555adc %rdx,%r9
556movq 64(%rsp),%rdx
557imulq $19,%rdx,%rax
558mulq 64(%rsp)
559add %rax,%r8
560adc %rdx,%r9
Adam Langley4139edb2016-01-13 15:00:54 -0800561movq 64(%rsp),%rdx
562imulq $38,%rdx,%rax
Adam Langley4139edb2016-01-13 15:00:54 -0800563mulq 72(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -0800564add %rax,%r10
565adc %rdx,%r11
Robert Sloan4d1ac502017-02-06 08:36:14 -0800566movq 72(%rsp),%rdx
Adam Langley4139edb2016-01-13 15:00:54 -0800567imulq $19,%rdx,%rax
Robert Sloan4d1ac502017-02-06 08:36:14 -0800568mulq 72(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -0800569add %rax,%r12
570adc %rdx,%r13
571movq x25519_x86_64_REDMASK51(%rip),%rdx
572shld $13,%rsi,%rcx
573and %rdx,%rsi
574shld $13,%r8,%r9
575and %rdx,%r8
576add %rcx,%r8
577shld $13,%r10,%r11
578and %rdx,%r10
579add %r9,%r10
580shld $13,%r12,%r13
581and %rdx,%r12
582add %r11,%r12
583shld $13,%r14,%r15
584and %rdx,%r14
585add %r13,%r14
586imulq $19,%r15,%rcx
587add %rcx,%rsi
588mov %rsi,%rcx
589shr $51,%rcx
590add %r8,%rcx
591and %rdx,%rsi
592mov %rcx,%r8
593shr $51,%rcx
594add %r10,%rcx
595and %rdx,%r8
596mov %rcx,%r9
597shr $51,%rcx
598add %r12,%rcx
599and %rdx,%r9
600mov %rcx,%rax
601shr $51,%rcx
602add %r14,%rcx
603and %rdx,%rax
604mov %rcx,%r10
605shr $51,%rcx
606imulq $19,%rcx,%rcx
607add %rcx,%rsi
608and %rdx,%r10
Robert Sloan4d1ac502017-02-06 08:36:14 -0800609movq %rsi,80(%rsp)
610movq %r8,88(%rsp)
611movq %r9,96(%rsp)
612movq %rax,104(%rsp)
613movq %r10,112(%rsp)
614movq 0(%rsp),%rax
615mulq 0(%rsp)
616mov %rax,%rsi
617mov %rdx,%rcx
618movq 0(%rsp),%rax
619shl $1,%rax
620mulq 8(%rsp)
621mov %rax,%r8
622mov %rdx,%r9
623movq 0(%rsp),%rax
624shl $1,%rax
625mulq 16(%rsp)
626mov %rax,%r10
627mov %rdx,%r11
628movq 0(%rsp),%rax
629shl $1,%rax
630mulq 24(%rsp)
631mov %rax,%r12
632mov %rdx,%r13
633movq 0(%rsp),%rax
634shl $1,%rax
635mulq 32(%rsp)
636mov %rax,%r14
637mov %rdx,%r15
638movq 8(%rsp),%rax
639mulq 8(%rsp)
640add %rax,%r10
641adc %rdx,%r11
642movq 8(%rsp),%rax
643shl $1,%rax
644mulq 16(%rsp)
645add %rax,%r12
646adc %rdx,%r13
647movq 8(%rsp),%rax
648shl $1,%rax
649mulq 24(%rsp)
650add %rax,%r14
651adc %rdx,%r15
652movq 8(%rsp),%rdx
653imulq $38,%rdx,%rax
654mulq 32(%rsp)
655add %rax,%rsi
656adc %rdx,%rcx
657movq 16(%rsp),%rax
658mulq 16(%rsp)
659add %rax,%r14
660adc %rdx,%r15
661movq 16(%rsp),%rdx
662imulq $38,%rdx,%rax
663mulq 24(%rsp)
664add %rax,%rsi
665adc %rdx,%rcx
666movq 16(%rsp),%rdx
667imulq $38,%rdx,%rax
668mulq 32(%rsp)
669add %rax,%r8
670adc %rdx,%r9
671movq 24(%rsp),%rdx
672imulq $19,%rdx,%rax
673mulq 24(%rsp)
674add %rax,%r8
675adc %rdx,%r9
676movq 24(%rsp),%rdx
677imulq $38,%rdx,%rax
678mulq 32(%rsp)
679add %rax,%r10
680adc %rdx,%r11
681movq 32(%rsp),%rdx
682imulq $19,%rdx,%rax
683mulq 32(%rsp)
684add %rax,%r12
685adc %rdx,%r13
686movq x25519_x86_64_REDMASK51(%rip),%rdx
687shld $13,%rsi,%rcx
688and %rdx,%rsi
689shld $13,%r8,%r9
690and %rdx,%r8
691add %rcx,%r8
692shld $13,%r10,%r11
693and %rdx,%r10
694add %r9,%r10
695shld $13,%r12,%r13
696and %rdx,%r12
697add %r11,%r12
698shld $13,%r14,%r15
699and %rdx,%r14
700add %r13,%r14
701imulq $19,%r15,%rcx
702add %rcx,%rsi
703mov %rsi,%rcx
704shr $51,%rcx
705add %r8,%rcx
706and %rdx,%rsi
707mov %rcx,%r8
708shr $51,%rcx
709add %r10,%rcx
710and %rdx,%r8
711mov %rcx,%r9
712shr $51,%rcx
713add %r12,%rcx
714and %rdx,%r9
715mov %rcx,%rax
716shr $51,%rcx
717add %r14,%rcx
718and %rdx,%rax
719mov %rcx,%r10
720shr $51,%rcx
721imulq $19,%rcx,%rcx
722add %rcx,%rsi
723and %rdx,%r10
724movq %rsi,120(%rsp)
725movq %r8,128(%rsp)
726movq %r9,136(%rsp)
727movq %rax,144(%rsp)
728movq %r10,152(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -0800729mov %rsi,%rsi
730mov %r8,%rdx
731mov %r9,%rcx
732mov %rax,%r8
733mov %r10,%r9
734add x25519_x86_64_2P0(%rip),%rsi
735add x25519_x86_64_2P1234(%rip),%rdx
736add x25519_x86_64_2P1234(%rip),%rcx
737add x25519_x86_64_2P1234(%rip),%r8
738add x25519_x86_64_2P1234(%rip),%r9
Robert Sloan4d1ac502017-02-06 08:36:14 -0800739subq 80(%rsp),%rsi
740subq 88(%rsp),%rdx
741subq 96(%rsp),%rcx
742subq 104(%rsp),%r8
743subq 112(%rsp),%r9
744movq %rsi,160(%rsp)
745movq %rdx,168(%rsp)
746movq %rcx,176(%rsp)
747movq %r8,184(%rsp)
748movq %r9,192(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -0800749movq 120(%rdi),%rsi
750movq 128(%rdi),%rdx
751movq 136(%rdi),%rcx
752movq 144(%rdi),%r8
753movq 152(%rdi),%r9
754mov %rsi,%rax
755mov %rdx,%r10
756mov %rcx,%r11
757mov %r8,%r12
758mov %r9,%r13
759add x25519_x86_64_2P0(%rip),%rax
760add x25519_x86_64_2P1234(%rip),%r10
761add x25519_x86_64_2P1234(%rip),%r11
762add x25519_x86_64_2P1234(%rip),%r12
763add x25519_x86_64_2P1234(%rip),%r13
764addq 160(%rdi),%rsi
765addq 168(%rdi),%rdx
766addq 176(%rdi),%rcx
767addq 184(%rdi),%r8
768addq 192(%rdi),%r9
769subq 160(%rdi),%rax
770subq 168(%rdi),%r10
771subq 176(%rdi),%r11
772subq 184(%rdi),%r12
773subq 192(%rdi),%r13
Robert Sloan4d1ac502017-02-06 08:36:14 -0800774movq %rsi,200(%rsp)
775movq %rdx,208(%rsp)
776movq %rcx,216(%rsp)
777movq %r8,224(%rsp)
778movq %r9,232(%rsp)
779movq %rax,240(%rsp)
780movq %r10,248(%rsp)
781movq %r11,256(%rsp)
782movq %r12,264(%rsp)
783movq %r13,272(%rsp)
784movq 224(%rsp),%rsi
Adam Langley4139edb2016-01-13 15:00:54 -0800785imulq $19,%rsi,%rax
Robert Sloan4d1ac502017-02-06 08:36:14 -0800786movq %rax,280(%rsp)
787mulq 56(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -0800788mov %rax,%rsi
789mov %rdx,%rcx
Robert Sloan4d1ac502017-02-06 08:36:14 -0800790movq 232(%rsp),%rdx
Adam Langley4139edb2016-01-13 15:00:54 -0800791imulq $19,%rdx,%rax
Robert Sloan4d1ac502017-02-06 08:36:14 -0800792movq %rax,288(%rsp)
793mulq 48(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -0800794add %rax,%rsi
795adc %rdx,%rcx
Robert Sloan4d1ac502017-02-06 08:36:14 -0800796movq 200(%rsp),%rax
797mulq 40(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -0800798add %rax,%rsi
799adc %rdx,%rcx
Robert Sloan4d1ac502017-02-06 08:36:14 -0800800movq 200(%rsp),%rax
801mulq 48(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -0800802mov %rax,%r8
803mov %rdx,%r9
Robert Sloan4d1ac502017-02-06 08:36:14 -0800804movq 200(%rsp),%rax
805mulq 56(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -0800806mov %rax,%r10
807mov %rdx,%r11
Robert Sloan4d1ac502017-02-06 08:36:14 -0800808movq 200(%rsp),%rax
809mulq 64(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -0800810mov %rax,%r12
811mov %rdx,%r13
Robert Sloan4d1ac502017-02-06 08:36:14 -0800812movq 200(%rsp),%rax
813mulq 72(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -0800814mov %rax,%r14
815mov %rdx,%r15
Robert Sloan4d1ac502017-02-06 08:36:14 -0800816movq 208(%rsp),%rax
817mulq 40(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -0800818add %rax,%r8
819adc %rdx,%r9
Robert Sloan4d1ac502017-02-06 08:36:14 -0800820movq 208(%rsp),%rax
821mulq 48(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -0800822add %rax,%r10
823adc %rdx,%r11
Robert Sloan4d1ac502017-02-06 08:36:14 -0800824movq 208(%rsp),%rax
825mulq 56(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -0800826add %rax,%r12
827adc %rdx,%r13
Robert Sloan4d1ac502017-02-06 08:36:14 -0800828movq 208(%rsp),%rax
829mulq 64(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -0800830add %rax,%r14
831adc %rdx,%r15
Robert Sloan4d1ac502017-02-06 08:36:14 -0800832movq 208(%rsp),%rdx
Adam Langley4139edb2016-01-13 15:00:54 -0800833imulq $19,%rdx,%rax
Robert Sloan4d1ac502017-02-06 08:36:14 -0800834mulq 72(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -0800835add %rax,%rsi
836adc %rdx,%rcx
Robert Sloan4d1ac502017-02-06 08:36:14 -0800837movq 216(%rsp),%rax
838mulq 40(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -0800839add %rax,%r10
840adc %rdx,%r11
Robert Sloan4d1ac502017-02-06 08:36:14 -0800841movq 216(%rsp),%rax
842mulq 48(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -0800843add %rax,%r12
844adc %rdx,%r13
Robert Sloan4d1ac502017-02-06 08:36:14 -0800845movq 216(%rsp),%rax
846mulq 56(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -0800847add %rax,%r14
848adc %rdx,%r15
Robert Sloan4d1ac502017-02-06 08:36:14 -0800849movq 216(%rsp),%rdx
Adam Langley4139edb2016-01-13 15:00:54 -0800850imulq $19,%rdx,%rax
Robert Sloan4d1ac502017-02-06 08:36:14 -0800851mulq 64(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -0800852add %rax,%rsi
853adc %rdx,%rcx
Robert Sloan4d1ac502017-02-06 08:36:14 -0800854movq 216(%rsp),%rdx
Adam Langley4139edb2016-01-13 15:00:54 -0800855imulq $19,%rdx,%rax
Robert Sloan4d1ac502017-02-06 08:36:14 -0800856mulq 72(%rsp)
857add %rax,%r8
858adc %rdx,%r9
859movq 224(%rsp),%rax
860mulq 40(%rsp)
861add %rax,%r12
862adc %rdx,%r13
863movq 224(%rsp),%rax
864mulq 48(%rsp)
865add %rax,%r14
866adc %rdx,%r15
867movq 280(%rsp),%rax
868mulq 64(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -0800869add %rax,%r8
870adc %rdx,%r9
871movq 280(%rsp),%rax
Robert Sloan4d1ac502017-02-06 08:36:14 -0800872mulq 72(%rsp)
873add %rax,%r10
874adc %rdx,%r11
875movq 232(%rsp),%rax
876mulq 40(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -0800877add %rax,%r14
878adc %rdx,%r15
Robert Sloan4d1ac502017-02-06 08:36:14 -0800879movq 288(%rsp),%rax
880mulq 56(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -0800881add %rax,%r8
882adc %rdx,%r9
Robert Sloan4d1ac502017-02-06 08:36:14 -0800883movq 288(%rsp),%rax
884mulq 64(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -0800885add %rax,%r10
886adc %rdx,%r11
887movq 288(%rsp),%rax
Robert Sloan4d1ac502017-02-06 08:36:14 -0800888mulq 72(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -0800889add %rax,%r12
890adc %rdx,%r13
891movq x25519_x86_64_REDMASK51(%rip),%rdx
892shld $13,%rsi,%rcx
893and %rdx,%rsi
894shld $13,%r8,%r9
895and %rdx,%r8
896add %rcx,%r8
897shld $13,%r10,%r11
898and %rdx,%r10
899add %r9,%r10
900shld $13,%r12,%r13
901and %rdx,%r12
902add %r11,%r12
903shld $13,%r14,%r15
904and %rdx,%r14
905add %r13,%r14
906imulq $19,%r15,%rcx
907add %rcx,%rsi
908mov %rsi,%rcx
909shr $51,%rcx
910add %r8,%rcx
911mov %rcx,%r8
912shr $51,%rcx
913and %rdx,%rsi
914add %r10,%rcx
915mov %rcx,%r9
916shr $51,%rcx
917and %rdx,%r8
918add %r12,%rcx
919mov %rcx,%rax
920shr $51,%rcx
921and %rdx,%r9
922add %r14,%rcx
923mov %rcx,%r10
924shr $51,%rcx
925and %rdx,%rax
926imulq $19,%rcx,%rcx
927add %rcx,%rsi
928and %rdx,%r10
Robert Sloan4d1ac502017-02-06 08:36:14 -0800929movq %rsi,40(%rsp)
930movq %r8,48(%rsp)
931movq %r9,56(%rsp)
932movq %rax,64(%rsp)
933movq %r10,72(%rsp)
934movq 264(%rsp),%rsi
Adam Langley4139edb2016-01-13 15:00:54 -0800935imulq $19,%rsi,%rax
Robert Sloan4d1ac502017-02-06 08:36:14 -0800936movq %rax,200(%rsp)
937mulq 16(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -0800938mov %rax,%rsi
939mov %rdx,%rcx
Robert Sloan4d1ac502017-02-06 08:36:14 -0800940movq 272(%rsp),%rdx
Adam Langley4139edb2016-01-13 15:00:54 -0800941imulq $19,%rdx,%rax
Robert Sloan4d1ac502017-02-06 08:36:14 -0800942movq %rax,208(%rsp)
943mulq 8(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -0800944add %rax,%rsi
945adc %rdx,%rcx
Robert Sloan4d1ac502017-02-06 08:36:14 -0800946movq 240(%rsp),%rax
947mulq 0(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -0800948add %rax,%rsi
949adc %rdx,%rcx
Robert Sloan4d1ac502017-02-06 08:36:14 -0800950movq 240(%rsp),%rax
951mulq 8(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -0800952mov %rax,%r8
953mov %rdx,%r9
Robert Sloan4d1ac502017-02-06 08:36:14 -0800954movq 240(%rsp),%rax
955mulq 16(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -0800956mov %rax,%r10
957mov %rdx,%r11
Robert Sloan4d1ac502017-02-06 08:36:14 -0800958movq 240(%rsp),%rax
959mulq 24(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -0800960mov %rax,%r12
961mov %rdx,%r13
Robert Sloan4d1ac502017-02-06 08:36:14 -0800962movq 240(%rsp),%rax
963mulq 32(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -0800964mov %rax,%r14
965mov %rdx,%r15
Robert Sloan4d1ac502017-02-06 08:36:14 -0800966movq 248(%rsp),%rax
967mulq 0(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -0800968add %rax,%r8
969adc %rdx,%r9
Robert Sloan4d1ac502017-02-06 08:36:14 -0800970movq 248(%rsp),%rax
971mulq 8(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -0800972add %rax,%r10
973adc %rdx,%r11
Robert Sloan4d1ac502017-02-06 08:36:14 -0800974movq 248(%rsp),%rax
975mulq 16(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -0800976add %rax,%r12
977adc %rdx,%r13
Robert Sloan4d1ac502017-02-06 08:36:14 -0800978movq 248(%rsp),%rax
979mulq 24(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -0800980add %rax,%r14
981adc %rdx,%r15
Robert Sloan4d1ac502017-02-06 08:36:14 -0800982movq 248(%rsp),%rdx
Adam Langley4139edb2016-01-13 15:00:54 -0800983imulq $19,%rdx,%rax
Robert Sloan4d1ac502017-02-06 08:36:14 -0800984mulq 32(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -0800985add %rax,%rsi
986adc %rdx,%rcx
Robert Sloan4d1ac502017-02-06 08:36:14 -0800987movq 256(%rsp),%rax
988mulq 0(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -0800989add %rax,%r10
990adc %rdx,%r11
Robert Sloan4d1ac502017-02-06 08:36:14 -0800991movq 256(%rsp),%rax
992mulq 8(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -0800993add %rax,%r12
994adc %rdx,%r13
Robert Sloan4d1ac502017-02-06 08:36:14 -0800995movq 256(%rsp),%rax
996mulq 16(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -0800997add %rax,%r14
998adc %rdx,%r15
Robert Sloan4d1ac502017-02-06 08:36:14 -0800999movq 256(%rsp),%rdx
Adam Langley4139edb2016-01-13 15:00:54 -08001000imulq $19,%rdx,%rax
Robert Sloan4d1ac502017-02-06 08:36:14 -08001001mulq 24(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -08001002add %rax,%rsi
1003adc %rdx,%rcx
Robert Sloan4d1ac502017-02-06 08:36:14 -08001004movq 256(%rsp),%rdx
Adam Langley4139edb2016-01-13 15:00:54 -08001005imulq $19,%rdx,%rax
Robert Sloan4d1ac502017-02-06 08:36:14 -08001006mulq 32(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -08001007add %rax,%r8
1008adc %rdx,%r9
Robert Sloan4d1ac502017-02-06 08:36:14 -08001009movq 264(%rsp),%rax
1010mulq 0(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -08001011add %rax,%r12
1012adc %rdx,%r13
Robert Sloan4d1ac502017-02-06 08:36:14 -08001013movq 264(%rsp),%rax
1014mulq 8(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -08001015add %rax,%r14
1016adc %rdx,%r15
Robert Sloan4d1ac502017-02-06 08:36:14 -08001017movq 200(%rsp),%rax
1018mulq 24(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -08001019add %rax,%r8
1020adc %rdx,%r9
Robert Sloan4d1ac502017-02-06 08:36:14 -08001021movq 200(%rsp),%rax
1022mulq 32(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -08001023add %rax,%r10
1024adc %rdx,%r11
Robert Sloan4d1ac502017-02-06 08:36:14 -08001025movq 272(%rsp),%rax
1026mulq 0(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -08001027add %rax,%r14
1028adc %rdx,%r15
Robert Sloan4d1ac502017-02-06 08:36:14 -08001029movq 208(%rsp),%rax
1030mulq 16(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -08001031add %rax,%r8
1032adc %rdx,%r9
Robert Sloan4d1ac502017-02-06 08:36:14 -08001033movq 208(%rsp),%rax
1034mulq 24(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -08001035add %rax,%r10
1036adc %rdx,%r11
Robert Sloan4d1ac502017-02-06 08:36:14 -08001037movq 208(%rsp),%rax
1038mulq 32(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -08001039add %rax,%r12
1040adc %rdx,%r13
1041movq x25519_x86_64_REDMASK51(%rip),%rdx
1042shld $13,%rsi,%rcx
1043and %rdx,%rsi
1044shld $13,%r8,%r9
1045and %rdx,%r8
1046add %rcx,%r8
1047shld $13,%r10,%r11
1048and %rdx,%r10
1049add %r9,%r10
1050shld $13,%r12,%r13
1051and %rdx,%r12
1052add %r11,%r12
1053shld $13,%r14,%r15
1054and %rdx,%r14
1055add %r13,%r14
1056imulq $19,%r15,%rcx
1057add %rcx,%rsi
1058mov %rsi,%rcx
1059shr $51,%rcx
1060add %r8,%rcx
1061mov %rcx,%r8
1062shr $51,%rcx
1063and %rdx,%rsi
1064add %r10,%rcx
1065mov %rcx,%r9
1066shr $51,%rcx
1067and %rdx,%r8
1068add %r12,%rcx
1069mov %rcx,%rax
1070shr $51,%rcx
1071and %rdx,%r9
1072add %r14,%rcx
1073mov %rcx,%r10
1074shr $51,%rcx
1075and %rdx,%rax
1076imulq $19,%rcx,%rcx
1077add %rcx,%rsi
1078and %rdx,%r10
1079mov %rsi,%rdx
1080mov %r8,%rcx
1081mov %r9,%r11
1082mov %rax,%r12
1083mov %r10,%r13
1084add x25519_x86_64_2P0(%rip),%rdx
1085add x25519_x86_64_2P1234(%rip),%rcx
1086add x25519_x86_64_2P1234(%rip),%r11
1087add x25519_x86_64_2P1234(%rip),%r12
1088add x25519_x86_64_2P1234(%rip),%r13
Robert Sloan4d1ac502017-02-06 08:36:14 -08001089addq 40(%rsp),%rsi
1090addq 48(%rsp),%r8
1091addq 56(%rsp),%r9
1092addq 64(%rsp),%rax
1093addq 72(%rsp),%r10
1094subq 40(%rsp),%rdx
1095subq 48(%rsp),%rcx
1096subq 56(%rsp),%r11
1097subq 64(%rsp),%r12
1098subq 72(%rsp),%r13
Adam Langley4139edb2016-01-13 15:00:54 -08001099movq %rsi,120(%rdi)
1100movq %r8,128(%rdi)
1101movq %r9,136(%rdi)
1102movq %rax,144(%rdi)
1103movq %r10,152(%rdi)
1104movq %rdx,160(%rdi)
1105movq %rcx,168(%rdi)
1106movq %r11,176(%rdi)
1107movq %r12,184(%rdi)
1108movq %r13,192(%rdi)
1109movq 120(%rdi),%rax
1110mulq 120(%rdi)
1111mov %rax,%rsi
1112mov %rdx,%rcx
1113movq 120(%rdi),%rax
1114shl $1,%rax
1115mulq 128(%rdi)
1116mov %rax,%r8
1117mov %rdx,%r9
1118movq 120(%rdi),%rax
1119shl $1,%rax
1120mulq 136(%rdi)
1121mov %rax,%r10
1122mov %rdx,%r11
1123movq 120(%rdi),%rax
1124shl $1,%rax
1125mulq 144(%rdi)
1126mov %rax,%r12
1127mov %rdx,%r13
1128movq 120(%rdi),%rax
1129shl $1,%rax
1130mulq 152(%rdi)
1131mov %rax,%r14
1132mov %rdx,%r15
1133movq 128(%rdi),%rax
1134mulq 128(%rdi)
1135add %rax,%r10
1136adc %rdx,%r11
1137movq 128(%rdi),%rax
1138shl $1,%rax
1139mulq 136(%rdi)
1140add %rax,%r12
1141adc %rdx,%r13
1142movq 128(%rdi),%rax
1143shl $1,%rax
1144mulq 144(%rdi)
1145add %rax,%r14
1146adc %rdx,%r15
1147movq 128(%rdi),%rdx
1148imulq $38,%rdx,%rax
1149mulq 152(%rdi)
1150add %rax,%rsi
1151adc %rdx,%rcx
1152movq 136(%rdi),%rax
1153mulq 136(%rdi)
1154add %rax,%r14
1155adc %rdx,%r15
1156movq 136(%rdi),%rdx
1157imulq $38,%rdx,%rax
1158mulq 144(%rdi)
1159add %rax,%rsi
1160adc %rdx,%rcx
1161movq 136(%rdi),%rdx
1162imulq $38,%rdx,%rax
1163mulq 152(%rdi)
1164add %rax,%r8
1165adc %rdx,%r9
1166movq 144(%rdi),%rdx
1167imulq $19,%rdx,%rax
1168mulq 144(%rdi)
1169add %rax,%r8
1170adc %rdx,%r9
1171movq 144(%rdi),%rdx
1172imulq $38,%rdx,%rax
1173mulq 152(%rdi)
1174add %rax,%r10
1175adc %rdx,%r11
1176movq 152(%rdi),%rdx
1177imulq $19,%rdx,%rax
1178mulq 152(%rdi)
1179add %rax,%r12
1180adc %rdx,%r13
1181movq x25519_x86_64_REDMASK51(%rip),%rdx
1182shld $13,%rsi,%rcx
1183and %rdx,%rsi
1184shld $13,%r8,%r9
1185and %rdx,%r8
1186add %rcx,%r8
1187shld $13,%r10,%r11
1188and %rdx,%r10
1189add %r9,%r10
1190shld $13,%r12,%r13
1191and %rdx,%r12
1192add %r11,%r12
1193shld $13,%r14,%r15
1194and %rdx,%r14
1195add %r13,%r14
1196imulq $19,%r15,%rcx
1197add %rcx,%rsi
1198mov %rsi,%rcx
1199shr $51,%rcx
1200add %r8,%rcx
1201and %rdx,%rsi
1202mov %rcx,%r8
1203shr $51,%rcx
1204add %r10,%rcx
1205and %rdx,%r8
1206mov %rcx,%r9
1207shr $51,%rcx
1208add %r12,%rcx
1209and %rdx,%r9
1210mov %rcx,%rax
1211shr $51,%rcx
1212add %r14,%rcx
1213and %rdx,%rax
1214mov %rcx,%r10
1215shr $51,%rcx
1216imulq $19,%rcx,%rcx
1217add %rcx,%rsi
1218and %rdx,%r10
1219movq %rsi,120(%rdi)
1220movq %r8,128(%rdi)
1221movq %r9,136(%rdi)
1222movq %rax,144(%rdi)
1223movq %r10,152(%rdi)
1224movq 160(%rdi),%rax
1225mulq 160(%rdi)
1226mov %rax,%rsi
1227mov %rdx,%rcx
1228movq 160(%rdi),%rax
1229shl $1,%rax
1230mulq 168(%rdi)
1231mov %rax,%r8
1232mov %rdx,%r9
1233movq 160(%rdi),%rax
1234shl $1,%rax
1235mulq 176(%rdi)
1236mov %rax,%r10
1237mov %rdx,%r11
1238movq 160(%rdi),%rax
1239shl $1,%rax
1240mulq 184(%rdi)
1241mov %rax,%r12
1242mov %rdx,%r13
1243movq 160(%rdi),%rax
1244shl $1,%rax
1245mulq 192(%rdi)
1246mov %rax,%r14
1247mov %rdx,%r15
1248movq 168(%rdi),%rax
1249mulq 168(%rdi)
1250add %rax,%r10
1251adc %rdx,%r11
1252movq 168(%rdi),%rax
1253shl $1,%rax
1254mulq 176(%rdi)
1255add %rax,%r12
1256adc %rdx,%r13
1257movq 168(%rdi),%rax
1258shl $1,%rax
1259mulq 184(%rdi)
1260add %rax,%r14
1261adc %rdx,%r15
1262movq 168(%rdi),%rdx
1263imulq $38,%rdx,%rax
1264mulq 192(%rdi)
1265add %rax,%rsi
1266adc %rdx,%rcx
1267movq 176(%rdi),%rax
1268mulq 176(%rdi)
1269add %rax,%r14
1270adc %rdx,%r15
1271movq 176(%rdi),%rdx
1272imulq $38,%rdx,%rax
1273mulq 184(%rdi)
1274add %rax,%rsi
1275adc %rdx,%rcx
1276movq 176(%rdi),%rdx
1277imulq $38,%rdx,%rax
1278mulq 192(%rdi)
1279add %rax,%r8
1280adc %rdx,%r9
1281movq 184(%rdi),%rdx
1282imulq $19,%rdx,%rax
1283mulq 184(%rdi)
1284add %rax,%r8
1285adc %rdx,%r9
1286movq 184(%rdi),%rdx
1287imulq $38,%rdx,%rax
1288mulq 192(%rdi)
1289add %rax,%r10
1290adc %rdx,%r11
1291movq 192(%rdi),%rdx
1292imulq $19,%rdx,%rax
1293mulq 192(%rdi)
1294add %rax,%r12
1295adc %rdx,%r13
1296movq x25519_x86_64_REDMASK51(%rip),%rdx
1297shld $13,%rsi,%rcx
1298and %rdx,%rsi
1299shld $13,%r8,%r9
1300and %rdx,%r8
1301add %rcx,%r8
1302shld $13,%r10,%r11
1303and %rdx,%r10
1304add %r9,%r10
1305shld $13,%r12,%r13
1306and %rdx,%r12
1307add %r11,%r12
1308shld $13,%r14,%r15
1309and %rdx,%r14
1310add %r13,%r14
1311imulq $19,%r15,%rcx
1312add %rcx,%rsi
1313mov %rsi,%rcx
1314shr $51,%rcx
1315add %r8,%rcx
1316and %rdx,%rsi
1317mov %rcx,%r8
1318shr $51,%rcx
1319add %r10,%rcx
1320and %rdx,%r8
1321mov %rcx,%r9
1322shr $51,%rcx
1323add %r12,%rcx
1324and %rdx,%r9
1325mov %rcx,%rax
1326shr $51,%rcx
1327add %r14,%rcx
1328and %rdx,%rax
1329mov %rcx,%r10
1330shr $51,%rcx
1331imulq $19,%rcx,%rcx
1332add %rcx,%rsi
1333and %rdx,%r10
1334movq %rsi,160(%rdi)
1335movq %r8,168(%rdi)
1336movq %r9,176(%rdi)
1337movq %rax,184(%rdi)
1338movq %r10,192(%rdi)
1339movq 184(%rdi),%rsi
1340imulq $19,%rsi,%rax
Robert Sloan4d1ac502017-02-06 08:36:14 -08001341movq %rax,0(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -08001342mulq 16(%rdi)
1343mov %rax,%rsi
1344mov %rdx,%rcx
1345movq 192(%rdi),%rdx
1346imulq $19,%rdx,%rax
Robert Sloan4d1ac502017-02-06 08:36:14 -08001347movq %rax,8(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -08001348mulq 8(%rdi)
1349add %rax,%rsi
1350adc %rdx,%rcx
1351movq 160(%rdi),%rax
1352mulq 0(%rdi)
1353add %rax,%rsi
1354adc %rdx,%rcx
1355movq 160(%rdi),%rax
1356mulq 8(%rdi)
1357mov %rax,%r8
1358mov %rdx,%r9
1359movq 160(%rdi),%rax
1360mulq 16(%rdi)
1361mov %rax,%r10
1362mov %rdx,%r11
1363movq 160(%rdi),%rax
1364mulq 24(%rdi)
1365mov %rax,%r12
1366mov %rdx,%r13
1367movq 160(%rdi),%rax
1368mulq 32(%rdi)
1369mov %rax,%r14
1370mov %rdx,%r15
1371movq 168(%rdi),%rax
1372mulq 0(%rdi)
1373add %rax,%r8
1374adc %rdx,%r9
1375movq 168(%rdi),%rax
1376mulq 8(%rdi)
1377add %rax,%r10
1378adc %rdx,%r11
1379movq 168(%rdi),%rax
1380mulq 16(%rdi)
1381add %rax,%r12
1382adc %rdx,%r13
1383movq 168(%rdi),%rax
1384mulq 24(%rdi)
1385add %rax,%r14
1386adc %rdx,%r15
1387movq 168(%rdi),%rdx
1388imulq $19,%rdx,%rax
1389mulq 32(%rdi)
1390add %rax,%rsi
1391adc %rdx,%rcx
1392movq 176(%rdi),%rax
1393mulq 0(%rdi)
1394add %rax,%r10
1395adc %rdx,%r11
1396movq 176(%rdi),%rax
1397mulq 8(%rdi)
1398add %rax,%r12
1399adc %rdx,%r13
1400movq 176(%rdi),%rax
1401mulq 16(%rdi)
1402add %rax,%r14
1403adc %rdx,%r15
1404movq 176(%rdi),%rdx
1405imulq $19,%rdx,%rax
1406mulq 24(%rdi)
1407add %rax,%rsi
1408adc %rdx,%rcx
1409movq 176(%rdi),%rdx
1410imulq $19,%rdx,%rax
1411mulq 32(%rdi)
1412add %rax,%r8
1413adc %rdx,%r9
1414movq 184(%rdi),%rax
1415mulq 0(%rdi)
1416add %rax,%r12
1417adc %rdx,%r13
1418movq 184(%rdi),%rax
1419mulq 8(%rdi)
1420add %rax,%r14
1421adc %rdx,%r15
Robert Sloan4d1ac502017-02-06 08:36:14 -08001422movq 0(%rsp),%rax
Adam Langley4139edb2016-01-13 15:00:54 -08001423mulq 24(%rdi)
1424add %rax,%r8
1425adc %rdx,%r9
Robert Sloan4d1ac502017-02-06 08:36:14 -08001426movq 0(%rsp),%rax
Adam Langley4139edb2016-01-13 15:00:54 -08001427mulq 32(%rdi)
1428add %rax,%r10
1429adc %rdx,%r11
1430movq 192(%rdi),%rax
1431mulq 0(%rdi)
1432add %rax,%r14
1433adc %rdx,%r15
Robert Sloan4d1ac502017-02-06 08:36:14 -08001434movq 8(%rsp),%rax
Adam Langley4139edb2016-01-13 15:00:54 -08001435mulq 16(%rdi)
1436add %rax,%r8
1437adc %rdx,%r9
Robert Sloan4d1ac502017-02-06 08:36:14 -08001438movq 8(%rsp),%rax
Adam Langley4139edb2016-01-13 15:00:54 -08001439mulq 24(%rdi)
1440add %rax,%r10
1441adc %rdx,%r11
Robert Sloan4d1ac502017-02-06 08:36:14 -08001442movq 8(%rsp),%rax
Adam Langley4139edb2016-01-13 15:00:54 -08001443mulq 32(%rdi)
1444add %rax,%r12
1445adc %rdx,%r13
1446movq x25519_x86_64_REDMASK51(%rip),%rdx
1447shld $13,%rsi,%rcx
1448and %rdx,%rsi
1449shld $13,%r8,%r9
1450and %rdx,%r8
1451add %rcx,%r8
1452shld $13,%r10,%r11
1453and %rdx,%r10
1454add %r9,%r10
1455shld $13,%r12,%r13
1456and %rdx,%r12
1457add %r11,%r12
1458shld $13,%r14,%r15
1459and %rdx,%r14
1460add %r13,%r14
1461imulq $19,%r15,%rcx
1462add %rcx,%rsi
1463mov %rsi,%rcx
1464shr $51,%rcx
1465add %r8,%rcx
1466mov %rcx,%r8
1467shr $51,%rcx
1468and %rdx,%rsi
1469add %r10,%rcx
1470mov %rcx,%r9
1471shr $51,%rcx
1472and %rdx,%r8
1473add %r12,%rcx
1474mov %rcx,%rax
1475shr $51,%rcx
1476and %rdx,%r9
1477add %r14,%rcx
1478mov %rcx,%r10
1479shr $51,%rcx
1480and %rdx,%rax
1481imulq $19,%rcx,%rcx
1482add %rcx,%rsi
1483and %rdx,%r10
1484movq %rsi,160(%rdi)
1485movq %r8,168(%rdi)
1486movq %r9,176(%rdi)
1487movq %rax,184(%rdi)
1488movq %r10,192(%rdi)
Robert Sloan4d1ac502017-02-06 08:36:14 -08001489movq 144(%rsp),%rsi
Adam Langley4139edb2016-01-13 15:00:54 -08001490imulq $19,%rsi,%rax
Robert Sloan4d1ac502017-02-06 08:36:14 -08001491movq %rax,0(%rsp)
1492mulq 96(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -08001493mov %rax,%rsi
1494mov %rdx,%rcx
Robert Sloan4d1ac502017-02-06 08:36:14 -08001495movq 152(%rsp),%rdx
Adam Langley4139edb2016-01-13 15:00:54 -08001496imulq $19,%rdx,%rax
Robert Sloan4d1ac502017-02-06 08:36:14 -08001497movq %rax,8(%rsp)
1498mulq 88(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -08001499add %rax,%rsi
1500adc %rdx,%rcx
Robert Sloan4d1ac502017-02-06 08:36:14 -08001501movq 120(%rsp),%rax
1502mulq 80(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -08001503add %rax,%rsi
1504adc %rdx,%rcx
Robert Sloan4d1ac502017-02-06 08:36:14 -08001505movq 120(%rsp),%rax
1506mulq 88(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -08001507mov %rax,%r8
1508mov %rdx,%r9
Robert Sloan4d1ac502017-02-06 08:36:14 -08001509movq 120(%rsp),%rax
1510mulq 96(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -08001511mov %rax,%r10
1512mov %rdx,%r11
Robert Sloan4d1ac502017-02-06 08:36:14 -08001513movq 120(%rsp),%rax
1514mulq 104(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -08001515mov %rax,%r12
1516mov %rdx,%r13
Robert Sloan4d1ac502017-02-06 08:36:14 -08001517movq 120(%rsp),%rax
1518mulq 112(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -08001519mov %rax,%r14
1520mov %rdx,%r15
Robert Sloan4d1ac502017-02-06 08:36:14 -08001521movq 128(%rsp),%rax
1522mulq 80(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -08001523add %rax,%r8
1524adc %rdx,%r9
Robert Sloan4d1ac502017-02-06 08:36:14 -08001525movq 128(%rsp),%rax
1526mulq 88(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -08001527add %rax,%r10
1528adc %rdx,%r11
Robert Sloan4d1ac502017-02-06 08:36:14 -08001529movq 128(%rsp),%rax
1530mulq 96(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -08001531add %rax,%r12
1532adc %rdx,%r13
Robert Sloan4d1ac502017-02-06 08:36:14 -08001533movq 128(%rsp),%rax
1534mulq 104(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -08001535add %rax,%r14
1536adc %rdx,%r15
Robert Sloan4d1ac502017-02-06 08:36:14 -08001537movq 128(%rsp),%rdx
Adam Langley4139edb2016-01-13 15:00:54 -08001538imulq $19,%rdx,%rax
Robert Sloan4d1ac502017-02-06 08:36:14 -08001539mulq 112(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -08001540add %rax,%rsi
1541adc %rdx,%rcx
Robert Sloan4d1ac502017-02-06 08:36:14 -08001542movq 136(%rsp),%rax
1543mulq 80(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -08001544add %rax,%r10
1545adc %rdx,%r11
Robert Sloan4d1ac502017-02-06 08:36:14 -08001546movq 136(%rsp),%rax
1547mulq 88(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -08001548add %rax,%r12
1549adc %rdx,%r13
Robert Sloan4d1ac502017-02-06 08:36:14 -08001550movq 136(%rsp),%rax
1551mulq 96(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -08001552add %rax,%r14
1553adc %rdx,%r15
Robert Sloan4d1ac502017-02-06 08:36:14 -08001554movq 136(%rsp),%rdx
Adam Langley4139edb2016-01-13 15:00:54 -08001555imulq $19,%rdx,%rax
Robert Sloan4d1ac502017-02-06 08:36:14 -08001556mulq 104(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -08001557add %rax,%rsi
1558adc %rdx,%rcx
Robert Sloan4d1ac502017-02-06 08:36:14 -08001559movq 136(%rsp),%rdx
Adam Langley4139edb2016-01-13 15:00:54 -08001560imulq $19,%rdx,%rax
Robert Sloan4d1ac502017-02-06 08:36:14 -08001561mulq 112(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -08001562add %rax,%r8
1563adc %rdx,%r9
Robert Sloan4d1ac502017-02-06 08:36:14 -08001564movq 144(%rsp),%rax
1565mulq 80(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -08001566add %rax,%r12
1567adc %rdx,%r13
Robert Sloan4d1ac502017-02-06 08:36:14 -08001568movq 144(%rsp),%rax
1569mulq 88(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -08001570add %rax,%r14
1571adc %rdx,%r15
Robert Sloan4d1ac502017-02-06 08:36:14 -08001572movq 0(%rsp),%rax
1573mulq 104(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -08001574add %rax,%r8
1575adc %rdx,%r9
Robert Sloan4d1ac502017-02-06 08:36:14 -08001576movq 0(%rsp),%rax
1577mulq 112(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -08001578add %rax,%r10
1579adc %rdx,%r11
Robert Sloan4d1ac502017-02-06 08:36:14 -08001580movq 152(%rsp),%rax
1581mulq 80(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -08001582add %rax,%r14
1583adc %rdx,%r15
Robert Sloan4d1ac502017-02-06 08:36:14 -08001584movq 8(%rsp),%rax
1585mulq 96(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -08001586add %rax,%r8
1587adc %rdx,%r9
Robert Sloan4d1ac502017-02-06 08:36:14 -08001588movq 8(%rsp),%rax
1589mulq 104(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -08001590add %rax,%r10
1591adc %rdx,%r11
Robert Sloan4d1ac502017-02-06 08:36:14 -08001592movq 8(%rsp),%rax
1593mulq 112(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -08001594add %rax,%r12
1595adc %rdx,%r13
1596movq x25519_x86_64_REDMASK51(%rip),%rdx
1597shld $13,%rsi,%rcx
1598and %rdx,%rsi
1599shld $13,%r8,%r9
1600and %rdx,%r8
1601add %rcx,%r8
1602shld $13,%r10,%r11
1603and %rdx,%r10
1604add %r9,%r10
1605shld $13,%r12,%r13
1606and %rdx,%r12
1607add %r11,%r12
1608shld $13,%r14,%r15
1609and %rdx,%r14
1610add %r13,%r14
1611imulq $19,%r15,%rcx
1612add %rcx,%rsi
1613mov %rsi,%rcx
1614shr $51,%rcx
1615add %r8,%rcx
1616mov %rcx,%r8
1617shr $51,%rcx
1618and %rdx,%rsi
1619add %r10,%rcx
1620mov %rcx,%r9
1621shr $51,%rcx
1622and %rdx,%r8
1623add %r12,%rcx
1624mov %rcx,%rax
1625shr $51,%rcx
1626and %rdx,%r9
1627add %r14,%rcx
1628mov %rcx,%r10
1629shr $51,%rcx
1630and %rdx,%rax
1631imulq $19,%rcx,%rcx
1632add %rcx,%rsi
1633and %rdx,%r10
1634movq %rsi,40(%rdi)
1635movq %r8,48(%rdi)
1636movq %r9,56(%rdi)
1637movq %rax,64(%rdi)
1638movq %r10,72(%rdi)
Robert Sloan4d1ac502017-02-06 08:36:14 -08001639movq 160(%rsp),%rax
Adam Langley4139edb2016-01-13 15:00:54 -08001640mulq x25519_x86_64_121666_213(%rip)
1641shr $13,%rax
1642mov %rax,%rsi
1643mov %rdx,%rcx
Robert Sloan4d1ac502017-02-06 08:36:14 -08001644movq 168(%rsp),%rax
Adam Langley4139edb2016-01-13 15:00:54 -08001645mulq x25519_x86_64_121666_213(%rip)
1646shr $13,%rax
1647add %rax,%rcx
1648mov %rdx,%r8
Robert Sloan4d1ac502017-02-06 08:36:14 -08001649movq 176(%rsp),%rax
Adam Langley4139edb2016-01-13 15:00:54 -08001650mulq x25519_x86_64_121666_213(%rip)
1651shr $13,%rax
1652add %rax,%r8
1653mov %rdx,%r9
Robert Sloan4d1ac502017-02-06 08:36:14 -08001654movq 184(%rsp),%rax
Adam Langley4139edb2016-01-13 15:00:54 -08001655mulq x25519_x86_64_121666_213(%rip)
1656shr $13,%rax
1657add %rax,%r9
1658mov %rdx,%r10
Robert Sloan4d1ac502017-02-06 08:36:14 -08001659movq 192(%rsp),%rax
Adam Langley4139edb2016-01-13 15:00:54 -08001660mulq x25519_x86_64_121666_213(%rip)
1661shr $13,%rax
1662add %rax,%r10
1663imulq $19,%rdx,%rdx
1664add %rdx,%rsi
Robert Sloan4d1ac502017-02-06 08:36:14 -08001665addq 80(%rsp),%rsi
1666addq 88(%rsp),%rcx
1667addq 96(%rsp),%r8
1668addq 104(%rsp),%r9
1669addq 112(%rsp),%r10
Adam Langley4139edb2016-01-13 15:00:54 -08001670movq %rsi,80(%rdi)
1671movq %rcx,88(%rdi)
1672movq %r8,96(%rdi)
1673movq %r9,104(%rdi)
1674movq %r10,112(%rdi)
1675movq 104(%rdi),%rsi
1676imulq $19,%rsi,%rax
Robert Sloan4d1ac502017-02-06 08:36:14 -08001677movq %rax,0(%rsp)
1678mulq 176(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -08001679mov %rax,%rsi
1680mov %rdx,%rcx
1681movq 112(%rdi),%rdx
1682imulq $19,%rdx,%rax
Robert Sloan4d1ac502017-02-06 08:36:14 -08001683movq %rax,8(%rsp)
1684mulq 168(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -08001685add %rax,%rsi
1686adc %rdx,%rcx
1687movq 80(%rdi),%rax
Robert Sloan4d1ac502017-02-06 08:36:14 -08001688mulq 160(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -08001689add %rax,%rsi
1690adc %rdx,%rcx
1691movq 80(%rdi),%rax
Robert Sloan4d1ac502017-02-06 08:36:14 -08001692mulq 168(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -08001693mov %rax,%r8
1694mov %rdx,%r9
1695movq 80(%rdi),%rax
Robert Sloan4d1ac502017-02-06 08:36:14 -08001696mulq 176(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -08001697mov %rax,%r10
1698mov %rdx,%r11
1699movq 80(%rdi),%rax
Robert Sloan4d1ac502017-02-06 08:36:14 -08001700mulq 184(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -08001701mov %rax,%r12
1702mov %rdx,%r13
1703movq 80(%rdi),%rax
Robert Sloan4d1ac502017-02-06 08:36:14 -08001704mulq 192(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -08001705mov %rax,%r14
1706mov %rdx,%r15
1707movq 88(%rdi),%rax
Robert Sloan4d1ac502017-02-06 08:36:14 -08001708mulq 160(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -08001709add %rax,%r8
1710adc %rdx,%r9
1711movq 88(%rdi),%rax
Robert Sloan4d1ac502017-02-06 08:36:14 -08001712mulq 168(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -08001713add %rax,%r10
1714adc %rdx,%r11
1715movq 88(%rdi),%rax
Robert Sloan4d1ac502017-02-06 08:36:14 -08001716mulq 176(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -08001717add %rax,%r12
1718adc %rdx,%r13
1719movq 88(%rdi),%rax
Robert Sloan4d1ac502017-02-06 08:36:14 -08001720mulq 184(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -08001721add %rax,%r14
1722adc %rdx,%r15
1723movq 88(%rdi),%rdx
1724imulq $19,%rdx,%rax
Robert Sloan4d1ac502017-02-06 08:36:14 -08001725mulq 192(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -08001726add %rax,%rsi
1727adc %rdx,%rcx
1728movq 96(%rdi),%rax
Robert Sloan4d1ac502017-02-06 08:36:14 -08001729mulq 160(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -08001730add %rax,%r10
1731adc %rdx,%r11
1732movq 96(%rdi),%rax
Robert Sloan4d1ac502017-02-06 08:36:14 -08001733mulq 168(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -08001734add %rax,%r12
1735adc %rdx,%r13
1736movq 96(%rdi),%rax
Robert Sloan4d1ac502017-02-06 08:36:14 -08001737mulq 176(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -08001738add %rax,%r14
1739adc %rdx,%r15
1740movq 96(%rdi),%rdx
1741imulq $19,%rdx,%rax
Robert Sloan4d1ac502017-02-06 08:36:14 -08001742mulq 184(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -08001743add %rax,%rsi
1744adc %rdx,%rcx
1745movq 96(%rdi),%rdx
1746imulq $19,%rdx,%rax
Robert Sloan4d1ac502017-02-06 08:36:14 -08001747mulq 192(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -08001748add %rax,%r8
1749adc %rdx,%r9
1750movq 104(%rdi),%rax
Robert Sloan4d1ac502017-02-06 08:36:14 -08001751mulq 160(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -08001752add %rax,%r12
1753adc %rdx,%r13
1754movq 104(%rdi),%rax
Robert Sloan4d1ac502017-02-06 08:36:14 -08001755mulq 168(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -08001756add %rax,%r14
1757adc %rdx,%r15
Robert Sloan4d1ac502017-02-06 08:36:14 -08001758movq 0(%rsp),%rax
1759mulq 184(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -08001760add %rax,%r8
1761adc %rdx,%r9
Robert Sloan4d1ac502017-02-06 08:36:14 -08001762movq 0(%rsp),%rax
1763mulq 192(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -08001764add %rax,%r10
1765adc %rdx,%r11
1766movq 112(%rdi),%rax
Robert Sloan4d1ac502017-02-06 08:36:14 -08001767mulq 160(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -08001768add %rax,%r14
1769adc %rdx,%r15
Robert Sloan4d1ac502017-02-06 08:36:14 -08001770movq 8(%rsp),%rax
1771mulq 176(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -08001772add %rax,%r8
1773adc %rdx,%r9
Robert Sloan4d1ac502017-02-06 08:36:14 -08001774movq 8(%rsp),%rax
1775mulq 184(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -08001776add %rax,%r10
1777adc %rdx,%r11
Robert Sloan4d1ac502017-02-06 08:36:14 -08001778movq 8(%rsp),%rax
1779mulq 192(%rsp)
Adam Langley4139edb2016-01-13 15:00:54 -08001780add %rax,%r12
1781adc %rdx,%r13
1782movq x25519_x86_64_REDMASK51(%rip),%rdx
1783shld $13,%rsi,%rcx
1784and %rdx,%rsi
1785shld $13,%r8,%r9
1786and %rdx,%r8
1787add %rcx,%r8
1788shld $13,%r10,%r11
1789and %rdx,%r10
1790add %r9,%r10
1791shld $13,%r12,%r13
1792and %rdx,%r12
1793add %r11,%r12
1794shld $13,%r14,%r15
1795and %rdx,%r14
1796add %r13,%r14
1797imulq $19,%r15,%rcx
1798add %rcx,%rsi
1799mov %rsi,%rcx
1800shr $51,%rcx
1801add %r8,%rcx
1802mov %rcx,%r8
1803shr $51,%rcx
1804and %rdx,%rsi
1805add %r10,%rcx
1806mov %rcx,%r9
1807shr $51,%rcx
1808and %rdx,%r8
1809add %r12,%rcx
1810mov %rcx,%rax
1811shr $51,%rcx
1812and %rdx,%r9
1813add %r14,%rcx
1814mov %rcx,%r10
1815shr $51,%rcx
1816and %rdx,%rax
1817imulq $19,%rcx,%rcx
1818add %rcx,%rsi
1819and %rdx,%r10
1820movq %rsi,80(%rdi)
1821movq %r8,88(%rdi)
1822movq %r9,96(%rdi)
1823movq %rax,104(%rdi)
1824movq %r10,112(%rdi)
Robert Sloan4d1ac502017-02-06 08:36:14 -08001825movq 296(%rsp),%r12
1826movq 304(%rsp),%r13
1827movq 312(%rsp),%r14
1828movq 320(%rsp),%r15
1829movq 328(%rsp),%rbx
1830movq 336(%rsp),%rbp
1831add $344,%rsp
1832.cfi_adjust_cfa_offset -344
Adam Langley4139edb2016-01-13 15:00:54 -08001833ret
Robert Sloan4d1ac502017-02-06 08:36:14 -08001834.cfi_endproc
Adam Langley4139edb2016-01-13 15:00:54 -08001835
1836.p2align 5
1837.globl C_ABI(x25519_x86_64_work_cswap)
1838HIDDEN C_ABI(x25519_x86_64_work_cswap)
1839C_ABI(x25519_x86_64_work_cswap):
Robert Sloan4d1ac502017-02-06 08:36:14 -08001840.cfi_startproc
Adam Langley4139edb2016-01-13 15:00:54 -08001841cmp $1,%rsi
1842movq 0(%rdi),%rsi
1843movq 80(%rdi),%rdx
1844movq 8(%rdi),%rcx
1845movq 88(%rdi),%r8
1846mov %rsi,%r9
1847cmove %rdx,%rsi
1848cmove %r9,%rdx
1849mov %rcx,%r9
1850cmove %r8,%rcx
1851cmove %r9,%r8
1852movq %rsi,0(%rdi)
1853movq %rdx,80(%rdi)
1854movq %rcx,8(%rdi)
1855movq %r8,88(%rdi)
1856movq 16(%rdi),%rsi
1857movq 96(%rdi),%rdx
1858movq 24(%rdi),%rcx
1859movq 104(%rdi),%r8
1860mov %rsi,%r9
1861cmove %rdx,%rsi
1862cmove %r9,%rdx
1863mov %rcx,%r9
1864cmove %r8,%rcx
1865cmove %r9,%r8
1866movq %rsi,16(%rdi)
1867movq %rdx,96(%rdi)
1868movq %rcx,24(%rdi)
1869movq %r8,104(%rdi)
1870movq 32(%rdi),%rsi
1871movq 112(%rdi),%rdx
1872movq 40(%rdi),%rcx
1873movq 120(%rdi),%r8
1874mov %rsi,%r9
1875cmove %rdx,%rsi
1876cmove %r9,%rdx
1877mov %rcx,%r9
1878cmove %r8,%rcx
1879cmove %r9,%r8
1880movq %rsi,32(%rdi)
1881movq %rdx,112(%rdi)
1882movq %rcx,40(%rdi)
1883movq %r8,120(%rdi)
1884movq 48(%rdi),%rsi
1885movq 128(%rdi),%rdx
1886movq 56(%rdi),%rcx
1887movq 136(%rdi),%r8
1888mov %rsi,%r9
1889cmove %rdx,%rsi
1890cmove %r9,%rdx
1891mov %rcx,%r9
1892cmove %r8,%rcx
1893cmove %r9,%r8
1894movq %rsi,48(%rdi)
1895movq %rdx,128(%rdi)
1896movq %rcx,56(%rdi)
1897movq %r8,136(%rdi)
1898movq 64(%rdi),%rsi
1899movq 144(%rdi),%rdx
1900movq 72(%rdi),%rcx
1901movq 152(%rdi),%r8
1902mov %rsi,%r9
1903cmove %rdx,%rsi
1904cmove %r9,%rdx
1905mov %rcx,%r9
1906cmove %r8,%rcx
1907cmove %r9,%r8
1908movq %rsi,64(%rdi)
1909movq %rdx,144(%rdi)
1910movq %rcx,72(%rdi)
1911movq %r8,152(%rdi)
Adam Langley4139edb2016-01-13 15:00:54 -08001912mov %rdi,%rax
1913mov %rsi,%rdx
1914ret
Robert Sloan4d1ac502017-02-06 08:36:14 -08001915.cfi_endproc
David Benjamin4969cc92016-04-22 15:02:23 -04001916
1917#endif /* __x86_64__ */
1918#endif /* !OPENSSL_NO_ASM */