sha512-x86_64-nasm.asm 44 KB

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