sha512-x86_64.asm 44 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139
  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. EXTERN OPENSSL_ia32cap_P
  12. global sha512_block_data_order
  13. ALIGN 16
  14. sha512_block_data_order:
  15. mov QWORD[8+rsp],rdi ;WIN64 prologue
  16. mov QWORD[16+rsp],rsi
  17. mov rax,rsp
  18. $L$SEH_begin_sha512_block_data_order:
  19. mov rdi,rcx
  20. mov rsi,rdx
  21. mov rdx,r8
  22. lea r11,[OPENSSL_ia32cap_P]
  23. mov r9d,DWORD[r11]
  24. mov r10d,DWORD[4+r11]
  25. mov r11d,DWORD[8+r11]
  26. and r9d,1073741824
  27. and r10d,268435968
  28. or r10d,r9d
  29. cmp r10d,1342177792
  30. je NEAR $L$avx_shortcut
  31. mov rax,rsp
  32. push rbx
  33. push rbp
  34. push r12
  35. push r13
  36. push r14
  37. push r15
  38. shl rdx,4
  39. sub rsp,16*8+4*8
  40. lea rdx,[rdx*8+rsi]
  41. and rsp,-64
  42. mov QWORD[((128+0))+rsp],rdi
  43. mov QWORD[((128+8))+rsp],rsi
  44. mov QWORD[((128+16))+rsp],rdx
  45. mov QWORD[152+rsp],rax
  46. $L$prologue:
  47. mov rax,QWORD[rdi]
  48. mov rbx,QWORD[8+rdi]
  49. mov rcx,QWORD[16+rdi]
  50. mov rdx,QWORD[24+rdi]
  51. mov r8,QWORD[32+rdi]
  52. mov r9,QWORD[40+rdi]
  53. mov r10,QWORD[48+rdi]
  54. mov r11,QWORD[56+rdi]
  55. jmp NEAR $L$loop
  56. ALIGN 16
  57. $L$loop:
  58. mov rdi,rbx
  59. lea rbp,[K512]
  60. xor rdi,rcx
  61. mov r12,QWORD[rsi]
  62. mov r13,r8
  63. mov r14,rax
  64. bswap r12
  65. ror r13,23
  66. mov r15,r9
  67. xor r13,r8
  68. ror r14,5
  69. xor r15,r10
  70. mov QWORD[rsp],r12
  71. xor r14,rax
  72. and r15,r8
  73. ror r13,4
  74. add r12,r11
  75. xor r15,r10
  76. ror r14,6
  77. xor r13,r8
  78. add r12,r15
  79. mov r15,rax
  80. add r12,QWORD[rbp]
  81. xor r14,rax
  82. xor r15,rbx
  83. ror r13,14
  84. mov r11,rbx
  85. and rdi,r15
  86. ror r14,28
  87. add r12,r13
  88. xor r11,rdi
  89. add rdx,r12
  90. add r11,r12
  91. lea rbp,[8+rbp]
  92. add r11,r14
  93. mov r12,QWORD[8+rsi]
  94. mov r13,rdx
  95. mov r14,r11
  96. bswap r12
  97. ror r13,23
  98. mov rdi,r8
  99. xor r13,rdx
  100. ror r14,5
  101. xor rdi,r9
  102. mov QWORD[8+rsp],r12
  103. xor r14,r11
  104. and rdi,rdx
  105. ror r13,4
  106. add r12,r10
  107. xor rdi,r9
  108. ror r14,6
  109. xor r13,rdx
  110. add r12,rdi
  111. mov rdi,r11
  112. add r12,QWORD[rbp]
  113. xor r14,r11
  114. xor rdi,rax
  115. ror r13,14
  116. mov r10,rax
  117. and r15,rdi
  118. ror r14,28
  119. add r12,r13
  120. xor r10,r15
  121. add rcx,r12
  122. add r10,r12
  123. lea rbp,[24+rbp]
  124. add r10,r14
  125. mov r12,QWORD[16+rsi]
  126. mov r13,rcx
  127. mov r14,r10
  128. bswap r12
  129. ror r13,23
  130. mov r15,rdx
  131. xor r13,rcx
  132. ror r14,5
  133. xor r15,r8
  134. mov QWORD[16+rsp],r12
  135. xor r14,r10
  136. and r15,rcx
  137. ror r13,4
  138. add r12,r9
  139. xor r15,r8
  140. ror r14,6
  141. xor r13,rcx
  142. add r12,r15
  143. mov r15,r10
  144. add r12,QWORD[rbp]
  145. xor r14,r10
  146. xor r15,r11
  147. ror r13,14
  148. mov r9,r11
  149. and rdi,r15
  150. ror r14,28
  151. add r12,r13
  152. xor r9,rdi
  153. add rbx,r12
  154. add r9,r12
  155. lea rbp,[8+rbp]
  156. add r9,r14
  157. mov r12,QWORD[24+rsi]
  158. mov r13,rbx
  159. mov r14,r9
  160. bswap r12
  161. ror r13,23
  162. mov rdi,rcx
  163. xor r13,rbx
  164. ror r14,5
  165. xor rdi,rdx
  166. mov QWORD[24+rsp],r12
  167. xor r14,r9
  168. and rdi,rbx
  169. ror r13,4
  170. add r12,r8
  171. xor rdi,rdx
  172. ror r14,6
  173. xor r13,rbx
  174. add r12,rdi
  175. mov rdi,r9
  176. add r12,QWORD[rbp]
  177. xor r14,r9
  178. xor rdi,r10
  179. ror r13,14
  180. mov r8,r10
  181. and r15,rdi
  182. ror r14,28
  183. add r12,r13
  184. xor r8,r15
  185. add rax,r12
  186. add r8,r12
  187. lea rbp,[24+rbp]
  188. add r8,r14
  189. mov r12,QWORD[32+rsi]
  190. mov r13,rax
  191. mov r14,r8
  192. bswap r12
  193. ror r13,23
  194. mov r15,rbx
  195. xor r13,rax
  196. ror r14,5
  197. xor r15,rcx
  198. mov QWORD[32+rsp],r12
  199. xor r14,r8
  200. and r15,rax
  201. ror r13,4
  202. add r12,rdx
  203. xor r15,rcx
  204. ror r14,6
  205. xor r13,rax
  206. add r12,r15
  207. mov r15,r8
  208. add r12,QWORD[rbp]
  209. xor r14,r8
  210. xor r15,r9
  211. ror r13,14
  212. mov rdx,r9
  213. and rdi,r15
  214. ror r14,28
  215. add r12,r13
  216. xor rdx,rdi
  217. add r11,r12
  218. add rdx,r12
  219. lea rbp,[8+rbp]
  220. add rdx,r14
  221. mov r12,QWORD[40+rsi]
  222. mov r13,r11
  223. mov r14,rdx
  224. bswap r12
  225. ror r13,23
  226. mov rdi,rax
  227. xor r13,r11
  228. ror r14,5
  229. xor rdi,rbx
  230. mov QWORD[40+rsp],r12
  231. xor r14,rdx
  232. and rdi,r11
  233. ror r13,4
  234. add r12,rcx
  235. xor rdi,rbx
  236. ror r14,6
  237. xor r13,r11
  238. add r12,rdi
  239. mov rdi,rdx
  240. add r12,QWORD[rbp]
  241. xor r14,rdx
  242. xor rdi,r8
  243. ror r13,14
  244. mov rcx,r8
  245. and r15,rdi
  246. ror r14,28
  247. add r12,r13
  248. xor rcx,r15
  249. add r10,r12
  250. add rcx,r12
  251. lea rbp,[24+rbp]
  252. add rcx,r14
  253. mov r12,QWORD[48+rsi]
  254. mov r13,r10
  255. mov r14,rcx
  256. bswap r12
  257. ror r13,23
  258. mov r15,r11
  259. xor r13,r10
  260. ror r14,5
  261. xor r15,rax
  262. mov QWORD[48+rsp],r12
  263. xor r14,rcx
  264. and r15,r10
  265. ror r13,4
  266. add r12,rbx
  267. xor r15,rax
  268. ror r14,6
  269. xor r13,r10
  270. add r12,r15
  271. mov r15,rcx
  272. add r12,QWORD[rbp]
  273. xor r14,rcx
  274. xor r15,rdx
  275. ror r13,14
  276. mov rbx,rdx
  277. and rdi,r15
  278. ror r14,28
  279. add r12,r13
  280. xor rbx,rdi
  281. add r9,r12
  282. add rbx,r12
  283. lea rbp,[8+rbp]
  284. add rbx,r14
  285. mov r12,QWORD[56+rsi]
  286. mov r13,r9
  287. mov r14,rbx
  288. bswap r12
  289. ror r13,23
  290. mov rdi,r10
  291. xor r13,r9
  292. ror r14,5
  293. xor rdi,r11
  294. mov QWORD[56+rsp],r12
  295. xor r14,rbx
  296. and rdi,r9
  297. ror r13,4
  298. add r12,rax
  299. xor rdi,r11
  300. ror r14,6
  301. xor r13,r9
  302. add r12,rdi
  303. mov rdi,rbx
  304. add r12,QWORD[rbp]
  305. xor r14,rbx
  306. xor rdi,rcx
  307. ror r13,14
  308. mov rax,rcx
  309. and r15,rdi
  310. ror r14,28
  311. add r12,r13
  312. xor rax,r15
  313. add r8,r12
  314. add rax,r12
  315. lea rbp,[24+rbp]
  316. add rax,r14
  317. mov r12,QWORD[64+rsi]
  318. mov r13,r8
  319. mov r14,rax
  320. bswap r12
  321. ror r13,23
  322. mov r15,r9
  323. xor r13,r8
  324. ror r14,5
  325. xor r15,r10
  326. mov QWORD[64+rsp],r12
  327. xor r14,rax
  328. and r15,r8
  329. ror r13,4
  330. add r12,r11
  331. xor r15,r10
  332. ror r14,6
  333. xor r13,r8
  334. add r12,r15
  335. mov r15,rax
  336. add r12,QWORD[rbp]
  337. xor r14,rax
  338. xor r15,rbx
  339. ror r13,14
  340. mov r11,rbx
  341. and rdi,r15
  342. ror r14,28
  343. add r12,r13
  344. xor r11,rdi
  345. add rdx,r12
  346. add r11,r12
  347. lea rbp,[8+rbp]
  348. add r11,r14
  349. mov r12,QWORD[72+rsi]
  350. mov r13,rdx
  351. mov r14,r11
  352. bswap r12
  353. ror r13,23
  354. mov rdi,r8
  355. xor r13,rdx
  356. ror r14,5
  357. xor rdi,r9
  358. mov QWORD[72+rsp],r12
  359. xor r14,r11
  360. and rdi,rdx
  361. ror r13,4
  362. add r12,r10
  363. xor rdi,r9
  364. ror r14,6
  365. xor r13,rdx
  366. add r12,rdi
  367. mov rdi,r11
  368. add r12,QWORD[rbp]
  369. xor r14,r11
  370. xor rdi,rax
  371. ror r13,14
  372. mov r10,rax
  373. and r15,rdi
  374. ror r14,28
  375. add r12,r13
  376. xor r10,r15
  377. add rcx,r12
  378. add r10,r12
  379. lea rbp,[24+rbp]
  380. add r10,r14
  381. mov r12,QWORD[80+rsi]
  382. mov r13,rcx
  383. mov r14,r10
  384. bswap r12
  385. ror r13,23
  386. mov r15,rdx
  387. xor r13,rcx
  388. ror r14,5
  389. xor r15,r8
  390. mov QWORD[80+rsp],r12
  391. xor r14,r10
  392. and r15,rcx
  393. ror r13,4
  394. add r12,r9
  395. xor r15,r8
  396. ror r14,6
  397. xor r13,rcx
  398. add r12,r15
  399. mov r15,r10
  400. add r12,QWORD[rbp]
  401. xor r14,r10
  402. xor r15,r11
  403. ror r13,14
  404. mov r9,r11
  405. and rdi,r15
  406. ror r14,28
  407. add r12,r13
  408. xor r9,rdi
  409. add rbx,r12
  410. add r9,r12
  411. lea rbp,[8+rbp]
  412. add r9,r14
  413. mov r12,QWORD[88+rsi]
  414. mov r13,rbx
  415. mov r14,r9
  416. bswap r12
  417. ror r13,23
  418. mov rdi,rcx
  419. xor r13,rbx
  420. ror r14,5
  421. xor rdi,rdx
  422. mov QWORD[88+rsp],r12
  423. xor r14,r9
  424. and rdi,rbx
  425. ror r13,4
  426. add r12,r8
  427. xor rdi,rdx
  428. ror r14,6
  429. xor r13,rbx
  430. add r12,rdi
  431. mov rdi,r9
  432. add r12,QWORD[rbp]
  433. xor r14,r9
  434. xor rdi,r10
  435. ror r13,14
  436. mov r8,r10
  437. and r15,rdi
  438. ror r14,28
  439. add r12,r13
  440. xor r8,r15
  441. add rax,r12
  442. add r8,r12
  443. lea rbp,[24+rbp]
  444. add r8,r14
  445. mov r12,QWORD[96+rsi]
  446. mov r13,rax
  447. mov r14,r8
  448. bswap r12
  449. ror r13,23
  450. mov r15,rbx
  451. xor r13,rax
  452. ror r14,5
  453. xor r15,rcx
  454. mov QWORD[96+rsp],r12
  455. xor r14,r8
  456. and r15,rax
  457. ror r13,4
  458. add r12,rdx
  459. xor r15,rcx
  460. ror r14,6
  461. xor r13,rax
  462. add r12,r15
  463. mov r15,r8
  464. add r12,QWORD[rbp]
  465. xor r14,r8
  466. xor r15,r9
  467. ror r13,14
  468. mov rdx,r9
  469. and rdi,r15
  470. ror r14,28
  471. add r12,r13
  472. xor rdx,rdi
  473. add r11,r12
  474. add rdx,r12
  475. lea rbp,[8+rbp]
  476. add rdx,r14
  477. mov r12,QWORD[104+rsi]
  478. mov r13,r11
  479. mov r14,rdx
  480. bswap r12
  481. ror r13,23
  482. mov rdi,rax
  483. xor r13,r11
  484. ror r14,5
  485. xor rdi,rbx
  486. mov QWORD[104+rsp],r12
  487. xor r14,rdx
  488. and rdi,r11
  489. ror r13,4
  490. add r12,rcx
  491. xor rdi,rbx
  492. ror r14,6
  493. xor r13,r11
  494. add r12,rdi
  495. mov rdi,rdx
  496. add r12,QWORD[rbp]
  497. xor r14,rdx
  498. xor rdi,r8
  499. ror r13,14
  500. mov rcx,r8
  501. and r15,rdi
  502. ror r14,28
  503. add r12,r13
  504. xor rcx,r15
  505. add r10,r12
  506. add rcx,r12
  507. lea rbp,[24+rbp]
  508. add rcx,r14
  509. mov r12,QWORD[112+rsi]
  510. mov r13,r10
  511. mov r14,rcx
  512. bswap r12
  513. ror r13,23
  514. mov r15,r11
  515. xor r13,r10
  516. ror r14,5
  517. xor r15,rax
  518. mov QWORD[112+rsp],r12
  519. xor r14,rcx
  520. and r15,r10
  521. ror r13,4
  522. add r12,rbx
  523. xor r15,rax
  524. ror r14,6
  525. xor r13,r10
  526. add r12,r15
  527. mov r15,rcx
  528. add r12,QWORD[rbp]
  529. xor r14,rcx
  530. xor r15,rdx
  531. ror r13,14
  532. mov rbx,rdx
  533. and rdi,r15
  534. ror r14,28
  535. add r12,r13
  536. xor rbx,rdi
  537. add r9,r12
  538. add rbx,r12
  539. lea rbp,[8+rbp]
  540. add rbx,r14
  541. mov r12,QWORD[120+rsi]
  542. mov r13,r9
  543. mov r14,rbx
  544. bswap r12
  545. ror r13,23
  546. mov rdi,r10
  547. xor r13,r9
  548. ror r14,5
  549. xor rdi,r11
  550. mov QWORD[120+rsp],r12
  551. xor r14,rbx
  552. and rdi,r9
  553. ror r13,4
  554. add r12,rax
  555. xor rdi,r11
  556. ror r14,6
  557. xor r13,r9
  558. add r12,rdi
  559. mov rdi,rbx
  560. add r12,QWORD[rbp]
  561. xor r14,rbx
  562. xor rdi,rcx
  563. ror r13,14
  564. mov rax,rcx
  565. and r15,rdi
  566. ror r14,28
  567. add r12,r13
  568. xor rax,r15
  569. add r8,r12
  570. add rax,r12
  571. lea rbp,[24+rbp]
  572. jmp NEAR $L$rounds_16_xx
  573. ALIGN 16
  574. $L$rounds_16_xx:
  575. mov r13,QWORD[8+rsp]
  576. mov r15,QWORD[112+rsp]
  577. mov r12,r13
  578. ror r13,7
  579. add rax,r14
  580. mov r14,r15
  581. ror r15,42
  582. xor r13,r12
  583. shr r12,7
  584. ror r13,1
  585. xor r15,r14
  586. shr r14,6
  587. ror r15,19
  588. xor r12,r13
  589. xor r15,r14
  590. add r12,QWORD[72+rsp]
  591. add r12,QWORD[rsp]
  592. mov r13,r8
  593. add r12,r15
  594. mov r14,rax
  595. ror r13,23
  596. mov r15,r9
  597. xor r13,r8
  598. ror r14,5
  599. xor r15,r10
  600. mov QWORD[rsp],r12
  601. xor r14,rax
  602. and r15,r8
  603. ror r13,4
  604. add r12,r11
  605. xor r15,r10
  606. ror r14,6
  607. xor r13,r8
  608. add r12,r15
  609. mov r15,rax
  610. add r12,QWORD[rbp]
  611. xor r14,rax
  612. xor r15,rbx
  613. ror r13,14
  614. mov r11,rbx
  615. and rdi,r15
  616. ror r14,28
  617. add r12,r13
  618. xor r11,rdi
  619. add rdx,r12
  620. add r11,r12
  621. lea rbp,[8+rbp]
  622. mov r13,QWORD[16+rsp]
  623. mov rdi,QWORD[120+rsp]
  624. mov r12,r13
  625. ror r13,7
  626. add r11,r14
  627. mov r14,rdi
  628. ror rdi,42
  629. xor r13,r12
  630. shr r12,7
  631. ror r13,1
  632. xor rdi,r14
  633. shr r14,6
  634. ror rdi,19
  635. xor r12,r13
  636. xor rdi,r14
  637. add r12,QWORD[80+rsp]
  638. add r12,QWORD[8+rsp]
  639. mov r13,rdx
  640. add r12,rdi
  641. mov r14,r11
  642. ror r13,23
  643. mov rdi,r8
  644. xor r13,rdx
  645. ror r14,5
  646. xor rdi,r9
  647. mov QWORD[8+rsp],r12
  648. xor r14,r11
  649. and rdi,rdx
  650. ror r13,4
  651. add r12,r10
  652. xor rdi,r9
  653. ror r14,6
  654. xor r13,rdx
  655. add r12,rdi
  656. mov rdi,r11
  657. add r12,QWORD[rbp]
  658. xor r14,r11
  659. xor rdi,rax
  660. ror r13,14
  661. mov r10,rax
  662. and r15,rdi
  663. ror r14,28
  664. add r12,r13
  665. xor r10,r15
  666. add rcx,r12
  667. add r10,r12
  668. lea rbp,[24+rbp]
  669. mov r13,QWORD[24+rsp]
  670. mov r15,QWORD[rsp]
  671. mov r12,r13
  672. ror r13,7
  673. add r10,r14
  674. mov r14,r15
  675. ror r15,42
  676. xor r13,r12
  677. shr r12,7
  678. ror r13,1
  679. xor r15,r14
  680. shr r14,6
  681. ror r15,19
  682. xor r12,r13
  683. xor r15,r14
  684. add r12,QWORD[88+rsp]
  685. add r12,QWORD[16+rsp]
  686. mov r13,rcx
  687. add r12,r15
  688. mov r14,r10
  689. ror r13,23
  690. mov r15,rdx
  691. xor r13,rcx
  692. ror r14,5
  693. xor r15,r8
  694. mov QWORD[16+rsp],r12
  695. xor r14,r10
  696. and r15,rcx
  697. ror r13,4
  698. add r12,r9
  699. xor r15,r8
  700. ror r14,6
  701. xor r13,rcx
  702. add r12,r15
  703. mov r15,r10
  704. add r12,QWORD[rbp]
  705. xor r14,r10
  706. xor r15,r11
  707. ror r13,14
  708. mov r9,r11
  709. and rdi,r15
  710. ror r14,28
  711. add r12,r13
  712. xor r9,rdi
  713. add rbx,r12
  714. add r9,r12
  715. lea rbp,[8+rbp]
  716. mov r13,QWORD[32+rsp]
  717. mov rdi,QWORD[8+rsp]
  718. mov r12,r13
  719. ror r13,7
  720. add r9,r14
  721. mov r14,rdi
  722. ror rdi,42
  723. xor r13,r12
  724. shr r12,7
  725. ror r13,1
  726. xor rdi,r14
  727. shr r14,6
  728. ror rdi,19
  729. xor r12,r13
  730. xor rdi,r14
  731. add r12,QWORD[96+rsp]
  732. add r12,QWORD[24+rsp]
  733. mov r13,rbx
  734. add r12,rdi
  735. mov r14,r9
  736. ror r13,23
  737. mov rdi,rcx
  738. xor r13,rbx
  739. ror r14,5
  740. xor rdi,rdx
  741. mov QWORD[24+rsp],r12
  742. xor r14,r9
  743. and rdi,rbx
  744. ror r13,4
  745. add r12,r8
  746. xor rdi,rdx
  747. ror r14,6
  748. xor r13,rbx
  749. add r12,rdi
  750. mov rdi,r9
  751. add r12,QWORD[rbp]
  752. xor r14,r9
  753. xor rdi,r10
  754. ror r13,14
  755. mov r8,r10
  756. and r15,rdi
  757. ror r14,28
  758. add r12,r13
  759. xor r8,r15
  760. add rax,r12
  761. add r8,r12
  762. lea rbp,[24+rbp]
  763. mov r13,QWORD[40+rsp]
  764. mov r15,QWORD[16+rsp]
  765. mov r12,r13
  766. ror r13,7
  767. add r8,r14
  768. mov r14,r15
  769. ror r15,42
  770. xor r13,r12
  771. shr r12,7
  772. ror r13,1
  773. xor r15,r14
  774. shr r14,6
  775. ror r15,19
  776. xor r12,r13
  777. xor r15,r14
  778. add r12,QWORD[104+rsp]
  779. add r12,QWORD[32+rsp]
  780. mov r13,rax
  781. add r12,r15
  782. mov r14,r8
  783. ror r13,23
  784. mov r15,rbx
  785. xor r13,rax
  786. ror r14,5
  787. xor r15,rcx
  788. mov QWORD[32+rsp],r12
  789. xor r14,r8
  790. and r15,rax
  791. ror r13,4
  792. add r12,rdx
  793. xor r15,rcx
  794. ror r14,6
  795. xor r13,rax
  796. add r12,r15
  797. mov r15,r8
  798. add r12,QWORD[rbp]
  799. xor r14,r8
  800. xor r15,r9
  801. ror r13,14
  802. mov rdx,r9
  803. and rdi,r15
  804. ror r14,28
  805. add r12,r13
  806. xor rdx,rdi
  807. add r11,r12
  808. add rdx,r12
  809. lea rbp,[8+rbp]
  810. mov r13,QWORD[48+rsp]
  811. mov rdi,QWORD[24+rsp]
  812. mov r12,r13
  813. ror r13,7
  814. add rdx,r14
  815. mov r14,rdi
  816. ror rdi,42
  817. xor r13,r12
  818. shr r12,7
  819. ror r13,1
  820. xor rdi,r14
  821. shr r14,6
  822. ror rdi,19
  823. xor r12,r13
  824. xor rdi,r14
  825. add r12,QWORD[112+rsp]
  826. add r12,QWORD[40+rsp]
  827. mov r13,r11
  828. add r12,rdi
  829. mov r14,rdx
  830. ror r13,23
  831. mov rdi,rax
  832. xor r13,r11
  833. ror r14,5
  834. xor rdi,rbx
  835. mov QWORD[40+rsp],r12
  836. xor r14,rdx
  837. and rdi,r11
  838. ror r13,4
  839. add r12,rcx
  840. xor rdi,rbx
  841. ror r14,6
  842. xor r13,r11
  843. add r12,rdi
  844. mov rdi,rdx
  845. add r12,QWORD[rbp]
  846. xor r14,rdx
  847. xor rdi,r8
  848. ror r13,14
  849. mov rcx,r8
  850. and r15,rdi
  851. ror r14,28
  852. add r12,r13
  853. xor rcx,r15
  854. add r10,r12
  855. add rcx,r12
  856. lea rbp,[24+rbp]
  857. mov r13,QWORD[56+rsp]
  858. mov r15,QWORD[32+rsp]
  859. mov r12,r13
  860. ror r13,7
  861. add rcx,r14
  862. mov r14,r15
  863. ror r15,42
  864. xor r13,r12
  865. shr r12,7
  866. ror r13,1
  867. xor r15,r14
  868. shr r14,6
  869. ror r15,19
  870. xor r12,r13
  871. xor r15,r14
  872. add r12,QWORD[120+rsp]
  873. add r12,QWORD[48+rsp]
  874. mov r13,r10
  875. add r12,r15
  876. mov r14,rcx
  877. ror r13,23
  878. mov r15,r11
  879. xor r13,r10
  880. ror r14,5
  881. xor r15,rax
  882. mov QWORD[48+rsp],r12
  883. xor r14,rcx
  884. and r15,r10
  885. ror r13,4
  886. add r12,rbx
  887. xor r15,rax
  888. ror r14,6
  889. xor r13,r10
  890. add r12,r15
  891. mov r15,rcx
  892. add r12,QWORD[rbp]
  893. xor r14,rcx
  894. xor r15,rdx
  895. ror r13,14
  896. mov rbx,rdx
  897. and rdi,r15
  898. ror r14,28
  899. add r12,r13
  900. xor rbx,rdi
  901. add r9,r12
  902. add rbx,r12
  903. lea rbp,[8+rbp]
  904. mov r13,QWORD[64+rsp]
  905. mov rdi,QWORD[40+rsp]
  906. mov r12,r13
  907. ror r13,7
  908. add rbx,r14
  909. mov r14,rdi
  910. ror rdi,42
  911. xor r13,r12
  912. shr r12,7
  913. ror r13,1
  914. xor rdi,r14
  915. shr r14,6
  916. ror rdi,19
  917. xor r12,r13
  918. xor rdi,r14
  919. add r12,QWORD[rsp]
  920. add r12,QWORD[56+rsp]
  921. mov r13,r9
  922. add r12,rdi
  923. mov r14,rbx
  924. ror r13,23
  925. mov rdi,r10
  926. xor r13,r9
  927. ror r14,5
  928. xor rdi,r11
  929. mov QWORD[56+rsp],r12
  930. xor r14,rbx
  931. and rdi,r9
  932. ror r13,4
  933. add r12,rax
  934. xor rdi,r11
  935. ror r14,6
  936. xor r13,r9
  937. add r12,rdi
  938. mov rdi,rbx
  939. add r12,QWORD[rbp]
  940. xor r14,rbx
  941. xor rdi,rcx
  942. ror r13,14
  943. mov rax,rcx
  944. and r15,rdi
  945. ror r14,28
  946. add r12,r13
  947. xor rax,r15
  948. add r8,r12
  949. add rax,r12
  950. lea rbp,[24+rbp]
  951. mov r13,QWORD[72+rsp]
  952. mov r15,QWORD[48+rsp]
  953. mov r12,r13
  954. ror r13,7
  955. add rax,r14
  956. mov r14,r15
  957. ror r15,42
  958. xor r13,r12
  959. shr r12,7
  960. ror r13,1
  961. xor r15,r14
  962. shr r14,6
  963. ror r15,19
  964. xor r12,r13
  965. xor r15,r14
  966. add r12,QWORD[8+rsp]
  967. add r12,QWORD[64+rsp]
  968. mov r13,r8
  969. add r12,r15
  970. mov r14,rax
  971. ror r13,23
  972. mov r15,r9
  973. xor r13,r8
  974. ror r14,5
  975. xor r15,r10
  976. mov QWORD[64+rsp],r12
  977. xor r14,rax
  978. and r15,r8
  979. ror r13,4
  980. add r12,r11
  981. xor r15,r10
  982. ror r14,6
  983. xor r13,r8
  984. add r12,r15
  985. mov r15,rax
  986. add r12,QWORD[rbp]
  987. xor r14,rax
  988. xor r15,rbx
  989. ror r13,14
  990. mov r11,rbx
  991. and rdi,r15
  992. ror r14,28
  993. add r12,r13
  994. xor r11,rdi
  995. add rdx,r12
  996. add r11,r12
  997. lea rbp,[8+rbp]
  998. mov r13,QWORD[80+rsp]
  999. mov rdi,QWORD[56+rsp]
  1000. mov r12,r13
  1001. ror r13,7
  1002. add r11,r14
  1003. mov r14,rdi
  1004. ror rdi,42
  1005. xor r13,r12
  1006. shr r12,7
  1007. ror r13,1
  1008. xor rdi,r14
  1009. shr r14,6
  1010. ror rdi,19
  1011. xor r12,r13
  1012. xor rdi,r14
  1013. add r12,QWORD[16+rsp]
  1014. add r12,QWORD[72+rsp]
  1015. mov r13,rdx
  1016. add r12,rdi
  1017. mov r14,r11
  1018. ror r13,23
  1019. mov rdi,r8
  1020. xor r13,rdx
  1021. ror r14,5
  1022. xor rdi,r9
  1023. mov QWORD[72+rsp],r12
  1024. xor r14,r11
  1025. and rdi,rdx
  1026. ror r13,4
  1027. add r12,r10
  1028. xor rdi,r9
  1029. ror r14,6
  1030. xor r13,rdx
  1031. add r12,rdi
  1032. mov rdi,r11
  1033. add r12,QWORD[rbp]
  1034. xor r14,r11
  1035. xor rdi,rax
  1036. ror r13,14
  1037. mov r10,rax
  1038. and r15,rdi
  1039. ror r14,28
  1040. add r12,r13
  1041. xor r10,r15
  1042. add rcx,r12
  1043. add r10,r12
  1044. lea rbp,[24+rbp]
  1045. mov r13,QWORD[88+rsp]
  1046. mov r15,QWORD[64+rsp]
  1047. mov r12,r13
  1048. ror r13,7
  1049. add r10,r14
  1050. mov r14,r15
  1051. ror r15,42
  1052. xor r13,r12
  1053. shr r12,7
  1054. ror r13,1
  1055. xor r15,r14
  1056. shr r14,6
  1057. ror r15,19
  1058. xor r12,r13
  1059. xor r15,r14
  1060. add r12,QWORD[24+rsp]
  1061. add r12,QWORD[80+rsp]
  1062. mov r13,rcx
  1063. add r12,r15
  1064. mov r14,r10
  1065. ror r13,23
  1066. mov r15,rdx
  1067. xor r13,rcx
  1068. ror r14,5
  1069. xor r15,r8
  1070. mov QWORD[80+rsp],r12
  1071. xor r14,r10
  1072. and r15,rcx
  1073. ror r13,4
  1074. add r12,r9
  1075. xor r15,r8
  1076. ror r14,6
  1077. xor r13,rcx
  1078. add r12,r15
  1079. mov r15,r10
  1080. add r12,QWORD[rbp]
  1081. xor r14,r10
  1082. xor r15,r11
  1083. ror r13,14
  1084. mov r9,r11
  1085. and rdi,r15
  1086. ror r14,28
  1087. add r12,r13
  1088. xor r9,rdi
  1089. add rbx,r12
  1090. add r9,r12
  1091. lea rbp,[8+rbp]
  1092. mov r13,QWORD[96+rsp]
  1093. mov rdi,QWORD[72+rsp]
  1094. mov r12,r13
  1095. ror r13,7
  1096. add r9,r14
  1097. mov r14,rdi
  1098. ror rdi,42
  1099. xor r13,r12
  1100. shr r12,7
  1101. ror r13,1
  1102. xor rdi,r14
  1103. shr r14,6
  1104. ror rdi,19
  1105. xor r12,r13
  1106. xor rdi,r14
  1107. add r12,QWORD[32+rsp]
  1108. add r12,QWORD[88+rsp]
  1109. mov r13,rbx
  1110. add r12,rdi
  1111. mov r14,r9
  1112. ror r13,23
  1113. mov rdi,rcx
  1114. xor r13,rbx
  1115. ror r14,5
  1116. xor rdi,rdx
  1117. mov QWORD[88+rsp],r12
  1118. xor r14,r9
  1119. and rdi,rbx
  1120. ror r13,4
  1121. add r12,r8
  1122. xor rdi,rdx
  1123. ror r14,6
  1124. xor r13,rbx
  1125. add r12,rdi
  1126. mov rdi,r9
  1127. add r12,QWORD[rbp]
  1128. xor r14,r9
  1129. xor rdi,r10
  1130. ror r13,14
  1131. mov r8,r10
  1132. and r15,rdi
  1133. ror r14,28
  1134. add r12,r13
  1135. xor r8,r15
  1136. add rax,r12
  1137. add r8,r12
  1138. lea rbp,[24+rbp]
  1139. mov r13,QWORD[104+rsp]
  1140. mov r15,QWORD[80+rsp]
  1141. mov r12,r13
  1142. ror r13,7
  1143. add r8,r14
  1144. mov r14,r15
  1145. ror r15,42
  1146. xor r13,r12
  1147. shr r12,7
  1148. ror r13,1
  1149. xor r15,r14
  1150. shr r14,6
  1151. ror r15,19
  1152. xor r12,r13
  1153. xor r15,r14
  1154. add r12,QWORD[40+rsp]
  1155. add r12,QWORD[96+rsp]
  1156. mov r13,rax
  1157. add r12,r15
  1158. mov r14,r8
  1159. ror r13,23
  1160. mov r15,rbx
  1161. xor r13,rax
  1162. ror r14,5
  1163. xor r15,rcx
  1164. mov QWORD[96+rsp],r12
  1165. xor r14,r8
  1166. and r15,rax
  1167. ror r13,4
  1168. add r12,rdx
  1169. xor r15,rcx
  1170. ror r14,6
  1171. xor r13,rax
  1172. add r12,r15
  1173. mov r15,r8
  1174. add r12,QWORD[rbp]
  1175. xor r14,r8
  1176. xor r15,r9
  1177. ror r13,14
  1178. mov rdx,r9
  1179. and rdi,r15
  1180. ror r14,28
  1181. add r12,r13
  1182. xor rdx,rdi
  1183. add r11,r12
  1184. add rdx,r12
  1185. lea rbp,[8+rbp]
  1186. mov r13,QWORD[112+rsp]
  1187. mov rdi,QWORD[88+rsp]
  1188. mov r12,r13
  1189. ror r13,7
  1190. add rdx,r14
  1191. mov r14,rdi
  1192. ror rdi,42
  1193. xor r13,r12
  1194. shr r12,7
  1195. ror r13,1
  1196. xor rdi,r14
  1197. shr r14,6
  1198. ror rdi,19
  1199. xor r12,r13
  1200. xor rdi,r14
  1201. add r12,QWORD[48+rsp]
  1202. add r12,QWORD[104+rsp]
  1203. mov r13,r11
  1204. add r12,rdi
  1205. mov r14,rdx
  1206. ror r13,23
  1207. mov rdi,rax
  1208. xor r13,r11
  1209. ror r14,5
  1210. xor rdi,rbx
  1211. mov QWORD[104+rsp],r12
  1212. xor r14,rdx
  1213. and rdi,r11
  1214. ror r13,4
  1215. add r12,rcx
  1216. xor rdi,rbx
  1217. ror r14,6
  1218. xor r13,r11
  1219. add r12,rdi
  1220. mov rdi,rdx
  1221. add r12,QWORD[rbp]
  1222. xor r14,rdx
  1223. xor rdi,r8
  1224. ror r13,14
  1225. mov rcx,r8
  1226. and r15,rdi
  1227. ror r14,28
  1228. add r12,r13
  1229. xor rcx,r15
  1230. add r10,r12
  1231. add rcx,r12
  1232. lea rbp,[24+rbp]
  1233. mov r13,QWORD[120+rsp]
  1234. mov r15,QWORD[96+rsp]
  1235. mov r12,r13
  1236. ror r13,7
  1237. add rcx,r14
  1238. mov r14,r15
  1239. ror r15,42
  1240. xor r13,r12
  1241. shr r12,7
  1242. ror r13,1
  1243. xor r15,r14
  1244. shr r14,6
  1245. ror r15,19
  1246. xor r12,r13
  1247. xor r15,r14
  1248. add r12,QWORD[56+rsp]
  1249. add r12,QWORD[112+rsp]
  1250. mov r13,r10
  1251. add r12,r15
  1252. mov r14,rcx
  1253. ror r13,23
  1254. mov r15,r11
  1255. xor r13,r10
  1256. ror r14,5
  1257. xor r15,rax
  1258. mov QWORD[112+rsp],r12
  1259. xor r14,rcx
  1260. and r15,r10
  1261. ror r13,4
  1262. add r12,rbx
  1263. xor r15,rax
  1264. ror r14,6
  1265. xor r13,r10
  1266. add r12,r15
  1267. mov r15,rcx
  1268. add r12,QWORD[rbp]
  1269. xor r14,rcx
  1270. xor r15,rdx
  1271. ror r13,14
  1272. mov rbx,rdx
  1273. and rdi,r15
  1274. ror r14,28
  1275. add r12,r13
  1276. xor rbx,rdi
  1277. add r9,r12
  1278. add rbx,r12
  1279. lea rbp,[8+rbp]
  1280. mov r13,QWORD[rsp]
  1281. mov rdi,QWORD[104+rsp]
  1282. mov r12,r13
  1283. ror r13,7
  1284. add rbx,r14
  1285. mov r14,rdi
  1286. ror rdi,42
  1287. xor r13,r12
  1288. shr r12,7
  1289. ror r13,1
  1290. xor rdi,r14
  1291. shr r14,6
  1292. ror rdi,19
  1293. xor r12,r13
  1294. xor rdi,r14
  1295. add r12,QWORD[64+rsp]
  1296. add r12,QWORD[120+rsp]
  1297. mov r13,r9
  1298. add r12,rdi
  1299. mov r14,rbx
  1300. ror r13,23
  1301. mov rdi,r10
  1302. xor r13,r9
  1303. ror r14,5
  1304. xor rdi,r11
  1305. mov QWORD[120+rsp],r12
  1306. xor r14,rbx
  1307. and rdi,r9
  1308. ror r13,4
  1309. add r12,rax
  1310. xor rdi,r11
  1311. ror r14,6
  1312. xor r13,r9
  1313. add r12,rdi
  1314. mov rdi,rbx
  1315. add r12,QWORD[rbp]
  1316. xor r14,rbx
  1317. xor rdi,rcx
  1318. ror r13,14
  1319. mov rax,rcx
  1320. and r15,rdi
  1321. ror r14,28
  1322. add r12,r13
  1323. xor rax,r15
  1324. add r8,r12
  1325. add rax,r12
  1326. lea rbp,[24+rbp]
  1327. cmp BYTE[7+rbp],0
  1328. jnz NEAR $L$rounds_16_xx
  1329. mov rdi,QWORD[((128+0))+rsp]
  1330. add rax,r14
  1331. lea rsi,[128+rsi]
  1332. add rax,QWORD[rdi]
  1333. add rbx,QWORD[8+rdi]
  1334. add rcx,QWORD[16+rdi]
  1335. add rdx,QWORD[24+rdi]
  1336. add r8,QWORD[32+rdi]
  1337. add r9,QWORD[40+rdi]
  1338. add r10,QWORD[48+rdi]
  1339. add r11,QWORD[56+rdi]
  1340. cmp rsi,QWORD[((128+16))+rsp]
  1341. mov QWORD[rdi],rax
  1342. mov QWORD[8+rdi],rbx
  1343. mov QWORD[16+rdi],rcx
  1344. mov QWORD[24+rdi],rdx
  1345. mov QWORD[32+rdi],r8
  1346. mov QWORD[40+rdi],r9
  1347. mov QWORD[48+rdi],r10
  1348. mov QWORD[56+rdi],r11
  1349. jb NEAR $L$loop
  1350. mov rsi,QWORD[152+rsp]
  1351. mov r15,QWORD[((-48))+rsi]
  1352. mov r14,QWORD[((-40))+rsi]
  1353. mov r13,QWORD[((-32))+rsi]
  1354. mov r12,QWORD[((-24))+rsi]
  1355. mov rbp,QWORD[((-16))+rsi]
  1356. mov rbx,QWORD[((-8))+rsi]
  1357. lea rsp,[rsi]
  1358. $L$epilogue:
  1359. mov rdi,QWORD[8+rsp] ;WIN64 epilogue
  1360. mov rsi,QWORD[16+rsp]
  1361. DB 0F3h,0C3h ;repret
  1362. $L$SEH_end_sha512_block_data_order:
  1363. ALIGN 64
  1364. K512:
  1365. DQ 0x428a2f98d728ae22,0x7137449123ef65cd
  1366. DQ 0x428a2f98d728ae22,0x7137449123ef65cd
  1367. DQ 0xb5c0fbcfec4d3b2f,0xe9b5dba58189dbbc
  1368. DQ 0xb5c0fbcfec4d3b2f,0xe9b5dba58189dbbc
  1369. DQ 0x3956c25bf348b538,0x59f111f1b605d019
  1370. DQ 0x3956c25bf348b538,0x59f111f1b605d019
  1371. DQ 0x923f82a4af194f9b,0xab1c5ed5da6d8118
  1372. DQ 0x923f82a4af194f9b,0xab1c5ed5da6d8118
  1373. DQ 0xd807aa98a3030242,0x12835b0145706fbe
  1374. DQ 0xd807aa98a3030242,0x12835b0145706fbe
  1375. DQ 0x243185be4ee4b28c,0x550c7dc3d5ffb4e2
  1376. DQ 0x243185be4ee4b28c,0x550c7dc3d5ffb4e2
  1377. DQ 0x72be5d74f27b896f,0x80deb1fe3b1696b1
  1378. DQ 0x72be5d74f27b896f,0x80deb1fe3b1696b1
  1379. DQ 0x9bdc06a725c71235,0xc19bf174cf692694
  1380. DQ 0x9bdc06a725c71235,0xc19bf174cf692694
  1381. DQ 0xe49b69c19ef14ad2,0xefbe4786384f25e3
  1382. DQ 0xe49b69c19ef14ad2,0xefbe4786384f25e3
  1383. DQ 0x0fc19dc68b8cd5b5,0x240ca1cc77ac9c65
  1384. DQ 0x0fc19dc68b8cd5b5,0x240ca1cc77ac9c65
  1385. DQ 0x2de92c6f592b0275,0x4a7484aa6ea6e483
  1386. DQ 0x2de92c6f592b0275,0x4a7484aa6ea6e483
  1387. DQ 0x5cb0a9dcbd41fbd4,0x76f988da831153b5
  1388. DQ 0x5cb0a9dcbd41fbd4,0x76f988da831153b5
  1389. DQ 0x983e5152ee66dfab,0xa831c66d2db43210
  1390. DQ 0x983e5152ee66dfab,0xa831c66d2db43210
  1391. DQ 0xb00327c898fb213f,0xbf597fc7beef0ee4
  1392. DQ 0xb00327c898fb213f,0xbf597fc7beef0ee4
  1393. DQ 0xc6e00bf33da88fc2,0xd5a79147930aa725
  1394. DQ 0xc6e00bf33da88fc2,0xd5a79147930aa725
  1395. DQ 0x06ca6351e003826f,0x142929670a0e6e70
  1396. DQ 0x06ca6351e003826f,0x142929670a0e6e70
  1397. DQ 0x27b70a8546d22ffc,0x2e1b21385c26c926
  1398. DQ 0x27b70a8546d22ffc,0x2e1b21385c26c926
  1399. DQ 0x4d2c6dfc5ac42aed,0x53380d139d95b3df
  1400. DQ 0x4d2c6dfc5ac42aed,0x53380d139d95b3df
  1401. DQ 0x650a73548baf63de,0x766a0abb3c77b2a8
  1402. DQ 0x650a73548baf63de,0x766a0abb3c77b2a8
  1403. DQ 0x81c2c92e47edaee6,0x92722c851482353b
  1404. DQ 0x81c2c92e47edaee6,0x92722c851482353b
  1405. DQ 0xa2bfe8a14cf10364,0xa81a664bbc423001
  1406. DQ 0xa2bfe8a14cf10364,0xa81a664bbc423001
  1407. DQ 0xc24b8b70d0f89791,0xc76c51a30654be30
  1408. DQ 0xc24b8b70d0f89791,0xc76c51a30654be30
  1409. DQ 0xd192e819d6ef5218,0xd69906245565a910
  1410. DQ 0xd192e819d6ef5218,0xd69906245565a910
  1411. DQ 0xf40e35855771202a,0x106aa07032bbd1b8
  1412. DQ 0xf40e35855771202a,0x106aa07032bbd1b8
  1413. DQ 0x19a4c116b8d2d0c8,0x1e376c085141ab53
  1414. DQ 0x19a4c116b8d2d0c8,0x1e376c085141ab53
  1415. DQ 0x2748774cdf8eeb99,0x34b0bcb5e19b48a8
  1416. DQ 0x2748774cdf8eeb99,0x34b0bcb5e19b48a8
  1417. DQ 0x391c0cb3c5c95a63,0x4ed8aa4ae3418acb
  1418. DQ 0x391c0cb3c5c95a63,0x4ed8aa4ae3418acb
  1419. DQ 0x5b9cca4f7763e373,0x682e6ff3d6b2b8a3
  1420. DQ 0x5b9cca4f7763e373,0x682e6ff3d6b2b8a3
  1421. DQ 0x748f82ee5defb2fc,0x78a5636f43172f60
  1422. DQ 0x748f82ee5defb2fc,0x78a5636f43172f60
  1423. DQ 0x84c87814a1f0ab72,0x8cc702081a6439ec
  1424. DQ 0x84c87814a1f0ab72,0x8cc702081a6439ec
  1425. DQ 0x90befffa23631e28,0xa4506cebde82bde9
  1426. DQ 0x90befffa23631e28,0xa4506cebde82bde9
  1427. DQ 0xbef9a3f7b2c67915,0xc67178f2e372532b
  1428. DQ 0xbef9a3f7b2c67915,0xc67178f2e372532b
  1429. DQ 0xca273eceea26619c,0xd186b8c721c0c207
  1430. DQ 0xca273eceea26619c,0xd186b8c721c0c207
  1431. DQ 0xeada7dd6cde0eb1e,0xf57d4f7fee6ed178
  1432. DQ 0xeada7dd6cde0eb1e,0xf57d4f7fee6ed178
  1433. DQ 0x06f067aa72176fba,0x0a637dc5a2c898a6
  1434. DQ 0x06f067aa72176fba,0x0a637dc5a2c898a6
  1435. DQ 0x113f9804bef90dae,0x1b710b35131c471b
  1436. DQ 0x113f9804bef90dae,0x1b710b35131c471b
  1437. DQ 0x28db77f523047d84,0x32caab7b40c72493
  1438. DQ 0x28db77f523047d84,0x32caab7b40c72493
  1439. DQ 0x3c9ebe0a15c9bebc,0x431d67c49c100d4c
  1440. DQ 0x3c9ebe0a15c9bebc,0x431d67c49c100d4c
  1441. DQ 0x4cc5d4becb3e42b6,0x597f299cfc657e2a
  1442. DQ 0x4cc5d4becb3e42b6,0x597f299cfc657e2a
  1443. DQ 0x5fcb6fab3ad6faec,0x6c44198c4a475817
  1444. DQ 0x5fcb6fab3ad6faec,0x6c44198c4a475817
  1445. DQ 0x0001020304050607,0x08090a0b0c0d0e0f
  1446. DQ 0x0001020304050607,0x08090a0b0c0d0e0f
  1447. DB 83,72,65,53,49,50,32,98,108,111,99,107,32,116,114,97
  1448. DB 110,115,102,111,114,109,32,102,111,114,32,120,56,54,95,54
  1449. DB 52,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121
  1450. DB 32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46
  1451. DB 111,114,103,62,0
  1452. ALIGN 64
  1453. sha512_block_data_order_avx:
  1454. mov QWORD[8+rsp],rdi ;WIN64 prologue
  1455. mov QWORD[16+rsp],rsi
  1456. mov rax,rsp
  1457. $L$SEH_begin_sha512_block_data_order_avx:
  1458. mov rdi,rcx
  1459. mov rsi,rdx
  1460. mov rdx,r8
  1461. $L$avx_shortcut:
  1462. mov rax,rsp
  1463. push rbx
  1464. push rbp
  1465. push r12
  1466. push r13
  1467. push r14
  1468. push r15
  1469. shl rdx,4
  1470. sub rsp,256
  1471. lea rdx,[rdx*8+rsi]
  1472. and rsp,-64
  1473. mov QWORD[((128+0))+rsp],rdi
  1474. mov QWORD[((128+8))+rsp],rsi
  1475. mov QWORD[((128+16))+rsp],rdx
  1476. mov QWORD[152+rsp],rax
  1477. movaps XMMWORD[(128+32)+rsp],xmm6
  1478. movaps XMMWORD[(128+48)+rsp],xmm7
  1479. movaps XMMWORD[(128+64)+rsp],xmm8
  1480. movaps XMMWORD[(128+80)+rsp],xmm9
  1481. movaps XMMWORD[(128+96)+rsp],xmm10
  1482. movaps XMMWORD[(128+112)+rsp],xmm11
  1483. $L$prologue_avx:
  1484. vzeroupper
  1485. mov rax,QWORD[rdi]
  1486. mov rbx,QWORD[8+rdi]
  1487. mov rcx,QWORD[16+rdi]
  1488. mov rdx,QWORD[24+rdi]
  1489. mov r8,QWORD[32+rdi]
  1490. mov r9,QWORD[40+rdi]
  1491. mov r10,QWORD[48+rdi]
  1492. mov r11,QWORD[56+rdi]
  1493. jmp NEAR $L$loop_avx
  1494. ALIGN 16
  1495. $L$loop_avx:
  1496. vmovdqa xmm11,XMMWORD[((K512+1280))]
  1497. vmovdqu xmm0,XMMWORD[rsi]
  1498. lea rbp,[((K512+128))]
  1499. vmovdqu xmm1,XMMWORD[16+rsi]
  1500. vmovdqu xmm2,XMMWORD[32+rsi]
  1501. vpshufb xmm0,xmm0,xmm11
  1502. vmovdqu xmm3,XMMWORD[48+rsi]
  1503. vpshufb xmm1,xmm1,xmm11
  1504. vmovdqu xmm4,XMMWORD[64+rsi]
  1505. vpshufb xmm2,xmm2,xmm11
  1506. vmovdqu xmm5,XMMWORD[80+rsi]
  1507. vpshufb xmm3,xmm3,xmm11
  1508. vmovdqu xmm6,XMMWORD[96+rsi]
  1509. vpshufb xmm4,xmm4,xmm11
  1510. vmovdqu xmm7,XMMWORD[112+rsi]
  1511. vpshufb xmm5,xmm5,xmm11
  1512. vpaddq xmm8,xmm0,XMMWORD[((-128))+rbp]
  1513. vpshufb xmm6,xmm6,xmm11
  1514. vpaddq xmm9,xmm1,XMMWORD[((-96))+rbp]
  1515. vpshufb xmm7,xmm7,xmm11
  1516. vpaddq xmm10,xmm2,XMMWORD[((-64))+rbp]
  1517. vpaddq xmm11,xmm3,XMMWORD[((-32))+rbp]
  1518. vmovdqa XMMWORD[rsp],xmm8
  1519. vpaddq xmm8,xmm4,XMMWORD[rbp]
  1520. vmovdqa XMMWORD[16+rsp],xmm9
  1521. vpaddq xmm9,xmm5,XMMWORD[32+rbp]
  1522. vmovdqa XMMWORD[32+rsp],xmm10
  1523. vpaddq xmm10,xmm6,XMMWORD[64+rbp]
  1524. vmovdqa XMMWORD[48+rsp],xmm11
  1525. vpaddq xmm11,xmm7,XMMWORD[96+rbp]
  1526. vmovdqa XMMWORD[64+rsp],xmm8
  1527. mov r14,rax
  1528. vmovdqa XMMWORD[80+rsp],xmm9
  1529. mov rdi,rbx
  1530. vmovdqa XMMWORD[96+rsp],xmm10
  1531. xor rdi,rcx
  1532. vmovdqa XMMWORD[112+rsp],xmm11
  1533. mov r13,r8
  1534. jmp NEAR $L$avx_00_47
  1535. ALIGN 16
  1536. $L$avx_00_47:
  1537. add rbp,256
  1538. vpalignr xmm8,xmm1,xmm0,8
  1539. shrd r13,r13,23
  1540. mov rax,r14
  1541. vpalignr xmm11,xmm5,xmm4,8
  1542. mov r12,r9
  1543. shrd r14,r14,5
  1544. vpsrlq xmm10,xmm8,1
  1545. xor r13,r8
  1546. xor r12,r10
  1547. vpaddq xmm0,xmm0,xmm11
  1548. shrd r13,r13,4
  1549. xor r14,rax
  1550. vpsrlq xmm11,xmm8,7
  1551. and r12,r8
  1552. xor r13,r8
  1553. vpsllq xmm9,xmm8,56
  1554. add r11,QWORD[rsp]
  1555. mov r15,rax
  1556. vpxor xmm8,xmm11,xmm10
  1557. xor r12,r10
  1558. shrd r14,r14,6
  1559. vpsrlq xmm10,xmm10,7
  1560. xor r15,rbx
  1561. add r11,r12
  1562. vpxor xmm8,xmm8,xmm9
  1563. shrd r13,r13,14
  1564. and rdi,r15
  1565. vpsllq xmm9,xmm9,7
  1566. xor r14,rax
  1567. add r11,r13
  1568. vpxor xmm8,xmm8,xmm10
  1569. xor rdi,rbx
  1570. shrd r14,r14,28
  1571. vpsrlq xmm11,xmm7,6
  1572. add rdx,r11
  1573. add r11,rdi
  1574. vpxor xmm8,xmm8,xmm9
  1575. mov r13,rdx
  1576. add r14,r11
  1577. vpsllq xmm10,xmm7,3
  1578. shrd r13,r13,23
  1579. mov r11,r14
  1580. vpaddq xmm0,xmm0,xmm8
  1581. mov r12,r8
  1582. shrd r14,r14,5
  1583. vpsrlq xmm9,xmm7,19
  1584. xor r13,rdx
  1585. xor r12,r9
  1586. vpxor xmm11,xmm11,xmm10
  1587. shrd r13,r13,4
  1588. xor r14,r11
  1589. vpsllq xmm10,xmm10,42
  1590. and r12,rdx
  1591. xor r13,rdx
  1592. vpxor xmm11,xmm11,xmm9
  1593. add r10,QWORD[8+rsp]
  1594. mov rdi,r11
  1595. vpsrlq xmm9,xmm9,42
  1596. xor r12,r9
  1597. shrd r14,r14,6
  1598. vpxor xmm11,xmm11,xmm10
  1599. xor rdi,rax
  1600. add r10,r12
  1601. vpxor xmm11,xmm11,xmm9
  1602. shrd r13,r13,14
  1603. and r15,rdi
  1604. vpaddq xmm0,xmm0,xmm11
  1605. xor r14,r11
  1606. add r10,r13
  1607. vpaddq xmm10,xmm0,XMMWORD[((-128))+rbp]
  1608. xor r15,rax
  1609. shrd r14,r14,28
  1610. add rcx,r10
  1611. add r10,r15
  1612. mov r13,rcx
  1613. add r14,r10
  1614. vmovdqa XMMWORD[rsp],xmm10
  1615. vpalignr xmm8,xmm2,xmm1,8
  1616. shrd r13,r13,23
  1617. mov r10,r14
  1618. vpalignr xmm11,xmm6,xmm5,8
  1619. mov r12,rdx
  1620. shrd r14,r14,5
  1621. vpsrlq xmm10,xmm8,1
  1622. xor r13,rcx
  1623. xor r12,r8
  1624. vpaddq xmm1,xmm1,xmm11
  1625. shrd r13,r13,4
  1626. xor r14,r10
  1627. vpsrlq xmm11,xmm8,7
  1628. and r12,rcx
  1629. xor r13,rcx
  1630. vpsllq xmm9,xmm8,56
  1631. add r9,QWORD[16+rsp]
  1632. mov r15,r10
  1633. vpxor xmm8,xmm11,xmm10
  1634. xor r12,r8
  1635. shrd r14,r14,6
  1636. vpsrlq xmm10,xmm10,7
  1637. xor r15,r11
  1638. add r9,r12
  1639. vpxor xmm8,xmm8,xmm9
  1640. shrd r13,r13,14
  1641. and rdi,r15
  1642. vpsllq xmm9,xmm9,7
  1643. xor r14,r10
  1644. add r9,r13
  1645. vpxor xmm8,xmm8,xmm10
  1646. xor rdi,r11
  1647. shrd r14,r14,28
  1648. vpsrlq xmm11,xmm0,6
  1649. add rbx,r9
  1650. add r9,rdi
  1651. vpxor xmm8,xmm8,xmm9
  1652. mov r13,rbx
  1653. add r14,r9
  1654. vpsllq xmm10,xmm0,3
  1655. shrd r13,r13,23
  1656. mov r9,r14
  1657. vpaddq xmm1,xmm1,xmm8
  1658. mov r12,rcx
  1659. shrd r14,r14,5
  1660. vpsrlq xmm9,xmm0,19
  1661. xor r13,rbx
  1662. xor r12,rdx
  1663. vpxor xmm11,xmm11,xmm10
  1664. shrd r13,r13,4
  1665. xor r14,r9
  1666. vpsllq xmm10,xmm10,42
  1667. and r12,rbx
  1668. xor r13,rbx
  1669. vpxor xmm11,xmm11,xmm9
  1670. add r8,QWORD[24+rsp]
  1671. mov rdi,r9
  1672. vpsrlq xmm9,xmm9,42
  1673. xor r12,rdx
  1674. shrd r14,r14,6
  1675. vpxor xmm11,xmm11,xmm10
  1676. xor rdi,r10
  1677. add r8,r12
  1678. vpxor xmm11,xmm11,xmm9
  1679. shrd r13,r13,14
  1680. and r15,rdi
  1681. vpaddq xmm1,xmm1,xmm11
  1682. xor r14,r9
  1683. add r8,r13
  1684. vpaddq xmm10,xmm1,XMMWORD[((-96))+rbp]
  1685. xor r15,r10
  1686. shrd r14,r14,28
  1687. add rax,r8
  1688. add r8,r15
  1689. mov r13,rax
  1690. add r14,r8
  1691. vmovdqa XMMWORD[16+rsp],xmm10
  1692. vpalignr xmm8,xmm3,xmm2,8
  1693. shrd r13,r13,23
  1694. mov r8,r14
  1695. vpalignr xmm11,xmm7,xmm6,8
  1696. mov r12,rbx
  1697. shrd r14,r14,5
  1698. vpsrlq xmm10,xmm8,1
  1699. xor r13,rax
  1700. xor r12,rcx
  1701. vpaddq xmm2,xmm2,xmm11
  1702. shrd r13,r13,4
  1703. xor r14,r8
  1704. vpsrlq xmm11,xmm8,7
  1705. and r12,rax
  1706. xor r13,rax
  1707. vpsllq xmm9,xmm8,56
  1708. add rdx,QWORD[32+rsp]
  1709. mov r15,r8
  1710. vpxor xmm8,xmm11,xmm10
  1711. xor r12,rcx
  1712. shrd r14,r14,6
  1713. vpsrlq xmm10,xmm10,7
  1714. xor r15,r9
  1715. add rdx,r12
  1716. vpxor xmm8,xmm8,xmm9
  1717. shrd r13,r13,14
  1718. and rdi,r15
  1719. vpsllq xmm9,xmm9,7
  1720. xor r14,r8
  1721. add rdx,r13
  1722. vpxor xmm8,xmm8,xmm10
  1723. xor rdi,r9
  1724. shrd r14,r14,28
  1725. vpsrlq xmm11,xmm1,6
  1726. add r11,rdx
  1727. add rdx,rdi
  1728. vpxor xmm8,xmm8,xmm9
  1729. mov r13,r11
  1730. add r14,rdx
  1731. vpsllq xmm10,xmm1,3
  1732. shrd r13,r13,23
  1733. mov rdx,r14
  1734. vpaddq xmm2,xmm2,xmm8
  1735. mov r12,rax
  1736. shrd r14,r14,5
  1737. vpsrlq xmm9,xmm1,19
  1738. xor r13,r11
  1739. xor r12,rbx
  1740. vpxor xmm11,xmm11,xmm10
  1741. shrd r13,r13,4
  1742. xor r14,rdx
  1743. vpsllq xmm10,xmm10,42
  1744. and r12,r11
  1745. xor r13,r11
  1746. vpxor xmm11,xmm11,xmm9
  1747. add rcx,QWORD[40+rsp]
  1748. mov rdi,rdx
  1749. vpsrlq xmm9,xmm9,42
  1750. xor r12,rbx
  1751. shrd r14,r14,6
  1752. vpxor xmm11,xmm11,xmm10
  1753. xor rdi,r8
  1754. add rcx,r12
  1755. vpxor xmm11,xmm11,xmm9
  1756. shrd r13,r13,14
  1757. and r15,rdi
  1758. vpaddq xmm2,xmm2,xmm11
  1759. xor r14,rdx
  1760. add rcx,r13
  1761. vpaddq xmm10,xmm2,XMMWORD[((-64))+rbp]
  1762. xor r15,r8
  1763. shrd r14,r14,28
  1764. add r10,rcx
  1765. add rcx,r15
  1766. mov r13,r10
  1767. add r14,rcx
  1768. vmovdqa XMMWORD[32+rsp],xmm10
  1769. vpalignr xmm8,xmm4,xmm3,8
  1770. shrd r13,r13,23
  1771. mov rcx,r14
  1772. vpalignr xmm11,xmm0,xmm7,8
  1773. mov r12,r11
  1774. shrd r14,r14,5
  1775. vpsrlq xmm10,xmm8,1
  1776. xor r13,r10
  1777. xor r12,rax
  1778. vpaddq xmm3,xmm3,xmm11
  1779. shrd r13,r13,4
  1780. xor r14,rcx
  1781. vpsrlq xmm11,xmm8,7
  1782. and r12,r10
  1783. xor r13,r10
  1784. vpsllq xmm9,xmm8,56
  1785. add rbx,QWORD[48+rsp]
  1786. mov r15,rcx
  1787. vpxor xmm8,xmm11,xmm10
  1788. xor r12,rax
  1789. shrd r14,r14,6
  1790. vpsrlq xmm10,xmm10,7
  1791. xor r15,rdx
  1792. add rbx,r12
  1793. vpxor xmm8,xmm8,xmm9
  1794. shrd r13,r13,14
  1795. and rdi,r15
  1796. vpsllq xmm9,xmm9,7
  1797. xor r14,rcx
  1798. add rbx,r13
  1799. vpxor xmm8,xmm8,xmm10
  1800. xor rdi,rdx
  1801. shrd r14,r14,28
  1802. vpsrlq xmm11,xmm2,6
  1803. add r9,rbx
  1804. add rbx,rdi
  1805. vpxor xmm8,xmm8,xmm9
  1806. mov r13,r9
  1807. add r14,rbx
  1808. vpsllq xmm10,xmm2,3
  1809. shrd r13,r13,23
  1810. mov rbx,r14
  1811. vpaddq xmm3,xmm3,xmm8
  1812. mov r12,r10
  1813. shrd r14,r14,5
  1814. vpsrlq xmm9,xmm2,19
  1815. xor r13,r9
  1816. xor r12,r11
  1817. vpxor xmm11,xmm11,xmm10
  1818. shrd r13,r13,4
  1819. xor r14,rbx
  1820. vpsllq xmm10,xmm10,42
  1821. and r12,r9
  1822. xor r13,r9
  1823. vpxor xmm11,xmm11,xmm9
  1824. add rax,QWORD[56+rsp]
  1825. mov rdi,rbx
  1826. vpsrlq xmm9,xmm9,42
  1827. xor r12,r11
  1828. shrd r14,r14,6
  1829. vpxor xmm11,xmm11,xmm10
  1830. xor rdi,rcx
  1831. add rax,r12
  1832. vpxor xmm11,xmm11,xmm9
  1833. shrd r13,r13,14
  1834. and r15,rdi
  1835. vpaddq xmm3,xmm3,xmm11
  1836. xor r14,rbx
  1837. add rax,r13
  1838. vpaddq xmm10,xmm3,XMMWORD[((-32))+rbp]
  1839. xor r15,rcx
  1840. shrd r14,r14,28
  1841. add r8,rax
  1842. add rax,r15
  1843. mov r13,r8
  1844. add r14,rax
  1845. vmovdqa XMMWORD[48+rsp],xmm10
  1846. vpalignr xmm8,xmm5,xmm4,8
  1847. shrd r13,r13,23
  1848. mov rax,r14
  1849. vpalignr xmm11,xmm1,xmm0,8
  1850. mov r12,r9
  1851. shrd r14,r14,5
  1852. vpsrlq xmm10,xmm8,1
  1853. xor r13,r8
  1854. xor r12,r10
  1855. vpaddq xmm4,xmm4,xmm11
  1856. shrd r13,r13,4
  1857. xor r14,rax
  1858. vpsrlq xmm11,xmm8,7
  1859. and r12,r8
  1860. xor r13,r8
  1861. vpsllq xmm9,xmm8,56
  1862. add r11,QWORD[64+rsp]
  1863. mov r15,rax
  1864. vpxor xmm8,xmm11,xmm10
  1865. xor r12,r10
  1866. shrd r14,r14,6
  1867. vpsrlq xmm10,xmm10,7
  1868. xor r15,rbx
  1869. add r11,r12
  1870. vpxor xmm8,xmm8,xmm9
  1871. shrd r13,r13,14
  1872. and rdi,r15
  1873. vpsllq xmm9,xmm9,7
  1874. xor r14,rax
  1875. add r11,r13
  1876. vpxor xmm8,xmm8,xmm10
  1877. xor rdi,rbx
  1878. shrd r14,r14,28
  1879. vpsrlq xmm11,xmm3,6
  1880. add rdx,r11
  1881. add r11,rdi
  1882. vpxor xmm8,xmm8,xmm9
  1883. mov r13,rdx
  1884. add r14,r11
  1885. vpsllq xmm10,xmm3,3
  1886. shrd r13,r13,23
  1887. mov r11,r14
  1888. vpaddq xmm4,xmm4,xmm8
  1889. mov r12,r8
  1890. shrd r14,r14,5
  1891. vpsrlq xmm9,xmm3,19
  1892. xor r13,rdx
  1893. xor r12,r9
  1894. vpxor xmm11,xmm11,xmm10
  1895. shrd r13,r13,4
  1896. xor r14,r11
  1897. vpsllq xmm10,xmm10,42
  1898. and r12,rdx
  1899. xor r13,rdx
  1900. vpxor xmm11,xmm11,xmm9
  1901. add r10,QWORD[72+rsp]
  1902. mov rdi,r11
  1903. vpsrlq xmm9,xmm9,42
  1904. xor r12,r9
  1905. shrd r14,r14,6
  1906. vpxor xmm11,xmm11,xmm10
  1907. xor rdi,rax
  1908. add r10,r12
  1909. vpxor xmm11,xmm11,xmm9
  1910. shrd r13,r13,14
  1911. and r15,rdi
  1912. vpaddq xmm4,xmm4,xmm11
  1913. xor r14,r11
  1914. add r10,r13
  1915. vpaddq xmm10,xmm4,XMMWORD[rbp]
  1916. xor r15,rax
  1917. shrd r14,r14,28
  1918. add rcx,r10
  1919. add r10,r15
  1920. mov r13,rcx
  1921. add r14,r10
  1922. vmovdqa XMMWORD[64+rsp],xmm10
  1923. vpalignr xmm8,xmm6,xmm5,8
  1924. shrd r13,r13,23
  1925. mov r10,r14
  1926. vpalignr xmm11,xmm2,xmm1,8
  1927. mov r12,rdx
  1928. shrd r14,r14,5
  1929. vpsrlq xmm10,xmm8,1
  1930. xor r13,rcx
  1931. xor r12,r8
  1932. vpaddq xmm5,xmm5,xmm11
  1933. shrd r13,r13,4
  1934. xor r14,r10
  1935. vpsrlq xmm11,xmm8,7
  1936. and r12,rcx
  1937. xor r13,rcx
  1938. vpsllq xmm9,xmm8,56
  1939. add r9,QWORD[80+rsp]
  1940. mov r15,r10
  1941. vpxor xmm8,xmm11,xmm10
  1942. xor r12,r8
  1943. shrd r14,r14,6
  1944. vpsrlq xmm10,xmm10,7
  1945. xor r15,r11
  1946. add r9,r12
  1947. vpxor xmm8,xmm8,xmm9
  1948. shrd r13,r13,14
  1949. and rdi,r15
  1950. vpsllq xmm9,xmm9,7
  1951. xor r14,r10
  1952. add r9,r13
  1953. vpxor xmm8,xmm8,xmm10
  1954. xor rdi,r11
  1955. shrd r14,r14,28
  1956. vpsrlq xmm11,xmm4,6
  1957. add rbx,r9
  1958. add r9,rdi
  1959. vpxor xmm8,xmm8,xmm9
  1960. mov r13,rbx
  1961. add r14,r9
  1962. vpsllq xmm10,xmm4,3
  1963. shrd r13,r13,23
  1964. mov r9,r14
  1965. vpaddq xmm5,xmm5,xmm8
  1966. mov r12,rcx
  1967. shrd r14,r14,5
  1968. vpsrlq xmm9,xmm4,19
  1969. xor r13,rbx
  1970. xor r12,rdx
  1971. vpxor xmm11,xmm11,xmm10
  1972. shrd r13,r13,4
  1973. xor r14,r9
  1974. vpsllq xmm10,xmm10,42
  1975. and r12,rbx
  1976. xor r13,rbx
  1977. vpxor xmm11,xmm11,xmm9
  1978. add r8,QWORD[88+rsp]
  1979. mov rdi,r9
  1980. vpsrlq xmm9,xmm9,42
  1981. xor r12,rdx
  1982. shrd r14,r14,6
  1983. vpxor xmm11,xmm11,xmm10
  1984. xor rdi,r10
  1985. add r8,r12
  1986. vpxor xmm11,xmm11,xmm9
  1987. shrd r13,r13,14
  1988. and r15,rdi
  1989. vpaddq xmm5,xmm5,xmm11
  1990. xor r14,r9
  1991. add r8,r13
  1992. vpaddq xmm10,xmm5,XMMWORD[32+rbp]
  1993. xor r15,r10
  1994. shrd r14,r14,28
  1995. add rax,r8
  1996. add r8,r15
  1997. mov r13,rax
  1998. add r14,r8
  1999. vmovdqa XMMWORD[80+rsp],xmm10
  2000. vpalignr xmm8,xmm7,xmm6,8
  2001. shrd r13,r13,23
  2002. mov r8,r14
  2003. vpalignr xmm11,xmm3,xmm2,8
  2004. mov r12,rbx
  2005. shrd r14,r14,5
  2006. vpsrlq xmm10,xmm8,1
  2007. xor r13,rax
  2008. xor r12,rcx
  2009. vpaddq xmm6,xmm6,xmm11
  2010. shrd r13,r13,4
  2011. xor r14,r8
  2012. vpsrlq xmm11,xmm8,7
  2013. and r12,rax
  2014. xor r13,rax
  2015. vpsllq xmm9,xmm8,56
  2016. add rdx,QWORD[96+rsp]
  2017. mov r15,r8
  2018. vpxor xmm8,xmm11,xmm10
  2019. xor r12,rcx
  2020. shrd r14,r14,6
  2021. vpsrlq xmm10,xmm10,7
  2022. xor r15,r9
  2023. add rdx,r12
  2024. vpxor xmm8,xmm8,xmm9
  2025. shrd r13,r13,14
  2026. and rdi,r15
  2027. vpsllq xmm9,xmm9,7
  2028. xor r14,r8
  2029. add rdx,r13
  2030. vpxor xmm8,xmm8,xmm10
  2031. xor rdi,r9
  2032. shrd r14,r14,28
  2033. vpsrlq xmm11,xmm5,6
  2034. add r11,rdx
  2035. add rdx,rdi
  2036. vpxor xmm8,xmm8,xmm9
  2037. mov r13,r11
  2038. add r14,rdx
  2039. vpsllq xmm10,xmm5,3
  2040. shrd r13,r13,23
  2041. mov rdx,r14
  2042. vpaddq xmm6,xmm6,xmm8
  2043. mov r12,rax
  2044. shrd r14,r14,5
  2045. vpsrlq xmm9,xmm5,19
  2046. xor r13,r11
  2047. xor r12,rbx
  2048. vpxor xmm11,xmm11,xmm10
  2049. shrd r13,r13,4
  2050. xor r14,rdx
  2051. vpsllq xmm10,xmm10,42
  2052. and r12,r11
  2053. xor r13,r11
  2054. vpxor xmm11,xmm11,xmm9
  2055. add rcx,QWORD[104+rsp]
  2056. mov rdi,rdx
  2057. vpsrlq xmm9,xmm9,42
  2058. xor r12,rbx
  2059. shrd r14,r14,6
  2060. vpxor xmm11,xmm11,xmm10
  2061. xor rdi,r8
  2062. add rcx,r12
  2063. vpxor xmm11,xmm11,xmm9
  2064. shrd r13,r13,14
  2065. and r15,rdi
  2066. vpaddq xmm6,xmm6,xmm11
  2067. xor r14,rdx
  2068. add rcx,r13
  2069. vpaddq xmm10,xmm6,XMMWORD[64+rbp]
  2070. xor r15,r8
  2071. shrd r14,r14,28
  2072. add r10,rcx
  2073. add rcx,r15
  2074. mov r13,r10
  2075. add r14,rcx
  2076. vmovdqa XMMWORD[96+rsp],xmm10
  2077. vpalignr xmm8,xmm0,xmm7,8
  2078. shrd r13,r13,23
  2079. mov rcx,r14
  2080. vpalignr xmm11,xmm4,xmm3,8
  2081. mov r12,r11
  2082. shrd r14,r14,5
  2083. vpsrlq xmm10,xmm8,1
  2084. xor r13,r10
  2085. xor r12,rax
  2086. vpaddq xmm7,xmm7,xmm11
  2087. shrd r13,r13,4
  2088. xor r14,rcx
  2089. vpsrlq xmm11,xmm8,7
  2090. and r12,r10
  2091. xor r13,r10
  2092. vpsllq xmm9,xmm8,56
  2093. add rbx,QWORD[112+rsp]
  2094. mov r15,rcx
  2095. vpxor xmm8,xmm11,xmm10
  2096. xor r12,rax
  2097. shrd r14,r14,6
  2098. vpsrlq xmm10,xmm10,7
  2099. xor r15,rdx
  2100. add rbx,r12
  2101. vpxor xmm8,xmm8,xmm9
  2102. shrd r13,r13,14
  2103. and rdi,r15
  2104. vpsllq xmm9,xmm9,7
  2105. xor r14,rcx
  2106. add rbx,r13
  2107. vpxor xmm8,xmm8,xmm10
  2108. xor rdi,rdx
  2109. shrd r14,r14,28
  2110. vpsrlq xmm11,xmm6,6
  2111. add r9,rbx
  2112. add rbx,rdi
  2113. vpxor xmm8,xmm8,xmm9
  2114. mov r13,r9
  2115. add r14,rbx
  2116. vpsllq xmm10,xmm6,3
  2117. shrd r13,r13,23
  2118. mov rbx,r14
  2119. vpaddq xmm7,xmm7,xmm8
  2120. mov r12,r10
  2121. shrd r14,r14,5
  2122. vpsrlq xmm9,xmm6,19
  2123. xor r13,r9
  2124. xor r12,r11
  2125. vpxor xmm11,xmm11,xmm10
  2126. shrd r13,r13,4
  2127. xor r14,rbx
  2128. vpsllq xmm10,xmm10,42
  2129. and r12,r9
  2130. xor r13,r9
  2131. vpxor xmm11,xmm11,xmm9
  2132. add rax,QWORD[120+rsp]
  2133. mov rdi,rbx
  2134. vpsrlq xmm9,xmm9,42
  2135. xor r12,r11
  2136. shrd r14,r14,6
  2137. vpxor xmm11,xmm11,xmm10
  2138. xor rdi,rcx
  2139. add rax,r12
  2140. vpxor xmm11,xmm11,xmm9
  2141. shrd r13,r13,14
  2142. and r15,rdi
  2143. vpaddq xmm7,xmm7,xmm11
  2144. xor r14,rbx
  2145. add rax,r13
  2146. vpaddq xmm10,xmm7,XMMWORD[96+rbp]
  2147. xor r15,rcx
  2148. shrd r14,r14,28
  2149. add r8,rax
  2150. add rax,r15
  2151. mov r13,r8
  2152. add r14,rax
  2153. vmovdqa XMMWORD[112+rsp],xmm10
  2154. cmp BYTE[135+rbp],0
  2155. jne NEAR $L$avx_00_47
  2156. shrd r13,r13,23
  2157. mov rax,r14
  2158. mov r12,r9
  2159. shrd r14,r14,5
  2160. xor r13,r8
  2161. xor r12,r10
  2162. shrd r13,r13,4
  2163. xor r14,rax
  2164. and r12,r8
  2165. xor r13,r8
  2166. add r11,QWORD[rsp]
  2167. mov r15,rax
  2168. xor r12,r10
  2169. shrd r14,r14,6
  2170. xor r15,rbx
  2171. add r11,r12
  2172. shrd r13,r13,14
  2173. and rdi,r15
  2174. xor r14,rax
  2175. add r11,r13
  2176. xor rdi,rbx
  2177. shrd r14,r14,28
  2178. add rdx,r11
  2179. add r11,rdi
  2180. mov r13,rdx
  2181. add r14,r11
  2182. shrd r13,r13,23
  2183. mov r11,r14
  2184. mov r12,r8
  2185. shrd r14,r14,5
  2186. xor r13,rdx
  2187. xor r12,r9
  2188. shrd r13,r13,4
  2189. xor r14,r11
  2190. and r12,rdx
  2191. xor r13,rdx
  2192. add r10,QWORD[8+rsp]
  2193. mov rdi,r11
  2194. xor r12,r9
  2195. shrd r14,r14,6
  2196. xor rdi,rax
  2197. add r10,r12
  2198. shrd r13,r13,14
  2199. and r15,rdi
  2200. xor r14,r11
  2201. add r10,r13
  2202. xor r15,rax
  2203. shrd r14,r14,28
  2204. add rcx,r10
  2205. add r10,r15
  2206. mov r13,rcx
  2207. add r14,r10
  2208. shrd r13,r13,23
  2209. mov r10,r14
  2210. mov r12,rdx
  2211. shrd r14,r14,5
  2212. xor r13,rcx
  2213. xor r12,r8
  2214. shrd r13,r13,4
  2215. xor r14,r10
  2216. and r12,rcx
  2217. xor r13,rcx
  2218. add r9,QWORD[16+rsp]
  2219. mov r15,r10
  2220. xor r12,r8
  2221. shrd r14,r14,6
  2222. xor r15,r11
  2223. add r9,r12
  2224. shrd r13,r13,14
  2225. and rdi,r15
  2226. xor r14,r10
  2227. add r9,r13
  2228. xor rdi,r11
  2229. shrd r14,r14,28
  2230. add rbx,r9
  2231. add r9,rdi
  2232. mov r13,rbx
  2233. add r14,r9
  2234. shrd r13,r13,23
  2235. mov r9,r14
  2236. mov r12,rcx
  2237. shrd r14,r14,5
  2238. xor r13,rbx
  2239. xor r12,rdx
  2240. shrd r13,r13,4
  2241. xor r14,r9
  2242. and r12,rbx
  2243. xor r13,rbx
  2244. add r8,QWORD[24+rsp]
  2245. mov rdi,r9
  2246. xor r12,rdx
  2247. shrd r14,r14,6
  2248. xor rdi,r10
  2249. add r8,r12
  2250. shrd r13,r13,14
  2251. and r15,rdi
  2252. xor r14,r9
  2253. add r8,r13
  2254. xor r15,r10
  2255. shrd r14,r14,28
  2256. add rax,r8
  2257. add r8,r15
  2258. mov r13,rax
  2259. add r14,r8
  2260. shrd r13,r13,23
  2261. mov r8,r14
  2262. mov r12,rbx
  2263. shrd r14,r14,5
  2264. xor r13,rax
  2265. xor r12,rcx
  2266. shrd r13,r13,4
  2267. xor r14,r8
  2268. and r12,rax
  2269. xor r13,rax
  2270. add rdx,QWORD[32+rsp]
  2271. mov r15,r8
  2272. xor r12,rcx
  2273. shrd r14,r14,6
  2274. xor r15,r9
  2275. add rdx,r12
  2276. shrd r13,r13,14
  2277. and rdi,r15
  2278. xor r14,r8
  2279. add rdx,r13
  2280. xor rdi,r9
  2281. shrd r14,r14,28
  2282. add r11,rdx
  2283. add rdx,rdi
  2284. mov r13,r11
  2285. add r14,rdx
  2286. shrd r13,r13,23
  2287. mov rdx,r14
  2288. mov r12,rax
  2289. shrd r14,r14,5
  2290. xor r13,r11
  2291. xor r12,rbx
  2292. shrd r13,r13,4
  2293. xor r14,rdx
  2294. and r12,r11
  2295. xor r13,r11
  2296. add rcx,QWORD[40+rsp]
  2297. mov rdi,rdx
  2298. xor r12,rbx
  2299. shrd r14,r14,6
  2300. xor rdi,r8
  2301. add rcx,r12
  2302. shrd r13,r13,14
  2303. and r15,rdi
  2304. xor r14,rdx
  2305. add rcx,r13
  2306. xor r15,r8
  2307. shrd r14,r14,28
  2308. add r10,rcx
  2309. add rcx,r15
  2310. mov r13,r10
  2311. add r14,rcx
  2312. shrd r13,r13,23
  2313. mov rcx,r14
  2314. mov r12,r11
  2315. shrd r14,r14,5
  2316. xor r13,r10
  2317. xor r12,rax
  2318. shrd r13,r13,4
  2319. xor r14,rcx
  2320. and r12,r10
  2321. xor r13,r10
  2322. add rbx,QWORD[48+rsp]
  2323. mov r15,rcx
  2324. xor r12,rax
  2325. shrd r14,r14,6
  2326. xor r15,rdx
  2327. add rbx,r12
  2328. shrd r13,r13,14
  2329. and rdi,r15
  2330. xor r14,rcx
  2331. add rbx,r13
  2332. xor rdi,rdx
  2333. shrd r14,r14,28
  2334. add r9,rbx
  2335. add rbx,rdi
  2336. mov r13,r9
  2337. add r14,rbx
  2338. shrd r13,r13,23
  2339. mov rbx,r14
  2340. mov r12,r10
  2341. shrd r14,r14,5
  2342. xor r13,r9
  2343. xor r12,r11
  2344. shrd r13,r13,4
  2345. xor r14,rbx
  2346. and r12,r9
  2347. xor r13,r9
  2348. add rax,QWORD[56+rsp]
  2349. mov rdi,rbx
  2350. xor r12,r11
  2351. shrd r14,r14,6
  2352. xor rdi,rcx
  2353. add rax,r12
  2354. shrd r13,r13,14
  2355. and r15,rdi
  2356. xor r14,rbx
  2357. add rax,r13
  2358. xor r15,rcx
  2359. shrd r14,r14,28
  2360. add r8,rax
  2361. add rax,r15
  2362. mov r13,r8
  2363. add r14,rax
  2364. shrd r13,r13,23
  2365. mov rax,r14
  2366. mov r12,r9
  2367. shrd r14,r14,5
  2368. xor r13,r8
  2369. xor r12,r10
  2370. shrd r13,r13,4
  2371. xor r14,rax
  2372. and r12,r8
  2373. xor r13,r8
  2374. add r11,QWORD[64+rsp]
  2375. mov r15,rax
  2376. xor r12,r10
  2377. shrd r14,r14,6
  2378. xor r15,rbx
  2379. add r11,r12
  2380. shrd r13,r13,14
  2381. and rdi,r15
  2382. xor r14,rax
  2383. add r11,r13
  2384. xor rdi,rbx
  2385. shrd r14,r14,28
  2386. add rdx,r11
  2387. add r11,rdi
  2388. mov r13,rdx
  2389. add r14,r11
  2390. shrd r13,r13,23
  2391. mov r11,r14
  2392. mov r12,r8
  2393. shrd r14,r14,5
  2394. xor r13,rdx
  2395. xor r12,r9
  2396. shrd r13,r13,4
  2397. xor r14,r11
  2398. and r12,rdx
  2399. xor r13,rdx
  2400. add r10,QWORD[72+rsp]
  2401. mov rdi,r11
  2402. xor r12,r9
  2403. shrd r14,r14,6
  2404. xor rdi,rax
  2405. add r10,r12
  2406. shrd r13,r13,14
  2407. and r15,rdi
  2408. xor r14,r11
  2409. add r10,r13
  2410. xor r15,rax
  2411. shrd r14,r14,28
  2412. add rcx,r10
  2413. add r10,r15
  2414. mov r13,rcx
  2415. add r14,r10
  2416. shrd r13,r13,23
  2417. mov r10,r14
  2418. mov r12,rdx
  2419. shrd r14,r14,5
  2420. xor r13,rcx
  2421. xor r12,r8
  2422. shrd r13,r13,4
  2423. xor r14,r10
  2424. and r12,rcx
  2425. xor r13,rcx
  2426. add r9,QWORD[80+rsp]
  2427. mov r15,r10
  2428. xor r12,r8
  2429. shrd r14,r14,6
  2430. xor r15,r11
  2431. add r9,r12
  2432. shrd r13,r13,14
  2433. and rdi,r15
  2434. xor r14,r10
  2435. add r9,r13
  2436. xor rdi,r11
  2437. shrd r14,r14,28
  2438. add rbx,r9
  2439. add r9,rdi
  2440. mov r13,rbx
  2441. add r14,r9
  2442. shrd r13,r13,23
  2443. mov r9,r14
  2444. mov r12,rcx
  2445. shrd r14,r14,5
  2446. xor r13,rbx
  2447. xor r12,rdx
  2448. shrd r13,r13,4
  2449. xor r14,r9
  2450. and r12,rbx
  2451. xor r13,rbx
  2452. add r8,QWORD[88+rsp]
  2453. mov rdi,r9
  2454. xor r12,rdx
  2455. shrd r14,r14,6
  2456. xor rdi,r10
  2457. add r8,r12
  2458. shrd r13,r13,14
  2459. and r15,rdi
  2460. xor r14,r9
  2461. add r8,r13
  2462. xor r15,r10
  2463. shrd r14,r14,28
  2464. add rax,r8
  2465. add r8,r15
  2466. mov r13,rax
  2467. add r14,r8
  2468. shrd r13,r13,23
  2469. mov r8,r14
  2470. mov r12,rbx
  2471. shrd r14,r14,5
  2472. xor r13,rax
  2473. xor r12,rcx
  2474. shrd r13,r13,4
  2475. xor r14,r8
  2476. and r12,rax
  2477. xor r13,rax
  2478. add rdx,QWORD[96+rsp]
  2479. mov r15,r8
  2480. xor r12,rcx
  2481. shrd r14,r14,6
  2482. xor r15,r9
  2483. add rdx,r12
  2484. shrd r13,r13,14
  2485. and rdi,r15
  2486. xor r14,r8
  2487. add rdx,r13
  2488. xor rdi,r9
  2489. shrd r14,r14,28
  2490. add r11,rdx
  2491. add rdx,rdi
  2492. mov r13,r11
  2493. add r14,rdx
  2494. shrd r13,r13,23
  2495. mov rdx,r14
  2496. mov r12,rax
  2497. shrd r14,r14,5
  2498. xor r13,r11
  2499. xor r12,rbx
  2500. shrd r13,r13,4
  2501. xor r14,rdx
  2502. and r12,r11
  2503. xor r13,r11
  2504. add rcx,QWORD[104+rsp]
  2505. mov rdi,rdx
  2506. xor r12,rbx
  2507. shrd r14,r14,6
  2508. xor rdi,r8
  2509. add rcx,r12
  2510. shrd r13,r13,14
  2511. and r15,rdi
  2512. xor r14,rdx
  2513. add rcx,r13
  2514. xor r15,r8
  2515. shrd r14,r14,28
  2516. add r10,rcx
  2517. add rcx,r15
  2518. mov r13,r10
  2519. add r14,rcx
  2520. shrd r13,r13,23
  2521. mov rcx,r14
  2522. mov r12,r11
  2523. shrd r14,r14,5
  2524. xor r13,r10
  2525. xor r12,rax
  2526. shrd r13,r13,4
  2527. xor r14,rcx
  2528. and r12,r10
  2529. xor r13,r10
  2530. add rbx,QWORD[112+rsp]
  2531. mov r15,rcx
  2532. xor r12,rax
  2533. shrd r14,r14,6
  2534. xor r15,rdx
  2535. add rbx,r12
  2536. shrd r13,r13,14
  2537. and rdi,r15
  2538. xor r14,rcx
  2539. add rbx,r13
  2540. xor rdi,rdx
  2541. shrd r14,r14,28
  2542. add r9,rbx
  2543. add rbx,rdi
  2544. mov r13,r9
  2545. add r14,rbx
  2546. shrd r13,r13,23
  2547. mov rbx,r14
  2548. mov r12,r10
  2549. shrd r14,r14,5
  2550. xor r13,r9
  2551. xor r12,r11
  2552. shrd r13,r13,4
  2553. xor r14,rbx
  2554. and r12,r9
  2555. xor r13,r9
  2556. add rax,QWORD[120+rsp]
  2557. mov rdi,rbx
  2558. xor r12,r11
  2559. shrd r14,r14,6
  2560. xor rdi,rcx
  2561. add rax,r12
  2562. shrd r13,r13,14
  2563. and r15,rdi
  2564. xor r14,rbx
  2565. add rax,r13
  2566. xor r15,rcx
  2567. shrd r14,r14,28
  2568. add r8,rax
  2569. add rax,r15
  2570. mov r13,r8
  2571. add r14,rax
  2572. mov rdi,QWORD[((128+0))+rsp]
  2573. mov rax,r14
  2574. add rax,QWORD[rdi]
  2575. lea rsi,[128+rsi]
  2576. add rbx,QWORD[8+rdi]
  2577. add rcx,QWORD[16+rdi]
  2578. add rdx,QWORD[24+rdi]
  2579. add r8,QWORD[32+rdi]
  2580. add r9,QWORD[40+rdi]
  2581. add r10,QWORD[48+rdi]
  2582. add r11,QWORD[56+rdi]
  2583. cmp rsi,QWORD[((128+16))+rsp]
  2584. mov QWORD[rdi],rax
  2585. mov QWORD[8+rdi],rbx
  2586. mov QWORD[16+rdi],rcx
  2587. mov QWORD[24+rdi],rdx
  2588. mov QWORD[32+rdi],r8
  2589. mov QWORD[40+rdi],r9
  2590. mov QWORD[48+rdi],r10
  2591. mov QWORD[56+rdi],r11
  2592. jb NEAR $L$loop_avx
  2593. mov rsi,QWORD[152+rsp]
  2594. vzeroupper
  2595. movaps xmm6,XMMWORD[((128+32))+rsp]
  2596. movaps xmm7,XMMWORD[((128+48))+rsp]
  2597. movaps xmm8,XMMWORD[((128+64))+rsp]
  2598. movaps xmm9,XMMWORD[((128+80))+rsp]
  2599. movaps xmm10,XMMWORD[((128+96))+rsp]
  2600. movaps xmm11,XMMWORD[((128+112))+rsp]
  2601. mov r15,QWORD[((-48))+rsi]
  2602. mov r14,QWORD[((-40))+rsi]
  2603. mov r13,QWORD[((-32))+rsi]
  2604. mov r12,QWORD[((-24))+rsi]
  2605. mov rbp,QWORD[((-16))+rsi]
  2606. mov rbx,QWORD[((-8))+rsi]
  2607. lea rsp,[rsi]
  2608. $L$epilogue_avx:
  2609. mov rdi,QWORD[8+rsp] ;WIN64 epilogue
  2610. mov rsi,QWORD[16+rsp]
  2611. DB 0F3h,0C3h ;repret
  2612. $L$SEH_end_sha512_block_data_order_avx:
  2613. EXTERN __imp_RtlVirtualUnwind
  2614. ALIGN 16
  2615. se_handler:
  2616. push rsi
  2617. push rdi
  2618. push rbx
  2619. push rbp
  2620. push r12
  2621. push r13
  2622. push r14
  2623. push r15
  2624. pushfq
  2625. sub rsp,64
  2626. mov rax,QWORD[120+r8]
  2627. mov rbx,QWORD[248+r8]
  2628. mov rsi,QWORD[8+r9]
  2629. mov r11,QWORD[56+r9]
  2630. mov r10d,DWORD[r11]
  2631. lea r10,[r10*1+rsi]
  2632. cmp rbx,r10
  2633. jb NEAR $L$in_prologue
  2634. mov rax,QWORD[152+r8]
  2635. mov r10d,DWORD[4+r11]
  2636. lea r10,[r10*1+rsi]
  2637. cmp rbx,r10
  2638. jae NEAR $L$in_prologue
  2639. mov rsi,rax
  2640. mov rax,QWORD[((128+24))+rax]
  2641. mov rbx,QWORD[((-8))+rax]
  2642. mov rbp,QWORD[((-16))+rax]
  2643. mov r12,QWORD[((-24))+rax]
  2644. mov r13,QWORD[((-32))+rax]
  2645. mov r14,QWORD[((-40))+rax]
  2646. mov r15,QWORD[((-48))+rax]
  2647. mov QWORD[144+r8],rbx
  2648. mov QWORD[160+r8],rbp
  2649. mov QWORD[216+r8],r12
  2650. mov QWORD[224+r8],r13
  2651. mov QWORD[232+r8],r14
  2652. mov QWORD[240+r8],r15
  2653. lea r10,[$L$epilogue]
  2654. cmp rbx,r10
  2655. jb NEAR $L$in_prologue
  2656. lea rsi,[((128+32))+rsi]
  2657. lea rdi,[512+r8]
  2658. mov ecx,12
  2659. DD 0xa548f3fc
  2660. $L$in_prologue:
  2661. mov rdi,QWORD[8+rax]
  2662. mov rsi,QWORD[16+rax]
  2663. mov QWORD[152+r8],rax
  2664. mov QWORD[168+r8],rsi
  2665. mov QWORD[176+r8],rdi
  2666. mov rdi,QWORD[40+r9]
  2667. mov rsi,r8
  2668. mov ecx,154
  2669. DD 0xa548f3fc
  2670. mov rsi,r9
  2671. xor rcx,rcx
  2672. mov rdx,QWORD[8+rsi]
  2673. mov r8,QWORD[rsi]
  2674. mov r9,QWORD[16+rsi]
  2675. mov r10,QWORD[40+rsi]
  2676. lea r11,[56+rsi]
  2677. lea r12,[24+rsi]
  2678. mov QWORD[32+rsp],r10
  2679. mov QWORD[40+rsp],r11
  2680. mov QWORD[48+rsp],r12
  2681. mov QWORD[56+rsp],rcx
  2682. call QWORD[__imp_RtlVirtualUnwind]
  2683. mov eax,1
  2684. add rsp,64
  2685. popfq
  2686. pop r15
  2687. pop r14
  2688. pop r13
  2689. pop r12
  2690. pop rbp
  2691. pop rbx
  2692. pop rdi
  2693. pop rsi
  2694. DB 0F3h,0C3h ;repret
  2695. section .pdata rdata align=4
  2696. ALIGN 4
  2697. DD $L$SEH_begin_sha512_block_data_order wrt ..imagebase
  2698. DD $L$SEH_end_sha512_block_data_order wrt ..imagebase
  2699. DD $L$SEH_info_sha512_block_data_order wrt ..imagebase
  2700. DD $L$SEH_begin_sha512_block_data_order_avx wrt ..imagebase
  2701. DD $L$SEH_end_sha512_block_data_order_avx wrt ..imagebase
  2702. DD $L$SEH_info_sha512_block_data_order_avx wrt ..imagebase
  2703. section .xdata rdata align=8
  2704. ALIGN 8
  2705. $L$SEH_info_sha512_block_data_order:
  2706. DB 9,0,0,0
  2707. DD se_handler wrt ..imagebase
  2708. DD $L$prologue wrt ..imagebase,$L$epilogue wrt ..imagebase
  2709. $L$SEH_info_sha512_block_data_order_avx:
  2710. DB 9,0,0,0
  2711. DD se_handler wrt ..imagebase
  2712. DD $L$prologue_avx wrt ..imagebase,$L$epilogue_avx wrt ..imagebase