1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197 |
- /*
- Implementation by the Keccak, Keyak and Ketje Teams, namely, Guido Bertoni,
- Joan Daemen, Michaël Peeters, Gilles Van Assche and Ronny Van Keer, hereby
- denoted as "the implementer".
- For more information, feedback or questions, please refer to our websites:
- http://keccak.noekeon.org/
- http://keyak.noekeon.org/
- http://ketje.noekeon.org/
- To the extent possible under law, the implementer has waived all copyright
- and related or neighboring rights to the source code in this file.
- http://creativecommons.org/publicdomain/zero/1.0/
- */
- #define declareABCDE \
- UINT64 Aba, Abe, Abi, Abo, Abu; \
- UINT64 Aga, Age, Agi, Ago, Agu; \
- UINT64 Aka, Ake, Aki, Ako, Aku; \
- UINT64 Ama, Ame, Ami, Amo, Amu; \
- UINT64 Asa, Ase, Asi, Aso, Asu; \
- UINT64 Bba, Bbe, Bbi, Bbo, Bbu; \
- UINT64 Bga, Bge, Bgi, Bgo, Bgu; \
- UINT64 Bka, Bke, Bki, Bko, Bku; \
- UINT64 Bma, Bme, Bmi, Bmo, Bmu; \
- UINT64 Bsa, Bse, Bsi, Bso, Bsu; \
- UINT64 Ca, Ce, Ci, Co, Cu; \
- UINT64 Da, De, Di, Do, Du; \
- UINT64 Eba, Ebe, Ebi, Ebo, Ebu; \
- UINT64 Ega, Ege, Egi, Ego, Egu; \
- UINT64 Eka, Eke, Eki, Eko, Eku; \
- UINT64 Ema, Eme, Emi, Emo, Emu; \
- UINT64 Esa, Ese, Esi, Eso, Esu; \
- #define prepareTheta \
- Ca = Aba^Aga^Aka^Ama^Asa; \
- Ce = Abe^Age^Ake^Ame^Ase; \
- Ci = Abi^Agi^Aki^Ami^Asi; \
- Co = Abo^Ago^Ako^Amo^Aso; \
- Cu = Abu^Agu^Aku^Amu^Asu; \
- #ifdef UseBebigokimisa
- /* --- Code for round, with prepare-theta (lane complementing pattern 'bebigokimisa') */
- /* --- 64-bit lanes mapped to 64-bit words */
- #define thetaRhoPiChiIotaPrepareTheta(i, A, E) \
- Da = Cu^ROL64(Ce, 1); \
- De = Ca^ROL64(Ci, 1); \
- Di = Ce^ROL64(Co, 1); \
- Do = Ci^ROL64(Cu, 1); \
- Du = Co^ROL64(Ca, 1); \
- \
- A##ba ^= Da; \
- Bba = A##ba; \
- A##ge ^= De; \
- Bbe = ROL64(A##ge, 44); \
- A##ki ^= Di; \
- Bbi = ROL64(A##ki, 43); \
- A##mo ^= Do; \
- Bbo = ROL64(A##mo, 21); \
- A##su ^= Du; \
- Bbu = ROL64(A##su, 14); \
- E##ba = Bba ^( Bbe | Bbi ); \
- E##ba ^= KeccakF1600RoundConstants[i]; \
- Ca = E##ba; \
- E##be = Bbe ^((~Bbi)| Bbo ); \
- Ce = E##be; \
- E##bi = Bbi ^( Bbo & Bbu ); \
- Ci = E##bi; \
- E##bo = Bbo ^( Bbu | Bba ); \
- Co = E##bo; \
- E##bu = Bbu ^( Bba & Bbe ); \
- Cu = E##bu; \
- \
- A##bo ^= Do; \
- Bga = ROL64(A##bo, 28); \
- A##gu ^= Du; \
- Bge = ROL64(A##gu, 20); \
- A##ka ^= Da; \
- Bgi = ROL64(A##ka, 3); \
- A##me ^= De; \
- Bgo = ROL64(A##me, 45); \
- A##si ^= Di; \
- Bgu = ROL64(A##si, 61); \
- E##ga = Bga ^( Bge | Bgi ); \
- Ca ^= E##ga; \
- E##ge = Bge ^( Bgi & Bgo ); \
- Ce ^= E##ge; \
- E##gi = Bgi ^( Bgo |(~Bgu)); \
- Ci ^= E##gi; \
- E##go = Bgo ^( Bgu | Bga ); \
- Co ^= E##go; \
- E##gu = Bgu ^( Bga & Bge ); \
- Cu ^= E##gu; \
- \
- A##be ^= De; \
- Bka = ROL64(A##be, 1); \
- A##gi ^= Di; \
- Bke = ROL64(A##gi, 6); \
- A##ko ^= Do; \
- Bki = ROL64(A##ko, 25); \
- A##mu ^= Du; \
- Bko = ROL64(A##mu, 8); \
- A##sa ^= Da; \
- Bku = ROL64(A##sa, 18); \
- E##ka = Bka ^( Bke | Bki ); \
- Ca ^= E##ka; \
- E##ke = Bke ^( Bki & Bko ); \
- Ce ^= E##ke; \
- E##ki = Bki ^((~Bko)& Bku ); \
- Ci ^= E##ki; \
- E##ko = (~Bko)^( Bku | Bka ); \
- Co ^= E##ko; \
- E##ku = Bku ^( Bka & Bke ); \
- Cu ^= E##ku; \
- \
- A##bu ^= Du; \
- Bma = ROL64(A##bu, 27); \
- A##ga ^= Da; \
- Bme = ROL64(A##ga, 36); \
- A##ke ^= De; \
- Bmi = ROL64(A##ke, 10); \
- A##mi ^= Di; \
- Bmo = ROL64(A##mi, 15); \
- A##so ^= Do; \
- Bmu = ROL64(A##so, 56); \
- E##ma = Bma ^( Bme & Bmi ); \
- Ca ^= E##ma; \
- E##me = Bme ^( Bmi | Bmo ); \
- Ce ^= E##me; \
- E##mi = Bmi ^((~Bmo)| Bmu ); \
- Ci ^= E##mi; \
- E##mo = (~Bmo)^( Bmu & Bma ); \
- Co ^= E##mo; \
- E##mu = Bmu ^( Bma | Bme ); \
- Cu ^= E##mu; \
- \
- A##bi ^= Di; \
- Bsa = ROL64(A##bi, 62); \
- A##go ^= Do; \
- Bse = ROL64(A##go, 55); \
- A##ku ^= Du; \
- Bsi = ROL64(A##ku, 39); \
- A##ma ^= Da; \
- Bso = ROL64(A##ma, 41); \
- A##se ^= De; \
- Bsu = ROL64(A##se, 2); \
- E##sa = Bsa ^((~Bse)& Bsi ); \
- Ca ^= E##sa; \
- E##se = (~Bse)^( Bsi | Bso ); \
- Ce ^= E##se; \
- E##si = Bsi ^( Bso & Bsu ); \
- Ci ^= E##si; \
- E##so = Bso ^( Bsu | Bsa ); \
- Co ^= E##so; \
- E##su = Bsu ^( Bsa & Bse ); \
- Cu ^= E##su; \
- \
- /* --- Code for round (lane complementing pattern 'bebigokimisa') */
- /* --- 64-bit lanes mapped to 64-bit words */
- #define thetaRhoPiChiIota(i, A, E) \
- Da = Cu^ROL64(Ce, 1); \
- De = Ca^ROL64(Ci, 1); \
- Di = Ce^ROL64(Co, 1); \
- Do = Ci^ROL64(Cu, 1); \
- Du = Co^ROL64(Ca, 1); \
- \
- A##ba ^= Da; \
- Bba = A##ba; \
- A##ge ^= De; \
- Bbe = ROL64(A##ge, 44); \
- A##ki ^= Di; \
- Bbi = ROL64(A##ki, 43); \
- A##mo ^= Do; \
- Bbo = ROL64(A##mo, 21); \
- A##su ^= Du; \
- Bbu = ROL64(A##su, 14); \
- E##ba = Bba ^( Bbe | Bbi ); \
- E##ba ^= KeccakF1600RoundConstants[i]; \
- E##be = Bbe ^((~Bbi)| Bbo ); \
- E##bi = Bbi ^( Bbo & Bbu ); \
- E##bo = Bbo ^( Bbu | Bba ); \
- E##bu = Bbu ^( Bba & Bbe ); \
- \
- A##bo ^= Do; \
- Bga = ROL64(A##bo, 28); \
- A##gu ^= Du; \
- Bge = ROL64(A##gu, 20); \
- A##ka ^= Da; \
- Bgi = ROL64(A##ka, 3); \
- A##me ^= De; \
- Bgo = ROL64(A##me, 45); \
- A##si ^= Di; \
- Bgu = ROL64(A##si, 61); \
- E##ga = Bga ^( Bge | Bgi ); \
- E##ge = Bge ^( Bgi & Bgo ); \
- E##gi = Bgi ^( Bgo |(~Bgu)); \
- E##go = Bgo ^( Bgu | Bga ); \
- E##gu = Bgu ^( Bga & Bge ); \
- \
- A##be ^= De; \
- Bka = ROL64(A##be, 1); \
- A##gi ^= Di; \
- Bke = ROL64(A##gi, 6); \
- A##ko ^= Do; \
- Bki = ROL64(A##ko, 25); \
- A##mu ^= Du; \
- Bko = ROL64(A##mu, 8); \
- A##sa ^= Da; \
- Bku = ROL64(A##sa, 18); \
- E##ka = Bka ^( Bke | Bki ); \
- E##ke = Bke ^( Bki & Bko ); \
- E##ki = Bki ^((~Bko)& Bku ); \
- E##ko = (~Bko)^( Bku | Bka ); \
- E##ku = Bku ^( Bka & Bke ); \
- \
- A##bu ^= Du; \
- Bma = ROL64(A##bu, 27); \
- A##ga ^= Da; \
- Bme = ROL64(A##ga, 36); \
- A##ke ^= De; \
- Bmi = ROL64(A##ke, 10); \
- A##mi ^= Di; \
- Bmo = ROL64(A##mi, 15); \
- A##so ^= Do; \
- Bmu = ROL64(A##so, 56); \
- E##ma = Bma ^( Bme & Bmi ); \
- E##me = Bme ^( Bmi | Bmo ); \
- E##mi = Bmi ^((~Bmo)| Bmu ); \
- E##mo = (~Bmo)^( Bmu & Bma ); \
- E##mu = Bmu ^( Bma | Bme ); \
- \
- A##bi ^= Di; \
- Bsa = ROL64(A##bi, 62); \
- A##go ^= Do; \
- Bse = ROL64(A##go, 55); \
- A##ku ^= Du; \
- Bsi = ROL64(A##ku, 39); \
- A##ma ^= Da; \
- Bso = ROL64(A##ma, 41); \
- A##se ^= De; \
- Bsu = ROL64(A##se, 2); \
- E##sa = Bsa ^((~Bse)& Bsi ); \
- E##se = (~Bse)^( Bsi | Bso ); \
- E##si = Bsi ^( Bso & Bsu ); \
- E##so = Bso ^( Bsu | Bsa ); \
- E##su = Bsu ^( Bsa & Bse ); \
- \
- #else /* UseBebigokimisa */
- /* --- Code for round, with prepare-theta */
- /* --- 64-bit lanes mapped to 64-bit words */
- #define thetaRhoPiChiIotaPrepareTheta(i, A, E) \
- Da = Cu^ROL64(Ce, 1); \
- De = Ca^ROL64(Ci, 1); \
- Di = Ce^ROL64(Co, 1); \
- Do = Ci^ROL64(Cu, 1); \
- Du = Co^ROL64(Ca, 1); \
- \
- A##ba ^= Da; \
- Bba = A##ba; \
- A##ge ^= De; \
- Bbe = ROL64(A##ge, 44); \
- A##ki ^= Di; \
- Bbi = ROL64(A##ki, 43); \
- A##mo ^= Do; \
- Bbo = ROL64(A##mo, 21); \
- A##su ^= Du; \
- Bbu = ROL64(A##su, 14); \
- E##ba = Bba ^((~Bbe)& Bbi ); \
- E##ba ^= KeccakF1600RoundConstants[i]; \
- Ca = E##ba; \
- E##be = Bbe ^((~Bbi)& Bbo ); \
- Ce = E##be; \
- E##bi = Bbi ^((~Bbo)& Bbu ); \
- Ci = E##bi; \
- E##bo = Bbo ^((~Bbu)& Bba ); \
- Co = E##bo; \
- E##bu = Bbu ^((~Bba)& Bbe ); \
- Cu = E##bu; \
- \
- A##bo ^= Do; \
- Bga = ROL64(A##bo, 28); \
- A##gu ^= Du; \
- Bge = ROL64(A##gu, 20); \
- A##ka ^= Da; \
- Bgi = ROL64(A##ka, 3); \
- A##me ^= De; \
- Bgo = ROL64(A##me, 45); \
- A##si ^= Di; \
- Bgu = ROL64(A##si, 61); \
- E##ga = Bga ^((~Bge)& Bgi ); \
- Ca ^= E##ga; \
- E##ge = Bge ^((~Bgi)& Bgo ); \
- Ce ^= E##ge; \
- E##gi = Bgi ^((~Bgo)& Bgu ); \
- Ci ^= E##gi; \
- E##go = Bgo ^((~Bgu)& Bga ); \
- Co ^= E##go; \
- E##gu = Bgu ^((~Bga)& Bge ); \
- Cu ^= E##gu; \
- \
- A##be ^= De; \
- Bka = ROL64(A##be, 1); \
- A##gi ^= Di; \
- Bke = ROL64(A##gi, 6); \
- A##ko ^= Do; \
- Bki = ROL64(A##ko, 25); \
- A##mu ^= Du; \
- Bko = ROL64(A##mu, 8); \
- A##sa ^= Da; \
- Bku = ROL64(A##sa, 18); \
- E##ka = Bka ^((~Bke)& Bki ); \
- Ca ^= E##ka; \
- E##ke = Bke ^((~Bki)& Bko ); \
- Ce ^= E##ke; \
- E##ki = Bki ^((~Bko)& Bku ); \
- Ci ^= E##ki; \
- E##ko = Bko ^((~Bku)& Bka ); \
- Co ^= E##ko; \
- E##ku = Bku ^((~Bka)& Bke ); \
- Cu ^= E##ku; \
- \
- A##bu ^= Du; \
- Bma = ROL64(A##bu, 27); \
- A##ga ^= Da; \
- Bme = ROL64(A##ga, 36); \
- A##ke ^= De; \
- Bmi = ROL64(A##ke, 10); \
- A##mi ^= Di; \
- Bmo = ROL64(A##mi, 15); \
- A##so ^= Do; \
- Bmu = ROL64(A##so, 56); \
- E##ma = Bma ^((~Bme)& Bmi ); \
- Ca ^= E##ma; \
- E##me = Bme ^((~Bmi)& Bmo ); \
- Ce ^= E##me; \
- E##mi = Bmi ^((~Bmo)& Bmu ); \
- Ci ^= E##mi; \
- E##mo = Bmo ^((~Bmu)& Bma ); \
- Co ^= E##mo; \
- E##mu = Bmu ^((~Bma)& Bme ); \
- Cu ^= E##mu; \
- \
- A##bi ^= Di; \
- Bsa = ROL64(A##bi, 62); \
- A##go ^= Do; \
- Bse = ROL64(A##go, 55); \
- A##ku ^= Du; \
- Bsi = ROL64(A##ku, 39); \
- A##ma ^= Da; \
- Bso = ROL64(A##ma, 41); \
- A##se ^= De; \
- Bsu = ROL64(A##se, 2); \
- E##sa = Bsa ^((~Bse)& Bsi ); \
- Ca ^= E##sa; \
- E##se = Bse ^((~Bsi)& Bso ); \
- Ce ^= E##se; \
- E##si = Bsi ^((~Bso)& Bsu ); \
- Ci ^= E##si; \
- E##so = Bso ^((~Bsu)& Bsa ); \
- Co ^= E##so; \
- E##su = Bsu ^((~Bsa)& Bse ); \
- Cu ^= E##su; \
- \
- /* --- Code for round */
- /* --- 64-bit lanes mapped to 64-bit words */
- #define thetaRhoPiChiIota(i, A, E) \
- Da = Cu^ROL64(Ce, 1); \
- De = Ca^ROL64(Ci, 1); \
- Di = Ce^ROL64(Co, 1); \
- Do = Ci^ROL64(Cu, 1); \
- Du = Co^ROL64(Ca, 1); \
- \
- A##ba ^= Da; \
- Bba = A##ba; \
- A##ge ^= De; \
- Bbe = ROL64(A##ge, 44); \
- A##ki ^= Di; \
- Bbi = ROL64(A##ki, 43); \
- A##mo ^= Do; \
- Bbo = ROL64(A##mo, 21); \
- A##su ^= Du; \
- Bbu = ROL64(A##su, 14); \
- E##ba = Bba ^((~Bbe)& Bbi ); \
- E##ba ^= KeccakF1600RoundConstants[i]; \
- E##be = Bbe ^((~Bbi)& Bbo ); \
- E##bi = Bbi ^((~Bbo)& Bbu ); \
- E##bo = Bbo ^((~Bbu)& Bba ); \
- E##bu = Bbu ^((~Bba)& Bbe ); \
- \
- A##bo ^= Do; \
- Bga = ROL64(A##bo, 28); \
- A##gu ^= Du; \
- Bge = ROL64(A##gu, 20); \
- A##ka ^= Da; \
- Bgi = ROL64(A##ka, 3); \
- A##me ^= De; \
- Bgo = ROL64(A##me, 45); \
- A##si ^= Di; \
- Bgu = ROL64(A##si, 61); \
- E##ga = Bga ^((~Bge)& Bgi ); \
- E##ge = Bge ^((~Bgi)& Bgo ); \
- E##gi = Bgi ^((~Bgo)& Bgu ); \
- E##go = Bgo ^((~Bgu)& Bga ); \
- E##gu = Bgu ^((~Bga)& Bge ); \
- \
- A##be ^= De; \
- Bka = ROL64(A##be, 1); \
- A##gi ^= Di; \
- Bke = ROL64(A##gi, 6); \
- A##ko ^= Do; \
- Bki = ROL64(A##ko, 25); \
- A##mu ^= Du; \
- Bko = ROL64(A##mu, 8); \
- A##sa ^= Da; \
- Bku = ROL64(A##sa, 18); \
- E##ka = Bka ^((~Bke)& Bki ); \
- E##ke = Bke ^((~Bki)& Bko ); \
- E##ki = Bki ^((~Bko)& Bku ); \
- E##ko = Bko ^((~Bku)& Bka ); \
- E##ku = Bku ^((~Bka)& Bke ); \
- \
- A##bu ^= Du; \
- Bma = ROL64(A##bu, 27); \
- A##ga ^= Da; \
- Bme = ROL64(A##ga, 36); \
- A##ke ^= De; \
- Bmi = ROL64(A##ke, 10); \
- A##mi ^= Di; \
- Bmo = ROL64(A##mi, 15); \
- A##so ^= Do; \
- Bmu = ROL64(A##so, 56); \
- E##ma = Bma ^((~Bme)& Bmi ); \
- E##me = Bme ^((~Bmi)& Bmo ); \
- E##mi = Bmi ^((~Bmo)& Bmu ); \
- E##mo = Bmo ^((~Bmu)& Bma ); \
- E##mu = Bmu ^((~Bma)& Bme ); \
- \
- A##bi ^= Di; \
- Bsa = ROL64(A##bi, 62); \
- A##go ^= Do; \
- Bse = ROL64(A##go, 55); \
- A##ku ^= Du; \
- Bsi = ROL64(A##ku, 39); \
- A##ma ^= Da; \
- Bso = ROL64(A##ma, 41); \
- A##se ^= De; \
- Bsu = ROL64(A##se, 2); \
- E##sa = Bsa ^((~Bse)& Bsi ); \
- E##se = Bse ^((~Bsi)& Bso ); \
- E##si = Bsi ^((~Bso)& Bsu ); \
- E##so = Bso ^((~Bsu)& Bsa ); \
- E##su = Bsu ^((~Bsa)& Bse ); \
- \
- #endif /* UseBebigokimisa */
- #define copyFromState(X, state) \
- X##ba = state[ 0]; \
- X##be = state[ 1]; \
- X##bi = state[ 2]; \
- X##bo = state[ 3]; \
- X##bu = state[ 4]; \
- X##ga = state[ 5]; \
- X##ge = state[ 6]; \
- X##gi = state[ 7]; \
- X##go = state[ 8]; \
- X##gu = state[ 9]; \
- X##ka = state[10]; \
- X##ke = state[11]; \
- X##ki = state[12]; \
- X##ko = state[13]; \
- X##ku = state[14]; \
- X##ma = state[15]; \
- X##me = state[16]; \
- X##mi = state[17]; \
- X##mo = state[18]; \
- X##mu = state[19]; \
- X##sa = state[20]; \
- X##se = state[21]; \
- X##si = state[22]; \
- X##so = state[23]; \
- X##su = state[24]; \
- #define copyToState(state, X) \
- state[ 0] = X##ba; \
- state[ 1] = X##be; \
- state[ 2] = X##bi; \
- state[ 3] = X##bo; \
- state[ 4] = X##bu; \
- state[ 5] = X##ga; \
- state[ 6] = X##ge; \
- state[ 7] = X##gi; \
- state[ 8] = X##go; \
- state[ 9] = X##gu; \
- state[10] = X##ka; \
- state[11] = X##ke; \
- state[12] = X##ki; \
- state[13] = X##ko; \
- state[14] = X##ku; \
- state[15] = X##ma; \
- state[16] = X##me; \
- state[17] = X##mi; \
- state[18] = X##mo; \
- state[19] = X##mu; \
- state[20] = X##sa; \
- state[21] = X##se; \
- state[22] = X##si; \
- state[23] = X##so; \
- state[24] = X##su; \
- #define copyStateVariables(X, Y) \
- X##ba = Y##ba; \
- X##be = Y##be; \
- X##bi = Y##bi; \
- X##bo = Y##bo; \
- X##bu = Y##bu; \
- X##ga = Y##ga; \
- X##ge = Y##ge; \
- X##gi = Y##gi; \
- X##go = Y##go; \
- X##gu = Y##gu; \
- X##ka = Y##ka; \
- X##ke = Y##ke; \
- X##ki = Y##ki; \
- X##ko = Y##ko; \
- X##ku = Y##ku; \
- X##ma = Y##ma; \
- X##me = Y##me; \
- X##mi = Y##mi; \
- X##mo = Y##mo; \
- X##mu = Y##mu; \
- X##sa = Y##sa; \
- X##se = Y##se; \
- X##si = Y##si; \
- X##so = Y##so; \
- X##su = Y##su; \
- #define copyFromStateAndAdd(X, state, input, laneCount) \
- if (laneCount < 16) { \
- if (laneCount < 8) { \
- if (laneCount < 4) { \
- if (laneCount < 2) { \
- if (laneCount < 1) { \
- X##ba = state[ 0]; \
- } \
- else { \
- X##ba = state[ 0]^input[ 0]; \
- } \
- X##be = state[ 1]; \
- X##bi = state[ 2]; \
- } \
- else { \
- X##ba = state[ 0]^input[ 0]; \
- X##be = state[ 1]^input[ 1]; \
- if (laneCount < 3) { \
- X##bi = state[ 2]; \
- } \
- else { \
- X##bi = state[ 2]^input[ 2]; \
- } \
- } \
- X##bo = state[ 3]; \
- X##bu = state[ 4]; \
- X##ga = state[ 5]; \
- X##ge = state[ 6]; \
- } \
- else { \
- X##ba = state[ 0]^input[ 0]; \
- X##be = state[ 1]^input[ 1]; \
- X##bi = state[ 2]^input[ 2]; \
- X##bo = state[ 3]^input[ 3]; \
- if (laneCount < 6) { \
- if (laneCount < 5) { \
- X##bu = state[ 4]; \
- } \
- else { \
- X##bu = state[ 4]^input[ 4]; \
- } \
- X##ga = state[ 5]; \
- X##ge = state[ 6]; \
- } \
- else { \
- X##bu = state[ 4]^input[ 4]; \
- X##ga = state[ 5]^input[ 5]; \
- if (laneCount < 7) { \
- X##ge = state[ 6]; \
- } \
- else { \
- X##ge = state[ 6]^input[ 6]; \
- } \
- } \
- } \
- X##gi = state[ 7]; \
- X##go = state[ 8]; \
- X##gu = state[ 9]; \
- X##ka = state[10]; \
- X##ke = state[11]; \
- X##ki = state[12]; \
- X##ko = state[13]; \
- X##ku = state[14]; \
- } \
- else { \
- X##ba = state[ 0]^input[ 0]; \
- X##be = state[ 1]^input[ 1]; \
- X##bi = state[ 2]^input[ 2]; \
- X##bo = state[ 3]^input[ 3]; \
- X##bu = state[ 4]^input[ 4]; \
- X##ga = state[ 5]^input[ 5]; \
- X##ge = state[ 6]^input[ 6]; \
- X##gi = state[ 7]^input[ 7]; \
- if (laneCount < 12) { \
- if (laneCount < 10) { \
- if (laneCount < 9) { \
- X##go = state[ 8]; \
- } \
- else { \
- X##go = state[ 8]^input[ 8]; \
- } \
- X##gu = state[ 9]; \
- X##ka = state[10]; \
- } \
- else { \
- X##go = state[ 8]^input[ 8]; \
- X##gu = state[ 9]^input[ 9]; \
- if (laneCount < 11) { \
- X##ka = state[10]; \
- } \
- else { \
- X##ka = state[10]^input[10]; \
- } \
- } \
- X##ke = state[11]; \
- X##ki = state[12]; \
- X##ko = state[13]; \
- X##ku = state[14]; \
- } \
- else { \
- X##go = state[ 8]^input[ 8]; \
- X##gu = state[ 9]^input[ 9]; \
- X##ka = state[10]^input[10]; \
- X##ke = state[11]^input[11]; \
- if (laneCount < 14) { \
- if (laneCount < 13) { \
- X##ki = state[12]; \
- } \
- else { \
- X##ki = state[12]^input[12]; \
- } \
- X##ko = state[13]; \
- X##ku = state[14]; \
- } \
- else { \
- X##ki = state[12]^input[12]; \
- X##ko = state[13]^input[13]; \
- if (laneCount < 15) { \
- X##ku = state[14]; \
- } \
- else { \
- X##ku = state[14]^input[14]; \
- } \
- } \
- } \
- } \
- X##ma = state[15]; \
- X##me = state[16]; \
- X##mi = state[17]; \
- X##mo = state[18]; \
- X##mu = state[19]; \
- X##sa = state[20]; \
- X##se = state[21]; \
- X##si = state[22]; \
- X##so = state[23]; \
- X##su = state[24]; \
- } \
- else { \
- X##ba = state[ 0]^input[ 0]; \
- X##be = state[ 1]^input[ 1]; \
- X##bi = state[ 2]^input[ 2]; \
- X##bo = state[ 3]^input[ 3]; \
- X##bu = state[ 4]^input[ 4]; \
- X##ga = state[ 5]^input[ 5]; \
- X##ge = state[ 6]^input[ 6]; \
- X##gi = state[ 7]^input[ 7]; \
- X##go = state[ 8]^input[ 8]; \
- X##gu = state[ 9]^input[ 9]; \
- X##ka = state[10]^input[10]; \
- X##ke = state[11]^input[11]; \
- X##ki = state[12]^input[12]; \
- X##ko = state[13]^input[13]; \
- X##ku = state[14]^input[14]; \
- X##ma = state[15]^input[15]; \
- if (laneCount < 24) { \
- if (laneCount < 20) { \
- if (laneCount < 18) { \
- if (laneCount < 17) { \
- X##me = state[16]; \
- } \
- else { \
- X##me = state[16]^input[16]; \
- } \
- X##mi = state[17]; \
- X##mo = state[18]; \
- } \
- else { \
- X##me = state[16]^input[16]; \
- X##mi = state[17]^input[17]; \
- if (laneCount < 19) { \
- X##mo = state[18]; \
- } \
- else { \
- X##mo = state[18]^input[18]; \
- } \
- } \
- X##mu = state[19]; \
- X##sa = state[20]; \
- X##se = state[21]; \
- X##si = state[22]; \
- } \
- else { \
- X##me = state[16]^input[16]; \
- X##mi = state[17]^input[17]; \
- X##mo = state[18]^input[18]; \
- X##mu = state[19]^input[19]; \
- if (laneCount < 22) { \
- if (laneCount < 21) { \
- X##sa = state[20]; \
- } \
- else { \
- X##sa = state[20]^input[20]; \
- } \
- X##se = state[21]; \
- X##si = state[22]; \
- } \
- else { \
- X##sa = state[20]^input[20]; \
- X##se = state[21]^input[21]; \
- if (laneCount < 23) { \
- X##si = state[22]; \
- } \
- else { \
- X##si = state[22]^input[22]; \
- } \
- } \
- } \
- X##so = state[23]; \
- X##su = state[24]; \
- } \
- else { \
- X##me = state[16]^input[16]; \
- X##mi = state[17]^input[17]; \
- X##mo = state[18]^input[18]; \
- X##mu = state[19]^input[19]; \
- X##sa = state[20]^input[20]; \
- X##se = state[21]^input[21]; \
- X##si = state[22]^input[22]; \
- X##so = state[23]^input[23]; \
- if (laneCount < 25) { \
- X##su = state[24]; \
- } \
- else { \
- X##su = state[24]^input[24]; \
- } \
- } \
- }
- #define addInput(X, input, laneCount) \
- if (laneCount == 21) { \
- X##ba ^= input[ 0]; \
- X##be ^= input[ 1]; \
- X##bi ^= input[ 2]; \
- X##bo ^= input[ 3]; \
- X##bu ^= input[ 4]; \
- X##ga ^= input[ 5]; \
- X##ge ^= input[ 6]; \
- X##gi ^= input[ 7]; \
- X##go ^= input[ 8]; \
- X##gu ^= input[ 9]; \
- X##ka ^= input[10]; \
- X##ke ^= input[11]; \
- X##ki ^= input[12]; \
- X##ko ^= input[13]; \
- X##ku ^= input[14]; \
- X##ma ^= input[15]; \
- X##me ^= input[16]; \
- X##mi ^= input[17]; \
- X##mo ^= input[18]; \
- X##mu ^= input[19]; \
- X##sa ^= input[20]; \
- } \
- else if (laneCount < 16) { \
- if (laneCount < 8) { \
- if (laneCount < 4) { \
- if (laneCount < 2) { \
- if (laneCount < 1) { \
- } \
- else { \
- X##ba ^= input[ 0]; \
- } \
- } \
- else { \
- X##ba ^= input[ 0]; \
- X##be ^= input[ 1]; \
- if (laneCount < 3) { \
- } \
- else { \
- X##bi ^= input[ 2]; \
- } \
- } \
- } \
- else { \
- X##ba ^= input[ 0]; \
- X##be ^= input[ 1]; \
- X##bi ^= input[ 2]; \
- X##bo ^= input[ 3]; \
- if (laneCount < 6) { \
- if (laneCount < 5) { \
- } \
- else { \
- X##bu ^= input[ 4]; \
- } \
- } \
- else { \
- X##bu ^= input[ 4]; \
- X##ga ^= input[ 5]; \
- if (laneCount < 7) { \
- } \
- else { \
- X##ge ^= input[ 6]; \
- } \
- } \
- } \
- } \
- else { \
- X##ba ^= input[ 0]; \
- X##be ^= input[ 1]; \
- X##bi ^= input[ 2]; \
- X##bo ^= input[ 3]; \
- X##bu ^= input[ 4]; \
- X##ga ^= input[ 5]; \
- X##ge ^= input[ 6]; \
- X##gi ^= input[ 7]; \
- if (laneCount < 12) { \
- if (laneCount < 10) { \
- if (laneCount < 9) { \
- } \
- else { \
- X##go ^= input[ 8]; \
- } \
- } \
- else { \
- X##go ^= input[ 8]; \
- X##gu ^= input[ 9]; \
- if (laneCount < 11) { \
- } \
- else { \
- X##ka ^= input[10]; \
- } \
- } \
- } \
- else { \
- X##go ^= input[ 8]; \
- X##gu ^= input[ 9]; \
- X##ka ^= input[10]; \
- X##ke ^= input[11]; \
- if (laneCount < 14) { \
- if (laneCount < 13) { \
- } \
- else { \
- X##ki ^= input[12]; \
- } \
- } \
- else { \
- X##ki ^= input[12]; \
- X##ko ^= input[13]; \
- if (laneCount < 15) { \
- } \
- else { \
- X##ku ^= input[14]; \
- } \
- } \
- } \
- } \
- } \
- else { \
- X##ba ^= input[ 0]; \
- X##be ^= input[ 1]; \
- X##bi ^= input[ 2]; \
- X##bo ^= input[ 3]; \
- X##bu ^= input[ 4]; \
- X##ga ^= input[ 5]; \
- X##ge ^= input[ 6]; \
- X##gi ^= input[ 7]; \
- X##go ^= input[ 8]; \
- X##gu ^= input[ 9]; \
- X##ka ^= input[10]; \
- X##ke ^= input[11]; \
- X##ki ^= input[12]; \
- X##ko ^= input[13]; \
- X##ku ^= input[14]; \
- X##ma ^= input[15]; \
- if (laneCount < 24) { \
- if (laneCount < 20) { \
- if (laneCount < 18) { \
- if (laneCount < 17) { \
- } \
- else { \
- X##me ^= input[16]; \
- } \
- } \
- else { \
- X##me ^= input[16]; \
- X##mi ^= input[17]; \
- if (laneCount < 19) { \
- } \
- else { \
- X##mo ^= input[18]; \
- } \
- } \
- } \
- else { \
- X##me ^= input[16]; \
- X##mi ^= input[17]; \
- X##mo ^= input[18]; \
- X##mu ^= input[19]; \
- if (laneCount < 22) { \
- if (laneCount < 21) { \
- } \
- else { \
- X##sa ^= input[20]; \
- } \
- } \
- else { \
- X##sa ^= input[20]; \
- X##se ^= input[21]; \
- if (laneCount < 23) { \
- } \
- else { \
- X##si ^= input[22]; \
- } \
- } \
- } \
- } \
- else { \
- X##me ^= input[16]; \
- X##mi ^= input[17]; \
- X##mo ^= input[18]; \
- X##mu ^= input[19]; \
- X##sa ^= input[20]; \
- X##se ^= input[21]; \
- X##si ^= input[22]; \
- X##so ^= input[23]; \
- if (laneCount < 25) { \
- } \
- else { \
- X##su ^= input[24]; \
- } \
- } \
- }
- #ifdef UseBebigokimisa
- #define copyToStateAndOutput(X, state, output, laneCount) \
- if (laneCount < 16) { \
- if (laneCount < 8) { \
- if (laneCount < 4) { \
- if (laneCount < 2) { \
- state[ 0] = X##ba; \
- if (laneCount >= 1) { \
- output[ 0] = X##ba; \
- } \
- state[ 1] = X##be; \
- state[ 2] = X##bi; \
- } \
- else { \
- state[ 0] = X##ba; \
- output[ 0] = X##ba; \
- state[ 1] = X##be; \
- output[ 1] = ~X##be; \
- state[ 2] = X##bi; \
- if (laneCount >= 3) { \
- output[ 2] = ~X##bi; \
- } \
- } \
- state[ 3] = X##bo; \
- state[ 4] = X##bu; \
- state[ 5] = X##ga; \
- state[ 6] = X##ge; \
- } \
- else { \
- state[ 0] = X##ba; \
- output[ 0] = X##ba; \
- state[ 1] = X##be; \
- output[ 1] = ~X##be; \
- state[ 2] = X##bi; \
- output[ 2] = ~X##bi; \
- state[ 3] = X##bo; \
- output[ 3] = X##bo; \
- if (laneCount < 6) { \
- state[ 4] = X##bu; \
- if (laneCount >= 5) { \
- output[ 4] = X##bu; \
- } \
- state[ 5] = X##ga; \
- state[ 6] = X##ge; \
- } \
- else { \
- state[ 4] = X##bu; \
- output[ 4] = X##bu; \
- state[ 5] = X##ga; \
- output[ 5] = X##ga; \
- state[ 6] = X##ge; \
- if (laneCount >= 7) { \
- output[ 6] = X##ge; \
- } \
- } \
- } \
- state[ 7] = X##gi; \
- state[ 8] = X##go; \
- state[ 9] = X##gu; \
- state[10] = X##ka; \
- state[11] = X##ke; \
- state[12] = X##ki; \
- state[13] = X##ko; \
- state[14] = X##ku; \
- } \
- else { \
- state[ 0] = X##ba; \
- output[ 0] = X##ba; \
- state[ 1] = X##be; \
- output[ 1] = ~X##be; \
- state[ 2] = X##bi; \
- output[ 2] = ~X##bi; \
- state[ 3] = X##bo; \
- output[ 3] = X##bo; \
- state[ 4] = X##bu; \
- output[ 4] = X##bu; \
- state[ 5] = X##ga; \
- output[ 5] = X##ga; \
- state[ 6] = X##ge; \
- output[ 6] = X##ge; \
- state[ 7] = X##gi; \
- output[ 7] = X##gi; \
- if (laneCount < 12) { \
- if (laneCount < 10) { \
- state[ 8] = X##go; \
- if (laneCount >= 9) { \
- output[ 8] = ~X##go; \
- } \
- state[ 9] = X##gu; \
- state[10] = X##ka; \
- } \
- else { \
- state[ 8] = X##go; \
- output[ 8] = ~X##go; \
- state[ 9] = X##gu; \
- output[ 9] = X##gu; \
- state[10] = X##ka; \
- if (laneCount >= 11) { \
- output[10] = X##ka; \
- } \
- } \
- state[11] = X##ke; \
- state[12] = X##ki; \
- state[13] = X##ko; \
- state[14] = X##ku; \
- } \
- else { \
- state[ 8] = X##go; \
- output[ 8] = ~X##go; \
- state[ 9] = X##gu; \
- output[ 9] = X##gu; \
- state[10] = X##ka; \
- output[10] = X##ka; \
- state[11] = X##ke; \
- output[11] = X##ke; \
- if (laneCount < 14) { \
- state[12] = X##ki; \
- if (laneCount >= 13) { \
- output[12] = ~X##ki; \
- } \
- state[13] = X##ko; \
- state[14] = X##ku; \
- } \
- else { \
- state[12] = X##ki; \
- output[12] = ~X##ki; \
- state[13] = X##ko; \
- output[13] = X##ko; \
- state[14] = X##ku; \
- if (laneCount >= 15) { \
- output[14] = X##ku; \
- } \
- } \
- } \
- } \
- state[15] = X##ma; \
- state[16] = X##me; \
- state[17] = X##mi; \
- state[18] = X##mo; \
- state[19] = X##mu; \
- state[20] = X##sa; \
- state[21] = X##se; \
- state[22] = X##si; \
- state[23] = X##so; \
- state[24] = X##su; \
- } \
- else { \
- state[ 0] = X##ba; \
- output[ 0] = X##ba; \
- state[ 1] = X##be; \
- output[ 1] = ~X##be; \
- state[ 2] = X##bi; \
- output[ 2] = ~X##bi; \
- state[ 3] = X##bo; \
- output[ 3] = X##bo; \
- state[ 4] = X##bu; \
- output[ 4] = X##bu; \
- state[ 5] = X##ga; \
- output[ 5] = X##ga; \
- state[ 6] = X##ge; \
- output[ 6] = X##ge; \
- state[ 7] = X##gi; \
- output[ 7] = X##gi; \
- state[ 8] = X##go; \
- output[ 8] = ~X##go; \
- state[ 9] = X##gu; \
- output[ 9] = X##gu; \
- state[10] = X##ka; \
- output[10] = X##ka; \
- state[11] = X##ke; \
- output[11] = X##ke; \
- state[12] = X##ki; \
- output[12] = ~X##ki; \
- state[13] = X##ko; \
- output[13] = X##ko; \
- state[14] = X##ku; \
- output[14] = X##ku; \
- state[15] = X##ma; \
- output[15] = X##ma; \
- if (laneCount < 24) { \
- if (laneCount < 20) { \
- if (laneCount < 18) { \
- state[16] = X##me; \
- if (laneCount >= 17) { \
- output[16] = X##me; \
- } \
- state[17] = X##mi; \
- state[18] = X##mo; \
- } \
- else { \
- state[16] = X##me; \
- output[16] = X##me; \
- state[17] = X##mi; \
- output[17] = ~X##mi; \
- state[18] = X##mo; \
- if (laneCount >= 19) { \
- output[18] = X##mo; \
- } \
- } \
- state[19] = X##mu; \
- state[20] = X##sa; \
- state[21] = X##se; \
- state[22] = X##si; \
- } \
- else { \
- state[16] = X##me; \
- output[16] = X##me; \
- state[17] = X##mi; \
- output[17] = ~X##mi; \
- state[18] = X##mo; \
- output[18] = X##mo; \
- state[19] = X##mu; \
- output[19] = X##mu; \
- if (laneCount < 22) { \
- state[20] = X##sa; \
- if (laneCount >= 21) { \
- output[20] = ~X##sa; \
- } \
- state[21] = X##se; \
- state[22] = X##si; \
- } \
- else { \
- state[20] = X##sa; \
- output[20] = ~X##sa; \
- state[21] = X##se; \
- output[21] = X##se; \
- state[22] = X##si; \
- if (laneCount >= 23) { \
- output[22] = X##si; \
- } \
- } \
- } \
- state[23] = X##so; \
- state[24] = X##su; \
- } \
- else { \
- state[16] = X##me; \
- output[16] = X##me; \
- state[17] = X##mi; \
- output[17] = ~X##mi; \
- state[18] = X##mo; \
- output[18] = X##mo; \
- state[19] = X##mu; \
- output[19] = X##mu; \
- state[20] = X##sa; \
- output[20] = ~X##sa; \
- state[21] = X##se; \
- output[21] = X##se; \
- state[22] = X##si; \
- output[22] = X##si; \
- state[23] = X##so; \
- output[23] = X##so; \
- state[24] = X##su; \
- if (laneCount >= 25) { \
- output[24] = X##su; \
- } \
- } \
- }
- #define output(X, output, laneCount) \
- if (laneCount < 16) { \
- if (laneCount < 8) { \
- if (laneCount < 4) { \
- if (laneCount < 2) { \
- if (laneCount >= 1) { \
- output[ 0] = X##ba; \
- } \
- } \
- else { \
- output[ 0] = X##ba; \
- output[ 1] = ~X##be; \
- if (laneCount >= 3) { \
- output[ 2] = ~X##bi; \
- } \
- } \
- } \
- else { \
- output[ 0] = X##ba; \
- output[ 1] = ~X##be; \
- output[ 2] = ~X##bi; \
- output[ 3] = X##bo; \
- if (laneCount < 6) { \
- if (laneCount >= 5) { \
- output[ 4] = X##bu; \
- } \
- } \
- else { \
- output[ 4] = X##bu; \
- output[ 5] = X##ga; \
- if (laneCount >= 7) { \
- output[ 6] = X##ge; \
- } \
- } \
- } \
- } \
- else { \
- output[ 0] = X##ba; \
- output[ 1] = ~X##be; \
- output[ 2] = ~X##bi; \
- output[ 3] = X##bo; \
- output[ 4] = X##bu; \
- output[ 5] = X##ga; \
- output[ 6] = X##ge; \
- output[ 7] = X##gi; \
- if (laneCount < 12) { \
- if (laneCount < 10) { \
- if (laneCount >= 9) { \
- output[ 8] = ~X##go; \
- } \
- } \
- else { \
- output[ 8] = ~X##go; \
- output[ 9] = X##gu; \
- if (laneCount >= 11) { \
- output[10] = X##ka; \
- } \
- } \
- } \
- else { \
- output[ 8] = ~X##go; \
- output[ 9] = X##gu; \
- output[10] = X##ka; \
- output[11] = X##ke; \
- if (laneCount < 14) { \
- if (laneCount >= 13) { \
- output[12] = ~X##ki; \
- } \
- } \
- else { \
- output[12] = ~X##ki; \
- output[13] = X##ko; \
- if (laneCount >= 15) { \
- output[14] = X##ku; \
- } \
- } \
- } \
- } \
- } \
- else { \
- output[ 0] = X##ba; \
- output[ 1] = ~X##be; \
- output[ 2] = ~X##bi; \
- output[ 3] = X##bo; \
- output[ 4] = X##bu; \
- output[ 5] = X##ga; \
- output[ 6] = X##ge; \
- output[ 7] = X##gi; \
- output[ 8] = ~X##go; \
- output[ 9] = X##gu; \
- output[10] = X##ka; \
- output[11] = X##ke; \
- output[12] = ~X##ki; \
- output[13] = X##ko; \
- output[14] = X##ku; \
- output[15] = X##ma; \
- if (laneCount < 24) { \
- if (laneCount < 20) { \
- if (laneCount < 18) { \
- if (laneCount >= 17) { \
- output[16] = X##me; \
- } \
- } \
- else { \
- output[16] = X##me; \
- output[17] = ~X##mi; \
- if (laneCount >= 19) { \
- output[18] = X##mo; \
- } \
- } \
- } \
- else { \
- output[16] = X##me; \
- output[17] = ~X##mi; \
- output[18] = X##mo; \
- output[19] = X##mu; \
- if (laneCount < 22) { \
- if (laneCount >= 21) { \
- output[20] = ~X##sa; \
- } \
- } \
- else { \
- output[20] = ~X##sa; \
- output[21] = X##se; \
- if (laneCount >= 23) { \
- output[22] = X##si; \
- } \
- } \
- } \
- } \
- else { \
- output[16] = X##me; \
- output[17] = ~X##mi; \
- output[18] = X##mo; \
- output[19] = X##mu; \
- output[20] = ~X##sa; \
- output[21] = X##se; \
- output[22] = X##si; \
- output[23] = X##so; \
- if (laneCount >= 25) { \
- output[24] = X##su; \
- } \
- } \
- }
- #define wrapOne(X, input, output, index, name) \
- X##name ^= input[index]; \
- output[index] = X##name;
- #define wrapOneInvert(X, input, output, index, name) \
- X##name ^= input[index]; \
- output[index] = ~X##name;
- #define unwrapOne(X, input, output, index, name) \
- output[index] = input[index] ^ X##name; \
- X##name ^= output[index];
- #define unwrapOneInvert(X, input, output, index, name) \
- output[index] = ~(input[index] ^ X##name); \
- X##name ^= output[index]; \
- #else /* UseBebigokimisa */
- #define copyToStateAndOutput(X, state, output, laneCount) \
- if (laneCount < 16) { \
- if (laneCount < 8) { \
- if (laneCount < 4) { \
- if (laneCount < 2) { \
- state[ 0] = X##ba; \
- if (laneCount >= 1) { \
- output[ 0] = X##ba; \
- } \
- state[ 1] = X##be; \
- state[ 2] = X##bi; \
- } \
- else { \
- state[ 0] = X##ba; \
- output[ 0] = X##ba; \
- state[ 1] = X##be; \
- output[ 1] = X##be; \
- state[ 2] = X##bi; \
- if (laneCount >= 3) { \
- output[ 2] = X##bi; \
- } \
- } \
- state[ 3] = X##bo; \
- state[ 4] = X##bu; \
- state[ 5] = X##ga; \
- state[ 6] = X##ge; \
- } \
- else { \
- state[ 0] = X##ba; \
- output[ 0] = X##ba; \
- state[ 1] = X##be; \
- output[ 1] = X##be; \
- state[ 2] = X##bi; \
- output[ 2] = X##bi; \
- state[ 3] = X##bo; \
- output[ 3] = X##bo; \
- if (laneCount < 6) { \
- state[ 4] = X##bu; \
- if (laneCount >= 5) { \
- output[ 4] = X##bu; \
- } \
- state[ 5] = X##ga; \
- state[ 6] = X##ge; \
- } \
- else { \
- state[ 4] = X##bu; \
- output[ 4] = X##bu; \
- state[ 5] = X##ga; \
- output[ 5] = X##ga; \
- state[ 6] = X##ge; \
- if (laneCount >= 7) { \
- output[ 6] = X##ge; \
- } \
- } \
- } \
- state[ 7] = X##gi; \
- state[ 8] = X##go; \
- state[ 9] = X##gu; \
- state[10] = X##ka; \
- state[11] = X##ke; \
- state[12] = X##ki; \
- state[13] = X##ko; \
- state[14] = X##ku; \
- } \
- else { \
- state[ 0] = X##ba; \
- output[ 0] = X##ba; \
- state[ 1] = X##be; \
- output[ 1] = X##be; \
- state[ 2] = X##bi; \
- output[ 2] = X##bi; \
- state[ 3] = X##bo; \
- output[ 3] = X##bo; \
- state[ 4] = X##bu; \
- output[ 4] = X##bu; \
- state[ 5] = X##ga; \
- output[ 5] = X##ga; \
- state[ 6] = X##ge; \
- output[ 6] = X##ge; \
- state[ 7] = X##gi; \
- output[ 7] = X##gi; \
- if (laneCount < 12) { \
- if (laneCount < 10) { \
- state[ 8] = X##go; \
- if (laneCount >= 9) { \
- output[ 8] = X##go; \
- } \
- state[ 9] = X##gu; \
- state[10] = X##ka; \
- } \
- else { \
- state[ 8] = X##go; \
- output[ 8] = X##go; \
- state[ 9] = X##gu; \
- output[ 9] = X##gu; \
- state[10] = X##ka; \
- if (laneCount >= 11) { \
- output[10] = X##ka; \
- } \
- } \
- state[11] = X##ke; \
- state[12] = X##ki; \
- state[13] = X##ko; \
- state[14] = X##ku; \
- } \
- else { \
- state[ 8] = X##go; \
- output[ 8] = X##go; \
- state[ 9] = X##gu; \
- output[ 9] = X##gu; \
- state[10] = X##ka; \
- output[10] = X##ka; \
- state[11] = X##ke; \
- output[11] = X##ke; \
- if (laneCount < 14) { \
- state[12] = X##ki; \
- if (laneCount >= 13) { \
- output[12]= X##ki; \
- } \
- state[13] = X##ko; \
- state[14] = X##ku; \
- } \
- else { \
- state[12] = X##ki; \
- output[12]= X##ki; \
- state[13] = X##ko; \
- output[13] = X##ko; \
- state[14] = X##ku; \
- if (laneCount >= 15) { \
- output[14] = X##ku; \
- } \
- } \
- } \
- } \
- state[15] = X##ma; \
- state[16] = X##me; \
- state[17] = X##mi; \
- state[18] = X##mo; \
- state[19] = X##mu; \
- state[20] = X##sa; \
- state[21] = X##se; \
- state[22] = X##si; \
- state[23] = X##so; \
- state[24] = X##su; \
- } \
- else { \
- state[ 0] = X##ba; \
- output[ 0] = X##ba; \
- state[ 1] = X##be; \
- output[ 1] = X##be; \
- state[ 2] = X##bi; \
- output[ 2] = X##bi; \
- state[ 3] = X##bo; \
- output[ 3] = X##bo; \
- state[ 4] = X##bu; \
- output[ 4] = X##bu; \
- state[ 5] = X##ga; \
- output[ 5] = X##ga; \
- state[ 6] = X##ge; \
- output[ 6] = X##ge; \
- state[ 7] = X##gi; \
- output[ 7] = X##gi; \
- state[ 8] = X##go; \
- output[ 8] = X##go; \
- state[ 9] = X##gu; \
- output[ 9] = X##gu; \
- state[10] = X##ka; \
- output[10] = X##ka; \
- state[11] = X##ke; \
- output[11] = X##ke; \
- state[12] = X##ki; \
- output[12]= X##ki; \
- state[13] = X##ko; \
- output[13] = X##ko; \
- state[14] = X##ku; \
- output[14] = X##ku; \
- state[15] = X##ma; \
- output[15] = X##ma; \
- if (laneCount < 24) { \
- if (laneCount < 20) { \
- if (laneCount < 18) { \
- state[16] = X##me; \
- if (laneCount >= 17) { \
- output[16] = X##me; \
- } \
- state[17] = X##mi; \
- state[18] = X##mo; \
- } \
- else { \
- state[16] = X##me; \
- output[16] = X##me; \
- state[17] = X##mi; \
- output[17] = X##mi; \
- state[18] = X##mo; \
- if (laneCount >= 19) { \
- output[18] = X##mo; \
- } \
- } \
- state[19] = X##mu; \
- state[20] = X##sa; \
- state[21] = X##se; \
- state[22] = X##si; \
- } \
- else { \
- state[16] = X##me; \
- output[16] = X##me; \
- state[17] = X##mi; \
- output[17] = X##mi; \
- state[18] = X##mo; \
- output[18] = X##mo; \
- state[19] = X##mu; \
- output[19] = X##mu; \
- if (laneCount < 22) { \
- state[20] = X##sa; \
- if (laneCount >= 21) { \
- output[20] = X##sa; \
- } \
- state[21] = X##se; \
- state[22] = X##si; \
- } \
- else { \
- state[20] = X##sa; \
- output[20] = X##sa; \
- state[21] = X##se; \
- output[21] = X##se; \
- state[22] = X##si; \
- if (laneCount >= 23) { \
- output[22] = X##si; \
- } \
- } \
- } \
- state[23] = X##so; \
- state[24] = X##su; \
- } \
- else { \
- state[16] = X##me; \
- output[16] = X##me; \
- state[17] = X##mi; \
- output[17] = X##mi; \
- state[18] = X##mo; \
- output[18] = X##mo; \
- state[19] = X##mu; \
- output[19] = X##mu; \
- state[20] = X##sa; \
- output[20] = X##sa; \
- state[21] = X##se; \
- output[21] = X##se; \
- state[22] = X##si; \
- output[22] = X##si; \
- state[23] = X##so; \
- output[23] = X##so; \
- state[24] = X##su; \
- if (laneCount >= 25) { \
- output[24] = X##su; \
- } \
- } \
- }
- #define output(X, output, laneCount) \
- if (laneCount < 16) { \
- if (laneCount < 8) { \
- if (laneCount < 4) { \
- if (laneCount < 2) { \
- if (laneCount >= 1) { \
- output[ 0] = X##ba; \
- } \
- } \
- else { \
- output[ 0] = X##ba; \
- output[ 1] = X##be; \
- if (laneCount >= 3) { \
- output[ 2] = X##bi; \
- } \
- } \
- } \
- else { \
- output[ 0] = X##ba; \
- output[ 1] = X##be; \
- output[ 2] = X##bi; \
- output[ 3] = X##bo; \
- if (laneCount < 6) { \
- if (laneCount >= 5) { \
- output[ 4] = X##bu; \
- } \
- } \
- else { \
- output[ 4] = X##bu; \
- output[ 5] = X##ga; \
- if (laneCount >= 7) { \
- output[ 6] = X##ge; \
- } \
- } \
- } \
- } \
- else { \
- output[ 0] = X##ba; \
- output[ 1] = X##be; \
- output[ 2] = X##bi; \
- output[ 3] = X##bo; \
- output[ 4] = X##bu; \
- output[ 5] = X##ga; \
- output[ 6] = X##ge; \
- output[ 7] = X##gi; \
- if (laneCount < 12) { \
- if (laneCount < 10) { \
- if (laneCount >= 9) { \
- output[ 8] = X##go; \
- } \
- } \
- else { \
- output[ 8] = X##go; \
- output[ 9] = X##gu; \
- if (laneCount >= 11) { \
- output[10] = X##ka; \
- } \
- } \
- } \
- else { \
- output[ 8] = X##go; \
- output[ 9] = X##gu; \
- output[10] = X##ka; \
- output[11] = X##ke; \
- if (laneCount < 14) { \
- if (laneCount >= 13) { \
- output[12] = X##ki; \
- } \
- } \
- else { \
- output[12] = X##ki; \
- output[13] = X##ko; \
- if (laneCount >= 15) { \
- output[14] = X##ku; \
- } \
- } \
- } \
- } \
- } \
- else { \
- output[ 0] = X##ba; \
- output[ 1] = X##be; \
- output[ 2] = X##bi; \
- output[ 3] = X##bo; \
- output[ 4] = X##bu; \
- output[ 5] = X##ga; \
- output[ 6] = X##ge; \
- output[ 7] = X##gi; \
- output[ 8] = X##go; \
- output[ 9] = X##gu; \
- output[10] = X##ka; \
- output[11] = X##ke; \
- output[12] = X##ki; \
- output[13] = X##ko; \
- output[14] = X##ku; \
- output[15] = X##ma; \
- if (laneCount < 24) { \
- if (laneCount < 20) { \
- if (laneCount < 18) { \
- if (laneCount >= 17) { \
- output[16] = X##me; \
- } \
- } \
- else { \
- output[16] = X##me; \
- output[17] = X##mi; \
- if (laneCount >= 19) { \
- output[18] = X##mo; \
- } \
- } \
- } \
- else { \
- output[16] = X##me; \
- output[17] = X##mi; \
- output[18] = X##mo; \
- output[19] = X##mu; \
- if (laneCount < 22) { \
- if (laneCount >= 21) { \
- output[20] = X##sa; \
- } \
- } \
- else { \
- output[20] = X##sa; \
- output[21] = X##se; \
- if (laneCount >= 23) { \
- output[22] = X##si; \
- } \
- } \
- } \
- } \
- else { \
- output[16] = X##me; \
- output[17] = X##mi; \
- output[18] = X##mo; \
- output[19] = X##mu; \
- output[20] = X##sa; \
- output[21] = X##se; \
- output[22] = X##si; \
- output[23] = X##so; \
- if (laneCount >= 25) { \
- output[24] = X##su; \
- } \
- } \
- }
- #define wrapOne(X, input, output, index, name) \
- X##name ^= input[index]; \
- output[index] = X##name;
- #define wrapOneInvert(X, input, output, index, name) \
- X##name ^= input[index]; \
- output[index] = X##name;
- #define unwrapOne(X, input, output, index, name) \
- output[index] = input[index] ^ X##name; \
- X##name ^= output[index];
- #define unwrapOneInvert(X, input, output, index, name) \
- output[index] = input[index] ^ X##name; \
- X##name ^= output[index];
- #endif
- #define wrap(X, input, output, laneCount, trailingBits) \
- if (laneCount < 16) { \
- if (laneCount < 8) { \
- if (laneCount < 4) { \
- if (laneCount < 2) { \
- if (laneCount < 1) { \
- X##ba ^= trailingBits; \
- } \
- else { \
- wrapOne(X, input, output, 0, ba) \
- X##be ^= trailingBits; \
- } \
- } \
- else { \
- wrapOne(X, input, output, 0, ba) \
- wrapOneInvert(X, input, output, 1, be) \
- if (laneCount < 3) { \
- X##bi ^= trailingBits; \
- } \
- else { \
- wrapOneInvert(X, input, output, 2, bi) \
- X##bo ^= trailingBits; \
- } \
- } \
- } \
- else { \
- wrapOne(X, input, output, 0, ba) \
- wrapOneInvert(X, input, output, 1, be) \
- wrapOneInvert(X, input, output, 2, bi) \
- wrapOne(X, input, output, 3, bo) \
- if (laneCount < 6) { \
- if (laneCount < 5) { \
- X##bu ^= trailingBits; \
- } \
- else { \
- wrapOne(X, input, output, 4, bu) \
- X##ga ^= trailingBits; \
- } \
- } \
- else { \
- wrapOne(X, input, output, 4, bu) \
- wrapOne(X, input, output, 5, ga) \
- if (laneCount < 7) { \
- X##ge ^= trailingBits; \
- } \
- else { \
- wrapOne(X, input, output, 6, ge) \
- X##gi ^= trailingBits; \
- } \
- } \
- } \
- } \
- else { \
- wrapOne(X, input, output, 0, ba) \
- wrapOneInvert(X, input, output, 1, be) \
- wrapOneInvert(X, input, output, 2, bi) \
- wrapOne(X, input, output, 3, bo) \
- wrapOne(X, input, output, 4, bu) \
- wrapOne(X, input, output, 5, ga) \
- wrapOne(X, input, output, 6, ge) \
- wrapOne(X, input, output, 7, gi) \
- if (laneCount < 12) { \
- if (laneCount < 10) { \
- if (laneCount < 9) { \
- X##go ^= trailingBits; \
- } \
- else { \
- wrapOneInvert(X, input, output, 8, go) \
- X##gu ^= trailingBits; \
- } \
- } \
- else { \
- wrapOneInvert(X, input, output, 8, go) \
- wrapOne(X, input, output, 9, gu) \
- if (laneCount < 11) { \
- X##ka ^= trailingBits; \
- } \
- else { \
- wrapOne(X, input, output, 10, ka) \
- X##ke ^= trailingBits; \
- } \
- } \
- } \
- else { \
- wrapOneInvert(X, input, output, 8, go) \
- wrapOne(X, input, output, 9, gu) \
- wrapOne(X, input, output, 10, ka) \
- wrapOne(X, input, output, 11, ke) \
- if (laneCount < 14) { \
- if (laneCount < 13) { \
- X##ki ^= trailingBits; \
- } \
- else { \
- wrapOneInvert(X, input, output, 12, ki) \
- X##ko ^= trailingBits; \
- } \
- } \
- else { \
- wrapOneInvert(X, input, output, 12, ki) \
- wrapOne(X, input, output, 13, ko) \
- if (laneCount < 15) { \
- X##ku ^= trailingBits; \
- } \
- else { \
- wrapOne(X, input, output, 14, ku) \
- X##ma ^= trailingBits; \
- } \
- } \
- } \
- } \
- } \
- else { \
- wrapOne(X, input, output, 0, ba) \
- wrapOneInvert(X, input, output, 1, be) \
- wrapOneInvert(X, input, output, 2, bi) \
- wrapOne(X, input, output, 3, bo) \
- wrapOne(X, input, output, 4, bu) \
- wrapOne(X, input, output, 5, ga) \
- wrapOne(X, input, output, 6, ge) \
- wrapOne(X, input, output, 7, gi) \
- wrapOneInvert(X, input, output, 8, go) \
- wrapOne(X, input, output, 9, gu) \
- wrapOne(X, input, output, 10, ka) \
- wrapOne(X, input, output, 11, ke) \
- wrapOneInvert(X, input, output, 12, ki) \
- wrapOne(X, input, output, 13, ko) \
- wrapOne(X, input, output, 14, ku) \
- wrapOne(X, input, output, 15, ma) \
- if (laneCount < 24) { \
- if (laneCount < 20) { \
- if (laneCount < 18) { \
- if (laneCount < 17) { \
- X##me ^= trailingBits; \
- } \
- else { \
- wrapOne(X, input, output, 16, me) \
- X##mi ^= trailingBits; \
- } \
- } \
- else { \
- wrapOne(X, input, output, 16, me) \
- wrapOneInvert(X, input, output, 17, mi) \
- if (laneCount < 19) { \
- X##mo ^= trailingBits; \
- } \
- else { \
- wrapOne(X, input, output, 18, mo) \
- X##mu ^= trailingBits; \
- } \
- } \
- } \
- else { \
- wrapOne(X, input, output, 16, me) \
- wrapOneInvert(X, input, output, 17, mi) \
- wrapOne(X, input, output, 18, mo) \
- wrapOne(X, input, output, 19, mu) \
- if (laneCount < 22) { \
- if (laneCount < 21) { \
- X##sa ^= trailingBits; \
- } \
- else { \
- wrapOneInvert(X, input, output, 20, sa) \
- X##se ^= trailingBits; \
- } \
- } \
- else { \
- wrapOneInvert(X, input, output, 20, sa) \
- wrapOne(X, input, output, 21, se) \
- if (laneCount < 23) { \
- X##si ^= trailingBits; \
- } \
- else { \
- wrapOne(X, input, output, 22, si) \
- X##so ^= trailingBits; \
- } \
- } \
- } \
- } \
- else { \
- wrapOne(X, input, output, 16, me) \
- wrapOneInvert(X, input, output, 17, mi) \
- wrapOne(X, input, output, 18, mo) \
- wrapOne(X, input, output, 19, mu) \
- wrapOneInvert(X, input, output, 20, sa) \
- wrapOne(X, input, output, 21, se) \
- wrapOne(X, input, output, 22, si) \
- wrapOne(X, input, output, 23, so) \
- if (laneCount < 25) { \
- X##su ^= trailingBits; \
- } \
- else { \
- wrapOne(X, input, output, 24, su) \
- } \
- } \
- }
- #define unwrap(X, input, output, laneCount, trailingBits) \
- if (laneCount < 16) { \
- if (laneCount < 8) { \
- if (laneCount < 4) { \
- if (laneCount < 2) { \
- if (laneCount < 1) { \
- X##ba ^= trailingBits; \
- } \
- else { \
- unwrapOne(X, input, output, 0, ba) \
- X##be ^= trailingBits; \
- } \
- } \
- else { \
- unwrapOne(X, input, output, 0, ba) \
- unwrapOneInvert(X, input, output, 1, be) \
- if (laneCount < 3) { \
- X##bi ^= trailingBits; \
- } \
- else { \
- unwrapOneInvert(X, input, output, 2, bi) \
- X##bo ^= trailingBits; \
- } \
- } \
- } \
- else { \
- unwrapOne(X, input, output, 0, ba) \
- unwrapOneInvert(X, input, output, 1, be) \
- unwrapOneInvert(X, input, output, 2, bi) \
- unwrapOne(X, input, output, 3, bo) \
- if (laneCount < 6) { \
- if (laneCount < 5) { \
- X##bu ^= trailingBits; \
- } \
- else { \
- unwrapOne(X, input, output, 4, bu) \
- X##ga ^= trailingBits; \
- } \
- } \
- else { \
- unwrapOne(X, input, output, 4, bu) \
- unwrapOne(X, input, output, 5, ga) \
- if (laneCount < 7) { \
- X##ge ^= trailingBits; \
- } \
- else { \
- unwrapOne(X, input, output, 6, ge) \
- X##gi ^= trailingBits; \
- } \
- } \
- } \
- } \
- else { \
- unwrapOne(X, input, output, 0, ba) \
- unwrapOneInvert(X, input, output, 1, be) \
- unwrapOneInvert(X, input, output, 2, bi) \
- unwrapOne(X, input, output, 3, bo) \
- unwrapOne(X, input, output, 4, bu) \
- unwrapOne(X, input, output, 5, ga) \
- unwrapOne(X, input, output, 6, ge) \
- unwrapOne(X, input, output, 7, gi) \
- if (laneCount < 12) { \
- if (laneCount < 10) { \
- if (laneCount < 9) { \
- X##go ^= trailingBits; \
- } \
- else { \
- unwrapOneInvert(X, input, output, 8, go) \
- X##gu ^= trailingBits; \
- } \
- } \
- else { \
- unwrapOneInvert(X, input, output, 8, go) \
- unwrapOne(X, input, output, 9, gu) \
- if (laneCount < 11) { \
- X##ka ^= trailingBits; \
- } \
- else { \
- unwrapOne(X, input, output, 10, ka) \
- X##ke ^= trailingBits; \
- } \
- } \
- } \
- else { \
- unwrapOneInvert(X, input, output, 8, go) \
- unwrapOne(X, input, output, 9, gu) \
- unwrapOne(X, input, output, 10, ka) \
- unwrapOne(X, input, output, 11, ke) \
- if (laneCount < 14) { \
- if (laneCount < 13) { \
- X##ki ^= trailingBits; \
- } \
- else { \
- unwrapOneInvert(X, input, output, 12, ki) \
- X##ko ^= trailingBits; \
- } \
- } \
- else { \
- unwrapOneInvert(X, input, output, 12, ki) \
- unwrapOne(X, input, output, 13, ko) \
- if (laneCount < 15) { \
- X##ku ^= trailingBits; \
- } \
- else { \
- unwrapOne(X, input, output, 14, ku) \
- X##ma ^= trailingBits; \
- } \
- } \
- } \
- } \
- } \
- else { \
- unwrapOne(X, input, output, 0, ba) \
- unwrapOneInvert(X, input, output, 1, be) \
- unwrapOneInvert(X, input, output, 2, bi) \
- unwrapOne(X, input, output, 3, bo) \
- unwrapOne(X, input, output, 4, bu) \
- unwrapOne(X, input, output, 5, ga) \
- unwrapOne(X, input, output, 6, ge) \
- unwrapOne(X, input, output, 7, gi) \
- unwrapOneInvert(X, input, output, 8, go) \
- unwrapOne(X, input, output, 9, gu) \
- unwrapOne(X, input, output, 10, ka) \
- unwrapOne(X, input, output, 11, ke) \
- unwrapOneInvert(X, input, output, 12, ki) \
- unwrapOne(X, input, output, 13, ko) \
- unwrapOne(X, input, output, 14, ku) \
- unwrapOne(X, input, output, 15, ma) \
- if (laneCount < 24) { \
- if (laneCount < 20) { \
- if (laneCount < 18) { \
- if (laneCount < 17) { \
- X##me ^= trailingBits; \
- } \
- else { \
- unwrapOne(X, input, output, 16, me) \
- X##mi ^= trailingBits; \
- } \
- } \
- else { \
- unwrapOne(X, input, output, 16, me) \
- unwrapOneInvert(X, input, output, 17, mi) \
- if (laneCount < 19) { \
- X##mo ^= trailingBits; \
- } \
- else { \
- unwrapOne(X, input, output, 18, mo) \
- X##mu ^= trailingBits; \
- } \
- } \
- } \
- else { \
- unwrapOne(X, input, output, 16, me) \
- unwrapOneInvert(X, input, output, 17, mi) \
- unwrapOne(X, input, output, 18, mo) \
- unwrapOne(X, input, output, 19, mu) \
- if (laneCount < 22) { \
- if (laneCount < 21) { \
- X##sa ^= trailingBits; \
- } \
- else { \
- unwrapOneInvert(X, input, output, 20, sa) \
- X##se ^= trailingBits; \
- } \
- } \
- else { \
- unwrapOneInvert(X, input, output, 20, sa) \
- unwrapOne(X, input, output, 21, se) \
- if (laneCount < 23) { \
- X##si ^= trailingBits; \
- } \
- else { \
- unwrapOne(X, input, output, 22, si) \
- X##so ^= trailingBits; \
- } \
- } \
- } \
- } \
- else { \
- unwrapOne(X, input, output, 16, me) \
- unwrapOneInvert(X, input, output, 17, mi) \
- unwrapOne(X, input, output, 18, mo) \
- unwrapOne(X, input, output, 19, mu) \
- unwrapOneInvert(X, input, output, 20, sa) \
- unwrapOne(X, input, output, 21, se) \
- unwrapOne(X, input, output, 22, si) \
- unwrapOne(X, input, output, 23, so) \
- if (laneCount < 25) { \
- X##su ^= trailingBits; \
- } \
- else { \
- unwrapOne(X, input, output, 24, su) \
- } \
- } \
- }
|