md5-x86_64.asm 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796
  1. ; This file is generated from a similarly-named Perl script in the BoringSSL
  2. ; source tree. Do not edit by hand.
  3. default rel
  4. %define XMMWORD
  5. %define YMMWORD
  6. %define ZMMWORD
  7. %ifdef BORINGSSL_PREFIX
  8. %include "boringssl_prefix_symbols_nasm.inc"
  9. %endif
  10. section .text code align=64
  11. ALIGN 16
  12. global md5_block_asm_data_order
  13. md5_block_asm_data_order:
  14. mov QWORD[8+rsp],rdi ;WIN64 prologue
  15. mov QWORD[16+rsp],rsi
  16. mov rax,rsp
  17. $L$SEH_begin_md5_block_asm_data_order:
  18. mov rdi,rcx
  19. mov rsi,rdx
  20. mov rdx,r8
  21. push rbp
  22. push rbx
  23. push r12
  24. push r14
  25. push r15
  26. $L$prologue:
  27. mov rbp,rdi
  28. shl rdx,6
  29. lea rdi,[rdx*1+rsi]
  30. mov eax,DWORD[rbp]
  31. mov ebx,DWORD[4+rbp]
  32. mov ecx,DWORD[8+rbp]
  33. mov edx,DWORD[12+rbp]
  34. cmp rsi,rdi
  35. je NEAR $L$end
  36. $L$loop:
  37. mov r8d,eax
  38. mov r9d,ebx
  39. mov r14d,ecx
  40. mov r15d,edx
  41. mov r10d,DWORD[rsi]
  42. mov r11d,edx
  43. xor r11d,ecx
  44. lea eax,[((-680876936))+r10*1+rax]
  45. and r11d,ebx
  46. xor r11d,edx
  47. mov r10d,DWORD[4+rsi]
  48. add eax,r11d
  49. rol eax,7
  50. mov r11d,ecx
  51. add eax,ebx
  52. xor r11d,ebx
  53. lea edx,[((-389564586))+r10*1+rdx]
  54. and r11d,eax
  55. xor r11d,ecx
  56. mov r10d,DWORD[8+rsi]
  57. add edx,r11d
  58. rol edx,12
  59. mov r11d,ebx
  60. add edx,eax
  61. xor r11d,eax
  62. lea ecx,[606105819+r10*1+rcx]
  63. and r11d,edx
  64. xor r11d,ebx
  65. mov r10d,DWORD[12+rsi]
  66. add ecx,r11d
  67. rol ecx,17
  68. mov r11d,eax
  69. add ecx,edx
  70. xor r11d,edx
  71. lea ebx,[((-1044525330))+r10*1+rbx]
  72. and r11d,ecx
  73. xor r11d,eax
  74. mov r10d,DWORD[16+rsi]
  75. add ebx,r11d
  76. rol ebx,22
  77. mov r11d,edx
  78. add ebx,ecx
  79. xor r11d,ecx
  80. lea eax,[((-176418897))+r10*1+rax]
  81. and r11d,ebx
  82. xor r11d,edx
  83. mov r10d,DWORD[20+rsi]
  84. add eax,r11d
  85. rol eax,7
  86. mov r11d,ecx
  87. add eax,ebx
  88. xor r11d,ebx
  89. lea edx,[1200080426+r10*1+rdx]
  90. and r11d,eax
  91. xor r11d,ecx
  92. mov r10d,DWORD[24+rsi]
  93. add edx,r11d
  94. rol edx,12
  95. mov r11d,ebx
  96. add edx,eax
  97. xor r11d,eax
  98. lea ecx,[((-1473231341))+r10*1+rcx]
  99. and r11d,edx
  100. xor r11d,ebx
  101. mov r10d,DWORD[28+rsi]
  102. add ecx,r11d
  103. rol ecx,17
  104. mov r11d,eax
  105. add ecx,edx
  106. xor r11d,edx
  107. lea ebx,[((-45705983))+r10*1+rbx]
  108. and r11d,ecx
  109. xor r11d,eax
  110. mov r10d,DWORD[32+rsi]
  111. add ebx,r11d
  112. rol ebx,22
  113. mov r11d,edx
  114. add ebx,ecx
  115. xor r11d,ecx
  116. lea eax,[1770035416+r10*1+rax]
  117. and r11d,ebx
  118. xor r11d,edx
  119. mov r10d,DWORD[36+rsi]
  120. add eax,r11d
  121. rol eax,7
  122. mov r11d,ecx
  123. add eax,ebx
  124. xor r11d,ebx
  125. lea edx,[((-1958414417))+r10*1+rdx]
  126. and r11d,eax
  127. xor r11d,ecx
  128. mov r10d,DWORD[40+rsi]
  129. add edx,r11d
  130. rol edx,12
  131. mov r11d,ebx
  132. add edx,eax
  133. xor r11d,eax
  134. lea ecx,[((-42063))+r10*1+rcx]
  135. and r11d,edx
  136. xor r11d,ebx
  137. mov r10d,DWORD[44+rsi]
  138. add ecx,r11d
  139. rol ecx,17
  140. mov r11d,eax
  141. add ecx,edx
  142. xor r11d,edx
  143. lea ebx,[((-1990404162))+r10*1+rbx]
  144. and r11d,ecx
  145. xor r11d,eax
  146. mov r10d,DWORD[48+rsi]
  147. add ebx,r11d
  148. rol ebx,22
  149. mov r11d,edx
  150. add ebx,ecx
  151. xor r11d,ecx
  152. lea eax,[1804603682+r10*1+rax]
  153. and r11d,ebx
  154. xor r11d,edx
  155. mov r10d,DWORD[52+rsi]
  156. add eax,r11d
  157. rol eax,7
  158. mov r11d,ecx
  159. add eax,ebx
  160. xor r11d,ebx
  161. lea edx,[((-40341101))+r10*1+rdx]
  162. and r11d,eax
  163. xor r11d,ecx
  164. mov r10d,DWORD[56+rsi]
  165. add edx,r11d
  166. rol edx,12
  167. mov r11d,ebx
  168. add edx,eax
  169. xor r11d,eax
  170. lea ecx,[((-1502002290))+r10*1+rcx]
  171. and r11d,edx
  172. xor r11d,ebx
  173. mov r10d,DWORD[60+rsi]
  174. add ecx,r11d
  175. rol ecx,17
  176. mov r11d,eax
  177. add ecx,edx
  178. xor r11d,edx
  179. lea ebx,[1236535329+r10*1+rbx]
  180. and r11d,ecx
  181. xor r11d,eax
  182. mov r10d,DWORD[rsi]
  183. add ebx,r11d
  184. rol ebx,22
  185. mov r11d,edx
  186. add ebx,ecx
  187. mov r10d,DWORD[4+rsi]
  188. mov r11d,edx
  189. mov r12d,edx
  190. not r11d
  191. lea eax,[((-165796510))+r10*1+rax]
  192. and r12d,ebx
  193. and r11d,ecx
  194. mov r10d,DWORD[24+rsi]
  195. or r12d,r11d
  196. mov r11d,ecx
  197. add eax,r12d
  198. mov r12d,ecx
  199. rol eax,5
  200. add eax,ebx
  201. not r11d
  202. lea edx,[((-1069501632))+r10*1+rdx]
  203. and r12d,eax
  204. and r11d,ebx
  205. mov r10d,DWORD[44+rsi]
  206. or r12d,r11d
  207. mov r11d,ebx
  208. add edx,r12d
  209. mov r12d,ebx
  210. rol edx,9
  211. add edx,eax
  212. not r11d
  213. lea ecx,[643717713+r10*1+rcx]
  214. and r12d,edx
  215. and r11d,eax
  216. mov r10d,DWORD[rsi]
  217. or r12d,r11d
  218. mov r11d,eax
  219. add ecx,r12d
  220. mov r12d,eax
  221. rol ecx,14
  222. add ecx,edx
  223. not r11d
  224. lea ebx,[((-373897302))+r10*1+rbx]
  225. and r12d,ecx
  226. and r11d,edx
  227. mov r10d,DWORD[20+rsi]
  228. or r12d,r11d
  229. mov r11d,edx
  230. add ebx,r12d
  231. mov r12d,edx
  232. rol ebx,20
  233. add ebx,ecx
  234. not r11d
  235. lea eax,[((-701558691))+r10*1+rax]
  236. and r12d,ebx
  237. and r11d,ecx
  238. mov r10d,DWORD[40+rsi]
  239. or r12d,r11d
  240. mov r11d,ecx
  241. add eax,r12d
  242. mov r12d,ecx
  243. rol eax,5
  244. add eax,ebx
  245. not r11d
  246. lea edx,[38016083+r10*1+rdx]
  247. and r12d,eax
  248. and r11d,ebx
  249. mov r10d,DWORD[60+rsi]
  250. or r12d,r11d
  251. mov r11d,ebx
  252. add edx,r12d
  253. mov r12d,ebx
  254. rol edx,9
  255. add edx,eax
  256. not r11d
  257. lea ecx,[((-660478335))+r10*1+rcx]
  258. and r12d,edx
  259. and r11d,eax
  260. mov r10d,DWORD[16+rsi]
  261. or r12d,r11d
  262. mov r11d,eax
  263. add ecx,r12d
  264. mov r12d,eax
  265. rol ecx,14
  266. add ecx,edx
  267. not r11d
  268. lea ebx,[((-405537848))+r10*1+rbx]
  269. and r12d,ecx
  270. and r11d,edx
  271. mov r10d,DWORD[36+rsi]
  272. or r12d,r11d
  273. mov r11d,edx
  274. add ebx,r12d
  275. mov r12d,edx
  276. rol ebx,20
  277. add ebx,ecx
  278. not r11d
  279. lea eax,[568446438+r10*1+rax]
  280. and r12d,ebx
  281. and r11d,ecx
  282. mov r10d,DWORD[56+rsi]
  283. or r12d,r11d
  284. mov r11d,ecx
  285. add eax,r12d
  286. mov r12d,ecx
  287. rol eax,5
  288. add eax,ebx
  289. not r11d
  290. lea edx,[((-1019803690))+r10*1+rdx]
  291. and r12d,eax
  292. and r11d,ebx
  293. mov r10d,DWORD[12+rsi]
  294. or r12d,r11d
  295. mov r11d,ebx
  296. add edx,r12d
  297. mov r12d,ebx
  298. rol edx,9
  299. add edx,eax
  300. not r11d
  301. lea ecx,[((-187363961))+r10*1+rcx]
  302. and r12d,edx
  303. and r11d,eax
  304. mov r10d,DWORD[32+rsi]
  305. or r12d,r11d
  306. mov r11d,eax
  307. add ecx,r12d
  308. mov r12d,eax
  309. rol ecx,14
  310. add ecx,edx
  311. not r11d
  312. lea ebx,[1163531501+r10*1+rbx]
  313. and r12d,ecx
  314. and r11d,edx
  315. mov r10d,DWORD[52+rsi]
  316. or r12d,r11d
  317. mov r11d,edx
  318. add ebx,r12d
  319. mov r12d,edx
  320. rol ebx,20
  321. add ebx,ecx
  322. not r11d
  323. lea eax,[((-1444681467))+r10*1+rax]
  324. and r12d,ebx
  325. and r11d,ecx
  326. mov r10d,DWORD[8+rsi]
  327. or r12d,r11d
  328. mov r11d,ecx
  329. add eax,r12d
  330. mov r12d,ecx
  331. rol eax,5
  332. add eax,ebx
  333. not r11d
  334. lea edx,[((-51403784))+r10*1+rdx]
  335. and r12d,eax
  336. and r11d,ebx
  337. mov r10d,DWORD[28+rsi]
  338. or r12d,r11d
  339. mov r11d,ebx
  340. add edx,r12d
  341. mov r12d,ebx
  342. rol edx,9
  343. add edx,eax
  344. not r11d
  345. lea ecx,[1735328473+r10*1+rcx]
  346. and r12d,edx
  347. and r11d,eax
  348. mov r10d,DWORD[48+rsi]
  349. or r12d,r11d
  350. mov r11d,eax
  351. add ecx,r12d
  352. mov r12d,eax
  353. rol ecx,14
  354. add ecx,edx
  355. not r11d
  356. lea ebx,[((-1926607734))+r10*1+rbx]
  357. and r12d,ecx
  358. and r11d,edx
  359. mov r10d,DWORD[rsi]
  360. or r12d,r11d
  361. mov r11d,edx
  362. add ebx,r12d
  363. mov r12d,edx
  364. rol ebx,20
  365. add ebx,ecx
  366. mov r10d,DWORD[20+rsi]
  367. mov r11d,ecx
  368. lea eax,[((-378558))+r10*1+rax]
  369. mov r10d,DWORD[32+rsi]
  370. xor r11d,edx
  371. xor r11d,ebx
  372. add eax,r11d
  373. rol eax,4
  374. mov r11d,ebx
  375. add eax,ebx
  376. lea edx,[((-2022574463))+r10*1+rdx]
  377. mov r10d,DWORD[44+rsi]
  378. xor r11d,ecx
  379. xor r11d,eax
  380. add edx,r11d
  381. rol edx,11
  382. mov r11d,eax
  383. add edx,eax
  384. lea ecx,[1839030562+r10*1+rcx]
  385. mov r10d,DWORD[56+rsi]
  386. xor r11d,ebx
  387. xor r11d,edx
  388. add ecx,r11d
  389. rol ecx,16
  390. mov r11d,edx
  391. add ecx,edx
  392. lea ebx,[((-35309556))+r10*1+rbx]
  393. mov r10d,DWORD[4+rsi]
  394. xor r11d,eax
  395. xor r11d,ecx
  396. add ebx,r11d
  397. rol ebx,23
  398. mov r11d,ecx
  399. add ebx,ecx
  400. lea eax,[((-1530992060))+r10*1+rax]
  401. mov r10d,DWORD[16+rsi]
  402. xor r11d,edx
  403. xor r11d,ebx
  404. add eax,r11d
  405. rol eax,4
  406. mov r11d,ebx
  407. add eax,ebx
  408. lea edx,[1272893353+r10*1+rdx]
  409. mov r10d,DWORD[28+rsi]
  410. xor r11d,ecx
  411. xor r11d,eax
  412. add edx,r11d
  413. rol edx,11
  414. mov r11d,eax
  415. add edx,eax
  416. lea ecx,[((-155497632))+r10*1+rcx]
  417. mov r10d,DWORD[40+rsi]
  418. xor r11d,ebx
  419. xor r11d,edx
  420. add ecx,r11d
  421. rol ecx,16
  422. mov r11d,edx
  423. add ecx,edx
  424. lea ebx,[((-1094730640))+r10*1+rbx]
  425. mov r10d,DWORD[52+rsi]
  426. xor r11d,eax
  427. xor r11d,ecx
  428. add ebx,r11d
  429. rol ebx,23
  430. mov r11d,ecx
  431. add ebx,ecx
  432. lea eax,[681279174+r10*1+rax]
  433. mov r10d,DWORD[rsi]
  434. xor r11d,edx
  435. xor r11d,ebx
  436. add eax,r11d
  437. rol eax,4
  438. mov r11d,ebx
  439. add eax,ebx
  440. lea edx,[((-358537222))+r10*1+rdx]
  441. mov r10d,DWORD[12+rsi]
  442. xor r11d,ecx
  443. xor r11d,eax
  444. add edx,r11d
  445. rol edx,11
  446. mov r11d,eax
  447. add edx,eax
  448. lea ecx,[((-722521979))+r10*1+rcx]
  449. mov r10d,DWORD[24+rsi]
  450. xor r11d,ebx
  451. xor r11d,edx
  452. add ecx,r11d
  453. rol ecx,16
  454. mov r11d,edx
  455. add ecx,edx
  456. lea ebx,[76029189+r10*1+rbx]
  457. mov r10d,DWORD[36+rsi]
  458. xor r11d,eax
  459. xor r11d,ecx
  460. add ebx,r11d
  461. rol ebx,23
  462. mov r11d,ecx
  463. add ebx,ecx
  464. lea eax,[((-640364487))+r10*1+rax]
  465. mov r10d,DWORD[48+rsi]
  466. xor r11d,edx
  467. xor r11d,ebx
  468. add eax,r11d
  469. rol eax,4
  470. mov r11d,ebx
  471. add eax,ebx
  472. lea edx,[((-421815835))+r10*1+rdx]
  473. mov r10d,DWORD[60+rsi]
  474. xor r11d,ecx
  475. xor r11d,eax
  476. add edx,r11d
  477. rol edx,11
  478. mov r11d,eax
  479. add edx,eax
  480. lea ecx,[530742520+r10*1+rcx]
  481. mov r10d,DWORD[8+rsi]
  482. xor r11d,ebx
  483. xor r11d,edx
  484. add ecx,r11d
  485. rol ecx,16
  486. mov r11d,edx
  487. add ecx,edx
  488. lea ebx,[((-995338651))+r10*1+rbx]
  489. mov r10d,DWORD[rsi]
  490. xor r11d,eax
  491. xor r11d,ecx
  492. add ebx,r11d
  493. rol ebx,23
  494. mov r11d,ecx
  495. add ebx,ecx
  496. mov r10d,DWORD[rsi]
  497. mov r11d,0xffffffff
  498. xor r11d,edx
  499. lea eax,[((-198630844))+r10*1+rax]
  500. or r11d,ebx
  501. xor r11d,ecx
  502. add eax,r11d
  503. mov r10d,DWORD[28+rsi]
  504. mov r11d,0xffffffff
  505. rol eax,6
  506. xor r11d,ecx
  507. add eax,ebx
  508. lea edx,[1126891415+r10*1+rdx]
  509. or r11d,eax
  510. xor r11d,ebx
  511. add edx,r11d
  512. mov r10d,DWORD[56+rsi]
  513. mov r11d,0xffffffff
  514. rol edx,10
  515. xor r11d,ebx
  516. add edx,eax
  517. lea ecx,[((-1416354905))+r10*1+rcx]
  518. or r11d,edx
  519. xor r11d,eax
  520. add ecx,r11d
  521. mov r10d,DWORD[20+rsi]
  522. mov r11d,0xffffffff
  523. rol ecx,15
  524. xor r11d,eax
  525. add ecx,edx
  526. lea ebx,[((-57434055))+r10*1+rbx]
  527. or r11d,ecx
  528. xor r11d,edx
  529. add ebx,r11d
  530. mov r10d,DWORD[48+rsi]
  531. mov r11d,0xffffffff
  532. rol ebx,21
  533. xor r11d,edx
  534. add ebx,ecx
  535. lea eax,[1700485571+r10*1+rax]
  536. or r11d,ebx
  537. xor r11d,ecx
  538. add eax,r11d
  539. mov r10d,DWORD[12+rsi]
  540. mov r11d,0xffffffff
  541. rol eax,6
  542. xor r11d,ecx
  543. add eax,ebx
  544. lea edx,[((-1894986606))+r10*1+rdx]
  545. or r11d,eax
  546. xor r11d,ebx
  547. add edx,r11d
  548. mov r10d,DWORD[40+rsi]
  549. mov r11d,0xffffffff
  550. rol edx,10
  551. xor r11d,ebx
  552. add edx,eax
  553. lea ecx,[((-1051523))+r10*1+rcx]
  554. or r11d,edx
  555. xor r11d,eax
  556. add ecx,r11d
  557. mov r10d,DWORD[4+rsi]
  558. mov r11d,0xffffffff
  559. rol ecx,15
  560. xor r11d,eax
  561. add ecx,edx
  562. lea ebx,[((-2054922799))+r10*1+rbx]
  563. or r11d,ecx
  564. xor r11d,edx
  565. add ebx,r11d
  566. mov r10d,DWORD[32+rsi]
  567. mov r11d,0xffffffff
  568. rol ebx,21
  569. xor r11d,edx
  570. add ebx,ecx
  571. lea eax,[1873313359+r10*1+rax]
  572. or r11d,ebx
  573. xor r11d,ecx
  574. add eax,r11d
  575. mov r10d,DWORD[60+rsi]
  576. mov r11d,0xffffffff
  577. rol eax,6
  578. xor r11d,ecx
  579. add eax,ebx
  580. lea edx,[((-30611744))+r10*1+rdx]
  581. or r11d,eax
  582. xor r11d,ebx
  583. add edx,r11d
  584. mov r10d,DWORD[24+rsi]
  585. mov r11d,0xffffffff
  586. rol edx,10
  587. xor r11d,ebx
  588. add edx,eax
  589. lea ecx,[((-1560198380))+r10*1+rcx]
  590. or r11d,edx
  591. xor r11d,eax
  592. add ecx,r11d
  593. mov r10d,DWORD[52+rsi]
  594. mov r11d,0xffffffff
  595. rol ecx,15
  596. xor r11d,eax
  597. add ecx,edx
  598. lea ebx,[1309151649+r10*1+rbx]
  599. or r11d,ecx
  600. xor r11d,edx
  601. add ebx,r11d
  602. mov r10d,DWORD[16+rsi]
  603. mov r11d,0xffffffff
  604. rol ebx,21
  605. xor r11d,edx
  606. add ebx,ecx
  607. lea eax,[((-145523070))+r10*1+rax]
  608. or r11d,ebx
  609. xor r11d,ecx
  610. add eax,r11d
  611. mov r10d,DWORD[44+rsi]
  612. mov r11d,0xffffffff
  613. rol eax,6
  614. xor r11d,ecx
  615. add eax,ebx
  616. lea edx,[((-1120210379))+r10*1+rdx]
  617. or r11d,eax
  618. xor r11d,ebx
  619. add edx,r11d
  620. mov r10d,DWORD[8+rsi]
  621. mov r11d,0xffffffff
  622. rol edx,10
  623. xor r11d,ebx
  624. add edx,eax
  625. lea ecx,[718787259+r10*1+rcx]
  626. or r11d,edx
  627. xor r11d,eax
  628. add ecx,r11d
  629. mov r10d,DWORD[36+rsi]
  630. mov r11d,0xffffffff
  631. rol ecx,15
  632. xor r11d,eax
  633. add ecx,edx
  634. lea ebx,[((-343485551))+r10*1+rbx]
  635. or r11d,ecx
  636. xor r11d,edx
  637. add ebx,r11d
  638. mov r10d,DWORD[rsi]
  639. mov r11d,0xffffffff
  640. rol ebx,21
  641. xor r11d,edx
  642. add ebx,ecx
  643. add eax,r8d
  644. add ebx,r9d
  645. add ecx,r14d
  646. add edx,r15d
  647. add rsi,64
  648. cmp rsi,rdi
  649. jb NEAR $L$loop
  650. $L$end:
  651. mov DWORD[rbp],eax
  652. mov DWORD[4+rbp],ebx
  653. mov DWORD[8+rbp],ecx
  654. mov DWORD[12+rbp],edx
  655. mov r15,QWORD[rsp]
  656. mov r14,QWORD[8+rsp]
  657. mov r12,QWORD[16+rsp]
  658. mov rbx,QWORD[24+rsp]
  659. mov rbp,QWORD[32+rsp]
  660. add rsp,40
  661. $L$epilogue:
  662. mov rdi,QWORD[8+rsp] ;WIN64 epilogue
  663. mov rsi,QWORD[16+rsp]
  664. DB 0F3h,0C3h ;repret
  665. $L$SEH_end_md5_block_asm_data_order:
  666. EXTERN __imp_RtlVirtualUnwind
  667. ALIGN 16
  668. se_handler:
  669. push rsi
  670. push rdi
  671. push rbx
  672. push rbp
  673. push r12
  674. push r13
  675. push r14
  676. push r15
  677. pushfq
  678. sub rsp,64
  679. mov rax,QWORD[120+r8]
  680. mov rbx,QWORD[248+r8]
  681. lea r10,[$L$prologue]
  682. cmp rbx,r10
  683. jb NEAR $L$in_prologue
  684. mov rax,QWORD[152+r8]
  685. lea r10,[$L$epilogue]
  686. cmp rbx,r10
  687. jae NEAR $L$in_prologue
  688. lea rax,[40+rax]
  689. mov rbp,QWORD[((-8))+rax]
  690. mov rbx,QWORD[((-16))+rax]
  691. mov r12,QWORD[((-24))+rax]
  692. mov r14,QWORD[((-32))+rax]
  693. mov r15,QWORD[((-40))+rax]
  694. mov QWORD[144+r8],rbx
  695. mov QWORD[160+r8],rbp
  696. mov QWORD[216+r8],r12
  697. mov QWORD[232+r8],r14
  698. mov QWORD[240+r8],r15
  699. $L$in_prologue:
  700. mov rdi,QWORD[8+rax]
  701. mov rsi,QWORD[16+rax]
  702. mov QWORD[152+r8],rax
  703. mov QWORD[168+r8],rsi
  704. mov QWORD[176+r8],rdi
  705. mov rdi,QWORD[40+r9]
  706. mov rsi,r8
  707. mov ecx,154
  708. DD 0xa548f3fc
  709. mov rsi,r9
  710. xor rcx,rcx
  711. mov rdx,QWORD[8+rsi]
  712. mov r8,QWORD[rsi]
  713. mov r9,QWORD[16+rsi]
  714. mov r10,QWORD[40+rsi]
  715. lea r11,[56+rsi]
  716. lea r12,[24+rsi]
  717. mov QWORD[32+rsp],r10
  718. mov QWORD[40+rsp],r11
  719. mov QWORD[48+rsp],r12
  720. mov QWORD[56+rsp],rcx
  721. call QWORD[__imp_RtlVirtualUnwind]
  722. mov eax,1
  723. add rsp,64
  724. popfq
  725. pop r15
  726. pop r14
  727. pop r13
  728. pop r12
  729. pop rbp
  730. pop rbx
  731. pop rdi
  732. pop rsi
  733. DB 0F3h,0C3h ;repret
  734. section .pdata rdata align=4
  735. ALIGN 4
  736. DD $L$SEH_begin_md5_block_asm_data_order wrt ..imagebase
  737. DD $L$SEH_end_md5_block_asm_data_order wrt ..imagebase
  738. DD $L$SEH_info_md5_block_asm_data_order wrt ..imagebase
  739. section .xdata rdata align=8
  740. ALIGN 8
  741. $L$SEH_info_md5_block_asm_data_order:
  742. DB 9,0,0,0
  743. DD se_handler wrt ..imagebase