mult.s 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410
  1. .text
  2. .p2align 5
  3. .globl _crypto_scalarmult_curve25519_athlon_mult
  4. .globl crypto_scalarmult_curve25519_athlon_mult
  5. _crypto_scalarmult_curve25519_athlon_mult:
  6. crypto_scalarmult_curve25519_athlon_mult:
  7. mov %esp,%eax
  8. and $31,%eax
  9. add $32,%eax
  10. sub %eax,%esp
  11. movl %ebp,0(%esp)
  12. movl 4(%esp,%eax),%ecx
  13. movl 8(%esp,%eax),%edx
  14. movl 12(%esp,%eax),%ebp
  15. fldl 72(%edx)
  16. fmull 72(%ebp)
  17. fmull crypto_scalarmult_curve25519_athlon_scale
  18. fldl 0(%edx)
  19. fmull 64(%ebp)
  20. faddp %st(0),%st(1)
  21. fldl 8(%edx)
  22. fmull 56(%ebp)
  23. faddp %st(0),%st(1)
  24. fldl 0(%edx)
  25. fmull 72(%ebp)
  26. fldl 16(%edx)
  27. fmull 48(%ebp)
  28. faddp %st(0),%st(2)
  29. fldl 8(%edx)
  30. fmull 64(%ebp)
  31. faddp %st(0),%st(1)
  32. fldl 24(%edx)
  33. fmull 40(%ebp)
  34. faddp %st(0),%st(2)
  35. fldl 16(%edx)
  36. fmull 56(%ebp)
  37. faddp %st(0),%st(1)
  38. fldl 32(%edx)
  39. fmull 32(%ebp)
  40. faddp %st(0),%st(2)
  41. fldl 24(%edx)
  42. fmull 48(%ebp)
  43. faddp %st(0),%st(1)
  44. fldl 8(%edx)
  45. fmull 72(%ebp)
  46. fldl 40(%edx)
  47. fmull 24(%ebp)
  48. faddp %st(0),%st(3)
  49. fldl 32(%edx)
  50. fmull 40(%ebp)
  51. faddp %st(0),%st(2)
  52. fldl 16(%edx)
  53. fmull 64(%ebp)
  54. faddp %st(0),%st(1)
  55. fldl 48(%edx)
  56. fmull 16(%ebp)
  57. faddp %st(0),%st(3)
  58. fldl 40(%edx)
  59. fmull 32(%ebp)
  60. faddp %st(0),%st(2)
  61. fldl 24(%edx)
  62. fmull 56(%ebp)
  63. faddp %st(0),%st(1)
  64. fldl 56(%edx)
  65. fmull 8(%ebp)
  66. faddp %st(0),%st(3)
  67. fldl 48(%edx)
  68. fmull 24(%ebp)
  69. faddp %st(0),%st(2)
  70. fldl 32(%edx)
  71. fmull 48(%ebp)
  72. faddp %st(0),%st(1)
  73. fldl 64(%edx)
  74. fmull 0(%ebp)
  75. faddp %st(0),%st(3)
  76. fldl 56(%edx)
  77. fmull 16(%ebp)
  78. faddp %st(0),%st(2)
  79. fldl 40(%edx)
  80. fmull 40(%ebp)
  81. faddp %st(0),%st(1)
  82. fldl 16(%edx)
  83. fmull 72(%ebp)
  84. fldl 48(%edx)
  85. fmull 32(%ebp)
  86. faddp %st(0),%st(2)
  87. fldl 64(%edx)
  88. fmull 8(%ebp)
  89. faddp %st(0),%st(3)
  90. fldl crypto_scalarmult_curve25519_athlon_alpha230
  91. fadd %st(4),%st(0)
  92. fldl 24(%edx)
  93. fmull 64(%ebp)
  94. faddp %st(0),%st(2)
  95. fldl 56(%edx)
  96. fmull 24(%ebp)
  97. faddp %st(0),%st(3)
  98. fldl 72(%edx)
  99. fmull 0(%ebp)
  100. faddp %st(0),%st(4)
  101. fsubl crypto_scalarmult_curve25519_athlon_alpha230
  102. fldl 32(%edx)
  103. fmull 56(%ebp)
  104. faddp %st(0),%st(2)
  105. fldl 24(%edx)
  106. fmull 72(%ebp)
  107. fldl 64(%edx)
  108. fmull 16(%ebp)
  109. faddp %st(0),%st(4)
  110. fxch %st(1)
  111. fadd %st(0),%st(4)
  112. fldl 40(%edx)
  113. fmull 48(%ebp)
  114. faddp %st(0),%st(3)
  115. fldl 32(%edx)
  116. fmull 64(%ebp)
  117. faddp %st(0),%st(2)
  118. fsubrp %st(0),%st(5)
  119. fldl crypto_scalarmult_curve25519_athlon_alpha255
  120. fadd %st(4),%st(0)
  121. fldl 48(%edx)
  122. fmull 40(%ebp)
  123. faddp %st(0),%st(3)
  124. fldl 40(%edx)
  125. fmull 56(%ebp)
  126. faddp %st(0),%st(2)
  127. fldl 72(%edx)
  128. fmull 8(%ebp)
  129. faddp %st(0),%st(4)
  130. fsubl crypto_scalarmult_curve25519_athlon_alpha255
  131. fldl 56(%edx)
  132. fmull 32(%ebp)
  133. faddp %st(0),%st(3)
  134. fldl 32(%edx)
  135. fmull 72(%ebp)
  136. fldl 48(%edx)
  137. fmull 48(%ebp)
  138. faddp %st(0),%st(3)
  139. fldl 64(%edx)
  140. fmull 24(%ebp)
  141. faddp %st(0),%st(4)
  142. fxch %st(1)
  143. fadd %st(0),%st(4)
  144. fsubrp %st(0),%st(5)
  145. fxch %st(5)
  146. fstpl 64(%ecx)
  147. fldl 40(%edx)
  148. fmull 64(%ebp)
  149. faddp %st(0),%st(5)
  150. fldl 56(%edx)
  151. fmull 40(%ebp)
  152. faddp %st(0),%st(1)
  153. fldl 72(%edx)
  154. fmull 16(%ebp)
  155. faddp %st(0),%st(2)
  156. fxch %st(2)
  157. fmull crypto_scalarmult_curve25519_athlon_scale
  158. fldl 48(%edx)
  159. fmull 56(%ebp)
  160. faddp %st(0),%st(5)
  161. fldl 64(%edx)
  162. fmull 32(%ebp)
  163. faddp %st(0),%st(3)
  164. fxch %st(1)
  165. fmull crypto_scalarmult_curve25519_athlon_scale
  166. fldl 0(%edx)
  167. fmull 0(%ebp)
  168. faddp %st(0),%st(2)
  169. fxch %st(3)
  170. fstpl 72(%ecx)
  171. fldl 40(%edx)
  172. fmull 72(%ebp)
  173. fldl 56(%edx)
  174. fmull 48(%ebp)
  175. faddp %st(0),%st(5)
  176. fldl 72(%edx)
  177. fmull 24(%ebp)
  178. faddp %st(0),%st(3)
  179. fldl 0(%edx)
  180. fmull 8(%ebp)
  181. faddp %st(0),%st(4)
  182. fldl crypto_scalarmult_curve25519_athlon_alpha26
  183. fadd %st(2),%st(0)
  184. fldl 48(%edx)
  185. fmull 64(%ebp)
  186. faddp %st(0),%st(2)
  187. fldl 64(%edx)
  188. fmull 40(%ebp)
  189. faddp %st(0),%st(6)
  190. fxch %st(3)
  191. fmull crypto_scalarmult_curve25519_athlon_scale
  192. fldl 8(%edx)
  193. fmull 0(%ebp)
  194. faddp %st(0),%st(5)
  195. fxch %st(3)
  196. fsubl crypto_scalarmult_curve25519_athlon_alpha26
  197. fldl 56(%edx)
  198. fmull 56(%ebp)
  199. faddp %st(0),%st(2)
  200. fldl 72(%edx)
  201. fmull 32(%ebp)
  202. faddp %st(0),%st(6)
  203. fldl 0(%edx)
  204. fmull 16(%ebp)
  205. faddp %st(0),%st(4)
  206. fadd %st(0),%st(4)
  207. fsubrp %st(0),%st(2)
  208. fldl 48(%edx)
  209. fmull 72(%ebp)
  210. fldl 64(%edx)
  211. fmull 48(%ebp)
  212. faddp %st(0),%st(2)
  213. fxch %st(5)
  214. fmull crypto_scalarmult_curve25519_athlon_scale
  215. fldl 8(%edx)
  216. fmull 8(%ebp)
  217. faddp %st(0),%st(4)
  218. fldl crypto_scalarmult_curve25519_athlon_alpha51
  219. fadd %st(5),%st(0)
  220. fldl 56(%edx)
  221. fmull 64(%ebp)
  222. faddp %st(0),%st(7)
  223. fldl 72(%edx)
  224. fmull 40(%ebp)
  225. faddp %st(0),%st(3)
  226. fldl 0(%edx)
  227. fmull 24(%ebp)
  228. faddp %st(0),%st(2)
  229. fldl 16(%edx)
  230. fmull 0(%ebp)
  231. faddp %st(0),%st(5)
  232. fsubl crypto_scalarmult_curve25519_athlon_alpha51
  233. fxch %st(3)
  234. fstpl 0(%ecx)
  235. fldl 64(%edx)
  236. fmull 56(%ebp)
  237. faddp %st(0),%st(6)
  238. fxch %st(1)
  239. fmull crypto_scalarmult_curve25519_athlon_scale
  240. fldl 8(%edx)
  241. fmull 16(%ebp)
  242. faddp %st(0),%st(2)
  243. fxch %st(2)
  244. fadd %st(0),%st(3)
  245. fsubrp %st(0),%st(4)
  246. fldl 56(%edx)
  247. fmull 72(%ebp)
  248. fldl 72(%edx)
  249. fmull 48(%ebp)
  250. faddp %st(0),%st(6)
  251. fldl 0(%edx)
  252. fmull 32(%ebp)
  253. faddp %st(0),%st(3)
  254. fldl 16(%edx)
  255. fmull 8(%ebp)
  256. faddp %st(0),%st(2)
  257. fldl crypto_scalarmult_curve25519_athlon_alpha77
  258. fadd %st(4),%st(0)
  259. fldl 64(%edx)
  260. fmull 64(%ebp)
  261. faddp %st(0),%st(2)
  262. fxch %st(6)
  263. fmull crypto_scalarmult_curve25519_athlon_scale
  264. fldl 8(%edx)
  265. fmull 24(%ebp)
  266. faddp %st(0),%st(4)
  267. fldl 24(%edx)
  268. fmull 0(%ebp)
  269. faddp %st(0),%st(3)
  270. fxch %st(6)
  271. fsubl crypto_scalarmult_curve25519_athlon_alpha77
  272. fxch %st(5)
  273. fstpl 8(%ecx)
  274. fldl 72(%edx)
  275. fmull 56(%ebp)
  276. faddp %st(0),%st(1)
  277. fldl 0(%edx)
  278. fmull 40(%ebp)
  279. faddp %st(0),%st(6)
  280. fldl 16(%edx)
  281. fmull 16(%ebp)
  282. faddp %st(0),%st(3)
  283. fxch %st(4)
  284. fadd %st(0),%st(1)
  285. fsubrp %st(0),%st(3)
  286. fldl 64(%edx)
  287. fmull 72(%ebp)
  288. fxch %st(4)
  289. fmull crypto_scalarmult_curve25519_athlon_scale
  290. fldl 8(%edx)
  291. fmull 32(%ebp)
  292. faddp %st(0),%st(6)
  293. fldl 24(%edx)
  294. fmull 8(%ebp)
  295. faddp %st(0),%st(3)
  296. fldl crypto_scalarmult_curve25519_athlon_alpha102
  297. fadd %st(2),%st(0)
  298. fldl 72(%edx)
  299. fmull 64(%ebp)
  300. faddp %st(0),%st(6)
  301. fldl 0(%edx)
  302. fmull 48(%ebp)
  303. faddp %st(0),%st(2)
  304. fldl 16(%edx)
  305. fmull 24(%ebp)
  306. faddp %st(0),%st(7)
  307. fldl 32(%edx)
  308. fmull 0(%ebp)
  309. faddp %st(0),%st(4)
  310. fsubl crypto_scalarmult_curve25519_athlon_alpha102
  311. fxch %st(4)
  312. fstpl 16(%ecx)
  313. fxch %st(4)
  314. fmull crypto_scalarmult_curve25519_athlon_scale
  315. fldl 8(%edx)
  316. fmull 40(%ebp)
  317. faddp %st(0),%st(5)
  318. fldl 24(%edx)
  319. fmull 16(%ebp)
  320. faddp %st(0),%st(6)
  321. fxch %st(3)
  322. fadd %st(0),%st(2)
  323. fsubrp %st(0),%st(1)
  324. fldl 0(%edx)
  325. fmull 56(%ebp)
  326. faddp %st(0),%st(3)
  327. fldl 16(%edx)
  328. fmull 32(%ebp)
  329. faddp %st(0),%st(4)
  330. fldl 32(%edx)
  331. fmull 8(%ebp)
  332. faddp %st(0),%st(5)
  333. fldl crypto_scalarmult_curve25519_athlon_alpha128
  334. fadd %st(2),%st(0)
  335. fldl 8(%edx)
  336. fmull 48(%ebp)
  337. faddp %st(0),%st(4)
  338. fldl 24(%edx)
  339. fmull 24(%ebp)
  340. faddp %st(0),%st(5)
  341. fldl 40(%edx)
  342. fmull 0(%ebp)
  343. faddp %st(0),%st(6)
  344. fsubl crypto_scalarmult_curve25519_athlon_alpha128
  345. fxch %st(1)
  346. fstpl 24(%ecx)
  347. fldl 16(%edx)
  348. fmull 40(%ebp)
  349. faddp %st(0),%st(3)
  350. fldl 32(%edx)
  351. fmull 16(%ebp)
  352. faddp %st(0),%st(4)
  353. fadd %st(0),%st(4)
  354. fsubrp %st(0),%st(1)
  355. fstpl 32(%ecx)
  356. fldl 24(%edx)
  357. fmull 32(%ebp)
  358. faddp %st(0),%st(1)
  359. fldl 40(%edx)
  360. fmull 8(%ebp)
  361. faddp %st(0),%st(2)
  362. fldl crypto_scalarmult_curve25519_athlon_alpha153
  363. fadd %st(3),%st(0)
  364. fldl 32(%edx)
  365. fmull 24(%ebp)
  366. faddp %st(0),%st(2)
  367. fldl 48(%edx)
  368. fmull 0(%ebp)
  369. faddp %st(0),%st(3)
  370. fsubl crypto_scalarmult_curve25519_athlon_alpha153
  371. fldl 40(%edx)
  372. fmull 16(%ebp)
  373. faddp %st(0),%st(2)
  374. fadd %st(0),%st(2)
  375. fsubrp %st(0),%st(3)
  376. fxch %st(2)
  377. fstpl 40(%ecx)
  378. fldl 48(%edx)
  379. fmull 8(%ebp)
  380. faddp %st(0),%st(2)
  381. fldl crypto_scalarmult_curve25519_athlon_alpha179
  382. fadd %st(1),%st(0)
  383. fldl 56(%edx)
  384. fmull 0(%ebp)
  385. faddp %st(0),%st(3)
  386. fsubl crypto_scalarmult_curve25519_athlon_alpha179
  387. fldl 64(%ecx)
  388. fldl 72(%ecx)
  389. fxch %st(2)
  390. fadd %st(0),%st(4)
  391. fsubrp %st(0),%st(3)
  392. fldl crypto_scalarmult_curve25519_athlon_alpha204
  393. fadd %st(4),%st(0)
  394. fsubl crypto_scalarmult_curve25519_athlon_alpha204
  395. fadd %st(0),%st(1)
  396. fsubrp %st(0),%st(4)
  397. fldl crypto_scalarmult_curve25519_athlon_alpha230
  398. fadd %st(1),%st(0)
  399. fsubl crypto_scalarmult_curve25519_athlon_alpha230
  400. fsubr %st(0),%st(1)
  401. faddp %st(0),%st(2)
  402. fxch %st(2)
  403. fstpl 48(%ecx)
  404. fxch %st(2)
  405. fstpl 56(%ecx)
  406. fstpl 64(%ecx)
  407. fstpl 72(%ecx)
  408. movl 0(%esp),%ebp
  409. add %eax,%esp
  410. ret