bn_586.asm 23 KB

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