1.text
2.p2align 5
3.globl _crypto_scalarmult_curve25519_athlon_fromdouble
4.globl crypto_scalarmult_curve25519_athlon_fromdouble
5_crypto_scalarmult_curve25519_athlon_fromdouble:
6crypto_scalarmult_curve25519_athlon_fromdouble:
7mov %esp,%eax
8and $31,%eax
9add $192,%eax
10sub %eax,%esp
11movl %ebp,0(%esp)
12movl 8(%esp,%eax),%ecx
13fldl 0(%ecx)
14faddl crypto_scalarmult_curve25519_athlon_out0offset
15fstpl 96(%esp)
16fldl 8(%ecx)
17faddl crypto_scalarmult_curve25519_athlon_out1offset
18fstpl 104(%esp)
19fldl 16(%ecx)
20faddl crypto_scalarmult_curve25519_athlon_out2offset
21fstpl 112(%esp)
22fldl 24(%ecx)
23faddl crypto_scalarmult_curve25519_athlon_out3offset
24fstpl 120(%esp)
25fldl 32(%ecx)
26faddl crypto_scalarmult_curve25519_athlon_out4offset
27fstpl 128(%esp)
28fldl 40(%ecx)
29faddl crypto_scalarmult_curve25519_athlon_out5offset
30fstpl 136(%esp)
31fldl 48(%ecx)
32faddl crypto_scalarmult_curve25519_athlon_out6offset
33fstpl 144(%esp)
34fldl 56(%ecx)
35faddl crypto_scalarmult_curve25519_athlon_out7offset
36fstpl 152(%esp)
37fldl 64(%ecx)
38faddl crypto_scalarmult_curve25519_athlon_out8offset
39fstpl 160(%esp)
40fldl 72(%ecx)
41faddl crypto_scalarmult_curve25519_athlon_out9offset
42fstpl 168(%esp)
43movl 96(%esp),%ecx
44movl %ecx,4(%esp)
45movl 104(%esp),%ecx
46shl  $26,%ecx
47movl %ecx,40(%esp)
48movl 104(%esp),%ecx
49shr  $6,%ecx
50movl %ecx,8(%esp)
51movl 112(%esp),%ecx
52shl  $19,%ecx
53movl %ecx,44(%esp)
54movl 112(%esp),%ecx
55shr  $13,%ecx
56movl %ecx,12(%esp)
57movl 120(%esp),%ecx
58shl  $13,%ecx
59movl %ecx,48(%esp)
60movl 120(%esp),%ecx
61shr  $19,%ecx
62movl %ecx,16(%esp)
63movl 128(%esp),%ecx
64shl  $6,%ecx
65movl %ecx,52(%esp)
66movl 128(%esp),%ecx
67shr  $26,%ecx
68movl 136(%esp),%edx
69add  %edx,%ecx
70movl %ecx,20(%esp)
71movl 144(%esp),%ecx
72shl  $25,%ecx
73movl %ecx,56(%esp)
74movl 144(%esp),%ecx
75shr  $7,%ecx
76movl %ecx,24(%esp)
77movl 152(%esp),%ecx
78shl  $19,%ecx
79movl %ecx,60(%esp)
80movl 152(%esp),%ecx
81shr  $13,%ecx
82movl %ecx,28(%esp)
83movl 160(%esp),%ecx
84shl  $12,%ecx
85movl %ecx,64(%esp)
86movl 160(%esp),%ecx
87shr  $20,%ecx
88movl %ecx,32(%esp)
89movl 168(%esp),%ecx
90shl  $6,%ecx
91movl %ecx,68(%esp)
92movl 168(%esp),%ecx
93shr  $26,%ecx
94movl %ecx,36(%esp)
95mov  $0,%ecx
96movl %ecx,72(%esp)
97movl 4(%esp),%ecx
98addl 40(%esp),%ecx
99movl %ecx,4(%esp)
100movl 8(%esp),%ecx
101adcl 44(%esp),%ecx
102movl %ecx,8(%esp)
103movl 12(%esp),%ecx
104adcl 48(%esp),%ecx
105movl %ecx,12(%esp)
106movl 16(%esp),%ecx
107adcl 52(%esp),%ecx
108movl %ecx,16(%esp)
109movl 20(%esp),%ecx
110adcl 56(%esp),%ecx
111movl %ecx,20(%esp)
112movl 24(%esp),%ecx
113adcl 60(%esp),%ecx
114movl %ecx,24(%esp)
115movl 28(%esp),%ecx
116adcl 64(%esp),%ecx
117movl %ecx,28(%esp)
118movl 32(%esp),%ecx
119adcl 68(%esp),%ecx
120movl %ecx,32(%esp)
121movl 36(%esp),%ecx
122adcl 72(%esp),%ecx
123movl %ecx,36(%esp)
124movl 4(%esp),%ecx
125adc  $0x13,%ecx
126movl %ecx,40(%esp)
127movl 8(%esp),%ecx
128adc  $0,%ecx
129movl %ecx,44(%esp)
130movl 12(%esp),%ecx
131adc  $0,%ecx
132movl %ecx,48(%esp)
133movl 16(%esp),%ecx
134adc  $0,%ecx
135movl %ecx,52(%esp)
136movl 20(%esp),%ecx
137adc  $0,%ecx
138movl %ecx,56(%esp)
139movl 24(%esp),%ecx
140adc  $0,%ecx
141movl %ecx,60(%esp)
142movl 28(%esp),%ecx
143adc  $0,%ecx
144movl %ecx,64(%esp)
145movl 32(%esp),%ecx
146adc  $0x80000000,%ecx
147movl %ecx,68(%esp)
148movl 36(%esp),%ebp
149adc  $0xffffffff,%ebp
150and  $0x80000000,%ebp
151sar  $31,%ebp
152movl 4(%esp,%eax),%ecx
153movl 4(%esp),%edx
154xorl 40(%esp),%edx
155and  %ebp,%edx
156xorl 40(%esp),%edx
157movl %edx,0(%ecx)
158movl 8(%esp),%edx
159xorl 44(%esp),%edx
160and  %ebp,%edx
161xorl 44(%esp),%edx
162movl %edx,4(%ecx)
163movl 12(%esp),%edx
164xorl 48(%esp),%edx
165and  %ebp,%edx
166xorl 48(%esp),%edx
167movl %edx,8(%ecx)
168movl 16(%esp),%edx
169xorl 52(%esp),%edx
170and  %ebp,%edx
171xorl 52(%esp),%edx
172movl %edx,12(%ecx)
173movl 20(%esp),%edx
174xorl 56(%esp),%edx
175and  %ebp,%edx
176xorl 56(%esp),%edx
177movl %edx,16(%ecx)
178movl 24(%esp),%edx
179xorl 60(%esp),%edx
180and  %ebp,%edx
181xorl 60(%esp),%edx
182movl %edx,20(%ecx)
183movl 28(%esp),%edx
184xorl 64(%esp),%edx
185and  %ebp,%edx
186xorl 64(%esp),%edx
187movl %edx,24(%ecx)
188movl 32(%esp),%edx
189xorl 68(%esp),%edx
190and  %ebp,%edx
191xorl 68(%esp),%edx
192movl %edx,28(%ecx)
193movl 0(%esp),%ebp
194add %eax,%esp
195ret
196