wp-x86_64.masm 32 KB

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