square.s 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298
  1. .text
  2. .p2align 5
  3. .globl _crypto_scalarmult_curve25519_athlon_square
  4. .globl crypto_scalarmult_curve25519_athlon_square
  5. _crypto_scalarmult_curve25519_athlon_square:
  6. crypto_scalarmult_curve25519_athlon_square:
  7. mov %esp,%eax
  8. and $31,%eax
  9. add $64,%eax
  10. sub %eax,%esp
  11. movl 8(%esp,%eax),%edx
  12. movl 4(%esp,%eax),%ecx
  13. fldl 72(%edx)
  14. fmul %st(0),%st(0)
  15. fldl 0(%edx)
  16. fadd %st(0),%st(0)
  17. fldl 8(%edx)
  18. fadd %st(0),%st(0)
  19. fldl 16(%edx)
  20. fadd %st(0),%st(0)
  21. fldl 56(%edx)
  22. fxch %st(4)
  23. fmull crypto_scalarmult_curve25519_athlon_scale
  24. fldl 72(%edx)
  25. fmul %st(4),%st(0)
  26. fldl 64(%edx)
  27. fmul %st(4),%st(0)
  28. faddp %st(0),%st(1)
  29. fxch %st(4)
  30. fstl 0(%esp)
  31. fxch %st(3)
  32. fstl 8(%esp)
  33. fxch %st(3)
  34. fmull 64(%edx)
  35. faddp %st(0),%st(1)
  36. fldl 48(%edx)
  37. fxch %st(5)
  38. fmul %st(0),%st(3)
  39. fxch %st(3)
  40. faddp %st(0),%st(1)
  41. fxch %st(2)
  42. fadd %st(0),%st(0)
  43. fldl 56(%edx)
  44. fmul %st(2),%st(0)
  45. faddp %st(0),%st(4)
  46. fxch %st(1)
  47. fstl 16(%esp)
  48. fldl 40(%edx)
  49. fxch %st(5)
  50. fmul %st(0),%st(1)
  51. fxch %st(1)
  52. faddp %st(0),%st(3)
  53. fadd %st(0),%st(0)
  54. fstpl 48(%esp)
  55. fldl 24(%edx)
  56. fadd %st(0),%st(0)
  57. fstl 24(%esp)
  58. fldl 48(%edx)
  59. fmul %st(1),%st(0)
  60. faddp %st(0),%st(4)
  61. fmul %st(4),%st(0)
  62. faddp %st(0),%st(2)
  63. fxch %st(3)
  64. fadd %st(0),%st(0)
  65. fstpl 40(%esp)
  66. fldl 32(%edx)
  67. fmul %st(0),%st(0)
  68. faddp %st(0),%st(1)
  69. fldl crypto_scalarmult_curve25519_athlon_alpha230
  70. fadd %st(1),%st(0)
  71. fsubl crypto_scalarmult_curve25519_athlon_alpha230
  72. fsubr %st(0),%st(1)
  73. fldl 8(%esp)
  74. fldl 72(%edx)
  75. fmul %st(0),%st(1)
  76. fldl 16(%esp)
  77. fmul %st(0),%st(1)
  78. fldl 64(%edx)
  79. fmul %st(0),%st(1)
  80. fxch %st(1)
  81. faddp %st(0),%st(3)
  82. fldl 24(%esp)
  83. fmul %st(0),%st(1)
  84. fxch %st(1)
  85. faddp %st(0),%st(2)
  86. fldl 32(%edx)
  87. fadd %st(0),%st(0)
  88. fstl 32(%esp)
  89. fmull 40(%edx)
  90. faddp %st(0),%st(6)
  91. fxch %st(3)
  92. faddp %st(0),%st(5)
  93. fldl crypto_scalarmult_curve25519_athlon_alpha255
  94. fadd %st(5),%st(0)
  95. fsubl crypto_scalarmult_curve25519_athlon_alpha255
  96. fsubr %st(0),%st(5)
  97. fldl 56(%edx)
  98. fmul %st(0),%st(4)
  99. fxch %st(4)
  100. faddp %st(0),%st(3)
  101. fldl 32(%esp)
  102. fmul %st(0),%st(4)
  103. fxch %st(4)
  104. faddp %st(0),%st(2)
  105. fldl 48(%edx)
  106. fmul %st(0),%st(4)
  107. fxch %st(4)
  108. faddp %st(0),%st(3)
  109. fxch %st(3)
  110. fmull 40(%esp)
  111. faddp %st(0),%st(1)
  112. fxch %st(3)
  113. fstpl 64(%ecx)
  114. fldl 40(%edx)
  115. fmul %st(0),%st(0)
  116. faddp %st(0),%st(1)
  117. fxch %st(2)
  118. fmull crypto_scalarmult_curve25519_athlon_scale
  119. fxch %st(3)
  120. fstpl 72(%ecx)
  121. faddp %st(0),%st(1)
  122. fmull crypto_scalarmult_curve25519_athlon_scale
  123. fldl 24(%esp)
  124. fmull 72(%edx)
  125. fldl 0(%edx)
  126. fmul %st(0),%st(0)
  127. faddp %st(0),%st(2)
  128. fldl 32(%esp)
  129. fmull 64(%edx)
  130. faddp %st(0),%st(1)
  131. fldl 0(%esp)
  132. fmull 8(%edx)
  133. faddp %st(0),%st(3)
  134. fldl 40(%esp)
  135. fmull 56(%edx)
  136. faddp %st(0),%st(1)
  137. fldl crypto_scalarmult_curve25519_athlon_alpha26
  138. fadd %st(2),%st(0)
  139. fsubl crypto_scalarmult_curve25519_athlon_alpha26
  140. fsubr %st(0),%st(2)
  141. faddp %st(0),%st(3)
  142. fldl crypto_scalarmult_curve25519_athlon_alpha51
  143. fadd %st(3),%st(0)
  144. fsubl crypto_scalarmult_curve25519_athlon_alpha51
  145. fsubr %st(0),%st(3)
  146. fldl 48(%edx)
  147. fmul %st(0),%st(0)
  148. faddp %st(0),%st(2)
  149. fxch %st(1)
  150. fmull crypto_scalarmult_curve25519_athlon_scale
  151. fldl 0(%esp)
  152. fmull 16(%edx)
  153. faddp %st(0),%st(1)
  154. fldl 8(%edx)
  155. fmul %st(0),%st(0)
  156. faddp %st(0),%st(1)
  157. faddp %st(0),%st(1)
  158. fldl crypto_scalarmult_curve25519_athlon_alpha77
  159. fadd %st(1),%st(0)
  160. fsubl crypto_scalarmult_curve25519_athlon_alpha77
  161. fsubr %st(0),%st(1)
  162. fxch %st(2)
  163. fstpl 0(%ecx)
  164. fldl 32(%esp)
  165. fmull 72(%edx)
  166. fldl 40(%esp)
  167. fmull 64(%edx)
  168. faddp %st(0),%st(1)
  169. fldl 48(%esp)
  170. fmull 56(%edx)
  171. faddp %st(0),%st(1)
  172. fmull crypto_scalarmult_curve25519_athlon_scale
  173. fldl 0(%esp)
  174. fmull 24(%edx)
  175. faddp %st(0),%st(1)
  176. fldl 8(%esp)
  177. fmull 16(%edx)
  178. faddp %st(0),%st(1)
  179. faddp %st(0),%st(2)
  180. fldl crypto_scalarmult_curve25519_athlon_alpha102
  181. fadd %st(2),%st(0)
  182. fsubl crypto_scalarmult_curve25519_athlon_alpha102
  183. fsubr %st(0),%st(2)
  184. fxch %st(3)
  185. fstpl 8(%ecx)
  186. fldl 40(%esp)
  187. fmull 72(%edx)
  188. fldl 48(%esp)
  189. fmull 64(%edx)
  190. faddp %st(0),%st(1)
  191. fldl 56(%edx)
  192. fmul %st(0),%st(0)
  193. faddp %st(0),%st(1)
  194. fmull crypto_scalarmult_curve25519_athlon_scale
  195. fldl 0(%esp)
  196. fmull 32(%edx)
  197. faddp %st(0),%st(1)
  198. fldl 8(%esp)
  199. fmull 24(%edx)
  200. faddp %st(0),%st(1)
  201. fldl 16(%edx)
  202. fmul %st(0),%st(0)
  203. faddp %st(0),%st(1)
  204. faddp %st(0),%st(3)
  205. fldl crypto_scalarmult_curve25519_athlon_alpha128
  206. fadd %st(3),%st(0)
  207. fsubl crypto_scalarmult_curve25519_athlon_alpha128
  208. fsubr %st(0),%st(3)
  209. fxch %st(1)
  210. fstpl 16(%ecx)
  211. fldl 48(%esp)
  212. fldl 72(%edx)
  213. fmul %st(0),%st(1)
  214. fmul %st(5),%st(0)
  215. fxch %st(5)
  216. fmull 64(%edx)
  217. faddp %st(0),%st(1)
  218. fmull crypto_scalarmult_curve25519_athlon_scale
  219. fldl 0(%esp)
  220. fmull 40(%edx)
  221. faddp %st(0),%st(1)
  222. fldl 8(%esp)
  223. fmull 32(%edx)
  224. faddp %st(0),%st(1)
  225. fldl 16(%esp)
  226. fmull 24(%edx)
  227. faddp %st(0),%st(1)
  228. faddp %st(0),%st(1)
  229. fldl crypto_scalarmult_curve25519_athlon_alpha153
  230. fadd %st(1),%st(0)
  231. fsubl crypto_scalarmult_curve25519_athlon_alpha153
  232. fsubr %st(0),%st(1)
  233. fxch %st(2)
  234. fstpl 24(%ecx)
  235. fldl 64(%edx)
  236. fmul %st(0),%st(0)
  237. faddp %st(0),%st(4)
  238. fxch %st(3)
  239. fmull crypto_scalarmult_curve25519_athlon_scale
  240. fldl 0(%esp)
  241. fmull 48(%edx)
  242. faddp %st(0),%st(1)
  243. fldl 8(%esp)
  244. fmull 40(%edx)
  245. faddp %st(0),%st(1)
  246. fldl 16(%esp)
  247. fmull 32(%edx)
  248. faddp %st(0),%st(1)
  249. fldl 24(%edx)
  250. fmul %st(0),%st(0)
  251. faddp %st(0),%st(1)
  252. faddp %st(0),%st(1)
  253. fldl crypto_scalarmult_curve25519_athlon_alpha179
  254. fadd %st(1),%st(0)
  255. fsubl crypto_scalarmult_curve25519_athlon_alpha179
  256. fsubr %st(0),%st(1)
  257. fldl 64(%edx)
  258. fadd %st(0),%st(0)
  259. fmull 72(%edx)
  260. fmull crypto_scalarmult_curve25519_athlon_scale
  261. fldl 0(%esp)
  262. fmull 56(%edx)
  263. faddp %st(0),%st(1)
  264. fldl 8(%esp)
  265. fmull 48(%edx)
  266. faddp %st(0),%st(1)
  267. fldl 16(%esp)
  268. fmull 40(%edx)
  269. faddp %st(0),%st(1)
  270. fldl 24(%esp)
  271. fmull 32(%edx)
  272. faddp %st(0),%st(1)
  273. faddp %st(0),%st(1)
  274. fldl crypto_scalarmult_curve25519_athlon_alpha204
  275. fadd %st(1),%st(0)
  276. fsubl crypto_scalarmult_curve25519_athlon_alpha204
  277. fsubr %st(0),%st(1)
  278. fldl 64(%ecx)
  279. faddp %st(0),%st(1)
  280. fldl crypto_scalarmult_curve25519_athlon_alpha230
  281. fadd %st(1),%st(0)
  282. fldl 72(%ecx)
  283. fxch %st(1)
  284. fsubl crypto_scalarmult_curve25519_athlon_alpha230
  285. fsubr %st(0),%st(2)
  286. faddp %st(0),%st(1)
  287. fxch %st(4)
  288. fstpl 32(%ecx)
  289. fxch %st(4)
  290. fstpl 40(%ecx)
  291. fxch %st(1)
  292. fstpl 48(%ecx)
  293. fstpl 56(%ecx)
  294. fxch %st(1)
  295. fstpl 64(%ecx)
  296. fstpl 72(%ecx)
  297. add %eax,%esp
  298. ret