keccakf_amd64.s 80 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213421442154216421742184219422042214222422342244225422642274228422942304231423242334234423542364237423842394240424142424243424442454246424742484249425042514252425342544255425642574258425942604261426242634264426542664267426842694270427142724273427442754276427742784279428042814282428342844285428642874288428942904291429242934294429542964297429842994300430143024303430443054306430743084309431043114312431343144315431643174318431943204321432243234324432543264327432843294330433143324333433443354336433743384339434043414342434343444345434643474348434943504351435243534354435543564357435843594360436143624363436443654366436743684369437043714372437343744375437643774378437943804381438243834384438543864387438843894390439143924393439443954396439743984399440044014402440344044405440644074408440944104411441244134414441544164417441844194420442144224423442444254426442744284429443044314432443344344435443644374438443944404441444244434444444544464447444844494450445144524453445444554456445744584459446044614462446344644465446644674468446944704471447244734474447544764477447844794480448144824483448444854486448744884489449044914492449344944495449644974498449945004501450245034504450545064507450845094510451145124513451445154516451745184519452045214522452345244525452645274528452945304531453245334534453545364537453845394540454145424543454445454546454745484549455045514552455345544555455645574558455945604561456245634564456545664567456845694570457145724573457445754576457745784579458045814582458345844585458645874588458945904591459245934594459545964597459845994600460146024603460446054606460746084609461046114612461346144615461646174618461946204621462246234624462546264627462846294630463146324633463446354636463746384639464046414642464346444645464646474648464946504651465246534654465546564657465846594660466146624663466446654666466746684669467046714672467346744675467646774678467946804681468246834684468546864687468846894690469146924693469446954696469746984699470047014702470347044705470647074708470947104711471247134714471547164717471847194720472147224723472447254726472747284729473047314732473347344735473647374738473947404741474247434744474547464747474847494750475147524753475447554756475747584759476047614762476347644765476647674768476947704771477247734774477547764777477847794780478147824783478447854786478747884789479047914792479347944795479647974798479948004801480248034804480548064807480848094810481148124813481448154816481748184819482048214822482348244825482648274828482948304831483248334834483548364837483848394840484148424843484448454846484748484849485048514852485348544855485648574858485948604861486248634864486548664867486848694870487148724873487448754876487748784879488048814882488348844885488648874888488948904891489248934894489548964897489848994900490149024903490449054906490749084909491049114912491349144915491649174918491949204921492249234924492549264927492849294930493149324933493449354936493749384939494049414942494349444945494649474948494949504951495249534954495549564957495849594960496149624963496449654966496749684969497049714972497349744975497649774978497949804981498249834984498549864987498849894990499149924993499449954996499749984999500050015002500350045005500650075008500950105011501250135014501550165017501850195020502150225023502450255026502750285029503050315032503350345035503650375038503950405041504250435044504550465047504850495050505150525053505450555056505750585059506050615062506350645065506650675068506950705071507250735074507550765077507850795080508150825083508450855086508750885089509050915092509350945095509650975098509951005101510251035104510551065107510851095110511151125113511451155116511751185119512051215122512351245125512651275128512951305131513251335134513551365137513851395140514151425143514451455146514751485149515051515152515351545155515651575158515951605161516251635164516551665167516851695170517151725173517451755176517751785179518051815182518351845185518651875188518951905191519251935194519551965197519851995200520152025203520452055206520752085209521052115212521352145215521652175218521952205221522252235224522552265227522852295230523152325233523452355236523752385239524052415242524352445245524652475248524952505251525252535254525552565257525852595260526152625263526452655266526752685269527052715272527352745275527652775278527952805281528252835284528552865287528852895290529152925293529452955296529752985299530053015302530353045305530653075308530953105311531253135314531553165317531853195320532153225323532453255326532753285329533053315332533353345335533653375338533953405341534253435344534553465347534853495350535153525353535453555356535753585359536053615362536353645365536653675368536953705371537253735374537553765377537853795380538153825383538453855386538753885389539053915392539353945395539653975398539954005401540254035404540554065407540854095410541154125413541454155416541754185419
  1. // Code generated by command: go run keccakf_amd64_asm.go -out ../keccakf_amd64.s -pkg sha3. DO NOT EDIT.
  2. //go:build amd64 && !purego && gc
  3. // func keccakF1600(a *[25]uint64)
  4. TEXT ·keccakF1600(SB), $200-8
  5. MOVQ a+0(FP), DI
  6. // Convert the user state into an internal state
  7. NOTQ 8(DI)
  8. NOTQ 16(DI)
  9. NOTQ 64(DI)
  10. NOTQ 96(DI)
  11. NOTQ 136(DI)
  12. NOTQ 160(DI)
  13. // Execute the KeccakF permutation
  14. MOVQ (DI), SI
  15. MOVQ 8(DI), BP
  16. MOVQ 32(DI), R15
  17. XORQ 40(DI), SI
  18. XORQ 48(DI), BP
  19. XORQ 72(DI), R15
  20. XORQ 80(DI), SI
  21. XORQ 88(DI), BP
  22. XORQ 112(DI), R15
  23. XORQ 120(DI), SI
  24. XORQ 128(DI), BP
  25. XORQ 152(DI), R15
  26. XORQ 160(DI), SI
  27. XORQ 168(DI), BP
  28. MOVQ 176(DI), DX
  29. MOVQ 184(DI), R8
  30. XORQ 192(DI), R15
  31. // Prepare round
  32. MOVQ BP, BX
  33. ROLQ $0x01, BX
  34. MOVQ 16(DI), R12
  35. XORQ 56(DI), DX
  36. XORQ R15, BX
  37. XORQ 96(DI), R12
  38. XORQ 136(DI), DX
  39. XORQ DX, R12
  40. MOVQ R12, CX
  41. ROLQ $0x01, CX
  42. MOVQ 24(DI), R13
  43. XORQ 64(DI), R8
  44. XORQ SI, CX
  45. XORQ 104(DI), R13
  46. XORQ 144(DI), R8
  47. XORQ R8, R13
  48. MOVQ R13, DX
  49. ROLQ $0x01, DX
  50. MOVQ R15, R8
  51. XORQ BP, DX
  52. ROLQ $0x01, R8
  53. MOVQ SI, R9
  54. XORQ R12, R8
  55. ROLQ $0x01, R9
  56. // Result b
  57. MOVQ (DI), R10
  58. MOVQ 48(DI), R11
  59. XORQ R13, R9
  60. MOVQ 96(DI), R12
  61. MOVQ 144(DI), R13
  62. MOVQ 192(DI), R14
  63. XORQ CX, R11
  64. ROLQ $0x2c, R11
  65. XORQ DX, R12
  66. XORQ BX, R10
  67. ROLQ $0x2b, R12
  68. MOVQ R11, SI
  69. MOVQ $0x0000000000000001, AX
  70. ORQ R12, SI
  71. XORQ R10, AX
  72. XORQ AX, SI
  73. MOVQ SI, (SP)
  74. XORQ R9, R14
  75. ROLQ $0x0e, R14
  76. MOVQ R10, R15
  77. ANDQ R11, R15
  78. XORQ R14, R15
  79. MOVQ R15, 32(SP)
  80. XORQ R8, R13
  81. ROLQ $0x15, R13
  82. MOVQ R13, AX
  83. ANDQ R14, AX
  84. XORQ R12, AX
  85. MOVQ AX, 16(SP)
  86. NOTQ R12
  87. ORQ R10, R14
  88. ORQ R13, R12
  89. XORQ R13, R14
  90. XORQ R11, R12
  91. MOVQ R14, 24(SP)
  92. MOVQ R12, 8(SP)
  93. MOVQ R12, BP
  94. // Result g
  95. MOVQ 72(DI), R11
  96. XORQ R9, R11
  97. MOVQ 80(DI), R12
  98. ROLQ $0x14, R11
  99. XORQ BX, R12
  100. ROLQ $0x03, R12
  101. MOVQ 24(DI), R10
  102. MOVQ R11, AX
  103. ORQ R12, AX
  104. XORQ R8, R10
  105. MOVQ 128(DI), R13
  106. MOVQ 176(DI), R14
  107. ROLQ $0x1c, R10
  108. XORQ R10, AX
  109. MOVQ AX, 40(SP)
  110. XORQ AX, SI
  111. XORQ CX, R13
  112. ROLQ $0x2d, R13
  113. MOVQ R12, AX
  114. ANDQ R13, AX
  115. XORQ R11, AX
  116. MOVQ AX, 48(SP)
  117. XORQ AX, BP
  118. XORQ DX, R14
  119. ROLQ $0x3d, R14
  120. MOVQ R14, AX
  121. ORQ R10, AX
  122. XORQ R13, AX
  123. MOVQ AX, 64(SP)
  124. ANDQ R11, R10
  125. XORQ R14, R10
  126. MOVQ R10, 72(SP)
  127. NOTQ R14
  128. XORQ R10, R15
  129. ORQ R14, R13
  130. XORQ R12, R13
  131. MOVQ R13, 56(SP)
  132. // Result k
  133. MOVQ 8(DI), R10
  134. MOVQ 56(DI), R11
  135. MOVQ 104(DI), R12
  136. MOVQ 152(DI), R13
  137. MOVQ 160(DI), R14
  138. XORQ DX, R11
  139. ROLQ $0x06, R11
  140. XORQ R8, R12
  141. ROLQ $0x19, R12
  142. MOVQ R11, AX
  143. ORQ R12, AX
  144. XORQ CX, R10
  145. ROLQ $0x01, R10
  146. XORQ R10, AX
  147. MOVQ AX, 80(SP)
  148. XORQ AX, SI
  149. XORQ R9, R13
  150. ROLQ $0x08, R13
  151. MOVQ R12, AX
  152. ANDQ R13, AX
  153. XORQ R11, AX
  154. MOVQ AX, 88(SP)
  155. XORQ AX, BP
  156. XORQ BX, R14
  157. ROLQ $0x12, R14
  158. NOTQ R13
  159. MOVQ R13, AX
  160. ANDQ R14, AX
  161. XORQ R12, AX
  162. MOVQ AX, 96(SP)
  163. MOVQ R14, AX
  164. ORQ R10, AX
  165. XORQ R13, AX
  166. MOVQ AX, 104(SP)
  167. ANDQ R11, R10
  168. XORQ R14, R10
  169. MOVQ R10, 112(SP)
  170. XORQ R10, R15
  171. // Result m
  172. MOVQ 40(DI), R11
  173. XORQ BX, R11
  174. MOVQ 88(DI), R12
  175. ROLQ $0x24, R11
  176. XORQ CX, R12
  177. MOVQ 32(DI), R10
  178. ROLQ $0x0a, R12
  179. MOVQ R11, AX
  180. MOVQ 136(DI), R13
  181. ANDQ R12, AX
  182. XORQ R9, R10
  183. MOVQ 184(DI), R14
  184. ROLQ $0x1b, R10
  185. XORQ R10, AX
  186. MOVQ AX, 120(SP)
  187. XORQ AX, SI
  188. XORQ DX, R13
  189. ROLQ $0x0f, R13
  190. MOVQ R12, AX
  191. ORQ R13, AX
  192. XORQ R11, AX
  193. MOVQ AX, 128(SP)
  194. XORQ AX, BP
  195. XORQ R8, R14
  196. ROLQ $0x38, R14
  197. NOTQ R13
  198. MOVQ R13, AX
  199. ORQ R14, AX
  200. XORQ R12, AX
  201. MOVQ AX, 136(SP)
  202. ORQ R10, R11
  203. XORQ R14, R11
  204. MOVQ R11, 152(SP)
  205. ANDQ R10, R14
  206. XORQ R13, R14
  207. MOVQ R14, 144(SP)
  208. XORQ R11, R15
  209. // Result s
  210. MOVQ 16(DI), R10
  211. MOVQ 64(DI), R11
  212. MOVQ 112(DI), R12
  213. XORQ DX, R10
  214. MOVQ 120(DI), R13
  215. ROLQ $0x3e, R10
  216. XORQ R8, R11
  217. MOVQ 168(DI), R14
  218. ROLQ $0x37, R11
  219. XORQ R9, R12
  220. MOVQ R10, R9
  221. XORQ CX, R14
  222. ROLQ $0x02, R14
  223. ANDQ R11, R9
  224. XORQ R14, R9
  225. MOVQ R9, 192(SP)
  226. ROLQ $0x27, R12
  227. XORQ R9, R15
  228. NOTQ R11
  229. XORQ BX, R13
  230. MOVQ R11, BX
  231. ANDQ R12, BX
  232. XORQ R10, BX
  233. MOVQ BX, 160(SP)
  234. XORQ BX, SI
  235. ROLQ $0x29, R13
  236. MOVQ R12, CX
  237. ORQ R13, CX
  238. XORQ R11, CX
  239. MOVQ CX, 168(SP)
  240. XORQ CX, BP
  241. MOVQ R13, DX
  242. MOVQ R14, R8
  243. ANDQ R14, DX
  244. ORQ R10, R8
  245. XORQ R12, DX
  246. XORQ R13, R8
  247. MOVQ DX, 176(SP)
  248. MOVQ R8, 184(SP)
  249. // Prepare round
  250. MOVQ BP, BX
  251. ROLQ $0x01, BX
  252. MOVQ 16(SP), R12
  253. XORQ 56(SP), DX
  254. XORQ R15, BX
  255. XORQ 96(SP), R12
  256. XORQ 136(SP), DX
  257. XORQ DX, R12
  258. MOVQ R12, CX
  259. ROLQ $0x01, CX
  260. MOVQ 24(SP), R13
  261. XORQ 64(SP), R8
  262. XORQ SI, CX
  263. XORQ 104(SP), R13
  264. XORQ 144(SP), R8
  265. XORQ R8, R13
  266. MOVQ R13, DX
  267. ROLQ $0x01, DX
  268. MOVQ R15, R8
  269. XORQ BP, DX
  270. ROLQ $0x01, R8
  271. MOVQ SI, R9
  272. XORQ R12, R8
  273. ROLQ $0x01, R9
  274. // Result b
  275. MOVQ (SP), R10
  276. MOVQ 48(SP), R11
  277. XORQ R13, R9
  278. MOVQ 96(SP), R12
  279. MOVQ 144(SP), R13
  280. MOVQ 192(SP), R14
  281. XORQ CX, R11
  282. ROLQ $0x2c, R11
  283. XORQ DX, R12
  284. XORQ BX, R10
  285. ROLQ $0x2b, R12
  286. MOVQ R11, SI
  287. MOVQ $0x0000000000008082, AX
  288. ORQ R12, SI
  289. XORQ R10, AX
  290. XORQ AX, SI
  291. MOVQ SI, (DI)
  292. XORQ R9, R14
  293. ROLQ $0x0e, R14
  294. MOVQ R10, R15
  295. ANDQ R11, R15
  296. XORQ R14, R15
  297. MOVQ R15, 32(DI)
  298. XORQ R8, R13
  299. ROLQ $0x15, R13
  300. MOVQ R13, AX
  301. ANDQ R14, AX
  302. XORQ R12, AX
  303. MOVQ AX, 16(DI)
  304. NOTQ R12
  305. ORQ R10, R14
  306. ORQ R13, R12
  307. XORQ R13, R14
  308. XORQ R11, R12
  309. MOVQ R14, 24(DI)
  310. MOVQ R12, 8(DI)
  311. MOVQ R12, BP
  312. // Result g
  313. MOVQ 72(SP), R11
  314. XORQ R9, R11
  315. MOVQ 80(SP), R12
  316. ROLQ $0x14, R11
  317. XORQ BX, R12
  318. ROLQ $0x03, R12
  319. MOVQ 24(SP), R10
  320. MOVQ R11, AX
  321. ORQ R12, AX
  322. XORQ R8, R10
  323. MOVQ 128(SP), R13
  324. MOVQ 176(SP), R14
  325. ROLQ $0x1c, R10
  326. XORQ R10, AX
  327. MOVQ AX, 40(DI)
  328. XORQ AX, SI
  329. XORQ CX, R13
  330. ROLQ $0x2d, R13
  331. MOVQ R12, AX
  332. ANDQ R13, AX
  333. XORQ R11, AX
  334. MOVQ AX, 48(DI)
  335. XORQ AX, BP
  336. XORQ DX, R14
  337. ROLQ $0x3d, R14
  338. MOVQ R14, AX
  339. ORQ R10, AX
  340. XORQ R13, AX
  341. MOVQ AX, 64(DI)
  342. ANDQ R11, R10
  343. XORQ R14, R10
  344. MOVQ R10, 72(DI)
  345. NOTQ R14
  346. XORQ R10, R15
  347. ORQ R14, R13
  348. XORQ R12, R13
  349. MOVQ R13, 56(DI)
  350. // Result k
  351. MOVQ 8(SP), R10
  352. MOVQ 56(SP), R11
  353. MOVQ 104(SP), R12
  354. MOVQ 152(SP), R13
  355. MOVQ 160(SP), R14
  356. XORQ DX, R11
  357. ROLQ $0x06, R11
  358. XORQ R8, R12
  359. ROLQ $0x19, R12
  360. MOVQ R11, AX
  361. ORQ R12, AX
  362. XORQ CX, R10
  363. ROLQ $0x01, R10
  364. XORQ R10, AX
  365. MOVQ AX, 80(DI)
  366. XORQ AX, SI
  367. XORQ R9, R13
  368. ROLQ $0x08, R13
  369. MOVQ R12, AX
  370. ANDQ R13, AX
  371. XORQ R11, AX
  372. MOVQ AX, 88(DI)
  373. XORQ AX, BP
  374. XORQ BX, R14
  375. ROLQ $0x12, R14
  376. NOTQ R13
  377. MOVQ R13, AX
  378. ANDQ R14, AX
  379. XORQ R12, AX
  380. MOVQ AX, 96(DI)
  381. MOVQ R14, AX
  382. ORQ R10, AX
  383. XORQ R13, AX
  384. MOVQ AX, 104(DI)
  385. ANDQ R11, R10
  386. XORQ R14, R10
  387. MOVQ R10, 112(DI)
  388. XORQ R10, R15
  389. // Result m
  390. MOVQ 40(SP), R11
  391. XORQ BX, R11
  392. MOVQ 88(SP), R12
  393. ROLQ $0x24, R11
  394. XORQ CX, R12
  395. MOVQ 32(SP), R10
  396. ROLQ $0x0a, R12
  397. MOVQ R11, AX
  398. MOVQ 136(SP), R13
  399. ANDQ R12, AX
  400. XORQ R9, R10
  401. MOVQ 184(SP), R14
  402. ROLQ $0x1b, R10
  403. XORQ R10, AX
  404. MOVQ AX, 120(DI)
  405. XORQ AX, SI
  406. XORQ DX, R13
  407. ROLQ $0x0f, R13
  408. MOVQ R12, AX
  409. ORQ R13, AX
  410. XORQ R11, AX
  411. MOVQ AX, 128(DI)
  412. XORQ AX, BP
  413. XORQ R8, R14
  414. ROLQ $0x38, R14
  415. NOTQ R13
  416. MOVQ R13, AX
  417. ORQ R14, AX
  418. XORQ R12, AX
  419. MOVQ AX, 136(DI)
  420. ORQ R10, R11
  421. XORQ R14, R11
  422. MOVQ R11, 152(DI)
  423. ANDQ R10, R14
  424. XORQ R13, R14
  425. MOVQ R14, 144(DI)
  426. XORQ R11, R15
  427. // Result s
  428. MOVQ 16(SP), R10
  429. MOVQ 64(SP), R11
  430. MOVQ 112(SP), R12
  431. XORQ DX, R10
  432. MOVQ 120(SP), R13
  433. ROLQ $0x3e, R10
  434. XORQ R8, R11
  435. MOVQ 168(SP), R14
  436. ROLQ $0x37, R11
  437. XORQ R9, R12
  438. MOVQ R10, R9
  439. XORQ CX, R14
  440. ROLQ $0x02, R14
  441. ANDQ R11, R9
  442. XORQ R14, R9
  443. MOVQ R9, 192(DI)
  444. ROLQ $0x27, R12
  445. XORQ R9, R15
  446. NOTQ R11
  447. XORQ BX, R13
  448. MOVQ R11, BX
  449. ANDQ R12, BX
  450. XORQ R10, BX
  451. MOVQ BX, 160(DI)
  452. XORQ BX, SI
  453. ROLQ $0x29, R13
  454. MOVQ R12, CX
  455. ORQ R13, CX
  456. XORQ R11, CX
  457. MOVQ CX, 168(DI)
  458. XORQ CX, BP
  459. MOVQ R13, DX
  460. MOVQ R14, R8
  461. ANDQ R14, DX
  462. ORQ R10, R8
  463. XORQ R12, DX
  464. XORQ R13, R8
  465. MOVQ DX, 176(DI)
  466. MOVQ R8, 184(DI)
  467. // Prepare round
  468. MOVQ BP, BX
  469. ROLQ $0x01, BX
  470. MOVQ 16(DI), R12
  471. XORQ 56(DI), DX
  472. XORQ R15, BX
  473. XORQ 96(DI), R12
  474. XORQ 136(DI), DX
  475. XORQ DX, R12
  476. MOVQ R12, CX
  477. ROLQ $0x01, CX
  478. MOVQ 24(DI), R13
  479. XORQ 64(DI), R8
  480. XORQ SI, CX
  481. XORQ 104(DI), R13
  482. XORQ 144(DI), R8
  483. XORQ R8, R13
  484. MOVQ R13, DX
  485. ROLQ $0x01, DX
  486. MOVQ R15, R8
  487. XORQ BP, DX
  488. ROLQ $0x01, R8
  489. MOVQ SI, R9
  490. XORQ R12, R8
  491. ROLQ $0x01, R9
  492. // Result b
  493. MOVQ (DI), R10
  494. MOVQ 48(DI), R11
  495. XORQ R13, R9
  496. MOVQ 96(DI), R12
  497. MOVQ 144(DI), R13
  498. MOVQ 192(DI), R14
  499. XORQ CX, R11
  500. ROLQ $0x2c, R11
  501. XORQ DX, R12
  502. XORQ BX, R10
  503. ROLQ $0x2b, R12
  504. MOVQ R11, SI
  505. MOVQ $0x800000000000808a, AX
  506. ORQ R12, SI
  507. XORQ R10, AX
  508. XORQ AX, SI
  509. MOVQ SI, (SP)
  510. XORQ R9, R14
  511. ROLQ $0x0e, R14
  512. MOVQ R10, R15
  513. ANDQ R11, R15
  514. XORQ R14, R15
  515. MOVQ R15, 32(SP)
  516. XORQ R8, R13
  517. ROLQ $0x15, R13
  518. MOVQ R13, AX
  519. ANDQ R14, AX
  520. XORQ R12, AX
  521. MOVQ AX, 16(SP)
  522. NOTQ R12
  523. ORQ R10, R14
  524. ORQ R13, R12
  525. XORQ R13, R14
  526. XORQ R11, R12
  527. MOVQ R14, 24(SP)
  528. MOVQ R12, 8(SP)
  529. MOVQ R12, BP
  530. // Result g
  531. MOVQ 72(DI), R11
  532. XORQ R9, R11
  533. MOVQ 80(DI), R12
  534. ROLQ $0x14, R11
  535. XORQ BX, R12
  536. ROLQ $0x03, R12
  537. MOVQ 24(DI), R10
  538. MOVQ R11, AX
  539. ORQ R12, AX
  540. XORQ R8, R10
  541. MOVQ 128(DI), R13
  542. MOVQ 176(DI), R14
  543. ROLQ $0x1c, R10
  544. XORQ R10, AX
  545. MOVQ AX, 40(SP)
  546. XORQ AX, SI
  547. XORQ CX, R13
  548. ROLQ $0x2d, R13
  549. MOVQ R12, AX
  550. ANDQ R13, AX
  551. XORQ R11, AX
  552. MOVQ AX, 48(SP)
  553. XORQ AX, BP
  554. XORQ DX, R14
  555. ROLQ $0x3d, R14
  556. MOVQ R14, AX
  557. ORQ R10, AX
  558. XORQ R13, AX
  559. MOVQ AX, 64(SP)
  560. ANDQ R11, R10
  561. XORQ R14, R10
  562. MOVQ R10, 72(SP)
  563. NOTQ R14
  564. XORQ R10, R15
  565. ORQ R14, R13
  566. XORQ R12, R13
  567. MOVQ R13, 56(SP)
  568. // Result k
  569. MOVQ 8(DI), R10
  570. MOVQ 56(DI), R11
  571. MOVQ 104(DI), R12
  572. MOVQ 152(DI), R13
  573. MOVQ 160(DI), R14
  574. XORQ DX, R11
  575. ROLQ $0x06, R11
  576. XORQ R8, R12
  577. ROLQ $0x19, R12
  578. MOVQ R11, AX
  579. ORQ R12, AX
  580. XORQ CX, R10
  581. ROLQ $0x01, R10
  582. XORQ R10, AX
  583. MOVQ AX, 80(SP)
  584. XORQ AX, SI
  585. XORQ R9, R13
  586. ROLQ $0x08, R13
  587. MOVQ R12, AX
  588. ANDQ R13, AX
  589. XORQ R11, AX
  590. MOVQ AX, 88(SP)
  591. XORQ AX, BP
  592. XORQ BX, R14
  593. ROLQ $0x12, R14
  594. NOTQ R13
  595. MOVQ R13, AX
  596. ANDQ R14, AX
  597. XORQ R12, AX
  598. MOVQ AX, 96(SP)
  599. MOVQ R14, AX
  600. ORQ R10, AX
  601. XORQ R13, AX
  602. MOVQ AX, 104(SP)
  603. ANDQ R11, R10
  604. XORQ R14, R10
  605. MOVQ R10, 112(SP)
  606. XORQ R10, R15
  607. // Result m
  608. MOVQ 40(DI), R11
  609. XORQ BX, R11
  610. MOVQ 88(DI), R12
  611. ROLQ $0x24, R11
  612. XORQ CX, R12
  613. MOVQ 32(DI), R10
  614. ROLQ $0x0a, R12
  615. MOVQ R11, AX
  616. MOVQ 136(DI), R13
  617. ANDQ R12, AX
  618. XORQ R9, R10
  619. MOVQ 184(DI), R14
  620. ROLQ $0x1b, R10
  621. XORQ R10, AX
  622. MOVQ AX, 120(SP)
  623. XORQ AX, SI
  624. XORQ DX, R13
  625. ROLQ $0x0f, R13
  626. MOVQ R12, AX
  627. ORQ R13, AX
  628. XORQ R11, AX
  629. MOVQ AX, 128(SP)
  630. XORQ AX, BP
  631. XORQ R8, R14
  632. ROLQ $0x38, R14
  633. NOTQ R13
  634. MOVQ R13, AX
  635. ORQ R14, AX
  636. XORQ R12, AX
  637. MOVQ AX, 136(SP)
  638. ORQ R10, R11
  639. XORQ R14, R11
  640. MOVQ R11, 152(SP)
  641. ANDQ R10, R14
  642. XORQ R13, R14
  643. MOVQ R14, 144(SP)
  644. XORQ R11, R15
  645. // Result s
  646. MOVQ 16(DI), R10
  647. MOVQ 64(DI), R11
  648. MOVQ 112(DI), R12
  649. XORQ DX, R10
  650. MOVQ 120(DI), R13
  651. ROLQ $0x3e, R10
  652. XORQ R8, R11
  653. MOVQ 168(DI), R14
  654. ROLQ $0x37, R11
  655. XORQ R9, R12
  656. MOVQ R10, R9
  657. XORQ CX, R14
  658. ROLQ $0x02, R14
  659. ANDQ R11, R9
  660. XORQ R14, R9
  661. MOVQ R9, 192(SP)
  662. ROLQ $0x27, R12
  663. XORQ R9, R15
  664. NOTQ R11
  665. XORQ BX, R13
  666. MOVQ R11, BX
  667. ANDQ R12, BX
  668. XORQ R10, BX
  669. MOVQ BX, 160(SP)
  670. XORQ BX, SI
  671. ROLQ $0x29, R13
  672. MOVQ R12, CX
  673. ORQ R13, CX
  674. XORQ R11, CX
  675. MOVQ CX, 168(SP)
  676. XORQ CX, BP
  677. MOVQ R13, DX
  678. MOVQ R14, R8
  679. ANDQ R14, DX
  680. ORQ R10, R8
  681. XORQ R12, DX
  682. XORQ R13, R8
  683. MOVQ DX, 176(SP)
  684. MOVQ R8, 184(SP)
  685. // Prepare round
  686. MOVQ BP, BX
  687. ROLQ $0x01, BX
  688. MOVQ 16(SP), R12
  689. XORQ 56(SP), DX
  690. XORQ R15, BX
  691. XORQ 96(SP), R12
  692. XORQ 136(SP), DX
  693. XORQ DX, R12
  694. MOVQ R12, CX
  695. ROLQ $0x01, CX
  696. MOVQ 24(SP), R13
  697. XORQ 64(SP), R8
  698. XORQ SI, CX
  699. XORQ 104(SP), R13
  700. XORQ 144(SP), R8
  701. XORQ R8, R13
  702. MOVQ R13, DX
  703. ROLQ $0x01, DX
  704. MOVQ R15, R8
  705. XORQ BP, DX
  706. ROLQ $0x01, R8
  707. MOVQ SI, R9
  708. XORQ R12, R8
  709. ROLQ $0x01, R9
  710. // Result b
  711. MOVQ (SP), R10
  712. MOVQ 48(SP), R11
  713. XORQ R13, R9
  714. MOVQ 96(SP), R12
  715. MOVQ 144(SP), R13
  716. MOVQ 192(SP), R14
  717. XORQ CX, R11
  718. ROLQ $0x2c, R11
  719. XORQ DX, R12
  720. XORQ BX, R10
  721. ROLQ $0x2b, R12
  722. MOVQ R11, SI
  723. MOVQ $0x8000000080008000, AX
  724. ORQ R12, SI
  725. XORQ R10, AX
  726. XORQ AX, SI
  727. MOVQ SI, (DI)
  728. XORQ R9, R14
  729. ROLQ $0x0e, R14
  730. MOVQ R10, R15
  731. ANDQ R11, R15
  732. XORQ R14, R15
  733. MOVQ R15, 32(DI)
  734. XORQ R8, R13
  735. ROLQ $0x15, R13
  736. MOVQ R13, AX
  737. ANDQ R14, AX
  738. XORQ R12, AX
  739. MOVQ AX, 16(DI)
  740. NOTQ R12
  741. ORQ R10, R14
  742. ORQ R13, R12
  743. XORQ R13, R14
  744. XORQ R11, R12
  745. MOVQ R14, 24(DI)
  746. MOVQ R12, 8(DI)
  747. MOVQ R12, BP
  748. // Result g
  749. MOVQ 72(SP), R11
  750. XORQ R9, R11
  751. MOVQ 80(SP), R12
  752. ROLQ $0x14, R11
  753. XORQ BX, R12
  754. ROLQ $0x03, R12
  755. MOVQ 24(SP), R10
  756. MOVQ R11, AX
  757. ORQ R12, AX
  758. XORQ R8, R10
  759. MOVQ 128(SP), R13
  760. MOVQ 176(SP), R14
  761. ROLQ $0x1c, R10
  762. XORQ R10, AX
  763. MOVQ AX, 40(DI)
  764. XORQ AX, SI
  765. XORQ CX, R13
  766. ROLQ $0x2d, R13
  767. MOVQ R12, AX
  768. ANDQ R13, AX
  769. XORQ R11, AX
  770. MOVQ AX, 48(DI)
  771. XORQ AX, BP
  772. XORQ DX, R14
  773. ROLQ $0x3d, R14
  774. MOVQ R14, AX
  775. ORQ R10, AX
  776. XORQ R13, AX
  777. MOVQ AX, 64(DI)
  778. ANDQ R11, R10
  779. XORQ R14, R10
  780. MOVQ R10, 72(DI)
  781. NOTQ R14
  782. XORQ R10, R15
  783. ORQ R14, R13
  784. XORQ R12, R13
  785. MOVQ R13, 56(DI)
  786. // Result k
  787. MOVQ 8(SP), R10
  788. MOVQ 56(SP), R11
  789. MOVQ 104(SP), R12
  790. MOVQ 152(SP), R13
  791. MOVQ 160(SP), R14
  792. XORQ DX, R11
  793. ROLQ $0x06, R11
  794. XORQ R8, R12
  795. ROLQ $0x19, R12
  796. MOVQ R11, AX
  797. ORQ R12, AX
  798. XORQ CX, R10
  799. ROLQ $0x01, R10
  800. XORQ R10, AX
  801. MOVQ AX, 80(DI)
  802. XORQ AX, SI
  803. XORQ R9, R13
  804. ROLQ $0x08, R13
  805. MOVQ R12, AX
  806. ANDQ R13, AX
  807. XORQ R11, AX
  808. MOVQ AX, 88(DI)
  809. XORQ AX, BP
  810. XORQ BX, R14
  811. ROLQ $0x12, R14
  812. NOTQ R13
  813. MOVQ R13, AX
  814. ANDQ R14, AX
  815. XORQ R12, AX
  816. MOVQ AX, 96(DI)
  817. MOVQ R14, AX
  818. ORQ R10, AX
  819. XORQ R13, AX
  820. MOVQ AX, 104(DI)
  821. ANDQ R11, R10
  822. XORQ R14, R10
  823. MOVQ R10, 112(DI)
  824. XORQ R10, R15
  825. // Result m
  826. MOVQ 40(SP), R11
  827. XORQ BX, R11
  828. MOVQ 88(SP), R12
  829. ROLQ $0x24, R11
  830. XORQ CX, R12
  831. MOVQ 32(SP), R10
  832. ROLQ $0x0a, R12
  833. MOVQ R11, AX
  834. MOVQ 136(SP), R13
  835. ANDQ R12, AX
  836. XORQ R9, R10
  837. MOVQ 184(SP), R14
  838. ROLQ $0x1b, R10
  839. XORQ R10, AX
  840. MOVQ AX, 120(DI)
  841. XORQ AX, SI
  842. XORQ DX, R13
  843. ROLQ $0x0f, R13
  844. MOVQ R12, AX
  845. ORQ R13, AX
  846. XORQ R11, AX
  847. MOVQ AX, 128(DI)
  848. XORQ AX, BP
  849. XORQ R8, R14
  850. ROLQ $0x38, R14
  851. NOTQ R13
  852. MOVQ R13, AX
  853. ORQ R14, AX
  854. XORQ R12, AX
  855. MOVQ AX, 136(DI)
  856. ORQ R10, R11
  857. XORQ R14, R11
  858. MOVQ R11, 152(DI)
  859. ANDQ R10, R14
  860. XORQ R13, R14
  861. MOVQ R14, 144(DI)
  862. XORQ R11, R15
  863. // Result s
  864. MOVQ 16(SP), R10
  865. MOVQ 64(SP), R11
  866. MOVQ 112(SP), R12
  867. XORQ DX, R10
  868. MOVQ 120(SP), R13
  869. ROLQ $0x3e, R10
  870. XORQ R8, R11
  871. MOVQ 168(SP), R14
  872. ROLQ $0x37, R11
  873. XORQ R9, R12
  874. MOVQ R10, R9
  875. XORQ CX, R14
  876. ROLQ $0x02, R14
  877. ANDQ R11, R9
  878. XORQ R14, R9
  879. MOVQ R9, 192(DI)
  880. ROLQ $0x27, R12
  881. XORQ R9, R15
  882. NOTQ R11
  883. XORQ BX, R13
  884. MOVQ R11, BX
  885. ANDQ R12, BX
  886. XORQ R10, BX
  887. MOVQ BX, 160(DI)
  888. XORQ BX, SI
  889. ROLQ $0x29, R13
  890. MOVQ R12, CX
  891. ORQ R13, CX
  892. XORQ R11, CX
  893. MOVQ CX, 168(DI)
  894. XORQ CX, BP
  895. MOVQ R13, DX
  896. MOVQ R14, R8
  897. ANDQ R14, DX
  898. ORQ R10, R8
  899. XORQ R12, DX
  900. XORQ R13, R8
  901. MOVQ DX, 176(DI)
  902. MOVQ R8, 184(DI)
  903. // Prepare round
  904. MOVQ BP, BX
  905. ROLQ $0x01, BX
  906. MOVQ 16(DI), R12
  907. XORQ 56(DI), DX
  908. XORQ R15, BX
  909. XORQ 96(DI), R12
  910. XORQ 136(DI), DX
  911. XORQ DX, R12
  912. MOVQ R12, CX
  913. ROLQ $0x01, CX
  914. MOVQ 24(DI), R13
  915. XORQ 64(DI), R8
  916. XORQ SI, CX
  917. XORQ 104(DI), R13
  918. XORQ 144(DI), R8
  919. XORQ R8, R13
  920. MOVQ R13, DX
  921. ROLQ $0x01, DX
  922. MOVQ R15, R8
  923. XORQ BP, DX
  924. ROLQ $0x01, R8
  925. MOVQ SI, R9
  926. XORQ R12, R8
  927. ROLQ $0x01, R9
  928. // Result b
  929. MOVQ (DI), R10
  930. MOVQ 48(DI), R11
  931. XORQ R13, R9
  932. MOVQ 96(DI), R12
  933. MOVQ 144(DI), R13
  934. MOVQ 192(DI), R14
  935. XORQ CX, R11
  936. ROLQ $0x2c, R11
  937. XORQ DX, R12
  938. XORQ BX, R10
  939. ROLQ $0x2b, R12
  940. MOVQ R11, SI
  941. MOVQ $0x000000000000808b, AX
  942. ORQ R12, SI
  943. XORQ R10, AX
  944. XORQ AX, SI
  945. MOVQ SI, (SP)
  946. XORQ R9, R14
  947. ROLQ $0x0e, R14
  948. MOVQ R10, R15
  949. ANDQ R11, R15
  950. XORQ R14, R15
  951. MOVQ R15, 32(SP)
  952. XORQ R8, R13
  953. ROLQ $0x15, R13
  954. MOVQ R13, AX
  955. ANDQ R14, AX
  956. XORQ R12, AX
  957. MOVQ AX, 16(SP)
  958. NOTQ R12
  959. ORQ R10, R14
  960. ORQ R13, R12
  961. XORQ R13, R14
  962. XORQ R11, R12
  963. MOVQ R14, 24(SP)
  964. MOVQ R12, 8(SP)
  965. MOVQ R12, BP
  966. // Result g
  967. MOVQ 72(DI), R11
  968. XORQ R9, R11
  969. MOVQ 80(DI), R12
  970. ROLQ $0x14, R11
  971. XORQ BX, R12
  972. ROLQ $0x03, R12
  973. MOVQ 24(DI), R10
  974. MOVQ R11, AX
  975. ORQ R12, AX
  976. XORQ R8, R10
  977. MOVQ 128(DI), R13
  978. MOVQ 176(DI), R14
  979. ROLQ $0x1c, R10
  980. XORQ R10, AX
  981. MOVQ AX, 40(SP)
  982. XORQ AX, SI
  983. XORQ CX, R13
  984. ROLQ $0x2d, R13
  985. MOVQ R12, AX
  986. ANDQ R13, AX
  987. XORQ R11, AX
  988. MOVQ AX, 48(SP)
  989. XORQ AX, BP
  990. XORQ DX, R14
  991. ROLQ $0x3d, R14
  992. MOVQ R14, AX
  993. ORQ R10, AX
  994. XORQ R13, AX
  995. MOVQ AX, 64(SP)
  996. ANDQ R11, R10
  997. XORQ R14, R10
  998. MOVQ R10, 72(SP)
  999. NOTQ R14
  1000. XORQ R10, R15
  1001. ORQ R14, R13
  1002. XORQ R12, R13
  1003. MOVQ R13, 56(SP)
  1004. // Result k
  1005. MOVQ 8(DI), R10
  1006. MOVQ 56(DI), R11
  1007. MOVQ 104(DI), R12
  1008. MOVQ 152(DI), R13
  1009. MOVQ 160(DI), R14
  1010. XORQ DX, R11
  1011. ROLQ $0x06, R11
  1012. XORQ R8, R12
  1013. ROLQ $0x19, R12
  1014. MOVQ R11, AX
  1015. ORQ R12, AX
  1016. XORQ CX, R10
  1017. ROLQ $0x01, R10
  1018. XORQ R10, AX
  1019. MOVQ AX, 80(SP)
  1020. XORQ AX, SI
  1021. XORQ R9, R13
  1022. ROLQ $0x08, R13
  1023. MOVQ R12, AX
  1024. ANDQ R13, AX
  1025. XORQ R11, AX
  1026. MOVQ AX, 88(SP)
  1027. XORQ AX, BP
  1028. XORQ BX, R14
  1029. ROLQ $0x12, R14
  1030. NOTQ R13
  1031. MOVQ R13, AX
  1032. ANDQ R14, AX
  1033. XORQ R12, AX
  1034. MOVQ AX, 96(SP)
  1035. MOVQ R14, AX
  1036. ORQ R10, AX
  1037. XORQ R13, AX
  1038. MOVQ AX, 104(SP)
  1039. ANDQ R11, R10
  1040. XORQ R14, R10
  1041. MOVQ R10, 112(SP)
  1042. XORQ R10, R15
  1043. // Result m
  1044. MOVQ 40(DI), R11
  1045. XORQ BX, R11
  1046. MOVQ 88(DI), R12
  1047. ROLQ $0x24, R11
  1048. XORQ CX, R12
  1049. MOVQ 32(DI), R10
  1050. ROLQ $0x0a, R12
  1051. MOVQ R11, AX
  1052. MOVQ 136(DI), R13
  1053. ANDQ R12, AX
  1054. XORQ R9, R10
  1055. MOVQ 184(DI), R14
  1056. ROLQ $0x1b, R10
  1057. XORQ R10, AX
  1058. MOVQ AX, 120(SP)
  1059. XORQ AX, SI
  1060. XORQ DX, R13
  1061. ROLQ $0x0f, R13
  1062. MOVQ R12, AX
  1063. ORQ R13, AX
  1064. XORQ R11, AX
  1065. MOVQ AX, 128(SP)
  1066. XORQ AX, BP
  1067. XORQ R8, R14
  1068. ROLQ $0x38, R14
  1069. NOTQ R13
  1070. MOVQ R13, AX
  1071. ORQ R14, AX
  1072. XORQ R12, AX
  1073. MOVQ AX, 136(SP)
  1074. ORQ R10, R11
  1075. XORQ R14, R11
  1076. MOVQ R11, 152(SP)
  1077. ANDQ R10, R14
  1078. XORQ R13, R14
  1079. MOVQ R14, 144(SP)
  1080. XORQ R11, R15
  1081. // Result s
  1082. MOVQ 16(DI), R10
  1083. MOVQ 64(DI), R11
  1084. MOVQ 112(DI), R12
  1085. XORQ DX, R10
  1086. MOVQ 120(DI), R13
  1087. ROLQ $0x3e, R10
  1088. XORQ R8, R11
  1089. MOVQ 168(DI), R14
  1090. ROLQ $0x37, R11
  1091. XORQ R9, R12
  1092. MOVQ R10, R9
  1093. XORQ CX, R14
  1094. ROLQ $0x02, R14
  1095. ANDQ R11, R9
  1096. XORQ R14, R9
  1097. MOVQ R9, 192(SP)
  1098. ROLQ $0x27, R12
  1099. XORQ R9, R15
  1100. NOTQ R11
  1101. XORQ BX, R13
  1102. MOVQ R11, BX
  1103. ANDQ R12, BX
  1104. XORQ R10, BX
  1105. MOVQ BX, 160(SP)
  1106. XORQ BX, SI
  1107. ROLQ $0x29, R13
  1108. MOVQ R12, CX
  1109. ORQ R13, CX
  1110. XORQ R11, CX
  1111. MOVQ CX, 168(SP)
  1112. XORQ CX, BP
  1113. MOVQ R13, DX
  1114. MOVQ R14, R8
  1115. ANDQ R14, DX
  1116. ORQ R10, R8
  1117. XORQ R12, DX
  1118. XORQ R13, R8
  1119. MOVQ DX, 176(SP)
  1120. MOVQ R8, 184(SP)
  1121. // Prepare round
  1122. MOVQ BP, BX
  1123. ROLQ $0x01, BX
  1124. MOVQ 16(SP), R12
  1125. XORQ 56(SP), DX
  1126. XORQ R15, BX
  1127. XORQ 96(SP), R12
  1128. XORQ 136(SP), DX
  1129. XORQ DX, R12
  1130. MOVQ R12, CX
  1131. ROLQ $0x01, CX
  1132. MOVQ 24(SP), R13
  1133. XORQ 64(SP), R8
  1134. XORQ SI, CX
  1135. XORQ 104(SP), R13
  1136. XORQ 144(SP), R8
  1137. XORQ R8, R13
  1138. MOVQ R13, DX
  1139. ROLQ $0x01, DX
  1140. MOVQ R15, R8
  1141. XORQ BP, DX
  1142. ROLQ $0x01, R8
  1143. MOVQ SI, R9
  1144. XORQ R12, R8
  1145. ROLQ $0x01, R9
  1146. // Result b
  1147. MOVQ (SP), R10
  1148. MOVQ 48(SP), R11
  1149. XORQ R13, R9
  1150. MOVQ 96(SP), R12
  1151. MOVQ 144(SP), R13
  1152. MOVQ 192(SP), R14
  1153. XORQ CX, R11
  1154. ROLQ $0x2c, R11
  1155. XORQ DX, R12
  1156. XORQ BX, R10
  1157. ROLQ $0x2b, R12
  1158. MOVQ R11, SI
  1159. MOVQ $0x0000000080000001, AX
  1160. ORQ R12, SI
  1161. XORQ R10, AX
  1162. XORQ AX, SI
  1163. MOVQ SI, (DI)
  1164. XORQ R9, R14
  1165. ROLQ $0x0e, R14
  1166. MOVQ R10, R15
  1167. ANDQ R11, R15
  1168. XORQ R14, R15
  1169. MOVQ R15, 32(DI)
  1170. XORQ R8, R13
  1171. ROLQ $0x15, R13
  1172. MOVQ R13, AX
  1173. ANDQ R14, AX
  1174. XORQ R12, AX
  1175. MOVQ AX, 16(DI)
  1176. NOTQ R12
  1177. ORQ R10, R14
  1178. ORQ R13, R12
  1179. XORQ R13, R14
  1180. XORQ R11, R12
  1181. MOVQ R14, 24(DI)
  1182. MOVQ R12, 8(DI)
  1183. MOVQ R12, BP
  1184. // Result g
  1185. MOVQ 72(SP), R11
  1186. XORQ R9, R11
  1187. MOVQ 80(SP), R12
  1188. ROLQ $0x14, R11
  1189. XORQ BX, R12
  1190. ROLQ $0x03, R12
  1191. MOVQ 24(SP), R10
  1192. MOVQ R11, AX
  1193. ORQ R12, AX
  1194. XORQ R8, R10
  1195. MOVQ 128(SP), R13
  1196. MOVQ 176(SP), R14
  1197. ROLQ $0x1c, R10
  1198. XORQ R10, AX
  1199. MOVQ AX, 40(DI)
  1200. XORQ AX, SI
  1201. XORQ CX, R13
  1202. ROLQ $0x2d, R13
  1203. MOVQ R12, AX
  1204. ANDQ R13, AX
  1205. XORQ R11, AX
  1206. MOVQ AX, 48(DI)
  1207. XORQ AX, BP
  1208. XORQ DX, R14
  1209. ROLQ $0x3d, R14
  1210. MOVQ R14, AX
  1211. ORQ R10, AX
  1212. XORQ R13, AX
  1213. MOVQ AX, 64(DI)
  1214. ANDQ R11, R10
  1215. XORQ R14, R10
  1216. MOVQ R10, 72(DI)
  1217. NOTQ R14
  1218. XORQ R10, R15
  1219. ORQ R14, R13
  1220. XORQ R12, R13
  1221. MOVQ R13, 56(DI)
  1222. // Result k
  1223. MOVQ 8(SP), R10
  1224. MOVQ 56(SP), R11
  1225. MOVQ 104(SP), R12
  1226. MOVQ 152(SP), R13
  1227. MOVQ 160(SP), R14
  1228. XORQ DX, R11
  1229. ROLQ $0x06, R11
  1230. XORQ R8, R12
  1231. ROLQ $0x19, R12
  1232. MOVQ R11, AX
  1233. ORQ R12, AX
  1234. XORQ CX, R10
  1235. ROLQ $0x01, R10
  1236. XORQ R10, AX
  1237. MOVQ AX, 80(DI)
  1238. XORQ AX, SI
  1239. XORQ R9, R13
  1240. ROLQ $0x08, R13
  1241. MOVQ R12, AX
  1242. ANDQ R13, AX
  1243. XORQ R11, AX
  1244. MOVQ AX, 88(DI)
  1245. XORQ AX, BP
  1246. XORQ BX, R14
  1247. ROLQ $0x12, R14
  1248. NOTQ R13
  1249. MOVQ R13, AX
  1250. ANDQ R14, AX
  1251. XORQ R12, AX
  1252. MOVQ AX, 96(DI)
  1253. MOVQ R14, AX
  1254. ORQ R10, AX
  1255. XORQ R13, AX
  1256. MOVQ AX, 104(DI)
  1257. ANDQ R11, R10
  1258. XORQ R14, R10
  1259. MOVQ R10, 112(DI)
  1260. XORQ R10, R15
  1261. // Result m
  1262. MOVQ 40(SP), R11
  1263. XORQ BX, R11
  1264. MOVQ 88(SP), R12
  1265. ROLQ $0x24, R11
  1266. XORQ CX, R12
  1267. MOVQ 32(SP), R10
  1268. ROLQ $0x0a, R12
  1269. MOVQ R11, AX
  1270. MOVQ 136(SP), R13
  1271. ANDQ R12, AX
  1272. XORQ R9, R10
  1273. MOVQ 184(SP), R14
  1274. ROLQ $0x1b, R10
  1275. XORQ R10, AX
  1276. MOVQ AX, 120(DI)
  1277. XORQ AX, SI
  1278. XORQ DX, R13
  1279. ROLQ $0x0f, R13
  1280. MOVQ R12, AX
  1281. ORQ R13, AX
  1282. XORQ R11, AX
  1283. MOVQ AX, 128(DI)
  1284. XORQ AX, BP
  1285. XORQ R8, R14
  1286. ROLQ $0x38, R14
  1287. NOTQ R13
  1288. MOVQ R13, AX
  1289. ORQ R14, AX
  1290. XORQ R12, AX
  1291. MOVQ AX, 136(DI)
  1292. ORQ R10, R11
  1293. XORQ R14, R11
  1294. MOVQ R11, 152(DI)
  1295. ANDQ R10, R14
  1296. XORQ R13, R14
  1297. MOVQ R14, 144(DI)
  1298. XORQ R11, R15
  1299. // Result s
  1300. MOVQ 16(SP), R10
  1301. MOVQ 64(SP), R11
  1302. MOVQ 112(SP), R12
  1303. XORQ DX, R10
  1304. MOVQ 120(SP), R13
  1305. ROLQ $0x3e, R10
  1306. XORQ R8, R11
  1307. MOVQ 168(SP), R14
  1308. ROLQ $0x37, R11
  1309. XORQ R9, R12
  1310. MOVQ R10, R9
  1311. XORQ CX, R14
  1312. ROLQ $0x02, R14
  1313. ANDQ R11, R9
  1314. XORQ R14, R9
  1315. MOVQ R9, 192(DI)
  1316. ROLQ $0x27, R12
  1317. XORQ R9, R15
  1318. NOTQ R11
  1319. XORQ BX, R13
  1320. MOVQ R11, BX
  1321. ANDQ R12, BX
  1322. XORQ R10, BX
  1323. MOVQ BX, 160(DI)
  1324. XORQ BX, SI
  1325. ROLQ $0x29, R13
  1326. MOVQ R12, CX
  1327. ORQ R13, CX
  1328. XORQ R11, CX
  1329. MOVQ CX, 168(DI)
  1330. XORQ CX, BP
  1331. MOVQ R13, DX
  1332. MOVQ R14, R8
  1333. ANDQ R14, DX
  1334. ORQ R10, R8
  1335. XORQ R12, DX
  1336. XORQ R13, R8
  1337. MOVQ DX, 176(DI)
  1338. MOVQ R8, 184(DI)
  1339. // Prepare round
  1340. MOVQ BP, BX
  1341. ROLQ $0x01, BX
  1342. MOVQ 16(DI), R12
  1343. XORQ 56(DI), DX
  1344. XORQ R15, BX
  1345. XORQ 96(DI), R12
  1346. XORQ 136(DI), DX
  1347. XORQ DX, R12
  1348. MOVQ R12, CX
  1349. ROLQ $0x01, CX
  1350. MOVQ 24(DI), R13
  1351. XORQ 64(DI), R8
  1352. XORQ SI, CX
  1353. XORQ 104(DI), R13
  1354. XORQ 144(DI), R8
  1355. XORQ R8, R13
  1356. MOVQ R13, DX
  1357. ROLQ $0x01, DX
  1358. MOVQ R15, R8
  1359. XORQ BP, DX
  1360. ROLQ $0x01, R8
  1361. MOVQ SI, R9
  1362. XORQ R12, R8
  1363. ROLQ $0x01, R9
  1364. // Result b
  1365. MOVQ (DI), R10
  1366. MOVQ 48(DI), R11
  1367. XORQ R13, R9
  1368. MOVQ 96(DI), R12
  1369. MOVQ 144(DI), R13
  1370. MOVQ 192(DI), R14
  1371. XORQ CX, R11
  1372. ROLQ $0x2c, R11
  1373. XORQ DX, R12
  1374. XORQ BX, R10
  1375. ROLQ $0x2b, R12
  1376. MOVQ R11, SI
  1377. MOVQ $0x8000000080008081, AX
  1378. ORQ R12, SI
  1379. XORQ R10, AX
  1380. XORQ AX, SI
  1381. MOVQ SI, (SP)
  1382. XORQ R9, R14
  1383. ROLQ $0x0e, R14
  1384. MOVQ R10, R15
  1385. ANDQ R11, R15
  1386. XORQ R14, R15
  1387. MOVQ R15, 32(SP)
  1388. XORQ R8, R13
  1389. ROLQ $0x15, R13
  1390. MOVQ R13, AX
  1391. ANDQ R14, AX
  1392. XORQ R12, AX
  1393. MOVQ AX, 16(SP)
  1394. NOTQ R12
  1395. ORQ R10, R14
  1396. ORQ R13, R12
  1397. XORQ R13, R14
  1398. XORQ R11, R12
  1399. MOVQ R14, 24(SP)
  1400. MOVQ R12, 8(SP)
  1401. MOVQ R12, BP
  1402. // Result g
  1403. MOVQ 72(DI), R11
  1404. XORQ R9, R11
  1405. MOVQ 80(DI), R12
  1406. ROLQ $0x14, R11
  1407. XORQ BX, R12
  1408. ROLQ $0x03, R12
  1409. MOVQ 24(DI), R10
  1410. MOVQ R11, AX
  1411. ORQ R12, AX
  1412. XORQ R8, R10
  1413. MOVQ 128(DI), R13
  1414. MOVQ 176(DI), R14
  1415. ROLQ $0x1c, R10
  1416. XORQ R10, AX
  1417. MOVQ AX, 40(SP)
  1418. XORQ AX, SI
  1419. XORQ CX, R13
  1420. ROLQ $0x2d, R13
  1421. MOVQ R12, AX
  1422. ANDQ R13, AX
  1423. XORQ R11, AX
  1424. MOVQ AX, 48(SP)
  1425. XORQ AX, BP
  1426. XORQ DX, R14
  1427. ROLQ $0x3d, R14
  1428. MOVQ R14, AX
  1429. ORQ R10, AX
  1430. XORQ R13, AX
  1431. MOVQ AX, 64(SP)
  1432. ANDQ R11, R10
  1433. XORQ R14, R10
  1434. MOVQ R10, 72(SP)
  1435. NOTQ R14
  1436. XORQ R10, R15
  1437. ORQ R14, R13
  1438. XORQ R12, R13
  1439. MOVQ R13, 56(SP)
  1440. // Result k
  1441. MOVQ 8(DI), R10
  1442. MOVQ 56(DI), R11
  1443. MOVQ 104(DI), R12
  1444. MOVQ 152(DI), R13
  1445. MOVQ 160(DI), R14
  1446. XORQ DX, R11
  1447. ROLQ $0x06, R11
  1448. XORQ R8, R12
  1449. ROLQ $0x19, R12
  1450. MOVQ R11, AX
  1451. ORQ R12, AX
  1452. XORQ CX, R10
  1453. ROLQ $0x01, R10
  1454. XORQ R10, AX
  1455. MOVQ AX, 80(SP)
  1456. XORQ AX, SI
  1457. XORQ R9, R13
  1458. ROLQ $0x08, R13
  1459. MOVQ R12, AX
  1460. ANDQ R13, AX
  1461. XORQ R11, AX
  1462. MOVQ AX, 88(SP)
  1463. XORQ AX, BP
  1464. XORQ BX, R14
  1465. ROLQ $0x12, R14
  1466. NOTQ R13
  1467. MOVQ R13, AX
  1468. ANDQ R14, AX
  1469. XORQ R12, AX
  1470. MOVQ AX, 96(SP)
  1471. MOVQ R14, AX
  1472. ORQ R10, AX
  1473. XORQ R13, AX
  1474. MOVQ AX, 104(SP)
  1475. ANDQ R11, R10
  1476. XORQ R14, R10
  1477. MOVQ R10, 112(SP)
  1478. XORQ R10, R15
  1479. // Result m
  1480. MOVQ 40(DI), R11
  1481. XORQ BX, R11
  1482. MOVQ 88(DI), R12
  1483. ROLQ $0x24, R11
  1484. XORQ CX, R12
  1485. MOVQ 32(DI), R10
  1486. ROLQ $0x0a, R12
  1487. MOVQ R11, AX
  1488. MOVQ 136(DI), R13
  1489. ANDQ R12, AX
  1490. XORQ R9, R10
  1491. MOVQ 184(DI), R14
  1492. ROLQ $0x1b, R10
  1493. XORQ R10, AX
  1494. MOVQ AX, 120(SP)
  1495. XORQ AX, SI
  1496. XORQ DX, R13
  1497. ROLQ $0x0f, R13
  1498. MOVQ R12, AX
  1499. ORQ R13, AX
  1500. XORQ R11, AX
  1501. MOVQ AX, 128(SP)
  1502. XORQ AX, BP
  1503. XORQ R8, R14
  1504. ROLQ $0x38, R14
  1505. NOTQ R13
  1506. MOVQ R13, AX
  1507. ORQ R14, AX
  1508. XORQ R12, AX
  1509. MOVQ AX, 136(SP)
  1510. ORQ R10, R11
  1511. XORQ R14, R11
  1512. MOVQ R11, 152(SP)
  1513. ANDQ R10, R14
  1514. XORQ R13, R14
  1515. MOVQ R14, 144(SP)
  1516. XORQ R11, R15
  1517. // Result s
  1518. MOVQ 16(DI), R10
  1519. MOVQ 64(DI), R11
  1520. MOVQ 112(DI), R12
  1521. XORQ DX, R10
  1522. MOVQ 120(DI), R13
  1523. ROLQ $0x3e, R10
  1524. XORQ R8, R11
  1525. MOVQ 168(DI), R14
  1526. ROLQ $0x37, R11
  1527. XORQ R9, R12
  1528. MOVQ R10, R9
  1529. XORQ CX, R14
  1530. ROLQ $0x02, R14
  1531. ANDQ R11, R9
  1532. XORQ R14, R9
  1533. MOVQ R9, 192(SP)
  1534. ROLQ $0x27, R12
  1535. XORQ R9, R15
  1536. NOTQ R11
  1537. XORQ BX, R13
  1538. MOVQ R11, BX
  1539. ANDQ R12, BX
  1540. XORQ R10, BX
  1541. MOVQ BX, 160(SP)
  1542. XORQ BX, SI
  1543. ROLQ $0x29, R13
  1544. MOVQ R12, CX
  1545. ORQ R13, CX
  1546. XORQ R11, CX
  1547. MOVQ CX, 168(SP)
  1548. XORQ CX, BP
  1549. MOVQ R13, DX
  1550. MOVQ R14, R8
  1551. ANDQ R14, DX
  1552. ORQ R10, R8
  1553. XORQ R12, DX
  1554. XORQ R13, R8
  1555. MOVQ DX, 176(SP)
  1556. MOVQ R8, 184(SP)
  1557. // Prepare round
  1558. MOVQ BP, BX
  1559. ROLQ $0x01, BX
  1560. MOVQ 16(SP), R12
  1561. XORQ 56(SP), DX
  1562. XORQ R15, BX
  1563. XORQ 96(SP), R12
  1564. XORQ 136(SP), DX
  1565. XORQ DX, R12
  1566. MOVQ R12, CX
  1567. ROLQ $0x01, CX
  1568. MOVQ 24(SP), R13
  1569. XORQ 64(SP), R8
  1570. XORQ SI, CX
  1571. XORQ 104(SP), R13
  1572. XORQ 144(SP), R8
  1573. XORQ R8, R13
  1574. MOVQ R13, DX
  1575. ROLQ $0x01, DX
  1576. MOVQ R15, R8
  1577. XORQ BP, DX
  1578. ROLQ $0x01, R8
  1579. MOVQ SI, R9
  1580. XORQ R12, R8
  1581. ROLQ $0x01, R9
  1582. // Result b
  1583. MOVQ (SP), R10
  1584. MOVQ 48(SP), R11
  1585. XORQ R13, R9
  1586. MOVQ 96(SP), R12
  1587. MOVQ 144(SP), R13
  1588. MOVQ 192(SP), R14
  1589. XORQ CX, R11
  1590. ROLQ $0x2c, R11
  1591. XORQ DX, R12
  1592. XORQ BX, R10
  1593. ROLQ $0x2b, R12
  1594. MOVQ R11, SI
  1595. MOVQ $0x8000000000008009, AX
  1596. ORQ R12, SI
  1597. XORQ R10, AX
  1598. XORQ AX, SI
  1599. MOVQ SI, (DI)
  1600. XORQ R9, R14
  1601. ROLQ $0x0e, R14
  1602. MOVQ R10, R15
  1603. ANDQ R11, R15
  1604. XORQ R14, R15
  1605. MOVQ R15, 32(DI)
  1606. XORQ R8, R13
  1607. ROLQ $0x15, R13
  1608. MOVQ R13, AX
  1609. ANDQ R14, AX
  1610. XORQ R12, AX
  1611. MOVQ AX, 16(DI)
  1612. NOTQ R12
  1613. ORQ R10, R14
  1614. ORQ R13, R12
  1615. XORQ R13, R14
  1616. XORQ R11, R12
  1617. MOVQ R14, 24(DI)
  1618. MOVQ R12, 8(DI)
  1619. MOVQ R12, BP
  1620. // Result g
  1621. MOVQ 72(SP), R11
  1622. XORQ R9, R11
  1623. MOVQ 80(SP), R12
  1624. ROLQ $0x14, R11
  1625. XORQ BX, R12
  1626. ROLQ $0x03, R12
  1627. MOVQ 24(SP), R10
  1628. MOVQ R11, AX
  1629. ORQ R12, AX
  1630. XORQ R8, R10
  1631. MOVQ 128(SP), R13
  1632. MOVQ 176(SP), R14
  1633. ROLQ $0x1c, R10
  1634. XORQ R10, AX
  1635. MOVQ AX, 40(DI)
  1636. XORQ AX, SI
  1637. XORQ CX, R13
  1638. ROLQ $0x2d, R13
  1639. MOVQ R12, AX
  1640. ANDQ R13, AX
  1641. XORQ R11, AX
  1642. MOVQ AX, 48(DI)
  1643. XORQ AX, BP
  1644. XORQ DX, R14
  1645. ROLQ $0x3d, R14
  1646. MOVQ R14, AX
  1647. ORQ R10, AX
  1648. XORQ R13, AX
  1649. MOVQ AX, 64(DI)
  1650. ANDQ R11, R10
  1651. XORQ R14, R10
  1652. MOVQ R10, 72(DI)
  1653. NOTQ R14
  1654. XORQ R10, R15
  1655. ORQ R14, R13
  1656. XORQ R12, R13
  1657. MOVQ R13, 56(DI)
  1658. // Result k
  1659. MOVQ 8(SP), R10
  1660. MOVQ 56(SP), R11
  1661. MOVQ 104(SP), R12
  1662. MOVQ 152(SP), R13
  1663. MOVQ 160(SP), R14
  1664. XORQ DX, R11
  1665. ROLQ $0x06, R11
  1666. XORQ R8, R12
  1667. ROLQ $0x19, R12
  1668. MOVQ R11, AX
  1669. ORQ R12, AX
  1670. XORQ CX, R10
  1671. ROLQ $0x01, R10
  1672. XORQ R10, AX
  1673. MOVQ AX, 80(DI)
  1674. XORQ AX, SI
  1675. XORQ R9, R13
  1676. ROLQ $0x08, R13
  1677. MOVQ R12, AX
  1678. ANDQ R13, AX
  1679. XORQ R11, AX
  1680. MOVQ AX, 88(DI)
  1681. XORQ AX, BP
  1682. XORQ BX, R14
  1683. ROLQ $0x12, R14
  1684. NOTQ R13
  1685. MOVQ R13, AX
  1686. ANDQ R14, AX
  1687. XORQ R12, AX
  1688. MOVQ AX, 96(DI)
  1689. MOVQ R14, AX
  1690. ORQ R10, AX
  1691. XORQ R13, AX
  1692. MOVQ AX, 104(DI)
  1693. ANDQ R11, R10
  1694. XORQ R14, R10
  1695. MOVQ R10, 112(DI)
  1696. XORQ R10, R15
  1697. // Result m
  1698. MOVQ 40(SP), R11
  1699. XORQ BX, R11
  1700. MOVQ 88(SP), R12
  1701. ROLQ $0x24, R11
  1702. XORQ CX, R12
  1703. MOVQ 32(SP), R10
  1704. ROLQ $0x0a, R12
  1705. MOVQ R11, AX
  1706. MOVQ 136(SP), R13
  1707. ANDQ R12, AX
  1708. XORQ R9, R10
  1709. MOVQ 184(SP), R14
  1710. ROLQ $0x1b, R10
  1711. XORQ R10, AX
  1712. MOVQ AX, 120(DI)
  1713. XORQ AX, SI
  1714. XORQ DX, R13
  1715. ROLQ $0x0f, R13
  1716. MOVQ R12, AX
  1717. ORQ R13, AX
  1718. XORQ R11, AX
  1719. MOVQ AX, 128(DI)
  1720. XORQ AX, BP
  1721. XORQ R8, R14
  1722. ROLQ $0x38, R14
  1723. NOTQ R13
  1724. MOVQ R13, AX
  1725. ORQ R14, AX
  1726. XORQ R12, AX
  1727. MOVQ AX, 136(DI)
  1728. ORQ R10, R11
  1729. XORQ R14, R11
  1730. MOVQ R11, 152(DI)
  1731. ANDQ R10, R14
  1732. XORQ R13, R14
  1733. MOVQ R14, 144(DI)
  1734. XORQ R11, R15
  1735. // Result s
  1736. MOVQ 16(SP), R10
  1737. MOVQ 64(SP), R11
  1738. MOVQ 112(SP), R12
  1739. XORQ DX, R10
  1740. MOVQ 120(SP), R13
  1741. ROLQ $0x3e, R10
  1742. XORQ R8, R11
  1743. MOVQ 168(SP), R14
  1744. ROLQ $0x37, R11
  1745. XORQ R9, R12
  1746. MOVQ R10, R9
  1747. XORQ CX, R14
  1748. ROLQ $0x02, R14
  1749. ANDQ R11, R9
  1750. XORQ R14, R9
  1751. MOVQ R9, 192(DI)
  1752. ROLQ $0x27, R12
  1753. XORQ R9, R15
  1754. NOTQ R11
  1755. XORQ BX, R13
  1756. MOVQ R11, BX
  1757. ANDQ R12, BX
  1758. XORQ R10, BX
  1759. MOVQ BX, 160(DI)
  1760. XORQ BX, SI
  1761. ROLQ $0x29, R13
  1762. MOVQ R12, CX
  1763. ORQ R13, CX
  1764. XORQ R11, CX
  1765. MOVQ CX, 168(DI)
  1766. XORQ CX, BP
  1767. MOVQ R13, DX
  1768. MOVQ R14, R8
  1769. ANDQ R14, DX
  1770. ORQ R10, R8
  1771. XORQ R12, DX
  1772. XORQ R13, R8
  1773. MOVQ DX, 176(DI)
  1774. MOVQ R8, 184(DI)
  1775. // Prepare round
  1776. MOVQ BP, BX
  1777. ROLQ $0x01, BX
  1778. MOVQ 16(DI), R12
  1779. XORQ 56(DI), DX
  1780. XORQ R15, BX
  1781. XORQ 96(DI), R12
  1782. XORQ 136(DI), DX
  1783. XORQ DX, R12
  1784. MOVQ R12, CX
  1785. ROLQ $0x01, CX
  1786. MOVQ 24(DI), R13
  1787. XORQ 64(DI), R8
  1788. XORQ SI, CX
  1789. XORQ 104(DI), R13
  1790. XORQ 144(DI), R8
  1791. XORQ R8, R13
  1792. MOVQ R13, DX
  1793. ROLQ $0x01, DX
  1794. MOVQ R15, R8
  1795. XORQ BP, DX
  1796. ROLQ $0x01, R8
  1797. MOVQ SI, R9
  1798. XORQ R12, R8
  1799. ROLQ $0x01, R9
  1800. // Result b
  1801. MOVQ (DI), R10
  1802. MOVQ 48(DI), R11
  1803. XORQ R13, R9
  1804. MOVQ 96(DI), R12
  1805. MOVQ 144(DI), R13
  1806. MOVQ 192(DI), R14
  1807. XORQ CX, R11
  1808. ROLQ $0x2c, R11
  1809. XORQ DX, R12
  1810. XORQ BX, R10
  1811. ROLQ $0x2b, R12
  1812. MOVQ R11, SI
  1813. MOVQ $0x000000000000008a, AX
  1814. ORQ R12, SI
  1815. XORQ R10, AX
  1816. XORQ AX, SI
  1817. MOVQ SI, (SP)
  1818. XORQ R9, R14
  1819. ROLQ $0x0e, R14
  1820. MOVQ R10, R15
  1821. ANDQ R11, R15
  1822. XORQ R14, R15
  1823. MOVQ R15, 32(SP)
  1824. XORQ R8, R13
  1825. ROLQ $0x15, R13
  1826. MOVQ R13, AX
  1827. ANDQ R14, AX
  1828. XORQ R12, AX
  1829. MOVQ AX, 16(SP)
  1830. NOTQ R12
  1831. ORQ R10, R14
  1832. ORQ R13, R12
  1833. XORQ R13, R14
  1834. XORQ R11, R12
  1835. MOVQ R14, 24(SP)
  1836. MOVQ R12, 8(SP)
  1837. MOVQ R12, BP
  1838. // Result g
  1839. MOVQ 72(DI), R11
  1840. XORQ R9, R11
  1841. MOVQ 80(DI), R12
  1842. ROLQ $0x14, R11
  1843. XORQ BX, R12
  1844. ROLQ $0x03, R12
  1845. MOVQ 24(DI), R10
  1846. MOVQ R11, AX
  1847. ORQ R12, AX
  1848. XORQ R8, R10
  1849. MOVQ 128(DI), R13
  1850. MOVQ 176(DI), R14
  1851. ROLQ $0x1c, R10
  1852. XORQ R10, AX
  1853. MOVQ AX, 40(SP)
  1854. XORQ AX, SI
  1855. XORQ CX, R13
  1856. ROLQ $0x2d, R13
  1857. MOVQ R12, AX
  1858. ANDQ R13, AX
  1859. XORQ R11, AX
  1860. MOVQ AX, 48(SP)
  1861. XORQ AX, BP
  1862. XORQ DX, R14
  1863. ROLQ $0x3d, R14
  1864. MOVQ R14, AX
  1865. ORQ R10, AX
  1866. XORQ R13, AX
  1867. MOVQ AX, 64(SP)
  1868. ANDQ R11, R10
  1869. XORQ R14, R10
  1870. MOVQ R10, 72(SP)
  1871. NOTQ R14
  1872. XORQ R10, R15
  1873. ORQ R14, R13
  1874. XORQ R12, R13
  1875. MOVQ R13, 56(SP)
  1876. // Result k
  1877. MOVQ 8(DI), R10
  1878. MOVQ 56(DI), R11
  1879. MOVQ 104(DI), R12
  1880. MOVQ 152(DI), R13
  1881. MOVQ 160(DI), R14
  1882. XORQ DX, R11
  1883. ROLQ $0x06, R11
  1884. XORQ R8, R12
  1885. ROLQ $0x19, R12
  1886. MOVQ R11, AX
  1887. ORQ R12, AX
  1888. XORQ CX, R10
  1889. ROLQ $0x01, R10
  1890. XORQ R10, AX
  1891. MOVQ AX, 80(SP)
  1892. XORQ AX, SI
  1893. XORQ R9, R13
  1894. ROLQ $0x08, R13
  1895. MOVQ R12, AX
  1896. ANDQ R13, AX
  1897. XORQ R11, AX
  1898. MOVQ AX, 88(SP)
  1899. XORQ AX, BP
  1900. XORQ BX, R14
  1901. ROLQ $0x12, R14
  1902. NOTQ R13
  1903. MOVQ R13, AX
  1904. ANDQ R14, AX
  1905. XORQ R12, AX
  1906. MOVQ AX, 96(SP)
  1907. MOVQ R14, AX
  1908. ORQ R10, AX
  1909. XORQ R13, AX
  1910. MOVQ AX, 104(SP)
  1911. ANDQ R11, R10
  1912. XORQ R14, R10
  1913. MOVQ R10, 112(SP)
  1914. XORQ R10, R15
  1915. // Result m
  1916. MOVQ 40(DI), R11
  1917. XORQ BX, R11
  1918. MOVQ 88(DI), R12
  1919. ROLQ $0x24, R11
  1920. XORQ CX, R12
  1921. MOVQ 32(DI), R10
  1922. ROLQ $0x0a, R12
  1923. MOVQ R11, AX
  1924. MOVQ 136(DI), R13
  1925. ANDQ R12, AX
  1926. XORQ R9, R10
  1927. MOVQ 184(DI), R14
  1928. ROLQ $0x1b, R10
  1929. XORQ R10, AX
  1930. MOVQ AX, 120(SP)
  1931. XORQ AX, SI
  1932. XORQ DX, R13
  1933. ROLQ $0x0f, R13
  1934. MOVQ R12, AX
  1935. ORQ R13, AX
  1936. XORQ R11, AX
  1937. MOVQ AX, 128(SP)
  1938. XORQ AX, BP
  1939. XORQ R8, R14
  1940. ROLQ $0x38, R14
  1941. NOTQ R13
  1942. MOVQ R13, AX
  1943. ORQ R14, AX
  1944. XORQ R12, AX
  1945. MOVQ AX, 136(SP)
  1946. ORQ R10, R11
  1947. XORQ R14, R11
  1948. MOVQ R11, 152(SP)
  1949. ANDQ R10, R14
  1950. XORQ R13, R14
  1951. MOVQ R14, 144(SP)
  1952. XORQ R11, R15
  1953. // Result s
  1954. MOVQ 16(DI), R10
  1955. MOVQ 64(DI), R11
  1956. MOVQ 112(DI), R12
  1957. XORQ DX, R10
  1958. MOVQ 120(DI), R13
  1959. ROLQ $0x3e, R10
  1960. XORQ R8, R11
  1961. MOVQ 168(DI), R14
  1962. ROLQ $0x37, R11
  1963. XORQ R9, R12
  1964. MOVQ R10, R9
  1965. XORQ CX, R14
  1966. ROLQ $0x02, R14
  1967. ANDQ R11, R9
  1968. XORQ R14, R9
  1969. MOVQ R9, 192(SP)
  1970. ROLQ $0x27, R12
  1971. XORQ R9, R15
  1972. NOTQ R11
  1973. XORQ BX, R13
  1974. MOVQ R11, BX
  1975. ANDQ R12, BX
  1976. XORQ R10, BX
  1977. MOVQ BX, 160(SP)
  1978. XORQ BX, SI
  1979. ROLQ $0x29, R13
  1980. MOVQ R12, CX
  1981. ORQ R13, CX
  1982. XORQ R11, CX
  1983. MOVQ CX, 168(SP)
  1984. XORQ CX, BP
  1985. MOVQ R13, DX
  1986. MOVQ R14, R8
  1987. ANDQ R14, DX
  1988. ORQ R10, R8
  1989. XORQ R12, DX
  1990. XORQ R13, R8
  1991. MOVQ DX, 176(SP)
  1992. MOVQ R8, 184(SP)
  1993. // Prepare round
  1994. MOVQ BP, BX
  1995. ROLQ $0x01, BX
  1996. MOVQ 16(SP), R12
  1997. XORQ 56(SP), DX
  1998. XORQ R15, BX
  1999. XORQ 96(SP), R12
  2000. XORQ 136(SP), DX
  2001. XORQ DX, R12
  2002. MOVQ R12, CX
  2003. ROLQ $0x01, CX
  2004. MOVQ 24(SP), R13
  2005. XORQ 64(SP), R8
  2006. XORQ SI, CX
  2007. XORQ 104(SP), R13
  2008. XORQ 144(SP), R8
  2009. XORQ R8, R13
  2010. MOVQ R13, DX
  2011. ROLQ $0x01, DX
  2012. MOVQ R15, R8
  2013. XORQ BP, DX
  2014. ROLQ $0x01, R8
  2015. MOVQ SI, R9
  2016. XORQ R12, R8
  2017. ROLQ $0x01, R9
  2018. // Result b
  2019. MOVQ (SP), R10
  2020. MOVQ 48(SP), R11
  2021. XORQ R13, R9
  2022. MOVQ 96(SP), R12
  2023. MOVQ 144(SP), R13
  2024. MOVQ 192(SP), R14
  2025. XORQ CX, R11
  2026. ROLQ $0x2c, R11
  2027. XORQ DX, R12
  2028. XORQ BX, R10
  2029. ROLQ $0x2b, R12
  2030. MOVQ R11, SI
  2031. MOVQ $0x0000000000000088, AX
  2032. ORQ R12, SI
  2033. XORQ R10, AX
  2034. XORQ AX, SI
  2035. MOVQ SI, (DI)
  2036. XORQ R9, R14
  2037. ROLQ $0x0e, R14
  2038. MOVQ R10, R15
  2039. ANDQ R11, R15
  2040. XORQ R14, R15
  2041. MOVQ R15, 32(DI)
  2042. XORQ R8, R13
  2043. ROLQ $0x15, R13
  2044. MOVQ R13, AX
  2045. ANDQ R14, AX
  2046. XORQ R12, AX
  2047. MOVQ AX, 16(DI)
  2048. NOTQ R12
  2049. ORQ R10, R14
  2050. ORQ R13, R12
  2051. XORQ R13, R14
  2052. XORQ R11, R12
  2053. MOVQ R14, 24(DI)
  2054. MOVQ R12, 8(DI)
  2055. MOVQ R12, BP
  2056. // Result g
  2057. MOVQ 72(SP), R11
  2058. XORQ R9, R11
  2059. MOVQ 80(SP), R12
  2060. ROLQ $0x14, R11
  2061. XORQ BX, R12
  2062. ROLQ $0x03, R12
  2063. MOVQ 24(SP), R10
  2064. MOVQ R11, AX
  2065. ORQ R12, AX
  2066. XORQ R8, R10
  2067. MOVQ 128(SP), R13
  2068. MOVQ 176(SP), R14
  2069. ROLQ $0x1c, R10
  2070. XORQ R10, AX
  2071. MOVQ AX, 40(DI)
  2072. XORQ AX, SI
  2073. XORQ CX, R13
  2074. ROLQ $0x2d, R13
  2075. MOVQ R12, AX
  2076. ANDQ R13, AX
  2077. XORQ R11, AX
  2078. MOVQ AX, 48(DI)
  2079. XORQ AX, BP
  2080. XORQ DX, R14
  2081. ROLQ $0x3d, R14
  2082. MOVQ R14, AX
  2083. ORQ R10, AX
  2084. XORQ R13, AX
  2085. MOVQ AX, 64(DI)
  2086. ANDQ R11, R10
  2087. XORQ R14, R10
  2088. MOVQ R10, 72(DI)
  2089. NOTQ R14
  2090. XORQ R10, R15
  2091. ORQ R14, R13
  2092. XORQ R12, R13
  2093. MOVQ R13, 56(DI)
  2094. // Result k
  2095. MOVQ 8(SP), R10
  2096. MOVQ 56(SP), R11
  2097. MOVQ 104(SP), R12
  2098. MOVQ 152(SP), R13
  2099. MOVQ 160(SP), R14
  2100. XORQ DX, R11
  2101. ROLQ $0x06, R11
  2102. XORQ R8, R12
  2103. ROLQ $0x19, R12
  2104. MOVQ R11, AX
  2105. ORQ R12, AX
  2106. XORQ CX, R10
  2107. ROLQ $0x01, R10
  2108. XORQ R10, AX
  2109. MOVQ AX, 80(DI)
  2110. XORQ AX, SI
  2111. XORQ R9, R13
  2112. ROLQ $0x08, R13
  2113. MOVQ R12, AX
  2114. ANDQ R13, AX
  2115. XORQ R11, AX
  2116. MOVQ AX, 88(DI)
  2117. XORQ AX, BP
  2118. XORQ BX, R14
  2119. ROLQ $0x12, R14
  2120. NOTQ R13
  2121. MOVQ R13, AX
  2122. ANDQ R14, AX
  2123. XORQ R12, AX
  2124. MOVQ AX, 96(DI)
  2125. MOVQ R14, AX
  2126. ORQ R10, AX
  2127. XORQ R13, AX
  2128. MOVQ AX, 104(DI)
  2129. ANDQ R11, R10
  2130. XORQ R14, R10
  2131. MOVQ R10, 112(DI)
  2132. XORQ R10, R15
  2133. // Result m
  2134. MOVQ 40(SP), R11
  2135. XORQ BX, R11
  2136. MOVQ 88(SP), R12
  2137. ROLQ $0x24, R11
  2138. XORQ CX, R12
  2139. MOVQ 32(SP), R10
  2140. ROLQ $0x0a, R12
  2141. MOVQ R11, AX
  2142. MOVQ 136(SP), R13
  2143. ANDQ R12, AX
  2144. XORQ R9, R10
  2145. MOVQ 184(SP), R14
  2146. ROLQ $0x1b, R10
  2147. XORQ R10, AX
  2148. MOVQ AX, 120(DI)
  2149. XORQ AX, SI
  2150. XORQ DX, R13
  2151. ROLQ $0x0f, R13
  2152. MOVQ R12, AX
  2153. ORQ R13, AX
  2154. XORQ R11, AX
  2155. MOVQ AX, 128(DI)
  2156. XORQ AX, BP
  2157. XORQ R8, R14
  2158. ROLQ $0x38, R14
  2159. NOTQ R13
  2160. MOVQ R13, AX
  2161. ORQ R14, AX
  2162. XORQ R12, AX
  2163. MOVQ AX, 136(DI)
  2164. ORQ R10, R11
  2165. XORQ R14, R11
  2166. MOVQ R11, 152(DI)
  2167. ANDQ R10, R14
  2168. XORQ R13, R14
  2169. MOVQ R14, 144(DI)
  2170. XORQ R11, R15
  2171. // Result s
  2172. MOVQ 16(SP), R10
  2173. MOVQ 64(SP), R11
  2174. MOVQ 112(SP), R12
  2175. XORQ DX, R10
  2176. MOVQ 120(SP), R13
  2177. ROLQ $0x3e, R10
  2178. XORQ R8, R11
  2179. MOVQ 168(SP), R14
  2180. ROLQ $0x37, R11
  2181. XORQ R9, R12
  2182. MOVQ R10, R9
  2183. XORQ CX, R14
  2184. ROLQ $0x02, R14
  2185. ANDQ R11, R9
  2186. XORQ R14, R9
  2187. MOVQ R9, 192(DI)
  2188. ROLQ $0x27, R12
  2189. XORQ R9, R15
  2190. NOTQ R11
  2191. XORQ BX, R13
  2192. MOVQ R11, BX
  2193. ANDQ R12, BX
  2194. XORQ R10, BX
  2195. MOVQ BX, 160(DI)
  2196. XORQ BX, SI
  2197. ROLQ $0x29, R13
  2198. MOVQ R12, CX
  2199. ORQ R13, CX
  2200. XORQ R11, CX
  2201. MOVQ CX, 168(DI)
  2202. XORQ CX, BP
  2203. MOVQ R13, DX
  2204. MOVQ R14, R8
  2205. ANDQ R14, DX
  2206. ORQ R10, R8
  2207. XORQ R12, DX
  2208. XORQ R13, R8
  2209. MOVQ DX, 176(DI)
  2210. MOVQ R8, 184(DI)
  2211. // Prepare round
  2212. MOVQ BP, BX
  2213. ROLQ $0x01, BX
  2214. MOVQ 16(DI), R12
  2215. XORQ 56(DI), DX
  2216. XORQ R15, BX
  2217. XORQ 96(DI), R12
  2218. XORQ 136(DI), DX
  2219. XORQ DX, R12
  2220. MOVQ R12, CX
  2221. ROLQ $0x01, CX
  2222. MOVQ 24(DI), R13
  2223. XORQ 64(DI), R8
  2224. XORQ SI, CX
  2225. XORQ 104(DI), R13
  2226. XORQ 144(DI), R8
  2227. XORQ R8, R13
  2228. MOVQ R13, DX
  2229. ROLQ $0x01, DX
  2230. MOVQ R15, R8
  2231. XORQ BP, DX
  2232. ROLQ $0x01, R8
  2233. MOVQ SI, R9
  2234. XORQ R12, R8
  2235. ROLQ $0x01, R9
  2236. // Result b
  2237. MOVQ (DI), R10
  2238. MOVQ 48(DI), R11
  2239. XORQ R13, R9
  2240. MOVQ 96(DI), R12
  2241. MOVQ 144(DI), R13
  2242. MOVQ 192(DI), R14
  2243. XORQ CX, R11
  2244. ROLQ $0x2c, R11
  2245. XORQ DX, R12
  2246. XORQ BX, R10
  2247. ROLQ $0x2b, R12
  2248. MOVQ R11, SI
  2249. MOVQ $0x0000000080008009, AX
  2250. ORQ R12, SI
  2251. XORQ R10, AX
  2252. XORQ AX, SI
  2253. MOVQ SI, (SP)
  2254. XORQ R9, R14
  2255. ROLQ $0x0e, R14
  2256. MOVQ R10, R15
  2257. ANDQ R11, R15
  2258. XORQ R14, R15
  2259. MOVQ R15, 32(SP)
  2260. XORQ R8, R13
  2261. ROLQ $0x15, R13
  2262. MOVQ R13, AX
  2263. ANDQ R14, AX
  2264. XORQ R12, AX
  2265. MOVQ AX, 16(SP)
  2266. NOTQ R12
  2267. ORQ R10, R14
  2268. ORQ R13, R12
  2269. XORQ R13, R14
  2270. XORQ R11, R12
  2271. MOVQ R14, 24(SP)
  2272. MOVQ R12, 8(SP)
  2273. MOVQ R12, BP
  2274. // Result g
  2275. MOVQ 72(DI), R11
  2276. XORQ R9, R11
  2277. MOVQ 80(DI), R12
  2278. ROLQ $0x14, R11
  2279. XORQ BX, R12
  2280. ROLQ $0x03, R12
  2281. MOVQ 24(DI), R10
  2282. MOVQ R11, AX
  2283. ORQ R12, AX
  2284. XORQ R8, R10
  2285. MOVQ 128(DI), R13
  2286. MOVQ 176(DI), R14
  2287. ROLQ $0x1c, R10
  2288. XORQ R10, AX
  2289. MOVQ AX, 40(SP)
  2290. XORQ AX, SI
  2291. XORQ CX, R13
  2292. ROLQ $0x2d, R13
  2293. MOVQ R12, AX
  2294. ANDQ R13, AX
  2295. XORQ R11, AX
  2296. MOVQ AX, 48(SP)
  2297. XORQ AX, BP
  2298. XORQ DX, R14
  2299. ROLQ $0x3d, R14
  2300. MOVQ R14, AX
  2301. ORQ R10, AX
  2302. XORQ R13, AX
  2303. MOVQ AX, 64(SP)
  2304. ANDQ R11, R10
  2305. XORQ R14, R10
  2306. MOVQ R10, 72(SP)
  2307. NOTQ R14
  2308. XORQ R10, R15
  2309. ORQ R14, R13
  2310. XORQ R12, R13
  2311. MOVQ R13, 56(SP)
  2312. // Result k
  2313. MOVQ 8(DI), R10
  2314. MOVQ 56(DI), R11
  2315. MOVQ 104(DI), R12
  2316. MOVQ 152(DI), R13
  2317. MOVQ 160(DI), R14
  2318. XORQ DX, R11
  2319. ROLQ $0x06, R11
  2320. XORQ R8, R12
  2321. ROLQ $0x19, R12
  2322. MOVQ R11, AX
  2323. ORQ R12, AX
  2324. XORQ CX, R10
  2325. ROLQ $0x01, R10
  2326. XORQ R10, AX
  2327. MOVQ AX, 80(SP)
  2328. XORQ AX, SI
  2329. XORQ R9, R13
  2330. ROLQ $0x08, R13
  2331. MOVQ R12, AX
  2332. ANDQ R13, AX
  2333. XORQ R11, AX
  2334. MOVQ AX, 88(SP)
  2335. XORQ AX, BP
  2336. XORQ BX, R14
  2337. ROLQ $0x12, R14
  2338. NOTQ R13
  2339. MOVQ R13, AX
  2340. ANDQ R14, AX
  2341. XORQ R12, AX
  2342. MOVQ AX, 96(SP)
  2343. MOVQ R14, AX
  2344. ORQ R10, AX
  2345. XORQ R13, AX
  2346. MOVQ AX, 104(SP)
  2347. ANDQ R11, R10
  2348. XORQ R14, R10
  2349. MOVQ R10, 112(SP)
  2350. XORQ R10, R15
  2351. // Result m
  2352. MOVQ 40(DI), R11
  2353. XORQ BX, R11
  2354. MOVQ 88(DI), R12
  2355. ROLQ $0x24, R11
  2356. XORQ CX, R12
  2357. MOVQ 32(DI), R10
  2358. ROLQ $0x0a, R12
  2359. MOVQ R11, AX
  2360. MOVQ 136(DI), R13
  2361. ANDQ R12, AX
  2362. XORQ R9, R10
  2363. MOVQ 184(DI), R14
  2364. ROLQ $0x1b, R10
  2365. XORQ R10, AX
  2366. MOVQ AX, 120(SP)
  2367. XORQ AX, SI
  2368. XORQ DX, R13
  2369. ROLQ $0x0f, R13
  2370. MOVQ R12, AX
  2371. ORQ R13, AX
  2372. XORQ R11, AX
  2373. MOVQ AX, 128(SP)
  2374. XORQ AX, BP
  2375. XORQ R8, R14
  2376. ROLQ $0x38, R14
  2377. NOTQ R13
  2378. MOVQ R13, AX
  2379. ORQ R14, AX
  2380. XORQ R12, AX
  2381. MOVQ AX, 136(SP)
  2382. ORQ R10, R11
  2383. XORQ R14, R11
  2384. MOVQ R11, 152(SP)
  2385. ANDQ R10, R14
  2386. XORQ R13, R14
  2387. MOVQ R14, 144(SP)
  2388. XORQ R11, R15
  2389. // Result s
  2390. MOVQ 16(DI), R10
  2391. MOVQ 64(DI), R11
  2392. MOVQ 112(DI), R12
  2393. XORQ DX, R10
  2394. MOVQ 120(DI), R13
  2395. ROLQ $0x3e, R10
  2396. XORQ R8, R11
  2397. MOVQ 168(DI), R14
  2398. ROLQ $0x37, R11
  2399. XORQ R9, R12
  2400. MOVQ R10, R9
  2401. XORQ CX, R14
  2402. ROLQ $0x02, R14
  2403. ANDQ R11, R9
  2404. XORQ R14, R9
  2405. MOVQ R9, 192(SP)
  2406. ROLQ $0x27, R12
  2407. XORQ R9, R15
  2408. NOTQ R11
  2409. XORQ BX, R13
  2410. MOVQ R11, BX
  2411. ANDQ R12, BX
  2412. XORQ R10, BX
  2413. MOVQ BX, 160(SP)
  2414. XORQ BX, SI
  2415. ROLQ $0x29, R13
  2416. MOVQ R12, CX
  2417. ORQ R13, CX
  2418. XORQ R11, CX
  2419. MOVQ CX, 168(SP)
  2420. XORQ CX, BP
  2421. MOVQ R13, DX
  2422. MOVQ R14, R8
  2423. ANDQ R14, DX
  2424. ORQ R10, R8
  2425. XORQ R12, DX
  2426. XORQ R13, R8
  2427. MOVQ DX, 176(SP)
  2428. MOVQ R8, 184(SP)
  2429. // Prepare round
  2430. MOVQ BP, BX
  2431. ROLQ $0x01, BX
  2432. MOVQ 16(SP), R12
  2433. XORQ 56(SP), DX
  2434. XORQ R15, BX
  2435. XORQ 96(SP), R12
  2436. XORQ 136(SP), DX
  2437. XORQ DX, R12
  2438. MOVQ R12, CX
  2439. ROLQ $0x01, CX
  2440. MOVQ 24(SP), R13
  2441. XORQ 64(SP), R8
  2442. XORQ SI, CX
  2443. XORQ 104(SP), R13
  2444. XORQ 144(SP), R8
  2445. XORQ R8, R13
  2446. MOVQ R13, DX
  2447. ROLQ $0x01, DX
  2448. MOVQ R15, R8
  2449. XORQ BP, DX
  2450. ROLQ $0x01, R8
  2451. MOVQ SI, R9
  2452. XORQ R12, R8
  2453. ROLQ $0x01, R9
  2454. // Result b
  2455. MOVQ (SP), R10
  2456. MOVQ 48(SP), R11
  2457. XORQ R13, R9
  2458. MOVQ 96(SP), R12
  2459. MOVQ 144(SP), R13
  2460. MOVQ 192(SP), R14
  2461. XORQ CX, R11
  2462. ROLQ $0x2c, R11
  2463. XORQ DX, R12
  2464. XORQ BX, R10
  2465. ROLQ $0x2b, R12
  2466. MOVQ R11, SI
  2467. MOVQ $0x000000008000000a, AX
  2468. ORQ R12, SI
  2469. XORQ R10, AX
  2470. XORQ AX, SI
  2471. MOVQ SI, (DI)
  2472. XORQ R9, R14
  2473. ROLQ $0x0e, R14
  2474. MOVQ R10, R15
  2475. ANDQ R11, R15
  2476. XORQ R14, R15
  2477. MOVQ R15, 32(DI)
  2478. XORQ R8, R13
  2479. ROLQ $0x15, R13
  2480. MOVQ R13, AX
  2481. ANDQ R14, AX
  2482. XORQ R12, AX
  2483. MOVQ AX, 16(DI)
  2484. NOTQ R12
  2485. ORQ R10, R14
  2486. ORQ R13, R12
  2487. XORQ R13, R14
  2488. XORQ R11, R12
  2489. MOVQ R14, 24(DI)
  2490. MOVQ R12, 8(DI)
  2491. MOVQ R12, BP
  2492. // Result g
  2493. MOVQ 72(SP), R11
  2494. XORQ R9, R11
  2495. MOVQ 80(SP), R12
  2496. ROLQ $0x14, R11
  2497. XORQ BX, R12
  2498. ROLQ $0x03, R12
  2499. MOVQ 24(SP), R10
  2500. MOVQ R11, AX
  2501. ORQ R12, AX
  2502. XORQ R8, R10
  2503. MOVQ 128(SP), R13
  2504. MOVQ 176(SP), R14
  2505. ROLQ $0x1c, R10
  2506. XORQ R10, AX
  2507. MOVQ AX, 40(DI)
  2508. XORQ AX, SI
  2509. XORQ CX, R13
  2510. ROLQ $0x2d, R13
  2511. MOVQ R12, AX
  2512. ANDQ R13, AX
  2513. XORQ R11, AX
  2514. MOVQ AX, 48(DI)
  2515. XORQ AX, BP
  2516. XORQ DX, R14
  2517. ROLQ $0x3d, R14
  2518. MOVQ R14, AX
  2519. ORQ R10, AX
  2520. XORQ R13, AX
  2521. MOVQ AX, 64(DI)
  2522. ANDQ R11, R10
  2523. XORQ R14, R10
  2524. MOVQ R10, 72(DI)
  2525. NOTQ R14
  2526. XORQ R10, R15
  2527. ORQ R14, R13
  2528. XORQ R12, R13
  2529. MOVQ R13, 56(DI)
  2530. // Result k
  2531. MOVQ 8(SP), R10
  2532. MOVQ 56(SP), R11
  2533. MOVQ 104(SP), R12
  2534. MOVQ 152(SP), R13
  2535. MOVQ 160(SP), R14
  2536. XORQ DX, R11
  2537. ROLQ $0x06, R11
  2538. XORQ R8, R12
  2539. ROLQ $0x19, R12
  2540. MOVQ R11, AX
  2541. ORQ R12, AX
  2542. XORQ CX, R10
  2543. ROLQ $0x01, R10
  2544. XORQ R10, AX
  2545. MOVQ AX, 80(DI)
  2546. XORQ AX, SI
  2547. XORQ R9, R13
  2548. ROLQ $0x08, R13
  2549. MOVQ R12, AX
  2550. ANDQ R13, AX
  2551. XORQ R11, AX
  2552. MOVQ AX, 88(DI)
  2553. XORQ AX, BP
  2554. XORQ BX, R14
  2555. ROLQ $0x12, R14
  2556. NOTQ R13
  2557. MOVQ R13, AX
  2558. ANDQ R14, AX
  2559. XORQ R12, AX
  2560. MOVQ AX, 96(DI)
  2561. MOVQ R14, AX
  2562. ORQ R10, AX
  2563. XORQ R13, AX
  2564. MOVQ AX, 104(DI)
  2565. ANDQ R11, R10
  2566. XORQ R14, R10
  2567. MOVQ R10, 112(DI)
  2568. XORQ R10, R15
  2569. // Result m
  2570. MOVQ 40(SP), R11
  2571. XORQ BX, R11
  2572. MOVQ 88(SP), R12
  2573. ROLQ $0x24, R11
  2574. XORQ CX, R12
  2575. MOVQ 32(SP), R10
  2576. ROLQ $0x0a, R12
  2577. MOVQ R11, AX
  2578. MOVQ 136(SP), R13
  2579. ANDQ R12, AX
  2580. XORQ R9, R10
  2581. MOVQ 184(SP), R14
  2582. ROLQ $0x1b, R10
  2583. XORQ R10, AX
  2584. MOVQ AX, 120(DI)
  2585. XORQ AX, SI
  2586. XORQ DX, R13
  2587. ROLQ $0x0f, R13
  2588. MOVQ R12, AX
  2589. ORQ R13, AX
  2590. XORQ R11, AX
  2591. MOVQ AX, 128(DI)
  2592. XORQ AX, BP
  2593. XORQ R8, R14
  2594. ROLQ $0x38, R14
  2595. NOTQ R13
  2596. MOVQ R13, AX
  2597. ORQ R14, AX
  2598. XORQ R12, AX
  2599. MOVQ AX, 136(DI)
  2600. ORQ R10, R11
  2601. XORQ R14, R11
  2602. MOVQ R11, 152(DI)
  2603. ANDQ R10, R14
  2604. XORQ R13, R14
  2605. MOVQ R14, 144(DI)
  2606. XORQ R11, R15
  2607. // Result s
  2608. MOVQ 16(SP), R10
  2609. MOVQ 64(SP), R11
  2610. MOVQ 112(SP), R12
  2611. XORQ DX, R10
  2612. MOVQ 120(SP), R13
  2613. ROLQ $0x3e, R10
  2614. XORQ R8, R11
  2615. MOVQ 168(SP), R14
  2616. ROLQ $0x37, R11
  2617. XORQ R9, R12
  2618. MOVQ R10, R9
  2619. XORQ CX, R14
  2620. ROLQ $0x02, R14
  2621. ANDQ R11, R9
  2622. XORQ R14, R9
  2623. MOVQ R9, 192(DI)
  2624. ROLQ $0x27, R12
  2625. XORQ R9, R15
  2626. NOTQ R11
  2627. XORQ BX, R13
  2628. MOVQ R11, BX
  2629. ANDQ R12, BX
  2630. XORQ R10, BX
  2631. MOVQ BX, 160(DI)
  2632. XORQ BX, SI
  2633. ROLQ $0x29, R13
  2634. MOVQ R12, CX
  2635. ORQ R13, CX
  2636. XORQ R11, CX
  2637. MOVQ CX, 168(DI)
  2638. XORQ CX, BP
  2639. MOVQ R13, DX
  2640. MOVQ R14, R8
  2641. ANDQ R14, DX
  2642. ORQ R10, R8
  2643. XORQ R12, DX
  2644. XORQ R13, R8
  2645. MOVQ DX, 176(DI)
  2646. MOVQ R8, 184(DI)
  2647. // Prepare round
  2648. MOVQ BP, BX
  2649. ROLQ $0x01, BX
  2650. MOVQ 16(DI), R12
  2651. XORQ 56(DI), DX
  2652. XORQ R15, BX
  2653. XORQ 96(DI), R12
  2654. XORQ 136(DI), DX
  2655. XORQ DX, R12
  2656. MOVQ R12, CX
  2657. ROLQ $0x01, CX
  2658. MOVQ 24(DI), R13
  2659. XORQ 64(DI), R8
  2660. XORQ SI, CX
  2661. XORQ 104(DI), R13
  2662. XORQ 144(DI), R8
  2663. XORQ R8, R13
  2664. MOVQ R13, DX
  2665. ROLQ $0x01, DX
  2666. MOVQ R15, R8
  2667. XORQ BP, DX
  2668. ROLQ $0x01, R8
  2669. MOVQ SI, R9
  2670. XORQ R12, R8
  2671. ROLQ $0x01, R9
  2672. // Result b
  2673. MOVQ (DI), R10
  2674. MOVQ 48(DI), R11
  2675. XORQ R13, R9
  2676. MOVQ 96(DI), R12
  2677. MOVQ 144(DI), R13
  2678. MOVQ 192(DI), R14
  2679. XORQ CX, R11
  2680. ROLQ $0x2c, R11
  2681. XORQ DX, R12
  2682. XORQ BX, R10
  2683. ROLQ $0x2b, R12
  2684. MOVQ R11, SI
  2685. MOVQ $0x000000008000808b, AX
  2686. ORQ R12, SI
  2687. XORQ R10, AX
  2688. XORQ AX, SI
  2689. MOVQ SI, (SP)
  2690. XORQ R9, R14
  2691. ROLQ $0x0e, R14
  2692. MOVQ R10, R15
  2693. ANDQ R11, R15
  2694. XORQ R14, R15
  2695. MOVQ R15, 32(SP)
  2696. XORQ R8, R13
  2697. ROLQ $0x15, R13
  2698. MOVQ R13, AX
  2699. ANDQ R14, AX
  2700. XORQ R12, AX
  2701. MOVQ AX, 16(SP)
  2702. NOTQ R12
  2703. ORQ R10, R14
  2704. ORQ R13, R12
  2705. XORQ R13, R14
  2706. XORQ R11, R12
  2707. MOVQ R14, 24(SP)
  2708. MOVQ R12, 8(SP)
  2709. MOVQ R12, BP
  2710. // Result g
  2711. MOVQ 72(DI), R11
  2712. XORQ R9, R11
  2713. MOVQ 80(DI), R12
  2714. ROLQ $0x14, R11
  2715. XORQ BX, R12
  2716. ROLQ $0x03, R12
  2717. MOVQ 24(DI), R10
  2718. MOVQ R11, AX
  2719. ORQ R12, AX
  2720. XORQ R8, R10
  2721. MOVQ 128(DI), R13
  2722. MOVQ 176(DI), R14
  2723. ROLQ $0x1c, R10
  2724. XORQ R10, AX
  2725. MOVQ AX, 40(SP)
  2726. XORQ AX, SI
  2727. XORQ CX, R13
  2728. ROLQ $0x2d, R13
  2729. MOVQ R12, AX
  2730. ANDQ R13, AX
  2731. XORQ R11, AX
  2732. MOVQ AX, 48(SP)
  2733. XORQ AX, BP
  2734. XORQ DX, R14
  2735. ROLQ $0x3d, R14
  2736. MOVQ R14, AX
  2737. ORQ R10, AX
  2738. XORQ R13, AX
  2739. MOVQ AX, 64(SP)
  2740. ANDQ R11, R10
  2741. XORQ R14, R10
  2742. MOVQ R10, 72(SP)
  2743. NOTQ R14
  2744. XORQ R10, R15
  2745. ORQ R14, R13
  2746. XORQ R12, R13
  2747. MOVQ R13, 56(SP)
  2748. // Result k
  2749. MOVQ 8(DI), R10
  2750. MOVQ 56(DI), R11
  2751. MOVQ 104(DI), R12
  2752. MOVQ 152(DI), R13
  2753. MOVQ 160(DI), R14
  2754. XORQ DX, R11
  2755. ROLQ $0x06, R11
  2756. XORQ R8, R12
  2757. ROLQ $0x19, R12
  2758. MOVQ R11, AX
  2759. ORQ R12, AX
  2760. XORQ CX, R10
  2761. ROLQ $0x01, R10
  2762. XORQ R10, AX
  2763. MOVQ AX, 80(SP)
  2764. XORQ AX, SI
  2765. XORQ R9, R13
  2766. ROLQ $0x08, R13
  2767. MOVQ R12, AX
  2768. ANDQ R13, AX
  2769. XORQ R11, AX
  2770. MOVQ AX, 88(SP)
  2771. XORQ AX, BP
  2772. XORQ BX, R14
  2773. ROLQ $0x12, R14
  2774. NOTQ R13
  2775. MOVQ R13, AX
  2776. ANDQ R14, AX
  2777. XORQ R12, AX
  2778. MOVQ AX, 96(SP)
  2779. MOVQ R14, AX
  2780. ORQ R10, AX
  2781. XORQ R13, AX
  2782. MOVQ AX, 104(SP)
  2783. ANDQ R11, R10
  2784. XORQ R14, R10
  2785. MOVQ R10, 112(SP)
  2786. XORQ R10, R15
  2787. // Result m
  2788. MOVQ 40(DI), R11
  2789. XORQ BX, R11
  2790. MOVQ 88(DI), R12
  2791. ROLQ $0x24, R11
  2792. XORQ CX, R12
  2793. MOVQ 32(DI), R10
  2794. ROLQ $0x0a, R12
  2795. MOVQ R11, AX
  2796. MOVQ 136(DI), R13
  2797. ANDQ R12, AX
  2798. XORQ R9, R10
  2799. MOVQ 184(DI), R14
  2800. ROLQ $0x1b, R10
  2801. XORQ R10, AX
  2802. MOVQ AX, 120(SP)
  2803. XORQ AX, SI
  2804. XORQ DX, R13
  2805. ROLQ $0x0f, R13
  2806. MOVQ R12, AX
  2807. ORQ R13, AX
  2808. XORQ R11, AX
  2809. MOVQ AX, 128(SP)
  2810. XORQ AX, BP
  2811. XORQ R8, R14
  2812. ROLQ $0x38, R14
  2813. NOTQ R13
  2814. MOVQ R13, AX
  2815. ORQ R14, AX
  2816. XORQ R12, AX
  2817. MOVQ AX, 136(SP)
  2818. ORQ R10, R11
  2819. XORQ R14, R11
  2820. MOVQ R11, 152(SP)
  2821. ANDQ R10, R14
  2822. XORQ R13, R14
  2823. MOVQ R14, 144(SP)
  2824. XORQ R11, R15
  2825. // Result s
  2826. MOVQ 16(DI), R10
  2827. MOVQ 64(DI), R11
  2828. MOVQ 112(DI), R12
  2829. XORQ DX, R10
  2830. MOVQ 120(DI), R13
  2831. ROLQ $0x3e, R10
  2832. XORQ R8, R11
  2833. MOVQ 168(DI), R14
  2834. ROLQ $0x37, R11
  2835. XORQ R9, R12
  2836. MOVQ R10, R9
  2837. XORQ CX, R14
  2838. ROLQ $0x02, R14
  2839. ANDQ R11, R9
  2840. XORQ R14, R9
  2841. MOVQ R9, 192(SP)
  2842. ROLQ $0x27, R12
  2843. XORQ R9, R15
  2844. NOTQ R11
  2845. XORQ BX, R13
  2846. MOVQ R11, BX
  2847. ANDQ R12, BX
  2848. XORQ R10, BX
  2849. MOVQ BX, 160(SP)
  2850. XORQ BX, SI
  2851. ROLQ $0x29, R13
  2852. MOVQ R12, CX
  2853. ORQ R13, CX
  2854. XORQ R11, CX
  2855. MOVQ CX, 168(SP)
  2856. XORQ CX, BP
  2857. MOVQ R13, DX
  2858. MOVQ R14, R8
  2859. ANDQ R14, DX
  2860. ORQ R10, R8
  2861. XORQ R12, DX
  2862. XORQ R13, R8
  2863. MOVQ DX, 176(SP)
  2864. MOVQ R8, 184(SP)
  2865. // Prepare round
  2866. MOVQ BP, BX
  2867. ROLQ $0x01, BX
  2868. MOVQ 16(SP), R12
  2869. XORQ 56(SP), DX
  2870. XORQ R15, BX
  2871. XORQ 96(SP), R12
  2872. XORQ 136(SP), DX
  2873. XORQ DX, R12
  2874. MOVQ R12, CX
  2875. ROLQ $0x01, CX
  2876. MOVQ 24(SP), R13
  2877. XORQ 64(SP), R8
  2878. XORQ SI, CX
  2879. XORQ 104(SP), R13
  2880. XORQ 144(SP), R8
  2881. XORQ R8, R13
  2882. MOVQ R13, DX
  2883. ROLQ $0x01, DX
  2884. MOVQ R15, R8
  2885. XORQ BP, DX
  2886. ROLQ $0x01, R8
  2887. MOVQ SI, R9
  2888. XORQ R12, R8
  2889. ROLQ $0x01, R9
  2890. // Result b
  2891. MOVQ (SP), R10
  2892. MOVQ 48(SP), R11
  2893. XORQ R13, R9
  2894. MOVQ 96(SP), R12
  2895. MOVQ 144(SP), R13
  2896. MOVQ 192(SP), R14
  2897. XORQ CX, R11
  2898. ROLQ $0x2c, R11
  2899. XORQ DX, R12
  2900. XORQ BX, R10
  2901. ROLQ $0x2b, R12
  2902. MOVQ R11, SI
  2903. MOVQ $0x800000000000008b, AX
  2904. ORQ R12, SI
  2905. XORQ R10, AX
  2906. XORQ AX, SI
  2907. MOVQ SI, (DI)
  2908. XORQ R9, R14
  2909. ROLQ $0x0e, R14
  2910. MOVQ R10, R15
  2911. ANDQ R11, R15
  2912. XORQ R14, R15
  2913. MOVQ R15, 32(DI)
  2914. XORQ R8, R13
  2915. ROLQ $0x15, R13
  2916. MOVQ R13, AX
  2917. ANDQ R14, AX
  2918. XORQ R12, AX
  2919. MOVQ AX, 16(DI)
  2920. NOTQ R12
  2921. ORQ R10, R14
  2922. ORQ R13, R12
  2923. XORQ R13, R14
  2924. XORQ R11, R12
  2925. MOVQ R14, 24(DI)
  2926. MOVQ R12, 8(DI)
  2927. MOVQ R12, BP
  2928. // Result g
  2929. MOVQ 72(SP), R11
  2930. XORQ R9, R11
  2931. MOVQ 80(SP), R12
  2932. ROLQ $0x14, R11
  2933. XORQ BX, R12
  2934. ROLQ $0x03, R12
  2935. MOVQ 24(SP), R10
  2936. MOVQ R11, AX
  2937. ORQ R12, AX
  2938. XORQ R8, R10
  2939. MOVQ 128(SP), R13
  2940. MOVQ 176(SP), R14
  2941. ROLQ $0x1c, R10
  2942. XORQ R10, AX
  2943. MOVQ AX, 40(DI)
  2944. XORQ AX, SI
  2945. XORQ CX, R13
  2946. ROLQ $0x2d, R13
  2947. MOVQ R12, AX
  2948. ANDQ R13, AX
  2949. XORQ R11, AX
  2950. MOVQ AX, 48(DI)
  2951. XORQ AX, BP
  2952. XORQ DX, R14
  2953. ROLQ $0x3d, R14
  2954. MOVQ R14, AX
  2955. ORQ R10, AX
  2956. XORQ R13, AX
  2957. MOVQ AX, 64(DI)
  2958. ANDQ R11, R10
  2959. XORQ R14, R10
  2960. MOVQ R10, 72(DI)
  2961. NOTQ R14
  2962. XORQ R10, R15
  2963. ORQ R14, R13
  2964. XORQ R12, R13
  2965. MOVQ R13, 56(DI)
  2966. // Result k
  2967. MOVQ 8(SP), R10
  2968. MOVQ 56(SP), R11
  2969. MOVQ 104(SP), R12
  2970. MOVQ 152(SP), R13
  2971. MOVQ 160(SP), R14
  2972. XORQ DX, R11
  2973. ROLQ $0x06, R11
  2974. XORQ R8, R12
  2975. ROLQ $0x19, R12
  2976. MOVQ R11, AX
  2977. ORQ R12, AX
  2978. XORQ CX, R10
  2979. ROLQ $0x01, R10
  2980. XORQ R10, AX
  2981. MOVQ AX, 80(DI)
  2982. XORQ AX, SI
  2983. XORQ R9, R13
  2984. ROLQ $0x08, R13
  2985. MOVQ R12, AX
  2986. ANDQ R13, AX
  2987. XORQ R11, AX
  2988. MOVQ AX, 88(DI)
  2989. XORQ AX, BP
  2990. XORQ BX, R14
  2991. ROLQ $0x12, R14
  2992. NOTQ R13
  2993. MOVQ R13, AX
  2994. ANDQ R14, AX
  2995. XORQ R12, AX
  2996. MOVQ AX, 96(DI)
  2997. MOVQ R14, AX
  2998. ORQ R10, AX
  2999. XORQ R13, AX
  3000. MOVQ AX, 104(DI)
  3001. ANDQ R11, R10
  3002. XORQ R14, R10
  3003. MOVQ R10, 112(DI)
  3004. XORQ R10, R15
  3005. // Result m
  3006. MOVQ 40(SP), R11
  3007. XORQ BX, R11
  3008. MOVQ 88(SP), R12
  3009. ROLQ $0x24, R11
  3010. XORQ CX, R12
  3011. MOVQ 32(SP), R10
  3012. ROLQ $0x0a, R12
  3013. MOVQ R11, AX
  3014. MOVQ 136(SP), R13
  3015. ANDQ R12, AX
  3016. XORQ R9, R10
  3017. MOVQ 184(SP), R14
  3018. ROLQ $0x1b, R10
  3019. XORQ R10, AX
  3020. MOVQ AX, 120(DI)
  3021. XORQ AX, SI
  3022. XORQ DX, R13
  3023. ROLQ $0x0f, R13
  3024. MOVQ R12, AX
  3025. ORQ R13, AX
  3026. XORQ R11, AX
  3027. MOVQ AX, 128(DI)
  3028. XORQ AX, BP
  3029. XORQ R8, R14
  3030. ROLQ $0x38, R14
  3031. NOTQ R13
  3032. MOVQ R13, AX
  3033. ORQ R14, AX
  3034. XORQ R12, AX
  3035. MOVQ AX, 136(DI)
  3036. ORQ R10, R11
  3037. XORQ R14, R11
  3038. MOVQ R11, 152(DI)
  3039. ANDQ R10, R14
  3040. XORQ R13, R14
  3041. MOVQ R14, 144(DI)
  3042. XORQ R11, R15
  3043. // Result s
  3044. MOVQ 16(SP), R10
  3045. MOVQ 64(SP), R11
  3046. MOVQ 112(SP), R12
  3047. XORQ DX, R10
  3048. MOVQ 120(SP), R13
  3049. ROLQ $0x3e, R10
  3050. XORQ R8, R11
  3051. MOVQ 168(SP), R14
  3052. ROLQ $0x37, R11
  3053. XORQ R9, R12
  3054. MOVQ R10, R9
  3055. XORQ CX, R14
  3056. ROLQ $0x02, R14
  3057. ANDQ R11, R9
  3058. XORQ R14, R9
  3059. MOVQ R9, 192(DI)
  3060. ROLQ $0x27, R12
  3061. XORQ R9, R15
  3062. NOTQ R11
  3063. XORQ BX, R13
  3064. MOVQ R11, BX
  3065. ANDQ R12, BX
  3066. XORQ R10, BX
  3067. MOVQ BX, 160(DI)
  3068. XORQ BX, SI
  3069. ROLQ $0x29, R13
  3070. MOVQ R12, CX
  3071. ORQ R13, CX
  3072. XORQ R11, CX
  3073. MOVQ CX, 168(DI)
  3074. XORQ CX, BP
  3075. MOVQ R13, DX
  3076. MOVQ R14, R8
  3077. ANDQ R14, DX
  3078. ORQ R10, R8
  3079. XORQ R12, DX
  3080. XORQ R13, R8
  3081. MOVQ DX, 176(DI)
  3082. MOVQ R8, 184(DI)
  3083. // Prepare round
  3084. MOVQ BP, BX
  3085. ROLQ $0x01, BX
  3086. MOVQ 16(DI), R12
  3087. XORQ 56(DI), DX
  3088. XORQ R15, BX
  3089. XORQ 96(DI), R12
  3090. XORQ 136(DI), DX
  3091. XORQ DX, R12
  3092. MOVQ R12, CX
  3093. ROLQ $0x01, CX
  3094. MOVQ 24(DI), R13
  3095. XORQ 64(DI), R8
  3096. XORQ SI, CX
  3097. XORQ 104(DI), R13
  3098. XORQ 144(DI), R8
  3099. XORQ R8, R13
  3100. MOVQ R13, DX
  3101. ROLQ $0x01, DX
  3102. MOVQ R15, R8
  3103. XORQ BP, DX
  3104. ROLQ $0x01, R8
  3105. MOVQ SI, R9
  3106. XORQ R12, R8
  3107. ROLQ $0x01, R9
  3108. // Result b
  3109. MOVQ (DI), R10
  3110. MOVQ 48(DI), R11
  3111. XORQ R13, R9
  3112. MOVQ 96(DI), R12
  3113. MOVQ 144(DI), R13
  3114. MOVQ 192(DI), R14
  3115. XORQ CX, R11
  3116. ROLQ $0x2c, R11
  3117. XORQ DX, R12
  3118. XORQ BX, R10
  3119. ROLQ $0x2b, R12
  3120. MOVQ R11, SI
  3121. MOVQ $0x8000000000008089, AX
  3122. ORQ R12, SI
  3123. XORQ R10, AX
  3124. XORQ AX, SI
  3125. MOVQ SI, (SP)
  3126. XORQ R9, R14
  3127. ROLQ $0x0e, R14
  3128. MOVQ R10, R15
  3129. ANDQ R11, R15
  3130. XORQ R14, R15
  3131. MOVQ R15, 32(SP)
  3132. XORQ R8, R13
  3133. ROLQ $0x15, R13
  3134. MOVQ R13, AX
  3135. ANDQ R14, AX
  3136. XORQ R12, AX
  3137. MOVQ AX, 16(SP)
  3138. NOTQ R12
  3139. ORQ R10, R14
  3140. ORQ R13, R12
  3141. XORQ R13, R14
  3142. XORQ R11, R12
  3143. MOVQ R14, 24(SP)
  3144. MOVQ R12, 8(SP)
  3145. MOVQ R12, BP
  3146. // Result g
  3147. MOVQ 72(DI), R11
  3148. XORQ R9, R11
  3149. MOVQ 80(DI), R12
  3150. ROLQ $0x14, R11
  3151. XORQ BX, R12
  3152. ROLQ $0x03, R12
  3153. MOVQ 24(DI), R10
  3154. MOVQ R11, AX
  3155. ORQ R12, AX
  3156. XORQ R8, R10
  3157. MOVQ 128(DI), R13
  3158. MOVQ 176(DI), R14
  3159. ROLQ $0x1c, R10
  3160. XORQ R10, AX
  3161. MOVQ AX, 40(SP)
  3162. XORQ AX, SI
  3163. XORQ CX, R13
  3164. ROLQ $0x2d, R13
  3165. MOVQ R12, AX
  3166. ANDQ R13, AX
  3167. XORQ R11, AX
  3168. MOVQ AX, 48(SP)
  3169. XORQ AX, BP
  3170. XORQ DX, R14
  3171. ROLQ $0x3d, R14
  3172. MOVQ R14, AX
  3173. ORQ R10, AX
  3174. XORQ R13, AX
  3175. MOVQ AX, 64(SP)
  3176. ANDQ R11, R10
  3177. XORQ R14, R10
  3178. MOVQ R10, 72(SP)
  3179. NOTQ R14
  3180. XORQ R10, R15
  3181. ORQ R14, R13
  3182. XORQ R12, R13
  3183. MOVQ R13, 56(SP)
  3184. // Result k
  3185. MOVQ 8(DI), R10
  3186. MOVQ 56(DI), R11
  3187. MOVQ 104(DI), R12
  3188. MOVQ 152(DI), R13
  3189. MOVQ 160(DI), R14
  3190. XORQ DX, R11
  3191. ROLQ $0x06, R11
  3192. XORQ R8, R12
  3193. ROLQ $0x19, R12
  3194. MOVQ R11, AX
  3195. ORQ R12, AX
  3196. XORQ CX, R10
  3197. ROLQ $0x01, R10
  3198. XORQ R10, AX
  3199. MOVQ AX, 80(SP)
  3200. XORQ AX, SI
  3201. XORQ R9, R13
  3202. ROLQ $0x08, R13
  3203. MOVQ R12, AX
  3204. ANDQ R13, AX
  3205. XORQ R11, AX
  3206. MOVQ AX, 88(SP)
  3207. XORQ AX, BP
  3208. XORQ BX, R14
  3209. ROLQ $0x12, R14
  3210. NOTQ R13
  3211. MOVQ R13, AX
  3212. ANDQ R14, AX
  3213. XORQ R12, AX
  3214. MOVQ AX, 96(SP)
  3215. MOVQ R14, AX
  3216. ORQ R10, AX
  3217. XORQ R13, AX
  3218. MOVQ AX, 104(SP)
  3219. ANDQ R11, R10
  3220. XORQ R14, R10
  3221. MOVQ R10, 112(SP)
  3222. XORQ R10, R15
  3223. // Result m
  3224. MOVQ 40(DI), R11
  3225. XORQ BX, R11
  3226. MOVQ 88(DI), R12
  3227. ROLQ $0x24, R11
  3228. XORQ CX, R12
  3229. MOVQ 32(DI), R10
  3230. ROLQ $0x0a, R12
  3231. MOVQ R11, AX
  3232. MOVQ 136(DI), R13
  3233. ANDQ R12, AX
  3234. XORQ R9, R10
  3235. MOVQ 184(DI), R14
  3236. ROLQ $0x1b, R10
  3237. XORQ R10, AX
  3238. MOVQ AX, 120(SP)
  3239. XORQ AX, SI
  3240. XORQ DX, R13
  3241. ROLQ $0x0f, R13
  3242. MOVQ R12, AX
  3243. ORQ R13, AX
  3244. XORQ R11, AX
  3245. MOVQ AX, 128(SP)
  3246. XORQ AX, BP
  3247. XORQ R8, R14
  3248. ROLQ $0x38, R14
  3249. NOTQ R13
  3250. MOVQ R13, AX
  3251. ORQ R14, AX
  3252. XORQ R12, AX
  3253. MOVQ AX, 136(SP)
  3254. ORQ R10, R11
  3255. XORQ R14, R11
  3256. MOVQ R11, 152(SP)
  3257. ANDQ R10, R14
  3258. XORQ R13, R14
  3259. MOVQ R14, 144(SP)
  3260. XORQ R11, R15
  3261. // Result s
  3262. MOVQ 16(DI), R10
  3263. MOVQ 64(DI), R11
  3264. MOVQ 112(DI), R12
  3265. XORQ DX, R10
  3266. MOVQ 120(DI), R13
  3267. ROLQ $0x3e, R10
  3268. XORQ R8, R11
  3269. MOVQ 168(DI), R14
  3270. ROLQ $0x37, R11
  3271. XORQ R9, R12
  3272. MOVQ R10, R9
  3273. XORQ CX, R14
  3274. ROLQ $0x02, R14
  3275. ANDQ R11, R9
  3276. XORQ R14, R9
  3277. MOVQ R9, 192(SP)
  3278. ROLQ $0x27, R12
  3279. XORQ R9, R15
  3280. NOTQ R11
  3281. XORQ BX, R13
  3282. MOVQ R11, BX
  3283. ANDQ R12, BX
  3284. XORQ R10, BX
  3285. MOVQ BX, 160(SP)
  3286. XORQ BX, SI
  3287. ROLQ $0x29, R13
  3288. MOVQ R12, CX
  3289. ORQ R13, CX
  3290. XORQ R11, CX
  3291. MOVQ CX, 168(SP)
  3292. XORQ CX, BP
  3293. MOVQ R13, DX
  3294. MOVQ R14, R8
  3295. ANDQ R14, DX
  3296. ORQ R10, R8
  3297. XORQ R12, DX
  3298. XORQ R13, R8
  3299. MOVQ DX, 176(SP)
  3300. MOVQ R8, 184(SP)
  3301. // Prepare round
  3302. MOVQ BP, BX
  3303. ROLQ $0x01, BX
  3304. MOVQ 16(SP), R12
  3305. XORQ 56(SP), DX
  3306. XORQ R15, BX
  3307. XORQ 96(SP), R12
  3308. XORQ 136(SP), DX
  3309. XORQ DX, R12
  3310. MOVQ R12, CX
  3311. ROLQ $0x01, CX
  3312. MOVQ 24(SP), R13
  3313. XORQ 64(SP), R8
  3314. XORQ SI, CX
  3315. XORQ 104(SP), R13
  3316. XORQ 144(SP), R8
  3317. XORQ R8, R13
  3318. MOVQ R13, DX
  3319. ROLQ $0x01, DX
  3320. MOVQ R15, R8
  3321. XORQ BP, DX
  3322. ROLQ $0x01, R8
  3323. MOVQ SI, R9
  3324. XORQ R12, R8
  3325. ROLQ $0x01, R9
  3326. // Result b
  3327. MOVQ (SP), R10
  3328. MOVQ 48(SP), R11
  3329. XORQ R13, R9
  3330. MOVQ 96(SP), R12
  3331. MOVQ 144(SP), R13
  3332. MOVQ 192(SP), R14
  3333. XORQ CX, R11
  3334. ROLQ $0x2c, R11
  3335. XORQ DX, R12
  3336. XORQ BX, R10
  3337. ROLQ $0x2b, R12
  3338. MOVQ R11, SI
  3339. MOVQ $0x8000000000008003, AX
  3340. ORQ R12, SI
  3341. XORQ R10, AX
  3342. XORQ AX, SI
  3343. MOVQ SI, (DI)
  3344. XORQ R9, R14
  3345. ROLQ $0x0e, R14
  3346. MOVQ R10, R15
  3347. ANDQ R11, R15
  3348. XORQ R14, R15
  3349. MOVQ R15, 32(DI)
  3350. XORQ R8, R13
  3351. ROLQ $0x15, R13
  3352. MOVQ R13, AX
  3353. ANDQ R14, AX
  3354. XORQ R12, AX
  3355. MOVQ AX, 16(DI)
  3356. NOTQ R12
  3357. ORQ R10, R14
  3358. ORQ R13, R12
  3359. XORQ R13, R14
  3360. XORQ R11, R12
  3361. MOVQ R14, 24(DI)
  3362. MOVQ R12, 8(DI)
  3363. MOVQ R12, BP
  3364. // Result g
  3365. MOVQ 72(SP), R11
  3366. XORQ R9, R11
  3367. MOVQ 80(SP), R12
  3368. ROLQ $0x14, R11
  3369. XORQ BX, R12
  3370. ROLQ $0x03, R12
  3371. MOVQ 24(SP), R10
  3372. MOVQ R11, AX
  3373. ORQ R12, AX
  3374. XORQ R8, R10
  3375. MOVQ 128(SP), R13
  3376. MOVQ 176(SP), R14
  3377. ROLQ $0x1c, R10
  3378. XORQ R10, AX
  3379. MOVQ AX, 40(DI)
  3380. XORQ AX, SI
  3381. XORQ CX, R13
  3382. ROLQ $0x2d, R13
  3383. MOVQ R12, AX
  3384. ANDQ R13, AX
  3385. XORQ R11, AX
  3386. MOVQ AX, 48(DI)
  3387. XORQ AX, BP
  3388. XORQ DX, R14
  3389. ROLQ $0x3d, R14
  3390. MOVQ R14, AX
  3391. ORQ R10, AX
  3392. XORQ R13, AX
  3393. MOVQ AX, 64(DI)
  3394. ANDQ R11, R10
  3395. XORQ R14, R10
  3396. MOVQ R10, 72(DI)
  3397. NOTQ R14
  3398. XORQ R10, R15
  3399. ORQ R14, R13
  3400. XORQ R12, R13
  3401. MOVQ R13, 56(DI)
  3402. // Result k
  3403. MOVQ 8(SP), R10
  3404. MOVQ 56(SP), R11
  3405. MOVQ 104(SP), R12
  3406. MOVQ 152(SP), R13
  3407. MOVQ 160(SP), R14
  3408. XORQ DX, R11
  3409. ROLQ $0x06, R11
  3410. XORQ R8, R12
  3411. ROLQ $0x19, R12
  3412. MOVQ R11, AX
  3413. ORQ R12, AX
  3414. XORQ CX, R10
  3415. ROLQ $0x01, R10
  3416. XORQ R10, AX
  3417. MOVQ AX, 80(DI)
  3418. XORQ AX, SI
  3419. XORQ R9, R13
  3420. ROLQ $0x08, R13
  3421. MOVQ R12, AX
  3422. ANDQ R13, AX
  3423. XORQ R11, AX
  3424. MOVQ AX, 88(DI)
  3425. XORQ AX, BP
  3426. XORQ BX, R14
  3427. ROLQ $0x12, R14
  3428. NOTQ R13
  3429. MOVQ R13, AX
  3430. ANDQ R14, AX
  3431. XORQ R12, AX
  3432. MOVQ AX, 96(DI)
  3433. MOVQ R14, AX
  3434. ORQ R10, AX
  3435. XORQ R13, AX
  3436. MOVQ AX, 104(DI)
  3437. ANDQ R11, R10
  3438. XORQ R14, R10
  3439. MOVQ R10, 112(DI)
  3440. XORQ R10, R15
  3441. // Result m
  3442. MOVQ 40(SP), R11
  3443. XORQ BX, R11
  3444. MOVQ 88(SP), R12
  3445. ROLQ $0x24, R11
  3446. XORQ CX, R12
  3447. MOVQ 32(SP), R10
  3448. ROLQ $0x0a, R12
  3449. MOVQ R11, AX
  3450. MOVQ 136(SP), R13
  3451. ANDQ R12, AX
  3452. XORQ R9, R10
  3453. MOVQ 184(SP), R14
  3454. ROLQ $0x1b, R10
  3455. XORQ R10, AX
  3456. MOVQ AX, 120(DI)
  3457. XORQ AX, SI
  3458. XORQ DX, R13
  3459. ROLQ $0x0f, R13
  3460. MOVQ R12, AX
  3461. ORQ R13, AX
  3462. XORQ R11, AX
  3463. MOVQ AX, 128(DI)
  3464. XORQ AX, BP
  3465. XORQ R8, R14
  3466. ROLQ $0x38, R14
  3467. NOTQ R13
  3468. MOVQ R13, AX
  3469. ORQ R14, AX
  3470. XORQ R12, AX
  3471. MOVQ AX, 136(DI)
  3472. ORQ R10, R11
  3473. XORQ R14, R11
  3474. MOVQ R11, 152(DI)
  3475. ANDQ R10, R14
  3476. XORQ R13, R14
  3477. MOVQ R14, 144(DI)
  3478. XORQ R11, R15
  3479. // Result s
  3480. MOVQ 16(SP), R10
  3481. MOVQ 64(SP), R11
  3482. MOVQ 112(SP), R12
  3483. XORQ DX, R10
  3484. MOVQ 120(SP), R13
  3485. ROLQ $0x3e, R10
  3486. XORQ R8, R11
  3487. MOVQ 168(SP), R14
  3488. ROLQ $0x37, R11
  3489. XORQ R9, R12
  3490. MOVQ R10, R9
  3491. XORQ CX, R14
  3492. ROLQ $0x02, R14
  3493. ANDQ R11, R9
  3494. XORQ R14, R9
  3495. MOVQ R9, 192(DI)
  3496. ROLQ $0x27, R12
  3497. XORQ R9, R15
  3498. NOTQ R11
  3499. XORQ BX, R13
  3500. MOVQ R11, BX
  3501. ANDQ R12, BX
  3502. XORQ R10, BX
  3503. MOVQ BX, 160(DI)
  3504. XORQ BX, SI
  3505. ROLQ $0x29, R13
  3506. MOVQ R12, CX
  3507. ORQ R13, CX
  3508. XORQ R11, CX
  3509. MOVQ CX, 168(DI)
  3510. XORQ CX, BP
  3511. MOVQ R13, DX
  3512. MOVQ R14, R8
  3513. ANDQ R14, DX
  3514. ORQ R10, R8
  3515. XORQ R12, DX
  3516. XORQ R13, R8
  3517. MOVQ DX, 176(DI)
  3518. MOVQ R8, 184(DI)
  3519. // Prepare round
  3520. MOVQ BP, BX
  3521. ROLQ $0x01, BX
  3522. MOVQ 16(DI), R12
  3523. XORQ 56(DI), DX
  3524. XORQ R15, BX
  3525. XORQ 96(DI), R12
  3526. XORQ 136(DI), DX
  3527. XORQ DX, R12
  3528. MOVQ R12, CX
  3529. ROLQ $0x01, CX
  3530. MOVQ 24(DI), R13
  3531. XORQ 64(DI), R8
  3532. XORQ SI, CX
  3533. XORQ 104(DI), R13
  3534. XORQ 144(DI), R8
  3535. XORQ R8, R13
  3536. MOVQ R13, DX
  3537. ROLQ $0x01, DX
  3538. MOVQ R15, R8
  3539. XORQ BP, DX
  3540. ROLQ $0x01, R8
  3541. MOVQ SI, R9
  3542. XORQ R12, R8
  3543. ROLQ $0x01, R9
  3544. // Result b
  3545. MOVQ (DI), R10
  3546. MOVQ 48(DI), R11
  3547. XORQ R13, R9
  3548. MOVQ 96(DI), R12
  3549. MOVQ 144(DI), R13
  3550. MOVQ 192(DI), R14
  3551. XORQ CX, R11
  3552. ROLQ $0x2c, R11
  3553. XORQ DX, R12
  3554. XORQ BX, R10
  3555. ROLQ $0x2b, R12
  3556. MOVQ R11, SI
  3557. MOVQ $0x8000000000008002, AX
  3558. ORQ R12, SI
  3559. XORQ R10, AX
  3560. XORQ AX, SI
  3561. MOVQ SI, (SP)
  3562. XORQ R9, R14
  3563. ROLQ $0x0e, R14
  3564. MOVQ R10, R15
  3565. ANDQ R11, R15
  3566. XORQ R14, R15
  3567. MOVQ R15, 32(SP)
  3568. XORQ R8, R13
  3569. ROLQ $0x15, R13
  3570. MOVQ R13, AX
  3571. ANDQ R14, AX
  3572. XORQ R12, AX
  3573. MOVQ AX, 16(SP)
  3574. NOTQ R12
  3575. ORQ R10, R14
  3576. ORQ R13, R12
  3577. XORQ R13, R14
  3578. XORQ R11, R12
  3579. MOVQ R14, 24(SP)
  3580. MOVQ R12, 8(SP)
  3581. MOVQ R12, BP
  3582. // Result g
  3583. MOVQ 72(DI), R11
  3584. XORQ R9, R11
  3585. MOVQ 80(DI), R12
  3586. ROLQ $0x14, R11
  3587. XORQ BX, R12
  3588. ROLQ $0x03, R12
  3589. MOVQ 24(DI), R10
  3590. MOVQ R11, AX
  3591. ORQ R12, AX
  3592. XORQ R8, R10
  3593. MOVQ 128(DI), R13
  3594. MOVQ 176(DI), R14
  3595. ROLQ $0x1c, R10
  3596. XORQ R10, AX
  3597. MOVQ AX, 40(SP)
  3598. XORQ AX, SI
  3599. XORQ CX, R13
  3600. ROLQ $0x2d, R13
  3601. MOVQ R12, AX
  3602. ANDQ R13, AX
  3603. XORQ R11, AX
  3604. MOVQ AX, 48(SP)
  3605. XORQ AX, BP
  3606. XORQ DX, R14
  3607. ROLQ $0x3d, R14
  3608. MOVQ R14, AX
  3609. ORQ R10, AX
  3610. XORQ R13, AX
  3611. MOVQ AX, 64(SP)
  3612. ANDQ R11, R10
  3613. XORQ R14, R10
  3614. MOVQ R10, 72(SP)
  3615. NOTQ R14
  3616. XORQ R10, R15
  3617. ORQ R14, R13
  3618. XORQ R12, R13
  3619. MOVQ R13, 56(SP)
  3620. // Result k
  3621. MOVQ 8(DI), R10
  3622. MOVQ 56(DI), R11
  3623. MOVQ 104(DI), R12
  3624. MOVQ 152(DI), R13
  3625. MOVQ 160(DI), R14
  3626. XORQ DX, R11
  3627. ROLQ $0x06, R11
  3628. XORQ R8, R12
  3629. ROLQ $0x19, R12
  3630. MOVQ R11, AX
  3631. ORQ R12, AX
  3632. XORQ CX, R10
  3633. ROLQ $0x01, R10
  3634. XORQ R10, AX
  3635. MOVQ AX, 80(SP)
  3636. XORQ AX, SI
  3637. XORQ R9, R13
  3638. ROLQ $0x08, R13
  3639. MOVQ R12, AX
  3640. ANDQ R13, AX
  3641. XORQ R11, AX
  3642. MOVQ AX, 88(SP)
  3643. XORQ AX, BP
  3644. XORQ BX, R14
  3645. ROLQ $0x12, R14
  3646. NOTQ R13
  3647. MOVQ R13, AX
  3648. ANDQ R14, AX
  3649. XORQ R12, AX
  3650. MOVQ AX, 96(SP)
  3651. MOVQ R14, AX
  3652. ORQ R10, AX
  3653. XORQ R13, AX
  3654. MOVQ AX, 104(SP)
  3655. ANDQ R11, R10
  3656. XORQ R14, R10
  3657. MOVQ R10, 112(SP)
  3658. XORQ R10, R15
  3659. // Result m
  3660. MOVQ 40(DI), R11
  3661. XORQ BX, R11
  3662. MOVQ 88(DI), R12
  3663. ROLQ $0x24, R11
  3664. XORQ CX, R12
  3665. MOVQ 32(DI), R10
  3666. ROLQ $0x0a, R12
  3667. MOVQ R11, AX
  3668. MOVQ 136(DI), R13
  3669. ANDQ R12, AX
  3670. XORQ R9, R10
  3671. MOVQ 184(DI), R14
  3672. ROLQ $0x1b, R10
  3673. XORQ R10, AX
  3674. MOVQ AX, 120(SP)
  3675. XORQ AX, SI
  3676. XORQ DX, R13
  3677. ROLQ $0x0f, R13
  3678. MOVQ R12, AX
  3679. ORQ R13, AX
  3680. XORQ R11, AX
  3681. MOVQ AX, 128(SP)
  3682. XORQ AX, BP
  3683. XORQ R8, R14
  3684. ROLQ $0x38, R14
  3685. NOTQ R13
  3686. MOVQ R13, AX
  3687. ORQ R14, AX
  3688. XORQ R12, AX
  3689. MOVQ AX, 136(SP)
  3690. ORQ R10, R11
  3691. XORQ R14, R11
  3692. MOVQ R11, 152(SP)
  3693. ANDQ R10, R14
  3694. XORQ R13, R14
  3695. MOVQ R14, 144(SP)
  3696. XORQ R11, R15
  3697. // Result s
  3698. MOVQ 16(DI), R10
  3699. MOVQ 64(DI), R11
  3700. MOVQ 112(DI), R12
  3701. XORQ DX, R10
  3702. MOVQ 120(DI), R13
  3703. ROLQ $0x3e, R10
  3704. XORQ R8, R11
  3705. MOVQ 168(DI), R14
  3706. ROLQ $0x37, R11
  3707. XORQ R9, R12
  3708. MOVQ R10, R9
  3709. XORQ CX, R14
  3710. ROLQ $0x02, R14
  3711. ANDQ R11, R9
  3712. XORQ R14, R9
  3713. MOVQ R9, 192(SP)
  3714. ROLQ $0x27, R12
  3715. XORQ R9, R15
  3716. NOTQ R11
  3717. XORQ BX, R13
  3718. MOVQ R11, BX
  3719. ANDQ R12, BX
  3720. XORQ R10, BX
  3721. MOVQ BX, 160(SP)
  3722. XORQ BX, SI
  3723. ROLQ $0x29, R13
  3724. MOVQ R12, CX
  3725. ORQ R13, CX
  3726. XORQ R11, CX
  3727. MOVQ CX, 168(SP)
  3728. XORQ CX, BP
  3729. MOVQ R13, DX
  3730. MOVQ R14, R8
  3731. ANDQ R14, DX
  3732. ORQ R10, R8
  3733. XORQ R12, DX
  3734. XORQ R13, R8
  3735. MOVQ DX, 176(SP)
  3736. MOVQ R8, 184(SP)
  3737. // Prepare round
  3738. MOVQ BP, BX
  3739. ROLQ $0x01, BX
  3740. MOVQ 16(SP), R12
  3741. XORQ 56(SP), DX
  3742. XORQ R15, BX
  3743. XORQ 96(SP), R12
  3744. XORQ 136(SP), DX
  3745. XORQ DX, R12
  3746. MOVQ R12, CX
  3747. ROLQ $0x01, CX
  3748. MOVQ 24(SP), R13
  3749. XORQ 64(SP), R8
  3750. XORQ SI, CX
  3751. XORQ 104(SP), R13
  3752. XORQ 144(SP), R8
  3753. XORQ R8, R13
  3754. MOVQ R13, DX
  3755. ROLQ $0x01, DX
  3756. MOVQ R15, R8
  3757. XORQ BP, DX
  3758. ROLQ $0x01, R8
  3759. MOVQ SI, R9
  3760. XORQ R12, R8
  3761. ROLQ $0x01, R9
  3762. // Result b
  3763. MOVQ (SP), R10
  3764. MOVQ 48(SP), R11
  3765. XORQ R13, R9
  3766. MOVQ 96(SP), R12
  3767. MOVQ 144(SP), R13
  3768. MOVQ 192(SP), R14
  3769. XORQ CX, R11
  3770. ROLQ $0x2c, R11
  3771. XORQ DX, R12
  3772. XORQ BX, R10
  3773. ROLQ $0x2b, R12
  3774. MOVQ R11, SI
  3775. MOVQ $0x8000000000000080, AX
  3776. ORQ R12, SI
  3777. XORQ R10, AX
  3778. XORQ AX, SI
  3779. MOVQ SI, (DI)
  3780. XORQ R9, R14
  3781. ROLQ $0x0e, R14
  3782. MOVQ R10, R15
  3783. ANDQ R11, R15
  3784. XORQ R14, R15
  3785. MOVQ R15, 32(DI)
  3786. XORQ R8, R13
  3787. ROLQ $0x15, R13
  3788. MOVQ R13, AX
  3789. ANDQ R14, AX
  3790. XORQ R12, AX
  3791. MOVQ AX, 16(DI)
  3792. NOTQ R12
  3793. ORQ R10, R14
  3794. ORQ R13, R12
  3795. XORQ R13, R14
  3796. XORQ R11, R12
  3797. MOVQ R14, 24(DI)
  3798. MOVQ R12, 8(DI)
  3799. MOVQ R12, BP
  3800. // Result g
  3801. MOVQ 72(SP), R11
  3802. XORQ R9, R11
  3803. MOVQ 80(SP), R12
  3804. ROLQ $0x14, R11
  3805. XORQ BX, R12
  3806. ROLQ $0x03, R12
  3807. MOVQ 24(SP), R10
  3808. MOVQ R11, AX
  3809. ORQ R12, AX
  3810. XORQ R8, R10
  3811. MOVQ 128(SP), R13
  3812. MOVQ 176(SP), R14
  3813. ROLQ $0x1c, R10
  3814. XORQ R10, AX
  3815. MOVQ AX, 40(DI)
  3816. XORQ AX, SI
  3817. XORQ CX, R13
  3818. ROLQ $0x2d, R13
  3819. MOVQ R12, AX
  3820. ANDQ R13, AX
  3821. XORQ R11, AX
  3822. MOVQ AX, 48(DI)
  3823. XORQ AX, BP
  3824. XORQ DX, R14
  3825. ROLQ $0x3d, R14
  3826. MOVQ R14, AX
  3827. ORQ R10, AX
  3828. XORQ R13, AX
  3829. MOVQ AX, 64(DI)
  3830. ANDQ R11, R10
  3831. XORQ R14, R10
  3832. MOVQ R10, 72(DI)
  3833. NOTQ R14
  3834. XORQ R10, R15
  3835. ORQ R14, R13
  3836. XORQ R12, R13
  3837. MOVQ R13, 56(DI)
  3838. // Result k
  3839. MOVQ 8(SP), R10
  3840. MOVQ 56(SP), R11
  3841. MOVQ 104(SP), R12
  3842. MOVQ 152(SP), R13
  3843. MOVQ 160(SP), R14
  3844. XORQ DX, R11
  3845. ROLQ $0x06, R11
  3846. XORQ R8, R12
  3847. ROLQ $0x19, R12
  3848. MOVQ R11, AX
  3849. ORQ R12, AX
  3850. XORQ CX, R10
  3851. ROLQ $0x01, R10
  3852. XORQ R10, AX
  3853. MOVQ AX, 80(DI)
  3854. XORQ AX, SI
  3855. XORQ R9, R13
  3856. ROLQ $0x08, R13
  3857. MOVQ R12, AX
  3858. ANDQ R13, AX
  3859. XORQ R11, AX
  3860. MOVQ AX, 88(DI)
  3861. XORQ AX, BP
  3862. XORQ BX, R14
  3863. ROLQ $0x12, R14
  3864. NOTQ R13
  3865. MOVQ R13, AX
  3866. ANDQ R14, AX
  3867. XORQ R12, AX
  3868. MOVQ AX, 96(DI)
  3869. MOVQ R14, AX
  3870. ORQ R10, AX
  3871. XORQ R13, AX
  3872. MOVQ AX, 104(DI)
  3873. ANDQ R11, R10
  3874. XORQ R14, R10
  3875. MOVQ R10, 112(DI)
  3876. XORQ R10, R15
  3877. // Result m
  3878. MOVQ 40(SP), R11
  3879. XORQ BX, R11
  3880. MOVQ 88(SP), R12
  3881. ROLQ $0x24, R11
  3882. XORQ CX, R12
  3883. MOVQ 32(SP), R10
  3884. ROLQ $0x0a, R12
  3885. MOVQ R11, AX
  3886. MOVQ 136(SP), R13
  3887. ANDQ R12, AX
  3888. XORQ R9, R10
  3889. MOVQ 184(SP), R14
  3890. ROLQ $0x1b, R10
  3891. XORQ R10, AX
  3892. MOVQ AX, 120(DI)
  3893. XORQ AX, SI
  3894. XORQ DX, R13
  3895. ROLQ $0x0f, R13
  3896. MOVQ R12, AX
  3897. ORQ R13, AX
  3898. XORQ R11, AX
  3899. MOVQ AX, 128(DI)
  3900. XORQ AX, BP
  3901. XORQ R8, R14
  3902. ROLQ $0x38, R14
  3903. NOTQ R13
  3904. MOVQ R13, AX
  3905. ORQ R14, AX
  3906. XORQ R12, AX
  3907. MOVQ AX, 136(DI)
  3908. ORQ R10, R11
  3909. XORQ R14, R11
  3910. MOVQ R11, 152(DI)
  3911. ANDQ R10, R14
  3912. XORQ R13, R14
  3913. MOVQ R14, 144(DI)
  3914. XORQ R11, R15
  3915. // Result s
  3916. MOVQ 16(SP), R10
  3917. MOVQ 64(SP), R11
  3918. MOVQ 112(SP), R12
  3919. XORQ DX, R10
  3920. MOVQ 120(SP), R13
  3921. ROLQ $0x3e, R10
  3922. XORQ R8, R11
  3923. MOVQ 168(SP), R14
  3924. ROLQ $0x37, R11
  3925. XORQ R9, R12
  3926. MOVQ R10, R9
  3927. XORQ CX, R14
  3928. ROLQ $0x02, R14
  3929. ANDQ R11, R9
  3930. XORQ R14, R9
  3931. MOVQ R9, 192(DI)
  3932. ROLQ $0x27, R12
  3933. XORQ R9, R15
  3934. NOTQ R11
  3935. XORQ BX, R13
  3936. MOVQ R11, BX
  3937. ANDQ R12, BX
  3938. XORQ R10, BX
  3939. MOVQ BX, 160(DI)
  3940. XORQ BX, SI
  3941. ROLQ $0x29, R13
  3942. MOVQ R12, CX
  3943. ORQ R13, CX
  3944. XORQ R11, CX
  3945. MOVQ CX, 168(DI)
  3946. XORQ CX, BP
  3947. MOVQ R13, DX
  3948. MOVQ R14, R8
  3949. ANDQ R14, DX
  3950. ORQ R10, R8
  3951. XORQ R12, DX
  3952. XORQ R13, R8
  3953. MOVQ DX, 176(DI)
  3954. MOVQ R8, 184(DI)
  3955. // Prepare round
  3956. MOVQ BP, BX
  3957. ROLQ $0x01, BX
  3958. MOVQ 16(DI), R12
  3959. XORQ 56(DI), DX
  3960. XORQ R15, BX
  3961. XORQ 96(DI), R12
  3962. XORQ 136(DI), DX
  3963. XORQ DX, R12
  3964. MOVQ R12, CX
  3965. ROLQ $0x01, CX
  3966. MOVQ 24(DI), R13
  3967. XORQ 64(DI), R8
  3968. XORQ SI, CX
  3969. XORQ 104(DI), R13
  3970. XORQ 144(DI), R8
  3971. XORQ R8, R13
  3972. MOVQ R13, DX
  3973. ROLQ $0x01, DX
  3974. MOVQ R15, R8
  3975. XORQ BP, DX
  3976. ROLQ $0x01, R8
  3977. MOVQ SI, R9
  3978. XORQ R12, R8
  3979. ROLQ $0x01, R9
  3980. // Result b
  3981. MOVQ (DI), R10
  3982. MOVQ 48(DI), R11
  3983. XORQ R13, R9
  3984. MOVQ 96(DI), R12
  3985. MOVQ 144(DI), R13
  3986. MOVQ 192(DI), R14
  3987. XORQ CX, R11
  3988. ROLQ $0x2c, R11
  3989. XORQ DX, R12
  3990. XORQ BX, R10
  3991. ROLQ $0x2b, R12
  3992. MOVQ R11, SI
  3993. MOVQ $0x000000000000800a, AX
  3994. ORQ R12, SI
  3995. XORQ R10, AX
  3996. XORQ AX, SI
  3997. MOVQ SI, (SP)
  3998. XORQ R9, R14
  3999. ROLQ $0x0e, R14
  4000. MOVQ R10, R15
  4001. ANDQ R11, R15
  4002. XORQ R14, R15
  4003. MOVQ R15, 32(SP)
  4004. XORQ R8, R13
  4005. ROLQ $0x15, R13
  4006. MOVQ R13, AX
  4007. ANDQ R14, AX
  4008. XORQ R12, AX
  4009. MOVQ AX, 16(SP)
  4010. NOTQ R12
  4011. ORQ R10, R14
  4012. ORQ R13, R12
  4013. XORQ R13, R14
  4014. XORQ R11, R12
  4015. MOVQ R14, 24(SP)
  4016. MOVQ R12, 8(SP)
  4017. MOVQ R12, BP
  4018. // Result g
  4019. MOVQ 72(DI), R11
  4020. XORQ R9, R11
  4021. MOVQ 80(DI), R12
  4022. ROLQ $0x14, R11
  4023. XORQ BX, R12
  4024. ROLQ $0x03, R12
  4025. MOVQ 24(DI), R10
  4026. MOVQ R11, AX
  4027. ORQ R12, AX
  4028. XORQ R8, R10
  4029. MOVQ 128(DI), R13
  4030. MOVQ 176(DI), R14
  4031. ROLQ $0x1c, R10
  4032. XORQ R10, AX
  4033. MOVQ AX, 40(SP)
  4034. XORQ AX, SI
  4035. XORQ CX, R13
  4036. ROLQ $0x2d, R13
  4037. MOVQ R12, AX
  4038. ANDQ R13, AX
  4039. XORQ R11, AX
  4040. MOVQ AX, 48(SP)
  4041. XORQ AX, BP
  4042. XORQ DX, R14
  4043. ROLQ $0x3d, R14
  4044. MOVQ R14, AX
  4045. ORQ R10, AX
  4046. XORQ R13, AX
  4047. MOVQ AX, 64(SP)
  4048. ANDQ R11, R10
  4049. XORQ R14, R10
  4050. MOVQ R10, 72(SP)
  4051. NOTQ R14
  4052. XORQ R10, R15
  4053. ORQ R14, R13
  4054. XORQ R12, R13
  4055. MOVQ R13, 56(SP)
  4056. // Result k
  4057. MOVQ 8(DI), R10
  4058. MOVQ 56(DI), R11
  4059. MOVQ 104(DI), R12
  4060. MOVQ 152(DI), R13
  4061. MOVQ 160(DI), R14
  4062. XORQ DX, R11
  4063. ROLQ $0x06, R11
  4064. XORQ R8, R12
  4065. ROLQ $0x19, R12
  4066. MOVQ R11, AX
  4067. ORQ R12, AX
  4068. XORQ CX, R10
  4069. ROLQ $0x01, R10
  4070. XORQ R10, AX
  4071. MOVQ AX, 80(SP)
  4072. XORQ AX, SI
  4073. XORQ R9, R13
  4074. ROLQ $0x08, R13
  4075. MOVQ R12, AX
  4076. ANDQ R13, AX
  4077. XORQ R11, AX
  4078. MOVQ AX, 88(SP)
  4079. XORQ AX, BP
  4080. XORQ BX, R14
  4081. ROLQ $0x12, R14
  4082. NOTQ R13
  4083. MOVQ R13, AX
  4084. ANDQ R14, AX
  4085. XORQ R12, AX
  4086. MOVQ AX, 96(SP)
  4087. MOVQ R14, AX
  4088. ORQ R10, AX
  4089. XORQ R13, AX
  4090. MOVQ AX, 104(SP)
  4091. ANDQ R11, R10
  4092. XORQ R14, R10
  4093. MOVQ R10, 112(SP)
  4094. XORQ R10, R15
  4095. // Result m
  4096. MOVQ 40(DI), R11
  4097. XORQ BX, R11
  4098. MOVQ 88(DI), R12
  4099. ROLQ $0x24, R11
  4100. XORQ CX, R12
  4101. MOVQ 32(DI), R10
  4102. ROLQ $0x0a, R12
  4103. MOVQ R11, AX
  4104. MOVQ 136(DI), R13
  4105. ANDQ R12, AX
  4106. XORQ R9, R10
  4107. MOVQ 184(DI), R14
  4108. ROLQ $0x1b, R10
  4109. XORQ R10, AX
  4110. MOVQ AX, 120(SP)
  4111. XORQ AX, SI
  4112. XORQ DX, R13
  4113. ROLQ $0x0f, R13
  4114. MOVQ R12, AX
  4115. ORQ R13, AX
  4116. XORQ R11, AX
  4117. MOVQ AX, 128(SP)
  4118. XORQ AX, BP
  4119. XORQ R8, R14
  4120. ROLQ $0x38, R14
  4121. NOTQ R13
  4122. MOVQ R13, AX
  4123. ORQ R14, AX
  4124. XORQ R12, AX
  4125. MOVQ AX, 136(SP)
  4126. ORQ R10, R11
  4127. XORQ R14, R11
  4128. MOVQ R11, 152(SP)
  4129. ANDQ R10, R14
  4130. XORQ R13, R14
  4131. MOVQ R14, 144(SP)
  4132. XORQ R11, R15
  4133. // Result s
  4134. MOVQ 16(DI), R10
  4135. MOVQ 64(DI), R11
  4136. MOVQ 112(DI), R12
  4137. XORQ DX, R10
  4138. MOVQ 120(DI), R13
  4139. ROLQ $0x3e, R10
  4140. XORQ R8, R11
  4141. MOVQ 168(DI), R14
  4142. ROLQ $0x37, R11
  4143. XORQ R9, R12
  4144. MOVQ R10, R9
  4145. XORQ CX, R14
  4146. ROLQ $0x02, R14
  4147. ANDQ R11, R9
  4148. XORQ R14, R9
  4149. MOVQ R9, 192(SP)
  4150. ROLQ $0x27, R12
  4151. XORQ R9, R15
  4152. NOTQ R11
  4153. XORQ BX, R13
  4154. MOVQ R11, BX
  4155. ANDQ R12, BX
  4156. XORQ R10, BX
  4157. MOVQ BX, 160(SP)
  4158. XORQ BX, SI
  4159. ROLQ $0x29, R13
  4160. MOVQ R12, CX
  4161. ORQ R13, CX
  4162. XORQ R11, CX
  4163. MOVQ CX, 168(SP)
  4164. XORQ CX, BP
  4165. MOVQ R13, DX
  4166. MOVQ R14, R8
  4167. ANDQ R14, DX
  4168. ORQ R10, R8
  4169. XORQ R12, DX
  4170. XORQ R13, R8
  4171. MOVQ DX, 176(SP)
  4172. MOVQ R8, 184(SP)
  4173. // Prepare round
  4174. MOVQ BP, BX
  4175. ROLQ $0x01, BX
  4176. MOVQ 16(SP), R12
  4177. XORQ 56(SP), DX
  4178. XORQ R15, BX
  4179. XORQ 96(SP), R12
  4180. XORQ 136(SP), DX
  4181. XORQ DX, R12
  4182. MOVQ R12, CX
  4183. ROLQ $0x01, CX
  4184. MOVQ 24(SP), R13
  4185. XORQ 64(SP), R8
  4186. XORQ SI, CX
  4187. XORQ 104(SP), R13
  4188. XORQ 144(SP), R8
  4189. XORQ R8, R13
  4190. MOVQ R13, DX
  4191. ROLQ $0x01, DX
  4192. MOVQ R15, R8
  4193. XORQ BP, DX
  4194. ROLQ $0x01, R8
  4195. MOVQ SI, R9
  4196. XORQ R12, R8
  4197. ROLQ $0x01, R9
  4198. // Result b
  4199. MOVQ (SP), R10
  4200. MOVQ 48(SP), R11
  4201. XORQ R13, R9
  4202. MOVQ 96(SP), R12
  4203. MOVQ 144(SP), R13
  4204. MOVQ 192(SP), R14
  4205. XORQ CX, R11
  4206. ROLQ $0x2c, R11
  4207. XORQ DX, R12
  4208. XORQ BX, R10
  4209. ROLQ $0x2b, R12
  4210. MOVQ R11, SI
  4211. MOVQ $0x800000008000000a, AX
  4212. ORQ R12, SI
  4213. XORQ R10, AX
  4214. XORQ AX, SI
  4215. MOVQ SI, (DI)
  4216. XORQ R9, R14
  4217. ROLQ $0x0e, R14
  4218. MOVQ R10, R15
  4219. ANDQ R11, R15
  4220. XORQ R14, R15
  4221. MOVQ R15, 32(DI)
  4222. XORQ R8, R13
  4223. ROLQ $0x15, R13
  4224. MOVQ R13, AX
  4225. ANDQ R14, AX
  4226. XORQ R12, AX
  4227. MOVQ AX, 16(DI)
  4228. NOTQ R12
  4229. ORQ R10, R14
  4230. ORQ R13, R12
  4231. XORQ R13, R14
  4232. XORQ R11, R12
  4233. MOVQ R14, 24(DI)
  4234. MOVQ R12, 8(DI)
  4235. MOVQ R12, BP
  4236. // Result g
  4237. MOVQ 72(SP), R11
  4238. XORQ R9, R11
  4239. MOVQ 80(SP), R12
  4240. ROLQ $0x14, R11
  4241. XORQ BX, R12
  4242. ROLQ $0x03, R12
  4243. MOVQ 24(SP), R10
  4244. MOVQ R11, AX
  4245. ORQ R12, AX
  4246. XORQ R8, R10
  4247. MOVQ 128(SP), R13
  4248. MOVQ 176(SP), R14
  4249. ROLQ $0x1c, R10
  4250. XORQ R10, AX
  4251. MOVQ AX, 40(DI)
  4252. XORQ AX, SI
  4253. XORQ CX, R13
  4254. ROLQ $0x2d, R13
  4255. MOVQ R12, AX
  4256. ANDQ R13, AX
  4257. XORQ R11, AX
  4258. MOVQ AX, 48(DI)
  4259. XORQ AX, BP
  4260. XORQ DX, R14
  4261. ROLQ $0x3d, R14
  4262. MOVQ R14, AX
  4263. ORQ R10, AX
  4264. XORQ R13, AX
  4265. MOVQ AX, 64(DI)
  4266. ANDQ R11, R10
  4267. XORQ R14, R10
  4268. MOVQ R10, 72(DI)
  4269. NOTQ R14
  4270. XORQ R10, R15
  4271. ORQ R14, R13
  4272. XORQ R12, R13
  4273. MOVQ R13, 56(DI)
  4274. // Result k
  4275. MOVQ 8(SP), R10
  4276. MOVQ 56(SP), R11
  4277. MOVQ 104(SP), R12
  4278. MOVQ 152(SP), R13
  4279. MOVQ 160(SP), R14
  4280. XORQ DX, R11
  4281. ROLQ $0x06, R11
  4282. XORQ R8, R12
  4283. ROLQ $0x19, R12
  4284. MOVQ R11, AX
  4285. ORQ R12, AX
  4286. XORQ CX, R10
  4287. ROLQ $0x01, R10
  4288. XORQ R10, AX
  4289. MOVQ AX, 80(DI)
  4290. XORQ AX, SI
  4291. XORQ R9, R13
  4292. ROLQ $0x08, R13
  4293. MOVQ R12, AX
  4294. ANDQ R13, AX
  4295. XORQ R11, AX
  4296. MOVQ AX, 88(DI)
  4297. XORQ AX, BP
  4298. XORQ BX, R14
  4299. ROLQ $0x12, R14
  4300. NOTQ R13
  4301. MOVQ R13, AX
  4302. ANDQ R14, AX
  4303. XORQ R12, AX
  4304. MOVQ AX, 96(DI)
  4305. MOVQ R14, AX
  4306. ORQ R10, AX
  4307. XORQ R13, AX
  4308. MOVQ AX, 104(DI)
  4309. ANDQ R11, R10
  4310. XORQ R14, R10
  4311. MOVQ R10, 112(DI)
  4312. XORQ R10, R15
  4313. // Result m
  4314. MOVQ 40(SP), R11
  4315. XORQ BX, R11
  4316. MOVQ 88(SP), R12
  4317. ROLQ $0x24, R11
  4318. XORQ CX, R12
  4319. MOVQ 32(SP), R10
  4320. ROLQ $0x0a, R12
  4321. MOVQ R11, AX
  4322. MOVQ 136(SP), R13
  4323. ANDQ R12, AX
  4324. XORQ R9, R10
  4325. MOVQ 184(SP), R14
  4326. ROLQ $0x1b, R10
  4327. XORQ R10, AX
  4328. MOVQ AX, 120(DI)
  4329. XORQ AX, SI
  4330. XORQ DX, R13
  4331. ROLQ $0x0f, R13
  4332. MOVQ R12, AX
  4333. ORQ R13, AX
  4334. XORQ R11, AX
  4335. MOVQ AX, 128(DI)
  4336. XORQ AX, BP
  4337. XORQ R8, R14
  4338. ROLQ $0x38, R14
  4339. NOTQ R13
  4340. MOVQ R13, AX
  4341. ORQ R14, AX
  4342. XORQ R12, AX
  4343. MOVQ AX, 136(DI)
  4344. ORQ R10, R11
  4345. XORQ R14, R11
  4346. MOVQ R11, 152(DI)
  4347. ANDQ R10, R14
  4348. XORQ R13, R14
  4349. MOVQ R14, 144(DI)
  4350. XORQ R11, R15
  4351. // Result s
  4352. MOVQ 16(SP), R10
  4353. MOVQ 64(SP), R11
  4354. MOVQ 112(SP), R12
  4355. XORQ DX, R10
  4356. MOVQ 120(SP), R13
  4357. ROLQ $0x3e, R10
  4358. XORQ R8, R11
  4359. MOVQ 168(SP), R14
  4360. ROLQ $0x37, R11
  4361. XORQ R9, R12
  4362. MOVQ R10, R9
  4363. XORQ CX, R14
  4364. ROLQ $0x02, R14
  4365. ANDQ R11, R9
  4366. XORQ R14, R9
  4367. MOVQ R9, 192(DI)
  4368. ROLQ $0x27, R12
  4369. XORQ R9, R15
  4370. NOTQ R11
  4371. XORQ BX, R13
  4372. MOVQ R11, BX
  4373. ANDQ R12, BX
  4374. XORQ R10, BX
  4375. MOVQ BX, 160(DI)
  4376. XORQ BX, SI
  4377. ROLQ $0x29, R13
  4378. MOVQ R12, CX
  4379. ORQ R13, CX
  4380. XORQ R11, CX
  4381. MOVQ CX, 168(DI)
  4382. XORQ CX, BP
  4383. MOVQ R13, DX
  4384. MOVQ R14, R8
  4385. ANDQ R14, DX
  4386. ORQ R10, R8
  4387. XORQ R12, DX
  4388. XORQ R13, R8
  4389. MOVQ DX, 176(DI)
  4390. MOVQ R8, 184(DI)
  4391. // Prepare round
  4392. MOVQ BP, BX
  4393. ROLQ $0x01, BX
  4394. MOVQ 16(DI), R12
  4395. XORQ 56(DI), DX
  4396. XORQ R15, BX
  4397. XORQ 96(DI), R12
  4398. XORQ 136(DI), DX
  4399. XORQ DX, R12
  4400. MOVQ R12, CX
  4401. ROLQ $0x01, CX
  4402. MOVQ 24(DI), R13
  4403. XORQ 64(DI), R8
  4404. XORQ SI, CX
  4405. XORQ 104(DI), R13
  4406. XORQ 144(DI), R8
  4407. XORQ R8, R13
  4408. MOVQ R13, DX
  4409. ROLQ $0x01, DX
  4410. MOVQ R15, R8
  4411. XORQ BP, DX
  4412. ROLQ $0x01, R8
  4413. MOVQ SI, R9
  4414. XORQ R12, R8
  4415. ROLQ $0x01, R9
  4416. // Result b
  4417. MOVQ (DI), R10
  4418. MOVQ 48(DI), R11
  4419. XORQ R13, R9
  4420. MOVQ 96(DI), R12
  4421. MOVQ 144(DI), R13
  4422. MOVQ 192(DI), R14
  4423. XORQ CX, R11
  4424. ROLQ $0x2c, R11
  4425. XORQ DX, R12
  4426. XORQ BX, R10
  4427. ROLQ $0x2b, R12
  4428. MOVQ R11, SI
  4429. MOVQ $0x8000000080008081, AX
  4430. ORQ R12, SI
  4431. XORQ R10, AX
  4432. XORQ AX, SI
  4433. MOVQ SI, (SP)
  4434. XORQ R9, R14
  4435. ROLQ $0x0e, R14
  4436. MOVQ R10, R15
  4437. ANDQ R11, R15
  4438. XORQ R14, R15
  4439. MOVQ R15, 32(SP)
  4440. XORQ R8, R13
  4441. ROLQ $0x15, R13
  4442. MOVQ R13, AX
  4443. ANDQ R14, AX
  4444. XORQ R12, AX
  4445. MOVQ AX, 16(SP)
  4446. NOTQ R12
  4447. ORQ R10, R14
  4448. ORQ R13, R12
  4449. XORQ R13, R14
  4450. XORQ R11, R12
  4451. MOVQ R14, 24(SP)
  4452. MOVQ R12, 8(SP)
  4453. MOVQ R12, BP
  4454. // Result g
  4455. MOVQ 72(DI), R11
  4456. XORQ R9, R11
  4457. MOVQ 80(DI), R12
  4458. ROLQ $0x14, R11
  4459. XORQ BX, R12
  4460. ROLQ $0x03, R12
  4461. MOVQ 24(DI), R10
  4462. MOVQ R11, AX
  4463. ORQ R12, AX
  4464. XORQ R8, R10
  4465. MOVQ 128(DI), R13
  4466. MOVQ 176(DI), R14
  4467. ROLQ $0x1c, R10
  4468. XORQ R10, AX
  4469. MOVQ AX, 40(SP)
  4470. XORQ AX, SI
  4471. XORQ CX, R13
  4472. ROLQ $0x2d, R13
  4473. MOVQ R12, AX
  4474. ANDQ R13, AX
  4475. XORQ R11, AX
  4476. MOVQ AX, 48(SP)
  4477. XORQ AX, BP
  4478. XORQ DX, R14
  4479. ROLQ $0x3d, R14
  4480. MOVQ R14, AX
  4481. ORQ R10, AX
  4482. XORQ R13, AX
  4483. MOVQ AX, 64(SP)
  4484. ANDQ R11, R10
  4485. XORQ R14, R10
  4486. MOVQ R10, 72(SP)
  4487. NOTQ R14
  4488. XORQ R10, R15
  4489. ORQ R14, R13
  4490. XORQ R12, R13
  4491. MOVQ R13, 56(SP)
  4492. // Result k
  4493. MOVQ 8(DI), R10
  4494. MOVQ 56(DI), R11
  4495. MOVQ 104(DI), R12
  4496. MOVQ 152(DI), R13
  4497. MOVQ 160(DI), R14
  4498. XORQ DX, R11
  4499. ROLQ $0x06, R11
  4500. XORQ R8, R12
  4501. ROLQ $0x19, R12
  4502. MOVQ R11, AX
  4503. ORQ R12, AX
  4504. XORQ CX, R10
  4505. ROLQ $0x01, R10
  4506. XORQ R10, AX
  4507. MOVQ AX, 80(SP)
  4508. XORQ AX, SI
  4509. XORQ R9, R13
  4510. ROLQ $0x08, R13
  4511. MOVQ R12, AX
  4512. ANDQ R13, AX
  4513. XORQ R11, AX
  4514. MOVQ AX, 88(SP)
  4515. XORQ AX, BP
  4516. XORQ BX, R14
  4517. ROLQ $0x12, R14
  4518. NOTQ R13
  4519. MOVQ R13, AX
  4520. ANDQ R14, AX
  4521. XORQ R12, AX
  4522. MOVQ AX, 96(SP)
  4523. MOVQ R14, AX
  4524. ORQ R10, AX
  4525. XORQ R13, AX
  4526. MOVQ AX, 104(SP)
  4527. ANDQ R11, R10
  4528. XORQ R14, R10
  4529. MOVQ R10, 112(SP)
  4530. XORQ R10, R15
  4531. // Result m
  4532. MOVQ 40(DI), R11
  4533. XORQ BX, R11
  4534. MOVQ 88(DI), R12
  4535. ROLQ $0x24, R11
  4536. XORQ CX, R12
  4537. MOVQ 32(DI), R10
  4538. ROLQ $0x0a, R12
  4539. MOVQ R11, AX
  4540. MOVQ 136(DI), R13
  4541. ANDQ R12, AX
  4542. XORQ R9, R10
  4543. MOVQ 184(DI), R14
  4544. ROLQ $0x1b, R10
  4545. XORQ R10, AX
  4546. MOVQ AX, 120(SP)
  4547. XORQ AX, SI
  4548. XORQ DX, R13
  4549. ROLQ $0x0f, R13
  4550. MOVQ R12, AX
  4551. ORQ R13, AX
  4552. XORQ R11, AX
  4553. MOVQ AX, 128(SP)
  4554. XORQ AX, BP
  4555. XORQ R8, R14
  4556. ROLQ $0x38, R14
  4557. NOTQ R13
  4558. MOVQ R13, AX
  4559. ORQ R14, AX
  4560. XORQ R12, AX
  4561. MOVQ AX, 136(SP)
  4562. ORQ R10, R11
  4563. XORQ R14, R11
  4564. MOVQ R11, 152(SP)
  4565. ANDQ R10, R14
  4566. XORQ R13, R14
  4567. MOVQ R14, 144(SP)
  4568. XORQ R11, R15
  4569. // Result s
  4570. MOVQ 16(DI), R10
  4571. MOVQ 64(DI), R11
  4572. MOVQ 112(DI), R12
  4573. XORQ DX, R10
  4574. MOVQ 120(DI), R13
  4575. ROLQ $0x3e, R10
  4576. XORQ R8, R11
  4577. MOVQ 168(DI), R14
  4578. ROLQ $0x37, R11
  4579. XORQ R9, R12
  4580. MOVQ R10, R9
  4581. XORQ CX, R14
  4582. ROLQ $0x02, R14
  4583. ANDQ R11, R9
  4584. XORQ R14, R9
  4585. MOVQ R9, 192(SP)
  4586. ROLQ $0x27, R12
  4587. XORQ R9, R15
  4588. NOTQ R11
  4589. XORQ BX, R13
  4590. MOVQ R11, BX
  4591. ANDQ R12, BX
  4592. XORQ R10, BX
  4593. MOVQ BX, 160(SP)
  4594. XORQ BX, SI
  4595. ROLQ $0x29, R13
  4596. MOVQ R12, CX
  4597. ORQ R13, CX
  4598. XORQ R11, CX
  4599. MOVQ CX, 168(SP)
  4600. XORQ CX, BP
  4601. MOVQ R13, DX
  4602. MOVQ R14, R8
  4603. ANDQ R14, DX
  4604. ORQ R10, R8
  4605. XORQ R12, DX
  4606. XORQ R13, R8
  4607. MOVQ DX, 176(SP)
  4608. MOVQ R8, 184(SP)
  4609. // Prepare round
  4610. MOVQ BP, BX
  4611. ROLQ $0x01, BX
  4612. MOVQ 16(SP), R12
  4613. XORQ 56(SP), DX
  4614. XORQ R15, BX
  4615. XORQ 96(SP), R12
  4616. XORQ 136(SP), DX
  4617. XORQ DX, R12
  4618. MOVQ R12, CX
  4619. ROLQ $0x01, CX
  4620. MOVQ 24(SP), R13
  4621. XORQ 64(SP), R8
  4622. XORQ SI, CX
  4623. XORQ 104(SP), R13
  4624. XORQ 144(SP), R8
  4625. XORQ R8, R13
  4626. MOVQ R13, DX
  4627. ROLQ $0x01, DX
  4628. MOVQ R15, R8
  4629. XORQ BP, DX
  4630. ROLQ $0x01, R8
  4631. MOVQ SI, R9
  4632. XORQ R12, R8
  4633. ROLQ $0x01, R9
  4634. // Result b
  4635. MOVQ (SP), R10
  4636. MOVQ 48(SP), R11
  4637. XORQ R13, R9
  4638. MOVQ 96(SP), R12
  4639. MOVQ 144(SP), R13
  4640. MOVQ 192(SP), R14
  4641. XORQ CX, R11
  4642. ROLQ $0x2c, R11
  4643. XORQ DX, R12
  4644. XORQ BX, R10
  4645. ROLQ $0x2b, R12
  4646. MOVQ R11, SI
  4647. MOVQ $0x8000000000008080, AX
  4648. ORQ R12, SI
  4649. XORQ R10, AX
  4650. XORQ AX, SI
  4651. MOVQ SI, (DI)
  4652. XORQ R9, R14
  4653. ROLQ $0x0e, R14
  4654. MOVQ R10, R15
  4655. ANDQ R11, R15
  4656. XORQ R14, R15
  4657. MOVQ R15, 32(DI)
  4658. XORQ R8, R13
  4659. ROLQ $0x15, R13
  4660. MOVQ R13, AX
  4661. ANDQ R14, AX
  4662. XORQ R12, AX
  4663. MOVQ AX, 16(DI)
  4664. NOTQ R12
  4665. ORQ R10, R14
  4666. ORQ R13, R12
  4667. XORQ R13, R14
  4668. XORQ R11, R12
  4669. MOVQ R14, 24(DI)
  4670. MOVQ R12, 8(DI)
  4671. MOVQ R12, BP
  4672. // Result g
  4673. MOVQ 72(SP), R11
  4674. XORQ R9, R11
  4675. MOVQ 80(SP), R12
  4676. ROLQ $0x14, R11
  4677. XORQ BX, R12
  4678. ROLQ $0x03, R12
  4679. MOVQ 24(SP), R10
  4680. MOVQ R11, AX
  4681. ORQ R12, AX
  4682. XORQ R8, R10
  4683. MOVQ 128(SP), R13
  4684. MOVQ 176(SP), R14
  4685. ROLQ $0x1c, R10
  4686. XORQ R10, AX
  4687. MOVQ AX, 40(DI)
  4688. XORQ AX, SI
  4689. XORQ CX, R13
  4690. ROLQ $0x2d, R13
  4691. MOVQ R12, AX
  4692. ANDQ R13, AX
  4693. XORQ R11, AX
  4694. MOVQ AX, 48(DI)
  4695. XORQ AX, BP
  4696. XORQ DX, R14
  4697. ROLQ $0x3d, R14
  4698. MOVQ R14, AX
  4699. ORQ R10, AX
  4700. XORQ R13, AX
  4701. MOVQ AX, 64(DI)
  4702. ANDQ R11, R10
  4703. XORQ R14, R10
  4704. MOVQ R10, 72(DI)
  4705. NOTQ R14
  4706. XORQ R10, R15
  4707. ORQ R14, R13
  4708. XORQ R12, R13
  4709. MOVQ R13, 56(DI)
  4710. // Result k
  4711. MOVQ 8(SP), R10
  4712. MOVQ 56(SP), R11
  4713. MOVQ 104(SP), R12
  4714. MOVQ 152(SP), R13
  4715. MOVQ 160(SP), R14
  4716. XORQ DX, R11
  4717. ROLQ $0x06, R11
  4718. XORQ R8, R12
  4719. ROLQ $0x19, R12
  4720. MOVQ R11, AX
  4721. ORQ R12, AX
  4722. XORQ CX, R10
  4723. ROLQ $0x01, R10
  4724. XORQ R10, AX
  4725. MOVQ AX, 80(DI)
  4726. XORQ AX, SI
  4727. XORQ R9, R13
  4728. ROLQ $0x08, R13
  4729. MOVQ R12, AX
  4730. ANDQ R13, AX
  4731. XORQ R11, AX
  4732. MOVQ AX, 88(DI)
  4733. XORQ AX, BP
  4734. XORQ BX, R14
  4735. ROLQ $0x12, R14
  4736. NOTQ R13
  4737. MOVQ R13, AX
  4738. ANDQ R14, AX
  4739. XORQ R12, AX
  4740. MOVQ AX, 96(DI)
  4741. MOVQ R14, AX
  4742. ORQ R10, AX
  4743. XORQ R13, AX
  4744. MOVQ AX, 104(DI)
  4745. ANDQ R11, R10
  4746. XORQ R14, R10
  4747. MOVQ R10, 112(DI)
  4748. XORQ R10, R15
  4749. // Result m
  4750. MOVQ 40(SP), R11
  4751. XORQ BX, R11
  4752. MOVQ 88(SP), R12
  4753. ROLQ $0x24, R11
  4754. XORQ CX, R12
  4755. MOVQ 32(SP), R10
  4756. ROLQ $0x0a, R12
  4757. MOVQ R11, AX
  4758. MOVQ 136(SP), R13
  4759. ANDQ R12, AX
  4760. XORQ R9, R10
  4761. MOVQ 184(SP), R14
  4762. ROLQ $0x1b, R10
  4763. XORQ R10, AX
  4764. MOVQ AX, 120(DI)
  4765. XORQ AX, SI
  4766. XORQ DX, R13
  4767. ROLQ $0x0f, R13
  4768. MOVQ R12, AX
  4769. ORQ R13, AX
  4770. XORQ R11, AX
  4771. MOVQ AX, 128(DI)
  4772. XORQ AX, BP
  4773. XORQ R8, R14
  4774. ROLQ $0x38, R14
  4775. NOTQ R13
  4776. MOVQ R13, AX
  4777. ORQ R14, AX
  4778. XORQ R12, AX
  4779. MOVQ AX, 136(DI)
  4780. ORQ R10, R11
  4781. XORQ R14, R11
  4782. MOVQ R11, 152(DI)
  4783. ANDQ R10, R14
  4784. XORQ R13, R14
  4785. MOVQ R14, 144(DI)
  4786. XORQ R11, R15
  4787. // Result s
  4788. MOVQ 16(SP), R10
  4789. MOVQ 64(SP), R11
  4790. MOVQ 112(SP), R12
  4791. XORQ DX, R10
  4792. MOVQ 120(SP), R13
  4793. ROLQ $0x3e, R10
  4794. XORQ R8, R11
  4795. MOVQ 168(SP), R14
  4796. ROLQ $0x37, R11
  4797. XORQ R9, R12
  4798. MOVQ R10, R9
  4799. XORQ CX, R14
  4800. ROLQ $0x02, R14
  4801. ANDQ R11, R9
  4802. XORQ R14, R9
  4803. MOVQ R9, 192(DI)
  4804. ROLQ $0x27, R12
  4805. XORQ R9, R15
  4806. NOTQ R11
  4807. XORQ BX, R13
  4808. MOVQ R11, BX
  4809. ANDQ R12, BX
  4810. XORQ R10, BX
  4811. MOVQ BX, 160(DI)
  4812. XORQ BX, SI
  4813. ROLQ $0x29, R13
  4814. MOVQ R12, CX
  4815. ORQ R13, CX
  4816. XORQ R11, CX
  4817. MOVQ CX, 168(DI)
  4818. XORQ CX, BP
  4819. MOVQ R13, DX
  4820. MOVQ R14, R8
  4821. ANDQ R14, DX
  4822. ORQ R10, R8
  4823. XORQ R12, DX
  4824. XORQ R13, R8
  4825. MOVQ DX, 176(DI)
  4826. MOVQ R8, 184(DI)
  4827. // Prepare round
  4828. MOVQ BP, BX
  4829. ROLQ $0x01, BX
  4830. MOVQ 16(DI), R12
  4831. XORQ 56(DI), DX
  4832. XORQ R15, BX
  4833. XORQ 96(DI), R12
  4834. XORQ 136(DI), DX
  4835. XORQ DX, R12
  4836. MOVQ R12, CX
  4837. ROLQ $0x01, CX
  4838. MOVQ 24(DI), R13
  4839. XORQ 64(DI), R8
  4840. XORQ SI, CX
  4841. XORQ 104(DI), R13
  4842. XORQ 144(DI), R8
  4843. XORQ R8, R13
  4844. MOVQ R13, DX
  4845. ROLQ $0x01, DX
  4846. MOVQ R15, R8
  4847. XORQ BP, DX
  4848. ROLQ $0x01, R8
  4849. MOVQ SI, R9
  4850. XORQ R12, R8
  4851. ROLQ $0x01, R9
  4852. // Result b
  4853. MOVQ (DI), R10
  4854. MOVQ 48(DI), R11
  4855. XORQ R13, R9
  4856. MOVQ 96(DI), R12
  4857. MOVQ 144(DI), R13
  4858. MOVQ 192(DI), R14
  4859. XORQ CX, R11
  4860. ROLQ $0x2c, R11
  4861. XORQ DX, R12
  4862. XORQ BX, R10
  4863. ROLQ $0x2b, R12
  4864. MOVQ R11, SI
  4865. MOVQ $0x0000000080000001, AX
  4866. ORQ R12, SI
  4867. XORQ R10, AX
  4868. XORQ AX, SI
  4869. MOVQ SI, (SP)
  4870. XORQ R9, R14
  4871. ROLQ $0x0e, R14
  4872. MOVQ R10, R15
  4873. ANDQ R11, R15
  4874. XORQ R14, R15
  4875. MOVQ R15, 32(SP)
  4876. XORQ R8, R13
  4877. ROLQ $0x15, R13
  4878. MOVQ R13, AX
  4879. ANDQ R14, AX
  4880. XORQ R12, AX
  4881. MOVQ AX, 16(SP)
  4882. NOTQ R12
  4883. ORQ R10, R14
  4884. ORQ R13, R12
  4885. XORQ R13, R14
  4886. XORQ R11, R12
  4887. MOVQ R14, 24(SP)
  4888. MOVQ R12, 8(SP)
  4889. MOVQ R12, BP
  4890. // Result g
  4891. MOVQ 72(DI), R11
  4892. XORQ R9, R11
  4893. MOVQ 80(DI), R12
  4894. ROLQ $0x14, R11
  4895. XORQ BX, R12
  4896. ROLQ $0x03, R12
  4897. MOVQ 24(DI), R10
  4898. MOVQ R11, AX
  4899. ORQ R12, AX
  4900. XORQ R8, R10
  4901. MOVQ 128(DI), R13
  4902. MOVQ 176(DI), R14
  4903. ROLQ $0x1c, R10
  4904. XORQ R10, AX
  4905. MOVQ AX, 40(SP)
  4906. XORQ AX, SI
  4907. XORQ CX, R13
  4908. ROLQ $0x2d, R13
  4909. MOVQ R12, AX
  4910. ANDQ R13, AX
  4911. XORQ R11, AX
  4912. MOVQ AX, 48(SP)
  4913. XORQ AX, BP
  4914. XORQ DX, R14
  4915. ROLQ $0x3d, R14
  4916. MOVQ R14, AX
  4917. ORQ R10, AX
  4918. XORQ R13, AX
  4919. MOVQ AX, 64(SP)
  4920. ANDQ R11, R10
  4921. XORQ R14, R10
  4922. MOVQ R10, 72(SP)
  4923. NOTQ R14
  4924. XORQ R10, R15
  4925. ORQ R14, R13
  4926. XORQ R12, R13
  4927. MOVQ R13, 56(SP)
  4928. // Result k
  4929. MOVQ 8(DI), R10
  4930. MOVQ 56(DI), R11
  4931. MOVQ 104(DI), R12
  4932. MOVQ 152(DI), R13
  4933. MOVQ 160(DI), R14
  4934. XORQ DX, R11
  4935. ROLQ $0x06, R11
  4936. XORQ R8, R12
  4937. ROLQ $0x19, R12
  4938. MOVQ R11, AX
  4939. ORQ R12, AX
  4940. XORQ CX, R10
  4941. ROLQ $0x01, R10
  4942. XORQ R10, AX
  4943. MOVQ AX, 80(SP)
  4944. XORQ AX, SI
  4945. XORQ R9, R13
  4946. ROLQ $0x08, R13
  4947. MOVQ R12, AX
  4948. ANDQ R13, AX
  4949. XORQ R11, AX
  4950. MOVQ AX, 88(SP)
  4951. XORQ AX, BP
  4952. XORQ BX, R14
  4953. ROLQ $0x12, R14
  4954. NOTQ R13
  4955. MOVQ R13, AX
  4956. ANDQ R14, AX
  4957. XORQ R12, AX
  4958. MOVQ AX, 96(SP)
  4959. MOVQ R14, AX
  4960. ORQ R10, AX
  4961. XORQ R13, AX
  4962. MOVQ AX, 104(SP)
  4963. ANDQ R11, R10
  4964. XORQ R14, R10
  4965. MOVQ R10, 112(SP)
  4966. XORQ R10, R15
  4967. // Result m
  4968. MOVQ 40(DI), R11
  4969. XORQ BX, R11
  4970. MOVQ 88(DI), R12
  4971. ROLQ $0x24, R11
  4972. XORQ CX, R12
  4973. MOVQ 32(DI), R10
  4974. ROLQ $0x0a, R12
  4975. MOVQ R11, AX
  4976. MOVQ 136(DI), R13
  4977. ANDQ R12, AX
  4978. XORQ R9, R10
  4979. MOVQ 184(DI), R14
  4980. ROLQ $0x1b, R10
  4981. XORQ R10, AX
  4982. MOVQ AX, 120(SP)
  4983. XORQ AX, SI
  4984. XORQ DX, R13
  4985. ROLQ $0x0f, R13
  4986. MOVQ R12, AX
  4987. ORQ R13, AX
  4988. XORQ R11, AX
  4989. MOVQ AX, 128(SP)
  4990. XORQ AX, BP
  4991. XORQ R8, R14
  4992. ROLQ $0x38, R14
  4993. NOTQ R13
  4994. MOVQ R13, AX
  4995. ORQ R14, AX
  4996. XORQ R12, AX
  4997. MOVQ AX, 136(SP)
  4998. ORQ R10, R11
  4999. XORQ R14, R11
  5000. MOVQ R11, 152(SP)
  5001. ANDQ R10, R14
  5002. XORQ R13, R14
  5003. MOVQ R14, 144(SP)
  5004. XORQ R11, R15
  5005. // Result s
  5006. MOVQ 16(DI), R10
  5007. MOVQ 64(DI), R11
  5008. MOVQ 112(DI), R12
  5009. XORQ DX, R10
  5010. MOVQ 120(DI), R13
  5011. ROLQ $0x3e, R10
  5012. XORQ R8, R11
  5013. MOVQ 168(DI), R14
  5014. ROLQ $0x37, R11
  5015. XORQ R9, R12
  5016. MOVQ R10, R9
  5017. XORQ CX, R14
  5018. ROLQ $0x02, R14
  5019. ANDQ R11, R9
  5020. XORQ R14, R9
  5021. MOVQ R9, 192(SP)
  5022. ROLQ $0x27, R12
  5023. XORQ R9, R15
  5024. NOTQ R11
  5025. XORQ BX, R13
  5026. MOVQ R11, BX
  5027. ANDQ R12, BX
  5028. XORQ R10, BX
  5029. MOVQ BX, 160(SP)
  5030. XORQ BX, SI
  5031. ROLQ $0x29, R13
  5032. MOVQ R12, CX
  5033. ORQ R13, CX
  5034. XORQ R11, CX
  5035. MOVQ CX, 168(SP)
  5036. XORQ CX, BP
  5037. MOVQ R13, DX
  5038. MOVQ R14, R8
  5039. ANDQ R14, DX
  5040. ORQ R10, R8
  5041. XORQ R12, DX
  5042. XORQ R13, R8
  5043. MOVQ DX, 176(SP)
  5044. MOVQ R8, 184(SP)
  5045. // Prepare round
  5046. MOVQ BP, BX
  5047. ROLQ $0x01, BX
  5048. MOVQ 16(SP), R12
  5049. XORQ 56(SP), DX
  5050. XORQ R15, BX
  5051. XORQ 96(SP), R12
  5052. XORQ 136(SP), DX
  5053. XORQ DX, R12
  5054. MOVQ R12, CX
  5055. ROLQ $0x01, CX
  5056. MOVQ 24(SP), R13
  5057. XORQ 64(SP), R8
  5058. XORQ SI, CX
  5059. XORQ 104(SP), R13
  5060. XORQ 144(SP), R8
  5061. XORQ R8, R13
  5062. MOVQ R13, DX
  5063. ROLQ $0x01, DX
  5064. MOVQ R15, R8
  5065. XORQ BP, DX
  5066. ROLQ $0x01, R8
  5067. MOVQ SI, R9
  5068. XORQ R12, R8
  5069. ROLQ $0x01, R9
  5070. // Result b
  5071. MOVQ (SP), R10
  5072. MOVQ 48(SP), R11
  5073. XORQ R13, R9
  5074. MOVQ 96(SP), R12
  5075. MOVQ 144(SP), R13
  5076. MOVQ 192(SP), R14
  5077. XORQ CX, R11
  5078. ROLQ $0x2c, R11
  5079. XORQ DX, R12
  5080. XORQ BX, R10
  5081. ROLQ $0x2b, R12
  5082. MOVQ R11, SI
  5083. MOVQ $0x8000000080008008, AX
  5084. ORQ R12, SI
  5085. XORQ R10, AX
  5086. XORQ AX, SI
  5087. MOVQ SI, (DI)
  5088. XORQ R9, R14
  5089. ROLQ $0x0e, R14
  5090. MOVQ R10, R15
  5091. ANDQ R11, R15
  5092. XORQ R14, R15
  5093. MOVQ R15, 32(DI)
  5094. XORQ R8, R13
  5095. ROLQ $0x15, R13
  5096. MOVQ R13, AX
  5097. ANDQ R14, AX
  5098. XORQ R12, AX
  5099. MOVQ AX, 16(DI)
  5100. NOTQ R12
  5101. ORQ R10, R14
  5102. ORQ R13, R12
  5103. XORQ R13, R14
  5104. XORQ R11, R12
  5105. MOVQ R14, 24(DI)
  5106. MOVQ R12, 8(DI)
  5107. NOP
  5108. // Result g
  5109. MOVQ 72(SP), R11
  5110. XORQ R9, R11
  5111. MOVQ 80(SP), R12
  5112. ROLQ $0x14, R11
  5113. XORQ BX, R12
  5114. ROLQ $0x03, R12
  5115. MOVQ 24(SP), R10
  5116. MOVQ R11, AX
  5117. ORQ R12, AX
  5118. XORQ R8, R10
  5119. MOVQ 128(SP), R13
  5120. MOVQ 176(SP), R14
  5121. ROLQ $0x1c, R10
  5122. XORQ R10, AX
  5123. MOVQ AX, 40(DI)
  5124. NOP
  5125. XORQ CX, R13
  5126. ROLQ $0x2d, R13
  5127. MOVQ R12, AX
  5128. ANDQ R13, AX
  5129. XORQ R11, AX
  5130. MOVQ AX, 48(DI)
  5131. NOP
  5132. XORQ DX, R14
  5133. ROLQ $0x3d, R14
  5134. MOVQ R14, AX
  5135. ORQ R10, AX
  5136. XORQ R13, AX
  5137. MOVQ AX, 64(DI)
  5138. ANDQ R11, R10
  5139. XORQ R14, R10
  5140. MOVQ R10, 72(DI)
  5141. NOTQ R14
  5142. NOP
  5143. ORQ R14, R13
  5144. XORQ R12, R13
  5145. MOVQ R13, 56(DI)
  5146. // Result k
  5147. MOVQ 8(SP), R10
  5148. MOVQ 56(SP), R11
  5149. MOVQ 104(SP), R12
  5150. MOVQ 152(SP), R13
  5151. MOVQ 160(SP), R14
  5152. XORQ DX, R11
  5153. ROLQ $0x06, R11
  5154. XORQ R8, R12
  5155. ROLQ $0x19, R12
  5156. MOVQ R11, AX
  5157. ORQ R12, AX
  5158. XORQ CX, R10
  5159. ROLQ $0x01, R10
  5160. XORQ R10, AX
  5161. MOVQ AX, 80(DI)
  5162. NOP
  5163. XORQ R9, R13
  5164. ROLQ $0x08, R13
  5165. MOVQ R12, AX
  5166. ANDQ R13, AX
  5167. XORQ R11, AX
  5168. MOVQ AX, 88(DI)
  5169. NOP
  5170. XORQ BX, R14
  5171. ROLQ $0x12, R14
  5172. NOTQ R13
  5173. MOVQ R13, AX
  5174. ANDQ R14, AX
  5175. XORQ R12, AX
  5176. MOVQ AX, 96(DI)
  5177. MOVQ R14, AX
  5178. ORQ R10, AX
  5179. XORQ R13, AX
  5180. MOVQ AX, 104(DI)
  5181. ANDQ R11, R10
  5182. XORQ R14, R10
  5183. MOVQ R10, 112(DI)
  5184. NOP
  5185. // Result m
  5186. MOVQ 40(SP), R11
  5187. XORQ BX, R11
  5188. MOVQ 88(SP), R12
  5189. ROLQ $0x24, R11
  5190. XORQ CX, R12
  5191. MOVQ 32(SP), R10
  5192. ROLQ $0x0a, R12
  5193. MOVQ R11, AX
  5194. MOVQ 136(SP), R13
  5195. ANDQ R12, AX
  5196. XORQ R9, R10
  5197. MOVQ 184(SP), R14
  5198. ROLQ $0x1b, R10
  5199. XORQ R10, AX
  5200. MOVQ AX, 120(DI)
  5201. NOP
  5202. XORQ DX, R13
  5203. ROLQ $0x0f, R13
  5204. MOVQ R12, AX
  5205. ORQ R13, AX
  5206. XORQ R11, AX
  5207. MOVQ AX, 128(DI)
  5208. NOP
  5209. XORQ R8, R14
  5210. ROLQ $0x38, R14
  5211. NOTQ R13
  5212. MOVQ R13, AX
  5213. ORQ R14, AX
  5214. XORQ R12, AX
  5215. MOVQ AX, 136(DI)
  5216. ORQ R10, R11
  5217. XORQ R14, R11
  5218. MOVQ R11, 152(DI)
  5219. ANDQ R10, R14
  5220. XORQ R13, R14
  5221. MOVQ R14, 144(DI)
  5222. NOP
  5223. // Result s
  5224. MOVQ 16(SP), R10
  5225. MOVQ 64(SP), R11
  5226. MOVQ 112(SP), R12
  5227. XORQ DX, R10
  5228. MOVQ 120(SP), R13
  5229. ROLQ $0x3e, R10
  5230. XORQ R8, R11
  5231. MOVQ 168(SP), R14
  5232. ROLQ $0x37, R11
  5233. XORQ R9, R12
  5234. MOVQ R10, R9
  5235. XORQ CX, R14
  5236. ROLQ $0x02, R14
  5237. ANDQ R11, R9
  5238. XORQ R14, R9
  5239. MOVQ R9, 192(DI)
  5240. ROLQ $0x27, R12
  5241. NOP
  5242. NOTQ R11
  5243. XORQ BX, R13
  5244. MOVQ R11, BX
  5245. ANDQ R12, BX
  5246. XORQ R10, BX
  5247. MOVQ BX, 160(DI)
  5248. NOP
  5249. ROLQ $0x29, R13
  5250. MOVQ R12, CX
  5251. ORQ R13, CX
  5252. XORQ R11, CX
  5253. MOVQ CX, 168(DI)
  5254. NOP
  5255. MOVQ R13, DX
  5256. MOVQ R14, R8
  5257. ANDQ R14, DX
  5258. ORQ R10, R8
  5259. XORQ R12, DX
  5260. XORQ R13, R8
  5261. MOVQ DX, 176(DI)
  5262. MOVQ R8, 184(DI)
  5263. // Revert the internal state to the user state
  5264. NOTQ 8(DI)
  5265. NOTQ 16(DI)
  5266. NOTQ 64(DI)
  5267. NOTQ 96(DI)
  5268. NOTQ 136(DI)
  5269. NOTQ 160(DI)
  5270. RET