bn-586.S 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988
  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_add_words
  9. .private_extern _bn_mul_add_words
  10. .align 4
  11. _bn_mul_add_words:
  12. L_bn_mul_add_words_begin:
  13. call L000PIC_me_up
  14. L000PIC_me_up:
  15. popl %eax
  16. movl L_OPENSSL_ia32cap_P$non_lazy_ptr-L000PIC_me_up(%eax),%eax
  17. btl $26,(%eax)
  18. jnc L001maw_non_sse2
  19. movl 4(%esp),%eax
  20. movl 8(%esp),%edx
  21. movl 12(%esp),%ecx
  22. movd 16(%esp),%mm0
  23. pxor %mm1,%mm1
  24. jmp L002maw_sse2_entry
  25. .align 4,0x90
  26. L003maw_sse2_unrolled:
  27. movd (%eax),%mm3
  28. paddq %mm3,%mm1
  29. movd (%edx),%mm2
  30. pmuludq %mm0,%mm2
  31. movd 4(%edx),%mm4
  32. pmuludq %mm0,%mm4
  33. movd 8(%edx),%mm6
  34. pmuludq %mm0,%mm6
  35. movd 12(%edx),%mm7
  36. pmuludq %mm0,%mm7
  37. paddq %mm2,%mm1
  38. movd 4(%eax),%mm3
  39. paddq %mm4,%mm3
  40. movd 8(%eax),%mm5
  41. paddq %mm6,%mm5
  42. movd 12(%eax),%mm4
  43. paddq %mm4,%mm7
  44. movd %mm1,(%eax)
  45. movd 16(%edx),%mm2
  46. pmuludq %mm0,%mm2
  47. psrlq $32,%mm1
  48. movd 20(%edx),%mm4
  49. pmuludq %mm0,%mm4
  50. paddq %mm3,%mm1
  51. movd 24(%edx),%mm6
  52. pmuludq %mm0,%mm6
  53. movd %mm1,4(%eax)
  54. psrlq $32,%mm1
  55. movd 28(%edx),%mm3
  56. addl $32,%edx
  57. pmuludq %mm0,%mm3
  58. paddq %mm5,%mm1
  59. movd 16(%eax),%mm5
  60. paddq %mm5,%mm2
  61. movd %mm1,8(%eax)
  62. psrlq $32,%mm1
  63. paddq %mm7,%mm1
  64. movd 20(%eax),%mm5
  65. paddq %mm5,%mm4
  66. movd %mm1,12(%eax)
  67. psrlq $32,%mm1
  68. paddq %mm2,%mm1
  69. movd 24(%eax),%mm5
  70. paddq %mm5,%mm6
  71. movd %mm1,16(%eax)
  72. psrlq $32,%mm1
  73. paddq %mm4,%mm1
  74. movd 28(%eax),%mm5
  75. paddq %mm5,%mm3
  76. movd %mm1,20(%eax)
  77. psrlq $32,%mm1
  78. paddq %mm6,%mm1
  79. movd %mm1,24(%eax)
  80. psrlq $32,%mm1
  81. paddq %mm3,%mm1
  82. movd %mm1,28(%eax)
  83. leal 32(%eax),%eax
  84. psrlq $32,%mm1
  85. subl $8,%ecx
  86. jz L004maw_sse2_exit
  87. L002maw_sse2_entry:
  88. testl $4294967288,%ecx
  89. jnz L003maw_sse2_unrolled
  90. .align 2,0x90
  91. L005maw_sse2_loop:
  92. movd (%edx),%mm2
  93. movd (%eax),%mm3
  94. pmuludq %mm0,%mm2
  95. leal 4(%edx),%edx
  96. paddq %mm3,%mm1
  97. paddq %mm2,%mm1
  98. movd %mm1,(%eax)
  99. subl $1,%ecx
  100. psrlq $32,%mm1
  101. leal 4(%eax),%eax
  102. jnz L005maw_sse2_loop
  103. L004maw_sse2_exit:
  104. movd %mm1,%eax
  105. emms
  106. ret
  107. .align 4,0x90
  108. L001maw_non_sse2:
  109. pushl %ebp
  110. pushl %ebx
  111. pushl %esi
  112. pushl %edi
  113. xorl %esi,%esi
  114. movl 20(%esp),%edi
  115. movl 28(%esp),%ecx
  116. movl 24(%esp),%ebx
  117. andl $4294967288,%ecx
  118. movl 32(%esp),%ebp
  119. pushl %ecx
  120. jz L006maw_finish
  121. .align 4,0x90
  122. L007maw_loop:
  123. # Round 0
  124. movl (%ebx),%eax
  125. mull %ebp
  126. addl %esi,%eax
  127. adcl $0,%edx
  128. addl (%edi),%eax
  129. adcl $0,%edx
  130. movl %eax,(%edi)
  131. movl %edx,%esi
  132. # Round 4
  133. movl 4(%ebx),%eax
  134. mull %ebp
  135. addl %esi,%eax
  136. adcl $0,%edx
  137. addl 4(%edi),%eax
  138. adcl $0,%edx
  139. movl %eax,4(%edi)
  140. movl %edx,%esi
  141. # Round 8
  142. movl 8(%ebx),%eax
  143. mull %ebp
  144. addl %esi,%eax
  145. adcl $0,%edx
  146. addl 8(%edi),%eax
  147. adcl $0,%edx
  148. movl %eax,8(%edi)
  149. movl %edx,%esi
  150. # Round 12
  151. movl 12(%ebx),%eax
  152. mull %ebp
  153. addl %esi,%eax
  154. adcl $0,%edx
  155. addl 12(%edi),%eax
  156. adcl $0,%edx
  157. movl %eax,12(%edi)
  158. movl %edx,%esi
  159. # Round 16
  160. movl 16(%ebx),%eax
  161. mull %ebp
  162. addl %esi,%eax
  163. adcl $0,%edx
  164. addl 16(%edi),%eax
  165. adcl $0,%edx
  166. movl %eax,16(%edi)
  167. movl %edx,%esi
  168. # Round 20
  169. movl 20(%ebx),%eax
  170. mull %ebp
  171. addl %esi,%eax
  172. adcl $0,%edx
  173. addl 20(%edi),%eax
  174. adcl $0,%edx
  175. movl %eax,20(%edi)
  176. movl %edx,%esi
  177. # Round 24
  178. movl 24(%ebx),%eax
  179. mull %ebp
  180. addl %esi,%eax
  181. adcl $0,%edx
  182. addl 24(%edi),%eax
  183. adcl $0,%edx
  184. movl %eax,24(%edi)
  185. movl %edx,%esi
  186. # Round 28
  187. movl 28(%ebx),%eax
  188. mull %ebp
  189. addl %esi,%eax
  190. adcl $0,%edx
  191. addl 28(%edi),%eax
  192. adcl $0,%edx
  193. movl %eax,28(%edi)
  194. movl %edx,%esi
  195. subl $8,%ecx
  196. leal 32(%ebx),%ebx
  197. leal 32(%edi),%edi
  198. jnz L007maw_loop
  199. L006maw_finish:
  200. movl 32(%esp),%ecx
  201. andl $7,%ecx
  202. jnz L008maw_finish2
  203. jmp L009maw_end
  204. L008maw_finish2:
  205. # Tail Round 0
  206. movl (%ebx),%eax
  207. mull %ebp
  208. addl %esi,%eax
  209. adcl $0,%edx
  210. addl (%edi),%eax
  211. adcl $0,%edx
  212. decl %ecx
  213. movl %eax,(%edi)
  214. movl %edx,%esi
  215. jz L009maw_end
  216. # Tail Round 1
  217. movl 4(%ebx),%eax
  218. mull %ebp
  219. addl %esi,%eax
  220. adcl $0,%edx
  221. addl 4(%edi),%eax
  222. adcl $0,%edx
  223. decl %ecx
  224. movl %eax,4(%edi)
  225. movl %edx,%esi
  226. jz L009maw_end
  227. # Tail Round 2
  228. movl 8(%ebx),%eax
  229. mull %ebp
  230. addl %esi,%eax
  231. adcl $0,%edx
  232. addl 8(%edi),%eax
  233. adcl $0,%edx
  234. decl %ecx
  235. movl %eax,8(%edi)
  236. movl %edx,%esi
  237. jz L009maw_end
  238. # Tail Round 3
  239. movl 12(%ebx),%eax
  240. mull %ebp
  241. addl %esi,%eax
  242. adcl $0,%edx
  243. addl 12(%edi),%eax
  244. adcl $0,%edx
  245. decl %ecx
  246. movl %eax,12(%edi)
  247. movl %edx,%esi
  248. jz L009maw_end
  249. # Tail Round 4
  250. movl 16(%ebx),%eax
  251. mull %ebp
  252. addl %esi,%eax
  253. adcl $0,%edx
  254. addl 16(%edi),%eax
  255. adcl $0,%edx
  256. decl %ecx
  257. movl %eax,16(%edi)
  258. movl %edx,%esi
  259. jz L009maw_end
  260. # Tail Round 5
  261. movl 20(%ebx),%eax
  262. mull %ebp
  263. addl %esi,%eax
  264. adcl $0,%edx
  265. addl 20(%edi),%eax
  266. adcl $0,%edx
  267. decl %ecx
  268. movl %eax,20(%edi)
  269. movl %edx,%esi
  270. jz L009maw_end
  271. # Tail Round 6
  272. movl 24(%ebx),%eax
  273. mull %ebp
  274. addl %esi,%eax
  275. adcl $0,%edx
  276. addl 24(%edi),%eax
  277. adcl $0,%edx
  278. movl %eax,24(%edi)
  279. movl %edx,%esi
  280. L009maw_end:
  281. movl %esi,%eax
  282. popl %ecx
  283. popl %edi
  284. popl %esi
  285. popl %ebx
  286. popl %ebp
  287. ret
  288. .globl _bn_mul_words
  289. .private_extern _bn_mul_words
  290. .align 4
  291. _bn_mul_words:
  292. L_bn_mul_words_begin:
  293. call L010PIC_me_up
  294. L010PIC_me_up:
  295. popl %eax
  296. movl L_OPENSSL_ia32cap_P$non_lazy_ptr-L010PIC_me_up(%eax),%eax
  297. btl $26,(%eax)
  298. jnc L011mw_non_sse2
  299. movl 4(%esp),%eax
  300. movl 8(%esp),%edx
  301. movl 12(%esp),%ecx
  302. movd 16(%esp),%mm0
  303. pxor %mm1,%mm1
  304. .align 4,0x90
  305. L012mw_sse2_loop:
  306. movd (%edx),%mm2
  307. pmuludq %mm0,%mm2
  308. leal 4(%edx),%edx
  309. paddq %mm2,%mm1
  310. movd %mm1,(%eax)
  311. subl $1,%ecx
  312. psrlq $32,%mm1
  313. leal 4(%eax),%eax
  314. jnz L012mw_sse2_loop
  315. movd %mm1,%eax
  316. emms
  317. ret
  318. .align 4,0x90
  319. L011mw_non_sse2:
  320. pushl %ebp
  321. pushl %ebx
  322. pushl %esi
  323. pushl %edi
  324. xorl %esi,%esi
  325. movl 20(%esp),%edi
  326. movl 24(%esp),%ebx
  327. movl 28(%esp),%ebp
  328. movl 32(%esp),%ecx
  329. andl $4294967288,%ebp
  330. jz L013mw_finish
  331. L014mw_loop:
  332. # Round 0
  333. movl (%ebx),%eax
  334. mull %ecx
  335. addl %esi,%eax
  336. adcl $0,%edx
  337. movl %eax,(%edi)
  338. movl %edx,%esi
  339. # Round 4
  340. movl 4(%ebx),%eax
  341. mull %ecx
  342. addl %esi,%eax
  343. adcl $0,%edx
  344. movl %eax,4(%edi)
  345. movl %edx,%esi
  346. # Round 8
  347. movl 8(%ebx),%eax
  348. mull %ecx
  349. addl %esi,%eax
  350. adcl $0,%edx
  351. movl %eax,8(%edi)
  352. movl %edx,%esi
  353. # Round 12
  354. movl 12(%ebx),%eax
  355. mull %ecx
  356. addl %esi,%eax
  357. adcl $0,%edx
  358. movl %eax,12(%edi)
  359. movl %edx,%esi
  360. # Round 16
  361. movl 16(%ebx),%eax
  362. mull %ecx
  363. addl %esi,%eax
  364. adcl $0,%edx
  365. movl %eax,16(%edi)
  366. movl %edx,%esi
  367. # Round 20
  368. movl 20(%ebx),%eax
  369. mull %ecx
  370. addl %esi,%eax
  371. adcl $0,%edx
  372. movl %eax,20(%edi)
  373. movl %edx,%esi
  374. # Round 24
  375. movl 24(%ebx),%eax
  376. mull %ecx
  377. addl %esi,%eax
  378. adcl $0,%edx
  379. movl %eax,24(%edi)
  380. movl %edx,%esi
  381. # Round 28
  382. movl 28(%ebx),%eax
  383. mull %ecx
  384. addl %esi,%eax
  385. adcl $0,%edx
  386. movl %eax,28(%edi)
  387. movl %edx,%esi
  388. addl $32,%ebx
  389. addl $32,%edi
  390. subl $8,%ebp
  391. jz L013mw_finish
  392. jmp L014mw_loop
  393. L013mw_finish:
  394. movl 28(%esp),%ebp
  395. andl $7,%ebp
  396. jnz L015mw_finish2
  397. jmp L016mw_end
  398. L015mw_finish2:
  399. # Tail Round 0
  400. movl (%ebx),%eax
  401. mull %ecx
  402. addl %esi,%eax
  403. adcl $0,%edx
  404. movl %eax,(%edi)
  405. movl %edx,%esi
  406. decl %ebp
  407. jz L016mw_end
  408. # Tail Round 1
  409. movl 4(%ebx),%eax
  410. mull %ecx
  411. addl %esi,%eax
  412. adcl $0,%edx
  413. movl %eax,4(%edi)
  414. movl %edx,%esi
  415. decl %ebp
  416. jz L016mw_end
  417. # Tail Round 2
  418. movl 8(%ebx),%eax
  419. mull %ecx
  420. addl %esi,%eax
  421. adcl $0,%edx
  422. movl %eax,8(%edi)
  423. movl %edx,%esi
  424. decl %ebp
  425. jz L016mw_end
  426. # Tail Round 3
  427. movl 12(%ebx),%eax
  428. mull %ecx
  429. addl %esi,%eax
  430. adcl $0,%edx
  431. movl %eax,12(%edi)
  432. movl %edx,%esi
  433. decl %ebp
  434. jz L016mw_end
  435. # Tail Round 4
  436. movl 16(%ebx),%eax
  437. mull %ecx
  438. addl %esi,%eax
  439. adcl $0,%edx
  440. movl %eax,16(%edi)
  441. movl %edx,%esi
  442. decl %ebp
  443. jz L016mw_end
  444. # Tail Round 5
  445. movl 20(%ebx),%eax
  446. mull %ecx
  447. addl %esi,%eax
  448. adcl $0,%edx
  449. movl %eax,20(%edi)
  450. movl %edx,%esi
  451. decl %ebp
  452. jz L016mw_end
  453. # Tail Round 6
  454. movl 24(%ebx),%eax
  455. mull %ecx
  456. addl %esi,%eax
  457. adcl $0,%edx
  458. movl %eax,24(%edi)
  459. movl %edx,%esi
  460. L016mw_end:
  461. movl %esi,%eax
  462. popl %edi
  463. popl %esi
  464. popl %ebx
  465. popl %ebp
  466. ret
  467. .globl _bn_sqr_words
  468. .private_extern _bn_sqr_words
  469. .align 4
  470. _bn_sqr_words:
  471. L_bn_sqr_words_begin:
  472. call L017PIC_me_up
  473. L017PIC_me_up:
  474. popl %eax
  475. movl L_OPENSSL_ia32cap_P$non_lazy_ptr-L017PIC_me_up(%eax),%eax
  476. btl $26,(%eax)
  477. jnc L018sqr_non_sse2
  478. movl 4(%esp),%eax
  479. movl 8(%esp),%edx
  480. movl 12(%esp),%ecx
  481. .align 4,0x90
  482. L019sqr_sse2_loop:
  483. movd (%edx),%mm0
  484. pmuludq %mm0,%mm0
  485. leal 4(%edx),%edx
  486. movq %mm0,(%eax)
  487. subl $1,%ecx
  488. leal 8(%eax),%eax
  489. jnz L019sqr_sse2_loop
  490. emms
  491. ret
  492. .align 4,0x90
  493. L018sqr_non_sse2:
  494. pushl %ebp
  495. pushl %ebx
  496. pushl %esi
  497. pushl %edi
  498. movl 20(%esp),%esi
  499. movl 24(%esp),%edi
  500. movl 28(%esp),%ebx
  501. andl $4294967288,%ebx
  502. jz L020sw_finish
  503. L021sw_loop:
  504. # Round 0
  505. movl (%edi),%eax
  506. mull %eax
  507. movl %eax,(%esi)
  508. movl %edx,4(%esi)
  509. # Round 4
  510. movl 4(%edi),%eax
  511. mull %eax
  512. movl %eax,8(%esi)
  513. movl %edx,12(%esi)
  514. # Round 8
  515. movl 8(%edi),%eax
  516. mull %eax
  517. movl %eax,16(%esi)
  518. movl %edx,20(%esi)
  519. # Round 12
  520. movl 12(%edi),%eax
  521. mull %eax
  522. movl %eax,24(%esi)
  523. movl %edx,28(%esi)
  524. # Round 16
  525. movl 16(%edi),%eax
  526. mull %eax
  527. movl %eax,32(%esi)
  528. movl %edx,36(%esi)
  529. # Round 20
  530. movl 20(%edi),%eax
  531. mull %eax
  532. movl %eax,40(%esi)
  533. movl %edx,44(%esi)
  534. # Round 24
  535. movl 24(%edi),%eax
  536. mull %eax
  537. movl %eax,48(%esi)
  538. movl %edx,52(%esi)
  539. # Round 28
  540. movl 28(%edi),%eax
  541. mull %eax
  542. movl %eax,56(%esi)
  543. movl %edx,60(%esi)
  544. addl $32,%edi
  545. addl $64,%esi
  546. subl $8,%ebx
  547. jnz L021sw_loop
  548. L020sw_finish:
  549. movl 28(%esp),%ebx
  550. andl $7,%ebx
  551. jz L022sw_end
  552. # Tail Round 0
  553. movl (%edi),%eax
  554. mull %eax
  555. movl %eax,(%esi)
  556. decl %ebx
  557. movl %edx,4(%esi)
  558. jz L022sw_end
  559. # Tail Round 1
  560. movl 4(%edi),%eax
  561. mull %eax
  562. movl %eax,8(%esi)
  563. decl %ebx
  564. movl %edx,12(%esi)
  565. jz L022sw_end
  566. # Tail Round 2
  567. movl 8(%edi),%eax
  568. mull %eax
  569. movl %eax,16(%esi)
  570. decl %ebx
  571. movl %edx,20(%esi)
  572. jz L022sw_end
  573. # Tail Round 3
  574. movl 12(%edi),%eax
  575. mull %eax
  576. movl %eax,24(%esi)
  577. decl %ebx
  578. movl %edx,28(%esi)
  579. jz L022sw_end
  580. # Tail Round 4
  581. movl 16(%edi),%eax
  582. mull %eax
  583. movl %eax,32(%esi)
  584. decl %ebx
  585. movl %edx,36(%esi)
  586. jz L022sw_end
  587. # Tail Round 5
  588. movl 20(%edi),%eax
  589. mull %eax
  590. movl %eax,40(%esi)
  591. decl %ebx
  592. movl %edx,44(%esi)
  593. jz L022sw_end
  594. # Tail Round 6
  595. movl 24(%edi),%eax
  596. mull %eax
  597. movl %eax,48(%esi)
  598. movl %edx,52(%esi)
  599. L022sw_end:
  600. popl %edi
  601. popl %esi
  602. popl %ebx
  603. popl %ebp
  604. ret
  605. .globl _bn_div_words
  606. .private_extern _bn_div_words
  607. .align 4
  608. _bn_div_words:
  609. L_bn_div_words_begin:
  610. movl 4(%esp),%edx
  611. movl 8(%esp),%eax
  612. movl 12(%esp),%ecx
  613. divl %ecx
  614. ret
  615. .globl _bn_add_words
  616. .private_extern _bn_add_words
  617. .align 4
  618. _bn_add_words:
  619. L_bn_add_words_begin:
  620. pushl %ebp
  621. pushl %ebx
  622. pushl %esi
  623. pushl %edi
  624. movl 20(%esp),%ebx
  625. movl 24(%esp),%esi
  626. movl 28(%esp),%edi
  627. movl 32(%esp),%ebp
  628. xorl %eax,%eax
  629. andl $4294967288,%ebp
  630. jz L023aw_finish
  631. L024aw_loop:
  632. # Round 0
  633. movl (%esi),%ecx
  634. movl (%edi),%edx
  635. addl %eax,%ecx
  636. movl $0,%eax
  637. adcl %eax,%eax
  638. addl %edx,%ecx
  639. adcl $0,%eax
  640. movl %ecx,(%ebx)
  641. # Round 1
  642. movl 4(%esi),%ecx
  643. movl 4(%edi),%edx
  644. addl %eax,%ecx
  645. movl $0,%eax
  646. adcl %eax,%eax
  647. addl %edx,%ecx
  648. adcl $0,%eax
  649. movl %ecx,4(%ebx)
  650. # Round 2
  651. movl 8(%esi),%ecx
  652. movl 8(%edi),%edx
  653. addl %eax,%ecx
  654. movl $0,%eax
  655. adcl %eax,%eax
  656. addl %edx,%ecx
  657. adcl $0,%eax
  658. movl %ecx,8(%ebx)
  659. # Round 3
  660. movl 12(%esi),%ecx
  661. movl 12(%edi),%edx
  662. addl %eax,%ecx
  663. movl $0,%eax
  664. adcl %eax,%eax
  665. addl %edx,%ecx
  666. adcl $0,%eax
  667. movl %ecx,12(%ebx)
  668. # Round 4
  669. movl 16(%esi),%ecx
  670. movl 16(%edi),%edx
  671. addl %eax,%ecx
  672. movl $0,%eax
  673. adcl %eax,%eax
  674. addl %edx,%ecx
  675. adcl $0,%eax
  676. movl %ecx,16(%ebx)
  677. # Round 5
  678. movl 20(%esi),%ecx
  679. movl 20(%edi),%edx
  680. addl %eax,%ecx
  681. movl $0,%eax
  682. adcl %eax,%eax
  683. addl %edx,%ecx
  684. adcl $0,%eax
  685. movl %ecx,20(%ebx)
  686. # Round 6
  687. movl 24(%esi),%ecx
  688. movl 24(%edi),%edx
  689. addl %eax,%ecx
  690. movl $0,%eax
  691. adcl %eax,%eax
  692. addl %edx,%ecx
  693. adcl $0,%eax
  694. movl %ecx,24(%ebx)
  695. # Round 7
  696. movl 28(%esi),%ecx
  697. movl 28(%edi),%edx
  698. addl %eax,%ecx
  699. movl $0,%eax
  700. adcl %eax,%eax
  701. addl %edx,%ecx
  702. adcl $0,%eax
  703. movl %ecx,28(%ebx)
  704. addl $32,%esi
  705. addl $32,%edi
  706. addl $32,%ebx
  707. subl $8,%ebp
  708. jnz L024aw_loop
  709. L023aw_finish:
  710. movl 32(%esp),%ebp
  711. andl $7,%ebp
  712. jz L025aw_end
  713. # Tail Round 0
  714. movl (%esi),%ecx
  715. movl (%edi),%edx
  716. addl %eax,%ecx
  717. movl $0,%eax
  718. adcl %eax,%eax
  719. addl %edx,%ecx
  720. adcl $0,%eax
  721. decl %ebp
  722. movl %ecx,(%ebx)
  723. jz L025aw_end
  724. # Tail Round 1
  725. movl 4(%esi),%ecx
  726. movl 4(%edi),%edx
  727. addl %eax,%ecx
  728. movl $0,%eax
  729. adcl %eax,%eax
  730. addl %edx,%ecx
  731. adcl $0,%eax
  732. decl %ebp
  733. movl %ecx,4(%ebx)
  734. jz L025aw_end
  735. # Tail Round 2
  736. movl 8(%esi),%ecx
  737. movl 8(%edi),%edx
  738. addl %eax,%ecx
  739. movl $0,%eax
  740. adcl %eax,%eax
  741. addl %edx,%ecx
  742. adcl $0,%eax
  743. decl %ebp
  744. movl %ecx,8(%ebx)
  745. jz L025aw_end
  746. # Tail Round 3
  747. movl 12(%esi),%ecx
  748. movl 12(%edi),%edx
  749. addl %eax,%ecx
  750. movl $0,%eax
  751. adcl %eax,%eax
  752. addl %edx,%ecx
  753. adcl $0,%eax
  754. decl %ebp
  755. movl %ecx,12(%ebx)
  756. jz L025aw_end
  757. # Tail Round 4
  758. movl 16(%esi),%ecx
  759. movl 16(%edi),%edx
  760. addl %eax,%ecx
  761. movl $0,%eax
  762. adcl %eax,%eax
  763. addl %edx,%ecx
  764. adcl $0,%eax
  765. decl %ebp
  766. movl %ecx,16(%ebx)
  767. jz L025aw_end
  768. # Tail Round 5
  769. movl 20(%esi),%ecx
  770. movl 20(%edi),%edx
  771. addl %eax,%ecx
  772. movl $0,%eax
  773. adcl %eax,%eax
  774. addl %edx,%ecx
  775. adcl $0,%eax
  776. decl %ebp
  777. movl %ecx,20(%ebx)
  778. jz L025aw_end
  779. # Tail Round 6
  780. movl 24(%esi),%ecx
  781. movl 24(%edi),%edx
  782. addl %eax,%ecx
  783. movl $0,%eax
  784. adcl %eax,%eax
  785. addl %edx,%ecx
  786. adcl $0,%eax
  787. movl %ecx,24(%ebx)
  788. L025aw_end:
  789. popl %edi
  790. popl %esi
  791. popl %ebx
  792. popl %ebp
  793. ret
  794. .globl _bn_sub_words
  795. .private_extern _bn_sub_words
  796. .align 4
  797. _bn_sub_words:
  798. L_bn_sub_words_begin:
  799. pushl %ebp
  800. pushl %ebx
  801. pushl %esi
  802. pushl %edi
  803. movl 20(%esp),%ebx
  804. movl 24(%esp),%esi
  805. movl 28(%esp),%edi
  806. movl 32(%esp),%ebp
  807. xorl %eax,%eax
  808. andl $4294967288,%ebp
  809. jz L026aw_finish
  810. L027aw_loop:
  811. # Round 0
  812. movl (%esi),%ecx
  813. movl (%edi),%edx
  814. subl %eax,%ecx
  815. movl $0,%eax
  816. adcl %eax,%eax
  817. subl %edx,%ecx
  818. adcl $0,%eax
  819. movl %ecx,(%ebx)
  820. # Round 1
  821. movl 4(%esi),%ecx
  822. movl 4(%edi),%edx
  823. subl %eax,%ecx
  824. movl $0,%eax
  825. adcl %eax,%eax
  826. subl %edx,%ecx
  827. adcl $0,%eax
  828. movl %ecx,4(%ebx)
  829. # Round 2
  830. movl 8(%esi),%ecx
  831. movl 8(%edi),%edx
  832. subl %eax,%ecx
  833. movl $0,%eax
  834. adcl %eax,%eax
  835. subl %edx,%ecx
  836. adcl $0,%eax
  837. movl %ecx,8(%ebx)
  838. # Round 3
  839. movl 12(%esi),%ecx
  840. movl 12(%edi),%edx
  841. subl %eax,%ecx
  842. movl $0,%eax
  843. adcl %eax,%eax
  844. subl %edx,%ecx
  845. adcl $0,%eax
  846. movl %ecx,12(%ebx)
  847. # Round 4
  848. movl 16(%esi),%ecx
  849. movl 16(%edi),%edx
  850. subl %eax,%ecx
  851. movl $0,%eax
  852. adcl %eax,%eax
  853. subl %edx,%ecx
  854. adcl $0,%eax
  855. movl %ecx,16(%ebx)
  856. # Round 5
  857. movl 20(%esi),%ecx
  858. movl 20(%edi),%edx
  859. subl %eax,%ecx
  860. movl $0,%eax
  861. adcl %eax,%eax
  862. subl %edx,%ecx
  863. adcl $0,%eax
  864. movl %ecx,20(%ebx)
  865. # Round 6
  866. movl 24(%esi),%ecx
  867. movl 24(%edi),%edx
  868. subl %eax,%ecx
  869. movl $0,%eax
  870. adcl %eax,%eax
  871. subl %edx,%ecx
  872. adcl $0,%eax
  873. movl %ecx,24(%ebx)
  874. # Round 7
  875. movl 28(%esi),%ecx
  876. movl 28(%edi),%edx
  877. subl %eax,%ecx
  878. movl $0,%eax
  879. adcl %eax,%eax
  880. subl %edx,%ecx
  881. adcl $0,%eax
  882. movl %ecx,28(%ebx)
  883. addl $32,%esi
  884. addl $32,%edi
  885. addl $32,%ebx
  886. subl $8,%ebp
  887. jnz L027aw_loop
  888. L026aw_finish:
  889. movl 32(%esp),%ebp
  890. andl $7,%ebp
  891. jz L028aw_end
  892. # Tail Round 0
  893. movl (%esi),%ecx
  894. movl (%edi),%edx
  895. subl %eax,%ecx
  896. movl $0,%eax
  897. adcl %eax,%eax
  898. subl %edx,%ecx
  899. adcl $0,%eax
  900. decl %ebp
  901. movl %ecx,(%ebx)
  902. jz L028aw_end
  903. # Tail Round 1
  904. movl 4(%esi),%ecx
  905. movl 4(%edi),%edx
  906. subl %eax,%ecx
  907. movl $0,%eax
  908. adcl %eax,%eax
  909. subl %edx,%ecx
  910. adcl $0,%eax
  911. decl %ebp
  912. movl %ecx,4(%ebx)
  913. jz L028aw_end
  914. # Tail Round 2
  915. movl 8(%esi),%ecx
  916. movl 8(%edi),%edx
  917. subl %eax,%ecx
  918. movl $0,%eax
  919. adcl %eax,%eax
  920. subl %edx,%ecx
  921. adcl $0,%eax
  922. decl %ebp
  923. movl %ecx,8(%ebx)
  924. jz L028aw_end
  925. # Tail Round 3
  926. movl 12(%esi),%ecx
  927. movl 12(%edi),%edx
  928. subl %eax,%ecx
  929. movl $0,%eax
  930. adcl %eax,%eax
  931. subl %edx,%ecx
  932. adcl $0,%eax
  933. decl %ebp
  934. movl %ecx,12(%ebx)
  935. jz L028aw_end
  936. # Tail Round 4
  937. movl 16(%esi),%ecx
  938. movl 16(%edi),%edx
  939. subl %eax,%ecx
  940. movl $0,%eax
  941. adcl %eax,%eax
  942. subl %edx,%ecx
  943. adcl $0,%eax
  944. decl %ebp
  945. movl %ecx,16(%ebx)
  946. jz L028aw_end
  947. # Tail Round 5
  948. movl 20(%esi),%ecx
  949. movl 20(%edi),%edx
  950. subl %eax,%ecx
  951. movl $0,%eax
  952. adcl %eax,%eax
  953. subl %edx,%ecx
  954. adcl $0,%eax
  955. decl %ebp
  956. movl %ecx,20(%ebx)
  957. jz L028aw_end
  958. # Tail Round 6
  959. movl 24(%esi),%ecx
  960. movl 24(%edi),%edx
  961. subl %eax,%ecx
  962. movl $0,%eax
  963. adcl %eax,%eax
  964. subl %edx,%ecx
  965. adcl $0,%eax
  966. movl %ecx,24(%ebx)
  967. L028aw_end:
  968. popl %edi
  969. popl %esi
  970. popl %ebx
  971. popl %ebp
  972. ret
  973. .section __IMPORT,__pointers,non_lazy_symbol_pointers
  974. L_OPENSSL_ia32cap_P$non_lazy_ptr:
  975. .indirect_symbol _OPENSSL_ia32cap_P
  976. .long 0
  977. #endif