co-586.S 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257
  1. // This file is generated from a similarly-named Perl script in the BoringSSL
  2. // source tree. Do not edit by hand.
  3. #if defined(__i386__)
  4. #if defined(BORINGSSL_PREFIX)
  5. #include <boringssl_prefix_symbols_asm.h>
  6. #endif
  7. .text
  8. .globl _bn_mul_comba8
  9. .private_extern _bn_mul_comba8
  10. .align 4
  11. _bn_mul_comba8:
  12. L_bn_mul_comba8_begin:
  13. pushl %esi
  14. movl 12(%esp),%esi
  15. pushl %edi
  16. movl 20(%esp),%edi
  17. pushl %ebp
  18. pushl %ebx
  19. xorl %ebx,%ebx
  20. movl (%esi),%eax
  21. xorl %ecx,%ecx
  22. movl (%edi),%edx
  23. # ################## Calculate word 0
  24. xorl %ebp,%ebp
  25. # mul a[0]*b[0]
  26. mull %edx
  27. addl %eax,%ebx
  28. movl 20(%esp),%eax
  29. adcl %edx,%ecx
  30. movl (%edi),%edx
  31. adcl $0,%ebp
  32. movl %ebx,(%eax)
  33. movl 4(%esi),%eax
  34. # saved r[0]
  35. # ################## Calculate word 1
  36. xorl %ebx,%ebx
  37. # mul a[1]*b[0]
  38. mull %edx
  39. addl %eax,%ecx
  40. movl (%esi),%eax
  41. adcl %edx,%ebp
  42. movl 4(%edi),%edx
  43. adcl $0,%ebx
  44. # mul a[0]*b[1]
  45. mull %edx
  46. addl %eax,%ecx
  47. movl 20(%esp),%eax
  48. adcl %edx,%ebp
  49. movl (%edi),%edx
  50. adcl $0,%ebx
  51. movl %ecx,4(%eax)
  52. movl 8(%esi),%eax
  53. # saved r[1]
  54. # ################## Calculate word 2
  55. xorl %ecx,%ecx
  56. # mul a[2]*b[0]
  57. mull %edx
  58. addl %eax,%ebp
  59. movl 4(%esi),%eax
  60. adcl %edx,%ebx
  61. movl 4(%edi),%edx
  62. adcl $0,%ecx
  63. # mul a[1]*b[1]
  64. mull %edx
  65. addl %eax,%ebp
  66. movl (%esi),%eax
  67. adcl %edx,%ebx
  68. movl 8(%edi),%edx
  69. adcl $0,%ecx
  70. # mul a[0]*b[2]
  71. mull %edx
  72. addl %eax,%ebp
  73. movl 20(%esp),%eax
  74. adcl %edx,%ebx
  75. movl (%edi),%edx
  76. adcl $0,%ecx
  77. movl %ebp,8(%eax)
  78. movl 12(%esi),%eax
  79. # saved r[2]
  80. # ################## Calculate word 3
  81. xorl %ebp,%ebp
  82. # mul a[3]*b[0]
  83. mull %edx
  84. addl %eax,%ebx
  85. movl 8(%esi),%eax
  86. adcl %edx,%ecx
  87. movl 4(%edi),%edx
  88. adcl $0,%ebp
  89. # mul a[2]*b[1]
  90. mull %edx
  91. addl %eax,%ebx
  92. movl 4(%esi),%eax
  93. adcl %edx,%ecx
  94. movl 8(%edi),%edx
  95. adcl $0,%ebp
  96. # mul a[1]*b[2]
  97. mull %edx
  98. addl %eax,%ebx
  99. movl (%esi),%eax
  100. adcl %edx,%ecx
  101. movl 12(%edi),%edx
  102. adcl $0,%ebp
  103. # mul a[0]*b[3]
  104. mull %edx
  105. addl %eax,%ebx
  106. movl 20(%esp),%eax
  107. adcl %edx,%ecx
  108. movl (%edi),%edx
  109. adcl $0,%ebp
  110. movl %ebx,12(%eax)
  111. movl 16(%esi),%eax
  112. # saved r[3]
  113. # ################## Calculate word 4
  114. xorl %ebx,%ebx
  115. # mul a[4]*b[0]
  116. mull %edx
  117. addl %eax,%ecx
  118. movl 12(%esi),%eax
  119. adcl %edx,%ebp
  120. movl 4(%edi),%edx
  121. adcl $0,%ebx
  122. # mul a[3]*b[1]
  123. mull %edx
  124. addl %eax,%ecx
  125. movl 8(%esi),%eax
  126. adcl %edx,%ebp
  127. movl 8(%edi),%edx
  128. adcl $0,%ebx
  129. # mul a[2]*b[2]
  130. mull %edx
  131. addl %eax,%ecx
  132. movl 4(%esi),%eax
  133. adcl %edx,%ebp
  134. movl 12(%edi),%edx
  135. adcl $0,%ebx
  136. # mul a[1]*b[3]
  137. mull %edx
  138. addl %eax,%ecx
  139. movl (%esi),%eax
  140. adcl %edx,%ebp
  141. movl 16(%edi),%edx
  142. adcl $0,%ebx
  143. # mul a[0]*b[4]
  144. mull %edx
  145. addl %eax,%ecx
  146. movl 20(%esp),%eax
  147. adcl %edx,%ebp
  148. movl (%edi),%edx
  149. adcl $0,%ebx
  150. movl %ecx,16(%eax)
  151. movl 20(%esi),%eax
  152. # saved r[4]
  153. # ################## Calculate word 5
  154. xorl %ecx,%ecx
  155. # mul a[5]*b[0]
  156. mull %edx
  157. addl %eax,%ebp
  158. movl 16(%esi),%eax
  159. adcl %edx,%ebx
  160. movl 4(%edi),%edx
  161. adcl $0,%ecx
  162. # mul a[4]*b[1]
  163. mull %edx
  164. addl %eax,%ebp
  165. movl 12(%esi),%eax
  166. adcl %edx,%ebx
  167. movl 8(%edi),%edx
  168. adcl $0,%ecx
  169. # mul a[3]*b[2]
  170. mull %edx
  171. addl %eax,%ebp
  172. movl 8(%esi),%eax
  173. adcl %edx,%ebx
  174. movl 12(%edi),%edx
  175. adcl $0,%ecx
  176. # mul a[2]*b[3]
  177. mull %edx
  178. addl %eax,%ebp
  179. movl 4(%esi),%eax
  180. adcl %edx,%ebx
  181. movl 16(%edi),%edx
  182. adcl $0,%ecx
  183. # mul a[1]*b[4]
  184. mull %edx
  185. addl %eax,%ebp
  186. movl (%esi),%eax
  187. adcl %edx,%ebx
  188. movl 20(%edi),%edx
  189. adcl $0,%ecx
  190. # mul a[0]*b[5]
  191. mull %edx
  192. addl %eax,%ebp
  193. movl 20(%esp),%eax
  194. adcl %edx,%ebx
  195. movl (%edi),%edx
  196. adcl $0,%ecx
  197. movl %ebp,20(%eax)
  198. movl 24(%esi),%eax
  199. # saved r[5]
  200. # ################## Calculate word 6
  201. xorl %ebp,%ebp
  202. # mul a[6]*b[0]
  203. mull %edx
  204. addl %eax,%ebx
  205. movl 20(%esi),%eax
  206. adcl %edx,%ecx
  207. movl 4(%edi),%edx
  208. adcl $0,%ebp
  209. # mul a[5]*b[1]
  210. mull %edx
  211. addl %eax,%ebx
  212. movl 16(%esi),%eax
  213. adcl %edx,%ecx
  214. movl 8(%edi),%edx
  215. adcl $0,%ebp
  216. # mul a[4]*b[2]
  217. mull %edx
  218. addl %eax,%ebx
  219. movl 12(%esi),%eax
  220. adcl %edx,%ecx
  221. movl 12(%edi),%edx
  222. adcl $0,%ebp
  223. # mul a[3]*b[3]
  224. mull %edx
  225. addl %eax,%ebx
  226. movl 8(%esi),%eax
  227. adcl %edx,%ecx
  228. movl 16(%edi),%edx
  229. adcl $0,%ebp
  230. # mul a[2]*b[4]
  231. mull %edx
  232. addl %eax,%ebx
  233. movl 4(%esi),%eax
  234. adcl %edx,%ecx
  235. movl 20(%edi),%edx
  236. adcl $0,%ebp
  237. # mul a[1]*b[5]
  238. mull %edx
  239. addl %eax,%ebx
  240. movl (%esi),%eax
  241. adcl %edx,%ecx
  242. movl 24(%edi),%edx
  243. adcl $0,%ebp
  244. # mul a[0]*b[6]
  245. mull %edx
  246. addl %eax,%ebx
  247. movl 20(%esp),%eax
  248. adcl %edx,%ecx
  249. movl (%edi),%edx
  250. adcl $0,%ebp
  251. movl %ebx,24(%eax)
  252. movl 28(%esi),%eax
  253. # saved r[6]
  254. # ################## Calculate word 7
  255. xorl %ebx,%ebx
  256. # mul a[7]*b[0]
  257. mull %edx
  258. addl %eax,%ecx
  259. movl 24(%esi),%eax
  260. adcl %edx,%ebp
  261. movl 4(%edi),%edx
  262. adcl $0,%ebx
  263. # mul a[6]*b[1]
  264. mull %edx
  265. addl %eax,%ecx
  266. movl 20(%esi),%eax
  267. adcl %edx,%ebp
  268. movl 8(%edi),%edx
  269. adcl $0,%ebx
  270. # mul a[5]*b[2]
  271. mull %edx
  272. addl %eax,%ecx
  273. movl 16(%esi),%eax
  274. adcl %edx,%ebp
  275. movl 12(%edi),%edx
  276. adcl $0,%ebx
  277. # mul a[4]*b[3]
  278. mull %edx
  279. addl %eax,%ecx
  280. movl 12(%esi),%eax
  281. adcl %edx,%ebp
  282. movl 16(%edi),%edx
  283. adcl $0,%ebx
  284. # mul a[3]*b[4]
  285. mull %edx
  286. addl %eax,%ecx
  287. movl 8(%esi),%eax
  288. adcl %edx,%ebp
  289. movl 20(%edi),%edx
  290. adcl $0,%ebx
  291. # mul a[2]*b[5]
  292. mull %edx
  293. addl %eax,%ecx
  294. movl 4(%esi),%eax
  295. adcl %edx,%ebp
  296. movl 24(%edi),%edx
  297. adcl $0,%ebx
  298. # mul a[1]*b[6]
  299. mull %edx
  300. addl %eax,%ecx
  301. movl (%esi),%eax
  302. adcl %edx,%ebp
  303. movl 28(%edi),%edx
  304. adcl $0,%ebx
  305. # mul a[0]*b[7]
  306. mull %edx
  307. addl %eax,%ecx
  308. movl 20(%esp),%eax
  309. adcl %edx,%ebp
  310. movl 4(%edi),%edx
  311. adcl $0,%ebx
  312. movl %ecx,28(%eax)
  313. movl 28(%esi),%eax
  314. # saved r[7]
  315. # ################## Calculate word 8
  316. xorl %ecx,%ecx
  317. # mul a[7]*b[1]
  318. mull %edx
  319. addl %eax,%ebp
  320. movl 24(%esi),%eax
  321. adcl %edx,%ebx
  322. movl 8(%edi),%edx
  323. adcl $0,%ecx
  324. # mul a[6]*b[2]
  325. mull %edx
  326. addl %eax,%ebp
  327. movl 20(%esi),%eax
  328. adcl %edx,%ebx
  329. movl 12(%edi),%edx
  330. adcl $0,%ecx
  331. # mul a[5]*b[3]
  332. mull %edx
  333. addl %eax,%ebp
  334. movl 16(%esi),%eax
  335. adcl %edx,%ebx
  336. movl 16(%edi),%edx
  337. adcl $0,%ecx
  338. # mul a[4]*b[4]
  339. mull %edx
  340. addl %eax,%ebp
  341. movl 12(%esi),%eax
  342. adcl %edx,%ebx
  343. movl 20(%edi),%edx
  344. adcl $0,%ecx
  345. # mul a[3]*b[5]
  346. mull %edx
  347. addl %eax,%ebp
  348. movl 8(%esi),%eax
  349. adcl %edx,%ebx
  350. movl 24(%edi),%edx
  351. adcl $0,%ecx
  352. # mul a[2]*b[6]
  353. mull %edx
  354. addl %eax,%ebp
  355. movl 4(%esi),%eax
  356. adcl %edx,%ebx
  357. movl 28(%edi),%edx
  358. adcl $0,%ecx
  359. # mul a[1]*b[7]
  360. mull %edx
  361. addl %eax,%ebp
  362. movl 20(%esp),%eax
  363. adcl %edx,%ebx
  364. movl 8(%edi),%edx
  365. adcl $0,%ecx
  366. movl %ebp,32(%eax)
  367. movl 28(%esi),%eax
  368. # saved r[8]
  369. # ################## Calculate word 9
  370. xorl %ebp,%ebp
  371. # mul a[7]*b[2]
  372. mull %edx
  373. addl %eax,%ebx
  374. movl 24(%esi),%eax
  375. adcl %edx,%ecx
  376. movl 12(%edi),%edx
  377. adcl $0,%ebp
  378. # mul a[6]*b[3]
  379. mull %edx
  380. addl %eax,%ebx
  381. movl 20(%esi),%eax
  382. adcl %edx,%ecx
  383. movl 16(%edi),%edx
  384. adcl $0,%ebp
  385. # mul a[5]*b[4]
  386. mull %edx
  387. addl %eax,%ebx
  388. movl 16(%esi),%eax
  389. adcl %edx,%ecx
  390. movl 20(%edi),%edx
  391. adcl $0,%ebp
  392. # mul a[4]*b[5]
  393. mull %edx
  394. addl %eax,%ebx
  395. movl 12(%esi),%eax
  396. adcl %edx,%ecx
  397. movl 24(%edi),%edx
  398. adcl $0,%ebp
  399. # mul a[3]*b[6]
  400. mull %edx
  401. addl %eax,%ebx
  402. movl 8(%esi),%eax
  403. adcl %edx,%ecx
  404. movl 28(%edi),%edx
  405. adcl $0,%ebp
  406. # mul a[2]*b[7]
  407. mull %edx
  408. addl %eax,%ebx
  409. movl 20(%esp),%eax
  410. adcl %edx,%ecx
  411. movl 12(%edi),%edx
  412. adcl $0,%ebp
  413. movl %ebx,36(%eax)
  414. movl 28(%esi),%eax
  415. # saved r[9]
  416. # ################## Calculate word 10
  417. xorl %ebx,%ebx
  418. # mul a[7]*b[3]
  419. mull %edx
  420. addl %eax,%ecx
  421. movl 24(%esi),%eax
  422. adcl %edx,%ebp
  423. movl 16(%edi),%edx
  424. adcl $0,%ebx
  425. # mul a[6]*b[4]
  426. mull %edx
  427. addl %eax,%ecx
  428. movl 20(%esi),%eax
  429. adcl %edx,%ebp
  430. movl 20(%edi),%edx
  431. adcl $0,%ebx
  432. # mul a[5]*b[5]
  433. mull %edx
  434. addl %eax,%ecx
  435. movl 16(%esi),%eax
  436. adcl %edx,%ebp
  437. movl 24(%edi),%edx
  438. adcl $0,%ebx
  439. # mul a[4]*b[6]
  440. mull %edx
  441. addl %eax,%ecx
  442. movl 12(%esi),%eax
  443. adcl %edx,%ebp
  444. movl 28(%edi),%edx
  445. adcl $0,%ebx
  446. # mul a[3]*b[7]
  447. mull %edx
  448. addl %eax,%ecx
  449. movl 20(%esp),%eax
  450. adcl %edx,%ebp
  451. movl 16(%edi),%edx
  452. adcl $0,%ebx
  453. movl %ecx,40(%eax)
  454. movl 28(%esi),%eax
  455. # saved r[10]
  456. # ################## Calculate word 11
  457. xorl %ecx,%ecx
  458. # mul a[7]*b[4]
  459. mull %edx
  460. addl %eax,%ebp
  461. movl 24(%esi),%eax
  462. adcl %edx,%ebx
  463. movl 20(%edi),%edx
  464. adcl $0,%ecx
  465. # mul a[6]*b[5]
  466. mull %edx
  467. addl %eax,%ebp
  468. movl 20(%esi),%eax
  469. adcl %edx,%ebx
  470. movl 24(%edi),%edx
  471. adcl $0,%ecx
  472. # mul a[5]*b[6]
  473. mull %edx
  474. addl %eax,%ebp
  475. movl 16(%esi),%eax
  476. adcl %edx,%ebx
  477. movl 28(%edi),%edx
  478. adcl $0,%ecx
  479. # mul a[4]*b[7]
  480. mull %edx
  481. addl %eax,%ebp
  482. movl 20(%esp),%eax
  483. adcl %edx,%ebx
  484. movl 20(%edi),%edx
  485. adcl $0,%ecx
  486. movl %ebp,44(%eax)
  487. movl 28(%esi),%eax
  488. # saved r[11]
  489. # ################## Calculate word 12
  490. xorl %ebp,%ebp
  491. # mul a[7]*b[5]
  492. mull %edx
  493. addl %eax,%ebx
  494. movl 24(%esi),%eax
  495. adcl %edx,%ecx
  496. movl 24(%edi),%edx
  497. adcl $0,%ebp
  498. # mul a[6]*b[6]
  499. mull %edx
  500. addl %eax,%ebx
  501. movl 20(%esi),%eax
  502. adcl %edx,%ecx
  503. movl 28(%edi),%edx
  504. adcl $0,%ebp
  505. # mul a[5]*b[7]
  506. mull %edx
  507. addl %eax,%ebx
  508. movl 20(%esp),%eax
  509. adcl %edx,%ecx
  510. movl 24(%edi),%edx
  511. adcl $0,%ebp
  512. movl %ebx,48(%eax)
  513. movl 28(%esi),%eax
  514. # saved r[12]
  515. # ################## Calculate word 13
  516. xorl %ebx,%ebx
  517. # mul a[7]*b[6]
  518. mull %edx
  519. addl %eax,%ecx
  520. movl 24(%esi),%eax
  521. adcl %edx,%ebp
  522. movl 28(%edi),%edx
  523. adcl $0,%ebx
  524. # mul a[6]*b[7]
  525. mull %edx
  526. addl %eax,%ecx
  527. movl 20(%esp),%eax
  528. adcl %edx,%ebp
  529. movl 28(%edi),%edx
  530. adcl $0,%ebx
  531. movl %ecx,52(%eax)
  532. movl 28(%esi),%eax
  533. # saved r[13]
  534. # ################## Calculate word 14
  535. xorl %ecx,%ecx
  536. # mul a[7]*b[7]
  537. mull %edx
  538. addl %eax,%ebp
  539. movl 20(%esp),%eax
  540. adcl %edx,%ebx
  541. adcl $0,%ecx
  542. movl %ebp,56(%eax)
  543. # saved r[14]
  544. # save r[15]
  545. movl %ebx,60(%eax)
  546. popl %ebx
  547. popl %ebp
  548. popl %edi
  549. popl %esi
  550. ret
  551. .globl _bn_mul_comba4
  552. .private_extern _bn_mul_comba4
  553. .align 4
  554. _bn_mul_comba4:
  555. L_bn_mul_comba4_begin:
  556. pushl %esi
  557. movl 12(%esp),%esi
  558. pushl %edi
  559. movl 20(%esp),%edi
  560. pushl %ebp
  561. pushl %ebx
  562. xorl %ebx,%ebx
  563. movl (%esi),%eax
  564. xorl %ecx,%ecx
  565. movl (%edi),%edx
  566. # ################## Calculate word 0
  567. xorl %ebp,%ebp
  568. # mul a[0]*b[0]
  569. mull %edx
  570. addl %eax,%ebx
  571. movl 20(%esp),%eax
  572. adcl %edx,%ecx
  573. movl (%edi),%edx
  574. adcl $0,%ebp
  575. movl %ebx,(%eax)
  576. movl 4(%esi),%eax
  577. # saved r[0]
  578. # ################## Calculate word 1
  579. xorl %ebx,%ebx
  580. # mul a[1]*b[0]
  581. mull %edx
  582. addl %eax,%ecx
  583. movl (%esi),%eax
  584. adcl %edx,%ebp
  585. movl 4(%edi),%edx
  586. adcl $0,%ebx
  587. # mul a[0]*b[1]
  588. mull %edx
  589. addl %eax,%ecx
  590. movl 20(%esp),%eax
  591. adcl %edx,%ebp
  592. movl (%edi),%edx
  593. adcl $0,%ebx
  594. movl %ecx,4(%eax)
  595. movl 8(%esi),%eax
  596. # saved r[1]
  597. # ################## Calculate word 2
  598. xorl %ecx,%ecx
  599. # mul a[2]*b[0]
  600. mull %edx
  601. addl %eax,%ebp
  602. movl 4(%esi),%eax
  603. adcl %edx,%ebx
  604. movl 4(%edi),%edx
  605. adcl $0,%ecx
  606. # mul a[1]*b[1]
  607. mull %edx
  608. addl %eax,%ebp
  609. movl (%esi),%eax
  610. adcl %edx,%ebx
  611. movl 8(%edi),%edx
  612. adcl $0,%ecx
  613. # mul a[0]*b[2]
  614. mull %edx
  615. addl %eax,%ebp
  616. movl 20(%esp),%eax
  617. adcl %edx,%ebx
  618. movl (%edi),%edx
  619. adcl $0,%ecx
  620. movl %ebp,8(%eax)
  621. movl 12(%esi),%eax
  622. # saved r[2]
  623. # ################## Calculate word 3
  624. xorl %ebp,%ebp
  625. # mul a[3]*b[0]
  626. mull %edx
  627. addl %eax,%ebx
  628. movl 8(%esi),%eax
  629. adcl %edx,%ecx
  630. movl 4(%edi),%edx
  631. adcl $0,%ebp
  632. # mul a[2]*b[1]
  633. mull %edx
  634. addl %eax,%ebx
  635. movl 4(%esi),%eax
  636. adcl %edx,%ecx
  637. movl 8(%edi),%edx
  638. adcl $0,%ebp
  639. # mul a[1]*b[2]
  640. mull %edx
  641. addl %eax,%ebx
  642. movl (%esi),%eax
  643. adcl %edx,%ecx
  644. movl 12(%edi),%edx
  645. adcl $0,%ebp
  646. # mul a[0]*b[3]
  647. mull %edx
  648. addl %eax,%ebx
  649. movl 20(%esp),%eax
  650. adcl %edx,%ecx
  651. movl 4(%edi),%edx
  652. adcl $0,%ebp
  653. movl %ebx,12(%eax)
  654. movl 12(%esi),%eax
  655. # saved r[3]
  656. # ################## Calculate word 4
  657. xorl %ebx,%ebx
  658. # mul a[3]*b[1]
  659. mull %edx
  660. addl %eax,%ecx
  661. movl 8(%esi),%eax
  662. adcl %edx,%ebp
  663. movl 8(%edi),%edx
  664. adcl $0,%ebx
  665. # mul a[2]*b[2]
  666. mull %edx
  667. addl %eax,%ecx
  668. movl 4(%esi),%eax
  669. adcl %edx,%ebp
  670. movl 12(%edi),%edx
  671. adcl $0,%ebx
  672. # mul a[1]*b[3]
  673. mull %edx
  674. addl %eax,%ecx
  675. movl 20(%esp),%eax
  676. adcl %edx,%ebp
  677. movl 8(%edi),%edx
  678. adcl $0,%ebx
  679. movl %ecx,16(%eax)
  680. movl 12(%esi),%eax
  681. # saved r[4]
  682. # ################## Calculate word 5
  683. xorl %ecx,%ecx
  684. # mul a[3]*b[2]
  685. mull %edx
  686. addl %eax,%ebp
  687. movl 8(%esi),%eax
  688. adcl %edx,%ebx
  689. movl 12(%edi),%edx
  690. adcl $0,%ecx
  691. # mul a[2]*b[3]
  692. mull %edx
  693. addl %eax,%ebp
  694. movl 20(%esp),%eax
  695. adcl %edx,%ebx
  696. movl 12(%edi),%edx
  697. adcl $0,%ecx
  698. movl %ebp,20(%eax)
  699. movl 12(%esi),%eax
  700. # saved r[5]
  701. # ################## Calculate word 6
  702. xorl %ebp,%ebp
  703. # mul a[3]*b[3]
  704. mull %edx
  705. addl %eax,%ebx
  706. movl 20(%esp),%eax
  707. adcl %edx,%ecx
  708. adcl $0,%ebp
  709. movl %ebx,24(%eax)
  710. # saved r[6]
  711. # save r[7]
  712. movl %ecx,28(%eax)
  713. popl %ebx
  714. popl %ebp
  715. popl %edi
  716. popl %esi
  717. ret
  718. .globl _bn_sqr_comba8
  719. .private_extern _bn_sqr_comba8
  720. .align 4
  721. _bn_sqr_comba8:
  722. L_bn_sqr_comba8_begin:
  723. pushl %esi
  724. pushl %edi
  725. pushl %ebp
  726. pushl %ebx
  727. movl 20(%esp),%edi
  728. movl 24(%esp),%esi
  729. xorl %ebx,%ebx
  730. xorl %ecx,%ecx
  731. movl (%esi),%eax
  732. # ############### Calculate word 0
  733. xorl %ebp,%ebp
  734. # sqr a[0]*a[0]
  735. mull %eax
  736. addl %eax,%ebx
  737. adcl %edx,%ecx
  738. movl (%esi),%edx
  739. adcl $0,%ebp
  740. movl %ebx,(%edi)
  741. movl 4(%esi),%eax
  742. # saved r[0]
  743. # ############### Calculate word 1
  744. xorl %ebx,%ebx
  745. # sqr a[1]*a[0]
  746. mull %edx
  747. addl %eax,%eax
  748. adcl %edx,%edx
  749. adcl $0,%ebx
  750. addl %eax,%ecx
  751. adcl %edx,%ebp
  752. movl 8(%esi),%eax
  753. adcl $0,%ebx
  754. movl %ecx,4(%edi)
  755. movl (%esi),%edx
  756. # saved r[1]
  757. # ############### Calculate word 2
  758. xorl %ecx,%ecx
  759. # sqr a[2]*a[0]
  760. mull %edx
  761. addl %eax,%eax
  762. adcl %edx,%edx
  763. adcl $0,%ecx
  764. addl %eax,%ebp
  765. adcl %edx,%ebx
  766. movl 4(%esi),%eax
  767. adcl $0,%ecx
  768. # sqr a[1]*a[1]
  769. mull %eax
  770. addl %eax,%ebp
  771. adcl %edx,%ebx
  772. movl (%esi),%edx
  773. adcl $0,%ecx
  774. movl %ebp,8(%edi)
  775. movl 12(%esi),%eax
  776. # saved r[2]
  777. # ############### Calculate word 3
  778. xorl %ebp,%ebp
  779. # sqr a[3]*a[0]
  780. mull %edx
  781. addl %eax,%eax
  782. adcl %edx,%edx
  783. adcl $0,%ebp
  784. addl %eax,%ebx
  785. adcl %edx,%ecx
  786. movl 8(%esi),%eax
  787. adcl $0,%ebp
  788. movl 4(%esi),%edx
  789. # sqr a[2]*a[1]
  790. mull %edx
  791. addl %eax,%eax
  792. adcl %edx,%edx
  793. adcl $0,%ebp
  794. addl %eax,%ebx
  795. adcl %edx,%ecx
  796. movl 16(%esi),%eax
  797. adcl $0,%ebp
  798. movl %ebx,12(%edi)
  799. movl (%esi),%edx
  800. # saved r[3]
  801. # ############### Calculate word 4
  802. xorl %ebx,%ebx
  803. # sqr a[4]*a[0]
  804. mull %edx
  805. addl %eax,%eax
  806. adcl %edx,%edx
  807. adcl $0,%ebx
  808. addl %eax,%ecx
  809. adcl %edx,%ebp
  810. movl 12(%esi),%eax
  811. adcl $0,%ebx
  812. movl 4(%esi),%edx
  813. # sqr a[3]*a[1]
  814. mull %edx
  815. addl %eax,%eax
  816. adcl %edx,%edx
  817. adcl $0,%ebx
  818. addl %eax,%ecx
  819. adcl %edx,%ebp
  820. movl 8(%esi),%eax
  821. adcl $0,%ebx
  822. # sqr a[2]*a[2]
  823. mull %eax
  824. addl %eax,%ecx
  825. adcl %edx,%ebp
  826. movl (%esi),%edx
  827. adcl $0,%ebx
  828. movl %ecx,16(%edi)
  829. movl 20(%esi),%eax
  830. # saved r[4]
  831. # ############### Calculate word 5
  832. xorl %ecx,%ecx
  833. # sqr a[5]*a[0]
  834. mull %edx
  835. addl %eax,%eax
  836. adcl %edx,%edx
  837. adcl $0,%ecx
  838. addl %eax,%ebp
  839. adcl %edx,%ebx
  840. movl 16(%esi),%eax
  841. adcl $0,%ecx
  842. movl 4(%esi),%edx
  843. # sqr a[4]*a[1]
  844. mull %edx
  845. addl %eax,%eax
  846. adcl %edx,%edx
  847. adcl $0,%ecx
  848. addl %eax,%ebp
  849. adcl %edx,%ebx
  850. movl 12(%esi),%eax
  851. adcl $0,%ecx
  852. movl 8(%esi),%edx
  853. # sqr a[3]*a[2]
  854. mull %edx
  855. addl %eax,%eax
  856. adcl %edx,%edx
  857. adcl $0,%ecx
  858. addl %eax,%ebp
  859. adcl %edx,%ebx
  860. movl 24(%esi),%eax
  861. adcl $0,%ecx
  862. movl %ebp,20(%edi)
  863. movl (%esi),%edx
  864. # saved r[5]
  865. # ############### Calculate word 6
  866. xorl %ebp,%ebp
  867. # sqr a[6]*a[0]
  868. mull %edx
  869. addl %eax,%eax
  870. adcl %edx,%edx
  871. adcl $0,%ebp
  872. addl %eax,%ebx
  873. adcl %edx,%ecx
  874. movl 20(%esi),%eax
  875. adcl $0,%ebp
  876. movl 4(%esi),%edx
  877. # sqr a[5]*a[1]
  878. mull %edx
  879. addl %eax,%eax
  880. adcl %edx,%edx
  881. adcl $0,%ebp
  882. addl %eax,%ebx
  883. adcl %edx,%ecx
  884. movl 16(%esi),%eax
  885. adcl $0,%ebp
  886. movl 8(%esi),%edx
  887. # sqr a[4]*a[2]
  888. mull %edx
  889. addl %eax,%eax
  890. adcl %edx,%edx
  891. adcl $0,%ebp
  892. addl %eax,%ebx
  893. adcl %edx,%ecx
  894. movl 12(%esi),%eax
  895. adcl $0,%ebp
  896. # sqr a[3]*a[3]
  897. mull %eax
  898. addl %eax,%ebx
  899. adcl %edx,%ecx
  900. movl (%esi),%edx
  901. adcl $0,%ebp
  902. movl %ebx,24(%edi)
  903. movl 28(%esi),%eax
  904. # saved r[6]
  905. # ############### Calculate word 7
  906. xorl %ebx,%ebx
  907. # sqr a[7]*a[0]
  908. mull %edx
  909. addl %eax,%eax
  910. adcl %edx,%edx
  911. adcl $0,%ebx
  912. addl %eax,%ecx
  913. adcl %edx,%ebp
  914. movl 24(%esi),%eax
  915. adcl $0,%ebx
  916. movl 4(%esi),%edx
  917. # sqr a[6]*a[1]
  918. mull %edx
  919. addl %eax,%eax
  920. adcl %edx,%edx
  921. adcl $0,%ebx
  922. addl %eax,%ecx
  923. adcl %edx,%ebp
  924. movl 20(%esi),%eax
  925. adcl $0,%ebx
  926. movl 8(%esi),%edx
  927. # sqr a[5]*a[2]
  928. mull %edx
  929. addl %eax,%eax
  930. adcl %edx,%edx
  931. adcl $0,%ebx
  932. addl %eax,%ecx
  933. adcl %edx,%ebp
  934. movl 16(%esi),%eax
  935. adcl $0,%ebx
  936. movl 12(%esi),%edx
  937. # sqr a[4]*a[3]
  938. mull %edx
  939. addl %eax,%eax
  940. adcl %edx,%edx
  941. adcl $0,%ebx
  942. addl %eax,%ecx
  943. adcl %edx,%ebp
  944. movl 28(%esi),%eax
  945. adcl $0,%ebx
  946. movl %ecx,28(%edi)
  947. movl 4(%esi),%edx
  948. # saved r[7]
  949. # ############### Calculate word 8
  950. xorl %ecx,%ecx
  951. # sqr a[7]*a[1]
  952. mull %edx
  953. addl %eax,%eax
  954. adcl %edx,%edx
  955. adcl $0,%ecx
  956. addl %eax,%ebp
  957. adcl %edx,%ebx
  958. movl 24(%esi),%eax
  959. adcl $0,%ecx
  960. movl 8(%esi),%edx
  961. # sqr a[6]*a[2]
  962. mull %edx
  963. addl %eax,%eax
  964. adcl %edx,%edx
  965. adcl $0,%ecx
  966. addl %eax,%ebp
  967. adcl %edx,%ebx
  968. movl 20(%esi),%eax
  969. adcl $0,%ecx
  970. movl 12(%esi),%edx
  971. # sqr a[5]*a[3]
  972. mull %edx
  973. addl %eax,%eax
  974. adcl %edx,%edx
  975. adcl $0,%ecx
  976. addl %eax,%ebp
  977. adcl %edx,%ebx
  978. movl 16(%esi),%eax
  979. adcl $0,%ecx
  980. # sqr a[4]*a[4]
  981. mull %eax
  982. addl %eax,%ebp
  983. adcl %edx,%ebx
  984. movl 8(%esi),%edx
  985. adcl $0,%ecx
  986. movl %ebp,32(%edi)
  987. movl 28(%esi),%eax
  988. # saved r[8]
  989. # ############### Calculate word 9
  990. xorl %ebp,%ebp
  991. # sqr a[7]*a[2]
  992. mull %edx
  993. addl %eax,%eax
  994. adcl %edx,%edx
  995. adcl $0,%ebp
  996. addl %eax,%ebx
  997. adcl %edx,%ecx
  998. movl 24(%esi),%eax
  999. adcl $0,%ebp
  1000. movl 12(%esi),%edx
  1001. # sqr a[6]*a[3]
  1002. mull %edx
  1003. addl %eax,%eax
  1004. adcl %edx,%edx
  1005. adcl $0,%ebp
  1006. addl %eax,%ebx
  1007. adcl %edx,%ecx
  1008. movl 20(%esi),%eax
  1009. adcl $0,%ebp
  1010. movl 16(%esi),%edx
  1011. # sqr a[5]*a[4]
  1012. mull %edx
  1013. addl %eax,%eax
  1014. adcl %edx,%edx
  1015. adcl $0,%ebp
  1016. addl %eax,%ebx
  1017. adcl %edx,%ecx
  1018. movl 28(%esi),%eax
  1019. adcl $0,%ebp
  1020. movl %ebx,36(%edi)
  1021. movl 12(%esi),%edx
  1022. # saved r[9]
  1023. # ############### Calculate word 10
  1024. xorl %ebx,%ebx
  1025. # sqr a[7]*a[3]
  1026. mull %edx
  1027. addl %eax,%eax
  1028. adcl %edx,%edx
  1029. adcl $0,%ebx
  1030. addl %eax,%ecx
  1031. adcl %edx,%ebp
  1032. movl 24(%esi),%eax
  1033. adcl $0,%ebx
  1034. movl 16(%esi),%edx
  1035. # sqr a[6]*a[4]
  1036. mull %edx
  1037. addl %eax,%eax
  1038. adcl %edx,%edx
  1039. adcl $0,%ebx
  1040. addl %eax,%ecx
  1041. adcl %edx,%ebp
  1042. movl 20(%esi),%eax
  1043. adcl $0,%ebx
  1044. # sqr a[5]*a[5]
  1045. mull %eax
  1046. addl %eax,%ecx
  1047. adcl %edx,%ebp
  1048. movl 16(%esi),%edx
  1049. adcl $0,%ebx
  1050. movl %ecx,40(%edi)
  1051. movl 28(%esi),%eax
  1052. # saved r[10]
  1053. # ############### Calculate word 11
  1054. xorl %ecx,%ecx
  1055. # sqr a[7]*a[4]
  1056. mull %edx
  1057. addl %eax,%eax
  1058. adcl %edx,%edx
  1059. adcl $0,%ecx
  1060. addl %eax,%ebp
  1061. adcl %edx,%ebx
  1062. movl 24(%esi),%eax
  1063. adcl $0,%ecx
  1064. movl 20(%esi),%edx
  1065. # sqr a[6]*a[5]
  1066. mull %edx
  1067. addl %eax,%eax
  1068. adcl %edx,%edx
  1069. adcl $0,%ecx
  1070. addl %eax,%ebp
  1071. adcl %edx,%ebx
  1072. movl 28(%esi),%eax
  1073. adcl $0,%ecx
  1074. movl %ebp,44(%edi)
  1075. movl 20(%esi),%edx
  1076. # saved r[11]
  1077. # ############### Calculate word 12
  1078. xorl %ebp,%ebp
  1079. # sqr a[7]*a[5]
  1080. mull %edx
  1081. addl %eax,%eax
  1082. adcl %edx,%edx
  1083. adcl $0,%ebp
  1084. addl %eax,%ebx
  1085. adcl %edx,%ecx
  1086. movl 24(%esi),%eax
  1087. adcl $0,%ebp
  1088. # sqr a[6]*a[6]
  1089. mull %eax
  1090. addl %eax,%ebx
  1091. adcl %edx,%ecx
  1092. movl 24(%esi),%edx
  1093. adcl $0,%ebp
  1094. movl %ebx,48(%edi)
  1095. movl 28(%esi),%eax
  1096. # saved r[12]
  1097. # ############### Calculate word 13
  1098. xorl %ebx,%ebx
  1099. # sqr a[7]*a[6]
  1100. mull %edx
  1101. addl %eax,%eax
  1102. adcl %edx,%edx
  1103. adcl $0,%ebx
  1104. addl %eax,%ecx
  1105. adcl %edx,%ebp
  1106. movl 28(%esi),%eax
  1107. adcl $0,%ebx
  1108. movl %ecx,52(%edi)
  1109. # saved r[13]
  1110. # ############### Calculate word 14
  1111. xorl %ecx,%ecx
  1112. # sqr a[7]*a[7]
  1113. mull %eax
  1114. addl %eax,%ebp
  1115. adcl %edx,%ebx
  1116. adcl $0,%ecx
  1117. movl %ebp,56(%edi)
  1118. # saved r[14]
  1119. movl %ebx,60(%edi)
  1120. popl %ebx
  1121. popl %ebp
  1122. popl %edi
  1123. popl %esi
  1124. ret
  1125. .globl _bn_sqr_comba4
  1126. .private_extern _bn_sqr_comba4
  1127. .align 4
  1128. _bn_sqr_comba4:
  1129. L_bn_sqr_comba4_begin:
  1130. pushl %esi
  1131. pushl %edi
  1132. pushl %ebp
  1133. pushl %ebx
  1134. movl 20(%esp),%edi
  1135. movl 24(%esp),%esi
  1136. xorl %ebx,%ebx
  1137. xorl %ecx,%ecx
  1138. movl (%esi),%eax
  1139. # ############### Calculate word 0
  1140. xorl %ebp,%ebp
  1141. # sqr a[0]*a[0]
  1142. mull %eax
  1143. addl %eax,%ebx
  1144. adcl %edx,%ecx
  1145. movl (%esi),%edx
  1146. adcl $0,%ebp
  1147. movl %ebx,(%edi)
  1148. movl 4(%esi),%eax
  1149. # saved r[0]
  1150. # ############### Calculate word 1
  1151. xorl %ebx,%ebx
  1152. # sqr a[1]*a[0]
  1153. mull %edx
  1154. addl %eax,%eax
  1155. adcl %edx,%edx
  1156. adcl $0,%ebx
  1157. addl %eax,%ecx
  1158. adcl %edx,%ebp
  1159. movl 8(%esi),%eax
  1160. adcl $0,%ebx
  1161. movl %ecx,4(%edi)
  1162. movl (%esi),%edx
  1163. # saved r[1]
  1164. # ############### Calculate word 2
  1165. xorl %ecx,%ecx
  1166. # sqr a[2]*a[0]
  1167. mull %edx
  1168. addl %eax,%eax
  1169. adcl %edx,%edx
  1170. adcl $0,%ecx
  1171. addl %eax,%ebp
  1172. adcl %edx,%ebx
  1173. movl 4(%esi),%eax
  1174. adcl $0,%ecx
  1175. # sqr a[1]*a[1]
  1176. mull %eax
  1177. addl %eax,%ebp
  1178. adcl %edx,%ebx
  1179. movl (%esi),%edx
  1180. adcl $0,%ecx
  1181. movl %ebp,8(%edi)
  1182. movl 12(%esi),%eax
  1183. # saved r[2]
  1184. # ############### Calculate word 3
  1185. xorl %ebp,%ebp
  1186. # sqr a[3]*a[0]
  1187. mull %edx
  1188. addl %eax,%eax
  1189. adcl %edx,%edx
  1190. adcl $0,%ebp
  1191. addl %eax,%ebx
  1192. adcl %edx,%ecx
  1193. movl 8(%esi),%eax
  1194. adcl $0,%ebp
  1195. movl 4(%esi),%edx
  1196. # sqr a[2]*a[1]
  1197. mull %edx
  1198. addl %eax,%eax
  1199. adcl %edx,%edx
  1200. adcl $0,%ebp
  1201. addl %eax,%ebx
  1202. adcl %edx,%ecx
  1203. movl 12(%esi),%eax
  1204. adcl $0,%ebp
  1205. movl %ebx,12(%edi)
  1206. movl 4(%esi),%edx
  1207. # saved r[3]
  1208. # ############### Calculate word 4
  1209. xorl %ebx,%ebx
  1210. # sqr a[3]*a[1]
  1211. mull %edx
  1212. addl %eax,%eax
  1213. adcl %edx,%edx
  1214. adcl $0,%ebx
  1215. addl %eax,%ecx
  1216. adcl %edx,%ebp
  1217. movl 8(%esi),%eax
  1218. adcl $0,%ebx
  1219. # sqr a[2]*a[2]
  1220. mull %eax
  1221. addl %eax,%ecx
  1222. adcl %edx,%ebp
  1223. movl 8(%esi),%edx
  1224. adcl $0,%ebx
  1225. movl %ecx,16(%edi)
  1226. movl 12(%esi),%eax
  1227. # saved r[4]
  1228. # ############### Calculate word 5
  1229. xorl %ecx,%ecx
  1230. # sqr a[3]*a[2]
  1231. mull %edx
  1232. addl %eax,%eax
  1233. adcl %edx,%edx
  1234. adcl $0,%ecx
  1235. addl %eax,%ebp
  1236. adcl %edx,%ebx
  1237. movl 12(%esi),%eax
  1238. adcl $0,%ecx
  1239. movl %ebp,20(%edi)
  1240. # saved r[5]
  1241. # ############### Calculate word 6
  1242. xorl %ebp,%ebp
  1243. # sqr a[3]*a[3]
  1244. mull %eax
  1245. addl %eax,%ebx
  1246. adcl %edx,%ecx
  1247. adcl $0,%ebp
  1248. movl %ebx,24(%edi)
  1249. # saved r[6]
  1250. movl %ecx,28(%edi)
  1251. popl %ebx
  1252. popl %ebp
  1253. popl %edi
  1254. popl %esi
  1255. ret
  1256. #endif