arm_neon.h 794 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575357635773578357935803581358235833584358535863587358835893590359135923593359435953596359735983599360036013602360336043605360636073608360936103611361236133614361536163617361836193620362136223623362436253626362736283629363036313632363336343635363636373638363936403641364236433644364536463647364836493650365136523653365436553656365736583659366036613662366336643665366636673668366936703671367236733674367536763677367836793680368136823683368436853686368736883689369036913692369336943695369636973698369937003701370237033704370537063707370837093710371137123713371437153716371737183719372037213722372337243725372637273728372937303731373237333734373537363737373837393740374137423743374437453746374737483749375037513752375337543755375637573758375937603761376237633764376537663767376837693770377137723773377437753776377737783779378037813782378337843785378637873788378937903791379237933794379537963797379837993800380138023803380438053806380738083809381038113812381338143815381638173818381938203821382238233824382538263827382838293830383138323833383438353836383738383839384038413842384338443845384638473848384938503851385238533854385538563857385838593860386138623863386438653866386738683869387038713872387338743875387638773878387938803881388238833884388538863887388838893890389138923893389438953896389738983899390039013902390339043905390639073908390939103911391239133914391539163917391839193920392139223923392439253926392739283929393039313932393339343935393639373938393939403941394239433944394539463947394839493950395139523953395439553956395739583959396039613962396339643965396639673968396939703971397239733974397539763977397839793980398139823983398439853986398739883989399039913992399339943995399639973998399940004001400240034004400540064007400840094010401140124013401440154016401740184019402040214022402340244025402640274028402940304031403240334034403540364037403840394040404140424043404440454046404740484049405040514052405340544055405640574058405940604061406240634064406540664067406840694070407140724073407440754076407740784079408040814082408340844085408640874088408940904091409240934094409540964097409840994100410141024103410441054106410741084109411041114112411341144115411641174118411941204121412241234124412541264127412841294130413141324133413441354136413741384139414041414142414341444145414641474148414941504151415241534154415541564157415841594160416141624163416441654166416741684169417041714172417341744175417641774178417941804181418241834184418541864187418841894190419141924193419441954196419741984199420042014202420342044205420642074208420942104211421242134214421542164217421842194220422142224223422442254226422742284229423042314232423342344235423642374238423942404241424242434244424542464247424842494250425142524253425442554256425742584259426042614262426342644265426642674268426942704271427242734274427542764277427842794280428142824283428442854286428742884289429042914292429342944295429642974298429943004301430243034304430543064307430843094310431143124313431443154316431743184319432043214322432343244325432643274328432943304331433243334334433543364337433843394340434143424343434443454346434743484349435043514352435343544355435643574358435943604361436243634364436543664367436843694370437143724373437443754376437743784379438043814382438343844385438643874388438943904391439243934394439543964397439843994400440144024403440444054406440744084409441044114412441344144415441644174418441944204421442244234424442544264427442844294430443144324433443444354436443744384439444044414442444344444445444644474448444944504451445244534454445544564457445844594460446144624463446444654466446744684469447044714472447344744475447644774478447944804481448244834484448544864487448844894490449144924493449444954496449744984499450045014502450345044505450645074508450945104511451245134514451545164517451845194520452145224523452445254526452745284529453045314532453345344535453645374538453945404541454245434544454545464547454845494550455145524553455445554556455745584559456045614562456345644565456645674568456945704571457245734574457545764577457845794580458145824583458445854586458745884589459045914592459345944595459645974598459946004601460246034604460546064607460846094610461146124613461446154616461746184619462046214622462346244625462646274628462946304631463246334634463546364637463846394640464146424643464446454646464746484649465046514652465346544655465646574658465946604661466246634664466546664667466846694670467146724673467446754676467746784679468046814682468346844685468646874688468946904691469246934694469546964697469846994700470147024703470447054706470747084709471047114712471347144715471647174718471947204721472247234724472547264727472847294730473147324733473447354736473747384739474047414742474347444745474647474748474947504751475247534754475547564757475847594760476147624763476447654766476747684769477047714772477347744775477647774778477947804781478247834784478547864787478847894790479147924793479447954796479747984799480048014802480348044805480648074808480948104811481248134814481548164817481848194820482148224823482448254826482748284829483048314832483348344835483648374838483948404841484248434844484548464847484848494850485148524853485448554856485748584859486048614862486348644865486648674868486948704871487248734874487548764877487848794880488148824883488448854886488748884889489048914892489348944895489648974898489949004901490249034904490549064907490849094910491149124913491449154916491749184919492049214922492349244925492649274928492949304931493249334934493549364937493849394940494149424943494449454946494749484949495049514952495349544955495649574958495949604961496249634964496549664967496849694970497149724973497449754976497749784979498049814982498349844985498649874988498949904991499249934994499549964997499849995000500150025003500450055006500750085009501050115012501350145015501650175018501950205021502250235024502550265027502850295030503150325033503450355036503750385039504050415042504350445045504650475048504950505051505250535054505550565057505850595060506150625063506450655066506750685069507050715072507350745075507650775078507950805081508250835084508550865087508850895090509150925093509450955096509750985099510051015102510351045105510651075108510951105111511251135114511551165117511851195120512151225123512451255126512751285129513051315132513351345135513651375138513951405141514251435144514551465147514851495150515151525153515451555156515751585159516051615162516351645165516651675168516951705171517251735174517551765177517851795180518151825183518451855186518751885189519051915192519351945195519651975198519952005201520252035204520552065207520852095210521152125213521452155216521752185219522052215222522352245225522652275228522952305231523252335234523552365237523852395240524152425243524452455246524752485249525052515252525352545255525652575258525952605261526252635264526552665267526852695270527152725273527452755276527752785279528052815282528352845285528652875288528952905291529252935294529552965297529852995300530153025303530453055306530753085309531053115312531353145315531653175318531953205321532253235324532553265327532853295330533153325333533453355336533753385339534053415342534353445345534653475348534953505351535253535354535553565357535853595360536153625363536453655366536753685369537053715372537353745375537653775378537953805381538253835384538553865387538853895390539153925393539453955396539753985399540054015402540354045405540654075408540954105411541254135414541554165417541854195420542154225423542454255426542754285429543054315432543354345435543654375438543954405441544254435444544554465447544854495450545154525453545454555456545754585459546054615462546354645465546654675468546954705471547254735474547554765477547854795480548154825483548454855486548754885489549054915492549354945495549654975498549955005501550255035504550555065507550855095510551155125513551455155516551755185519552055215522552355245525552655275528552955305531553255335534553555365537553855395540554155425543554455455546554755485549555055515552555355545555555655575558555955605561556255635564556555665567556855695570557155725573557455755576557755785579558055815582558355845585558655875588558955905591559255935594559555965597559855995600560156025603560456055606560756085609561056115612561356145615561656175618561956205621562256235624562556265627562856295630563156325633563456355636563756385639564056415642564356445645564656475648564956505651565256535654565556565657565856595660566156625663566456655666566756685669567056715672567356745675567656775678567956805681568256835684568556865687568856895690569156925693569456955696569756985699570057015702570357045705570657075708570957105711571257135714571557165717571857195720572157225723572457255726572757285729573057315732573357345735573657375738573957405741574257435744574557465747574857495750575157525753575457555756575757585759576057615762576357645765576657675768576957705771577257735774577557765777577857795780578157825783578457855786578757885789579057915792579357945795579657975798579958005801580258035804580558065807580858095810581158125813581458155816581758185819582058215822582358245825582658275828582958305831583258335834583558365837583858395840584158425843584458455846584758485849585058515852585358545855585658575858585958605861586258635864586558665867586858695870587158725873587458755876587758785879588058815882588358845885588658875888588958905891589258935894589558965897589858995900590159025903590459055906590759085909591059115912591359145915591659175918591959205921592259235924592559265927592859295930593159325933593459355936593759385939594059415942594359445945594659475948594959505951595259535954595559565957595859595960596159625963596459655966596759685969597059715972597359745975597659775978597959805981598259835984598559865987598859895990599159925993599459955996599759985999600060016002600360046005600660076008600960106011601260136014601560166017601860196020602160226023602460256026602760286029603060316032603360346035603660376038603960406041604260436044604560466047604860496050605160526053605460556056605760586059606060616062606360646065606660676068606960706071607260736074607560766077607860796080608160826083608460856086608760886089609060916092609360946095609660976098609961006101610261036104610561066107610861096110611161126113611461156116611761186119612061216122612361246125612661276128612961306131613261336134613561366137613861396140614161426143614461456146614761486149615061516152615361546155615661576158615961606161616261636164616561666167616861696170617161726173617461756176617761786179618061816182618361846185618661876188618961906191619261936194619561966197619861996200620162026203620462056206620762086209621062116212621362146215621662176218621962206221622262236224622562266227622862296230623162326233623462356236623762386239624062416242624362446245624662476248624962506251625262536254625562566257625862596260626162626263626462656266626762686269627062716272627362746275627662776278627962806281628262836284628562866287628862896290629162926293629462956296629762986299630063016302630363046305630663076308630963106311631263136314631563166317631863196320632163226323632463256326632763286329633063316332633363346335633663376338633963406341634263436344634563466347634863496350635163526353635463556356635763586359636063616362636363646365636663676368636963706371637263736374637563766377637863796380638163826383638463856386638763886389639063916392639363946395639663976398639964006401640264036404640564066407640864096410641164126413641464156416641764186419642064216422642364246425642664276428642964306431643264336434643564366437643864396440644164426443644464456446644764486449645064516452645364546455645664576458645964606461646264636464646564666467646864696470647164726473647464756476647764786479648064816482648364846485648664876488648964906491649264936494649564966497649864996500650165026503650465056506650765086509651065116512651365146515651665176518651965206521652265236524652565266527652865296530653165326533653465356536653765386539654065416542654365446545654665476548654965506551655265536554655565566557655865596560656165626563656465656566656765686569657065716572657365746575657665776578657965806581658265836584658565866587658865896590659165926593659465956596659765986599660066016602660366046605660666076608660966106611661266136614661566166617661866196620662166226623662466256626662766286629663066316632663366346635663666376638663966406641664266436644664566466647664866496650665166526653665466556656665766586659666066616662666366646665666666676668666966706671667266736674667566766677667866796680668166826683668466856686668766886689669066916692669366946695669666976698669967006701670267036704670567066707670867096710671167126713671467156716671767186719672067216722672367246725672667276728672967306731673267336734673567366737673867396740674167426743674467456746674767486749675067516752675367546755675667576758675967606761676267636764676567666767676867696770677167726773677467756776677767786779678067816782678367846785678667876788678967906791679267936794679567966797679867996800680168026803680468056806680768086809681068116812681368146815681668176818681968206821682268236824682568266827682868296830683168326833683468356836683768386839684068416842684368446845684668476848684968506851685268536854685568566857685868596860686168626863686468656866686768686869687068716872687368746875687668776878687968806881688268836884688568866887688868896890689168926893689468956896689768986899690069016902690369046905690669076908690969106911691269136914691569166917691869196920692169226923692469256926692769286929693069316932693369346935693669376938693969406941694269436944694569466947694869496950695169526953695469556956695769586959696069616962696369646965696669676968696969706971697269736974697569766977697869796980698169826983698469856986698769886989699069916992699369946995699669976998699970007001700270037004700570067007700870097010701170127013701470157016701770187019702070217022702370247025702670277028702970307031703270337034703570367037703870397040704170427043704470457046704770487049705070517052705370547055705670577058705970607061706270637064706570667067706870697070707170727073707470757076707770787079708070817082708370847085708670877088708970907091709270937094709570967097709870997100710171027103710471057106710771087109711071117112711371147115711671177118711971207121712271237124712571267127712871297130713171327133713471357136713771387139714071417142714371447145714671477148714971507151715271537154715571567157715871597160716171627163716471657166716771687169717071717172717371747175717671777178717971807181718271837184718571867187718871897190719171927193719471957196719771987199720072017202720372047205720672077208720972107211721272137214721572167217721872197220722172227223722472257226722772287229723072317232723372347235723672377238723972407241724272437244724572467247724872497250725172527253725472557256725772587259726072617262726372647265726672677268726972707271727272737274727572767277727872797280728172827283728472857286728772887289729072917292729372947295729672977298729973007301730273037304730573067307730873097310731173127313731473157316731773187319732073217322732373247325732673277328732973307331733273337334733573367337733873397340734173427343734473457346734773487349735073517352735373547355735673577358735973607361736273637364736573667367736873697370737173727373737473757376737773787379738073817382738373847385738673877388738973907391739273937394739573967397739873997400740174027403740474057406740774087409741074117412741374147415741674177418741974207421742274237424742574267427742874297430743174327433743474357436743774387439744074417442744374447445744674477448744974507451745274537454745574567457745874597460746174627463746474657466746774687469747074717472747374747475747674777478747974807481748274837484748574867487748874897490749174927493749474957496749774987499750075017502750375047505750675077508750975107511751275137514751575167517751875197520752175227523752475257526752775287529753075317532753375347535753675377538753975407541754275437544754575467547754875497550755175527553755475557556755775587559756075617562756375647565756675677568756975707571757275737574757575767577757875797580758175827583758475857586758775887589759075917592759375947595759675977598759976007601760276037604760576067607760876097610761176127613761476157616761776187619762076217622762376247625762676277628762976307631763276337634763576367637763876397640764176427643764476457646764776487649765076517652765376547655765676577658765976607661766276637664766576667667766876697670767176727673767476757676767776787679768076817682768376847685768676877688768976907691769276937694769576967697769876997700770177027703770477057706770777087709771077117712771377147715771677177718771977207721772277237724772577267727772877297730773177327733773477357736773777387739774077417742774377447745774677477748774977507751775277537754775577567757775877597760776177627763776477657766776777687769777077717772777377747775777677777778777977807781778277837784778577867787778877897790779177927793779477957796779777987799780078017802780378047805780678077808780978107811781278137814781578167817781878197820782178227823782478257826782778287829783078317832783378347835783678377838783978407841784278437844784578467847784878497850785178527853785478557856785778587859786078617862786378647865786678677868786978707871787278737874787578767877787878797880788178827883788478857886788778887889789078917892789378947895789678977898789979007901790279037904790579067907790879097910791179127913791479157916791779187919792079217922792379247925792679277928792979307931793279337934793579367937793879397940794179427943794479457946794779487949795079517952795379547955795679577958795979607961796279637964796579667967796879697970797179727973797479757976797779787979798079817982798379847985798679877988798979907991799279937994799579967997799879998000800180028003800480058006800780088009801080118012801380148015801680178018801980208021802280238024802580268027802880298030803180328033803480358036803780388039804080418042804380448045804680478048804980508051805280538054805580568057805880598060806180628063806480658066806780688069807080718072807380748075807680778078807980808081808280838084808580868087808880898090809180928093809480958096809780988099810081018102810381048105810681078108810981108111811281138114811581168117811881198120812181228123812481258126812781288129813081318132813381348135813681378138813981408141814281438144814581468147814881498150815181528153815481558156815781588159816081618162816381648165816681678168816981708171817281738174817581768177817881798180818181828183818481858186818781888189819081918192819381948195819681978198819982008201820282038204820582068207820882098210821182128213821482158216821782188219822082218222822382248225822682278228822982308231823282338234823582368237823882398240824182428243824482458246824782488249825082518252825382548255825682578258825982608261826282638264826582668267826882698270827182728273827482758276827782788279828082818282828382848285828682878288828982908291829282938294829582968297829882998300830183028303830483058306830783088309831083118312831383148315831683178318831983208321832283238324832583268327832883298330833183328333833483358336833783388339834083418342834383448345834683478348834983508351835283538354835583568357835883598360836183628363836483658366836783688369837083718372837383748375837683778378837983808381838283838384838583868387838883898390839183928393839483958396839783988399840084018402840384048405840684078408840984108411841284138414841584168417841884198420842184228423842484258426842784288429843084318432843384348435843684378438843984408441844284438444844584468447844884498450845184528453845484558456845784588459846084618462846384648465846684678468846984708471847284738474847584768477847884798480848184828483848484858486848784888489849084918492849384948495849684978498849985008501850285038504850585068507850885098510851185128513851485158516851785188519852085218522852385248525852685278528852985308531853285338534853585368537853885398540854185428543854485458546854785488549855085518552855385548555855685578558855985608561856285638564856585668567856885698570857185728573857485758576857785788579858085818582858385848585858685878588858985908591859285938594859585968597859885998600860186028603860486058606860786088609861086118612861386148615861686178618861986208621862286238624862586268627862886298630863186328633863486358636863786388639864086418642864386448645864686478648864986508651865286538654865586568657865886598660866186628663866486658666866786688669867086718672867386748675867686778678867986808681868286838684868586868687868886898690869186928693869486958696869786988699870087018702870387048705870687078708870987108711871287138714871587168717871887198720872187228723872487258726872787288729873087318732873387348735873687378738873987408741874287438744874587468747874887498750875187528753875487558756875787588759876087618762876387648765876687678768876987708771877287738774877587768777877887798780878187828783878487858786878787888789879087918792879387948795879687978798879988008801880288038804880588068807880888098810881188128813881488158816881788188819882088218822882388248825882688278828882988308831883288338834883588368837883888398840884188428843884488458846884788488849885088518852885388548855885688578858885988608861886288638864886588668867886888698870887188728873887488758876887788788879888088818882888388848885888688878888888988908891889288938894889588968897889888998900890189028903890489058906890789088909891089118912891389148915891689178918891989208921892289238924892589268927892889298930893189328933893489358936893789388939894089418942894389448945894689478948894989508951895289538954895589568957895889598960896189628963896489658966896789688969897089718972897389748975897689778978897989808981898289838984898589868987898889898990899189928993899489958996899789988999900090019002900390049005900690079008900990109011901290139014901590169017901890199020902190229023902490259026902790289029903090319032903390349035903690379038903990409041904290439044904590469047904890499050905190529053905490559056905790589059906090619062906390649065906690679068906990709071907290739074907590769077907890799080908190829083908490859086908790889089909090919092909390949095909690979098909991009101910291039104910591069107910891099110911191129113911491159116911791189119912091219122912391249125912691279128912991309131913291339134913591369137913891399140914191429143914491459146914791489149915091519152915391549155915691579158915991609161916291639164916591669167916891699170917191729173917491759176917791789179918091819182918391849185918691879188918991909191919291939194919591969197919891999200920192029203920492059206920792089209921092119212921392149215921692179218921992209221922292239224922592269227922892299230923192329233923492359236923792389239924092419242924392449245924692479248924992509251925292539254925592569257925892599260926192629263926492659266926792689269927092719272927392749275927692779278927992809281928292839284928592869287928892899290929192929293929492959296929792989299930093019302930393049305930693079308930993109311931293139314931593169317931893199320932193229323932493259326932793289329933093319332933393349335933693379338933993409341934293439344934593469347934893499350935193529353935493559356935793589359936093619362936393649365936693679368936993709371937293739374937593769377937893799380938193829383938493859386938793889389939093919392939393949395939693979398939994009401940294039404940594069407940894099410941194129413941494159416941794189419942094219422942394249425942694279428942994309431943294339434943594369437943894399440944194429443944494459446944794489449945094519452945394549455945694579458945994609461946294639464946594669467946894699470947194729473947494759476947794789479948094819482948394849485948694879488948994909491949294939494949594969497949894999500950195029503950495059506950795089509951095119512951395149515951695179518951995209521952295239524952595269527952895299530953195329533953495359536953795389539954095419542954395449545954695479548954995509551955295539554955595569557955895599560956195629563956495659566956795689569957095719572957395749575957695779578957995809581958295839584958595869587958895899590959195929593959495959596959795989599960096019602960396049605960696079608960996109611961296139614961596169617961896199620962196229623962496259626962796289629963096319632963396349635963696379638963996409641964296439644964596469647964896499650965196529653965496559656965796589659966096619662966396649665966696679668966996709671967296739674967596769677967896799680968196829683968496859686968796889689969096919692969396949695969696979698969997009701970297039704970597069707970897099710971197129713971497159716971797189719972097219722972397249725972697279728972997309731973297339734973597369737973897399740974197429743974497459746974797489749975097519752975397549755975697579758975997609761976297639764976597669767976897699770977197729773977497759776977797789779978097819782978397849785978697879788978997909791979297939794979597969797979897999800980198029803980498059806980798089809981098119812981398149815981698179818981998209821982298239824982598269827982898299830983198329833983498359836983798389839984098419842984398449845984698479848984998509851985298539854985598569857985898599860986198629863986498659866986798689869987098719872987398749875987698779878987998809881988298839884988598869887988898899890989198929893989498959896989798989899990099019902990399049905990699079908990999109911991299139914991599169917991899199920992199229923992499259926992799289929993099319932993399349935993699379938993999409941994299439944994599469947994899499950995199529953995499559956995799589959996099619962996399649965996699679968996999709971997299739974997599769977997899799980998199829983998499859986998799889989999099919992999399949995999699979998999910000100011000210003100041000510006100071000810009100101001110012100131001410015100161001710018100191002010021100221002310024100251002610027100281002910030100311003210033100341003510036100371003810039100401004110042100431004410045100461004710048100491005010051100521005310054100551005610057100581005910060100611006210063100641006510066100671006810069100701007110072100731007410075100761007710078100791008010081100821008310084100851008610087100881008910090100911009210093100941009510096100971009810099101001010110102101031010410105101061010710108101091011010111101121011310114101151011610117101181011910120101211012210123101241012510126101271012810129101301013110132101331013410135101361013710138101391014010141101421014310144101451014610147101481014910150101511015210153101541015510156101571015810159101601016110162101631016410165101661016710168101691017010171101721017310174101751017610177101781017910180101811018210183101841018510186101871018810189101901019110192101931019410195101961019710198101991020010201102021020310204102051020610207102081020910210102111021210213102141021510216102171021810219102201022110222102231022410225102261022710228102291023010231102321023310234102351023610237102381023910240102411024210243102441024510246102471024810249102501025110252102531025410255102561025710258102591026010261102621026310264102651026610267102681026910270102711027210273102741027510276102771027810279102801028110282102831028410285102861028710288102891029010291102921029310294102951029610297102981029910300103011030210303103041030510306103071030810309103101031110312103131031410315103161031710318103191032010321103221032310324103251032610327103281032910330103311033210333103341033510336103371033810339103401034110342103431034410345103461034710348103491035010351103521035310354103551035610357103581035910360103611036210363103641036510366103671036810369103701037110372103731037410375103761037710378103791038010381103821038310384103851038610387103881038910390103911039210393103941039510396103971039810399104001040110402104031040410405104061040710408104091041010411104121041310414104151041610417104181041910420104211042210423104241042510426104271042810429104301043110432104331043410435104361043710438104391044010441104421044310444104451044610447104481044910450104511045210453104541045510456104571045810459104601046110462104631046410465104661046710468104691047010471104721047310474104751047610477104781047910480104811048210483104841048510486104871048810489104901049110492104931049410495104961049710498104991050010501105021050310504105051050610507105081050910510105111051210513105141051510516105171051810519105201052110522105231052410525105261052710528105291053010531105321053310534105351053610537105381053910540105411054210543105441054510546105471054810549105501055110552105531055410555105561055710558105591056010561105621056310564105651056610567105681056910570105711057210573105741057510576105771057810579105801058110582105831058410585105861058710588105891059010591105921059310594105951059610597105981059910600106011060210603106041060510606106071060810609106101061110612106131061410615106161061710618106191062010621106221062310624106251062610627106281062910630106311063210633106341063510636106371063810639106401064110642106431064410645106461064710648106491065010651106521065310654106551065610657106581065910660106611066210663106641066510666106671066810669106701067110672106731067410675106761067710678106791068010681106821068310684106851068610687106881068910690106911069210693106941069510696106971069810699107001070110702107031070410705107061070710708107091071010711107121071310714107151071610717107181071910720107211072210723107241072510726107271072810729107301073110732107331073410735107361073710738107391074010741107421074310744107451074610747107481074910750107511075210753107541075510756107571075810759107601076110762107631076410765107661076710768107691077010771107721077310774107751077610777107781077910780107811078210783107841078510786107871078810789107901079110792107931079410795107961079710798107991080010801108021080310804108051080610807108081080910810108111081210813108141081510816108171081810819108201082110822108231082410825108261082710828108291083010831108321083310834108351083610837108381083910840108411084210843108441084510846108471084810849108501085110852108531085410855108561085710858108591086010861108621086310864108651086610867108681086910870108711087210873108741087510876108771087810879108801088110882108831088410885108861088710888108891089010891108921089310894108951089610897108981089910900109011090210903109041090510906109071090810909109101091110912109131091410915109161091710918109191092010921109221092310924109251092610927109281092910930109311093210933109341093510936109371093810939109401094110942109431094410945109461094710948109491095010951109521095310954109551095610957109581095910960109611096210963109641096510966109671096810969109701097110972109731097410975109761097710978109791098010981109821098310984109851098610987109881098910990109911099210993109941099510996109971099810999110001100111002110031100411005110061100711008110091101011011110121101311014110151101611017110181101911020110211102211023110241102511026110271102811029110301103111032110331103411035110361103711038110391104011041110421104311044110451104611047110481104911050110511105211053110541105511056110571105811059110601106111062110631106411065110661106711068110691107011071110721107311074110751107611077110781107911080110811108211083110841108511086110871108811089110901109111092110931109411095110961109711098110991110011101111021110311104111051110611107111081110911110111111111211113111141111511116111171111811119111201112111122111231112411125111261112711128111291113011131111321113311134111351113611137111381113911140111411114211143111441114511146111471114811149111501115111152111531115411155111561115711158111591116011161111621116311164111651116611167111681116911170111711117211173111741117511176111771117811179111801118111182111831118411185111861118711188111891119011191111921119311194111951119611197111981119911200112011120211203112041120511206112071120811209112101121111212112131121411215112161121711218112191122011221112221122311224112251122611227112281122911230112311123211233112341123511236112371123811239112401124111242112431124411245112461124711248112491125011251112521125311254112551125611257112581125911260112611126211263112641126511266112671126811269112701127111272112731127411275112761127711278112791128011281112821128311284112851128611287112881128911290112911129211293112941129511296112971129811299113001130111302113031130411305113061130711308113091131011311113121131311314113151131611317113181131911320113211132211323113241132511326113271132811329113301133111332113331133411335113361133711338113391134011341113421134311344113451134611347113481134911350113511135211353113541135511356113571135811359113601136111362113631136411365113661136711368113691137011371113721137311374113751137611377113781137911380113811138211383113841138511386113871138811389113901139111392113931139411395113961139711398113991140011401114021140311404114051140611407114081140911410114111141211413114141141511416114171141811419114201142111422114231142411425114261142711428114291143011431114321143311434114351143611437114381143911440114411144211443114441144511446114471144811449114501145111452114531145411455114561145711458114591146011461114621146311464114651146611467114681146911470114711147211473114741147511476114771147811479114801148111482114831148411485114861148711488114891149011491114921149311494114951149611497114981149911500115011150211503115041150511506115071150811509115101151111512115131151411515115161151711518115191152011521115221152311524115251152611527115281152911530115311153211533115341153511536115371153811539115401154111542115431154411545115461154711548115491155011551115521155311554115551155611557115581155911560115611156211563115641156511566115671156811569115701157111572115731157411575115761157711578115791158011581115821158311584115851158611587115881158911590115911159211593115941159511596115971159811599116001160111602116031160411605116061160711608116091161011611116121161311614116151161611617116181161911620116211162211623116241162511626116271162811629116301163111632116331163411635116361163711638116391164011641116421164311644116451164611647116481164911650116511165211653116541165511656116571165811659116601166111662116631166411665116661166711668116691167011671116721167311674116751167611677116781167911680116811168211683116841168511686116871168811689116901169111692116931169411695116961169711698116991170011701117021170311704117051170611707117081170911710117111171211713117141171511716117171171811719117201172111722117231172411725117261172711728117291173011731117321173311734117351173611737117381173911740117411174211743117441174511746117471174811749117501175111752117531175411755117561175711758117591176011761117621176311764117651176611767117681176911770117711177211773117741177511776117771177811779117801178111782117831178411785117861178711788117891179011791117921179311794117951179611797117981179911800118011180211803118041180511806118071180811809118101181111812118131181411815118161181711818118191182011821118221182311824118251182611827118281182911830118311183211833118341183511836118371183811839118401184111842118431184411845118461184711848118491185011851118521185311854118551185611857118581185911860118611186211863118641186511866118671186811869118701187111872118731187411875118761187711878118791188011881118821188311884118851188611887118881188911890118911189211893118941189511896118971189811899119001190111902119031190411905119061190711908119091191011911119121191311914119151191611917119181191911920119211192211923119241192511926119271192811929119301193111932119331193411935119361193711938119391194011941119421194311944119451194611947119481194911950119511195211953119541195511956119571195811959119601196111962119631196411965119661196711968119691197011971119721197311974119751197611977119781197911980119811198211983119841198511986119871198811989119901199111992119931199411995119961199711998119991200012001120021200312004120051200612007120081200912010120111201212013120141201512016120171201812019120201202112022120231202412025120261202712028120291203012031120321203312034120351203612037120381203912040120411204212043120441204512046120471204812049120501205112052120531205412055120561205712058120591206012061120621206312064120651206612067120681206912070120711207212073120741207512076120771207812079120801208112082120831208412085120861208712088120891209012091120921209312094120951209612097120981209912100121011210212103121041210512106121071210812109121101211112112121131211412115121161211712118121191212012121121221212312124121251212612127121281212912130121311213212133121341213512136121371213812139121401214112142121431214412145121461214712148121491215012151121521215312154121551215612157121581215912160121611216212163121641216512166121671216812169121701217112172121731217412175121761217712178121791218012181121821218312184121851218612187121881218912190121911219212193121941219512196121971219812199122001220112202122031220412205122061220712208122091221012211122121221312214122151221612217122181221912220122211222212223122241222512226122271222812229122301223112232122331223412235122361223712238122391224012241122421224312244122451224612247122481224912250122511225212253122541225512256122571225812259122601226112262122631226412265122661226712268122691227012271122721227312274122751227612277122781227912280122811228212283122841228512286122871228812289122901229112292122931229412295122961229712298122991230012301123021230312304123051230612307123081230912310123111231212313123141231512316123171231812319123201232112322123231232412325123261232712328123291233012331123321233312334123351233612337123381233912340123411234212343123441234512346123471234812349123501235112352123531235412355123561235712358123591236012361123621236312364123651236612367123681236912370123711237212373123741237512376123771237812379123801238112382123831238412385123861238712388123891239012391123921239312394123951239612397123981239912400124011240212403124041240512406124071240812409124101241112412124131241412415124161241712418124191242012421124221242312424124251242612427124281242912430124311243212433124341243512436124371243812439124401244112442124431244412445124461244712448124491245012451124521245312454124551245612457124581245912460124611246212463124641246512466124671246812469124701247112472124731247412475124761247712478124791248012481124821248312484124851248612487124881248912490124911249212493124941249512496124971249812499125001250112502125031250412505125061250712508125091251012511125121251312514125151251612517125181251912520125211252212523125241252512526125271252812529125301253112532125331253412535125361253712538125391254012541125421254312544125451254612547125481254912550125511255212553125541255512556125571255812559125601256112562125631256412565125661256712568125691257012571125721257312574125751257612577125781257912580125811258212583125841258512586125871258812589125901259112592125931259412595125961259712598125991260012601126021260312604126051260612607126081260912610126111261212613126141261512616126171261812619126201262112622126231262412625126261262712628126291263012631126321263312634126351263612637126381263912640126411264212643126441264512646126471264812649126501265112652126531265412655126561265712658126591266012661126621266312664126651266612667126681266912670126711267212673126741267512676126771267812679126801268112682126831268412685126861268712688126891269012691126921269312694126951269612697126981269912700127011270212703127041270512706127071270812709127101271112712127131271412715127161271712718127191272012721127221272312724127251272612727127281272912730127311273212733127341273512736127371273812739127401274112742127431274412745127461274712748127491275012751127521275312754127551275612757127581275912760127611276212763127641276512766127671276812769127701277112772127731277412775127761277712778127791278012781127821278312784127851278612787127881278912790127911279212793127941279512796127971279812799128001280112802128031280412805128061280712808128091281012811128121281312814128151281612817128181281912820128211282212823128241282512826128271282812829128301283112832128331283412835128361283712838128391284012841128421284312844128451284612847128481284912850128511285212853128541285512856128571285812859128601286112862128631286412865128661286712868128691287012871128721287312874128751287612877128781287912880128811288212883128841288512886128871288812889128901289112892128931289412895128961289712898128991290012901129021290312904129051290612907129081290912910129111291212913129141291512916129171291812919129201292112922129231292412925129261292712928129291293012931129321293312934129351293612937129381293912940129411294212943129441294512946129471294812949129501295112952129531295412955129561295712958129591296012961129621296312964129651296612967129681296912970129711297212973129741297512976129771297812979129801298112982129831298412985129861298712988129891299012991129921299312994129951299612997129981299913000130011300213003130041300513006130071300813009130101301113012130131301413015130161301713018130191302013021130221302313024130251302613027130281302913030130311303213033130341303513036130371303813039130401304113042130431304413045130461304713048130491305013051130521305313054130551305613057130581305913060130611306213063130641306513066130671306813069130701307113072130731307413075130761307713078130791308013081130821308313084130851308613087130881308913090130911309213093130941309513096130971309813099131001310113102131031310413105131061310713108131091311013111131121311313114131151311613117131181311913120131211312213123131241312513126131271312813129131301313113132131331313413135131361313713138131391314013141131421314313144131451314613147131481314913150131511315213153131541315513156131571315813159131601316113162131631316413165131661316713168131691317013171131721317313174131751317613177131781317913180131811318213183131841318513186131871318813189131901319113192131931319413195131961319713198131991320013201132021320313204132051320613207132081320913210132111321213213132141321513216132171321813219132201322113222132231322413225132261322713228132291323013231132321323313234132351323613237132381323913240132411324213243132441324513246132471324813249132501325113252132531325413255132561325713258132591326013261132621326313264132651326613267132681326913270132711327213273132741327513276132771327813279132801328113282132831328413285132861328713288132891329013291132921329313294132951329613297132981329913300133011330213303133041330513306133071330813309133101331113312133131331413315133161331713318133191332013321133221332313324133251332613327133281332913330133311333213333133341333513336133371333813339133401334113342133431334413345133461334713348133491335013351133521335313354133551335613357133581335913360133611336213363133641336513366133671336813369133701337113372133731337413375133761337713378133791338013381133821338313384133851338613387133881338913390133911339213393133941339513396133971339813399134001340113402134031340413405134061340713408134091341013411134121341313414134151341613417134181341913420134211342213423134241342513426134271342813429134301343113432134331343413435134361343713438134391344013441134421344313444134451344613447134481344913450134511345213453134541345513456134571345813459134601346113462134631346413465134661346713468134691347013471134721347313474134751347613477134781347913480134811348213483134841348513486134871348813489134901349113492134931349413495134961349713498134991350013501135021350313504135051350613507135081350913510135111351213513135141351513516135171351813519135201352113522135231352413525135261352713528135291353013531135321353313534135351353613537135381353913540135411354213543135441354513546135471354813549135501355113552135531355413555135561355713558135591356013561135621356313564135651356613567135681356913570135711357213573135741357513576135771357813579135801358113582135831358413585135861358713588135891359013591135921359313594135951359613597135981359913600136011360213603136041360513606136071360813609136101361113612136131361413615136161361713618136191362013621136221362313624136251362613627136281362913630136311363213633136341363513636136371363813639136401364113642136431364413645136461364713648136491365013651136521365313654136551365613657136581365913660136611366213663136641366513666136671366813669136701367113672136731367413675136761367713678136791368013681136821368313684136851368613687136881368913690136911369213693136941369513696136971369813699137001370113702137031370413705137061370713708137091371013711137121371313714137151371613717137181371913720137211372213723137241372513726137271372813729137301373113732137331373413735137361373713738137391374013741137421374313744137451374613747137481374913750137511375213753137541375513756137571375813759137601376113762137631376413765137661376713768137691377013771137721377313774137751377613777137781377913780137811378213783137841378513786137871378813789137901379113792137931379413795137961379713798137991380013801138021380313804138051380613807138081380913810138111381213813138141381513816138171381813819138201382113822138231382413825138261382713828138291383013831138321383313834138351383613837138381383913840138411384213843138441384513846138471384813849138501385113852138531385413855138561385713858138591386013861138621386313864138651386613867138681386913870138711387213873138741387513876138771387813879138801388113882138831388413885138861388713888138891389013891138921389313894138951389613897138981389913900139011390213903139041390513906139071390813909139101391113912139131391413915139161391713918139191392013921139221392313924139251392613927139281392913930139311393213933139341393513936139371393813939139401394113942139431394413945139461394713948139491395013951139521395313954139551395613957139581395913960139611396213963139641396513966139671396813969139701397113972139731397413975139761397713978139791398013981139821398313984139851398613987139881398913990139911399213993139941399513996139971399813999140001400114002140031400414005140061400714008140091401014011140121401314014140151401614017140181401914020140211402214023140241402514026140271402814029140301403114032140331403414035140361403714038140391404014041140421404314044140451404614047140481404914050140511405214053140541405514056140571405814059140601406114062140631406414065140661406714068140691407014071140721407314074140751407614077140781407914080140811408214083140841408514086140871408814089140901409114092140931409414095140961409714098140991410014101141021410314104141051410614107141081410914110141111411214113141141411514116141171411814119141201412114122141231412414125141261412714128141291413014131141321413314134141351413614137141381413914140141411414214143141441414514146141471414814149141501415114152141531415414155141561415714158141591416014161141621416314164141651416614167141681416914170141711417214173141741417514176141771417814179141801418114182141831418414185141861418714188141891419014191141921419314194141951419614197141981419914200142011420214203142041420514206142071420814209142101421114212142131421414215142161421714218142191422014221142221422314224142251422614227142281422914230142311423214233142341423514236142371423814239142401424114242142431424414245142461424714248142491425014251142521425314254142551425614257142581425914260142611426214263142641426514266142671426814269142701427114272142731427414275142761427714278142791428014281142821428314284142851428614287142881428914290142911429214293142941429514296142971429814299143001430114302143031430414305143061430714308143091431014311143121431314314143151431614317143181431914320143211432214323143241432514326143271432814329143301433114332143331433414335143361433714338143391434014341143421434314344143451434614347143481434914350143511435214353143541435514356143571435814359143601436114362143631436414365143661436714368143691437014371143721437314374143751437614377143781437914380143811438214383143841438514386143871438814389143901439114392143931439414395143961439714398143991440014401144021440314404144051440614407144081440914410144111441214413144141441514416144171441814419144201442114422144231442414425144261442714428144291443014431144321443314434144351443614437144381443914440144411444214443144441444514446144471444814449144501445114452144531445414455144561445714458144591446014461144621446314464144651446614467144681446914470144711447214473144741447514476144771447814479144801448114482144831448414485144861448714488144891449014491144921449314494144951449614497144981449914500145011450214503145041450514506145071450814509145101451114512145131451414515145161451714518145191452014521145221452314524145251452614527145281452914530145311453214533145341453514536145371453814539145401454114542145431454414545145461454714548145491455014551145521455314554145551455614557145581455914560145611456214563145641456514566145671456814569145701457114572145731457414575145761457714578145791458014581145821458314584145851458614587145881458914590145911459214593145941459514596145971459814599146001460114602146031460414605146061460714608146091461014611146121461314614146151461614617146181461914620146211462214623146241462514626146271462814629146301463114632146331463414635146361463714638146391464014641146421464314644146451464614647146481464914650146511465214653146541465514656146571465814659146601466114662146631466414665146661466714668146691467014671146721467314674146751467614677146781467914680146811468214683146841468514686146871468814689146901469114692146931469414695146961469714698146991470014701147021470314704147051470614707147081470914710147111471214713147141471514716147171471814719147201472114722147231472414725147261472714728147291473014731147321473314734147351473614737147381473914740147411474214743147441474514746147471474814749147501475114752147531475414755147561475714758147591476014761147621476314764147651476614767147681476914770147711477214773147741477514776147771477814779147801478114782147831478414785147861478714788147891479014791147921479314794147951479614797147981479914800148011480214803148041480514806148071480814809148101481114812148131481414815148161481714818148191482014821148221482314824148251482614827148281482914830148311483214833148341483514836148371483814839148401484114842148431484414845148461484714848148491485014851148521485314854148551485614857148581485914860148611486214863148641486514866148671486814869148701487114872148731487414875148761487714878148791488014881148821488314884148851488614887148881488914890148911489214893148941489514896148971489814899149001490114902149031490414905149061490714908149091491014911149121491314914149151491614917149181491914920149211492214923149241492514926149271492814929149301493114932149331493414935149361493714938149391494014941149421494314944149451494614947149481494914950149511495214953149541495514956149571495814959149601496114962149631496414965149661496714968149691497014971149721497314974149751497614977149781497914980149811498214983149841498514986149871498814989149901499114992149931499414995149961499714998149991500015001150021500315004150051500615007150081500915010150111501215013150141501515016150171501815019150201502115022150231502415025150261502715028150291503015031150321503315034150351503615037150381503915040150411504215043150441504515046150471504815049150501505115052150531505415055150561505715058150591506015061150621506315064150651506615067150681506915070150711507215073150741507515076150771507815079150801508115082150831508415085150861508715088150891509015091150921509315094150951509615097150981509915100151011510215103151041510515106151071510815109151101511115112151131511415115151161511715118151191512015121151221512315124151251512615127151281512915130151311513215133151341513515136151371513815139151401514115142151431514415145151461514715148151491515015151151521515315154151551515615157151581515915160151611516215163151641516515166151671516815169151701517115172151731517415175151761517715178151791518015181151821518315184151851518615187151881518915190151911519215193151941519515196151971519815199152001520115202152031520415205152061520715208152091521015211152121521315214152151521615217152181521915220152211522215223152241522515226152271522815229152301523115232152331523415235152361523715238152391524015241152421524315244152451524615247152481524915250152511525215253152541525515256152571525815259152601526115262152631526415265152661526715268152691527015271152721527315274152751527615277152781527915280152811528215283152841528515286152871528815289152901529115292152931529415295152961529715298152991530015301153021530315304153051530615307153081530915310153111531215313153141531515316153171531815319153201532115322153231532415325153261532715328153291533015331153321533315334153351533615337153381533915340153411534215343153441534515346153471534815349153501535115352153531535415355153561535715358153591536015361153621536315364153651536615367153681536915370153711537215373153741537515376153771537815379153801538115382153831538415385153861538715388153891539015391153921539315394153951539615397153981539915400154011540215403154041540515406154071540815409154101541115412154131541415415154161541715418154191542015421154221542315424154251542615427154281542915430154311543215433154341543515436154371543815439154401544115442154431544415445154461544715448154491545015451154521545315454154551545615457154581545915460154611546215463154641546515466154671546815469154701547115472154731547415475154761547715478154791548015481154821548315484154851548615487154881548915490154911549215493154941549515496154971549815499155001550115502155031550415505155061550715508155091551015511155121551315514155151551615517155181551915520155211552215523155241552515526155271552815529155301553115532155331553415535155361553715538155391554015541155421554315544155451554615547155481554915550155511555215553155541555515556155571555815559155601556115562155631556415565155661556715568155691557015571155721557315574155751557615577155781557915580155811558215583155841558515586155871558815589155901559115592155931559415595155961559715598155991560015601156021560315604156051560615607156081560915610156111561215613156141561515616156171561815619156201562115622156231562415625156261562715628156291563015631156321563315634156351563615637156381563915640156411564215643156441564515646156471564815649156501565115652156531565415655156561565715658156591566015661156621566315664156651566615667156681566915670156711567215673156741567515676156771567815679156801568115682156831568415685156861568715688156891569015691156921569315694156951569615697156981569915700157011570215703157041570515706157071570815709157101571115712157131571415715157161571715718157191572015721157221572315724157251572615727157281572915730157311573215733157341573515736157371573815739157401574115742157431574415745157461574715748157491575015751157521575315754157551575615757157581575915760157611576215763157641576515766157671576815769157701577115772157731577415775157761577715778157791578015781157821578315784157851578615787157881578915790157911579215793157941579515796157971579815799158001580115802158031580415805158061580715808158091581015811158121581315814158151581615817158181581915820158211582215823158241582515826158271582815829158301583115832158331583415835158361583715838158391584015841158421584315844158451584615847158481584915850158511585215853158541585515856158571585815859158601586115862158631586415865158661586715868158691587015871158721587315874158751587615877158781587915880158811588215883158841588515886158871588815889158901589115892158931589415895158961589715898158991590015901159021590315904159051590615907159081590915910159111591215913159141591515916159171591815919159201592115922159231592415925159261592715928159291593015931159321593315934159351593615937159381593915940159411594215943159441594515946159471594815949159501595115952159531595415955159561595715958159591596015961159621596315964159651596615967159681596915970159711597215973159741597515976159771597815979159801598115982159831598415985159861598715988159891599015991159921599315994159951599615997159981599916000160011600216003160041600516006160071600816009160101601116012160131601416015160161601716018160191602016021160221602316024160251602616027160281602916030160311603216033160341603516036160371603816039160401604116042160431604416045160461604716048160491605016051160521605316054160551605616057160581605916060160611606216063160641606516066160671606816069160701607116072160731607416075160761607716078160791608016081160821608316084160851608616087160881608916090160911609216093160941609516096160971609816099161001610116102161031610416105161061610716108161091611016111161121611316114161151611616117161181611916120161211612216123161241612516126161271612816129161301613116132161331613416135161361613716138161391614016141161421614316144161451614616147161481614916150161511615216153161541615516156161571615816159161601616116162161631616416165161661616716168161691617016171161721617316174161751617616177161781617916180161811618216183161841618516186161871618816189161901619116192161931619416195161961619716198161991620016201162021620316204162051620616207162081620916210162111621216213162141621516216162171621816219162201622116222162231622416225162261622716228162291623016231162321623316234162351623616237162381623916240162411624216243162441624516246162471624816249162501625116252162531625416255162561625716258162591626016261162621626316264162651626616267162681626916270162711627216273162741627516276162771627816279162801628116282162831628416285162861628716288162891629016291162921629316294162951629616297162981629916300163011630216303163041630516306163071630816309163101631116312163131631416315163161631716318163191632016321163221632316324163251632616327163281632916330163311633216333163341633516336163371633816339163401634116342163431634416345163461634716348163491635016351163521635316354163551635616357163581635916360163611636216363163641636516366163671636816369163701637116372163731637416375163761637716378163791638016381163821638316384163851638616387163881638916390163911639216393163941639516396163971639816399164001640116402164031640416405164061640716408164091641016411164121641316414164151641616417164181641916420164211642216423164241642516426164271642816429164301643116432164331643416435164361643716438164391644016441164421644316444164451644616447164481644916450164511645216453164541645516456164571645816459164601646116462164631646416465164661646716468164691647016471164721647316474164751647616477164781647916480164811648216483164841648516486164871648816489164901649116492164931649416495164961649716498164991650016501165021650316504165051650616507165081650916510165111651216513165141651516516165171651816519165201652116522165231652416525165261652716528165291653016531165321653316534165351653616537165381653916540165411654216543165441654516546165471654816549165501655116552165531655416555165561655716558165591656016561165621656316564165651656616567165681656916570165711657216573165741657516576165771657816579165801658116582165831658416585165861658716588165891659016591165921659316594165951659616597165981659916600166011660216603166041660516606166071660816609166101661116612166131661416615166161661716618166191662016621166221662316624166251662616627166281662916630166311663216633166341663516636166371663816639166401664116642166431664416645166461664716648166491665016651166521665316654166551665616657166581665916660166611666216663166641666516666166671666816669166701667116672166731667416675166761667716678166791668016681166821668316684166851668616687166881668916690166911669216693166941669516696166971669816699167001670116702167031670416705167061670716708167091671016711167121671316714167151671616717167181671916720167211672216723167241672516726167271672816729167301673116732167331673416735167361673716738167391674016741167421674316744167451674616747167481674916750167511675216753167541675516756167571675816759167601676116762167631676416765167661676716768167691677016771167721677316774167751677616777167781677916780167811678216783167841678516786167871678816789167901679116792167931679416795167961679716798167991680016801168021680316804168051680616807168081680916810168111681216813168141681516816168171681816819168201682116822168231682416825168261682716828168291683016831168321683316834168351683616837168381683916840168411684216843168441684516846168471684816849168501685116852168531685416855168561685716858168591686016861168621686316864168651686616867168681686916870168711687216873168741687516876168771687816879168801688116882168831688416885168861688716888168891689016891168921689316894168951689616897168981689916900169011690216903169041690516906169071690816909169101691116912169131691416915169161691716918169191692016921169221692316924169251692616927169281692916930169311693216933169341693516936169371693816939169401694116942169431694416945169461694716948169491695016951169521695316954169551695616957169581695916960169611696216963169641696516966169671696816969169701697116972169731697416975169761697716978169791698016981169821698316984169851698616987169881698916990169911699216993169941699516996169971699816999170001700117002170031700417005170061700717008170091701017011170121701317014170151701617017170181701917020170211702217023170241702517026170271702817029170301703117032170331703417035170361703717038170391704017041170421704317044170451704617047170481704917050170511705217053170541705517056170571705817059170601706117062170631706417065170661706717068170691707017071170721707317074170751707617077170781707917080170811708217083170841708517086170871708817089170901709117092170931709417095170961709717098170991710017101171021710317104171051710617107171081710917110171111711217113171141711517116171171711817119171201712117122171231712417125171261712717128171291713017131171321713317134171351713617137171381713917140171411714217143171441714517146171471714817149171501715117152171531715417155171561715717158171591716017161171621716317164171651716617167171681716917170171711717217173171741717517176171771717817179171801718117182171831718417185171861718717188171891719017191171921719317194171951719617197171981719917200172011720217203172041720517206172071720817209172101721117212172131721417215172161721717218172191722017221172221722317224172251722617227172281722917230172311723217233172341723517236172371723817239172401724117242172431724417245172461724717248172491725017251172521725317254172551725617257172581725917260172611726217263172641726517266172671726817269172701727117272172731727417275172761727717278172791728017281172821728317284172851728617287172881728917290172911729217293172941729517296172971729817299173001730117302173031730417305173061730717308173091731017311173121731317314173151731617317173181731917320173211732217323173241732517326173271732817329173301733117332173331733417335173361733717338173391734017341173421734317344173451734617347173481734917350173511735217353173541735517356173571735817359173601736117362173631736417365173661736717368173691737017371173721737317374173751737617377173781737917380173811738217383173841738517386173871738817389173901739117392173931739417395173961739717398173991740017401174021740317404174051740617407174081740917410174111741217413174141741517416174171741817419174201742117422174231742417425174261742717428174291743017431174321743317434174351743617437174381743917440174411744217443174441744517446174471744817449174501745117452174531745417455174561745717458174591746017461174621746317464174651746617467174681746917470174711747217473174741747517476174771747817479174801748117482174831748417485174861748717488174891749017491174921749317494174951749617497174981749917500175011750217503175041750517506175071750817509175101751117512175131751417515175161751717518175191752017521175221752317524175251752617527175281752917530175311753217533175341753517536175371753817539175401754117542175431754417545175461754717548175491755017551175521755317554175551755617557175581755917560175611756217563175641756517566175671756817569175701757117572175731757417575175761757717578175791758017581175821758317584175851758617587175881758917590175911759217593175941759517596175971759817599176001760117602176031760417605176061760717608176091761017611176121761317614176151761617617176181761917620176211762217623176241762517626176271762817629176301763117632176331763417635176361763717638176391764017641176421764317644176451764617647176481764917650176511765217653176541765517656176571765817659176601766117662176631766417665176661766717668176691767017671176721767317674176751767617677176781767917680176811768217683176841768517686176871768817689176901769117692176931769417695176961769717698176991770017701177021770317704177051770617707177081770917710177111771217713177141771517716177171771817719177201772117722177231772417725177261772717728177291773017731177321773317734177351773617737177381773917740177411774217743177441774517746177471774817749177501775117752177531775417755177561775717758177591776017761177621776317764177651776617767177681776917770177711777217773177741777517776177771777817779177801778117782177831778417785177861778717788177891779017791177921779317794177951779617797177981779917800178011780217803178041780517806178071780817809178101781117812178131781417815178161781717818178191782017821178221782317824178251782617827178281782917830178311783217833178341783517836178371783817839178401784117842178431784417845178461784717848178491785017851178521785317854178551785617857178581785917860178611786217863178641786517866178671786817869178701787117872178731787417875178761787717878178791788017881178821788317884178851788617887178881788917890178911789217893178941789517896178971789817899179001790117902179031790417905179061790717908179091791017911179121791317914179151791617917179181791917920179211792217923179241792517926179271792817929179301793117932179331793417935179361793717938179391794017941179421794317944179451794617947179481794917950179511795217953179541795517956179571795817959179601796117962179631796417965179661796717968179691797017971179721797317974179751797617977179781797917980179811798217983179841798517986179871798817989179901799117992179931799417995179961799717998179991800018001180021800318004180051800618007180081800918010180111801218013180141801518016180171801818019180201802118022180231802418025180261802718028180291803018031180321803318034180351803618037180381803918040180411804218043180441804518046180471804818049180501805118052180531805418055180561805718058180591806018061180621806318064180651806618067180681806918070180711807218073180741807518076180771807818079180801808118082180831808418085180861808718088180891809018091180921809318094180951809618097180981809918100181011810218103181041810518106181071810818109181101811118112181131811418115181161811718118181191812018121181221812318124181251812618127181281812918130181311813218133181341813518136181371813818139181401814118142181431814418145181461814718148181491815018151181521815318154181551815618157181581815918160181611816218163181641816518166181671816818169181701817118172181731817418175181761817718178181791818018181181821818318184181851818618187181881818918190181911819218193181941819518196181971819818199182001820118202182031820418205182061820718208182091821018211182121821318214182151821618217182181821918220182211822218223182241822518226182271822818229182301823118232182331823418235182361823718238182391824018241182421824318244182451824618247182481824918250182511825218253182541825518256182571825818259182601826118262182631826418265182661826718268182691827018271182721827318274182751827618277182781827918280182811828218283182841828518286182871828818289182901829118292182931829418295182961829718298182991830018301183021830318304183051830618307183081830918310183111831218313183141831518316183171831818319183201832118322183231832418325183261832718328183291833018331183321833318334183351833618337183381833918340183411834218343183441834518346183471834818349183501835118352183531835418355183561835718358183591836018361183621836318364183651836618367183681836918370183711837218373183741837518376183771837818379183801838118382183831838418385183861838718388183891839018391183921839318394183951839618397183981839918400184011840218403184041840518406184071840818409184101841118412184131841418415184161841718418184191842018421184221842318424184251842618427184281842918430184311843218433184341843518436184371843818439184401844118442184431844418445184461844718448184491845018451184521845318454184551845618457184581845918460184611846218463184641846518466184671846818469184701847118472184731847418475184761847718478184791848018481184821848318484184851848618487184881848918490184911849218493184941849518496184971849818499185001850118502185031850418505185061850718508185091851018511185121851318514185151851618517185181851918520185211852218523185241852518526185271852818529185301853118532185331853418535185361853718538185391854018541185421854318544185451854618547185481854918550185511855218553185541855518556185571855818559185601856118562185631856418565185661856718568185691857018571185721857318574185751857618577185781857918580185811858218583185841858518586185871858818589185901859118592185931859418595185961859718598185991860018601186021860318604186051860618607186081860918610186111861218613186141861518616186171861818619186201862118622186231862418625186261862718628186291863018631186321863318634186351863618637186381863918640186411864218643186441864518646186471864818649186501865118652186531865418655186561865718658186591866018661186621866318664186651866618667186681866918670186711867218673186741867518676186771867818679186801868118682186831868418685186861868718688186891869018691186921869318694186951869618697186981869918700187011870218703187041870518706187071870818709187101871118712187131871418715187161871718718187191872018721187221872318724187251872618727187281872918730187311873218733187341873518736187371873818739187401874118742187431874418745187461874718748187491875018751187521875318754187551875618757187581875918760187611876218763187641876518766187671876818769187701877118772187731877418775187761877718778187791878018781187821878318784187851878618787187881878918790187911879218793187941879518796187971879818799188001880118802188031880418805188061880718808188091881018811188121881318814188151881618817188181881918820188211882218823188241882518826188271882818829188301883118832188331883418835188361883718838188391884018841188421884318844188451884618847188481884918850188511885218853188541885518856188571885818859188601886118862188631886418865188661886718868188691887018871188721887318874188751887618877188781887918880188811888218883188841888518886188871888818889188901889118892188931889418895188961889718898188991890018901189021890318904189051890618907189081890918910189111891218913189141891518916189171891818919189201892118922189231892418925189261892718928189291893018931189321893318934189351893618937189381893918940189411894218943189441894518946189471894818949189501895118952189531895418955189561895718958189591896018961189621896318964189651896618967189681896918970189711897218973189741897518976189771897818979189801898118982189831898418985189861898718988189891899018991189921899318994189951899618997189981899919000190011900219003190041900519006190071900819009190101901119012190131901419015190161901719018190191902019021190221902319024190251902619027190281902919030190311903219033190341903519036190371903819039190401904119042190431904419045190461904719048190491905019051190521905319054190551905619057190581905919060190611906219063190641906519066190671906819069190701907119072190731907419075190761907719078190791908019081190821908319084190851908619087190881908919090190911909219093190941909519096190971909819099191001910119102191031910419105191061910719108191091911019111191121911319114191151911619117191181911919120191211912219123191241912519126191271912819129191301913119132191331913419135191361913719138191391914019141191421914319144191451914619147191481914919150191511915219153191541915519156191571915819159191601916119162191631916419165191661916719168191691917019171191721917319174191751917619177191781917919180191811918219183191841918519186191871918819189191901919119192191931919419195191961919719198191991920019201192021920319204192051920619207192081920919210192111921219213192141921519216192171921819219192201922119222192231922419225192261922719228192291923019231192321923319234192351923619237192381923919240192411924219243192441924519246192471924819249192501925119252192531925419255192561925719258192591926019261192621926319264192651926619267192681926919270192711927219273192741927519276192771927819279192801928119282192831928419285192861928719288192891929019291192921929319294192951929619297192981929919300193011930219303193041930519306193071930819309193101931119312193131931419315193161931719318193191932019321193221932319324193251932619327193281932919330193311933219333193341933519336193371933819339193401934119342193431934419345193461934719348193491935019351193521935319354193551935619357193581935919360193611936219363193641936519366193671936819369193701937119372193731937419375193761937719378193791938019381193821938319384193851938619387193881938919390193911939219393193941939519396193971939819399194001940119402194031940419405194061940719408194091941019411194121941319414194151941619417194181941919420194211942219423194241942519426194271942819429194301943119432194331943419435194361943719438194391944019441194421944319444194451944619447194481944919450194511945219453194541945519456194571945819459194601946119462194631946419465194661946719468194691947019471194721947319474194751947619477194781947919480194811948219483194841948519486194871948819489194901949119492194931949419495194961949719498194991950019501195021950319504195051950619507195081950919510195111951219513195141951519516195171951819519195201952119522195231952419525195261952719528195291953019531195321953319534195351953619537195381953919540195411954219543195441954519546195471954819549195501955119552195531955419555195561955719558195591956019561195621956319564195651956619567195681956919570195711957219573195741957519576195771957819579195801958119582195831958419585195861958719588195891959019591195921959319594195951959619597195981959919600196011960219603196041960519606196071960819609196101961119612196131961419615196161961719618196191962019621196221962319624196251962619627196281962919630196311963219633196341963519636196371963819639196401964119642196431964419645196461964719648196491965019651196521965319654196551965619657196581965919660196611966219663196641966519666196671966819669196701967119672196731967419675196761967719678196791968019681196821968319684196851968619687196881968919690196911969219693196941969519696196971969819699197001970119702197031970419705197061970719708197091971019711197121971319714197151971619717197181971919720197211972219723197241972519726197271972819729197301973119732197331973419735197361973719738197391974019741197421974319744197451974619747197481974919750197511975219753197541975519756197571975819759197601976119762197631976419765197661976719768197691977019771197721977319774197751977619777197781977919780197811978219783197841978519786197871978819789197901979119792197931979419795197961979719798197991980019801198021980319804198051980619807198081980919810198111981219813198141981519816198171981819819198201982119822198231982419825198261982719828198291983019831198321983319834198351983619837198381983919840198411984219843198441984519846198471984819849198501985119852198531985419855198561985719858198591986019861198621986319864198651986619867198681986919870198711987219873198741987519876198771987819879198801988119882198831988419885198861988719888198891989019891198921989319894198951989619897198981989919900199011990219903199041990519906199071990819909199101991119912199131991419915199161991719918199191992019921199221992319924199251992619927199281992919930199311993219933199341993519936199371993819939199401994119942199431994419945199461994719948199491995019951199521995319954199551995619957199581995919960199611996219963199641996519966199671996819969199701997119972199731997419975199761997719978199791998019981199821998319984199851998619987199881998919990199911999219993199941999519996199971999819999200002000120002200032000420005200062000720008200092001020011200122001320014200152001620017200182001920020200212002220023200242002520026200272002820029200302003120032200332003420035200362003720038200392004020041200422004320044200452004620047200482004920050200512005220053200542005520056200572005820059200602006120062200632006420065200662006720068200692007020071200722007320074200752007620077200782007920080200812008220083200842008520086200872008820089200902009120092200932009420095200962009720098200992010020101201022010320104201052010620107201082010920110201112011220113201142011520116201172011820119201202012120122201232012420125201262012720128201292013020131201322013320134201352013620137201382013920140201412014220143201442014520146201472014820149201502015120152201532015420155201562015720158201592016020161201622016320164201652016620167201682016920170201712017220173201742017520176201772017820179201802018120182201832018420185201862018720188201892019020191201922019320194201952019620197201982019920200202012020220203202042020520206202072020820209202102021120212202132021420215202162021720218202192022020221202222022320224202252022620227202282022920230202312023220233202342023520236202372023820239202402024120242202432024420245202462024720248202492025020251202522025320254202552025620257202582025920260202612026220263202642026520266202672026820269202702027120272202732027420275202762027720278202792028020281202822028320284202852028620287202882028920290202912029220293202942029520296202972029820299203002030120302203032030420305203062030720308203092031020311203122031320314203152031620317203182031920320203212032220323203242032520326203272032820329203302033120332203332033420335203362033720338203392034020341203422034320344203452034620347203482034920350203512035220353203542035520356203572035820359203602036120362203632036420365203662036720368203692037020371203722037320374203752037620377203782037920380203812038220383203842038520386203872038820389203902039120392203932039420395203962039720398203992040020401204022040320404204052040620407204082040920410204112041220413204142041520416204172041820419204202042120422204232042420425204262042720428204292043020431204322043320434204352043620437204382043920440204412044220443204442044520446204472044820449204502045120452204532045420455204562045720458204592046020461204622046320464204652046620467204682046920470204712047220473204742047520476204772047820479204802048120482204832048420485204862048720488204892049020491204922049320494204952049620497204982049920500205012050220503205042050520506205072050820509205102051120512205132051420515205162051720518205192052020521205222052320524205252052620527205282052920530205312053220533205342053520536205372053820539205402054120542205432054420545205462054720548205492055020551205522055320554205552055620557205582055920560205612056220563205642056520566205672056820569205702057120572205732057420575205762057720578205792058020581205822058320584205852058620587205882058920590205912059220593205942059520596205972059820599206002060120602206032060420605206062060720608206092061020611206122061320614206152061620617206182061920620206212062220623206242062520626206272062820629206302063120632206332063420635206362063720638206392064020641206422064320644206452064620647206482064920650206512065220653206542065520656206572065820659206602066120662206632066420665206662066720668206692067020671206722067320674206752067620677206782067920680206812068220683206842068520686206872068820689206902069120692206932069420695206962069720698206992070020701207022070320704207052070620707207082070920710207112071220713207142071520716207172071820719207202072120722207232072420725207262072720728207292073020731207322073320734207352073620737207382073920740207412074220743207442074520746207472074820749207502075120752207532075420755207562075720758207592076020761207622076320764207652076620767207682076920770207712077220773207742077520776207772077820779207802078120782207832078420785207862078720788207892079020791207922079320794207952079620797207982079920800208012080220803208042080520806208072080820809208102081120812208132081420815208162081720818208192082020821208222082320824208252082620827208282082920830208312083220833208342083520836208372083820839208402084120842208432084420845208462084720848208492085020851208522085320854208552085620857208582085920860208612086220863208642086520866208672086820869208702087120872208732087420875208762087720878208792088020881208822088320884208852088620887208882088920890208912089220893208942089520896208972089820899209002090120902209032090420905209062090720908209092091020911209122091320914209152091620917209182091920920209212092220923209242092520926209272092820929209302093120932209332093420935209362093720938209392094020941209422094320944209452094620947209482094920950209512095220953209542095520956209572095820959209602096120962209632096420965209662096720968209692097020971209722097320974209752097620977209782097920980209812098220983209842098520986209872098820989209902099120992209932099420995209962099720998209992100021001210022100321004210052100621007210082100921010210112101221013210142101521016210172101821019210202102121022210232102421025210262102721028210292103021031210322103321034210352103621037210382103921040210412104221043210442104521046210472104821049210502105121052210532105421055210562105721058210592106021061210622106321064210652106621067210682106921070210712107221073210742107521076210772107821079210802108121082210832108421085210862108721088210892109021091210922109321094210952109621097210982109921100211012110221103211042110521106211072110821109211102111121112211132111421115211162111721118211192112021121211222112321124211252112621127211282112921130211312113221133211342113521136211372113821139211402114121142211432114421145211462114721148211492115021151211522115321154211552115621157211582115921160211612116221163211642116521166211672116821169211702117121172211732117421175211762117721178211792118021181211822118321184211852118621187211882118921190211912119221193211942119521196211972119821199212002120121202212032120421205212062120721208212092121021211212122121321214212152121621217212182121921220212212122221223212242122521226212272122821229212302123121232212332123421235212362123721238212392124021241212422124321244212452124621247212482124921250212512125221253212542125521256212572125821259212602126121262212632126421265212662126721268212692127021271212722127321274212752127621277212782127921280212812128221283212842128521286212872128821289212902129121292212932129421295212962129721298212992130021301213022130321304213052130621307213082130921310213112131221313213142131521316213172131821319213202132121322213232132421325213262132721328213292133021331213322133321334213352133621337213382133921340213412134221343213442134521346213472134821349213502135121352213532135421355213562135721358213592136021361213622136321364213652136621367213682136921370213712137221373213742137521376213772137821379213802138121382213832138421385213862138721388213892139021391213922139321394213952139621397213982139921400214012140221403214042140521406214072140821409214102141121412214132141421415214162141721418214192142021421214222142321424214252142621427214282142921430214312143221433214342143521436214372143821439214402144121442214432144421445214462144721448214492145021451214522145321454214552145621457214582145921460214612146221463214642146521466214672146821469214702147121472214732147421475214762147721478214792148021481214822148321484214852148621487214882148921490214912149221493214942149521496214972149821499215002150121502215032150421505215062150721508215092151021511215122151321514215152151621517215182151921520215212152221523215242152521526215272152821529215302153121532215332153421535215362153721538215392154021541215422154321544215452154621547215482154921550215512155221553215542155521556215572155821559215602156121562215632156421565215662156721568215692157021571215722157321574215752157621577215782157921580215812158221583215842158521586215872158821589215902159121592215932159421595215962159721598215992160021601216022160321604216052160621607216082160921610216112161221613216142161521616216172161821619216202162121622216232162421625216262162721628216292163021631216322163321634216352163621637216382163921640216412164221643216442164521646216472164821649216502165121652216532165421655216562165721658216592166021661216622166321664216652166621667216682166921670216712167221673216742167521676216772167821679216802168121682216832168421685216862168721688216892169021691216922169321694216952169621697216982169921700217012170221703217042170521706217072170821709217102171121712217132171421715217162171721718217192172021721217222172321724217252172621727217282172921730217312173221733217342173521736217372173821739217402174121742217432174421745217462174721748217492175021751217522175321754217552175621757217582175921760217612176221763217642176521766217672176821769217702177121772217732177421775217762177721778217792178021781217822178321784217852178621787217882178921790217912179221793217942179521796217972179821799218002180121802218032180421805218062180721808218092181021811218122181321814218152181621817218182181921820218212182221823218242182521826218272182821829218302183121832218332183421835218362183721838218392184021841218422184321844218452184621847218482184921850218512185221853218542185521856218572185821859218602186121862218632186421865218662186721868218692187021871218722187321874218752187621877218782187921880218812188221883218842188521886218872188821889218902189121892218932189421895218962189721898218992190021901219022190321904219052190621907219082190921910219112191221913219142191521916219172191821919219202192121922219232192421925219262192721928219292193021931219322193321934219352193621937219382193921940219412194221943219442194521946219472194821949219502195121952219532195421955219562195721958219592196021961219622196321964219652196621967219682196921970219712197221973219742197521976219772197821979219802198121982219832198421985219862198721988219892199021991219922199321994219952199621997219982199922000220012200222003220042200522006220072200822009220102201122012220132201422015220162201722018220192202022021220222202322024220252202622027220282202922030220312203222033220342203522036220372203822039220402204122042220432204422045220462204722048220492205022051220522205322054220552205622057220582205922060220612206222063220642206522066220672206822069220702207122072220732207422075220762207722078220792208022081220822208322084220852208622087220882208922090220912209222093220942209522096220972209822099221002210122102221032210422105221062210722108221092211022111221122211322114221152211622117221182211922120221212212222123221242212522126221272212822129221302213122132221332213422135221362213722138221392214022141221422214322144221452214622147221482214922150221512215222153221542215522156221572215822159221602216122162221632216422165221662216722168221692217022171221722217322174221752217622177221782217922180221812218222183221842218522186221872218822189221902219122192221932219422195221962219722198221992220022201222022220322204222052220622207222082220922210222112221222213222142221522216222172221822219222202222122222222232222422225222262222722228222292223022231222322223322234222352223622237222382223922240222412224222243222442224522246222472224822249222502225122252222532225422255222562225722258222592226022261222622226322264222652226622267222682226922270222712227222273222742227522276222772227822279222802228122282222832228422285222862228722288222892229022291222922229322294222952229622297222982229922300223012230222303223042230522306223072230822309223102231122312223132231422315223162231722318223192232022321223222232322324223252232622327223282232922330223312233222333223342233522336223372233822339223402234122342223432234422345223462234722348223492235022351223522235322354223552235622357223582235922360223612236222363223642236522366223672236822369223702237122372223732237422375223762237722378223792238022381223822238322384223852238622387223882238922390223912239222393223942239522396223972239822399224002240122402224032240422405224062240722408224092241022411224122241322414224152241622417224182241922420224212242222423224242242522426224272242822429224302243122432224332243422435224362243722438224392244022441224422244322444224452244622447224482244922450224512245222453224542245522456224572245822459224602246122462224632246422465224662246722468224692247022471224722247322474224752247622477224782247922480224812248222483224842248522486224872248822489224902249122492224932249422495224962249722498224992250022501225022250322504225052250622507225082250922510225112251222513225142251522516225172251822519225202252122522225232252422525225262252722528225292253022531225322253322534225352253622537225382253922540225412254222543225442254522546225472254822549225502255122552225532255422555225562255722558225592256022561225622256322564225652256622567225682256922570225712257222573225742257522576225772257822579225802258122582225832258422585225862258722588225892259022591225922259322594225952259622597225982259922600226012260222603226042260522606226072260822609226102261122612226132261422615226162261722618226192262022621226222262322624226252262622627226282262922630226312263222633226342263522636226372263822639226402264122642226432264422645226462264722648226492265022651226522265322654226552265622657226582265922660226612266222663226642266522666226672266822669226702267122672226732267422675226762267722678226792268022681226822268322684226852268622687226882268922690226912269222693226942269522696226972269822699227002270122702227032270422705227062270722708227092271022711227122271322714227152271622717227182271922720227212272222723227242272522726227272272822729227302273122732227332273422735227362273722738227392274022741227422274322744227452274622747227482274922750227512275222753227542275522756227572275822759227602276122762227632276422765227662276722768227692277022771227722277322774227752277622777227782277922780227812278222783227842278522786227872278822789227902279122792227932279422795227962279722798227992280022801228022280322804228052280622807228082280922810228112281222813228142281522816228172281822819228202282122822228232282422825228262282722828228292283022831228322283322834228352283622837228382283922840228412284222843228442284522846228472284822849228502285122852228532285422855228562285722858228592286022861228622286322864228652286622867228682286922870228712287222873228742287522876228772287822879228802288122882228832288422885228862288722888228892289022891228922289322894228952289622897228982289922900229012290222903229042290522906229072290822909229102291122912229132291422915229162291722918229192292022921229222292322924229252292622927229282292922930229312293222933229342293522936229372293822939229402294122942229432294422945229462294722948229492295022951229522295322954229552295622957229582295922960229612296222963229642296522966229672296822969229702297122972229732297422975229762297722978229792298022981229822298322984229852298622987229882298922990229912299222993229942299522996229972299822999230002300123002230032300423005230062300723008230092301023011230122301323014230152301623017230182301923020230212302223023230242302523026230272302823029230302303123032230332303423035230362303723038230392304023041230422304323044230452304623047230482304923050230512305223053230542305523056230572305823059230602306123062230632306423065230662306723068230692307023071230722307323074230752307623077230782307923080230812308223083230842308523086230872308823089230902309123092230932309423095230962309723098230992310023101231022310323104231052310623107231082310923110231112311223113231142311523116231172311823119231202312123122231232312423125231262312723128231292313023131231322313323134231352313623137231382313923140231412314223143231442314523146231472314823149231502315123152231532315423155231562315723158231592316023161231622316323164231652316623167231682316923170231712317223173231742317523176231772317823179231802318123182231832318423185231862318723188231892319023191231922319323194231952319623197231982319923200232012320223203232042320523206232072320823209232102321123212232132321423215232162321723218232192322023221232222322323224232252322623227232282322923230232312323223233232342323523236232372323823239232402324123242232432324423245232462324723248232492325023251232522325323254232552325623257232582325923260232612326223263232642326523266232672326823269232702327123272232732327423275232762327723278232792328023281232822328323284232852328623287232882328923290232912329223293232942329523296232972329823299233002330123302233032330423305233062330723308233092331023311233122331323314233152331623317233182331923320233212332223323233242332523326233272332823329233302333123332233332333423335233362333723338233392334023341233422334323344233452334623347233482334923350233512335223353233542335523356233572335823359233602336123362233632336423365233662336723368233692337023371233722337323374233752337623377233782337923380233812338223383233842338523386233872338823389233902339123392233932339423395233962339723398233992340023401234022340323404234052340623407234082340923410234112341223413234142341523416234172341823419234202342123422234232342423425234262342723428234292343023431234322343323434234352343623437234382343923440234412344223443234442344523446234472344823449234502345123452234532345423455234562345723458234592346023461234622346323464234652346623467234682346923470234712347223473234742347523476234772347823479234802348123482234832348423485234862348723488234892349023491234922349323494234952349623497234982349923500235012350223503235042350523506235072350823509235102351123512235132351423515235162351723518235192352023521235222352323524235252352623527235282352923530235312353223533235342353523536235372353823539235402354123542235432354423545235462354723548235492355023551235522355323554235552355623557235582355923560235612356223563235642356523566235672356823569235702357123572235732357423575235762357723578235792358023581235822358323584235852358623587235882358923590235912359223593235942359523596235972359823599236002360123602236032360423605236062360723608236092361023611236122361323614236152361623617236182361923620236212362223623236242362523626236272362823629236302363123632236332363423635236362363723638236392364023641236422364323644236452364623647236482364923650236512365223653236542365523656236572365823659236602366123662236632366423665236662366723668236692367023671236722367323674236752367623677236782367923680236812368223683236842368523686236872368823689236902369123692236932369423695236962369723698236992370023701237022370323704237052370623707237082370923710237112371223713237142371523716237172371823719237202372123722237232372423725237262372723728237292373023731237322373323734237352373623737237382373923740237412374223743237442374523746237472374823749237502375123752237532375423755237562375723758237592376023761237622376323764237652376623767237682376923770237712377223773237742377523776237772377823779237802378123782237832378423785237862378723788237892379023791237922379323794237952379623797237982379923800238012380223803238042380523806238072380823809238102381123812238132381423815238162381723818238192382023821238222382323824238252382623827238282382923830238312383223833238342383523836238372383823839238402384123842238432384423845238462384723848238492385023851238522385323854238552385623857238582385923860238612386223863238642386523866238672386823869238702387123872238732387423875238762387723878238792388023881238822388323884238852388623887238882388923890238912389223893238942389523896238972389823899239002390123902239032390423905239062390723908239092391023911239122391323914239152391623917239182391923920239212392223923239242392523926239272392823929239302393123932239332393423935239362393723938239392394023941239422394323944239452394623947239482394923950239512395223953239542395523956239572395823959239602396123962239632396423965239662396723968239692397023971239722397323974239752397623977239782397923980239812398223983239842398523986239872398823989239902399123992239932399423995239962399723998239992400024001240022400324004240052400624007240082400924010240112401224013240142401524016240172401824019240202402124022240232402424025240262402724028240292403024031240322403324034240352403624037240382403924040240412404224043240442404524046240472404824049240502405124052240532405424055240562405724058240592406024061240622406324064240652406624067240682406924070240712407224073240742407524076240772407824079240802408124082240832408424085240862408724088240892409024091240922409324094240952409624097240982409924100241012410224103241042410524106241072410824109241102411124112241132411424115241162411724118241192412024121241222412324124241252412624127241282412924130241312413224133241342413524136241372413824139241402414124142241432414424145241462414724148241492415024151241522415324154241552415624157241582415924160241612416224163241642416524166241672416824169241702417124172241732417424175241762417724178241792418024181241822418324184241852418624187241882418924190241912419224193241942419524196241972419824199242002420124202242032420424205242062420724208242092421024211242122421324214242152421624217242182421924220242212422224223242242422524226242272422824229242302423124232242332423424235242362423724238242392424024241242422424324244242452424624247242482424924250242512425224253242542425524256242572425824259242602426124262242632426424265242662426724268242692427024271242722427324274242752427624277242782427924280242812428224283242842428524286242872428824289242902429124292242932429424295242962429724298242992430024301243022430324304243052430624307243082430924310243112431224313243142431524316243172431824319243202432124322243232432424325243262432724328243292433024331243322433324334243352433624337243382433924340243412434224343243442434524346243472434824349243502435124352243532435424355243562435724358243592436024361243622436324364243652436624367243682436924370243712437224373243742437524376243772437824379243802438124382243832438424385243862438724388243892439024391243922439324394243952439624397243982439924400244012440224403244042440524406244072440824409244102441124412244132441424415244162441724418244192442024421244222442324424244252442624427244282442924430244312443224433244342443524436244372443824439244402444124442244432444424445244462444724448244492445024451244522445324454244552445624457244582445924460244612446224463244642446524466244672446824469244702447124472244732447424475244762447724478244792448024481244822448324484244852448624487244882448924490244912449224493244942449524496244972449824499245002450124502245032450424505245062450724508245092451024511245122451324514245152451624517245182451924520245212452224523245242452524526245272452824529245302453124532245332453424535245362453724538245392454024541245422454324544245452454624547245482454924550245512455224553245542455524556245572455824559245602456124562245632456424565245662456724568245692457024571245722457324574245752457624577245782457924580245812458224583245842458524586245872458824589245902459124592245932459424595245962459724598245992460024601246022460324604246052460624607246082460924610246112461224613246142461524616246172461824619246202462124622246232462424625246262462724628246292463024631246322463324634246352463624637246382463924640246412464224643246442464524646246472464824649246502465124652246532465424655246562465724658246592466024661246622466324664246652466624667246682466924670246712467224673246742467524676246772467824679246802468124682246832468424685246862468724688246892469024691246922469324694246952469624697246982469924700247012470224703247042470524706247072470824709247102471124712247132471424715247162471724718247192472024721247222472324724247252472624727247282472924730247312473224733247342473524736247372473824739247402474124742247432474424745247462474724748247492475024751247522475324754247552475624757247582475924760247612476224763247642476524766247672476824769247702477124772247732477424775247762477724778247792478024781247822478324784247852478624787247882478924790247912479224793247942479524796247972479824799248002480124802248032480424805248062480724808248092481024811248122481324814248152481624817248182481924820248212482224823248242482524826248272482824829248302483124832248332483424835248362483724838248392484024841248422484324844248452484624847248482484924850248512485224853248542485524856248572485824859248602486124862248632486424865248662486724868248692487024871248722487324874248752487624877248782487924880248812488224883248842488524886248872488824889248902489124892248932489424895248962489724898248992490024901249022490324904249052490624907249082490924910249112491224913249142491524916249172491824919249202492124922249232492424925249262492724928249292493024931249322493324934249352493624937249382493924940249412494224943249442494524946249472494824949249502495124952249532495424955249562495724958249592496024961249622496324964249652496624967249682496924970249712497224973249742497524976249772497824979249802498124982249832498424985249862498724988249892499024991249922499324994249952499624997249982499925000250012500225003250042500525006250072500825009250102501125012250132501425015250162501725018
  1. /* ARM NEON intrinsics include file.
  2. Copyright (C) 2011-2015 Free Software Foundation, Inc.
  3. Contributed by ARM Ltd.
  4. This file is part of GCC.
  5. GCC is free software; you can redistribute it and/or modify it
  6. under the terms of the GNU General Public License as published
  7. by the Free Software Foundation; either version 3, or (at your
  8. option) any later version.
  9. GCC is distributed in the hope that it will be useful, but WITHOUT
  10. ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
  11. or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
  12. License for more details.
  13. Under Section 7 of GPL version 3, you are granted additional
  14. permissions described in the GCC Runtime Library Exception, version
  15. 3.1, as published by the Free Software Foundation.
  16. You should have received a copy of the GNU General Public License and
  17. a copy of the GCC Runtime Library Exception along with this program;
  18. see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
  19. <http://www.gnu.org/licenses/>. */
  20. #ifndef _AARCH64_NEON_H_
  21. #define _AARCH64_NEON_H_
  22. #ifndef __ARM_NEON
  23. #error You must enable AdvancedSIMD instructions to use arm_neon.h
  24. #else
  25. #include <stdint.h>
  26. #define __AARCH64_UINT64_C(__C) ((uint64_t) __C)
  27. #define __AARCH64_INT64_C(__C) ((int64_t) __C)
  28. typedef __Int8x8_t int8x8_t;
  29. typedef __Int16x4_t int16x4_t;
  30. typedef __Int32x2_t int32x2_t;
  31. typedef __Int64x1_t int64x1_t;
  32. typedef __Float32x2_t float32x2_t;
  33. typedef __Poly8x8_t poly8x8_t;
  34. typedef __Poly16x4_t poly16x4_t;
  35. typedef __Uint8x8_t uint8x8_t;
  36. typedef __Uint16x4_t uint16x4_t;
  37. typedef __Uint32x2_t uint32x2_t;
  38. typedef __Float64x1_t float64x1_t;
  39. typedef __Uint64x1_t uint64x1_t;
  40. typedef __Int8x16_t int8x16_t;
  41. typedef __Int16x8_t int16x8_t;
  42. typedef __Int32x4_t int32x4_t;
  43. typedef __Int64x2_t int64x2_t;
  44. typedef __Float32x4_t float32x4_t;
  45. typedef __Float64x2_t float64x2_t;
  46. typedef __Poly8x16_t poly8x16_t;
  47. typedef __Poly16x8_t poly16x8_t;
  48. typedef __Poly64x2_t poly64x2_t;
  49. typedef __Uint8x16_t uint8x16_t;
  50. typedef __Uint16x8_t uint16x8_t;
  51. typedef __Uint32x4_t uint32x4_t;
  52. typedef __Uint64x2_t uint64x2_t;
  53. typedef __Poly8_t poly8_t;
  54. typedef __Poly16_t poly16_t;
  55. typedef __Poly64_t poly64_t;
  56. typedef __Poly128_t poly128_t;
  57. typedef float float32_t;
  58. typedef double float64_t;
  59. typedef struct int8x8x2_t
  60. {
  61. int8x8_t val[2];
  62. } int8x8x2_t;
  63. typedef struct int8x16x2_t
  64. {
  65. int8x16_t val[2];
  66. } int8x16x2_t;
  67. typedef struct int16x4x2_t
  68. {
  69. int16x4_t val[2];
  70. } int16x4x2_t;
  71. typedef struct int16x8x2_t
  72. {
  73. int16x8_t val[2];
  74. } int16x8x2_t;
  75. typedef struct int32x2x2_t
  76. {
  77. int32x2_t val[2];
  78. } int32x2x2_t;
  79. typedef struct int32x4x2_t
  80. {
  81. int32x4_t val[2];
  82. } int32x4x2_t;
  83. typedef struct int64x1x2_t
  84. {
  85. int64x1_t val[2];
  86. } int64x1x2_t;
  87. typedef struct int64x2x2_t
  88. {
  89. int64x2_t val[2];
  90. } int64x2x2_t;
  91. typedef struct uint8x8x2_t
  92. {
  93. uint8x8_t val[2];
  94. } uint8x8x2_t;
  95. typedef struct uint8x16x2_t
  96. {
  97. uint8x16_t val[2];
  98. } uint8x16x2_t;
  99. typedef struct uint16x4x2_t
  100. {
  101. uint16x4_t val[2];
  102. } uint16x4x2_t;
  103. typedef struct uint16x8x2_t
  104. {
  105. uint16x8_t val[2];
  106. } uint16x8x2_t;
  107. typedef struct uint32x2x2_t
  108. {
  109. uint32x2_t val[2];
  110. } uint32x2x2_t;
  111. typedef struct uint32x4x2_t
  112. {
  113. uint32x4_t val[2];
  114. } uint32x4x2_t;
  115. typedef struct uint64x1x2_t
  116. {
  117. uint64x1_t val[2];
  118. } uint64x1x2_t;
  119. typedef struct uint64x2x2_t
  120. {
  121. uint64x2_t val[2];
  122. } uint64x2x2_t;
  123. typedef struct float32x2x2_t
  124. {
  125. float32x2_t val[2];
  126. } float32x2x2_t;
  127. typedef struct float32x4x2_t
  128. {
  129. float32x4_t val[2];
  130. } float32x4x2_t;
  131. typedef struct float64x2x2_t
  132. {
  133. float64x2_t val[2];
  134. } float64x2x2_t;
  135. typedef struct float64x1x2_t
  136. {
  137. float64x1_t val[2];
  138. } float64x1x2_t;
  139. typedef struct poly8x8x2_t
  140. {
  141. poly8x8_t val[2];
  142. } poly8x8x2_t;
  143. typedef struct poly8x16x2_t
  144. {
  145. poly8x16_t val[2];
  146. } poly8x16x2_t;
  147. typedef struct poly16x4x2_t
  148. {
  149. poly16x4_t val[2];
  150. } poly16x4x2_t;
  151. typedef struct poly16x8x2_t
  152. {
  153. poly16x8_t val[2];
  154. } poly16x8x2_t;
  155. typedef struct int8x8x3_t
  156. {
  157. int8x8_t val[3];
  158. } int8x8x3_t;
  159. typedef struct int8x16x3_t
  160. {
  161. int8x16_t val[3];
  162. } int8x16x3_t;
  163. typedef struct int16x4x3_t
  164. {
  165. int16x4_t val[3];
  166. } int16x4x3_t;
  167. typedef struct int16x8x3_t
  168. {
  169. int16x8_t val[3];
  170. } int16x8x3_t;
  171. typedef struct int32x2x3_t
  172. {
  173. int32x2_t val[3];
  174. } int32x2x3_t;
  175. typedef struct int32x4x3_t
  176. {
  177. int32x4_t val[3];
  178. } int32x4x3_t;
  179. typedef struct int64x1x3_t
  180. {
  181. int64x1_t val[3];
  182. } int64x1x3_t;
  183. typedef struct int64x2x3_t
  184. {
  185. int64x2_t val[3];
  186. } int64x2x3_t;
  187. typedef struct uint8x8x3_t
  188. {
  189. uint8x8_t val[3];
  190. } uint8x8x3_t;
  191. typedef struct uint8x16x3_t
  192. {
  193. uint8x16_t val[3];
  194. } uint8x16x3_t;
  195. typedef struct uint16x4x3_t
  196. {
  197. uint16x4_t val[3];
  198. } uint16x4x3_t;
  199. typedef struct uint16x8x3_t
  200. {
  201. uint16x8_t val[3];
  202. } uint16x8x3_t;
  203. typedef struct uint32x2x3_t
  204. {
  205. uint32x2_t val[3];
  206. } uint32x2x3_t;
  207. typedef struct uint32x4x3_t
  208. {
  209. uint32x4_t val[3];
  210. } uint32x4x3_t;
  211. typedef struct uint64x1x3_t
  212. {
  213. uint64x1_t val[3];
  214. } uint64x1x3_t;
  215. typedef struct uint64x2x3_t
  216. {
  217. uint64x2_t val[3];
  218. } uint64x2x3_t;
  219. typedef struct float32x2x3_t
  220. {
  221. float32x2_t val[3];
  222. } float32x2x3_t;
  223. typedef struct float32x4x3_t
  224. {
  225. float32x4_t val[3];
  226. } float32x4x3_t;
  227. typedef struct float64x2x3_t
  228. {
  229. float64x2_t val[3];
  230. } float64x2x3_t;
  231. typedef struct float64x1x3_t
  232. {
  233. float64x1_t val[3];
  234. } float64x1x3_t;
  235. typedef struct poly8x8x3_t
  236. {
  237. poly8x8_t val[3];
  238. } poly8x8x3_t;
  239. typedef struct poly8x16x3_t
  240. {
  241. poly8x16_t val[3];
  242. } poly8x16x3_t;
  243. typedef struct poly16x4x3_t
  244. {
  245. poly16x4_t val[3];
  246. } poly16x4x3_t;
  247. typedef struct poly16x8x3_t
  248. {
  249. poly16x8_t val[3];
  250. } poly16x8x3_t;
  251. typedef struct int8x8x4_t
  252. {
  253. int8x8_t val[4];
  254. } int8x8x4_t;
  255. typedef struct int8x16x4_t
  256. {
  257. int8x16_t val[4];
  258. } int8x16x4_t;
  259. typedef struct int16x4x4_t
  260. {
  261. int16x4_t val[4];
  262. } int16x4x4_t;
  263. typedef struct int16x8x4_t
  264. {
  265. int16x8_t val[4];
  266. } int16x8x4_t;
  267. typedef struct int32x2x4_t
  268. {
  269. int32x2_t val[4];
  270. } int32x2x4_t;
  271. typedef struct int32x4x4_t
  272. {
  273. int32x4_t val[4];
  274. } int32x4x4_t;
  275. typedef struct int64x1x4_t
  276. {
  277. int64x1_t val[4];
  278. } int64x1x4_t;
  279. typedef struct int64x2x4_t
  280. {
  281. int64x2_t val[4];
  282. } int64x2x4_t;
  283. typedef struct uint8x8x4_t
  284. {
  285. uint8x8_t val[4];
  286. } uint8x8x4_t;
  287. typedef struct uint8x16x4_t
  288. {
  289. uint8x16_t val[4];
  290. } uint8x16x4_t;
  291. typedef struct uint16x4x4_t
  292. {
  293. uint16x4_t val[4];
  294. } uint16x4x4_t;
  295. typedef struct uint16x8x4_t
  296. {
  297. uint16x8_t val[4];
  298. } uint16x8x4_t;
  299. typedef struct uint32x2x4_t
  300. {
  301. uint32x2_t val[4];
  302. } uint32x2x4_t;
  303. typedef struct uint32x4x4_t
  304. {
  305. uint32x4_t val[4];
  306. } uint32x4x4_t;
  307. typedef struct uint64x1x4_t
  308. {
  309. uint64x1_t val[4];
  310. } uint64x1x4_t;
  311. typedef struct uint64x2x4_t
  312. {
  313. uint64x2_t val[4];
  314. } uint64x2x4_t;
  315. typedef struct float32x2x4_t
  316. {
  317. float32x2_t val[4];
  318. } float32x2x4_t;
  319. typedef struct float32x4x4_t
  320. {
  321. float32x4_t val[4];
  322. } float32x4x4_t;
  323. typedef struct float64x2x4_t
  324. {
  325. float64x2_t val[4];
  326. } float64x2x4_t;
  327. typedef struct float64x1x4_t
  328. {
  329. float64x1_t val[4];
  330. } float64x1x4_t;
  331. typedef struct poly8x8x4_t
  332. {
  333. poly8x8_t val[4];
  334. } poly8x8x4_t;
  335. typedef struct poly8x16x4_t
  336. {
  337. poly8x16_t val[4];
  338. } poly8x16x4_t;
  339. typedef struct poly16x4x4_t
  340. {
  341. poly16x4_t val[4];
  342. } poly16x4x4_t;
  343. typedef struct poly16x8x4_t
  344. {
  345. poly16x8_t val[4];
  346. } poly16x8x4_t;
  347. /* __aarch64_vdup_lane internal macros. */
  348. #define __aarch64_vdup_lane_any(__size, __q, __a, __b) \
  349. vdup##__q##_n_##__size (__aarch64_vget_lane_any (__a, __b))
  350. #define __aarch64_vdup_lane_f32(__a, __b) \
  351. __aarch64_vdup_lane_any (f32, , __a, __b)
  352. #define __aarch64_vdup_lane_f64(__a, __b) \
  353. __aarch64_vdup_lane_any (f64, , __a, __b)
  354. #define __aarch64_vdup_lane_p8(__a, __b) \
  355. __aarch64_vdup_lane_any (p8, , __a, __b)
  356. #define __aarch64_vdup_lane_p16(__a, __b) \
  357. __aarch64_vdup_lane_any (p16, , __a, __b)
  358. #define __aarch64_vdup_lane_s8(__a, __b) \
  359. __aarch64_vdup_lane_any (s8, , __a, __b)
  360. #define __aarch64_vdup_lane_s16(__a, __b) \
  361. __aarch64_vdup_lane_any (s16, , __a, __b)
  362. #define __aarch64_vdup_lane_s32(__a, __b) \
  363. __aarch64_vdup_lane_any (s32, , __a, __b)
  364. #define __aarch64_vdup_lane_s64(__a, __b) \
  365. __aarch64_vdup_lane_any (s64, , __a, __b)
  366. #define __aarch64_vdup_lane_u8(__a, __b) \
  367. __aarch64_vdup_lane_any (u8, , __a, __b)
  368. #define __aarch64_vdup_lane_u16(__a, __b) \
  369. __aarch64_vdup_lane_any (u16, , __a, __b)
  370. #define __aarch64_vdup_lane_u32(__a, __b) \
  371. __aarch64_vdup_lane_any (u32, , __a, __b)
  372. #define __aarch64_vdup_lane_u64(__a, __b) \
  373. __aarch64_vdup_lane_any (u64, , __a, __b)
  374. /* __aarch64_vdup_laneq internal macros. */
  375. #define __aarch64_vdup_laneq_f32(__a, __b) \
  376. __aarch64_vdup_lane_any (f32, , __a, __b)
  377. #define __aarch64_vdup_laneq_f64(__a, __b) \
  378. __aarch64_vdup_lane_any (f64, , __a, __b)
  379. #define __aarch64_vdup_laneq_p8(__a, __b) \
  380. __aarch64_vdup_lane_any (p8, , __a, __b)
  381. #define __aarch64_vdup_laneq_p16(__a, __b) \
  382. __aarch64_vdup_lane_any (p16, , __a, __b)
  383. #define __aarch64_vdup_laneq_s8(__a, __b) \
  384. __aarch64_vdup_lane_any (s8, , __a, __b)
  385. #define __aarch64_vdup_laneq_s16(__a, __b) \
  386. __aarch64_vdup_lane_any (s16, , __a, __b)
  387. #define __aarch64_vdup_laneq_s32(__a, __b) \
  388. __aarch64_vdup_lane_any (s32, , __a, __b)
  389. #define __aarch64_vdup_laneq_s64(__a, __b) \
  390. __aarch64_vdup_lane_any (s64, , __a, __b)
  391. #define __aarch64_vdup_laneq_u8(__a, __b) \
  392. __aarch64_vdup_lane_any (u8, , __a, __b)
  393. #define __aarch64_vdup_laneq_u16(__a, __b) \
  394. __aarch64_vdup_lane_any (u16, , __a, __b)
  395. #define __aarch64_vdup_laneq_u32(__a, __b) \
  396. __aarch64_vdup_lane_any (u32, , __a, __b)
  397. #define __aarch64_vdup_laneq_u64(__a, __b) \
  398. __aarch64_vdup_lane_any (u64, , __a, __b)
  399. /* __aarch64_vdupq_lane internal macros. */
  400. #define __aarch64_vdupq_lane_f32(__a, __b) \
  401. __aarch64_vdup_lane_any (f32, q, __a, __b)
  402. #define __aarch64_vdupq_lane_f64(__a, __b) \
  403. __aarch64_vdup_lane_any (f64, q, __a, __b)
  404. #define __aarch64_vdupq_lane_p8(__a, __b) \
  405. __aarch64_vdup_lane_any (p8, q, __a, __b)
  406. #define __aarch64_vdupq_lane_p16(__a, __b) \
  407. __aarch64_vdup_lane_any (p16, q, __a, __b)
  408. #define __aarch64_vdupq_lane_s8(__a, __b) \
  409. __aarch64_vdup_lane_any (s8, q, __a, __b)
  410. #define __aarch64_vdupq_lane_s16(__a, __b) \
  411. __aarch64_vdup_lane_any (s16, q, __a, __b)
  412. #define __aarch64_vdupq_lane_s32(__a, __b) \
  413. __aarch64_vdup_lane_any (s32, q, __a, __b)
  414. #define __aarch64_vdupq_lane_s64(__a, __b) \
  415. __aarch64_vdup_lane_any (s64, q, __a, __b)
  416. #define __aarch64_vdupq_lane_u8(__a, __b) \
  417. __aarch64_vdup_lane_any (u8, q, __a, __b)
  418. #define __aarch64_vdupq_lane_u16(__a, __b) \
  419. __aarch64_vdup_lane_any (u16, q, __a, __b)
  420. #define __aarch64_vdupq_lane_u32(__a, __b) \
  421. __aarch64_vdup_lane_any (u32, q, __a, __b)
  422. #define __aarch64_vdupq_lane_u64(__a, __b) \
  423. __aarch64_vdup_lane_any (u64, q, __a, __b)
  424. /* __aarch64_vdupq_laneq internal macros. */
  425. #define __aarch64_vdupq_laneq_f32(__a, __b) \
  426. __aarch64_vdup_lane_any (f32, q, __a, __b)
  427. #define __aarch64_vdupq_laneq_f64(__a, __b) \
  428. __aarch64_vdup_lane_any (f64, q, __a, __b)
  429. #define __aarch64_vdupq_laneq_p8(__a, __b) \
  430. __aarch64_vdup_lane_any (p8, q, __a, __b)
  431. #define __aarch64_vdupq_laneq_p16(__a, __b) \
  432. __aarch64_vdup_lane_any (p16, q, __a, __b)
  433. #define __aarch64_vdupq_laneq_s8(__a, __b) \
  434. __aarch64_vdup_lane_any (s8, q, __a, __b)
  435. #define __aarch64_vdupq_laneq_s16(__a, __b) \
  436. __aarch64_vdup_lane_any (s16, q, __a, __b)
  437. #define __aarch64_vdupq_laneq_s32(__a, __b) \
  438. __aarch64_vdup_lane_any (s32, q, __a, __b)
  439. #define __aarch64_vdupq_laneq_s64(__a, __b) \
  440. __aarch64_vdup_lane_any (s64, q, __a, __b)
  441. #define __aarch64_vdupq_laneq_u8(__a, __b) \
  442. __aarch64_vdup_lane_any (u8, q, __a, __b)
  443. #define __aarch64_vdupq_laneq_u16(__a, __b) \
  444. __aarch64_vdup_lane_any (u16, q, __a, __b)
  445. #define __aarch64_vdupq_laneq_u32(__a, __b) \
  446. __aarch64_vdup_lane_any (u32, q, __a, __b)
  447. #define __aarch64_vdupq_laneq_u64(__a, __b) \
  448. __aarch64_vdup_lane_any (u64, q, __a, __b)
  449. /* Internal macro for lane indices. */
  450. #define __AARCH64_NUM_LANES(__v) (sizeof (__v) / sizeof (__v[0]))
  451. #define __AARCH64_LANE_CHECK(__vec, __idx) \
  452. __builtin_aarch64_im_lane_boundsi (sizeof(__vec), sizeof(__vec[0]), __idx)
  453. /* For big-endian, GCC's vector indices are the opposite way around
  454. to the architectural lane indices used by Neon intrinsics. */
  455. #ifdef __AARCH64EB__
  456. #define __aarch64_lane(__vec, __idx) (__AARCH64_NUM_LANES (__vec) - 1 - __idx)
  457. #else
  458. #define __aarch64_lane(__vec, __idx) __idx
  459. #endif
  460. /* vget_lane internal macro. */
  461. #define __aarch64_vget_lane_any(__vec, __index) \
  462. __extension__ \
  463. ({ \
  464. __AARCH64_LANE_CHECK (__vec, __index); \
  465. __vec[__aarch64_lane (__vec, __index)]; \
  466. })
  467. /* vset_lane and vld1_lane internal macro. */
  468. #define __aarch64_vset_lane_any(__elem, __vec, __index) \
  469. __extension__ \
  470. ({ \
  471. __AARCH64_LANE_CHECK (__vec, __index); \
  472. __vec[__aarch64_lane (__vec, __index)] = __elem; \
  473. __vec; \
  474. })
  475. /* vadd */
  476. __extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
  477. vadd_s8 (int8x8_t __a, int8x8_t __b)
  478. {
  479. return __a + __b;
  480. }
  481. __extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
  482. vadd_s16 (int16x4_t __a, int16x4_t __b)
  483. {
  484. return __a + __b;
  485. }
  486. __extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
  487. vadd_s32 (int32x2_t __a, int32x2_t __b)
  488. {
  489. return __a + __b;
  490. }
  491. __extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
  492. vadd_f32 (float32x2_t __a, float32x2_t __b)
  493. {
  494. return __a + __b;
  495. }
  496. __extension__ static __inline float64x1_t __attribute__ ((__always_inline__))
  497. vadd_f64 (float64x1_t __a, float64x1_t __b)
  498. {
  499. return __a + __b;
  500. }
  501. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  502. vadd_u8 (uint8x8_t __a, uint8x8_t __b)
  503. {
  504. return __a + __b;
  505. }
  506. __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
  507. vadd_u16 (uint16x4_t __a, uint16x4_t __b)
  508. {
  509. return __a + __b;
  510. }
  511. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  512. vadd_u32 (uint32x2_t __a, uint32x2_t __b)
  513. {
  514. return __a + __b;
  515. }
  516. __extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
  517. vadd_s64 (int64x1_t __a, int64x1_t __b)
  518. {
  519. return __a + __b;
  520. }
  521. __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
  522. vadd_u64 (uint64x1_t __a, uint64x1_t __b)
  523. {
  524. return __a + __b;
  525. }
  526. __extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
  527. vaddq_s8 (int8x16_t __a, int8x16_t __b)
  528. {
  529. return __a + __b;
  530. }
  531. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  532. vaddq_s16 (int16x8_t __a, int16x8_t __b)
  533. {
  534. return __a + __b;
  535. }
  536. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  537. vaddq_s32 (int32x4_t __a, int32x4_t __b)
  538. {
  539. return __a + __b;
  540. }
  541. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  542. vaddq_s64 (int64x2_t __a, int64x2_t __b)
  543. {
  544. return __a + __b;
  545. }
  546. __extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
  547. vaddq_f32 (float32x4_t __a, float32x4_t __b)
  548. {
  549. return __a + __b;
  550. }
  551. __extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
  552. vaddq_f64 (float64x2_t __a, float64x2_t __b)
  553. {
  554. return __a + __b;
  555. }
  556. __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
  557. vaddq_u8 (uint8x16_t __a, uint8x16_t __b)
  558. {
  559. return __a + __b;
  560. }
  561. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  562. vaddq_u16 (uint16x8_t __a, uint16x8_t __b)
  563. {
  564. return __a + __b;
  565. }
  566. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  567. vaddq_u32 (uint32x4_t __a, uint32x4_t __b)
  568. {
  569. return __a + __b;
  570. }
  571. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  572. vaddq_u64 (uint64x2_t __a, uint64x2_t __b)
  573. {
  574. return __a + __b;
  575. }
  576. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  577. vaddl_s8 (int8x8_t __a, int8x8_t __b)
  578. {
  579. return (int16x8_t) __builtin_aarch64_saddlv8qi (__a, __b);
  580. }
  581. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  582. vaddl_s16 (int16x4_t __a, int16x4_t __b)
  583. {
  584. return (int32x4_t) __builtin_aarch64_saddlv4hi (__a, __b);
  585. }
  586. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  587. vaddl_s32 (int32x2_t __a, int32x2_t __b)
  588. {
  589. return (int64x2_t) __builtin_aarch64_saddlv2si (__a, __b);
  590. }
  591. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  592. vaddl_u8 (uint8x8_t __a, uint8x8_t __b)
  593. {
  594. return (uint16x8_t) __builtin_aarch64_uaddlv8qi ((int8x8_t) __a,
  595. (int8x8_t) __b);
  596. }
  597. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  598. vaddl_u16 (uint16x4_t __a, uint16x4_t __b)
  599. {
  600. return (uint32x4_t) __builtin_aarch64_uaddlv4hi ((int16x4_t) __a,
  601. (int16x4_t) __b);
  602. }
  603. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  604. vaddl_u32 (uint32x2_t __a, uint32x2_t __b)
  605. {
  606. return (uint64x2_t) __builtin_aarch64_uaddlv2si ((int32x2_t) __a,
  607. (int32x2_t) __b);
  608. }
  609. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  610. vaddl_high_s8 (int8x16_t __a, int8x16_t __b)
  611. {
  612. return (int16x8_t) __builtin_aarch64_saddl2v16qi (__a, __b);
  613. }
  614. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  615. vaddl_high_s16 (int16x8_t __a, int16x8_t __b)
  616. {
  617. return (int32x4_t) __builtin_aarch64_saddl2v8hi (__a, __b);
  618. }
  619. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  620. vaddl_high_s32 (int32x4_t __a, int32x4_t __b)
  621. {
  622. return (int64x2_t) __builtin_aarch64_saddl2v4si (__a, __b);
  623. }
  624. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  625. vaddl_high_u8 (uint8x16_t __a, uint8x16_t __b)
  626. {
  627. return (uint16x8_t) __builtin_aarch64_uaddl2v16qi ((int8x16_t) __a,
  628. (int8x16_t) __b);
  629. }
  630. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  631. vaddl_high_u16 (uint16x8_t __a, uint16x8_t __b)
  632. {
  633. return (uint32x4_t) __builtin_aarch64_uaddl2v8hi ((int16x8_t) __a,
  634. (int16x8_t) __b);
  635. }
  636. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  637. vaddl_high_u32 (uint32x4_t __a, uint32x4_t __b)
  638. {
  639. return (uint64x2_t) __builtin_aarch64_uaddl2v4si ((int32x4_t) __a,
  640. (int32x4_t) __b);
  641. }
  642. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  643. vaddw_s8 (int16x8_t __a, int8x8_t __b)
  644. {
  645. return (int16x8_t) __builtin_aarch64_saddwv8qi (__a, __b);
  646. }
  647. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  648. vaddw_s16 (int32x4_t __a, int16x4_t __b)
  649. {
  650. return (int32x4_t) __builtin_aarch64_saddwv4hi (__a, __b);
  651. }
  652. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  653. vaddw_s32 (int64x2_t __a, int32x2_t __b)
  654. {
  655. return (int64x2_t) __builtin_aarch64_saddwv2si (__a, __b);
  656. }
  657. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  658. vaddw_u8 (uint16x8_t __a, uint8x8_t __b)
  659. {
  660. return (uint16x8_t) __builtin_aarch64_uaddwv8qi ((int16x8_t) __a,
  661. (int8x8_t) __b);
  662. }
  663. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  664. vaddw_u16 (uint32x4_t __a, uint16x4_t __b)
  665. {
  666. return (uint32x4_t) __builtin_aarch64_uaddwv4hi ((int32x4_t) __a,
  667. (int16x4_t) __b);
  668. }
  669. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  670. vaddw_u32 (uint64x2_t __a, uint32x2_t __b)
  671. {
  672. return (uint64x2_t) __builtin_aarch64_uaddwv2si ((int64x2_t) __a,
  673. (int32x2_t) __b);
  674. }
  675. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  676. vaddw_high_s8 (int16x8_t __a, int8x16_t __b)
  677. {
  678. return (int16x8_t) __builtin_aarch64_saddw2v16qi (__a, __b);
  679. }
  680. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  681. vaddw_high_s16 (int32x4_t __a, int16x8_t __b)
  682. {
  683. return (int32x4_t) __builtin_aarch64_saddw2v8hi (__a, __b);
  684. }
  685. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  686. vaddw_high_s32 (int64x2_t __a, int32x4_t __b)
  687. {
  688. return (int64x2_t) __builtin_aarch64_saddw2v4si (__a, __b);
  689. }
  690. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  691. vaddw_high_u8 (uint16x8_t __a, uint8x16_t __b)
  692. {
  693. return (uint16x8_t) __builtin_aarch64_uaddw2v16qi ((int16x8_t) __a,
  694. (int8x16_t) __b);
  695. }
  696. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  697. vaddw_high_u16 (uint32x4_t __a, uint16x8_t __b)
  698. {
  699. return (uint32x4_t) __builtin_aarch64_uaddw2v8hi ((int32x4_t) __a,
  700. (int16x8_t) __b);
  701. }
  702. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  703. vaddw_high_u32 (uint64x2_t __a, uint32x4_t __b)
  704. {
  705. return (uint64x2_t) __builtin_aarch64_uaddw2v4si ((int64x2_t) __a,
  706. (int32x4_t) __b);
  707. }
  708. __extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
  709. vhadd_s8 (int8x8_t __a, int8x8_t __b)
  710. {
  711. return (int8x8_t) __builtin_aarch64_shaddv8qi (__a, __b);
  712. }
  713. __extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
  714. vhadd_s16 (int16x4_t __a, int16x4_t __b)
  715. {
  716. return (int16x4_t) __builtin_aarch64_shaddv4hi (__a, __b);
  717. }
  718. __extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
  719. vhadd_s32 (int32x2_t __a, int32x2_t __b)
  720. {
  721. return (int32x2_t) __builtin_aarch64_shaddv2si (__a, __b);
  722. }
  723. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  724. vhadd_u8 (uint8x8_t __a, uint8x8_t __b)
  725. {
  726. return (uint8x8_t) __builtin_aarch64_uhaddv8qi ((int8x8_t) __a,
  727. (int8x8_t) __b);
  728. }
  729. __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
  730. vhadd_u16 (uint16x4_t __a, uint16x4_t __b)
  731. {
  732. return (uint16x4_t) __builtin_aarch64_uhaddv4hi ((int16x4_t) __a,
  733. (int16x4_t) __b);
  734. }
  735. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  736. vhadd_u32 (uint32x2_t __a, uint32x2_t __b)
  737. {
  738. return (uint32x2_t) __builtin_aarch64_uhaddv2si ((int32x2_t) __a,
  739. (int32x2_t) __b);
  740. }
  741. __extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
  742. vhaddq_s8 (int8x16_t __a, int8x16_t __b)
  743. {
  744. return (int8x16_t) __builtin_aarch64_shaddv16qi (__a, __b);
  745. }
  746. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  747. vhaddq_s16 (int16x8_t __a, int16x8_t __b)
  748. {
  749. return (int16x8_t) __builtin_aarch64_shaddv8hi (__a, __b);
  750. }
  751. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  752. vhaddq_s32 (int32x4_t __a, int32x4_t __b)
  753. {
  754. return (int32x4_t) __builtin_aarch64_shaddv4si (__a, __b);
  755. }
  756. __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
  757. vhaddq_u8 (uint8x16_t __a, uint8x16_t __b)
  758. {
  759. return (uint8x16_t) __builtin_aarch64_uhaddv16qi ((int8x16_t) __a,
  760. (int8x16_t) __b);
  761. }
  762. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  763. vhaddq_u16 (uint16x8_t __a, uint16x8_t __b)
  764. {
  765. return (uint16x8_t) __builtin_aarch64_uhaddv8hi ((int16x8_t) __a,
  766. (int16x8_t) __b);
  767. }
  768. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  769. vhaddq_u32 (uint32x4_t __a, uint32x4_t __b)
  770. {
  771. return (uint32x4_t) __builtin_aarch64_uhaddv4si ((int32x4_t) __a,
  772. (int32x4_t) __b);
  773. }
  774. __extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
  775. vrhadd_s8 (int8x8_t __a, int8x8_t __b)
  776. {
  777. return (int8x8_t) __builtin_aarch64_srhaddv8qi (__a, __b);
  778. }
  779. __extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
  780. vrhadd_s16 (int16x4_t __a, int16x4_t __b)
  781. {
  782. return (int16x4_t) __builtin_aarch64_srhaddv4hi (__a, __b);
  783. }
  784. __extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
  785. vrhadd_s32 (int32x2_t __a, int32x2_t __b)
  786. {
  787. return (int32x2_t) __builtin_aarch64_srhaddv2si (__a, __b);
  788. }
  789. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  790. vrhadd_u8 (uint8x8_t __a, uint8x8_t __b)
  791. {
  792. return (uint8x8_t) __builtin_aarch64_urhaddv8qi ((int8x8_t) __a,
  793. (int8x8_t) __b);
  794. }
  795. __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
  796. vrhadd_u16 (uint16x4_t __a, uint16x4_t __b)
  797. {
  798. return (uint16x4_t) __builtin_aarch64_urhaddv4hi ((int16x4_t) __a,
  799. (int16x4_t) __b);
  800. }
  801. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  802. vrhadd_u32 (uint32x2_t __a, uint32x2_t __b)
  803. {
  804. return (uint32x2_t) __builtin_aarch64_urhaddv2si ((int32x2_t) __a,
  805. (int32x2_t) __b);
  806. }
  807. __extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
  808. vrhaddq_s8 (int8x16_t __a, int8x16_t __b)
  809. {
  810. return (int8x16_t) __builtin_aarch64_srhaddv16qi (__a, __b);
  811. }
  812. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  813. vrhaddq_s16 (int16x8_t __a, int16x8_t __b)
  814. {
  815. return (int16x8_t) __builtin_aarch64_srhaddv8hi (__a, __b);
  816. }
  817. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  818. vrhaddq_s32 (int32x4_t __a, int32x4_t __b)
  819. {
  820. return (int32x4_t) __builtin_aarch64_srhaddv4si (__a, __b);
  821. }
  822. __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
  823. vrhaddq_u8 (uint8x16_t __a, uint8x16_t __b)
  824. {
  825. return (uint8x16_t) __builtin_aarch64_urhaddv16qi ((int8x16_t) __a,
  826. (int8x16_t) __b);
  827. }
  828. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  829. vrhaddq_u16 (uint16x8_t __a, uint16x8_t __b)
  830. {
  831. return (uint16x8_t) __builtin_aarch64_urhaddv8hi ((int16x8_t) __a,
  832. (int16x8_t) __b);
  833. }
  834. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  835. vrhaddq_u32 (uint32x4_t __a, uint32x4_t __b)
  836. {
  837. return (uint32x4_t) __builtin_aarch64_urhaddv4si ((int32x4_t) __a,
  838. (int32x4_t) __b);
  839. }
  840. __extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
  841. vaddhn_s16 (int16x8_t __a, int16x8_t __b)
  842. {
  843. return (int8x8_t) __builtin_aarch64_addhnv8hi (__a, __b);
  844. }
  845. __extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
  846. vaddhn_s32 (int32x4_t __a, int32x4_t __b)
  847. {
  848. return (int16x4_t) __builtin_aarch64_addhnv4si (__a, __b);
  849. }
  850. __extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
  851. vaddhn_s64 (int64x2_t __a, int64x2_t __b)
  852. {
  853. return (int32x2_t) __builtin_aarch64_addhnv2di (__a, __b);
  854. }
  855. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  856. vaddhn_u16 (uint16x8_t __a, uint16x8_t __b)
  857. {
  858. return (uint8x8_t) __builtin_aarch64_addhnv8hi ((int16x8_t) __a,
  859. (int16x8_t) __b);
  860. }
  861. __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
  862. vaddhn_u32 (uint32x4_t __a, uint32x4_t __b)
  863. {
  864. return (uint16x4_t) __builtin_aarch64_addhnv4si ((int32x4_t) __a,
  865. (int32x4_t) __b);
  866. }
  867. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  868. vaddhn_u64 (uint64x2_t __a, uint64x2_t __b)
  869. {
  870. return (uint32x2_t) __builtin_aarch64_addhnv2di ((int64x2_t) __a,
  871. (int64x2_t) __b);
  872. }
  873. __extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
  874. vraddhn_s16 (int16x8_t __a, int16x8_t __b)
  875. {
  876. return (int8x8_t) __builtin_aarch64_raddhnv8hi (__a, __b);
  877. }
  878. __extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
  879. vraddhn_s32 (int32x4_t __a, int32x4_t __b)
  880. {
  881. return (int16x4_t) __builtin_aarch64_raddhnv4si (__a, __b);
  882. }
  883. __extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
  884. vraddhn_s64 (int64x2_t __a, int64x2_t __b)
  885. {
  886. return (int32x2_t) __builtin_aarch64_raddhnv2di (__a, __b);
  887. }
  888. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  889. vraddhn_u16 (uint16x8_t __a, uint16x8_t __b)
  890. {
  891. return (uint8x8_t) __builtin_aarch64_raddhnv8hi ((int16x8_t) __a,
  892. (int16x8_t) __b);
  893. }
  894. __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
  895. vraddhn_u32 (uint32x4_t __a, uint32x4_t __b)
  896. {
  897. return (uint16x4_t) __builtin_aarch64_raddhnv4si ((int32x4_t) __a,
  898. (int32x4_t) __b);
  899. }
  900. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  901. vraddhn_u64 (uint64x2_t __a, uint64x2_t __b)
  902. {
  903. return (uint32x2_t) __builtin_aarch64_raddhnv2di ((int64x2_t) __a,
  904. (int64x2_t) __b);
  905. }
  906. __extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
  907. vaddhn_high_s16 (int8x8_t __a, int16x8_t __b, int16x8_t __c)
  908. {
  909. return (int8x16_t) __builtin_aarch64_addhn2v8hi (__a, __b, __c);
  910. }
  911. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  912. vaddhn_high_s32 (int16x4_t __a, int32x4_t __b, int32x4_t __c)
  913. {
  914. return (int16x8_t) __builtin_aarch64_addhn2v4si (__a, __b, __c);
  915. }
  916. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  917. vaddhn_high_s64 (int32x2_t __a, int64x2_t __b, int64x2_t __c)
  918. {
  919. return (int32x4_t) __builtin_aarch64_addhn2v2di (__a, __b, __c);
  920. }
  921. __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
  922. vaddhn_high_u16 (uint8x8_t __a, uint16x8_t __b, uint16x8_t __c)
  923. {
  924. return (uint8x16_t) __builtin_aarch64_addhn2v8hi ((int8x8_t) __a,
  925. (int16x8_t) __b,
  926. (int16x8_t) __c);
  927. }
  928. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  929. vaddhn_high_u32 (uint16x4_t __a, uint32x4_t __b, uint32x4_t __c)
  930. {
  931. return (uint16x8_t) __builtin_aarch64_addhn2v4si ((int16x4_t) __a,
  932. (int32x4_t) __b,
  933. (int32x4_t) __c);
  934. }
  935. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  936. vaddhn_high_u64 (uint32x2_t __a, uint64x2_t __b, uint64x2_t __c)
  937. {
  938. return (uint32x4_t) __builtin_aarch64_addhn2v2di ((int32x2_t) __a,
  939. (int64x2_t) __b,
  940. (int64x2_t) __c);
  941. }
  942. __extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
  943. vraddhn_high_s16 (int8x8_t __a, int16x8_t __b, int16x8_t __c)
  944. {
  945. return (int8x16_t) __builtin_aarch64_raddhn2v8hi (__a, __b, __c);
  946. }
  947. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  948. vraddhn_high_s32 (int16x4_t __a, int32x4_t __b, int32x4_t __c)
  949. {
  950. return (int16x8_t) __builtin_aarch64_raddhn2v4si (__a, __b, __c);
  951. }
  952. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  953. vraddhn_high_s64 (int32x2_t __a, int64x2_t __b, int64x2_t __c)
  954. {
  955. return (int32x4_t) __builtin_aarch64_raddhn2v2di (__a, __b, __c);
  956. }
  957. __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
  958. vraddhn_high_u16 (uint8x8_t __a, uint16x8_t __b, uint16x8_t __c)
  959. {
  960. return (uint8x16_t) __builtin_aarch64_raddhn2v8hi ((int8x8_t) __a,
  961. (int16x8_t) __b,
  962. (int16x8_t) __c);
  963. }
  964. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  965. vraddhn_high_u32 (uint16x4_t __a, uint32x4_t __b, uint32x4_t __c)
  966. {
  967. return (uint16x8_t) __builtin_aarch64_raddhn2v4si ((int16x4_t) __a,
  968. (int32x4_t) __b,
  969. (int32x4_t) __c);
  970. }
  971. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  972. vraddhn_high_u64 (uint32x2_t __a, uint64x2_t __b, uint64x2_t __c)
  973. {
  974. return (uint32x4_t) __builtin_aarch64_raddhn2v2di ((int32x2_t) __a,
  975. (int64x2_t) __b,
  976. (int64x2_t) __c);
  977. }
  978. __extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
  979. vdiv_f32 (float32x2_t __a, float32x2_t __b)
  980. {
  981. return __a / __b;
  982. }
  983. __extension__ static __inline float64x1_t __attribute__ ((__always_inline__))
  984. vdiv_f64 (float64x1_t __a, float64x1_t __b)
  985. {
  986. return __a / __b;
  987. }
  988. __extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
  989. vdivq_f32 (float32x4_t __a, float32x4_t __b)
  990. {
  991. return __a / __b;
  992. }
  993. __extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
  994. vdivq_f64 (float64x2_t __a, float64x2_t __b)
  995. {
  996. return __a / __b;
  997. }
  998. __extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
  999. vmul_s8 (int8x8_t __a, int8x8_t __b)
  1000. {
  1001. return __a * __b;
  1002. }
  1003. __extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
  1004. vmul_s16 (int16x4_t __a, int16x4_t __b)
  1005. {
  1006. return __a * __b;
  1007. }
  1008. __extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
  1009. vmul_s32 (int32x2_t __a, int32x2_t __b)
  1010. {
  1011. return __a * __b;
  1012. }
  1013. __extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
  1014. vmul_f32 (float32x2_t __a, float32x2_t __b)
  1015. {
  1016. return __a * __b;
  1017. }
  1018. __extension__ static __inline float64x1_t __attribute__ ((__always_inline__))
  1019. vmul_f64 (float64x1_t __a, float64x1_t __b)
  1020. {
  1021. return __a * __b;
  1022. }
  1023. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  1024. vmul_u8 (uint8x8_t __a, uint8x8_t __b)
  1025. {
  1026. return __a * __b;
  1027. }
  1028. __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
  1029. vmul_u16 (uint16x4_t __a, uint16x4_t __b)
  1030. {
  1031. return __a * __b;
  1032. }
  1033. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  1034. vmul_u32 (uint32x2_t __a, uint32x2_t __b)
  1035. {
  1036. return __a * __b;
  1037. }
  1038. __extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
  1039. vmul_p8 (poly8x8_t __a, poly8x8_t __b)
  1040. {
  1041. return (poly8x8_t) __builtin_aarch64_pmulv8qi ((int8x8_t) __a,
  1042. (int8x8_t) __b);
  1043. }
  1044. __extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
  1045. vmulq_s8 (int8x16_t __a, int8x16_t __b)
  1046. {
  1047. return __a * __b;
  1048. }
  1049. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  1050. vmulq_s16 (int16x8_t __a, int16x8_t __b)
  1051. {
  1052. return __a * __b;
  1053. }
  1054. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  1055. vmulq_s32 (int32x4_t __a, int32x4_t __b)
  1056. {
  1057. return __a * __b;
  1058. }
  1059. __extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
  1060. vmulq_f32 (float32x4_t __a, float32x4_t __b)
  1061. {
  1062. return __a * __b;
  1063. }
  1064. __extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
  1065. vmulq_f64 (float64x2_t __a, float64x2_t __b)
  1066. {
  1067. return __a * __b;
  1068. }
  1069. __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
  1070. vmulq_u8 (uint8x16_t __a, uint8x16_t __b)
  1071. {
  1072. return __a * __b;
  1073. }
  1074. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  1075. vmulq_u16 (uint16x8_t __a, uint16x8_t __b)
  1076. {
  1077. return __a * __b;
  1078. }
  1079. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  1080. vmulq_u32 (uint32x4_t __a, uint32x4_t __b)
  1081. {
  1082. return __a * __b;
  1083. }
  1084. __extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
  1085. vmulq_p8 (poly8x16_t __a, poly8x16_t __b)
  1086. {
  1087. return (poly8x16_t) __builtin_aarch64_pmulv16qi ((int8x16_t) __a,
  1088. (int8x16_t) __b);
  1089. }
  1090. __extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
  1091. vand_s8 (int8x8_t __a, int8x8_t __b)
  1092. {
  1093. return __a & __b;
  1094. }
  1095. __extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
  1096. vand_s16 (int16x4_t __a, int16x4_t __b)
  1097. {
  1098. return __a & __b;
  1099. }
  1100. __extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
  1101. vand_s32 (int32x2_t __a, int32x2_t __b)
  1102. {
  1103. return __a & __b;
  1104. }
  1105. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  1106. vand_u8 (uint8x8_t __a, uint8x8_t __b)
  1107. {
  1108. return __a & __b;
  1109. }
  1110. __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
  1111. vand_u16 (uint16x4_t __a, uint16x4_t __b)
  1112. {
  1113. return __a & __b;
  1114. }
  1115. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  1116. vand_u32 (uint32x2_t __a, uint32x2_t __b)
  1117. {
  1118. return __a & __b;
  1119. }
  1120. __extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
  1121. vand_s64 (int64x1_t __a, int64x1_t __b)
  1122. {
  1123. return __a & __b;
  1124. }
  1125. __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
  1126. vand_u64 (uint64x1_t __a, uint64x1_t __b)
  1127. {
  1128. return __a & __b;
  1129. }
  1130. __extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
  1131. vandq_s8 (int8x16_t __a, int8x16_t __b)
  1132. {
  1133. return __a & __b;
  1134. }
  1135. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  1136. vandq_s16 (int16x8_t __a, int16x8_t __b)
  1137. {
  1138. return __a & __b;
  1139. }
  1140. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  1141. vandq_s32 (int32x4_t __a, int32x4_t __b)
  1142. {
  1143. return __a & __b;
  1144. }
  1145. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  1146. vandq_s64 (int64x2_t __a, int64x2_t __b)
  1147. {
  1148. return __a & __b;
  1149. }
  1150. __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
  1151. vandq_u8 (uint8x16_t __a, uint8x16_t __b)
  1152. {
  1153. return __a & __b;
  1154. }
  1155. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  1156. vandq_u16 (uint16x8_t __a, uint16x8_t __b)
  1157. {
  1158. return __a & __b;
  1159. }
  1160. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  1161. vandq_u32 (uint32x4_t __a, uint32x4_t __b)
  1162. {
  1163. return __a & __b;
  1164. }
  1165. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  1166. vandq_u64 (uint64x2_t __a, uint64x2_t __b)
  1167. {
  1168. return __a & __b;
  1169. }
  1170. __extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
  1171. vorr_s8 (int8x8_t __a, int8x8_t __b)
  1172. {
  1173. return __a | __b;
  1174. }
  1175. __extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
  1176. vorr_s16 (int16x4_t __a, int16x4_t __b)
  1177. {
  1178. return __a | __b;
  1179. }
  1180. __extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
  1181. vorr_s32 (int32x2_t __a, int32x2_t __b)
  1182. {
  1183. return __a | __b;
  1184. }
  1185. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  1186. vorr_u8 (uint8x8_t __a, uint8x8_t __b)
  1187. {
  1188. return __a | __b;
  1189. }
  1190. __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
  1191. vorr_u16 (uint16x4_t __a, uint16x4_t __b)
  1192. {
  1193. return __a | __b;
  1194. }
  1195. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  1196. vorr_u32 (uint32x2_t __a, uint32x2_t __b)
  1197. {
  1198. return __a | __b;
  1199. }
  1200. __extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
  1201. vorr_s64 (int64x1_t __a, int64x1_t __b)
  1202. {
  1203. return __a | __b;
  1204. }
  1205. __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
  1206. vorr_u64 (uint64x1_t __a, uint64x1_t __b)
  1207. {
  1208. return __a | __b;
  1209. }
  1210. __extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
  1211. vorrq_s8 (int8x16_t __a, int8x16_t __b)
  1212. {
  1213. return __a | __b;
  1214. }
  1215. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  1216. vorrq_s16 (int16x8_t __a, int16x8_t __b)
  1217. {
  1218. return __a | __b;
  1219. }
  1220. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  1221. vorrq_s32 (int32x4_t __a, int32x4_t __b)
  1222. {
  1223. return __a | __b;
  1224. }
  1225. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  1226. vorrq_s64 (int64x2_t __a, int64x2_t __b)
  1227. {
  1228. return __a | __b;
  1229. }
  1230. __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
  1231. vorrq_u8 (uint8x16_t __a, uint8x16_t __b)
  1232. {
  1233. return __a | __b;
  1234. }
  1235. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  1236. vorrq_u16 (uint16x8_t __a, uint16x8_t __b)
  1237. {
  1238. return __a | __b;
  1239. }
  1240. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  1241. vorrq_u32 (uint32x4_t __a, uint32x4_t __b)
  1242. {
  1243. return __a | __b;
  1244. }
  1245. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  1246. vorrq_u64 (uint64x2_t __a, uint64x2_t __b)
  1247. {
  1248. return __a | __b;
  1249. }
  1250. __extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
  1251. veor_s8 (int8x8_t __a, int8x8_t __b)
  1252. {
  1253. return __a ^ __b;
  1254. }
  1255. __extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
  1256. veor_s16 (int16x4_t __a, int16x4_t __b)
  1257. {
  1258. return __a ^ __b;
  1259. }
  1260. __extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
  1261. veor_s32 (int32x2_t __a, int32x2_t __b)
  1262. {
  1263. return __a ^ __b;
  1264. }
  1265. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  1266. veor_u8 (uint8x8_t __a, uint8x8_t __b)
  1267. {
  1268. return __a ^ __b;
  1269. }
  1270. __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
  1271. veor_u16 (uint16x4_t __a, uint16x4_t __b)
  1272. {
  1273. return __a ^ __b;
  1274. }
  1275. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  1276. veor_u32 (uint32x2_t __a, uint32x2_t __b)
  1277. {
  1278. return __a ^ __b;
  1279. }
  1280. __extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
  1281. veor_s64 (int64x1_t __a, int64x1_t __b)
  1282. {
  1283. return __a ^ __b;
  1284. }
  1285. __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
  1286. veor_u64 (uint64x1_t __a, uint64x1_t __b)
  1287. {
  1288. return __a ^ __b;
  1289. }
  1290. __extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
  1291. veorq_s8 (int8x16_t __a, int8x16_t __b)
  1292. {
  1293. return __a ^ __b;
  1294. }
  1295. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  1296. veorq_s16 (int16x8_t __a, int16x8_t __b)
  1297. {
  1298. return __a ^ __b;
  1299. }
  1300. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  1301. veorq_s32 (int32x4_t __a, int32x4_t __b)
  1302. {
  1303. return __a ^ __b;
  1304. }
  1305. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  1306. veorq_s64 (int64x2_t __a, int64x2_t __b)
  1307. {
  1308. return __a ^ __b;
  1309. }
  1310. __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
  1311. veorq_u8 (uint8x16_t __a, uint8x16_t __b)
  1312. {
  1313. return __a ^ __b;
  1314. }
  1315. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  1316. veorq_u16 (uint16x8_t __a, uint16x8_t __b)
  1317. {
  1318. return __a ^ __b;
  1319. }
  1320. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  1321. veorq_u32 (uint32x4_t __a, uint32x4_t __b)
  1322. {
  1323. return __a ^ __b;
  1324. }
  1325. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  1326. veorq_u64 (uint64x2_t __a, uint64x2_t __b)
  1327. {
  1328. return __a ^ __b;
  1329. }
  1330. __extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
  1331. vbic_s8 (int8x8_t __a, int8x8_t __b)
  1332. {
  1333. return __a & ~__b;
  1334. }
  1335. __extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
  1336. vbic_s16 (int16x4_t __a, int16x4_t __b)
  1337. {
  1338. return __a & ~__b;
  1339. }
  1340. __extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
  1341. vbic_s32 (int32x2_t __a, int32x2_t __b)
  1342. {
  1343. return __a & ~__b;
  1344. }
  1345. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  1346. vbic_u8 (uint8x8_t __a, uint8x8_t __b)
  1347. {
  1348. return __a & ~__b;
  1349. }
  1350. __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
  1351. vbic_u16 (uint16x4_t __a, uint16x4_t __b)
  1352. {
  1353. return __a & ~__b;
  1354. }
  1355. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  1356. vbic_u32 (uint32x2_t __a, uint32x2_t __b)
  1357. {
  1358. return __a & ~__b;
  1359. }
  1360. __extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
  1361. vbic_s64 (int64x1_t __a, int64x1_t __b)
  1362. {
  1363. return __a & ~__b;
  1364. }
  1365. __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
  1366. vbic_u64 (uint64x1_t __a, uint64x1_t __b)
  1367. {
  1368. return __a & ~__b;
  1369. }
  1370. __extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
  1371. vbicq_s8 (int8x16_t __a, int8x16_t __b)
  1372. {
  1373. return __a & ~__b;
  1374. }
  1375. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  1376. vbicq_s16 (int16x8_t __a, int16x8_t __b)
  1377. {
  1378. return __a & ~__b;
  1379. }
  1380. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  1381. vbicq_s32 (int32x4_t __a, int32x4_t __b)
  1382. {
  1383. return __a & ~__b;
  1384. }
  1385. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  1386. vbicq_s64 (int64x2_t __a, int64x2_t __b)
  1387. {
  1388. return __a & ~__b;
  1389. }
  1390. __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
  1391. vbicq_u8 (uint8x16_t __a, uint8x16_t __b)
  1392. {
  1393. return __a & ~__b;
  1394. }
  1395. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  1396. vbicq_u16 (uint16x8_t __a, uint16x8_t __b)
  1397. {
  1398. return __a & ~__b;
  1399. }
  1400. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  1401. vbicq_u32 (uint32x4_t __a, uint32x4_t __b)
  1402. {
  1403. return __a & ~__b;
  1404. }
  1405. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  1406. vbicq_u64 (uint64x2_t __a, uint64x2_t __b)
  1407. {
  1408. return __a & ~__b;
  1409. }
  1410. __extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
  1411. vorn_s8 (int8x8_t __a, int8x8_t __b)
  1412. {
  1413. return __a | ~__b;
  1414. }
  1415. __extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
  1416. vorn_s16 (int16x4_t __a, int16x4_t __b)
  1417. {
  1418. return __a | ~__b;
  1419. }
  1420. __extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
  1421. vorn_s32 (int32x2_t __a, int32x2_t __b)
  1422. {
  1423. return __a | ~__b;
  1424. }
  1425. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  1426. vorn_u8 (uint8x8_t __a, uint8x8_t __b)
  1427. {
  1428. return __a | ~__b;
  1429. }
  1430. __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
  1431. vorn_u16 (uint16x4_t __a, uint16x4_t __b)
  1432. {
  1433. return __a | ~__b;
  1434. }
  1435. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  1436. vorn_u32 (uint32x2_t __a, uint32x2_t __b)
  1437. {
  1438. return __a | ~__b;
  1439. }
  1440. __extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
  1441. vorn_s64 (int64x1_t __a, int64x1_t __b)
  1442. {
  1443. return __a | ~__b;
  1444. }
  1445. __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
  1446. vorn_u64 (uint64x1_t __a, uint64x1_t __b)
  1447. {
  1448. return __a | ~__b;
  1449. }
  1450. __extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
  1451. vornq_s8 (int8x16_t __a, int8x16_t __b)
  1452. {
  1453. return __a | ~__b;
  1454. }
  1455. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  1456. vornq_s16 (int16x8_t __a, int16x8_t __b)
  1457. {
  1458. return __a | ~__b;
  1459. }
  1460. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  1461. vornq_s32 (int32x4_t __a, int32x4_t __b)
  1462. {
  1463. return __a | ~__b;
  1464. }
  1465. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  1466. vornq_s64 (int64x2_t __a, int64x2_t __b)
  1467. {
  1468. return __a | ~__b;
  1469. }
  1470. __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
  1471. vornq_u8 (uint8x16_t __a, uint8x16_t __b)
  1472. {
  1473. return __a | ~__b;
  1474. }
  1475. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  1476. vornq_u16 (uint16x8_t __a, uint16x8_t __b)
  1477. {
  1478. return __a | ~__b;
  1479. }
  1480. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  1481. vornq_u32 (uint32x4_t __a, uint32x4_t __b)
  1482. {
  1483. return __a | ~__b;
  1484. }
  1485. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  1486. vornq_u64 (uint64x2_t __a, uint64x2_t __b)
  1487. {
  1488. return __a | ~__b;
  1489. }
  1490. __extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
  1491. vsub_s8 (int8x8_t __a, int8x8_t __b)
  1492. {
  1493. return __a - __b;
  1494. }
  1495. __extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
  1496. vsub_s16 (int16x4_t __a, int16x4_t __b)
  1497. {
  1498. return __a - __b;
  1499. }
  1500. __extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
  1501. vsub_s32 (int32x2_t __a, int32x2_t __b)
  1502. {
  1503. return __a - __b;
  1504. }
  1505. __extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
  1506. vsub_f32 (float32x2_t __a, float32x2_t __b)
  1507. {
  1508. return __a - __b;
  1509. }
  1510. __extension__ static __inline float64x1_t __attribute__ ((__always_inline__))
  1511. vsub_f64 (float64x1_t __a, float64x1_t __b)
  1512. {
  1513. return __a - __b;
  1514. }
  1515. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  1516. vsub_u8 (uint8x8_t __a, uint8x8_t __b)
  1517. {
  1518. return __a - __b;
  1519. }
  1520. __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
  1521. vsub_u16 (uint16x4_t __a, uint16x4_t __b)
  1522. {
  1523. return __a - __b;
  1524. }
  1525. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  1526. vsub_u32 (uint32x2_t __a, uint32x2_t __b)
  1527. {
  1528. return __a - __b;
  1529. }
  1530. __extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
  1531. vsub_s64 (int64x1_t __a, int64x1_t __b)
  1532. {
  1533. return __a - __b;
  1534. }
  1535. __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
  1536. vsub_u64 (uint64x1_t __a, uint64x1_t __b)
  1537. {
  1538. return __a - __b;
  1539. }
  1540. __extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
  1541. vsubq_s8 (int8x16_t __a, int8x16_t __b)
  1542. {
  1543. return __a - __b;
  1544. }
  1545. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  1546. vsubq_s16 (int16x8_t __a, int16x8_t __b)
  1547. {
  1548. return __a - __b;
  1549. }
  1550. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  1551. vsubq_s32 (int32x4_t __a, int32x4_t __b)
  1552. {
  1553. return __a - __b;
  1554. }
  1555. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  1556. vsubq_s64 (int64x2_t __a, int64x2_t __b)
  1557. {
  1558. return __a - __b;
  1559. }
  1560. __extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
  1561. vsubq_f32 (float32x4_t __a, float32x4_t __b)
  1562. {
  1563. return __a - __b;
  1564. }
  1565. __extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
  1566. vsubq_f64 (float64x2_t __a, float64x2_t __b)
  1567. {
  1568. return __a - __b;
  1569. }
  1570. __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
  1571. vsubq_u8 (uint8x16_t __a, uint8x16_t __b)
  1572. {
  1573. return __a - __b;
  1574. }
  1575. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  1576. vsubq_u16 (uint16x8_t __a, uint16x8_t __b)
  1577. {
  1578. return __a - __b;
  1579. }
  1580. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  1581. vsubq_u32 (uint32x4_t __a, uint32x4_t __b)
  1582. {
  1583. return __a - __b;
  1584. }
  1585. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  1586. vsubq_u64 (uint64x2_t __a, uint64x2_t __b)
  1587. {
  1588. return __a - __b;
  1589. }
  1590. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  1591. vsubl_s8 (int8x8_t __a, int8x8_t __b)
  1592. {
  1593. return (int16x8_t) __builtin_aarch64_ssublv8qi (__a, __b);
  1594. }
  1595. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  1596. vsubl_s16 (int16x4_t __a, int16x4_t __b)
  1597. {
  1598. return (int32x4_t) __builtin_aarch64_ssublv4hi (__a, __b);
  1599. }
  1600. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  1601. vsubl_s32 (int32x2_t __a, int32x2_t __b)
  1602. {
  1603. return (int64x2_t) __builtin_aarch64_ssublv2si (__a, __b);
  1604. }
  1605. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  1606. vsubl_u8 (uint8x8_t __a, uint8x8_t __b)
  1607. {
  1608. return (uint16x8_t) __builtin_aarch64_usublv8qi ((int8x8_t) __a,
  1609. (int8x8_t) __b);
  1610. }
  1611. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  1612. vsubl_u16 (uint16x4_t __a, uint16x4_t __b)
  1613. {
  1614. return (uint32x4_t) __builtin_aarch64_usublv4hi ((int16x4_t) __a,
  1615. (int16x4_t) __b);
  1616. }
  1617. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  1618. vsubl_u32 (uint32x2_t __a, uint32x2_t __b)
  1619. {
  1620. return (uint64x2_t) __builtin_aarch64_usublv2si ((int32x2_t) __a,
  1621. (int32x2_t) __b);
  1622. }
  1623. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  1624. vsubl_high_s8 (int8x16_t __a, int8x16_t __b)
  1625. {
  1626. return (int16x8_t) __builtin_aarch64_ssubl2v16qi (__a, __b);
  1627. }
  1628. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  1629. vsubl_high_s16 (int16x8_t __a, int16x8_t __b)
  1630. {
  1631. return (int32x4_t) __builtin_aarch64_ssubl2v8hi (__a, __b);
  1632. }
  1633. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  1634. vsubl_high_s32 (int32x4_t __a, int32x4_t __b)
  1635. {
  1636. return (int64x2_t) __builtin_aarch64_ssubl2v4si (__a, __b);
  1637. }
  1638. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  1639. vsubl_high_u8 (uint8x16_t __a, uint8x16_t __b)
  1640. {
  1641. return (uint16x8_t) __builtin_aarch64_usubl2v16qi ((int8x16_t) __a,
  1642. (int8x16_t) __b);
  1643. }
  1644. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  1645. vsubl_high_u16 (uint16x8_t __a, uint16x8_t __b)
  1646. {
  1647. return (uint32x4_t) __builtin_aarch64_usubl2v8hi ((int16x8_t) __a,
  1648. (int16x8_t) __b);
  1649. }
  1650. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  1651. vsubl_high_u32 (uint32x4_t __a, uint32x4_t __b)
  1652. {
  1653. return (uint64x2_t) __builtin_aarch64_usubl2v4si ((int32x4_t) __a,
  1654. (int32x4_t) __b);
  1655. }
  1656. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  1657. vsubw_s8 (int16x8_t __a, int8x8_t __b)
  1658. {
  1659. return (int16x8_t) __builtin_aarch64_ssubwv8qi (__a, __b);
  1660. }
  1661. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  1662. vsubw_s16 (int32x4_t __a, int16x4_t __b)
  1663. {
  1664. return (int32x4_t) __builtin_aarch64_ssubwv4hi (__a, __b);
  1665. }
  1666. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  1667. vsubw_s32 (int64x2_t __a, int32x2_t __b)
  1668. {
  1669. return (int64x2_t) __builtin_aarch64_ssubwv2si (__a, __b);
  1670. }
  1671. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  1672. vsubw_u8 (uint16x8_t __a, uint8x8_t __b)
  1673. {
  1674. return (uint16x8_t) __builtin_aarch64_usubwv8qi ((int16x8_t) __a,
  1675. (int8x8_t) __b);
  1676. }
  1677. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  1678. vsubw_u16 (uint32x4_t __a, uint16x4_t __b)
  1679. {
  1680. return (uint32x4_t) __builtin_aarch64_usubwv4hi ((int32x4_t) __a,
  1681. (int16x4_t) __b);
  1682. }
  1683. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  1684. vsubw_u32 (uint64x2_t __a, uint32x2_t __b)
  1685. {
  1686. return (uint64x2_t) __builtin_aarch64_usubwv2si ((int64x2_t) __a,
  1687. (int32x2_t) __b);
  1688. }
  1689. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  1690. vsubw_high_s8 (int16x8_t __a, int8x16_t __b)
  1691. {
  1692. return (int16x8_t) __builtin_aarch64_ssubw2v16qi (__a, __b);
  1693. }
  1694. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  1695. vsubw_high_s16 (int32x4_t __a, int16x8_t __b)
  1696. {
  1697. return (int32x4_t) __builtin_aarch64_ssubw2v8hi (__a, __b);
  1698. }
  1699. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  1700. vsubw_high_s32 (int64x2_t __a, int32x4_t __b)
  1701. {
  1702. return (int64x2_t) __builtin_aarch64_ssubw2v4si (__a, __b);
  1703. }
  1704. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  1705. vsubw_high_u8 (uint16x8_t __a, uint8x16_t __b)
  1706. {
  1707. return (uint16x8_t) __builtin_aarch64_usubw2v16qi ((int16x8_t) __a,
  1708. (int8x16_t) __b);
  1709. }
  1710. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  1711. vsubw_high_u16 (uint32x4_t __a, uint16x8_t __b)
  1712. {
  1713. return (uint32x4_t) __builtin_aarch64_usubw2v8hi ((int32x4_t) __a,
  1714. (int16x8_t) __b);
  1715. }
  1716. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  1717. vsubw_high_u32 (uint64x2_t __a, uint32x4_t __b)
  1718. {
  1719. return (uint64x2_t) __builtin_aarch64_usubw2v4si ((int64x2_t) __a,
  1720. (int32x4_t) __b);
  1721. }
  1722. __extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
  1723. vqadd_s8 (int8x8_t __a, int8x8_t __b)
  1724. {
  1725. return (int8x8_t) __builtin_aarch64_sqaddv8qi (__a, __b);
  1726. }
  1727. __extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
  1728. vqadd_s16 (int16x4_t __a, int16x4_t __b)
  1729. {
  1730. return (int16x4_t) __builtin_aarch64_sqaddv4hi (__a, __b);
  1731. }
  1732. __extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
  1733. vqadd_s32 (int32x2_t __a, int32x2_t __b)
  1734. {
  1735. return (int32x2_t) __builtin_aarch64_sqaddv2si (__a, __b);
  1736. }
  1737. __extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
  1738. vqadd_s64 (int64x1_t __a, int64x1_t __b)
  1739. {
  1740. return (int64x1_t) {__builtin_aarch64_sqadddi (__a[0], __b[0])};
  1741. }
  1742. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  1743. vqadd_u8 (uint8x8_t __a, uint8x8_t __b)
  1744. {
  1745. return __builtin_aarch64_uqaddv8qi_uuu (__a, __b);
  1746. }
  1747. __extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
  1748. vhsub_s8 (int8x8_t __a, int8x8_t __b)
  1749. {
  1750. return (int8x8_t)__builtin_aarch64_shsubv8qi (__a, __b);
  1751. }
  1752. __extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
  1753. vhsub_s16 (int16x4_t __a, int16x4_t __b)
  1754. {
  1755. return (int16x4_t) __builtin_aarch64_shsubv4hi (__a, __b);
  1756. }
  1757. __extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
  1758. vhsub_s32 (int32x2_t __a, int32x2_t __b)
  1759. {
  1760. return (int32x2_t) __builtin_aarch64_shsubv2si (__a, __b);
  1761. }
  1762. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  1763. vhsub_u8 (uint8x8_t __a, uint8x8_t __b)
  1764. {
  1765. return (uint8x8_t) __builtin_aarch64_uhsubv8qi ((int8x8_t) __a,
  1766. (int8x8_t) __b);
  1767. }
  1768. __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
  1769. vhsub_u16 (uint16x4_t __a, uint16x4_t __b)
  1770. {
  1771. return (uint16x4_t) __builtin_aarch64_uhsubv4hi ((int16x4_t) __a,
  1772. (int16x4_t) __b);
  1773. }
  1774. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  1775. vhsub_u32 (uint32x2_t __a, uint32x2_t __b)
  1776. {
  1777. return (uint32x2_t) __builtin_aarch64_uhsubv2si ((int32x2_t) __a,
  1778. (int32x2_t) __b);
  1779. }
  1780. __extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
  1781. vhsubq_s8 (int8x16_t __a, int8x16_t __b)
  1782. {
  1783. return (int8x16_t) __builtin_aarch64_shsubv16qi (__a, __b);
  1784. }
  1785. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  1786. vhsubq_s16 (int16x8_t __a, int16x8_t __b)
  1787. {
  1788. return (int16x8_t) __builtin_aarch64_shsubv8hi (__a, __b);
  1789. }
  1790. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  1791. vhsubq_s32 (int32x4_t __a, int32x4_t __b)
  1792. {
  1793. return (int32x4_t) __builtin_aarch64_shsubv4si (__a, __b);
  1794. }
  1795. __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
  1796. vhsubq_u8 (uint8x16_t __a, uint8x16_t __b)
  1797. {
  1798. return (uint8x16_t) __builtin_aarch64_uhsubv16qi ((int8x16_t) __a,
  1799. (int8x16_t) __b);
  1800. }
  1801. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  1802. vhsubq_u16 (uint16x8_t __a, uint16x8_t __b)
  1803. {
  1804. return (uint16x8_t) __builtin_aarch64_uhsubv8hi ((int16x8_t) __a,
  1805. (int16x8_t) __b);
  1806. }
  1807. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  1808. vhsubq_u32 (uint32x4_t __a, uint32x4_t __b)
  1809. {
  1810. return (uint32x4_t) __builtin_aarch64_uhsubv4si ((int32x4_t) __a,
  1811. (int32x4_t) __b);
  1812. }
  1813. __extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
  1814. vsubhn_s16 (int16x8_t __a, int16x8_t __b)
  1815. {
  1816. return (int8x8_t) __builtin_aarch64_subhnv8hi (__a, __b);
  1817. }
  1818. __extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
  1819. vsubhn_s32 (int32x4_t __a, int32x4_t __b)
  1820. {
  1821. return (int16x4_t) __builtin_aarch64_subhnv4si (__a, __b);
  1822. }
  1823. __extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
  1824. vsubhn_s64 (int64x2_t __a, int64x2_t __b)
  1825. {
  1826. return (int32x2_t) __builtin_aarch64_subhnv2di (__a, __b);
  1827. }
  1828. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  1829. vsubhn_u16 (uint16x8_t __a, uint16x8_t __b)
  1830. {
  1831. return (uint8x8_t) __builtin_aarch64_subhnv8hi ((int16x8_t) __a,
  1832. (int16x8_t) __b);
  1833. }
  1834. __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
  1835. vsubhn_u32 (uint32x4_t __a, uint32x4_t __b)
  1836. {
  1837. return (uint16x4_t) __builtin_aarch64_subhnv4si ((int32x4_t) __a,
  1838. (int32x4_t) __b);
  1839. }
  1840. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  1841. vsubhn_u64 (uint64x2_t __a, uint64x2_t __b)
  1842. {
  1843. return (uint32x2_t) __builtin_aarch64_subhnv2di ((int64x2_t) __a,
  1844. (int64x2_t) __b);
  1845. }
  1846. __extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
  1847. vrsubhn_s16 (int16x8_t __a, int16x8_t __b)
  1848. {
  1849. return (int8x8_t) __builtin_aarch64_rsubhnv8hi (__a, __b);
  1850. }
  1851. __extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
  1852. vrsubhn_s32 (int32x4_t __a, int32x4_t __b)
  1853. {
  1854. return (int16x4_t) __builtin_aarch64_rsubhnv4si (__a, __b);
  1855. }
  1856. __extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
  1857. vrsubhn_s64 (int64x2_t __a, int64x2_t __b)
  1858. {
  1859. return (int32x2_t) __builtin_aarch64_rsubhnv2di (__a, __b);
  1860. }
  1861. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  1862. vrsubhn_u16 (uint16x8_t __a, uint16x8_t __b)
  1863. {
  1864. return (uint8x8_t) __builtin_aarch64_rsubhnv8hi ((int16x8_t) __a,
  1865. (int16x8_t) __b);
  1866. }
  1867. __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
  1868. vrsubhn_u32 (uint32x4_t __a, uint32x4_t __b)
  1869. {
  1870. return (uint16x4_t) __builtin_aarch64_rsubhnv4si ((int32x4_t) __a,
  1871. (int32x4_t) __b);
  1872. }
  1873. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  1874. vrsubhn_u64 (uint64x2_t __a, uint64x2_t __b)
  1875. {
  1876. return (uint32x2_t) __builtin_aarch64_rsubhnv2di ((int64x2_t) __a,
  1877. (int64x2_t) __b);
  1878. }
  1879. __extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
  1880. vrsubhn_high_s16 (int8x8_t __a, int16x8_t __b, int16x8_t __c)
  1881. {
  1882. return (int8x16_t) __builtin_aarch64_rsubhn2v8hi (__a, __b, __c);
  1883. }
  1884. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  1885. vrsubhn_high_s32 (int16x4_t __a, int32x4_t __b, int32x4_t __c)
  1886. {
  1887. return (int16x8_t) __builtin_aarch64_rsubhn2v4si (__a, __b, __c);
  1888. }
  1889. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  1890. vrsubhn_high_s64 (int32x2_t __a, int64x2_t __b, int64x2_t __c)
  1891. {
  1892. return (int32x4_t) __builtin_aarch64_rsubhn2v2di (__a, __b, __c);
  1893. }
  1894. __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
  1895. vrsubhn_high_u16 (uint8x8_t __a, uint16x8_t __b, uint16x8_t __c)
  1896. {
  1897. return (uint8x16_t) __builtin_aarch64_rsubhn2v8hi ((int8x8_t) __a,
  1898. (int16x8_t) __b,
  1899. (int16x8_t) __c);
  1900. }
  1901. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  1902. vrsubhn_high_u32 (uint16x4_t __a, uint32x4_t __b, uint32x4_t __c)
  1903. {
  1904. return (uint16x8_t) __builtin_aarch64_rsubhn2v4si ((int16x4_t) __a,
  1905. (int32x4_t) __b,
  1906. (int32x4_t) __c);
  1907. }
  1908. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  1909. vrsubhn_high_u64 (uint32x2_t __a, uint64x2_t __b, uint64x2_t __c)
  1910. {
  1911. return (uint32x4_t) __builtin_aarch64_rsubhn2v2di ((int32x2_t) __a,
  1912. (int64x2_t) __b,
  1913. (int64x2_t) __c);
  1914. }
  1915. __extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
  1916. vsubhn_high_s16 (int8x8_t __a, int16x8_t __b, int16x8_t __c)
  1917. {
  1918. return (int8x16_t) __builtin_aarch64_subhn2v8hi (__a, __b, __c);
  1919. }
  1920. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  1921. vsubhn_high_s32 (int16x4_t __a, int32x4_t __b, int32x4_t __c)
  1922. {
  1923. return (int16x8_t) __builtin_aarch64_subhn2v4si (__a, __b, __c);;
  1924. }
  1925. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  1926. vsubhn_high_s64 (int32x2_t __a, int64x2_t __b, int64x2_t __c)
  1927. {
  1928. return (int32x4_t) __builtin_aarch64_subhn2v2di (__a, __b, __c);
  1929. }
  1930. __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
  1931. vsubhn_high_u16 (uint8x8_t __a, uint16x8_t __b, uint16x8_t __c)
  1932. {
  1933. return (uint8x16_t) __builtin_aarch64_subhn2v8hi ((int8x8_t) __a,
  1934. (int16x8_t) __b,
  1935. (int16x8_t) __c);
  1936. }
  1937. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  1938. vsubhn_high_u32 (uint16x4_t __a, uint32x4_t __b, uint32x4_t __c)
  1939. {
  1940. return (uint16x8_t) __builtin_aarch64_subhn2v4si ((int16x4_t) __a,
  1941. (int32x4_t) __b,
  1942. (int32x4_t) __c);
  1943. }
  1944. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  1945. vsubhn_high_u64 (uint32x2_t __a, uint64x2_t __b, uint64x2_t __c)
  1946. {
  1947. return (uint32x4_t) __builtin_aarch64_subhn2v2di ((int32x2_t) __a,
  1948. (int64x2_t) __b,
  1949. (int64x2_t) __c);
  1950. }
  1951. __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
  1952. vqadd_u16 (uint16x4_t __a, uint16x4_t __b)
  1953. {
  1954. return __builtin_aarch64_uqaddv4hi_uuu (__a, __b);
  1955. }
  1956. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  1957. vqadd_u32 (uint32x2_t __a, uint32x2_t __b)
  1958. {
  1959. return __builtin_aarch64_uqaddv2si_uuu (__a, __b);
  1960. }
  1961. __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
  1962. vqadd_u64 (uint64x1_t __a, uint64x1_t __b)
  1963. {
  1964. return (uint64x1_t) {__builtin_aarch64_uqadddi_uuu (__a[0], __b[0])};
  1965. }
  1966. __extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
  1967. vqaddq_s8 (int8x16_t __a, int8x16_t __b)
  1968. {
  1969. return (int8x16_t) __builtin_aarch64_sqaddv16qi (__a, __b);
  1970. }
  1971. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  1972. vqaddq_s16 (int16x8_t __a, int16x8_t __b)
  1973. {
  1974. return (int16x8_t) __builtin_aarch64_sqaddv8hi (__a, __b);
  1975. }
  1976. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  1977. vqaddq_s32 (int32x4_t __a, int32x4_t __b)
  1978. {
  1979. return (int32x4_t) __builtin_aarch64_sqaddv4si (__a, __b);
  1980. }
  1981. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  1982. vqaddq_s64 (int64x2_t __a, int64x2_t __b)
  1983. {
  1984. return (int64x2_t) __builtin_aarch64_sqaddv2di (__a, __b);
  1985. }
  1986. __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
  1987. vqaddq_u8 (uint8x16_t __a, uint8x16_t __b)
  1988. {
  1989. return __builtin_aarch64_uqaddv16qi_uuu (__a, __b);
  1990. }
  1991. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  1992. vqaddq_u16 (uint16x8_t __a, uint16x8_t __b)
  1993. {
  1994. return __builtin_aarch64_uqaddv8hi_uuu (__a, __b);
  1995. }
  1996. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  1997. vqaddq_u32 (uint32x4_t __a, uint32x4_t __b)
  1998. {
  1999. return __builtin_aarch64_uqaddv4si_uuu (__a, __b);
  2000. }
  2001. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  2002. vqaddq_u64 (uint64x2_t __a, uint64x2_t __b)
  2003. {
  2004. return __builtin_aarch64_uqaddv2di_uuu (__a, __b);
  2005. }
  2006. __extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
  2007. vqsub_s8 (int8x8_t __a, int8x8_t __b)
  2008. {
  2009. return (int8x8_t) __builtin_aarch64_sqsubv8qi (__a, __b);
  2010. }
  2011. __extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
  2012. vqsub_s16 (int16x4_t __a, int16x4_t __b)
  2013. {
  2014. return (int16x4_t) __builtin_aarch64_sqsubv4hi (__a, __b);
  2015. }
  2016. __extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
  2017. vqsub_s32 (int32x2_t __a, int32x2_t __b)
  2018. {
  2019. return (int32x2_t) __builtin_aarch64_sqsubv2si (__a, __b);
  2020. }
  2021. __extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
  2022. vqsub_s64 (int64x1_t __a, int64x1_t __b)
  2023. {
  2024. return (int64x1_t) {__builtin_aarch64_sqsubdi (__a[0], __b[0])};
  2025. }
  2026. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  2027. vqsub_u8 (uint8x8_t __a, uint8x8_t __b)
  2028. {
  2029. return __builtin_aarch64_uqsubv8qi_uuu (__a, __b);
  2030. }
  2031. __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
  2032. vqsub_u16 (uint16x4_t __a, uint16x4_t __b)
  2033. {
  2034. return __builtin_aarch64_uqsubv4hi_uuu (__a, __b);
  2035. }
  2036. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  2037. vqsub_u32 (uint32x2_t __a, uint32x2_t __b)
  2038. {
  2039. return __builtin_aarch64_uqsubv2si_uuu (__a, __b);
  2040. }
  2041. __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
  2042. vqsub_u64 (uint64x1_t __a, uint64x1_t __b)
  2043. {
  2044. return (uint64x1_t) {__builtin_aarch64_uqsubdi_uuu (__a[0], __b[0])};
  2045. }
  2046. __extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
  2047. vqsubq_s8 (int8x16_t __a, int8x16_t __b)
  2048. {
  2049. return (int8x16_t) __builtin_aarch64_sqsubv16qi (__a, __b);
  2050. }
  2051. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  2052. vqsubq_s16 (int16x8_t __a, int16x8_t __b)
  2053. {
  2054. return (int16x8_t) __builtin_aarch64_sqsubv8hi (__a, __b);
  2055. }
  2056. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  2057. vqsubq_s32 (int32x4_t __a, int32x4_t __b)
  2058. {
  2059. return (int32x4_t) __builtin_aarch64_sqsubv4si (__a, __b);
  2060. }
  2061. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  2062. vqsubq_s64 (int64x2_t __a, int64x2_t __b)
  2063. {
  2064. return (int64x2_t) __builtin_aarch64_sqsubv2di (__a, __b);
  2065. }
  2066. __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
  2067. vqsubq_u8 (uint8x16_t __a, uint8x16_t __b)
  2068. {
  2069. return __builtin_aarch64_uqsubv16qi_uuu (__a, __b);
  2070. }
  2071. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  2072. vqsubq_u16 (uint16x8_t __a, uint16x8_t __b)
  2073. {
  2074. return __builtin_aarch64_uqsubv8hi_uuu (__a, __b);
  2075. }
  2076. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  2077. vqsubq_u32 (uint32x4_t __a, uint32x4_t __b)
  2078. {
  2079. return __builtin_aarch64_uqsubv4si_uuu (__a, __b);
  2080. }
  2081. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  2082. vqsubq_u64 (uint64x2_t __a, uint64x2_t __b)
  2083. {
  2084. return __builtin_aarch64_uqsubv2di_uuu (__a, __b);
  2085. }
  2086. __extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
  2087. vqneg_s8 (int8x8_t __a)
  2088. {
  2089. return (int8x8_t) __builtin_aarch64_sqnegv8qi (__a);
  2090. }
  2091. __extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
  2092. vqneg_s16 (int16x4_t __a)
  2093. {
  2094. return (int16x4_t) __builtin_aarch64_sqnegv4hi (__a);
  2095. }
  2096. __extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
  2097. vqneg_s32 (int32x2_t __a)
  2098. {
  2099. return (int32x2_t) __builtin_aarch64_sqnegv2si (__a);
  2100. }
  2101. __extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
  2102. vqneg_s64 (int64x1_t __a)
  2103. {
  2104. return (int64x1_t) {__builtin_aarch64_sqnegdi (__a[0])};
  2105. }
  2106. __extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
  2107. vqnegq_s8 (int8x16_t __a)
  2108. {
  2109. return (int8x16_t) __builtin_aarch64_sqnegv16qi (__a);
  2110. }
  2111. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  2112. vqnegq_s16 (int16x8_t __a)
  2113. {
  2114. return (int16x8_t) __builtin_aarch64_sqnegv8hi (__a);
  2115. }
  2116. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  2117. vqnegq_s32 (int32x4_t __a)
  2118. {
  2119. return (int32x4_t) __builtin_aarch64_sqnegv4si (__a);
  2120. }
  2121. __extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
  2122. vqabs_s8 (int8x8_t __a)
  2123. {
  2124. return (int8x8_t) __builtin_aarch64_sqabsv8qi (__a);
  2125. }
  2126. __extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
  2127. vqabs_s16 (int16x4_t __a)
  2128. {
  2129. return (int16x4_t) __builtin_aarch64_sqabsv4hi (__a);
  2130. }
  2131. __extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
  2132. vqabs_s32 (int32x2_t __a)
  2133. {
  2134. return (int32x2_t) __builtin_aarch64_sqabsv2si (__a);
  2135. }
  2136. __extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
  2137. vqabs_s64 (int64x1_t __a)
  2138. {
  2139. return (int64x1_t) {__builtin_aarch64_sqabsdi (__a[0])};
  2140. }
  2141. __extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
  2142. vqabsq_s8 (int8x16_t __a)
  2143. {
  2144. return (int8x16_t) __builtin_aarch64_sqabsv16qi (__a);
  2145. }
  2146. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  2147. vqabsq_s16 (int16x8_t __a)
  2148. {
  2149. return (int16x8_t) __builtin_aarch64_sqabsv8hi (__a);
  2150. }
  2151. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  2152. vqabsq_s32 (int32x4_t __a)
  2153. {
  2154. return (int32x4_t) __builtin_aarch64_sqabsv4si (__a);
  2155. }
  2156. __extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
  2157. vqdmulh_s16 (int16x4_t __a, int16x4_t __b)
  2158. {
  2159. return (int16x4_t) __builtin_aarch64_sqdmulhv4hi (__a, __b);
  2160. }
  2161. __extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
  2162. vqdmulh_s32 (int32x2_t __a, int32x2_t __b)
  2163. {
  2164. return (int32x2_t) __builtin_aarch64_sqdmulhv2si (__a, __b);
  2165. }
  2166. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  2167. vqdmulhq_s16 (int16x8_t __a, int16x8_t __b)
  2168. {
  2169. return (int16x8_t) __builtin_aarch64_sqdmulhv8hi (__a, __b);
  2170. }
  2171. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  2172. vqdmulhq_s32 (int32x4_t __a, int32x4_t __b)
  2173. {
  2174. return (int32x4_t) __builtin_aarch64_sqdmulhv4si (__a, __b);
  2175. }
  2176. __extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
  2177. vqrdmulh_s16 (int16x4_t __a, int16x4_t __b)
  2178. {
  2179. return (int16x4_t) __builtin_aarch64_sqrdmulhv4hi (__a, __b);
  2180. }
  2181. __extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
  2182. vqrdmulh_s32 (int32x2_t __a, int32x2_t __b)
  2183. {
  2184. return (int32x2_t) __builtin_aarch64_sqrdmulhv2si (__a, __b);
  2185. }
  2186. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  2187. vqrdmulhq_s16 (int16x8_t __a, int16x8_t __b)
  2188. {
  2189. return (int16x8_t) __builtin_aarch64_sqrdmulhv8hi (__a, __b);
  2190. }
  2191. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  2192. vqrdmulhq_s32 (int32x4_t __a, int32x4_t __b)
  2193. {
  2194. return (int32x4_t) __builtin_aarch64_sqrdmulhv4si (__a, __b);
  2195. }
  2196. __extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
  2197. vcreate_s8 (uint64_t __a)
  2198. {
  2199. return (int8x8_t) __a;
  2200. }
  2201. __extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
  2202. vcreate_s16 (uint64_t __a)
  2203. {
  2204. return (int16x4_t) __a;
  2205. }
  2206. __extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
  2207. vcreate_s32 (uint64_t __a)
  2208. {
  2209. return (int32x2_t) __a;
  2210. }
  2211. __extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
  2212. vcreate_s64 (uint64_t __a)
  2213. {
  2214. return (int64x1_t) {__a};
  2215. }
  2216. __extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
  2217. vcreate_f32 (uint64_t __a)
  2218. {
  2219. return (float32x2_t) __a;
  2220. }
  2221. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  2222. vcreate_u8 (uint64_t __a)
  2223. {
  2224. return (uint8x8_t) __a;
  2225. }
  2226. __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
  2227. vcreate_u16 (uint64_t __a)
  2228. {
  2229. return (uint16x4_t) __a;
  2230. }
  2231. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  2232. vcreate_u32 (uint64_t __a)
  2233. {
  2234. return (uint32x2_t) __a;
  2235. }
  2236. __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
  2237. vcreate_u64 (uint64_t __a)
  2238. {
  2239. return (uint64x1_t) {__a};
  2240. }
  2241. __extension__ static __inline float64x1_t __attribute__ ((__always_inline__))
  2242. vcreate_f64 (uint64_t __a)
  2243. {
  2244. return (float64x1_t) __a;
  2245. }
  2246. __extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
  2247. vcreate_p8 (uint64_t __a)
  2248. {
  2249. return (poly8x8_t) __a;
  2250. }
  2251. __extension__ static __inline poly16x4_t __attribute__ ((__always_inline__))
  2252. vcreate_p16 (uint64_t __a)
  2253. {
  2254. return (poly16x4_t) __a;
  2255. }
  2256. /* vget_lane */
  2257. __extension__ static __inline float32_t __attribute__ ((__always_inline__))
  2258. vget_lane_f32 (float32x2_t __a, const int __b)
  2259. {
  2260. return __aarch64_vget_lane_any (__a, __b);
  2261. }
  2262. __extension__ static __inline float64_t __attribute__ ((__always_inline__))
  2263. vget_lane_f64 (float64x1_t __a, const int __b)
  2264. {
  2265. return __aarch64_vget_lane_any (__a, __b);
  2266. }
  2267. __extension__ static __inline poly8_t __attribute__ ((__always_inline__))
  2268. vget_lane_p8 (poly8x8_t __a, const int __b)
  2269. {
  2270. return __aarch64_vget_lane_any (__a, __b);
  2271. }
  2272. __extension__ static __inline poly16_t __attribute__ ((__always_inline__))
  2273. vget_lane_p16 (poly16x4_t __a, const int __b)
  2274. {
  2275. return __aarch64_vget_lane_any (__a, __b);
  2276. }
  2277. __extension__ static __inline int8_t __attribute__ ((__always_inline__))
  2278. vget_lane_s8 (int8x8_t __a, const int __b)
  2279. {
  2280. return __aarch64_vget_lane_any (__a, __b);
  2281. }
  2282. __extension__ static __inline int16_t __attribute__ ((__always_inline__))
  2283. vget_lane_s16 (int16x4_t __a, const int __b)
  2284. {
  2285. return __aarch64_vget_lane_any (__a, __b);
  2286. }
  2287. __extension__ static __inline int32_t __attribute__ ((__always_inline__))
  2288. vget_lane_s32 (int32x2_t __a, const int __b)
  2289. {
  2290. return __aarch64_vget_lane_any (__a, __b);
  2291. }
  2292. __extension__ static __inline int64_t __attribute__ ((__always_inline__))
  2293. vget_lane_s64 (int64x1_t __a, const int __b)
  2294. {
  2295. return __aarch64_vget_lane_any (__a, __b);
  2296. }
  2297. __extension__ static __inline uint8_t __attribute__ ((__always_inline__))
  2298. vget_lane_u8 (uint8x8_t __a, const int __b)
  2299. {
  2300. return __aarch64_vget_lane_any (__a, __b);
  2301. }
  2302. __extension__ static __inline uint16_t __attribute__ ((__always_inline__))
  2303. vget_lane_u16 (uint16x4_t __a, const int __b)
  2304. {
  2305. return __aarch64_vget_lane_any (__a, __b);
  2306. }
  2307. __extension__ static __inline uint32_t __attribute__ ((__always_inline__))
  2308. vget_lane_u32 (uint32x2_t __a, const int __b)
  2309. {
  2310. return __aarch64_vget_lane_any (__a, __b);
  2311. }
  2312. __extension__ static __inline uint64_t __attribute__ ((__always_inline__))
  2313. vget_lane_u64 (uint64x1_t __a, const int __b)
  2314. {
  2315. return __aarch64_vget_lane_any (__a, __b);
  2316. }
  2317. /* vgetq_lane */
  2318. __extension__ static __inline float32_t __attribute__ ((__always_inline__))
  2319. vgetq_lane_f32 (float32x4_t __a, const int __b)
  2320. {
  2321. return __aarch64_vget_lane_any (__a, __b);
  2322. }
  2323. __extension__ static __inline float64_t __attribute__ ((__always_inline__))
  2324. vgetq_lane_f64 (float64x2_t __a, const int __b)
  2325. {
  2326. return __aarch64_vget_lane_any (__a, __b);
  2327. }
  2328. __extension__ static __inline poly8_t __attribute__ ((__always_inline__))
  2329. vgetq_lane_p8 (poly8x16_t __a, const int __b)
  2330. {
  2331. return __aarch64_vget_lane_any (__a, __b);
  2332. }
  2333. __extension__ static __inline poly16_t __attribute__ ((__always_inline__))
  2334. vgetq_lane_p16 (poly16x8_t __a, const int __b)
  2335. {
  2336. return __aarch64_vget_lane_any (__a, __b);
  2337. }
  2338. __extension__ static __inline int8_t __attribute__ ((__always_inline__))
  2339. vgetq_lane_s8 (int8x16_t __a, const int __b)
  2340. {
  2341. return __aarch64_vget_lane_any (__a, __b);
  2342. }
  2343. __extension__ static __inline int16_t __attribute__ ((__always_inline__))
  2344. vgetq_lane_s16 (int16x8_t __a, const int __b)
  2345. {
  2346. return __aarch64_vget_lane_any (__a, __b);
  2347. }
  2348. __extension__ static __inline int32_t __attribute__ ((__always_inline__))
  2349. vgetq_lane_s32 (int32x4_t __a, const int __b)
  2350. {
  2351. return __aarch64_vget_lane_any (__a, __b);
  2352. }
  2353. __extension__ static __inline int64_t __attribute__ ((__always_inline__))
  2354. vgetq_lane_s64 (int64x2_t __a, const int __b)
  2355. {
  2356. return __aarch64_vget_lane_any (__a, __b);
  2357. }
  2358. __extension__ static __inline uint8_t __attribute__ ((__always_inline__))
  2359. vgetq_lane_u8 (uint8x16_t __a, const int __b)
  2360. {
  2361. return __aarch64_vget_lane_any (__a, __b);
  2362. }
  2363. __extension__ static __inline uint16_t __attribute__ ((__always_inline__))
  2364. vgetq_lane_u16 (uint16x8_t __a, const int __b)
  2365. {
  2366. return __aarch64_vget_lane_any (__a, __b);
  2367. }
  2368. __extension__ static __inline uint32_t __attribute__ ((__always_inline__))
  2369. vgetq_lane_u32 (uint32x4_t __a, const int __b)
  2370. {
  2371. return __aarch64_vget_lane_any (__a, __b);
  2372. }
  2373. __extension__ static __inline uint64_t __attribute__ ((__always_inline__))
  2374. vgetq_lane_u64 (uint64x2_t __a, const int __b)
  2375. {
  2376. return __aarch64_vget_lane_any (__a, __b);
  2377. }
  2378. /* vreinterpret */
  2379. __extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
  2380. vreinterpret_p8_f64 (float64x1_t __a)
  2381. {
  2382. return (poly8x8_t) __a;
  2383. }
  2384. __extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
  2385. vreinterpret_p8_s8 (int8x8_t __a)
  2386. {
  2387. return (poly8x8_t) __a;
  2388. }
  2389. __extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
  2390. vreinterpret_p8_s16 (int16x4_t __a)
  2391. {
  2392. return (poly8x8_t) __a;
  2393. }
  2394. __extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
  2395. vreinterpret_p8_s32 (int32x2_t __a)
  2396. {
  2397. return (poly8x8_t) __a;
  2398. }
  2399. __extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
  2400. vreinterpret_p8_s64 (int64x1_t __a)
  2401. {
  2402. return (poly8x8_t) __a;
  2403. }
  2404. __extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
  2405. vreinterpret_p8_f32 (float32x2_t __a)
  2406. {
  2407. return (poly8x8_t) __a;
  2408. }
  2409. __extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
  2410. vreinterpret_p8_u8 (uint8x8_t __a)
  2411. {
  2412. return (poly8x8_t) __a;
  2413. }
  2414. __extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
  2415. vreinterpret_p8_u16 (uint16x4_t __a)
  2416. {
  2417. return (poly8x8_t) __a;
  2418. }
  2419. __extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
  2420. vreinterpret_p8_u32 (uint32x2_t __a)
  2421. {
  2422. return (poly8x8_t) __a;
  2423. }
  2424. __extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
  2425. vreinterpret_p8_u64 (uint64x1_t __a)
  2426. {
  2427. return (poly8x8_t) __a;
  2428. }
  2429. __extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
  2430. vreinterpret_p8_p16 (poly16x4_t __a)
  2431. {
  2432. return (poly8x8_t) __a;
  2433. }
  2434. __extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
  2435. vreinterpretq_p8_f64 (float64x2_t __a)
  2436. {
  2437. return (poly8x16_t) __a;
  2438. }
  2439. __extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
  2440. vreinterpretq_p8_s8 (int8x16_t __a)
  2441. {
  2442. return (poly8x16_t) __a;
  2443. }
  2444. __extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
  2445. vreinterpretq_p8_s16 (int16x8_t __a)
  2446. {
  2447. return (poly8x16_t) __a;
  2448. }
  2449. __extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
  2450. vreinterpretq_p8_s32 (int32x4_t __a)
  2451. {
  2452. return (poly8x16_t) __a;
  2453. }
  2454. __extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
  2455. vreinterpretq_p8_s64 (int64x2_t __a)
  2456. {
  2457. return (poly8x16_t) __a;
  2458. }
  2459. __extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
  2460. vreinterpretq_p8_f32 (float32x4_t __a)
  2461. {
  2462. return (poly8x16_t) __a;
  2463. }
  2464. __extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
  2465. vreinterpretq_p8_u8 (uint8x16_t __a)
  2466. {
  2467. return (poly8x16_t) __a;
  2468. }
  2469. __extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
  2470. vreinterpretq_p8_u16 (uint16x8_t __a)
  2471. {
  2472. return (poly8x16_t) __a;
  2473. }
  2474. __extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
  2475. vreinterpretq_p8_u32 (uint32x4_t __a)
  2476. {
  2477. return (poly8x16_t) __a;
  2478. }
  2479. __extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
  2480. vreinterpretq_p8_u64 (uint64x2_t __a)
  2481. {
  2482. return (poly8x16_t) __a;
  2483. }
  2484. __extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
  2485. vreinterpretq_p8_p16 (poly16x8_t __a)
  2486. {
  2487. return (poly8x16_t) __a;
  2488. }
  2489. __extension__ static __inline poly16x4_t __attribute__ ((__always_inline__))
  2490. vreinterpret_p16_f64 (float64x1_t __a)
  2491. {
  2492. return (poly16x4_t) __a;
  2493. }
  2494. __extension__ static __inline poly16x4_t __attribute__ ((__always_inline__))
  2495. vreinterpret_p16_s8 (int8x8_t __a)
  2496. {
  2497. return (poly16x4_t) __a;
  2498. }
  2499. __extension__ static __inline poly16x4_t __attribute__ ((__always_inline__))
  2500. vreinterpret_p16_s16 (int16x4_t __a)
  2501. {
  2502. return (poly16x4_t) __a;
  2503. }
  2504. __extension__ static __inline poly16x4_t __attribute__ ((__always_inline__))
  2505. vreinterpret_p16_s32 (int32x2_t __a)
  2506. {
  2507. return (poly16x4_t) __a;
  2508. }
  2509. __extension__ static __inline poly16x4_t __attribute__ ((__always_inline__))
  2510. vreinterpret_p16_s64 (int64x1_t __a)
  2511. {
  2512. return (poly16x4_t) __a;
  2513. }
  2514. __extension__ static __inline poly16x4_t __attribute__ ((__always_inline__))
  2515. vreinterpret_p16_f32 (float32x2_t __a)
  2516. {
  2517. return (poly16x4_t) __a;
  2518. }
  2519. __extension__ static __inline poly16x4_t __attribute__ ((__always_inline__))
  2520. vreinterpret_p16_u8 (uint8x8_t __a)
  2521. {
  2522. return (poly16x4_t) __a;
  2523. }
  2524. __extension__ static __inline poly16x4_t __attribute__ ((__always_inline__))
  2525. vreinterpret_p16_u16 (uint16x4_t __a)
  2526. {
  2527. return (poly16x4_t) __a;
  2528. }
  2529. __extension__ static __inline poly16x4_t __attribute__ ((__always_inline__))
  2530. vreinterpret_p16_u32 (uint32x2_t __a)
  2531. {
  2532. return (poly16x4_t) __a;
  2533. }
  2534. __extension__ static __inline poly16x4_t __attribute__ ((__always_inline__))
  2535. vreinterpret_p16_u64 (uint64x1_t __a)
  2536. {
  2537. return (poly16x4_t) __a;
  2538. }
  2539. __extension__ static __inline poly16x4_t __attribute__ ((__always_inline__))
  2540. vreinterpret_p16_p8 (poly8x8_t __a)
  2541. {
  2542. return (poly16x4_t) __a;
  2543. }
  2544. __extension__ static __inline poly16x8_t __attribute__ ((__always_inline__))
  2545. vreinterpretq_p16_f64 (float64x2_t __a)
  2546. {
  2547. return (poly16x8_t) __a;
  2548. }
  2549. __extension__ static __inline poly16x8_t __attribute__ ((__always_inline__))
  2550. vreinterpretq_p16_s8 (int8x16_t __a)
  2551. {
  2552. return (poly16x8_t) __a;
  2553. }
  2554. __extension__ static __inline poly16x8_t __attribute__ ((__always_inline__))
  2555. vreinterpretq_p16_s16 (int16x8_t __a)
  2556. {
  2557. return (poly16x8_t) __a;
  2558. }
  2559. __extension__ static __inline poly16x8_t __attribute__ ((__always_inline__))
  2560. vreinterpretq_p16_s32 (int32x4_t __a)
  2561. {
  2562. return (poly16x8_t) __a;
  2563. }
  2564. __extension__ static __inline poly16x8_t __attribute__ ((__always_inline__))
  2565. vreinterpretq_p16_s64 (int64x2_t __a)
  2566. {
  2567. return (poly16x8_t) __a;
  2568. }
  2569. __extension__ static __inline poly16x8_t __attribute__ ((__always_inline__))
  2570. vreinterpretq_p16_f32 (float32x4_t __a)
  2571. {
  2572. return (poly16x8_t) __a;
  2573. }
  2574. __extension__ static __inline poly16x8_t __attribute__ ((__always_inline__))
  2575. vreinterpretq_p16_u8 (uint8x16_t __a)
  2576. {
  2577. return (poly16x8_t) __a;
  2578. }
  2579. __extension__ static __inline poly16x8_t __attribute__ ((__always_inline__))
  2580. vreinterpretq_p16_u16 (uint16x8_t __a)
  2581. {
  2582. return (poly16x8_t) __a;
  2583. }
  2584. __extension__ static __inline poly16x8_t __attribute__ ((__always_inline__))
  2585. vreinterpretq_p16_u32 (uint32x4_t __a)
  2586. {
  2587. return (poly16x8_t) __a;
  2588. }
  2589. __extension__ static __inline poly16x8_t __attribute__ ((__always_inline__))
  2590. vreinterpretq_p16_u64 (uint64x2_t __a)
  2591. {
  2592. return (poly16x8_t) __a;
  2593. }
  2594. __extension__ static __inline poly16x8_t __attribute__ ((__always_inline__))
  2595. vreinterpretq_p16_p8 (poly8x16_t __a)
  2596. {
  2597. return (poly16x8_t) __a;
  2598. }
  2599. __extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
  2600. vreinterpret_f32_f64 (float64x1_t __a)
  2601. {
  2602. return (float32x2_t) __a;
  2603. }
  2604. __extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
  2605. vreinterpret_f32_s8 (int8x8_t __a)
  2606. {
  2607. return (float32x2_t) __a;
  2608. }
  2609. __extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
  2610. vreinterpret_f32_s16 (int16x4_t __a)
  2611. {
  2612. return (float32x2_t) __a;
  2613. }
  2614. __extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
  2615. vreinterpret_f32_s32 (int32x2_t __a)
  2616. {
  2617. return (float32x2_t) __a;
  2618. }
  2619. __extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
  2620. vreinterpret_f32_s64 (int64x1_t __a)
  2621. {
  2622. return (float32x2_t) __a;
  2623. }
  2624. __extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
  2625. vreinterpret_f32_u8 (uint8x8_t __a)
  2626. {
  2627. return (float32x2_t) __a;
  2628. }
  2629. __extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
  2630. vreinterpret_f32_u16 (uint16x4_t __a)
  2631. {
  2632. return (float32x2_t) __a;
  2633. }
  2634. __extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
  2635. vreinterpret_f32_u32 (uint32x2_t __a)
  2636. {
  2637. return (float32x2_t) __a;
  2638. }
  2639. __extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
  2640. vreinterpret_f32_u64 (uint64x1_t __a)
  2641. {
  2642. return (float32x2_t) __a;
  2643. }
  2644. __extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
  2645. vreinterpret_f32_p8 (poly8x8_t __a)
  2646. {
  2647. return (float32x2_t) __a;
  2648. }
  2649. __extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
  2650. vreinterpret_f32_p16 (poly16x4_t __a)
  2651. {
  2652. return (float32x2_t) __a;
  2653. }
  2654. __extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
  2655. vreinterpretq_f32_f64 (float64x2_t __a)
  2656. {
  2657. return (float32x4_t) __a;
  2658. }
  2659. __extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
  2660. vreinterpretq_f32_s8 (int8x16_t __a)
  2661. {
  2662. return (float32x4_t) __a;
  2663. }
  2664. __extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
  2665. vreinterpretq_f32_s16 (int16x8_t __a)
  2666. {
  2667. return (float32x4_t) __a;
  2668. }
  2669. __extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
  2670. vreinterpretq_f32_s32 (int32x4_t __a)
  2671. {
  2672. return (float32x4_t) __a;
  2673. }
  2674. __extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
  2675. vreinterpretq_f32_s64 (int64x2_t __a)
  2676. {
  2677. return (float32x4_t) __a;
  2678. }
  2679. __extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
  2680. vreinterpretq_f32_u8 (uint8x16_t __a)
  2681. {
  2682. return (float32x4_t) __a;
  2683. }
  2684. __extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
  2685. vreinterpretq_f32_u16 (uint16x8_t __a)
  2686. {
  2687. return (float32x4_t) __a;
  2688. }
  2689. __extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
  2690. vreinterpretq_f32_u32 (uint32x4_t __a)
  2691. {
  2692. return (float32x4_t) __a;
  2693. }
  2694. __extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
  2695. vreinterpretq_f32_u64 (uint64x2_t __a)
  2696. {
  2697. return (float32x4_t) __a;
  2698. }
  2699. __extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
  2700. vreinterpretq_f32_p8 (poly8x16_t __a)
  2701. {
  2702. return (float32x4_t) __a;
  2703. }
  2704. __extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
  2705. vreinterpretq_f32_p16 (poly16x8_t __a)
  2706. {
  2707. return (float32x4_t) __a;
  2708. }
  2709. __extension__ static __inline float64x1_t __attribute__((__always_inline__))
  2710. vreinterpret_f64_f32 (float32x2_t __a)
  2711. {
  2712. return (float64x1_t) __a;
  2713. }
  2714. __extension__ static __inline float64x1_t __attribute__((__always_inline__))
  2715. vreinterpret_f64_p8 (poly8x8_t __a)
  2716. {
  2717. return (float64x1_t) __a;
  2718. }
  2719. __extension__ static __inline float64x1_t __attribute__((__always_inline__))
  2720. vreinterpret_f64_p16 (poly16x4_t __a)
  2721. {
  2722. return (float64x1_t) __a;
  2723. }
  2724. __extension__ static __inline float64x1_t __attribute__((__always_inline__))
  2725. vreinterpret_f64_s8 (int8x8_t __a)
  2726. {
  2727. return (float64x1_t) __a;
  2728. }
  2729. __extension__ static __inline float64x1_t __attribute__((__always_inline__))
  2730. vreinterpret_f64_s16 (int16x4_t __a)
  2731. {
  2732. return (float64x1_t) __a;
  2733. }
  2734. __extension__ static __inline float64x1_t __attribute__((__always_inline__))
  2735. vreinterpret_f64_s32 (int32x2_t __a)
  2736. {
  2737. return (float64x1_t) __a;
  2738. }
  2739. __extension__ static __inline float64x1_t __attribute__((__always_inline__))
  2740. vreinterpret_f64_s64 (int64x1_t __a)
  2741. {
  2742. return (float64x1_t) __a;
  2743. }
  2744. __extension__ static __inline float64x1_t __attribute__((__always_inline__))
  2745. vreinterpret_f64_u8 (uint8x8_t __a)
  2746. {
  2747. return (float64x1_t) __a;
  2748. }
  2749. __extension__ static __inline float64x1_t __attribute__((__always_inline__))
  2750. vreinterpret_f64_u16 (uint16x4_t __a)
  2751. {
  2752. return (float64x1_t) __a;
  2753. }
  2754. __extension__ static __inline float64x1_t __attribute__((__always_inline__))
  2755. vreinterpret_f64_u32 (uint32x2_t __a)
  2756. {
  2757. return (float64x1_t) __a;
  2758. }
  2759. __extension__ static __inline float64x1_t __attribute__((__always_inline__))
  2760. vreinterpret_f64_u64 (uint64x1_t __a)
  2761. {
  2762. return (float64x1_t) __a;
  2763. }
  2764. __extension__ static __inline float64x2_t __attribute__((__always_inline__))
  2765. vreinterpretq_f64_f32 (float32x4_t __a)
  2766. {
  2767. return (float64x2_t) __a;
  2768. }
  2769. __extension__ static __inline float64x2_t __attribute__((__always_inline__))
  2770. vreinterpretq_f64_p8 (poly8x16_t __a)
  2771. {
  2772. return (float64x2_t) __a;
  2773. }
  2774. __extension__ static __inline float64x2_t __attribute__((__always_inline__))
  2775. vreinterpretq_f64_p16 (poly16x8_t __a)
  2776. {
  2777. return (float64x2_t) __a;
  2778. }
  2779. __extension__ static __inline float64x2_t __attribute__((__always_inline__))
  2780. vreinterpretq_f64_s8 (int8x16_t __a)
  2781. {
  2782. return (float64x2_t) __a;
  2783. }
  2784. __extension__ static __inline float64x2_t __attribute__((__always_inline__))
  2785. vreinterpretq_f64_s16 (int16x8_t __a)
  2786. {
  2787. return (float64x2_t) __a;
  2788. }
  2789. __extension__ static __inline float64x2_t __attribute__((__always_inline__))
  2790. vreinterpretq_f64_s32 (int32x4_t __a)
  2791. {
  2792. return (float64x2_t) __a;
  2793. }
  2794. __extension__ static __inline float64x2_t __attribute__((__always_inline__))
  2795. vreinterpretq_f64_s64 (int64x2_t __a)
  2796. {
  2797. return (float64x2_t) __a;
  2798. }
  2799. __extension__ static __inline float64x2_t __attribute__((__always_inline__))
  2800. vreinterpretq_f64_u8 (uint8x16_t __a)
  2801. {
  2802. return (float64x2_t) __a;
  2803. }
  2804. __extension__ static __inline float64x2_t __attribute__((__always_inline__))
  2805. vreinterpretq_f64_u16 (uint16x8_t __a)
  2806. {
  2807. return (float64x2_t) __a;
  2808. }
  2809. __extension__ static __inline float64x2_t __attribute__((__always_inline__))
  2810. vreinterpretq_f64_u32 (uint32x4_t __a)
  2811. {
  2812. return (float64x2_t) __a;
  2813. }
  2814. __extension__ static __inline float64x2_t __attribute__((__always_inline__))
  2815. vreinterpretq_f64_u64 (uint64x2_t __a)
  2816. {
  2817. return (float64x2_t) __a;
  2818. }
  2819. __extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
  2820. vreinterpret_s64_f64 (float64x1_t __a)
  2821. {
  2822. return (int64x1_t) __a;
  2823. }
  2824. __extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
  2825. vreinterpret_s64_s8 (int8x8_t __a)
  2826. {
  2827. return (int64x1_t) __a;
  2828. }
  2829. __extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
  2830. vreinterpret_s64_s16 (int16x4_t __a)
  2831. {
  2832. return (int64x1_t) __a;
  2833. }
  2834. __extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
  2835. vreinterpret_s64_s32 (int32x2_t __a)
  2836. {
  2837. return (int64x1_t) __a;
  2838. }
  2839. __extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
  2840. vreinterpret_s64_f32 (float32x2_t __a)
  2841. {
  2842. return (int64x1_t) __a;
  2843. }
  2844. __extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
  2845. vreinterpret_s64_u8 (uint8x8_t __a)
  2846. {
  2847. return (int64x1_t) __a;
  2848. }
  2849. __extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
  2850. vreinterpret_s64_u16 (uint16x4_t __a)
  2851. {
  2852. return (int64x1_t) __a;
  2853. }
  2854. __extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
  2855. vreinterpret_s64_u32 (uint32x2_t __a)
  2856. {
  2857. return (int64x1_t) __a;
  2858. }
  2859. __extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
  2860. vreinterpret_s64_u64 (uint64x1_t __a)
  2861. {
  2862. return (int64x1_t) __a;
  2863. }
  2864. __extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
  2865. vreinterpret_s64_p8 (poly8x8_t __a)
  2866. {
  2867. return (int64x1_t) __a;
  2868. }
  2869. __extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
  2870. vreinterpret_s64_p16 (poly16x4_t __a)
  2871. {
  2872. return (int64x1_t) __a;
  2873. }
  2874. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  2875. vreinterpretq_s64_f64 (float64x2_t __a)
  2876. {
  2877. return (int64x2_t) __a;
  2878. }
  2879. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  2880. vreinterpretq_s64_s8 (int8x16_t __a)
  2881. {
  2882. return (int64x2_t) __a;
  2883. }
  2884. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  2885. vreinterpretq_s64_s16 (int16x8_t __a)
  2886. {
  2887. return (int64x2_t) __a;
  2888. }
  2889. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  2890. vreinterpretq_s64_s32 (int32x4_t __a)
  2891. {
  2892. return (int64x2_t) __a;
  2893. }
  2894. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  2895. vreinterpretq_s64_f32 (float32x4_t __a)
  2896. {
  2897. return (int64x2_t) __a;
  2898. }
  2899. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  2900. vreinterpretq_s64_u8 (uint8x16_t __a)
  2901. {
  2902. return (int64x2_t) __a;
  2903. }
  2904. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  2905. vreinterpretq_s64_u16 (uint16x8_t __a)
  2906. {
  2907. return (int64x2_t) __a;
  2908. }
  2909. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  2910. vreinterpretq_s64_u32 (uint32x4_t __a)
  2911. {
  2912. return (int64x2_t) __a;
  2913. }
  2914. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  2915. vreinterpretq_s64_u64 (uint64x2_t __a)
  2916. {
  2917. return (int64x2_t) __a;
  2918. }
  2919. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  2920. vreinterpretq_s64_p8 (poly8x16_t __a)
  2921. {
  2922. return (int64x2_t) __a;
  2923. }
  2924. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  2925. vreinterpretq_s64_p16 (poly16x8_t __a)
  2926. {
  2927. return (int64x2_t) __a;
  2928. }
  2929. __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
  2930. vreinterpret_u64_f64 (float64x1_t __a)
  2931. {
  2932. return (uint64x1_t) __a;
  2933. }
  2934. __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
  2935. vreinterpret_u64_s8 (int8x8_t __a)
  2936. {
  2937. return (uint64x1_t) __a;
  2938. }
  2939. __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
  2940. vreinterpret_u64_s16 (int16x4_t __a)
  2941. {
  2942. return (uint64x1_t) __a;
  2943. }
  2944. __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
  2945. vreinterpret_u64_s32 (int32x2_t __a)
  2946. {
  2947. return (uint64x1_t) __a;
  2948. }
  2949. __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
  2950. vreinterpret_u64_s64 (int64x1_t __a)
  2951. {
  2952. return (uint64x1_t) __a;
  2953. }
  2954. __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
  2955. vreinterpret_u64_f32 (float32x2_t __a)
  2956. {
  2957. return (uint64x1_t) __a;
  2958. }
  2959. __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
  2960. vreinterpret_u64_u8 (uint8x8_t __a)
  2961. {
  2962. return (uint64x1_t) __a;
  2963. }
  2964. __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
  2965. vreinterpret_u64_u16 (uint16x4_t __a)
  2966. {
  2967. return (uint64x1_t) __a;
  2968. }
  2969. __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
  2970. vreinterpret_u64_u32 (uint32x2_t __a)
  2971. {
  2972. return (uint64x1_t) __a;
  2973. }
  2974. __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
  2975. vreinterpret_u64_p8 (poly8x8_t __a)
  2976. {
  2977. return (uint64x1_t) __a;
  2978. }
  2979. __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
  2980. vreinterpret_u64_p16 (poly16x4_t __a)
  2981. {
  2982. return (uint64x1_t) __a;
  2983. }
  2984. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  2985. vreinterpretq_u64_f64 (float64x2_t __a)
  2986. {
  2987. return (uint64x2_t) __a;
  2988. }
  2989. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  2990. vreinterpretq_u64_s8 (int8x16_t __a)
  2991. {
  2992. return (uint64x2_t) __a;
  2993. }
  2994. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  2995. vreinterpretq_u64_s16 (int16x8_t __a)
  2996. {
  2997. return (uint64x2_t) __a;
  2998. }
  2999. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  3000. vreinterpretq_u64_s32 (int32x4_t __a)
  3001. {
  3002. return (uint64x2_t) __a;
  3003. }
  3004. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  3005. vreinterpretq_u64_s64 (int64x2_t __a)
  3006. {
  3007. return (uint64x2_t) __a;
  3008. }
  3009. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  3010. vreinterpretq_u64_f32 (float32x4_t __a)
  3011. {
  3012. return (uint64x2_t) __a;
  3013. }
  3014. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  3015. vreinterpretq_u64_u8 (uint8x16_t __a)
  3016. {
  3017. return (uint64x2_t) __a;
  3018. }
  3019. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  3020. vreinterpretq_u64_u16 (uint16x8_t __a)
  3021. {
  3022. return (uint64x2_t) __a;
  3023. }
  3024. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  3025. vreinterpretq_u64_u32 (uint32x4_t __a)
  3026. {
  3027. return (uint64x2_t) __a;
  3028. }
  3029. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  3030. vreinterpretq_u64_p8 (poly8x16_t __a)
  3031. {
  3032. return (uint64x2_t) __a;
  3033. }
  3034. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  3035. vreinterpretq_u64_p16 (poly16x8_t __a)
  3036. {
  3037. return (uint64x2_t) __a;
  3038. }
  3039. __extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
  3040. vreinterpret_s8_f64 (float64x1_t __a)
  3041. {
  3042. return (int8x8_t) __a;
  3043. }
  3044. __extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
  3045. vreinterpret_s8_s16 (int16x4_t __a)
  3046. {
  3047. return (int8x8_t) __a;
  3048. }
  3049. __extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
  3050. vreinterpret_s8_s32 (int32x2_t __a)
  3051. {
  3052. return (int8x8_t) __a;
  3053. }
  3054. __extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
  3055. vreinterpret_s8_s64 (int64x1_t __a)
  3056. {
  3057. return (int8x8_t) __a;
  3058. }
  3059. __extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
  3060. vreinterpret_s8_f32 (float32x2_t __a)
  3061. {
  3062. return (int8x8_t) __a;
  3063. }
  3064. __extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
  3065. vreinterpret_s8_u8 (uint8x8_t __a)
  3066. {
  3067. return (int8x8_t) __a;
  3068. }
  3069. __extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
  3070. vreinterpret_s8_u16 (uint16x4_t __a)
  3071. {
  3072. return (int8x8_t) __a;
  3073. }
  3074. __extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
  3075. vreinterpret_s8_u32 (uint32x2_t __a)
  3076. {
  3077. return (int8x8_t) __a;
  3078. }
  3079. __extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
  3080. vreinterpret_s8_u64 (uint64x1_t __a)
  3081. {
  3082. return (int8x8_t) __a;
  3083. }
  3084. __extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
  3085. vreinterpret_s8_p8 (poly8x8_t __a)
  3086. {
  3087. return (int8x8_t) __a;
  3088. }
  3089. __extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
  3090. vreinterpret_s8_p16 (poly16x4_t __a)
  3091. {
  3092. return (int8x8_t) __a;
  3093. }
  3094. __extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
  3095. vreinterpretq_s8_f64 (float64x2_t __a)
  3096. {
  3097. return (int8x16_t) __a;
  3098. }
  3099. __extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
  3100. vreinterpretq_s8_s16 (int16x8_t __a)
  3101. {
  3102. return (int8x16_t) __a;
  3103. }
  3104. __extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
  3105. vreinterpretq_s8_s32 (int32x4_t __a)
  3106. {
  3107. return (int8x16_t) __a;
  3108. }
  3109. __extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
  3110. vreinterpretq_s8_s64 (int64x2_t __a)
  3111. {
  3112. return (int8x16_t) __a;
  3113. }
  3114. __extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
  3115. vreinterpretq_s8_f32 (float32x4_t __a)
  3116. {
  3117. return (int8x16_t) __a;
  3118. }
  3119. __extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
  3120. vreinterpretq_s8_u8 (uint8x16_t __a)
  3121. {
  3122. return (int8x16_t) __a;
  3123. }
  3124. __extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
  3125. vreinterpretq_s8_u16 (uint16x8_t __a)
  3126. {
  3127. return (int8x16_t) __a;
  3128. }
  3129. __extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
  3130. vreinterpretq_s8_u32 (uint32x4_t __a)
  3131. {
  3132. return (int8x16_t) __a;
  3133. }
  3134. __extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
  3135. vreinterpretq_s8_u64 (uint64x2_t __a)
  3136. {
  3137. return (int8x16_t) __a;
  3138. }
  3139. __extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
  3140. vreinterpretq_s8_p8 (poly8x16_t __a)
  3141. {
  3142. return (int8x16_t) __a;
  3143. }
  3144. __extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
  3145. vreinterpretq_s8_p16 (poly16x8_t __a)
  3146. {
  3147. return (int8x16_t) __a;
  3148. }
  3149. __extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
  3150. vreinterpret_s16_f64 (float64x1_t __a)
  3151. {
  3152. return (int16x4_t) __a;
  3153. }
  3154. __extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
  3155. vreinterpret_s16_s8 (int8x8_t __a)
  3156. {
  3157. return (int16x4_t) __a;
  3158. }
  3159. __extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
  3160. vreinterpret_s16_s32 (int32x2_t __a)
  3161. {
  3162. return (int16x4_t) __a;
  3163. }
  3164. __extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
  3165. vreinterpret_s16_s64 (int64x1_t __a)
  3166. {
  3167. return (int16x4_t) __a;
  3168. }
  3169. __extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
  3170. vreinterpret_s16_f32 (float32x2_t __a)
  3171. {
  3172. return (int16x4_t) __a;
  3173. }
  3174. __extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
  3175. vreinterpret_s16_u8 (uint8x8_t __a)
  3176. {
  3177. return (int16x4_t) __a;
  3178. }
  3179. __extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
  3180. vreinterpret_s16_u16 (uint16x4_t __a)
  3181. {
  3182. return (int16x4_t) __a;
  3183. }
  3184. __extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
  3185. vreinterpret_s16_u32 (uint32x2_t __a)
  3186. {
  3187. return (int16x4_t) __a;
  3188. }
  3189. __extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
  3190. vreinterpret_s16_u64 (uint64x1_t __a)
  3191. {
  3192. return (int16x4_t) __a;
  3193. }
  3194. __extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
  3195. vreinterpret_s16_p8 (poly8x8_t __a)
  3196. {
  3197. return (int16x4_t) __a;
  3198. }
  3199. __extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
  3200. vreinterpret_s16_p16 (poly16x4_t __a)
  3201. {
  3202. return (int16x4_t) __a;
  3203. }
  3204. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  3205. vreinterpretq_s16_f64 (float64x2_t __a)
  3206. {
  3207. return (int16x8_t) __a;
  3208. }
  3209. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  3210. vreinterpretq_s16_s8 (int8x16_t __a)
  3211. {
  3212. return (int16x8_t) __a;
  3213. }
  3214. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  3215. vreinterpretq_s16_s32 (int32x4_t __a)
  3216. {
  3217. return (int16x8_t) __a;
  3218. }
  3219. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  3220. vreinterpretq_s16_s64 (int64x2_t __a)
  3221. {
  3222. return (int16x8_t) __a;
  3223. }
  3224. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  3225. vreinterpretq_s16_f32 (float32x4_t __a)
  3226. {
  3227. return (int16x8_t) __a;
  3228. }
  3229. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  3230. vreinterpretq_s16_u8 (uint8x16_t __a)
  3231. {
  3232. return (int16x8_t) __a;
  3233. }
  3234. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  3235. vreinterpretq_s16_u16 (uint16x8_t __a)
  3236. {
  3237. return (int16x8_t) __a;
  3238. }
  3239. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  3240. vreinterpretq_s16_u32 (uint32x4_t __a)
  3241. {
  3242. return (int16x8_t) __a;
  3243. }
  3244. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  3245. vreinterpretq_s16_u64 (uint64x2_t __a)
  3246. {
  3247. return (int16x8_t) __a;
  3248. }
  3249. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  3250. vreinterpretq_s16_p8 (poly8x16_t __a)
  3251. {
  3252. return (int16x8_t) __a;
  3253. }
  3254. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  3255. vreinterpretq_s16_p16 (poly16x8_t __a)
  3256. {
  3257. return (int16x8_t) __a;
  3258. }
  3259. __extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
  3260. vreinterpret_s32_f64 (float64x1_t __a)
  3261. {
  3262. return (int32x2_t) __a;
  3263. }
  3264. __extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
  3265. vreinterpret_s32_s8 (int8x8_t __a)
  3266. {
  3267. return (int32x2_t) __a;
  3268. }
  3269. __extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
  3270. vreinterpret_s32_s16 (int16x4_t __a)
  3271. {
  3272. return (int32x2_t) __a;
  3273. }
  3274. __extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
  3275. vreinterpret_s32_s64 (int64x1_t __a)
  3276. {
  3277. return (int32x2_t) __a;
  3278. }
  3279. __extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
  3280. vreinterpret_s32_f32 (float32x2_t __a)
  3281. {
  3282. return (int32x2_t) __a;
  3283. }
  3284. __extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
  3285. vreinterpret_s32_u8 (uint8x8_t __a)
  3286. {
  3287. return (int32x2_t) __a;
  3288. }
  3289. __extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
  3290. vreinterpret_s32_u16 (uint16x4_t __a)
  3291. {
  3292. return (int32x2_t) __a;
  3293. }
  3294. __extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
  3295. vreinterpret_s32_u32 (uint32x2_t __a)
  3296. {
  3297. return (int32x2_t) __a;
  3298. }
  3299. __extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
  3300. vreinterpret_s32_u64 (uint64x1_t __a)
  3301. {
  3302. return (int32x2_t) __a;
  3303. }
  3304. __extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
  3305. vreinterpret_s32_p8 (poly8x8_t __a)
  3306. {
  3307. return (int32x2_t) __a;
  3308. }
  3309. __extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
  3310. vreinterpret_s32_p16 (poly16x4_t __a)
  3311. {
  3312. return (int32x2_t) __a;
  3313. }
  3314. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  3315. vreinterpretq_s32_f64 (float64x2_t __a)
  3316. {
  3317. return (int32x4_t) __a;
  3318. }
  3319. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  3320. vreinterpretq_s32_s8 (int8x16_t __a)
  3321. {
  3322. return (int32x4_t) __a;
  3323. }
  3324. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  3325. vreinterpretq_s32_s16 (int16x8_t __a)
  3326. {
  3327. return (int32x4_t) __a;
  3328. }
  3329. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  3330. vreinterpretq_s32_s64 (int64x2_t __a)
  3331. {
  3332. return (int32x4_t) __a;
  3333. }
  3334. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  3335. vreinterpretq_s32_f32 (float32x4_t __a)
  3336. {
  3337. return (int32x4_t) __a;
  3338. }
  3339. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  3340. vreinterpretq_s32_u8 (uint8x16_t __a)
  3341. {
  3342. return (int32x4_t) __a;
  3343. }
  3344. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  3345. vreinterpretq_s32_u16 (uint16x8_t __a)
  3346. {
  3347. return (int32x4_t) __a;
  3348. }
  3349. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  3350. vreinterpretq_s32_u32 (uint32x4_t __a)
  3351. {
  3352. return (int32x4_t) __a;
  3353. }
  3354. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  3355. vreinterpretq_s32_u64 (uint64x2_t __a)
  3356. {
  3357. return (int32x4_t) __a;
  3358. }
  3359. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  3360. vreinterpretq_s32_p8 (poly8x16_t __a)
  3361. {
  3362. return (int32x4_t) __a;
  3363. }
  3364. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  3365. vreinterpretq_s32_p16 (poly16x8_t __a)
  3366. {
  3367. return (int32x4_t) __a;
  3368. }
  3369. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  3370. vreinterpret_u8_f64 (float64x1_t __a)
  3371. {
  3372. return (uint8x8_t) __a;
  3373. }
  3374. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  3375. vreinterpret_u8_s8 (int8x8_t __a)
  3376. {
  3377. return (uint8x8_t) __a;
  3378. }
  3379. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  3380. vreinterpret_u8_s16 (int16x4_t __a)
  3381. {
  3382. return (uint8x8_t) __a;
  3383. }
  3384. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  3385. vreinterpret_u8_s32 (int32x2_t __a)
  3386. {
  3387. return (uint8x8_t) __a;
  3388. }
  3389. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  3390. vreinterpret_u8_s64 (int64x1_t __a)
  3391. {
  3392. return (uint8x8_t) __a;
  3393. }
  3394. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  3395. vreinterpret_u8_f32 (float32x2_t __a)
  3396. {
  3397. return (uint8x8_t) __a;
  3398. }
  3399. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  3400. vreinterpret_u8_u16 (uint16x4_t __a)
  3401. {
  3402. return (uint8x8_t) __a;
  3403. }
  3404. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  3405. vreinterpret_u8_u32 (uint32x2_t __a)
  3406. {
  3407. return (uint8x8_t) __a;
  3408. }
  3409. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  3410. vreinterpret_u8_u64 (uint64x1_t __a)
  3411. {
  3412. return (uint8x8_t) __a;
  3413. }
  3414. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  3415. vreinterpret_u8_p8 (poly8x8_t __a)
  3416. {
  3417. return (uint8x8_t) __a;
  3418. }
  3419. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  3420. vreinterpret_u8_p16 (poly16x4_t __a)
  3421. {
  3422. return (uint8x8_t) __a;
  3423. }
  3424. __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
  3425. vreinterpretq_u8_f64 (float64x2_t __a)
  3426. {
  3427. return (uint8x16_t) __a;
  3428. }
  3429. __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
  3430. vreinterpretq_u8_s8 (int8x16_t __a)
  3431. {
  3432. return (uint8x16_t) __a;
  3433. }
  3434. __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
  3435. vreinterpretq_u8_s16 (int16x8_t __a)
  3436. {
  3437. return (uint8x16_t) __a;
  3438. }
  3439. __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
  3440. vreinterpretq_u8_s32 (int32x4_t __a)
  3441. {
  3442. return (uint8x16_t) __a;
  3443. }
  3444. __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
  3445. vreinterpretq_u8_s64 (int64x2_t __a)
  3446. {
  3447. return (uint8x16_t) __a;
  3448. }
  3449. __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
  3450. vreinterpretq_u8_f32 (float32x4_t __a)
  3451. {
  3452. return (uint8x16_t) __a;
  3453. }
  3454. __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
  3455. vreinterpretq_u8_u16 (uint16x8_t __a)
  3456. {
  3457. return (uint8x16_t) __a;
  3458. }
  3459. __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
  3460. vreinterpretq_u8_u32 (uint32x4_t __a)
  3461. {
  3462. return (uint8x16_t) __a;
  3463. }
  3464. __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
  3465. vreinterpretq_u8_u64 (uint64x2_t __a)
  3466. {
  3467. return (uint8x16_t) __a;
  3468. }
  3469. __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
  3470. vreinterpretq_u8_p8 (poly8x16_t __a)
  3471. {
  3472. return (uint8x16_t) __a;
  3473. }
  3474. __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
  3475. vreinterpretq_u8_p16 (poly16x8_t __a)
  3476. {
  3477. return (uint8x16_t) __a;
  3478. }
  3479. __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
  3480. vreinterpret_u16_f64 (float64x1_t __a)
  3481. {
  3482. return (uint16x4_t) __a;
  3483. }
  3484. __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
  3485. vreinterpret_u16_s8 (int8x8_t __a)
  3486. {
  3487. return (uint16x4_t) __a;
  3488. }
  3489. __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
  3490. vreinterpret_u16_s16 (int16x4_t __a)
  3491. {
  3492. return (uint16x4_t) __a;
  3493. }
  3494. __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
  3495. vreinterpret_u16_s32 (int32x2_t __a)
  3496. {
  3497. return (uint16x4_t) __a;
  3498. }
  3499. __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
  3500. vreinterpret_u16_s64 (int64x1_t __a)
  3501. {
  3502. return (uint16x4_t) __a;
  3503. }
  3504. __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
  3505. vreinterpret_u16_f32 (float32x2_t __a)
  3506. {
  3507. return (uint16x4_t) __a;
  3508. }
  3509. __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
  3510. vreinterpret_u16_u8 (uint8x8_t __a)
  3511. {
  3512. return (uint16x4_t) __a;
  3513. }
  3514. __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
  3515. vreinterpret_u16_u32 (uint32x2_t __a)
  3516. {
  3517. return (uint16x4_t) __a;
  3518. }
  3519. __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
  3520. vreinterpret_u16_u64 (uint64x1_t __a)
  3521. {
  3522. return (uint16x4_t) __a;
  3523. }
  3524. __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
  3525. vreinterpret_u16_p8 (poly8x8_t __a)
  3526. {
  3527. return (uint16x4_t) __a;
  3528. }
  3529. __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
  3530. vreinterpret_u16_p16 (poly16x4_t __a)
  3531. {
  3532. return (uint16x4_t) __a;
  3533. }
  3534. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  3535. vreinterpretq_u16_f64 (float64x2_t __a)
  3536. {
  3537. return (uint16x8_t) __a;
  3538. }
  3539. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  3540. vreinterpretq_u16_s8 (int8x16_t __a)
  3541. {
  3542. return (uint16x8_t) __a;
  3543. }
  3544. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  3545. vreinterpretq_u16_s16 (int16x8_t __a)
  3546. {
  3547. return (uint16x8_t) __a;
  3548. }
  3549. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  3550. vreinterpretq_u16_s32 (int32x4_t __a)
  3551. {
  3552. return (uint16x8_t) __a;
  3553. }
  3554. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  3555. vreinterpretq_u16_s64 (int64x2_t __a)
  3556. {
  3557. return (uint16x8_t) __a;
  3558. }
  3559. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  3560. vreinterpretq_u16_f32 (float32x4_t __a)
  3561. {
  3562. return (uint16x8_t) __a;
  3563. }
  3564. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  3565. vreinterpretq_u16_u8 (uint8x16_t __a)
  3566. {
  3567. return (uint16x8_t) __a;
  3568. }
  3569. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  3570. vreinterpretq_u16_u32 (uint32x4_t __a)
  3571. {
  3572. return (uint16x8_t) __a;
  3573. }
  3574. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  3575. vreinterpretq_u16_u64 (uint64x2_t __a)
  3576. {
  3577. return (uint16x8_t) __a;
  3578. }
  3579. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  3580. vreinterpretq_u16_p8 (poly8x16_t __a)
  3581. {
  3582. return (uint16x8_t) __a;
  3583. }
  3584. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  3585. vreinterpretq_u16_p16 (poly16x8_t __a)
  3586. {
  3587. return (uint16x8_t) __a;
  3588. }
  3589. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  3590. vreinterpret_u32_f64 (float64x1_t __a)
  3591. {
  3592. return (uint32x2_t) __a;
  3593. }
  3594. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  3595. vreinterpret_u32_s8 (int8x8_t __a)
  3596. {
  3597. return (uint32x2_t) __a;
  3598. }
  3599. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  3600. vreinterpret_u32_s16 (int16x4_t __a)
  3601. {
  3602. return (uint32x2_t) __a;
  3603. }
  3604. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  3605. vreinterpret_u32_s32 (int32x2_t __a)
  3606. {
  3607. return (uint32x2_t) __a;
  3608. }
  3609. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  3610. vreinterpret_u32_s64 (int64x1_t __a)
  3611. {
  3612. return (uint32x2_t) __a;
  3613. }
  3614. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  3615. vreinterpret_u32_f32 (float32x2_t __a)
  3616. {
  3617. return (uint32x2_t) __a;
  3618. }
  3619. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  3620. vreinterpret_u32_u8 (uint8x8_t __a)
  3621. {
  3622. return (uint32x2_t) __a;
  3623. }
  3624. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  3625. vreinterpret_u32_u16 (uint16x4_t __a)
  3626. {
  3627. return (uint32x2_t) __a;
  3628. }
  3629. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  3630. vreinterpret_u32_u64 (uint64x1_t __a)
  3631. {
  3632. return (uint32x2_t) __a;
  3633. }
  3634. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  3635. vreinterpret_u32_p8 (poly8x8_t __a)
  3636. {
  3637. return (uint32x2_t) __a;
  3638. }
  3639. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  3640. vreinterpret_u32_p16 (poly16x4_t __a)
  3641. {
  3642. return (uint32x2_t) __a;
  3643. }
  3644. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  3645. vreinterpretq_u32_f64 (float64x2_t __a)
  3646. {
  3647. return (uint32x4_t) __a;
  3648. }
  3649. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  3650. vreinterpretq_u32_s8 (int8x16_t __a)
  3651. {
  3652. return (uint32x4_t) __a;
  3653. }
  3654. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  3655. vreinterpretq_u32_s16 (int16x8_t __a)
  3656. {
  3657. return (uint32x4_t) __a;
  3658. }
  3659. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  3660. vreinterpretq_u32_s32 (int32x4_t __a)
  3661. {
  3662. return (uint32x4_t) __a;
  3663. }
  3664. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  3665. vreinterpretq_u32_s64 (int64x2_t __a)
  3666. {
  3667. return (uint32x4_t) __a;
  3668. }
  3669. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  3670. vreinterpretq_u32_f32 (float32x4_t __a)
  3671. {
  3672. return (uint32x4_t) __a;
  3673. }
  3674. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  3675. vreinterpretq_u32_u8 (uint8x16_t __a)
  3676. {
  3677. return (uint32x4_t) __a;
  3678. }
  3679. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  3680. vreinterpretq_u32_u16 (uint16x8_t __a)
  3681. {
  3682. return (uint32x4_t) __a;
  3683. }
  3684. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  3685. vreinterpretq_u32_u64 (uint64x2_t __a)
  3686. {
  3687. return (uint32x4_t) __a;
  3688. }
  3689. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  3690. vreinterpretq_u32_p8 (poly8x16_t __a)
  3691. {
  3692. return (uint32x4_t) __a;
  3693. }
  3694. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  3695. vreinterpretq_u32_p16 (poly16x8_t __a)
  3696. {
  3697. return (uint32x4_t) __a;
  3698. }
  3699. /* vset_lane */
  3700. __extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
  3701. vset_lane_f32 (float32_t __elem, float32x2_t __vec, const int __index)
  3702. {
  3703. return __aarch64_vset_lane_any (__elem, __vec, __index);
  3704. }
  3705. __extension__ static __inline float64x1_t __attribute__ ((__always_inline__))
  3706. vset_lane_f64 (float64_t __elem, float64x1_t __vec, const int __index)
  3707. {
  3708. return __aarch64_vset_lane_any (__elem, __vec, __index);
  3709. }
  3710. __extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
  3711. vset_lane_p8 (poly8_t __elem, poly8x8_t __vec, const int __index)
  3712. {
  3713. return __aarch64_vset_lane_any (__elem, __vec, __index);
  3714. }
  3715. __extension__ static __inline poly16x4_t __attribute__ ((__always_inline__))
  3716. vset_lane_p16 (poly16_t __elem, poly16x4_t __vec, const int __index)
  3717. {
  3718. return __aarch64_vset_lane_any (__elem, __vec, __index);
  3719. }
  3720. __extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
  3721. vset_lane_s8 (int8_t __elem, int8x8_t __vec, const int __index)
  3722. {
  3723. return __aarch64_vset_lane_any (__elem, __vec, __index);
  3724. }
  3725. __extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
  3726. vset_lane_s16 (int16_t __elem, int16x4_t __vec, const int __index)
  3727. {
  3728. return __aarch64_vset_lane_any (__elem, __vec, __index);
  3729. }
  3730. __extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
  3731. vset_lane_s32 (int32_t __elem, int32x2_t __vec, const int __index)
  3732. {
  3733. return __aarch64_vset_lane_any (__elem, __vec, __index);
  3734. }
  3735. __extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
  3736. vset_lane_s64 (int64_t __elem, int64x1_t __vec, const int __index)
  3737. {
  3738. return __aarch64_vset_lane_any (__elem, __vec, __index);
  3739. }
  3740. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  3741. vset_lane_u8 (uint8_t __elem, uint8x8_t __vec, const int __index)
  3742. {
  3743. return __aarch64_vset_lane_any (__elem, __vec, __index);
  3744. }
  3745. __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
  3746. vset_lane_u16 (uint16_t __elem, uint16x4_t __vec, const int __index)
  3747. {
  3748. return __aarch64_vset_lane_any (__elem, __vec, __index);
  3749. }
  3750. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  3751. vset_lane_u32 (uint32_t __elem, uint32x2_t __vec, const int __index)
  3752. {
  3753. return __aarch64_vset_lane_any (__elem, __vec, __index);
  3754. }
  3755. __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
  3756. vset_lane_u64 (uint64_t __elem, uint64x1_t __vec, const int __index)
  3757. {
  3758. return __aarch64_vset_lane_any (__elem, __vec, __index);
  3759. }
  3760. /* vsetq_lane */
  3761. __extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
  3762. vsetq_lane_f32 (float32_t __elem, float32x4_t __vec, const int __index)
  3763. {
  3764. return __aarch64_vset_lane_any (__elem, __vec, __index);
  3765. }
  3766. __extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
  3767. vsetq_lane_f64 (float64_t __elem, float64x2_t __vec, const int __index)
  3768. {
  3769. return __aarch64_vset_lane_any (__elem, __vec, __index);
  3770. }
  3771. __extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
  3772. vsetq_lane_p8 (poly8_t __elem, poly8x16_t __vec, const int __index)
  3773. {
  3774. return __aarch64_vset_lane_any (__elem, __vec, __index);
  3775. }
  3776. __extension__ static __inline poly16x8_t __attribute__ ((__always_inline__))
  3777. vsetq_lane_p16 (poly16_t __elem, poly16x8_t __vec, const int __index)
  3778. {
  3779. return __aarch64_vset_lane_any (__elem, __vec, __index);
  3780. }
  3781. __extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
  3782. vsetq_lane_s8 (int8_t __elem, int8x16_t __vec, const int __index)
  3783. {
  3784. return __aarch64_vset_lane_any (__elem, __vec, __index);
  3785. }
  3786. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  3787. vsetq_lane_s16 (int16_t __elem, int16x8_t __vec, const int __index)
  3788. {
  3789. return __aarch64_vset_lane_any (__elem, __vec, __index);
  3790. }
  3791. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  3792. vsetq_lane_s32 (int32_t __elem, int32x4_t __vec, const int __index)
  3793. {
  3794. return __aarch64_vset_lane_any (__elem, __vec, __index);
  3795. }
  3796. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  3797. vsetq_lane_s64 (int64_t __elem, int64x2_t __vec, const int __index)
  3798. {
  3799. return __aarch64_vset_lane_any (__elem, __vec, __index);
  3800. }
  3801. __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
  3802. vsetq_lane_u8 (uint8_t __elem, uint8x16_t __vec, const int __index)
  3803. {
  3804. return __aarch64_vset_lane_any (__elem, __vec, __index);
  3805. }
  3806. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  3807. vsetq_lane_u16 (uint16_t __elem, uint16x8_t __vec, const int __index)
  3808. {
  3809. return __aarch64_vset_lane_any (__elem, __vec, __index);
  3810. }
  3811. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  3812. vsetq_lane_u32 (uint32_t __elem, uint32x4_t __vec, const int __index)
  3813. {
  3814. return __aarch64_vset_lane_any (__elem, __vec, __index);
  3815. }
  3816. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  3817. vsetq_lane_u64 (uint64_t __elem, uint64x2_t __vec, const int __index)
  3818. {
  3819. return __aarch64_vset_lane_any (__elem, __vec, __index);
  3820. }
  3821. #define __GET_LOW(__TYPE) \
  3822. uint64x2_t tmp = vreinterpretq_u64_##__TYPE (__a); \
  3823. uint64x1_t lo = vcreate_u64 (vgetq_lane_u64 (tmp, 0)); \
  3824. return vreinterpret_##__TYPE##_u64 (lo);
  3825. __extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
  3826. vget_low_f32 (float32x4_t __a)
  3827. {
  3828. __GET_LOW (f32);
  3829. }
  3830. __extension__ static __inline float64x1_t __attribute__ ((__always_inline__))
  3831. vget_low_f64 (float64x2_t __a)
  3832. {
  3833. return (float64x1_t) {vgetq_lane_f64 (__a, 0)};
  3834. }
  3835. __extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
  3836. vget_low_p8 (poly8x16_t __a)
  3837. {
  3838. __GET_LOW (p8);
  3839. }
  3840. __extension__ static __inline poly16x4_t __attribute__ ((__always_inline__))
  3841. vget_low_p16 (poly16x8_t __a)
  3842. {
  3843. __GET_LOW (p16);
  3844. }
  3845. __extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
  3846. vget_low_s8 (int8x16_t __a)
  3847. {
  3848. __GET_LOW (s8);
  3849. }
  3850. __extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
  3851. vget_low_s16 (int16x8_t __a)
  3852. {
  3853. __GET_LOW (s16);
  3854. }
  3855. __extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
  3856. vget_low_s32 (int32x4_t __a)
  3857. {
  3858. __GET_LOW (s32);
  3859. }
  3860. __extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
  3861. vget_low_s64 (int64x2_t __a)
  3862. {
  3863. __GET_LOW (s64);
  3864. }
  3865. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  3866. vget_low_u8 (uint8x16_t __a)
  3867. {
  3868. __GET_LOW (u8);
  3869. }
  3870. __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
  3871. vget_low_u16 (uint16x8_t __a)
  3872. {
  3873. __GET_LOW (u16);
  3874. }
  3875. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  3876. vget_low_u32 (uint32x4_t __a)
  3877. {
  3878. __GET_LOW (u32);
  3879. }
  3880. __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
  3881. vget_low_u64 (uint64x2_t __a)
  3882. {
  3883. return vcreate_u64 (vgetq_lane_u64 (__a, 0));
  3884. }
  3885. #undef __GET_LOW
  3886. #define __GET_HIGH(__TYPE) \
  3887. uint64x2_t tmp = vreinterpretq_u64_##__TYPE (__a); \
  3888. uint64x1_t hi = vcreate_u64 (vgetq_lane_u64 (tmp, 1)); \
  3889. return vreinterpret_##__TYPE##_u64 (hi);
  3890. __extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
  3891. vget_high_f32 (float32x4_t __a)
  3892. {
  3893. __GET_HIGH (f32);
  3894. }
  3895. __extension__ static __inline float64x1_t __attribute__ ((__always_inline__))
  3896. vget_high_f64 (float64x2_t __a)
  3897. {
  3898. __GET_HIGH (f64);
  3899. }
  3900. __extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
  3901. vget_high_p8 (poly8x16_t __a)
  3902. {
  3903. __GET_HIGH (p8);
  3904. }
  3905. __extension__ static __inline poly16x4_t __attribute__ ((__always_inline__))
  3906. vget_high_p16 (poly16x8_t __a)
  3907. {
  3908. __GET_HIGH (p16);
  3909. }
  3910. __extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
  3911. vget_high_s8 (int8x16_t __a)
  3912. {
  3913. __GET_HIGH (s8);
  3914. }
  3915. __extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
  3916. vget_high_s16 (int16x8_t __a)
  3917. {
  3918. __GET_HIGH (s16);
  3919. }
  3920. __extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
  3921. vget_high_s32 (int32x4_t __a)
  3922. {
  3923. __GET_HIGH (s32);
  3924. }
  3925. __extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
  3926. vget_high_s64 (int64x2_t __a)
  3927. {
  3928. __GET_HIGH (s64);
  3929. }
  3930. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  3931. vget_high_u8 (uint8x16_t __a)
  3932. {
  3933. __GET_HIGH (u8);
  3934. }
  3935. __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
  3936. vget_high_u16 (uint16x8_t __a)
  3937. {
  3938. __GET_HIGH (u16);
  3939. }
  3940. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  3941. vget_high_u32 (uint32x4_t __a)
  3942. {
  3943. __GET_HIGH (u32);
  3944. }
  3945. #undef __GET_HIGH
  3946. __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
  3947. vget_high_u64 (uint64x2_t __a)
  3948. {
  3949. return vcreate_u64 (vgetq_lane_u64 (__a, 1));
  3950. }
  3951. __extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
  3952. vcombine_s8 (int8x8_t __a, int8x8_t __b)
  3953. {
  3954. return (int8x16_t) __builtin_aarch64_combinev8qi (__a, __b);
  3955. }
  3956. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  3957. vcombine_s16 (int16x4_t __a, int16x4_t __b)
  3958. {
  3959. return (int16x8_t) __builtin_aarch64_combinev4hi (__a, __b);
  3960. }
  3961. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  3962. vcombine_s32 (int32x2_t __a, int32x2_t __b)
  3963. {
  3964. return (int32x4_t) __builtin_aarch64_combinev2si (__a, __b);
  3965. }
  3966. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  3967. vcombine_s64 (int64x1_t __a, int64x1_t __b)
  3968. {
  3969. return __builtin_aarch64_combinedi (__a[0], __b[0]);
  3970. }
  3971. __extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
  3972. vcombine_f32 (float32x2_t __a, float32x2_t __b)
  3973. {
  3974. return (float32x4_t) __builtin_aarch64_combinev2sf (__a, __b);
  3975. }
  3976. __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
  3977. vcombine_u8 (uint8x8_t __a, uint8x8_t __b)
  3978. {
  3979. return (uint8x16_t) __builtin_aarch64_combinev8qi ((int8x8_t) __a,
  3980. (int8x8_t) __b);
  3981. }
  3982. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  3983. vcombine_u16 (uint16x4_t __a, uint16x4_t __b)
  3984. {
  3985. return (uint16x8_t) __builtin_aarch64_combinev4hi ((int16x4_t) __a,
  3986. (int16x4_t) __b);
  3987. }
  3988. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  3989. vcombine_u32 (uint32x2_t __a, uint32x2_t __b)
  3990. {
  3991. return (uint32x4_t) __builtin_aarch64_combinev2si ((int32x2_t) __a,
  3992. (int32x2_t) __b);
  3993. }
  3994. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  3995. vcombine_u64 (uint64x1_t __a, uint64x1_t __b)
  3996. {
  3997. return (uint64x2_t) __builtin_aarch64_combinedi (__a[0], __b[0]);
  3998. }
  3999. __extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
  4000. vcombine_f64 (float64x1_t __a, float64x1_t __b)
  4001. {
  4002. return __builtin_aarch64_combinedf (__a[0], __b[0]);
  4003. }
  4004. __extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
  4005. vcombine_p8 (poly8x8_t __a, poly8x8_t __b)
  4006. {
  4007. return (poly8x16_t) __builtin_aarch64_combinev8qi ((int8x8_t) __a,
  4008. (int8x8_t) __b);
  4009. }
  4010. __extension__ static __inline poly16x8_t __attribute__ ((__always_inline__))
  4011. vcombine_p16 (poly16x4_t __a, poly16x4_t __b)
  4012. {
  4013. return (poly16x8_t) __builtin_aarch64_combinev4hi ((int16x4_t) __a,
  4014. (int16x4_t) __b);
  4015. }
  4016. /* Start of temporary inline asm implementations. */
  4017. __extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
  4018. vaba_s8 (int8x8_t a, int8x8_t b, int8x8_t c)
  4019. {
  4020. int8x8_t result;
  4021. __asm__ ("saba %0.8b,%2.8b,%3.8b"
  4022. : "=w"(result)
  4023. : "0"(a), "w"(b), "w"(c)
  4024. : /* No clobbers */);
  4025. return result;
  4026. }
  4027. __extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
  4028. vaba_s16 (int16x4_t a, int16x4_t b, int16x4_t c)
  4029. {
  4030. int16x4_t result;
  4031. __asm__ ("saba %0.4h,%2.4h,%3.4h"
  4032. : "=w"(result)
  4033. : "0"(a), "w"(b), "w"(c)
  4034. : /* No clobbers */);
  4035. return result;
  4036. }
  4037. __extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
  4038. vaba_s32 (int32x2_t a, int32x2_t b, int32x2_t c)
  4039. {
  4040. int32x2_t result;
  4041. __asm__ ("saba %0.2s,%2.2s,%3.2s"
  4042. : "=w"(result)
  4043. : "0"(a), "w"(b), "w"(c)
  4044. : /* No clobbers */);
  4045. return result;
  4046. }
  4047. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  4048. vaba_u8 (uint8x8_t a, uint8x8_t b, uint8x8_t c)
  4049. {
  4050. uint8x8_t result;
  4051. __asm__ ("uaba %0.8b,%2.8b,%3.8b"
  4052. : "=w"(result)
  4053. : "0"(a), "w"(b), "w"(c)
  4054. : /* No clobbers */);
  4055. return result;
  4056. }
  4057. __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
  4058. vaba_u16 (uint16x4_t a, uint16x4_t b, uint16x4_t c)
  4059. {
  4060. uint16x4_t result;
  4061. __asm__ ("uaba %0.4h,%2.4h,%3.4h"
  4062. : "=w"(result)
  4063. : "0"(a), "w"(b), "w"(c)
  4064. : /* No clobbers */);
  4065. return result;
  4066. }
  4067. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  4068. vaba_u32 (uint32x2_t a, uint32x2_t b, uint32x2_t c)
  4069. {
  4070. uint32x2_t result;
  4071. __asm__ ("uaba %0.2s,%2.2s,%3.2s"
  4072. : "=w"(result)
  4073. : "0"(a), "w"(b), "w"(c)
  4074. : /* No clobbers */);
  4075. return result;
  4076. }
  4077. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  4078. vabal_high_s8 (int16x8_t a, int8x16_t b, int8x16_t c)
  4079. {
  4080. int16x8_t result;
  4081. __asm__ ("sabal2 %0.8h,%2.16b,%3.16b"
  4082. : "=w"(result)
  4083. : "0"(a), "w"(b), "w"(c)
  4084. : /* No clobbers */);
  4085. return result;
  4086. }
  4087. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  4088. vabal_high_s16 (int32x4_t a, int16x8_t b, int16x8_t c)
  4089. {
  4090. int32x4_t result;
  4091. __asm__ ("sabal2 %0.4s,%2.8h,%3.8h"
  4092. : "=w"(result)
  4093. : "0"(a), "w"(b), "w"(c)
  4094. : /* No clobbers */);
  4095. return result;
  4096. }
  4097. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  4098. vabal_high_s32 (int64x2_t a, int32x4_t b, int32x4_t c)
  4099. {
  4100. int64x2_t result;
  4101. __asm__ ("sabal2 %0.2d,%2.4s,%3.4s"
  4102. : "=w"(result)
  4103. : "0"(a), "w"(b), "w"(c)
  4104. : /* No clobbers */);
  4105. return result;
  4106. }
  4107. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  4108. vabal_high_u8 (uint16x8_t a, uint8x16_t b, uint8x16_t c)
  4109. {
  4110. uint16x8_t result;
  4111. __asm__ ("uabal2 %0.8h,%2.16b,%3.16b"
  4112. : "=w"(result)
  4113. : "0"(a), "w"(b), "w"(c)
  4114. : /* No clobbers */);
  4115. return result;
  4116. }
  4117. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  4118. vabal_high_u16 (uint32x4_t a, uint16x8_t b, uint16x8_t c)
  4119. {
  4120. uint32x4_t result;
  4121. __asm__ ("uabal2 %0.4s,%2.8h,%3.8h"
  4122. : "=w"(result)
  4123. : "0"(a), "w"(b), "w"(c)
  4124. : /* No clobbers */);
  4125. return result;
  4126. }
  4127. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  4128. vabal_high_u32 (uint64x2_t a, uint32x4_t b, uint32x4_t c)
  4129. {
  4130. uint64x2_t result;
  4131. __asm__ ("uabal2 %0.2d,%2.4s,%3.4s"
  4132. : "=w"(result)
  4133. : "0"(a), "w"(b), "w"(c)
  4134. : /* No clobbers */);
  4135. return result;
  4136. }
  4137. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  4138. vabal_s8 (int16x8_t a, int8x8_t b, int8x8_t c)
  4139. {
  4140. int16x8_t result;
  4141. __asm__ ("sabal %0.8h,%2.8b,%3.8b"
  4142. : "=w"(result)
  4143. : "0"(a), "w"(b), "w"(c)
  4144. : /* No clobbers */);
  4145. return result;
  4146. }
  4147. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  4148. vabal_s16 (int32x4_t a, int16x4_t b, int16x4_t c)
  4149. {
  4150. int32x4_t result;
  4151. __asm__ ("sabal %0.4s,%2.4h,%3.4h"
  4152. : "=w"(result)
  4153. : "0"(a), "w"(b), "w"(c)
  4154. : /* No clobbers */);
  4155. return result;
  4156. }
  4157. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  4158. vabal_s32 (int64x2_t a, int32x2_t b, int32x2_t c)
  4159. {
  4160. int64x2_t result;
  4161. __asm__ ("sabal %0.2d,%2.2s,%3.2s"
  4162. : "=w"(result)
  4163. : "0"(a), "w"(b), "w"(c)
  4164. : /* No clobbers */);
  4165. return result;
  4166. }
  4167. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  4168. vabal_u8 (uint16x8_t a, uint8x8_t b, uint8x8_t c)
  4169. {
  4170. uint16x8_t result;
  4171. __asm__ ("uabal %0.8h,%2.8b,%3.8b"
  4172. : "=w"(result)
  4173. : "0"(a), "w"(b), "w"(c)
  4174. : /* No clobbers */);
  4175. return result;
  4176. }
  4177. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  4178. vabal_u16 (uint32x4_t a, uint16x4_t b, uint16x4_t c)
  4179. {
  4180. uint32x4_t result;
  4181. __asm__ ("uabal %0.4s,%2.4h,%3.4h"
  4182. : "=w"(result)
  4183. : "0"(a), "w"(b), "w"(c)
  4184. : /* No clobbers */);
  4185. return result;
  4186. }
  4187. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  4188. vabal_u32 (uint64x2_t a, uint32x2_t b, uint32x2_t c)
  4189. {
  4190. uint64x2_t result;
  4191. __asm__ ("uabal %0.2d,%2.2s,%3.2s"
  4192. : "=w"(result)
  4193. : "0"(a), "w"(b), "w"(c)
  4194. : /* No clobbers */);
  4195. return result;
  4196. }
  4197. __extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
  4198. vabaq_s8 (int8x16_t a, int8x16_t b, int8x16_t c)
  4199. {
  4200. int8x16_t result;
  4201. __asm__ ("saba %0.16b,%2.16b,%3.16b"
  4202. : "=w"(result)
  4203. : "0"(a), "w"(b), "w"(c)
  4204. : /* No clobbers */);
  4205. return result;
  4206. }
  4207. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  4208. vabaq_s16 (int16x8_t a, int16x8_t b, int16x8_t c)
  4209. {
  4210. int16x8_t result;
  4211. __asm__ ("saba %0.8h,%2.8h,%3.8h"
  4212. : "=w"(result)
  4213. : "0"(a), "w"(b), "w"(c)
  4214. : /* No clobbers */);
  4215. return result;
  4216. }
  4217. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  4218. vabaq_s32 (int32x4_t a, int32x4_t b, int32x4_t c)
  4219. {
  4220. int32x4_t result;
  4221. __asm__ ("saba %0.4s,%2.4s,%3.4s"
  4222. : "=w"(result)
  4223. : "0"(a), "w"(b), "w"(c)
  4224. : /* No clobbers */);
  4225. return result;
  4226. }
  4227. __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
  4228. vabaq_u8 (uint8x16_t a, uint8x16_t b, uint8x16_t c)
  4229. {
  4230. uint8x16_t result;
  4231. __asm__ ("uaba %0.16b,%2.16b,%3.16b"
  4232. : "=w"(result)
  4233. : "0"(a), "w"(b), "w"(c)
  4234. : /* No clobbers */);
  4235. return result;
  4236. }
  4237. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  4238. vabaq_u16 (uint16x8_t a, uint16x8_t b, uint16x8_t c)
  4239. {
  4240. uint16x8_t result;
  4241. __asm__ ("uaba %0.8h,%2.8h,%3.8h"
  4242. : "=w"(result)
  4243. : "0"(a), "w"(b), "w"(c)
  4244. : /* No clobbers */);
  4245. return result;
  4246. }
  4247. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  4248. vabaq_u32 (uint32x4_t a, uint32x4_t b, uint32x4_t c)
  4249. {
  4250. uint32x4_t result;
  4251. __asm__ ("uaba %0.4s,%2.4s,%3.4s"
  4252. : "=w"(result)
  4253. : "0"(a), "w"(b), "w"(c)
  4254. : /* No clobbers */);
  4255. return result;
  4256. }
  4257. __extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
  4258. vabd_f32 (float32x2_t a, float32x2_t b)
  4259. {
  4260. float32x2_t result;
  4261. __asm__ ("fabd %0.2s, %1.2s, %2.2s"
  4262. : "=w"(result)
  4263. : "w"(a), "w"(b)
  4264. : /* No clobbers */);
  4265. return result;
  4266. }
  4267. __extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
  4268. vabd_s8 (int8x8_t a, int8x8_t b)
  4269. {
  4270. int8x8_t result;
  4271. __asm__ ("sabd %0.8b, %1.8b, %2.8b"
  4272. : "=w"(result)
  4273. : "w"(a), "w"(b)
  4274. : /* No clobbers */);
  4275. return result;
  4276. }
  4277. __extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
  4278. vabd_s16 (int16x4_t a, int16x4_t b)
  4279. {
  4280. int16x4_t result;
  4281. __asm__ ("sabd %0.4h, %1.4h, %2.4h"
  4282. : "=w"(result)
  4283. : "w"(a), "w"(b)
  4284. : /* No clobbers */);
  4285. return result;
  4286. }
  4287. __extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
  4288. vabd_s32 (int32x2_t a, int32x2_t b)
  4289. {
  4290. int32x2_t result;
  4291. __asm__ ("sabd %0.2s, %1.2s, %2.2s"
  4292. : "=w"(result)
  4293. : "w"(a), "w"(b)
  4294. : /* No clobbers */);
  4295. return result;
  4296. }
  4297. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  4298. vabd_u8 (uint8x8_t a, uint8x8_t b)
  4299. {
  4300. uint8x8_t result;
  4301. __asm__ ("uabd %0.8b, %1.8b, %2.8b"
  4302. : "=w"(result)
  4303. : "w"(a), "w"(b)
  4304. : /* No clobbers */);
  4305. return result;
  4306. }
  4307. __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
  4308. vabd_u16 (uint16x4_t a, uint16x4_t b)
  4309. {
  4310. uint16x4_t result;
  4311. __asm__ ("uabd %0.4h, %1.4h, %2.4h"
  4312. : "=w"(result)
  4313. : "w"(a), "w"(b)
  4314. : /* No clobbers */);
  4315. return result;
  4316. }
  4317. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  4318. vabd_u32 (uint32x2_t a, uint32x2_t b)
  4319. {
  4320. uint32x2_t result;
  4321. __asm__ ("uabd %0.2s, %1.2s, %2.2s"
  4322. : "=w"(result)
  4323. : "w"(a), "w"(b)
  4324. : /* No clobbers */);
  4325. return result;
  4326. }
  4327. __extension__ static __inline float64_t __attribute__ ((__always_inline__))
  4328. vabdd_f64 (float64_t a, float64_t b)
  4329. {
  4330. float64_t result;
  4331. __asm__ ("fabd %d0, %d1, %d2"
  4332. : "=w"(result)
  4333. : "w"(a), "w"(b)
  4334. : /* No clobbers */);
  4335. return result;
  4336. }
  4337. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  4338. vabdl_high_s8 (int8x16_t a, int8x16_t b)
  4339. {
  4340. int16x8_t result;
  4341. __asm__ ("sabdl2 %0.8h,%1.16b,%2.16b"
  4342. : "=w"(result)
  4343. : "w"(a), "w"(b)
  4344. : /* No clobbers */);
  4345. return result;
  4346. }
  4347. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  4348. vabdl_high_s16 (int16x8_t a, int16x8_t b)
  4349. {
  4350. int32x4_t result;
  4351. __asm__ ("sabdl2 %0.4s,%1.8h,%2.8h"
  4352. : "=w"(result)
  4353. : "w"(a), "w"(b)
  4354. : /* No clobbers */);
  4355. return result;
  4356. }
  4357. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  4358. vabdl_high_s32 (int32x4_t a, int32x4_t b)
  4359. {
  4360. int64x2_t result;
  4361. __asm__ ("sabdl2 %0.2d,%1.4s,%2.4s"
  4362. : "=w"(result)
  4363. : "w"(a), "w"(b)
  4364. : /* No clobbers */);
  4365. return result;
  4366. }
  4367. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  4368. vabdl_high_u8 (uint8x16_t a, uint8x16_t b)
  4369. {
  4370. uint16x8_t result;
  4371. __asm__ ("uabdl2 %0.8h,%1.16b,%2.16b"
  4372. : "=w"(result)
  4373. : "w"(a), "w"(b)
  4374. : /* No clobbers */);
  4375. return result;
  4376. }
  4377. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  4378. vabdl_high_u16 (uint16x8_t a, uint16x8_t b)
  4379. {
  4380. uint32x4_t result;
  4381. __asm__ ("uabdl2 %0.4s,%1.8h,%2.8h"
  4382. : "=w"(result)
  4383. : "w"(a), "w"(b)
  4384. : /* No clobbers */);
  4385. return result;
  4386. }
  4387. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  4388. vabdl_high_u32 (uint32x4_t a, uint32x4_t b)
  4389. {
  4390. uint64x2_t result;
  4391. __asm__ ("uabdl2 %0.2d,%1.4s,%2.4s"
  4392. : "=w"(result)
  4393. : "w"(a), "w"(b)
  4394. : /* No clobbers */);
  4395. return result;
  4396. }
  4397. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  4398. vabdl_s8 (int8x8_t a, int8x8_t b)
  4399. {
  4400. int16x8_t result;
  4401. __asm__ ("sabdl %0.8h, %1.8b, %2.8b"
  4402. : "=w"(result)
  4403. : "w"(a), "w"(b)
  4404. : /* No clobbers */);
  4405. return result;
  4406. }
  4407. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  4408. vabdl_s16 (int16x4_t a, int16x4_t b)
  4409. {
  4410. int32x4_t result;
  4411. __asm__ ("sabdl %0.4s, %1.4h, %2.4h"
  4412. : "=w"(result)
  4413. : "w"(a), "w"(b)
  4414. : /* No clobbers */);
  4415. return result;
  4416. }
  4417. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  4418. vabdl_s32 (int32x2_t a, int32x2_t b)
  4419. {
  4420. int64x2_t result;
  4421. __asm__ ("sabdl %0.2d, %1.2s, %2.2s"
  4422. : "=w"(result)
  4423. : "w"(a), "w"(b)
  4424. : /* No clobbers */);
  4425. return result;
  4426. }
  4427. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  4428. vabdl_u8 (uint8x8_t a, uint8x8_t b)
  4429. {
  4430. uint16x8_t result;
  4431. __asm__ ("uabdl %0.8h, %1.8b, %2.8b"
  4432. : "=w"(result)
  4433. : "w"(a), "w"(b)
  4434. : /* No clobbers */);
  4435. return result;
  4436. }
  4437. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  4438. vabdl_u16 (uint16x4_t a, uint16x4_t b)
  4439. {
  4440. uint32x4_t result;
  4441. __asm__ ("uabdl %0.4s, %1.4h, %2.4h"
  4442. : "=w"(result)
  4443. : "w"(a), "w"(b)
  4444. : /* No clobbers */);
  4445. return result;
  4446. }
  4447. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  4448. vabdl_u32 (uint32x2_t a, uint32x2_t b)
  4449. {
  4450. uint64x2_t result;
  4451. __asm__ ("uabdl %0.2d, %1.2s, %2.2s"
  4452. : "=w"(result)
  4453. : "w"(a), "w"(b)
  4454. : /* No clobbers */);
  4455. return result;
  4456. }
  4457. __extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
  4458. vabdq_f32 (float32x4_t a, float32x4_t b)
  4459. {
  4460. float32x4_t result;
  4461. __asm__ ("fabd %0.4s, %1.4s, %2.4s"
  4462. : "=w"(result)
  4463. : "w"(a), "w"(b)
  4464. : /* No clobbers */);
  4465. return result;
  4466. }
  4467. __extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
  4468. vabdq_f64 (float64x2_t a, float64x2_t b)
  4469. {
  4470. float64x2_t result;
  4471. __asm__ ("fabd %0.2d, %1.2d, %2.2d"
  4472. : "=w"(result)
  4473. : "w"(a), "w"(b)
  4474. : /* No clobbers */);
  4475. return result;
  4476. }
  4477. __extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
  4478. vabdq_s8 (int8x16_t a, int8x16_t b)
  4479. {
  4480. int8x16_t result;
  4481. __asm__ ("sabd %0.16b, %1.16b, %2.16b"
  4482. : "=w"(result)
  4483. : "w"(a), "w"(b)
  4484. : /* No clobbers */);
  4485. return result;
  4486. }
  4487. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  4488. vabdq_s16 (int16x8_t a, int16x8_t b)
  4489. {
  4490. int16x8_t result;
  4491. __asm__ ("sabd %0.8h, %1.8h, %2.8h"
  4492. : "=w"(result)
  4493. : "w"(a), "w"(b)
  4494. : /* No clobbers */);
  4495. return result;
  4496. }
  4497. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  4498. vabdq_s32 (int32x4_t a, int32x4_t b)
  4499. {
  4500. int32x4_t result;
  4501. __asm__ ("sabd %0.4s, %1.4s, %2.4s"
  4502. : "=w"(result)
  4503. : "w"(a), "w"(b)
  4504. : /* No clobbers */);
  4505. return result;
  4506. }
  4507. __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
  4508. vabdq_u8 (uint8x16_t a, uint8x16_t b)
  4509. {
  4510. uint8x16_t result;
  4511. __asm__ ("uabd %0.16b, %1.16b, %2.16b"
  4512. : "=w"(result)
  4513. : "w"(a), "w"(b)
  4514. : /* No clobbers */);
  4515. return result;
  4516. }
  4517. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  4518. vabdq_u16 (uint16x8_t a, uint16x8_t b)
  4519. {
  4520. uint16x8_t result;
  4521. __asm__ ("uabd %0.8h, %1.8h, %2.8h"
  4522. : "=w"(result)
  4523. : "w"(a), "w"(b)
  4524. : /* No clobbers */);
  4525. return result;
  4526. }
  4527. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  4528. vabdq_u32 (uint32x4_t a, uint32x4_t b)
  4529. {
  4530. uint32x4_t result;
  4531. __asm__ ("uabd %0.4s, %1.4s, %2.4s"
  4532. : "=w"(result)
  4533. : "w"(a), "w"(b)
  4534. : /* No clobbers */);
  4535. return result;
  4536. }
  4537. __extension__ static __inline float32_t __attribute__ ((__always_inline__))
  4538. vabds_f32 (float32_t a, float32_t b)
  4539. {
  4540. float32_t result;
  4541. __asm__ ("fabd %s0, %s1, %s2"
  4542. : "=w"(result)
  4543. : "w"(a), "w"(b)
  4544. : /* No clobbers */);
  4545. return result;
  4546. }
  4547. __extension__ static __inline int16_t __attribute__ ((__always_inline__))
  4548. vaddlv_s8 (int8x8_t a)
  4549. {
  4550. int16_t result;
  4551. __asm__ ("saddlv %h0,%1.8b"
  4552. : "=w"(result)
  4553. : "w"(a)
  4554. : /* No clobbers */);
  4555. return result;
  4556. }
  4557. __extension__ static __inline int32_t __attribute__ ((__always_inline__))
  4558. vaddlv_s16 (int16x4_t a)
  4559. {
  4560. int32_t result;
  4561. __asm__ ("saddlv %s0,%1.4h"
  4562. : "=w"(result)
  4563. : "w"(a)
  4564. : /* No clobbers */);
  4565. return result;
  4566. }
  4567. __extension__ static __inline uint16_t __attribute__ ((__always_inline__))
  4568. vaddlv_u8 (uint8x8_t a)
  4569. {
  4570. uint16_t result;
  4571. __asm__ ("uaddlv %h0,%1.8b"
  4572. : "=w"(result)
  4573. : "w"(a)
  4574. : /* No clobbers */);
  4575. return result;
  4576. }
  4577. __extension__ static __inline uint32_t __attribute__ ((__always_inline__))
  4578. vaddlv_u16 (uint16x4_t a)
  4579. {
  4580. uint32_t result;
  4581. __asm__ ("uaddlv %s0,%1.4h"
  4582. : "=w"(result)
  4583. : "w"(a)
  4584. : /* No clobbers */);
  4585. return result;
  4586. }
  4587. __extension__ static __inline int16_t __attribute__ ((__always_inline__))
  4588. vaddlvq_s8 (int8x16_t a)
  4589. {
  4590. int16_t result;
  4591. __asm__ ("saddlv %h0,%1.16b"
  4592. : "=w"(result)
  4593. : "w"(a)
  4594. : /* No clobbers */);
  4595. return result;
  4596. }
  4597. __extension__ static __inline int32_t __attribute__ ((__always_inline__))
  4598. vaddlvq_s16 (int16x8_t a)
  4599. {
  4600. int32_t result;
  4601. __asm__ ("saddlv %s0,%1.8h"
  4602. : "=w"(result)
  4603. : "w"(a)
  4604. : /* No clobbers */);
  4605. return result;
  4606. }
  4607. __extension__ static __inline int64_t __attribute__ ((__always_inline__))
  4608. vaddlvq_s32 (int32x4_t a)
  4609. {
  4610. int64_t result;
  4611. __asm__ ("saddlv %d0,%1.4s"
  4612. : "=w"(result)
  4613. : "w"(a)
  4614. : /* No clobbers */);
  4615. return result;
  4616. }
  4617. __extension__ static __inline uint16_t __attribute__ ((__always_inline__))
  4618. vaddlvq_u8 (uint8x16_t a)
  4619. {
  4620. uint16_t result;
  4621. __asm__ ("uaddlv %h0,%1.16b"
  4622. : "=w"(result)
  4623. : "w"(a)
  4624. : /* No clobbers */);
  4625. return result;
  4626. }
  4627. __extension__ static __inline uint32_t __attribute__ ((__always_inline__))
  4628. vaddlvq_u16 (uint16x8_t a)
  4629. {
  4630. uint32_t result;
  4631. __asm__ ("uaddlv %s0,%1.8h"
  4632. : "=w"(result)
  4633. : "w"(a)
  4634. : /* No clobbers */);
  4635. return result;
  4636. }
  4637. __extension__ static __inline uint64_t __attribute__ ((__always_inline__))
  4638. vaddlvq_u32 (uint32x4_t a)
  4639. {
  4640. uint64_t result;
  4641. __asm__ ("uaddlv %d0,%1.4s"
  4642. : "=w"(result)
  4643. : "w"(a)
  4644. : /* No clobbers */);
  4645. return result;
  4646. }
  4647. #define vcopyq_lane_f32(a, b, c, d) \
  4648. __extension__ \
  4649. ({ \
  4650. float32x4_t c_ = (c); \
  4651. float32x4_t a_ = (a); \
  4652. float32x4_t result; \
  4653. __asm__ ("ins %0.s[%2], %3.s[%4]" \
  4654. : "=w"(result) \
  4655. : "0"(a_), "i"(b), "w"(c_), "i"(d) \
  4656. : /* No clobbers */); \
  4657. result; \
  4658. })
  4659. #define vcopyq_lane_f64(a, b, c, d) \
  4660. __extension__ \
  4661. ({ \
  4662. float64x2_t c_ = (c); \
  4663. float64x2_t a_ = (a); \
  4664. float64x2_t result; \
  4665. __asm__ ("ins %0.d[%2], %3.d[%4]" \
  4666. : "=w"(result) \
  4667. : "0"(a_), "i"(b), "w"(c_), "i"(d) \
  4668. : /* No clobbers */); \
  4669. result; \
  4670. })
  4671. #define vcopyq_lane_p8(a, b, c, d) \
  4672. __extension__ \
  4673. ({ \
  4674. poly8x16_t c_ = (c); \
  4675. poly8x16_t a_ = (a); \
  4676. poly8x16_t result; \
  4677. __asm__ ("ins %0.b[%2], %3.b[%4]" \
  4678. : "=w"(result) \
  4679. : "0"(a_), "i"(b), "w"(c_), "i"(d) \
  4680. : /* No clobbers */); \
  4681. result; \
  4682. })
  4683. #define vcopyq_lane_p16(a, b, c, d) \
  4684. __extension__ \
  4685. ({ \
  4686. poly16x8_t c_ = (c); \
  4687. poly16x8_t a_ = (a); \
  4688. poly16x8_t result; \
  4689. __asm__ ("ins %0.h[%2], %3.h[%4]" \
  4690. : "=w"(result) \
  4691. : "0"(a_), "i"(b), "w"(c_), "i"(d) \
  4692. : /* No clobbers */); \
  4693. result; \
  4694. })
  4695. #define vcopyq_lane_s8(a, b, c, d) \
  4696. __extension__ \
  4697. ({ \
  4698. int8x16_t c_ = (c); \
  4699. int8x16_t a_ = (a); \
  4700. int8x16_t result; \
  4701. __asm__ ("ins %0.b[%2], %3.b[%4]" \
  4702. : "=w"(result) \
  4703. : "0"(a_), "i"(b), "w"(c_), "i"(d) \
  4704. : /* No clobbers */); \
  4705. result; \
  4706. })
  4707. #define vcopyq_lane_s16(a, b, c, d) \
  4708. __extension__ \
  4709. ({ \
  4710. int16x8_t c_ = (c); \
  4711. int16x8_t a_ = (a); \
  4712. int16x8_t result; \
  4713. __asm__ ("ins %0.h[%2], %3.h[%4]" \
  4714. : "=w"(result) \
  4715. : "0"(a_), "i"(b), "w"(c_), "i"(d) \
  4716. : /* No clobbers */); \
  4717. result; \
  4718. })
  4719. #define vcopyq_lane_s32(a, b, c, d) \
  4720. __extension__ \
  4721. ({ \
  4722. int32x4_t c_ = (c); \
  4723. int32x4_t a_ = (a); \
  4724. int32x4_t result; \
  4725. __asm__ ("ins %0.s[%2], %3.s[%4]" \
  4726. : "=w"(result) \
  4727. : "0"(a_), "i"(b), "w"(c_), "i"(d) \
  4728. : /* No clobbers */); \
  4729. result; \
  4730. })
  4731. #define vcopyq_lane_s64(a, b, c, d) \
  4732. __extension__ \
  4733. ({ \
  4734. int64x2_t c_ = (c); \
  4735. int64x2_t a_ = (a); \
  4736. int64x2_t result; \
  4737. __asm__ ("ins %0.d[%2], %3.d[%4]" \
  4738. : "=w"(result) \
  4739. : "0"(a_), "i"(b), "w"(c_), "i"(d) \
  4740. : /* No clobbers */); \
  4741. result; \
  4742. })
  4743. #define vcopyq_lane_u8(a, b, c, d) \
  4744. __extension__ \
  4745. ({ \
  4746. uint8x16_t c_ = (c); \
  4747. uint8x16_t a_ = (a); \
  4748. uint8x16_t result; \
  4749. __asm__ ("ins %0.b[%2], %3.b[%4]" \
  4750. : "=w"(result) \
  4751. : "0"(a_), "i"(b), "w"(c_), "i"(d) \
  4752. : /* No clobbers */); \
  4753. result; \
  4754. })
  4755. #define vcopyq_lane_u16(a, b, c, d) \
  4756. __extension__ \
  4757. ({ \
  4758. uint16x8_t c_ = (c); \
  4759. uint16x8_t a_ = (a); \
  4760. uint16x8_t result; \
  4761. __asm__ ("ins %0.h[%2], %3.h[%4]" \
  4762. : "=w"(result) \
  4763. : "0"(a_), "i"(b), "w"(c_), "i"(d) \
  4764. : /* No clobbers */); \
  4765. result; \
  4766. })
  4767. #define vcopyq_lane_u32(a, b, c, d) \
  4768. __extension__ \
  4769. ({ \
  4770. uint32x4_t c_ = (c); \
  4771. uint32x4_t a_ = (a); \
  4772. uint32x4_t result; \
  4773. __asm__ ("ins %0.s[%2], %3.s[%4]" \
  4774. : "=w"(result) \
  4775. : "0"(a_), "i"(b), "w"(c_), "i"(d) \
  4776. : /* No clobbers */); \
  4777. result; \
  4778. })
  4779. #define vcopyq_lane_u64(a, b, c, d) \
  4780. __extension__ \
  4781. ({ \
  4782. uint64x2_t c_ = (c); \
  4783. uint64x2_t a_ = (a); \
  4784. uint64x2_t result; \
  4785. __asm__ ("ins %0.d[%2], %3.d[%4]" \
  4786. : "=w"(result) \
  4787. : "0"(a_), "i"(b), "w"(c_), "i"(d) \
  4788. : /* No clobbers */); \
  4789. result; \
  4790. })
  4791. /* vcvt_f16_f32 not supported */
  4792. /* vcvt_f32_f16 not supported */
  4793. /* vcvt_high_f16_f32 not supported */
  4794. /* vcvt_high_f32_f16 not supported */
  4795. static float32x2_t vdup_n_f32 (float32_t);
  4796. #define vcvt_n_f32_s32(a, b) \
  4797. __extension__ \
  4798. ({ \
  4799. int32x2_t a_ = (a); \
  4800. float32x2_t result; \
  4801. __asm__ ("scvtf %0.2s, %1.2s, #%2" \
  4802. : "=w"(result) \
  4803. : "w"(a_), "i"(b) \
  4804. : /* No clobbers */); \
  4805. result; \
  4806. })
  4807. #define vcvt_n_f32_u32(a, b) \
  4808. __extension__ \
  4809. ({ \
  4810. uint32x2_t a_ = (a); \
  4811. float32x2_t result; \
  4812. __asm__ ("ucvtf %0.2s, %1.2s, #%2" \
  4813. : "=w"(result) \
  4814. : "w"(a_), "i"(b) \
  4815. : /* No clobbers */); \
  4816. result; \
  4817. })
  4818. #define vcvt_n_s32_f32(a, b) \
  4819. __extension__ \
  4820. ({ \
  4821. float32x2_t a_ = (a); \
  4822. int32x2_t result; \
  4823. __asm__ ("fcvtzs %0.2s, %1.2s, #%2" \
  4824. : "=w"(result) \
  4825. : "w"(a_), "i"(b) \
  4826. : /* No clobbers */); \
  4827. result; \
  4828. })
  4829. #define vcvt_n_u32_f32(a, b) \
  4830. __extension__ \
  4831. ({ \
  4832. float32x2_t a_ = (a); \
  4833. uint32x2_t result; \
  4834. __asm__ ("fcvtzu %0.2s, %1.2s, #%2" \
  4835. : "=w"(result) \
  4836. : "w"(a_), "i"(b) \
  4837. : /* No clobbers */); \
  4838. result; \
  4839. })
  4840. #define vcvtd_n_f64_s64(a, b) \
  4841. __extension__ \
  4842. ({ \
  4843. int64_t a_ = (a); \
  4844. float64_t result; \
  4845. __asm__ ("scvtf %d0,%d1,%2" \
  4846. : "=w"(result) \
  4847. : "w"(a_), "i"(b) \
  4848. : /* No clobbers */); \
  4849. result; \
  4850. })
  4851. #define vcvtd_n_f64_u64(a, b) \
  4852. __extension__ \
  4853. ({ \
  4854. uint64_t a_ = (a); \
  4855. float64_t result; \
  4856. __asm__ ("ucvtf %d0,%d1,%2" \
  4857. : "=w"(result) \
  4858. : "w"(a_), "i"(b) \
  4859. : /* No clobbers */); \
  4860. result; \
  4861. })
  4862. #define vcvtd_n_s64_f64(a, b) \
  4863. __extension__ \
  4864. ({ \
  4865. float64_t a_ = (a); \
  4866. int64_t result; \
  4867. __asm__ ("fcvtzs %d0,%d1,%2" \
  4868. : "=w"(result) \
  4869. : "w"(a_), "i"(b) \
  4870. : /* No clobbers */); \
  4871. result; \
  4872. })
  4873. #define vcvtd_n_u64_f64(a, b) \
  4874. __extension__ \
  4875. ({ \
  4876. float64_t a_ = (a); \
  4877. uint64_t result; \
  4878. __asm__ ("fcvtzu %d0,%d1,%2" \
  4879. : "=w"(result) \
  4880. : "w"(a_), "i"(b) \
  4881. : /* No clobbers */); \
  4882. result; \
  4883. })
  4884. #define vcvtq_n_f32_s32(a, b) \
  4885. __extension__ \
  4886. ({ \
  4887. int32x4_t a_ = (a); \
  4888. float32x4_t result; \
  4889. __asm__ ("scvtf %0.4s, %1.4s, #%2" \
  4890. : "=w"(result) \
  4891. : "w"(a_), "i"(b) \
  4892. : /* No clobbers */); \
  4893. result; \
  4894. })
  4895. #define vcvtq_n_f32_u32(a, b) \
  4896. __extension__ \
  4897. ({ \
  4898. uint32x4_t a_ = (a); \
  4899. float32x4_t result; \
  4900. __asm__ ("ucvtf %0.4s, %1.4s, #%2" \
  4901. : "=w"(result) \
  4902. : "w"(a_), "i"(b) \
  4903. : /* No clobbers */); \
  4904. result; \
  4905. })
  4906. #define vcvtq_n_f64_s64(a, b) \
  4907. __extension__ \
  4908. ({ \
  4909. int64x2_t a_ = (a); \
  4910. float64x2_t result; \
  4911. __asm__ ("scvtf %0.2d, %1.2d, #%2" \
  4912. : "=w"(result) \
  4913. : "w"(a_), "i"(b) \
  4914. : /* No clobbers */); \
  4915. result; \
  4916. })
  4917. #define vcvtq_n_f64_u64(a, b) \
  4918. __extension__ \
  4919. ({ \
  4920. uint64x2_t a_ = (a); \
  4921. float64x2_t result; \
  4922. __asm__ ("ucvtf %0.2d, %1.2d, #%2" \
  4923. : "=w"(result) \
  4924. : "w"(a_), "i"(b) \
  4925. : /* No clobbers */); \
  4926. result; \
  4927. })
  4928. #define vcvtq_n_s32_f32(a, b) \
  4929. __extension__ \
  4930. ({ \
  4931. float32x4_t a_ = (a); \
  4932. int32x4_t result; \
  4933. __asm__ ("fcvtzs %0.4s, %1.4s, #%2" \
  4934. : "=w"(result) \
  4935. : "w"(a_), "i"(b) \
  4936. : /* No clobbers */); \
  4937. result; \
  4938. })
  4939. #define vcvtq_n_s64_f64(a, b) \
  4940. __extension__ \
  4941. ({ \
  4942. float64x2_t a_ = (a); \
  4943. int64x2_t result; \
  4944. __asm__ ("fcvtzs %0.2d, %1.2d, #%2" \
  4945. : "=w"(result) \
  4946. : "w"(a_), "i"(b) \
  4947. : /* No clobbers */); \
  4948. result; \
  4949. })
  4950. #define vcvtq_n_u32_f32(a, b) \
  4951. __extension__ \
  4952. ({ \
  4953. float32x4_t a_ = (a); \
  4954. uint32x4_t result; \
  4955. __asm__ ("fcvtzu %0.4s, %1.4s, #%2" \
  4956. : "=w"(result) \
  4957. : "w"(a_), "i"(b) \
  4958. : /* No clobbers */); \
  4959. result; \
  4960. })
  4961. #define vcvtq_n_u64_f64(a, b) \
  4962. __extension__ \
  4963. ({ \
  4964. float64x2_t a_ = (a); \
  4965. uint64x2_t result; \
  4966. __asm__ ("fcvtzu %0.2d, %1.2d, #%2" \
  4967. : "=w"(result) \
  4968. : "w"(a_), "i"(b) \
  4969. : /* No clobbers */); \
  4970. result; \
  4971. })
  4972. #define vcvts_n_f32_s32(a, b) \
  4973. __extension__ \
  4974. ({ \
  4975. int32_t a_ = (a); \
  4976. float32_t result; \
  4977. __asm__ ("scvtf %s0,%s1,%2" \
  4978. : "=w"(result) \
  4979. : "w"(a_), "i"(b) \
  4980. : /* No clobbers */); \
  4981. result; \
  4982. })
  4983. #define vcvts_n_f32_u32(a, b) \
  4984. __extension__ \
  4985. ({ \
  4986. uint32_t a_ = (a); \
  4987. float32_t result; \
  4988. __asm__ ("ucvtf %s0,%s1,%2" \
  4989. : "=w"(result) \
  4990. : "w"(a_), "i"(b) \
  4991. : /* No clobbers */); \
  4992. result; \
  4993. })
  4994. #define vcvts_n_s32_f32(a, b) \
  4995. __extension__ \
  4996. ({ \
  4997. float32_t a_ = (a); \
  4998. int32_t result; \
  4999. __asm__ ("fcvtzs %s0,%s1,%2" \
  5000. : "=w"(result) \
  5001. : "w"(a_), "i"(b) \
  5002. : /* No clobbers */); \
  5003. result; \
  5004. })
  5005. #define vcvts_n_u32_f32(a, b) \
  5006. __extension__ \
  5007. ({ \
  5008. float32_t a_ = (a); \
  5009. uint32_t result; \
  5010. __asm__ ("fcvtzu %s0,%s1,%2" \
  5011. : "=w"(result) \
  5012. : "w"(a_), "i"(b) \
  5013. : /* No clobbers */); \
  5014. result; \
  5015. })
  5016. __extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
  5017. vcvtx_f32_f64 (float64x2_t a)
  5018. {
  5019. float32x2_t result;
  5020. __asm__ ("fcvtxn %0.2s,%1.2d"
  5021. : "=w"(result)
  5022. : "w"(a)
  5023. : /* No clobbers */);
  5024. return result;
  5025. }
  5026. __extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
  5027. vcvtx_high_f32_f64 (float32x2_t a, float64x2_t b)
  5028. {
  5029. float32x4_t result;
  5030. __asm__ ("fcvtxn2 %0.4s,%1.2d"
  5031. : "=w"(result)
  5032. : "w" (b), "0"(a)
  5033. : /* No clobbers */);
  5034. return result;
  5035. }
  5036. __extension__ static __inline float32_t __attribute__ ((__always_inline__))
  5037. vcvtxd_f32_f64 (float64_t a)
  5038. {
  5039. float32_t result;
  5040. __asm__ ("fcvtxn %s0,%d1"
  5041. : "=w"(result)
  5042. : "w"(a)
  5043. : /* No clobbers */);
  5044. return result;
  5045. }
  5046. __extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
  5047. vmla_n_f32 (float32x2_t a, float32x2_t b, float32_t c)
  5048. {
  5049. float32x2_t result;
  5050. float32x2_t t1;
  5051. __asm__ ("fmul %1.2s, %3.2s, %4.s[0]; fadd %0.2s, %0.2s, %1.2s"
  5052. : "=w"(result), "=w"(t1)
  5053. : "0"(a), "w"(b), "w"(c)
  5054. : /* No clobbers */);
  5055. return result;
  5056. }
  5057. __extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
  5058. vmla_n_s16 (int16x4_t a, int16x4_t b, int16_t c)
  5059. {
  5060. int16x4_t result;
  5061. __asm__ ("mla %0.4h,%2.4h,%3.h[0]"
  5062. : "=w"(result)
  5063. : "0"(a), "w"(b), "x"(c)
  5064. : /* No clobbers */);
  5065. return result;
  5066. }
  5067. __extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
  5068. vmla_n_s32 (int32x2_t a, int32x2_t b, int32_t c)
  5069. {
  5070. int32x2_t result;
  5071. __asm__ ("mla %0.2s,%2.2s,%3.s[0]"
  5072. : "=w"(result)
  5073. : "0"(a), "w"(b), "w"(c)
  5074. : /* No clobbers */);
  5075. return result;
  5076. }
  5077. __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
  5078. vmla_n_u16 (uint16x4_t a, uint16x4_t b, uint16_t c)
  5079. {
  5080. uint16x4_t result;
  5081. __asm__ ("mla %0.4h,%2.4h,%3.h[0]"
  5082. : "=w"(result)
  5083. : "0"(a), "w"(b), "x"(c)
  5084. : /* No clobbers */);
  5085. return result;
  5086. }
  5087. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  5088. vmla_n_u32 (uint32x2_t a, uint32x2_t b, uint32_t c)
  5089. {
  5090. uint32x2_t result;
  5091. __asm__ ("mla %0.2s,%2.2s,%3.s[0]"
  5092. : "=w"(result)
  5093. : "0"(a), "w"(b), "w"(c)
  5094. : /* No clobbers */);
  5095. return result;
  5096. }
  5097. __extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
  5098. vmla_s8 (int8x8_t a, int8x8_t b, int8x8_t c)
  5099. {
  5100. int8x8_t result;
  5101. __asm__ ("mla %0.8b, %2.8b, %3.8b"
  5102. : "=w"(result)
  5103. : "0"(a), "w"(b), "w"(c)
  5104. : /* No clobbers */);
  5105. return result;
  5106. }
  5107. __extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
  5108. vmla_s16 (int16x4_t a, int16x4_t b, int16x4_t c)
  5109. {
  5110. int16x4_t result;
  5111. __asm__ ("mla %0.4h, %2.4h, %3.4h"
  5112. : "=w"(result)
  5113. : "0"(a), "w"(b), "w"(c)
  5114. : /* No clobbers */);
  5115. return result;
  5116. }
  5117. __extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
  5118. vmla_s32 (int32x2_t a, int32x2_t b, int32x2_t c)
  5119. {
  5120. int32x2_t result;
  5121. __asm__ ("mla %0.2s, %2.2s, %3.2s"
  5122. : "=w"(result)
  5123. : "0"(a), "w"(b), "w"(c)
  5124. : /* No clobbers */);
  5125. return result;
  5126. }
  5127. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  5128. vmla_u8 (uint8x8_t a, uint8x8_t b, uint8x8_t c)
  5129. {
  5130. uint8x8_t result;
  5131. __asm__ ("mla %0.8b, %2.8b, %3.8b"
  5132. : "=w"(result)
  5133. : "0"(a), "w"(b), "w"(c)
  5134. : /* No clobbers */);
  5135. return result;
  5136. }
  5137. __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
  5138. vmla_u16 (uint16x4_t a, uint16x4_t b, uint16x4_t c)
  5139. {
  5140. uint16x4_t result;
  5141. __asm__ ("mla %0.4h, %2.4h, %3.4h"
  5142. : "=w"(result)
  5143. : "0"(a), "w"(b), "w"(c)
  5144. : /* No clobbers */);
  5145. return result;
  5146. }
  5147. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  5148. vmla_u32 (uint32x2_t a, uint32x2_t b, uint32x2_t c)
  5149. {
  5150. uint32x2_t result;
  5151. __asm__ ("mla %0.2s, %2.2s, %3.2s"
  5152. : "=w"(result)
  5153. : "0"(a), "w"(b), "w"(c)
  5154. : /* No clobbers */);
  5155. return result;
  5156. }
  5157. #define vmlal_high_lane_s16(a, b, c, d) \
  5158. __extension__ \
  5159. ({ \
  5160. int16x4_t c_ = (c); \
  5161. int16x8_t b_ = (b); \
  5162. int32x4_t a_ = (a); \
  5163. int32x4_t result; \
  5164. __asm__ ("smlal2 %0.4s, %2.8h, %3.h[%4]" \
  5165. : "=w"(result) \
  5166. : "0"(a_), "w"(b_), "x"(c_), "i"(d) \
  5167. : /* No clobbers */); \
  5168. result; \
  5169. })
  5170. #define vmlal_high_lane_s32(a, b, c, d) \
  5171. __extension__ \
  5172. ({ \
  5173. int32x2_t c_ = (c); \
  5174. int32x4_t b_ = (b); \
  5175. int64x2_t a_ = (a); \
  5176. int64x2_t result; \
  5177. __asm__ ("smlal2 %0.2d, %2.4s, %3.s[%4]" \
  5178. : "=w"(result) \
  5179. : "0"(a_), "w"(b_), "w"(c_), "i"(d) \
  5180. : /* No clobbers */); \
  5181. result; \
  5182. })
  5183. #define vmlal_high_lane_u16(a, b, c, d) \
  5184. __extension__ \
  5185. ({ \
  5186. uint16x4_t c_ = (c); \
  5187. uint16x8_t b_ = (b); \
  5188. uint32x4_t a_ = (a); \
  5189. uint32x4_t result; \
  5190. __asm__ ("umlal2 %0.4s, %2.8h, %3.h[%4]" \
  5191. : "=w"(result) \
  5192. : "0"(a_), "w"(b_), "x"(c_), "i"(d) \
  5193. : /* No clobbers */); \
  5194. result; \
  5195. })
  5196. #define vmlal_high_lane_u32(a, b, c, d) \
  5197. __extension__ \
  5198. ({ \
  5199. uint32x2_t c_ = (c); \
  5200. uint32x4_t b_ = (b); \
  5201. uint64x2_t a_ = (a); \
  5202. uint64x2_t result; \
  5203. __asm__ ("umlal2 %0.2d, %2.4s, %3.s[%4]" \
  5204. : "=w"(result) \
  5205. : "0"(a_), "w"(b_), "w"(c_), "i"(d) \
  5206. : /* No clobbers */); \
  5207. result; \
  5208. })
  5209. #define vmlal_high_laneq_s16(a, b, c, d) \
  5210. __extension__ \
  5211. ({ \
  5212. int16x8_t c_ = (c); \
  5213. int16x8_t b_ = (b); \
  5214. int32x4_t a_ = (a); \
  5215. int32x4_t result; \
  5216. __asm__ ("smlal2 %0.4s, %2.8h, %3.h[%4]" \
  5217. : "=w"(result) \
  5218. : "0"(a_), "w"(b_), "x"(c_), "i"(d) \
  5219. : /* No clobbers */); \
  5220. result; \
  5221. })
  5222. #define vmlal_high_laneq_s32(a, b, c, d) \
  5223. __extension__ \
  5224. ({ \
  5225. int32x4_t c_ = (c); \
  5226. int32x4_t b_ = (b); \
  5227. int64x2_t a_ = (a); \
  5228. int64x2_t result; \
  5229. __asm__ ("smlal2 %0.2d, %2.4s, %3.s[%4]" \
  5230. : "=w"(result) \
  5231. : "0"(a_), "w"(b_), "w"(c_), "i"(d) \
  5232. : /* No clobbers */); \
  5233. result; \
  5234. })
  5235. #define vmlal_high_laneq_u16(a, b, c, d) \
  5236. __extension__ \
  5237. ({ \
  5238. uint16x8_t c_ = (c); \
  5239. uint16x8_t b_ = (b); \
  5240. uint32x4_t a_ = (a); \
  5241. uint32x4_t result; \
  5242. __asm__ ("umlal2 %0.4s, %2.8h, %3.h[%4]" \
  5243. : "=w"(result) \
  5244. : "0"(a_), "w"(b_), "x"(c_), "i"(d) \
  5245. : /* No clobbers */); \
  5246. result; \
  5247. })
  5248. #define vmlal_high_laneq_u32(a, b, c, d) \
  5249. __extension__ \
  5250. ({ \
  5251. uint32x4_t c_ = (c); \
  5252. uint32x4_t b_ = (b); \
  5253. uint64x2_t a_ = (a); \
  5254. uint64x2_t result; \
  5255. __asm__ ("umlal2 %0.2d, %2.4s, %3.s[%4]" \
  5256. : "=w"(result) \
  5257. : "0"(a_), "w"(b_), "w"(c_), "i"(d) \
  5258. : /* No clobbers */); \
  5259. result; \
  5260. })
  5261. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  5262. vmlal_high_n_s16 (int32x4_t a, int16x8_t b, int16_t c)
  5263. {
  5264. int32x4_t result;
  5265. __asm__ ("smlal2 %0.4s,%2.8h,%3.h[0]"
  5266. : "=w"(result)
  5267. : "0"(a), "w"(b), "x"(c)
  5268. : /* No clobbers */);
  5269. return result;
  5270. }
  5271. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  5272. vmlal_high_n_s32 (int64x2_t a, int32x4_t b, int32_t c)
  5273. {
  5274. int64x2_t result;
  5275. __asm__ ("smlal2 %0.2d,%2.4s,%3.s[0]"
  5276. : "=w"(result)
  5277. : "0"(a), "w"(b), "w"(c)
  5278. : /* No clobbers */);
  5279. return result;
  5280. }
  5281. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  5282. vmlal_high_n_u16 (uint32x4_t a, uint16x8_t b, uint16_t c)
  5283. {
  5284. uint32x4_t result;
  5285. __asm__ ("umlal2 %0.4s,%2.8h,%3.h[0]"
  5286. : "=w"(result)
  5287. : "0"(a), "w"(b), "x"(c)
  5288. : /* No clobbers */);
  5289. return result;
  5290. }
  5291. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  5292. vmlal_high_n_u32 (uint64x2_t a, uint32x4_t b, uint32_t c)
  5293. {
  5294. uint64x2_t result;
  5295. __asm__ ("umlal2 %0.2d,%2.4s,%3.s[0]"
  5296. : "=w"(result)
  5297. : "0"(a), "w"(b), "w"(c)
  5298. : /* No clobbers */);
  5299. return result;
  5300. }
  5301. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  5302. vmlal_high_s8 (int16x8_t a, int8x16_t b, int8x16_t c)
  5303. {
  5304. int16x8_t result;
  5305. __asm__ ("smlal2 %0.8h,%2.16b,%3.16b"
  5306. : "=w"(result)
  5307. : "0"(a), "w"(b), "w"(c)
  5308. : /* No clobbers */);
  5309. return result;
  5310. }
  5311. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  5312. vmlal_high_s16 (int32x4_t a, int16x8_t b, int16x8_t c)
  5313. {
  5314. int32x4_t result;
  5315. __asm__ ("smlal2 %0.4s,%2.8h,%3.8h"
  5316. : "=w"(result)
  5317. : "0"(a), "w"(b), "w"(c)
  5318. : /* No clobbers */);
  5319. return result;
  5320. }
  5321. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  5322. vmlal_high_s32 (int64x2_t a, int32x4_t b, int32x4_t c)
  5323. {
  5324. int64x2_t result;
  5325. __asm__ ("smlal2 %0.2d,%2.4s,%3.4s"
  5326. : "=w"(result)
  5327. : "0"(a), "w"(b), "w"(c)
  5328. : /* No clobbers */);
  5329. return result;
  5330. }
  5331. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  5332. vmlal_high_u8 (uint16x8_t a, uint8x16_t b, uint8x16_t c)
  5333. {
  5334. uint16x8_t result;
  5335. __asm__ ("umlal2 %0.8h,%2.16b,%3.16b"
  5336. : "=w"(result)
  5337. : "0"(a), "w"(b), "w"(c)
  5338. : /* No clobbers */);
  5339. return result;
  5340. }
  5341. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  5342. vmlal_high_u16 (uint32x4_t a, uint16x8_t b, uint16x8_t c)
  5343. {
  5344. uint32x4_t result;
  5345. __asm__ ("umlal2 %0.4s,%2.8h,%3.8h"
  5346. : "=w"(result)
  5347. : "0"(a), "w"(b), "w"(c)
  5348. : /* No clobbers */);
  5349. return result;
  5350. }
  5351. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  5352. vmlal_high_u32 (uint64x2_t a, uint32x4_t b, uint32x4_t c)
  5353. {
  5354. uint64x2_t result;
  5355. __asm__ ("umlal2 %0.2d,%2.4s,%3.4s"
  5356. : "=w"(result)
  5357. : "0"(a), "w"(b), "w"(c)
  5358. : /* No clobbers */);
  5359. return result;
  5360. }
  5361. #define vmlal_lane_s16(a, b, c, d) \
  5362. __extension__ \
  5363. ({ \
  5364. int16x4_t c_ = (c); \
  5365. int16x4_t b_ = (b); \
  5366. int32x4_t a_ = (a); \
  5367. int32x4_t result; \
  5368. __asm__ ("smlal %0.4s,%2.4h,%3.h[%4]" \
  5369. : "=w"(result) \
  5370. : "0"(a_), "w"(b_), "x"(c_), "i"(d) \
  5371. : /* No clobbers */); \
  5372. result; \
  5373. })
  5374. #define vmlal_lane_s32(a, b, c, d) \
  5375. __extension__ \
  5376. ({ \
  5377. int32x2_t c_ = (c); \
  5378. int32x2_t b_ = (b); \
  5379. int64x2_t a_ = (a); \
  5380. int64x2_t result; \
  5381. __asm__ ("smlal %0.2d,%2.2s,%3.s[%4]" \
  5382. : "=w"(result) \
  5383. : "0"(a_), "w"(b_), "w"(c_), "i"(d) \
  5384. : /* No clobbers */); \
  5385. result; \
  5386. })
  5387. #define vmlal_lane_u16(a, b, c, d) \
  5388. __extension__ \
  5389. ({ \
  5390. uint16x4_t c_ = (c); \
  5391. uint16x4_t b_ = (b); \
  5392. uint32x4_t a_ = (a); \
  5393. uint32x4_t result; \
  5394. __asm__ ("umlal %0.4s,%2.4h,%3.h[%4]" \
  5395. : "=w"(result) \
  5396. : "0"(a_), "w"(b_), "x"(c_), "i"(d) \
  5397. : /* No clobbers */); \
  5398. result; \
  5399. })
  5400. #define vmlal_lane_u32(a, b, c, d) \
  5401. __extension__ \
  5402. ({ \
  5403. uint32x2_t c_ = (c); \
  5404. uint32x2_t b_ = (b); \
  5405. uint64x2_t a_ = (a); \
  5406. uint64x2_t result; \
  5407. __asm__ ("umlal %0.2d, %2.2s, %3.s[%4]" \
  5408. : "=w"(result) \
  5409. : "0"(a_), "w"(b_), "w"(c_), "i"(d) \
  5410. : /* No clobbers */); \
  5411. result; \
  5412. })
  5413. #define vmlal_laneq_s16(a, b, c, d) \
  5414. __extension__ \
  5415. ({ \
  5416. int16x8_t c_ = (c); \
  5417. int16x4_t b_ = (b); \
  5418. int32x4_t a_ = (a); \
  5419. int32x4_t result; \
  5420. __asm__ ("smlal %0.4s, %2.4h, %3.h[%4]" \
  5421. : "=w"(result) \
  5422. : "0"(a_), "w"(b_), "x"(c_), "i"(d) \
  5423. : /* No clobbers */); \
  5424. result; \
  5425. })
  5426. #define vmlal_laneq_s32(a, b, c, d) \
  5427. __extension__ \
  5428. ({ \
  5429. int32x4_t c_ = (c); \
  5430. int32x2_t b_ = (b); \
  5431. int64x2_t a_ = (a); \
  5432. int64x2_t result; \
  5433. __asm__ ("smlal %0.2d, %2.2s, %3.s[%4]" \
  5434. : "=w"(result) \
  5435. : "0"(a_), "w"(b_), "w"(c_), "i"(d) \
  5436. : /* No clobbers */); \
  5437. result; \
  5438. })
  5439. #define vmlal_laneq_u16(a, b, c, d) \
  5440. __extension__ \
  5441. ({ \
  5442. uint16x8_t c_ = (c); \
  5443. uint16x4_t b_ = (b); \
  5444. uint32x4_t a_ = (a); \
  5445. uint32x4_t result; \
  5446. __asm__ ("umlal %0.4s, %2.4h, %3.h[%4]" \
  5447. : "=w"(result) \
  5448. : "0"(a_), "w"(b_), "x"(c_), "i"(d) \
  5449. : /* No clobbers */); \
  5450. result; \
  5451. })
  5452. #define vmlal_laneq_u32(a, b, c, d) \
  5453. __extension__ \
  5454. ({ \
  5455. uint32x4_t c_ = (c); \
  5456. uint32x2_t b_ = (b); \
  5457. uint64x2_t a_ = (a); \
  5458. uint64x2_t result; \
  5459. __asm__ ("umlal %0.2d, %2.2s, %3.s[%4]" \
  5460. : "=w"(result) \
  5461. : "0"(a_), "w"(b_), "w"(c_), "i"(d) \
  5462. : /* No clobbers */); \
  5463. result; \
  5464. })
  5465. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  5466. vmlal_n_s16 (int32x4_t a, int16x4_t b, int16_t c)
  5467. {
  5468. int32x4_t result;
  5469. __asm__ ("smlal %0.4s,%2.4h,%3.h[0]"
  5470. : "=w"(result)
  5471. : "0"(a), "w"(b), "x"(c)
  5472. : /* No clobbers */);
  5473. return result;
  5474. }
  5475. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  5476. vmlal_n_s32 (int64x2_t a, int32x2_t b, int32_t c)
  5477. {
  5478. int64x2_t result;
  5479. __asm__ ("smlal %0.2d,%2.2s,%3.s[0]"
  5480. : "=w"(result)
  5481. : "0"(a), "w"(b), "w"(c)
  5482. : /* No clobbers */);
  5483. return result;
  5484. }
  5485. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  5486. vmlal_n_u16 (uint32x4_t a, uint16x4_t b, uint16_t c)
  5487. {
  5488. uint32x4_t result;
  5489. __asm__ ("umlal %0.4s,%2.4h,%3.h[0]"
  5490. : "=w"(result)
  5491. : "0"(a), "w"(b), "x"(c)
  5492. : /* No clobbers */);
  5493. return result;
  5494. }
  5495. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  5496. vmlal_n_u32 (uint64x2_t a, uint32x2_t b, uint32_t c)
  5497. {
  5498. uint64x2_t result;
  5499. __asm__ ("umlal %0.2d,%2.2s,%3.s[0]"
  5500. : "=w"(result)
  5501. : "0"(a), "w"(b), "w"(c)
  5502. : /* No clobbers */);
  5503. return result;
  5504. }
  5505. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  5506. vmlal_s8 (int16x8_t a, int8x8_t b, int8x8_t c)
  5507. {
  5508. int16x8_t result;
  5509. __asm__ ("smlal %0.8h,%2.8b,%3.8b"
  5510. : "=w"(result)
  5511. : "0"(a), "w"(b), "w"(c)
  5512. : /* No clobbers */);
  5513. return result;
  5514. }
  5515. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  5516. vmlal_s16 (int32x4_t a, int16x4_t b, int16x4_t c)
  5517. {
  5518. int32x4_t result;
  5519. __asm__ ("smlal %0.4s,%2.4h,%3.4h"
  5520. : "=w"(result)
  5521. : "0"(a), "w"(b), "w"(c)
  5522. : /* No clobbers */);
  5523. return result;
  5524. }
  5525. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  5526. vmlal_s32 (int64x2_t a, int32x2_t b, int32x2_t c)
  5527. {
  5528. int64x2_t result;
  5529. __asm__ ("smlal %0.2d,%2.2s,%3.2s"
  5530. : "=w"(result)
  5531. : "0"(a), "w"(b), "w"(c)
  5532. : /* No clobbers */);
  5533. return result;
  5534. }
  5535. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  5536. vmlal_u8 (uint16x8_t a, uint8x8_t b, uint8x8_t c)
  5537. {
  5538. uint16x8_t result;
  5539. __asm__ ("umlal %0.8h,%2.8b,%3.8b"
  5540. : "=w"(result)
  5541. : "0"(a), "w"(b), "w"(c)
  5542. : /* No clobbers */);
  5543. return result;
  5544. }
  5545. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  5546. vmlal_u16 (uint32x4_t a, uint16x4_t b, uint16x4_t c)
  5547. {
  5548. uint32x4_t result;
  5549. __asm__ ("umlal %0.4s,%2.4h,%3.4h"
  5550. : "=w"(result)
  5551. : "0"(a), "w"(b), "w"(c)
  5552. : /* No clobbers */);
  5553. return result;
  5554. }
  5555. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  5556. vmlal_u32 (uint64x2_t a, uint32x2_t b, uint32x2_t c)
  5557. {
  5558. uint64x2_t result;
  5559. __asm__ ("umlal %0.2d,%2.2s,%3.2s"
  5560. : "=w"(result)
  5561. : "0"(a), "w"(b), "w"(c)
  5562. : /* No clobbers */);
  5563. return result;
  5564. }
  5565. __extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
  5566. vmlaq_n_f32 (float32x4_t a, float32x4_t b, float32_t c)
  5567. {
  5568. float32x4_t result;
  5569. float32x4_t t1;
  5570. __asm__ ("fmul %1.4s, %3.4s, %4.s[0]; fadd %0.4s, %0.4s, %1.4s"
  5571. : "=w"(result), "=w"(t1)
  5572. : "0"(a), "w"(b), "w"(c)
  5573. : /* No clobbers */);
  5574. return result;
  5575. }
  5576. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  5577. vmlaq_n_s16 (int16x8_t a, int16x8_t b, int16_t c)
  5578. {
  5579. int16x8_t result;
  5580. __asm__ ("mla %0.8h,%2.8h,%3.h[0]"
  5581. : "=w"(result)
  5582. : "0"(a), "w"(b), "x"(c)
  5583. : /* No clobbers */);
  5584. return result;
  5585. }
  5586. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  5587. vmlaq_n_s32 (int32x4_t a, int32x4_t b, int32_t c)
  5588. {
  5589. int32x4_t result;
  5590. __asm__ ("mla %0.4s,%2.4s,%3.s[0]"
  5591. : "=w"(result)
  5592. : "0"(a), "w"(b), "w"(c)
  5593. : /* No clobbers */);
  5594. return result;
  5595. }
  5596. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  5597. vmlaq_n_u16 (uint16x8_t a, uint16x8_t b, uint16_t c)
  5598. {
  5599. uint16x8_t result;
  5600. __asm__ ("mla %0.8h,%2.8h,%3.h[0]"
  5601. : "=w"(result)
  5602. : "0"(a), "w"(b), "x"(c)
  5603. : /* No clobbers */);
  5604. return result;
  5605. }
  5606. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  5607. vmlaq_n_u32 (uint32x4_t a, uint32x4_t b, uint32_t c)
  5608. {
  5609. uint32x4_t result;
  5610. __asm__ ("mla %0.4s,%2.4s,%3.s[0]"
  5611. : "=w"(result)
  5612. : "0"(a), "w"(b), "w"(c)
  5613. : /* No clobbers */);
  5614. return result;
  5615. }
  5616. __extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
  5617. vmlaq_s8 (int8x16_t a, int8x16_t b, int8x16_t c)
  5618. {
  5619. int8x16_t result;
  5620. __asm__ ("mla %0.16b, %2.16b, %3.16b"
  5621. : "=w"(result)
  5622. : "0"(a), "w"(b), "w"(c)
  5623. : /* No clobbers */);
  5624. return result;
  5625. }
  5626. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  5627. vmlaq_s16 (int16x8_t a, int16x8_t b, int16x8_t c)
  5628. {
  5629. int16x8_t result;
  5630. __asm__ ("mla %0.8h, %2.8h, %3.8h"
  5631. : "=w"(result)
  5632. : "0"(a), "w"(b), "w"(c)
  5633. : /* No clobbers */);
  5634. return result;
  5635. }
  5636. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  5637. vmlaq_s32 (int32x4_t a, int32x4_t b, int32x4_t c)
  5638. {
  5639. int32x4_t result;
  5640. __asm__ ("mla %0.4s, %2.4s, %3.4s"
  5641. : "=w"(result)
  5642. : "0"(a), "w"(b), "w"(c)
  5643. : /* No clobbers */);
  5644. return result;
  5645. }
  5646. __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
  5647. vmlaq_u8 (uint8x16_t a, uint8x16_t b, uint8x16_t c)
  5648. {
  5649. uint8x16_t result;
  5650. __asm__ ("mla %0.16b, %2.16b, %3.16b"
  5651. : "=w"(result)
  5652. : "0"(a), "w"(b), "w"(c)
  5653. : /* No clobbers */);
  5654. return result;
  5655. }
  5656. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  5657. vmlaq_u16 (uint16x8_t a, uint16x8_t b, uint16x8_t c)
  5658. {
  5659. uint16x8_t result;
  5660. __asm__ ("mla %0.8h, %2.8h, %3.8h"
  5661. : "=w"(result)
  5662. : "0"(a), "w"(b), "w"(c)
  5663. : /* No clobbers */);
  5664. return result;
  5665. }
  5666. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  5667. vmlaq_u32 (uint32x4_t a, uint32x4_t b, uint32x4_t c)
  5668. {
  5669. uint32x4_t result;
  5670. __asm__ ("mla %0.4s, %2.4s, %3.4s"
  5671. : "=w"(result)
  5672. : "0"(a), "w"(b), "w"(c)
  5673. : /* No clobbers */);
  5674. return result;
  5675. }
  5676. __extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
  5677. vmls_n_f32 (float32x2_t a, float32x2_t b, float32_t c)
  5678. {
  5679. float32x2_t result;
  5680. float32x2_t t1;
  5681. __asm__ ("fmul %1.2s, %3.2s, %4.s[0]; fsub %0.2s, %0.2s, %1.2s"
  5682. : "=w"(result), "=w"(t1)
  5683. : "0"(a), "w"(b), "w"(c)
  5684. : /* No clobbers */);
  5685. return result;
  5686. }
  5687. __extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
  5688. vmls_n_s16 (int16x4_t a, int16x4_t b, int16_t c)
  5689. {
  5690. int16x4_t result;
  5691. __asm__ ("mls %0.4h, %2.4h, %3.h[0]"
  5692. : "=w"(result)
  5693. : "0"(a), "w"(b), "x"(c)
  5694. : /* No clobbers */);
  5695. return result;
  5696. }
  5697. __extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
  5698. vmls_n_s32 (int32x2_t a, int32x2_t b, int32_t c)
  5699. {
  5700. int32x2_t result;
  5701. __asm__ ("mls %0.2s, %2.2s, %3.s[0]"
  5702. : "=w"(result)
  5703. : "0"(a), "w"(b), "w"(c)
  5704. : /* No clobbers */);
  5705. return result;
  5706. }
  5707. __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
  5708. vmls_n_u16 (uint16x4_t a, uint16x4_t b, uint16_t c)
  5709. {
  5710. uint16x4_t result;
  5711. __asm__ ("mls %0.4h, %2.4h, %3.h[0]"
  5712. : "=w"(result)
  5713. : "0"(a), "w"(b), "x"(c)
  5714. : /* No clobbers */);
  5715. return result;
  5716. }
  5717. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  5718. vmls_n_u32 (uint32x2_t a, uint32x2_t b, uint32_t c)
  5719. {
  5720. uint32x2_t result;
  5721. __asm__ ("mls %0.2s, %2.2s, %3.s[0]"
  5722. : "=w"(result)
  5723. : "0"(a), "w"(b), "w"(c)
  5724. : /* No clobbers */);
  5725. return result;
  5726. }
  5727. __extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
  5728. vmls_s8 (int8x8_t a, int8x8_t b, int8x8_t c)
  5729. {
  5730. int8x8_t result;
  5731. __asm__ ("mls %0.8b,%2.8b,%3.8b"
  5732. : "=w"(result)
  5733. : "0"(a), "w"(b), "w"(c)
  5734. : /* No clobbers */);
  5735. return result;
  5736. }
  5737. __extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
  5738. vmls_s16 (int16x4_t a, int16x4_t b, int16x4_t c)
  5739. {
  5740. int16x4_t result;
  5741. __asm__ ("mls %0.4h,%2.4h,%3.4h"
  5742. : "=w"(result)
  5743. : "0"(a), "w"(b), "w"(c)
  5744. : /* No clobbers */);
  5745. return result;
  5746. }
  5747. __extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
  5748. vmls_s32 (int32x2_t a, int32x2_t b, int32x2_t c)
  5749. {
  5750. int32x2_t result;
  5751. __asm__ ("mls %0.2s,%2.2s,%3.2s"
  5752. : "=w"(result)
  5753. : "0"(a), "w"(b), "w"(c)
  5754. : /* No clobbers */);
  5755. return result;
  5756. }
  5757. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  5758. vmls_u8 (uint8x8_t a, uint8x8_t b, uint8x8_t c)
  5759. {
  5760. uint8x8_t result;
  5761. __asm__ ("mls %0.8b,%2.8b,%3.8b"
  5762. : "=w"(result)
  5763. : "0"(a), "w"(b), "w"(c)
  5764. : /* No clobbers */);
  5765. return result;
  5766. }
  5767. __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
  5768. vmls_u16 (uint16x4_t a, uint16x4_t b, uint16x4_t c)
  5769. {
  5770. uint16x4_t result;
  5771. __asm__ ("mls %0.4h,%2.4h,%3.4h"
  5772. : "=w"(result)
  5773. : "0"(a), "w"(b), "w"(c)
  5774. : /* No clobbers */);
  5775. return result;
  5776. }
  5777. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  5778. vmls_u32 (uint32x2_t a, uint32x2_t b, uint32x2_t c)
  5779. {
  5780. uint32x2_t result;
  5781. __asm__ ("mls %0.2s,%2.2s,%3.2s"
  5782. : "=w"(result)
  5783. : "0"(a), "w"(b), "w"(c)
  5784. : /* No clobbers */);
  5785. return result;
  5786. }
  5787. #define vmlsl_high_lane_s16(a, b, c, d) \
  5788. __extension__ \
  5789. ({ \
  5790. int16x4_t c_ = (c); \
  5791. int16x8_t b_ = (b); \
  5792. int32x4_t a_ = (a); \
  5793. int32x4_t result; \
  5794. __asm__ ("smlsl2 %0.4s, %2.8h, %3.h[%4]" \
  5795. : "=w"(result) \
  5796. : "0"(a_), "w"(b_), "x"(c_), "i"(d) \
  5797. : /* No clobbers */); \
  5798. result; \
  5799. })
  5800. #define vmlsl_high_lane_s32(a, b, c, d) \
  5801. __extension__ \
  5802. ({ \
  5803. int32x2_t c_ = (c); \
  5804. int32x4_t b_ = (b); \
  5805. int64x2_t a_ = (a); \
  5806. int64x2_t result; \
  5807. __asm__ ("smlsl2 %0.2d, %2.4s, %3.s[%4]" \
  5808. : "=w"(result) \
  5809. : "0"(a_), "w"(b_), "w"(c_), "i"(d) \
  5810. : /* No clobbers */); \
  5811. result; \
  5812. })
  5813. #define vmlsl_high_lane_u16(a, b, c, d) \
  5814. __extension__ \
  5815. ({ \
  5816. uint16x4_t c_ = (c); \
  5817. uint16x8_t b_ = (b); \
  5818. uint32x4_t a_ = (a); \
  5819. uint32x4_t result; \
  5820. __asm__ ("umlsl2 %0.4s, %2.8h, %3.h[%4]" \
  5821. : "=w"(result) \
  5822. : "0"(a_), "w"(b_), "x"(c_), "i"(d) \
  5823. : /* No clobbers */); \
  5824. result; \
  5825. })
  5826. #define vmlsl_high_lane_u32(a, b, c, d) \
  5827. __extension__ \
  5828. ({ \
  5829. uint32x2_t c_ = (c); \
  5830. uint32x4_t b_ = (b); \
  5831. uint64x2_t a_ = (a); \
  5832. uint64x2_t result; \
  5833. __asm__ ("umlsl2 %0.2d, %2.4s, %3.s[%4]" \
  5834. : "=w"(result) \
  5835. : "0"(a_), "w"(b_), "w"(c_), "i"(d) \
  5836. : /* No clobbers */); \
  5837. result; \
  5838. })
  5839. #define vmlsl_high_laneq_s16(a, b, c, d) \
  5840. __extension__ \
  5841. ({ \
  5842. int16x8_t c_ = (c); \
  5843. int16x8_t b_ = (b); \
  5844. int32x4_t a_ = (a); \
  5845. int32x4_t result; \
  5846. __asm__ ("smlsl2 %0.4s, %2.8h, %3.h[%4]" \
  5847. : "=w"(result) \
  5848. : "0"(a_), "w"(b_), "x"(c_), "i"(d) \
  5849. : /* No clobbers */); \
  5850. result; \
  5851. })
  5852. #define vmlsl_high_laneq_s32(a, b, c, d) \
  5853. __extension__ \
  5854. ({ \
  5855. int32x4_t c_ = (c); \
  5856. int32x4_t b_ = (b); \
  5857. int64x2_t a_ = (a); \
  5858. int64x2_t result; \
  5859. __asm__ ("smlsl2 %0.2d, %2.4s, %3.s[%4]" \
  5860. : "=w"(result) \
  5861. : "0"(a_), "w"(b_), "w"(c_), "i"(d) \
  5862. : /* No clobbers */); \
  5863. result; \
  5864. })
  5865. #define vmlsl_high_laneq_u16(a, b, c, d) \
  5866. __extension__ \
  5867. ({ \
  5868. uint16x8_t c_ = (c); \
  5869. uint16x8_t b_ = (b); \
  5870. uint32x4_t a_ = (a); \
  5871. uint32x4_t result; \
  5872. __asm__ ("umlsl2 %0.4s, %2.8h, %3.h[%4]" \
  5873. : "=w"(result) \
  5874. : "0"(a_), "w"(b_), "x"(c_), "i"(d) \
  5875. : /* No clobbers */); \
  5876. result; \
  5877. })
  5878. #define vmlsl_high_laneq_u32(a, b, c, d) \
  5879. __extension__ \
  5880. ({ \
  5881. uint32x4_t c_ = (c); \
  5882. uint32x4_t b_ = (b); \
  5883. uint64x2_t a_ = (a); \
  5884. uint64x2_t result; \
  5885. __asm__ ("umlsl2 %0.2d, %2.4s, %3.s[%4]" \
  5886. : "=w"(result) \
  5887. : "0"(a_), "w"(b_), "w"(c_), "i"(d) \
  5888. : /* No clobbers */); \
  5889. result; \
  5890. })
  5891. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  5892. vmlsl_high_n_s16 (int32x4_t a, int16x8_t b, int16_t c)
  5893. {
  5894. int32x4_t result;
  5895. __asm__ ("smlsl2 %0.4s, %2.8h, %3.h[0]"
  5896. : "=w"(result)
  5897. : "0"(a), "w"(b), "x"(c)
  5898. : /* No clobbers */);
  5899. return result;
  5900. }
  5901. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  5902. vmlsl_high_n_s32 (int64x2_t a, int32x4_t b, int32_t c)
  5903. {
  5904. int64x2_t result;
  5905. __asm__ ("smlsl2 %0.2d, %2.4s, %3.s[0]"
  5906. : "=w"(result)
  5907. : "0"(a), "w"(b), "w"(c)
  5908. : /* No clobbers */);
  5909. return result;
  5910. }
  5911. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  5912. vmlsl_high_n_u16 (uint32x4_t a, uint16x8_t b, uint16_t c)
  5913. {
  5914. uint32x4_t result;
  5915. __asm__ ("umlsl2 %0.4s, %2.8h, %3.h[0]"
  5916. : "=w"(result)
  5917. : "0"(a), "w"(b), "x"(c)
  5918. : /* No clobbers */);
  5919. return result;
  5920. }
  5921. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  5922. vmlsl_high_n_u32 (uint64x2_t a, uint32x4_t b, uint32_t c)
  5923. {
  5924. uint64x2_t result;
  5925. __asm__ ("umlsl2 %0.2d, %2.4s, %3.s[0]"
  5926. : "=w"(result)
  5927. : "0"(a), "w"(b), "w"(c)
  5928. : /* No clobbers */);
  5929. return result;
  5930. }
  5931. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  5932. vmlsl_high_s8 (int16x8_t a, int8x16_t b, int8x16_t c)
  5933. {
  5934. int16x8_t result;
  5935. __asm__ ("smlsl2 %0.8h,%2.16b,%3.16b"
  5936. : "=w"(result)
  5937. : "0"(a), "w"(b), "w"(c)
  5938. : /* No clobbers */);
  5939. return result;
  5940. }
  5941. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  5942. vmlsl_high_s16 (int32x4_t a, int16x8_t b, int16x8_t c)
  5943. {
  5944. int32x4_t result;
  5945. __asm__ ("smlsl2 %0.4s,%2.8h,%3.8h"
  5946. : "=w"(result)
  5947. : "0"(a), "w"(b), "w"(c)
  5948. : /* No clobbers */);
  5949. return result;
  5950. }
  5951. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  5952. vmlsl_high_s32 (int64x2_t a, int32x4_t b, int32x4_t c)
  5953. {
  5954. int64x2_t result;
  5955. __asm__ ("smlsl2 %0.2d,%2.4s,%3.4s"
  5956. : "=w"(result)
  5957. : "0"(a), "w"(b), "w"(c)
  5958. : /* No clobbers */);
  5959. return result;
  5960. }
  5961. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  5962. vmlsl_high_u8 (uint16x8_t a, uint8x16_t b, uint8x16_t c)
  5963. {
  5964. uint16x8_t result;
  5965. __asm__ ("umlsl2 %0.8h,%2.16b,%3.16b"
  5966. : "=w"(result)
  5967. : "0"(a), "w"(b), "w"(c)
  5968. : /* No clobbers */);
  5969. return result;
  5970. }
  5971. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  5972. vmlsl_high_u16 (uint32x4_t a, uint16x8_t b, uint16x8_t c)
  5973. {
  5974. uint32x4_t result;
  5975. __asm__ ("umlsl2 %0.4s,%2.8h,%3.8h"
  5976. : "=w"(result)
  5977. : "0"(a), "w"(b), "w"(c)
  5978. : /* No clobbers */);
  5979. return result;
  5980. }
  5981. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  5982. vmlsl_high_u32 (uint64x2_t a, uint32x4_t b, uint32x4_t c)
  5983. {
  5984. uint64x2_t result;
  5985. __asm__ ("umlsl2 %0.2d,%2.4s,%3.4s"
  5986. : "=w"(result)
  5987. : "0"(a), "w"(b), "w"(c)
  5988. : /* No clobbers */);
  5989. return result;
  5990. }
  5991. #define vmlsl_lane_s16(a, b, c, d) \
  5992. __extension__ \
  5993. ({ \
  5994. int16x4_t c_ = (c); \
  5995. int16x4_t b_ = (b); \
  5996. int32x4_t a_ = (a); \
  5997. int32x4_t result; \
  5998. __asm__ ("smlsl %0.4s, %2.4h, %3.h[%4]" \
  5999. : "=w"(result) \
  6000. : "0"(a_), "w"(b_), "x"(c_), "i"(d) \
  6001. : /* No clobbers */); \
  6002. result; \
  6003. })
  6004. #define vmlsl_lane_s32(a, b, c, d) \
  6005. __extension__ \
  6006. ({ \
  6007. int32x2_t c_ = (c); \
  6008. int32x2_t b_ = (b); \
  6009. int64x2_t a_ = (a); \
  6010. int64x2_t result; \
  6011. __asm__ ("smlsl %0.2d, %2.2s, %3.s[%4]" \
  6012. : "=w"(result) \
  6013. : "0"(a_), "w"(b_), "w"(c_), "i"(d) \
  6014. : /* No clobbers */); \
  6015. result; \
  6016. })
  6017. #define vmlsl_lane_u16(a, b, c, d) \
  6018. __extension__ \
  6019. ({ \
  6020. uint16x4_t c_ = (c); \
  6021. uint16x4_t b_ = (b); \
  6022. uint32x4_t a_ = (a); \
  6023. uint32x4_t result; \
  6024. __asm__ ("umlsl %0.4s, %2.4h, %3.h[%4]" \
  6025. : "=w"(result) \
  6026. : "0"(a_), "w"(b_), "x"(c_), "i"(d) \
  6027. : /* No clobbers */); \
  6028. result; \
  6029. })
  6030. #define vmlsl_lane_u32(a, b, c, d) \
  6031. __extension__ \
  6032. ({ \
  6033. uint32x2_t c_ = (c); \
  6034. uint32x2_t b_ = (b); \
  6035. uint64x2_t a_ = (a); \
  6036. uint64x2_t result; \
  6037. __asm__ ("umlsl %0.2d, %2.2s, %3.s[%4]" \
  6038. : "=w"(result) \
  6039. : "0"(a_), "w"(b_), "w"(c_), "i"(d) \
  6040. : /* No clobbers */); \
  6041. result; \
  6042. })
  6043. #define vmlsl_laneq_s16(a, b, c, d) \
  6044. __extension__ \
  6045. ({ \
  6046. int16x8_t c_ = (c); \
  6047. int16x4_t b_ = (b); \
  6048. int32x4_t a_ = (a); \
  6049. int32x4_t result; \
  6050. __asm__ ("smlsl %0.4s, %2.4h, %3.h[%4]" \
  6051. : "=w"(result) \
  6052. : "0"(a_), "w"(b_), "x"(c_), "i"(d) \
  6053. : /* No clobbers */); \
  6054. result; \
  6055. })
  6056. #define vmlsl_laneq_s32(a, b, c, d) \
  6057. __extension__ \
  6058. ({ \
  6059. int32x4_t c_ = (c); \
  6060. int32x2_t b_ = (b); \
  6061. int64x2_t a_ = (a); \
  6062. int64x2_t result; \
  6063. __asm__ ("smlsl %0.2d, %2.2s, %3.s[%4]" \
  6064. : "=w"(result) \
  6065. : "0"(a_), "w"(b_), "w"(c_), "i"(d) \
  6066. : /* No clobbers */); \
  6067. result; \
  6068. })
  6069. #define vmlsl_laneq_u16(a, b, c, d) \
  6070. __extension__ \
  6071. ({ \
  6072. uint16x8_t c_ = (c); \
  6073. uint16x4_t b_ = (b); \
  6074. uint32x4_t a_ = (a); \
  6075. uint32x4_t result; \
  6076. __asm__ ("umlsl %0.4s, %2.4h, %3.h[%4]" \
  6077. : "=w"(result) \
  6078. : "0"(a_), "w"(b_), "x"(c_), "i"(d) \
  6079. : /* No clobbers */); \
  6080. result; \
  6081. })
  6082. #define vmlsl_laneq_u32(a, b, c, d) \
  6083. __extension__ \
  6084. ({ \
  6085. uint32x4_t c_ = (c); \
  6086. uint32x2_t b_ = (b); \
  6087. uint64x2_t a_ = (a); \
  6088. uint64x2_t result; \
  6089. __asm__ ("umlsl %0.2d, %2.2s, %3.s[%4]" \
  6090. : "=w"(result) \
  6091. : "0"(a_), "w"(b_), "w"(c_), "i"(d) \
  6092. : /* No clobbers */); \
  6093. result; \
  6094. })
  6095. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  6096. vmlsl_n_s16 (int32x4_t a, int16x4_t b, int16_t c)
  6097. {
  6098. int32x4_t result;
  6099. __asm__ ("smlsl %0.4s, %2.4h, %3.h[0]"
  6100. : "=w"(result)
  6101. : "0"(a), "w"(b), "x"(c)
  6102. : /* No clobbers */);
  6103. return result;
  6104. }
  6105. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  6106. vmlsl_n_s32 (int64x2_t a, int32x2_t b, int32_t c)
  6107. {
  6108. int64x2_t result;
  6109. __asm__ ("smlsl %0.2d, %2.2s, %3.s[0]"
  6110. : "=w"(result)
  6111. : "0"(a), "w"(b), "w"(c)
  6112. : /* No clobbers */);
  6113. return result;
  6114. }
  6115. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  6116. vmlsl_n_u16 (uint32x4_t a, uint16x4_t b, uint16_t c)
  6117. {
  6118. uint32x4_t result;
  6119. __asm__ ("umlsl %0.4s, %2.4h, %3.h[0]"
  6120. : "=w"(result)
  6121. : "0"(a), "w"(b), "x"(c)
  6122. : /* No clobbers */);
  6123. return result;
  6124. }
  6125. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  6126. vmlsl_n_u32 (uint64x2_t a, uint32x2_t b, uint32_t c)
  6127. {
  6128. uint64x2_t result;
  6129. __asm__ ("umlsl %0.2d, %2.2s, %3.s[0]"
  6130. : "=w"(result)
  6131. : "0"(a), "w"(b), "w"(c)
  6132. : /* No clobbers */);
  6133. return result;
  6134. }
  6135. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  6136. vmlsl_s8 (int16x8_t a, int8x8_t b, int8x8_t c)
  6137. {
  6138. int16x8_t result;
  6139. __asm__ ("smlsl %0.8h, %2.8b, %3.8b"
  6140. : "=w"(result)
  6141. : "0"(a), "w"(b), "w"(c)
  6142. : /* No clobbers */);
  6143. return result;
  6144. }
  6145. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  6146. vmlsl_s16 (int32x4_t a, int16x4_t b, int16x4_t c)
  6147. {
  6148. int32x4_t result;
  6149. __asm__ ("smlsl %0.4s, %2.4h, %3.4h"
  6150. : "=w"(result)
  6151. : "0"(a), "w"(b), "w"(c)
  6152. : /* No clobbers */);
  6153. return result;
  6154. }
  6155. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  6156. vmlsl_s32 (int64x2_t a, int32x2_t b, int32x2_t c)
  6157. {
  6158. int64x2_t result;
  6159. __asm__ ("smlsl %0.2d, %2.2s, %3.2s"
  6160. : "=w"(result)
  6161. : "0"(a), "w"(b), "w"(c)
  6162. : /* No clobbers */);
  6163. return result;
  6164. }
  6165. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  6166. vmlsl_u8 (uint16x8_t a, uint8x8_t b, uint8x8_t c)
  6167. {
  6168. uint16x8_t result;
  6169. __asm__ ("umlsl %0.8h, %2.8b, %3.8b"
  6170. : "=w"(result)
  6171. : "0"(a), "w"(b), "w"(c)
  6172. : /* No clobbers */);
  6173. return result;
  6174. }
  6175. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  6176. vmlsl_u16 (uint32x4_t a, uint16x4_t b, uint16x4_t c)
  6177. {
  6178. uint32x4_t result;
  6179. __asm__ ("umlsl %0.4s, %2.4h, %3.4h"
  6180. : "=w"(result)
  6181. : "0"(a), "w"(b), "w"(c)
  6182. : /* No clobbers */);
  6183. return result;
  6184. }
  6185. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  6186. vmlsl_u32 (uint64x2_t a, uint32x2_t b, uint32x2_t c)
  6187. {
  6188. uint64x2_t result;
  6189. __asm__ ("umlsl %0.2d, %2.2s, %3.2s"
  6190. : "=w"(result)
  6191. : "0"(a), "w"(b), "w"(c)
  6192. : /* No clobbers */);
  6193. return result;
  6194. }
  6195. __extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
  6196. vmlsq_n_f32 (float32x4_t a, float32x4_t b, float32_t c)
  6197. {
  6198. float32x4_t result;
  6199. float32x4_t t1;
  6200. __asm__ ("fmul %1.4s, %3.4s, %4.s[0]; fsub %0.4s, %0.4s, %1.4s"
  6201. : "=w"(result), "=w"(t1)
  6202. : "0"(a), "w"(b), "w"(c)
  6203. : /* No clobbers */);
  6204. return result;
  6205. }
  6206. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  6207. vmlsq_n_s16 (int16x8_t a, int16x8_t b, int16_t c)
  6208. {
  6209. int16x8_t result;
  6210. __asm__ ("mls %0.8h, %2.8h, %3.h[0]"
  6211. : "=w"(result)
  6212. : "0"(a), "w"(b), "x"(c)
  6213. : /* No clobbers */);
  6214. return result;
  6215. }
  6216. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  6217. vmlsq_n_s32 (int32x4_t a, int32x4_t b, int32_t c)
  6218. {
  6219. int32x4_t result;
  6220. __asm__ ("mls %0.4s, %2.4s, %3.s[0]"
  6221. : "=w"(result)
  6222. : "0"(a), "w"(b), "w"(c)
  6223. : /* No clobbers */);
  6224. return result;
  6225. }
  6226. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  6227. vmlsq_n_u16 (uint16x8_t a, uint16x8_t b, uint16_t c)
  6228. {
  6229. uint16x8_t result;
  6230. __asm__ ("mls %0.8h, %2.8h, %3.h[0]"
  6231. : "=w"(result)
  6232. : "0"(a), "w"(b), "x"(c)
  6233. : /* No clobbers */);
  6234. return result;
  6235. }
  6236. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  6237. vmlsq_n_u32 (uint32x4_t a, uint32x4_t b, uint32_t c)
  6238. {
  6239. uint32x4_t result;
  6240. __asm__ ("mls %0.4s, %2.4s, %3.s[0]"
  6241. : "=w"(result)
  6242. : "0"(a), "w"(b), "w"(c)
  6243. : /* No clobbers */);
  6244. return result;
  6245. }
  6246. __extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
  6247. vmlsq_s8 (int8x16_t a, int8x16_t b, int8x16_t c)
  6248. {
  6249. int8x16_t result;
  6250. __asm__ ("mls %0.16b,%2.16b,%3.16b"
  6251. : "=w"(result)
  6252. : "0"(a), "w"(b), "w"(c)
  6253. : /* No clobbers */);
  6254. return result;
  6255. }
  6256. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  6257. vmlsq_s16 (int16x8_t a, int16x8_t b, int16x8_t c)
  6258. {
  6259. int16x8_t result;
  6260. __asm__ ("mls %0.8h,%2.8h,%3.8h"
  6261. : "=w"(result)
  6262. : "0"(a), "w"(b), "w"(c)
  6263. : /* No clobbers */);
  6264. return result;
  6265. }
  6266. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  6267. vmlsq_s32 (int32x4_t a, int32x4_t b, int32x4_t c)
  6268. {
  6269. int32x4_t result;
  6270. __asm__ ("mls %0.4s,%2.4s,%3.4s"
  6271. : "=w"(result)
  6272. : "0"(a), "w"(b), "w"(c)
  6273. : /* No clobbers */);
  6274. return result;
  6275. }
  6276. __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
  6277. vmlsq_u8 (uint8x16_t a, uint8x16_t b, uint8x16_t c)
  6278. {
  6279. uint8x16_t result;
  6280. __asm__ ("mls %0.16b,%2.16b,%3.16b"
  6281. : "=w"(result)
  6282. : "0"(a), "w"(b), "w"(c)
  6283. : /* No clobbers */);
  6284. return result;
  6285. }
  6286. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  6287. vmlsq_u16 (uint16x8_t a, uint16x8_t b, uint16x8_t c)
  6288. {
  6289. uint16x8_t result;
  6290. __asm__ ("mls %0.8h,%2.8h,%3.8h"
  6291. : "=w"(result)
  6292. : "0"(a), "w"(b), "w"(c)
  6293. : /* No clobbers */);
  6294. return result;
  6295. }
  6296. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  6297. vmlsq_u32 (uint32x4_t a, uint32x4_t b, uint32x4_t c)
  6298. {
  6299. uint32x4_t result;
  6300. __asm__ ("mls %0.4s,%2.4s,%3.4s"
  6301. : "=w"(result)
  6302. : "0"(a), "w"(b), "w"(c)
  6303. : /* No clobbers */);
  6304. return result;
  6305. }
  6306. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  6307. vmovl_high_s8 (int8x16_t a)
  6308. {
  6309. int16x8_t result;
  6310. __asm__ ("sshll2 %0.8h,%1.16b,#0"
  6311. : "=w"(result)
  6312. : "w"(a)
  6313. : /* No clobbers */);
  6314. return result;
  6315. }
  6316. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  6317. vmovl_high_s16 (int16x8_t a)
  6318. {
  6319. int32x4_t result;
  6320. __asm__ ("sshll2 %0.4s,%1.8h,#0"
  6321. : "=w"(result)
  6322. : "w"(a)
  6323. : /* No clobbers */);
  6324. return result;
  6325. }
  6326. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  6327. vmovl_high_s32 (int32x4_t a)
  6328. {
  6329. int64x2_t result;
  6330. __asm__ ("sshll2 %0.2d,%1.4s,#0"
  6331. : "=w"(result)
  6332. : "w"(a)
  6333. : /* No clobbers */);
  6334. return result;
  6335. }
  6336. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  6337. vmovl_high_u8 (uint8x16_t a)
  6338. {
  6339. uint16x8_t result;
  6340. __asm__ ("ushll2 %0.8h,%1.16b,#0"
  6341. : "=w"(result)
  6342. : "w"(a)
  6343. : /* No clobbers */);
  6344. return result;
  6345. }
  6346. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  6347. vmovl_high_u16 (uint16x8_t a)
  6348. {
  6349. uint32x4_t result;
  6350. __asm__ ("ushll2 %0.4s,%1.8h,#0"
  6351. : "=w"(result)
  6352. : "w"(a)
  6353. : /* No clobbers */);
  6354. return result;
  6355. }
  6356. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  6357. vmovl_high_u32 (uint32x4_t a)
  6358. {
  6359. uint64x2_t result;
  6360. __asm__ ("ushll2 %0.2d,%1.4s,#0"
  6361. : "=w"(result)
  6362. : "w"(a)
  6363. : /* No clobbers */);
  6364. return result;
  6365. }
  6366. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  6367. vmovl_s8 (int8x8_t a)
  6368. {
  6369. int16x8_t result;
  6370. __asm__ ("sshll %0.8h,%1.8b,#0"
  6371. : "=w"(result)
  6372. : "w"(a)
  6373. : /* No clobbers */);
  6374. return result;
  6375. }
  6376. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  6377. vmovl_s16 (int16x4_t a)
  6378. {
  6379. int32x4_t result;
  6380. __asm__ ("sshll %0.4s,%1.4h,#0"
  6381. : "=w"(result)
  6382. : "w"(a)
  6383. : /* No clobbers */);
  6384. return result;
  6385. }
  6386. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  6387. vmovl_s32 (int32x2_t a)
  6388. {
  6389. int64x2_t result;
  6390. __asm__ ("sshll %0.2d,%1.2s,#0"
  6391. : "=w"(result)
  6392. : "w"(a)
  6393. : /* No clobbers */);
  6394. return result;
  6395. }
  6396. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  6397. vmovl_u8 (uint8x8_t a)
  6398. {
  6399. uint16x8_t result;
  6400. __asm__ ("ushll %0.8h,%1.8b,#0"
  6401. : "=w"(result)
  6402. : "w"(a)
  6403. : /* No clobbers */);
  6404. return result;
  6405. }
  6406. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  6407. vmovl_u16 (uint16x4_t a)
  6408. {
  6409. uint32x4_t result;
  6410. __asm__ ("ushll %0.4s,%1.4h,#0"
  6411. : "=w"(result)
  6412. : "w"(a)
  6413. : /* No clobbers */);
  6414. return result;
  6415. }
  6416. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  6417. vmovl_u32 (uint32x2_t a)
  6418. {
  6419. uint64x2_t result;
  6420. __asm__ ("ushll %0.2d,%1.2s,#0"
  6421. : "=w"(result)
  6422. : "w"(a)
  6423. : /* No clobbers */);
  6424. return result;
  6425. }
  6426. __extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
  6427. vmovn_high_s16 (int8x8_t a, int16x8_t b)
  6428. {
  6429. int8x16_t result = vcombine_s8 (a, vcreate_s8 (__AARCH64_UINT64_C (0x0)));
  6430. __asm__ ("xtn2 %0.16b,%1.8h"
  6431. : "+w"(result)
  6432. : "w"(b)
  6433. : /* No clobbers */);
  6434. return result;
  6435. }
  6436. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  6437. vmovn_high_s32 (int16x4_t a, int32x4_t b)
  6438. {
  6439. int16x8_t result = vcombine_s16 (a, vcreate_s16 (__AARCH64_UINT64_C (0x0)));
  6440. __asm__ ("xtn2 %0.8h,%1.4s"
  6441. : "+w"(result)
  6442. : "w"(b)
  6443. : /* No clobbers */);
  6444. return result;
  6445. }
  6446. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  6447. vmovn_high_s64 (int32x2_t a, int64x2_t b)
  6448. {
  6449. int32x4_t result = vcombine_s32 (a, vcreate_s32 (__AARCH64_UINT64_C (0x0)));
  6450. __asm__ ("xtn2 %0.4s,%1.2d"
  6451. : "+w"(result)
  6452. : "w"(b)
  6453. : /* No clobbers */);
  6454. return result;
  6455. }
  6456. __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
  6457. vmovn_high_u16 (uint8x8_t a, uint16x8_t b)
  6458. {
  6459. uint8x16_t result = vcombine_u8 (a, vcreate_u8 (__AARCH64_UINT64_C (0x0)));
  6460. __asm__ ("xtn2 %0.16b,%1.8h"
  6461. : "+w"(result)
  6462. : "w"(b)
  6463. : /* No clobbers */);
  6464. return result;
  6465. }
  6466. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  6467. vmovn_high_u32 (uint16x4_t a, uint32x4_t b)
  6468. {
  6469. uint16x8_t result = vcombine_u16 (a, vcreate_u16 (__AARCH64_UINT64_C (0x0)));
  6470. __asm__ ("xtn2 %0.8h,%1.4s"
  6471. : "+w"(result)
  6472. : "w"(b)
  6473. : /* No clobbers */);
  6474. return result;
  6475. }
  6476. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  6477. vmovn_high_u64 (uint32x2_t a, uint64x2_t b)
  6478. {
  6479. uint32x4_t result = vcombine_u32 (a, vcreate_u32 (__AARCH64_UINT64_C (0x0)));
  6480. __asm__ ("xtn2 %0.4s,%1.2d"
  6481. : "+w"(result)
  6482. : "w"(b)
  6483. : /* No clobbers */);
  6484. return result;
  6485. }
  6486. __extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
  6487. vmovn_s16 (int16x8_t a)
  6488. {
  6489. int8x8_t result;
  6490. __asm__ ("xtn %0.8b,%1.8h"
  6491. : "=w"(result)
  6492. : "w"(a)
  6493. : /* No clobbers */);
  6494. return result;
  6495. }
  6496. __extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
  6497. vmovn_s32 (int32x4_t a)
  6498. {
  6499. int16x4_t result;
  6500. __asm__ ("xtn %0.4h,%1.4s"
  6501. : "=w"(result)
  6502. : "w"(a)
  6503. : /* No clobbers */);
  6504. return result;
  6505. }
  6506. __extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
  6507. vmovn_s64 (int64x2_t a)
  6508. {
  6509. int32x2_t result;
  6510. __asm__ ("xtn %0.2s,%1.2d"
  6511. : "=w"(result)
  6512. : "w"(a)
  6513. : /* No clobbers */);
  6514. return result;
  6515. }
  6516. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  6517. vmovn_u16 (uint16x8_t a)
  6518. {
  6519. uint8x8_t result;
  6520. __asm__ ("xtn %0.8b,%1.8h"
  6521. : "=w"(result)
  6522. : "w"(a)
  6523. : /* No clobbers */);
  6524. return result;
  6525. }
  6526. __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
  6527. vmovn_u32 (uint32x4_t a)
  6528. {
  6529. uint16x4_t result;
  6530. __asm__ ("xtn %0.4h,%1.4s"
  6531. : "=w"(result)
  6532. : "w"(a)
  6533. : /* No clobbers */);
  6534. return result;
  6535. }
  6536. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  6537. vmovn_u64 (uint64x2_t a)
  6538. {
  6539. uint32x2_t result;
  6540. __asm__ ("xtn %0.2s,%1.2d"
  6541. : "=w"(result)
  6542. : "w"(a)
  6543. : /* No clobbers */);
  6544. return result;
  6545. }
  6546. __extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
  6547. vmul_n_f32 (float32x2_t a, float32_t b)
  6548. {
  6549. float32x2_t result;
  6550. __asm__ ("fmul %0.2s,%1.2s,%2.s[0]"
  6551. : "=w"(result)
  6552. : "w"(a), "w"(b)
  6553. : /* No clobbers */);
  6554. return result;
  6555. }
  6556. __extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
  6557. vmul_n_s16 (int16x4_t a, int16_t b)
  6558. {
  6559. int16x4_t result;
  6560. __asm__ ("mul %0.4h,%1.4h,%2.h[0]"
  6561. : "=w"(result)
  6562. : "w"(a), "x"(b)
  6563. : /* No clobbers */);
  6564. return result;
  6565. }
  6566. __extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
  6567. vmul_n_s32 (int32x2_t a, int32_t b)
  6568. {
  6569. int32x2_t result;
  6570. __asm__ ("mul %0.2s,%1.2s,%2.s[0]"
  6571. : "=w"(result)
  6572. : "w"(a), "w"(b)
  6573. : /* No clobbers */);
  6574. return result;
  6575. }
  6576. __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
  6577. vmul_n_u16 (uint16x4_t a, uint16_t b)
  6578. {
  6579. uint16x4_t result;
  6580. __asm__ ("mul %0.4h,%1.4h,%2.h[0]"
  6581. : "=w"(result)
  6582. : "w"(a), "x"(b)
  6583. : /* No clobbers */);
  6584. return result;
  6585. }
  6586. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  6587. vmul_n_u32 (uint32x2_t a, uint32_t b)
  6588. {
  6589. uint32x2_t result;
  6590. __asm__ ("mul %0.2s,%1.2s,%2.s[0]"
  6591. : "=w"(result)
  6592. : "w"(a), "w"(b)
  6593. : /* No clobbers */);
  6594. return result;
  6595. }
  6596. #define vmull_high_lane_s16(a, b, c) \
  6597. __extension__ \
  6598. ({ \
  6599. int16x4_t b_ = (b); \
  6600. int16x8_t a_ = (a); \
  6601. int32x4_t result; \
  6602. __asm__ ("smull2 %0.4s, %1.8h, %2.h[%3]" \
  6603. : "=w"(result) \
  6604. : "w"(a_), "x"(b_), "i"(c) \
  6605. : /* No clobbers */); \
  6606. result; \
  6607. })
  6608. #define vmull_high_lane_s32(a, b, c) \
  6609. __extension__ \
  6610. ({ \
  6611. int32x2_t b_ = (b); \
  6612. int32x4_t a_ = (a); \
  6613. int64x2_t result; \
  6614. __asm__ ("smull2 %0.2d, %1.4s, %2.s[%3]" \
  6615. : "=w"(result) \
  6616. : "w"(a_), "w"(b_), "i"(c) \
  6617. : /* No clobbers */); \
  6618. result; \
  6619. })
  6620. #define vmull_high_lane_u16(a, b, c) \
  6621. __extension__ \
  6622. ({ \
  6623. uint16x4_t b_ = (b); \
  6624. uint16x8_t a_ = (a); \
  6625. uint32x4_t result; \
  6626. __asm__ ("umull2 %0.4s, %1.8h, %2.h[%3]" \
  6627. : "=w"(result) \
  6628. : "w"(a_), "x"(b_), "i"(c) \
  6629. : /* No clobbers */); \
  6630. result; \
  6631. })
  6632. #define vmull_high_lane_u32(a, b, c) \
  6633. __extension__ \
  6634. ({ \
  6635. uint32x2_t b_ = (b); \
  6636. uint32x4_t a_ = (a); \
  6637. uint64x2_t result; \
  6638. __asm__ ("umull2 %0.2d, %1.4s, %2.s[%3]" \
  6639. : "=w"(result) \
  6640. : "w"(a_), "w"(b_), "i"(c) \
  6641. : /* No clobbers */); \
  6642. result; \
  6643. })
  6644. #define vmull_high_laneq_s16(a, b, c) \
  6645. __extension__ \
  6646. ({ \
  6647. int16x8_t b_ = (b); \
  6648. int16x8_t a_ = (a); \
  6649. int32x4_t result; \
  6650. __asm__ ("smull2 %0.4s, %1.8h, %2.h[%3]" \
  6651. : "=w"(result) \
  6652. : "w"(a_), "x"(b_), "i"(c) \
  6653. : /* No clobbers */); \
  6654. result; \
  6655. })
  6656. #define vmull_high_laneq_s32(a, b, c) \
  6657. __extension__ \
  6658. ({ \
  6659. int32x4_t b_ = (b); \
  6660. int32x4_t a_ = (a); \
  6661. int64x2_t result; \
  6662. __asm__ ("smull2 %0.2d, %1.4s, %2.s[%3]" \
  6663. : "=w"(result) \
  6664. : "w"(a_), "w"(b_), "i"(c) \
  6665. : /* No clobbers */); \
  6666. result; \
  6667. })
  6668. #define vmull_high_laneq_u16(a, b, c) \
  6669. __extension__ \
  6670. ({ \
  6671. uint16x8_t b_ = (b); \
  6672. uint16x8_t a_ = (a); \
  6673. uint32x4_t result; \
  6674. __asm__ ("umull2 %0.4s, %1.8h, %2.h[%3]" \
  6675. : "=w"(result) \
  6676. : "w"(a_), "x"(b_), "i"(c) \
  6677. : /* No clobbers */); \
  6678. result; \
  6679. })
  6680. #define vmull_high_laneq_u32(a, b, c) \
  6681. __extension__ \
  6682. ({ \
  6683. uint32x4_t b_ = (b); \
  6684. uint32x4_t a_ = (a); \
  6685. uint64x2_t result; \
  6686. __asm__ ("umull2 %0.2d, %1.4s, %2.s[%3]" \
  6687. : "=w"(result) \
  6688. : "w"(a_), "w"(b_), "i"(c) \
  6689. : /* No clobbers */); \
  6690. result; \
  6691. })
  6692. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  6693. vmull_high_n_s16 (int16x8_t a, int16_t b)
  6694. {
  6695. int32x4_t result;
  6696. __asm__ ("smull2 %0.4s,%1.8h,%2.h[0]"
  6697. : "=w"(result)
  6698. : "w"(a), "x"(b)
  6699. : /* No clobbers */);
  6700. return result;
  6701. }
  6702. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  6703. vmull_high_n_s32 (int32x4_t a, int32_t b)
  6704. {
  6705. int64x2_t result;
  6706. __asm__ ("smull2 %0.2d,%1.4s,%2.s[0]"
  6707. : "=w"(result)
  6708. : "w"(a), "w"(b)
  6709. : /* No clobbers */);
  6710. return result;
  6711. }
  6712. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  6713. vmull_high_n_u16 (uint16x8_t a, uint16_t b)
  6714. {
  6715. uint32x4_t result;
  6716. __asm__ ("umull2 %0.4s,%1.8h,%2.h[0]"
  6717. : "=w"(result)
  6718. : "w"(a), "x"(b)
  6719. : /* No clobbers */);
  6720. return result;
  6721. }
  6722. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  6723. vmull_high_n_u32 (uint32x4_t a, uint32_t b)
  6724. {
  6725. uint64x2_t result;
  6726. __asm__ ("umull2 %0.2d,%1.4s,%2.s[0]"
  6727. : "=w"(result)
  6728. : "w"(a), "w"(b)
  6729. : /* No clobbers */);
  6730. return result;
  6731. }
  6732. __extension__ static __inline poly16x8_t __attribute__ ((__always_inline__))
  6733. vmull_high_p8 (poly8x16_t a, poly8x16_t b)
  6734. {
  6735. poly16x8_t result;
  6736. __asm__ ("pmull2 %0.8h,%1.16b,%2.16b"
  6737. : "=w"(result)
  6738. : "w"(a), "w"(b)
  6739. : /* No clobbers */);
  6740. return result;
  6741. }
  6742. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  6743. vmull_high_s8 (int8x16_t a, int8x16_t b)
  6744. {
  6745. int16x8_t result;
  6746. __asm__ ("smull2 %0.8h,%1.16b,%2.16b"
  6747. : "=w"(result)
  6748. : "w"(a), "w"(b)
  6749. : /* No clobbers */);
  6750. return result;
  6751. }
  6752. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  6753. vmull_high_s16 (int16x8_t a, int16x8_t b)
  6754. {
  6755. int32x4_t result;
  6756. __asm__ ("smull2 %0.4s,%1.8h,%2.8h"
  6757. : "=w"(result)
  6758. : "w"(a), "w"(b)
  6759. : /* No clobbers */);
  6760. return result;
  6761. }
  6762. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  6763. vmull_high_s32 (int32x4_t a, int32x4_t b)
  6764. {
  6765. int64x2_t result;
  6766. __asm__ ("smull2 %0.2d,%1.4s,%2.4s"
  6767. : "=w"(result)
  6768. : "w"(a), "w"(b)
  6769. : /* No clobbers */);
  6770. return result;
  6771. }
  6772. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  6773. vmull_high_u8 (uint8x16_t a, uint8x16_t b)
  6774. {
  6775. uint16x8_t result;
  6776. __asm__ ("umull2 %0.8h,%1.16b,%2.16b"
  6777. : "=w"(result)
  6778. : "w"(a), "w"(b)
  6779. : /* No clobbers */);
  6780. return result;
  6781. }
  6782. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  6783. vmull_high_u16 (uint16x8_t a, uint16x8_t b)
  6784. {
  6785. uint32x4_t result;
  6786. __asm__ ("umull2 %0.4s,%1.8h,%2.8h"
  6787. : "=w"(result)
  6788. : "w"(a), "w"(b)
  6789. : /* No clobbers */);
  6790. return result;
  6791. }
  6792. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  6793. vmull_high_u32 (uint32x4_t a, uint32x4_t b)
  6794. {
  6795. uint64x2_t result;
  6796. __asm__ ("umull2 %0.2d,%1.4s,%2.4s"
  6797. : "=w"(result)
  6798. : "w"(a), "w"(b)
  6799. : /* No clobbers */);
  6800. return result;
  6801. }
  6802. #define vmull_lane_s16(a, b, c) \
  6803. __extension__ \
  6804. ({ \
  6805. int16x4_t b_ = (b); \
  6806. int16x4_t a_ = (a); \
  6807. int32x4_t result; \
  6808. __asm__ ("smull %0.4s,%1.4h,%2.h[%3]" \
  6809. : "=w"(result) \
  6810. : "w"(a_), "x"(b_), "i"(c) \
  6811. : /* No clobbers */); \
  6812. result; \
  6813. })
  6814. #define vmull_lane_s32(a, b, c) \
  6815. __extension__ \
  6816. ({ \
  6817. int32x2_t b_ = (b); \
  6818. int32x2_t a_ = (a); \
  6819. int64x2_t result; \
  6820. __asm__ ("smull %0.2d,%1.2s,%2.s[%3]" \
  6821. : "=w"(result) \
  6822. : "w"(a_), "w"(b_), "i"(c) \
  6823. : /* No clobbers */); \
  6824. result; \
  6825. })
  6826. #define vmull_lane_u16(a, b, c) \
  6827. __extension__ \
  6828. ({ \
  6829. uint16x4_t b_ = (b); \
  6830. uint16x4_t a_ = (a); \
  6831. uint32x4_t result; \
  6832. __asm__ ("umull %0.4s,%1.4h,%2.h[%3]" \
  6833. : "=w"(result) \
  6834. : "w"(a_), "x"(b_), "i"(c) \
  6835. : /* No clobbers */); \
  6836. result; \
  6837. })
  6838. #define vmull_lane_u32(a, b, c) \
  6839. __extension__ \
  6840. ({ \
  6841. uint32x2_t b_ = (b); \
  6842. uint32x2_t a_ = (a); \
  6843. uint64x2_t result; \
  6844. __asm__ ("umull %0.2d, %1.2s, %2.s[%3]" \
  6845. : "=w"(result) \
  6846. : "w"(a_), "w"(b_), "i"(c) \
  6847. : /* No clobbers */); \
  6848. result; \
  6849. })
  6850. #define vmull_laneq_s16(a, b, c) \
  6851. __extension__ \
  6852. ({ \
  6853. int16x8_t b_ = (b); \
  6854. int16x4_t a_ = (a); \
  6855. int32x4_t result; \
  6856. __asm__ ("smull %0.4s, %1.4h, %2.h[%3]" \
  6857. : "=w"(result) \
  6858. : "w"(a_), "x"(b_), "i"(c) \
  6859. : /* No clobbers */); \
  6860. result; \
  6861. })
  6862. #define vmull_laneq_s32(a, b, c) \
  6863. __extension__ \
  6864. ({ \
  6865. int32x4_t b_ = (b); \
  6866. int32x2_t a_ = (a); \
  6867. int64x2_t result; \
  6868. __asm__ ("smull %0.2d, %1.2s, %2.s[%3]" \
  6869. : "=w"(result) \
  6870. : "w"(a_), "w"(b_), "i"(c) \
  6871. : /* No clobbers */); \
  6872. result; \
  6873. })
  6874. #define vmull_laneq_u16(a, b, c) \
  6875. __extension__ \
  6876. ({ \
  6877. uint16x8_t b_ = (b); \
  6878. uint16x4_t a_ = (a); \
  6879. uint32x4_t result; \
  6880. __asm__ ("umull %0.4s, %1.4h, %2.h[%3]" \
  6881. : "=w"(result) \
  6882. : "w"(a_), "x"(b_), "i"(c) \
  6883. : /* No clobbers */); \
  6884. result; \
  6885. })
  6886. #define vmull_laneq_u32(a, b, c) \
  6887. __extension__ \
  6888. ({ \
  6889. uint32x4_t b_ = (b); \
  6890. uint32x2_t a_ = (a); \
  6891. uint64x2_t result; \
  6892. __asm__ ("umull %0.2d, %1.2s, %2.s[%3]" \
  6893. : "=w"(result) \
  6894. : "w"(a_), "w"(b_), "i"(c) \
  6895. : /* No clobbers */); \
  6896. result; \
  6897. })
  6898. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  6899. vmull_n_s16 (int16x4_t a, int16_t b)
  6900. {
  6901. int32x4_t result;
  6902. __asm__ ("smull %0.4s,%1.4h,%2.h[0]"
  6903. : "=w"(result)
  6904. : "w"(a), "x"(b)
  6905. : /* No clobbers */);
  6906. return result;
  6907. }
  6908. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  6909. vmull_n_s32 (int32x2_t a, int32_t b)
  6910. {
  6911. int64x2_t result;
  6912. __asm__ ("smull %0.2d,%1.2s,%2.s[0]"
  6913. : "=w"(result)
  6914. : "w"(a), "w"(b)
  6915. : /* No clobbers */);
  6916. return result;
  6917. }
  6918. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  6919. vmull_n_u16 (uint16x4_t a, uint16_t b)
  6920. {
  6921. uint32x4_t result;
  6922. __asm__ ("umull %0.4s,%1.4h,%2.h[0]"
  6923. : "=w"(result)
  6924. : "w"(a), "x"(b)
  6925. : /* No clobbers */);
  6926. return result;
  6927. }
  6928. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  6929. vmull_n_u32 (uint32x2_t a, uint32_t b)
  6930. {
  6931. uint64x2_t result;
  6932. __asm__ ("umull %0.2d,%1.2s,%2.s[0]"
  6933. : "=w"(result)
  6934. : "w"(a), "w"(b)
  6935. : /* No clobbers */);
  6936. return result;
  6937. }
  6938. __extension__ static __inline poly16x8_t __attribute__ ((__always_inline__))
  6939. vmull_p8 (poly8x8_t a, poly8x8_t b)
  6940. {
  6941. poly16x8_t result;
  6942. __asm__ ("pmull %0.8h, %1.8b, %2.8b"
  6943. : "=w"(result)
  6944. : "w"(a), "w"(b)
  6945. : /* No clobbers */);
  6946. return result;
  6947. }
  6948. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  6949. vmull_s8 (int8x8_t a, int8x8_t b)
  6950. {
  6951. int16x8_t result;
  6952. __asm__ ("smull %0.8h, %1.8b, %2.8b"
  6953. : "=w"(result)
  6954. : "w"(a), "w"(b)
  6955. : /* No clobbers */);
  6956. return result;
  6957. }
  6958. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  6959. vmull_s16 (int16x4_t a, int16x4_t b)
  6960. {
  6961. int32x4_t result;
  6962. __asm__ ("smull %0.4s, %1.4h, %2.4h"
  6963. : "=w"(result)
  6964. : "w"(a), "w"(b)
  6965. : /* No clobbers */);
  6966. return result;
  6967. }
  6968. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  6969. vmull_s32 (int32x2_t a, int32x2_t b)
  6970. {
  6971. int64x2_t result;
  6972. __asm__ ("smull %0.2d, %1.2s, %2.2s"
  6973. : "=w"(result)
  6974. : "w"(a), "w"(b)
  6975. : /* No clobbers */);
  6976. return result;
  6977. }
  6978. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  6979. vmull_u8 (uint8x8_t a, uint8x8_t b)
  6980. {
  6981. uint16x8_t result;
  6982. __asm__ ("umull %0.8h, %1.8b, %2.8b"
  6983. : "=w"(result)
  6984. : "w"(a), "w"(b)
  6985. : /* No clobbers */);
  6986. return result;
  6987. }
  6988. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  6989. vmull_u16 (uint16x4_t a, uint16x4_t b)
  6990. {
  6991. uint32x4_t result;
  6992. __asm__ ("umull %0.4s, %1.4h, %2.4h"
  6993. : "=w"(result)
  6994. : "w"(a), "w"(b)
  6995. : /* No clobbers */);
  6996. return result;
  6997. }
  6998. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  6999. vmull_u32 (uint32x2_t a, uint32x2_t b)
  7000. {
  7001. uint64x2_t result;
  7002. __asm__ ("umull %0.2d, %1.2s, %2.2s"
  7003. : "=w"(result)
  7004. : "w"(a), "w"(b)
  7005. : /* No clobbers */);
  7006. return result;
  7007. }
  7008. __extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
  7009. vmulq_n_f32 (float32x4_t a, float32_t b)
  7010. {
  7011. float32x4_t result;
  7012. __asm__ ("fmul %0.4s,%1.4s,%2.s[0]"
  7013. : "=w"(result)
  7014. : "w"(a), "w"(b)
  7015. : /* No clobbers */);
  7016. return result;
  7017. }
  7018. __extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
  7019. vmulq_n_f64 (float64x2_t a, float64_t b)
  7020. {
  7021. float64x2_t result;
  7022. __asm__ ("fmul %0.2d,%1.2d,%2.d[0]"
  7023. : "=w"(result)
  7024. : "w"(a), "w"(b)
  7025. : /* No clobbers */);
  7026. return result;
  7027. }
  7028. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  7029. vmulq_n_s16 (int16x8_t a, int16_t b)
  7030. {
  7031. int16x8_t result;
  7032. __asm__ ("mul %0.8h,%1.8h,%2.h[0]"
  7033. : "=w"(result)
  7034. : "w"(a), "x"(b)
  7035. : /* No clobbers */);
  7036. return result;
  7037. }
  7038. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  7039. vmulq_n_s32 (int32x4_t a, int32_t b)
  7040. {
  7041. int32x4_t result;
  7042. __asm__ ("mul %0.4s,%1.4s,%2.s[0]"
  7043. : "=w"(result)
  7044. : "w"(a), "w"(b)
  7045. : /* No clobbers */);
  7046. return result;
  7047. }
  7048. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  7049. vmulq_n_u16 (uint16x8_t a, uint16_t b)
  7050. {
  7051. uint16x8_t result;
  7052. __asm__ ("mul %0.8h,%1.8h,%2.h[0]"
  7053. : "=w"(result)
  7054. : "w"(a), "x"(b)
  7055. : /* No clobbers */);
  7056. return result;
  7057. }
  7058. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  7059. vmulq_n_u32 (uint32x4_t a, uint32_t b)
  7060. {
  7061. uint32x4_t result;
  7062. __asm__ ("mul %0.4s,%1.4s,%2.s[0]"
  7063. : "=w"(result)
  7064. : "w"(a), "w"(b)
  7065. : /* No clobbers */);
  7066. return result;
  7067. }
  7068. __extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
  7069. vmulx_f32 (float32x2_t a, float32x2_t b)
  7070. {
  7071. float32x2_t result;
  7072. __asm__ ("fmulx %0.2s,%1.2s,%2.2s"
  7073. : "=w"(result)
  7074. : "w"(a), "w"(b)
  7075. : /* No clobbers */);
  7076. return result;
  7077. }
  7078. #define vmulx_lane_f32(a, b, c) \
  7079. __extension__ \
  7080. ({ \
  7081. float32x4_t b_ = (b); \
  7082. float32x2_t a_ = (a); \
  7083. float32x2_t result; \
  7084. __asm__ ("fmulx %0.2s,%1.2s,%2.s[%3]" \
  7085. : "=w"(result) \
  7086. : "w"(a_), "w"(b_), "i"(c) \
  7087. : /* No clobbers */); \
  7088. result; \
  7089. })
  7090. __extension__ static __inline float64_t __attribute__ ((__always_inline__))
  7091. vmulxd_f64 (float64_t a, float64_t b)
  7092. {
  7093. float64_t result;
  7094. __asm__ ("fmulx %d0, %d1, %d2"
  7095. : "=w"(result)
  7096. : "w"(a), "w"(b)
  7097. : /* No clobbers */);
  7098. return result;
  7099. }
  7100. __extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
  7101. vmulxq_f32 (float32x4_t a, float32x4_t b)
  7102. {
  7103. float32x4_t result;
  7104. __asm__ ("fmulx %0.4s,%1.4s,%2.4s"
  7105. : "=w"(result)
  7106. : "w"(a), "w"(b)
  7107. : /* No clobbers */);
  7108. return result;
  7109. }
  7110. __extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
  7111. vmulxq_f64 (float64x2_t a, float64x2_t b)
  7112. {
  7113. float64x2_t result;
  7114. __asm__ ("fmulx %0.2d,%1.2d,%2.2d"
  7115. : "=w"(result)
  7116. : "w"(a), "w"(b)
  7117. : /* No clobbers */);
  7118. return result;
  7119. }
  7120. #define vmulxq_lane_f32(a, b, c) \
  7121. __extension__ \
  7122. ({ \
  7123. float32x4_t b_ = (b); \
  7124. float32x4_t a_ = (a); \
  7125. float32x4_t result; \
  7126. __asm__ ("fmulx %0.4s,%1.4s,%2.s[%3]" \
  7127. : "=w"(result) \
  7128. : "w"(a_), "w"(b_), "i"(c) \
  7129. : /* No clobbers */); \
  7130. result; \
  7131. })
  7132. #define vmulxq_lane_f64(a, b, c) \
  7133. __extension__ \
  7134. ({ \
  7135. float64x2_t b_ = (b); \
  7136. float64x2_t a_ = (a); \
  7137. float64x2_t result; \
  7138. __asm__ ("fmulx %0.2d,%1.2d,%2.d[%3]" \
  7139. : "=w"(result) \
  7140. : "w"(a_), "w"(b_), "i"(c) \
  7141. : /* No clobbers */); \
  7142. result; \
  7143. })
  7144. __extension__ static __inline float32_t __attribute__ ((__always_inline__))
  7145. vmulxs_f32 (float32_t a, float32_t b)
  7146. {
  7147. float32_t result;
  7148. __asm__ ("fmulx %s0, %s1, %s2"
  7149. : "=w"(result)
  7150. : "w"(a), "w"(b)
  7151. : /* No clobbers */);
  7152. return result;
  7153. }
  7154. __extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
  7155. vmvn_p8 (poly8x8_t a)
  7156. {
  7157. poly8x8_t result;
  7158. __asm__ ("mvn %0.8b,%1.8b"
  7159. : "=w"(result)
  7160. : "w"(a)
  7161. : /* No clobbers */);
  7162. return result;
  7163. }
  7164. __extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
  7165. vmvn_s8 (int8x8_t a)
  7166. {
  7167. int8x8_t result;
  7168. __asm__ ("mvn %0.8b,%1.8b"
  7169. : "=w"(result)
  7170. : "w"(a)
  7171. : /* No clobbers */);
  7172. return result;
  7173. }
  7174. __extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
  7175. vmvn_s16 (int16x4_t a)
  7176. {
  7177. int16x4_t result;
  7178. __asm__ ("mvn %0.8b,%1.8b"
  7179. : "=w"(result)
  7180. : "w"(a)
  7181. : /* No clobbers */);
  7182. return result;
  7183. }
  7184. __extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
  7185. vmvn_s32 (int32x2_t a)
  7186. {
  7187. int32x2_t result;
  7188. __asm__ ("mvn %0.8b,%1.8b"
  7189. : "=w"(result)
  7190. : "w"(a)
  7191. : /* No clobbers */);
  7192. return result;
  7193. }
  7194. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  7195. vmvn_u8 (uint8x8_t a)
  7196. {
  7197. uint8x8_t result;
  7198. __asm__ ("mvn %0.8b,%1.8b"
  7199. : "=w"(result)
  7200. : "w"(a)
  7201. : /* No clobbers */);
  7202. return result;
  7203. }
  7204. __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
  7205. vmvn_u16 (uint16x4_t a)
  7206. {
  7207. uint16x4_t result;
  7208. __asm__ ("mvn %0.8b,%1.8b"
  7209. : "=w"(result)
  7210. : "w"(a)
  7211. : /* No clobbers */);
  7212. return result;
  7213. }
  7214. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  7215. vmvn_u32 (uint32x2_t a)
  7216. {
  7217. uint32x2_t result;
  7218. __asm__ ("mvn %0.8b,%1.8b"
  7219. : "=w"(result)
  7220. : "w"(a)
  7221. : /* No clobbers */);
  7222. return result;
  7223. }
  7224. __extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
  7225. vmvnq_p8 (poly8x16_t a)
  7226. {
  7227. poly8x16_t result;
  7228. __asm__ ("mvn %0.16b,%1.16b"
  7229. : "=w"(result)
  7230. : "w"(a)
  7231. : /* No clobbers */);
  7232. return result;
  7233. }
  7234. __extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
  7235. vmvnq_s8 (int8x16_t a)
  7236. {
  7237. int8x16_t result;
  7238. __asm__ ("mvn %0.16b,%1.16b"
  7239. : "=w"(result)
  7240. : "w"(a)
  7241. : /* No clobbers */);
  7242. return result;
  7243. }
  7244. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  7245. vmvnq_s16 (int16x8_t a)
  7246. {
  7247. int16x8_t result;
  7248. __asm__ ("mvn %0.16b,%1.16b"
  7249. : "=w"(result)
  7250. : "w"(a)
  7251. : /* No clobbers */);
  7252. return result;
  7253. }
  7254. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  7255. vmvnq_s32 (int32x4_t a)
  7256. {
  7257. int32x4_t result;
  7258. __asm__ ("mvn %0.16b,%1.16b"
  7259. : "=w"(result)
  7260. : "w"(a)
  7261. : /* No clobbers */);
  7262. return result;
  7263. }
  7264. __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
  7265. vmvnq_u8 (uint8x16_t a)
  7266. {
  7267. uint8x16_t result;
  7268. __asm__ ("mvn %0.16b,%1.16b"
  7269. : "=w"(result)
  7270. : "w"(a)
  7271. : /* No clobbers */);
  7272. return result;
  7273. }
  7274. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  7275. vmvnq_u16 (uint16x8_t a)
  7276. {
  7277. uint16x8_t result;
  7278. __asm__ ("mvn %0.16b,%1.16b"
  7279. : "=w"(result)
  7280. : "w"(a)
  7281. : /* No clobbers */);
  7282. return result;
  7283. }
  7284. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  7285. vmvnq_u32 (uint32x4_t a)
  7286. {
  7287. uint32x4_t result;
  7288. __asm__ ("mvn %0.16b,%1.16b"
  7289. : "=w"(result)
  7290. : "w"(a)
  7291. : /* No clobbers */);
  7292. return result;
  7293. }
  7294. __extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
  7295. vpadal_s8 (int16x4_t a, int8x8_t b)
  7296. {
  7297. int16x4_t result;
  7298. __asm__ ("sadalp %0.4h,%2.8b"
  7299. : "=w"(result)
  7300. : "0"(a), "w"(b)
  7301. : /* No clobbers */);
  7302. return result;
  7303. }
  7304. __extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
  7305. vpadal_s16 (int32x2_t a, int16x4_t b)
  7306. {
  7307. int32x2_t result;
  7308. __asm__ ("sadalp %0.2s,%2.4h"
  7309. : "=w"(result)
  7310. : "0"(a), "w"(b)
  7311. : /* No clobbers */);
  7312. return result;
  7313. }
  7314. __extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
  7315. vpadal_s32 (int64x1_t a, int32x2_t b)
  7316. {
  7317. int64x1_t result;
  7318. __asm__ ("sadalp %0.1d,%2.2s"
  7319. : "=w"(result)
  7320. : "0"(a), "w"(b)
  7321. : /* No clobbers */);
  7322. return result;
  7323. }
  7324. __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
  7325. vpadal_u8 (uint16x4_t a, uint8x8_t b)
  7326. {
  7327. uint16x4_t result;
  7328. __asm__ ("uadalp %0.4h,%2.8b"
  7329. : "=w"(result)
  7330. : "0"(a), "w"(b)
  7331. : /* No clobbers */);
  7332. return result;
  7333. }
  7334. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  7335. vpadal_u16 (uint32x2_t a, uint16x4_t b)
  7336. {
  7337. uint32x2_t result;
  7338. __asm__ ("uadalp %0.2s,%2.4h"
  7339. : "=w"(result)
  7340. : "0"(a), "w"(b)
  7341. : /* No clobbers */);
  7342. return result;
  7343. }
  7344. __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
  7345. vpadal_u32 (uint64x1_t a, uint32x2_t b)
  7346. {
  7347. uint64x1_t result;
  7348. __asm__ ("uadalp %0.1d,%2.2s"
  7349. : "=w"(result)
  7350. : "0"(a), "w"(b)
  7351. : /* No clobbers */);
  7352. return result;
  7353. }
  7354. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  7355. vpadalq_s8 (int16x8_t a, int8x16_t b)
  7356. {
  7357. int16x8_t result;
  7358. __asm__ ("sadalp %0.8h,%2.16b"
  7359. : "=w"(result)
  7360. : "0"(a), "w"(b)
  7361. : /* No clobbers */);
  7362. return result;
  7363. }
  7364. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  7365. vpadalq_s16 (int32x4_t a, int16x8_t b)
  7366. {
  7367. int32x4_t result;
  7368. __asm__ ("sadalp %0.4s,%2.8h"
  7369. : "=w"(result)
  7370. : "0"(a), "w"(b)
  7371. : /* No clobbers */);
  7372. return result;
  7373. }
  7374. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  7375. vpadalq_s32 (int64x2_t a, int32x4_t b)
  7376. {
  7377. int64x2_t result;
  7378. __asm__ ("sadalp %0.2d,%2.4s"
  7379. : "=w"(result)
  7380. : "0"(a), "w"(b)
  7381. : /* No clobbers */);
  7382. return result;
  7383. }
  7384. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  7385. vpadalq_u8 (uint16x8_t a, uint8x16_t b)
  7386. {
  7387. uint16x8_t result;
  7388. __asm__ ("uadalp %0.8h,%2.16b"
  7389. : "=w"(result)
  7390. : "0"(a), "w"(b)
  7391. : /* No clobbers */);
  7392. return result;
  7393. }
  7394. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  7395. vpadalq_u16 (uint32x4_t a, uint16x8_t b)
  7396. {
  7397. uint32x4_t result;
  7398. __asm__ ("uadalp %0.4s,%2.8h"
  7399. : "=w"(result)
  7400. : "0"(a), "w"(b)
  7401. : /* No clobbers */);
  7402. return result;
  7403. }
  7404. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  7405. vpadalq_u32 (uint64x2_t a, uint32x4_t b)
  7406. {
  7407. uint64x2_t result;
  7408. __asm__ ("uadalp %0.2d,%2.4s"
  7409. : "=w"(result)
  7410. : "0"(a), "w"(b)
  7411. : /* No clobbers */);
  7412. return result;
  7413. }
  7414. __extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
  7415. vpadd_f32 (float32x2_t a, float32x2_t b)
  7416. {
  7417. float32x2_t result;
  7418. __asm__ ("faddp %0.2s,%1.2s,%2.2s"
  7419. : "=w"(result)
  7420. : "w"(a), "w"(b)
  7421. : /* No clobbers */);
  7422. return result;
  7423. }
  7424. __extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
  7425. vpaddl_s8 (int8x8_t a)
  7426. {
  7427. int16x4_t result;
  7428. __asm__ ("saddlp %0.4h,%1.8b"
  7429. : "=w"(result)
  7430. : "w"(a)
  7431. : /* No clobbers */);
  7432. return result;
  7433. }
  7434. __extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
  7435. vpaddl_s16 (int16x4_t a)
  7436. {
  7437. int32x2_t result;
  7438. __asm__ ("saddlp %0.2s,%1.4h"
  7439. : "=w"(result)
  7440. : "w"(a)
  7441. : /* No clobbers */);
  7442. return result;
  7443. }
  7444. __extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
  7445. vpaddl_s32 (int32x2_t a)
  7446. {
  7447. int64x1_t result;
  7448. __asm__ ("saddlp %0.1d,%1.2s"
  7449. : "=w"(result)
  7450. : "w"(a)
  7451. : /* No clobbers */);
  7452. return result;
  7453. }
  7454. __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
  7455. vpaddl_u8 (uint8x8_t a)
  7456. {
  7457. uint16x4_t result;
  7458. __asm__ ("uaddlp %0.4h,%1.8b"
  7459. : "=w"(result)
  7460. : "w"(a)
  7461. : /* No clobbers */);
  7462. return result;
  7463. }
  7464. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  7465. vpaddl_u16 (uint16x4_t a)
  7466. {
  7467. uint32x2_t result;
  7468. __asm__ ("uaddlp %0.2s,%1.4h"
  7469. : "=w"(result)
  7470. : "w"(a)
  7471. : /* No clobbers */);
  7472. return result;
  7473. }
  7474. __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
  7475. vpaddl_u32 (uint32x2_t a)
  7476. {
  7477. uint64x1_t result;
  7478. __asm__ ("uaddlp %0.1d,%1.2s"
  7479. : "=w"(result)
  7480. : "w"(a)
  7481. : /* No clobbers */);
  7482. return result;
  7483. }
  7484. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  7485. vpaddlq_s8 (int8x16_t a)
  7486. {
  7487. int16x8_t result;
  7488. __asm__ ("saddlp %0.8h,%1.16b"
  7489. : "=w"(result)
  7490. : "w"(a)
  7491. : /* No clobbers */);
  7492. return result;
  7493. }
  7494. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  7495. vpaddlq_s16 (int16x8_t a)
  7496. {
  7497. int32x4_t result;
  7498. __asm__ ("saddlp %0.4s,%1.8h"
  7499. : "=w"(result)
  7500. : "w"(a)
  7501. : /* No clobbers */);
  7502. return result;
  7503. }
  7504. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  7505. vpaddlq_s32 (int32x4_t a)
  7506. {
  7507. int64x2_t result;
  7508. __asm__ ("saddlp %0.2d,%1.4s"
  7509. : "=w"(result)
  7510. : "w"(a)
  7511. : /* No clobbers */);
  7512. return result;
  7513. }
  7514. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  7515. vpaddlq_u8 (uint8x16_t a)
  7516. {
  7517. uint16x8_t result;
  7518. __asm__ ("uaddlp %0.8h,%1.16b"
  7519. : "=w"(result)
  7520. : "w"(a)
  7521. : /* No clobbers */);
  7522. return result;
  7523. }
  7524. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  7525. vpaddlq_u16 (uint16x8_t a)
  7526. {
  7527. uint32x4_t result;
  7528. __asm__ ("uaddlp %0.4s,%1.8h"
  7529. : "=w"(result)
  7530. : "w"(a)
  7531. : /* No clobbers */);
  7532. return result;
  7533. }
  7534. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  7535. vpaddlq_u32 (uint32x4_t a)
  7536. {
  7537. uint64x2_t result;
  7538. __asm__ ("uaddlp %0.2d,%1.4s"
  7539. : "=w"(result)
  7540. : "w"(a)
  7541. : /* No clobbers */);
  7542. return result;
  7543. }
  7544. __extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
  7545. vpaddq_f32 (float32x4_t a, float32x4_t b)
  7546. {
  7547. float32x4_t result;
  7548. __asm__ ("faddp %0.4s,%1.4s,%2.4s"
  7549. : "=w"(result)
  7550. : "w"(a), "w"(b)
  7551. : /* No clobbers */);
  7552. return result;
  7553. }
  7554. __extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
  7555. vpaddq_f64 (float64x2_t a, float64x2_t b)
  7556. {
  7557. float64x2_t result;
  7558. __asm__ ("faddp %0.2d,%1.2d,%2.2d"
  7559. : "=w"(result)
  7560. : "w"(a), "w"(b)
  7561. : /* No clobbers */);
  7562. return result;
  7563. }
  7564. __extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
  7565. vpaddq_s8 (int8x16_t a, int8x16_t b)
  7566. {
  7567. int8x16_t result;
  7568. __asm__ ("addp %0.16b,%1.16b,%2.16b"
  7569. : "=w"(result)
  7570. : "w"(a), "w"(b)
  7571. : /* No clobbers */);
  7572. return result;
  7573. }
  7574. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  7575. vpaddq_s16 (int16x8_t a, int16x8_t b)
  7576. {
  7577. int16x8_t result;
  7578. __asm__ ("addp %0.8h,%1.8h,%2.8h"
  7579. : "=w"(result)
  7580. : "w"(a), "w"(b)
  7581. : /* No clobbers */);
  7582. return result;
  7583. }
  7584. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  7585. vpaddq_s32 (int32x4_t a, int32x4_t b)
  7586. {
  7587. int32x4_t result;
  7588. __asm__ ("addp %0.4s,%1.4s,%2.4s"
  7589. : "=w"(result)
  7590. : "w"(a), "w"(b)
  7591. : /* No clobbers */);
  7592. return result;
  7593. }
  7594. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  7595. vpaddq_s64 (int64x2_t a, int64x2_t b)
  7596. {
  7597. int64x2_t result;
  7598. __asm__ ("addp %0.2d,%1.2d,%2.2d"
  7599. : "=w"(result)
  7600. : "w"(a), "w"(b)
  7601. : /* No clobbers */);
  7602. return result;
  7603. }
  7604. __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
  7605. vpaddq_u8 (uint8x16_t a, uint8x16_t b)
  7606. {
  7607. uint8x16_t result;
  7608. __asm__ ("addp %0.16b,%1.16b,%2.16b"
  7609. : "=w"(result)
  7610. : "w"(a), "w"(b)
  7611. : /* No clobbers */);
  7612. return result;
  7613. }
  7614. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  7615. vpaddq_u16 (uint16x8_t a, uint16x8_t b)
  7616. {
  7617. uint16x8_t result;
  7618. __asm__ ("addp %0.8h,%1.8h,%2.8h"
  7619. : "=w"(result)
  7620. : "w"(a), "w"(b)
  7621. : /* No clobbers */);
  7622. return result;
  7623. }
  7624. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  7625. vpaddq_u32 (uint32x4_t a, uint32x4_t b)
  7626. {
  7627. uint32x4_t result;
  7628. __asm__ ("addp %0.4s,%1.4s,%2.4s"
  7629. : "=w"(result)
  7630. : "w"(a), "w"(b)
  7631. : /* No clobbers */);
  7632. return result;
  7633. }
  7634. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  7635. vpaddq_u64 (uint64x2_t a, uint64x2_t b)
  7636. {
  7637. uint64x2_t result;
  7638. __asm__ ("addp %0.2d,%1.2d,%2.2d"
  7639. : "=w"(result)
  7640. : "w"(a), "w"(b)
  7641. : /* No clobbers */);
  7642. return result;
  7643. }
  7644. __extension__ static __inline float32_t __attribute__ ((__always_inline__))
  7645. vpadds_f32 (float32x2_t a)
  7646. {
  7647. float32_t result;
  7648. __asm__ ("faddp %s0,%1.2s"
  7649. : "=w"(result)
  7650. : "w"(a)
  7651. : /* No clobbers */);
  7652. return result;
  7653. }
  7654. __extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
  7655. vqdmulh_n_s16 (int16x4_t a, int16_t b)
  7656. {
  7657. int16x4_t result;
  7658. __asm__ ("sqdmulh %0.4h,%1.4h,%2.h[0]"
  7659. : "=w"(result)
  7660. : "w"(a), "x"(b)
  7661. : /* No clobbers */);
  7662. return result;
  7663. }
  7664. __extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
  7665. vqdmulh_n_s32 (int32x2_t a, int32_t b)
  7666. {
  7667. int32x2_t result;
  7668. __asm__ ("sqdmulh %0.2s,%1.2s,%2.s[0]"
  7669. : "=w"(result)
  7670. : "w"(a), "w"(b)
  7671. : /* No clobbers */);
  7672. return result;
  7673. }
  7674. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  7675. vqdmulhq_n_s16 (int16x8_t a, int16_t b)
  7676. {
  7677. int16x8_t result;
  7678. __asm__ ("sqdmulh %0.8h,%1.8h,%2.h[0]"
  7679. : "=w"(result)
  7680. : "w"(a), "x"(b)
  7681. : /* No clobbers */);
  7682. return result;
  7683. }
  7684. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  7685. vqdmulhq_n_s32 (int32x4_t a, int32_t b)
  7686. {
  7687. int32x4_t result;
  7688. __asm__ ("sqdmulh %0.4s,%1.4s,%2.s[0]"
  7689. : "=w"(result)
  7690. : "w"(a), "w"(b)
  7691. : /* No clobbers */);
  7692. return result;
  7693. }
  7694. __extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
  7695. vqmovn_high_s16 (int8x8_t a, int16x8_t b)
  7696. {
  7697. int8x16_t result = vcombine_s8 (a, vcreate_s8 (__AARCH64_UINT64_C (0x0)));
  7698. __asm__ ("sqxtn2 %0.16b, %1.8h"
  7699. : "+w"(result)
  7700. : "w"(b)
  7701. : /* No clobbers */);
  7702. return result;
  7703. }
  7704. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  7705. vqmovn_high_s32 (int16x4_t a, int32x4_t b)
  7706. {
  7707. int16x8_t result = vcombine_s16 (a, vcreate_s16 (__AARCH64_UINT64_C (0x0)));
  7708. __asm__ ("sqxtn2 %0.8h, %1.4s"
  7709. : "+w"(result)
  7710. : "w"(b)
  7711. : /* No clobbers */);
  7712. return result;
  7713. }
  7714. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  7715. vqmovn_high_s64 (int32x2_t a, int64x2_t b)
  7716. {
  7717. int32x4_t result = vcombine_s32 (a, vcreate_s32 (__AARCH64_UINT64_C (0x0)));
  7718. __asm__ ("sqxtn2 %0.4s, %1.2d"
  7719. : "+w"(result)
  7720. : "w"(b)
  7721. : /* No clobbers */);
  7722. return result;
  7723. }
  7724. __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
  7725. vqmovn_high_u16 (uint8x8_t a, uint16x8_t b)
  7726. {
  7727. uint8x16_t result = vcombine_u8 (a, vcreate_u8 (__AARCH64_UINT64_C (0x0)));
  7728. __asm__ ("uqxtn2 %0.16b, %1.8h"
  7729. : "+w"(result)
  7730. : "w"(b)
  7731. : /* No clobbers */);
  7732. return result;
  7733. }
  7734. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  7735. vqmovn_high_u32 (uint16x4_t a, uint32x4_t b)
  7736. {
  7737. uint16x8_t result = vcombine_u16 (a, vcreate_u16 (__AARCH64_UINT64_C (0x0)));
  7738. __asm__ ("uqxtn2 %0.8h, %1.4s"
  7739. : "+w"(result)
  7740. : "w"(b)
  7741. : /* No clobbers */);
  7742. return result;
  7743. }
  7744. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  7745. vqmovn_high_u64 (uint32x2_t a, uint64x2_t b)
  7746. {
  7747. uint32x4_t result = vcombine_u32 (a, vcreate_u32 (__AARCH64_UINT64_C (0x0)));
  7748. __asm__ ("uqxtn2 %0.4s, %1.2d"
  7749. : "+w"(result)
  7750. : "w"(b)
  7751. : /* No clobbers */);
  7752. return result;
  7753. }
  7754. __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
  7755. vqmovun_high_s16 (uint8x8_t a, int16x8_t b)
  7756. {
  7757. uint8x16_t result = vcombine_u8 (a, vcreate_u8 (__AARCH64_UINT64_C (0x0)));
  7758. __asm__ ("sqxtun2 %0.16b, %1.8h"
  7759. : "+w"(result)
  7760. : "w"(b)
  7761. : /* No clobbers */);
  7762. return result;
  7763. }
  7764. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  7765. vqmovun_high_s32 (uint16x4_t a, int32x4_t b)
  7766. {
  7767. uint16x8_t result = vcombine_u16 (a, vcreate_u16 (__AARCH64_UINT64_C (0x0)));
  7768. __asm__ ("sqxtun2 %0.8h, %1.4s"
  7769. : "+w"(result)
  7770. : "w"(b)
  7771. : /* No clobbers */);
  7772. return result;
  7773. }
  7774. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  7775. vqmovun_high_s64 (uint32x2_t a, int64x2_t b)
  7776. {
  7777. uint32x4_t result = vcombine_u32 (a, vcreate_u32 (__AARCH64_UINT64_C (0x0)));
  7778. __asm__ ("sqxtun2 %0.4s, %1.2d"
  7779. : "+w"(result)
  7780. : "w"(b)
  7781. : /* No clobbers */);
  7782. return result;
  7783. }
  7784. __extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
  7785. vqrdmulh_n_s16 (int16x4_t a, int16_t b)
  7786. {
  7787. int16x4_t result;
  7788. __asm__ ("sqrdmulh %0.4h,%1.4h,%2.h[0]"
  7789. : "=w"(result)
  7790. : "w"(a), "x"(b)
  7791. : /* No clobbers */);
  7792. return result;
  7793. }
  7794. __extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
  7795. vqrdmulh_n_s32 (int32x2_t a, int32_t b)
  7796. {
  7797. int32x2_t result;
  7798. __asm__ ("sqrdmulh %0.2s,%1.2s,%2.s[0]"
  7799. : "=w"(result)
  7800. : "w"(a), "w"(b)
  7801. : /* No clobbers */);
  7802. return result;
  7803. }
  7804. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  7805. vqrdmulhq_n_s16 (int16x8_t a, int16_t b)
  7806. {
  7807. int16x8_t result;
  7808. __asm__ ("sqrdmulh %0.8h,%1.8h,%2.h[0]"
  7809. : "=w"(result)
  7810. : "w"(a), "x"(b)
  7811. : /* No clobbers */);
  7812. return result;
  7813. }
  7814. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  7815. vqrdmulhq_n_s32 (int32x4_t a, int32_t b)
  7816. {
  7817. int32x4_t result;
  7818. __asm__ ("sqrdmulh %0.4s,%1.4s,%2.s[0]"
  7819. : "=w"(result)
  7820. : "w"(a), "w"(b)
  7821. : /* No clobbers */);
  7822. return result;
  7823. }
  7824. #define vqrshrn_high_n_s16(a, b, c) \
  7825. __extension__ \
  7826. ({ \
  7827. int16x8_t b_ = (b); \
  7828. int8x8_t a_ = (a); \
  7829. int8x16_t result = vcombine_s8 \
  7830. (a_, vcreate_s8 \
  7831. (__AARCH64_UINT64_C (0x0))); \
  7832. __asm__ ("sqrshrn2 %0.16b, %1.8h, #%2" \
  7833. : "+w"(result) \
  7834. : "w"(b_), "i"(c) \
  7835. : /* No clobbers */); \
  7836. result; \
  7837. })
  7838. #define vqrshrn_high_n_s32(a, b, c) \
  7839. __extension__ \
  7840. ({ \
  7841. int32x4_t b_ = (b); \
  7842. int16x4_t a_ = (a); \
  7843. int16x8_t result = vcombine_s16 \
  7844. (a_, vcreate_s16 \
  7845. (__AARCH64_UINT64_C (0x0))); \
  7846. __asm__ ("sqrshrn2 %0.8h, %1.4s, #%2" \
  7847. : "+w"(result) \
  7848. : "w"(b_), "i"(c) \
  7849. : /* No clobbers */); \
  7850. result; \
  7851. })
  7852. #define vqrshrn_high_n_s64(a, b, c) \
  7853. __extension__ \
  7854. ({ \
  7855. int64x2_t b_ = (b); \
  7856. int32x2_t a_ = (a); \
  7857. int32x4_t result = vcombine_s32 \
  7858. (a_, vcreate_s32 \
  7859. (__AARCH64_UINT64_C (0x0))); \
  7860. __asm__ ("sqrshrn2 %0.4s, %1.2d, #%2" \
  7861. : "+w"(result) \
  7862. : "w"(b_), "i"(c) \
  7863. : /* No clobbers */); \
  7864. result; \
  7865. })
  7866. #define vqrshrn_high_n_u16(a, b, c) \
  7867. __extension__ \
  7868. ({ \
  7869. uint16x8_t b_ = (b); \
  7870. uint8x8_t a_ = (a); \
  7871. uint8x16_t result = vcombine_u8 \
  7872. (a_, vcreate_u8 \
  7873. (__AARCH64_UINT64_C (0x0))); \
  7874. __asm__ ("uqrshrn2 %0.16b, %1.8h, #%2" \
  7875. : "+w"(result) \
  7876. : "w"(b_), "i"(c) \
  7877. : /* No clobbers */); \
  7878. result; \
  7879. })
  7880. #define vqrshrn_high_n_u32(a, b, c) \
  7881. __extension__ \
  7882. ({ \
  7883. uint32x4_t b_ = (b); \
  7884. uint16x4_t a_ = (a); \
  7885. uint16x8_t result = vcombine_u16 \
  7886. (a_, vcreate_u16 \
  7887. (__AARCH64_UINT64_C (0x0))); \
  7888. __asm__ ("uqrshrn2 %0.8h, %1.4s, #%2" \
  7889. : "+w"(result) \
  7890. : "w"(b_), "i"(c) \
  7891. : /* No clobbers */); \
  7892. result; \
  7893. })
  7894. #define vqrshrn_high_n_u64(a, b, c) \
  7895. __extension__ \
  7896. ({ \
  7897. uint64x2_t b_ = (b); \
  7898. uint32x2_t a_ = (a); \
  7899. uint32x4_t result = vcombine_u32 \
  7900. (a_, vcreate_u32 \
  7901. (__AARCH64_UINT64_C (0x0))); \
  7902. __asm__ ("uqrshrn2 %0.4s, %1.2d, #%2" \
  7903. : "+w"(result) \
  7904. : "w"(b_), "i"(c) \
  7905. : /* No clobbers */); \
  7906. result; \
  7907. })
  7908. #define vqrshrun_high_n_s16(a, b, c) \
  7909. __extension__ \
  7910. ({ \
  7911. int16x8_t b_ = (b); \
  7912. uint8x8_t a_ = (a); \
  7913. uint8x16_t result = vcombine_u8 \
  7914. (a_, vcreate_u8 \
  7915. (__AARCH64_UINT64_C (0x0))); \
  7916. __asm__ ("sqrshrun2 %0.16b, %1.8h, #%2" \
  7917. : "+w"(result) \
  7918. : "w"(b_), "i"(c) \
  7919. : /* No clobbers */); \
  7920. result; \
  7921. })
  7922. #define vqrshrun_high_n_s32(a, b, c) \
  7923. __extension__ \
  7924. ({ \
  7925. int32x4_t b_ = (b); \
  7926. uint16x4_t a_ = (a); \
  7927. uint16x8_t result = vcombine_u16 \
  7928. (a_, vcreate_u16 \
  7929. (__AARCH64_UINT64_C (0x0))); \
  7930. __asm__ ("sqrshrun2 %0.8h, %1.4s, #%2" \
  7931. : "+w"(result) \
  7932. : "w"(b_), "i"(c) \
  7933. : /* No clobbers */); \
  7934. result; \
  7935. })
  7936. #define vqrshrun_high_n_s64(a, b, c) \
  7937. __extension__ \
  7938. ({ \
  7939. int64x2_t b_ = (b); \
  7940. uint32x2_t a_ = (a); \
  7941. uint32x4_t result = vcombine_u32 \
  7942. (a_, vcreate_u32 \
  7943. (__AARCH64_UINT64_C (0x0))); \
  7944. __asm__ ("sqrshrun2 %0.4s, %1.2d, #%2" \
  7945. : "+w"(result) \
  7946. : "w"(b_), "i"(c) \
  7947. : /* No clobbers */); \
  7948. result; \
  7949. })
  7950. #define vqshrn_high_n_s16(a, b, c) \
  7951. __extension__ \
  7952. ({ \
  7953. int16x8_t b_ = (b); \
  7954. int8x8_t a_ = (a); \
  7955. int8x16_t result = vcombine_s8 \
  7956. (a_, vcreate_s8 \
  7957. (__AARCH64_UINT64_C (0x0))); \
  7958. __asm__ ("sqshrn2 %0.16b, %1.8h, #%2" \
  7959. : "+w"(result) \
  7960. : "w"(b_), "i"(c) \
  7961. : /* No clobbers */); \
  7962. result; \
  7963. })
  7964. #define vqshrn_high_n_s32(a, b, c) \
  7965. __extension__ \
  7966. ({ \
  7967. int32x4_t b_ = (b); \
  7968. int16x4_t a_ = (a); \
  7969. int16x8_t result = vcombine_s16 \
  7970. (a_, vcreate_s16 \
  7971. (__AARCH64_UINT64_C (0x0))); \
  7972. __asm__ ("sqshrn2 %0.8h, %1.4s, #%2" \
  7973. : "+w"(result) \
  7974. : "w"(b_), "i"(c) \
  7975. : /* No clobbers */); \
  7976. result; \
  7977. })
  7978. #define vqshrn_high_n_s64(a, b, c) \
  7979. __extension__ \
  7980. ({ \
  7981. int64x2_t b_ = (b); \
  7982. int32x2_t a_ = (a); \
  7983. int32x4_t result = vcombine_s32 \
  7984. (a_, vcreate_s32 \
  7985. (__AARCH64_UINT64_C (0x0))); \
  7986. __asm__ ("sqshrn2 %0.4s, %1.2d, #%2" \
  7987. : "+w"(result) \
  7988. : "w"(b_), "i"(c) \
  7989. : /* No clobbers */); \
  7990. result; \
  7991. })
  7992. #define vqshrn_high_n_u16(a, b, c) \
  7993. __extension__ \
  7994. ({ \
  7995. uint16x8_t b_ = (b); \
  7996. uint8x8_t a_ = (a); \
  7997. uint8x16_t result = vcombine_u8 \
  7998. (a_, vcreate_u8 \
  7999. (__AARCH64_UINT64_C (0x0))); \
  8000. __asm__ ("uqshrn2 %0.16b, %1.8h, #%2" \
  8001. : "+w"(result) \
  8002. : "w"(b_), "i"(c) \
  8003. : /* No clobbers */); \
  8004. result; \
  8005. })
  8006. #define vqshrn_high_n_u32(a, b, c) \
  8007. __extension__ \
  8008. ({ \
  8009. uint32x4_t b_ = (b); \
  8010. uint16x4_t a_ = (a); \
  8011. uint16x8_t result = vcombine_u16 \
  8012. (a_, vcreate_u16 \
  8013. (__AARCH64_UINT64_C (0x0))); \
  8014. __asm__ ("uqshrn2 %0.8h, %1.4s, #%2" \
  8015. : "+w"(result) \
  8016. : "w"(b_), "i"(c) \
  8017. : /* No clobbers */); \
  8018. result; \
  8019. })
  8020. #define vqshrn_high_n_u64(a, b, c) \
  8021. __extension__ \
  8022. ({ \
  8023. uint64x2_t b_ = (b); \
  8024. uint32x2_t a_ = (a); \
  8025. uint32x4_t result = vcombine_u32 \
  8026. (a_, vcreate_u32 \
  8027. (__AARCH64_UINT64_C (0x0))); \
  8028. __asm__ ("uqshrn2 %0.4s, %1.2d, #%2" \
  8029. : "+w"(result) \
  8030. : "w"(b_), "i"(c) \
  8031. : /* No clobbers */); \
  8032. result; \
  8033. })
  8034. #define vqshrun_high_n_s16(a, b, c) \
  8035. __extension__ \
  8036. ({ \
  8037. int16x8_t b_ = (b); \
  8038. uint8x8_t a_ = (a); \
  8039. uint8x16_t result = vcombine_u8 \
  8040. (a_, vcreate_u8 \
  8041. (__AARCH64_UINT64_C (0x0))); \
  8042. __asm__ ("sqshrun2 %0.16b, %1.8h, #%2" \
  8043. : "+w"(result) \
  8044. : "w"(b_), "i"(c) \
  8045. : /* No clobbers */); \
  8046. result; \
  8047. })
  8048. #define vqshrun_high_n_s32(a, b, c) \
  8049. __extension__ \
  8050. ({ \
  8051. int32x4_t b_ = (b); \
  8052. uint16x4_t a_ = (a); \
  8053. uint16x8_t result = vcombine_u16 \
  8054. (a_, vcreate_u16 \
  8055. (__AARCH64_UINT64_C (0x0))); \
  8056. __asm__ ("sqshrun2 %0.8h, %1.4s, #%2" \
  8057. : "+w"(result) \
  8058. : "w"(b_), "i"(c) \
  8059. : /* No clobbers */); \
  8060. result; \
  8061. })
  8062. #define vqshrun_high_n_s64(a, b, c) \
  8063. __extension__ \
  8064. ({ \
  8065. int64x2_t b_ = (b); \
  8066. uint32x2_t a_ = (a); \
  8067. uint32x4_t result = vcombine_u32 \
  8068. (a_, vcreate_u32 \
  8069. (__AARCH64_UINT64_C (0x0))); \
  8070. __asm__ ("sqshrun2 %0.4s, %1.2d, #%2" \
  8071. : "+w"(result) \
  8072. : "w"(b_), "i"(c) \
  8073. : /* No clobbers */); \
  8074. result; \
  8075. })
  8076. #define vrshrn_high_n_s16(a, b, c) \
  8077. __extension__ \
  8078. ({ \
  8079. int16x8_t b_ = (b); \
  8080. int8x8_t a_ = (a); \
  8081. int8x16_t result = vcombine_s8 \
  8082. (a_, vcreate_s8 \
  8083. (__AARCH64_UINT64_C (0x0))); \
  8084. __asm__ ("rshrn2 %0.16b,%1.8h,#%2" \
  8085. : "+w"(result) \
  8086. : "w"(b_), "i"(c) \
  8087. : /* No clobbers */); \
  8088. result; \
  8089. })
  8090. #define vrshrn_high_n_s32(a, b, c) \
  8091. __extension__ \
  8092. ({ \
  8093. int32x4_t b_ = (b); \
  8094. int16x4_t a_ = (a); \
  8095. int16x8_t result = vcombine_s16 \
  8096. (a_, vcreate_s16 \
  8097. (__AARCH64_UINT64_C (0x0))); \
  8098. __asm__ ("rshrn2 %0.8h,%1.4s,#%2" \
  8099. : "+w"(result) \
  8100. : "w"(b_), "i"(c) \
  8101. : /* No clobbers */); \
  8102. result; \
  8103. })
  8104. #define vrshrn_high_n_s64(a, b, c) \
  8105. __extension__ \
  8106. ({ \
  8107. int64x2_t b_ = (b); \
  8108. int32x2_t a_ = (a); \
  8109. int32x4_t result = vcombine_s32 \
  8110. (a_, vcreate_s32 \
  8111. (__AARCH64_UINT64_C (0x0))); \
  8112. __asm__ ("rshrn2 %0.4s,%1.2d,#%2" \
  8113. : "+w"(result) \
  8114. : "w"(b_), "i"(c) \
  8115. : /* No clobbers */); \
  8116. result; \
  8117. })
  8118. #define vrshrn_high_n_u16(a, b, c) \
  8119. __extension__ \
  8120. ({ \
  8121. uint16x8_t b_ = (b); \
  8122. uint8x8_t a_ = (a); \
  8123. uint8x16_t result = vcombine_u8 \
  8124. (a_, vcreate_u8 \
  8125. (__AARCH64_UINT64_C (0x0))); \
  8126. __asm__ ("rshrn2 %0.16b,%1.8h,#%2" \
  8127. : "+w"(result) \
  8128. : "w"(b_), "i"(c) \
  8129. : /* No clobbers */); \
  8130. result; \
  8131. })
  8132. #define vrshrn_high_n_u32(a, b, c) \
  8133. __extension__ \
  8134. ({ \
  8135. uint32x4_t b_ = (b); \
  8136. uint16x4_t a_ = (a); \
  8137. uint16x8_t result = vcombine_u16 \
  8138. (a_, vcreate_u16 \
  8139. (__AARCH64_UINT64_C (0x0))); \
  8140. __asm__ ("rshrn2 %0.8h,%1.4s,#%2" \
  8141. : "+w"(result) \
  8142. : "w"(b_), "i"(c) \
  8143. : /* No clobbers */); \
  8144. result; \
  8145. })
  8146. #define vrshrn_high_n_u64(a, b, c) \
  8147. __extension__ \
  8148. ({ \
  8149. uint64x2_t b_ = (b); \
  8150. uint32x2_t a_ = (a); \
  8151. uint32x4_t result = vcombine_u32 \
  8152. (a_, vcreate_u32 \
  8153. (__AARCH64_UINT64_C (0x0))); \
  8154. __asm__ ("rshrn2 %0.4s,%1.2d,#%2" \
  8155. : "+w"(result) \
  8156. : "w"(b_), "i"(c) \
  8157. : /* No clobbers */); \
  8158. result; \
  8159. })
  8160. #define vrshrn_n_s16(a, b) \
  8161. __extension__ \
  8162. ({ \
  8163. int16x8_t a_ = (a); \
  8164. int8x8_t result; \
  8165. __asm__ ("rshrn %0.8b,%1.8h,%2" \
  8166. : "=w"(result) \
  8167. : "w"(a_), "i"(b) \
  8168. : /* No clobbers */); \
  8169. result; \
  8170. })
  8171. #define vrshrn_n_s32(a, b) \
  8172. __extension__ \
  8173. ({ \
  8174. int32x4_t a_ = (a); \
  8175. int16x4_t result; \
  8176. __asm__ ("rshrn %0.4h,%1.4s,%2" \
  8177. : "=w"(result) \
  8178. : "w"(a_), "i"(b) \
  8179. : /* No clobbers */); \
  8180. result; \
  8181. })
  8182. #define vrshrn_n_s64(a, b) \
  8183. __extension__ \
  8184. ({ \
  8185. int64x2_t a_ = (a); \
  8186. int32x2_t result; \
  8187. __asm__ ("rshrn %0.2s,%1.2d,%2" \
  8188. : "=w"(result) \
  8189. : "w"(a_), "i"(b) \
  8190. : /* No clobbers */); \
  8191. result; \
  8192. })
  8193. #define vrshrn_n_u16(a, b) \
  8194. __extension__ \
  8195. ({ \
  8196. uint16x8_t a_ = (a); \
  8197. uint8x8_t result; \
  8198. __asm__ ("rshrn %0.8b,%1.8h,%2" \
  8199. : "=w"(result) \
  8200. : "w"(a_), "i"(b) \
  8201. : /* No clobbers */); \
  8202. result; \
  8203. })
  8204. #define vrshrn_n_u32(a, b) \
  8205. __extension__ \
  8206. ({ \
  8207. uint32x4_t a_ = (a); \
  8208. uint16x4_t result; \
  8209. __asm__ ("rshrn %0.4h,%1.4s,%2" \
  8210. : "=w"(result) \
  8211. : "w"(a_), "i"(b) \
  8212. : /* No clobbers */); \
  8213. result; \
  8214. })
  8215. #define vrshrn_n_u64(a, b) \
  8216. __extension__ \
  8217. ({ \
  8218. uint64x2_t a_ = (a); \
  8219. uint32x2_t result; \
  8220. __asm__ ("rshrn %0.2s,%1.2d,%2" \
  8221. : "=w"(result) \
  8222. : "w"(a_), "i"(b) \
  8223. : /* No clobbers */); \
  8224. result; \
  8225. })
  8226. __extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
  8227. vrsqrte_f32 (float32x2_t a)
  8228. {
  8229. float32x2_t result;
  8230. __asm__ ("frsqrte %0.2s,%1.2s"
  8231. : "=w"(result)
  8232. : "w"(a)
  8233. : /* No clobbers */);
  8234. return result;
  8235. }
  8236. __extension__ static __inline float64x1_t __attribute__ ((__always_inline__))
  8237. vrsqrte_f64 (float64x1_t a)
  8238. {
  8239. float64x1_t result;
  8240. __asm__ ("frsqrte %d0,%d1"
  8241. : "=w"(result)
  8242. : "w"(a)
  8243. : /* No clobbers */);
  8244. return result;
  8245. }
  8246. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  8247. vrsqrte_u32 (uint32x2_t a)
  8248. {
  8249. uint32x2_t result;
  8250. __asm__ ("ursqrte %0.2s,%1.2s"
  8251. : "=w"(result)
  8252. : "w"(a)
  8253. : /* No clobbers */);
  8254. return result;
  8255. }
  8256. __extension__ static __inline float64_t __attribute__ ((__always_inline__))
  8257. vrsqrted_f64 (float64_t a)
  8258. {
  8259. float64_t result;
  8260. __asm__ ("frsqrte %d0,%d1"
  8261. : "=w"(result)
  8262. : "w"(a)
  8263. : /* No clobbers */);
  8264. return result;
  8265. }
  8266. __extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
  8267. vrsqrteq_f32 (float32x4_t a)
  8268. {
  8269. float32x4_t result;
  8270. __asm__ ("frsqrte %0.4s,%1.4s"
  8271. : "=w"(result)
  8272. : "w"(a)
  8273. : /* No clobbers */);
  8274. return result;
  8275. }
  8276. __extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
  8277. vrsqrteq_f64 (float64x2_t a)
  8278. {
  8279. float64x2_t result;
  8280. __asm__ ("frsqrte %0.2d,%1.2d"
  8281. : "=w"(result)
  8282. : "w"(a)
  8283. : /* No clobbers */);
  8284. return result;
  8285. }
  8286. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  8287. vrsqrteq_u32 (uint32x4_t a)
  8288. {
  8289. uint32x4_t result;
  8290. __asm__ ("ursqrte %0.4s,%1.4s"
  8291. : "=w"(result)
  8292. : "w"(a)
  8293. : /* No clobbers */);
  8294. return result;
  8295. }
  8296. __extension__ static __inline float32_t __attribute__ ((__always_inline__))
  8297. vrsqrtes_f32 (float32_t a)
  8298. {
  8299. float32_t result;
  8300. __asm__ ("frsqrte %s0,%s1"
  8301. : "=w"(result)
  8302. : "w"(a)
  8303. : /* No clobbers */);
  8304. return result;
  8305. }
  8306. __extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
  8307. vrsqrts_f32 (float32x2_t a, float32x2_t b)
  8308. {
  8309. float32x2_t result;
  8310. __asm__ ("frsqrts %0.2s,%1.2s,%2.2s"
  8311. : "=w"(result)
  8312. : "w"(a), "w"(b)
  8313. : /* No clobbers */);
  8314. return result;
  8315. }
  8316. __extension__ static __inline float64_t __attribute__ ((__always_inline__))
  8317. vrsqrtsd_f64 (float64_t a, float64_t b)
  8318. {
  8319. float64_t result;
  8320. __asm__ ("frsqrts %d0,%d1,%d2"
  8321. : "=w"(result)
  8322. : "w"(a), "w"(b)
  8323. : /* No clobbers */);
  8324. return result;
  8325. }
  8326. __extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
  8327. vrsqrtsq_f32 (float32x4_t a, float32x4_t b)
  8328. {
  8329. float32x4_t result;
  8330. __asm__ ("frsqrts %0.4s,%1.4s,%2.4s"
  8331. : "=w"(result)
  8332. : "w"(a), "w"(b)
  8333. : /* No clobbers */);
  8334. return result;
  8335. }
  8336. __extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
  8337. vrsqrtsq_f64 (float64x2_t a, float64x2_t b)
  8338. {
  8339. float64x2_t result;
  8340. __asm__ ("frsqrts %0.2d,%1.2d,%2.2d"
  8341. : "=w"(result)
  8342. : "w"(a), "w"(b)
  8343. : /* No clobbers */);
  8344. return result;
  8345. }
  8346. __extension__ static __inline float32_t __attribute__ ((__always_inline__))
  8347. vrsqrtss_f32 (float32_t a, float32_t b)
  8348. {
  8349. float32_t result;
  8350. __asm__ ("frsqrts %s0,%s1,%s2"
  8351. : "=w"(result)
  8352. : "w"(a), "w"(b)
  8353. : /* No clobbers */);
  8354. return result;
  8355. }
  8356. #define vshrn_high_n_s16(a, b, c) \
  8357. __extension__ \
  8358. ({ \
  8359. int16x8_t b_ = (b); \
  8360. int8x8_t a_ = (a); \
  8361. int8x16_t result = vcombine_s8 \
  8362. (a_, vcreate_s8 \
  8363. (__AARCH64_UINT64_C (0x0))); \
  8364. __asm__ ("shrn2 %0.16b,%1.8h,#%2" \
  8365. : "+w"(result) \
  8366. : "w"(b_), "i"(c) \
  8367. : /* No clobbers */); \
  8368. result; \
  8369. })
  8370. #define vshrn_high_n_s32(a, b, c) \
  8371. __extension__ \
  8372. ({ \
  8373. int32x4_t b_ = (b); \
  8374. int16x4_t a_ = (a); \
  8375. int16x8_t result = vcombine_s16 \
  8376. (a_, vcreate_s16 \
  8377. (__AARCH64_UINT64_C (0x0))); \
  8378. __asm__ ("shrn2 %0.8h,%1.4s,#%2" \
  8379. : "+w"(result) \
  8380. : "w"(b_), "i"(c) \
  8381. : /* No clobbers */); \
  8382. result; \
  8383. })
  8384. #define vshrn_high_n_s64(a, b, c) \
  8385. __extension__ \
  8386. ({ \
  8387. int64x2_t b_ = (b); \
  8388. int32x2_t a_ = (a); \
  8389. int32x4_t result = vcombine_s32 \
  8390. (a_, vcreate_s32 \
  8391. (__AARCH64_UINT64_C (0x0))); \
  8392. __asm__ ("shrn2 %0.4s,%1.2d,#%2" \
  8393. : "+w"(result) \
  8394. : "w"(b_), "i"(c) \
  8395. : /* No clobbers */); \
  8396. result; \
  8397. })
  8398. #define vshrn_high_n_u16(a, b, c) \
  8399. __extension__ \
  8400. ({ \
  8401. uint16x8_t b_ = (b); \
  8402. uint8x8_t a_ = (a); \
  8403. uint8x16_t result = vcombine_u8 \
  8404. (a_, vcreate_u8 \
  8405. (__AARCH64_UINT64_C (0x0))); \
  8406. __asm__ ("shrn2 %0.16b,%1.8h,#%2" \
  8407. : "+w"(result) \
  8408. : "w"(b_), "i"(c) \
  8409. : /* No clobbers */); \
  8410. result; \
  8411. })
  8412. #define vshrn_high_n_u32(a, b, c) \
  8413. __extension__ \
  8414. ({ \
  8415. uint32x4_t b_ = (b); \
  8416. uint16x4_t a_ = (a); \
  8417. uint16x8_t result = vcombine_u16 \
  8418. (a_, vcreate_u16 \
  8419. (__AARCH64_UINT64_C (0x0))); \
  8420. __asm__ ("shrn2 %0.8h,%1.4s,#%2" \
  8421. : "+w"(result) \
  8422. : "w"(b_), "i"(c) \
  8423. : /* No clobbers */); \
  8424. result; \
  8425. })
  8426. #define vshrn_high_n_u64(a, b, c) \
  8427. __extension__ \
  8428. ({ \
  8429. uint64x2_t b_ = (b); \
  8430. uint32x2_t a_ = (a); \
  8431. uint32x4_t result = vcombine_u32 \
  8432. (a_, vcreate_u32 \
  8433. (__AARCH64_UINT64_C (0x0))); \
  8434. __asm__ ("shrn2 %0.4s,%1.2d,#%2" \
  8435. : "+w"(result) \
  8436. : "w"(b_), "i"(c) \
  8437. : /* No clobbers */); \
  8438. result; \
  8439. })
  8440. #define vshrn_n_s16(a, b) \
  8441. __extension__ \
  8442. ({ \
  8443. int16x8_t a_ = (a); \
  8444. int8x8_t result; \
  8445. __asm__ ("shrn %0.8b,%1.8h,%2" \
  8446. : "=w"(result) \
  8447. : "w"(a_), "i"(b) \
  8448. : /* No clobbers */); \
  8449. result; \
  8450. })
  8451. #define vshrn_n_s32(a, b) \
  8452. __extension__ \
  8453. ({ \
  8454. int32x4_t a_ = (a); \
  8455. int16x4_t result; \
  8456. __asm__ ("shrn %0.4h,%1.4s,%2" \
  8457. : "=w"(result) \
  8458. : "w"(a_), "i"(b) \
  8459. : /* No clobbers */); \
  8460. result; \
  8461. })
  8462. #define vshrn_n_s64(a, b) \
  8463. __extension__ \
  8464. ({ \
  8465. int64x2_t a_ = (a); \
  8466. int32x2_t result; \
  8467. __asm__ ("shrn %0.2s,%1.2d,%2" \
  8468. : "=w"(result) \
  8469. : "w"(a_), "i"(b) \
  8470. : /* No clobbers */); \
  8471. result; \
  8472. })
  8473. #define vshrn_n_u16(a, b) \
  8474. __extension__ \
  8475. ({ \
  8476. uint16x8_t a_ = (a); \
  8477. uint8x8_t result; \
  8478. __asm__ ("shrn %0.8b,%1.8h,%2" \
  8479. : "=w"(result) \
  8480. : "w"(a_), "i"(b) \
  8481. : /* No clobbers */); \
  8482. result; \
  8483. })
  8484. #define vshrn_n_u32(a, b) \
  8485. __extension__ \
  8486. ({ \
  8487. uint32x4_t a_ = (a); \
  8488. uint16x4_t result; \
  8489. __asm__ ("shrn %0.4h,%1.4s,%2" \
  8490. : "=w"(result) \
  8491. : "w"(a_), "i"(b) \
  8492. : /* No clobbers */); \
  8493. result; \
  8494. })
  8495. #define vshrn_n_u64(a, b) \
  8496. __extension__ \
  8497. ({ \
  8498. uint64x2_t a_ = (a); \
  8499. uint32x2_t result; \
  8500. __asm__ ("shrn %0.2s,%1.2d,%2" \
  8501. : "=w"(result) \
  8502. : "w"(a_), "i"(b) \
  8503. : /* No clobbers */); \
  8504. result; \
  8505. })
  8506. #define vsli_n_p8(a, b, c) \
  8507. __extension__ \
  8508. ({ \
  8509. poly8x8_t b_ = (b); \
  8510. poly8x8_t a_ = (a); \
  8511. poly8x8_t result; \
  8512. __asm__ ("sli %0.8b,%2.8b,%3" \
  8513. : "=w"(result) \
  8514. : "0"(a_), "w"(b_), "i"(c) \
  8515. : /* No clobbers */); \
  8516. result; \
  8517. })
  8518. #define vsli_n_p16(a, b, c) \
  8519. __extension__ \
  8520. ({ \
  8521. poly16x4_t b_ = (b); \
  8522. poly16x4_t a_ = (a); \
  8523. poly16x4_t result; \
  8524. __asm__ ("sli %0.4h,%2.4h,%3" \
  8525. : "=w"(result) \
  8526. : "0"(a_), "w"(b_), "i"(c) \
  8527. : /* No clobbers */); \
  8528. result; \
  8529. })
  8530. #define vsliq_n_p8(a, b, c) \
  8531. __extension__ \
  8532. ({ \
  8533. poly8x16_t b_ = (b); \
  8534. poly8x16_t a_ = (a); \
  8535. poly8x16_t result; \
  8536. __asm__ ("sli %0.16b,%2.16b,%3" \
  8537. : "=w"(result) \
  8538. : "0"(a_), "w"(b_), "i"(c) \
  8539. : /* No clobbers */); \
  8540. result; \
  8541. })
  8542. #define vsliq_n_p16(a, b, c) \
  8543. __extension__ \
  8544. ({ \
  8545. poly16x8_t b_ = (b); \
  8546. poly16x8_t a_ = (a); \
  8547. poly16x8_t result; \
  8548. __asm__ ("sli %0.8h,%2.8h,%3" \
  8549. : "=w"(result) \
  8550. : "0"(a_), "w"(b_), "i"(c) \
  8551. : /* No clobbers */); \
  8552. result; \
  8553. })
  8554. #define vsri_n_p8(a, b, c) \
  8555. __extension__ \
  8556. ({ \
  8557. poly8x8_t b_ = (b); \
  8558. poly8x8_t a_ = (a); \
  8559. poly8x8_t result; \
  8560. __asm__ ("sri %0.8b,%2.8b,%3" \
  8561. : "=w"(result) \
  8562. : "0"(a_), "w"(b_), "i"(c) \
  8563. : /* No clobbers */); \
  8564. result; \
  8565. })
  8566. #define vsri_n_p16(a, b, c) \
  8567. __extension__ \
  8568. ({ \
  8569. poly16x4_t b_ = (b); \
  8570. poly16x4_t a_ = (a); \
  8571. poly16x4_t result; \
  8572. __asm__ ("sri %0.4h,%2.4h,%3" \
  8573. : "=w"(result) \
  8574. : "0"(a_), "w"(b_), "i"(c) \
  8575. : /* No clobbers */); \
  8576. result; \
  8577. })
  8578. #define vsriq_n_p8(a, b, c) \
  8579. __extension__ \
  8580. ({ \
  8581. poly8x16_t b_ = (b); \
  8582. poly8x16_t a_ = (a); \
  8583. poly8x16_t result; \
  8584. __asm__ ("sri %0.16b,%2.16b,%3" \
  8585. : "=w"(result) \
  8586. : "0"(a_), "w"(b_), "i"(c) \
  8587. : /* No clobbers */); \
  8588. result; \
  8589. })
  8590. #define vsriq_n_p16(a, b, c) \
  8591. __extension__ \
  8592. ({ \
  8593. poly16x8_t b_ = (b); \
  8594. poly16x8_t a_ = (a); \
  8595. poly16x8_t result; \
  8596. __asm__ ("sri %0.8h,%2.8h,%3" \
  8597. : "=w"(result) \
  8598. : "0"(a_), "w"(b_), "i"(c) \
  8599. : /* No clobbers */); \
  8600. result; \
  8601. })
  8602. #define vst1_lane_f32(a, b, c) \
  8603. __extension__ \
  8604. ({ \
  8605. float32x2_t b_ = (b); \
  8606. float32_t * a_ = (a); \
  8607. __asm__ ("st1 {%1.s}[%2],[%0]" \
  8608. : \
  8609. : "r"(a_), "w"(b_), "i"(c) \
  8610. : "memory"); \
  8611. })
  8612. #define vst1_lane_f64(a, b, c) \
  8613. __extension__ \
  8614. ({ \
  8615. float64x1_t b_ = (b); \
  8616. float64_t * a_ = (a); \
  8617. __asm__ ("st1 {%1.d}[%2],[%0]" \
  8618. : \
  8619. : "r"(a_), "w"(b_), "i"(c) \
  8620. : "memory"); \
  8621. })
  8622. #define vst1_lane_p8(a, b, c) \
  8623. __extension__ \
  8624. ({ \
  8625. poly8x8_t b_ = (b); \
  8626. poly8_t * a_ = (a); \
  8627. __asm__ ("st1 {%1.b}[%2],[%0]" \
  8628. : \
  8629. : "r"(a_), "w"(b_), "i"(c) \
  8630. : "memory"); \
  8631. })
  8632. #define vst1_lane_p16(a, b, c) \
  8633. __extension__ \
  8634. ({ \
  8635. poly16x4_t b_ = (b); \
  8636. poly16_t * a_ = (a); \
  8637. __asm__ ("st1 {%1.h}[%2],[%0]" \
  8638. : \
  8639. : "r"(a_), "w"(b_), "i"(c) \
  8640. : "memory"); \
  8641. })
  8642. #define vst1_lane_s8(a, b, c) \
  8643. __extension__ \
  8644. ({ \
  8645. int8x8_t b_ = (b); \
  8646. int8_t * a_ = (a); \
  8647. __asm__ ("st1 {%1.b}[%2],[%0]" \
  8648. : \
  8649. : "r"(a_), "w"(b_), "i"(c) \
  8650. : "memory"); \
  8651. })
  8652. #define vst1_lane_s16(a, b, c) \
  8653. __extension__ \
  8654. ({ \
  8655. int16x4_t b_ = (b); \
  8656. int16_t * a_ = (a); \
  8657. __asm__ ("st1 {%1.h}[%2],[%0]" \
  8658. : \
  8659. : "r"(a_), "w"(b_), "i"(c) \
  8660. : "memory"); \
  8661. })
  8662. #define vst1_lane_s32(a, b, c) \
  8663. __extension__ \
  8664. ({ \
  8665. int32x2_t b_ = (b); \
  8666. int32_t * a_ = (a); \
  8667. __asm__ ("st1 {%1.s}[%2],[%0]" \
  8668. : \
  8669. : "r"(a_), "w"(b_), "i"(c) \
  8670. : "memory"); \
  8671. })
  8672. #define vst1_lane_s64(a, b, c) \
  8673. __extension__ \
  8674. ({ \
  8675. int64x1_t b_ = (b); \
  8676. int64_t * a_ = (a); \
  8677. __asm__ ("st1 {%1.d}[%2],[%0]" \
  8678. : \
  8679. : "r"(a_), "w"(b_), "i"(c) \
  8680. : "memory"); \
  8681. })
  8682. #define vst1_lane_u8(a, b, c) \
  8683. __extension__ \
  8684. ({ \
  8685. uint8x8_t b_ = (b); \
  8686. uint8_t * a_ = (a); \
  8687. __asm__ ("st1 {%1.b}[%2],[%0]" \
  8688. : \
  8689. : "r"(a_), "w"(b_), "i"(c) \
  8690. : "memory"); \
  8691. })
  8692. #define vst1_lane_u16(a, b, c) \
  8693. __extension__ \
  8694. ({ \
  8695. uint16x4_t b_ = (b); \
  8696. uint16_t * a_ = (a); \
  8697. __asm__ ("st1 {%1.h}[%2],[%0]" \
  8698. : \
  8699. : "r"(a_), "w"(b_), "i"(c) \
  8700. : "memory"); \
  8701. })
  8702. #define vst1_lane_u32(a, b, c) \
  8703. __extension__ \
  8704. ({ \
  8705. uint32x2_t b_ = (b); \
  8706. uint32_t * a_ = (a); \
  8707. __asm__ ("st1 {%1.s}[%2],[%0]" \
  8708. : \
  8709. : "r"(a_), "w"(b_), "i"(c) \
  8710. : "memory"); \
  8711. })
  8712. #define vst1_lane_u64(a, b, c) \
  8713. __extension__ \
  8714. ({ \
  8715. uint64x1_t b_ = (b); \
  8716. uint64_t * a_ = (a); \
  8717. __asm__ ("st1 {%1.d}[%2],[%0]" \
  8718. : \
  8719. : "r"(a_), "w"(b_), "i"(c) \
  8720. : "memory"); \
  8721. })
  8722. #define vst1q_lane_f32(a, b, c) \
  8723. __extension__ \
  8724. ({ \
  8725. float32x4_t b_ = (b); \
  8726. float32_t * a_ = (a); \
  8727. __asm__ ("st1 {%1.s}[%2],[%0]" \
  8728. : \
  8729. : "r"(a_), "w"(b_), "i"(c) \
  8730. : "memory"); \
  8731. })
  8732. #define vst1q_lane_f64(a, b, c) \
  8733. __extension__ \
  8734. ({ \
  8735. float64x2_t b_ = (b); \
  8736. float64_t * a_ = (a); \
  8737. __asm__ ("st1 {%1.d}[%2],[%0]" \
  8738. : \
  8739. : "r"(a_), "w"(b_), "i"(c) \
  8740. : "memory"); \
  8741. })
  8742. #define vst1q_lane_p8(a, b, c) \
  8743. __extension__ \
  8744. ({ \
  8745. poly8x16_t b_ = (b); \
  8746. poly8_t * a_ = (a); \
  8747. __asm__ ("st1 {%1.b}[%2],[%0]" \
  8748. : \
  8749. : "r"(a_), "w"(b_), "i"(c) \
  8750. : "memory"); \
  8751. })
  8752. #define vst1q_lane_p16(a, b, c) \
  8753. __extension__ \
  8754. ({ \
  8755. poly16x8_t b_ = (b); \
  8756. poly16_t * a_ = (a); \
  8757. __asm__ ("st1 {%1.h}[%2],[%0]" \
  8758. : \
  8759. : "r"(a_), "w"(b_), "i"(c) \
  8760. : "memory"); \
  8761. })
  8762. #define vst1q_lane_s8(a, b, c) \
  8763. __extension__ \
  8764. ({ \
  8765. int8x16_t b_ = (b); \
  8766. int8_t * a_ = (a); \
  8767. __asm__ ("st1 {%1.b}[%2],[%0]" \
  8768. : \
  8769. : "r"(a_), "w"(b_), "i"(c) \
  8770. : "memory"); \
  8771. })
  8772. #define vst1q_lane_s16(a, b, c) \
  8773. __extension__ \
  8774. ({ \
  8775. int16x8_t b_ = (b); \
  8776. int16_t * a_ = (a); \
  8777. __asm__ ("st1 {%1.h}[%2],[%0]" \
  8778. : \
  8779. : "r"(a_), "w"(b_), "i"(c) \
  8780. : "memory"); \
  8781. })
  8782. #define vst1q_lane_s32(a, b, c) \
  8783. __extension__ \
  8784. ({ \
  8785. int32x4_t b_ = (b); \
  8786. int32_t * a_ = (a); \
  8787. __asm__ ("st1 {%1.s}[%2],[%0]" \
  8788. : \
  8789. : "r"(a_), "w"(b_), "i"(c) \
  8790. : "memory"); \
  8791. })
  8792. #define vst1q_lane_s64(a, b, c) \
  8793. __extension__ \
  8794. ({ \
  8795. int64x2_t b_ = (b); \
  8796. int64_t * a_ = (a); \
  8797. __asm__ ("st1 {%1.d}[%2],[%0]" \
  8798. : \
  8799. : "r"(a_), "w"(b_), "i"(c) \
  8800. : "memory"); \
  8801. })
  8802. #define vst1q_lane_u8(a, b, c) \
  8803. __extension__ \
  8804. ({ \
  8805. uint8x16_t b_ = (b); \
  8806. uint8_t * a_ = (a); \
  8807. __asm__ ("st1 {%1.b}[%2],[%0]" \
  8808. : \
  8809. : "r"(a_), "w"(b_), "i"(c) \
  8810. : "memory"); \
  8811. })
  8812. #define vst1q_lane_u16(a, b, c) \
  8813. __extension__ \
  8814. ({ \
  8815. uint16x8_t b_ = (b); \
  8816. uint16_t * a_ = (a); \
  8817. __asm__ ("st1 {%1.h}[%2],[%0]" \
  8818. : \
  8819. : "r"(a_), "w"(b_), "i"(c) \
  8820. : "memory"); \
  8821. })
  8822. #define vst1q_lane_u32(a, b, c) \
  8823. __extension__ \
  8824. ({ \
  8825. uint32x4_t b_ = (b); \
  8826. uint32_t * a_ = (a); \
  8827. __asm__ ("st1 {%1.s}[%2],[%0]" \
  8828. : \
  8829. : "r"(a_), "w"(b_), "i"(c) \
  8830. : "memory"); \
  8831. })
  8832. #define vst1q_lane_u64(a, b, c) \
  8833. __extension__ \
  8834. ({ \
  8835. uint64x2_t b_ = (b); \
  8836. uint64_t * a_ = (a); \
  8837. __asm__ ("st1 {%1.d}[%2],[%0]" \
  8838. : \
  8839. : "r"(a_), "w"(b_), "i"(c) \
  8840. : "memory"); \
  8841. })
  8842. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  8843. vtst_p8 (poly8x8_t a, poly8x8_t b)
  8844. {
  8845. uint8x8_t result;
  8846. __asm__ ("cmtst %0.8b, %1.8b, %2.8b"
  8847. : "=w"(result)
  8848. : "w"(a), "w"(b)
  8849. : /* No clobbers */);
  8850. return result;
  8851. }
  8852. __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
  8853. vtst_p16 (poly16x4_t a, poly16x4_t b)
  8854. {
  8855. uint16x4_t result;
  8856. __asm__ ("cmtst %0.4h, %1.4h, %2.4h"
  8857. : "=w"(result)
  8858. : "w"(a), "w"(b)
  8859. : /* No clobbers */);
  8860. return result;
  8861. }
  8862. __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
  8863. vtstq_p8 (poly8x16_t a, poly8x16_t b)
  8864. {
  8865. uint8x16_t result;
  8866. __asm__ ("cmtst %0.16b, %1.16b, %2.16b"
  8867. : "=w"(result)
  8868. : "w"(a), "w"(b)
  8869. : /* No clobbers */);
  8870. return result;
  8871. }
  8872. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  8873. vtstq_p16 (poly16x8_t a, poly16x8_t b)
  8874. {
  8875. uint16x8_t result;
  8876. __asm__ ("cmtst %0.8h, %1.8h, %2.8h"
  8877. : "=w"(result)
  8878. : "w"(a), "w"(b)
  8879. : /* No clobbers */);
  8880. return result;
  8881. }
  8882. /* End of temporary inline asm implementations. */
  8883. /* Start of temporary inline asm for vldn, vstn and friends. */
  8884. /* Create struct element types for duplicating loads.
  8885. Create 2 element structures of:
  8886. +------+----+----+----+----+
  8887. | | 8 | 16 | 32 | 64 |
  8888. +------+----+----+----+----+
  8889. |int | Y | Y | N | N |
  8890. +------+----+----+----+----+
  8891. |uint | Y | Y | N | N |
  8892. +------+----+----+----+----+
  8893. |float | - | - | N | N |
  8894. +------+----+----+----+----+
  8895. |poly | Y | Y | - | - |
  8896. +------+----+----+----+----+
  8897. Create 3 element structures of:
  8898. +------+----+----+----+----+
  8899. | | 8 | 16 | 32 | 64 |
  8900. +------+----+----+----+----+
  8901. |int | Y | Y | Y | Y |
  8902. +------+----+----+----+----+
  8903. |uint | Y | Y | Y | Y |
  8904. +------+----+----+----+----+
  8905. |float | - | - | Y | Y |
  8906. +------+----+----+----+----+
  8907. |poly | Y | Y | - | - |
  8908. +------+----+----+----+----+
  8909. Create 4 element structures of:
  8910. +------+----+----+----+----+
  8911. | | 8 | 16 | 32 | 64 |
  8912. +------+----+----+----+----+
  8913. |int | Y | N | N | Y |
  8914. +------+----+----+----+----+
  8915. |uint | Y | N | N | Y |
  8916. +------+----+----+----+----+
  8917. |float | - | - | N | Y |
  8918. +------+----+----+----+----+
  8919. |poly | Y | N | - | - |
  8920. +------+----+----+----+----+
  8921. This is required for casting memory reference. */
  8922. #define __STRUCTN(t, sz, nelem) \
  8923. typedef struct t ## sz ## x ## nelem ## _t { \
  8924. t ## sz ## _t val[nelem]; \
  8925. } t ## sz ## x ## nelem ## _t;
  8926. /* 2-element structs. */
  8927. __STRUCTN (int, 8, 2)
  8928. __STRUCTN (int, 16, 2)
  8929. __STRUCTN (uint, 8, 2)
  8930. __STRUCTN (uint, 16, 2)
  8931. __STRUCTN (poly, 8, 2)
  8932. __STRUCTN (poly, 16, 2)
  8933. /* 3-element structs. */
  8934. __STRUCTN (int, 8, 3)
  8935. __STRUCTN (int, 16, 3)
  8936. __STRUCTN (int, 32, 3)
  8937. __STRUCTN (int, 64, 3)
  8938. __STRUCTN (uint, 8, 3)
  8939. __STRUCTN (uint, 16, 3)
  8940. __STRUCTN (uint, 32, 3)
  8941. __STRUCTN (uint, 64, 3)
  8942. __STRUCTN (float, 32, 3)
  8943. __STRUCTN (float, 64, 3)
  8944. __STRUCTN (poly, 8, 3)
  8945. __STRUCTN (poly, 16, 3)
  8946. /* 4-element structs. */
  8947. __STRUCTN (int, 8, 4)
  8948. __STRUCTN (int, 64, 4)
  8949. __STRUCTN (uint, 8, 4)
  8950. __STRUCTN (uint, 64, 4)
  8951. __STRUCTN (poly, 8, 4)
  8952. __STRUCTN (float, 64, 4)
  8953. #undef __STRUCTN
  8954. #define __ST2_LANE_FUNC(intype, largetype, ptrtype, \
  8955. mode, ptr_mode, funcsuffix, signedtype) \
  8956. __extension__ static __inline void \
  8957. __attribute__ ((__always_inline__)) \
  8958. vst2_lane_ ## funcsuffix (ptrtype *__ptr, \
  8959. intype __b, const int __c) \
  8960. { \
  8961. __builtin_aarch64_simd_oi __o; \
  8962. largetype __temp; \
  8963. __temp.val[0] \
  8964. = vcombine_##funcsuffix (__b.val[0], \
  8965. vcreate_##funcsuffix (__AARCH64_UINT64_C (0))); \
  8966. __temp.val[1] \
  8967. = vcombine_##funcsuffix (__b.val[1], \
  8968. vcreate_##funcsuffix (__AARCH64_UINT64_C (0))); \
  8969. __o = __builtin_aarch64_set_qregoi##mode (__o, \
  8970. (signedtype) __temp.val[0], 0); \
  8971. __o = __builtin_aarch64_set_qregoi##mode (__o, \
  8972. (signedtype) __temp.val[1], 1); \
  8973. __builtin_aarch64_st2_lane##mode ((__builtin_aarch64_simd_ ## ptr_mode *) \
  8974. __ptr, __o, __c); \
  8975. }
  8976. __ST2_LANE_FUNC (float32x2x2_t, float32x4x2_t, float32_t, v4sf, sf, f32,
  8977. float32x4_t)
  8978. __ST2_LANE_FUNC (float64x1x2_t, float64x2x2_t, float64_t, v2df, df, f64,
  8979. float64x2_t)
  8980. __ST2_LANE_FUNC (poly8x8x2_t, poly8x16x2_t, poly8_t, v16qi, qi, p8, int8x16_t)
  8981. __ST2_LANE_FUNC (poly16x4x2_t, poly16x8x2_t, poly16_t, v8hi, hi, p16,
  8982. int16x8_t)
  8983. __ST2_LANE_FUNC (int8x8x2_t, int8x16x2_t, int8_t, v16qi, qi, s8, int8x16_t)
  8984. __ST2_LANE_FUNC (int16x4x2_t, int16x8x2_t, int16_t, v8hi, hi, s16, int16x8_t)
  8985. __ST2_LANE_FUNC (int32x2x2_t, int32x4x2_t, int32_t, v4si, si, s32, int32x4_t)
  8986. __ST2_LANE_FUNC (int64x1x2_t, int64x2x2_t, int64_t, v2di, di, s64, int64x2_t)
  8987. __ST2_LANE_FUNC (uint8x8x2_t, uint8x16x2_t, uint8_t, v16qi, qi, u8, int8x16_t)
  8988. __ST2_LANE_FUNC (uint16x4x2_t, uint16x8x2_t, uint16_t, v8hi, hi, u16,
  8989. int16x8_t)
  8990. __ST2_LANE_FUNC (uint32x2x2_t, uint32x4x2_t, uint32_t, v4si, si, u32,
  8991. int32x4_t)
  8992. __ST2_LANE_FUNC (uint64x1x2_t, uint64x2x2_t, uint64_t, v2di, di, u64,
  8993. int64x2_t)
  8994. #undef __ST2_LANE_FUNC
  8995. #define __ST2_LANE_FUNC(intype, ptrtype, mode, ptr_mode, funcsuffix) \
  8996. __extension__ static __inline void \
  8997. __attribute__ ((__always_inline__)) \
  8998. vst2q_lane_ ## funcsuffix (ptrtype *__ptr, \
  8999. intype __b, const int __c) \
  9000. { \
  9001. union { intype __i; \
  9002. __builtin_aarch64_simd_oi __o; } __temp = { __b }; \
  9003. __builtin_aarch64_st2_lane##mode ((__builtin_aarch64_simd_ ## ptr_mode *) \
  9004. __ptr, __temp.__o, __c); \
  9005. }
  9006. __ST2_LANE_FUNC (float32x4x2_t, float32_t, v4sf, sf, f32)
  9007. __ST2_LANE_FUNC (float64x2x2_t, float64_t, v2df, df, f64)
  9008. __ST2_LANE_FUNC (poly8x16x2_t, poly8_t, v16qi, qi, p8)
  9009. __ST2_LANE_FUNC (poly16x8x2_t, poly16_t, v8hi, hi, p16)
  9010. __ST2_LANE_FUNC (int8x16x2_t, int8_t, v16qi, qi, s8)
  9011. __ST2_LANE_FUNC (int16x8x2_t, int16_t, v8hi, hi, s16)
  9012. __ST2_LANE_FUNC (int32x4x2_t, int32_t, v4si, si, s32)
  9013. __ST2_LANE_FUNC (int64x2x2_t, int64_t, v2di, di, s64)
  9014. __ST2_LANE_FUNC (uint8x16x2_t, uint8_t, v16qi, qi, u8)
  9015. __ST2_LANE_FUNC (uint16x8x2_t, uint16_t, v8hi, hi, u16)
  9016. __ST2_LANE_FUNC (uint32x4x2_t, uint32_t, v4si, si, u32)
  9017. __ST2_LANE_FUNC (uint64x2x2_t, uint64_t, v2di, di, u64)
  9018. #define __ST3_LANE_FUNC(intype, largetype, ptrtype, \
  9019. mode, ptr_mode, funcsuffix, signedtype) \
  9020. __extension__ static __inline void \
  9021. __attribute__ ((__always_inline__)) \
  9022. vst3_lane_ ## funcsuffix (ptrtype *__ptr, \
  9023. intype __b, const int __c) \
  9024. { \
  9025. __builtin_aarch64_simd_ci __o; \
  9026. largetype __temp; \
  9027. __temp.val[0] \
  9028. = vcombine_##funcsuffix (__b.val[0], \
  9029. vcreate_##funcsuffix (__AARCH64_UINT64_C (0))); \
  9030. __temp.val[1] \
  9031. = vcombine_##funcsuffix (__b.val[1], \
  9032. vcreate_##funcsuffix (__AARCH64_UINT64_C (0))); \
  9033. __temp.val[2] \
  9034. = vcombine_##funcsuffix (__b.val[2], \
  9035. vcreate_##funcsuffix (__AARCH64_UINT64_C (0))); \
  9036. __o = __builtin_aarch64_set_qregci##mode (__o, \
  9037. (signedtype) __temp.val[0], 0); \
  9038. __o = __builtin_aarch64_set_qregci##mode (__o, \
  9039. (signedtype) __temp.val[1], 1); \
  9040. __o = __builtin_aarch64_set_qregci##mode (__o, \
  9041. (signedtype) __temp.val[2], 2); \
  9042. __builtin_aarch64_st3_lane##mode ((__builtin_aarch64_simd_ ## ptr_mode *) \
  9043. __ptr, __o, __c); \
  9044. }
  9045. __ST3_LANE_FUNC (float32x2x3_t, float32x4x3_t, float32_t, v4sf, sf, f32,
  9046. float32x4_t)
  9047. __ST3_LANE_FUNC (float64x1x3_t, float64x2x3_t, float64_t, v2df, df, f64,
  9048. float64x2_t)
  9049. __ST3_LANE_FUNC (poly8x8x3_t, poly8x16x3_t, poly8_t, v16qi, qi, p8, int8x16_t)
  9050. __ST3_LANE_FUNC (poly16x4x3_t, poly16x8x3_t, poly16_t, v8hi, hi, p16,
  9051. int16x8_t)
  9052. __ST3_LANE_FUNC (int8x8x3_t, int8x16x3_t, int8_t, v16qi, qi, s8, int8x16_t)
  9053. __ST3_LANE_FUNC (int16x4x3_t, int16x8x3_t, int16_t, v8hi, hi, s16, int16x8_t)
  9054. __ST3_LANE_FUNC (int32x2x3_t, int32x4x3_t, int32_t, v4si, si, s32, int32x4_t)
  9055. __ST3_LANE_FUNC (int64x1x3_t, int64x2x3_t, int64_t, v2di, di, s64, int64x2_t)
  9056. __ST3_LANE_FUNC (uint8x8x3_t, uint8x16x3_t, uint8_t, v16qi, qi, u8, int8x16_t)
  9057. __ST3_LANE_FUNC (uint16x4x3_t, uint16x8x3_t, uint16_t, v8hi, hi, u16,
  9058. int16x8_t)
  9059. __ST3_LANE_FUNC (uint32x2x3_t, uint32x4x3_t, uint32_t, v4si, si, u32,
  9060. int32x4_t)
  9061. __ST3_LANE_FUNC (uint64x1x3_t, uint64x2x3_t, uint64_t, v2di, di, u64,
  9062. int64x2_t)
  9063. #undef __ST3_LANE_FUNC
  9064. #define __ST3_LANE_FUNC(intype, ptrtype, mode, ptr_mode, funcsuffix) \
  9065. __extension__ static __inline void \
  9066. __attribute__ ((__always_inline__)) \
  9067. vst3q_lane_ ## funcsuffix (ptrtype *__ptr, \
  9068. intype __b, const int __c) \
  9069. { \
  9070. union { intype __i; \
  9071. __builtin_aarch64_simd_ci __o; } __temp = { __b }; \
  9072. __builtin_aarch64_st3_lane##mode ((__builtin_aarch64_simd_ ## ptr_mode *) \
  9073. __ptr, __temp.__o, __c); \
  9074. }
  9075. __ST3_LANE_FUNC (float32x4x3_t, float32_t, v4sf, sf, f32)
  9076. __ST3_LANE_FUNC (float64x2x3_t, float64_t, v2df, df, f64)
  9077. __ST3_LANE_FUNC (poly8x16x3_t, poly8_t, v16qi, qi, p8)
  9078. __ST3_LANE_FUNC (poly16x8x3_t, poly16_t, v8hi, hi, p16)
  9079. __ST3_LANE_FUNC (int8x16x3_t, int8_t, v16qi, qi, s8)
  9080. __ST3_LANE_FUNC (int16x8x3_t, int16_t, v8hi, hi, s16)
  9081. __ST3_LANE_FUNC (int32x4x3_t, int32_t, v4si, si, s32)
  9082. __ST3_LANE_FUNC (int64x2x3_t, int64_t, v2di, di, s64)
  9083. __ST3_LANE_FUNC (uint8x16x3_t, uint8_t, v16qi, qi, u8)
  9084. __ST3_LANE_FUNC (uint16x8x3_t, uint16_t, v8hi, hi, u16)
  9085. __ST3_LANE_FUNC (uint32x4x3_t, uint32_t, v4si, si, u32)
  9086. __ST3_LANE_FUNC (uint64x2x3_t, uint64_t, v2di, di, u64)
  9087. #define __ST4_LANE_FUNC(intype, largetype, ptrtype, \
  9088. mode, ptr_mode, funcsuffix, signedtype) \
  9089. __extension__ static __inline void \
  9090. __attribute__ ((__always_inline__)) \
  9091. vst4_lane_ ## funcsuffix (ptrtype *__ptr, \
  9092. intype __b, const int __c) \
  9093. { \
  9094. __builtin_aarch64_simd_xi __o; \
  9095. largetype __temp; \
  9096. __temp.val[0] \
  9097. = vcombine_##funcsuffix (__b.val[0], \
  9098. vcreate_##funcsuffix (__AARCH64_UINT64_C (0))); \
  9099. __temp.val[1] \
  9100. = vcombine_##funcsuffix (__b.val[1], \
  9101. vcreate_##funcsuffix (__AARCH64_UINT64_C (0))); \
  9102. __temp.val[2] \
  9103. = vcombine_##funcsuffix (__b.val[2], \
  9104. vcreate_##funcsuffix (__AARCH64_UINT64_C (0))); \
  9105. __temp.val[3] \
  9106. = vcombine_##funcsuffix (__b.val[3], \
  9107. vcreate_##funcsuffix (__AARCH64_UINT64_C (0))); \
  9108. __o = __builtin_aarch64_set_qregxi##mode (__o, \
  9109. (signedtype) __temp.val[0], 0); \
  9110. __o = __builtin_aarch64_set_qregxi##mode (__o, \
  9111. (signedtype) __temp.val[1], 1); \
  9112. __o = __builtin_aarch64_set_qregxi##mode (__o, \
  9113. (signedtype) __temp.val[2], 2); \
  9114. __o = __builtin_aarch64_set_qregxi##mode (__o, \
  9115. (signedtype) __temp.val[3], 3); \
  9116. __builtin_aarch64_st4_lane##mode ((__builtin_aarch64_simd_ ## ptr_mode *) \
  9117. __ptr, __o, __c); \
  9118. }
  9119. __ST4_LANE_FUNC (float32x2x4_t, float32x4x4_t, float32_t, v4sf, sf, f32,
  9120. float32x4_t)
  9121. __ST4_LANE_FUNC (float64x1x4_t, float64x2x4_t, float64_t, v2df, df, f64,
  9122. float64x2_t)
  9123. __ST4_LANE_FUNC (poly8x8x4_t, poly8x16x4_t, poly8_t, v16qi, qi, p8, int8x16_t)
  9124. __ST4_LANE_FUNC (poly16x4x4_t, poly16x8x4_t, poly16_t, v8hi, hi, p16,
  9125. int16x8_t)
  9126. __ST4_LANE_FUNC (int8x8x4_t, int8x16x4_t, int8_t, v16qi, qi, s8, int8x16_t)
  9127. __ST4_LANE_FUNC (int16x4x4_t, int16x8x4_t, int16_t, v8hi, hi, s16, int16x8_t)
  9128. __ST4_LANE_FUNC (int32x2x4_t, int32x4x4_t, int32_t, v4si, si, s32, int32x4_t)
  9129. __ST4_LANE_FUNC (int64x1x4_t, int64x2x4_t, int64_t, v2di, di, s64, int64x2_t)
  9130. __ST4_LANE_FUNC (uint8x8x4_t, uint8x16x4_t, uint8_t, v16qi, qi, u8, int8x16_t)
  9131. __ST4_LANE_FUNC (uint16x4x4_t, uint16x8x4_t, uint16_t, v8hi, hi, u16,
  9132. int16x8_t)
  9133. __ST4_LANE_FUNC (uint32x2x4_t, uint32x4x4_t, uint32_t, v4si, si, u32,
  9134. int32x4_t)
  9135. __ST4_LANE_FUNC (uint64x1x4_t, uint64x2x4_t, uint64_t, v2di, di, u64,
  9136. int64x2_t)
  9137. #undef __ST4_LANE_FUNC
  9138. #define __ST4_LANE_FUNC(intype, ptrtype, mode, ptr_mode, funcsuffix) \
  9139. __extension__ static __inline void \
  9140. __attribute__ ((__always_inline__)) \
  9141. vst4q_lane_ ## funcsuffix (ptrtype *__ptr, \
  9142. intype __b, const int __c) \
  9143. { \
  9144. union { intype __i; \
  9145. __builtin_aarch64_simd_xi __o; } __temp = { __b }; \
  9146. __builtin_aarch64_st4_lane##mode ((__builtin_aarch64_simd_ ## ptr_mode *) \
  9147. __ptr, __temp.__o, __c); \
  9148. }
  9149. __ST4_LANE_FUNC (float32x4x4_t, float32_t, v4sf, sf, f32)
  9150. __ST4_LANE_FUNC (float64x2x4_t, float64_t, v2df, df, f64)
  9151. __ST4_LANE_FUNC (poly8x16x4_t, poly8_t, v16qi, qi, p8)
  9152. __ST4_LANE_FUNC (poly16x8x4_t, poly16_t, v8hi, hi, p16)
  9153. __ST4_LANE_FUNC (int8x16x4_t, int8_t, v16qi, qi, s8)
  9154. __ST4_LANE_FUNC (int16x8x4_t, int16_t, v8hi, hi, s16)
  9155. __ST4_LANE_FUNC (int32x4x4_t, int32_t, v4si, si, s32)
  9156. __ST4_LANE_FUNC (int64x2x4_t, int64_t, v2di, di, s64)
  9157. __ST4_LANE_FUNC (uint8x16x4_t, uint8_t, v16qi, qi, u8)
  9158. __ST4_LANE_FUNC (uint16x8x4_t, uint16_t, v8hi, hi, u16)
  9159. __ST4_LANE_FUNC (uint32x4x4_t, uint32_t, v4si, si, u32)
  9160. __ST4_LANE_FUNC (uint64x2x4_t, uint64_t, v2di, di, u64)
  9161. __extension__ static __inline int64_t __attribute__ ((__always_inline__))
  9162. vaddlv_s32 (int32x2_t a)
  9163. {
  9164. int64_t result;
  9165. __asm__ ("saddlp %0.1d, %1.2s" : "=w"(result) : "w"(a) : );
  9166. return result;
  9167. }
  9168. __extension__ static __inline uint64_t __attribute__ ((__always_inline__))
  9169. vaddlv_u32 (uint32x2_t a)
  9170. {
  9171. uint64_t result;
  9172. __asm__ ("uaddlp %0.1d, %1.2s" : "=w"(result) : "w"(a) : );
  9173. return result;
  9174. }
  9175. __extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
  9176. vqdmulh_laneq_s16 (int16x4_t __a, int16x8_t __b, const int __c)
  9177. {
  9178. return __builtin_aarch64_sqdmulh_laneqv4hi (__a, __b, __c);
  9179. }
  9180. __extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
  9181. vqdmulh_laneq_s32 (int32x2_t __a, int32x4_t __b, const int __c)
  9182. {
  9183. return __builtin_aarch64_sqdmulh_laneqv2si (__a, __b, __c);
  9184. }
  9185. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  9186. vqdmulhq_laneq_s16 (int16x8_t __a, int16x8_t __b, const int __c)
  9187. {
  9188. return __builtin_aarch64_sqdmulh_laneqv8hi (__a, __b, __c);
  9189. }
  9190. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  9191. vqdmulhq_laneq_s32 (int32x4_t __a, int32x4_t __b, const int __c)
  9192. {
  9193. return __builtin_aarch64_sqdmulh_laneqv4si (__a, __b, __c);
  9194. }
  9195. __extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
  9196. vqrdmulh_laneq_s16 (int16x4_t __a, int16x8_t __b, const int __c)
  9197. {
  9198. return __builtin_aarch64_sqrdmulh_laneqv4hi (__a, __b, __c);
  9199. }
  9200. __extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
  9201. vqrdmulh_laneq_s32 (int32x2_t __a, int32x4_t __b, const int __c)
  9202. {
  9203. return __builtin_aarch64_sqrdmulh_laneqv2si (__a, __b, __c);
  9204. }
  9205. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  9206. vqrdmulhq_laneq_s16 (int16x8_t __a, int16x8_t __b, const int __c)
  9207. {
  9208. return __builtin_aarch64_sqrdmulh_laneqv8hi (__a, __b, __c);
  9209. }
  9210. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  9211. vqrdmulhq_laneq_s32 (int32x4_t __a, int32x4_t __b, const int __c)
  9212. {
  9213. return __builtin_aarch64_sqrdmulh_laneqv4si (__a, __b, __c);
  9214. }
  9215. /* Table intrinsics. */
  9216. __extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
  9217. vqtbl1_p8 (poly8x16_t a, uint8x8_t b)
  9218. {
  9219. poly8x8_t result;
  9220. __asm__ ("tbl %0.8b, {%1.16b}, %2.8b"
  9221. : "=w"(result)
  9222. : "w"(a), "w"(b)
  9223. : /* No clobbers */);
  9224. return result;
  9225. }
  9226. __extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
  9227. vqtbl1_s8 (int8x16_t a, uint8x8_t b)
  9228. {
  9229. int8x8_t result;
  9230. __asm__ ("tbl %0.8b, {%1.16b}, %2.8b"
  9231. : "=w"(result)
  9232. : "w"(a), "w"(b)
  9233. : /* No clobbers */);
  9234. return result;
  9235. }
  9236. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  9237. vqtbl1_u8 (uint8x16_t a, uint8x8_t b)
  9238. {
  9239. uint8x8_t result;
  9240. __asm__ ("tbl %0.8b, {%1.16b}, %2.8b"
  9241. : "=w"(result)
  9242. : "w"(a), "w"(b)
  9243. : /* No clobbers */);
  9244. return result;
  9245. }
  9246. __extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
  9247. vqtbl1q_p8 (poly8x16_t a, uint8x16_t b)
  9248. {
  9249. poly8x16_t result;
  9250. __asm__ ("tbl %0.16b, {%1.16b}, %2.16b"
  9251. : "=w"(result)
  9252. : "w"(a), "w"(b)
  9253. : /* No clobbers */);
  9254. return result;
  9255. }
  9256. __extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
  9257. vqtbl1q_s8 (int8x16_t a, uint8x16_t b)
  9258. {
  9259. int8x16_t result;
  9260. __asm__ ("tbl %0.16b, {%1.16b}, %2.16b"
  9261. : "=w"(result)
  9262. : "w"(a), "w"(b)
  9263. : /* No clobbers */);
  9264. return result;
  9265. }
  9266. __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
  9267. vqtbl1q_u8 (uint8x16_t a, uint8x16_t b)
  9268. {
  9269. uint8x16_t result;
  9270. __asm__ ("tbl %0.16b, {%1.16b}, %2.16b"
  9271. : "=w"(result)
  9272. : "w"(a), "w"(b)
  9273. : /* No clobbers */);
  9274. return result;
  9275. }
  9276. __extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
  9277. vqtbl2_s8 (int8x16x2_t tab, uint8x8_t idx)
  9278. {
  9279. int8x8_t result;
  9280. __asm__ ("ld1 {v16.16b, v17.16b}, %1\n\t"
  9281. "tbl %0.8b, {v16.16b, v17.16b}, %2.8b\n\t"
  9282. :"=w"(result)
  9283. :"Q"(tab),"w"(idx)
  9284. :"memory", "v16", "v17");
  9285. return result;
  9286. }
  9287. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  9288. vqtbl2_u8 (uint8x16x2_t tab, uint8x8_t idx)
  9289. {
  9290. uint8x8_t result;
  9291. __asm__ ("ld1 {v16.16b, v17.16b}, %1\n\t"
  9292. "tbl %0.8b, {v16.16b, v17.16b}, %2.8b\n\t"
  9293. :"=w"(result)
  9294. :"Q"(tab),"w"(idx)
  9295. :"memory", "v16", "v17");
  9296. return result;
  9297. }
  9298. __extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
  9299. vqtbl2_p8 (poly8x16x2_t tab, uint8x8_t idx)
  9300. {
  9301. poly8x8_t result;
  9302. __asm__ ("ld1 {v16.16b, v17.16b}, %1\n\t"
  9303. "tbl %0.8b, {v16.16b, v17.16b}, %2.8b\n\t"
  9304. :"=w"(result)
  9305. :"Q"(tab),"w"(idx)
  9306. :"memory", "v16", "v17");
  9307. return result;
  9308. }
  9309. __extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
  9310. vqtbl2q_s8 (int8x16x2_t tab, uint8x16_t idx)
  9311. {
  9312. int8x16_t result;
  9313. __asm__ ("ld1 {v16.16b, v17.16b}, %1\n\t"
  9314. "tbl %0.16b, {v16.16b, v17.16b}, %2.16b\n\t"
  9315. :"=w"(result)
  9316. :"Q"(tab),"w"(idx)
  9317. :"memory", "v16", "v17");
  9318. return result;
  9319. }
  9320. __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
  9321. vqtbl2q_u8 (uint8x16x2_t tab, uint8x16_t idx)
  9322. {
  9323. uint8x16_t result;
  9324. __asm__ ("ld1 {v16.16b, v17.16b}, %1\n\t"
  9325. "tbl %0.16b, {v16.16b, v17.16b}, %2.16b\n\t"
  9326. :"=w"(result)
  9327. :"Q"(tab),"w"(idx)
  9328. :"memory", "v16", "v17");
  9329. return result;
  9330. }
  9331. __extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
  9332. vqtbl2q_p8 (poly8x16x2_t tab, uint8x16_t idx)
  9333. {
  9334. poly8x16_t result;
  9335. __asm__ ("ld1 {v16.16b, v17.16b}, %1\n\t"
  9336. "tbl %0.16b, {v16.16b, v17.16b}, %2.16b\n\t"
  9337. :"=w"(result)
  9338. :"Q"(tab),"w"(idx)
  9339. :"memory", "v16", "v17");
  9340. return result;
  9341. }
  9342. __extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
  9343. vqtbl3_s8 (int8x16x3_t tab, uint8x8_t idx)
  9344. {
  9345. int8x8_t result;
  9346. __asm__ ("ld1 {v16.16b - v18.16b}, %1\n\t"
  9347. "tbl %0.8b, {v16.16b - v18.16b}, %2.8b\n\t"
  9348. :"=w"(result)
  9349. :"Q"(tab),"w"(idx)
  9350. :"memory", "v16", "v17", "v18");
  9351. return result;
  9352. }
  9353. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  9354. vqtbl3_u8 (uint8x16x3_t tab, uint8x8_t idx)
  9355. {
  9356. uint8x8_t result;
  9357. __asm__ ("ld1 {v16.16b - v18.16b}, %1\n\t"
  9358. "tbl %0.8b, {v16.16b - v18.16b}, %2.8b\n\t"
  9359. :"=w"(result)
  9360. :"Q"(tab),"w"(idx)
  9361. :"memory", "v16", "v17", "v18");
  9362. return result;
  9363. }
  9364. __extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
  9365. vqtbl3_p8 (poly8x16x3_t tab, uint8x8_t idx)
  9366. {
  9367. poly8x8_t result;
  9368. __asm__ ("ld1 {v16.16b - v18.16b}, %1\n\t"
  9369. "tbl %0.8b, {v16.16b - v18.16b}, %2.8b\n\t"
  9370. :"=w"(result)
  9371. :"Q"(tab),"w"(idx)
  9372. :"memory", "v16", "v17", "v18");
  9373. return result;
  9374. }
  9375. __extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
  9376. vqtbl3q_s8 (int8x16x3_t tab, uint8x16_t idx)
  9377. {
  9378. int8x16_t result;
  9379. __asm__ ("ld1 {v16.16b - v18.16b}, %1\n\t"
  9380. "tbl %0.16b, {v16.16b - v18.16b}, %2.16b\n\t"
  9381. :"=w"(result)
  9382. :"Q"(tab),"w"(idx)
  9383. :"memory", "v16", "v17", "v18");
  9384. return result;
  9385. }
  9386. __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
  9387. vqtbl3q_u8 (uint8x16x3_t tab, uint8x16_t idx)
  9388. {
  9389. uint8x16_t result;
  9390. __asm__ ("ld1 {v16.16b - v18.16b}, %1\n\t"
  9391. "tbl %0.16b, {v16.16b - v18.16b}, %2.16b\n\t"
  9392. :"=w"(result)
  9393. :"Q"(tab),"w"(idx)
  9394. :"memory", "v16", "v17", "v18");
  9395. return result;
  9396. }
  9397. __extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
  9398. vqtbl3q_p8 (poly8x16x3_t tab, uint8x16_t idx)
  9399. {
  9400. poly8x16_t result;
  9401. __asm__ ("ld1 {v16.16b - v18.16b}, %1\n\t"
  9402. "tbl %0.16b, {v16.16b - v18.16b}, %2.16b\n\t"
  9403. :"=w"(result)
  9404. :"Q"(tab),"w"(idx)
  9405. :"memory", "v16", "v17", "v18");
  9406. return result;
  9407. }
  9408. __extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
  9409. vqtbl4_s8 (int8x16x4_t tab, uint8x8_t idx)
  9410. {
  9411. int8x8_t result;
  9412. __asm__ ("ld1 {v16.16b - v19.16b}, %1\n\t"
  9413. "tbl %0.8b, {v16.16b - v19.16b}, %2.8b\n\t"
  9414. :"=w"(result)
  9415. :"Q"(tab),"w"(idx)
  9416. :"memory", "v16", "v17", "v18", "v19");
  9417. return result;
  9418. }
  9419. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  9420. vqtbl4_u8 (uint8x16x4_t tab, uint8x8_t idx)
  9421. {
  9422. uint8x8_t result;
  9423. __asm__ ("ld1 {v16.16b - v19.16b}, %1\n\t"
  9424. "tbl %0.8b, {v16.16b - v19.16b}, %2.8b\n\t"
  9425. :"=w"(result)
  9426. :"Q"(tab),"w"(idx)
  9427. :"memory", "v16", "v17", "v18", "v19");
  9428. return result;
  9429. }
  9430. __extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
  9431. vqtbl4_p8 (poly8x16x4_t tab, uint8x8_t idx)
  9432. {
  9433. poly8x8_t result;
  9434. __asm__ ("ld1 {v16.16b - v19.16b}, %1\n\t"
  9435. "tbl %0.8b, {v16.16b - v19.16b}, %2.8b\n\t"
  9436. :"=w"(result)
  9437. :"Q"(tab),"w"(idx)
  9438. :"memory", "v16", "v17", "v18", "v19");
  9439. return result;
  9440. }
  9441. __extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
  9442. vqtbl4q_s8 (int8x16x4_t tab, uint8x16_t idx)
  9443. {
  9444. int8x16_t result;
  9445. __asm__ ("ld1 {v16.16b - v19.16b}, %1\n\t"
  9446. "tbl %0.16b, {v16.16b - v19.16b}, %2.16b\n\t"
  9447. :"=w"(result)
  9448. :"Q"(tab),"w"(idx)
  9449. :"memory", "v16", "v17", "v18", "v19");
  9450. return result;
  9451. }
  9452. __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
  9453. vqtbl4q_u8 (uint8x16x4_t tab, uint8x16_t idx)
  9454. {
  9455. uint8x16_t result;
  9456. __asm__ ("ld1 {v16.16b - v19.16b}, %1\n\t"
  9457. "tbl %0.16b, {v16.16b - v19.16b}, %2.16b\n\t"
  9458. :"=w"(result)
  9459. :"Q"(tab),"w"(idx)
  9460. :"memory", "v16", "v17", "v18", "v19");
  9461. return result;
  9462. }
  9463. __extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
  9464. vqtbl4q_p8 (poly8x16x4_t tab, uint8x16_t idx)
  9465. {
  9466. poly8x16_t result;
  9467. __asm__ ("ld1 {v16.16b - v19.16b}, %1\n\t"
  9468. "tbl %0.16b, {v16.16b - v19.16b}, %2.16b\n\t"
  9469. :"=w"(result)
  9470. :"Q"(tab),"w"(idx)
  9471. :"memory", "v16", "v17", "v18", "v19");
  9472. return result;
  9473. }
  9474. __extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
  9475. vqtbx1_s8 (int8x8_t r, int8x16_t tab, uint8x8_t idx)
  9476. {
  9477. int8x8_t result = r;
  9478. __asm__ ("tbx %0.8b,{%1.16b},%2.8b"
  9479. : "+w"(result)
  9480. : "w"(tab), "w"(idx)
  9481. : /* No clobbers */);
  9482. return result;
  9483. }
  9484. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  9485. vqtbx1_u8 (uint8x8_t r, uint8x16_t tab, uint8x8_t idx)
  9486. {
  9487. uint8x8_t result = r;
  9488. __asm__ ("tbx %0.8b,{%1.16b},%2.8b"
  9489. : "+w"(result)
  9490. : "w"(tab), "w"(idx)
  9491. : /* No clobbers */);
  9492. return result;
  9493. }
  9494. __extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
  9495. vqtbx1_p8 (poly8x8_t r, poly8x16_t tab, uint8x8_t idx)
  9496. {
  9497. poly8x8_t result = r;
  9498. __asm__ ("tbx %0.8b,{%1.16b},%2.8b"
  9499. : "+w"(result)
  9500. : "w"(tab), "w"(idx)
  9501. : /* No clobbers */);
  9502. return result;
  9503. }
  9504. __extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
  9505. vqtbx1q_s8 (int8x16_t r, int8x16_t tab, uint8x16_t idx)
  9506. {
  9507. int8x16_t result = r;
  9508. __asm__ ("tbx %0.16b,{%1.16b},%2.16b"
  9509. : "+w"(result)
  9510. : "w"(tab), "w"(idx)
  9511. : /* No clobbers */);
  9512. return result;
  9513. }
  9514. __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
  9515. vqtbx1q_u8 (uint8x16_t r, uint8x16_t tab, uint8x16_t idx)
  9516. {
  9517. uint8x16_t result = r;
  9518. __asm__ ("tbx %0.16b,{%1.16b},%2.16b"
  9519. : "+w"(result)
  9520. : "w"(tab), "w"(idx)
  9521. : /* No clobbers */);
  9522. return result;
  9523. }
  9524. __extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
  9525. vqtbx1q_p8 (poly8x16_t r, poly8x16_t tab, uint8x16_t idx)
  9526. {
  9527. poly8x16_t result = r;
  9528. __asm__ ("tbx %0.16b,{%1.16b},%2.16b"
  9529. : "+w"(result)
  9530. : "w"(tab), "w"(idx)
  9531. : /* No clobbers */);
  9532. return result;
  9533. }
  9534. __extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
  9535. vqtbx2_s8 (int8x8_t r, int8x16x2_t tab, uint8x8_t idx)
  9536. {
  9537. int8x8_t result = r;
  9538. __asm__ ("ld1 {v16.16b, v17.16b}, %1\n\t"
  9539. "tbx %0.8b, {v16.16b, v17.16b}, %2.8b\n\t"
  9540. :"+w"(result)
  9541. :"Q"(tab),"w"(idx)
  9542. :"memory", "v16", "v17");
  9543. return result;
  9544. }
  9545. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  9546. vqtbx2_u8 (uint8x8_t r, uint8x16x2_t tab, uint8x8_t idx)
  9547. {
  9548. uint8x8_t result = r;
  9549. __asm__ ("ld1 {v16.16b, v17.16b}, %1\n\t"
  9550. "tbx %0.8b, {v16.16b, v17.16b}, %2.8b\n\t"
  9551. :"+w"(result)
  9552. :"Q"(tab),"w"(idx)
  9553. :"memory", "v16", "v17");
  9554. return result;
  9555. }
  9556. __extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
  9557. vqtbx2_p8 (poly8x8_t r, poly8x16x2_t tab, uint8x8_t idx)
  9558. {
  9559. poly8x8_t result = r;
  9560. __asm__ ("ld1 {v16.16b, v17.16b}, %1\n\t"
  9561. "tbx %0.8b, {v16.16b, v17.16b}, %2.8b\n\t"
  9562. :"+w"(result)
  9563. :"Q"(tab),"w"(idx)
  9564. :"memory", "v16", "v17");
  9565. return result;
  9566. }
  9567. __extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
  9568. vqtbx2q_s8 (int8x16_t r, int8x16x2_t tab, uint8x16_t idx)
  9569. {
  9570. int8x16_t result = r;
  9571. __asm__ ("ld1 {v16.16b, v17.16b}, %1\n\t"
  9572. "tbx %0.16b, {v16.16b, v17.16b}, %2.16b\n\t"
  9573. :"+w"(result)
  9574. :"Q"(tab),"w"(idx)
  9575. :"memory", "v16", "v17");
  9576. return result;
  9577. }
  9578. __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
  9579. vqtbx2q_u8 (uint8x16_t r, uint8x16x2_t tab, uint8x16_t idx)
  9580. {
  9581. uint8x16_t result = r;
  9582. __asm__ ("ld1 {v16.16b, v17.16b}, %1\n\t"
  9583. "tbx %0.16b, {v16.16b, v17.16b}, %2.16b\n\t"
  9584. :"+w"(result)
  9585. :"Q"(tab),"w"(idx)
  9586. :"memory", "v16", "v17");
  9587. return result;
  9588. }
  9589. __extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
  9590. vqtbx2q_p8 (poly8x16_t r, poly8x16x2_t tab, uint8x16_t idx)
  9591. {
  9592. poly8x16_t result = r;
  9593. __asm__ ("ld1 {v16.16b, v17.16b}, %1\n\t"
  9594. "tbx %0.16b, {v16.16b, v17.16b}, %2.16b\n\t"
  9595. :"+w"(result)
  9596. :"Q"(tab),"w"(idx)
  9597. :"memory", "v16", "v17");
  9598. return result;
  9599. }
  9600. __extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
  9601. vqtbx3_s8 (int8x8_t r, int8x16x3_t tab, uint8x8_t idx)
  9602. {
  9603. int8x8_t result = r;
  9604. __asm__ ("ld1 {v16.16b - v18.16b}, %1\n\t"
  9605. "tbx %0.8b, {v16.16b - v18.16b}, %2.8b\n\t"
  9606. :"+w"(result)
  9607. :"Q"(tab),"w"(idx)
  9608. :"memory", "v16", "v17", "v18");
  9609. return result;
  9610. }
  9611. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  9612. vqtbx3_u8 (uint8x8_t r, uint8x16x3_t tab, uint8x8_t idx)
  9613. {
  9614. uint8x8_t result = r;
  9615. __asm__ ("ld1 {v16.16b - v18.16b}, %1\n\t"
  9616. "tbx %0.8b, {v16.16b - v18.16b}, %2.8b\n\t"
  9617. :"+w"(result)
  9618. :"Q"(tab),"w"(idx)
  9619. :"memory", "v16", "v17", "v18");
  9620. return result;
  9621. }
  9622. __extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
  9623. vqtbx3_p8 (poly8x8_t r, poly8x16x3_t tab, uint8x8_t idx)
  9624. {
  9625. poly8x8_t result = r;
  9626. __asm__ ("ld1 {v16.16b - v18.16b}, %1\n\t"
  9627. "tbx %0.8b, {v16.16b - v18.16b}, %2.8b\n\t"
  9628. :"+w"(result)
  9629. :"Q"(tab),"w"(idx)
  9630. :"memory", "v16", "v17", "v18");
  9631. return result;
  9632. }
  9633. __extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
  9634. vqtbx3q_s8 (int8x16_t r, int8x16x3_t tab, uint8x16_t idx)
  9635. {
  9636. int8x16_t result = r;
  9637. __asm__ ("ld1 {v16.16b - v18.16b}, %1\n\t"
  9638. "tbx %0.16b, {v16.16b - v18.16b}, %2.16b\n\t"
  9639. :"+w"(result)
  9640. :"Q"(tab),"w"(idx)
  9641. :"memory", "v16", "v17", "v18");
  9642. return result;
  9643. }
  9644. __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
  9645. vqtbx3q_u8 (uint8x16_t r, uint8x16x3_t tab, uint8x16_t idx)
  9646. {
  9647. uint8x16_t result = r;
  9648. __asm__ ("ld1 {v16.16b - v18.16b}, %1\n\t"
  9649. "tbx %0.16b, {v16.16b - v18.16b}, %2.16b\n\t"
  9650. :"+w"(result)
  9651. :"Q"(tab),"w"(idx)
  9652. :"memory", "v16", "v17", "v18");
  9653. return result;
  9654. }
  9655. __extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
  9656. vqtbx3q_p8 (poly8x16_t r, poly8x16x3_t tab, uint8x16_t idx)
  9657. {
  9658. poly8x16_t result = r;
  9659. __asm__ ("ld1 {v16.16b - v18.16b}, %1\n\t"
  9660. "tbx %0.16b, {v16.16b - v18.16b}, %2.16b\n\t"
  9661. :"+w"(result)
  9662. :"Q"(tab),"w"(idx)
  9663. :"memory", "v16", "v17", "v18");
  9664. return result;
  9665. }
  9666. __extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
  9667. vqtbx4_s8 (int8x8_t r, int8x16x4_t tab, uint8x8_t idx)
  9668. {
  9669. int8x8_t result = r;
  9670. __asm__ ("ld1 {v16.16b - v19.16b}, %1\n\t"
  9671. "tbx %0.8b, {v16.16b - v19.16b}, %2.8b\n\t"
  9672. :"+w"(result)
  9673. :"Q"(tab),"w"(idx)
  9674. :"memory", "v16", "v17", "v18", "v19");
  9675. return result;
  9676. }
  9677. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  9678. vqtbx4_u8 (uint8x8_t r, uint8x16x4_t tab, uint8x8_t idx)
  9679. {
  9680. uint8x8_t result = r;
  9681. __asm__ ("ld1 {v16.16b - v19.16b}, %1\n\t"
  9682. "tbx %0.8b, {v16.16b - v19.16b}, %2.8b\n\t"
  9683. :"+w"(result)
  9684. :"Q"(tab),"w"(idx)
  9685. :"memory", "v16", "v17", "v18", "v19");
  9686. return result;
  9687. }
  9688. __extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
  9689. vqtbx4_p8 (poly8x8_t r, poly8x16x4_t tab, uint8x8_t idx)
  9690. {
  9691. poly8x8_t result = r;
  9692. __asm__ ("ld1 {v16.16b - v19.16b}, %1\n\t"
  9693. "tbx %0.8b, {v16.16b - v19.16b}, %2.8b\n\t"
  9694. :"+w"(result)
  9695. :"Q"(tab),"w"(idx)
  9696. :"memory", "v16", "v17", "v18", "v19");
  9697. return result;
  9698. }
  9699. __extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
  9700. vqtbx4q_s8 (int8x16_t r, int8x16x4_t tab, uint8x16_t idx)
  9701. {
  9702. int8x16_t result = r;
  9703. __asm__ ("ld1 {v16.16b - v19.16b}, %1\n\t"
  9704. "tbx %0.16b, {v16.16b - v19.16b}, %2.16b\n\t"
  9705. :"+w"(result)
  9706. :"Q"(tab),"w"(idx)
  9707. :"memory", "v16", "v17", "v18", "v19");
  9708. return result;
  9709. }
  9710. __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
  9711. vqtbx4q_u8 (uint8x16_t r, uint8x16x4_t tab, uint8x16_t idx)
  9712. {
  9713. uint8x16_t result = r;
  9714. __asm__ ("ld1 {v16.16b - v19.16b}, %1\n\t"
  9715. "tbx %0.16b, {v16.16b - v19.16b}, %2.16b\n\t"
  9716. :"+w"(result)
  9717. :"Q"(tab),"w"(idx)
  9718. :"memory", "v16", "v17", "v18", "v19");
  9719. return result;
  9720. }
  9721. __extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
  9722. vqtbx4q_p8 (poly8x16_t r, poly8x16x4_t tab, uint8x16_t idx)
  9723. {
  9724. poly8x16_t result = r;
  9725. __asm__ ("ld1 {v16.16b - v19.16b}, %1\n\t"
  9726. "tbx %0.16b, {v16.16b - v19.16b}, %2.16b\n\t"
  9727. :"+w"(result)
  9728. :"Q"(tab),"w"(idx)
  9729. :"memory", "v16", "v17", "v18", "v19");
  9730. return result;
  9731. }
  9732. /* V7 legacy table intrinsics. */
  9733. __extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
  9734. vtbl1_s8 (int8x8_t tab, int8x8_t idx)
  9735. {
  9736. int8x8_t result;
  9737. int8x16_t temp = vcombine_s8 (tab, vcreate_s8 (__AARCH64_UINT64_C (0x0)));
  9738. __asm__ ("tbl %0.8b, {%1.16b}, %2.8b"
  9739. : "=w"(result)
  9740. : "w"(temp), "w"(idx)
  9741. : /* No clobbers */);
  9742. return result;
  9743. }
  9744. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  9745. vtbl1_u8 (uint8x8_t tab, uint8x8_t idx)
  9746. {
  9747. uint8x8_t result;
  9748. uint8x16_t temp = vcombine_u8 (tab, vcreate_u8 (__AARCH64_UINT64_C (0x0)));
  9749. __asm__ ("tbl %0.8b, {%1.16b}, %2.8b"
  9750. : "=w"(result)
  9751. : "w"(temp), "w"(idx)
  9752. : /* No clobbers */);
  9753. return result;
  9754. }
  9755. __extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
  9756. vtbl1_p8 (poly8x8_t tab, uint8x8_t idx)
  9757. {
  9758. poly8x8_t result;
  9759. poly8x16_t temp = vcombine_p8 (tab, vcreate_p8 (__AARCH64_UINT64_C (0x0)));
  9760. __asm__ ("tbl %0.8b, {%1.16b}, %2.8b"
  9761. : "=w"(result)
  9762. : "w"(temp), "w"(idx)
  9763. : /* No clobbers */);
  9764. return result;
  9765. }
  9766. __extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
  9767. vtbl2_s8 (int8x8x2_t tab, int8x8_t idx)
  9768. {
  9769. int8x8_t result;
  9770. int8x16_t temp = vcombine_s8 (tab.val[0], tab.val[1]);
  9771. __asm__ ("tbl %0.8b, {%1.16b}, %2.8b"
  9772. : "=w"(result)
  9773. : "w"(temp), "w"(idx)
  9774. : /* No clobbers */);
  9775. return result;
  9776. }
  9777. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  9778. vtbl2_u8 (uint8x8x2_t tab, uint8x8_t idx)
  9779. {
  9780. uint8x8_t result;
  9781. uint8x16_t temp = vcombine_u8 (tab.val[0], tab.val[1]);
  9782. __asm__ ("tbl %0.8b, {%1.16b}, %2.8b"
  9783. : "=w"(result)
  9784. : "w"(temp), "w"(idx)
  9785. : /* No clobbers */);
  9786. return result;
  9787. }
  9788. __extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
  9789. vtbl2_p8 (poly8x8x2_t tab, uint8x8_t idx)
  9790. {
  9791. poly8x8_t result;
  9792. poly8x16_t temp = vcombine_p8 (tab.val[0], tab.val[1]);
  9793. __asm__ ("tbl %0.8b, {%1.16b}, %2.8b"
  9794. : "=w"(result)
  9795. : "w"(temp), "w"(idx)
  9796. : /* No clobbers */);
  9797. return result;
  9798. }
  9799. __extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
  9800. vtbl3_s8 (int8x8x3_t tab, int8x8_t idx)
  9801. {
  9802. int8x8_t result;
  9803. int8x16x2_t temp;
  9804. temp.val[0] = vcombine_s8 (tab.val[0], tab.val[1]);
  9805. temp.val[1] = vcombine_s8 (tab.val[2], vcreate_s8 (__AARCH64_UINT64_C (0x0)));
  9806. __asm__ ("ld1 {v16.16b - v17.16b }, %1\n\t"
  9807. "tbl %0.8b, {v16.16b - v17.16b}, %2.8b\n\t"
  9808. : "=w"(result)
  9809. : "Q"(temp), "w"(idx)
  9810. : "v16", "v17", "memory");
  9811. return result;
  9812. }
  9813. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  9814. vtbl3_u8 (uint8x8x3_t tab, uint8x8_t idx)
  9815. {
  9816. uint8x8_t result;
  9817. uint8x16x2_t temp;
  9818. temp.val[0] = vcombine_u8 (tab.val[0], tab.val[1]);
  9819. temp.val[1] = vcombine_u8 (tab.val[2], vcreate_u8 (__AARCH64_UINT64_C (0x0)));
  9820. __asm__ ("ld1 {v16.16b - v17.16b }, %1\n\t"
  9821. "tbl %0.8b, {v16.16b - v17.16b}, %2.8b\n\t"
  9822. : "=w"(result)
  9823. : "Q"(temp), "w"(idx)
  9824. : "v16", "v17", "memory");
  9825. return result;
  9826. }
  9827. __extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
  9828. vtbl3_p8 (poly8x8x3_t tab, uint8x8_t idx)
  9829. {
  9830. poly8x8_t result;
  9831. poly8x16x2_t temp;
  9832. temp.val[0] = vcombine_p8 (tab.val[0], tab.val[1]);
  9833. temp.val[1] = vcombine_p8 (tab.val[2], vcreate_p8 (__AARCH64_UINT64_C (0x0)));
  9834. __asm__ ("ld1 {v16.16b - v17.16b }, %1\n\t"
  9835. "tbl %0.8b, {v16.16b - v17.16b}, %2.8b\n\t"
  9836. : "=w"(result)
  9837. : "Q"(temp), "w"(idx)
  9838. : "v16", "v17", "memory");
  9839. return result;
  9840. }
  9841. __extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
  9842. vtbl4_s8 (int8x8x4_t tab, int8x8_t idx)
  9843. {
  9844. int8x8_t result;
  9845. int8x16x2_t temp;
  9846. temp.val[0] = vcombine_s8 (tab.val[0], tab.val[1]);
  9847. temp.val[1] = vcombine_s8 (tab.val[2], tab.val[3]);
  9848. __asm__ ("ld1 {v16.16b - v17.16b }, %1\n\t"
  9849. "tbl %0.8b, {v16.16b - v17.16b}, %2.8b\n\t"
  9850. : "=w"(result)
  9851. : "Q"(temp), "w"(idx)
  9852. : "v16", "v17", "memory");
  9853. return result;
  9854. }
  9855. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  9856. vtbl4_u8 (uint8x8x4_t tab, uint8x8_t idx)
  9857. {
  9858. uint8x8_t result;
  9859. uint8x16x2_t temp;
  9860. temp.val[0] = vcombine_u8 (tab.val[0], tab.val[1]);
  9861. temp.val[1] = vcombine_u8 (tab.val[2], tab.val[3]);
  9862. __asm__ ("ld1 {v16.16b - v17.16b }, %1\n\t"
  9863. "tbl %0.8b, {v16.16b - v17.16b}, %2.8b\n\t"
  9864. : "=w"(result)
  9865. : "Q"(temp), "w"(idx)
  9866. : "v16", "v17", "memory");
  9867. return result;
  9868. }
  9869. __extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
  9870. vtbl4_p8 (poly8x8x4_t tab, uint8x8_t idx)
  9871. {
  9872. poly8x8_t result;
  9873. poly8x16x2_t temp;
  9874. temp.val[0] = vcombine_p8 (tab.val[0], tab.val[1]);
  9875. temp.val[1] = vcombine_p8 (tab.val[2], tab.val[3]);
  9876. __asm__ ("ld1 {v16.16b - v17.16b }, %1\n\t"
  9877. "tbl %0.8b, {v16.16b - v17.16b}, %2.8b\n\t"
  9878. : "=w"(result)
  9879. : "Q"(temp), "w"(idx)
  9880. : "v16", "v17", "memory");
  9881. return result;
  9882. }
  9883. __extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
  9884. vtbx2_s8 (int8x8_t r, int8x8x2_t tab, int8x8_t idx)
  9885. {
  9886. int8x8_t result = r;
  9887. int8x16_t temp = vcombine_s8 (tab.val[0], tab.val[1]);
  9888. __asm__ ("tbx %0.8b, {%1.16b}, %2.8b"
  9889. : "+w"(result)
  9890. : "w"(temp), "w"(idx)
  9891. : /* No clobbers */);
  9892. return result;
  9893. }
  9894. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  9895. vtbx2_u8 (uint8x8_t r, uint8x8x2_t tab, uint8x8_t idx)
  9896. {
  9897. uint8x8_t result = r;
  9898. uint8x16_t temp = vcombine_u8 (tab.val[0], tab.val[1]);
  9899. __asm__ ("tbx %0.8b, {%1.16b}, %2.8b"
  9900. : "+w"(result)
  9901. : "w"(temp), "w"(idx)
  9902. : /* No clobbers */);
  9903. return result;
  9904. }
  9905. __extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
  9906. vtbx2_p8 (poly8x8_t r, poly8x8x2_t tab, uint8x8_t idx)
  9907. {
  9908. poly8x8_t result = r;
  9909. poly8x16_t temp = vcombine_p8 (tab.val[0], tab.val[1]);
  9910. __asm__ ("tbx %0.8b, {%1.16b}, %2.8b"
  9911. : "+w"(result)
  9912. : "w"(temp), "w"(idx)
  9913. : /* No clobbers */);
  9914. return result;
  9915. }
  9916. __extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
  9917. vtbx4_s8 (int8x8_t r, int8x8x4_t tab, int8x8_t idx)
  9918. {
  9919. int8x8_t result = r;
  9920. int8x16x2_t temp;
  9921. temp.val[0] = vcombine_s8 (tab.val[0], tab.val[1]);
  9922. temp.val[1] = vcombine_s8 (tab.val[2], tab.val[3]);
  9923. __asm__ ("ld1 {v16.16b - v17.16b }, %1\n\t"
  9924. "tbx %0.8b, {v16.16b - v17.16b}, %2.8b\n\t"
  9925. : "+w"(result)
  9926. : "Q"(temp), "w"(idx)
  9927. : "v16", "v17", "memory");
  9928. return result;
  9929. }
  9930. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  9931. vtbx4_u8 (uint8x8_t r, uint8x8x4_t tab, uint8x8_t idx)
  9932. {
  9933. uint8x8_t result = r;
  9934. uint8x16x2_t temp;
  9935. temp.val[0] = vcombine_u8 (tab.val[0], tab.val[1]);
  9936. temp.val[1] = vcombine_u8 (tab.val[2], tab.val[3]);
  9937. __asm__ ("ld1 {v16.16b - v17.16b }, %1\n\t"
  9938. "tbx %0.8b, {v16.16b - v17.16b}, %2.8b\n\t"
  9939. : "+w"(result)
  9940. : "Q"(temp), "w"(idx)
  9941. : "v16", "v17", "memory");
  9942. return result;
  9943. }
  9944. __extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
  9945. vtbx4_p8 (poly8x8_t r, poly8x8x4_t tab, uint8x8_t idx)
  9946. {
  9947. poly8x8_t result = r;
  9948. poly8x16x2_t temp;
  9949. temp.val[0] = vcombine_p8 (tab.val[0], tab.val[1]);
  9950. temp.val[1] = vcombine_p8 (tab.val[2], tab.val[3]);
  9951. __asm__ ("ld1 {v16.16b - v17.16b }, %1\n\t"
  9952. "tbx %0.8b, {v16.16b - v17.16b}, %2.8b\n\t"
  9953. : "+w"(result)
  9954. : "Q"(temp), "w"(idx)
  9955. : "v16", "v17", "memory");
  9956. return result;
  9957. }
  9958. /* End of temporary inline asm. */
  9959. /* Start of optimal implementations in approved order. */
  9960. /* vabs */
  9961. __extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
  9962. vabs_f32 (float32x2_t __a)
  9963. {
  9964. return __builtin_aarch64_absv2sf (__a);
  9965. }
  9966. __extension__ static __inline float64x1_t __attribute__ ((__always_inline__))
  9967. vabs_f64 (float64x1_t __a)
  9968. {
  9969. return (float64x1_t) {__builtin_fabs (__a[0])};
  9970. }
  9971. __extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
  9972. vabs_s8 (int8x8_t __a)
  9973. {
  9974. return __builtin_aarch64_absv8qi (__a);
  9975. }
  9976. __extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
  9977. vabs_s16 (int16x4_t __a)
  9978. {
  9979. return __builtin_aarch64_absv4hi (__a);
  9980. }
  9981. __extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
  9982. vabs_s32 (int32x2_t __a)
  9983. {
  9984. return __builtin_aarch64_absv2si (__a);
  9985. }
  9986. __extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
  9987. vabs_s64 (int64x1_t __a)
  9988. {
  9989. return (int64x1_t) {__builtin_aarch64_absdi (__a[0])};
  9990. }
  9991. __extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
  9992. vabsq_f32 (float32x4_t __a)
  9993. {
  9994. return __builtin_aarch64_absv4sf (__a);
  9995. }
  9996. __extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
  9997. vabsq_f64 (float64x2_t __a)
  9998. {
  9999. return __builtin_aarch64_absv2df (__a);
  10000. }
  10001. __extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
  10002. vabsq_s8 (int8x16_t __a)
  10003. {
  10004. return __builtin_aarch64_absv16qi (__a);
  10005. }
  10006. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  10007. vabsq_s16 (int16x8_t __a)
  10008. {
  10009. return __builtin_aarch64_absv8hi (__a);
  10010. }
  10011. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  10012. vabsq_s32 (int32x4_t __a)
  10013. {
  10014. return __builtin_aarch64_absv4si (__a);
  10015. }
  10016. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  10017. vabsq_s64 (int64x2_t __a)
  10018. {
  10019. return __builtin_aarch64_absv2di (__a);
  10020. }
  10021. /* vadd */
  10022. __extension__ static __inline int64_t __attribute__ ((__always_inline__))
  10023. vaddd_s64 (int64_t __a, int64_t __b)
  10024. {
  10025. return __a + __b;
  10026. }
  10027. __extension__ static __inline uint64_t __attribute__ ((__always_inline__))
  10028. vaddd_u64 (uint64_t __a, uint64_t __b)
  10029. {
  10030. return __a + __b;
  10031. }
  10032. /* vaddv */
  10033. __extension__ static __inline int8_t __attribute__ ((__always_inline__))
  10034. vaddv_s8 (int8x8_t __a)
  10035. {
  10036. return __builtin_aarch64_reduc_plus_scal_v8qi (__a);
  10037. }
  10038. __extension__ static __inline int16_t __attribute__ ((__always_inline__))
  10039. vaddv_s16 (int16x4_t __a)
  10040. {
  10041. return __builtin_aarch64_reduc_plus_scal_v4hi (__a);
  10042. }
  10043. __extension__ static __inline int32_t __attribute__ ((__always_inline__))
  10044. vaddv_s32 (int32x2_t __a)
  10045. {
  10046. return __builtin_aarch64_reduc_plus_scal_v2si (__a);
  10047. }
  10048. __extension__ static __inline uint8_t __attribute__ ((__always_inline__))
  10049. vaddv_u8 (uint8x8_t __a)
  10050. {
  10051. return (uint8_t) __builtin_aarch64_reduc_plus_scal_v8qi ((int8x8_t) __a);
  10052. }
  10053. __extension__ static __inline uint16_t __attribute__ ((__always_inline__))
  10054. vaddv_u16 (uint16x4_t __a)
  10055. {
  10056. return (uint16_t) __builtin_aarch64_reduc_plus_scal_v4hi ((int16x4_t) __a);
  10057. }
  10058. __extension__ static __inline uint32_t __attribute__ ((__always_inline__))
  10059. vaddv_u32 (uint32x2_t __a)
  10060. {
  10061. return (int32_t) __builtin_aarch64_reduc_plus_scal_v2si ((int32x2_t) __a);
  10062. }
  10063. __extension__ static __inline int8_t __attribute__ ((__always_inline__))
  10064. vaddvq_s8 (int8x16_t __a)
  10065. {
  10066. return __builtin_aarch64_reduc_plus_scal_v16qi (__a);
  10067. }
  10068. __extension__ static __inline int16_t __attribute__ ((__always_inline__))
  10069. vaddvq_s16 (int16x8_t __a)
  10070. {
  10071. return __builtin_aarch64_reduc_plus_scal_v8hi (__a);
  10072. }
  10073. __extension__ static __inline int32_t __attribute__ ((__always_inline__))
  10074. vaddvq_s32 (int32x4_t __a)
  10075. {
  10076. return __builtin_aarch64_reduc_plus_scal_v4si (__a);
  10077. }
  10078. __extension__ static __inline int64_t __attribute__ ((__always_inline__))
  10079. vaddvq_s64 (int64x2_t __a)
  10080. {
  10081. return __builtin_aarch64_reduc_plus_scal_v2di (__a);
  10082. }
  10083. __extension__ static __inline uint8_t __attribute__ ((__always_inline__))
  10084. vaddvq_u8 (uint8x16_t __a)
  10085. {
  10086. return (uint8_t) __builtin_aarch64_reduc_plus_scal_v16qi ((int8x16_t) __a);
  10087. }
  10088. __extension__ static __inline uint16_t __attribute__ ((__always_inline__))
  10089. vaddvq_u16 (uint16x8_t __a)
  10090. {
  10091. return (uint16_t) __builtin_aarch64_reduc_plus_scal_v8hi ((int16x8_t) __a);
  10092. }
  10093. __extension__ static __inline uint32_t __attribute__ ((__always_inline__))
  10094. vaddvq_u32 (uint32x4_t __a)
  10095. {
  10096. return (uint32_t) __builtin_aarch64_reduc_plus_scal_v4si ((int32x4_t) __a);
  10097. }
  10098. __extension__ static __inline uint64_t __attribute__ ((__always_inline__))
  10099. vaddvq_u64 (uint64x2_t __a)
  10100. {
  10101. return (uint64_t) __builtin_aarch64_reduc_plus_scal_v2di ((int64x2_t) __a);
  10102. }
  10103. __extension__ static __inline float32_t __attribute__ ((__always_inline__))
  10104. vaddv_f32 (float32x2_t __a)
  10105. {
  10106. return __builtin_aarch64_reduc_plus_scal_v2sf (__a);
  10107. }
  10108. __extension__ static __inline float32_t __attribute__ ((__always_inline__))
  10109. vaddvq_f32 (float32x4_t __a)
  10110. {
  10111. return __builtin_aarch64_reduc_plus_scal_v4sf (__a);
  10112. }
  10113. __extension__ static __inline float64_t __attribute__ ((__always_inline__))
  10114. vaddvq_f64 (float64x2_t __a)
  10115. {
  10116. return __builtin_aarch64_reduc_plus_scal_v2df (__a);
  10117. }
  10118. /* vbsl */
  10119. __extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
  10120. vbsl_f32 (uint32x2_t __a, float32x2_t __b, float32x2_t __c)
  10121. {
  10122. return __builtin_aarch64_simd_bslv2sf_suss (__a, __b, __c);
  10123. }
  10124. __extension__ static __inline float64x1_t __attribute__ ((__always_inline__))
  10125. vbsl_f64 (uint64x1_t __a, float64x1_t __b, float64x1_t __c)
  10126. {
  10127. return (float64x1_t)
  10128. { __builtin_aarch64_simd_bsldf_suss (__a[0], __b[0], __c[0]) };
  10129. }
  10130. __extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
  10131. vbsl_p8 (uint8x8_t __a, poly8x8_t __b, poly8x8_t __c)
  10132. {
  10133. return __builtin_aarch64_simd_bslv8qi_pupp (__a, __b, __c);
  10134. }
  10135. __extension__ static __inline poly16x4_t __attribute__ ((__always_inline__))
  10136. vbsl_p16 (uint16x4_t __a, poly16x4_t __b, poly16x4_t __c)
  10137. {
  10138. return __builtin_aarch64_simd_bslv4hi_pupp (__a, __b, __c);
  10139. }
  10140. __extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
  10141. vbsl_s8 (uint8x8_t __a, int8x8_t __b, int8x8_t __c)
  10142. {
  10143. return __builtin_aarch64_simd_bslv8qi_suss (__a, __b, __c);
  10144. }
  10145. __extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
  10146. vbsl_s16 (uint16x4_t __a, int16x4_t __b, int16x4_t __c)
  10147. {
  10148. return __builtin_aarch64_simd_bslv4hi_suss (__a, __b, __c);
  10149. }
  10150. __extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
  10151. vbsl_s32 (uint32x2_t __a, int32x2_t __b, int32x2_t __c)
  10152. {
  10153. return __builtin_aarch64_simd_bslv2si_suss (__a, __b, __c);
  10154. }
  10155. __extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
  10156. vbsl_s64 (uint64x1_t __a, int64x1_t __b, int64x1_t __c)
  10157. {
  10158. return (int64x1_t)
  10159. {__builtin_aarch64_simd_bsldi_suss (__a[0], __b[0], __c[0])};
  10160. }
  10161. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  10162. vbsl_u8 (uint8x8_t __a, uint8x8_t __b, uint8x8_t __c)
  10163. {
  10164. return __builtin_aarch64_simd_bslv8qi_uuuu (__a, __b, __c);
  10165. }
  10166. __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
  10167. vbsl_u16 (uint16x4_t __a, uint16x4_t __b, uint16x4_t __c)
  10168. {
  10169. return __builtin_aarch64_simd_bslv4hi_uuuu (__a, __b, __c);
  10170. }
  10171. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  10172. vbsl_u32 (uint32x2_t __a, uint32x2_t __b, uint32x2_t __c)
  10173. {
  10174. return __builtin_aarch64_simd_bslv2si_uuuu (__a, __b, __c);
  10175. }
  10176. __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
  10177. vbsl_u64 (uint64x1_t __a, uint64x1_t __b, uint64x1_t __c)
  10178. {
  10179. return (uint64x1_t)
  10180. {__builtin_aarch64_simd_bsldi_uuuu (__a[0], __b[0], __c[0])};
  10181. }
  10182. __extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
  10183. vbslq_f32 (uint32x4_t __a, float32x4_t __b, float32x4_t __c)
  10184. {
  10185. return __builtin_aarch64_simd_bslv4sf_suss (__a, __b, __c);
  10186. }
  10187. __extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
  10188. vbslq_f64 (uint64x2_t __a, float64x2_t __b, float64x2_t __c)
  10189. {
  10190. return __builtin_aarch64_simd_bslv2df_suss (__a, __b, __c);
  10191. }
  10192. __extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
  10193. vbslq_p8 (uint8x16_t __a, poly8x16_t __b, poly8x16_t __c)
  10194. {
  10195. return __builtin_aarch64_simd_bslv16qi_pupp (__a, __b, __c);
  10196. }
  10197. __extension__ static __inline poly16x8_t __attribute__ ((__always_inline__))
  10198. vbslq_p16 (uint16x8_t __a, poly16x8_t __b, poly16x8_t __c)
  10199. {
  10200. return __builtin_aarch64_simd_bslv8hi_pupp (__a, __b, __c);
  10201. }
  10202. __extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
  10203. vbslq_s8 (uint8x16_t __a, int8x16_t __b, int8x16_t __c)
  10204. {
  10205. return __builtin_aarch64_simd_bslv16qi_suss (__a, __b, __c);
  10206. }
  10207. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  10208. vbslq_s16 (uint16x8_t __a, int16x8_t __b, int16x8_t __c)
  10209. {
  10210. return __builtin_aarch64_simd_bslv8hi_suss (__a, __b, __c);
  10211. }
  10212. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  10213. vbslq_s32 (uint32x4_t __a, int32x4_t __b, int32x4_t __c)
  10214. {
  10215. return __builtin_aarch64_simd_bslv4si_suss (__a, __b, __c);
  10216. }
  10217. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  10218. vbslq_s64 (uint64x2_t __a, int64x2_t __b, int64x2_t __c)
  10219. {
  10220. return __builtin_aarch64_simd_bslv2di_suss (__a, __b, __c);
  10221. }
  10222. __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
  10223. vbslq_u8 (uint8x16_t __a, uint8x16_t __b, uint8x16_t __c)
  10224. {
  10225. return __builtin_aarch64_simd_bslv16qi_uuuu (__a, __b, __c);
  10226. }
  10227. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  10228. vbslq_u16 (uint16x8_t __a, uint16x8_t __b, uint16x8_t __c)
  10229. {
  10230. return __builtin_aarch64_simd_bslv8hi_uuuu (__a, __b, __c);
  10231. }
  10232. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  10233. vbslq_u32 (uint32x4_t __a, uint32x4_t __b, uint32x4_t __c)
  10234. {
  10235. return __builtin_aarch64_simd_bslv4si_uuuu (__a, __b, __c);
  10236. }
  10237. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  10238. vbslq_u64 (uint64x2_t __a, uint64x2_t __b, uint64x2_t __c)
  10239. {
  10240. return __builtin_aarch64_simd_bslv2di_uuuu (__a, __b, __c);
  10241. }
  10242. #ifdef __ARM_FEATURE_CRYPTO
  10243. /* vaes */
  10244. static __inline uint8x16_t
  10245. vaeseq_u8 (uint8x16_t data, uint8x16_t key)
  10246. {
  10247. return __builtin_aarch64_crypto_aesev16qi_uuu (data, key);
  10248. }
  10249. static __inline uint8x16_t
  10250. vaesdq_u8 (uint8x16_t data, uint8x16_t key)
  10251. {
  10252. return __builtin_aarch64_crypto_aesdv16qi_uuu (data, key);
  10253. }
  10254. static __inline uint8x16_t
  10255. vaesmcq_u8 (uint8x16_t data)
  10256. {
  10257. return __builtin_aarch64_crypto_aesmcv16qi_uu (data);
  10258. }
  10259. static __inline uint8x16_t
  10260. vaesimcq_u8 (uint8x16_t data)
  10261. {
  10262. return __builtin_aarch64_crypto_aesimcv16qi_uu (data);
  10263. }
  10264. #endif
  10265. /* vcage */
  10266. __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
  10267. vcage_f64 (float64x1_t __a, float64x1_t __b)
  10268. {
  10269. return vabs_f64 (__a) >= vabs_f64 (__b);
  10270. }
  10271. __extension__ static __inline uint32_t __attribute__ ((__always_inline__))
  10272. vcages_f32 (float32_t __a, float32_t __b)
  10273. {
  10274. return __builtin_fabsf (__a) >= __builtin_fabsf (__b) ? -1 : 0;
  10275. }
  10276. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  10277. vcage_f32 (float32x2_t __a, float32x2_t __b)
  10278. {
  10279. return vabs_f32 (__a) >= vabs_f32 (__b);
  10280. }
  10281. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  10282. vcageq_f32 (float32x4_t __a, float32x4_t __b)
  10283. {
  10284. return vabsq_f32 (__a) >= vabsq_f32 (__b);
  10285. }
  10286. __extension__ static __inline uint64_t __attribute__ ((__always_inline__))
  10287. vcaged_f64 (float64_t __a, float64_t __b)
  10288. {
  10289. return __builtin_fabs (__a) >= __builtin_fabs (__b) ? -1 : 0;
  10290. }
  10291. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  10292. vcageq_f64 (float64x2_t __a, float64x2_t __b)
  10293. {
  10294. return vabsq_f64 (__a) >= vabsq_f64 (__b);
  10295. }
  10296. /* vcagt */
  10297. __extension__ static __inline uint32_t __attribute__ ((__always_inline__))
  10298. vcagts_f32 (float32_t __a, float32_t __b)
  10299. {
  10300. return __builtin_fabsf (__a) > __builtin_fabsf (__b) ? -1 : 0;
  10301. }
  10302. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  10303. vcagt_f32 (float32x2_t __a, float32x2_t __b)
  10304. {
  10305. return vabs_f32 (__a) > vabs_f32 (__b);
  10306. }
  10307. __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
  10308. vcagt_f64 (float64x1_t __a, float64x1_t __b)
  10309. {
  10310. return vabs_f64 (__a) > vabs_f64 (__b);
  10311. }
  10312. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  10313. vcagtq_f32 (float32x4_t __a, float32x4_t __b)
  10314. {
  10315. return vabsq_f32 (__a) > vabsq_f32 (__b);
  10316. }
  10317. __extension__ static __inline uint64_t __attribute__ ((__always_inline__))
  10318. vcagtd_f64 (float64_t __a, float64_t __b)
  10319. {
  10320. return __builtin_fabs (__a) > __builtin_fabs (__b) ? -1 : 0;
  10321. }
  10322. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  10323. vcagtq_f64 (float64x2_t __a, float64x2_t __b)
  10324. {
  10325. return vabsq_f64 (__a) > vabsq_f64 (__b);
  10326. }
  10327. /* vcale */
  10328. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  10329. vcale_f32 (float32x2_t __a, float32x2_t __b)
  10330. {
  10331. return vabs_f32 (__a) <= vabs_f32 (__b);
  10332. }
  10333. __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
  10334. vcale_f64 (float64x1_t __a, float64x1_t __b)
  10335. {
  10336. return vabs_f64 (__a) <= vabs_f64 (__b);
  10337. }
  10338. __extension__ static __inline uint64_t __attribute__ ((__always_inline__))
  10339. vcaled_f64 (float64_t __a, float64_t __b)
  10340. {
  10341. return __builtin_fabs (__a) <= __builtin_fabs (__b) ? -1 : 0;
  10342. }
  10343. __extension__ static __inline uint32_t __attribute__ ((__always_inline__))
  10344. vcales_f32 (float32_t __a, float32_t __b)
  10345. {
  10346. return __builtin_fabsf (__a) <= __builtin_fabsf (__b) ? -1 : 0;
  10347. }
  10348. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  10349. vcaleq_f32 (float32x4_t __a, float32x4_t __b)
  10350. {
  10351. return vabsq_f32 (__a) <= vabsq_f32 (__b);
  10352. }
  10353. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  10354. vcaleq_f64 (float64x2_t __a, float64x2_t __b)
  10355. {
  10356. return vabsq_f64 (__a) <= vabsq_f64 (__b);
  10357. }
  10358. /* vcalt */
  10359. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  10360. vcalt_f32 (float32x2_t __a, float32x2_t __b)
  10361. {
  10362. return vabs_f32 (__a) < vabs_f32 (__b);
  10363. }
  10364. __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
  10365. vcalt_f64 (float64x1_t __a, float64x1_t __b)
  10366. {
  10367. return vabs_f64 (__a) < vabs_f64 (__b);
  10368. }
  10369. __extension__ static __inline uint64_t __attribute__ ((__always_inline__))
  10370. vcaltd_f64 (float64_t __a, float64_t __b)
  10371. {
  10372. return __builtin_fabs (__a) < __builtin_fabs (__b) ? -1 : 0;
  10373. }
  10374. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  10375. vcaltq_f32 (float32x4_t __a, float32x4_t __b)
  10376. {
  10377. return vabsq_f32 (__a) < vabsq_f32 (__b);
  10378. }
  10379. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  10380. vcaltq_f64 (float64x2_t __a, float64x2_t __b)
  10381. {
  10382. return vabsq_f64 (__a) < vabsq_f64 (__b);
  10383. }
  10384. __extension__ static __inline uint32_t __attribute__ ((__always_inline__))
  10385. vcalts_f32 (float32_t __a, float32_t __b)
  10386. {
  10387. return __builtin_fabsf (__a) < __builtin_fabsf (__b) ? -1 : 0;
  10388. }
  10389. /* vceq - vector. */
  10390. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  10391. vceq_f32 (float32x2_t __a, float32x2_t __b)
  10392. {
  10393. return (uint32x2_t) (__a == __b);
  10394. }
  10395. __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
  10396. vceq_f64 (float64x1_t __a, float64x1_t __b)
  10397. {
  10398. return (uint64x1_t) (__a == __b);
  10399. }
  10400. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  10401. vceq_p8 (poly8x8_t __a, poly8x8_t __b)
  10402. {
  10403. return (uint8x8_t) (__a == __b);
  10404. }
  10405. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  10406. vceq_s8 (int8x8_t __a, int8x8_t __b)
  10407. {
  10408. return (uint8x8_t) (__a == __b);
  10409. }
  10410. __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
  10411. vceq_s16 (int16x4_t __a, int16x4_t __b)
  10412. {
  10413. return (uint16x4_t) (__a == __b);
  10414. }
  10415. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  10416. vceq_s32 (int32x2_t __a, int32x2_t __b)
  10417. {
  10418. return (uint32x2_t) (__a == __b);
  10419. }
  10420. __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
  10421. vceq_s64 (int64x1_t __a, int64x1_t __b)
  10422. {
  10423. return (uint64x1_t) {__a[0] == __b[0] ? -1ll : 0ll};
  10424. }
  10425. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  10426. vceq_u8 (uint8x8_t __a, uint8x8_t __b)
  10427. {
  10428. return (__a == __b);
  10429. }
  10430. __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
  10431. vceq_u16 (uint16x4_t __a, uint16x4_t __b)
  10432. {
  10433. return (__a == __b);
  10434. }
  10435. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  10436. vceq_u32 (uint32x2_t __a, uint32x2_t __b)
  10437. {
  10438. return (__a == __b);
  10439. }
  10440. __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
  10441. vceq_u64 (uint64x1_t __a, uint64x1_t __b)
  10442. {
  10443. return (uint64x1_t) {__a[0] == __b[0] ? -1ll : 0ll};
  10444. }
  10445. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  10446. vceqq_f32 (float32x4_t __a, float32x4_t __b)
  10447. {
  10448. return (uint32x4_t) (__a == __b);
  10449. }
  10450. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  10451. vceqq_f64 (float64x2_t __a, float64x2_t __b)
  10452. {
  10453. return (uint64x2_t) (__a == __b);
  10454. }
  10455. __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
  10456. vceqq_p8 (poly8x16_t __a, poly8x16_t __b)
  10457. {
  10458. return (uint8x16_t) (__a == __b);
  10459. }
  10460. __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
  10461. vceqq_s8 (int8x16_t __a, int8x16_t __b)
  10462. {
  10463. return (uint8x16_t) (__a == __b);
  10464. }
  10465. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  10466. vceqq_s16 (int16x8_t __a, int16x8_t __b)
  10467. {
  10468. return (uint16x8_t) (__a == __b);
  10469. }
  10470. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  10471. vceqq_s32 (int32x4_t __a, int32x4_t __b)
  10472. {
  10473. return (uint32x4_t) (__a == __b);
  10474. }
  10475. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  10476. vceqq_s64 (int64x2_t __a, int64x2_t __b)
  10477. {
  10478. return (uint64x2_t) (__a == __b);
  10479. }
  10480. __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
  10481. vceqq_u8 (uint8x16_t __a, uint8x16_t __b)
  10482. {
  10483. return (__a == __b);
  10484. }
  10485. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  10486. vceqq_u16 (uint16x8_t __a, uint16x8_t __b)
  10487. {
  10488. return (__a == __b);
  10489. }
  10490. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  10491. vceqq_u32 (uint32x4_t __a, uint32x4_t __b)
  10492. {
  10493. return (__a == __b);
  10494. }
  10495. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  10496. vceqq_u64 (uint64x2_t __a, uint64x2_t __b)
  10497. {
  10498. return (__a == __b);
  10499. }
  10500. /* vceq - scalar. */
  10501. __extension__ static __inline uint32_t __attribute__ ((__always_inline__))
  10502. vceqs_f32 (float32_t __a, float32_t __b)
  10503. {
  10504. return __a == __b ? -1 : 0;
  10505. }
  10506. __extension__ static __inline uint64_t __attribute__ ((__always_inline__))
  10507. vceqd_s64 (int64_t __a, int64_t __b)
  10508. {
  10509. return __a == __b ? -1ll : 0ll;
  10510. }
  10511. __extension__ static __inline uint64_t __attribute__ ((__always_inline__))
  10512. vceqd_u64 (uint64_t __a, uint64_t __b)
  10513. {
  10514. return __a == __b ? -1ll : 0ll;
  10515. }
  10516. __extension__ static __inline uint64_t __attribute__ ((__always_inline__))
  10517. vceqd_f64 (float64_t __a, float64_t __b)
  10518. {
  10519. return __a == __b ? -1ll : 0ll;
  10520. }
  10521. /* vceqz - vector. */
  10522. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  10523. vceqz_f32 (float32x2_t __a)
  10524. {
  10525. return (uint32x2_t) (__a == 0.0f);
  10526. }
  10527. __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
  10528. vceqz_f64 (float64x1_t __a)
  10529. {
  10530. return (uint64x1_t) (__a == (float64x1_t) {0.0});
  10531. }
  10532. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  10533. vceqz_p8 (poly8x8_t __a)
  10534. {
  10535. return (uint8x8_t) (__a == 0);
  10536. }
  10537. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  10538. vceqz_s8 (int8x8_t __a)
  10539. {
  10540. return (uint8x8_t) (__a == 0);
  10541. }
  10542. __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
  10543. vceqz_s16 (int16x4_t __a)
  10544. {
  10545. return (uint16x4_t) (__a == 0);
  10546. }
  10547. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  10548. vceqz_s32 (int32x2_t __a)
  10549. {
  10550. return (uint32x2_t) (__a == 0);
  10551. }
  10552. __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
  10553. vceqz_s64 (int64x1_t __a)
  10554. {
  10555. return (uint64x1_t) {__a[0] == 0ll ? -1ll : 0ll};
  10556. }
  10557. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  10558. vceqz_u8 (uint8x8_t __a)
  10559. {
  10560. return (__a == 0);
  10561. }
  10562. __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
  10563. vceqz_u16 (uint16x4_t __a)
  10564. {
  10565. return (__a == 0);
  10566. }
  10567. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  10568. vceqz_u32 (uint32x2_t __a)
  10569. {
  10570. return (__a == 0);
  10571. }
  10572. __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
  10573. vceqz_u64 (uint64x1_t __a)
  10574. {
  10575. return (uint64x1_t) {__a[0] == 0ll ? -1ll : 0ll};
  10576. }
  10577. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  10578. vceqzq_f32 (float32x4_t __a)
  10579. {
  10580. return (uint32x4_t) (__a == 0.0f);
  10581. }
  10582. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  10583. vceqzq_f64 (float64x2_t __a)
  10584. {
  10585. return (uint64x2_t) (__a == 0.0f);
  10586. }
  10587. __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
  10588. vceqzq_p8 (poly8x16_t __a)
  10589. {
  10590. return (uint8x16_t) (__a == 0);
  10591. }
  10592. __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
  10593. vceqzq_s8 (int8x16_t __a)
  10594. {
  10595. return (uint8x16_t) (__a == 0);
  10596. }
  10597. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  10598. vceqzq_s16 (int16x8_t __a)
  10599. {
  10600. return (uint16x8_t) (__a == 0);
  10601. }
  10602. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  10603. vceqzq_s32 (int32x4_t __a)
  10604. {
  10605. return (uint32x4_t) (__a == 0);
  10606. }
  10607. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  10608. vceqzq_s64 (int64x2_t __a)
  10609. {
  10610. return (uint64x2_t) (__a == __AARCH64_INT64_C (0));
  10611. }
  10612. __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
  10613. vceqzq_u8 (uint8x16_t __a)
  10614. {
  10615. return (__a == 0);
  10616. }
  10617. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  10618. vceqzq_u16 (uint16x8_t __a)
  10619. {
  10620. return (__a == 0);
  10621. }
  10622. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  10623. vceqzq_u32 (uint32x4_t __a)
  10624. {
  10625. return (__a == 0);
  10626. }
  10627. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  10628. vceqzq_u64 (uint64x2_t __a)
  10629. {
  10630. return (__a == __AARCH64_UINT64_C (0));
  10631. }
  10632. /* vceqz - scalar. */
  10633. __extension__ static __inline uint32_t __attribute__ ((__always_inline__))
  10634. vceqzs_f32 (float32_t __a)
  10635. {
  10636. return __a == 0.0f ? -1 : 0;
  10637. }
  10638. __extension__ static __inline uint64_t __attribute__ ((__always_inline__))
  10639. vceqzd_s64 (int64_t __a)
  10640. {
  10641. return __a == 0 ? -1ll : 0ll;
  10642. }
  10643. __extension__ static __inline uint64_t __attribute__ ((__always_inline__))
  10644. vceqzd_u64 (uint64_t __a)
  10645. {
  10646. return __a == 0 ? -1ll : 0ll;
  10647. }
  10648. __extension__ static __inline uint64_t __attribute__ ((__always_inline__))
  10649. vceqzd_f64 (float64_t __a)
  10650. {
  10651. return __a == 0.0 ? -1ll : 0ll;
  10652. }
  10653. /* vcge - vector. */
  10654. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  10655. vcge_f32 (float32x2_t __a, float32x2_t __b)
  10656. {
  10657. return (uint32x2_t) (__a >= __b);
  10658. }
  10659. __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
  10660. vcge_f64 (float64x1_t __a, float64x1_t __b)
  10661. {
  10662. return (uint64x1_t) (__a >= __b);
  10663. }
  10664. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  10665. vcge_s8 (int8x8_t __a, int8x8_t __b)
  10666. {
  10667. return (uint8x8_t) (__a >= __b);
  10668. }
  10669. __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
  10670. vcge_s16 (int16x4_t __a, int16x4_t __b)
  10671. {
  10672. return (uint16x4_t) (__a >= __b);
  10673. }
  10674. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  10675. vcge_s32 (int32x2_t __a, int32x2_t __b)
  10676. {
  10677. return (uint32x2_t) (__a >= __b);
  10678. }
  10679. __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
  10680. vcge_s64 (int64x1_t __a, int64x1_t __b)
  10681. {
  10682. return (uint64x1_t) {__a[0] >= __b[0] ? -1ll : 0ll};
  10683. }
  10684. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  10685. vcge_u8 (uint8x8_t __a, uint8x8_t __b)
  10686. {
  10687. return (__a >= __b);
  10688. }
  10689. __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
  10690. vcge_u16 (uint16x4_t __a, uint16x4_t __b)
  10691. {
  10692. return (__a >= __b);
  10693. }
  10694. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  10695. vcge_u32 (uint32x2_t __a, uint32x2_t __b)
  10696. {
  10697. return (__a >= __b);
  10698. }
  10699. __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
  10700. vcge_u64 (uint64x1_t __a, uint64x1_t __b)
  10701. {
  10702. return (uint64x1_t) {__a[0] >= __b[0] ? -1ll : 0ll};
  10703. }
  10704. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  10705. vcgeq_f32 (float32x4_t __a, float32x4_t __b)
  10706. {
  10707. return (uint32x4_t) (__a >= __b);
  10708. }
  10709. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  10710. vcgeq_f64 (float64x2_t __a, float64x2_t __b)
  10711. {
  10712. return (uint64x2_t) (__a >= __b);
  10713. }
  10714. __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
  10715. vcgeq_s8 (int8x16_t __a, int8x16_t __b)
  10716. {
  10717. return (uint8x16_t) (__a >= __b);
  10718. }
  10719. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  10720. vcgeq_s16 (int16x8_t __a, int16x8_t __b)
  10721. {
  10722. return (uint16x8_t) (__a >= __b);
  10723. }
  10724. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  10725. vcgeq_s32 (int32x4_t __a, int32x4_t __b)
  10726. {
  10727. return (uint32x4_t) (__a >= __b);
  10728. }
  10729. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  10730. vcgeq_s64 (int64x2_t __a, int64x2_t __b)
  10731. {
  10732. return (uint64x2_t) (__a >= __b);
  10733. }
  10734. __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
  10735. vcgeq_u8 (uint8x16_t __a, uint8x16_t __b)
  10736. {
  10737. return (__a >= __b);
  10738. }
  10739. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  10740. vcgeq_u16 (uint16x8_t __a, uint16x8_t __b)
  10741. {
  10742. return (__a >= __b);
  10743. }
  10744. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  10745. vcgeq_u32 (uint32x4_t __a, uint32x4_t __b)
  10746. {
  10747. return (__a >= __b);
  10748. }
  10749. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  10750. vcgeq_u64 (uint64x2_t __a, uint64x2_t __b)
  10751. {
  10752. return (__a >= __b);
  10753. }
  10754. /* vcge - scalar. */
  10755. __extension__ static __inline uint32_t __attribute__ ((__always_inline__))
  10756. vcges_f32 (float32_t __a, float32_t __b)
  10757. {
  10758. return __a >= __b ? -1 : 0;
  10759. }
  10760. __extension__ static __inline uint64_t __attribute__ ((__always_inline__))
  10761. vcged_s64 (int64_t __a, int64_t __b)
  10762. {
  10763. return __a >= __b ? -1ll : 0ll;
  10764. }
  10765. __extension__ static __inline uint64_t __attribute__ ((__always_inline__))
  10766. vcged_u64 (uint64_t __a, uint64_t __b)
  10767. {
  10768. return __a >= __b ? -1ll : 0ll;
  10769. }
  10770. __extension__ static __inline uint64_t __attribute__ ((__always_inline__))
  10771. vcged_f64 (float64_t __a, float64_t __b)
  10772. {
  10773. return __a >= __b ? -1ll : 0ll;
  10774. }
  10775. /* vcgez - vector. */
  10776. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  10777. vcgez_f32 (float32x2_t __a)
  10778. {
  10779. return (uint32x2_t) (__a >= 0.0f);
  10780. }
  10781. __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
  10782. vcgez_f64 (float64x1_t __a)
  10783. {
  10784. return (uint64x1_t) (__a[0] >= (float64x1_t) {0.0});
  10785. }
  10786. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  10787. vcgez_s8 (int8x8_t __a)
  10788. {
  10789. return (uint8x8_t) (__a >= 0);
  10790. }
  10791. __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
  10792. vcgez_s16 (int16x4_t __a)
  10793. {
  10794. return (uint16x4_t) (__a >= 0);
  10795. }
  10796. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  10797. vcgez_s32 (int32x2_t __a)
  10798. {
  10799. return (uint32x2_t) (__a >= 0);
  10800. }
  10801. __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
  10802. vcgez_s64 (int64x1_t __a)
  10803. {
  10804. return (uint64x1_t) {__a[0] >= 0ll ? -1ll : 0ll};
  10805. }
  10806. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  10807. vcgezq_f32 (float32x4_t __a)
  10808. {
  10809. return (uint32x4_t) (__a >= 0.0f);
  10810. }
  10811. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  10812. vcgezq_f64 (float64x2_t __a)
  10813. {
  10814. return (uint64x2_t) (__a >= 0.0);
  10815. }
  10816. __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
  10817. vcgezq_s8 (int8x16_t __a)
  10818. {
  10819. return (uint8x16_t) (__a >= 0);
  10820. }
  10821. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  10822. vcgezq_s16 (int16x8_t __a)
  10823. {
  10824. return (uint16x8_t) (__a >= 0);
  10825. }
  10826. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  10827. vcgezq_s32 (int32x4_t __a)
  10828. {
  10829. return (uint32x4_t) (__a >= 0);
  10830. }
  10831. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  10832. vcgezq_s64 (int64x2_t __a)
  10833. {
  10834. return (uint64x2_t) (__a >= __AARCH64_INT64_C (0));
  10835. }
  10836. /* vcgez - scalar. */
  10837. __extension__ static __inline uint32_t __attribute__ ((__always_inline__))
  10838. vcgezs_f32 (float32_t __a)
  10839. {
  10840. return __a >= 0.0f ? -1 : 0;
  10841. }
  10842. __extension__ static __inline uint64_t __attribute__ ((__always_inline__))
  10843. vcgezd_s64 (int64_t __a)
  10844. {
  10845. return __a >= 0 ? -1ll : 0ll;
  10846. }
  10847. __extension__ static __inline uint64_t __attribute__ ((__always_inline__))
  10848. vcgezd_f64 (float64_t __a)
  10849. {
  10850. return __a >= 0.0 ? -1ll : 0ll;
  10851. }
  10852. /* vcgt - vector. */
  10853. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  10854. vcgt_f32 (float32x2_t __a, float32x2_t __b)
  10855. {
  10856. return (uint32x2_t) (__a > __b);
  10857. }
  10858. __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
  10859. vcgt_f64 (float64x1_t __a, float64x1_t __b)
  10860. {
  10861. return (uint64x1_t) (__a > __b);
  10862. }
  10863. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  10864. vcgt_s8 (int8x8_t __a, int8x8_t __b)
  10865. {
  10866. return (uint8x8_t) (__a > __b);
  10867. }
  10868. __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
  10869. vcgt_s16 (int16x4_t __a, int16x4_t __b)
  10870. {
  10871. return (uint16x4_t) (__a > __b);
  10872. }
  10873. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  10874. vcgt_s32 (int32x2_t __a, int32x2_t __b)
  10875. {
  10876. return (uint32x2_t) (__a > __b);
  10877. }
  10878. __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
  10879. vcgt_s64 (int64x1_t __a, int64x1_t __b)
  10880. {
  10881. return (uint64x1_t) (__a[0] > __b[0] ? -1ll : 0ll);
  10882. }
  10883. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  10884. vcgt_u8 (uint8x8_t __a, uint8x8_t __b)
  10885. {
  10886. return (__a > __b);
  10887. }
  10888. __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
  10889. vcgt_u16 (uint16x4_t __a, uint16x4_t __b)
  10890. {
  10891. return (__a > __b);
  10892. }
  10893. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  10894. vcgt_u32 (uint32x2_t __a, uint32x2_t __b)
  10895. {
  10896. return (__a > __b);
  10897. }
  10898. __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
  10899. vcgt_u64 (uint64x1_t __a, uint64x1_t __b)
  10900. {
  10901. return (uint64x1_t) (__a[0] > __b[0] ? -1ll : 0ll);
  10902. }
  10903. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  10904. vcgtq_f32 (float32x4_t __a, float32x4_t __b)
  10905. {
  10906. return (uint32x4_t) (__a > __b);
  10907. }
  10908. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  10909. vcgtq_f64 (float64x2_t __a, float64x2_t __b)
  10910. {
  10911. return (uint64x2_t) (__a > __b);
  10912. }
  10913. __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
  10914. vcgtq_s8 (int8x16_t __a, int8x16_t __b)
  10915. {
  10916. return (uint8x16_t) (__a > __b);
  10917. }
  10918. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  10919. vcgtq_s16 (int16x8_t __a, int16x8_t __b)
  10920. {
  10921. return (uint16x8_t) (__a > __b);
  10922. }
  10923. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  10924. vcgtq_s32 (int32x4_t __a, int32x4_t __b)
  10925. {
  10926. return (uint32x4_t) (__a > __b);
  10927. }
  10928. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  10929. vcgtq_s64 (int64x2_t __a, int64x2_t __b)
  10930. {
  10931. return (uint64x2_t) (__a > __b);
  10932. }
  10933. __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
  10934. vcgtq_u8 (uint8x16_t __a, uint8x16_t __b)
  10935. {
  10936. return (__a > __b);
  10937. }
  10938. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  10939. vcgtq_u16 (uint16x8_t __a, uint16x8_t __b)
  10940. {
  10941. return (__a > __b);
  10942. }
  10943. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  10944. vcgtq_u32 (uint32x4_t __a, uint32x4_t __b)
  10945. {
  10946. return (__a > __b);
  10947. }
  10948. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  10949. vcgtq_u64 (uint64x2_t __a, uint64x2_t __b)
  10950. {
  10951. return (__a > __b);
  10952. }
  10953. /* vcgt - scalar. */
  10954. __extension__ static __inline uint32_t __attribute__ ((__always_inline__))
  10955. vcgts_f32 (float32_t __a, float32_t __b)
  10956. {
  10957. return __a > __b ? -1 : 0;
  10958. }
  10959. __extension__ static __inline uint64_t __attribute__ ((__always_inline__))
  10960. vcgtd_s64 (int64_t __a, int64_t __b)
  10961. {
  10962. return __a > __b ? -1ll : 0ll;
  10963. }
  10964. __extension__ static __inline uint64_t __attribute__ ((__always_inline__))
  10965. vcgtd_u64 (uint64_t __a, uint64_t __b)
  10966. {
  10967. return __a > __b ? -1ll : 0ll;
  10968. }
  10969. __extension__ static __inline uint64_t __attribute__ ((__always_inline__))
  10970. vcgtd_f64 (float64_t __a, float64_t __b)
  10971. {
  10972. return __a > __b ? -1ll : 0ll;
  10973. }
  10974. /* vcgtz - vector. */
  10975. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  10976. vcgtz_f32 (float32x2_t __a)
  10977. {
  10978. return (uint32x2_t) (__a > 0.0f);
  10979. }
  10980. __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
  10981. vcgtz_f64 (float64x1_t __a)
  10982. {
  10983. return (uint64x1_t) (__a > (float64x1_t) {0.0});
  10984. }
  10985. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  10986. vcgtz_s8 (int8x8_t __a)
  10987. {
  10988. return (uint8x8_t) (__a > 0);
  10989. }
  10990. __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
  10991. vcgtz_s16 (int16x4_t __a)
  10992. {
  10993. return (uint16x4_t) (__a > 0);
  10994. }
  10995. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  10996. vcgtz_s32 (int32x2_t __a)
  10997. {
  10998. return (uint32x2_t) (__a > 0);
  10999. }
  11000. __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
  11001. vcgtz_s64 (int64x1_t __a)
  11002. {
  11003. return (uint64x1_t) {__a[0] > 0ll ? -1ll : 0ll};
  11004. }
  11005. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  11006. vcgtzq_f32 (float32x4_t __a)
  11007. {
  11008. return (uint32x4_t) (__a > 0.0f);
  11009. }
  11010. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  11011. vcgtzq_f64 (float64x2_t __a)
  11012. {
  11013. return (uint64x2_t) (__a > 0.0);
  11014. }
  11015. __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
  11016. vcgtzq_s8 (int8x16_t __a)
  11017. {
  11018. return (uint8x16_t) (__a > 0);
  11019. }
  11020. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  11021. vcgtzq_s16 (int16x8_t __a)
  11022. {
  11023. return (uint16x8_t) (__a > 0);
  11024. }
  11025. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  11026. vcgtzq_s32 (int32x4_t __a)
  11027. {
  11028. return (uint32x4_t) (__a > 0);
  11029. }
  11030. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  11031. vcgtzq_s64 (int64x2_t __a)
  11032. {
  11033. return (uint64x2_t) (__a > __AARCH64_INT64_C (0));
  11034. }
  11035. /* vcgtz - scalar. */
  11036. __extension__ static __inline uint32_t __attribute__ ((__always_inline__))
  11037. vcgtzs_f32 (float32_t __a)
  11038. {
  11039. return __a > 0.0f ? -1 : 0;
  11040. }
  11041. __extension__ static __inline uint64_t __attribute__ ((__always_inline__))
  11042. vcgtzd_s64 (int64_t __a)
  11043. {
  11044. return __a > 0 ? -1ll : 0ll;
  11045. }
  11046. __extension__ static __inline uint64_t __attribute__ ((__always_inline__))
  11047. vcgtzd_f64 (float64_t __a)
  11048. {
  11049. return __a > 0.0 ? -1ll : 0ll;
  11050. }
  11051. /* vcle - vector. */
  11052. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  11053. vcle_f32 (float32x2_t __a, float32x2_t __b)
  11054. {
  11055. return (uint32x2_t) (__a <= __b);
  11056. }
  11057. __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
  11058. vcle_f64 (float64x1_t __a, float64x1_t __b)
  11059. {
  11060. return (uint64x1_t) (__a <= __b);
  11061. }
  11062. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  11063. vcle_s8 (int8x8_t __a, int8x8_t __b)
  11064. {
  11065. return (uint8x8_t) (__a <= __b);
  11066. }
  11067. __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
  11068. vcle_s16 (int16x4_t __a, int16x4_t __b)
  11069. {
  11070. return (uint16x4_t) (__a <= __b);
  11071. }
  11072. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  11073. vcle_s32 (int32x2_t __a, int32x2_t __b)
  11074. {
  11075. return (uint32x2_t) (__a <= __b);
  11076. }
  11077. __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
  11078. vcle_s64 (int64x1_t __a, int64x1_t __b)
  11079. {
  11080. return (uint64x1_t) {__a[0] <= __b[0] ? -1ll : 0ll};
  11081. }
  11082. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  11083. vcle_u8 (uint8x8_t __a, uint8x8_t __b)
  11084. {
  11085. return (__a <= __b);
  11086. }
  11087. __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
  11088. vcle_u16 (uint16x4_t __a, uint16x4_t __b)
  11089. {
  11090. return (__a <= __b);
  11091. }
  11092. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  11093. vcle_u32 (uint32x2_t __a, uint32x2_t __b)
  11094. {
  11095. return (__a <= __b);
  11096. }
  11097. __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
  11098. vcle_u64 (uint64x1_t __a, uint64x1_t __b)
  11099. {
  11100. return (uint64x1_t) {__a[0] <= __b[0] ? -1ll : 0ll};
  11101. }
  11102. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  11103. vcleq_f32 (float32x4_t __a, float32x4_t __b)
  11104. {
  11105. return (uint32x4_t) (__a <= __b);
  11106. }
  11107. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  11108. vcleq_f64 (float64x2_t __a, float64x2_t __b)
  11109. {
  11110. return (uint64x2_t) (__a <= __b);
  11111. }
  11112. __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
  11113. vcleq_s8 (int8x16_t __a, int8x16_t __b)
  11114. {
  11115. return (uint8x16_t) (__a <= __b);
  11116. }
  11117. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  11118. vcleq_s16 (int16x8_t __a, int16x8_t __b)
  11119. {
  11120. return (uint16x8_t) (__a <= __b);
  11121. }
  11122. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  11123. vcleq_s32 (int32x4_t __a, int32x4_t __b)
  11124. {
  11125. return (uint32x4_t) (__a <= __b);
  11126. }
  11127. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  11128. vcleq_s64 (int64x2_t __a, int64x2_t __b)
  11129. {
  11130. return (uint64x2_t) (__a <= __b);
  11131. }
  11132. __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
  11133. vcleq_u8 (uint8x16_t __a, uint8x16_t __b)
  11134. {
  11135. return (__a <= __b);
  11136. }
  11137. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  11138. vcleq_u16 (uint16x8_t __a, uint16x8_t __b)
  11139. {
  11140. return (__a <= __b);
  11141. }
  11142. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  11143. vcleq_u32 (uint32x4_t __a, uint32x4_t __b)
  11144. {
  11145. return (__a <= __b);
  11146. }
  11147. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  11148. vcleq_u64 (uint64x2_t __a, uint64x2_t __b)
  11149. {
  11150. return (__a <= __b);
  11151. }
  11152. /* vcle - scalar. */
  11153. __extension__ static __inline uint32_t __attribute__ ((__always_inline__))
  11154. vcles_f32 (float32_t __a, float32_t __b)
  11155. {
  11156. return __a <= __b ? -1 : 0;
  11157. }
  11158. __extension__ static __inline uint64_t __attribute__ ((__always_inline__))
  11159. vcled_s64 (int64_t __a, int64_t __b)
  11160. {
  11161. return __a <= __b ? -1ll : 0ll;
  11162. }
  11163. __extension__ static __inline uint64_t __attribute__ ((__always_inline__))
  11164. vcled_u64 (uint64_t __a, uint64_t __b)
  11165. {
  11166. return __a <= __b ? -1ll : 0ll;
  11167. }
  11168. __extension__ static __inline uint64_t __attribute__ ((__always_inline__))
  11169. vcled_f64 (float64_t __a, float64_t __b)
  11170. {
  11171. return __a <= __b ? -1ll : 0ll;
  11172. }
  11173. /* vclez - vector. */
  11174. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  11175. vclez_f32 (float32x2_t __a)
  11176. {
  11177. return (uint32x2_t) (__a <= 0.0f);
  11178. }
  11179. __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
  11180. vclez_f64 (float64x1_t __a)
  11181. {
  11182. return (uint64x1_t) (__a <= (float64x1_t) {0.0});
  11183. }
  11184. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  11185. vclez_s8 (int8x8_t __a)
  11186. {
  11187. return (uint8x8_t) (__a <= 0);
  11188. }
  11189. __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
  11190. vclez_s16 (int16x4_t __a)
  11191. {
  11192. return (uint16x4_t) (__a <= 0);
  11193. }
  11194. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  11195. vclez_s32 (int32x2_t __a)
  11196. {
  11197. return (uint32x2_t) (__a <= 0);
  11198. }
  11199. __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
  11200. vclez_s64 (int64x1_t __a)
  11201. {
  11202. return (uint64x1_t) {__a[0] <= 0ll ? -1ll : 0ll};
  11203. }
  11204. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  11205. vclezq_f32 (float32x4_t __a)
  11206. {
  11207. return (uint32x4_t) (__a <= 0.0f);
  11208. }
  11209. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  11210. vclezq_f64 (float64x2_t __a)
  11211. {
  11212. return (uint64x2_t) (__a <= 0.0);
  11213. }
  11214. __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
  11215. vclezq_s8 (int8x16_t __a)
  11216. {
  11217. return (uint8x16_t) (__a <= 0);
  11218. }
  11219. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  11220. vclezq_s16 (int16x8_t __a)
  11221. {
  11222. return (uint16x8_t) (__a <= 0);
  11223. }
  11224. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  11225. vclezq_s32 (int32x4_t __a)
  11226. {
  11227. return (uint32x4_t) (__a <= 0);
  11228. }
  11229. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  11230. vclezq_s64 (int64x2_t __a)
  11231. {
  11232. return (uint64x2_t) (__a <= __AARCH64_INT64_C (0));
  11233. }
  11234. /* vclez - scalar. */
  11235. __extension__ static __inline uint32_t __attribute__ ((__always_inline__))
  11236. vclezs_f32 (float32_t __a)
  11237. {
  11238. return __a <= 0.0f ? -1 : 0;
  11239. }
  11240. __extension__ static __inline uint64_t __attribute__ ((__always_inline__))
  11241. vclezd_s64 (int64_t __a)
  11242. {
  11243. return __a <= 0 ? -1ll : 0ll;
  11244. }
  11245. __extension__ static __inline uint64_t __attribute__ ((__always_inline__))
  11246. vclezd_f64 (float64_t __a)
  11247. {
  11248. return __a <= 0.0 ? -1ll : 0ll;
  11249. }
  11250. /* vclt - vector. */
  11251. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  11252. vclt_f32 (float32x2_t __a, float32x2_t __b)
  11253. {
  11254. return (uint32x2_t) (__a < __b);
  11255. }
  11256. __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
  11257. vclt_f64 (float64x1_t __a, float64x1_t __b)
  11258. {
  11259. return (uint64x1_t) (__a < __b);
  11260. }
  11261. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  11262. vclt_s8 (int8x8_t __a, int8x8_t __b)
  11263. {
  11264. return (uint8x8_t) (__a < __b);
  11265. }
  11266. __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
  11267. vclt_s16 (int16x4_t __a, int16x4_t __b)
  11268. {
  11269. return (uint16x4_t) (__a < __b);
  11270. }
  11271. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  11272. vclt_s32 (int32x2_t __a, int32x2_t __b)
  11273. {
  11274. return (uint32x2_t) (__a < __b);
  11275. }
  11276. __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
  11277. vclt_s64 (int64x1_t __a, int64x1_t __b)
  11278. {
  11279. return (uint64x1_t) {__a[0] < __b[0] ? -1ll : 0ll};
  11280. }
  11281. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  11282. vclt_u8 (uint8x8_t __a, uint8x8_t __b)
  11283. {
  11284. return (__a < __b);
  11285. }
  11286. __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
  11287. vclt_u16 (uint16x4_t __a, uint16x4_t __b)
  11288. {
  11289. return (__a < __b);
  11290. }
  11291. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  11292. vclt_u32 (uint32x2_t __a, uint32x2_t __b)
  11293. {
  11294. return (__a < __b);
  11295. }
  11296. __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
  11297. vclt_u64 (uint64x1_t __a, uint64x1_t __b)
  11298. {
  11299. return (uint64x1_t) {__a[0] < __b[0] ? -1ll : 0ll};
  11300. }
  11301. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  11302. vcltq_f32 (float32x4_t __a, float32x4_t __b)
  11303. {
  11304. return (uint32x4_t) (__a < __b);
  11305. }
  11306. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  11307. vcltq_f64 (float64x2_t __a, float64x2_t __b)
  11308. {
  11309. return (uint64x2_t) (__a < __b);
  11310. }
  11311. __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
  11312. vcltq_s8 (int8x16_t __a, int8x16_t __b)
  11313. {
  11314. return (uint8x16_t) (__a < __b);
  11315. }
  11316. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  11317. vcltq_s16 (int16x8_t __a, int16x8_t __b)
  11318. {
  11319. return (uint16x8_t) (__a < __b);
  11320. }
  11321. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  11322. vcltq_s32 (int32x4_t __a, int32x4_t __b)
  11323. {
  11324. return (uint32x4_t) (__a < __b);
  11325. }
  11326. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  11327. vcltq_s64 (int64x2_t __a, int64x2_t __b)
  11328. {
  11329. return (uint64x2_t) (__a < __b);
  11330. }
  11331. __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
  11332. vcltq_u8 (uint8x16_t __a, uint8x16_t __b)
  11333. {
  11334. return (__a < __b);
  11335. }
  11336. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  11337. vcltq_u16 (uint16x8_t __a, uint16x8_t __b)
  11338. {
  11339. return (__a < __b);
  11340. }
  11341. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  11342. vcltq_u32 (uint32x4_t __a, uint32x4_t __b)
  11343. {
  11344. return (__a < __b);
  11345. }
  11346. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  11347. vcltq_u64 (uint64x2_t __a, uint64x2_t __b)
  11348. {
  11349. return (__a < __b);
  11350. }
  11351. /* vclt - scalar. */
  11352. __extension__ static __inline uint32_t __attribute__ ((__always_inline__))
  11353. vclts_f32 (float32_t __a, float32_t __b)
  11354. {
  11355. return __a < __b ? -1 : 0;
  11356. }
  11357. __extension__ static __inline uint64_t __attribute__ ((__always_inline__))
  11358. vcltd_s64 (int64_t __a, int64_t __b)
  11359. {
  11360. return __a < __b ? -1ll : 0ll;
  11361. }
  11362. __extension__ static __inline uint64_t __attribute__ ((__always_inline__))
  11363. vcltd_u64 (uint64_t __a, uint64_t __b)
  11364. {
  11365. return __a < __b ? -1ll : 0ll;
  11366. }
  11367. __extension__ static __inline uint64_t __attribute__ ((__always_inline__))
  11368. vcltd_f64 (float64_t __a, float64_t __b)
  11369. {
  11370. return __a < __b ? -1ll : 0ll;
  11371. }
  11372. /* vcltz - vector. */
  11373. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  11374. vcltz_f32 (float32x2_t __a)
  11375. {
  11376. return (uint32x2_t) (__a < 0.0f);
  11377. }
  11378. __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
  11379. vcltz_f64 (float64x1_t __a)
  11380. {
  11381. return (uint64x1_t) (__a < (float64x1_t) {0.0});
  11382. }
  11383. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  11384. vcltz_s8 (int8x8_t __a)
  11385. {
  11386. return (uint8x8_t) (__a < 0);
  11387. }
  11388. __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
  11389. vcltz_s16 (int16x4_t __a)
  11390. {
  11391. return (uint16x4_t) (__a < 0);
  11392. }
  11393. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  11394. vcltz_s32 (int32x2_t __a)
  11395. {
  11396. return (uint32x2_t) (__a < 0);
  11397. }
  11398. __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
  11399. vcltz_s64 (int64x1_t __a)
  11400. {
  11401. return (uint64x1_t) {__a[0] < 0ll ? -1ll : 0ll};
  11402. }
  11403. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  11404. vcltzq_f32 (float32x4_t __a)
  11405. {
  11406. return (uint32x4_t) (__a < 0.0f);
  11407. }
  11408. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  11409. vcltzq_f64 (float64x2_t __a)
  11410. {
  11411. return (uint64x2_t) (__a < 0.0);
  11412. }
  11413. __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
  11414. vcltzq_s8 (int8x16_t __a)
  11415. {
  11416. return (uint8x16_t) (__a < 0);
  11417. }
  11418. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  11419. vcltzq_s16 (int16x8_t __a)
  11420. {
  11421. return (uint16x8_t) (__a < 0);
  11422. }
  11423. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  11424. vcltzq_s32 (int32x4_t __a)
  11425. {
  11426. return (uint32x4_t) (__a < 0);
  11427. }
  11428. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  11429. vcltzq_s64 (int64x2_t __a)
  11430. {
  11431. return (uint64x2_t) (__a < __AARCH64_INT64_C (0));
  11432. }
  11433. /* vcltz - scalar. */
  11434. __extension__ static __inline uint32_t __attribute__ ((__always_inline__))
  11435. vcltzs_f32 (float32_t __a)
  11436. {
  11437. return __a < 0.0f ? -1 : 0;
  11438. }
  11439. __extension__ static __inline uint64_t __attribute__ ((__always_inline__))
  11440. vcltzd_s64 (int64_t __a)
  11441. {
  11442. return __a < 0 ? -1ll : 0ll;
  11443. }
  11444. __extension__ static __inline uint64_t __attribute__ ((__always_inline__))
  11445. vcltzd_f64 (float64_t __a)
  11446. {
  11447. return __a < 0.0 ? -1ll : 0ll;
  11448. }
  11449. /* vcls. */
  11450. __extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
  11451. vcls_s8 (int8x8_t __a)
  11452. {
  11453. return __builtin_aarch64_clrsbv8qi (__a);
  11454. }
  11455. __extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
  11456. vcls_s16 (int16x4_t __a)
  11457. {
  11458. return __builtin_aarch64_clrsbv4hi (__a);
  11459. }
  11460. __extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
  11461. vcls_s32 (int32x2_t __a)
  11462. {
  11463. return __builtin_aarch64_clrsbv2si (__a);
  11464. }
  11465. __extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
  11466. vclsq_s8 (int8x16_t __a)
  11467. {
  11468. return __builtin_aarch64_clrsbv16qi (__a);
  11469. }
  11470. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  11471. vclsq_s16 (int16x8_t __a)
  11472. {
  11473. return __builtin_aarch64_clrsbv8hi (__a);
  11474. }
  11475. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  11476. vclsq_s32 (int32x4_t __a)
  11477. {
  11478. return __builtin_aarch64_clrsbv4si (__a);
  11479. }
  11480. /* vclz. */
  11481. __extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
  11482. vclz_s8 (int8x8_t __a)
  11483. {
  11484. return __builtin_aarch64_clzv8qi (__a);
  11485. }
  11486. __extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
  11487. vclz_s16 (int16x4_t __a)
  11488. {
  11489. return __builtin_aarch64_clzv4hi (__a);
  11490. }
  11491. __extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
  11492. vclz_s32 (int32x2_t __a)
  11493. {
  11494. return __builtin_aarch64_clzv2si (__a);
  11495. }
  11496. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  11497. vclz_u8 (uint8x8_t __a)
  11498. {
  11499. return (uint8x8_t)__builtin_aarch64_clzv8qi ((int8x8_t)__a);
  11500. }
  11501. __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
  11502. vclz_u16 (uint16x4_t __a)
  11503. {
  11504. return (uint16x4_t)__builtin_aarch64_clzv4hi ((int16x4_t)__a);
  11505. }
  11506. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  11507. vclz_u32 (uint32x2_t __a)
  11508. {
  11509. return (uint32x2_t)__builtin_aarch64_clzv2si ((int32x2_t)__a);
  11510. }
  11511. __extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
  11512. vclzq_s8 (int8x16_t __a)
  11513. {
  11514. return __builtin_aarch64_clzv16qi (__a);
  11515. }
  11516. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  11517. vclzq_s16 (int16x8_t __a)
  11518. {
  11519. return __builtin_aarch64_clzv8hi (__a);
  11520. }
  11521. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  11522. vclzq_s32 (int32x4_t __a)
  11523. {
  11524. return __builtin_aarch64_clzv4si (__a);
  11525. }
  11526. __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
  11527. vclzq_u8 (uint8x16_t __a)
  11528. {
  11529. return (uint8x16_t)__builtin_aarch64_clzv16qi ((int8x16_t)__a);
  11530. }
  11531. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  11532. vclzq_u16 (uint16x8_t __a)
  11533. {
  11534. return (uint16x8_t)__builtin_aarch64_clzv8hi ((int16x8_t)__a);
  11535. }
  11536. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  11537. vclzq_u32 (uint32x4_t __a)
  11538. {
  11539. return (uint32x4_t)__builtin_aarch64_clzv4si ((int32x4_t)__a);
  11540. }
  11541. /* vcnt. */
  11542. __extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
  11543. vcnt_p8 (poly8x8_t __a)
  11544. {
  11545. return (poly8x8_t) __builtin_aarch64_popcountv8qi ((int8x8_t) __a);
  11546. }
  11547. __extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
  11548. vcnt_s8 (int8x8_t __a)
  11549. {
  11550. return __builtin_aarch64_popcountv8qi (__a);
  11551. }
  11552. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  11553. vcnt_u8 (uint8x8_t __a)
  11554. {
  11555. return (uint8x8_t) __builtin_aarch64_popcountv8qi ((int8x8_t) __a);
  11556. }
  11557. __extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
  11558. vcntq_p8 (poly8x16_t __a)
  11559. {
  11560. return (poly8x16_t) __builtin_aarch64_popcountv16qi ((int8x16_t) __a);
  11561. }
  11562. __extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
  11563. vcntq_s8 (int8x16_t __a)
  11564. {
  11565. return __builtin_aarch64_popcountv16qi (__a);
  11566. }
  11567. __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
  11568. vcntq_u8 (uint8x16_t __a)
  11569. {
  11570. return (uint8x16_t) __builtin_aarch64_popcountv16qi ((int8x16_t) __a);
  11571. }
  11572. /* vcvt (double -> float). */
  11573. __extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
  11574. vcvt_f32_f64 (float64x2_t __a)
  11575. {
  11576. return __builtin_aarch64_float_truncate_lo_v2sf (__a);
  11577. }
  11578. __extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
  11579. vcvt_high_f32_f64 (float32x2_t __a, float64x2_t __b)
  11580. {
  11581. return __builtin_aarch64_float_truncate_hi_v4sf (__a, __b);
  11582. }
  11583. /* vcvt (float -> double). */
  11584. __extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
  11585. vcvt_f64_f32 (float32x2_t __a)
  11586. {
  11587. return __builtin_aarch64_float_extend_lo_v2df (__a);
  11588. }
  11589. __extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
  11590. vcvt_high_f64_f32 (float32x4_t __a)
  11591. {
  11592. return __builtin_aarch64_vec_unpacks_hi_v4sf (__a);
  11593. }
  11594. /* vcvt (<u>int -> float) */
  11595. __extension__ static __inline float64_t __attribute__ ((__always_inline__))
  11596. vcvtd_f64_s64 (int64_t __a)
  11597. {
  11598. return (float64_t) __a;
  11599. }
  11600. __extension__ static __inline float64_t __attribute__ ((__always_inline__))
  11601. vcvtd_f64_u64 (uint64_t __a)
  11602. {
  11603. return (float64_t) __a;
  11604. }
  11605. __extension__ static __inline float32_t __attribute__ ((__always_inline__))
  11606. vcvts_f32_s32 (int32_t __a)
  11607. {
  11608. return (float32_t) __a;
  11609. }
  11610. __extension__ static __inline float32_t __attribute__ ((__always_inline__))
  11611. vcvts_f32_u32 (uint32_t __a)
  11612. {
  11613. return (float32_t) __a;
  11614. }
  11615. __extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
  11616. vcvt_f32_s32 (int32x2_t __a)
  11617. {
  11618. return __builtin_aarch64_floatv2siv2sf (__a);
  11619. }
  11620. __extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
  11621. vcvt_f32_u32 (uint32x2_t __a)
  11622. {
  11623. return __builtin_aarch64_floatunsv2siv2sf ((int32x2_t) __a);
  11624. }
  11625. __extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
  11626. vcvtq_f32_s32 (int32x4_t __a)
  11627. {
  11628. return __builtin_aarch64_floatv4siv4sf (__a);
  11629. }
  11630. __extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
  11631. vcvtq_f32_u32 (uint32x4_t __a)
  11632. {
  11633. return __builtin_aarch64_floatunsv4siv4sf ((int32x4_t) __a);
  11634. }
  11635. __extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
  11636. vcvtq_f64_s64 (int64x2_t __a)
  11637. {
  11638. return __builtin_aarch64_floatv2div2df (__a);
  11639. }
  11640. __extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
  11641. vcvtq_f64_u64 (uint64x2_t __a)
  11642. {
  11643. return __builtin_aarch64_floatunsv2div2df ((int64x2_t) __a);
  11644. }
  11645. /* vcvt (float -> <u>int) */
  11646. __extension__ static __inline int64_t __attribute__ ((__always_inline__))
  11647. vcvtd_s64_f64 (float64_t __a)
  11648. {
  11649. return (int64_t) __a;
  11650. }
  11651. __extension__ static __inline uint64_t __attribute__ ((__always_inline__))
  11652. vcvtd_u64_f64 (float64_t __a)
  11653. {
  11654. return (uint64_t) __a;
  11655. }
  11656. __extension__ static __inline int32_t __attribute__ ((__always_inline__))
  11657. vcvts_s32_f32 (float32_t __a)
  11658. {
  11659. return (int32_t) __a;
  11660. }
  11661. __extension__ static __inline uint32_t __attribute__ ((__always_inline__))
  11662. vcvts_u32_f32 (float32_t __a)
  11663. {
  11664. return (uint32_t) __a;
  11665. }
  11666. __extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
  11667. vcvt_s32_f32 (float32x2_t __a)
  11668. {
  11669. return __builtin_aarch64_lbtruncv2sfv2si (__a);
  11670. }
  11671. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  11672. vcvt_u32_f32 (float32x2_t __a)
  11673. {
  11674. /* TODO: This cast should go away when builtins have
  11675. their correct types. */
  11676. return (uint32x2_t) __builtin_aarch64_lbtruncuv2sfv2si (__a);
  11677. }
  11678. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  11679. vcvtq_s32_f32 (float32x4_t __a)
  11680. {
  11681. return __builtin_aarch64_lbtruncv4sfv4si (__a);
  11682. }
  11683. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  11684. vcvtq_u32_f32 (float32x4_t __a)
  11685. {
  11686. /* TODO: This cast should go away when builtins have
  11687. their correct types. */
  11688. return (uint32x4_t) __builtin_aarch64_lbtruncuv4sfv4si (__a);
  11689. }
  11690. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  11691. vcvtq_s64_f64 (float64x2_t __a)
  11692. {
  11693. return __builtin_aarch64_lbtruncv2dfv2di (__a);
  11694. }
  11695. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  11696. vcvtq_u64_f64 (float64x2_t __a)
  11697. {
  11698. /* TODO: This cast should go away when builtins have
  11699. their correct types. */
  11700. return (uint64x2_t) __builtin_aarch64_lbtruncuv2dfv2di (__a);
  11701. }
  11702. /* vcvta */
  11703. __extension__ static __inline int64_t __attribute__ ((__always_inline__))
  11704. vcvtad_s64_f64 (float64_t __a)
  11705. {
  11706. return __builtin_aarch64_lrounddfdi (__a);
  11707. }
  11708. __extension__ static __inline uint64_t __attribute__ ((__always_inline__))
  11709. vcvtad_u64_f64 (float64_t __a)
  11710. {
  11711. return __builtin_aarch64_lroundudfdi (__a);
  11712. }
  11713. __extension__ static __inline int32_t __attribute__ ((__always_inline__))
  11714. vcvtas_s32_f32 (float32_t __a)
  11715. {
  11716. return __builtin_aarch64_lroundsfsi (__a);
  11717. }
  11718. __extension__ static __inline uint32_t __attribute__ ((__always_inline__))
  11719. vcvtas_u32_f32 (float32_t __a)
  11720. {
  11721. return __builtin_aarch64_lroundusfsi (__a);
  11722. }
  11723. __extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
  11724. vcvta_s32_f32 (float32x2_t __a)
  11725. {
  11726. return __builtin_aarch64_lroundv2sfv2si (__a);
  11727. }
  11728. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  11729. vcvta_u32_f32 (float32x2_t __a)
  11730. {
  11731. /* TODO: This cast should go away when builtins have
  11732. their correct types. */
  11733. return (uint32x2_t) __builtin_aarch64_lrounduv2sfv2si (__a);
  11734. }
  11735. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  11736. vcvtaq_s32_f32 (float32x4_t __a)
  11737. {
  11738. return __builtin_aarch64_lroundv4sfv4si (__a);
  11739. }
  11740. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  11741. vcvtaq_u32_f32 (float32x4_t __a)
  11742. {
  11743. /* TODO: This cast should go away when builtins have
  11744. their correct types. */
  11745. return (uint32x4_t) __builtin_aarch64_lrounduv4sfv4si (__a);
  11746. }
  11747. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  11748. vcvtaq_s64_f64 (float64x2_t __a)
  11749. {
  11750. return __builtin_aarch64_lroundv2dfv2di (__a);
  11751. }
  11752. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  11753. vcvtaq_u64_f64 (float64x2_t __a)
  11754. {
  11755. /* TODO: This cast should go away when builtins have
  11756. their correct types. */
  11757. return (uint64x2_t) __builtin_aarch64_lrounduv2dfv2di (__a);
  11758. }
  11759. /* vcvtm */
  11760. __extension__ static __inline int64_t __attribute__ ((__always_inline__))
  11761. vcvtmd_s64_f64 (float64_t __a)
  11762. {
  11763. return __builtin_llfloor (__a);
  11764. }
  11765. __extension__ static __inline uint64_t __attribute__ ((__always_inline__))
  11766. vcvtmd_u64_f64 (float64_t __a)
  11767. {
  11768. return __builtin_aarch64_lfloorudfdi (__a);
  11769. }
  11770. __extension__ static __inline int32_t __attribute__ ((__always_inline__))
  11771. vcvtms_s32_f32 (float32_t __a)
  11772. {
  11773. return __builtin_ifloorf (__a);
  11774. }
  11775. __extension__ static __inline uint32_t __attribute__ ((__always_inline__))
  11776. vcvtms_u32_f32 (float32_t __a)
  11777. {
  11778. return __builtin_aarch64_lfloorusfsi (__a);
  11779. }
  11780. __extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
  11781. vcvtm_s32_f32 (float32x2_t __a)
  11782. {
  11783. return __builtin_aarch64_lfloorv2sfv2si (__a);
  11784. }
  11785. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  11786. vcvtm_u32_f32 (float32x2_t __a)
  11787. {
  11788. /* TODO: This cast should go away when builtins have
  11789. their correct types. */
  11790. return (uint32x2_t) __builtin_aarch64_lflooruv2sfv2si (__a);
  11791. }
  11792. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  11793. vcvtmq_s32_f32 (float32x4_t __a)
  11794. {
  11795. return __builtin_aarch64_lfloorv4sfv4si (__a);
  11796. }
  11797. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  11798. vcvtmq_u32_f32 (float32x4_t __a)
  11799. {
  11800. /* TODO: This cast should go away when builtins have
  11801. their correct types. */
  11802. return (uint32x4_t) __builtin_aarch64_lflooruv4sfv4si (__a);
  11803. }
  11804. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  11805. vcvtmq_s64_f64 (float64x2_t __a)
  11806. {
  11807. return __builtin_aarch64_lfloorv2dfv2di (__a);
  11808. }
  11809. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  11810. vcvtmq_u64_f64 (float64x2_t __a)
  11811. {
  11812. /* TODO: This cast should go away when builtins have
  11813. their correct types. */
  11814. return (uint64x2_t) __builtin_aarch64_lflooruv2dfv2di (__a);
  11815. }
  11816. /* vcvtn */
  11817. __extension__ static __inline int64_t __attribute__ ((__always_inline__))
  11818. vcvtnd_s64_f64 (float64_t __a)
  11819. {
  11820. return __builtin_aarch64_lfrintndfdi (__a);
  11821. }
  11822. __extension__ static __inline uint64_t __attribute__ ((__always_inline__))
  11823. vcvtnd_u64_f64 (float64_t __a)
  11824. {
  11825. return __builtin_aarch64_lfrintnudfdi (__a);
  11826. }
  11827. __extension__ static __inline int32_t __attribute__ ((__always_inline__))
  11828. vcvtns_s32_f32 (float32_t __a)
  11829. {
  11830. return __builtin_aarch64_lfrintnsfsi (__a);
  11831. }
  11832. __extension__ static __inline uint32_t __attribute__ ((__always_inline__))
  11833. vcvtns_u32_f32 (float32_t __a)
  11834. {
  11835. return __builtin_aarch64_lfrintnusfsi (__a);
  11836. }
  11837. __extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
  11838. vcvtn_s32_f32 (float32x2_t __a)
  11839. {
  11840. return __builtin_aarch64_lfrintnv2sfv2si (__a);
  11841. }
  11842. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  11843. vcvtn_u32_f32 (float32x2_t __a)
  11844. {
  11845. /* TODO: This cast should go away when builtins have
  11846. their correct types. */
  11847. return (uint32x2_t) __builtin_aarch64_lfrintnuv2sfv2si (__a);
  11848. }
  11849. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  11850. vcvtnq_s32_f32 (float32x4_t __a)
  11851. {
  11852. return __builtin_aarch64_lfrintnv4sfv4si (__a);
  11853. }
  11854. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  11855. vcvtnq_u32_f32 (float32x4_t __a)
  11856. {
  11857. /* TODO: This cast should go away when builtins have
  11858. their correct types. */
  11859. return (uint32x4_t) __builtin_aarch64_lfrintnuv4sfv4si (__a);
  11860. }
  11861. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  11862. vcvtnq_s64_f64 (float64x2_t __a)
  11863. {
  11864. return __builtin_aarch64_lfrintnv2dfv2di (__a);
  11865. }
  11866. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  11867. vcvtnq_u64_f64 (float64x2_t __a)
  11868. {
  11869. /* TODO: This cast should go away when builtins have
  11870. their correct types. */
  11871. return (uint64x2_t) __builtin_aarch64_lfrintnuv2dfv2di (__a);
  11872. }
  11873. /* vcvtp */
  11874. __extension__ static __inline int64_t __attribute__ ((__always_inline__))
  11875. vcvtpd_s64_f64 (float64_t __a)
  11876. {
  11877. return __builtin_llceil (__a);
  11878. }
  11879. __extension__ static __inline uint64_t __attribute__ ((__always_inline__))
  11880. vcvtpd_u64_f64 (float64_t __a)
  11881. {
  11882. return __builtin_aarch64_lceiludfdi (__a);
  11883. }
  11884. __extension__ static __inline int32_t __attribute__ ((__always_inline__))
  11885. vcvtps_s32_f32 (float32_t __a)
  11886. {
  11887. return __builtin_iceilf (__a);
  11888. }
  11889. __extension__ static __inline uint32_t __attribute__ ((__always_inline__))
  11890. vcvtps_u32_f32 (float32_t __a)
  11891. {
  11892. return __builtin_aarch64_lceilusfsi (__a);
  11893. }
  11894. __extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
  11895. vcvtp_s32_f32 (float32x2_t __a)
  11896. {
  11897. return __builtin_aarch64_lceilv2sfv2si (__a);
  11898. }
  11899. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  11900. vcvtp_u32_f32 (float32x2_t __a)
  11901. {
  11902. /* TODO: This cast should go away when builtins have
  11903. their correct types. */
  11904. return (uint32x2_t) __builtin_aarch64_lceiluv2sfv2si (__a);
  11905. }
  11906. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  11907. vcvtpq_s32_f32 (float32x4_t __a)
  11908. {
  11909. return __builtin_aarch64_lceilv4sfv4si (__a);
  11910. }
  11911. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  11912. vcvtpq_u32_f32 (float32x4_t __a)
  11913. {
  11914. /* TODO: This cast should go away when builtins have
  11915. their correct types. */
  11916. return (uint32x4_t) __builtin_aarch64_lceiluv4sfv4si (__a);
  11917. }
  11918. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  11919. vcvtpq_s64_f64 (float64x2_t __a)
  11920. {
  11921. return __builtin_aarch64_lceilv2dfv2di (__a);
  11922. }
  11923. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  11924. vcvtpq_u64_f64 (float64x2_t __a)
  11925. {
  11926. /* TODO: This cast should go away when builtins have
  11927. their correct types. */
  11928. return (uint64x2_t) __builtin_aarch64_lceiluv2dfv2di (__a);
  11929. }
  11930. /* vdup_n */
  11931. __extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
  11932. vdup_n_f32 (float32_t __a)
  11933. {
  11934. return (float32x2_t) {__a, __a};
  11935. }
  11936. __extension__ static __inline float64x1_t __attribute__ ((__always_inline__))
  11937. vdup_n_f64 (float64_t __a)
  11938. {
  11939. return (float64x1_t) {__a};
  11940. }
  11941. __extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
  11942. vdup_n_p8 (poly8_t __a)
  11943. {
  11944. return (poly8x8_t) {__a, __a, __a, __a, __a, __a, __a, __a};
  11945. }
  11946. __extension__ static __inline poly16x4_t __attribute__ ((__always_inline__))
  11947. vdup_n_p16 (poly16_t __a)
  11948. {
  11949. return (poly16x4_t) {__a, __a, __a, __a};
  11950. }
  11951. __extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
  11952. vdup_n_s8 (int8_t __a)
  11953. {
  11954. return (int8x8_t) {__a, __a, __a, __a, __a, __a, __a, __a};
  11955. }
  11956. __extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
  11957. vdup_n_s16 (int16_t __a)
  11958. {
  11959. return (int16x4_t) {__a, __a, __a, __a};
  11960. }
  11961. __extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
  11962. vdup_n_s32 (int32_t __a)
  11963. {
  11964. return (int32x2_t) {__a, __a};
  11965. }
  11966. __extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
  11967. vdup_n_s64 (int64_t __a)
  11968. {
  11969. return (int64x1_t) {__a};
  11970. }
  11971. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  11972. vdup_n_u8 (uint8_t __a)
  11973. {
  11974. return (uint8x8_t) {__a, __a, __a, __a, __a, __a, __a, __a};
  11975. }
  11976. __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
  11977. vdup_n_u16 (uint16_t __a)
  11978. {
  11979. return (uint16x4_t) {__a, __a, __a, __a};
  11980. }
  11981. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  11982. vdup_n_u32 (uint32_t __a)
  11983. {
  11984. return (uint32x2_t) {__a, __a};
  11985. }
  11986. __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
  11987. vdup_n_u64 (uint64_t __a)
  11988. {
  11989. return (uint64x1_t) {__a};
  11990. }
  11991. /* vdupq_n */
  11992. __extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
  11993. vdupq_n_f32 (float32_t __a)
  11994. {
  11995. return (float32x4_t) {__a, __a, __a, __a};
  11996. }
  11997. __extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
  11998. vdupq_n_f64 (float64_t __a)
  11999. {
  12000. return (float64x2_t) {__a, __a};
  12001. }
  12002. __extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
  12003. vdupq_n_p8 (uint32_t __a)
  12004. {
  12005. return (poly8x16_t) {__a, __a, __a, __a, __a, __a, __a, __a,
  12006. __a, __a, __a, __a, __a, __a, __a, __a};
  12007. }
  12008. __extension__ static __inline poly16x8_t __attribute__ ((__always_inline__))
  12009. vdupq_n_p16 (uint32_t __a)
  12010. {
  12011. return (poly16x8_t) {__a, __a, __a, __a, __a, __a, __a, __a};
  12012. }
  12013. __extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
  12014. vdupq_n_s8 (int32_t __a)
  12015. {
  12016. return (int8x16_t) {__a, __a, __a, __a, __a, __a, __a, __a,
  12017. __a, __a, __a, __a, __a, __a, __a, __a};
  12018. }
  12019. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  12020. vdupq_n_s16 (int32_t __a)
  12021. {
  12022. return (int16x8_t) {__a, __a, __a, __a, __a, __a, __a, __a};
  12023. }
  12024. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  12025. vdupq_n_s32 (int32_t __a)
  12026. {
  12027. return (int32x4_t) {__a, __a, __a, __a};
  12028. }
  12029. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  12030. vdupq_n_s64 (int64_t __a)
  12031. {
  12032. return (int64x2_t) {__a, __a};
  12033. }
  12034. __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
  12035. vdupq_n_u8 (uint32_t __a)
  12036. {
  12037. return (uint8x16_t) {__a, __a, __a, __a, __a, __a, __a, __a,
  12038. __a, __a, __a, __a, __a, __a, __a, __a};
  12039. }
  12040. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  12041. vdupq_n_u16 (uint32_t __a)
  12042. {
  12043. return (uint16x8_t) {__a, __a, __a, __a, __a, __a, __a, __a};
  12044. }
  12045. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  12046. vdupq_n_u32 (uint32_t __a)
  12047. {
  12048. return (uint32x4_t) {__a, __a, __a, __a};
  12049. }
  12050. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  12051. vdupq_n_u64 (uint64_t __a)
  12052. {
  12053. return (uint64x2_t) {__a, __a};
  12054. }
  12055. /* vdup_lane */
  12056. __extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
  12057. vdup_lane_f32 (float32x2_t __a, const int __b)
  12058. {
  12059. return __aarch64_vdup_lane_f32 (__a, __b);
  12060. }
  12061. __extension__ static __inline float64x1_t __attribute__ ((__always_inline__))
  12062. vdup_lane_f64 (float64x1_t __a, const int __b)
  12063. {
  12064. return __aarch64_vdup_lane_f64 (__a, __b);
  12065. }
  12066. __extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
  12067. vdup_lane_p8 (poly8x8_t __a, const int __b)
  12068. {
  12069. return __aarch64_vdup_lane_p8 (__a, __b);
  12070. }
  12071. __extension__ static __inline poly16x4_t __attribute__ ((__always_inline__))
  12072. vdup_lane_p16 (poly16x4_t __a, const int __b)
  12073. {
  12074. return __aarch64_vdup_lane_p16 (__a, __b);
  12075. }
  12076. __extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
  12077. vdup_lane_s8 (int8x8_t __a, const int __b)
  12078. {
  12079. return __aarch64_vdup_lane_s8 (__a, __b);
  12080. }
  12081. __extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
  12082. vdup_lane_s16 (int16x4_t __a, const int __b)
  12083. {
  12084. return __aarch64_vdup_lane_s16 (__a, __b);
  12085. }
  12086. __extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
  12087. vdup_lane_s32 (int32x2_t __a, const int __b)
  12088. {
  12089. return __aarch64_vdup_lane_s32 (__a, __b);
  12090. }
  12091. __extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
  12092. vdup_lane_s64 (int64x1_t __a, const int __b)
  12093. {
  12094. return __aarch64_vdup_lane_s64 (__a, __b);
  12095. }
  12096. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  12097. vdup_lane_u8 (uint8x8_t __a, const int __b)
  12098. {
  12099. return __aarch64_vdup_lane_u8 (__a, __b);
  12100. }
  12101. __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
  12102. vdup_lane_u16 (uint16x4_t __a, const int __b)
  12103. {
  12104. return __aarch64_vdup_lane_u16 (__a, __b);
  12105. }
  12106. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  12107. vdup_lane_u32 (uint32x2_t __a, const int __b)
  12108. {
  12109. return __aarch64_vdup_lane_u32 (__a, __b);
  12110. }
  12111. __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
  12112. vdup_lane_u64 (uint64x1_t __a, const int __b)
  12113. {
  12114. return __aarch64_vdup_lane_u64 (__a, __b);
  12115. }
  12116. /* vdup_laneq */
  12117. __extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
  12118. vdup_laneq_f32 (float32x4_t __a, const int __b)
  12119. {
  12120. return __aarch64_vdup_laneq_f32 (__a, __b);
  12121. }
  12122. __extension__ static __inline float64x1_t __attribute__ ((__always_inline__))
  12123. vdup_laneq_f64 (float64x2_t __a, const int __b)
  12124. {
  12125. return __aarch64_vdup_laneq_f64 (__a, __b);
  12126. }
  12127. __extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
  12128. vdup_laneq_p8 (poly8x16_t __a, const int __b)
  12129. {
  12130. return __aarch64_vdup_laneq_p8 (__a, __b);
  12131. }
  12132. __extension__ static __inline poly16x4_t __attribute__ ((__always_inline__))
  12133. vdup_laneq_p16 (poly16x8_t __a, const int __b)
  12134. {
  12135. return __aarch64_vdup_laneq_p16 (__a, __b);
  12136. }
  12137. __extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
  12138. vdup_laneq_s8 (int8x16_t __a, const int __b)
  12139. {
  12140. return __aarch64_vdup_laneq_s8 (__a, __b);
  12141. }
  12142. __extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
  12143. vdup_laneq_s16 (int16x8_t __a, const int __b)
  12144. {
  12145. return __aarch64_vdup_laneq_s16 (__a, __b);
  12146. }
  12147. __extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
  12148. vdup_laneq_s32 (int32x4_t __a, const int __b)
  12149. {
  12150. return __aarch64_vdup_laneq_s32 (__a, __b);
  12151. }
  12152. __extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
  12153. vdup_laneq_s64 (int64x2_t __a, const int __b)
  12154. {
  12155. return __aarch64_vdup_laneq_s64 (__a, __b);
  12156. }
  12157. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  12158. vdup_laneq_u8 (uint8x16_t __a, const int __b)
  12159. {
  12160. return __aarch64_vdup_laneq_u8 (__a, __b);
  12161. }
  12162. __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
  12163. vdup_laneq_u16 (uint16x8_t __a, const int __b)
  12164. {
  12165. return __aarch64_vdup_laneq_u16 (__a, __b);
  12166. }
  12167. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  12168. vdup_laneq_u32 (uint32x4_t __a, const int __b)
  12169. {
  12170. return __aarch64_vdup_laneq_u32 (__a, __b);
  12171. }
  12172. __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
  12173. vdup_laneq_u64 (uint64x2_t __a, const int __b)
  12174. {
  12175. return __aarch64_vdup_laneq_u64 (__a, __b);
  12176. }
  12177. /* vdupq_lane */
  12178. __extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
  12179. vdupq_lane_f32 (float32x2_t __a, const int __b)
  12180. {
  12181. return __aarch64_vdupq_lane_f32 (__a, __b);
  12182. }
  12183. __extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
  12184. vdupq_lane_f64 (float64x1_t __a, const int __b)
  12185. {
  12186. return __aarch64_vdupq_lane_f64 (__a, __b);
  12187. }
  12188. __extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
  12189. vdupq_lane_p8 (poly8x8_t __a, const int __b)
  12190. {
  12191. return __aarch64_vdupq_lane_p8 (__a, __b);
  12192. }
  12193. __extension__ static __inline poly16x8_t __attribute__ ((__always_inline__))
  12194. vdupq_lane_p16 (poly16x4_t __a, const int __b)
  12195. {
  12196. return __aarch64_vdupq_lane_p16 (__a, __b);
  12197. }
  12198. __extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
  12199. vdupq_lane_s8 (int8x8_t __a, const int __b)
  12200. {
  12201. return __aarch64_vdupq_lane_s8 (__a, __b);
  12202. }
  12203. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  12204. vdupq_lane_s16 (int16x4_t __a, const int __b)
  12205. {
  12206. return __aarch64_vdupq_lane_s16 (__a, __b);
  12207. }
  12208. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  12209. vdupq_lane_s32 (int32x2_t __a, const int __b)
  12210. {
  12211. return __aarch64_vdupq_lane_s32 (__a, __b);
  12212. }
  12213. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  12214. vdupq_lane_s64 (int64x1_t __a, const int __b)
  12215. {
  12216. return __aarch64_vdupq_lane_s64 (__a, __b);
  12217. }
  12218. __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
  12219. vdupq_lane_u8 (uint8x8_t __a, const int __b)
  12220. {
  12221. return __aarch64_vdupq_lane_u8 (__a, __b);
  12222. }
  12223. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  12224. vdupq_lane_u16 (uint16x4_t __a, const int __b)
  12225. {
  12226. return __aarch64_vdupq_lane_u16 (__a, __b);
  12227. }
  12228. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  12229. vdupq_lane_u32 (uint32x2_t __a, const int __b)
  12230. {
  12231. return __aarch64_vdupq_lane_u32 (__a, __b);
  12232. }
  12233. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  12234. vdupq_lane_u64 (uint64x1_t __a, const int __b)
  12235. {
  12236. return __aarch64_vdupq_lane_u64 (__a, __b);
  12237. }
  12238. /* vdupq_laneq */
  12239. __extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
  12240. vdupq_laneq_f32 (float32x4_t __a, const int __b)
  12241. {
  12242. return __aarch64_vdupq_laneq_f32 (__a, __b);
  12243. }
  12244. __extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
  12245. vdupq_laneq_f64 (float64x2_t __a, const int __b)
  12246. {
  12247. return __aarch64_vdupq_laneq_f64 (__a, __b);
  12248. }
  12249. __extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
  12250. vdupq_laneq_p8 (poly8x16_t __a, const int __b)
  12251. {
  12252. return __aarch64_vdupq_laneq_p8 (__a, __b);
  12253. }
  12254. __extension__ static __inline poly16x8_t __attribute__ ((__always_inline__))
  12255. vdupq_laneq_p16 (poly16x8_t __a, const int __b)
  12256. {
  12257. return __aarch64_vdupq_laneq_p16 (__a, __b);
  12258. }
  12259. __extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
  12260. vdupq_laneq_s8 (int8x16_t __a, const int __b)
  12261. {
  12262. return __aarch64_vdupq_laneq_s8 (__a, __b);
  12263. }
  12264. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  12265. vdupq_laneq_s16 (int16x8_t __a, const int __b)
  12266. {
  12267. return __aarch64_vdupq_laneq_s16 (__a, __b);
  12268. }
  12269. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  12270. vdupq_laneq_s32 (int32x4_t __a, const int __b)
  12271. {
  12272. return __aarch64_vdupq_laneq_s32 (__a, __b);
  12273. }
  12274. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  12275. vdupq_laneq_s64 (int64x2_t __a, const int __b)
  12276. {
  12277. return __aarch64_vdupq_laneq_s64 (__a, __b);
  12278. }
  12279. __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
  12280. vdupq_laneq_u8 (uint8x16_t __a, const int __b)
  12281. {
  12282. return __aarch64_vdupq_laneq_u8 (__a, __b);
  12283. }
  12284. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  12285. vdupq_laneq_u16 (uint16x8_t __a, const int __b)
  12286. {
  12287. return __aarch64_vdupq_laneq_u16 (__a, __b);
  12288. }
  12289. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  12290. vdupq_laneq_u32 (uint32x4_t __a, const int __b)
  12291. {
  12292. return __aarch64_vdupq_laneq_u32 (__a, __b);
  12293. }
  12294. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  12295. vdupq_laneq_u64 (uint64x2_t __a, const int __b)
  12296. {
  12297. return __aarch64_vdupq_laneq_u64 (__a, __b);
  12298. }
  12299. /* vdupb_lane */
  12300. __extension__ static __inline poly8_t __attribute__ ((__always_inline__))
  12301. vdupb_lane_p8 (poly8x8_t __a, const int __b)
  12302. {
  12303. return __aarch64_vget_lane_any (__a, __b);
  12304. }
  12305. __extension__ static __inline int8_t __attribute__ ((__always_inline__))
  12306. vdupb_lane_s8 (int8x8_t __a, const int __b)
  12307. {
  12308. return __aarch64_vget_lane_any (__a, __b);
  12309. }
  12310. __extension__ static __inline uint8_t __attribute__ ((__always_inline__))
  12311. vdupb_lane_u8 (uint8x8_t __a, const int __b)
  12312. {
  12313. return __aarch64_vget_lane_any (__a, __b);
  12314. }
  12315. /* vduph_lane */
  12316. __extension__ static __inline poly16_t __attribute__ ((__always_inline__))
  12317. vduph_lane_p16 (poly16x4_t __a, const int __b)
  12318. {
  12319. return __aarch64_vget_lane_any (__a, __b);
  12320. }
  12321. __extension__ static __inline int16_t __attribute__ ((__always_inline__))
  12322. vduph_lane_s16 (int16x4_t __a, const int __b)
  12323. {
  12324. return __aarch64_vget_lane_any (__a, __b);
  12325. }
  12326. __extension__ static __inline uint16_t __attribute__ ((__always_inline__))
  12327. vduph_lane_u16 (uint16x4_t __a, const int __b)
  12328. {
  12329. return __aarch64_vget_lane_any (__a, __b);
  12330. }
  12331. /* vdups_lane */
  12332. __extension__ static __inline float32_t __attribute__ ((__always_inline__))
  12333. vdups_lane_f32 (float32x2_t __a, const int __b)
  12334. {
  12335. return __aarch64_vget_lane_any (__a, __b);
  12336. }
  12337. __extension__ static __inline int32_t __attribute__ ((__always_inline__))
  12338. vdups_lane_s32 (int32x2_t __a, const int __b)
  12339. {
  12340. return __aarch64_vget_lane_any (__a, __b);
  12341. }
  12342. __extension__ static __inline uint32_t __attribute__ ((__always_inline__))
  12343. vdups_lane_u32 (uint32x2_t __a, const int __b)
  12344. {
  12345. return __aarch64_vget_lane_any (__a, __b);
  12346. }
  12347. /* vdupd_lane */
  12348. __extension__ static __inline float64_t __attribute__ ((__always_inline__))
  12349. vdupd_lane_f64 (float64x1_t __a, const int __b)
  12350. {
  12351. __AARCH64_LANE_CHECK (__a, __b);
  12352. return __a[0];
  12353. }
  12354. __extension__ static __inline int64_t __attribute__ ((__always_inline__))
  12355. vdupd_lane_s64 (int64x1_t __a, const int __b)
  12356. {
  12357. __AARCH64_LANE_CHECK (__a, __b);
  12358. return __a[0];
  12359. }
  12360. __extension__ static __inline uint64_t __attribute__ ((__always_inline__))
  12361. vdupd_lane_u64 (uint64x1_t __a, const int __b)
  12362. {
  12363. __AARCH64_LANE_CHECK (__a, __b);
  12364. return __a[0];
  12365. }
  12366. /* vdupb_laneq */
  12367. __extension__ static __inline poly8_t __attribute__ ((__always_inline__))
  12368. vdupb_laneq_p8 (poly8x16_t __a, const int __b)
  12369. {
  12370. return __aarch64_vget_lane_any (__a, __b);
  12371. }
  12372. __extension__ static __inline int8_t __attribute__ ((__always_inline__))
  12373. vdupb_laneq_s8 (int8x16_t __a, const int __attribute__ ((unused)) __b)
  12374. {
  12375. return __aarch64_vget_lane_any (__a, __b);
  12376. }
  12377. __extension__ static __inline uint8_t __attribute__ ((__always_inline__))
  12378. vdupb_laneq_u8 (uint8x16_t __a, const int __b)
  12379. {
  12380. return __aarch64_vget_lane_any (__a, __b);
  12381. }
  12382. /* vduph_laneq */
  12383. __extension__ static __inline poly16_t __attribute__ ((__always_inline__))
  12384. vduph_laneq_p16 (poly16x8_t __a, const int __b)
  12385. {
  12386. return __aarch64_vget_lane_any (__a, __b);
  12387. }
  12388. __extension__ static __inline int16_t __attribute__ ((__always_inline__))
  12389. vduph_laneq_s16 (int16x8_t __a, const int __b)
  12390. {
  12391. return __aarch64_vget_lane_any (__a, __b);
  12392. }
  12393. __extension__ static __inline uint16_t __attribute__ ((__always_inline__))
  12394. vduph_laneq_u16 (uint16x8_t __a, const int __b)
  12395. {
  12396. return __aarch64_vget_lane_any (__a, __b);
  12397. }
  12398. /* vdups_laneq */
  12399. __extension__ static __inline float32_t __attribute__ ((__always_inline__))
  12400. vdups_laneq_f32 (float32x4_t __a, const int __b)
  12401. {
  12402. return __aarch64_vget_lane_any (__a, __b);
  12403. }
  12404. __extension__ static __inline int32_t __attribute__ ((__always_inline__))
  12405. vdups_laneq_s32 (int32x4_t __a, const int __b)
  12406. {
  12407. return __aarch64_vget_lane_any (__a, __b);
  12408. }
  12409. __extension__ static __inline uint32_t __attribute__ ((__always_inline__))
  12410. vdups_laneq_u32 (uint32x4_t __a, const int __b)
  12411. {
  12412. return __aarch64_vget_lane_any (__a, __b);
  12413. }
  12414. /* vdupd_laneq */
  12415. __extension__ static __inline float64_t __attribute__ ((__always_inline__))
  12416. vdupd_laneq_f64 (float64x2_t __a, const int __b)
  12417. {
  12418. return __aarch64_vget_lane_any (__a, __b);
  12419. }
  12420. __extension__ static __inline int64_t __attribute__ ((__always_inline__))
  12421. vdupd_laneq_s64 (int64x2_t __a, const int __b)
  12422. {
  12423. return __aarch64_vget_lane_any (__a, __b);
  12424. }
  12425. __extension__ static __inline uint64_t __attribute__ ((__always_inline__))
  12426. vdupd_laneq_u64 (uint64x2_t __a, const int __b)
  12427. {
  12428. return __aarch64_vget_lane_any (__a, __b);
  12429. }
  12430. /* vext */
  12431. __extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
  12432. vext_f32 (float32x2_t __a, float32x2_t __b, __const int __c)
  12433. {
  12434. __AARCH64_LANE_CHECK (__a, __c);
  12435. #ifdef __AARCH64EB__
  12436. return __builtin_shuffle (__b, __a, (uint32x2_t) {2-__c, 3-__c});
  12437. #else
  12438. return __builtin_shuffle (__a, __b, (uint32x2_t) {__c, __c+1});
  12439. #endif
  12440. }
  12441. __extension__ static __inline float64x1_t __attribute__ ((__always_inline__))
  12442. vext_f64 (float64x1_t __a, float64x1_t __b, __const int __c)
  12443. {
  12444. __AARCH64_LANE_CHECK (__a, __c);
  12445. /* The only possible index to the assembler instruction returns element 0. */
  12446. return __a;
  12447. }
  12448. __extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
  12449. vext_p8 (poly8x8_t __a, poly8x8_t __b, __const int __c)
  12450. {
  12451. __AARCH64_LANE_CHECK (__a, __c);
  12452. #ifdef __AARCH64EB__
  12453. return __builtin_shuffle (__b, __a, (uint8x8_t)
  12454. {8-__c, 9-__c, 10-__c, 11-__c, 12-__c, 13-__c, 14-__c, 15-__c});
  12455. #else
  12456. return __builtin_shuffle (__a, __b,
  12457. (uint8x8_t) {__c, __c+1, __c+2, __c+3, __c+4, __c+5, __c+6, __c+7});
  12458. #endif
  12459. }
  12460. __extension__ static __inline poly16x4_t __attribute__ ((__always_inline__))
  12461. vext_p16 (poly16x4_t __a, poly16x4_t __b, __const int __c)
  12462. {
  12463. __AARCH64_LANE_CHECK (__a, __c);
  12464. #ifdef __AARCH64EB__
  12465. return __builtin_shuffle (__b, __a,
  12466. (uint16x4_t) {4-__c, 5-__c, 6-__c, 7-__c});
  12467. #else
  12468. return __builtin_shuffle (__a, __b, (uint16x4_t) {__c, __c+1, __c+2, __c+3});
  12469. #endif
  12470. }
  12471. __extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
  12472. vext_s8 (int8x8_t __a, int8x8_t __b, __const int __c)
  12473. {
  12474. __AARCH64_LANE_CHECK (__a, __c);
  12475. #ifdef __AARCH64EB__
  12476. return __builtin_shuffle (__b, __a, (uint8x8_t)
  12477. {8-__c, 9-__c, 10-__c, 11-__c, 12-__c, 13-__c, 14-__c, 15-__c});
  12478. #else
  12479. return __builtin_shuffle (__a, __b,
  12480. (uint8x8_t) {__c, __c+1, __c+2, __c+3, __c+4, __c+5, __c+6, __c+7});
  12481. #endif
  12482. }
  12483. __extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
  12484. vext_s16 (int16x4_t __a, int16x4_t __b, __const int __c)
  12485. {
  12486. __AARCH64_LANE_CHECK (__a, __c);
  12487. #ifdef __AARCH64EB__
  12488. return __builtin_shuffle (__b, __a,
  12489. (uint16x4_t) {4-__c, 5-__c, 6-__c, 7-__c});
  12490. #else
  12491. return __builtin_shuffle (__a, __b, (uint16x4_t) {__c, __c+1, __c+2, __c+3});
  12492. #endif
  12493. }
  12494. __extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
  12495. vext_s32 (int32x2_t __a, int32x2_t __b, __const int __c)
  12496. {
  12497. __AARCH64_LANE_CHECK (__a, __c);
  12498. #ifdef __AARCH64EB__
  12499. return __builtin_shuffle (__b, __a, (uint32x2_t) {2-__c, 3-__c});
  12500. #else
  12501. return __builtin_shuffle (__a, __b, (uint32x2_t) {__c, __c+1});
  12502. #endif
  12503. }
  12504. __extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
  12505. vext_s64 (int64x1_t __a, int64x1_t __b, __const int __c)
  12506. {
  12507. __AARCH64_LANE_CHECK (__a, __c);
  12508. /* The only possible index to the assembler instruction returns element 0. */
  12509. return __a;
  12510. }
  12511. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  12512. vext_u8 (uint8x8_t __a, uint8x8_t __b, __const int __c)
  12513. {
  12514. __AARCH64_LANE_CHECK (__a, __c);
  12515. #ifdef __AARCH64EB__
  12516. return __builtin_shuffle (__b, __a, (uint8x8_t)
  12517. {8-__c, 9-__c, 10-__c, 11-__c, 12-__c, 13-__c, 14-__c, 15-__c});
  12518. #else
  12519. return __builtin_shuffle (__a, __b,
  12520. (uint8x8_t) {__c, __c+1, __c+2, __c+3, __c+4, __c+5, __c+6, __c+7});
  12521. #endif
  12522. }
  12523. __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
  12524. vext_u16 (uint16x4_t __a, uint16x4_t __b, __const int __c)
  12525. {
  12526. __AARCH64_LANE_CHECK (__a, __c);
  12527. #ifdef __AARCH64EB__
  12528. return __builtin_shuffle (__b, __a,
  12529. (uint16x4_t) {4-__c, 5-__c, 6-__c, 7-__c});
  12530. #else
  12531. return __builtin_shuffle (__a, __b, (uint16x4_t) {__c, __c+1, __c+2, __c+3});
  12532. #endif
  12533. }
  12534. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  12535. vext_u32 (uint32x2_t __a, uint32x2_t __b, __const int __c)
  12536. {
  12537. __AARCH64_LANE_CHECK (__a, __c);
  12538. #ifdef __AARCH64EB__
  12539. return __builtin_shuffle (__b, __a, (uint32x2_t) {2-__c, 3-__c});
  12540. #else
  12541. return __builtin_shuffle (__a, __b, (uint32x2_t) {__c, __c+1});
  12542. #endif
  12543. }
  12544. __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
  12545. vext_u64 (uint64x1_t __a, uint64x1_t __b, __const int __c)
  12546. {
  12547. __AARCH64_LANE_CHECK (__a, __c);
  12548. /* The only possible index to the assembler instruction returns element 0. */
  12549. return __a;
  12550. }
  12551. __extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
  12552. vextq_f32 (float32x4_t __a, float32x4_t __b, __const int __c)
  12553. {
  12554. __AARCH64_LANE_CHECK (__a, __c);
  12555. #ifdef __AARCH64EB__
  12556. return __builtin_shuffle (__b, __a,
  12557. (uint32x4_t) {4-__c, 5-__c, 6-__c, 7-__c});
  12558. #else
  12559. return __builtin_shuffle (__a, __b, (uint32x4_t) {__c, __c+1, __c+2, __c+3});
  12560. #endif
  12561. }
  12562. __extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
  12563. vextq_f64 (float64x2_t __a, float64x2_t __b, __const int __c)
  12564. {
  12565. __AARCH64_LANE_CHECK (__a, __c);
  12566. #ifdef __AARCH64EB__
  12567. return __builtin_shuffle (__b, __a, (uint64x2_t) {2-__c, 3-__c});
  12568. #else
  12569. return __builtin_shuffle (__a, __b, (uint64x2_t) {__c, __c+1});
  12570. #endif
  12571. }
  12572. __extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
  12573. vextq_p8 (poly8x16_t __a, poly8x16_t __b, __const int __c)
  12574. {
  12575. __AARCH64_LANE_CHECK (__a, __c);
  12576. #ifdef __AARCH64EB__
  12577. return __builtin_shuffle (__b, __a, (uint8x16_t)
  12578. {16-__c, 17-__c, 18-__c, 19-__c, 20-__c, 21-__c, 22-__c, 23-__c,
  12579. 24-__c, 25-__c, 26-__c, 27-__c, 28-__c, 29-__c, 30-__c, 31-__c});
  12580. #else
  12581. return __builtin_shuffle (__a, __b, (uint8x16_t)
  12582. {__c, __c+1, __c+2, __c+3, __c+4, __c+5, __c+6, __c+7,
  12583. __c+8, __c+9, __c+10, __c+11, __c+12, __c+13, __c+14, __c+15});
  12584. #endif
  12585. }
  12586. __extension__ static __inline poly16x8_t __attribute__ ((__always_inline__))
  12587. vextq_p16 (poly16x8_t __a, poly16x8_t __b, __const int __c)
  12588. {
  12589. __AARCH64_LANE_CHECK (__a, __c);
  12590. #ifdef __AARCH64EB__
  12591. return __builtin_shuffle (__b, __a, (uint16x8_t)
  12592. {8-__c, 9-__c, 10-__c, 11-__c, 12-__c, 13-__c, 14-__c, 15-__c});
  12593. #else
  12594. return __builtin_shuffle (__a, __b,
  12595. (uint16x8_t) {__c, __c+1, __c+2, __c+3, __c+4, __c+5, __c+6, __c+7});
  12596. #endif
  12597. }
  12598. __extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
  12599. vextq_s8 (int8x16_t __a, int8x16_t __b, __const int __c)
  12600. {
  12601. __AARCH64_LANE_CHECK (__a, __c);
  12602. #ifdef __AARCH64EB__
  12603. return __builtin_shuffle (__b, __a, (uint8x16_t)
  12604. {16-__c, 17-__c, 18-__c, 19-__c, 20-__c, 21-__c, 22-__c, 23-__c,
  12605. 24-__c, 25-__c, 26-__c, 27-__c, 28-__c, 29-__c, 30-__c, 31-__c});
  12606. #else
  12607. return __builtin_shuffle (__a, __b, (uint8x16_t)
  12608. {__c, __c+1, __c+2, __c+3, __c+4, __c+5, __c+6, __c+7,
  12609. __c+8, __c+9, __c+10, __c+11, __c+12, __c+13, __c+14, __c+15});
  12610. #endif
  12611. }
  12612. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  12613. vextq_s16 (int16x8_t __a, int16x8_t __b, __const int __c)
  12614. {
  12615. __AARCH64_LANE_CHECK (__a, __c);
  12616. #ifdef __AARCH64EB__
  12617. return __builtin_shuffle (__b, __a, (uint16x8_t)
  12618. {8-__c, 9-__c, 10-__c, 11-__c, 12-__c, 13-__c, 14-__c, 15-__c});
  12619. #else
  12620. return __builtin_shuffle (__a, __b,
  12621. (uint16x8_t) {__c, __c+1, __c+2, __c+3, __c+4, __c+5, __c+6, __c+7});
  12622. #endif
  12623. }
  12624. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  12625. vextq_s32 (int32x4_t __a, int32x4_t __b, __const int __c)
  12626. {
  12627. __AARCH64_LANE_CHECK (__a, __c);
  12628. #ifdef __AARCH64EB__
  12629. return __builtin_shuffle (__b, __a,
  12630. (uint32x4_t) {4-__c, 5-__c, 6-__c, 7-__c});
  12631. #else
  12632. return __builtin_shuffle (__a, __b, (uint32x4_t) {__c, __c+1, __c+2, __c+3});
  12633. #endif
  12634. }
  12635. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  12636. vextq_s64 (int64x2_t __a, int64x2_t __b, __const int __c)
  12637. {
  12638. __AARCH64_LANE_CHECK (__a, __c);
  12639. #ifdef __AARCH64EB__
  12640. return __builtin_shuffle (__b, __a, (uint64x2_t) {2-__c, 3-__c});
  12641. #else
  12642. return __builtin_shuffle (__a, __b, (uint64x2_t) {__c, __c+1});
  12643. #endif
  12644. }
  12645. __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
  12646. vextq_u8 (uint8x16_t __a, uint8x16_t __b, __const int __c)
  12647. {
  12648. __AARCH64_LANE_CHECK (__a, __c);
  12649. #ifdef __AARCH64EB__
  12650. return __builtin_shuffle (__b, __a, (uint8x16_t)
  12651. {16-__c, 17-__c, 18-__c, 19-__c, 20-__c, 21-__c, 22-__c, 23-__c,
  12652. 24-__c, 25-__c, 26-__c, 27-__c, 28-__c, 29-__c, 30-__c, 31-__c});
  12653. #else
  12654. return __builtin_shuffle (__a, __b, (uint8x16_t)
  12655. {__c, __c+1, __c+2, __c+3, __c+4, __c+5, __c+6, __c+7,
  12656. __c+8, __c+9, __c+10, __c+11, __c+12, __c+13, __c+14, __c+15});
  12657. #endif
  12658. }
  12659. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  12660. vextq_u16 (uint16x8_t __a, uint16x8_t __b, __const int __c)
  12661. {
  12662. __AARCH64_LANE_CHECK (__a, __c);
  12663. #ifdef __AARCH64EB__
  12664. return __builtin_shuffle (__b, __a, (uint16x8_t)
  12665. {8-__c, 9-__c, 10-__c, 11-__c, 12-__c, 13-__c, 14-__c, 15-__c});
  12666. #else
  12667. return __builtin_shuffle (__a, __b,
  12668. (uint16x8_t) {__c, __c+1, __c+2, __c+3, __c+4, __c+5, __c+6, __c+7});
  12669. #endif
  12670. }
  12671. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  12672. vextq_u32 (uint32x4_t __a, uint32x4_t __b, __const int __c)
  12673. {
  12674. __AARCH64_LANE_CHECK (__a, __c);
  12675. #ifdef __AARCH64EB__
  12676. return __builtin_shuffle (__b, __a,
  12677. (uint32x4_t) {4-__c, 5-__c, 6-__c, 7-__c});
  12678. #else
  12679. return __builtin_shuffle (__a, __b, (uint32x4_t) {__c, __c+1, __c+2, __c+3});
  12680. #endif
  12681. }
  12682. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  12683. vextq_u64 (uint64x2_t __a, uint64x2_t __b, __const int __c)
  12684. {
  12685. __AARCH64_LANE_CHECK (__a, __c);
  12686. #ifdef __AARCH64EB__
  12687. return __builtin_shuffle (__b, __a, (uint64x2_t) {2-__c, 3-__c});
  12688. #else
  12689. return __builtin_shuffle (__a, __b, (uint64x2_t) {__c, __c+1});
  12690. #endif
  12691. }
  12692. /* vfma */
  12693. __extension__ static __inline float64x1_t __attribute__ ((__always_inline__))
  12694. vfma_f64 (float64x1_t __a, float64x1_t __b, float64x1_t __c)
  12695. {
  12696. return (float64x1_t) {__builtin_fma (__b[0], __c[0], __a[0])};
  12697. }
  12698. __extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
  12699. vfma_f32 (float32x2_t __a, float32x2_t __b, float32x2_t __c)
  12700. {
  12701. return __builtin_aarch64_fmav2sf (__b, __c, __a);
  12702. }
  12703. __extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
  12704. vfmaq_f32 (float32x4_t __a, float32x4_t __b, float32x4_t __c)
  12705. {
  12706. return __builtin_aarch64_fmav4sf (__b, __c, __a);
  12707. }
  12708. __extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
  12709. vfmaq_f64 (float64x2_t __a, float64x2_t __b, float64x2_t __c)
  12710. {
  12711. return __builtin_aarch64_fmav2df (__b, __c, __a);
  12712. }
  12713. __extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
  12714. vfma_n_f32 (float32x2_t __a, float32x2_t __b, float32_t __c)
  12715. {
  12716. return __builtin_aarch64_fmav2sf (__b, vdup_n_f32 (__c), __a);
  12717. }
  12718. __extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
  12719. vfmaq_n_f32 (float32x4_t __a, float32x4_t __b, float32_t __c)
  12720. {
  12721. return __builtin_aarch64_fmav4sf (__b, vdupq_n_f32 (__c), __a);
  12722. }
  12723. __extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
  12724. vfmaq_n_f64 (float64x2_t __a, float64x2_t __b, float64_t __c)
  12725. {
  12726. return __builtin_aarch64_fmav2df (__b, vdupq_n_f64 (__c), __a);
  12727. }
  12728. /* vfma_lane */
  12729. __extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
  12730. vfma_lane_f32 (float32x2_t __a, float32x2_t __b,
  12731. float32x2_t __c, const int __lane)
  12732. {
  12733. return __builtin_aarch64_fmav2sf (__b,
  12734. __aarch64_vdup_lane_f32 (__c, __lane),
  12735. __a);
  12736. }
  12737. __extension__ static __inline float64x1_t __attribute__ ((__always_inline__))
  12738. vfma_lane_f64 (float64x1_t __a, float64x1_t __b,
  12739. float64x1_t __c, const int __lane)
  12740. {
  12741. return (float64x1_t) {__builtin_fma (__b[0], __c[0], __a[0])};
  12742. }
  12743. __extension__ static __inline float64_t __attribute__ ((__always_inline__))
  12744. vfmad_lane_f64 (float64_t __a, float64_t __b,
  12745. float64x1_t __c, const int __lane)
  12746. {
  12747. return __builtin_fma (__b, __c[0], __a);
  12748. }
  12749. __extension__ static __inline float32_t __attribute__ ((__always_inline__))
  12750. vfmas_lane_f32 (float32_t __a, float32_t __b,
  12751. float32x2_t __c, const int __lane)
  12752. {
  12753. return __builtin_fmaf (__b, __aarch64_vget_lane_any (__c, __lane), __a);
  12754. }
  12755. /* vfma_laneq */
  12756. __extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
  12757. vfma_laneq_f32 (float32x2_t __a, float32x2_t __b,
  12758. float32x4_t __c, const int __lane)
  12759. {
  12760. return __builtin_aarch64_fmav2sf (__b,
  12761. __aarch64_vdup_laneq_f32 (__c, __lane),
  12762. __a);
  12763. }
  12764. __extension__ static __inline float64x1_t __attribute__ ((__always_inline__))
  12765. vfma_laneq_f64 (float64x1_t __a, float64x1_t __b,
  12766. float64x2_t __c, const int __lane)
  12767. {
  12768. float64_t __c0 = __aarch64_vget_lane_any (__c, __lane);
  12769. return (float64x1_t) {__builtin_fma (__b[0], __c0, __a[0])};
  12770. }
  12771. __extension__ static __inline float64_t __attribute__ ((__always_inline__))
  12772. vfmad_laneq_f64 (float64_t __a, float64_t __b,
  12773. float64x2_t __c, const int __lane)
  12774. {
  12775. return __builtin_fma (__b, __aarch64_vget_lane_any (__c, __lane), __a);
  12776. }
  12777. __extension__ static __inline float32_t __attribute__ ((__always_inline__))
  12778. vfmas_laneq_f32 (float32_t __a, float32_t __b,
  12779. float32x4_t __c, const int __lane)
  12780. {
  12781. return __builtin_fmaf (__b, __aarch64_vget_lane_any (__c, __lane), __a);
  12782. }
  12783. /* vfmaq_lane */
  12784. __extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
  12785. vfmaq_lane_f32 (float32x4_t __a, float32x4_t __b,
  12786. float32x2_t __c, const int __lane)
  12787. {
  12788. return __builtin_aarch64_fmav4sf (__b,
  12789. __aarch64_vdupq_lane_f32 (__c, __lane),
  12790. __a);
  12791. }
  12792. __extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
  12793. vfmaq_lane_f64 (float64x2_t __a, float64x2_t __b,
  12794. float64x1_t __c, const int __lane)
  12795. {
  12796. return __builtin_aarch64_fmav2df (__b, vdupq_n_f64 (__c[0]), __a);
  12797. }
  12798. /* vfmaq_laneq */
  12799. __extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
  12800. vfmaq_laneq_f32 (float32x4_t __a, float32x4_t __b,
  12801. float32x4_t __c, const int __lane)
  12802. {
  12803. return __builtin_aarch64_fmav4sf (__b,
  12804. __aarch64_vdupq_laneq_f32 (__c, __lane),
  12805. __a);
  12806. }
  12807. __extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
  12808. vfmaq_laneq_f64 (float64x2_t __a, float64x2_t __b,
  12809. float64x2_t __c, const int __lane)
  12810. {
  12811. return __builtin_aarch64_fmav2df (__b,
  12812. __aarch64_vdupq_laneq_f64 (__c, __lane),
  12813. __a);
  12814. }
  12815. /* vfms */
  12816. __extension__ static __inline float64x1_t __attribute__ ((__always_inline__))
  12817. vfms_f64 (float64x1_t __a, float64x1_t __b, float64x1_t __c)
  12818. {
  12819. return (float64x1_t) {__builtin_fma (-__b[0], __c[0], __a[0])};
  12820. }
  12821. __extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
  12822. vfms_f32 (float32x2_t __a, float32x2_t __b, float32x2_t __c)
  12823. {
  12824. return __builtin_aarch64_fmav2sf (-__b, __c, __a);
  12825. }
  12826. __extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
  12827. vfmsq_f32 (float32x4_t __a, float32x4_t __b, float32x4_t __c)
  12828. {
  12829. return __builtin_aarch64_fmav4sf (-__b, __c, __a);
  12830. }
  12831. __extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
  12832. vfmsq_f64 (float64x2_t __a, float64x2_t __b, float64x2_t __c)
  12833. {
  12834. return __builtin_aarch64_fmav2df (-__b, __c, __a);
  12835. }
  12836. /* vfms_lane */
  12837. __extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
  12838. vfms_lane_f32 (float32x2_t __a, float32x2_t __b,
  12839. float32x2_t __c, const int __lane)
  12840. {
  12841. return __builtin_aarch64_fmav2sf (-__b,
  12842. __aarch64_vdup_lane_f32 (__c, __lane),
  12843. __a);
  12844. }
  12845. __extension__ static __inline float64x1_t __attribute__ ((__always_inline__))
  12846. vfms_lane_f64 (float64x1_t __a, float64x1_t __b,
  12847. float64x1_t __c, const int __lane)
  12848. {
  12849. return (float64x1_t) {__builtin_fma (-__b[0], __c[0], __a[0])};
  12850. }
  12851. __extension__ static __inline float64_t __attribute__ ((__always_inline__))
  12852. vfmsd_lane_f64 (float64_t __a, float64_t __b,
  12853. float64x1_t __c, const int __lane)
  12854. {
  12855. return __builtin_fma (-__b, __c[0], __a);
  12856. }
  12857. __extension__ static __inline float32_t __attribute__ ((__always_inline__))
  12858. vfmss_lane_f32 (float32_t __a, float32_t __b,
  12859. float32x2_t __c, const int __lane)
  12860. {
  12861. return __builtin_fmaf (-__b, __aarch64_vget_lane_any (__c, __lane), __a);
  12862. }
  12863. /* vfms_laneq */
  12864. __extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
  12865. vfms_laneq_f32 (float32x2_t __a, float32x2_t __b,
  12866. float32x4_t __c, const int __lane)
  12867. {
  12868. return __builtin_aarch64_fmav2sf (-__b,
  12869. __aarch64_vdup_laneq_f32 (__c, __lane),
  12870. __a);
  12871. }
  12872. __extension__ static __inline float64x1_t __attribute__ ((__always_inline__))
  12873. vfms_laneq_f64 (float64x1_t __a, float64x1_t __b,
  12874. float64x2_t __c, const int __lane)
  12875. {
  12876. float64_t __c0 = __aarch64_vget_lane_any (__c, __lane);
  12877. return (float64x1_t) {__builtin_fma (-__b[0], __c0, __a[0])};
  12878. }
  12879. __extension__ static __inline float64_t __attribute__ ((__always_inline__))
  12880. vfmsd_laneq_f64 (float64_t __a, float64_t __b,
  12881. float64x2_t __c, const int __lane)
  12882. {
  12883. return __builtin_fma (-__b, __aarch64_vget_lane_any (__c, __lane), __a);
  12884. }
  12885. __extension__ static __inline float32_t __attribute__ ((__always_inline__))
  12886. vfmss_laneq_f32 (float32_t __a, float32_t __b,
  12887. float32x4_t __c, const int __lane)
  12888. {
  12889. return __builtin_fmaf (-__b, __aarch64_vget_lane_any (__c, __lane), __a);
  12890. }
  12891. /* vfmsq_lane */
  12892. __extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
  12893. vfmsq_lane_f32 (float32x4_t __a, float32x4_t __b,
  12894. float32x2_t __c, const int __lane)
  12895. {
  12896. return __builtin_aarch64_fmav4sf (-__b,
  12897. __aarch64_vdupq_lane_f32 (__c, __lane),
  12898. __a);
  12899. }
  12900. __extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
  12901. vfmsq_lane_f64 (float64x2_t __a, float64x2_t __b,
  12902. float64x1_t __c, const int __lane)
  12903. {
  12904. return __builtin_aarch64_fmav2df (-__b, vdupq_n_f64 (__c[0]), __a);
  12905. }
  12906. /* vfmsq_laneq */
  12907. __extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
  12908. vfmsq_laneq_f32 (float32x4_t __a, float32x4_t __b,
  12909. float32x4_t __c, const int __lane)
  12910. {
  12911. return __builtin_aarch64_fmav4sf (-__b,
  12912. __aarch64_vdupq_laneq_f32 (__c, __lane),
  12913. __a);
  12914. }
  12915. __extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
  12916. vfmsq_laneq_f64 (float64x2_t __a, float64x2_t __b,
  12917. float64x2_t __c, const int __lane)
  12918. {
  12919. return __builtin_aarch64_fmav2df (-__b,
  12920. __aarch64_vdupq_laneq_f64 (__c, __lane),
  12921. __a);
  12922. }
  12923. /* vld1 */
  12924. __extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
  12925. vld1_f32 (const float32_t *a)
  12926. {
  12927. return __builtin_aarch64_ld1v2sf ((const __builtin_aarch64_simd_sf *) a);
  12928. }
  12929. __extension__ static __inline float64x1_t __attribute__ ((__always_inline__))
  12930. vld1_f64 (const float64_t *a)
  12931. {
  12932. return (float64x1_t) {*a};
  12933. }
  12934. __extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
  12935. vld1_p8 (const poly8_t *a)
  12936. {
  12937. return (poly8x8_t)
  12938. __builtin_aarch64_ld1v8qi ((const __builtin_aarch64_simd_qi *) a);
  12939. }
  12940. __extension__ static __inline poly16x4_t __attribute__ ((__always_inline__))
  12941. vld1_p16 (const poly16_t *a)
  12942. {
  12943. return (poly16x4_t)
  12944. __builtin_aarch64_ld1v4hi ((const __builtin_aarch64_simd_hi *) a);
  12945. }
  12946. __extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
  12947. vld1_s8 (const int8_t *a)
  12948. {
  12949. return __builtin_aarch64_ld1v8qi ((const __builtin_aarch64_simd_qi *) a);
  12950. }
  12951. __extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
  12952. vld1_s16 (const int16_t *a)
  12953. {
  12954. return __builtin_aarch64_ld1v4hi ((const __builtin_aarch64_simd_hi *) a);
  12955. }
  12956. __extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
  12957. vld1_s32 (const int32_t *a)
  12958. {
  12959. return __builtin_aarch64_ld1v2si ((const __builtin_aarch64_simd_si *) a);
  12960. }
  12961. __extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
  12962. vld1_s64 (const int64_t *a)
  12963. {
  12964. return (int64x1_t) {*a};
  12965. }
  12966. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  12967. vld1_u8 (const uint8_t *a)
  12968. {
  12969. return (uint8x8_t)
  12970. __builtin_aarch64_ld1v8qi ((const __builtin_aarch64_simd_qi *) a);
  12971. }
  12972. __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
  12973. vld1_u16 (const uint16_t *a)
  12974. {
  12975. return (uint16x4_t)
  12976. __builtin_aarch64_ld1v4hi ((const __builtin_aarch64_simd_hi *) a);
  12977. }
  12978. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  12979. vld1_u32 (const uint32_t *a)
  12980. {
  12981. return (uint32x2_t)
  12982. __builtin_aarch64_ld1v2si ((const __builtin_aarch64_simd_si *) a);
  12983. }
  12984. __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
  12985. vld1_u64 (const uint64_t *a)
  12986. {
  12987. return (uint64x1_t) {*a};
  12988. }
  12989. /* vld1q */
  12990. __extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
  12991. vld1q_f32 (const float32_t *a)
  12992. {
  12993. return __builtin_aarch64_ld1v4sf ((const __builtin_aarch64_simd_sf *) a);
  12994. }
  12995. __extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
  12996. vld1q_f64 (const float64_t *a)
  12997. {
  12998. return __builtin_aarch64_ld1v2df ((const __builtin_aarch64_simd_df *) a);
  12999. }
  13000. __extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
  13001. vld1q_p8 (const poly8_t *a)
  13002. {
  13003. return (poly8x16_t)
  13004. __builtin_aarch64_ld1v16qi ((const __builtin_aarch64_simd_qi *) a);
  13005. }
  13006. __extension__ static __inline poly16x8_t __attribute__ ((__always_inline__))
  13007. vld1q_p16 (const poly16_t *a)
  13008. {
  13009. return (poly16x8_t)
  13010. __builtin_aarch64_ld1v8hi ((const __builtin_aarch64_simd_hi *) a);
  13011. }
  13012. __extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
  13013. vld1q_s8 (const int8_t *a)
  13014. {
  13015. return __builtin_aarch64_ld1v16qi ((const __builtin_aarch64_simd_qi *) a);
  13016. }
  13017. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  13018. vld1q_s16 (const int16_t *a)
  13019. {
  13020. return __builtin_aarch64_ld1v8hi ((const __builtin_aarch64_simd_hi *) a);
  13021. }
  13022. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  13023. vld1q_s32 (const int32_t *a)
  13024. {
  13025. return __builtin_aarch64_ld1v4si ((const __builtin_aarch64_simd_si *) a);
  13026. }
  13027. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  13028. vld1q_s64 (const int64_t *a)
  13029. {
  13030. return __builtin_aarch64_ld1v2di ((const __builtin_aarch64_simd_di *) a);
  13031. }
  13032. __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
  13033. vld1q_u8 (const uint8_t *a)
  13034. {
  13035. return (uint8x16_t)
  13036. __builtin_aarch64_ld1v16qi ((const __builtin_aarch64_simd_qi *) a);
  13037. }
  13038. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  13039. vld1q_u16 (const uint16_t *a)
  13040. {
  13041. return (uint16x8_t)
  13042. __builtin_aarch64_ld1v8hi ((const __builtin_aarch64_simd_hi *) a);
  13043. }
  13044. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  13045. vld1q_u32 (const uint32_t *a)
  13046. {
  13047. return (uint32x4_t)
  13048. __builtin_aarch64_ld1v4si ((const __builtin_aarch64_simd_si *) a);
  13049. }
  13050. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  13051. vld1q_u64 (const uint64_t *a)
  13052. {
  13053. return (uint64x2_t)
  13054. __builtin_aarch64_ld1v2di ((const __builtin_aarch64_simd_di *) a);
  13055. }
  13056. /* vld1_dup */
  13057. __extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
  13058. vld1_dup_f32 (const float32_t* __a)
  13059. {
  13060. return vdup_n_f32 (*__a);
  13061. }
  13062. __extension__ static __inline float64x1_t __attribute__ ((__always_inline__))
  13063. vld1_dup_f64 (const float64_t* __a)
  13064. {
  13065. return vdup_n_f64 (*__a);
  13066. }
  13067. __extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
  13068. vld1_dup_p8 (const poly8_t* __a)
  13069. {
  13070. return vdup_n_p8 (*__a);
  13071. }
  13072. __extension__ static __inline poly16x4_t __attribute__ ((__always_inline__))
  13073. vld1_dup_p16 (const poly16_t* __a)
  13074. {
  13075. return vdup_n_p16 (*__a);
  13076. }
  13077. __extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
  13078. vld1_dup_s8 (const int8_t* __a)
  13079. {
  13080. return vdup_n_s8 (*__a);
  13081. }
  13082. __extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
  13083. vld1_dup_s16 (const int16_t* __a)
  13084. {
  13085. return vdup_n_s16 (*__a);
  13086. }
  13087. __extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
  13088. vld1_dup_s32 (const int32_t* __a)
  13089. {
  13090. return vdup_n_s32 (*__a);
  13091. }
  13092. __extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
  13093. vld1_dup_s64 (const int64_t* __a)
  13094. {
  13095. return vdup_n_s64 (*__a);
  13096. }
  13097. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  13098. vld1_dup_u8 (const uint8_t* __a)
  13099. {
  13100. return vdup_n_u8 (*__a);
  13101. }
  13102. __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
  13103. vld1_dup_u16 (const uint16_t* __a)
  13104. {
  13105. return vdup_n_u16 (*__a);
  13106. }
  13107. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  13108. vld1_dup_u32 (const uint32_t* __a)
  13109. {
  13110. return vdup_n_u32 (*__a);
  13111. }
  13112. __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
  13113. vld1_dup_u64 (const uint64_t* __a)
  13114. {
  13115. return vdup_n_u64 (*__a);
  13116. }
  13117. /* vld1q_dup */
  13118. __extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
  13119. vld1q_dup_f32 (const float32_t* __a)
  13120. {
  13121. return vdupq_n_f32 (*__a);
  13122. }
  13123. __extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
  13124. vld1q_dup_f64 (const float64_t* __a)
  13125. {
  13126. return vdupq_n_f64 (*__a);
  13127. }
  13128. __extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
  13129. vld1q_dup_p8 (const poly8_t* __a)
  13130. {
  13131. return vdupq_n_p8 (*__a);
  13132. }
  13133. __extension__ static __inline poly16x8_t __attribute__ ((__always_inline__))
  13134. vld1q_dup_p16 (const poly16_t* __a)
  13135. {
  13136. return vdupq_n_p16 (*__a);
  13137. }
  13138. __extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
  13139. vld1q_dup_s8 (const int8_t* __a)
  13140. {
  13141. return vdupq_n_s8 (*__a);
  13142. }
  13143. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  13144. vld1q_dup_s16 (const int16_t* __a)
  13145. {
  13146. return vdupq_n_s16 (*__a);
  13147. }
  13148. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  13149. vld1q_dup_s32 (const int32_t* __a)
  13150. {
  13151. return vdupq_n_s32 (*__a);
  13152. }
  13153. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  13154. vld1q_dup_s64 (const int64_t* __a)
  13155. {
  13156. return vdupq_n_s64 (*__a);
  13157. }
  13158. __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
  13159. vld1q_dup_u8 (const uint8_t* __a)
  13160. {
  13161. return vdupq_n_u8 (*__a);
  13162. }
  13163. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  13164. vld1q_dup_u16 (const uint16_t* __a)
  13165. {
  13166. return vdupq_n_u16 (*__a);
  13167. }
  13168. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  13169. vld1q_dup_u32 (const uint32_t* __a)
  13170. {
  13171. return vdupq_n_u32 (*__a);
  13172. }
  13173. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  13174. vld1q_dup_u64 (const uint64_t* __a)
  13175. {
  13176. return vdupq_n_u64 (*__a);
  13177. }
  13178. /* vld1_lane */
  13179. __extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
  13180. vld1_lane_f32 (const float32_t *__src, float32x2_t __vec, const int __lane)
  13181. {
  13182. return __aarch64_vset_lane_any (*__src, __vec, __lane);
  13183. }
  13184. __extension__ static __inline float64x1_t __attribute__ ((__always_inline__))
  13185. vld1_lane_f64 (const float64_t *__src, float64x1_t __vec, const int __lane)
  13186. {
  13187. return __aarch64_vset_lane_any (*__src, __vec, __lane);
  13188. }
  13189. __extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
  13190. vld1_lane_p8 (const poly8_t *__src, poly8x8_t __vec, const int __lane)
  13191. {
  13192. return __aarch64_vset_lane_any (*__src, __vec, __lane);
  13193. }
  13194. __extension__ static __inline poly16x4_t __attribute__ ((__always_inline__))
  13195. vld1_lane_p16 (const poly16_t *__src, poly16x4_t __vec, const int __lane)
  13196. {
  13197. return __aarch64_vset_lane_any (*__src, __vec, __lane);
  13198. }
  13199. __extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
  13200. vld1_lane_s8 (const int8_t *__src, int8x8_t __vec, const int __lane)
  13201. {
  13202. return __aarch64_vset_lane_any (*__src, __vec, __lane);
  13203. }
  13204. __extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
  13205. vld1_lane_s16 (const int16_t *__src, int16x4_t __vec, const int __lane)
  13206. {
  13207. return __aarch64_vset_lane_any (*__src, __vec, __lane);
  13208. }
  13209. __extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
  13210. vld1_lane_s32 (const int32_t *__src, int32x2_t __vec, const int __lane)
  13211. {
  13212. return __aarch64_vset_lane_any (*__src, __vec, __lane);
  13213. }
  13214. __extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
  13215. vld1_lane_s64 (const int64_t *__src, int64x1_t __vec, const int __lane)
  13216. {
  13217. return __aarch64_vset_lane_any (*__src, __vec, __lane);
  13218. }
  13219. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  13220. vld1_lane_u8 (const uint8_t *__src, uint8x8_t __vec, const int __lane)
  13221. {
  13222. return __aarch64_vset_lane_any (*__src, __vec, __lane);
  13223. }
  13224. __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
  13225. vld1_lane_u16 (const uint16_t *__src, uint16x4_t __vec, const int __lane)
  13226. {
  13227. return __aarch64_vset_lane_any (*__src, __vec, __lane);
  13228. }
  13229. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  13230. vld1_lane_u32 (const uint32_t *__src, uint32x2_t __vec, const int __lane)
  13231. {
  13232. return __aarch64_vset_lane_any (*__src, __vec, __lane);
  13233. }
  13234. __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
  13235. vld1_lane_u64 (const uint64_t *__src, uint64x1_t __vec, const int __lane)
  13236. {
  13237. return __aarch64_vset_lane_any (*__src, __vec, __lane);
  13238. }
  13239. /* vld1q_lane */
  13240. __extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
  13241. vld1q_lane_f32 (const float32_t *__src, float32x4_t __vec, const int __lane)
  13242. {
  13243. return __aarch64_vset_lane_any (*__src, __vec, __lane);
  13244. }
  13245. __extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
  13246. vld1q_lane_f64 (const float64_t *__src, float64x2_t __vec, const int __lane)
  13247. {
  13248. return __aarch64_vset_lane_any (*__src, __vec, __lane);
  13249. }
  13250. __extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
  13251. vld1q_lane_p8 (const poly8_t *__src, poly8x16_t __vec, const int __lane)
  13252. {
  13253. return __aarch64_vset_lane_any (*__src, __vec, __lane);
  13254. }
  13255. __extension__ static __inline poly16x8_t __attribute__ ((__always_inline__))
  13256. vld1q_lane_p16 (const poly16_t *__src, poly16x8_t __vec, const int __lane)
  13257. {
  13258. return __aarch64_vset_lane_any (*__src, __vec, __lane);
  13259. }
  13260. __extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
  13261. vld1q_lane_s8 (const int8_t *__src, int8x16_t __vec, const int __lane)
  13262. {
  13263. return __aarch64_vset_lane_any (*__src, __vec, __lane);
  13264. }
  13265. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  13266. vld1q_lane_s16 (const int16_t *__src, int16x8_t __vec, const int __lane)
  13267. {
  13268. return __aarch64_vset_lane_any (*__src, __vec, __lane);
  13269. }
  13270. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  13271. vld1q_lane_s32 (const int32_t *__src, int32x4_t __vec, const int __lane)
  13272. {
  13273. return __aarch64_vset_lane_any (*__src, __vec, __lane);
  13274. }
  13275. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  13276. vld1q_lane_s64 (const int64_t *__src, int64x2_t __vec, const int __lane)
  13277. {
  13278. return __aarch64_vset_lane_any (*__src, __vec, __lane);
  13279. }
  13280. __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
  13281. vld1q_lane_u8 (const uint8_t *__src, uint8x16_t __vec, const int __lane)
  13282. {
  13283. return __aarch64_vset_lane_any (*__src, __vec, __lane);
  13284. }
  13285. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  13286. vld1q_lane_u16 (const uint16_t *__src, uint16x8_t __vec, const int __lane)
  13287. {
  13288. return __aarch64_vset_lane_any (*__src, __vec, __lane);
  13289. }
  13290. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  13291. vld1q_lane_u32 (const uint32_t *__src, uint32x4_t __vec, const int __lane)
  13292. {
  13293. return __aarch64_vset_lane_any (*__src, __vec, __lane);
  13294. }
  13295. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  13296. vld1q_lane_u64 (const uint64_t *__src, uint64x2_t __vec, const int __lane)
  13297. {
  13298. return __aarch64_vset_lane_any (*__src, __vec, __lane);
  13299. }
  13300. /* vldn */
  13301. __extension__ static __inline int64x1x2_t __attribute__ ((__always_inline__))
  13302. vld2_s64 (const int64_t * __a)
  13303. {
  13304. int64x1x2_t ret;
  13305. __builtin_aarch64_simd_oi __o;
  13306. __o = __builtin_aarch64_ld2di ((const __builtin_aarch64_simd_di *) __a);
  13307. ret.val[0] = (int64x1_t) __builtin_aarch64_get_dregoidi (__o, 0);
  13308. ret.val[1] = (int64x1_t) __builtin_aarch64_get_dregoidi (__o, 1);
  13309. return ret;
  13310. }
  13311. __extension__ static __inline uint64x1x2_t __attribute__ ((__always_inline__))
  13312. vld2_u64 (const uint64_t * __a)
  13313. {
  13314. uint64x1x2_t ret;
  13315. __builtin_aarch64_simd_oi __o;
  13316. __o = __builtin_aarch64_ld2di ((const __builtin_aarch64_simd_di *) __a);
  13317. ret.val[0] = (uint64x1_t) __builtin_aarch64_get_dregoidi (__o, 0);
  13318. ret.val[1] = (uint64x1_t) __builtin_aarch64_get_dregoidi (__o, 1);
  13319. return ret;
  13320. }
  13321. __extension__ static __inline float64x1x2_t __attribute__ ((__always_inline__))
  13322. vld2_f64 (const float64_t * __a)
  13323. {
  13324. float64x1x2_t ret;
  13325. __builtin_aarch64_simd_oi __o;
  13326. __o = __builtin_aarch64_ld2df ((const __builtin_aarch64_simd_df *) __a);
  13327. ret.val[0] = (float64x1_t) {__builtin_aarch64_get_dregoidf (__o, 0)};
  13328. ret.val[1] = (float64x1_t) {__builtin_aarch64_get_dregoidf (__o, 1)};
  13329. return ret;
  13330. }
  13331. __extension__ static __inline int8x8x2_t __attribute__ ((__always_inline__))
  13332. vld2_s8 (const int8_t * __a)
  13333. {
  13334. int8x8x2_t ret;
  13335. __builtin_aarch64_simd_oi __o;
  13336. __o = __builtin_aarch64_ld2v8qi ((const __builtin_aarch64_simd_qi *) __a);
  13337. ret.val[0] = (int8x8_t) __builtin_aarch64_get_dregoiv8qi (__o, 0);
  13338. ret.val[1] = (int8x8_t) __builtin_aarch64_get_dregoiv8qi (__o, 1);
  13339. return ret;
  13340. }
  13341. __extension__ static __inline poly8x8x2_t __attribute__ ((__always_inline__))
  13342. vld2_p8 (const poly8_t * __a)
  13343. {
  13344. poly8x8x2_t ret;
  13345. __builtin_aarch64_simd_oi __o;
  13346. __o = __builtin_aarch64_ld2v8qi ((const __builtin_aarch64_simd_qi *) __a);
  13347. ret.val[0] = (poly8x8_t) __builtin_aarch64_get_dregoiv8qi (__o, 0);
  13348. ret.val[1] = (poly8x8_t) __builtin_aarch64_get_dregoiv8qi (__o, 1);
  13349. return ret;
  13350. }
  13351. __extension__ static __inline int16x4x2_t __attribute__ ((__always_inline__))
  13352. vld2_s16 (const int16_t * __a)
  13353. {
  13354. int16x4x2_t ret;
  13355. __builtin_aarch64_simd_oi __o;
  13356. __o = __builtin_aarch64_ld2v4hi ((const __builtin_aarch64_simd_hi *) __a);
  13357. ret.val[0] = (int16x4_t) __builtin_aarch64_get_dregoiv4hi (__o, 0);
  13358. ret.val[1] = (int16x4_t) __builtin_aarch64_get_dregoiv4hi (__o, 1);
  13359. return ret;
  13360. }
  13361. __extension__ static __inline poly16x4x2_t __attribute__ ((__always_inline__))
  13362. vld2_p16 (const poly16_t * __a)
  13363. {
  13364. poly16x4x2_t ret;
  13365. __builtin_aarch64_simd_oi __o;
  13366. __o = __builtin_aarch64_ld2v4hi ((const __builtin_aarch64_simd_hi *) __a);
  13367. ret.val[0] = (poly16x4_t) __builtin_aarch64_get_dregoiv4hi (__o, 0);
  13368. ret.val[1] = (poly16x4_t) __builtin_aarch64_get_dregoiv4hi (__o, 1);
  13369. return ret;
  13370. }
  13371. __extension__ static __inline int32x2x2_t __attribute__ ((__always_inline__))
  13372. vld2_s32 (const int32_t * __a)
  13373. {
  13374. int32x2x2_t ret;
  13375. __builtin_aarch64_simd_oi __o;
  13376. __o = __builtin_aarch64_ld2v2si ((const __builtin_aarch64_simd_si *) __a);
  13377. ret.val[0] = (int32x2_t) __builtin_aarch64_get_dregoiv2si (__o, 0);
  13378. ret.val[1] = (int32x2_t) __builtin_aarch64_get_dregoiv2si (__o, 1);
  13379. return ret;
  13380. }
  13381. __extension__ static __inline uint8x8x2_t __attribute__ ((__always_inline__))
  13382. vld2_u8 (const uint8_t * __a)
  13383. {
  13384. uint8x8x2_t ret;
  13385. __builtin_aarch64_simd_oi __o;
  13386. __o = __builtin_aarch64_ld2v8qi ((const __builtin_aarch64_simd_qi *) __a);
  13387. ret.val[0] = (uint8x8_t) __builtin_aarch64_get_dregoiv8qi (__o, 0);
  13388. ret.val[1] = (uint8x8_t) __builtin_aarch64_get_dregoiv8qi (__o, 1);
  13389. return ret;
  13390. }
  13391. __extension__ static __inline uint16x4x2_t __attribute__ ((__always_inline__))
  13392. vld2_u16 (const uint16_t * __a)
  13393. {
  13394. uint16x4x2_t ret;
  13395. __builtin_aarch64_simd_oi __o;
  13396. __o = __builtin_aarch64_ld2v4hi ((const __builtin_aarch64_simd_hi *) __a);
  13397. ret.val[0] = (uint16x4_t) __builtin_aarch64_get_dregoiv4hi (__o, 0);
  13398. ret.val[1] = (uint16x4_t) __builtin_aarch64_get_dregoiv4hi (__o, 1);
  13399. return ret;
  13400. }
  13401. __extension__ static __inline uint32x2x2_t __attribute__ ((__always_inline__))
  13402. vld2_u32 (const uint32_t * __a)
  13403. {
  13404. uint32x2x2_t ret;
  13405. __builtin_aarch64_simd_oi __o;
  13406. __o = __builtin_aarch64_ld2v2si ((const __builtin_aarch64_simd_si *) __a);
  13407. ret.val[0] = (uint32x2_t) __builtin_aarch64_get_dregoiv2si (__o, 0);
  13408. ret.val[1] = (uint32x2_t) __builtin_aarch64_get_dregoiv2si (__o, 1);
  13409. return ret;
  13410. }
  13411. __extension__ static __inline float32x2x2_t __attribute__ ((__always_inline__))
  13412. vld2_f32 (const float32_t * __a)
  13413. {
  13414. float32x2x2_t ret;
  13415. __builtin_aarch64_simd_oi __o;
  13416. __o = __builtin_aarch64_ld2v2sf ((const __builtin_aarch64_simd_sf *) __a);
  13417. ret.val[0] = (float32x2_t) __builtin_aarch64_get_dregoiv2sf (__o, 0);
  13418. ret.val[1] = (float32x2_t) __builtin_aarch64_get_dregoiv2sf (__o, 1);
  13419. return ret;
  13420. }
  13421. __extension__ static __inline int8x16x2_t __attribute__ ((__always_inline__))
  13422. vld2q_s8 (const int8_t * __a)
  13423. {
  13424. int8x16x2_t ret;
  13425. __builtin_aarch64_simd_oi __o;
  13426. __o = __builtin_aarch64_ld2v16qi ((const __builtin_aarch64_simd_qi *) __a);
  13427. ret.val[0] = (int8x16_t) __builtin_aarch64_get_qregoiv16qi (__o, 0);
  13428. ret.val[1] = (int8x16_t) __builtin_aarch64_get_qregoiv16qi (__o, 1);
  13429. return ret;
  13430. }
  13431. __extension__ static __inline poly8x16x2_t __attribute__ ((__always_inline__))
  13432. vld2q_p8 (const poly8_t * __a)
  13433. {
  13434. poly8x16x2_t ret;
  13435. __builtin_aarch64_simd_oi __o;
  13436. __o = __builtin_aarch64_ld2v16qi ((const __builtin_aarch64_simd_qi *) __a);
  13437. ret.val[0] = (poly8x16_t) __builtin_aarch64_get_qregoiv16qi (__o, 0);
  13438. ret.val[1] = (poly8x16_t) __builtin_aarch64_get_qregoiv16qi (__o, 1);
  13439. return ret;
  13440. }
  13441. __extension__ static __inline int16x8x2_t __attribute__ ((__always_inline__))
  13442. vld2q_s16 (const int16_t * __a)
  13443. {
  13444. int16x8x2_t ret;
  13445. __builtin_aarch64_simd_oi __o;
  13446. __o = __builtin_aarch64_ld2v8hi ((const __builtin_aarch64_simd_hi *) __a);
  13447. ret.val[0] = (int16x8_t) __builtin_aarch64_get_qregoiv8hi (__o, 0);
  13448. ret.val[1] = (int16x8_t) __builtin_aarch64_get_qregoiv8hi (__o, 1);
  13449. return ret;
  13450. }
  13451. __extension__ static __inline poly16x8x2_t __attribute__ ((__always_inline__))
  13452. vld2q_p16 (const poly16_t * __a)
  13453. {
  13454. poly16x8x2_t ret;
  13455. __builtin_aarch64_simd_oi __o;
  13456. __o = __builtin_aarch64_ld2v8hi ((const __builtin_aarch64_simd_hi *) __a);
  13457. ret.val[0] = (poly16x8_t) __builtin_aarch64_get_qregoiv8hi (__o, 0);
  13458. ret.val[1] = (poly16x8_t) __builtin_aarch64_get_qregoiv8hi (__o, 1);
  13459. return ret;
  13460. }
  13461. __extension__ static __inline int32x4x2_t __attribute__ ((__always_inline__))
  13462. vld2q_s32 (const int32_t * __a)
  13463. {
  13464. int32x4x2_t ret;
  13465. __builtin_aarch64_simd_oi __o;
  13466. __o = __builtin_aarch64_ld2v4si ((const __builtin_aarch64_simd_si *) __a);
  13467. ret.val[0] = (int32x4_t) __builtin_aarch64_get_qregoiv4si (__o, 0);
  13468. ret.val[1] = (int32x4_t) __builtin_aarch64_get_qregoiv4si (__o, 1);
  13469. return ret;
  13470. }
  13471. __extension__ static __inline int64x2x2_t __attribute__ ((__always_inline__))
  13472. vld2q_s64 (const int64_t * __a)
  13473. {
  13474. int64x2x2_t ret;
  13475. __builtin_aarch64_simd_oi __o;
  13476. __o = __builtin_aarch64_ld2v2di ((const __builtin_aarch64_simd_di *) __a);
  13477. ret.val[0] = (int64x2_t) __builtin_aarch64_get_qregoiv2di (__o, 0);
  13478. ret.val[1] = (int64x2_t) __builtin_aarch64_get_qregoiv2di (__o, 1);
  13479. return ret;
  13480. }
  13481. __extension__ static __inline uint8x16x2_t __attribute__ ((__always_inline__))
  13482. vld2q_u8 (const uint8_t * __a)
  13483. {
  13484. uint8x16x2_t ret;
  13485. __builtin_aarch64_simd_oi __o;
  13486. __o = __builtin_aarch64_ld2v16qi ((const __builtin_aarch64_simd_qi *) __a);
  13487. ret.val[0] = (uint8x16_t) __builtin_aarch64_get_qregoiv16qi (__o, 0);
  13488. ret.val[1] = (uint8x16_t) __builtin_aarch64_get_qregoiv16qi (__o, 1);
  13489. return ret;
  13490. }
  13491. __extension__ static __inline uint16x8x2_t __attribute__ ((__always_inline__))
  13492. vld2q_u16 (const uint16_t * __a)
  13493. {
  13494. uint16x8x2_t ret;
  13495. __builtin_aarch64_simd_oi __o;
  13496. __o = __builtin_aarch64_ld2v8hi ((const __builtin_aarch64_simd_hi *) __a);
  13497. ret.val[0] = (uint16x8_t) __builtin_aarch64_get_qregoiv8hi (__o, 0);
  13498. ret.val[1] = (uint16x8_t) __builtin_aarch64_get_qregoiv8hi (__o, 1);
  13499. return ret;
  13500. }
  13501. __extension__ static __inline uint32x4x2_t __attribute__ ((__always_inline__))
  13502. vld2q_u32 (const uint32_t * __a)
  13503. {
  13504. uint32x4x2_t ret;
  13505. __builtin_aarch64_simd_oi __o;
  13506. __o = __builtin_aarch64_ld2v4si ((const __builtin_aarch64_simd_si *) __a);
  13507. ret.val[0] = (uint32x4_t) __builtin_aarch64_get_qregoiv4si (__o, 0);
  13508. ret.val[1] = (uint32x4_t) __builtin_aarch64_get_qregoiv4si (__o, 1);
  13509. return ret;
  13510. }
  13511. __extension__ static __inline uint64x2x2_t __attribute__ ((__always_inline__))
  13512. vld2q_u64 (const uint64_t * __a)
  13513. {
  13514. uint64x2x2_t ret;
  13515. __builtin_aarch64_simd_oi __o;
  13516. __o = __builtin_aarch64_ld2v2di ((const __builtin_aarch64_simd_di *) __a);
  13517. ret.val[0] = (uint64x2_t) __builtin_aarch64_get_qregoiv2di (__o, 0);
  13518. ret.val[1] = (uint64x2_t) __builtin_aarch64_get_qregoiv2di (__o, 1);
  13519. return ret;
  13520. }
  13521. __extension__ static __inline float32x4x2_t __attribute__ ((__always_inline__))
  13522. vld2q_f32 (const float32_t * __a)
  13523. {
  13524. float32x4x2_t ret;
  13525. __builtin_aarch64_simd_oi __o;
  13526. __o = __builtin_aarch64_ld2v4sf ((const __builtin_aarch64_simd_sf *) __a);
  13527. ret.val[0] = (float32x4_t) __builtin_aarch64_get_qregoiv4sf (__o, 0);
  13528. ret.val[1] = (float32x4_t) __builtin_aarch64_get_qregoiv4sf (__o, 1);
  13529. return ret;
  13530. }
  13531. __extension__ static __inline float64x2x2_t __attribute__ ((__always_inline__))
  13532. vld2q_f64 (const float64_t * __a)
  13533. {
  13534. float64x2x2_t ret;
  13535. __builtin_aarch64_simd_oi __o;
  13536. __o = __builtin_aarch64_ld2v2df ((const __builtin_aarch64_simd_df *) __a);
  13537. ret.val[0] = (float64x2_t) __builtin_aarch64_get_qregoiv2df (__o, 0);
  13538. ret.val[1] = (float64x2_t) __builtin_aarch64_get_qregoiv2df (__o, 1);
  13539. return ret;
  13540. }
  13541. __extension__ static __inline int64x1x3_t __attribute__ ((__always_inline__))
  13542. vld3_s64 (const int64_t * __a)
  13543. {
  13544. int64x1x3_t ret;
  13545. __builtin_aarch64_simd_ci __o;
  13546. __o = __builtin_aarch64_ld3di ((const __builtin_aarch64_simd_di *) __a);
  13547. ret.val[0] = (int64x1_t) __builtin_aarch64_get_dregcidi (__o, 0);
  13548. ret.val[1] = (int64x1_t) __builtin_aarch64_get_dregcidi (__o, 1);
  13549. ret.val[2] = (int64x1_t) __builtin_aarch64_get_dregcidi (__o, 2);
  13550. return ret;
  13551. }
  13552. __extension__ static __inline uint64x1x3_t __attribute__ ((__always_inline__))
  13553. vld3_u64 (const uint64_t * __a)
  13554. {
  13555. uint64x1x3_t ret;
  13556. __builtin_aarch64_simd_ci __o;
  13557. __o = __builtin_aarch64_ld3di ((const __builtin_aarch64_simd_di *) __a);
  13558. ret.val[0] = (uint64x1_t) __builtin_aarch64_get_dregcidi (__o, 0);
  13559. ret.val[1] = (uint64x1_t) __builtin_aarch64_get_dregcidi (__o, 1);
  13560. ret.val[2] = (uint64x1_t) __builtin_aarch64_get_dregcidi (__o, 2);
  13561. return ret;
  13562. }
  13563. __extension__ static __inline float64x1x3_t __attribute__ ((__always_inline__))
  13564. vld3_f64 (const float64_t * __a)
  13565. {
  13566. float64x1x3_t ret;
  13567. __builtin_aarch64_simd_ci __o;
  13568. __o = __builtin_aarch64_ld3df ((const __builtin_aarch64_simd_df *) __a);
  13569. ret.val[0] = (float64x1_t) {__builtin_aarch64_get_dregcidf (__o, 0)};
  13570. ret.val[1] = (float64x1_t) {__builtin_aarch64_get_dregcidf (__o, 1)};
  13571. ret.val[2] = (float64x1_t) {__builtin_aarch64_get_dregcidf (__o, 2)};
  13572. return ret;
  13573. }
  13574. __extension__ static __inline int8x8x3_t __attribute__ ((__always_inline__))
  13575. vld3_s8 (const int8_t * __a)
  13576. {
  13577. int8x8x3_t ret;
  13578. __builtin_aarch64_simd_ci __o;
  13579. __o = __builtin_aarch64_ld3v8qi ((const __builtin_aarch64_simd_qi *) __a);
  13580. ret.val[0] = (int8x8_t) __builtin_aarch64_get_dregciv8qi (__o, 0);
  13581. ret.val[1] = (int8x8_t) __builtin_aarch64_get_dregciv8qi (__o, 1);
  13582. ret.val[2] = (int8x8_t) __builtin_aarch64_get_dregciv8qi (__o, 2);
  13583. return ret;
  13584. }
  13585. __extension__ static __inline poly8x8x3_t __attribute__ ((__always_inline__))
  13586. vld3_p8 (const poly8_t * __a)
  13587. {
  13588. poly8x8x3_t ret;
  13589. __builtin_aarch64_simd_ci __o;
  13590. __o = __builtin_aarch64_ld3v8qi ((const __builtin_aarch64_simd_qi *) __a);
  13591. ret.val[0] = (poly8x8_t) __builtin_aarch64_get_dregciv8qi (__o, 0);
  13592. ret.val[1] = (poly8x8_t) __builtin_aarch64_get_dregciv8qi (__o, 1);
  13593. ret.val[2] = (poly8x8_t) __builtin_aarch64_get_dregciv8qi (__o, 2);
  13594. return ret;
  13595. }
  13596. __extension__ static __inline int16x4x3_t __attribute__ ((__always_inline__))
  13597. vld3_s16 (const int16_t * __a)
  13598. {
  13599. int16x4x3_t ret;
  13600. __builtin_aarch64_simd_ci __o;
  13601. __o = __builtin_aarch64_ld3v4hi ((const __builtin_aarch64_simd_hi *) __a);
  13602. ret.val[0] = (int16x4_t) __builtin_aarch64_get_dregciv4hi (__o, 0);
  13603. ret.val[1] = (int16x4_t) __builtin_aarch64_get_dregciv4hi (__o, 1);
  13604. ret.val[2] = (int16x4_t) __builtin_aarch64_get_dregciv4hi (__o, 2);
  13605. return ret;
  13606. }
  13607. __extension__ static __inline poly16x4x3_t __attribute__ ((__always_inline__))
  13608. vld3_p16 (const poly16_t * __a)
  13609. {
  13610. poly16x4x3_t ret;
  13611. __builtin_aarch64_simd_ci __o;
  13612. __o = __builtin_aarch64_ld3v4hi ((const __builtin_aarch64_simd_hi *) __a);
  13613. ret.val[0] = (poly16x4_t) __builtin_aarch64_get_dregciv4hi (__o, 0);
  13614. ret.val[1] = (poly16x4_t) __builtin_aarch64_get_dregciv4hi (__o, 1);
  13615. ret.val[2] = (poly16x4_t) __builtin_aarch64_get_dregciv4hi (__o, 2);
  13616. return ret;
  13617. }
  13618. __extension__ static __inline int32x2x3_t __attribute__ ((__always_inline__))
  13619. vld3_s32 (const int32_t * __a)
  13620. {
  13621. int32x2x3_t ret;
  13622. __builtin_aarch64_simd_ci __o;
  13623. __o = __builtin_aarch64_ld3v2si ((const __builtin_aarch64_simd_si *) __a);
  13624. ret.val[0] = (int32x2_t) __builtin_aarch64_get_dregciv2si (__o, 0);
  13625. ret.val[1] = (int32x2_t) __builtin_aarch64_get_dregciv2si (__o, 1);
  13626. ret.val[2] = (int32x2_t) __builtin_aarch64_get_dregciv2si (__o, 2);
  13627. return ret;
  13628. }
  13629. __extension__ static __inline uint8x8x3_t __attribute__ ((__always_inline__))
  13630. vld3_u8 (const uint8_t * __a)
  13631. {
  13632. uint8x8x3_t ret;
  13633. __builtin_aarch64_simd_ci __o;
  13634. __o = __builtin_aarch64_ld3v8qi ((const __builtin_aarch64_simd_qi *) __a);
  13635. ret.val[0] = (uint8x8_t) __builtin_aarch64_get_dregciv8qi (__o, 0);
  13636. ret.val[1] = (uint8x8_t) __builtin_aarch64_get_dregciv8qi (__o, 1);
  13637. ret.val[2] = (uint8x8_t) __builtin_aarch64_get_dregciv8qi (__o, 2);
  13638. return ret;
  13639. }
  13640. __extension__ static __inline uint16x4x3_t __attribute__ ((__always_inline__))
  13641. vld3_u16 (const uint16_t * __a)
  13642. {
  13643. uint16x4x3_t ret;
  13644. __builtin_aarch64_simd_ci __o;
  13645. __o = __builtin_aarch64_ld3v4hi ((const __builtin_aarch64_simd_hi *) __a);
  13646. ret.val[0] = (uint16x4_t) __builtin_aarch64_get_dregciv4hi (__o, 0);
  13647. ret.val[1] = (uint16x4_t) __builtin_aarch64_get_dregciv4hi (__o, 1);
  13648. ret.val[2] = (uint16x4_t) __builtin_aarch64_get_dregciv4hi (__o, 2);
  13649. return ret;
  13650. }
  13651. __extension__ static __inline uint32x2x3_t __attribute__ ((__always_inline__))
  13652. vld3_u32 (const uint32_t * __a)
  13653. {
  13654. uint32x2x3_t ret;
  13655. __builtin_aarch64_simd_ci __o;
  13656. __o = __builtin_aarch64_ld3v2si ((const __builtin_aarch64_simd_si *) __a);
  13657. ret.val[0] = (uint32x2_t) __builtin_aarch64_get_dregciv2si (__o, 0);
  13658. ret.val[1] = (uint32x2_t) __builtin_aarch64_get_dregciv2si (__o, 1);
  13659. ret.val[2] = (uint32x2_t) __builtin_aarch64_get_dregciv2si (__o, 2);
  13660. return ret;
  13661. }
  13662. __extension__ static __inline float32x2x3_t __attribute__ ((__always_inline__))
  13663. vld3_f32 (const float32_t * __a)
  13664. {
  13665. float32x2x3_t ret;
  13666. __builtin_aarch64_simd_ci __o;
  13667. __o = __builtin_aarch64_ld3v2sf ((const __builtin_aarch64_simd_sf *) __a);
  13668. ret.val[0] = (float32x2_t) __builtin_aarch64_get_dregciv2sf (__o, 0);
  13669. ret.val[1] = (float32x2_t) __builtin_aarch64_get_dregciv2sf (__o, 1);
  13670. ret.val[2] = (float32x2_t) __builtin_aarch64_get_dregciv2sf (__o, 2);
  13671. return ret;
  13672. }
  13673. __extension__ static __inline int8x16x3_t __attribute__ ((__always_inline__))
  13674. vld3q_s8 (const int8_t * __a)
  13675. {
  13676. int8x16x3_t ret;
  13677. __builtin_aarch64_simd_ci __o;
  13678. __o = __builtin_aarch64_ld3v16qi ((const __builtin_aarch64_simd_qi *) __a);
  13679. ret.val[0] = (int8x16_t) __builtin_aarch64_get_qregciv16qi (__o, 0);
  13680. ret.val[1] = (int8x16_t) __builtin_aarch64_get_qregciv16qi (__o, 1);
  13681. ret.val[2] = (int8x16_t) __builtin_aarch64_get_qregciv16qi (__o, 2);
  13682. return ret;
  13683. }
  13684. __extension__ static __inline poly8x16x3_t __attribute__ ((__always_inline__))
  13685. vld3q_p8 (const poly8_t * __a)
  13686. {
  13687. poly8x16x3_t ret;
  13688. __builtin_aarch64_simd_ci __o;
  13689. __o = __builtin_aarch64_ld3v16qi ((const __builtin_aarch64_simd_qi *) __a);
  13690. ret.val[0] = (poly8x16_t) __builtin_aarch64_get_qregciv16qi (__o, 0);
  13691. ret.val[1] = (poly8x16_t) __builtin_aarch64_get_qregciv16qi (__o, 1);
  13692. ret.val[2] = (poly8x16_t) __builtin_aarch64_get_qregciv16qi (__o, 2);
  13693. return ret;
  13694. }
  13695. __extension__ static __inline int16x8x3_t __attribute__ ((__always_inline__))
  13696. vld3q_s16 (const int16_t * __a)
  13697. {
  13698. int16x8x3_t ret;
  13699. __builtin_aarch64_simd_ci __o;
  13700. __o = __builtin_aarch64_ld3v8hi ((const __builtin_aarch64_simd_hi *) __a);
  13701. ret.val[0] = (int16x8_t) __builtin_aarch64_get_qregciv8hi (__o, 0);
  13702. ret.val[1] = (int16x8_t) __builtin_aarch64_get_qregciv8hi (__o, 1);
  13703. ret.val[2] = (int16x8_t) __builtin_aarch64_get_qregciv8hi (__o, 2);
  13704. return ret;
  13705. }
  13706. __extension__ static __inline poly16x8x3_t __attribute__ ((__always_inline__))
  13707. vld3q_p16 (const poly16_t * __a)
  13708. {
  13709. poly16x8x3_t ret;
  13710. __builtin_aarch64_simd_ci __o;
  13711. __o = __builtin_aarch64_ld3v8hi ((const __builtin_aarch64_simd_hi *) __a);
  13712. ret.val[0] = (poly16x8_t) __builtin_aarch64_get_qregciv8hi (__o, 0);
  13713. ret.val[1] = (poly16x8_t) __builtin_aarch64_get_qregciv8hi (__o, 1);
  13714. ret.val[2] = (poly16x8_t) __builtin_aarch64_get_qregciv8hi (__o, 2);
  13715. return ret;
  13716. }
  13717. __extension__ static __inline int32x4x3_t __attribute__ ((__always_inline__))
  13718. vld3q_s32 (const int32_t * __a)
  13719. {
  13720. int32x4x3_t ret;
  13721. __builtin_aarch64_simd_ci __o;
  13722. __o = __builtin_aarch64_ld3v4si ((const __builtin_aarch64_simd_si *) __a);
  13723. ret.val[0] = (int32x4_t) __builtin_aarch64_get_qregciv4si (__o, 0);
  13724. ret.val[1] = (int32x4_t) __builtin_aarch64_get_qregciv4si (__o, 1);
  13725. ret.val[2] = (int32x4_t) __builtin_aarch64_get_qregciv4si (__o, 2);
  13726. return ret;
  13727. }
  13728. __extension__ static __inline int64x2x3_t __attribute__ ((__always_inline__))
  13729. vld3q_s64 (const int64_t * __a)
  13730. {
  13731. int64x2x3_t ret;
  13732. __builtin_aarch64_simd_ci __o;
  13733. __o = __builtin_aarch64_ld3v2di ((const __builtin_aarch64_simd_di *) __a);
  13734. ret.val[0] = (int64x2_t) __builtin_aarch64_get_qregciv2di (__o, 0);
  13735. ret.val[1] = (int64x2_t) __builtin_aarch64_get_qregciv2di (__o, 1);
  13736. ret.val[2] = (int64x2_t) __builtin_aarch64_get_qregciv2di (__o, 2);
  13737. return ret;
  13738. }
  13739. __extension__ static __inline uint8x16x3_t __attribute__ ((__always_inline__))
  13740. vld3q_u8 (const uint8_t * __a)
  13741. {
  13742. uint8x16x3_t ret;
  13743. __builtin_aarch64_simd_ci __o;
  13744. __o = __builtin_aarch64_ld3v16qi ((const __builtin_aarch64_simd_qi *) __a);
  13745. ret.val[0] = (uint8x16_t) __builtin_aarch64_get_qregciv16qi (__o, 0);
  13746. ret.val[1] = (uint8x16_t) __builtin_aarch64_get_qregciv16qi (__o, 1);
  13747. ret.val[2] = (uint8x16_t) __builtin_aarch64_get_qregciv16qi (__o, 2);
  13748. return ret;
  13749. }
  13750. __extension__ static __inline uint16x8x3_t __attribute__ ((__always_inline__))
  13751. vld3q_u16 (const uint16_t * __a)
  13752. {
  13753. uint16x8x3_t ret;
  13754. __builtin_aarch64_simd_ci __o;
  13755. __o = __builtin_aarch64_ld3v8hi ((const __builtin_aarch64_simd_hi *) __a);
  13756. ret.val[0] = (uint16x8_t) __builtin_aarch64_get_qregciv8hi (__o, 0);
  13757. ret.val[1] = (uint16x8_t) __builtin_aarch64_get_qregciv8hi (__o, 1);
  13758. ret.val[2] = (uint16x8_t) __builtin_aarch64_get_qregciv8hi (__o, 2);
  13759. return ret;
  13760. }
  13761. __extension__ static __inline uint32x4x3_t __attribute__ ((__always_inline__))
  13762. vld3q_u32 (const uint32_t * __a)
  13763. {
  13764. uint32x4x3_t ret;
  13765. __builtin_aarch64_simd_ci __o;
  13766. __o = __builtin_aarch64_ld3v4si ((const __builtin_aarch64_simd_si *) __a);
  13767. ret.val[0] = (uint32x4_t) __builtin_aarch64_get_qregciv4si (__o, 0);
  13768. ret.val[1] = (uint32x4_t) __builtin_aarch64_get_qregciv4si (__o, 1);
  13769. ret.val[2] = (uint32x4_t) __builtin_aarch64_get_qregciv4si (__o, 2);
  13770. return ret;
  13771. }
  13772. __extension__ static __inline uint64x2x3_t __attribute__ ((__always_inline__))
  13773. vld3q_u64 (const uint64_t * __a)
  13774. {
  13775. uint64x2x3_t ret;
  13776. __builtin_aarch64_simd_ci __o;
  13777. __o = __builtin_aarch64_ld3v2di ((const __builtin_aarch64_simd_di *) __a);
  13778. ret.val[0] = (uint64x2_t) __builtin_aarch64_get_qregciv2di (__o, 0);
  13779. ret.val[1] = (uint64x2_t) __builtin_aarch64_get_qregciv2di (__o, 1);
  13780. ret.val[2] = (uint64x2_t) __builtin_aarch64_get_qregciv2di (__o, 2);
  13781. return ret;
  13782. }
  13783. __extension__ static __inline float32x4x3_t __attribute__ ((__always_inline__))
  13784. vld3q_f32 (const float32_t * __a)
  13785. {
  13786. float32x4x3_t ret;
  13787. __builtin_aarch64_simd_ci __o;
  13788. __o = __builtin_aarch64_ld3v4sf ((const __builtin_aarch64_simd_sf *) __a);
  13789. ret.val[0] = (float32x4_t) __builtin_aarch64_get_qregciv4sf (__o, 0);
  13790. ret.val[1] = (float32x4_t) __builtin_aarch64_get_qregciv4sf (__o, 1);
  13791. ret.val[2] = (float32x4_t) __builtin_aarch64_get_qregciv4sf (__o, 2);
  13792. return ret;
  13793. }
  13794. __extension__ static __inline float64x2x3_t __attribute__ ((__always_inline__))
  13795. vld3q_f64 (const float64_t * __a)
  13796. {
  13797. float64x2x3_t ret;
  13798. __builtin_aarch64_simd_ci __o;
  13799. __o = __builtin_aarch64_ld3v2df ((const __builtin_aarch64_simd_df *) __a);
  13800. ret.val[0] = (float64x2_t) __builtin_aarch64_get_qregciv2df (__o, 0);
  13801. ret.val[1] = (float64x2_t) __builtin_aarch64_get_qregciv2df (__o, 1);
  13802. ret.val[2] = (float64x2_t) __builtin_aarch64_get_qregciv2df (__o, 2);
  13803. return ret;
  13804. }
  13805. __extension__ static __inline int64x1x4_t __attribute__ ((__always_inline__))
  13806. vld4_s64 (const int64_t * __a)
  13807. {
  13808. int64x1x4_t ret;
  13809. __builtin_aarch64_simd_xi __o;
  13810. __o = __builtin_aarch64_ld4di ((const __builtin_aarch64_simd_di *) __a);
  13811. ret.val[0] = (int64x1_t) __builtin_aarch64_get_dregxidi (__o, 0);
  13812. ret.val[1] = (int64x1_t) __builtin_aarch64_get_dregxidi (__o, 1);
  13813. ret.val[2] = (int64x1_t) __builtin_aarch64_get_dregxidi (__o, 2);
  13814. ret.val[3] = (int64x1_t) __builtin_aarch64_get_dregxidi (__o, 3);
  13815. return ret;
  13816. }
  13817. __extension__ static __inline uint64x1x4_t __attribute__ ((__always_inline__))
  13818. vld4_u64 (const uint64_t * __a)
  13819. {
  13820. uint64x1x4_t ret;
  13821. __builtin_aarch64_simd_xi __o;
  13822. __o = __builtin_aarch64_ld4di ((const __builtin_aarch64_simd_di *) __a);
  13823. ret.val[0] = (uint64x1_t) __builtin_aarch64_get_dregxidi (__o, 0);
  13824. ret.val[1] = (uint64x1_t) __builtin_aarch64_get_dregxidi (__o, 1);
  13825. ret.val[2] = (uint64x1_t) __builtin_aarch64_get_dregxidi (__o, 2);
  13826. ret.val[3] = (uint64x1_t) __builtin_aarch64_get_dregxidi (__o, 3);
  13827. return ret;
  13828. }
  13829. __extension__ static __inline float64x1x4_t __attribute__ ((__always_inline__))
  13830. vld4_f64 (const float64_t * __a)
  13831. {
  13832. float64x1x4_t ret;
  13833. __builtin_aarch64_simd_xi __o;
  13834. __o = __builtin_aarch64_ld4df ((const __builtin_aarch64_simd_df *) __a);
  13835. ret.val[0] = (float64x1_t) {__builtin_aarch64_get_dregxidf (__o, 0)};
  13836. ret.val[1] = (float64x1_t) {__builtin_aarch64_get_dregxidf (__o, 1)};
  13837. ret.val[2] = (float64x1_t) {__builtin_aarch64_get_dregxidf (__o, 2)};
  13838. ret.val[3] = (float64x1_t) {__builtin_aarch64_get_dregxidf (__o, 3)};
  13839. return ret;
  13840. }
  13841. __extension__ static __inline int8x8x4_t __attribute__ ((__always_inline__))
  13842. vld4_s8 (const int8_t * __a)
  13843. {
  13844. int8x8x4_t ret;
  13845. __builtin_aarch64_simd_xi __o;
  13846. __o = __builtin_aarch64_ld4v8qi ((const __builtin_aarch64_simd_qi *) __a);
  13847. ret.val[0] = (int8x8_t) __builtin_aarch64_get_dregxiv8qi (__o, 0);
  13848. ret.val[1] = (int8x8_t) __builtin_aarch64_get_dregxiv8qi (__o, 1);
  13849. ret.val[2] = (int8x8_t) __builtin_aarch64_get_dregxiv8qi (__o, 2);
  13850. ret.val[3] = (int8x8_t) __builtin_aarch64_get_dregxiv8qi (__o, 3);
  13851. return ret;
  13852. }
  13853. __extension__ static __inline poly8x8x4_t __attribute__ ((__always_inline__))
  13854. vld4_p8 (const poly8_t * __a)
  13855. {
  13856. poly8x8x4_t ret;
  13857. __builtin_aarch64_simd_xi __o;
  13858. __o = __builtin_aarch64_ld4v8qi ((const __builtin_aarch64_simd_qi *) __a);
  13859. ret.val[0] = (poly8x8_t) __builtin_aarch64_get_dregxiv8qi (__o, 0);
  13860. ret.val[1] = (poly8x8_t) __builtin_aarch64_get_dregxiv8qi (__o, 1);
  13861. ret.val[2] = (poly8x8_t) __builtin_aarch64_get_dregxiv8qi (__o, 2);
  13862. ret.val[3] = (poly8x8_t) __builtin_aarch64_get_dregxiv8qi (__o, 3);
  13863. return ret;
  13864. }
  13865. __extension__ static __inline int16x4x4_t __attribute__ ((__always_inline__))
  13866. vld4_s16 (const int16_t * __a)
  13867. {
  13868. int16x4x4_t ret;
  13869. __builtin_aarch64_simd_xi __o;
  13870. __o = __builtin_aarch64_ld4v4hi ((const __builtin_aarch64_simd_hi *) __a);
  13871. ret.val[0] = (int16x4_t) __builtin_aarch64_get_dregxiv4hi (__o, 0);
  13872. ret.val[1] = (int16x4_t) __builtin_aarch64_get_dregxiv4hi (__o, 1);
  13873. ret.val[2] = (int16x4_t) __builtin_aarch64_get_dregxiv4hi (__o, 2);
  13874. ret.val[3] = (int16x4_t) __builtin_aarch64_get_dregxiv4hi (__o, 3);
  13875. return ret;
  13876. }
  13877. __extension__ static __inline poly16x4x4_t __attribute__ ((__always_inline__))
  13878. vld4_p16 (const poly16_t * __a)
  13879. {
  13880. poly16x4x4_t ret;
  13881. __builtin_aarch64_simd_xi __o;
  13882. __o = __builtin_aarch64_ld4v4hi ((const __builtin_aarch64_simd_hi *) __a);
  13883. ret.val[0] = (poly16x4_t) __builtin_aarch64_get_dregxiv4hi (__o, 0);
  13884. ret.val[1] = (poly16x4_t) __builtin_aarch64_get_dregxiv4hi (__o, 1);
  13885. ret.val[2] = (poly16x4_t) __builtin_aarch64_get_dregxiv4hi (__o, 2);
  13886. ret.val[3] = (poly16x4_t) __builtin_aarch64_get_dregxiv4hi (__o, 3);
  13887. return ret;
  13888. }
  13889. __extension__ static __inline int32x2x4_t __attribute__ ((__always_inline__))
  13890. vld4_s32 (const int32_t * __a)
  13891. {
  13892. int32x2x4_t ret;
  13893. __builtin_aarch64_simd_xi __o;
  13894. __o = __builtin_aarch64_ld4v2si ((const __builtin_aarch64_simd_si *) __a);
  13895. ret.val[0] = (int32x2_t) __builtin_aarch64_get_dregxiv2si (__o, 0);
  13896. ret.val[1] = (int32x2_t) __builtin_aarch64_get_dregxiv2si (__o, 1);
  13897. ret.val[2] = (int32x2_t) __builtin_aarch64_get_dregxiv2si (__o, 2);
  13898. ret.val[3] = (int32x2_t) __builtin_aarch64_get_dregxiv2si (__o, 3);
  13899. return ret;
  13900. }
  13901. __extension__ static __inline uint8x8x4_t __attribute__ ((__always_inline__))
  13902. vld4_u8 (const uint8_t * __a)
  13903. {
  13904. uint8x8x4_t ret;
  13905. __builtin_aarch64_simd_xi __o;
  13906. __o = __builtin_aarch64_ld4v8qi ((const __builtin_aarch64_simd_qi *) __a);
  13907. ret.val[0] = (uint8x8_t) __builtin_aarch64_get_dregxiv8qi (__o, 0);
  13908. ret.val[1] = (uint8x8_t) __builtin_aarch64_get_dregxiv8qi (__o, 1);
  13909. ret.val[2] = (uint8x8_t) __builtin_aarch64_get_dregxiv8qi (__o, 2);
  13910. ret.val[3] = (uint8x8_t) __builtin_aarch64_get_dregxiv8qi (__o, 3);
  13911. return ret;
  13912. }
  13913. __extension__ static __inline uint16x4x4_t __attribute__ ((__always_inline__))
  13914. vld4_u16 (const uint16_t * __a)
  13915. {
  13916. uint16x4x4_t ret;
  13917. __builtin_aarch64_simd_xi __o;
  13918. __o = __builtin_aarch64_ld4v4hi ((const __builtin_aarch64_simd_hi *) __a);
  13919. ret.val[0] = (uint16x4_t) __builtin_aarch64_get_dregxiv4hi (__o, 0);
  13920. ret.val[1] = (uint16x4_t) __builtin_aarch64_get_dregxiv4hi (__o, 1);
  13921. ret.val[2] = (uint16x4_t) __builtin_aarch64_get_dregxiv4hi (__o, 2);
  13922. ret.val[3] = (uint16x4_t) __builtin_aarch64_get_dregxiv4hi (__o, 3);
  13923. return ret;
  13924. }
  13925. __extension__ static __inline uint32x2x4_t __attribute__ ((__always_inline__))
  13926. vld4_u32 (const uint32_t * __a)
  13927. {
  13928. uint32x2x4_t ret;
  13929. __builtin_aarch64_simd_xi __o;
  13930. __o = __builtin_aarch64_ld4v2si ((const __builtin_aarch64_simd_si *) __a);
  13931. ret.val[0] = (uint32x2_t) __builtin_aarch64_get_dregxiv2si (__o, 0);
  13932. ret.val[1] = (uint32x2_t) __builtin_aarch64_get_dregxiv2si (__o, 1);
  13933. ret.val[2] = (uint32x2_t) __builtin_aarch64_get_dregxiv2si (__o, 2);
  13934. ret.val[3] = (uint32x2_t) __builtin_aarch64_get_dregxiv2si (__o, 3);
  13935. return ret;
  13936. }
  13937. __extension__ static __inline float32x2x4_t __attribute__ ((__always_inline__))
  13938. vld4_f32 (const float32_t * __a)
  13939. {
  13940. float32x2x4_t ret;
  13941. __builtin_aarch64_simd_xi __o;
  13942. __o = __builtin_aarch64_ld4v2sf ((const __builtin_aarch64_simd_sf *) __a);
  13943. ret.val[0] = (float32x2_t) __builtin_aarch64_get_dregxiv2sf (__o, 0);
  13944. ret.val[1] = (float32x2_t) __builtin_aarch64_get_dregxiv2sf (__o, 1);
  13945. ret.val[2] = (float32x2_t) __builtin_aarch64_get_dregxiv2sf (__o, 2);
  13946. ret.val[3] = (float32x2_t) __builtin_aarch64_get_dregxiv2sf (__o, 3);
  13947. return ret;
  13948. }
  13949. __extension__ static __inline int8x16x4_t __attribute__ ((__always_inline__))
  13950. vld4q_s8 (const int8_t * __a)
  13951. {
  13952. int8x16x4_t ret;
  13953. __builtin_aarch64_simd_xi __o;
  13954. __o = __builtin_aarch64_ld4v16qi ((const __builtin_aarch64_simd_qi *) __a);
  13955. ret.val[0] = (int8x16_t) __builtin_aarch64_get_qregxiv16qi (__o, 0);
  13956. ret.val[1] = (int8x16_t) __builtin_aarch64_get_qregxiv16qi (__o, 1);
  13957. ret.val[2] = (int8x16_t) __builtin_aarch64_get_qregxiv16qi (__o, 2);
  13958. ret.val[3] = (int8x16_t) __builtin_aarch64_get_qregxiv16qi (__o, 3);
  13959. return ret;
  13960. }
  13961. __extension__ static __inline poly8x16x4_t __attribute__ ((__always_inline__))
  13962. vld4q_p8 (const poly8_t * __a)
  13963. {
  13964. poly8x16x4_t ret;
  13965. __builtin_aarch64_simd_xi __o;
  13966. __o = __builtin_aarch64_ld4v16qi ((const __builtin_aarch64_simd_qi *) __a);
  13967. ret.val[0] = (poly8x16_t) __builtin_aarch64_get_qregxiv16qi (__o, 0);
  13968. ret.val[1] = (poly8x16_t) __builtin_aarch64_get_qregxiv16qi (__o, 1);
  13969. ret.val[2] = (poly8x16_t) __builtin_aarch64_get_qregxiv16qi (__o, 2);
  13970. ret.val[3] = (poly8x16_t) __builtin_aarch64_get_qregxiv16qi (__o, 3);
  13971. return ret;
  13972. }
  13973. __extension__ static __inline int16x8x4_t __attribute__ ((__always_inline__))
  13974. vld4q_s16 (const int16_t * __a)
  13975. {
  13976. int16x8x4_t ret;
  13977. __builtin_aarch64_simd_xi __o;
  13978. __o = __builtin_aarch64_ld4v8hi ((const __builtin_aarch64_simd_hi *) __a);
  13979. ret.val[0] = (int16x8_t) __builtin_aarch64_get_qregxiv8hi (__o, 0);
  13980. ret.val[1] = (int16x8_t) __builtin_aarch64_get_qregxiv8hi (__o, 1);
  13981. ret.val[2] = (int16x8_t) __builtin_aarch64_get_qregxiv8hi (__o, 2);
  13982. ret.val[3] = (int16x8_t) __builtin_aarch64_get_qregxiv8hi (__o, 3);
  13983. return ret;
  13984. }
  13985. __extension__ static __inline poly16x8x4_t __attribute__ ((__always_inline__))
  13986. vld4q_p16 (const poly16_t * __a)
  13987. {
  13988. poly16x8x4_t ret;
  13989. __builtin_aarch64_simd_xi __o;
  13990. __o = __builtin_aarch64_ld4v8hi ((const __builtin_aarch64_simd_hi *) __a);
  13991. ret.val[0] = (poly16x8_t) __builtin_aarch64_get_qregxiv8hi (__o, 0);
  13992. ret.val[1] = (poly16x8_t) __builtin_aarch64_get_qregxiv8hi (__o, 1);
  13993. ret.val[2] = (poly16x8_t) __builtin_aarch64_get_qregxiv8hi (__o, 2);
  13994. ret.val[3] = (poly16x8_t) __builtin_aarch64_get_qregxiv8hi (__o, 3);
  13995. return ret;
  13996. }
  13997. __extension__ static __inline int32x4x4_t __attribute__ ((__always_inline__))
  13998. vld4q_s32 (const int32_t * __a)
  13999. {
  14000. int32x4x4_t ret;
  14001. __builtin_aarch64_simd_xi __o;
  14002. __o = __builtin_aarch64_ld4v4si ((const __builtin_aarch64_simd_si *) __a);
  14003. ret.val[0] = (int32x4_t) __builtin_aarch64_get_qregxiv4si (__o, 0);
  14004. ret.val[1] = (int32x4_t) __builtin_aarch64_get_qregxiv4si (__o, 1);
  14005. ret.val[2] = (int32x4_t) __builtin_aarch64_get_qregxiv4si (__o, 2);
  14006. ret.val[3] = (int32x4_t) __builtin_aarch64_get_qregxiv4si (__o, 3);
  14007. return ret;
  14008. }
  14009. __extension__ static __inline int64x2x4_t __attribute__ ((__always_inline__))
  14010. vld4q_s64 (const int64_t * __a)
  14011. {
  14012. int64x2x4_t ret;
  14013. __builtin_aarch64_simd_xi __o;
  14014. __o = __builtin_aarch64_ld4v2di ((const __builtin_aarch64_simd_di *) __a);
  14015. ret.val[0] = (int64x2_t) __builtin_aarch64_get_qregxiv2di (__o, 0);
  14016. ret.val[1] = (int64x2_t) __builtin_aarch64_get_qregxiv2di (__o, 1);
  14017. ret.val[2] = (int64x2_t) __builtin_aarch64_get_qregxiv2di (__o, 2);
  14018. ret.val[3] = (int64x2_t) __builtin_aarch64_get_qregxiv2di (__o, 3);
  14019. return ret;
  14020. }
  14021. __extension__ static __inline uint8x16x4_t __attribute__ ((__always_inline__))
  14022. vld4q_u8 (const uint8_t * __a)
  14023. {
  14024. uint8x16x4_t ret;
  14025. __builtin_aarch64_simd_xi __o;
  14026. __o = __builtin_aarch64_ld4v16qi ((const __builtin_aarch64_simd_qi *) __a);
  14027. ret.val[0] = (uint8x16_t) __builtin_aarch64_get_qregxiv16qi (__o, 0);
  14028. ret.val[1] = (uint8x16_t) __builtin_aarch64_get_qregxiv16qi (__o, 1);
  14029. ret.val[2] = (uint8x16_t) __builtin_aarch64_get_qregxiv16qi (__o, 2);
  14030. ret.val[3] = (uint8x16_t) __builtin_aarch64_get_qregxiv16qi (__o, 3);
  14031. return ret;
  14032. }
  14033. __extension__ static __inline uint16x8x4_t __attribute__ ((__always_inline__))
  14034. vld4q_u16 (const uint16_t * __a)
  14035. {
  14036. uint16x8x4_t ret;
  14037. __builtin_aarch64_simd_xi __o;
  14038. __o = __builtin_aarch64_ld4v8hi ((const __builtin_aarch64_simd_hi *) __a);
  14039. ret.val[0] = (uint16x8_t) __builtin_aarch64_get_qregxiv8hi (__o, 0);
  14040. ret.val[1] = (uint16x8_t) __builtin_aarch64_get_qregxiv8hi (__o, 1);
  14041. ret.val[2] = (uint16x8_t) __builtin_aarch64_get_qregxiv8hi (__o, 2);
  14042. ret.val[3] = (uint16x8_t) __builtin_aarch64_get_qregxiv8hi (__o, 3);
  14043. return ret;
  14044. }
  14045. __extension__ static __inline uint32x4x4_t __attribute__ ((__always_inline__))
  14046. vld4q_u32 (const uint32_t * __a)
  14047. {
  14048. uint32x4x4_t ret;
  14049. __builtin_aarch64_simd_xi __o;
  14050. __o = __builtin_aarch64_ld4v4si ((const __builtin_aarch64_simd_si *) __a);
  14051. ret.val[0] = (uint32x4_t) __builtin_aarch64_get_qregxiv4si (__o, 0);
  14052. ret.val[1] = (uint32x4_t) __builtin_aarch64_get_qregxiv4si (__o, 1);
  14053. ret.val[2] = (uint32x4_t) __builtin_aarch64_get_qregxiv4si (__o, 2);
  14054. ret.val[3] = (uint32x4_t) __builtin_aarch64_get_qregxiv4si (__o, 3);
  14055. return ret;
  14056. }
  14057. __extension__ static __inline uint64x2x4_t __attribute__ ((__always_inline__))
  14058. vld4q_u64 (const uint64_t * __a)
  14059. {
  14060. uint64x2x4_t ret;
  14061. __builtin_aarch64_simd_xi __o;
  14062. __o = __builtin_aarch64_ld4v2di ((const __builtin_aarch64_simd_di *) __a);
  14063. ret.val[0] = (uint64x2_t) __builtin_aarch64_get_qregxiv2di (__o, 0);
  14064. ret.val[1] = (uint64x2_t) __builtin_aarch64_get_qregxiv2di (__o, 1);
  14065. ret.val[2] = (uint64x2_t) __builtin_aarch64_get_qregxiv2di (__o, 2);
  14066. ret.val[3] = (uint64x2_t) __builtin_aarch64_get_qregxiv2di (__o, 3);
  14067. return ret;
  14068. }
  14069. __extension__ static __inline float32x4x4_t __attribute__ ((__always_inline__))
  14070. vld4q_f32 (const float32_t * __a)
  14071. {
  14072. float32x4x4_t ret;
  14073. __builtin_aarch64_simd_xi __o;
  14074. __o = __builtin_aarch64_ld4v4sf ((const __builtin_aarch64_simd_sf *) __a);
  14075. ret.val[0] = (float32x4_t) __builtin_aarch64_get_qregxiv4sf (__o, 0);
  14076. ret.val[1] = (float32x4_t) __builtin_aarch64_get_qregxiv4sf (__o, 1);
  14077. ret.val[2] = (float32x4_t) __builtin_aarch64_get_qregxiv4sf (__o, 2);
  14078. ret.val[3] = (float32x4_t) __builtin_aarch64_get_qregxiv4sf (__o, 3);
  14079. return ret;
  14080. }
  14081. __extension__ static __inline float64x2x4_t __attribute__ ((__always_inline__))
  14082. vld4q_f64 (const float64_t * __a)
  14083. {
  14084. float64x2x4_t ret;
  14085. __builtin_aarch64_simd_xi __o;
  14086. __o = __builtin_aarch64_ld4v2df ((const __builtin_aarch64_simd_df *) __a);
  14087. ret.val[0] = (float64x2_t) __builtin_aarch64_get_qregxiv2df (__o, 0);
  14088. ret.val[1] = (float64x2_t) __builtin_aarch64_get_qregxiv2df (__o, 1);
  14089. ret.val[2] = (float64x2_t) __builtin_aarch64_get_qregxiv2df (__o, 2);
  14090. ret.val[3] = (float64x2_t) __builtin_aarch64_get_qregxiv2df (__o, 3);
  14091. return ret;
  14092. }
  14093. /* vldn_dup */
  14094. __extension__ static __inline int8x8x2_t __attribute__ ((__always_inline__))
  14095. vld2_dup_s8 (const int8_t * __a)
  14096. {
  14097. int8x8x2_t ret;
  14098. __builtin_aarch64_simd_oi __o;
  14099. __o = __builtin_aarch64_ld2rv8qi ((const __builtin_aarch64_simd_qi *) __a);
  14100. ret.val[0] = (int8x8_t) __builtin_aarch64_get_dregoiv8qi (__o, 0);
  14101. ret.val[1] = (int8x8_t) __builtin_aarch64_get_dregoiv8qi (__o, 1);
  14102. return ret;
  14103. }
  14104. __extension__ static __inline int16x4x2_t __attribute__ ((__always_inline__))
  14105. vld2_dup_s16 (const int16_t * __a)
  14106. {
  14107. int16x4x2_t ret;
  14108. __builtin_aarch64_simd_oi __o;
  14109. __o = __builtin_aarch64_ld2rv4hi ((const __builtin_aarch64_simd_hi *) __a);
  14110. ret.val[0] = (int16x4_t) __builtin_aarch64_get_dregoiv4hi (__o, 0);
  14111. ret.val[1] = (int16x4_t) __builtin_aarch64_get_dregoiv4hi (__o, 1);
  14112. return ret;
  14113. }
  14114. __extension__ static __inline int32x2x2_t __attribute__ ((__always_inline__))
  14115. vld2_dup_s32 (const int32_t * __a)
  14116. {
  14117. int32x2x2_t ret;
  14118. __builtin_aarch64_simd_oi __o;
  14119. __o = __builtin_aarch64_ld2rv2si ((const __builtin_aarch64_simd_si *) __a);
  14120. ret.val[0] = (int32x2_t) __builtin_aarch64_get_dregoiv2si (__o, 0);
  14121. ret.val[1] = (int32x2_t) __builtin_aarch64_get_dregoiv2si (__o, 1);
  14122. return ret;
  14123. }
  14124. __extension__ static __inline float32x2x2_t __attribute__ ((__always_inline__))
  14125. vld2_dup_f32 (const float32_t * __a)
  14126. {
  14127. float32x2x2_t ret;
  14128. __builtin_aarch64_simd_oi __o;
  14129. __o = __builtin_aarch64_ld2rv2sf ((const __builtin_aarch64_simd_sf *) __a);
  14130. ret.val[0] = (float32x2_t) __builtin_aarch64_get_dregoiv2sf (__o, 0);
  14131. ret.val[1] = (float32x2_t) __builtin_aarch64_get_dregoiv2sf (__o, 1);
  14132. return ret;
  14133. }
  14134. __extension__ static __inline float64x1x2_t __attribute__ ((__always_inline__))
  14135. vld2_dup_f64 (const float64_t * __a)
  14136. {
  14137. float64x1x2_t ret;
  14138. __builtin_aarch64_simd_oi __o;
  14139. __o = __builtin_aarch64_ld2rdf ((const __builtin_aarch64_simd_df *) __a);
  14140. ret.val[0] = (float64x1_t) {__builtin_aarch64_get_dregoidf (__o, 0)};
  14141. ret.val[1] = (float64x1_t) {__builtin_aarch64_get_dregoidf (__o, 1)};
  14142. return ret;
  14143. }
  14144. __extension__ static __inline uint8x8x2_t __attribute__ ((__always_inline__))
  14145. vld2_dup_u8 (const uint8_t * __a)
  14146. {
  14147. uint8x8x2_t ret;
  14148. __builtin_aarch64_simd_oi __o;
  14149. __o = __builtin_aarch64_ld2rv8qi ((const __builtin_aarch64_simd_qi *) __a);
  14150. ret.val[0] = (uint8x8_t) __builtin_aarch64_get_dregoiv8qi (__o, 0);
  14151. ret.val[1] = (uint8x8_t) __builtin_aarch64_get_dregoiv8qi (__o, 1);
  14152. return ret;
  14153. }
  14154. __extension__ static __inline uint16x4x2_t __attribute__ ((__always_inline__))
  14155. vld2_dup_u16 (const uint16_t * __a)
  14156. {
  14157. uint16x4x2_t ret;
  14158. __builtin_aarch64_simd_oi __o;
  14159. __o = __builtin_aarch64_ld2rv4hi ((const __builtin_aarch64_simd_hi *) __a);
  14160. ret.val[0] = (uint16x4_t) __builtin_aarch64_get_dregoiv4hi (__o, 0);
  14161. ret.val[1] = (uint16x4_t) __builtin_aarch64_get_dregoiv4hi (__o, 1);
  14162. return ret;
  14163. }
  14164. __extension__ static __inline uint32x2x2_t __attribute__ ((__always_inline__))
  14165. vld2_dup_u32 (const uint32_t * __a)
  14166. {
  14167. uint32x2x2_t ret;
  14168. __builtin_aarch64_simd_oi __o;
  14169. __o = __builtin_aarch64_ld2rv2si ((const __builtin_aarch64_simd_si *) __a);
  14170. ret.val[0] = (uint32x2_t) __builtin_aarch64_get_dregoiv2si (__o, 0);
  14171. ret.val[1] = (uint32x2_t) __builtin_aarch64_get_dregoiv2si (__o, 1);
  14172. return ret;
  14173. }
  14174. __extension__ static __inline poly8x8x2_t __attribute__ ((__always_inline__))
  14175. vld2_dup_p8 (const poly8_t * __a)
  14176. {
  14177. poly8x8x2_t ret;
  14178. __builtin_aarch64_simd_oi __o;
  14179. __o = __builtin_aarch64_ld2rv8qi ((const __builtin_aarch64_simd_qi *) __a);
  14180. ret.val[0] = (poly8x8_t) __builtin_aarch64_get_dregoiv8qi (__o, 0);
  14181. ret.val[1] = (poly8x8_t) __builtin_aarch64_get_dregoiv8qi (__o, 1);
  14182. return ret;
  14183. }
  14184. __extension__ static __inline poly16x4x2_t __attribute__ ((__always_inline__))
  14185. vld2_dup_p16 (const poly16_t * __a)
  14186. {
  14187. poly16x4x2_t ret;
  14188. __builtin_aarch64_simd_oi __o;
  14189. __o = __builtin_aarch64_ld2rv4hi ((const __builtin_aarch64_simd_hi *) __a);
  14190. ret.val[0] = (poly16x4_t) __builtin_aarch64_get_dregoiv4hi (__o, 0);
  14191. ret.val[1] = (poly16x4_t) __builtin_aarch64_get_dregoiv4hi (__o, 1);
  14192. return ret;
  14193. }
  14194. __extension__ static __inline int64x1x2_t __attribute__ ((__always_inline__))
  14195. vld2_dup_s64 (const int64_t * __a)
  14196. {
  14197. int64x1x2_t ret;
  14198. __builtin_aarch64_simd_oi __o;
  14199. __o = __builtin_aarch64_ld2rdi ((const __builtin_aarch64_simd_di *) __a);
  14200. ret.val[0] = (int64x1_t) __builtin_aarch64_get_dregoidi (__o, 0);
  14201. ret.val[1] = (int64x1_t) __builtin_aarch64_get_dregoidi (__o, 1);
  14202. return ret;
  14203. }
  14204. __extension__ static __inline uint64x1x2_t __attribute__ ((__always_inline__))
  14205. vld2_dup_u64 (const uint64_t * __a)
  14206. {
  14207. uint64x1x2_t ret;
  14208. __builtin_aarch64_simd_oi __o;
  14209. __o = __builtin_aarch64_ld2rdi ((const __builtin_aarch64_simd_di *) __a);
  14210. ret.val[0] = (uint64x1_t) __builtin_aarch64_get_dregoidi (__o, 0);
  14211. ret.val[1] = (uint64x1_t) __builtin_aarch64_get_dregoidi (__o, 1);
  14212. return ret;
  14213. }
  14214. __extension__ static __inline int8x16x2_t __attribute__ ((__always_inline__))
  14215. vld2q_dup_s8 (const int8_t * __a)
  14216. {
  14217. int8x16x2_t ret;
  14218. __builtin_aarch64_simd_oi __o;
  14219. __o = __builtin_aarch64_ld2rv16qi ((const __builtin_aarch64_simd_qi *) __a);
  14220. ret.val[0] = (int8x16_t) __builtin_aarch64_get_qregoiv16qi (__o, 0);
  14221. ret.val[1] = (int8x16_t) __builtin_aarch64_get_qregoiv16qi (__o, 1);
  14222. return ret;
  14223. }
  14224. __extension__ static __inline poly8x16x2_t __attribute__ ((__always_inline__))
  14225. vld2q_dup_p8 (const poly8_t * __a)
  14226. {
  14227. poly8x16x2_t ret;
  14228. __builtin_aarch64_simd_oi __o;
  14229. __o = __builtin_aarch64_ld2rv16qi ((const __builtin_aarch64_simd_qi *) __a);
  14230. ret.val[0] = (poly8x16_t) __builtin_aarch64_get_qregoiv16qi (__o, 0);
  14231. ret.val[1] = (poly8x16_t) __builtin_aarch64_get_qregoiv16qi (__o, 1);
  14232. return ret;
  14233. }
  14234. __extension__ static __inline int16x8x2_t __attribute__ ((__always_inline__))
  14235. vld2q_dup_s16 (const int16_t * __a)
  14236. {
  14237. int16x8x2_t ret;
  14238. __builtin_aarch64_simd_oi __o;
  14239. __o = __builtin_aarch64_ld2rv8hi ((const __builtin_aarch64_simd_hi *) __a);
  14240. ret.val[0] = (int16x8_t) __builtin_aarch64_get_qregoiv8hi (__o, 0);
  14241. ret.val[1] = (int16x8_t) __builtin_aarch64_get_qregoiv8hi (__o, 1);
  14242. return ret;
  14243. }
  14244. __extension__ static __inline poly16x8x2_t __attribute__ ((__always_inline__))
  14245. vld2q_dup_p16 (const poly16_t * __a)
  14246. {
  14247. poly16x8x2_t ret;
  14248. __builtin_aarch64_simd_oi __o;
  14249. __o = __builtin_aarch64_ld2rv8hi ((const __builtin_aarch64_simd_hi *) __a);
  14250. ret.val[0] = (poly16x8_t) __builtin_aarch64_get_qregoiv8hi (__o, 0);
  14251. ret.val[1] = (poly16x8_t) __builtin_aarch64_get_qregoiv8hi (__o, 1);
  14252. return ret;
  14253. }
  14254. __extension__ static __inline int32x4x2_t __attribute__ ((__always_inline__))
  14255. vld2q_dup_s32 (const int32_t * __a)
  14256. {
  14257. int32x4x2_t ret;
  14258. __builtin_aarch64_simd_oi __o;
  14259. __o = __builtin_aarch64_ld2rv4si ((const __builtin_aarch64_simd_si *) __a);
  14260. ret.val[0] = (int32x4_t) __builtin_aarch64_get_qregoiv4si (__o, 0);
  14261. ret.val[1] = (int32x4_t) __builtin_aarch64_get_qregoiv4si (__o, 1);
  14262. return ret;
  14263. }
  14264. __extension__ static __inline int64x2x2_t __attribute__ ((__always_inline__))
  14265. vld2q_dup_s64 (const int64_t * __a)
  14266. {
  14267. int64x2x2_t ret;
  14268. __builtin_aarch64_simd_oi __o;
  14269. __o = __builtin_aarch64_ld2rv2di ((const __builtin_aarch64_simd_di *) __a);
  14270. ret.val[0] = (int64x2_t) __builtin_aarch64_get_qregoiv2di (__o, 0);
  14271. ret.val[1] = (int64x2_t) __builtin_aarch64_get_qregoiv2di (__o, 1);
  14272. return ret;
  14273. }
  14274. __extension__ static __inline uint8x16x2_t __attribute__ ((__always_inline__))
  14275. vld2q_dup_u8 (const uint8_t * __a)
  14276. {
  14277. uint8x16x2_t ret;
  14278. __builtin_aarch64_simd_oi __o;
  14279. __o = __builtin_aarch64_ld2rv16qi ((const __builtin_aarch64_simd_qi *) __a);
  14280. ret.val[0] = (uint8x16_t) __builtin_aarch64_get_qregoiv16qi (__o, 0);
  14281. ret.val[1] = (uint8x16_t) __builtin_aarch64_get_qregoiv16qi (__o, 1);
  14282. return ret;
  14283. }
  14284. __extension__ static __inline uint16x8x2_t __attribute__ ((__always_inline__))
  14285. vld2q_dup_u16 (const uint16_t * __a)
  14286. {
  14287. uint16x8x2_t ret;
  14288. __builtin_aarch64_simd_oi __o;
  14289. __o = __builtin_aarch64_ld2rv8hi ((const __builtin_aarch64_simd_hi *) __a);
  14290. ret.val[0] = (uint16x8_t) __builtin_aarch64_get_qregoiv8hi (__o, 0);
  14291. ret.val[1] = (uint16x8_t) __builtin_aarch64_get_qregoiv8hi (__o, 1);
  14292. return ret;
  14293. }
  14294. __extension__ static __inline uint32x4x2_t __attribute__ ((__always_inline__))
  14295. vld2q_dup_u32 (const uint32_t * __a)
  14296. {
  14297. uint32x4x2_t ret;
  14298. __builtin_aarch64_simd_oi __o;
  14299. __o = __builtin_aarch64_ld2rv4si ((const __builtin_aarch64_simd_si *) __a);
  14300. ret.val[0] = (uint32x4_t) __builtin_aarch64_get_qregoiv4si (__o, 0);
  14301. ret.val[1] = (uint32x4_t) __builtin_aarch64_get_qregoiv4si (__o, 1);
  14302. return ret;
  14303. }
  14304. __extension__ static __inline uint64x2x2_t __attribute__ ((__always_inline__))
  14305. vld2q_dup_u64 (const uint64_t * __a)
  14306. {
  14307. uint64x2x2_t ret;
  14308. __builtin_aarch64_simd_oi __o;
  14309. __o = __builtin_aarch64_ld2rv2di ((const __builtin_aarch64_simd_di *) __a);
  14310. ret.val[0] = (uint64x2_t) __builtin_aarch64_get_qregoiv2di (__o, 0);
  14311. ret.val[1] = (uint64x2_t) __builtin_aarch64_get_qregoiv2di (__o, 1);
  14312. return ret;
  14313. }
  14314. __extension__ static __inline float32x4x2_t __attribute__ ((__always_inline__))
  14315. vld2q_dup_f32 (const float32_t * __a)
  14316. {
  14317. float32x4x2_t ret;
  14318. __builtin_aarch64_simd_oi __o;
  14319. __o = __builtin_aarch64_ld2rv4sf ((const __builtin_aarch64_simd_sf *) __a);
  14320. ret.val[0] = (float32x4_t) __builtin_aarch64_get_qregoiv4sf (__o, 0);
  14321. ret.val[1] = (float32x4_t) __builtin_aarch64_get_qregoiv4sf (__o, 1);
  14322. return ret;
  14323. }
  14324. __extension__ static __inline float64x2x2_t __attribute__ ((__always_inline__))
  14325. vld2q_dup_f64 (const float64_t * __a)
  14326. {
  14327. float64x2x2_t ret;
  14328. __builtin_aarch64_simd_oi __o;
  14329. __o = __builtin_aarch64_ld2rv2df ((const __builtin_aarch64_simd_df *) __a);
  14330. ret.val[0] = (float64x2_t) __builtin_aarch64_get_qregoiv2df (__o, 0);
  14331. ret.val[1] = (float64x2_t) __builtin_aarch64_get_qregoiv2df (__o, 1);
  14332. return ret;
  14333. }
  14334. __extension__ static __inline int64x1x3_t __attribute__ ((__always_inline__))
  14335. vld3_dup_s64 (const int64_t * __a)
  14336. {
  14337. int64x1x3_t ret;
  14338. __builtin_aarch64_simd_ci __o;
  14339. __o = __builtin_aarch64_ld3rdi ((const __builtin_aarch64_simd_di *) __a);
  14340. ret.val[0] = (int64x1_t) __builtin_aarch64_get_dregcidi (__o, 0);
  14341. ret.val[1] = (int64x1_t) __builtin_aarch64_get_dregcidi (__o, 1);
  14342. ret.val[2] = (int64x1_t) __builtin_aarch64_get_dregcidi (__o, 2);
  14343. return ret;
  14344. }
  14345. __extension__ static __inline uint64x1x3_t __attribute__ ((__always_inline__))
  14346. vld3_dup_u64 (const uint64_t * __a)
  14347. {
  14348. uint64x1x3_t ret;
  14349. __builtin_aarch64_simd_ci __o;
  14350. __o = __builtin_aarch64_ld3rdi ((const __builtin_aarch64_simd_di *) __a);
  14351. ret.val[0] = (uint64x1_t) __builtin_aarch64_get_dregcidi (__o, 0);
  14352. ret.val[1] = (uint64x1_t) __builtin_aarch64_get_dregcidi (__o, 1);
  14353. ret.val[2] = (uint64x1_t) __builtin_aarch64_get_dregcidi (__o, 2);
  14354. return ret;
  14355. }
  14356. __extension__ static __inline float64x1x3_t __attribute__ ((__always_inline__))
  14357. vld3_dup_f64 (const float64_t * __a)
  14358. {
  14359. float64x1x3_t ret;
  14360. __builtin_aarch64_simd_ci __o;
  14361. __o = __builtin_aarch64_ld3rdf ((const __builtin_aarch64_simd_df *) __a);
  14362. ret.val[0] = (float64x1_t) {__builtin_aarch64_get_dregcidf (__o, 0)};
  14363. ret.val[1] = (float64x1_t) {__builtin_aarch64_get_dregcidf (__o, 1)};
  14364. ret.val[2] = (float64x1_t) {__builtin_aarch64_get_dregcidf (__o, 2)};
  14365. return ret;
  14366. }
  14367. __extension__ static __inline int8x8x3_t __attribute__ ((__always_inline__))
  14368. vld3_dup_s8 (const int8_t * __a)
  14369. {
  14370. int8x8x3_t ret;
  14371. __builtin_aarch64_simd_ci __o;
  14372. __o = __builtin_aarch64_ld3rv8qi ((const __builtin_aarch64_simd_qi *) __a);
  14373. ret.val[0] = (int8x8_t) __builtin_aarch64_get_dregciv8qi (__o, 0);
  14374. ret.val[1] = (int8x8_t) __builtin_aarch64_get_dregciv8qi (__o, 1);
  14375. ret.val[2] = (int8x8_t) __builtin_aarch64_get_dregciv8qi (__o, 2);
  14376. return ret;
  14377. }
  14378. __extension__ static __inline poly8x8x3_t __attribute__ ((__always_inline__))
  14379. vld3_dup_p8 (const poly8_t * __a)
  14380. {
  14381. poly8x8x3_t ret;
  14382. __builtin_aarch64_simd_ci __o;
  14383. __o = __builtin_aarch64_ld3rv8qi ((const __builtin_aarch64_simd_qi *) __a);
  14384. ret.val[0] = (poly8x8_t) __builtin_aarch64_get_dregciv8qi (__o, 0);
  14385. ret.val[1] = (poly8x8_t) __builtin_aarch64_get_dregciv8qi (__o, 1);
  14386. ret.val[2] = (poly8x8_t) __builtin_aarch64_get_dregciv8qi (__o, 2);
  14387. return ret;
  14388. }
  14389. __extension__ static __inline int16x4x3_t __attribute__ ((__always_inline__))
  14390. vld3_dup_s16 (const int16_t * __a)
  14391. {
  14392. int16x4x3_t ret;
  14393. __builtin_aarch64_simd_ci __o;
  14394. __o = __builtin_aarch64_ld3rv4hi ((const __builtin_aarch64_simd_hi *) __a);
  14395. ret.val[0] = (int16x4_t) __builtin_aarch64_get_dregciv4hi (__o, 0);
  14396. ret.val[1] = (int16x4_t) __builtin_aarch64_get_dregciv4hi (__o, 1);
  14397. ret.val[2] = (int16x4_t) __builtin_aarch64_get_dregciv4hi (__o, 2);
  14398. return ret;
  14399. }
  14400. __extension__ static __inline poly16x4x3_t __attribute__ ((__always_inline__))
  14401. vld3_dup_p16 (const poly16_t * __a)
  14402. {
  14403. poly16x4x3_t ret;
  14404. __builtin_aarch64_simd_ci __o;
  14405. __o = __builtin_aarch64_ld3rv4hi ((const __builtin_aarch64_simd_hi *) __a);
  14406. ret.val[0] = (poly16x4_t) __builtin_aarch64_get_dregciv4hi (__o, 0);
  14407. ret.val[1] = (poly16x4_t) __builtin_aarch64_get_dregciv4hi (__o, 1);
  14408. ret.val[2] = (poly16x4_t) __builtin_aarch64_get_dregciv4hi (__o, 2);
  14409. return ret;
  14410. }
  14411. __extension__ static __inline int32x2x3_t __attribute__ ((__always_inline__))
  14412. vld3_dup_s32 (const int32_t * __a)
  14413. {
  14414. int32x2x3_t ret;
  14415. __builtin_aarch64_simd_ci __o;
  14416. __o = __builtin_aarch64_ld3rv2si ((const __builtin_aarch64_simd_si *) __a);
  14417. ret.val[0] = (int32x2_t) __builtin_aarch64_get_dregciv2si (__o, 0);
  14418. ret.val[1] = (int32x2_t) __builtin_aarch64_get_dregciv2si (__o, 1);
  14419. ret.val[2] = (int32x2_t) __builtin_aarch64_get_dregciv2si (__o, 2);
  14420. return ret;
  14421. }
  14422. __extension__ static __inline uint8x8x3_t __attribute__ ((__always_inline__))
  14423. vld3_dup_u8 (const uint8_t * __a)
  14424. {
  14425. uint8x8x3_t ret;
  14426. __builtin_aarch64_simd_ci __o;
  14427. __o = __builtin_aarch64_ld3rv8qi ((const __builtin_aarch64_simd_qi *) __a);
  14428. ret.val[0] = (uint8x8_t) __builtin_aarch64_get_dregciv8qi (__o, 0);
  14429. ret.val[1] = (uint8x8_t) __builtin_aarch64_get_dregciv8qi (__o, 1);
  14430. ret.val[2] = (uint8x8_t) __builtin_aarch64_get_dregciv8qi (__o, 2);
  14431. return ret;
  14432. }
  14433. __extension__ static __inline uint16x4x3_t __attribute__ ((__always_inline__))
  14434. vld3_dup_u16 (const uint16_t * __a)
  14435. {
  14436. uint16x4x3_t ret;
  14437. __builtin_aarch64_simd_ci __o;
  14438. __o = __builtin_aarch64_ld3rv4hi ((const __builtin_aarch64_simd_hi *) __a);
  14439. ret.val[0] = (uint16x4_t) __builtin_aarch64_get_dregciv4hi (__o, 0);
  14440. ret.val[1] = (uint16x4_t) __builtin_aarch64_get_dregciv4hi (__o, 1);
  14441. ret.val[2] = (uint16x4_t) __builtin_aarch64_get_dregciv4hi (__o, 2);
  14442. return ret;
  14443. }
  14444. __extension__ static __inline uint32x2x3_t __attribute__ ((__always_inline__))
  14445. vld3_dup_u32 (const uint32_t * __a)
  14446. {
  14447. uint32x2x3_t ret;
  14448. __builtin_aarch64_simd_ci __o;
  14449. __o = __builtin_aarch64_ld3rv2si ((const __builtin_aarch64_simd_si *) __a);
  14450. ret.val[0] = (uint32x2_t) __builtin_aarch64_get_dregciv2si (__o, 0);
  14451. ret.val[1] = (uint32x2_t) __builtin_aarch64_get_dregciv2si (__o, 1);
  14452. ret.val[2] = (uint32x2_t) __builtin_aarch64_get_dregciv2si (__o, 2);
  14453. return ret;
  14454. }
  14455. __extension__ static __inline float32x2x3_t __attribute__ ((__always_inline__))
  14456. vld3_dup_f32 (const float32_t * __a)
  14457. {
  14458. float32x2x3_t ret;
  14459. __builtin_aarch64_simd_ci __o;
  14460. __o = __builtin_aarch64_ld3rv2sf ((const __builtin_aarch64_simd_sf *) __a);
  14461. ret.val[0] = (float32x2_t) __builtin_aarch64_get_dregciv2sf (__o, 0);
  14462. ret.val[1] = (float32x2_t) __builtin_aarch64_get_dregciv2sf (__o, 1);
  14463. ret.val[2] = (float32x2_t) __builtin_aarch64_get_dregciv2sf (__o, 2);
  14464. return ret;
  14465. }
  14466. __extension__ static __inline int8x16x3_t __attribute__ ((__always_inline__))
  14467. vld3q_dup_s8 (const int8_t * __a)
  14468. {
  14469. int8x16x3_t ret;
  14470. __builtin_aarch64_simd_ci __o;
  14471. __o = __builtin_aarch64_ld3rv16qi ((const __builtin_aarch64_simd_qi *) __a);
  14472. ret.val[0] = (int8x16_t) __builtin_aarch64_get_qregciv16qi (__o, 0);
  14473. ret.val[1] = (int8x16_t) __builtin_aarch64_get_qregciv16qi (__o, 1);
  14474. ret.val[2] = (int8x16_t) __builtin_aarch64_get_qregciv16qi (__o, 2);
  14475. return ret;
  14476. }
  14477. __extension__ static __inline poly8x16x3_t __attribute__ ((__always_inline__))
  14478. vld3q_dup_p8 (const poly8_t * __a)
  14479. {
  14480. poly8x16x3_t ret;
  14481. __builtin_aarch64_simd_ci __o;
  14482. __o = __builtin_aarch64_ld3rv16qi ((const __builtin_aarch64_simd_qi *) __a);
  14483. ret.val[0] = (poly8x16_t) __builtin_aarch64_get_qregciv16qi (__o, 0);
  14484. ret.val[1] = (poly8x16_t) __builtin_aarch64_get_qregciv16qi (__o, 1);
  14485. ret.val[2] = (poly8x16_t) __builtin_aarch64_get_qregciv16qi (__o, 2);
  14486. return ret;
  14487. }
  14488. __extension__ static __inline int16x8x3_t __attribute__ ((__always_inline__))
  14489. vld3q_dup_s16 (const int16_t * __a)
  14490. {
  14491. int16x8x3_t ret;
  14492. __builtin_aarch64_simd_ci __o;
  14493. __o = __builtin_aarch64_ld3rv8hi ((const __builtin_aarch64_simd_hi *) __a);
  14494. ret.val[0] = (int16x8_t) __builtin_aarch64_get_qregciv8hi (__o, 0);
  14495. ret.val[1] = (int16x8_t) __builtin_aarch64_get_qregciv8hi (__o, 1);
  14496. ret.val[2] = (int16x8_t) __builtin_aarch64_get_qregciv8hi (__o, 2);
  14497. return ret;
  14498. }
  14499. __extension__ static __inline poly16x8x3_t __attribute__ ((__always_inline__))
  14500. vld3q_dup_p16 (const poly16_t * __a)
  14501. {
  14502. poly16x8x3_t ret;
  14503. __builtin_aarch64_simd_ci __o;
  14504. __o = __builtin_aarch64_ld3rv8hi ((const __builtin_aarch64_simd_hi *) __a);
  14505. ret.val[0] = (poly16x8_t) __builtin_aarch64_get_qregciv8hi (__o, 0);
  14506. ret.val[1] = (poly16x8_t) __builtin_aarch64_get_qregciv8hi (__o, 1);
  14507. ret.val[2] = (poly16x8_t) __builtin_aarch64_get_qregciv8hi (__o, 2);
  14508. return ret;
  14509. }
  14510. __extension__ static __inline int32x4x3_t __attribute__ ((__always_inline__))
  14511. vld3q_dup_s32 (const int32_t * __a)
  14512. {
  14513. int32x4x3_t ret;
  14514. __builtin_aarch64_simd_ci __o;
  14515. __o = __builtin_aarch64_ld3rv4si ((const __builtin_aarch64_simd_si *) __a);
  14516. ret.val[0] = (int32x4_t) __builtin_aarch64_get_qregciv4si (__o, 0);
  14517. ret.val[1] = (int32x4_t) __builtin_aarch64_get_qregciv4si (__o, 1);
  14518. ret.val[2] = (int32x4_t) __builtin_aarch64_get_qregciv4si (__o, 2);
  14519. return ret;
  14520. }
  14521. __extension__ static __inline int64x2x3_t __attribute__ ((__always_inline__))
  14522. vld3q_dup_s64 (const int64_t * __a)
  14523. {
  14524. int64x2x3_t ret;
  14525. __builtin_aarch64_simd_ci __o;
  14526. __o = __builtin_aarch64_ld3rv2di ((const __builtin_aarch64_simd_di *) __a);
  14527. ret.val[0] = (int64x2_t) __builtin_aarch64_get_qregciv2di (__o, 0);
  14528. ret.val[1] = (int64x2_t) __builtin_aarch64_get_qregciv2di (__o, 1);
  14529. ret.val[2] = (int64x2_t) __builtin_aarch64_get_qregciv2di (__o, 2);
  14530. return ret;
  14531. }
  14532. __extension__ static __inline uint8x16x3_t __attribute__ ((__always_inline__))
  14533. vld3q_dup_u8 (const uint8_t * __a)
  14534. {
  14535. uint8x16x3_t ret;
  14536. __builtin_aarch64_simd_ci __o;
  14537. __o = __builtin_aarch64_ld3rv16qi ((const __builtin_aarch64_simd_qi *) __a);
  14538. ret.val[0] = (uint8x16_t) __builtin_aarch64_get_qregciv16qi (__o, 0);
  14539. ret.val[1] = (uint8x16_t) __builtin_aarch64_get_qregciv16qi (__o, 1);
  14540. ret.val[2] = (uint8x16_t) __builtin_aarch64_get_qregciv16qi (__o, 2);
  14541. return ret;
  14542. }
  14543. __extension__ static __inline uint16x8x3_t __attribute__ ((__always_inline__))
  14544. vld3q_dup_u16 (const uint16_t * __a)
  14545. {
  14546. uint16x8x3_t ret;
  14547. __builtin_aarch64_simd_ci __o;
  14548. __o = __builtin_aarch64_ld3rv8hi ((const __builtin_aarch64_simd_hi *) __a);
  14549. ret.val[0] = (uint16x8_t) __builtin_aarch64_get_qregciv8hi (__o, 0);
  14550. ret.val[1] = (uint16x8_t) __builtin_aarch64_get_qregciv8hi (__o, 1);
  14551. ret.val[2] = (uint16x8_t) __builtin_aarch64_get_qregciv8hi (__o, 2);
  14552. return ret;
  14553. }
  14554. __extension__ static __inline uint32x4x3_t __attribute__ ((__always_inline__))
  14555. vld3q_dup_u32 (const uint32_t * __a)
  14556. {
  14557. uint32x4x3_t ret;
  14558. __builtin_aarch64_simd_ci __o;
  14559. __o = __builtin_aarch64_ld3rv4si ((const __builtin_aarch64_simd_si *) __a);
  14560. ret.val[0] = (uint32x4_t) __builtin_aarch64_get_qregciv4si (__o, 0);
  14561. ret.val[1] = (uint32x4_t) __builtin_aarch64_get_qregciv4si (__o, 1);
  14562. ret.val[2] = (uint32x4_t) __builtin_aarch64_get_qregciv4si (__o, 2);
  14563. return ret;
  14564. }
  14565. __extension__ static __inline uint64x2x3_t __attribute__ ((__always_inline__))
  14566. vld3q_dup_u64 (const uint64_t * __a)
  14567. {
  14568. uint64x2x3_t ret;
  14569. __builtin_aarch64_simd_ci __o;
  14570. __o = __builtin_aarch64_ld3rv2di ((const __builtin_aarch64_simd_di *) __a);
  14571. ret.val[0] = (uint64x2_t) __builtin_aarch64_get_qregciv2di (__o, 0);
  14572. ret.val[1] = (uint64x2_t) __builtin_aarch64_get_qregciv2di (__o, 1);
  14573. ret.val[2] = (uint64x2_t) __builtin_aarch64_get_qregciv2di (__o, 2);
  14574. return ret;
  14575. }
  14576. __extension__ static __inline float32x4x3_t __attribute__ ((__always_inline__))
  14577. vld3q_dup_f32 (const float32_t * __a)
  14578. {
  14579. float32x4x3_t ret;
  14580. __builtin_aarch64_simd_ci __o;
  14581. __o = __builtin_aarch64_ld3rv4sf ((const __builtin_aarch64_simd_sf *) __a);
  14582. ret.val[0] = (float32x4_t) __builtin_aarch64_get_qregciv4sf (__o, 0);
  14583. ret.val[1] = (float32x4_t) __builtin_aarch64_get_qregciv4sf (__o, 1);
  14584. ret.val[2] = (float32x4_t) __builtin_aarch64_get_qregciv4sf (__o, 2);
  14585. return ret;
  14586. }
  14587. __extension__ static __inline float64x2x3_t __attribute__ ((__always_inline__))
  14588. vld3q_dup_f64 (const float64_t * __a)
  14589. {
  14590. float64x2x3_t ret;
  14591. __builtin_aarch64_simd_ci __o;
  14592. __o = __builtin_aarch64_ld3rv2df ((const __builtin_aarch64_simd_df *) __a);
  14593. ret.val[0] = (float64x2_t) __builtin_aarch64_get_qregciv2df (__o, 0);
  14594. ret.val[1] = (float64x2_t) __builtin_aarch64_get_qregciv2df (__o, 1);
  14595. ret.val[2] = (float64x2_t) __builtin_aarch64_get_qregciv2df (__o, 2);
  14596. return ret;
  14597. }
  14598. __extension__ static __inline int64x1x4_t __attribute__ ((__always_inline__))
  14599. vld4_dup_s64 (const int64_t * __a)
  14600. {
  14601. int64x1x4_t ret;
  14602. __builtin_aarch64_simd_xi __o;
  14603. __o = __builtin_aarch64_ld4rdi ((const __builtin_aarch64_simd_di *) __a);
  14604. ret.val[0] = (int64x1_t) __builtin_aarch64_get_dregxidi (__o, 0);
  14605. ret.val[1] = (int64x1_t) __builtin_aarch64_get_dregxidi (__o, 1);
  14606. ret.val[2] = (int64x1_t) __builtin_aarch64_get_dregxidi (__o, 2);
  14607. ret.val[3] = (int64x1_t) __builtin_aarch64_get_dregxidi (__o, 3);
  14608. return ret;
  14609. }
  14610. __extension__ static __inline uint64x1x4_t __attribute__ ((__always_inline__))
  14611. vld4_dup_u64 (const uint64_t * __a)
  14612. {
  14613. uint64x1x4_t ret;
  14614. __builtin_aarch64_simd_xi __o;
  14615. __o = __builtin_aarch64_ld4rdi ((const __builtin_aarch64_simd_di *) __a);
  14616. ret.val[0] = (uint64x1_t) __builtin_aarch64_get_dregxidi (__o, 0);
  14617. ret.val[1] = (uint64x1_t) __builtin_aarch64_get_dregxidi (__o, 1);
  14618. ret.val[2] = (uint64x1_t) __builtin_aarch64_get_dregxidi (__o, 2);
  14619. ret.val[3] = (uint64x1_t) __builtin_aarch64_get_dregxidi (__o, 3);
  14620. return ret;
  14621. }
  14622. __extension__ static __inline float64x1x4_t __attribute__ ((__always_inline__))
  14623. vld4_dup_f64 (const float64_t * __a)
  14624. {
  14625. float64x1x4_t ret;
  14626. __builtin_aarch64_simd_xi __o;
  14627. __o = __builtin_aarch64_ld4rdf ((const __builtin_aarch64_simd_df *) __a);
  14628. ret.val[0] = (float64x1_t) {__builtin_aarch64_get_dregxidf (__o, 0)};
  14629. ret.val[1] = (float64x1_t) {__builtin_aarch64_get_dregxidf (__o, 1)};
  14630. ret.val[2] = (float64x1_t) {__builtin_aarch64_get_dregxidf (__o, 2)};
  14631. ret.val[3] = (float64x1_t) {__builtin_aarch64_get_dregxidf (__o, 3)};
  14632. return ret;
  14633. }
  14634. __extension__ static __inline int8x8x4_t __attribute__ ((__always_inline__))
  14635. vld4_dup_s8 (const int8_t * __a)
  14636. {
  14637. int8x8x4_t ret;
  14638. __builtin_aarch64_simd_xi __o;
  14639. __o = __builtin_aarch64_ld4rv8qi ((const __builtin_aarch64_simd_qi *) __a);
  14640. ret.val[0] = (int8x8_t) __builtin_aarch64_get_dregxiv8qi (__o, 0);
  14641. ret.val[1] = (int8x8_t) __builtin_aarch64_get_dregxiv8qi (__o, 1);
  14642. ret.val[2] = (int8x8_t) __builtin_aarch64_get_dregxiv8qi (__o, 2);
  14643. ret.val[3] = (int8x8_t) __builtin_aarch64_get_dregxiv8qi (__o, 3);
  14644. return ret;
  14645. }
  14646. __extension__ static __inline poly8x8x4_t __attribute__ ((__always_inline__))
  14647. vld4_dup_p8 (const poly8_t * __a)
  14648. {
  14649. poly8x8x4_t ret;
  14650. __builtin_aarch64_simd_xi __o;
  14651. __o = __builtin_aarch64_ld4rv8qi ((const __builtin_aarch64_simd_qi *) __a);
  14652. ret.val[0] = (poly8x8_t) __builtin_aarch64_get_dregxiv8qi (__o, 0);
  14653. ret.val[1] = (poly8x8_t) __builtin_aarch64_get_dregxiv8qi (__o, 1);
  14654. ret.val[2] = (poly8x8_t) __builtin_aarch64_get_dregxiv8qi (__o, 2);
  14655. ret.val[3] = (poly8x8_t) __builtin_aarch64_get_dregxiv8qi (__o, 3);
  14656. return ret;
  14657. }
  14658. __extension__ static __inline int16x4x4_t __attribute__ ((__always_inline__))
  14659. vld4_dup_s16 (const int16_t * __a)
  14660. {
  14661. int16x4x4_t ret;
  14662. __builtin_aarch64_simd_xi __o;
  14663. __o = __builtin_aarch64_ld4rv4hi ((const __builtin_aarch64_simd_hi *) __a);
  14664. ret.val[0] = (int16x4_t) __builtin_aarch64_get_dregxiv4hi (__o, 0);
  14665. ret.val[1] = (int16x4_t) __builtin_aarch64_get_dregxiv4hi (__o, 1);
  14666. ret.val[2] = (int16x4_t) __builtin_aarch64_get_dregxiv4hi (__o, 2);
  14667. ret.val[3] = (int16x4_t) __builtin_aarch64_get_dregxiv4hi (__o, 3);
  14668. return ret;
  14669. }
  14670. __extension__ static __inline poly16x4x4_t __attribute__ ((__always_inline__))
  14671. vld4_dup_p16 (const poly16_t * __a)
  14672. {
  14673. poly16x4x4_t ret;
  14674. __builtin_aarch64_simd_xi __o;
  14675. __o = __builtin_aarch64_ld4rv4hi ((const __builtin_aarch64_simd_hi *) __a);
  14676. ret.val[0] = (poly16x4_t) __builtin_aarch64_get_dregxiv4hi (__o, 0);
  14677. ret.val[1] = (poly16x4_t) __builtin_aarch64_get_dregxiv4hi (__o, 1);
  14678. ret.val[2] = (poly16x4_t) __builtin_aarch64_get_dregxiv4hi (__o, 2);
  14679. ret.val[3] = (poly16x4_t) __builtin_aarch64_get_dregxiv4hi (__o, 3);
  14680. return ret;
  14681. }
  14682. __extension__ static __inline int32x2x4_t __attribute__ ((__always_inline__))
  14683. vld4_dup_s32 (const int32_t * __a)
  14684. {
  14685. int32x2x4_t ret;
  14686. __builtin_aarch64_simd_xi __o;
  14687. __o = __builtin_aarch64_ld4rv2si ((const __builtin_aarch64_simd_si *) __a);
  14688. ret.val[0] = (int32x2_t) __builtin_aarch64_get_dregxiv2si (__o, 0);
  14689. ret.val[1] = (int32x2_t) __builtin_aarch64_get_dregxiv2si (__o, 1);
  14690. ret.val[2] = (int32x2_t) __builtin_aarch64_get_dregxiv2si (__o, 2);
  14691. ret.val[3] = (int32x2_t) __builtin_aarch64_get_dregxiv2si (__o, 3);
  14692. return ret;
  14693. }
  14694. __extension__ static __inline uint8x8x4_t __attribute__ ((__always_inline__))
  14695. vld4_dup_u8 (const uint8_t * __a)
  14696. {
  14697. uint8x8x4_t ret;
  14698. __builtin_aarch64_simd_xi __o;
  14699. __o = __builtin_aarch64_ld4rv8qi ((const __builtin_aarch64_simd_qi *) __a);
  14700. ret.val[0] = (uint8x8_t) __builtin_aarch64_get_dregxiv8qi (__o, 0);
  14701. ret.val[1] = (uint8x8_t) __builtin_aarch64_get_dregxiv8qi (__o, 1);
  14702. ret.val[2] = (uint8x8_t) __builtin_aarch64_get_dregxiv8qi (__o, 2);
  14703. ret.val[3] = (uint8x8_t) __builtin_aarch64_get_dregxiv8qi (__o, 3);
  14704. return ret;
  14705. }
  14706. __extension__ static __inline uint16x4x4_t __attribute__ ((__always_inline__))
  14707. vld4_dup_u16 (const uint16_t * __a)
  14708. {
  14709. uint16x4x4_t ret;
  14710. __builtin_aarch64_simd_xi __o;
  14711. __o = __builtin_aarch64_ld4rv4hi ((const __builtin_aarch64_simd_hi *) __a);
  14712. ret.val[0] = (uint16x4_t) __builtin_aarch64_get_dregxiv4hi (__o, 0);
  14713. ret.val[1] = (uint16x4_t) __builtin_aarch64_get_dregxiv4hi (__o, 1);
  14714. ret.val[2] = (uint16x4_t) __builtin_aarch64_get_dregxiv4hi (__o, 2);
  14715. ret.val[3] = (uint16x4_t) __builtin_aarch64_get_dregxiv4hi (__o, 3);
  14716. return ret;
  14717. }
  14718. __extension__ static __inline uint32x2x4_t __attribute__ ((__always_inline__))
  14719. vld4_dup_u32 (const uint32_t * __a)
  14720. {
  14721. uint32x2x4_t ret;
  14722. __builtin_aarch64_simd_xi __o;
  14723. __o = __builtin_aarch64_ld4rv2si ((const __builtin_aarch64_simd_si *) __a);
  14724. ret.val[0] = (uint32x2_t) __builtin_aarch64_get_dregxiv2si (__o, 0);
  14725. ret.val[1] = (uint32x2_t) __builtin_aarch64_get_dregxiv2si (__o, 1);
  14726. ret.val[2] = (uint32x2_t) __builtin_aarch64_get_dregxiv2si (__o, 2);
  14727. ret.val[3] = (uint32x2_t) __builtin_aarch64_get_dregxiv2si (__o, 3);
  14728. return ret;
  14729. }
  14730. __extension__ static __inline float32x2x4_t __attribute__ ((__always_inline__))
  14731. vld4_dup_f32 (const float32_t * __a)
  14732. {
  14733. float32x2x4_t ret;
  14734. __builtin_aarch64_simd_xi __o;
  14735. __o = __builtin_aarch64_ld4rv2sf ((const __builtin_aarch64_simd_sf *) __a);
  14736. ret.val[0] = (float32x2_t) __builtin_aarch64_get_dregxiv2sf (__o, 0);
  14737. ret.val[1] = (float32x2_t) __builtin_aarch64_get_dregxiv2sf (__o, 1);
  14738. ret.val[2] = (float32x2_t) __builtin_aarch64_get_dregxiv2sf (__o, 2);
  14739. ret.val[3] = (float32x2_t) __builtin_aarch64_get_dregxiv2sf (__o, 3);
  14740. return ret;
  14741. }
  14742. __extension__ static __inline int8x16x4_t __attribute__ ((__always_inline__))
  14743. vld4q_dup_s8 (const int8_t * __a)
  14744. {
  14745. int8x16x4_t ret;
  14746. __builtin_aarch64_simd_xi __o;
  14747. __o = __builtin_aarch64_ld4rv16qi ((const __builtin_aarch64_simd_qi *) __a);
  14748. ret.val[0] = (int8x16_t) __builtin_aarch64_get_qregxiv16qi (__o, 0);
  14749. ret.val[1] = (int8x16_t) __builtin_aarch64_get_qregxiv16qi (__o, 1);
  14750. ret.val[2] = (int8x16_t) __builtin_aarch64_get_qregxiv16qi (__o, 2);
  14751. ret.val[3] = (int8x16_t) __builtin_aarch64_get_qregxiv16qi (__o, 3);
  14752. return ret;
  14753. }
  14754. __extension__ static __inline poly8x16x4_t __attribute__ ((__always_inline__))
  14755. vld4q_dup_p8 (const poly8_t * __a)
  14756. {
  14757. poly8x16x4_t ret;
  14758. __builtin_aarch64_simd_xi __o;
  14759. __o = __builtin_aarch64_ld4rv16qi ((const __builtin_aarch64_simd_qi *) __a);
  14760. ret.val[0] = (poly8x16_t) __builtin_aarch64_get_qregxiv16qi (__o, 0);
  14761. ret.val[1] = (poly8x16_t) __builtin_aarch64_get_qregxiv16qi (__o, 1);
  14762. ret.val[2] = (poly8x16_t) __builtin_aarch64_get_qregxiv16qi (__o, 2);
  14763. ret.val[3] = (poly8x16_t) __builtin_aarch64_get_qregxiv16qi (__o, 3);
  14764. return ret;
  14765. }
  14766. __extension__ static __inline int16x8x4_t __attribute__ ((__always_inline__))
  14767. vld4q_dup_s16 (const int16_t * __a)
  14768. {
  14769. int16x8x4_t ret;
  14770. __builtin_aarch64_simd_xi __o;
  14771. __o = __builtin_aarch64_ld4rv8hi ((const __builtin_aarch64_simd_hi *) __a);
  14772. ret.val[0] = (int16x8_t) __builtin_aarch64_get_qregxiv8hi (__o, 0);
  14773. ret.val[1] = (int16x8_t) __builtin_aarch64_get_qregxiv8hi (__o, 1);
  14774. ret.val[2] = (int16x8_t) __builtin_aarch64_get_qregxiv8hi (__o, 2);
  14775. ret.val[3] = (int16x8_t) __builtin_aarch64_get_qregxiv8hi (__o, 3);
  14776. return ret;
  14777. }
  14778. __extension__ static __inline poly16x8x4_t __attribute__ ((__always_inline__))
  14779. vld4q_dup_p16 (const poly16_t * __a)
  14780. {
  14781. poly16x8x4_t ret;
  14782. __builtin_aarch64_simd_xi __o;
  14783. __o = __builtin_aarch64_ld4rv8hi ((const __builtin_aarch64_simd_hi *) __a);
  14784. ret.val[0] = (poly16x8_t) __builtin_aarch64_get_qregxiv8hi (__o, 0);
  14785. ret.val[1] = (poly16x8_t) __builtin_aarch64_get_qregxiv8hi (__o, 1);
  14786. ret.val[2] = (poly16x8_t) __builtin_aarch64_get_qregxiv8hi (__o, 2);
  14787. ret.val[3] = (poly16x8_t) __builtin_aarch64_get_qregxiv8hi (__o, 3);
  14788. return ret;
  14789. }
  14790. __extension__ static __inline int32x4x4_t __attribute__ ((__always_inline__))
  14791. vld4q_dup_s32 (const int32_t * __a)
  14792. {
  14793. int32x4x4_t ret;
  14794. __builtin_aarch64_simd_xi __o;
  14795. __o = __builtin_aarch64_ld4rv4si ((const __builtin_aarch64_simd_si *) __a);
  14796. ret.val[0] = (int32x4_t) __builtin_aarch64_get_qregxiv4si (__o, 0);
  14797. ret.val[1] = (int32x4_t) __builtin_aarch64_get_qregxiv4si (__o, 1);
  14798. ret.val[2] = (int32x4_t) __builtin_aarch64_get_qregxiv4si (__o, 2);
  14799. ret.val[3] = (int32x4_t) __builtin_aarch64_get_qregxiv4si (__o, 3);
  14800. return ret;
  14801. }
  14802. __extension__ static __inline int64x2x4_t __attribute__ ((__always_inline__))
  14803. vld4q_dup_s64 (const int64_t * __a)
  14804. {
  14805. int64x2x4_t ret;
  14806. __builtin_aarch64_simd_xi __o;
  14807. __o = __builtin_aarch64_ld4rv2di ((const __builtin_aarch64_simd_di *) __a);
  14808. ret.val[0] = (int64x2_t) __builtin_aarch64_get_qregxiv2di (__o, 0);
  14809. ret.val[1] = (int64x2_t) __builtin_aarch64_get_qregxiv2di (__o, 1);
  14810. ret.val[2] = (int64x2_t) __builtin_aarch64_get_qregxiv2di (__o, 2);
  14811. ret.val[3] = (int64x2_t) __builtin_aarch64_get_qregxiv2di (__o, 3);
  14812. return ret;
  14813. }
  14814. __extension__ static __inline uint8x16x4_t __attribute__ ((__always_inline__))
  14815. vld4q_dup_u8 (const uint8_t * __a)
  14816. {
  14817. uint8x16x4_t ret;
  14818. __builtin_aarch64_simd_xi __o;
  14819. __o = __builtin_aarch64_ld4rv16qi ((const __builtin_aarch64_simd_qi *) __a);
  14820. ret.val[0] = (uint8x16_t) __builtin_aarch64_get_qregxiv16qi (__o, 0);
  14821. ret.val[1] = (uint8x16_t) __builtin_aarch64_get_qregxiv16qi (__o, 1);
  14822. ret.val[2] = (uint8x16_t) __builtin_aarch64_get_qregxiv16qi (__o, 2);
  14823. ret.val[3] = (uint8x16_t) __builtin_aarch64_get_qregxiv16qi (__o, 3);
  14824. return ret;
  14825. }
  14826. __extension__ static __inline uint16x8x4_t __attribute__ ((__always_inline__))
  14827. vld4q_dup_u16 (const uint16_t * __a)
  14828. {
  14829. uint16x8x4_t ret;
  14830. __builtin_aarch64_simd_xi __o;
  14831. __o = __builtin_aarch64_ld4rv8hi ((const __builtin_aarch64_simd_hi *) __a);
  14832. ret.val[0] = (uint16x8_t) __builtin_aarch64_get_qregxiv8hi (__o, 0);
  14833. ret.val[1] = (uint16x8_t) __builtin_aarch64_get_qregxiv8hi (__o, 1);
  14834. ret.val[2] = (uint16x8_t) __builtin_aarch64_get_qregxiv8hi (__o, 2);
  14835. ret.val[3] = (uint16x8_t) __builtin_aarch64_get_qregxiv8hi (__o, 3);
  14836. return ret;
  14837. }
  14838. __extension__ static __inline uint32x4x4_t __attribute__ ((__always_inline__))
  14839. vld4q_dup_u32 (const uint32_t * __a)
  14840. {
  14841. uint32x4x4_t ret;
  14842. __builtin_aarch64_simd_xi __o;
  14843. __o = __builtin_aarch64_ld4rv4si ((const __builtin_aarch64_simd_si *) __a);
  14844. ret.val[0] = (uint32x4_t) __builtin_aarch64_get_qregxiv4si (__o, 0);
  14845. ret.val[1] = (uint32x4_t) __builtin_aarch64_get_qregxiv4si (__o, 1);
  14846. ret.val[2] = (uint32x4_t) __builtin_aarch64_get_qregxiv4si (__o, 2);
  14847. ret.val[3] = (uint32x4_t) __builtin_aarch64_get_qregxiv4si (__o, 3);
  14848. return ret;
  14849. }
  14850. __extension__ static __inline uint64x2x4_t __attribute__ ((__always_inline__))
  14851. vld4q_dup_u64 (const uint64_t * __a)
  14852. {
  14853. uint64x2x4_t ret;
  14854. __builtin_aarch64_simd_xi __o;
  14855. __o = __builtin_aarch64_ld4rv2di ((const __builtin_aarch64_simd_di *) __a);
  14856. ret.val[0] = (uint64x2_t) __builtin_aarch64_get_qregxiv2di (__o, 0);
  14857. ret.val[1] = (uint64x2_t) __builtin_aarch64_get_qregxiv2di (__o, 1);
  14858. ret.val[2] = (uint64x2_t) __builtin_aarch64_get_qregxiv2di (__o, 2);
  14859. ret.val[3] = (uint64x2_t) __builtin_aarch64_get_qregxiv2di (__o, 3);
  14860. return ret;
  14861. }
  14862. __extension__ static __inline float32x4x4_t __attribute__ ((__always_inline__))
  14863. vld4q_dup_f32 (const float32_t * __a)
  14864. {
  14865. float32x4x4_t ret;
  14866. __builtin_aarch64_simd_xi __o;
  14867. __o = __builtin_aarch64_ld4rv4sf ((const __builtin_aarch64_simd_sf *) __a);
  14868. ret.val[0] = (float32x4_t) __builtin_aarch64_get_qregxiv4sf (__o, 0);
  14869. ret.val[1] = (float32x4_t) __builtin_aarch64_get_qregxiv4sf (__o, 1);
  14870. ret.val[2] = (float32x4_t) __builtin_aarch64_get_qregxiv4sf (__o, 2);
  14871. ret.val[3] = (float32x4_t) __builtin_aarch64_get_qregxiv4sf (__o, 3);
  14872. return ret;
  14873. }
  14874. __extension__ static __inline float64x2x4_t __attribute__ ((__always_inline__))
  14875. vld4q_dup_f64 (const float64_t * __a)
  14876. {
  14877. float64x2x4_t ret;
  14878. __builtin_aarch64_simd_xi __o;
  14879. __o = __builtin_aarch64_ld4rv2df ((const __builtin_aarch64_simd_df *) __a);
  14880. ret.val[0] = (float64x2_t) __builtin_aarch64_get_qregxiv2df (__o, 0);
  14881. ret.val[1] = (float64x2_t) __builtin_aarch64_get_qregxiv2df (__o, 1);
  14882. ret.val[2] = (float64x2_t) __builtin_aarch64_get_qregxiv2df (__o, 2);
  14883. ret.val[3] = (float64x2_t) __builtin_aarch64_get_qregxiv2df (__o, 3);
  14884. return ret;
  14885. }
  14886. /* vld2_lane */
  14887. #define __LD2_LANE_FUNC(intype, vectype, largetype, ptrtype, \
  14888. mode, ptrmode, funcsuffix, signedtype) \
  14889. __extension__ static __inline intype __attribute__ ((__always_inline__)) \
  14890. vld2_lane_##funcsuffix (const ptrtype * __ptr, intype __b, const int __c) \
  14891. { \
  14892. __builtin_aarch64_simd_oi __o; \
  14893. largetype __temp; \
  14894. __temp.val[0] = \
  14895. vcombine_##funcsuffix (__b.val[0], vcreate_##funcsuffix (0)); \
  14896. __temp.val[1] = \
  14897. vcombine_##funcsuffix (__b.val[1], vcreate_##funcsuffix (0)); \
  14898. __o = __builtin_aarch64_set_qregoi##mode (__o, \
  14899. (signedtype) __temp.val[0], \
  14900. 0); \
  14901. __o = __builtin_aarch64_set_qregoi##mode (__o, \
  14902. (signedtype) __temp.val[1], \
  14903. 1); \
  14904. __o = __builtin_aarch64_ld2_lane##mode ( \
  14905. (__builtin_aarch64_simd_##ptrmode *) __ptr, __o, __c); \
  14906. __b.val[0] = (vectype) __builtin_aarch64_get_dregoidi (__o, 0); \
  14907. __b.val[1] = (vectype) __builtin_aarch64_get_dregoidi (__o, 1); \
  14908. return __b; \
  14909. }
  14910. __LD2_LANE_FUNC (float32x2x2_t, float32x2_t, float32x4x2_t, float32_t, v4sf,
  14911. sf, f32, float32x4_t)
  14912. __LD2_LANE_FUNC (float64x1x2_t, float64x1_t, float64x2x2_t, float64_t, v2df,
  14913. df, f64, float64x2_t)
  14914. __LD2_LANE_FUNC (poly8x8x2_t, poly8x8_t, poly8x16x2_t, poly8_t, v16qi, qi, p8,
  14915. int8x16_t)
  14916. __LD2_LANE_FUNC (poly16x4x2_t, poly16x4_t, poly16x8x2_t, poly16_t, v8hi, hi,
  14917. p16, int16x8_t)
  14918. __LD2_LANE_FUNC (int8x8x2_t, int8x8_t, int8x16x2_t, int8_t, v16qi, qi, s8,
  14919. int8x16_t)
  14920. __LD2_LANE_FUNC (int16x4x2_t, int16x4_t, int16x8x2_t, int16_t, v8hi, hi, s16,
  14921. int16x8_t)
  14922. __LD2_LANE_FUNC (int32x2x2_t, int32x2_t, int32x4x2_t, int32_t, v4si, si, s32,
  14923. int32x4_t)
  14924. __LD2_LANE_FUNC (int64x1x2_t, int64x1_t, int64x2x2_t, int64_t, v2di, di, s64,
  14925. int64x2_t)
  14926. __LD2_LANE_FUNC (uint8x8x2_t, uint8x8_t, uint8x16x2_t, uint8_t, v16qi, qi, u8,
  14927. int8x16_t)
  14928. __LD2_LANE_FUNC (uint16x4x2_t, uint16x4_t, uint16x8x2_t, uint16_t, v8hi, hi,
  14929. u16, int16x8_t)
  14930. __LD2_LANE_FUNC (uint32x2x2_t, uint32x2_t, uint32x4x2_t, uint32_t, v4si, si,
  14931. u32, int32x4_t)
  14932. __LD2_LANE_FUNC (uint64x1x2_t, uint64x1_t, uint64x2x2_t, uint64_t, v2di, di,
  14933. u64, int64x2_t)
  14934. #undef __LD2_LANE_FUNC
  14935. /* vld2q_lane */
  14936. #define __LD2_LANE_FUNC(intype, vtype, ptrtype, mode, ptrmode, funcsuffix) \
  14937. __extension__ static __inline intype __attribute__ ((__always_inline__)) \
  14938. vld2q_lane_##funcsuffix (const ptrtype * __ptr, intype __b, const int __c) \
  14939. { \
  14940. __builtin_aarch64_simd_oi __o; \
  14941. intype ret; \
  14942. __o = __builtin_aarch64_set_qregoiv4si (__o, (int32x4_t) __b.val[0], 0); \
  14943. __o = __builtin_aarch64_set_qregoiv4si (__o, (int32x4_t) __b.val[1], 1); \
  14944. __o = __builtin_aarch64_ld2_lane##mode ( \
  14945. (__builtin_aarch64_simd_##ptrmode *) __ptr, __o, __c); \
  14946. ret.val[0] = (vtype) __builtin_aarch64_get_qregoiv4si (__o, 0); \
  14947. ret.val[1] = (vtype) __builtin_aarch64_get_qregoiv4si (__o, 1); \
  14948. return ret; \
  14949. }
  14950. __LD2_LANE_FUNC (float32x4x2_t, float32x4_t, float32_t, v4sf, sf, f32)
  14951. __LD2_LANE_FUNC (float64x2x2_t, float64x2_t, float64_t, v2df, df, f64)
  14952. __LD2_LANE_FUNC (poly8x16x2_t, poly8x16_t, poly8_t, v16qi, qi, p8)
  14953. __LD2_LANE_FUNC (poly16x8x2_t, poly16x8_t, poly16_t, v8hi, hi, p16)
  14954. __LD2_LANE_FUNC (int8x16x2_t, int8x16_t, int8_t, v16qi, qi, s8)
  14955. __LD2_LANE_FUNC (int16x8x2_t, int16x8_t, int16_t, v8hi, hi, s16)
  14956. __LD2_LANE_FUNC (int32x4x2_t, int32x4_t, int32_t, v4si, si, s32)
  14957. __LD2_LANE_FUNC (int64x2x2_t, int64x2_t, int64_t, v2di, di, s64)
  14958. __LD2_LANE_FUNC (uint8x16x2_t, uint8x16_t, uint8_t, v16qi, qi, u8)
  14959. __LD2_LANE_FUNC (uint16x8x2_t, uint16x8_t, uint16_t, v8hi, hi, u16)
  14960. __LD2_LANE_FUNC (uint32x4x2_t, uint32x4_t, uint32_t, v4si, si, u32)
  14961. __LD2_LANE_FUNC (uint64x2x2_t, uint64x2_t, uint64_t, v2di, di, u64)
  14962. #undef __LD2_LANE_FUNC
  14963. /* vld3_lane */
  14964. #define __LD3_LANE_FUNC(intype, vectype, largetype, ptrtype, \
  14965. mode, ptrmode, funcsuffix, signedtype) \
  14966. __extension__ static __inline intype __attribute__ ((__always_inline__)) \
  14967. vld3_lane_##funcsuffix (const ptrtype * __ptr, intype __b, const int __c) \
  14968. { \
  14969. __builtin_aarch64_simd_ci __o; \
  14970. largetype __temp; \
  14971. __temp.val[0] = \
  14972. vcombine_##funcsuffix (__b.val[0], vcreate_##funcsuffix (0)); \
  14973. __temp.val[1] = \
  14974. vcombine_##funcsuffix (__b.val[1], vcreate_##funcsuffix (0)); \
  14975. __temp.val[2] = \
  14976. vcombine_##funcsuffix (__b.val[2], vcreate_##funcsuffix (0)); \
  14977. __o = __builtin_aarch64_set_qregci##mode (__o, \
  14978. (signedtype) __temp.val[0], \
  14979. 0); \
  14980. __o = __builtin_aarch64_set_qregci##mode (__o, \
  14981. (signedtype) __temp.val[1], \
  14982. 1); \
  14983. __o = __builtin_aarch64_set_qregci##mode (__o, \
  14984. (signedtype) __temp.val[2], \
  14985. 2); \
  14986. __o = __builtin_aarch64_ld3_lane##mode ( \
  14987. (__builtin_aarch64_simd_##ptrmode *) __ptr, __o, __c); \
  14988. __b.val[0] = (vectype) __builtin_aarch64_get_dregcidi (__o, 0); \
  14989. __b.val[1] = (vectype) __builtin_aarch64_get_dregcidi (__o, 1); \
  14990. __b.val[2] = (vectype) __builtin_aarch64_get_dregcidi (__o, 2); \
  14991. return __b; \
  14992. }
  14993. __LD3_LANE_FUNC (float32x2x3_t, float32x2_t, float32x4x3_t, float32_t, v4sf,
  14994. sf, f32, float32x4_t)
  14995. __LD3_LANE_FUNC (float64x1x3_t, float64x1_t, float64x2x3_t, float64_t, v2df,
  14996. df, f64, float64x2_t)
  14997. __LD3_LANE_FUNC (poly8x8x3_t, poly8x8_t, poly8x16x3_t, poly8_t, v16qi, qi, p8,
  14998. int8x16_t)
  14999. __LD3_LANE_FUNC (poly16x4x3_t, poly16x4_t, poly16x8x3_t, poly16_t, v8hi, hi,
  15000. p16, int16x8_t)
  15001. __LD3_LANE_FUNC (int8x8x3_t, int8x8_t, int8x16x3_t, int8_t, v16qi, qi, s8,
  15002. int8x16_t)
  15003. __LD3_LANE_FUNC (int16x4x3_t, int16x4_t, int16x8x3_t, int16_t, v8hi, hi, s16,
  15004. int16x8_t)
  15005. __LD3_LANE_FUNC (int32x2x3_t, int32x2_t, int32x4x3_t, int32_t, v4si, si, s32,
  15006. int32x4_t)
  15007. __LD3_LANE_FUNC (int64x1x3_t, int64x1_t, int64x2x3_t, int64_t, v2di, di, s64,
  15008. int64x2_t)
  15009. __LD3_LANE_FUNC (uint8x8x3_t, uint8x8_t, uint8x16x3_t, uint8_t, v16qi, qi, u8,
  15010. int8x16_t)
  15011. __LD3_LANE_FUNC (uint16x4x3_t, uint16x4_t, uint16x8x3_t, uint16_t, v8hi, hi,
  15012. u16, int16x8_t)
  15013. __LD3_LANE_FUNC (uint32x2x3_t, uint32x2_t, uint32x4x3_t, uint32_t, v4si, si,
  15014. u32, int32x4_t)
  15015. __LD3_LANE_FUNC (uint64x1x3_t, uint64x1_t, uint64x2x3_t, uint64_t, v2di, di,
  15016. u64, int64x2_t)
  15017. #undef __LD3_LANE_FUNC
  15018. /* vld3q_lane */
  15019. #define __LD3_LANE_FUNC(intype, vtype, ptrtype, mode, ptrmode, funcsuffix) \
  15020. __extension__ static __inline intype __attribute__ ((__always_inline__)) \
  15021. vld3q_lane_##funcsuffix (const ptrtype * __ptr, intype __b, const int __c) \
  15022. { \
  15023. __builtin_aarch64_simd_ci __o; \
  15024. intype ret; \
  15025. __o = __builtin_aarch64_set_qregciv4si (__o, (int32x4_t) __b.val[0], 0); \
  15026. __o = __builtin_aarch64_set_qregciv4si (__o, (int32x4_t) __b.val[1], 1); \
  15027. __o = __builtin_aarch64_set_qregciv4si (__o, (int32x4_t) __b.val[2], 2); \
  15028. __o = __builtin_aarch64_ld3_lane##mode ( \
  15029. (__builtin_aarch64_simd_##ptrmode *) __ptr, __o, __c); \
  15030. ret.val[0] = (vtype) __builtin_aarch64_get_qregciv4si (__o, 0); \
  15031. ret.val[1] = (vtype) __builtin_aarch64_get_qregciv4si (__o, 1); \
  15032. ret.val[2] = (vtype) __builtin_aarch64_get_qregciv4si (__o, 2); \
  15033. return ret; \
  15034. }
  15035. __LD3_LANE_FUNC (float32x4x3_t, float32x4_t, float32_t, v4sf, sf, f32)
  15036. __LD3_LANE_FUNC (float64x2x3_t, float64x2_t, float64_t, v2df, df, f64)
  15037. __LD3_LANE_FUNC (poly8x16x3_t, poly8x16_t, poly8_t, v16qi, qi, p8)
  15038. __LD3_LANE_FUNC (poly16x8x3_t, poly16x8_t, poly16_t, v8hi, hi, p16)
  15039. __LD3_LANE_FUNC (int8x16x3_t, int8x16_t, int8_t, v16qi, qi, s8)
  15040. __LD3_LANE_FUNC (int16x8x3_t, int16x8_t, int16_t, v8hi, hi, s16)
  15041. __LD3_LANE_FUNC (int32x4x3_t, int32x4_t, int32_t, v4si, si, s32)
  15042. __LD3_LANE_FUNC (int64x2x3_t, int64x2_t, int64_t, v2di, di, s64)
  15043. __LD3_LANE_FUNC (uint8x16x3_t, uint8x16_t, uint8_t, v16qi, qi, u8)
  15044. __LD3_LANE_FUNC (uint16x8x3_t, uint16x8_t, uint16_t, v8hi, hi, u16)
  15045. __LD3_LANE_FUNC (uint32x4x3_t, uint32x4_t, uint32_t, v4si, si, u32)
  15046. __LD3_LANE_FUNC (uint64x2x3_t, uint64x2_t, uint64_t, v2di, di, u64)
  15047. #undef __LD3_LANE_FUNC
  15048. /* vld4_lane */
  15049. #define __LD4_LANE_FUNC(intype, vectype, largetype, ptrtype, \
  15050. mode, ptrmode, funcsuffix, signedtype) \
  15051. __extension__ static __inline intype __attribute__ ((__always_inline__)) \
  15052. vld4_lane_##funcsuffix (const ptrtype * __ptr, intype __b, const int __c) \
  15053. { \
  15054. __builtin_aarch64_simd_xi __o; \
  15055. largetype __temp; \
  15056. __temp.val[0] = \
  15057. vcombine_##funcsuffix (__b.val[0], vcreate_##funcsuffix (0)); \
  15058. __temp.val[1] = \
  15059. vcombine_##funcsuffix (__b.val[1], vcreate_##funcsuffix (0)); \
  15060. __temp.val[2] = \
  15061. vcombine_##funcsuffix (__b.val[2], vcreate_##funcsuffix (0)); \
  15062. __temp.val[3] = \
  15063. vcombine_##funcsuffix (__b.val[3], vcreate_##funcsuffix (0)); \
  15064. __o = __builtin_aarch64_set_qregxi##mode (__o, \
  15065. (signedtype) __temp.val[0], \
  15066. 0); \
  15067. __o = __builtin_aarch64_set_qregxi##mode (__o, \
  15068. (signedtype) __temp.val[1], \
  15069. 1); \
  15070. __o = __builtin_aarch64_set_qregxi##mode (__o, \
  15071. (signedtype) __temp.val[2], \
  15072. 2); \
  15073. __o = __builtin_aarch64_set_qregxi##mode (__o, \
  15074. (signedtype) __temp.val[3], \
  15075. 3); \
  15076. __o = __builtin_aarch64_ld4_lane##mode ( \
  15077. (__builtin_aarch64_simd_##ptrmode *) __ptr, __o, __c); \
  15078. __b.val[0] = (vectype) __builtin_aarch64_get_dregxidi (__o, 0); \
  15079. __b.val[1] = (vectype) __builtin_aarch64_get_dregxidi (__o, 1); \
  15080. __b.val[2] = (vectype) __builtin_aarch64_get_dregxidi (__o, 2); \
  15081. __b.val[3] = (vectype) __builtin_aarch64_get_dregxidi (__o, 3); \
  15082. return __b; \
  15083. }
  15084. /* vld4q_lane */
  15085. __LD4_LANE_FUNC (float32x2x4_t, float32x2_t, float32x4x4_t, float32_t, v4sf,
  15086. sf, f32, float32x4_t)
  15087. __LD4_LANE_FUNC (float64x1x4_t, float64x1_t, float64x2x4_t, float64_t, v2df,
  15088. df, f64, float64x2_t)
  15089. __LD4_LANE_FUNC (poly8x8x4_t, poly8x8_t, poly8x16x4_t, poly8_t, v16qi, qi, p8,
  15090. int8x16_t)
  15091. __LD4_LANE_FUNC (poly16x4x4_t, poly16x4_t, poly16x8x4_t, poly16_t, v8hi, hi,
  15092. p16, int16x8_t)
  15093. __LD4_LANE_FUNC (int8x8x4_t, int8x8_t, int8x16x4_t, int8_t, v16qi, qi, s8,
  15094. int8x16_t)
  15095. __LD4_LANE_FUNC (int16x4x4_t, int16x4_t, int16x8x4_t, int16_t, v8hi, hi, s16,
  15096. int16x8_t)
  15097. __LD4_LANE_FUNC (int32x2x4_t, int32x2_t, int32x4x4_t, int32_t, v4si, si, s32,
  15098. int32x4_t)
  15099. __LD4_LANE_FUNC (int64x1x4_t, int64x1_t, int64x2x4_t, int64_t, v2di, di, s64,
  15100. int64x2_t)
  15101. __LD4_LANE_FUNC (uint8x8x4_t, uint8x8_t, uint8x16x4_t, uint8_t, v16qi, qi, u8,
  15102. int8x16_t)
  15103. __LD4_LANE_FUNC (uint16x4x4_t, uint16x4_t, uint16x8x4_t, uint16_t, v8hi, hi,
  15104. u16, int16x8_t)
  15105. __LD4_LANE_FUNC (uint32x2x4_t, uint32x2_t, uint32x4x4_t, uint32_t, v4si, si,
  15106. u32, int32x4_t)
  15107. __LD4_LANE_FUNC (uint64x1x4_t, uint64x1_t, uint64x2x4_t, uint64_t, v2di, di,
  15108. u64, int64x2_t)
  15109. #undef __LD4_LANE_FUNC
  15110. /* vld4q_lane */
  15111. #define __LD4_LANE_FUNC(intype, vtype, ptrtype, mode, ptrmode, funcsuffix) \
  15112. __extension__ static __inline intype __attribute__ ((__always_inline__)) \
  15113. vld4q_lane_##funcsuffix (const ptrtype * __ptr, intype __b, const int __c) \
  15114. { \
  15115. __builtin_aarch64_simd_xi __o; \
  15116. intype ret; \
  15117. __o = __builtin_aarch64_set_qregxiv4si (__o, (int32x4_t) __b.val[0], 0); \
  15118. __o = __builtin_aarch64_set_qregxiv4si (__o, (int32x4_t) __b.val[1], 1); \
  15119. __o = __builtin_aarch64_set_qregxiv4si (__o, (int32x4_t) __b.val[2], 2); \
  15120. __o = __builtin_aarch64_set_qregxiv4si (__o, (int32x4_t) __b.val[3], 3); \
  15121. __o = __builtin_aarch64_ld4_lane##mode ( \
  15122. (__builtin_aarch64_simd_##ptrmode *) __ptr, __o, __c); \
  15123. ret.val[0] = (vtype) __builtin_aarch64_get_qregxiv4si (__o, 0); \
  15124. ret.val[1] = (vtype) __builtin_aarch64_get_qregxiv4si (__o, 1); \
  15125. ret.val[2] = (vtype) __builtin_aarch64_get_qregxiv4si (__o, 2); \
  15126. ret.val[3] = (vtype) __builtin_aarch64_get_qregxiv4si (__o, 3); \
  15127. return ret; \
  15128. }
  15129. __LD4_LANE_FUNC (float32x4x4_t, float32x4_t, float32_t, v4sf, sf, f32)
  15130. __LD4_LANE_FUNC (float64x2x4_t, float64x2_t, float64_t, v2df, df, f64)
  15131. __LD4_LANE_FUNC (poly8x16x4_t, poly8x16_t, poly8_t, v16qi, qi, p8)
  15132. __LD4_LANE_FUNC (poly16x8x4_t, poly16x8_t, poly16_t, v8hi, hi, p16)
  15133. __LD4_LANE_FUNC (int8x16x4_t, int8x16_t, int8_t, v16qi, qi, s8)
  15134. __LD4_LANE_FUNC (int16x8x4_t, int16x8_t, int16_t, v8hi, hi, s16)
  15135. __LD4_LANE_FUNC (int32x4x4_t, int32x4_t, int32_t, v4si, si, s32)
  15136. __LD4_LANE_FUNC (int64x2x4_t, int64x2_t, int64_t, v2di, di, s64)
  15137. __LD4_LANE_FUNC (uint8x16x4_t, uint8x16_t, uint8_t, v16qi, qi, u8)
  15138. __LD4_LANE_FUNC (uint16x8x4_t, uint16x8_t, uint16_t, v8hi, hi, u16)
  15139. __LD4_LANE_FUNC (uint32x4x4_t, uint32x4_t, uint32_t, v4si, si, u32)
  15140. __LD4_LANE_FUNC (uint64x2x4_t, uint64x2_t, uint64_t, v2di, di, u64)
  15141. #undef __LD4_LANE_FUNC
  15142. /* vmax */
  15143. __extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
  15144. vmax_f32 (float32x2_t __a, float32x2_t __b)
  15145. {
  15146. return __builtin_aarch64_smax_nanv2sf (__a, __b);
  15147. }
  15148. __extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
  15149. vmax_s8 (int8x8_t __a, int8x8_t __b)
  15150. {
  15151. return __builtin_aarch64_smaxv8qi (__a, __b);
  15152. }
  15153. __extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
  15154. vmax_s16 (int16x4_t __a, int16x4_t __b)
  15155. {
  15156. return __builtin_aarch64_smaxv4hi (__a, __b);
  15157. }
  15158. __extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
  15159. vmax_s32 (int32x2_t __a, int32x2_t __b)
  15160. {
  15161. return __builtin_aarch64_smaxv2si (__a, __b);
  15162. }
  15163. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  15164. vmax_u8 (uint8x8_t __a, uint8x8_t __b)
  15165. {
  15166. return (uint8x8_t) __builtin_aarch64_umaxv8qi ((int8x8_t) __a,
  15167. (int8x8_t) __b);
  15168. }
  15169. __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
  15170. vmax_u16 (uint16x4_t __a, uint16x4_t __b)
  15171. {
  15172. return (uint16x4_t) __builtin_aarch64_umaxv4hi ((int16x4_t) __a,
  15173. (int16x4_t) __b);
  15174. }
  15175. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  15176. vmax_u32 (uint32x2_t __a, uint32x2_t __b)
  15177. {
  15178. return (uint32x2_t) __builtin_aarch64_umaxv2si ((int32x2_t) __a,
  15179. (int32x2_t) __b);
  15180. }
  15181. __extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
  15182. vmaxq_f32 (float32x4_t __a, float32x4_t __b)
  15183. {
  15184. return __builtin_aarch64_smax_nanv4sf (__a, __b);
  15185. }
  15186. __extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
  15187. vmaxq_f64 (float64x2_t __a, float64x2_t __b)
  15188. {
  15189. return __builtin_aarch64_smax_nanv2df (__a, __b);
  15190. }
  15191. __extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
  15192. vmaxq_s8 (int8x16_t __a, int8x16_t __b)
  15193. {
  15194. return __builtin_aarch64_smaxv16qi (__a, __b);
  15195. }
  15196. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  15197. vmaxq_s16 (int16x8_t __a, int16x8_t __b)
  15198. {
  15199. return __builtin_aarch64_smaxv8hi (__a, __b);
  15200. }
  15201. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  15202. vmaxq_s32 (int32x4_t __a, int32x4_t __b)
  15203. {
  15204. return __builtin_aarch64_smaxv4si (__a, __b);
  15205. }
  15206. __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
  15207. vmaxq_u8 (uint8x16_t __a, uint8x16_t __b)
  15208. {
  15209. return (uint8x16_t) __builtin_aarch64_umaxv16qi ((int8x16_t) __a,
  15210. (int8x16_t) __b);
  15211. }
  15212. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  15213. vmaxq_u16 (uint16x8_t __a, uint16x8_t __b)
  15214. {
  15215. return (uint16x8_t) __builtin_aarch64_umaxv8hi ((int16x8_t) __a,
  15216. (int16x8_t) __b);
  15217. }
  15218. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  15219. vmaxq_u32 (uint32x4_t __a, uint32x4_t __b)
  15220. {
  15221. return (uint32x4_t) __builtin_aarch64_umaxv4si ((int32x4_t) __a,
  15222. (int32x4_t) __b);
  15223. }
  15224. /* vpmax */
  15225. __extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
  15226. vpmax_s8 (int8x8_t a, int8x8_t b)
  15227. {
  15228. return __builtin_aarch64_smaxpv8qi (a, b);
  15229. }
  15230. __extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
  15231. vpmax_s16 (int16x4_t a, int16x4_t b)
  15232. {
  15233. return __builtin_aarch64_smaxpv4hi (a, b);
  15234. }
  15235. __extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
  15236. vpmax_s32 (int32x2_t a, int32x2_t b)
  15237. {
  15238. return __builtin_aarch64_smaxpv2si (a, b);
  15239. }
  15240. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  15241. vpmax_u8 (uint8x8_t a, uint8x8_t b)
  15242. {
  15243. return (uint8x8_t) __builtin_aarch64_umaxpv8qi ((int8x8_t) a,
  15244. (int8x8_t) b);
  15245. }
  15246. __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
  15247. vpmax_u16 (uint16x4_t a, uint16x4_t b)
  15248. {
  15249. return (uint16x4_t) __builtin_aarch64_umaxpv4hi ((int16x4_t) a,
  15250. (int16x4_t) b);
  15251. }
  15252. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  15253. vpmax_u32 (uint32x2_t a, uint32x2_t b)
  15254. {
  15255. return (uint32x2_t) __builtin_aarch64_umaxpv2si ((int32x2_t) a,
  15256. (int32x2_t) b);
  15257. }
  15258. __extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
  15259. vpmaxq_s8 (int8x16_t a, int8x16_t b)
  15260. {
  15261. return __builtin_aarch64_smaxpv16qi (a, b);
  15262. }
  15263. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  15264. vpmaxq_s16 (int16x8_t a, int16x8_t b)
  15265. {
  15266. return __builtin_aarch64_smaxpv8hi (a, b);
  15267. }
  15268. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  15269. vpmaxq_s32 (int32x4_t a, int32x4_t b)
  15270. {
  15271. return __builtin_aarch64_smaxpv4si (a, b);
  15272. }
  15273. __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
  15274. vpmaxq_u8 (uint8x16_t a, uint8x16_t b)
  15275. {
  15276. return (uint8x16_t) __builtin_aarch64_umaxpv16qi ((int8x16_t) a,
  15277. (int8x16_t) b);
  15278. }
  15279. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  15280. vpmaxq_u16 (uint16x8_t a, uint16x8_t b)
  15281. {
  15282. return (uint16x8_t) __builtin_aarch64_umaxpv8hi ((int16x8_t) a,
  15283. (int16x8_t) b);
  15284. }
  15285. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  15286. vpmaxq_u32 (uint32x4_t a, uint32x4_t b)
  15287. {
  15288. return (uint32x4_t) __builtin_aarch64_umaxpv4si ((int32x4_t) a,
  15289. (int32x4_t) b);
  15290. }
  15291. __extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
  15292. vpmax_f32 (float32x2_t a, float32x2_t b)
  15293. {
  15294. return __builtin_aarch64_smax_nanpv2sf (a, b);
  15295. }
  15296. __extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
  15297. vpmaxq_f32 (float32x4_t a, float32x4_t b)
  15298. {
  15299. return __builtin_aarch64_smax_nanpv4sf (a, b);
  15300. }
  15301. __extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
  15302. vpmaxq_f64 (float64x2_t a, float64x2_t b)
  15303. {
  15304. return __builtin_aarch64_smax_nanpv2df (a, b);
  15305. }
  15306. __extension__ static __inline float64_t __attribute__ ((__always_inline__))
  15307. vpmaxqd_f64 (float64x2_t a)
  15308. {
  15309. return __builtin_aarch64_reduc_smax_nan_scal_v2df (a);
  15310. }
  15311. __extension__ static __inline float32_t __attribute__ ((__always_inline__))
  15312. vpmaxs_f32 (float32x2_t a)
  15313. {
  15314. return __builtin_aarch64_reduc_smax_nan_scal_v2sf (a);
  15315. }
  15316. /* vpmaxnm */
  15317. __extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
  15318. vpmaxnm_f32 (float32x2_t a, float32x2_t b)
  15319. {
  15320. return __builtin_aarch64_smaxpv2sf (a, b);
  15321. }
  15322. __extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
  15323. vpmaxnmq_f32 (float32x4_t a, float32x4_t b)
  15324. {
  15325. return __builtin_aarch64_smaxpv4sf (a, b);
  15326. }
  15327. __extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
  15328. vpmaxnmq_f64 (float64x2_t a, float64x2_t b)
  15329. {
  15330. return __builtin_aarch64_smaxpv2df (a, b);
  15331. }
  15332. __extension__ static __inline float64_t __attribute__ ((__always_inline__))
  15333. vpmaxnmqd_f64 (float64x2_t a)
  15334. {
  15335. return __builtin_aarch64_reduc_smax_scal_v2df (a);
  15336. }
  15337. __extension__ static __inline float32_t __attribute__ ((__always_inline__))
  15338. vpmaxnms_f32 (float32x2_t a)
  15339. {
  15340. return __builtin_aarch64_reduc_smax_scal_v2sf (a);
  15341. }
  15342. /* vpmin */
  15343. __extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
  15344. vpmin_s8 (int8x8_t a, int8x8_t b)
  15345. {
  15346. return __builtin_aarch64_sminpv8qi (a, b);
  15347. }
  15348. __extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
  15349. vpmin_s16 (int16x4_t a, int16x4_t b)
  15350. {
  15351. return __builtin_aarch64_sminpv4hi (a, b);
  15352. }
  15353. __extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
  15354. vpmin_s32 (int32x2_t a, int32x2_t b)
  15355. {
  15356. return __builtin_aarch64_sminpv2si (a, b);
  15357. }
  15358. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  15359. vpmin_u8 (uint8x8_t a, uint8x8_t b)
  15360. {
  15361. return (uint8x8_t) __builtin_aarch64_uminpv8qi ((int8x8_t) a,
  15362. (int8x8_t) b);
  15363. }
  15364. __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
  15365. vpmin_u16 (uint16x4_t a, uint16x4_t b)
  15366. {
  15367. return (uint16x4_t) __builtin_aarch64_uminpv4hi ((int16x4_t) a,
  15368. (int16x4_t) b);
  15369. }
  15370. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  15371. vpmin_u32 (uint32x2_t a, uint32x2_t b)
  15372. {
  15373. return (uint32x2_t) __builtin_aarch64_uminpv2si ((int32x2_t) a,
  15374. (int32x2_t) b);
  15375. }
  15376. __extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
  15377. vpminq_s8 (int8x16_t a, int8x16_t b)
  15378. {
  15379. return __builtin_aarch64_sminpv16qi (a, b);
  15380. }
  15381. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  15382. vpminq_s16 (int16x8_t a, int16x8_t b)
  15383. {
  15384. return __builtin_aarch64_sminpv8hi (a, b);
  15385. }
  15386. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  15387. vpminq_s32 (int32x4_t a, int32x4_t b)
  15388. {
  15389. return __builtin_aarch64_sminpv4si (a, b);
  15390. }
  15391. __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
  15392. vpminq_u8 (uint8x16_t a, uint8x16_t b)
  15393. {
  15394. return (uint8x16_t) __builtin_aarch64_uminpv16qi ((int8x16_t) a,
  15395. (int8x16_t) b);
  15396. }
  15397. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  15398. vpminq_u16 (uint16x8_t a, uint16x8_t b)
  15399. {
  15400. return (uint16x8_t) __builtin_aarch64_uminpv8hi ((int16x8_t) a,
  15401. (int16x8_t) b);
  15402. }
  15403. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  15404. vpminq_u32 (uint32x4_t a, uint32x4_t b)
  15405. {
  15406. return (uint32x4_t) __builtin_aarch64_uminpv4si ((int32x4_t) a,
  15407. (int32x4_t) b);
  15408. }
  15409. __extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
  15410. vpmin_f32 (float32x2_t a, float32x2_t b)
  15411. {
  15412. return __builtin_aarch64_smin_nanpv2sf (a, b);
  15413. }
  15414. __extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
  15415. vpminq_f32 (float32x4_t a, float32x4_t b)
  15416. {
  15417. return __builtin_aarch64_smin_nanpv4sf (a, b);
  15418. }
  15419. __extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
  15420. vpminq_f64 (float64x2_t a, float64x2_t b)
  15421. {
  15422. return __builtin_aarch64_smin_nanpv2df (a, b);
  15423. }
  15424. __extension__ static __inline float64_t __attribute__ ((__always_inline__))
  15425. vpminqd_f64 (float64x2_t a)
  15426. {
  15427. return __builtin_aarch64_reduc_smin_nan_scal_v2df (a);
  15428. }
  15429. __extension__ static __inline float32_t __attribute__ ((__always_inline__))
  15430. vpmins_f32 (float32x2_t a)
  15431. {
  15432. return __builtin_aarch64_reduc_smin_nan_scal_v2sf (a);
  15433. }
  15434. /* vpminnm */
  15435. __extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
  15436. vpminnm_f32 (float32x2_t a, float32x2_t b)
  15437. {
  15438. return __builtin_aarch64_sminpv2sf (a, b);
  15439. }
  15440. __extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
  15441. vpminnmq_f32 (float32x4_t a, float32x4_t b)
  15442. {
  15443. return __builtin_aarch64_sminpv4sf (a, b);
  15444. }
  15445. __extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
  15446. vpminnmq_f64 (float64x2_t a, float64x2_t b)
  15447. {
  15448. return __builtin_aarch64_sminpv2df (a, b);
  15449. }
  15450. __extension__ static __inline float64_t __attribute__ ((__always_inline__))
  15451. vpminnmqd_f64 (float64x2_t a)
  15452. {
  15453. return __builtin_aarch64_reduc_smin_scal_v2df (a);
  15454. }
  15455. __extension__ static __inline float32_t __attribute__ ((__always_inline__))
  15456. vpminnms_f32 (float32x2_t a)
  15457. {
  15458. return __builtin_aarch64_reduc_smin_scal_v2sf (a);
  15459. }
  15460. /* vmaxnm */
  15461. __extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
  15462. vmaxnm_f32 (float32x2_t __a, float32x2_t __b)
  15463. {
  15464. return __builtin_aarch64_smaxv2sf (__a, __b);
  15465. }
  15466. __extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
  15467. vmaxnmq_f32 (float32x4_t __a, float32x4_t __b)
  15468. {
  15469. return __builtin_aarch64_smaxv4sf (__a, __b);
  15470. }
  15471. __extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
  15472. vmaxnmq_f64 (float64x2_t __a, float64x2_t __b)
  15473. {
  15474. return __builtin_aarch64_smaxv2df (__a, __b);
  15475. }
  15476. /* vmaxv */
  15477. __extension__ static __inline float32_t __attribute__ ((__always_inline__))
  15478. vmaxv_f32 (float32x2_t __a)
  15479. {
  15480. return __builtin_aarch64_reduc_smax_nan_scal_v2sf (__a);
  15481. }
  15482. __extension__ static __inline int8_t __attribute__ ((__always_inline__))
  15483. vmaxv_s8 (int8x8_t __a)
  15484. {
  15485. return __builtin_aarch64_reduc_smax_scal_v8qi (__a);
  15486. }
  15487. __extension__ static __inline int16_t __attribute__ ((__always_inline__))
  15488. vmaxv_s16 (int16x4_t __a)
  15489. {
  15490. return __builtin_aarch64_reduc_smax_scal_v4hi (__a);
  15491. }
  15492. __extension__ static __inline int32_t __attribute__ ((__always_inline__))
  15493. vmaxv_s32 (int32x2_t __a)
  15494. {
  15495. return __builtin_aarch64_reduc_smax_scal_v2si (__a);
  15496. }
  15497. __extension__ static __inline uint8_t __attribute__ ((__always_inline__))
  15498. vmaxv_u8 (uint8x8_t __a)
  15499. {
  15500. return __builtin_aarch64_reduc_umax_scal_v8qi_uu (__a);
  15501. }
  15502. __extension__ static __inline uint16_t __attribute__ ((__always_inline__))
  15503. vmaxv_u16 (uint16x4_t __a)
  15504. {
  15505. return __builtin_aarch64_reduc_umax_scal_v4hi_uu (__a);
  15506. }
  15507. __extension__ static __inline uint32_t __attribute__ ((__always_inline__))
  15508. vmaxv_u32 (uint32x2_t __a)
  15509. {
  15510. return __builtin_aarch64_reduc_umax_scal_v2si_uu (__a);
  15511. }
  15512. __extension__ static __inline float32_t __attribute__ ((__always_inline__))
  15513. vmaxvq_f32 (float32x4_t __a)
  15514. {
  15515. return __builtin_aarch64_reduc_smax_nan_scal_v4sf (__a);
  15516. }
  15517. __extension__ static __inline float64_t __attribute__ ((__always_inline__))
  15518. vmaxvq_f64 (float64x2_t __a)
  15519. {
  15520. return __builtin_aarch64_reduc_smax_nan_scal_v2df (__a);
  15521. }
  15522. __extension__ static __inline int8_t __attribute__ ((__always_inline__))
  15523. vmaxvq_s8 (int8x16_t __a)
  15524. {
  15525. return __builtin_aarch64_reduc_smax_scal_v16qi (__a);
  15526. }
  15527. __extension__ static __inline int16_t __attribute__ ((__always_inline__))
  15528. vmaxvq_s16 (int16x8_t __a)
  15529. {
  15530. return __builtin_aarch64_reduc_smax_scal_v8hi (__a);
  15531. }
  15532. __extension__ static __inline int32_t __attribute__ ((__always_inline__))
  15533. vmaxvq_s32 (int32x4_t __a)
  15534. {
  15535. return __builtin_aarch64_reduc_smax_scal_v4si (__a);
  15536. }
  15537. __extension__ static __inline uint8_t __attribute__ ((__always_inline__))
  15538. vmaxvq_u8 (uint8x16_t __a)
  15539. {
  15540. return __builtin_aarch64_reduc_umax_scal_v16qi_uu (__a);
  15541. }
  15542. __extension__ static __inline uint16_t __attribute__ ((__always_inline__))
  15543. vmaxvq_u16 (uint16x8_t __a)
  15544. {
  15545. return __builtin_aarch64_reduc_umax_scal_v8hi_uu (__a);
  15546. }
  15547. __extension__ static __inline uint32_t __attribute__ ((__always_inline__))
  15548. vmaxvq_u32 (uint32x4_t __a)
  15549. {
  15550. return __builtin_aarch64_reduc_umax_scal_v4si_uu (__a);
  15551. }
  15552. /* vmaxnmv */
  15553. __extension__ static __inline float32_t __attribute__ ((__always_inline__))
  15554. vmaxnmv_f32 (float32x2_t __a)
  15555. {
  15556. return __builtin_aarch64_reduc_smax_scal_v2sf (__a);
  15557. }
  15558. __extension__ static __inline float32_t __attribute__ ((__always_inline__))
  15559. vmaxnmvq_f32 (float32x4_t __a)
  15560. {
  15561. return __builtin_aarch64_reduc_smax_scal_v4sf (__a);
  15562. }
  15563. __extension__ static __inline float64_t __attribute__ ((__always_inline__))
  15564. vmaxnmvq_f64 (float64x2_t __a)
  15565. {
  15566. return __builtin_aarch64_reduc_smax_scal_v2df (__a);
  15567. }
  15568. /* vmin */
  15569. __extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
  15570. vmin_f32 (float32x2_t __a, float32x2_t __b)
  15571. {
  15572. return __builtin_aarch64_smin_nanv2sf (__a, __b);
  15573. }
  15574. __extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
  15575. vmin_s8 (int8x8_t __a, int8x8_t __b)
  15576. {
  15577. return __builtin_aarch64_sminv8qi (__a, __b);
  15578. }
  15579. __extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
  15580. vmin_s16 (int16x4_t __a, int16x4_t __b)
  15581. {
  15582. return __builtin_aarch64_sminv4hi (__a, __b);
  15583. }
  15584. __extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
  15585. vmin_s32 (int32x2_t __a, int32x2_t __b)
  15586. {
  15587. return __builtin_aarch64_sminv2si (__a, __b);
  15588. }
  15589. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  15590. vmin_u8 (uint8x8_t __a, uint8x8_t __b)
  15591. {
  15592. return (uint8x8_t) __builtin_aarch64_uminv8qi ((int8x8_t) __a,
  15593. (int8x8_t) __b);
  15594. }
  15595. __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
  15596. vmin_u16 (uint16x4_t __a, uint16x4_t __b)
  15597. {
  15598. return (uint16x4_t) __builtin_aarch64_uminv4hi ((int16x4_t) __a,
  15599. (int16x4_t) __b);
  15600. }
  15601. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  15602. vmin_u32 (uint32x2_t __a, uint32x2_t __b)
  15603. {
  15604. return (uint32x2_t) __builtin_aarch64_uminv2si ((int32x2_t) __a,
  15605. (int32x2_t) __b);
  15606. }
  15607. __extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
  15608. vminq_f32 (float32x4_t __a, float32x4_t __b)
  15609. {
  15610. return __builtin_aarch64_smin_nanv4sf (__a, __b);
  15611. }
  15612. __extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
  15613. vminq_f64 (float64x2_t __a, float64x2_t __b)
  15614. {
  15615. return __builtin_aarch64_smin_nanv2df (__a, __b);
  15616. }
  15617. __extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
  15618. vminq_s8 (int8x16_t __a, int8x16_t __b)
  15619. {
  15620. return __builtin_aarch64_sminv16qi (__a, __b);
  15621. }
  15622. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  15623. vminq_s16 (int16x8_t __a, int16x8_t __b)
  15624. {
  15625. return __builtin_aarch64_sminv8hi (__a, __b);
  15626. }
  15627. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  15628. vminq_s32 (int32x4_t __a, int32x4_t __b)
  15629. {
  15630. return __builtin_aarch64_sminv4si (__a, __b);
  15631. }
  15632. __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
  15633. vminq_u8 (uint8x16_t __a, uint8x16_t __b)
  15634. {
  15635. return (uint8x16_t) __builtin_aarch64_uminv16qi ((int8x16_t) __a,
  15636. (int8x16_t) __b);
  15637. }
  15638. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  15639. vminq_u16 (uint16x8_t __a, uint16x8_t __b)
  15640. {
  15641. return (uint16x8_t) __builtin_aarch64_uminv8hi ((int16x8_t) __a,
  15642. (int16x8_t) __b);
  15643. }
  15644. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  15645. vminq_u32 (uint32x4_t __a, uint32x4_t __b)
  15646. {
  15647. return (uint32x4_t) __builtin_aarch64_uminv4si ((int32x4_t) __a,
  15648. (int32x4_t) __b);
  15649. }
  15650. /* vminnm */
  15651. __extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
  15652. vminnm_f32 (float32x2_t __a, float32x2_t __b)
  15653. {
  15654. return __builtin_aarch64_sminv2sf (__a, __b);
  15655. }
  15656. __extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
  15657. vminnmq_f32 (float32x4_t __a, float32x4_t __b)
  15658. {
  15659. return __builtin_aarch64_sminv4sf (__a, __b);
  15660. }
  15661. __extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
  15662. vminnmq_f64 (float64x2_t __a, float64x2_t __b)
  15663. {
  15664. return __builtin_aarch64_sminv2df (__a, __b);
  15665. }
  15666. /* vminv */
  15667. __extension__ static __inline float32_t __attribute__ ((__always_inline__))
  15668. vminv_f32 (float32x2_t __a)
  15669. {
  15670. return __builtin_aarch64_reduc_smin_nan_scal_v2sf (__a);
  15671. }
  15672. __extension__ static __inline int8_t __attribute__ ((__always_inline__))
  15673. vminv_s8 (int8x8_t __a)
  15674. {
  15675. return __builtin_aarch64_reduc_smin_scal_v8qi (__a);
  15676. }
  15677. __extension__ static __inline int16_t __attribute__ ((__always_inline__))
  15678. vminv_s16 (int16x4_t __a)
  15679. {
  15680. return __builtin_aarch64_reduc_smin_scal_v4hi (__a);
  15681. }
  15682. __extension__ static __inline int32_t __attribute__ ((__always_inline__))
  15683. vminv_s32 (int32x2_t __a)
  15684. {
  15685. return __builtin_aarch64_reduc_smin_scal_v2si (__a);
  15686. }
  15687. __extension__ static __inline uint8_t __attribute__ ((__always_inline__))
  15688. vminv_u8 (uint8x8_t __a)
  15689. {
  15690. return __builtin_aarch64_reduc_umin_scal_v8qi_uu (__a);
  15691. }
  15692. __extension__ static __inline uint16_t __attribute__ ((__always_inline__))
  15693. vminv_u16 (uint16x4_t __a)
  15694. {
  15695. return __builtin_aarch64_reduc_umin_scal_v4hi_uu (__a);
  15696. }
  15697. __extension__ static __inline uint32_t __attribute__ ((__always_inline__))
  15698. vminv_u32 (uint32x2_t __a)
  15699. {
  15700. return __builtin_aarch64_reduc_umin_scal_v2si_uu (__a);
  15701. }
  15702. __extension__ static __inline float32_t __attribute__ ((__always_inline__))
  15703. vminvq_f32 (float32x4_t __a)
  15704. {
  15705. return __builtin_aarch64_reduc_smin_nan_scal_v4sf (__a);
  15706. }
  15707. __extension__ static __inline float64_t __attribute__ ((__always_inline__))
  15708. vminvq_f64 (float64x2_t __a)
  15709. {
  15710. return __builtin_aarch64_reduc_smin_nan_scal_v2df (__a);
  15711. }
  15712. __extension__ static __inline int8_t __attribute__ ((__always_inline__))
  15713. vminvq_s8 (int8x16_t __a)
  15714. {
  15715. return __builtin_aarch64_reduc_smin_scal_v16qi (__a);
  15716. }
  15717. __extension__ static __inline int16_t __attribute__ ((__always_inline__))
  15718. vminvq_s16 (int16x8_t __a)
  15719. {
  15720. return __builtin_aarch64_reduc_smin_scal_v8hi (__a);
  15721. }
  15722. __extension__ static __inline int32_t __attribute__ ((__always_inline__))
  15723. vminvq_s32 (int32x4_t __a)
  15724. {
  15725. return __builtin_aarch64_reduc_smin_scal_v4si (__a);
  15726. }
  15727. __extension__ static __inline uint8_t __attribute__ ((__always_inline__))
  15728. vminvq_u8 (uint8x16_t __a)
  15729. {
  15730. return __builtin_aarch64_reduc_umin_scal_v16qi_uu (__a);
  15731. }
  15732. __extension__ static __inline uint16_t __attribute__ ((__always_inline__))
  15733. vminvq_u16 (uint16x8_t __a)
  15734. {
  15735. return __builtin_aarch64_reduc_umin_scal_v8hi_uu (__a);
  15736. }
  15737. __extension__ static __inline uint32_t __attribute__ ((__always_inline__))
  15738. vminvq_u32 (uint32x4_t __a)
  15739. {
  15740. return __builtin_aarch64_reduc_umin_scal_v4si_uu (__a);
  15741. }
  15742. /* vminnmv */
  15743. __extension__ static __inline float32_t __attribute__ ((__always_inline__))
  15744. vminnmv_f32 (float32x2_t __a)
  15745. {
  15746. return __builtin_aarch64_reduc_smin_scal_v2sf (__a);
  15747. }
  15748. __extension__ static __inline float32_t __attribute__ ((__always_inline__))
  15749. vminnmvq_f32 (float32x4_t __a)
  15750. {
  15751. return __builtin_aarch64_reduc_smin_scal_v4sf (__a);
  15752. }
  15753. __extension__ static __inline float64_t __attribute__ ((__always_inline__))
  15754. vminnmvq_f64 (float64x2_t __a)
  15755. {
  15756. return __builtin_aarch64_reduc_smin_scal_v2df (__a);
  15757. }
  15758. /* vmla */
  15759. __extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
  15760. vmla_f32 (float32x2_t a, float32x2_t b, float32x2_t c)
  15761. {
  15762. return a + b * c;
  15763. }
  15764. __extension__ static __inline float64x1_t __attribute__ ((__always_inline__))
  15765. vmla_f64 (float64x1_t __a, float64x1_t __b, float64x1_t __c)
  15766. {
  15767. return __a + __b * __c;
  15768. }
  15769. __extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
  15770. vmlaq_f32 (float32x4_t a, float32x4_t b, float32x4_t c)
  15771. {
  15772. return a + b * c;
  15773. }
  15774. __extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
  15775. vmlaq_f64 (float64x2_t a, float64x2_t b, float64x2_t c)
  15776. {
  15777. return a + b * c;
  15778. }
  15779. /* vmla_lane */
  15780. __extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
  15781. vmla_lane_f32 (float32x2_t __a, float32x2_t __b,
  15782. float32x2_t __c, const int __lane)
  15783. {
  15784. return (__a + (__b * __aarch64_vget_lane_any (__c, __lane)));
  15785. }
  15786. __extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
  15787. vmla_lane_s16 (int16x4_t __a, int16x4_t __b,
  15788. int16x4_t __c, const int __lane)
  15789. {
  15790. return (__a + (__b * __aarch64_vget_lane_any (__c, __lane)));
  15791. }
  15792. __extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
  15793. vmla_lane_s32 (int32x2_t __a, int32x2_t __b,
  15794. int32x2_t __c, const int __lane)
  15795. {
  15796. return (__a + (__b * __aarch64_vget_lane_any (__c, __lane)));
  15797. }
  15798. __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
  15799. vmla_lane_u16 (uint16x4_t __a, uint16x4_t __b,
  15800. uint16x4_t __c, const int __lane)
  15801. {
  15802. return (__a + (__b * __aarch64_vget_lane_any (__c, __lane)));
  15803. }
  15804. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  15805. vmla_lane_u32 (uint32x2_t __a, uint32x2_t __b,
  15806. uint32x2_t __c, const int __lane)
  15807. {
  15808. return (__a + (__b * __aarch64_vget_lane_any (__c, __lane)));
  15809. }
  15810. /* vmla_laneq */
  15811. __extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
  15812. vmla_laneq_f32 (float32x2_t __a, float32x2_t __b,
  15813. float32x4_t __c, const int __lane)
  15814. {
  15815. return (__a + (__b * __aarch64_vget_lane_any (__c, __lane)));
  15816. }
  15817. __extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
  15818. vmla_laneq_s16 (int16x4_t __a, int16x4_t __b,
  15819. int16x8_t __c, const int __lane)
  15820. {
  15821. return (__a + (__b * __aarch64_vget_lane_any (__c, __lane)));
  15822. }
  15823. __extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
  15824. vmla_laneq_s32 (int32x2_t __a, int32x2_t __b,
  15825. int32x4_t __c, const int __lane)
  15826. {
  15827. return (__a + (__b * __aarch64_vget_lane_any (__c, __lane)));
  15828. }
  15829. __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
  15830. vmla_laneq_u16 (uint16x4_t __a, uint16x4_t __b,
  15831. uint16x8_t __c, const int __lane)
  15832. {
  15833. return (__a + (__b * __aarch64_vget_lane_any (__c, __lane)));
  15834. }
  15835. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  15836. vmla_laneq_u32 (uint32x2_t __a, uint32x2_t __b,
  15837. uint32x4_t __c, const int __lane)
  15838. {
  15839. return (__a + (__b * __aarch64_vget_lane_any (__c, __lane)));
  15840. }
  15841. /* vmlaq_lane */
  15842. __extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
  15843. vmlaq_lane_f32 (float32x4_t __a, float32x4_t __b,
  15844. float32x2_t __c, const int __lane)
  15845. {
  15846. return (__a + (__b * __aarch64_vget_lane_any (__c, __lane)));
  15847. }
  15848. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  15849. vmlaq_lane_s16 (int16x8_t __a, int16x8_t __b,
  15850. int16x4_t __c, const int __lane)
  15851. {
  15852. return (__a + (__b * __aarch64_vget_lane_any (__c, __lane)));
  15853. }
  15854. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  15855. vmlaq_lane_s32 (int32x4_t __a, int32x4_t __b,
  15856. int32x2_t __c, const int __lane)
  15857. {
  15858. return (__a + (__b * __aarch64_vget_lane_any (__c, __lane)));
  15859. }
  15860. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  15861. vmlaq_lane_u16 (uint16x8_t __a, uint16x8_t __b,
  15862. uint16x4_t __c, const int __lane)
  15863. {
  15864. return (__a + (__b * __aarch64_vget_lane_any (__c, __lane)));
  15865. }
  15866. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  15867. vmlaq_lane_u32 (uint32x4_t __a, uint32x4_t __b,
  15868. uint32x2_t __c, const int __lane)
  15869. {
  15870. return (__a + (__b * __aarch64_vget_lane_any (__c, __lane)));
  15871. }
  15872. /* vmlaq_laneq */
  15873. __extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
  15874. vmlaq_laneq_f32 (float32x4_t __a, float32x4_t __b,
  15875. float32x4_t __c, const int __lane)
  15876. {
  15877. return (__a + (__b * __aarch64_vget_lane_any (__c, __lane)));
  15878. }
  15879. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  15880. vmlaq_laneq_s16 (int16x8_t __a, int16x8_t __b,
  15881. int16x8_t __c, const int __lane)
  15882. {
  15883. return (__a + (__b * __aarch64_vget_lane_any (__c, __lane)));
  15884. }
  15885. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  15886. vmlaq_laneq_s32 (int32x4_t __a, int32x4_t __b,
  15887. int32x4_t __c, const int __lane)
  15888. {
  15889. return (__a + (__b * __aarch64_vget_lane_any (__c, __lane)));
  15890. }
  15891. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  15892. vmlaq_laneq_u16 (uint16x8_t __a, uint16x8_t __b,
  15893. uint16x8_t __c, const int __lane)
  15894. {
  15895. return (__a + (__b * __aarch64_vget_lane_any (__c, __lane)));
  15896. }
  15897. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  15898. vmlaq_laneq_u32 (uint32x4_t __a, uint32x4_t __b,
  15899. uint32x4_t __c, const int __lane)
  15900. {
  15901. return (__a + (__b * __aarch64_vget_lane_any (__c, __lane)));
  15902. }
  15903. /* vmls */
  15904. __extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
  15905. vmls_f32 (float32x2_t a, float32x2_t b, float32x2_t c)
  15906. {
  15907. return a - b * c;
  15908. }
  15909. __extension__ static __inline float64x1_t __attribute__ ((__always_inline__))
  15910. vmls_f64 (float64x1_t __a, float64x1_t __b, float64x1_t __c)
  15911. {
  15912. return __a - __b * __c;
  15913. }
  15914. __extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
  15915. vmlsq_f32 (float32x4_t a, float32x4_t b, float32x4_t c)
  15916. {
  15917. return a - b * c;
  15918. }
  15919. __extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
  15920. vmlsq_f64 (float64x2_t a, float64x2_t b, float64x2_t c)
  15921. {
  15922. return a - b * c;
  15923. }
  15924. /* vmls_lane */
  15925. __extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
  15926. vmls_lane_f32 (float32x2_t __a, float32x2_t __b,
  15927. float32x2_t __c, const int __lane)
  15928. {
  15929. return (__a - (__b * __aarch64_vget_lane_any (__c, __lane)));
  15930. }
  15931. __extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
  15932. vmls_lane_s16 (int16x4_t __a, int16x4_t __b,
  15933. int16x4_t __c, const int __lane)
  15934. {
  15935. return (__a - (__b * __aarch64_vget_lane_any (__c, __lane)));
  15936. }
  15937. __extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
  15938. vmls_lane_s32 (int32x2_t __a, int32x2_t __b,
  15939. int32x2_t __c, const int __lane)
  15940. {
  15941. return (__a - (__b * __aarch64_vget_lane_any (__c, __lane)));
  15942. }
  15943. __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
  15944. vmls_lane_u16 (uint16x4_t __a, uint16x4_t __b,
  15945. uint16x4_t __c, const int __lane)
  15946. {
  15947. return (__a - (__b * __aarch64_vget_lane_any (__c, __lane)));
  15948. }
  15949. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  15950. vmls_lane_u32 (uint32x2_t __a, uint32x2_t __b,
  15951. uint32x2_t __c, const int __lane)
  15952. {
  15953. return (__a - (__b * __aarch64_vget_lane_any (__c, __lane)));
  15954. }
  15955. /* vmls_laneq */
  15956. __extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
  15957. vmls_laneq_f32 (float32x2_t __a, float32x2_t __b,
  15958. float32x4_t __c, const int __lane)
  15959. {
  15960. return (__a - (__b * __aarch64_vget_lane_any (__c, __lane)));
  15961. }
  15962. __extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
  15963. vmls_laneq_s16 (int16x4_t __a, int16x4_t __b,
  15964. int16x8_t __c, const int __lane)
  15965. {
  15966. return (__a - (__b * __aarch64_vget_lane_any (__c, __lane)));
  15967. }
  15968. __extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
  15969. vmls_laneq_s32 (int32x2_t __a, int32x2_t __b,
  15970. int32x4_t __c, const int __lane)
  15971. {
  15972. return (__a - (__b * __aarch64_vget_lane_any (__c, __lane)));
  15973. }
  15974. __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
  15975. vmls_laneq_u16 (uint16x4_t __a, uint16x4_t __b,
  15976. uint16x8_t __c, const int __lane)
  15977. {
  15978. return (__a - (__b * __aarch64_vget_lane_any (__c, __lane)));
  15979. }
  15980. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  15981. vmls_laneq_u32 (uint32x2_t __a, uint32x2_t __b,
  15982. uint32x4_t __c, const int __lane)
  15983. {
  15984. return (__a - (__b * __aarch64_vget_lane_any (__c, __lane)));
  15985. }
  15986. /* vmlsq_lane */
  15987. __extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
  15988. vmlsq_lane_f32 (float32x4_t __a, float32x4_t __b,
  15989. float32x2_t __c, const int __lane)
  15990. {
  15991. return (__a - (__b * __aarch64_vget_lane_any (__c, __lane)));
  15992. }
  15993. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  15994. vmlsq_lane_s16 (int16x8_t __a, int16x8_t __b,
  15995. int16x4_t __c, const int __lane)
  15996. {
  15997. return (__a - (__b * __aarch64_vget_lane_any (__c, __lane)));
  15998. }
  15999. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  16000. vmlsq_lane_s32 (int32x4_t __a, int32x4_t __b,
  16001. int32x2_t __c, const int __lane)
  16002. {
  16003. return (__a - (__b * __aarch64_vget_lane_any (__c, __lane)));
  16004. }
  16005. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  16006. vmlsq_lane_u16 (uint16x8_t __a, uint16x8_t __b,
  16007. uint16x4_t __c, const int __lane)
  16008. {
  16009. return (__a - (__b * __aarch64_vget_lane_any (__c, __lane)));
  16010. }
  16011. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  16012. vmlsq_lane_u32 (uint32x4_t __a, uint32x4_t __b,
  16013. uint32x2_t __c, const int __lane)
  16014. {
  16015. return (__a - (__b * __aarch64_vget_lane_any (__c, __lane)));
  16016. }
  16017. /* vmlsq_laneq */
  16018. __extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
  16019. vmlsq_laneq_f32 (float32x4_t __a, float32x4_t __b,
  16020. float32x4_t __c, const int __lane)
  16021. {
  16022. return (__a - (__b * __aarch64_vget_lane_any (__c, __lane)));
  16023. }
  16024. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  16025. vmlsq_laneq_s16 (int16x8_t __a, int16x8_t __b,
  16026. int16x8_t __c, const int __lane)
  16027. {
  16028. return (__a - (__b * __aarch64_vget_lane_any (__c, __lane)));
  16029. }
  16030. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  16031. vmlsq_laneq_s32 (int32x4_t __a, int32x4_t __b,
  16032. int32x4_t __c, const int __lane)
  16033. {
  16034. return (__a - (__b * __aarch64_vget_lane_any (__c, __lane)));
  16035. }
  16036. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  16037. vmlsq_laneq_u16 (uint16x8_t __a, uint16x8_t __b,
  16038. uint16x8_t __c, const int __lane)
  16039. {
  16040. return (__a - (__b * __aarch64_vget_lane_any (__c, __lane)));
  16041. }
  16042. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  16043. vmlsq_laneq_u32 (uint32x4_t __a, uint32x4_t __b,
  16044. uint32x4_t __c, const int __lane)
  16045. {
  16046. return (__a - (__b * __aarch64_vget_lane_any (__c, __lane)));
  16047. }
  16048. /* vmov_n_ */
  16049. __extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
  16050. vmov_n_f32 (float32_t __a)
  16051. {
  16052. return vdup_n_f32 (__a);
  16053. }
  16054. __extension__ static __inline float64x1_t __attribute__ ((__always_inline__))
  16055. vmov_n_f64 (float64_t __a)
  16056. {
  16057. return (float64x1_t) {__a};
  16058. }
  16059. __extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
  16060. vmov_n_p8 (poly8_t __a)
  16061. {
  16062. return vdup_n_p8 (__a);
  16063. }
  16064. __extension__ static __inline poly16x4_t __attribute__ ((__always_inline__))
  16065. vmov_n_p16 (poly16_t __a)
  16066. {
  16067. return vdup_n_p16 (__a);
  16068. }
  16069. __extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
  16070. vmov_n_s8 (int8_t __a)
  16071. {
  16072. return vdup_n_s8 (__a);
  16073. }
  16074. __extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
  16075. vmov_n_s16 (int16_t __a)
  16076. {
  16077. return vdup_n_s16 (__a);
  16078. }
  16079. __extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
  16080. vmov_n_s32 (int32_t __a)
  16081. {
  16082. return vdup_n_s32 (__a);
  16083. }
  16084. __extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
  16085. vmov_n_s64 (int64_t __a)
  16086. {
  16087. return (int64x1_t) {__a};
  16088. }
  16089. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  16090. vmov_n_u8 (uint8_t __a)
  16091. {
  16092. return vdup_n_u8 (__a);
  16093. }
  16094. __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
  16095. vmov_n_u16 (uint16_t __a)
  16096. {
  16097. return vdup_n_u16 (__a);
  16098. }
  16099. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  16100. vmov_n_u32 (uint32_t __a)
  16101. {
  16102. return vdup_n_u32 (__a);
  16103. }
  16104. __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
  16105. vmov_n_u64 (uint64_t __a)
  16106. {
  16107. return (uint64x1_t) {__a};
  16108. }
  16109. __extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
  16110. vmovq_n_f32 (float32_t __a)
  16111. {
  16112. return vdupq_n_f32 (__a);
  16113. }
  16114. __extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
  16115. vmovq_n_f64 (float64_t __a)
  16116. {
  16117. return vdupq_n_f64 (__a);
  16118. }
  16119. __extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
  16120. vmovq_n_p8 (poly8_t __a)
  16121. {
  16122. return vdupq_n_p8 (__a);
  16123. }
  16124. __extension__ static __inline poly16x8_t __attribute__ ((__always_inline__))
  16125. vmovq_n_p16 (poly16_t __a)
  16126. {
  16127. return vdupq_n_p16 (__a);
  16128. }
  16129. __extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
  16130. vmovq_n_s8 (int8_t __a)
  16131. {
  16132. return vdupq_n_s8 (__a);
  16133. }
  16134. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  16135. vmovq_n_s16 (int16_t __a)
  16136. {
  16137. return vdupq_n_s16 (__a);
  16138. }
  16139. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  16140. vmovq_n_s32 (int32_t __a)
  16141. {
  16142. return vdupq_n_s32 (__a);
  16143. }
  16144. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  16145. vmovq_n_s64 (int64_t __a)
  16146. {
  16147. return vdupq_n_s64 (__a);
  16148. }
  16149. __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
  16150. vmovq_n_u8 (uint8_t __a)
  16151. {
  16152. return vdupq_n_u8 (__a);
  16153. }
  16154. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  16155. vmovq_n_u16 (uint16_t __a)
  16156. {
  16157. return vdupq_n_u16 (__a);
  16158. }
  16159. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  16160. vmovq_n_u32 (uint32_t __a)
  16161. {
  16162. return vdupq_n_u32 (__a);
  16163. }
  16164. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  16165. vmovq_n_u64 (uint64_t __a)
  16166. {
  16167. return vdupq_n_u64 (__a);
  16168. }
  16169. /* vmul_lane */
  16170. __extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
  16171. vmul_lane_f32 (float32x2_t __a, float32x2_t __b, const int __lane)
  16172. {
  16173. return __a * __aarch64_vget_lane_any (__b, __lane);
  16174. }
  16175. __extension__ static __inline float64x1_t __attribute__ ((__always_inline__))
  16176. vmul_lane_f64 (float64x1_t __a, float64x1_t __b, const int __lane)
  16177. {
  16178. return __a * __b;
  16179. }
  16180. __extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
  16181. vmul_lane_s16 (int16x4_t __a, int16x4_t __b, const int __lane)
  16182. {
  16183. return __a * __aarch64_vget_lane_any (__b, __lane);
  16184. }
  16185. __extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
  16186. vmul_lane_s32 (int32x2_t __a, int32x2_t __b, const int __lane)
  16187. {
  16188. return __a * __aarch64_vget_lane_any (__b, __lane);
  16189. }
  16190. __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
  16191. vmul_lane_u16 (uint16x4_t __a, uint16x4_t __b, const int __lane)
  16192. {
  16193. return __a * __aarch64_vget_lane_any (__b, __lane);
  16194. }
  16195. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  16196. vmul_lane_u32 (uint32x2_t __a, uint32x2_t __b, const int __lane)
  16197. {
  16198. return __a * __aarch64_vget_lane_any (__b, __lane);
  16199. }
  16200. /* vmuld_lane */
  16201. __extension__ static __inline float64_t __attribute__ ((__always_inline__))
  16202. vmuld_lane_f64 (float64_t __a, float64x1_t __b, const int __lane)
  16203. {
  16204. return __a * __aarch64_vget_lane_any (__b, __lane);
  16205. }
  16206. __extension__ static __inline float64_t __attribute__ ((__always_inline__))
  16207. vmuld_laneq_f64 (float64_t __a, float64x2_t __b, const int __lane)
  16208. {
  16209. return __a * __aarch64_vget_lane_any (__b, __lane);
  16210. }
  16211. /* vmuls_lane */
  16212. __extension__ static __inline float32_t __attribute__ ((__always_inline__))
  16213. vmuls_lane_f32 (float32_t __a, float32x2_t __b, const int __lane)
  16214. {
  16215. return __a * __aarch64_vget_lane_any (__b, __lane);
  16216. }
  16217. __extension__ static __inline float32_t __attribute__ ((__always_inline__))
  16218. vmuls_laneq_f32 (float32_t __a, float32x4_t __b, const int __lane)
  16219. {
  16220. return __a * __aarch64_vget_lane_any (__b, __lane);
  16221. }
  16222. /* vmul_laneq */
  16223. __extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
  16224. vmul_laneq_f32 (float32x2_t __a, float32x4_t __b, const int __lane)
  16225. {
  16226. return __a * __aarch64_vget_lane_any (__b, __lane);
  16227. }
  16228. __extension__ static __inline float64x1_t __attribute__ ((__always_inline__))
  16229. vmul_laneq_f64 (float64x1_t __a, float64x2_t __b, const int __lane)
  16230. {
  16231. return __a * __aarch64_vget_lane_any (__b, __lane);
  16232. }
  16233. __extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
  16234. vmul_laneq_s16 (int16x4_t __a, int16x8_t __b, const int __lane)
  16235. {
  16236. return __a * __aarch64_vget_lane_any (__b, __lane);
  16237. }
  16238. __extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
  16239. vmul_laneq_s32 (int32x2_t __a, int32x4_t __b, const int __lane)
  16240. {
  16241. return __a * __aarch64_vget_lane_any (__b, __lane);
  16242. }
  16243. __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
  16244. vmul_laneq_u16 (uint16x4_t __a, uint16x8_t __b, const int __lane)
  16245. {
  16246. return __a * __aarch64_vget_lane_any (__b, __lane);
  16247. }
  16248. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  16249. vmul_laneq_u32 (uint32x2_t __a, uint32x4_t __b, const int __lane)
  16250. {
  16251. return __a * __aarch64_vget_lane_any (__b, __lane);
  16252. }
  16253. /* vmul_n */
  16254. __extension__ static __inline float64x1_t __attribute__ ((__always_inline__))
  16255. vmul_n_f64 (float64x1_t __a, float64_t __b)
  16256. {
  16257. return (float64x1_t) { vget_lane_f64 (__a, 0) * __b };
  16258. }
  16259. /* vmulq_lane */
  16260. __extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
  16261. vmulq_lane_f32 (float32x4_t __a, float32x2_t __b, const int __lane)
  16262. {
  16263. return __a * __aarch64_vget_lane_any (__b, __lane);
  16264. }
  16265. __extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
  16266. vmulq_lane_f64 (float64x2_t __a, float64x1_t __b, const int __lane)
  16267. {
  16268. __AARCH64_LANE_CHECK (__a, __lane);
  16269. return __a * __b[0];
  16270. }
  16271. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  16272. vmulq_lane_s16 (int16x8_t __a, int16x4_t __b, const int __lane)
  16273. {
  16274. return __a * __aarch64_vget_lane_any (__b, __lane);
  16275. }
  16276. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  16277. vmulq_lane_s32 (int32x4_t __a, int32x2_t __b, const int __lane)
  16278. {
  16279. return __a * __aarch64_vget_lane_any (__b, __lane);
  16280. }
  16281. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  16282. vmulq_lane_u16 (uint16x8_t __a, uint16x4_t __b, const int __lane)
  16283. {
  16284. return __a * __aarch64_vget_lane_any (__b, __lane);
  16285. }
  16286. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  16287. vmulq_lane_u32 (uint32x4_t __a, uint32x2_t __b, const int __lane)
  16288. {
  16289. return __a * __aarch64_vget_lane_any (__b, __lane);
  16290. }
  16291. /* vmulq_laneq */
  16292. __extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
  16293. vmulq_laneq_f32 (float32x4_t __a, float32x4_t __b, const int __lane)
  16294. {
  16295. return __a * __aarch64_vget_lane_any (__b, __lane);
  16296. }
  16297. __extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
  16298. vmulq_laneq_f64 (float64x2_t __a, float64x2_t __b, const int __lane)
  16299. {
  16300. return __a * __aarch64_vget_lane_any (__b, __lane);
  16301. }
  16302. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  16303. vmulq_laneq_s16 (int16x8_t __a, int16x8_t __b, const int __lane)
  16304. {
  16305. return __a * __aarch64_vget_lane_any (__b, __lane);
  16306. }
  16307. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  16308. vmulq_laneq_s32 (int32x4_t __a, int32x4_t __b, const int __lane)
  16309. {
  16310. return __a * __aarch64_vget_lane_any (__b, __lane);
  16311. }
  16312. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  16313. vmulq_laneq_u16 (uint16x8_t __a, uint16x8_t __b, const int __lane)
  16314. {
  16315. return __a * __aarch64_vget_lane_any (__b, __lane);
  16316. }
  16317. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  16318. vmulq_laneq_u32 (uint32x4_t __a, uint32x4_t __b, const int __lane)
  16319. {
  16320. return __a * __aarch64_vget_lane_any (__b, __lane);
  16321. }
  16322. /* vneg */
  16323. __extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
  16324. vneg_f32 (float32x2_t __a)
  16325. {
  16326. return -__a;
  16327. }
  16328. __extension__ static __inline float64x1_t __attribute__ ((__always_inline__))
  16329. vneg_f64 (float64x1_t __a)
  16330. {
  16331. return -__a;
  16332. }
  16333. __extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
  16334. vneg_s8 (int8x8_t __a)
  16335. {
  16336. return -__a;
  16337. }
  16338. __extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
  16339. vneg_s16 (int16x4_t __a)
  16340. {
  16341. return -__a;
  16342. }
  16343. __extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
  16344. vneg_s32 (int32x2_t __a)
  16345. {
  16346. return -__a;
  16347. }
  16348. __extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
  16349. vneg_s64 (int64x1_t __a)
  16350. {
  16351. return -__a;
  16352. }
  16353. __extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
  16354. vnegq_f32 (float32x4_t __a)
  16355. {
  16356. return -__a;
  16357. }
  16358. __extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
  16359. vnegq_f64 (float64x2_t __a)
  16360. {
  16361. return -__a;
  16362. }
  16363. __extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
  16364. vnegq_s8 (int8x16_t __a)
  16365. {
  16366. return -__a;
  16367. }
  16368. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  16369. vnegq_s16 (int16x8_t __a)
  16370. {
  16371. return -__a;
  16372. }
  16373. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  16374. vnegq_s32 (int32x4_t __a)
  16375. {
  16376. return -__a;
  16377. }
  16378. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  16379. vnegq_s64 (int64x2_t __a)
  16380. {
  16381. return -__a;
  16382. }
  16383. /* vpadd */
  16384. __extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
  16385. vpadd_s8 (int8x8_t __a, int8x8_t __b)
  16386. {
  16387. return __builtin_aarch64_addpv8qi (__a, __b);
  16388. }
  16389. __extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
  16390. vpadd_s16 (int16x4_t __a, int16x4_t __b)
  16391. {
  16392. return __builtin_aarch64_addpv4hi (__a, __b);
  16393. }
  16394. __extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
  16395. vpadd_s32 (int32x2_t __a, int32x2_t __b)
  16396. {
  16397. return __builtin_aarch64_addpv2si (__a, __b);
  16398. }
  16399. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  16400. vpadd_u8 (uint8x8_t __a, uint8x8_t __b)
  16401. {
  16402. return (uint8x8_t) __builtin_aarch64_addpv8qi ((int8x8_t) __a,
  16403. (int8x8_t) __b);
  16404. }
  16405. __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
  16406. vpadd_u16 (uint16x4_t __a, uint16x4_t __b)
  16407. {
  16408. return (uint16x4_t) __builtin_aarch64_addpv4hi ((int16x4_t) __a,
  16409. (int16x4_t) __b);
  16410. }
  16411. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  16412. vpadd_u32 (uint32x2_t __a, uint32x2_t __b)
  16413. {
  16414. return (uint32x2_t) __builtin_aarch64_addpv2si ((int32x2_t) __a,
  16415. (int32x2_t) __b);
  16416. }
  16417. __extension__ static __inline float64_t __attribute__ ((__always_inline__))
  16418. vpaddd_f64 (float64x2_t __a)
  16419. {
  16420. return __builtin_aarch64_reduc_plus_scal_v2df (__a);
  16421. }
  16422. __extension__ static __inline int64_t __attribute__ ((__always_inline__))
  16423. vpaddd_s64 (int64x2_t __a)
  16424. {
  16425. return __builtin_aarch64_addpdi (__a);
  16426. }
  16427. __extension__ static __inline uint64_t __attribute__ ((__always_inline__))
  16428. vpaddd_u64 (uint64x2_t __a)
  16429. {
  16430. return __builtin_aarch64_addpdi ((int64x2_t) __a);
  16431. }
  16432. /* vqabs */
  16433. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  16434. vqabsq_s64 (int64x2_t __a)
  16435. {
  16436. return (int64x2_t) __builtin_aarch64_sqabsv2di (__a);
  16437. }
  16438. __extension__ static __inline int8_t __attribute__ ((__always_inline__))
  16439. vqabsb_s8 (int8_t __a)
  16440. {
  16441. return (int8_t) __builtin_aarch64_sqabsqi (__a);
  16442. }
  16443. __extension__ static __inline int16_t __attribute__ ((__always_inline__))
  16444. vqabsh_s16 (int16_t __a)
  16445. {
  16446. return (int16_t) __builtin_aarch64_sqabshi (__a);
  16447. }
  16448. __extension__ static __inline int32_t __attribute__ ((__always_inline__))
  16449. vqabss_s32 (int32_t __a)
  16450. {
  16451. return (int32_t) __builtin_aarch64_sqabssi (__a);
  16452. }
  16453. __extension__ static __inline int64_t __attribute__ ((__always_inline__))
  16454. vqabsd_s64 (int64_t __a)
  16455. {
  16456. return __builtin_aarch64_sqabsdi (__a);
  16457. }
  16458. /* vqadd */
  16459. __extension__ static __inline int8_t __attribute__ ((__always_inline__))
  16460. vqaddb_s8 (int8_t __a, int8_t __b)
  16461. {
  16462. return (int8_t) __builtin_aarch64_sqaddqi (__a, __b);
  16463. }
  16464. __extension__ static __inline int16_t __attribute__ ((__always_inline__))
  16465. vqaddh_s16 (int16_t __a, int16_t __b)
  16466. {
  16467. return (int16_t) __builtin_aarch64_sqaddhi (__a, __b);
  16468. }
  16469. __extension__ static __inline int32_t __attribute__ ((__always_inline__))
  16470. vqadds_s32 (int32_t __a, int32_t __b)
  16471. {
  16472. return (int32_t) __builtin_aarch64_sqaddsi (__a, __b);
  16473. }
  16474. __extension__ static __inline int64_t __attribute__ ((__always_inline__))
  16475. vqaddd_s64 (int64_t __a, int64_t __b)
  16476. {
  16477. return __builtin_aarch64_sqadddi (__a, __b);
  16478. }
  16479. __extension__ static __inline uint8_t __attribute__ ((__always_inline__))
  16480. vqaddb_u8 (uint8_t __a, uint8_t __b)
  16481. {
  16482. return (uint8_t) __builtin_aarch64_uqaddqi_uuu (__a, __b);
  16483. }
  16484. __extension__ static __inline uint16_t __attribute__ ((__always_inline__))
  16485. vqaddh_u16 (uint16_t __a, uint16_t __b)
  16486. {
  16487. return (uint16_t) __builtin_aarch64_uqaddhi_uuu (__a, __b);
  16488. }
  16489. __extension__ static __inline uint32_t __attribute__ ((__always_inline__))
  16490. vqadds_u32 (uint32_t __a, uint32_t __b)
  16491. {
  16492. return (uint32_t) __builtin_aarch64_uqaddsi_uuu (__a, __b);
  16493. }
  16494. __extension__ static __inline uint64_t __attribute__ ((__always_inline__))
  16495. vqaddd_u64 (uint64_t __a, uint64_t __b)
  16496. {
  16497. return __builtin_aarch64_uqadddi_uuu (__a, __b);
  16498. }
  16499. /* vqdmlal */
  16500. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  16501. vqdmlal_s16 (int32x4_t __a, int16x4_t __b, int16x4_t __c)
  16502. {
  16503. return __builtin_aarch64_sqdmlalv4hi (__a, __b, __c);
  16504. }
  16505. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  16506. vqdmlal_high_s16 (int32x4_t __a, int16x8_t __b, int16x8_t __c)
  16507. {
  16508. return __builtin_aarch64_sqdmlal2v8hi (__a, __b, __c);
  16509. }
  16510. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  16511. vqdmlal_high_lane_s16 (int32x4_t __a, int16x8_t __b, int16x4_t __c,
  16512. int const __d)
  16513. {
  16514. return __builtin_aarch64_sqdmlal2_lanev8hi (__a, __b, __c, __d);
  16515. }
  16516. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  16517. vqdmlal_high_laneq_s16 (int32x4_t __a, int16x8_t __b, int16x8_t __c,
  16518. int const __d)
  16519. {
  16520. return __builtin_aarch64_sqdmlal2_laneqv8hi (__a, __b, __c, __d);
  16521. }
  16522. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  16523. vqdmlal_high_n_s16 (int32x4_t __a, int16x8_t __b, int16_t __c)
  16524. {
  16525. return __builtin_aarch64_sqdmlal2_nv8hi (__a, __b, __c);
  16526. }
  16527. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  16528. vqdmlal_lane_s16 (int32x4_t __a, int16x4_t __b, int16x4_t __c, int const __d)
  16529. {
  16530. return __builtin_aarch64_sqdmlal_lanev4hi (__a, __b, __c, __d);
  16531. }
  16532. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  16533. vqdmlal_laneq_s16 (int32x4_t __a, int16x4_t __b, int16x8_t __c, int const __d)
  16534. {
  16535. return __builtin_aarch64_sqdmlal_laneqv4hi (__a, __b, __c, __d);
  16536. }
  16537. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  16538. vqdmlal_n_s16 (int32x4_t __a, int16x4_t __b, int16_t __c)
  16539. {
  16540. return __builtin_aarch64_sqdmlal_nv4hi (__a, __b, __c);
  16541. }
  16542. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  16543. vqdmlal_s32 (int64x2_t __a, int32x2_t __b, int32x2_t __c)
  16544. {
  16545. return __builtin_aarch64_sqdmlalv2si (__a, __b, __c);
  16546. }
  16547. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  16548. vqdmlal_high_s32 (int64x2_t __a, int32x4_t __b, int32x4_t __c)
  16549. {
  16550. return __builtin_aarch64_sqdmlal2v4si (__a, __b, __c);
  16551. }
  16552. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  16553. vqdmlal_high_lane_s32 (int64x2_t __a, int32x4_t __b, int32x2_t __c,
  16554. int const __d)
  16555. {
  16556. return __builtin_aarch64_sqdmlal2_lanev4si (__a, __b, __c, __d);
  16557. }
  16558. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  16559. vqdmlal_high_laneq_s32 (int64x2_t __a, int32x4_t __b, int32x4_t __c,
  16560. int const __d)
  16561. {
  16562. return __builtin_aarch64_sqdmlal2_laneqv4si (__a, __b, __c, __d);
  16563. }
  16564. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  16565. vqdmlal_high_n_s32 (int64x2_t __a, int32x4_t __b, int32_t __c)
  16566. {
  16567. return __builtin_aarch64_sqdmlal2_nv4si (__a, __b, __c);
  16568. }
  16569. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  16570. vqdmlal_lane_s32 (int64x2_t __a, int32x2_t __b, int32x2_t __c, int const __d)
  16571. {
  16572. return __builtin_aarch64_sqdmlal_lanev2si (__a, __b, __c, __d);
  16573. }
  16574. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  16575. vqdmlal_laneq_s32 (int64x2_t __a, int32x2_t __b, int32x4_t __c, int const __d)
  16576. {
  16577. return __builtin_aarch64_sqdmlal_laneqv2si (__a, __b, __c, __d);
  16578. }
  16579. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  16580. vqdmlal_n_s32 (int64x2_t __a, int32x2_t __b, int32_t __c)
  16581. {
  16582. return __builtin_aarch64_sqdmlal_nv2si (__a, __b, __c);
  16583. }
  16584. __extension__ static __inline int32_t __attribute__ ((__always_inline__))
  16585. vqdmlalh_s16 (int32_t __a, int16_t __b, int16_t __c)
  16586. {
  16587. return __builtin_aarch64_sqdmlalhi (__a, __b, __c);
  16588. }
  16589. __extension__ static __inline int32_t __attribute__ ((__always_inline__))
  16590. vqdmlalh_lane_s16 (int32_t __a, int16_t __b, int16x4_t __c, const int __d)
  16591. {
  16592. return __builtin_aarch64_sqdmlal_lanehi (__a, __b, __c, __d);
  16593. }
  16594. __extension__ static __inline int32_t __attribute__ ((__always_inline__))
  16595. vqdmlalh_laneq_s16 (int32_t __a, int16_t __b, int16x8_t __c, const int __d)
  16596. {
  16597. return __builtin_aarch64_sqdmlal_laneqhi (__a, __b, __c, __d);
  16598. }
  16599. __extension__ static __inline int64_t __attribute__ ((__always_inline__))
  16600. vqdmlals_s32 (int64_t __a, int32_t __b, int32_t __c)
  16601. {
  16602. return __builtin_aarch64_sqdmlalsi (__a, __b, __c);
  16603. }
  16604. __extension__ static __inline int64_t __attribute__ ((__always_inline__))
  16605. vqdmlals_lane_s32 (int64_t __a, int32_t __b, int32x2_t __c, const int __d)
  16606. {
  16607. return __builtin_aarch64_sqdmlal_lanesi (__a, __b, __c, __d);
  16608. }
  16609. __extension__ static __inline int64_t __attribute__ ((__always_inline__))
  16610. vqdmlals_laneq_s32 (int64_t __a, int32_t __b, int32x4_t __c, const int __d)
  16611. {
  16612. return __builtin_aarch64_sqdmlal_laneqsi (__a, __b, __c, __d);
  16613. }
  16614. /* vqdmlsl */
  16615. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  16616. vqdmlsl_s16 (int32x4_t __a, int16x4_t __b, int16x4_t __c)
  16617. {
  16618. return __builtin_aarch64_sqdmlslv4hi (__a, __b, __c);
  16619. }
  16620. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  16621. vqdmlsl_high_s16 (int32x4_t __a, int16x8_t __b, int16x8_t __c)
  16622. {
  16623. return __builtin_aarch64_sqdmlsl2v8hi (__a, __b, __c);
  16624. }
  16625. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  16626. vqdmlsl_high_lane_s16 (int32x4_t __a, int16x8_t __b, int16x4_t __c,
  16627. int const __d)
  16628. {
  16629. return __builtin_aarch64_sqdmlsl2_lanev8hi (__a, __b, __c, __d);
  16630. }
  16631. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  16632. vqdmlsl_high_laneq_s16 (int32x4_t __a, int16x8_t __b, int16x8_t __c,
  16633. int const __d)
  16634. {
  16635. return __builtin_aarch64_sqdmlsl2_laneqv8hi (__a, __b, __c, __d);
  16636. }
  16637. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  16638. vqdmlsl_high_n_s16 (int32x4_t __a, int16x8_t __b, int16_t __c)
  16639. {
  16640. return __builtin_aarch64_sqdmlsl2_nv8hi (__a, __b, __c);
  16641. }
  16642. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  16643. vqdmlsl_lane_s16 (int32x4_t __a, int16x4_t __b, int16x4_t __c, int const __d)
  16644. {
  16645. return __builtin_aarch64_sqdmlsl_lanev4hi (__a, __b, __c, __d);
  16646. }
  16647. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  16648. vqdmlsl_laneq_s16 (int32x4_t __a, int16x4_t __b, int16x8_t __c, int const __d)
  16649. {
  16650. return __builtin_aarch64_sqdmlsl_laneqv4hi (__a, __b, __c, __d);
  16651. }
  16652. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  16653. vqdmlsl_n_s16 (int32x4_t __a, int16x4_t __b, int16_t __c)
  16654. {
  16655. return __builtin_aarch64_sqdmlsl_nv4hi (__a, __b, __c);
  16656. }
  16657. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  16658. vqdmlsl_s32 (int64x2_t __a, int32x2_t __b, int32x2_t __c)
  16659. {
  16660. return __builtin_aarch64_sqdmlslv2si (__a, __b, __c);
  16661. }
  16662. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  16663. vqdmlsl_high_s32 (int64x2_t __a, int32x4_t __b, int32x4_t __c)
  16664. {
  16665. return __builtin_aarch64_sqdmlsl2v4si (__a, __b, __c);
  16666. }
  16667. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  16668. vqdmlsl_high_lane_s32 (int64x2_t __a, int32x4_t __b, int32x2_t __c,
  16669. int const __d)
  16670. {
  16671. return __builtin_aarch64_sqdmlsl2_lanev4si (__a, __b, __c, __d);
  16672. }
  16673. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  16674. vqdmlsl_high_laneq_s32 (int64x2_t __a, int32x4_t __b, int32x4_t __c,
  16675. int const __d)
  16676. {
  16677. return __builtin_aarch64_sqdmlsl2_laneqv4si (__a, __b, __c, __d);
  16678. }
  16679. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  16680. vqdmlsl_high_n_s32 (int64x2_t __a, int32x4_t __b, int32_t __c)
  16681. {
  16682. return __builtin_aarch64_sqdmlsl2_nv4si (__a, __b, __c);
  16683. }
  16684. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  16685. vqdmlsl_lane_s32 (int64x2_t __a, int32x2_t __b, int32x2_t __c, int const __d)
  16686. {
  16687. return __builtin_aarch64_sqdmlsl_lanev2si (__a, __b, __c, __d);
  16688. }
  16689. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  16690. vqdmlsl_laneq_s32 (int64x2_t __a, int32x2_t __b, int32x4_t __c, int const __d)
  16691. {
  16692. return __builtin_aarch64_sqdmlsl_laneqv2si (__a, __b, __c, __d);
  16693. }
  16694. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  16695. vqdmlsl_n_s32 (int64x2_t __a, int32x2_t __b, int32_t __c)
  16696. {
  16697. return __builtin_aarch64_sqdmlsl_nv2si (__a, __b, __c);
  16698. }
  16699. __extension__ static __inline int32_t __attribute__ ((__always_inline__))
  16700. vqdmlslh_s16 (int32_t __a, int16_t __b, int16_t __c)
  16701. {
  16702. return __builtin_aarch64_sqdmlslhi (__a, __b, __c);
  16703. }
  16704. __extension__ static __inline int32_t __attribute__ ((__always_inline__))
  16705. vqdmlslh_lane_s16 (int32_t __a, int16_t __b, int16x4_t __c, const int __d)
  16706. {
  16707. return __builtin_aarch64_sqdmlsl_lanehi (__a, __b, __c, __d);
  16708. }
  16709. __extension__ static __inline int32_t __attribute__ ((__always_inline__))
  16710. vqdmlslh_laneq_s16 (int32_t __a, int16_t __b, int16x8_t __c, const int __d)
  16711. {
  16712. return __builtin_aarch64_sqdmlsl_laneqhi (__a, __b, __c, __d);
  16713. }
  16714. __extension__ static __inline int64_t __attribute__ ((__always_inline__))
  16715. vqdmlsls_s32 (int64_t __a, int32_t __b, int32_t __c)
  16716. {
  16717. return __builtin_aarch64_sqdmlslsi (__a, __b, __c);
  16718. }
  16719. __extension__ static __inline int64_t __attribute__ ((__always_inline__))
  16720. vqdmlsls_lane_s32 (int64_t __a, int32_t __b, int32x2_t __c, const int __d)
  16721. {
  16722. return __builtin_aarch64_sqdmlsl_lanesi (__a, __b, __c, __d);
  16723. }
  16724. __extension__ static __inline int64_t __attribute__ ((__always_inline__))
  16725. vqdmlsls_laneq_s32 (int64_t __a, int32_t __b, int32x4_t __c, const int __d)
  16726. {
  16727. return __builtin_aarch64_sqdmlsl_laneqsi (__a, __b, __c, __d);
  16728. }
  16729. /* vqdmulh */
  16730. __extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
  16731. vqdmulh_lane_s16 (int16x4_t __a, int16x4_t __b, const int __c)
  16732. {
  16733. return __builtin_aarch64_sqdmulh_lanev4hi (__a, __b, __c);
  16734. }
  16735. __extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
  16736. vqdmulh_lane_s32 (int32x2_t __a, int32x2_t __b, const int __c)
  16737. {
  16738. return __builtin_aarch64_sqdmulh_lanev2si (__a, __b, __c);
  16739. }
  16740. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  16741. vqdmulhq_lane_s16 (int16x8_t __a, int16x4_t __b, const int __c)
  16742. {
  16743. return __builtin_aarch64_sqdmulh_lanev8hi (__a, __b, __c);
  16744. }
  16745. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  16746. vqdmulhq_lane_s32 (int32x4_t __a, int32x2_t __b, const int __c)
  16747. {
  16748. return __builtin_aarch64_sqdmulh_lanev4si (__a, __b, __c);
  16749. }
  16750. __extension__ static __inline int16_t __attribute__ ((__always_inline__))
  16751. vqdmulhh_s16 (int16_t __a, int16_t __b)
  16752. {
  16753. return (int16_t) __builtin_aarch64_sqdmulhhi (__a, __b);
  16754. }
  16755. __extension__ static __inline int16_t __attribute__ ((__always_inline__))
  16756. vqdmulhh_lane_s16 (int16_t __a, int16x4_t __b, const int __c)
  16757. {
  16758. return __builtin_aarch64_sqdmulh_lanehi (__a, __b, __c);
  16759. }
  16760. __extension__ static __inline int16_t __attribute__ ((__always_inline__))
  16761. vqdmulhh_laneq_s16 (int16_t __a, int16x8_t __b, const int __c)
  16762. {
  16763. return __builtin_aarch64_sqdmulh_laneqhi (__a, __b, __c);
  16764. }
  16765. __extension__ static __inline int32_t __attribute__ ((__always_inline__))
  16766. vqdmulhs_s32 (int32_t __a, int32_t __b)
  16767. {
  16768. return (int32_t) __builtin_aarch64_sqdmulhsi (__a, __b);
  16769. }
  16770. __extension__ static __inline int32_t __attribute__ ((__always_inline__))
  16771. vqdmulhs_lane_s32 (int32_t __a, int32x2_t __b, const int __c)
  16772. {
  16773. return __builtin_aarch64_sqdmulh_lanesi (__a, __b, __c);
  16774. }
  16775. __extension__ static __inline int32_t __attribute__ ((__always_inline__))
  16776. vqdmulhs_laneq_s32 (int32_t __a, int32x4_t __b, const int __c)
  16777. {
  16778. return __builtin_aarch64_sqdmulh_laneqsi (__a, __b, __c);
  16779. }
  16780. /* vqdmull */
  16781. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  16782. vqdmull_s16 (int16x4_t __a, int16x4_t __b)
  16783. {
  16784. return __builtin_aarch64_sqdmullv4hi (__a, __b);
  16785. }
  16786. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  16787. vqdmull_high_s16 (int16x8_t __a, int16x8_t __b)
  16788. {
  16789. return __builtin_aarch64_sqdmull2v8hi (__a, __b);
  16790. }
  16791. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  16792. vqdmull_high_lane_s16 (int16x8_t __a, int16x4_t __b, int const __c)
  16793. {
  16794. return __builtin_aarch64_sqdmull2_lanev8hi (__a, __b,__c);
  16795. }
  16796. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  16797. vqdmull_high_laneq_s16 (int16x8_t __a, int16x8_t __b, int const __c)
  16798. {
  16799. return __builtin_aarch64_sqdmull2_laneqv8hi (__a, __b,__c);
  16800. }
  16801. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  16802. vqdmull_high_n_s16 (int16x8_t __a, int16_t __b)
  16803. {
  16804. return __builtin_aarch64_sqdmull2_nv8hi (__a, __b);
  16805. }
  16806. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  16807. vqdmull_lane_s16 (int16x4_t __a, int16x4_t __b, int const __c)
  16808. {
  16809. return __builtin_aarch64_sqdmull_lanev4hi (__a, __b, __c);
  16810. }
  16811. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  16812. vqdmull_laneq_s16 (int16x4_t __a, int16x8_t __b, int const __c)
  16813. {
  16814. return __builtin_aarch64_sqdmull_laneqv4hi (__a, __b, __c);
  16815. }
  16816. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  16817. vqdmull_n_s16 (int16x4_t __a, int16_t __b)
  16818. {
  16819. return __builtin_aarch64_sqdmull_nv4hi (__a, __b);
  16820. }
  16821. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  16822. vqdmull_s32 (int32x2_t __a, int32x2_t __b)
  16823. {
  16824. return __builtin_aarch64_sqdmullv2si (__a, __b);
  16825. }
  16826. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  16827. vqdmull_high_s32 (int32x4_t __a, int32x4_t __b)
  16828. {
  16829. return __builtin_aarch64_sqdmull2v4si (__a, __b);
  16830. }
  16831. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  16832. vqdmull_high_lane_s32 (int32x4_t __a, int32x2_t __b, int const __c)
  16833. {
  16834. return __builtin_aarch64_sqdmull2_lanev4si (__a, __b, __c);
  16835. }
  16836. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  16837. vqdmull_high_laneq_s32 (int32x4_t __a, int32x4_t __b, int const __c)
  16838. {
  16839. return __builtin_aarch64_sqdmull2_laneqv4si (__a, __b, __c);
  16840. }
  16841. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  16842. vqdmull_high_n_s32 (int32x4_t __a, int32_t __b)
  16843. {
  16844. return __builtin_aarch64_sqdmull2_nv4si (__a, __b);
  16845. }
  16846. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  16847. vqdmull_lane_s32 (int32x2_t __a, int32x2_t __b, int const __c)
  16848. {
  16849. return __builtin_aarch64_sqdmull_lanev2si (__a, __b, __c);
  16850. }
  16851. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  16852. vqdmull_laneq_s32 (int32x2_t __a, int32x4_t __b, int const __c)
  16853. {
  16854. return __builtin_aarch64_sqdmull_laneqv2si (__a, __b, __c);
  16855. }
  16856. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  16857. vqdmull_n_s32 (int32x2_t __a, int32_t __b)
  16858. {
  16859. return __builtin_aarch64_sqdmull_nv2si (__a, __b);
  16860. }
  16861. __extension__ static __inline int32_t __attribute__ ((__always_inline__))
  16862. vqdmullh_s16 (int16_t __a, int16_t __b)
  16863. {
  16864. return (int32_t) __builtin_aarch64_sqdmullhi (__a, __b);
  16865. }
  16866. __extension__ static __inline int32_t __attribute__ ((__always_inline__))
  16867. vqdmullh_lane_s16 (int16_t __a, int16x4_t __b, const int __c)
  16868. {
  16869. return __builtin_aarch64_sqdmull_lanehi (__a, __b, __c);
  16870. }
  16871. __extension__ static __inline int32_t __attribute__ ((__always_inline__))
  16872. vqdmullh_laneq_s16 (int16_t __a, int16x8_t __b, const int __c)
  16873. {
  16874. return __builtin_aarch64_sqdmull_laneqhi (__a, __b, __c);
  16875. }
  16876. __extension__ static __inline int64_t __attribute__ ((__always_inline__))
  16877. vqdmulls_s32 (int32_t __a, int32_t __b)
  16878. {
  16879. return __builtin_aarch64_sqdmullsi (__a, __b);
  16880. }
  16881. __extension__ static __inline int64_t __attribute__ ((__always_inline__))
  16882. vqdmulls_lane_s32 (int32_t __a, int32x2_t __b, const int __c)
  16883. {
  16884. return __builtin_aarch64_sqdmull_lanesi (__a, __b, __c);
  16885. }
  16886. __extension__ static __inline int64_t __attribute__ ((__always_inline__))
  16887. vqdmulls_laneq_s32 (int32_t __a, int32x4_t __b, const int __c)
  16888. {
  16889. return __builtin_aarch64_sqdmull_laneqsi (__a, __b, __c);
  16890. }
  16891. /* vqmovn */
  16892. __extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
  16893. vqmovn_s16 (int16x8_t __a)
  16894. {
  16895. return (int8x8_t) __builtin_aarch64_sqmovnv8hi (__a);
  16896. }
  16897. __extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
  16898. vqmovn_s32 (int32x4_t __a)
  16899. {
  16900. return (int16x4_t) __builtin_aarch64_sqmovnv4si (__a);
  16901. }
  16902. __extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
  16903. vqmovn_s64 (int64x2_t __a)
  16904. {
  16905. return (int32x2_t) __builtin_aarch64_sqmovnv2di (__a);
  16906. }
  16907. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  16908. vqmovn_u16 (uint16x8_t __a)
  16909. {
  16910. return (uint8x8_t) __builtin_aarch64_uqmovnv8hi ((int16x8_t) __a);
  16911. }
  16912. __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
  16913. vqmovn_u32 (uint32x4_t __a)
  16914. {
  16915. return (uint16x4_t) __builtin_aarch64_uqmovnv4si ((int32x4_t) __a);
  16916. }
  16917. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  16918. vqmovn_u64 (uint64x2_t __a)
  16919. {
  16920. return (uint32x2_t) __builtin_aarch64_uqmovnv2di ((int64x2_t) __a);
  16921. }
  16922. __extension__ static __inline int8_t __attribute__ ((__always_inline__))
  16923. vqmovnh_s16 (int16_t __a)
  16924. {
  16925. return (int8_t) __builtin_aarch64_sqmovnhi (__a);
  16926. }
  16927. __extension__ static __inline int16_t __attribute__ ((__always_inline__))
  16928. vqmovns_s32 (int32_t __a)
  16929. {
  16930. return (int16_t) __builtin_aarch64_sqmovnsi (__a);
  16931. }
  16932. __extension__ static __inline int32_t __attribute__ ((__always_inline__))
  16933. vqmovnd_s64 (int64_t __a)
  16934. {
  16935. return (int32_t) __builtin_aarch64_sqmovndi (__a);
  16936. }
  16937. __extension__ static __inline uint8_t __attribute__ ((__always_inline__))
  16938. vqmovnh_u16 (uint16_t __a)
  16939. {
  16940. return (uint8_t) __builtin_aarch64_uqmovnhi (__a);
  16941. }
  16942. __extension__ static __inline uint16_t __attribute__ ((__always_inline__))
  16943. vqmovns_u32 (uint32_t __a)
  16944. {
  16945. return (uint16_t) __builtin_aarch64_uqmovnsi (__a);
  16946. }
  16947. __extension__ static __inline uint32_t __attribute__ ((__always_inline__))
  16948. vqmovnd_u64 (uint64_t __a)
  16949. {
  16950. return (uint32_t) __builtin_aarch64_uqmovndi (__a);
  16951. }
  16952. /* vqmovun */
  16953. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  16954. vqmovun_s16 (int16x8_t __a)
  16955. {
  16956. return (uint8x8_t) __builtin_aarch64_sqmovunv8hi (__a);
  16957. }
  16958. __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
  16959. vqmovun_s32 (int32x4_t __a)
  16960. {
  16961. return (uint16x4_t) __builtin_aarch64_sqmovunv4si (__a);
  16962. }
  16963. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  16964. vqmovun_s64 (int64x2_t __a)
  16965. {
  16966. return (uint32x2_t) __builtin_aarch64_sqmovunv2di (__a);
  16967. }
  16968. __extension__ static __inline int8_t __attribute__ ((__always_inline__))
  16969. vqmovunh_s16 (int16_t __a)
  16970. {
  16971. return (int8_t) __builtin_aarch64_sqmovunhi (__a);
  16972. }
  16973. __extension__ static __inline int16_t __attribute__ ((__always_inline__))
  16974. vqmovuns_s32 (int32_t __a)
  16975. {
  16976. return (int16_t) __builtin_aarch64_sqmovunsi (__a);
  16977. }
  16978. __extension__ static __inline int32_t __attribute__ ((__always_inline__))
  16979. vqmovund_s64 (int64_t __a)
  16980. {
  16981. return (int32_t) __builtin_aarch64_sqmovundi (__a);
  16982. }
  16983. /* vqneg */
  16984. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  16985. vqnegq_s64 (int64x2_t __a)
  16986. {
  16987. return (int64x2_t) __builtin_aarch64_sqnegv2di (__a);
  16988. }
  16989. __extension__ static __inline int8_t __attribute__ ((__always_inline__))
  16990. vqnegb_s8 (int8_t __a)
  16991. {
  16992. return (int8_t) __builtin_aarch64_sqnegqi (__a);
  16993. }
  16994. __extension__ static __inline int16_t __attribute__ ((__always_inline__))
  16995. vqnegh_s16 (int16_t __a)
  16996. {
  16997. return (int16_t) __builtin_aarch64_sqneghi (__a);
  16998. }
  16999. __extension__ static __inline int32_t __attribute__ ((__always_inline__))
  17000. vqnegs_s32 (int32_t __a)
  17001. {
  17002. return (int32_t) __builtin_aarch64_sqnegsi (__a);
  17003. }
  17004. __extension__ static __inline int64_t __attribute__ ((__always_inline__))
  17005. vqnegd_s64 (int64_t __a)
  17006. {
  17007. return __builtin_aarch64_sqnegdi (__a);
  17008. }
  17009. /* vqrdmulh */
  17010. __extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
  17011. vqrdmulh_lane_s16 (int16x4_t __a, int16x4_t __b, const int __c)
  17012. {
  17013. return __builtin_aarch64_sqrdmulh_lanev4hi (__a, __b, __c);
  17014. }
  17015. __extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
  17016. vqrdmulh_lane_s32 (int32x2_t __a, int32x2_t __b, const int __c)
  17017. {
  17018. return __builtin_aarch64_sqrdmulh_lanev2si (__a, __b, __c);
  17019. }
  17020. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  17021. vqrdmulhq_lane_s16 (int16x8_t __a, int16x4_t __b, const int __c)
  17022. {
  17023. return __builtin_aarch64_sqrdmulh_lanev8hi (__a, __b, __c);
  17024. }
  17025. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  17026. vqrdmulhq_lane_s32 (int32x4_t __a, int32x2_t __b, const int __c)
  17027. {
  17028. return __builtin_aarch64_sqrdmulh_lanev4si (__a, __b, __c);
  17029. }
  17030. __extension__ static __inline int16_t __attribute__ ((__always_inline__))
  17031. vqrdmulhh_s16 (int16_t __a, int16_t __b)
  17032. {
  17033. return (int16_t) __builtin_aarch64_sqrdmulhhi (__a, __b);
  17034. }
  17035. __extension__ static __inline int16_t __attribute__ ((__always_inline__))
  17036. vqrdmulhh_lane_s16 (int16_t __a, int16x4_t __b, const int __c)
  17037. {
  17038. return __builtin_aarch64_sqrdmulh_lanehi (__a, __b, __c);
  17039. }
  17040. __extension__ static __inline int16_t __attribute__ ((__always_inline__))
  17041. vqrdmulhh_laneq_s16 (int16_t __a, int16x8_t __b, const int __c)
  17042. {
  17043. return __builtin_aarch64_sqrdmulh_laneqhi (__a, __b, __c);
  17044. }
  17045. __extension__ static __inline int32_t __attribute__ ((__always_inline__))
  17046. vqrdmulhs_s32 (int32_t __a, int32_t __b)
  17047. {
  17048. return (int32_t) __builtin_aarch64_sqrdmulhsi (__a, __b);
  17049. }
  17050. __extension__ static __inline int32_t __attribute__ ((__always_inline__))
  17051. vqrdmulhs_lane_s32 (int32_t __a, int32x2_t __b, const int __c)
  17052. {
  17053. return __builtin_aarch64_sqrdmulh_lanesi (__a, __b, __c);
  17054. }
  17055. __extension__ static __inline int32_t __attribute__ ((__always_inline__))
  17056. vqrdmulhs_laneq_s32 (int32_t __a, int32x4_t __b, const int __c)
  17057. {
  17058. return __builtin_aarch64_sqrdmulh_laneqsi (__a, __b, __c);
  17059. }
  17060. /* vqrshl */
  17061. __extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
  17062. vqrshl_s8 (int8x8_t __a, int8x8_t __b)
  17063. {
  17064. return __builtin_aarch64_sqrshlv8qi (__a, __b);
  17065. }
  17066. __extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
  17067. vqrshl_s16 (int16x4_t __a, int16x4_t __b)
  17068. {
  17069. return __builtin_aarch64_sqrshlv4hi (__a, __b);
  17070. }
  17071. __extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
  17072. vqrshl_s32 (int32x2_t __a, int32x2_t __b)
  17073. {
  17074. return __builtin_aarch64_sqrshlv2si (__a, __b);
  17075. }
  17076. __extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
  17077. vqrshl_s64 (int64x1_t __a, int64x1_t __b)
  17078. {
  17079. return (int64x1_t) {__builtin_aarch64_sqrshldi (__a[0], __b[0])};
  17080. }
  17081. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  17082. vqrshl_u8 (uint8x8_t __a, int8x8_t __b)
  17083. {
  17084. return __builtin_aarch64_uqrshlv8qi_uus ( __a, __b);
  17085. }
  17086. __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
  17087. vqrshl_u16 (uint16x4_t __a, int16x4_t __b)
  17088. {
  17089. return __builtin_aarch64_uqrshlv4hi_uus ( __a, __b);
  17090. }
  17091. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  17092. vqrshl_u32 (uint32x2_t __a, int32x2_t __b)
  17093. {
  17094. return __builtin_aarch64_uqrshlv2si_uus ( __a, __b);
  17095. }
  17096. __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
  17097. vqrshl_u64 (uint64x1_t __a, int64x1_t __b)
  17098. {
  17099. return (uint64x1_t) {__builtin_aarch64_uqrshldi_uus (__a[0], __b[0])};
  17100. }
  17101. __extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
  17102. vqrshlq_s8 (int8x16_t __a, int8x16_t __b)
  17103. {
  17104. return __builtin_aarch64_sqrshlv16qi (__a, __b);
  17105. }
  17106. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  17107. vqrshlq_s16 (int16x8_t __a, int16x8_t __b)
  17108. {
  17109. return __builtin_aarch64_sqrshlv8hi (__a, __b);
  17110. }
  17111. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  17112. vqrshlq_s32 (int32x4_t __a, int32x4_t __b)
  17113. {
  17114. return __builtin_aarch64_sqrshlv4si (__a, __b);
  17115. }
  17116. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  17117. vqrshlq_s64 (int64x2_t __a, int64x2_t __b)
  17118. {
  17119. return __builtin_aarch64_sqrshlv2di (__a, __b);
  17120. }
  17121. __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
  17122. vqrshlq_u8 (uint8x16_t __a, int8x16_t __b)
  17123. {
  17124. return __builtin_aarch64_uqrshlv16qi_uus ( __a, __b);
  17125. }
  17126. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  17127. vqrshlq_u16 (uint16x8_t __a, int16x8_t __b)
  17128. {
  17129. return __builtin_aarch64_uqrshlv8hi_uus ( __a, __b);
  17130. }
  17131. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  17132. vqrshlq_u32 (uint32x4_t __a, int32x4_t __b)
  17133. {
  17134. return __builtin_aarch64_uqrshlv4si_uus ( __a, __b);
  17135. }
  17136. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  17137. vqrshlq_u64 (uint64x2_t __a, int64x2_t __b)
  17138. {
  17139. return __builtin_aarch64_uqrshlv2di_uus ( __a, __b);
  17140. }
  17141. __extension__ static __inline int8_t __attribute__ ((__always_inline__))
  17142. vqrshlb_s8 (int8_t __a, int8_t __b)
  17143. {
  17144. return __builtin_aarch64_sqrshlqi (__a, __b);
  17145. }
  17146. __extension__ static __inline int16_t __attribute__ ((__always_inline__))
  17147. vqrshlh_s16 (int16_t __a, int16_t __b)
  17148. {
  17149. return __builtin_aarch64_sqrshlhi (__a, __b);
  17150. }
  17151. __extension__ static __inline int32_t __attribute__ ((__always_inline__))
  17152. vqrshls_s32 (int32_t __a, int32_t __b)
  17153. {
  17154. return __builtin_aarch64_sqrshlsi (__a, __b);
  17155. }
  17156. __extension__ static __inline int64_t __attribute__ ((__always_inline__))
  17157. vqrshld_s64 (int64_t __a, int64_t __b)
  17158. {
  17159. return __builtin_aarch64_sqrshldi (__a, __b);
  17160. }
  17161. __extension__ static __inline uint8_t __attribute__ ((__always_inline__))
  17162. vqrshlb_u8 (uint8_t __a, uint8_t __b)
  17163. {
  17164. return __builtin_aarch64_uqrshlqi_uus (__a, __b);
  17165. }
  17166. __extension__ static __inline uint16_t __attribute__ ((__always_inline__))
  17167. vqrshlh_u16 (uint16_t __a, uint16_t __b)
  17168. {
  17169. return __builtin_aarch64_uqrshlhi_uus (__a, __b);
  17170. }
  17171. __extension__ static __inline uint32_t __attribute__ ((__always_inline__))
  17172. vqrshls_u32 (uint32_t __a, uint32_t __b)
  17173. {
  17174. return __builtin_aarch64_uqrshlsi_uus (__a, __b);
  17175. }
  17176. __extension__ static __inline uint64_t __attribute__ ((__always_inline__))
  17177. vqrshld_u64 (uint64_t __a, uint64_t __b)
  17178. {
  17179. return __builtin_aarch64_uqrshldi_uus (__a, __b);
  17180. }
  17181. /* vqrshrn */
  17182. __extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
  17183. vqrshrn_n_s16 (int16x8_t __a, const int __b)
  17184. {
  17185. return (int8x8_t) __builtin_aarch64_sqrshrn_nv8hi (__a, __b);
  17186. }
  17187. __extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
  17188. vqrshrn_n_s32 (int32x4_t __a, const int __b)
  17189. {
  17190. return (int16x4_t) __builtin_aarch64_sqrshrn_nv4si (__a, __b);
  17191. }
  17192. __extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
  17193. vqrshrn_n_s64 (int64x2_t __a, const int __b)
  17194. {
  17195. return (int32x2_t) __builtin_aarch64_sqrshrn_nv2di (__a, __b);
  17196. }
  17197. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  17198. vqrshrn_n_u16 (uint16x8_t __a, const int __b)
  17199. {
  17200. return __builtin_aarch64_uqrshrn_nv8hi_uus ( __a, __b);
  17201. }
  17202. __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
  17203. vqrshrn_n_u32 (uint32x4_t __a, const int __b)
  17204. {
  17205. return __builtin_aarch64_uqrshrn_nv4si_uus ( __a, __b);
  17206. }
  17207. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  17208. vqrshrn_n_u64 (uint64x2_t __a, const int __b)
  17209. {
  17210. return __builtin_aarch64_uqrshrn_nv2di_uus ( __a, __b);
  17211. }
  17212. __extension__ static __inline int8_t __attribute__ ((__always_inline__))
  17213. vqrshrnh_n_s16 (int16_t __a, const int __b)
  17214. {
  17215. return (int8_t) __builtin_aarch64_sqrshrn_nhi (__a, __b);
  17216. }
  17217. __extension__ static __inline int16_t __attribute__ ((__always_inline__))
  17218. vqrshrns_n_s32 (int32_t __a, const int __b)
  17219. {
  17220. return (int16_t) __builtin_aarch64_sqrshrn_nsi (__a, __b);
  17221. }
  17222. __extension__ static __inline int32_t __attribute__ ((__always_inline__))
  17223. vqrshrnd_n_s64 (int64_t __a, const int __b)
  17224. {
  17225. return (int32_t) __builtin_aarch64_sqrshrn_ndi (__a, __b);
  17226. }
  17227. __extension__ static __inline uint8_t __attribute__ ((__always_inline__))
  17228. vqrshrnh_n_u16 (uint16_t __a, const int __b)
  17229. {
  17230. return __builtin_aarch64_uqrshrn_nhi_uus (__a, __b);
  17231. }
  17232. __extension__ static __inline uint16_t __attribute__ ((__always_inline__))
  17233. vqrshrns_n_u32 (uint32_t __a, const int __b)
  17234. {
  17235. return __builtin_aarch64_uqrshrn_nsi_uus (__a, __b);
  17236. }
  17237. __extension__ static __inline uint32_t __attribute__ ((__always_inline__))
  17238. vqrshrnd_n_u64 (uint64_t __a, const int __b)
  17239. {
  17240. return __builtin_aarch64_uqrshrn_ndi_uus (__a, __b);
  17241. }
  17242. /* vqrshrun */
  17243. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  17244. vqrshrun_n_s16 (int16x8_t __a, const int __b)
  17245. {
  17246. return (uint8x8_t) __builtin_aarch64_sqrshrun_nv8hi (__a, __b);
  17247. }
  17248. __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
  17249. vqrshrun_n_s32 (int32x4_t __a, const int __b)
  17250. {
  17251. return (uint16x4_t) __builtin_aarch64_sqrshrun_nv4si (__a, __b);
  17252. }
  17253. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  17254. vqrshrun_n_s64 (int64x2_t __a, const int __b)
  17255. {
  17256. return (uint32x2_t) __builtin_aarch64_sqrshrun_nv2di (__a, __b);
  17257. }
  17258. __extension__ static __inline int8_t __attribute__ ((__always_inline__))
  17259. vqrshrunh_n_s16 (int16_t __a, const int __b)
  17260. {
  17261. return (int8_t) __builtin_aarch64_sqrshrun_nhi (__a, __b);
  17262. }
  17263. __extension__ static __inline int16_t __attribute__ ((__always_inline__))
  17264. vqrshruns_n_s32 (int32_t __a, const int __b)
  17265. {
  17266. return (int16_t) __builtin_aarch64_sqrshrun_nsi (__a, __b);
  17267. }
  17268. __extension__ static __inline int32_t __attribute__ ((__always_inline__))
  17269. vqrshrund_n_s64 (int64_t __a, const int __b)
  17270. {
  17271. return (int32_t) __builtin_aarch64_sqrshrun_ndi (__a, __b);
  17272. }
  17273. /* vqshl */
  17274. __extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
  17275. vqshl_s8 (int8x8_t __a, int8x8_t __b)
  17276. {
  17277. return __builtin_aarch64_sqshlv8qi (__a, __b);
  17278. }
  17279. __extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
  17280. vqshl_s16 (int16x4_t __a, int16x4_t __b)
  17281. {
  17282. return __builtin_aarch64_sqshlv4hi (__a, __b);
  17283. }
  17284. __extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
  17285. vqshl_s32 (int32x2_t __a, int32x2_t __b)
  17286. {
  17287. return __builtin_aarch64_sqshlv2si (__a, __b);
  17288. }
  17289. __extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
  17290. vqshl_s64 (int64x1_t __a, int64x1_t __b)
  17291. {
  17292. return (int64x1_t) {__builtin_aarch64_sqshldi (__a[0], __b[0])};
  17293. }
  17294. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  17295. vqshl_u8 (uint8x8_t __a, int8x8_t __b)
  17296. {
  17297. return __builtin_aarch64_uqshlv8qi_uus ( __a, __b);
  17298. }
  17299. __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
  17300. vqshl_u16 (uint16x4_t __a, int16x4_t __b)
  17301. {
  17302. return __builtin_aarch64_uqshlv4hi_uus ( __a, __b);
  17303. }
  17304. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  17305. vqshl_u32 (uint32x2_t __a, int32x2_t __b)
  17306. {
  17307. return __builtin_aarch64_uqshlv2si_uus ( __a, __b);
  17308. }
  17309. __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
  17310. vqshl_u64 (uint64x1_t __a, int64x1_t __b)
  17311. {
  17312. return (uint64x1_t) {__builtin_aarch64_uqshldi_uus (__a[0], __b[0])};
  17313. }
  17314. __extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
  17315. vqshlq_s8 (int8x16_t __a, int8x16_t __b)
  17316. {
  17317. return __builtin_aarch64_sqshlv16qi (__a, __b);
  17318. }
  17319. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  17320. vqshlq_s16 (int16x8_t __a, int16x8_t __b)
  17321. {
  17322. return __builtin_aarch64_sqshlv8hi (__a, __b);
  17323. }
  17324. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  17325. vqshlq_s32 (int32x4_t __a, int32x4_t __b)
  17326. {
  17327. return __builtin_aarch64_sqshlv4si (__a, __b);
  17328. }
  17329. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  17330. vqshlq_s64 (int64x2_t __a, int64x2_t __b)
  17331. {
  17332. return __builtin_aarch64_sqshlv2di (__a, __b);
  17333. }
  17334. __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
  17335. vqshlq_u8 (uint8x16_t __a, int8x16_t __b)
  17336. {
  17337. return __builtin_aarch64_uqshlv16qi_uus ( __a, __b);
  17338. }
  17339. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  17340. vqshlq_u16 (uint16x8_t __a, int16x8_t __b)
  17341. {
  17342. return __builtin_aarch64_uqshlv8hi_uus ( __a, __b);
  17343. }
  17344. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  17345. vqshlq_u32 (uint32x4_t __a, int32x4_t __b)
  17346. {
  17347. return __builtin_aarch64_uqshlv4si_uus ( __a, __b);
  17348. }
  17349. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  17350. vqshlq_u64 (uint64x2_t __a, int64x2_t __b)
  17351. {
  17352. return __builtin_aarch64_uqshlv2di_uus ( __a, __b);
  17353. }
  17354. __extension__ static __inline int8_t __attribute__ ((__always_inline__))
  17355. vqshlb_s8 (int8_t __a, int8_t __b)
  17356. {
  17357. return __builtin_aarch64_sqshlqi (__a, __b);
  17358. }
  17359. __extension__ static __inline int16_t __attribute__ ((__always_inline__))
  17360. vqshlh_s16 (int16_t __a, int16_t __b)
  17361. {
  17362. return __builtin_aarch64_sqshlhi (__a, __b);
  17363. }
  17364. __extension__ static __inline int32_t __attribute__ ((__always_inline__))
  17365. vqshls_s32 (int32_t __a, int32_t __b)
  17366. {
  17367. return __builtin_aarch64_sqshlsi (__a, __b);
  17368. }
  17369. __extension__ static __inline int64_t __attribute__ ((__always_inline__))
  17370. vqshld_s64 (int64_t __a, int64_t __b)
  17371. {
  17372. return __builtin_aarch64_sqshldi (__a, __b);
  17373. }
  17374. __extension__ static __inline uint8_t __attribute__ ((__always_inline__))
  17375. vqshlb_u8 (uint8_t __a, uint8_t __b)
  17376. {
  17377. return __builtin_aarch64_uqshlqi_uus (__a, __b);
  17378. }
  17379. __extension__ static __inline uint16_t __attribute__ ((__always_inline__))
  17380. vqshlh_u16 (uint16_t __a, uint16_t __b)
  17381. {
  17382. return __builtin_aarch64_uqshlhi_uus (__a, __b);
  17383. }
  17384. __extension__ static __inline uint32_t __attribute__ ((__always_inline__))
  17385. vqshls_u32 (uint32_t __a, uint32_t __b)
  17386. {
  17387. return __builtin_aarch64_uqshlsi_uus (__a, __b);
  17388. }
  17389. __extension__ static __inline uint64_t __attribute__ ((__always_inline__))
  17390. vqshld_u64 (uint64_t __a, uint64_t __b)
  17391. {
  17392. return __builtin_aarch64_uqshldi_uus (__a, __b);
  17393. }
  17394. __extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
  17395. vqshl_n_s8 (int8x8_t __a, const int __b)
  17396. {
  17397. return (int8x8_t) __builtin_aarch64_sqshl_nv8qi (__a, __b);
  17398. }
  17399. __extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
  17400. vqshl_n_s16 (int16x4_t __a, const int __b)
  17401. {
  17402. return (int16x4_t) __builtin_aarch64_sqshl_nv4hi (__a, __b);
  17403. }
  17404. __extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
  17405. vqshl_n_s32 (int32x2_t __a, const int __b)
  17406. {
  17407. return (int32x2_t) __builtin_aarch64_sqshl_nv2si (__a, __b);
  17408. }
  17409. __extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
  17410. vqshl_n_s64 (int64x1_t __a, const int __b)
  17411. {
  17412. return (int64x1_t) {__builtin_aarch64_sqshl_ndi (__a[0], __b)};
  17413. }
  17414. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  17415. vqshl_n_u8 (uint8x8_t __a, const int __b)
  17416. {
  17417. return __builtin_aarch64_uqshl_nv8qi_uus (__a, __b);
  17418. }
  17419. __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
  17420. vqshl_n_u16 (uint16x4_t __a, const int __b)
  17421. {
  17422. return __builtin_aarch64_uqshl_nv4hi_uus (__a, __b);
  17423. }
  17424. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  17425. vqshl_n_u32 (uint32x2_t __a, const int __b)
  17426. {
  17427. return __builtin_aarch64_uqshl_nv2si_uus (__a, __b);
  17428. }
  17429. __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
  17430. vqshl_n_u64 (uint64x1_t __a, const int __b)
  17431. {
  17432. return (uint64x1_t) {__builtin_aarch64_uqshl_ndi_uus (__a[0], __b)};
  17433. }
  17434. __extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
  17435. vqshlq_n_s8 (int8x16_t __a, const int __b)
  17436. {
  17437. return (int8x16_t) __builtin_aarch64_sqshl_nv16qi (__a, __b);
  17438. }
  17439. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  17440. vqshlq_n_s16 (int16x8_t __a, const int __b)
  17441. {
  17442. return (int16x8_t) __builtin_aarch64_sqshl_nv8hi (__a, __b);
  17443. }
  17444. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  17445. vqshlq_n_s32 (int32x4_t __a, const int __b)
  17446. {
  17447. return (int32x4_t) __builtin_aarch64_sqshl_nv4si (__a, __b);
  17448. }
  17449. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  17450. vqshlq_n_s64 (int64x2_t __a, const int __b)
  17451. {
  17452. return (int64x2_t) __builtin_aarch64_sqshl_nv2di (__a, __b);
  17453. }
  17454. __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
  17455. vqshlq_n_u8 (uint8x16_t __a, const int __b)
  17456. {
  17457. return __builtin_aarch64_uqshl_nv16qi_uus (__a, __b);
  17458. }
  17459. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  17460. vqshlq_n_u16 (uint16x8_t __a, const int __b)
  17461. {
  17462. return __builtin_aarch64_uqshl_nv8hi_uus (__a, __b);
  17463. }
  17464. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  17465. vqshlq_n_u32 (uint32x4_t __a, const int __b)
  17466. {
  17467. return __builtin_aarch64_uqshl_nv4si_uus (__a, __b);
  17468. }
  17469. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  17470. vqshlq_n_u64 (uint64x2_t __a, const int __b)
  17471. {
  17472. return __builtin_aarch64_uqshl_nv2di_uus (__a, __b);
  17473. }
  17474. __extension__ static __inline int8_t __attribute__ ((__always_inline__))
  17475. vqshlb_n_s8 (int8_t __a, const int __b)
  17476. {
  17477. return (int8_t) __builtin_aarch64_sqshl_nqi (__a, __b);
  17478. }
  17479. __extension__ static __inline int16_t __attribute__ ((__always_inline__))
  17480. vqshlh_n_s16 (int16_t __a, const int __b)
  17481. {
  17482. return (int16_t) __builtin_aarch64_sqshl_nhi (__a, __b);
  17483. }
  17484. __extension__ static __inline int32_t __attribute__ ((__always_inline__))
  17485. vqshls_n_s32 (int32_t __a, const int __b)
  17486. {
  17487. return (int32_t) __builtin_aarch64_sqshl_nsi (__a, __b);
  17488. }
  17489. __extension__ static __inline int64_t __attribute__ ((__always_inline__))
  17490. vqshld_n_s64 (int64_t __a, const int __b)
  17491. {
  17492. return __builtin_aarch64_sqshl_ndi (__a, __b);
  17493. }
  17494. __extension__ static __inline uint8_t __attribute__ ((__always_inline__))
  17495. vqshlb_n_u8 (uint8_t __a, const int __b)
  17496. {
  17497. return __builtin_aarch64_uqshl_nqi_uus (__a, __b);
  17498. }
  17499. __extension__ static __inline uint16_t __attribute__ ((__always_inline__))
  17500. vqshlh_n_u16 (uint16_t __a, const int __b)
  17501. {
  17502. return __builtin_aarch64_uqshl_nhi_uus (__a, __b);
  17503. }
  17504. __extension__ static __inline uint32_t __attribute__ ((__always_inline__))
  17505. vqshls_n_u32 (uint32_t __a, const int __b)
  17506. {
  17507. return __builtin_aarch64_uqshl_nsi_uus (__a, __b);
  17508. }
  17509. __extension__ static __inline uint64_t __attribute__ ((__always_inline__))
  17510. vqshld_n_u64 (uint64_t __a, const int __b)
  17511. {
  17512. return __builtin_aarch64_uqshl_ndi_uus (__a, __b);
  17513. }
  17514. /* vqshlu */
  17515. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  17516. vqshlu_n_s8 (int8x8_t __a, const int __b)
  17517. {
  17518. return __builtin_aarch64_sqshlu_nv8qi_uss (__a, __b);
  17519. }
  17520. __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
  17521. vqshlu_n_s16 (int16x4_t __a, const int __b)
  17522. {
  17523. return __builtin_aarch64_sqshlu_nv4hi_uss (__a, __b);
  17524. }
  17525. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  17526. vqshlu_n_s32 (int32x2_t __a, const int __b)
  17527. {
  17528. return __builtin_aarch64_sqshlu_nv2si_uss (__a, __b);
  17529. }
  17530. __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
  17531. vqshlu_n_s64 (int64x1_t __a, const int __b)
  17532. {
  17533. return (uint64x1_t) {__builtin_aarch64_sqshlu_ndi_uss (__a[0], __b)};
  17534. }
  17535. __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
  17536. vqshluq_n_s8 (int8x16_t __a, const int __b)
  17537. {
  17538. return __builtin_aarch64_sqshlu_nv16qi_uss (__a, __b);
  17539. }
  17540. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  17541. vqshluq_n_s16 (int16x8_t __a, const int __b)
  17542. {
  17543. return __builtin_aarch64_sqshlu_nv8hi_uss (__a, __b);
  17544. }
  17545. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  17546. vqshluq_n_s32 (int32x4_t __a, const int __b)
  17547. {
  17548. return __builtin_aarch64_sqshlu_nv4si_uss (__a, __b);
  17549. }
  17550. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  17551. vqshluq_n_s64 (int64x2_t __a, const int __b)
  17552. {
  17553. return __builtin_aarch64_sqshlu_nv2di_uss (__a, __b);
  17554. }
  17555. __extension__ static __inline int8_t __attribute__ ((__always_inline__))
  17556. vqshlub_n_s8 (int8_t __a, const int __b)
  17557. {
  17558. return (int8_t) __builtin_aarch64_sqshlu_nqi_uss (__a, __b);
  17559. }
  17560. __extension__ static __inline int16_t __attribute__ ((__always_inline__))
  17561. vqshluh_n_s16 (int16_t __a, const int __b)
  17562. {
  17563. return (int16_t) __builtin_aarch64_sqshlu_nhi_uss (__a, __b);
  17564. }
  17565. __extension__ static __inline int32_t __attribute__ ((__always_inline__))
  17566. vqshlus_n_s32 (int32_t __a, const int __b)
  17567. {
  17568. return (int32_t) __builtin_aarch64_sqshlu_nsi_uss (__a, __b);
  17569. }
  17570. __extension__ static __inline uint64_t __attribute__ ((__always_inline__))
  17571. vqshlud_n_s64 (int64_t __a, const int __b)
  17572. {
  17573. return __builtin_aarch64_sqshlu_ndi_uss (__a, __b);
  17574. }
  17575. /* vqshrn */
  17576. __extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
  17577. vqshrn_n_s16 (int16x8_t __a, const int __b)
  17578. {
  17579. return (int8x8_t) __builtin_aarch64_sqshrn_nv8hi (__a, __b);
  17580. }
  17581. __extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
  17582. vqshrn_n_s32 (int32x4_t __a, const int __b)
  17583. {
  17584. return (int16x4_t) __builtin_aarch64_sqshrn_nv4si (__a, __b);
  17585. }
  17586. __extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
  17587. vqshrn_n_s64 (int64x2_t __a, const int __b)
  17588. {
  17589. return (int32x2_t) __builtin_aarch64_sqshrn_nv2di (__a, __b);
  17590. }
  17591. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  17592. vqshrn_n_u16 (uint16x8_t __a, const int __b)
  17593. {
  17594. return __builtin_aarch64_uqshrn_nv8hi_uus ( __a, __b);
  17595. }
  17596. __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
  17597. vqshrn_n_u32 (uint32x4_t __a, const int __b)
  17598. {
  17599. return __builtin_aarch64_uqshrn_nv4si_uus ( __a, __b);
  17600. }
  17601. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  17602. vqshrn_n_u64 (uint64x2_t __a, const int __b)
  17603. {
  17604. return __builtin_aarch64_uqshrn_nv2di_uus ( __a, __b);
  17605. }
  17606. __extension__ static __inline int8_t __attribute__ ((__always_inline__))
  17607. vqshrnh_n_s16 (int16_t __a, const int __b)
  17608. {
  17609. return (int8_t) __builtin_aarch64_sqshrn_nhi (__a, __b);
  17610. }
  17611. __extension__ static __inline int16_t __attribute__ ((__always_inline__))
  17612. vqshrns_n_s32 (int32_t __a, const int __b)
  17613. {
  17614. return (int16_t) __builtin_aarch64_sqshrn_nsi (__a, __b);
  17615. }
  17616. __extension__ static __inline int32_t __attribute__ ((__always_inline__))
  17617. vqshrnd_n_s64 (int64_t __a, const int __b)
  17618. {
  17619. return (int32_t) __builtin_aarch64_sqshrn_ndi (__a, __b);
  17620. }
  17621. __extension__ static __inline uint8_t __attribute__ ((__always_inline__))
  17622. vqshrnh_n_u16 (uint16_t __a, const int __b)
  17623. {
  17624. return __builtin_aarch64_uqshrn_nhi_uus (__a, __b);
  17625. }
  17626. __extension__ static __inline uint16_t __attribute__ ((__always_inline__))
  17627. vqshrns_n_u32 (uint32_t __a, const int __b)
  17628. {
  17629. return __builtin_aarch64_uqshrn_nsi_uus (__a, __b);
  17630. }
  17631. __extension__ static __inline uint32_t __attribute__ ((__always_inline__))
  17632. vqshrnd_n_u64 (uint64_t __a, const int __b)
  17633. {
  17634. return __builtin_aarch64_uqshrn_ndi_uus (__a, __b);
  17635. }
  17636. /* vqshrun */
  17637. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  17638. vqshrun_n_s16 (int16x8_t __a, const int __b)
  17639. {
  17640. return (uint8x8_t) __builtin_aarch64_sqshrun_nv8hi (__a, __b);
  17641. }
  17642. __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
  17643. vqshrun_n_s32 (int32x4_t __a, const int __b)
  17644. {
  17645. return (uint16x4_t) __builtin_aarch64_sqshrun_nv4si (__a, __b);
  17646. }
  17647. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  17648. vqshrun_n_s64 (int64x2_t __a, const int __b)
  17649. {
  17650. return (uint32x2_t) __builtin_aarch64_sqshrun_nv2di (__a, __b);
  17651. }
  17652. __extension__ static __inline int8_t __attribute__ ((__always_inline__))
  17653. vqshrunh_n_s16 (int16_t __a, const int __b)
  17654. {
  17655. return (int8_t) __builtin_aarch64_sqshrun_nhi (__a, __b);
  17656. }
  17657. __extension__ static __inline int16_t __attribute__ ((__always_inline__))
  17658. vqshruns_n_s32 (int32_t __a, const int __b)
  17659. {
  17660. return (int16_t) __builtin_aarch64_sqshrun_nsi (__a, __b);
  17661. }
  17662. __extension__ static __inline int32_t __attribute__ ((__always_inline__))
  17663. vqshrund_n_s64 (int64_t __a, const int __b)
  17664. {
  17665. return (int32_t) __builtin_aarch64_sqshrun_ndi (__a, __b);
  17666. }
  17667. /* vqsub */
  17668. __extension__ static __inline int8_t __attribute__ ((__always_inline__))
  17669. vqsubb_s8 (int8_t __a, int8_t __b)
  17670. {
  17671. return (int8_t) __builtin_aarch64_sqsubqi (__a, __b);
  17672. }
  17673. __extension__ static __inline int16_t __attribute__ ((__always_inline__))
  17674. vqsubh_s16 (int16_t __a, int16_t __b)
  17675. {
  17676. return (int16_t) __builtin_aarch64_sqsubhi (__a, __b);
  17677. }
  17678. __extension__ static __inline int32_t __attribute__ ((__always_inline__))
  17679. vqsubs_s32 (int32_t __a, int32_t __b)
  17680. {
  17681. return (int32_t) __builtin_aarch64_sqsubsi (__a, __b);
  17682. }
  17683. __extension__ static __inline int64_t __attribute__ ((__always_inline__))
  17684. vqsubd_s64 (int64_t __a, int64_t __b)
  17685. {
  17686. return __builtin_aarch64_sqsubdi (__a, __b);
  17687. }
  17688. __extension__ static __inline uint8_t __attribute__ ((__always_inline__))
  17689. vqsubb_u8 (uint8_t __a, uint8_t __b)
  17690. {
  17691. return (uint8_t) __builtin_aarch64_uqsubqi_uuu (__a, __b);
  17692. }
  17693. __extension__ static __inline uint16_t __attribute__ ((__always_inline__))
  17694. vqsubh_u16 (uint16_t __a, uint16_t __b)
  17695. {
  17696. return (uint16_t) __builtin_aarch64_uqsubhi_uuu (__a, __b);
  17697. }
  17698. __extension__ static __inline uint32_t __attribute__ ((__always_inline__))
  17699. vqsubs_u32 (uint32_t __a, uint32_t __b)
  17700. {
  17701. return (uint32_t) __builtin_aarch64_uqsubsi_uuu (__a, __b);
  17702. }
  17703. __extension__ static __inline uint64_t __attribute__ ((__always_inline__))
  17704. vqsubd_u64 (uint64_t __a, uint64_t __b)
  17705. {
  17706. return __builtin_aarch64_uqsubdi_uuu (__a, __b);
  17707. }
  17708. /* vrbit */
  17709. __extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
  17710. vrbit_p8 (poly8x8_t __a)
  17711. {
  17712. return (poly8x8_t) __builtin_aarch64_rbitv8qi ((int8x8_t) __a);
  17713. }
  17714. __extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
  17715. vrbit_s8 (int8x8_t __a)
  17716. {
  17717. return __builtin_aarch64_rbitv8qi (__a);
  17718. }
  17719. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  17720. vrbit_u8 (uint8x8_t __a)
  17721. {
  17722. return (uint8x8_t) __builtin_aarch64_rbitv8qi ((int8x8_t) __a);
  17723. }
  17724. __extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
  17725. vrbitq_p8 (poly8x16_t __a)
  17726. {
  17727. return (poly8x16_t) __builtin_aarch64_rbitv16qi ((int8x16_t)__a);
  17728. }
  17729. __extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
  17730. vrbitq_s8 (int8x16_t __a)
  17731. {
  17732. return __builtin_aarch64_rbitv16qi (__a);
  17733. }
  17734. __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
  17735. vrbitq_u8 (uint8x16_t __a)
  17736. {
  17737. return (uint8x16_t) __builtin_aarch64_rbitv16qi ((int8x16_t) __a);
  17738. }
  17739. /* vrecpe */
  17740. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  17741. vrecpe_u32 (uint32x2_t __a)
  17742. {
  17743. return (uint32x2_t) __builtin_aarch64_urecpev2si ((int32x2_t) __a);
  17744. }
  17745. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  17746. vrecpeq_u32 (uint32x4_t __a)
  17747. {
  17748. return (uint32x4_t) __builtin_aarch64_urecpev4si ((int32x4_t) __a);
  17749. }
  17750. __extension__ static __inline float32_t __attribute__ ((__always_inline__))
  17751. vrecpes_f32 (float32_t __a)
  17752. {
  17753. return __builtin_aarch64_frecpesf (__a);
  17754. }
  17755. __extension__ static __inline float64_t __attribute__ ((__always_inline__))
  17756. vrecped_f64 (float64_t __a)
  17757. {
  17758. return __builtin_aarch64_frecpedf (__a);
  17759. }
  17760. __extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
  17761. vrecpe_f32 (float32x2_t __a)
  17762. {
  17763. return __builtin_aarch64_frecpev2sf (__a);
  17764. }
  17765. __extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
  17766. vrecpeq_f32 (float32x4_t __a)
  17767. {
  17768. return __builtin_aarch64_frecpev4sf (__a);
  17769. }
  17770. __extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
  17771. vrecpeq_f64 (float64x2_t __a)
  17772. {
  17773. return __builtin_aarch64_frecpev2df (__a);
  17774. }
  17775. /* vrecps */
  17776. __extension__ static __inline float32_t __attribute__ ((__always_inline__))
  17777. vrecpss_f32 (float32_t __a, float32_t __b)
  17778. {
  17779. return __builtin_aarch64_frecpssf (__a, __b);
  17780. }
  17781. __extension__ static __inline float64_t __attribute__ ((__always_inline__))
  17782. vrecpsd_f64 (float64_t __a, float64_t __b)
  17783. {
  17784. return __builtin_aarch64_frecpsdf (__a, __b);
  17785. }
  17786. __extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
  17787. vrecps_f32 (float32x2_t __a, float32x2_t __b)
  17788. {
  17789. return __builtin_aarch64_frecpsv2sf (__a, __b);
  17790. }
  17791. __extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
  17792. vrecpsq_f32 (float32x4_t __a, float32x4_t __b)
  17793. {
  17794. return __builtin_aarch64_frecpsv4sf (__a, __b);
  17795. }
  17796. __extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
  17797. vrecpsq_f64 (float64x2_t __a, float64x2_t __b)
  17798. {
  17799. return __builtin_aarch64_frecpsv2df (__a, __b);
  17800. }
  17801. /* vrecpx */
  17802. __extension__ static __inline float32_t __attribute__ ((__always_inline__))
  17803. vrecpxs_f32 (float32_t __a)
  17804. {
  17805. return __builtin_aarch64_frecpxsf (__a);
  17806. }
  17807. __extension__ static __inline float64_t __attribute__ ((__always_inline__))
  17808. vrecpxd_f64 (float64_t __a)
  17809. {
  17810. return __builtin_aarch64_frecpxdf (__a);
  17811. }
  17812. /* vrev */
  17813. __extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
  17814. vrev16_p8 (poly8x8_t a)
  17815. {
  17816. return __builtin_shuffle (a, (uint8x8_t) { 1, 0, 3, 2, 5, 4, 7, 6 });
  17817. }
  17818. __extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
  17819. vrev16_s8 (int8x8_t a)
  17820. {
  17821. return __builtin_shuffle (a, (uint8x8_t) { 1, 0, 3, 2, 5, 4, 7, 6 });
  17822. }
  17823. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  17824. vrev16_u8 (uint8x8_t a)
  17825. {
  17826. return __builtin_shuffle (a, (uint8x8_t) { 1, 0, 3, 2, 5, 4, 7, 6 });
  17827. }
  17828. __extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
  17829. vrev16q_p8 (poly8x16_t a)
  17830. {
  17831. return __builtin_shuffle (a,
  17832. (uint8x16_t) { 1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14 });
  17833. }
  17834. __extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
  17835. vrev16q_s8 (int8x16_t a)
  17836. {
  17837. return __builtin_shuffle (a,
  17838. (uint8x16_t) { 1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14 });
  17839. }
  17840. __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
  17841. vrev16q_u8 (uint8x16_t a)
  17842. {
  17843. return __builtin_shuffle (a,
  17844. (uint8x16_t) { 1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14 });
  17845. }
  17846. __extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
  17847. vrev32_p8 (poly8x8_t a)
  17848. {
  17849. return __builtin_shuffle (a, (uint8x8_t) { 3, 2, 1, 0, 7, 6, 5, 4 });
  17850. }
  17851. __extension__ static __inline poly16x4_t __attribute__ ((__always_inline__))
  17852. vrev32_p16 (poly16x4_t a)
  17853. {
  17854. return __builtin_shuffle (a, (uint16x4_t) { 1, 0, 3, 2 });
  17855. }
  17856. __extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
  17857. vrev32_s8 (int8x8_t a)
  17858. {
  17859. return __builtin_shuffle (a, (uint8x8_t) { 3, 2, 1, 0, 7, 6, 5, 4 });
  17860. }
  17861. __extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
  17862. vrev32_s16 (int16x4_t a)
  17863. {
  17864. return __builtin_shuffle (a, (uint16x4_t) { 1, 0, 3, 2 });
  17865. }
  17866. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  17867. vrev32_u8 (uint8x8_t a)
  17868. {
  17869. return __builtin_shuffle (a, (uint8x8_t) { 3, 2, 1, 0, 7, 6, 5, 4 });
  17870. }
  17871. __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
  17872. vrev32_u16 (uint16x4_t a)
  17873. {
  17874. return __builtin_shuffle (a, (uint16x4_t) { 1, 0, 3, 2 });
  17875. }
  17876. __extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
  17877. vrev32q_p8 (poly8x16_t a)
  17878. {
  17879. return __builtin_shuffle (a,
  17880. (uint8x16_t) { 3, 2, 1, 0, 7, 6, 5, 4, 11, 10, 9, 8, 15, 14, 13, 12 });
  17881. }
  17882. __extension__ static __inline poly16x8_t __attribute__ ((__always_inline__))
  17883. vrev32q_p16 (poly16x8_t a)
  17884. {
  17885. return __builtin_shuffle (a, (uint16x8_t) { 1, 0, 3, 2, 5, 4, 7, 6 });
  17886. }
  17887. __extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
  17888. vrev32q_s8 (int8x16_t a)
  17889. {
  17890. return __builtin_shuffle (a,
  17891. (uint8x16_t) { 3, 2, 1, 0, 7, 6, 5, 4, 11, 10, 9, 8, 15, 14, 13, 12 });
  17892. }
  17893. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  17894. vrev32q_s16 (int16x8_t a)
  17895. {
  17896. return __builtin_shuffle (a, (uint16x8_t) { 1, 0, 3, 2, 5, 4, 7, 6 });
  17897. }
  17898. __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
  17899. vrev32q_u8 (uint8x16_t a)
  17900. {
  17901. return __builtin_shuffle (a,
  17902. (uint8x16_t) { 3, 2, 1, 0, 7, 6, 5, 4, 11, 10, 9, 8, 15, 14, 13, 12 });
  17903. }
  17904. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  17905. vrev32q_u16 (uint16x8_t a)
  17906. {
  17907. return __builtin_shuffle (a, (uint16x8_t) { 1, 0, 3, 2, 5, 4, 7, 6 });
  17908. }
  17909. __extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
  17910. vrev64_f32 (float32x2_t a)
  17911. {
  17912. return __builtin_shuffle (a, (uint32x2_t) { 1, 0 });
  17913. }
  17914. __extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
  17915. vrev64_p8 (poly8x8_t a)
  17916. {
  17917. return __builtin_shuffle (a, (uint8x8_t) { 7, 6, 5, 4, 3, 2, 1, 0 });
  17918. }
  17919. __extension__ static __inline poly16x4_t __attribute__ ((__always_inline__))
  17920. vrev64_p16 (poly16x4_t a)
  17921. {
  17922. return __builtin_shuffle (a, (uint16x4_t) { 3, 2, 1, 0 });
  17923. }
  17924. __extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
  17925. vrev64_s8 (int8x8_t a)
  17926. {
  17927. return __builtin_shuffle (a, (uint8x8_t) { 7, 6, 5, 4, 3, 2, 1, 0 });
  17928. }
  17929. __extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
  17930. vrev64_s16 (int16x4_t a)
  17931. {
  17932. return __builtin_shuffle (a, (uint16x4_t) { 3, 2, 1, 0 });
  17933. }
  17934. __extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
  17935. vrev64_s32 (int32x2_t a)
  17936. {
  17937. return __builtin_shuffle (a, (uint32x2_t) { 1, 0 });
  17938. }
  17939. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  17940. vrev64_u8 (uint8x8_t a)
  17941. {
  17942. return __builtin_shuffle (a, (uint8x8_t) { 7, 6, 5, 4, 3, 2, 1, 0 });
  17943. }
  17944. __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
  17945. vrev64_u16 (uint16x4_t a)
  17946. {
  17947. return __builtin_shuffle (a, (uint16x4_t) { 3, 2, 1, 0 });
  17948. }
  17949. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  17950. vrev64_u32 (uint32x2_t a)
  17951. {
  17952. return __builtin_shuffle (a, (uint32x2_t) { 1, 0 });
  17953. }
  17954. __extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
  17955. vrev64q_f32 (float32x4_t a)
  17956. {
  17957. return __builtin_shuffle (a, (uint32x4_t) { 1, 0, 3, 2 });
  17958. }
  17959. __extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
  17960. vrev64q_p8 (poly8x16_t a)
  17961. {
  17962. return __builtin_shuffle (a,
  17963. (uint8x16_t) { 7, 6, 5, 4, 3, 2, 1, 0, 15, 14, 13, 12, 11, 10, 9, 8 });
  17964. }
  17965. __extension__ static __inline poly16x8_t __attribute__ ((__always_inline__))
  17966. vrev64q_p16 (poly16x8_t a)
  17967. {
  17968. return __builtin_shuffle (a, (uint16x8_t) { 3, 2, 1, 0, 7, 6, 5, 4 });
  17969. }
  17970. __extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
  17971. vrev64q_s8 (int8x16_t a)
  17972. {
  17973. return __builtin_shuffle (a,
  17974. (uint8x16_t) { 7, 6, 5, 4, 3, 2, 1, 0, 15, 14, 13, 12, 11, 10, 9, 8 });
  17975. }
  17976. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  17977. vrev64q_s16 (int16x8_t a)
  17978. {
  17979. return __builtin_shuffle (a, (uint16x8_t) { 3, 2, 1, 0, 7, 6, 5, 4 });
  17980. }
  17981. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  17982. vrev64q_s32 (int32x4_t a)
  17983. {
  17984. return __builtin_shuffle (a, (uint32x4_t) { 1, 0, 3, 2 });
  17985. }
  17986. __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
  17987. vrev64q_u8 (uint8x16_t a)
  17988. {
  17989. return __builtin_shuffle (a,
  17990. (uint8x16_t) { 7, 6, 5, 4, 3, 2, 1, 0, 15, 14, 13, 12, 11, 10, 9, 8 });
  17991. }
  17992. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  17993. vrev64q_u16 (uint16x8_t a)
  17994. {
  17995. return __builtin_shuffle (a, (uint16x8_t) { 3, 2, 1, 0, 7, 6, 5, 4 });
  17996. }
  17997. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  17998. vrev64q_u32 (uint32x4_t a)
  17999. {
  18000. return __builtin_shuffle (a, (uint32x4_t) { 1, 0, 3, 2 });
  18001. }
  18002. /* vrnd */
  18003. __extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
  18004. vrnd_f32 (float32x2_t __a)
  18005. {
  18006. return __builtin_aarch64_btruncv2sf (__a);
  18007. }
  18008. __extension__ static __inline float64x1_t __attribute__ ((__always_inline__))
  18009. vrnd_f64 (float64x1_t __a)
  18010. {
  18011. return vset_lane_f64 (__builtin_trunc (vget_lane_f64 (__a, 0)), __a, 0);
  18012. }
  18013. __extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
  18014. vrndq_f32 (float32x4_t __a)
  18015. {
  18016. return __builtin_aarch64_btruncv4sf (__a);
  18017. }
  18018. __extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
  18019. vrndq_f64 (float64x2_t __a)
  18020. {
  18021. return __builtin_aarch64_btruncv2df (__a);
  18022. }
  18023. /* vrnda */
  18024. __extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
  18025. vrnda_f32 (float32x2_t __a)
  18026. {
  18027. return __builtin_aarch64_roundv2sf (__a);
  18028. }
  18029. __extension__ static __inline float64x1_t __attribute__ ((__always_inline__))
  18030. vrnda_f64 (float64x1_t __a)
  18031. {
  18032. return vset_lane_f64 (__builtin_round (vget_lane_f64 (__a, 0)), __a, 0);
  18033. }
  18034. __extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
  18035. vrndaq_f32 (float32x4_t __a)
  18036. {
  18037. return __builtin_aarch64_roundv4sf (__a);
  18038. }
  18039. __extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
  18040. vrndaq_f64 (float64x2_t __a)
  18041. {
  18042. return __builtin_aarch64_roundv2df (__a);
  18043. }
  18044. /* vrndi */
  18045. __extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
  18046. vrndi_f32 (float32x2_t __a)
  18047. {
  18048. return __builtin_aarch64_nearbyintv2sf (__a);
  18049. }
  18050. __extension__ static __inline float64x1_t __attribute__ ((__always_inline__))
  18051. vrndi_f64 (float64x1_t __a)
  18052. {
  18053. return vset_lane_f64 (__builtin_nearbyint (vget_lane_f64 (__a, 0)), __a, 0);
  18054. }
  18055. __extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
  18056. vrndiq_f32 (float32x4_t __a)
  18057. {
  18058. return __builtin_aarch64_nearbyintv4sf (__a);
  18059. }
  18060. __extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
  18061. vrndiq_f64 (float64x2_t __a)
  18062. {
  18063. return __builtin_aarch64_nearbyintv2df (__a);
  18064. }
  18065. /* vrndm */
  18066. __extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
  18067. vrndm_f32 (float32x2_t __a)
  18068. {
  18069. return __builtin_aarch64_floorv2sf (__a);
  18070. }
  18071. __extension__ static __inline float64x1_t __attribute__ ((__always_inline__))
  18072. vrndm_f64 (float64x1_t __a)
  18073. {
  18074. return vset_lane_f64 (__builtin_floor (vget_lane_f64 (__a, 0)), __a, 0);
  18075. }
  18076. __extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
  18077. vrndmq_f32 (float32x4_t __a)
  18078. {
  18079. return __builtin_aarch64_floorv4sf (__a);
  18080. }
  18081. __extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
  18082. vrndmq_f64 (float64x2_t __a)
  18083. {
  18084. return __builtin_aarch64_floorv2df (__a);
  18085. }
  18086. /* vrndn */
  18087. __extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
  18088. vrndn_f32 (float32x2_t __a)
  18089. {
  18090. return __builtin_aarch64_frintnv2sf (__a);
  18091. }
  18092. __extension__ static __inline float64x1_t __attribute__ ((__always_inline__))
  18093. vrndn_f64 (float64x1_t __a)
  18094. {
  18095. return (float64x1_t) {__builtin_aarch64_frintndf (__a[0])};
  18096. }
  18097. __extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
  18098. vrndnq_f32 (float32x4_t __a)
  18099. {
  18100. return __builtin_aarch64_frintnv4sf (__a);
  18101. }
  18102. __extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
  18103. vrndnq_f64 (float64x2_t __a)
  18104. {
  18105. return __builtin_aarch64_frintnv2df (__a);
  18106. }
  18107. /* vrndp */
  18108. __extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
  18109. vrndp_f32 (float32x2_t __a)
  18110. {
  18111. return __builtin_aarch64_ceilv2sf (__a);
  18112. }
  18113. __extension__ static __inline float64x1_t __attribute__ ((__always_inline__))
  18114. vrndp_f64 (float64x1_t __a)
  18115. {
  18116. return vset_lane_f64 (__builtin_ceil (vget_lane_f64 (__a, 0)), __a, 0);
  18117. }
  18118. __extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
  18119. vrndpq_f32 (float32x4_t __a)
  18120. {
  18121. return __builtin_aarch64_ceilv4sf (__a);
  18122. }
  18123. __extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
  18124. vrndpq_f64 (float64x2_t __a)
  18125. {
  18126. return __builtin_aarch64_ceilv2df (__a);
  18127. }
  18128. /* vrndx */
  18129. __extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
  18130. vrndx_f32 (float32x2_t __a)
  18131. {
  18132. return __builtin_aarch64_rintv2sf (__a);
  18133. }
  18134. __extension__ static __inline float64x1_t __attribute__ ((__always_inline__))
  18135. vrndx_f64 (float64x1_t __a)
  18136. {
  18137. return vset_lane_f64 (__builtin_rint (vget_lane_f64 (__a, 0)), __a, 0);
  18138. }
  18139. __extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
  18140. vrndxq_f32 (float32x4_t __a)
  18141. {
  18142. return __builtin_aarch64_rintv4sf (__a);
  18143. }
  18144. __extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
  18145. vrndxq_f64 (float64x2_t __a)
  18146. {
  18147. return __builtin_aarch64_rintv2df (__a);
  18148. }
  18149. /* vrshl */
  18150. __extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
  18151. vrshl_s8 (int8x8_t __a, int8x8_t __b)
  18152. {
  18153. return (int8x8_t) __builtin_aarch64_srshlv8qi (__a, __b);
  18154. }
  18155. __extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
  18156. vrshl_s16 (int16x4_t __a, int16x4_t __b)
  18157. {
  18158. return (int16x4_t) __builtin_aarch64_srshlv4hi (__a, __b);
  18159. }
  18160. __extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
  18161. vrshl_s32 (int32x2_t __a, int32x2_t __b)
  18162. {
  18163. return (int32x2_t) __builtin_aarch64_srshlv2si (__a, __b);
  18164. }
  18165. __extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
  18166. vrshl_s64 (int64x1_t __a, int64x1_t __b)
  18167. {
  18168. return (int64x1_t) {__builtin_aarch64_srshldi (__a[0], __b[0])};
  18169. }
  18170. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  18171. vrshl_u8 (uint8x8_t __a, int8x8_t __b)
  18172. {
  18173. return __builtin_aarch64_urshlv8qi_uus (__a, __b);
  18174. }
  18175. __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
  18176. vrshl_u16 (uint16x4_t __a, int16x4_t __b)
  18177. {
  18178. return __builtin_aarch64_urshlv4hi_uus (__a, __b);
  18179. }
  18180. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  18181. vrshl_u32 (uint32x2_t __a, int32x2_t __b)
  18182. {
  18183. return __builtin_aarch64_urshlv2si_uus (__a, __b);
  18184. }
  18185. __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
  18186. vrshl_u64 (uint64x1_t __a, int64x1_t __b)
  18187. {
  18188. return (uint64x1_t) {__builtin_aarch64_urshldi_uus (__a[0], __b[0])};
  18189. }
  18190. __extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
  18191. vrshlq_s8 (int8x16_t __a, int8x16_t __b)
  18192. {
  18193. return (int8x16_t) __builtin_aarch64_srshlv16qi (__a, __b);
  18194. }
  18195. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  18196. vrshlq_s16 (int16x8_t __a, int16x8_t __b)
  18197. {
  18198. return (int16x8_t) __builtin_aarch64_srshlv8hi (__a, __b);
  18199. }
  18200. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  18201. vrshlq_s32 (int32x4_t __a, int32x4_t __b)
  18202. {
  18203. return (int32x4_t) __builtin_aarch64_srshlv4si (__a, __b);
  18204. }
  18205. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  18206. vrshlq_s64 (int64x2_t __a, int64x2_t __b)
  18207. {
  18208. return (int64x2_t) __builtin_aarch64_srshlv2di (__a, __b);
  18209. }
  18210. __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
  18211. vrshlq_u8 (uint8x16_t __a, int8x16_t __b)
  18212. {
  18213. return __builtin_aarch64_urshlv16qi_uus (__a, __b);
  18214. }
  18215. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  18216. vrshlq_u16 (uint16x8_t __a, int16x8_t __b)
  18217. {
  18218. return __builtin_aarch64_urshlv8hi_uus (__a, __b);
  18219. }
  18220. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  18221. vrshlq_u32 (uint32x4_t __a, int32x4_t __b)
  18222. {
  18223. return __builtin_aarch64_urshlv4si_uus (__a, __b);
  18224. }
  18225. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  18226. vrshlq_u64 (uint64x2_t __a, int64x2_t __b)
  18227. {
  18228. return __builtin_aarch64_urshlv2di_uus (__a, __b);
  18229. }
  18230. __extension__ static __inline int64_t __attribute__ ((__always_inline__))
  18231. vrshld_s64 (int64_t __a, int64_t __b)
  18232. {
  18233. return __builtin_aarch64_srshldi (__a, __b);
  18234. }
  18235. __extension__ static __inline uint64_t __attribute__ ((__always_inline__))
  18236. vrshld_u64 (uint64_t __a, int64_t __b)
  18237. {
  18238. return __builtin_aarch64_urshldi_uus (__a, __b);
  18239. }
  18240. /* vrshr */
  18241. __extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
  18242. vrshr_n_s8 (int8x8_t __a, const int __b)
  18243. {
  18244. return (int8x8_t) __builtin_aarch64_srshr_nv8qi (__a, __b);
  18245. }
  18246. __extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
  18247. vrshr_n_s16 (int16x4_t __a, const int __b)
  18248. {
  18249. return (int16x4_t) __builtin_aarch64_srshr_nv4hi (__a, __b);
  18250. }
  18251. __extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
  18252. vrshr_n_s32 (int32x2_t __a, const int __b)
  18253. {
  18254. return (int32x2_t) __builtin_aarch64_srshr_nv2si (__a, __b);
  18255. }
  18256. __extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
  18257. vrshr_n_s64 (int64x1_t __a, const int __b)
  18258. {
  18259. return (int64x1_t) {__builtin_aarch64_srshr_ndi (__a[0], __b)};
  18260. }
  18261. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  18262. vrshr_n_u8 (uint8x8_t __a, const int __b)
  18263. {
  18264. return __builtin_aarch64_urshr_nv8qi_uus (__a, __b);
  18265. }
  18266. __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
  18267. vrshr_n_u16 (uint16x4_t __a, const int __b)
  18268. {
  18269. return __builtin_aarch64_urshr_nv4hi_uus (__a, __b);
  18270. }
  18271. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  18272. vrshr_n_u32 (uint32x2_t __a, const int __b)
  18273. {
  18274. return __builtin_aarch64_urshr_nv2si_uus (__a, __b);
  18275. }
  18276. __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
  18277. vrshr_n_u64 (uint64x1_t __a, const int __b)
  18278. {
  18279. return (uint64x1_t) {__builtin_aarch64_urshr_ndi_uus (__a[0], __b)};
  18280. }
  18281. __extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
  18282. vrshrq_n_s8 (int8x16_t __a, const int __b)
  18283. {
  18284. return (int8x16_t) __builtin_aarch64_srshr_nv16qi (__a, __b);
  18285. }
  18286. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  18287. vrshrq_n_s16 (int16x8_t __a, const int __b)
  18288. {
  18289. return (int16x8_t) __builtin_aarch64_srshr_nv8hi (__a, __b);
  18290. }
  18291. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  18292. vrshrq_n_s32 (int32x4_t __a, const int __b)
  18293. {
  18294. return (int32x4_t) __builtin_aarch64_srshr_nv4si (__a, __b);
  18295. }
  18296. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  18297. vrshrq_n_s64 (int64x2_t __a, const int __b)
  18298. {
  18299. return (int64x2_t) __builtin_aarch64_srshr_nv2di (__a, __b);
  18300. }
  18301. __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
  18302. vrshrq_n_u8 (uint8x16_t __a, const int __b)
  18303. {
  18304. return __builtin_aarch64_urshr_nv16qi_uus (__a, __b);
  18305. }
  18306. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  18307. vrshrq_n_u16 (uint16x8_t __a, const int __b)
  18308. {
  18309. return __builtin_aarch64_urshr_nv8hi_uus (__a, __b);
  18310. }
  18311. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  18312. vrshrq_n_u32 (uint32x4_t __a, const int __b)
  18313. {
  18314. return __builtin_aarch64_urshr_nv4si_uus (__a, __b);
  18315. }
  18316. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  18317. vrshrq_n_u64 (uint64x2_t __a, const int __b)
  18318. {
  18319. return __builtin_aarch64_urshr_nv2di_uus (__a, __b);
  18320. }
  18321. __extension__ static __inline int64_t __attribute__ ((__always_inline__))
  18322. vrshrd_n_s64 (int64_t __a, const int __b)
  18323. {
  18324. return __builtin_aarch64_srshr_ndi (__a, __b);
  18325. }
  18326. __extension__ static __inline uint64_t __attribute__ ((__always_inline__))
  18327. vrshrd_n_u64 (uint64_t __a, const int __b)
  18328. {
  18329. return __builtin_aarch64_urshr_ndi_uus (__a, __b);
  18330. }
  18331. /* vrsra */
  18332. __extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
  18333. vrsra_n_s8 (int8x8_t __a, int8x8_t __b, const int __c)
  18334. {
  18335. return (int8x8_t) __builtin_aarch64_srsra_nv8qi (__a, __b, __c);
  18336. }
  18337. __extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
  18338. vrsra_n_s16 (int16x4_t __a, int16x4_t __b, const int __c)
  18339. {
  18340. return (int16x4_t) __builtin_aarch64_srsra_nv4hi (__a, __b, __c);
  18341. }
  18342. __extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
  18343. vrsra_n_s32 (int32x2_t __a, int32x2_t __b, const int __c)
  18344. {
  18345. return (int32x2_t) __builtin_aarch64_srsra_nv2si (__a, __b, __c);
  18346. }
  18347. __extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
  18348. vrsra_n_s64 (int64x1_t __a, int64x1_t __b, const int __c)
  18349. {
  18350. return (int64x1_t) {__builtin_aarch64_srsra_ndi (__a[0], __b[0], __c)};
  18351. }
  18352. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  18353. vrsra_n_u8 (uint8x8_t __a, uint8x8_t __b, const int __c)
  18354. {
  18355. return __builtin_aarch64_ursra_nv8qi_uuus (__a, __b, __c);
  18356. }
  18357. __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
  18358. vrsra_n_u16 (uint16x4_t __a, uint16x4_t __b, const int __c)
  18359. {
  18360. return __builtin_aarch64_ursra_nv4hi_uuus (__a, __b, __c);
  18361. }
  18362. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  18363. vrsra_n_u32 (uint32x2_t __a, uint32x2_t __b, const int __c)
  18364. {
  18365. return __builtin_aarch64_ursra_nv2si_uuus (__a, __b, __c);
  18366. }
  18367. __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
  18368. vrsra_n_u64 (uint64x1_t __a, uint64x1_t __b, const int __c)
  18369. {
  18370. return (uint64x1_t) {__builtin_aarch64_ursra_ndi_uuus (__a[0], __b[0], __c)};
  18371. }
  18372. __extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
  18373. vrsraq_n_s8 (int8x16_t __a, int8x16_t __b, const int __c)
  18374. {
  18375. return (int8x16_t) __builtin_aarch64_srsra_nv16qi (__a, __b, __c);
  18376. }
  18377. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  18378. vrsraq_n_s16 (int16x8_t __a, int16x8_t __b, const int __c)
  18379. {
  18380. return (int16x8_t) __builtin_aarch64_srsra_nv8hi (__a, __b, __c);
  18381. }
  18382. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  18383. vrsraq_n_s32 (int32x4_t __a, int32x4_t __b, const int __c)
  18384. {
  18385. return (int32x4_t) __builtin_aarch64_srsra_nv4si (__a, __b, __c);
  18386. }
  18387. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  18388. vrsraq_n_s64 (int64x2_t __a, int64x2_t __b, const int __c)
  18389. {
  18390. return (int64x2_t) __builtin_aarch64_srsra_nv2di (__a, __b, __c);
  18391. }
  18392. __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
  18393. vrsraq_n_u8 (uint8x16_t __a, uint8x16_t __b, const int __c)
  18394. {
  18395. return __builtin_aarch64_ursra_nv16qi_uuus (__a, __b, __c);
  18396. }
  18397. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  18398. vrsraq_n_u16 (uint16x8_t __a, uint16x8_t __b, const int __c)
  18399. {
  18400. return __builtin_aarch64_ursra_nv8hi_uuus (__a, __b, __c);
  18401. }
  18402. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  18403. vrsraq_n_u32 (uint32x4_t __a, uint32x4_t __b, const int __c)
  18404. {
  18405. return __builtin_aarch64_ursra_nv4si_uuus (__a, __b, __c);
  18406. }
  18407. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  18408. vrsraq_n_u64 (uint64x2_t __a, uint64x2_t __b, const int __c)
  18409. {
  18410. return __builtin_aarch64_ursra_nv2di_uuus (__a, __b, __c);
  18411. }
  18412. __extension__ static __inline int64_t __attribute__ ((__always_inline__))
  18413. vrsrad_n_s64 (int64_t __a, int64_t __b, const int __c)
  18414. {
  18415. return __builtin_aarch64_srsra_ndi (__a, __b, __c);
  18416. }
  18417. __extension__ static __inline uint64_t __attribute__ ((__always_inline__))
  18418. vrsrad_n_u64 (uint64_t __a, uint64_t __b, const int __c)
  18419. {
  18420. return __builtin_aarch64_ursra_ndi_uuus (__a, __b, __c);
  18421. }
  18422. #ifdef __ARM_FEATURE_CRYPTO
  18423. /* vsha1 */
  18424. static __inline uint32x4_t
  18425. vsha1cq_u32 (uint32x4_t hash_abcd, uint32_t hash_e, uint32x4_t wk)
  18426. {
  18427. return __builtin_aarch64_crypto_sha1cv4si_uuuu (hash_abcd, hash_e, wk);
  18428. }
  18429. static __inline uint32x4_t
  18430. vsha1mq_u32 (uint32x4_t hash_abcd, uint32_t hash_e, uint32x4_t wk)
  18431. {
  18432. return __builtin_aarch64_crypto_sha1mv4si_uuuu (hash_abcd, hash_e, wk);
  18433. }
  18434. static __inline uint32x4_t
  18435. vsha1pq_u32 (uint32x4_t hash_abcd, uint32_t hash_e, uint32x4_t wk)
  18436. {
  18437. return __builtin_aarch64_crypto_sha1pv4si_uuuu (hash_abcd, hash_e, wk);
  18438. }
  18439. static __inline uint32_t
  18440. vsha1h_u32 (uint32_t hash_e)
  18441. {
  18442. return __builtin_aarch64_crypto_sha1hsi_uu (hash_e);
  18443. }
  18444. static __inline uint32x4_t
  18445. vsha1su0q_u32 (uint32x4_t w0_3, uint32x4_t w4_7, uint32x4_t w8_11)
  18446. {
  18447. return __builtin_aarch64_crypto_sha1su0v4si_uuuu (w0_3, w4_7, w8_11);
  18448. }
  18449. static __inline uint32x4_t
  18450. vsha1su1q_u32 (uint32x4_t tw0_3, uint32x4_t w12_15)
  18451. {
  18452. return __builtin_aarch64_crypto_sha1su1v4si_uuu (tw0_3, w12_15);
  18453. }
  18454. static __inline uint32x4_t
  18455. vsha256hq_u32 (uint32x4_t hash_abcd, uint32x4_t hash_efgh, uint32x4_t wk)
  18456. {
  18457. return __builtin_aarch64_crypto_sha256hv4si_uuuu (hash_abcd, hash_efgh, wk);
  18458. }
  18459. static __inline uint32x4_t
  18460. vsha256h2q_u32 (uint32x4_t hash_efgh, uint32x4_t hash_abcd, uint32x4_t wk)
  18461. {
  18462. return __builtin_aarch64_crypto_sha256h2v4si_uuuu (hash_efgh, hash_abcd, wk);
  18463. }
  18464. static __inline uint32x4_t
  18465. vsha256su0q_u32 (uint32x4_t w0_3, uint32x4_t w4_7)
  18466. {
  18467. return __builtin_aarch64_crypto_sha256su0v4si_uuu (w0_3, w4_7);
  18468. }
  18469. static __inline uint32x4_t
  18470. vsha256su1q_u32 (uint32x4_t tw0_3, uint32x4_t w8_11, uint32x4_t w12_15)
  18471. {
  18472. return __builtin_aarch64_crypto_sha256su1v4si_uuuu (tw0_3, w8_11, w12_15);
  18473. }
  18474. static __inline poly128_t
  18475. vmull_p64 (poly64_t a, poly64_t b)
  18476. {
  18477. return
  18478. __builtin_aarch64_crypto_pmulldi_ppp (a, b);
  18479. }
  18480. static __inline poly128_t
  18481. vmull_high_p64 (poly64x2_t a, poly64x2_t b)
  18482. {
  18483. return __builtin_aarch64_crypto_pmullv2di_ppp (a, b);
  18484. }
  18485. #endif
  18486. /* vshl */
  18487. __extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
  18488. vshl_n_s8 (int8x8_t __a, const int __b)
  18489. {
  18490. return (int8x8_t) __builtin_aarch64_ashlv8qi (__a, __b);
  18491. }
  18492. __extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
  18493. vshl_n_s16 (int16x4_t __a, const int __b)
  18494. {
  18495. return (int16x4_t) __builtin_aarch64_ashlv4hi (__a, __b);
  18496. }
  18497. __extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
  18498. vshl_n_s32 (int32x2_t __a, const int __b)
  18499. {
  18500. return (int32x2_t) __builtin_aarch64_ashlv2si (__a, __b);
  18501. }
  18502. __extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
  18503. vshl_n_s64 (int64x1_t __a, const int __b)
  18504. {
  18505. return (int64x1_t) {__builtin_aarch64_ashldi (__a[0], __b)};
  18506. }
  18507. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  18508. vshl_n_u8 (uint8x8_t __a, const int __b)
  18509. {
  18510. return (uint8x8_t) __builtin_aarch64_ashlv8qi ((int8x8_t) __a, __b);
  18511. }
  18512. __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
  18513. vshl_n_u16 (uint16x4_t __a, const int __b)
  18514. {
  18515. return (uint16x4_t) __builtin_aarch64_ashlv4hi ((int16x4_t) __a, __b);
  18516. }
  18517. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  18518. vshl_n_u32 (uint32x2_t __a, const int __b)
  18519. {
  18520. return (uint32x2_t) __builtin_aarch64_ashlv2si ((int32x2_t) __a, __b);
  18521. }
  18522. __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
  18523. vshl_n_u64 (uint64x1_t __a, const int __b)
  18524. {
  18525. return (uint64x1_t) {__builtin_aarch64_ashldi ((int64_t) __a[0], __b)};
  18526. }
  18527. __extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
  18528. vshlq_n_s8 (int8x16_t __a, const int __b)
  18529. {
  18530. return (int8x16_t) __builtin_aarch64_ashlv16qi (__a, __b);
  18531. }
  18532. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  18533. vshlq_n_s16 (int16x8_t __a, const int __b)
  18534. {
  18535. return (int16x8_t) __builtin_aarch64_ashlv8hi (__a, __b);
  18536. }
  18537. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  18538. vshlq_n_s32 (int32x4_t __a, const int __b)
  18539. {
  18540. return (int32x4_t) __builtin_aarch64_ashlv4si (__a, __b);
  18541. }
  18542. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  18543. vshlq_n_s64 (int64x2_t __a, const int __b)
  18544. {
  18545. return (int64x2_t) __builtin_aarch64_ashlv2di (__a, __b);
  18546. }
  18547. __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
  18548. vshlq_n_u8 (uint8x16_t __a, const int __b)
  18549. {
  18550. return (uint8x16_t) __builtin_aarch64_ashlv16qi ((int8x16_t) __a, __b);
  18551. }
  18552. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  18553. vshlq_n_u16 (uint16x8_t __a, const int __b)
  18554. {
  18555. return (uint16x8_t) __builtin_aarch64_ashlv8hi ((int16x8_t) __a, __b);
  18556. }
  18557. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  18558. vshlq_n_u32 (uint32x4_t __a, const int __b)
  18559. {
  18560. return (uint32x4_t) __builtin_aarch64_ashlv4si ((int32x4_t) __a, __b);
  18561. }
  18562. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  18563. vshlq_n_u64 (uint64x2_t __a, const int __b)
  18564. {
  18565. return (uint64x2_t) __builtin_aarch64_ashlv2di ((int64x2_t) __a, __b);
  18566. }
  18567. __extension__ static __inline int64_t __attribute__ ((__always_inline__))
  18568. vshld_n_s64 (int64_t __a, const int __b)
  18569. {
  18570. return __builtin_aarch64_ashldi (__a, __b);
  18571. }
  18572. __extension__ static __inline uint64_t __attribute__ ((__always_inline__))
  18573. vshld_n_u64 (uint64_t __a, const int __b)
  18574. {
  18575. return (uint64_t) __builtin_aarch64_ashldi (__a, __b);
  18576. }
  18577. __extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
  18578. vshl_s8 (int8x8_t __a, int8x8_t __b)
  18579. {
  18580. return __builtin_aarch64_sshlv8qi (__a, __b);
  18581. }
  18582. __extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
  18583. vshl_s16 (int16x4_t __a, int16x4_t __b)
  18584. {
  18585. return __builtin_aarch64_sshlv4hi (__a, __b);
  18586. }
  18587. __extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
  18588. vshl_s32 (int32x2_t __a, int32x2_t __b)
  18589. {
  18590. return __builtin_aarch64_sshlv2si (__a, __b);
  18591. }
  18592. __extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
  18593. vshl_s64 (int64x1_t __a, int64x1_t __b)
  18594. {
  18595. return (int64x1_t) {__builtin_aarch64_sshldi (__a[0], __b[0])};
  18596. }
  18597. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  18598. vshl_u8 (uint8x8_t __a, int8x8_t __b)
  18599. {
  18600. return __builtin_aarch64_ushlv8qi_uus (__a, __b);
  18601. }
  18602. __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
  18603. vshl_u16 (uint16x4_t __a, int16x4_t __b)
  18604. {
  18605. return __builtin_aarch64_ushlv4hi_uus (__a, __b);
  18606. }
  18607. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  18608. vshl_u32 (uint32x2_t __a, int32x2_t __b)
  18609. {
  18610. return __builtin_aarch64_ushlv2si_uus (__a, __b);
  18611. }
  18612. __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
  18613. vshl_u64 (uint64x1_t __a, int64x1_t __b)
  18614. {
  18615. return (uint64x1_t) {__builtin_aarch64_ushldi_uus (__a[0], __b[0])};
  18616. }
  18617. __extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
  18618. vshlq_s8 (int8x16_t __a, int8x16_t __b)
  18619. {
  18620. return __builtin_aarch64_sshlv16qi (__a, __b);
  18621. }
  18622. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  18623. vshlq_s16 (int16x8_t __a, int16x8_t __b)
  18624. {
  18625. return __builtin_aarch64_sshlv8hi (__a, __b);
  18626. }
  18627. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  18628. vshlq_s32 (int32x4_t __a, int32x4_t __b)
  18629. {
  18630. return __builtin_aarch64_sshlv4si (__a, __b);
  18631. }
  18632. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  18633. vshlq_s64 (int64x2_t __a, int64x2_t __b)
  18634. {
  18635. return __builtin_aarch64_sshlv2di (__a, __b);
  18636. }
  18637. __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
  18638. vshlq_u8 (uint8x16_t __a, int8x16_t __b)
  18639. {
  18640. return __builtin_aarch64_ushlv16qi_uus (__a, __b);
  18641. }
  18642. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  18643. vshlq_u16 (uint16x8_t __a, int16x8_t __b)
  18644. {
  18645. return __builtin_aarch64_ushlv8hi_uus (__a, __b);
  18646. }
  18647. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  18648. vshlq_u32 (uint32x4_t __a, int32x4_t __b)
  18649. {
  18650. return __builtin_aarch64_ushlv4si_uus (__a, __b);
  18651. }
  18652. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  18653. vshlq_u64 (uint64x2_t __a, int64x2_t __b)
  18654. {
  18655. return __builtin_aarch64_ushlv2di_uus (__a, __b);
  18656. }
  18657. __extension__ static __inline int64_t __attribute__ ((__always_inline__))
  18658. vshld_s64 (int64_t __a, int64_t __b)
  18659. {
  18660. return __builtin_aarch64_sshldi (__a, __b);
  18661. }
  18662. __extension__ static __inline uint64_t __attribute__ ((__always_inline__))
  18663. vshld_u64 (uint64_t __a, uint64_t __b)
  18664. {
  18665. return __builtin_aarch64_ushldi_uus (__a, __b);
  18666. }
  18667. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  18668. vshll_high_n_s8 (int8x16_t __a, const int __b)
  18669. {
  18670. return __builtin_aarch64_sshll2_nv16qi (__a, __b);
  18671. }
  18672. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  18673. vshll_high_n_s16 (int16x8_t __a, const int __b)
  18674. {
  18675. return __builtin_aarch64_sshll2_nv8hi (__a, __b);
  18676. }
  18677. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  18678. vshll_high_n_s32 (int32x4_t __a, const int __b)
  18679. {
  18680. return __builtin_aarch64_sshll2_nv4si (__a, __b);
  18681. }
  18682. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  18683. vshll_high_n_u8 (uint8x16_t __a, const int __b)
  18684. {
  18685. return (uint16x8_t) __builtin_aarch64_ushll2_nv16qi ((int8x16_t) __a, __b);
  18686. }
  18687. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  18688. vshll_high_n_u16 (uint16x8_t __a, const int __b)
  18689. {
  18690. return (uint32x4_t) __builtin_aarch64_ushll2_nv8hi ((int16x8_t) __a, __b);
  18691. }
  18692. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  18693. vshll_high_n_u32 (uint32x4_t __a, const int __b)
  18694. {
  18695. return (uint64x2_t) __builtin_aarch64_ushll2_nv4si ((int32x4_t) __a, __b);
  18696. }
  18697. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  18698. vshll_n_s8 (int8x8_t __a, const int __b)
  18699. {
  18700. return __builtin_aarch64_sshll_nv8qi (__a, __b);
  18701. }
  18702. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  18703. vshll_n_s16 (int16x4_t __a, const int __b)
  18704. {
  18705. return __builtin_aarch64_sshll_nv4hi (__a, __b);
  18706. }
  18707. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  18708. vshll_n_s32 (int32x2_t __a, const int __b)
  18709. {
  18710. return __builtin_aarch64_sshll_nv2si (__a, __b);
  18711. }
  18712. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  18713. vshll_n_u8 (uint8x8_t __a, const int __b)
  18714. {
  18715. return __builtin_aarch64_ushll_nv8qi_uus (__a, __b);
  18716. }
  18717. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  18718. vshll_n_u16 (uint16x4_t __a, const int __b)
  18719. {
  18720. return __builtin_aarch64_ushll_nv4hi_uus (__a, __b);
  18721. }
  18722. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  18723. vshll_n_u32 (uint32x2_t __a, const int __b)
  18724. {
  18725. return __builtin_aarch64_ushll_nv2si_uus (__a, __b);
  18726. }
  18727. /* vshr */
  18728. __extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
  18729. vshr_n_s8 (int8x8_t __a, const int __b)
  18730. {
  18731. return (int8x8_t) __builtin_aarch64_ashrv8qi (__a, __b);
  18732. }
  18733. __extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
  18734. vshr_n_s16 (int16x4_t __a, const int __b)
  18735. {
  18736. return (int16x4_t) __builtin_aarch64_ashrv4hi (__a, __b);
  18737. }
  18738. __extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
  18739. vshr_n_s32 (int32x2_t __a, const int __b)
  18740. {
  18741. return (int32x2_t) __builtin_aarch64_ashrv2si (__a, __b);
  18742. }
  18743. __extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
  18744. vshr_n_s64 (int64x1_t __a, const int __b)
  18745. {
  18746. return (int64x1_t) {__builtin_aarch64_ashr_simddi (__a[0], __b)};
  18747. }
  18748. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  18749. vshr_n_u8 (uint8x8_t __a, const int __b)
  18750. {
  18751. return (uint8x8_t) __builtin_aarch64_lshrv8qi ((int8x8_t) __a, __b);
  18752. }
  18753. __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
  18754. vshr_n_u16 (uint16x4_t __a, const int __b)
  18755. {
  18756. return (uint16x4_t) __builtin_aarch64_lshrv4hi ((int16x4_t) __a, __b);
  18757. }
  18758. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  18759. vshr_n_u32 (uint32x2_t __a, const int __b)
  18760. {
  18761. return (uint32x2_t) __builtin_aarch64_lshrv2si ((int32x2_t) __a, __b);
  18762. }
  18763. __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
  18764. vshr_n_u64 (uint64x1_t __a, const int __b)
  18765. {
  18766. return (uint64x1_t) {__builtin_aarch64_lshr_simddi_uus ( __a[0], __b)};
  18767. }
  18768. __extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
  18769. vshrq_n_s8 (int8x16_t __a, const int __b)
  18770. {
  18771. return (int8x16_t) __builtin_aarch64_ashrv16qi (__a, __b);
  18772. }
  18773. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  18774. vshrq_n_s16 (int16x8_t __a, const int __b)
  18775. {
  18776. return (int16x8_t) __builtin_aarch64_ashrv8hi (__a, __b);
  18777. }
  18778. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  18779. vshrq_n_s32 (int32x4_t __a, const int __b)
  18780. {
  18781. return (int32x4_t) __builtin_aarch64_ashrv4si (__a, __b);
  18782. }
  18783. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  18784. vshrq_n_s64 (int64x2_t __a, const int __b)
  18785. {
  18786. return (int64x2_t) __builtin_aarch64_ashrv2di (__a, __b);
  18787. }
  18788. __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
  18789. vshrq_n_u8 (uint8x16_t __a, const int __b)
  18790. {
  18791. return (uint8x16_t) __builtin_aarch64_lshrv16qi ((int8x16_t) __a, __b);
  18792. }
  18793. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  18794. vshrq_n_u16 (uint16x8_t __a, const int __b)
  18795. {
  18796. return (uint16x8_t) __builtin_aarch64_lshrv8hi ((int16x8_t) __a, __b);
  18797. }
  18798. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  18799. vshrq_n_u32 (uint32x4_t __a, const int __b)
  18800. {
  18801. return (uint32x4_t) __builtin_aarch64_lshrv4si ((int32x4_t) __a, __b);
  18802. }
  18803. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  18804. vshrq_n_u64 (uint64x2_t __a, const int __b)
  18805. {
  18806. return (uint64x2_t) __builtin_aarch64_lshrv2di ((int64x2_t) __a, __b);
  18807. }
  18808. __extension__ static __inline int64_t __attribute__ ((__always_inline__))
  18809. vshrd_n_s64 (int64_t __a, const int __b)
  18810. {
  18811. return __builtin_aarch64_ashr_simddi (__a, __b);
  18812. }
  18813. __extension__ static __inline uint64_t __attribute__ ((__always_inline__))
  18814. vshrd_n_u64 (uint64_t __a, const int __b)
  18815. {
  18816. return __builtin_aarch64_lshr_simddi_uus (__a, __b);
  18817. }
  18818. /* vsli */
  18819. __extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
  18820. vsli_n_s8 (int8x8_t __a, int8x8_t __b, const int __c)
  18821. {
  18822. return (int8x8_t) __builtin_aarch64_ssli_nv8qi (__a, __b, __c);
  18823. }
  18824. __extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
  18825. vsli_n_s16 (int16x4_t __a, int16x4_t __b, const int __c)
  18826. {
  18827. return (int16x4_t) __builtin_aarch64_ssli_nv4hi (__a, __b, __c);
  18828. }
  18829. __extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
  18830. vsli_n_s32 (int32x2_t __a, int32x2_t __b, const int __c)
  18831. {
  18832. return (int32x2_t) __builtin_aarch64_ssli_nv2si (__a, __b, __c);
  18833. }
  18834. __extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
  18835. vsli_n_s64 (int64x1_t __a, int64x1_t __b, const int __c)
  18836. {
  18837. return (int64x1_t) {__builtin_aarch64_ssli_ndi (__a[0], __b[0], __c)};
  18838. }
  18839. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  18840. vsli_n_u8 (uint8x8_t __a, uint8x8_t __b, const int __c)
  18841. {
  18842. return __builtin_aarch64_usli_nv8qi_uuus (__a, __b, __c);
  18843. }
  18844. __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
  18845. vsli_n_u16 (uint16x4_t __a, uint16x4_t __b, const int __c)
  18846. {
  18847. return __builtin_aarch64_usli_nv4hi_uuus (__a, __b, __c);
  18848. }
  18849. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  18850. vsli_n_u32 (uint32x2_t __a, uint32x2_t __b, const int __c)
  18851. {
  18852. return __builtin_aarch64_usli_nv2si_uuus (__a, __b, __c);
  18853. }
  18854. __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
  18855. vsli_n_u64 (uint64x1_t __a, uint64x1_t __b, const int __c)
  18856. {
  18857. return (uint64x1_t) {__builtin_aarch64_usli_ndi_uuus (__a[0], __b[0], __c)};
  18858. }
  18859. __extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
  18860. vsliq_n_s8 (int8x16_t __a, int8x16_t __b, const int __c)
  18861. {
  18862. return (int8x16_t) __builtin_aarch64_ssli_nv16qi (__a, __b, __c);
  18863. }
  18864. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  18865. vsliq_n_s16 (int16x8_t __a, int16x8_t __b, const int __c)
  18866. {
  18867. return (int16x8_t) __builtin_aarch64_ssli_nv8hi (__a, __b, __c);
  18868. }
  18869. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  18870. vsliq_n_s32 (int32x4_t __a, int32x4_t __b, const int __c)
  18871. {
  18872. return (int32x4_t) __builtin_aarch64_ssli_nv4si (__a, __b, __c);
  18873. }
  18874. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  18875. vsliq_n_s64 (int64x2_t __a, int64x2_t __b, const int __c)
  18876. {
  18877. return (int64x2_t) __builtin_aarch64_ssli_nv2di (__a, __b, __c);
  18878. }
  18879. __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
  18880. vsliq_n_u8 (uint8x16_t __a, uint8x16_t __b, const int __c)
  18881. {
  18882. return __builtin_aarch64_usli_nv16qi_uuus (__a, __b, __c);
  18883. }
  18884. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  18885. vsliq_n_u16 (uint16x8_t __a, uint16x8_t __b, const int __c)
  18886. {
  18887. return __builtin_aarch64_usli_nv8hi_uuus (__a, __b, __c);
  18888. }
  18889. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  18890. vsliq_n_u32 (uint32x4_t __a, uint32x4_t __b, const int __c)
  18891. {
  18892. return __builtin_aarch64_usli_nv4si_uuus (__a, __b, __c);
  18893. }
  18894. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  18895. vsliq_n_u64 (uint64x2_t __a, uint64x2_t __b, const int __c)
  18896. {
  18897. return __builtin_aarch64_usli_nv2di_uuus (__a, __b, __c);
  18898. }
  18899. __extension__ static __inline int64_t __attribute__ ((__always_inline__))
  18900. vslid_n_s64 (int64_t __a, int64_t __b, const int __c)
  18901. {
  18902. return __builtin_aarch64_ssli_ndi (__a, __b, __c);
  18903. }
  18904. __extension__ static __inline uint64_t __attribute__ ((__always_inline__))
  18905. vslid_n_u64 (uint64_t __a, uint64_t __b, const int __c)
  18906. {
  18907. return __builtin_aarch64_usli_ndi_uuus (__a, __b, __c);
  18908. }
  18909. /* vsqadd */
  18910. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  18911. vsqadd_u8 (uint8x8_t __a, int8x8_t __b)
  18912. {
  18913. return __builtin_aarch64_usqaddv8qi_uus (__a, __b);
  18914. }
  18915. __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
  18916. vsqadd_u16 (uint16x4_t __a, int16x4_t __b)
  18917. {
  18918. return __builtin_aarch64_usqaddv4hi_uus (__a, __b);
  18919. }
  18920. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  18921. vsqadd_u32 (uint32x2_t __a, int32x2_t __b)
  18922. {
  18923. return __builtin_aarch64_usqaddv2si_uus (__a, __b);
  18924. }
  18925. __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
  18926. vsqadd_u64 (uint64x1_t __a, int64x1_t __b)
  18927. {
  18928. return (uint64x1_t) {__builtin_aarch64_usqadddi_uus (__a[0], __b[0])};
  18929. }
  18930. __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
  18931. vsqaddq_u8 (uint8x16_t __a, int8x16_t __b)
  18932. {
  18933. return __builtin_aarch64_usqaddv16qi_uus (__a, __b);
  18934. }
  18935. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  18936. vsqaddq_u16 (uint16x8_t __a, int16x8_t __b)
  18937. {
  18938. return __builtin_aarch64_usqaddv8hi_uus (__a, __b);
  18939. }
  18940. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  18941. vsqaddq_u32 (uint32x4_t __a, int32x4_t __b)
  18942. {
  18943. return __builtin_aarch64_usqaddv4si_uus (__a, __b);
  18944. }
  18945. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  18946. vsqaddq_u64 (uint64x2_t __a, int64x2_t __b)
  18947. {
  18948. return __builtin_aarch64_usqaddv2di_uus (__a, __b);
  18949. }
  18950. __extension__ static __inline uint8_t __attribute__ ((__always_inline__))
  18951. vsqaddb_u8 (uint8_t __a, int8_t __b)
  18952. {
  18953. return __builtin_aarch64_usqaddqi_uus (__a, __b);
  18954. }
  18955. __extension__ static __inline uint16_t __attribute__ ((__always_inline__))
  18956. vsqaddh_u16 (uint16_t __a, int16_t __b)
  18957. {
  18958. return __builtin_aarch64_usqaddhi_uus (__a, __b);
  18959. }
  18960. __extension__ static __inline uint32_t __attribute__ ((__always_inline__))
  18961. vsqadds_u32 (uint32_t __a, int32_t __b)
  18962. {
  18963. return __builtin_aarch64_usqaddsi_uus (__a, __b);
  18964. }
  18965. __extension__ static __inline uint64_t __attribute__ ((__always_inline__))
  18966. vsqaddd_u64 (uint64_t __a, int64_t __b)
  18967. {
  18968. return __builtin_aarch64_usqadddi_uus (__a, __b);
  18969. }
  18970. /* vsqrt */
  18971. __extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
  18972. vsqrt_f32 (float32x2_t a)
  18973. {
  18974. return __builtin_aarch64_sqrtv2sf (a);
  18975. }
  18976. __extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
  18977. vsqrtq_f32 (float32x4_t a)
  18978. {
  18979. return __builtin_aarch64_sqrtv4sf (a);
  18980. }
  18981. __extension__ static __inline float64x1_t __attribute__ ((__always_inline__))
  18982. vsqrt_f64 (float64x1_t a)
  18983. {
  18984. return (float64x1_t) { __builtin_aarch64_sqrtdf (a[0]) };
  18985. }
  18986. __extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
  18987. vsqrtq_f64 (float64x2_t a)
  18988. {
  18989. return __builtin_aarch64_sqrtv2df (a);
  18990. }
  18991. /* vsra */
  18992. __extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
  18993. vsra_n_s8 (int8x8_t __a, int8x8_t __b, const int __c)
  18994. {
  18995. return (int8x8_t) __builtin_aarch64_ssra_nv8qi (__a, __b, __c);
  18996. }
  18997. __extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
  18998. vsra_n_s16 (int16x4_t __a, int16x4_t __b, const int __c)
  18999. {
  19000. return (int16x4_t) __builtin_aarch64_ssra_nv4hi (__a, __b, __c);
  19001. }
  19002. __extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
  19003. vsra_n_s32 (int32x2_t __a, int32x2_t __b, const int __c)
  19004. {
  19005. return (int32x2_t) __builtin_aarch64_ssra_nv2si (__a, __b, __c);
  19006. }
  19007. __extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
  19008. vsra_n_s64 (int64x1_t __a, int64x1_t __b, const int __c)
  19009. {
  19010. return (int64x1_t) {__builtin_aarch64_ssra_ndi (__a[0], __b[0], __c)};
  19011. }
  19012. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  19013. vsra_n_u8 (uint8x8_t __a, uint8x8_t __b, const int __c)
  19014. {
  19015. return __builtin_aarch64_usra_nv8qi_uuus (__a, __b, __c);
  19016. }
  19017. __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
  19018. vsra_n_u16 (uint16x4_t __a, uint16x4_t __b, const int __c)
  19019. {
  19020. return __builtin_aarch64_usra_nv4hi_uuus (__a, __b, __c);
  19021. }
  19022. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  19023. vsra_n_u32 (uint32x2_t __a, uint32x2_t __b, const int __c)
  19024. {
  19025. return __builtin_aarch64_usra_nv2si_uuus (__a, __b, __c);
  19026. }
  19027. __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
  19028. vsra_n_u64 (uint64x1_t __a, uint64x1_t __b, const int __c)
  19029. {
  19030. return (uint64x1_t) {__builtin_aarch64_usra_ndi_uuus (__a[0], __b[0], __c)};
  19031. }
  19032. __extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
  19033. vsraq_n_s8 (int8x16_t __a, int8x16_t __b, const int __c)
  19034. {
  19035. return (int8x16_t) __builtin_aarch64_ssra_nv16qi (__a, __b, __c);
  19036. }
  19037. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  19038. vsraq_n_s16 (int16x8_t __a, int16x8_t __b, const int __c)
  19039. {
  19040. return (int16x8_t) __builtin_aarch64_ssra_nv8hi (__a, __b, __c);
  19041. }
  19042. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  19043. vsraq_n_s32 (int32x4_t __a, int32x4_t __b, const int __c)
  19044. {
  19045. return (int32x4_t) __builtin_aarch64_ssra_nv4si (__a, __b, __c);
  19046. }
  19047. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  19048. vsraq_n_s64 (int64x2_t __a, int64x2_t __b, const int __c)
  19049. {
  19050. return (int64x2_t) __builtin_aarch64_ssra_nv2di (__a, __b, __c);
  19051. }
  19052. __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
  19053. vsraq_n_u8 (uint8x16_t __a, uint8x16_t __b, const int __c)
  19054. {
  19055. return __builtin_aarch64_usra_nv16qi_uuus (__a, __b, __c);
  19056. }
  19057. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  19058. vsraq_n_u16 (uint16x8_t __a, uint16x8_t __b, const int __c)
  19059. {
  19060. return __builtin_aarch64_usra_nv8hi_uuus (__a, __b, __c);
  19061. }
  19062. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  19063. vsraq_n_u32 (uint32x4_t __a, uint32x4_t __b, const int __c)
  19064. {
  19065. return __builtin_aarch64_usra_nv4si_uuus (__a, __b, __c);
  19066. }
  19067. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  19068. vsraq_n_u64 (uint64x2_t __a, uint64x2_t __b, const int __c)
  19069. {
  19070. return __builtin_aarch64_usra_nv2di_uuus (__a, __b, __c);
  19071. }
  19072. __extension__ static __inline int64_t __attribute__ ((__always_inline__))
  19073. vsrad_n_s64 (int64_t __a, int64_t __b, const int __c)
  19074. {
  19075. return __builtin_aarch64_ssra_ndi (__a, __b, __c);
  19076. }
  19077. __extension__ static __inline uint64_t __attribute__ ((__always_inline__))
  19078. vsrad_n_u64 (uint64_t __a, uint64_t __b, const int __c)
  19079. {
  19080. return __builtin_aarch64_usra_ndi_uuus (__a, __b, __c);
  19081. }
  19082. /* vsri */
  19083. __extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
  19084. vsri_n_s8 (int8x8_t __a, int8x8_t __b, const int __c)
  19085. {
  19086. return (int8x8_t) __builtin_aarch64_ssri_nv8qi (__a, __b, __c);
  19087. }
  19088. __extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
  19089. vsri_n_s16 (int16x4_t __a, int16x4_t __b, const int __c)
  19090. {
  19091. return (int16x4_t) __builtin_aarch64_ssri_nv4hi (__a, __b, __c);
  19092. }
  19093. __extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
  19094. vsri_n_s32 (int32x2_t __a, int32x2_t __b, const int __c)
  19095. {
  19096. return (int32x2_t) __builtin_aarch64_ssri_nv2si (__a, __b, __c);
  19097. }
  19098. __extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
  19099. vsri_n_s64 (int64x1_t __a, int64x1_t __b, const int __c)
  19100. {
  19101. return (int64x1_t) {__builtin_aarch64_ssri_ndi (__a[0], __b[0], __c)};
  19102. }
  19103. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  19104. vsri_n_u8 (uint8x8_t __a, uint8x8_t __b, const int __c)
  19105. {
  19106. return __builtin_aarch64_usri_nv8qi_uuus (__a, __b, __c);
  19107. }
  19108. __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
  19109. vsri_n_u16 (uint16x4_t __a, uint16x4_t __b, const int __c)
  19110. {
  19111. return __builtin_aarch64_usri_nv4hi_uuus (__a, __b, __c);
  19112. }
  19113. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  19114. vsri_n_u32 (uint32x2_t __a, uint32x2_t __b, const int __c)
  19115. {
  19116. return __builtin_aarch64_usri_nv2si_uuus (__a, __b, __c);
  19117. }
  19118. __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
  19119. vsri_n_u64 (uint64x1_t __a, uint64x1_t __b, const int __c)
  19120. {
  19121. return (uint64x1_t) {__builtin_aarch64_usri_ndi_uuus (__a[0], __b[0], __c)};
  19122. }
  19123. __extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
  19124. vsriq_n_s8 (int8x16_t __a, int8x16_t __b, const int __c)
  19125. {
  19126. return (int8x16_t) __builtin_aarch64_ssri_nv16qi (__a, __b, __c);
  19127. }
  19128. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  19129. vsriq_n_s16 (int16x8_t __a, int16x8_t __b, const int __c)
  19130. {
  19131. return (int16x8_t) __builtin_aarch64_ssri_nv8hi (__a, __b, __c);
  19132. }
  19133. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  19134. vsriq_n_s32 (int32x4_t __a, int32x4_t __b, const int __c)
  19135. {
  19136. return (int32x4_t) __builtin_aarch64_ssri_nv4si (__a, __b, __c);
  19137. }
  19138. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  19139. vsriq_n_s64 (int64x2_t __a, int64x2_t __b, const int __c)
  19140. {
  19141. return (int64x2_t) __builtin_aarch64_ssri_nv2di (__a, __b, __c);
  19142. }
  19143. __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
  19144. vsriq_n_u8 (uint8x16_t __a, uint8x16_t __b, const int __c)
  19145. {
  19146. return __builtin_aarch64_usri_nv16qi_uuus (__a, __b, __c);
  19147. }
  19148. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  19149. vsriq_n_u16 (uint16x8_t __a, uint16x8_t __b, const int __c)
  19150. {
  19151. return __builtin_aarch64_usri_nv8hi_uuus (__a, __b, __c);
  19152. }
  19153. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  19154. vsriq_n_u32 (uint32x4_t __a, uint32x4_t __b, const int __c)
  19155. {
  19156. return __builtin_aarch64_usri_nv4si_uuus (__a, __b, __c);
  19157. }
  19158. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  19159. vsriq_n_u64 (uint64x2_t __a, uint64x2_t __b, const int __c)
  19160. {
  19161. return __builtin_aarch64_usri_nv2di_uuus (__a, __b, __c);
  19162. }
  19163. __extension__ static __inline int64_t __attribute__ ((__always_inline__))
  19164. vsrid_n_s64 (int64_t __a, int64_t __b, const int __c)
  19165. {
  19166. return __builtin_aarch64_ssri_ndi (__a, __b, __c);
  19167. }
  19168. __extension__ static __inline uint64_t __attribute__ ((__always_inline__))
  19169. vsrid_n_u64 (uint64_t __a, uint64_t __b, const int __c)
  19170. {
  19171. return __builtin_aarch64_usri_ndi_uuus (__a, __b, __c);
  19172. }
  19173. /* vst1 */
  19174. __extension__ static __inline void __attribute__ ((__always_inline__))
  19175. vst1_f32 (float32_t *a, float32x2_t b)
  19176. {
  19177. __builtin_aarch64_st1v2sf ((__builtin_aarch64_simd_sf *) a, b);
  19178. }
  19179. __extension__ static __inline void __attribute__ ((__always_inline__))
  19180. vst1_f64 (float64_t *a, float64x1_t b)
  19181. {
  19182. *a = b[0];
  19183. }
  19184. __extension__ static __inline void __attribute__ ((__always_inline__))
  19185. vst1_p8 (poly8_t *a, poly8x8_t b)
  19186. {
  19187. __builtin_aarch64_st1v8qi ((__builtin_aarch64_simd_qi *) a,
  19188. (int8x8_t) b);
  19189. }
  19190. __extension__ static __inline void __attribute__ ((__always_inline__))
  19191. vst1_p16 (poly16_t *a, poly16x4_t b)
  19192. {
  19193. __builtin_aarch64_st1v4hi ((__builtin_aarch64_simd_hi *) a,
  19194. (int16x4_t) b);
  19195. }
  19196. __extension__ static __inline void __attribute__ ((__always_inline__))
  19197. vst1_s8 (int8_t *a, int8x8_t b)
  19198. {
  19199. __builtin_aarch64_st1v8qi ((__builtin_aarch64_simd_qi *) a, b);
  19200. }
  19201. __extension__ static __inline void __attribute__ ((__always_inline__))
  19202. vst1_s16 (int16_t *a, int16x4_t b)
  19203. {
  19204. __builtin_aarch64_st1v4hi ((__builtin_aarch64_simd_hi *) a, b);
  19205. }
  19206. __extension__ static __inline void __attribute__ ((__always_inline__))
  19207. vst1_s32 (int32_t *a, int32x2_t b)
  19208. {
  19209. __builtin_aarch64_st1v2si ((__builtin_aarch64_simd_si *) a, b);
  19210. }
  19211. __extension__ static __inline void __attribute__ ((__always_inline__))
  19212. vst1_s64 (int64_t *a, int64x1_t b)
  19213. {
  19214. *a = b[0];
  19215. }
  19216. __extension__ static __inline void __attribute__ ((__always_inline__))
  19217. vst1_u8 (uint8_t *a, uint8x8_t b)
  19218. {
  19219. __builtin_aarch64_st1v8qi ((__builtin_aarch64_simd_qi *) a,
  19220. (int8x8_t) b);
  19221. }
  19222. __extension__ static __inline void __attribute__ ((__always_inline__))
  19223. vst1_u16 (uint16_t *a, uint16x4_t b)
  19224. {
  19225. __builtin_aarch64_st1v4hi ((__builtin_aarch64_simd_hi *) a,
  19226. (int16x4_t) b);
  19227. }
  19228. __extension__ static __inline void __attribute__ ((__always_inline__))
  19229. vst1_u32 (uint32_t *a, uint32x2_t b)
  19230. {
  19231. __builtin_aarch64_st1v2si ((__builtin_aarch64_simd_si *) a,
  19232. (int32x2_t) b);
  19233. }
  19234. __extension__ static __inline void __attribute__ ((__always_inline__))
  19235. vst1_u64 (uint64_t *a, uint64x1_t b)
  19236. {
  19237. *a = b[0];
  19238. }
  19239. __extension__ static __inline void __attribute__ ((__always_inline__))
  19240. vst1q_f32 (float32_t *a, float32x4_t b)
  19241. {
  19242. __builtin_aarch64_st1v4sf ((__builtin_aarch64_simd_sf *) a, b);
  19243. }
  19244. __extension__ static __inline void __attribute__ ((__always_inline__))
  19245. vst1q_f64 (float64_t *a, float64x2_t b)
  19246. {
  19247. __builtin_aarch64_st1v2df ((__builtin_aarch64_simd_df *) a, b);
  19248. }
  19249. /* vst1q */
  19250. __extension__ static __inline void __attribute__ ((__always_inline__))
  19251. vst1q_p8 (poly8_t *a, poly8x16_t b)
  19252. {
  19253. __builtin_aarch64_st1v16qi ((__builtin_aarch64_simd_qi *) a,
  19254. (int8x16_t) b);
  19255. }
  19256. __extension__ static __inline void __attribute__ ((__always_inline__))
  19257. vst1q_p16 (poly16_t *a, poly16x8_t b)
  19258. {
  19259. __builtin_aarch64_st1v8hi ((__builtin_aarch64_simd_hi *) a,
  19260. (int16x8_t) b);
  19261. }
  19262. __extension__ static __inline void __attribute__ ((__always_inline__))
  19263. vst1q_s8 (int8_t *a, int8x16_t b)
  19264. {
  19265. __builtin_aarch64_st1v16qi ((__builtin_aarch64_simd_qi *) a, b);
  19266. }
  19267. __extension__ static __inline void __attribute__ ((__always_inline__))
  19268. vst1q_s16 (int16_t *a, int16x8_t b)
  19269. {
  19270. __builtin_aarch64_st1v8hi ((__builtin_aarch64_simd_hi *) a, b);
  19271. }
  19272. __extension__ static __inline void __attribute__ ((__always_inline__))
  19273. vst1q_s32 (int32_t *a, int32x4_t b)
  19274. {
  19275. __builtin_aarch64_st1v4si ((__builtin_aarch64_simd_si *) a, b);
  19276. }
  19277. __extension__ static __inline void __attribute__ ((__always_inline__))
  19278. vst1q_s64 (int64_t *a, int64x2_t b)
  19279. {
  19280. __builtin_aarch64_st1v2di ((__builtin_aarch64_simd_di *) a, b);
  19281. }
  19282. __extension__ static __inline void __attribute__ ((__always_inline__))
  19283. vst1q_u8 (uint8_t *a, uint8x16_t b)
  19284. {
  19285. __builtin_aarch64_st1v16qi ((__builtin_aarch64_simd_qi *) a,
  19286. (int8x16_t) b);
  19287. }
  19288. __extension__ static __inline void __attribute__ ((__always_inline__))
  19289. vst1q_u16 (uint16_t *a, uint16x8_t b)
  19290. {
  19291. __builtin_aarch64_st1v8hi ((__builtin_aarch64_simd_hi *) a,
  19292. (int16x8_t) b);
  19293. }
  19294. __extension__ static __inline void __attribute__ ((__always_inline__))
  19295. vst1q_u32 (uint32_t *a, uint32x4_t b)
  19296. {
  19297. __builtin_aarch64_st1v4si ((__builtin_aarch64_simd_si *) a,
  19298. (int32x4_t) b);
  19299. }
  19300. __extension__ static __inline void __attribute__ ((__always_inline__))
  19301. vst1q_u64 (uint64_t *a, uint64x2_t b)
  19302. {
  19303. __builtin_aarch64_st1v2di ((__builtin_aarch64_simd_di *) a,
  19304. (int64x2_t) b);
  19305. }
  19306. /* vstn */
  19307. __extension__ static __inline void
  19308. vst2_s64 (int64_t * __a, int64x1x2_t val)
  19309. {
  19310. __builtin_aarch64_simd_oi __o;
  19311. int64x2x2_t temp;
  19312. temp.val[0] = vcombine_s64 (val.val[0], vcreate_s64 (__AARCH64_INT64_C (0)));
  19313. temp.val[1] = vcombine_s64 (val.val[1], vcreate_s64 (__AARCH64_INT64_C (0)));
  19314. __o = __builtin_aarch64_set_qregoiv2di (__o, (int64x2_t) temp.val[0], 0);
  19315. __o = __builtin_aarch64_set_qregoiv2di (__o, (int64x2_t) temp.val[1], 1);
  19316. __builtin_aarch64_st2di ((__builtin_aarch64_simd_di *) __a, __o);
  19317. }
  19318. __extension__ static __inline void
  19319. vst2_u64 (uint64_t * __a, uint64x1x2_t val)
  19320. {
  19321. __builtin_aarch64_simd_oi __o;
  19322. uint64x2x2_t temp;
  19323. temp.val[0] = vcombine_u64 (val.val[0], vcreate_u64 (__AARCH64_UINT64_C (0)));
  19324. temp.val[1] = vcombine_u64 (val.val[1], vcreate_u64 (__AARCH64_UINT64_C (0)));
  19325. __o = __builtin_aarch64_set_qregoiv2di (__o, (int64x2_t) temp.val[0], 0);
  19326. __o = __builtin_aarch64_set_qregoiv2di (__o, (int64x2_t) temp.val[1], 1);
  19327. __builtin_aarch64_st2di ((__builtin_aarch64_simd_di *) __a, __o);
  19328. }
  19329. __extension__ static __inline void
  19330. vst2_f64 (float64_t * __a, float64x1x2_t val)
  19331. {
  19332. __builtin_aarch64_simd_oi __o;
  19333. float64x2x2_t temp;
  19334. temp.val[0] = vcombine_f64 (val.val[0], vcreate_f64 (__AARCH64_UINT64_C (0)));
  19335. temp.val[1] = vcombine_f64 (val.val[1], vcreate_f64 (__AARCH64_UINT64_C (0)));
  19336. __o = __builtin_aarch64_set_qregoiv2df (__o, (float64x2_t) temp.val[0], 0);
  19337. __o = __builtin_aarch64_set_qregoiv2df (__o, (float64x2_t) temp.val[1], 1);
  19338. __builtin_aarch64_st2df ((__builtin_aarch64_simd_df *) __a, __o);
  19339. }
  19340. __extension__ static __inline void
  19341. vst2_s8 (int8_t * __a, int8x8x2_t val)
  19342. {
  19343. __builtin_aarch64_simd_oi __o;
  19344. int8x16x2_t temp;
  19345. temp.val[0] = vcombine_s8 (val.val[0], vcreate_s8 (__AARCH64_INT64_C (0)));
  19346. temp.val[1] = vcombine_s8 (val.val[1], vcreate_s8 (__AARCH64_INT64_C (0)));
  19347. __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t) temp.val[0], 0);
  19348. __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t) temp.val[1], 1);
  19349. __builtin_aarch64_st2v8qi ((__builtin_aarch64_simd_qi *) __a, __o);
  19350. }
  19351. __extension__ static __inline void __attribute__ ((__always_inline__))
  19352. vst2_p8 (poly8_t * __a, poly8x8x2_t val)
  19353. {
  19354. __builtin_aarch64_simd_oi __o;
  19355. poly8x16x2_t temp;
  19356. temp.val[0] = vcombine_p8 (val.val[0], vcreate_p8 (__AARCH64_UINT64_C (0)));
  19357. temp.val[1] = vcombine_p8 (val.val[1], vcreate_p8 (__AARCH64_UINT64_C (0)));
  19358. __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t) temp.val[0], 0);
  19359. __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t) temp.val[1], 1);
  19360. __builtin_aarch64_st2v8qi ((__builtin_aarch64_simd_qi *) __a, __o);
  19361. }
  19362. __extension__ static __inline void __attribute__ ((__always_inline__))
  19363. vst2_s16 (int16_t * __a, int16x4x2_t val)
  19364. {
  19365. __builtin_aarch64_simd_oi __o;
  19366. int16x8x2_t temp;
  19367. temp.val[0] = vcombine_s16 (val.val[0], vcreate_s16 (__AARCH64_INT64_C (0)));
  19368. temp.val[1] = vcombine_s16 (val.val[1], vcreate_s16 (__AARCH64_INT64_C (0)));
  19369. __o = __builtin_aarch64_set_qregoiv8hi (__o, (int16x8_t) temp.val[0], 0);
  19370. __o = __builtin_aarch64_set_qregoiv8hi (__o, (int16x8_t) temp.val[1], 1);
  19371. __builtin_aarch64_st2v4hi ((__builtin_aarch64_simd_hi *) __a, __o);
  19372. }
  19373. __extension__ static __inline void __attribute__ ((__always_inline__))
  19374. vst2_p16 (poly16_t * __a, poly16x4x2_t val)
  19375. {
  19376. __builtin_aarch64_simd_oi __o;
  19377. poly16x8x2_t temp;
  19378. temp.val[0] = vcombine_p16 (val.val[0], vcreate_p16 (__AARCH64_UINT64_C (0)));
  19379. temp.val[1] = vcombine_p16 (val.val[1], vcreate_p16 (__AARCH64_UINT64_C (0)));
  19380. __o = __builtin_aarch64_set_qregoiv8hi (__o, (int16x8_t) temp.val[0], 0);
  19381. __o = __builtin_aarch64_set_qregoiv8hi (__o, (int16x8_t) temp.val[1], 1);
  19382. __builtin_aarch64_st2v4hi ((__builtin_aarch64_simd_hi *) __a, __o);
  19383. }
  19384. __extension__ static __inline void __attribute__ ((__always_inline__))
  19385. vst2_s32 (int32_t * __a, int32x2x2_t val)
  19386. {
  19387. __builtin_aarch64_simd_oi __o;
  19388. int32x4x2_t temp;
  19389. temp.val[0] = vcombine_s32 (val.val[0], vcreate_s32 (__AARCH64_INT64_C (0)));
  19390. temp.val[1] = vcombine_s32 (val.val[1], vcreate_s32 (__AARCH64_INT64_C (0)));
  19391. __o = __builtin_aarch64_set_qregoiv4si (__o, (int32x4_t) temp.val[0], 0);
  19392. __o = __builtin_aarch64_set_qregoiv4si (__o, (int32x4_t) temp.val[1], 1);
  19393. __builtin_aarch64_st2v2si ((__builtin_aarch64_simd_si *) __a, __o);
  19394. }
  19395. __extension__ static __inline void __attribute__ ((__always_inline__))
  19396. vst2_u8 (uint8_t * __a, uint8x8x2_t val)
  19397. {
  19398. __builtin_aarch64_simd_oi __o;
  19399. uint8x16x2_t temp;
  19400. temp.val[0] = vcombine_u8 (val.val[0], vcreate_u8 (__AARCH64_UINT64_C (0)));
  19401. temp.val[1] = vcombine_u8 (val.val[1], vcreate_u8 (__AARCH64_UINT64_C (0)));
  19402. __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t) temp.val[0], 0);
  19403. __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t) temp.val[1], 1);
  19404. __builtin_aarch64_st2v8qi ((__builtin_aarch64_simd_qi *) __a, __o);
  19405. }
  19406. __extension__ static __inline void __attribute__ ((__always_inline__))
  19407. vst2_u16 (uint16_t * __a, uint16x4x2_t val)
  19408. {
  19409. __builtin_aarch64_simd_oi __o;
  19410. uint16x8x2_t temp;
  19411. temp.val[0] = vcombine_u16 (val.val[0], vcreate_u16 (__AARCH64_UINT64_C (0)));
  19412. temp.val[1] = vcombine_u16 (val.val[1], vcreate_u16 (__AARCH64_UINT64_C (0)));
  19413. __o = __builtin_aarch64_set_qregoiv8hi (__o, (int16x8_t) temp.val[0], 0);
  19414. __o = __builtin_aarch64_set_qregoiv8hi (__o, (int16x8_t) temp.val[1], 1);
  19415. __builtin_aarch64_st2v4hi ((__builtin_aarch64_simd_hi *) __a, __o);
  19416. }
  19417. __extension__ static __inline void __attribute__ ((__always_inline__))
  19418. vst2_u32 (uint32_t * __a, uint32x2x2_t val)
  19419. {
  19420. __builtin_aarch64_simd_oi __o;
  19421. uint32x4x2_t temp;
  19422. temp.val[0] = vcombine_u32 (val.val[0], vcreate_u32 (__AARCH64_UINT64_C (0)));
  19423. temp.val[1] = vcombine_u32 (val.val[1], vcreate_u32 (__AARCH64_UINT64_C (0)));
  19424. __o = __builtin_aarch64_set_qregoiv4si (__o, (int32x4_t) temp.val[0], 0);
  19425. __o = __builtin_aarch64_set_qregoiv4si (__o, (int32x4_t) temp.val[1], 1);
  19426. __builtin_aarch64_st2v2si ((__builtin_aarch64_simd_si *) __a, __o);
  19427. }
  19428. __extension__ static __inline void __attribute__ ((__always_inline__))
  19429. vst2_f32 (float32_t * __a, float32x2x2_t val)
  19430. {
  19431. __builtin_aarch64_simd_oi __o;
  19432. float32x4x2_t temp;
  19433. temp.val[0] = vcombine_f32 (val.val[0], vcreate_f32 (__AARCH64_UINT64_C (0)));
  19434. temp.val[1] = vcombine_f32 (val.val[1], vcreate_f32 (__AARCH64_UINT64_C (0)));
  19435. __o = __builtin_aarch64_set_qregoiv4sf (__o, (float32x4_t) temp.val[0], 0);
  19436. __o = __builtin_aarch64_set_qregoiv4sf (__o, (float32x4_t) temp.val[1], 1);
  19437. __builtin_aarch64_st2v2sf ((__builtin_aarch64_simd_sf *) __a, __o);
  19438. }
  19439. __extension__ static __inline void __attribute__ ((__always_inline__))
  19440. vst2q_s8 (int8_t * __a, int8x16x2_t val)
  19441. {
  19442. __builtin_aarch64_simd_oi __o;
  19443. __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t) val.val[0], 0);
  19444. __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t) val.val[1], 1);
  19445. __builtin_aarch64_st2v16qi ((__builtin_aarch64_simd_qi *) __a, __o);
  19446. }
  19447. __extension__ static __inline void __attribute__ ((__always_inline__))
  19448. vst2q_p8 (poly8_t * __a, poly8x16x2_t val)
  19449. {
  19450. __builtin_aarch64_simd_oi __o;
  19451. __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t) val.val[0], 0);
  19452. __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t) val.val[1], 1);
  19453. __builtin_aarch64_st2v16qi ((__builtin_aarch64_simd_qi *) __a, __o);
  19454. }
  19455. __extension__ static __inline void __attribute__ ((__always_inline__))
  19456. vst2q_s16 (int16_t * __a, int16x8x2_t val)
  19457. {
  19458. __builtin_aarch64_simd_oi __o;
  19459. __o = __builtin_aarch64_set_qregoiv8hi (__o, (int16x8_t) val.val[0], 0);
  19460. __o = __builtin_aarch64_set_qregoiv8hi (__o, (int16x8_t) val.val[1], 1);
  19461. __builtin_aarch64_st2v8hi ((__builtin_aarch64_simd_hi *) __a, __o);
  19462. }
  19463. __extension__ static __inline void __attribute__ ((__always_inline__))
  19464. vst2q_p16 (poly16_t * __a, poly16x8x2_t val)
  19465. {
  19466. __builtin_aarch64_simd_oi __o;
  19467. __o = __builtin_aarch64_set_qregoiv8hi (__o, (int16x8_t) val.val[0], 0);
  19468. __o = __builtin_aarch64_set_qregoiv8hi (__o, (int16x8_t) val.val[1], 1);
  19469. __builtin_aarch64_st2v8hi ((__builtin_aarch64_simd_hi *) __a, __o);
  19470. }
  19471. __extension__ static __inline void __attribute__ ((__always_inline__))
  19472. vst2q_s32 (int32_t * __a, int32x4x2_t val)
  19473. {
  19474. __builtin_aarch64_simd_oi __o;
  19475. __o = __builtin_aarch64_set_qregoiv4si (__o, (int32x4_t) val.val[0], 0);
  19476. __o = __builtin_aarch64_set_qregoiv4si (__o, (int32x4_t) val.val[1], 1);
  19477. __builtin_aarch64_st2v4si ((__builtin_aarch64_simd_si *) __a, __o);
  19478. }
  19479. __extension__ static __inline void __attribute__ ((__always_inline__))
  19480. vst2q_s64 (int64_t * __a, int64x2x2_t val)
  19481. {
  19482. __builtin_aarch64_simd_oi __o;
  19483. __o = __builtin_aarch64_set_qregoiv2di (__o, (int64x2_t) val.val[0], 0);
  19484. __o = __builtin_aarch64_set_qregoiv2di (__o, (int64x2_t) val.val[1], 1);
  19485. __builtin_aarch64_st2v2di ((__builtin_aarch64_simd_di *) __a, __o);
  19486. }
  19487. __extension__ static __inline void __attribute__ ((__always_inline__))
  19488. vst2q_u8 (uint8_t * __a, uint8x16x2_t val)
  19489. {
  19490. __builtin_aarch64_simd_oi __o;
  19491. __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t) val.val[0], 0);
  19492. __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t) val.val[1], 1);
  19493. __builtin_aarch64_st2v16qi ((__builtin_aarch64_simd_qi *) __a, __o);
  19494. }
  19495. __extension__ static __inline void __attribute__ ((__always_inline__))
  19496. vst2q_u16 (uint16_t * __a, uint16x8x2_t val)
  19497. {
  19498. __builtin_aarch64_simd_oi __o;
  19499. __o = __builtin_aarch64_set_qregoiv8hi (__o, (int16x8_t) val.val[0], 0);
  19500. __o = __builtin_aarch64_set_qregoiv8hi (__o, (int16x8_t) val.val[1], 1);
  19501. __builtin_aarch64_st2v8hi ((__builtin_aarch64_simd_hi *) __a, __o);
  19502. }
  19503. __extension__ static __inline void __attribute__ ((__always_inline__))
  19504. vst2q_u32 (uint32_t * __a, uint32x4x2_t val)
  19505. {
  19506. __builtin_aarch64_simd_oi __o;
  19507. __o = __builtin_aarch64_set_qregoiv4si (__o, (int32x4_t) val.val[0], 0);
  19508. __o = __builtin_aarch64_set_qregoiv4si (__o, (int32x4_t) val.val[1], 1);
  19509. __builtin_aarch64_st2v4si ((__builtin_aarch64_simd_si *) __a, __o);
  19510. }
  19511. __extension__ static __inline void __attribute__ ((__always_inline__))
  19512. vst2q_u64 (uint64_t * __a, uint64x2x2_t val)
  19513. {
  19514. __builtin_aarch64_simd_oi __o;
  19515. __o = __builtin_aarch64_set_qregoiv2di (__o, (int64x2_t) val.val[0], 0);
  19516. __o = __builtin_aarch64_set_qregoiv2di (__o, (int64x2_t) val.val[1], 1);
  19517. __builtin_aarch64_st2v2di ((__builtin_aarch64_simd_di *) __a, __o);
  19518. }
  19519. __extension__ static __inline void __attribute__ ((__always_inline__))
  19520. vst2q_f32 (float32_t * __a, float32x4x2_t val)
  19521. {
  19522. __builtin_aarch64_simd_oi __o;
  19523. __o = __builtin_aarch64_set_qregoiv4sf (__o, (float32x4_t) val.val[0], 0);
  19524. __o = __builtin_aarch64_set_qregoiv4sf (__o, (float32x4_t) val.val[1], 1);
  19525. __builtin_aarch64_st2v4sf ((__builtin_aarch64_simd_sf *) __a, __o);
  19526. }
  19527. __extension__ static __inline void __attribute__ ((__always_inline__))
  19528. vst2q_f64 (float64_t * __a, float64x2x2_t val)
  19529. {
  19530. __builtin_aarch64_simd_oi __o;
  19531. __o = __builtin_aarch64_set_qregoiv2df (__o, (float64x2_t) val.val[0], 0);
  19532. __o = __builtin_aarch64_set_qregoiv2df (__o, (float64x2_t) val.val[1], 1);
  19533. __builtin_aarch64_st2v2df ((__builtin_aarch64_simd_df *) __a, __o);
  19534. }
  19535. __extension__ static __inline void
  19536. vst3_s64 (int64_t * __a, int64x1x3_t val)
  19537. {
  19538. __builtin_aarch64_simd_ci __o;
  19539. int64x2x3_t temp;
  19540. temp.val[0] = vcombine_s64 (val.val[0], vcreate_s64 (__AARCH64_INT64_C (0)));
  19541. temp.val[1] = vcombine_s64 (val.val[1], vcreate_s64 (__AARCH64_INT64_C (0)));
  19542. temp.val[2] = vcombine_s64 (val.val[2], vcreate_s64 (__AARCH64_INT64_C (0)));
  19543. __o = __builtin_aarch64_set_qregciv2di (__o, (int64x2_t) temp.val[0], 0);
  19544. __o = __builtin_aarch64_set_qregciv2di (__o, (int64x2_t) temp.val[1], 1);
  19545. __o = __builtin_aarch64_set_qregciv2di (__o, (int64x2_t) temp.val[2], 2);
  19546. __builtin_aarch64_st3di ((__builtin_aarch64_simd_di *) __a, __o);
  19547. }
  19548. __extension__ static __inline void
  19549. vst3_u64 (uint64_t * __a, uint64x1x3_t val)
  19550. {
  19551. __builtin_aarch64_simd_ci __o;
  19552. uint64x2x3_t temp;
  19553. temp.val[0] = vcombine_u64 (val.val[0], vcreate_u64 (__AARCH64_UINT64_C (0)));
  19554. temp.val[1] = vcombine_u64 (val.val[1], vcreate_u64 (__AARCH64_UINT64_C (0)));
  19555. temp.val[2] = vcombine_u64 (val.val[2], vcreate_u64 (__AARCH64_UINT64_C (0)));
  19556. __o = __builtin_aarch64_set_qregciv2di (__o, (int64x2_t) temp.val[0], 0);
  19557. __o = __builtin_aarch64_set_qregciv2di (__o, (int64x2_t) temp.val[1], 1);
  19558. __o = __builtin_aarch64_set_qregciv2di (__o, (int64x2_t) temp.val[2], 2);
  19559. __builtin_aarch64_st3di ((__builtin_aarch64_simd_di *) __a, __o);
  19560. }
  19561. __extension__ static __inline void
  19562. vst3_f64 (float64_t * __a, float64x1x3_t val)
  19563. {
  19564. __builtin_aarch64_simd_ci __o;
  19565. float64x2x3_t temp;
  19566. temp.val[0] = vcombine_f64 (val.val[0], vcreate_f64 (__AARCH64_UINT64_C (0)));
  19567. temp.val[1] = vcombine_f64 (val.val[1], vcreate_f64 (__AARCH64_UINT64_C (0)));
  19568. temp.val[2] = vcombine_f64 (val.val[2], vcreate_f64 (__AARCH64_UINT64_C (0)));
  19569. __o = __builtin_aarch64_set_qregciv2df (__o, (float64x2_t) temp.val[0], 0);
  19570. __o = __builtin_aarch64_set_qregciv2df (__o, (float64x2_t) temp.val[1], 1);
  19571. __o = __builtin_aarch64_set_qregciv2df (__o, (float64x2_t) temp.val[2], 2);
  19572. __builtin_aarch64_st3df ((__builtin_aarch64_simd_df *) __a, __o);
  19573. }
  19574. __extension__ static __inline void
  19575. vst3_s8 (int8_t * __a, int8x8x3_t val)
  19576. {
  19577. __builtin_aarch64_simd_ci __o;
  19578. int8x16x3_t temp;
  19579. temp.val[0] = vcombine_s8 (val.val[0], vcreate_s8 (__AARCH64_INT64_C (0)));
  19580. temp.val[1] = vcombine_s8 (val.val[1], vcreate_s8 (__AARCH64_INT64_C (0)));
  19581. temp.val[2] = vcombine_s8 (val.val[2], vcreate_s8 (__AARCH64_INT64_C (0)));
  19582. __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t) temp.val[0], 0);
  19583. __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t) temp.val[1], 1);
  19584. __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t) temp.val[2], 2);
  19585. __builtin_aarch64_st3v8qi ((__builtin_aarch64_simd_qi *) __a, __o);
  19586. }
  19587. __extension__ static __inline void __attribute__ ((__always_inline__))
  19588. vst3_p8 (poly8_t * __a, poly8x8x3_t val)
  19589. {
  19590. __builtin_aarch64_simd_ci __o;
  19591. poly8x16x3_t temp;
  19592. temp.val[0] = vcombine_p8 (val.val[0], vcreate_p8 (__AARCH64_UINT64_C (0)));
  19593. temp.val[1] = vcombine_p8 (val.val[1], vcreate_p8 (__AARCH64_UINT64_C (0)));
  19594. temp.val[2] = vcombine_p8 (val.val[2], vcreate_p8 (__AARCH64_UINT64_C (0)));
  19595. __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t) temp.val[0], 0);
  19596. __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t) temp.val[1], 1);
  19597. __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t) temp.val[2], 2);
  19598. __builtin_aarch64_st3v8qi ((__builtin_aarch64_simd_qi *) __a, __o);
  19599. }
  19600. __extension__ static __inline void __attribute__ ((__always_inline__))
  19601. vst3_s16 (int16_t * __a, int16x4x3_t val)
  19602. {
  19603. __builtin_aarch64_simd_ci __o;
  19604. int16x8x3_t temp;
  19605. temp.val[0] = vcombine_s16 (val.val[0], vcreate_s16 (__AARCH64_INT64_C (0)));
  19606. temp.val[1] = vcombine_s16 (val.val[1], vcreate_s16 (__AARCH64_INT64_C (0)));
  19607. temp.val[2] = vcombine_s16 (val.val[2], vcreate_s16 (__AARCH64_INT64_C (0)));
  19608. __o = __builtin_aarch64_set_qregciv8hi (__o, (int16x8_t) temp.val[0], 0);
  19609. __o = __builtin_aarch64_set_qregciv8hi (__o, (int16x8_t) temp.val[1], 1);
  19610. __o = __builtin_aarch64_set_qregciv8hi (__o, (int16x8_t) temp.val[2], 2);
  19611. __builtin_aarch64_st3v4hi ((__builtin_aarch64_simd_hi *) __a, __o);
  19612. }
  19613. __extension__ static __inline void __attribute__ ((__always_inline__))
  19614. vst3_p16 (poly16_t * __a, poly16x4x3_t val)
  19615. {
  19616. __builtin_aarch64_simd_ci __o;
  19617. poly16x8x3_t temp;
  19618. temp.val[0] = vcombine_p16 (val.val[0], vcreate_p16 (__AARCH64_UINT64_C (0)));
  19619. temp.val[1] = vcombine_p16 (val.val[1], vcreate_p16 (__AARCH64_UINT64_C (0)));
  19620. temp.val[2] = vcombine_p16 (val.val[2], vcreate_p16 (__AARCH64_UINT64_C (0)));
  19621. __o = __builtin_aarch64_set_qregciv8hi (__o, (int16x8_t) temp.val[0], 0);
  19622. __o = __builtin_aarch64_set_qregciv8hi (__o, (int16x8_t) temp.val[1], 1);
  19623. __o = __builtin_aarch64_set_qregciv8hi (__o, (int16x8_t) temp.val[2], 2);
  19624. __builtin_aarch64_st3v4hi ((__builtin_aarch64_simd_hi *) __a, __o);
  19625. }
  19626. __extension__ static __inline void __attribute__ ((__always_inline__))
  19627. vst3_s32 (int32_t * __a, int32x2x3_t val)
  19628. {
  19629. __builtin_aarch64_simd_ci __o;
  19630. int32x4x3_t temp;
  19631. temp.val[0] = vcombine_s32 (val.val[0], vcreate_s32 (__AARCH64_INT64_C (0)));
  19632. temp.val[1] = vcombine_s32 (val.val[1], vcreate_s32 (__AARCH64_INT64_C (0)));
  19633. temp.val[2] = vcombine_s32 (val.val[2], vcreate_s32 (__AARCH64_INT64_C (0)));
  19634. __o = __builtin_aarch64_set_qregciv4si (__o, (int32x4_t) temp.val[0], 0);
  19635. __o = __builtin_aarch64_set_qregciv4si (__o, (int32x4_t) temp.val[1], 1);
  19636. __o = __builtin_aarch64_set_qregciv4si (__o, (int32x4_t) temp.val[2], 2);
  19637. __builtin_aarch64_st3v2si ((__builtin_aarch64_simd_si *) __a, __o);
  19638. }
  19639. __extension__ static __inline void __attribute__ ((__always_inline__))
  19640. vst3_u8 (uint8_t * __a, uint8x8x3_t val)
  19641. {
  19642. __builtin_aarch64_simd_ci __o;
  19643. uint8x16x3_t temp;
  19644. temp.val[0] = vcombine_u8 (val.val[0], vcreate_u8 (__AARCH64_UINT64_C (0)));
  19645. temp.val[1] = vcombine_u8 (val.val[1], vcreate_u8 (__AARCH64_UINT64_C (0)));
  19646. temp.val[2] = vcombine_u8 (val.val[2], vcreate_u8 (__AARCH64_UINT64_C (0)));
  19647. __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t) temp.val[0], 0);
  19648. __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t) temp.val[1], 1);
  19649. __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t) temp.val[2], 2);
  19650. __builtin_aarch64_st3v8qi ((__builtin_aarch64_simd_qi *) __a, __o);
  19651. }
  19652. __extension__ static __inline void __attribute__ ((__always_inline__))
  19653. vst3_u16 (uint16_t * __a, uint16x4x3_t val)
  19654. {
  19655. __builtin_aarch64_simd_ci __o;
  19656. uint16x8x3_t temp;
  19657. temp.val[0] = vcombine_u16 (val.val[0], vcreate_u16 (__AARCH64_UINT64_C (0)));
  19658. temp.val[1] = vcombine_u16 (val.val[1], vcreate_u16 (__AARCH64_UINT64_C (0)));
  19659. temp.val[2] = vcombine_u16 (val.val[2], vcreate_u16 (__AARCH64_UINT64_C (0)));
  19660. __o = __builtin_aarch64_set_qregciv8hi (__o, (int16x8_t) temp.val[0], 0);
  19661. __o = __builtin_aarch64_set_qregciv8hi (__o, (int16x8_t) temp.val[1], 1);
  19662. __o = __builtin_aarch64_set_qregciv8hi (__o, (int16x8_t) temp.val[2], 2);
  19663. __builtin_aarch64_st3v4hi ((__builtin_aarch64_simd_hi *) __a, __o);
  19664. }
  19665. __extension__ static __inline void __attribute__ ((__always_inline__))
  19666. vst3_u32 (uint32_t * __a, uint32x2x3_t val)
  19667. {
  19668. __builtin_aarch64_simd_ci __o;
  19669. uint32x4x3_t temp;
  19670. temp.val[0] = vcombine_u32 (val.val[0], vcreate_u32 (__AARCH64_UINT64_C (0)));
  19671. temp.val[1] = vcombine_u32 (val.val[1], vcreate_u32 (__AARCH64_UINT64_C (0)));
  19672. temp.val[2] = vcombine_u32 (val.val[2], vcreate_u32 (__AARCH64_UINT64_C (0)));
  19673. __o = __builtin_aarch64_set_qregciv4si (__o, (int32x4_t) temp.val[0], 0);
  19674. __o = __builtin_aarch64_set_qregciv4si (__o, (int32x4_t) temp.val[1], 1);
  19675. __o = __builtin_aarch64_set_qregciv4si (__o, (int32x4_t) temp.val[2], 2);
  19676. __builtin_aarch64_st3v2si ((__builtin_aarch64_simd_si *) __a, __o);
  19677. }
  19678. __extension__ static __inline void __attribute__ ((__always_inline__))
  19679. vst3_f32 (float32_t * __a, float32x2x3_t val)
  19680. {
  19681. __builtin_aarch64_simd_ci __o;
  19682. float32x4x3_t temp;
  19683. temp.val[0] = vcombine_f32 (val.val[0], vcreate_f32 (__AARCH64_UINT64_C (0)));
  19684. temp.val[1] = vcombine_f32 (val.val[1], vcreate_f32 (__AARCH64_UINT64_C (0)));
  19685. temp.val[2] = vcombine_f32 (val.val[2], vcreate_f32 (__AARCH64_UINT64_C (0)));
  19686. __o = __builtin_aarch64_set_qregciv4sf (__o, (float32x4_t) temp.val[0], 0);
  19687. __o = __builtin_aarch64_set_qregciv4sf (__o, (float32x4_t) temp.val[1], 1);
  19688. __o = __builtin_aarch64_set_qregciv4sf (__o, (float32x4_t) temp.val[2], 2);
  19689. __builtin_aarch64_st3v2sf ((__builtin_aarch64_simd_sf *) __a, __o);
  19690. }
  19691. __extension__ static __inline void __attribute__ ((__always_inline__))
  19692. vst3q_s8 (int8_t * __a, int8x16x3_t val)
  19693. {
  19694. __builtin_aarch64_simd_ci __o;
  19695. __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t) val.val[0], 0);
  19696. __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t) val.val[1], 1);
  19697. __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t) val.val[2], 2);
  19698. __builtin_aarch64_st3v16qi ((__builtin_aarch64_simd_qi *) __a, __o);
  19699. }
  19700. __extension__ static __inline void __attribute__ ((__always_inline__))
  19701. vst3q_p8 (poly8_t * __a, poly8x16x3_t val)
  19702. {
  19703. __builtin_aarch64_simd_ci __o;
  19704. __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t) val.val[0], 0);
  19705. __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t) val.val[1], 1);
  19706. __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t) val.val[2], 2);
  19707. __builtin_aarch64_st3v16qi ((__builtin_aarch64_simd_qi *) __a, __o);
  19708. }
  19709. __extension__ static __inline void __attribute__ ((__always_inline__))
  19710. vst3q_s16 (int16_t * __a, int16x8x3_t val)
  19711. {
  19712. __builtin_aarch64_simd_ci __o;
  19713. __o = __builtin_aarch64_set_qregciv8hi (__o, (int16x8_t) val.val[0], 0);
  19714. __o = __builtin_aarch64_set_qregciv8hi (__o, (int16x8_t) val.val[1], 1);
  19715. __o = __builtin_aarch64_set_qregciv8hi (__o, (int16x8_t) val.val[2], 2);
  19716. __builtin_aarch64_st3v8hi ((__builtin_aarch64_simd_hi *) __a, __o);
  19717. }
  19718. __extension__ static __inline void __attribute__ ((__always_inline__))
  19719. vst3q_p16 (poly16_t * __a, poly16x8x3_t val)
  19720. {
  19721. __builtin_aarch64_simd_ci __o;
  19722. __o = __builtin_aarch64_set_qregciv8hi (__o, (int16x8_t) val.val[0], 0);
  19723. __o = __builtin_aarch64_set_qregciv8hi (__o, (int16x8_t) val.val[1], 1);
  19724. __o = __builtin_aarch64_set_qregciv8hi (__o, (int16x8_t) val.val[2], 2);
  19725. __builtin_aarch64_st3v8hi ((__builtin_aarch64_simd_hi *) __a, __o);
  19726. }
  19727. __extension__ static __inline void __attribute__ ((__always_inline__))
  19728. vst3q_s32 (int32_t * __a, int32x4x3_t val)
  19729. {
  19730. __builtin_aarch64_simd_ci __o;
  19731. __o = __builtin_aarch64_set_qregciv4si (__o, (int32x4_t) val.val[0], 0);
  19732. __o = __builtin_aarch64_set_qregciv4si (__o, (int32x4_t) val.val[1], 1);
  19733. __o = __builtin_aarch64_set_qregciv4si (__o, (int32x4_t) val.val[2], 2);
  19734. __builtin_aarch64_st3v4si ((__builtin_aarch64_simd_si *) __a, __o);
  19735. }
  19736. __extension__ static __inline void __attribute__ ((__always_inline__))
  19737. vst3q_s64 (int64_t * __a, int64x2x3_t val)
  19738. {
  19739. __builtin_aarch64_simd_ci __o;
  19740. __o = __builtin_aarch64_set_qregciv2di (__o, (int64x2_t) val.val[0], 0);
  19741. __o = __builtin_aarch64_set_qregciv2di (__o, (int64x2_t) val.val[1], 1);
  19742. __o = __builtin_aarch64_set_qregciv2di (__o, (int64x2_t) val.val[2], 2);
  19743. __builtin_aarch64_st3v2di ((__builtin_aarch64_simd_di *) __a, __o);
  19744. }
  19745. __extension__ static __inline void __attribute__ ((__always_inline__))
  19746. vst3q_u8 (uint8_t * __a, uint8x16x3_t val)
  19747. {
  19748. __builtin_aarch64_simd_ci __o;
  19749. __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t) val.val[0], 0);
  19750. __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t) val.val[1], 1);
  19751. __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t) val.val[2], 2);
  19752. __builtin_aarch64_st3v16qi ((__builtin_aarch64_simd_qi *) __a, __o);
  19753. }
  19754. __extension__ static __inline void __attribute__ ((__always_inline__))
  19755. vst3q_u16 (uint16_t * __a, uint16x8x3_t val)
  19756. {
  19757. __builtin_aarch64_simd_ci __o;
  19758. __o = __builtin_aarch64_set_qregciv8hi (__o, (int16x8_t) val.val[0], 0);
  19759. __o = __builtin_aarch64_set_qregciv8hi (__o, (int16x8_t) val.val[1], 1);
  19760. __o = __builtin_aarch64_set_qregciv8hi (__o, (int16x8_t) val.val[2], 2);
  19761. __builtin_aarch64_st3v8hi ((__builtin_aarch64_simd_hi *) __a, __o);
  19762. }
  19763. __extension__ static __inline void __attribute__ ((__always_inline__))
  19764. vst3q_u32 (uint32_t * __a, uint32x4x3_t val)
  19765. {
  19766. __builtin_aarch64_simd_ci __o;
  19767. __o = __builtin_aarch64_set_qregciv4si (__o, (int32x4_t) val.val[0], 0);
  19768. __o = __builtin_aarch64_set_qregciv4si (__o, (int32x4_t) val.val[1], 1);
  19769. __o = __builtin_aarch64_set_qregciv4si (__o, (int32x4_t) val.val[2], 2);
  19770. __builtin_aarch64_st3v4si ((__builtin_aarch64_simd_si *) __a, __o);
  19771. }
  19772. __extension__ static __inline void __attribute__ ((__always_inline__))
  19773. vst3q_u64 (uint64_t * __a, uint64x2x3_t val)
  19774. {
  19775. __builtin_aarch64_simd_ci __o;
  19776. __o = __builtin_aarch64_set_qregciv2di (__o, (int64x2_t) val.val[0], 0);
  19777. __o = __builtin_aarch64_set_qregciv2di (__o, (int64x2_t) val.val[1], 1);
  19778. __o = __builtin_aarch64_set_qregciv2di (__o, (int64x2_t) val.val[2], 2);
  19779. __builtin_aarch64_st3v2di ((__builtin_aarch64_simd_di *) __a, __o);
  19780. }
  19781. __extension__ static __inline void __attribute__ ((__always_inline__))
  19782. vst3q_f32 (float32_t * __a, float32x4x3_t val)
  19783. {
  19784. __builtin_aarch64_simd_ci __o;
  19785. __o = __builtin_aarch64_set_qregciv4sf (__o, (float32x4_t) val.val[0], 0);
  19786. __o = __builtin_aarch64_set_qregciv4sf (__o, (float32x4_t) val.val[1], 1);
  19787. __o = __builtin_aarch64_set_qregciv4sf (__o, (float32x4_t) val.val[2], 2);
  19788. __builtin_aarch64_st3v4sf ((__builtin_aarch64_simd_sf *) __a, __o);
  19789. }
  19790. __extension__ static __inline void __attribute__ ((__always_inline__))
  19791. vst3q_f64 (float64_t * __a, float64x2x3_t val)
  19792. {
  19793. __builtin_aarch64_simd_ci __o;
  19794. __o = __builtin_aarch64_set_qregciv2df (__o, (float64x2_t) val.val[0], 0);
  19795. __o = __builtin_aarch64_set_qregciv2df (__o, (float64x2_t) val.val[1], 1);
  19796. __o = __builtin_aarch64_set_qregciv2df (__o, (float64x2_t) val.val[2], 2);
  19797. __builtin_aarch64_st3v2df ((__builtin_aarch64_simd_df *) __a, __o);
  19798. }
  19799. __extension__ static __inline void
  19800. vst4_s64 (int64_t * __a, int64x1x4_t val)
  19801. {
  19802. __builtin_aarch64_simd_xi __o;
  19803. int64x2x4_t temp;
  19804. temp.val[0] = vcombine_s64 (val.val[0], vcreate_s64 (__AARCH64_INT64_C (0)));
  19805. temp.val[1] = vcombine_s64 (val.val[1], vcreate_s64 (__AARCH64_INT64_C (0)));
  19806. temp.val[2] = vcombine_s64 (val.val[2], vcreate_s64 (__AARCH64_INT64_C (0)));
  19807. temp.val[3] = vcombine_s64 (val.val[3], vcreate_s64 (__AARCH64_INT64_C (0)));
  19808. __o = __builtin_aarch64_set_qregxiv2di (__o, (int64x2_t) temp.val[0], 0);
  19809. __o = __builtin_aarch64_set_qregxiv2di (__o, (int64x2_t) temp.val[1], 1);
  19810. __o = __builtin_aarch64_set_qregxiv2di (__o, (int64x2_t) temp.val[2], 2);
  19811. __o = __builtin_aarch64_set_qregxiv2di (__o, (int64x2_t) temp.val[3], 3);
  19812. __builtin_aarch64_st4di ((__builtin_aarch64_simd_di *) __a, __o);
  19813. }
  19814. __extension__ static __inline void
  19815. vst4_u64 (uint64_t * __a, uint64x1x4_t val)
  19816. {
  19817. __builtin_aarch64_simd_xi __o;
  19818. uint64x2x4_t temp;
  19819. temp.val[0] = vcombine_u64 (val.val[0], vcreate_u64 (__AARCH64_UINT64_C (0)));
  19820. temp.val[1] = vcombine_u64 (val.val[1], vcreate_u64 (__AARCH64_UINT64_C (0)));
  19821. temp.val[2] = vcombine_u64 (val.val[2], vcreate_u64 (__AARCH64_UINT64_C (0)));
  19822. temp.val[3] = vcombine_u64 (val.val[3], vcreate_u64 (__AARCH64_UINT64_C (0)));
  19823. __o = __builtin_aarch64_set_qregxiv2di (__o, (int64x2_t) temp.val[0], 0);
  19824. __o = __builtin_aarch64_set_qregxiv2di (__o, (int64x2_t) temp.val[1], 1);
  19825. __o = __builtin_aarch64_set_qregxiv2di (__o, (int64x2_t) temp.val[2], 2);
  19826. __o = __builtin_aarch64_set_qregxiv2di (__o, (int64x2_t) temp.val[3], 3);
  19827. __builtin_aarch64_st4di ((__builtin_aarch64_simd_di *) __a, __o);
  19828. }
  19829. __extension__ static __inline void
  19830. vst4_f64 (float64_t * __a, float64x1x4_t val)
  19831. {
  19832. __builtin_aarch64_simd_xi __o;
  19833. float64x2x4_t temp;
  19834. temp.val[0] = vcombine_f64 (val.val[0], vcreate_f64 (__AARCH64_UINT64_C (0)));
  19835. temp.val[1] = vcombine_f64 (val.val[1], vcreate_f64 (__AARCH64_UINT64_C (0)));
  19836. temp.val[2] = vcombine_f64 (val.val[2], vcreate_f64 (__AARCH64_UINT64_C (0)));
  19837. temp.val[3] = vcombine_f64 (val.val[3], vcreate_f64 (__AARCH64_UINT64_C (0)));
  19838. __o = __builtin_aarch64_set_qregxiv2df (__o, (float64x2_t) temp.val[0], 0);
  19839. __o = __builtin_aarch64_set_qregxiv2df (__o, (float64x2_t) temp.val[1], 1);
  19840. __o = __builtin_aarch64_set_qregxiv2df (__o, (float64x2_t) temp.val[2], 2);
  19841. __o = __builtin_aarch64_set_qregxiv2df (__o, (float64x2_t) temp.val[3], 3);
  19842. __builtin_aarch64_st4df ((__builtin_aarch64_simd_df *) __a, __o);
  19843. }
  19844. __extension__ static __inline void
  19845. vst4_s8 (int8_t * __a, int8x8x4_t val)
  19846. {
  19847. __builtin_aarch64_simd_xi __o;
  19848. int8x16x4_t temp;
  19849. temp.val[0] = vcombine_s8 (val.val[0], vcreate_s8 (__AARCH64_INT64_C (0)));
  19850. temp.val[1] = vcombine_s8 (val.val[1], vcreate_s8 (__AARCH64_INT64_C (0)));
  19851. temp.val[2] = vcombine_s8 (val.val[2], vcreate_s8 (__AARCH64_INT64_C (0)));
  19852. temp.val[3] = vcombine_s8 (val.val[3], vcreate_s8 (__AARCH64_INT64_C (0)));
  19853. __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t) temp.val[0], 0);
  19854. __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t) temp.val[1], 1);
  19855. __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t) temp.val[2], 2);
  19856. __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t) temp.val[3], 3);
  19857. __builtin_aarch64_st4v8qi ((__builtin_aarch64_simd_qi *) __a, __o);
  19858. }
  19859. __extension__ static __inline void __attribute__ ((__always_inline__))
  19860. vst4_p8 (poly8_t * __a, poly8x8x4_t val)
  19861. {
  19862. __builtin_aarch64_simd_xi __o;
  19863. poly8x16x4_t temp;
  19864. temp.val[0] = vcombine_p8 (val.val[0], vcreate_p8 (__AARCH64_UINT64_C (0)));
  19865. temp.val[1] = vcombine_p8 (val.val[1], vcreate_p8 (__AARCH64_UINT64_C (0)));
  19866. temp.val[2] = vcombine_p8 (val.val[2], vcreate_p8 (__AARCH64_UINT64_C (0)));
  19867. temp.val[3] = vcombine_p8 (val.val[3], vcreate_p8 (__AARCH64_UINT64_C (0)));
  19868. __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t) temp.val[0], 0);
  19869. __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t) temp.val[1], 1);
  19870. __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t) temp.val[2], 2);
  19871. __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t) temp.val[3], 3);
  19872. __builtin_aarch64_st4v8qi ((__builtin_aarch64_simd_qi *) __a, __o);
  19873. }
  19874. __extension__ static __inline void __attribute__ ((__always_inline__))
  19875. vst4_s16 (int16_t * __a, int16x4x4_t val)
  19876. {
  19877. __builtin_aarch64_simd_xi __o;
  19878. int16x8x4_t temp;
  19879. temp.val[0] = vcombine_s16 (val.val[0], vcreate_s16 (__AARCH64_INT64_C (0)));
  19880. temp.val[1] = vcombine_s16 (val.val[1], vcreate_s16 (__AARCH64_INT64_C (0)));
  19881. temp.val[2] = vcombine_s16 (val.val[2], vcreate_s16 (__AARCH64_INT64_C (0)));
  19882. temp.val[3] = vcombine_s16 (val.val[3], vcreate_s16 (__AARCH64_INT64_C (0)));
  19883. __o = __builtin_aarch64_set_qregxiv8hi (__o, (int16x8_t) temp.val[0], 0);
  19884. __o = __builtin_aarch64_set_qregxiv8hi (__o, (int16x8_t) temp.val[1], 1);
  19885. __o = __builtin_aarch64_set_qregxiv8hi (__o, (int16x8_t) temp.val[2], 2);
  19886. __o = __builtin_aarch64_set_qregxiv8hi (__o, (int16x8_t) temp.val[3], 3);
  19887. __builtin_aarch64_st4v4hi ((__builtin_aarch64_simd_hi *) __a, __o);
  19888. }
  19889. __extension__ static __inline void __attribute__ ((__always_inline__))
  19890. vst4_p16 (poly16_t * __a, poly16x4x4_t val)
  19891. {
  19892. __builtin_aarch64_simd_xi __o;
  19893. poly16x8x4_t temp;
  19894. temp.val[0] = vcombine_p16 (val.val[0], vcreate_p16 (__AARCH64_UINT64_C (0)));
  19895. temp.val[1] = vcombine_p16 (val.val[1], vcreate_p16 (__AARCH64_UINT64_C (0)));
  19896. temp.val[2] = vcombine_p16 (val.val[2], vcreate_p16 (__AARCH64_UINT64_C (0)));
  19897. temp.val[3] = vcombine_p16 (val.val[3], vcreate_p16 (__AARCH64_UINT64_C (0)));
  19898. __o = __builtin_aarch64_set_qregxiv8hi (__o, (int16x8_t) temp.val[0], 0);
  19899. __o = __builtin_aarch64_set_qregxiv8hi (__o, (int16x8_t) temp.val[1], 1);
  19900. __o = __builtin_aarch64_set_qregxiv8hi (__o, (int16x8_t) temp.val[2], 2);
  19901. __o = __builtin_aarch64_set_qregxiv8hi (__o, (int16x8_t) temp.val[3], 3);
  19902. __builtin_aarch64_st4v4hi ((__builtin_aarch64_simd_hi *) __a, __o);
  19903. }
  19904. __extension__ static __inline void __attribute__ ((__always_inline__))
  19905. vst4_s32 (int32_t * __a, int32x2x4_t val)
  19906. {
  19907. __builtin_aarch64_simd_xi __o;
  19908. int32x4x4_t temp;
  19909. temp.val[0] = vcombine_s32 (val.val[0], vcreate_s32 (__AARCH64_INT64_C (0)));
  19910. temp.val[1] = vcombine_s32 (val.val[1], vcreate_s32 (__AARCH64_INT64_C (0)));
  19911. temp.val[2] = vcombine_s32 (val.val[2], vcreate_s32 (__AARCH64_INT64_C (0)));
  19912. temp.val[3] = vcombine_s32 (val.val[3], vcreate_s32 (__AARCH64_INT64_C (0)));
  19913. __o = __builtin_aarch64_set_qregxiv4si (__o, (int32x4_t) temp.val[0], 0);
  19914. __o = __builtin_aarch64_set_qregxiv4si (__o, (int32x4_t) temp.val[1], 1);
  19915. __o = __builtin_aarch64_set_qregxiv4si (__o, (int32x4_t) temp.val[2], 2);
  19916. __o = __builtin_aarch64_set_qregxiv4si (__o, (int32x4_t) temp.val[3], 3);
  19917. __builtin_aarch64_st4v2si ((__builtin_aarch64_simd_si *) __a, __o);
  19918. }
  19919. __extension__ static __inline void __attribute__ ((__always_inline__))
  19920. vst4_u8 (uint8_t * __a, uint8x8x4_t val)
  19921. {
  19922. __builtin_aarch64_simd_xi __o;
  19923. uint8x16x4_t temp;
  19924. temp.val[0] = vcombine_u8 (val.val[0], vcreate_u8 (__AARCH64_UINT64_C (0)));
  19925. temp.val[1] = vcombine_u8 (val.val[1], vcreate_u8 (__AARCH64_UINT64_C (0)));
  19926. temp.val[2] = vcombine_u8 (val.val[2], vcreate_u8 (__AARCH64_UINT64_C (0)));
  19927. temp.val[3] = vcombine_u8 (val.val[3], vcreate_u8 (__AARCH64_UINT64_C (0)));
  19928. __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t) temp.val[0], 0);
  19929. __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t) temp.val[1], 1);
  19930. __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t) temp.val[2], 2);
  19931. __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t) temp.val[3], 3);
  19932. __builtin_aarch64_st4v8qi ((__builtin_aarch64_simd_qi *) __a, __o);
  19933. }
  19934. __extension__ static __inline void __attribute__ ((__always_inline__))
  19935. vst4_u16 (uint16_t * __a, uint16x4x4_t val)
  19936. {
  19937. __builtin_aarch64_simd_xi __o;
  19938. uint16x8x4_t temp;
  19939. temp.val[0] = vcombine_u16 (val.val[0], vcreate_u16 (__AARCH64_UINT64_C (0)));
  19940. temp.val[1] = vcombine_u16 (val.val[1], vcreate_u16 (__AARCH64_UINT64_C (0)));
  19941. temp.val[2] = vcombine_u16 (val.val[2], vcreate_u16 (__AARCH64_UINT64_C (0)));
  19942. temp.val[3] = vcombine_u16 (val.val[3], vcreate_u16 (__AARCH64_UINT64_C (0)));
  19943. __o = __builtin_aarch64_set_qregxiv8hi (__o, (int16x8_t) temp.val[0], 0);
  19944. __o = __builtin_aarch64_set_qregxiv8hi (__o, (int16x8_t) temp.val[1], 1);
  19945. __o = __builtin_aarch64_set_qregxiv8hi (__o, (int16x8_t) temp.val[2], 2);
  19946. __o = __builtin_aarch64_set_qregxiv8hi (__o, (int16x8_t) temp.val[3], 3);
  19947. __builtin_aarch64_st4v4hi ((__builtin_aarch64_simd_hi *) __a, __o);
  19948. }
  19949. __extension__ static __inline void __attribute__ ((__always_inline__))
  19950. vst4_u32 (uint32_t * __a, uint32x2x4_t val)
  19951. {
  19952. __builtin_aarch64_simd_xi __o;
  19953. uint32x4x4_t temp;
  19954. temp.val[0] = vcombine_u32 (val.val[0], vcreate_u32 (__AARCH64_UINT64_C (0)));
  19955. temp.val[1] = vcombine_u32 (val.val[1], vcreate_u32 (__AARCH64_UINT64_C (0)));
  19956. temp.val[2] = vcombine_u32 (val.val[2], vcreate_u32 (__AARCH64_UINT64_C (0)));
  19957. temp.val[3] = vcombine_u32 (val.val[3], vcreate_u32 (__AARCH64_UINT64_C (0)));
  19958. __o = __builtin_aarch64_set_qregxiv4si (__o, (int32x4_t) temp.val[0], 0);
  19959. __o = __builtin_aarch64_set_qregxiv4si (__o, (int32x4_t) temp.val[1], 1);
  19960. __o = __builtin_aarch64_set_qregxiv4si (__o, (int32x4_t) temp.val[2], 2);
  19961. __o = __builtin_aarch64_set_qregxiv4si (__o, (int32x4_t) temp.val[3], 3);
  19962. __builtin_aarch64_st4v2si ((__builtin_aarch64_simd_si *) __a, __o);
  19963. }
  19964. __extension__ static __inline void __attribute__ ((__always_inline__))
  19965. vst4_f32 (float32_t * __a, float32x2x4_t val)
  19966. {
  19967. __builtin_aarch64_simd_xi __o;
  19968. float32x4x4_t temp;
  19969. temp.val[0] = vcombine_f32 (val.val[0], vcreate_f32 (__AARCH64_UINT64_C (0)));
  19970. temp.val[1] = vcombine_f32 (val.val[1], vcreate_f32 (__AARCH64_UINT64_C (0)));
  19971. temp.val[2] = vcombine_f32 (val.val[2], vcreate_f32 (__AARCH64_UINT64_C (0)));
  19972. temp.val[3] = vcombine_f32 (val.val[3], vcreate_f32 (__AARCH64_UINT64_C (0)));
  19973. __o = __builtin_aarch64_set_qregxiv4sf (__o, (float32x4_t) temp.val[0], 0);
  19974. __o = __builtin_aarch64_set_qregxiv4sf (__o, (float32x4_t) temp.val[1], 1);
  19975. __o = __builtin_aarch64_set_qregxiv4sf (__o, (float32x4_t) temp.val[2], 2);
  19976. __o = __builtin_aarch64_set_qregxiv4sf (__o, (float32x4_t) temp.val[3], 3);
  19977. __builtin_aarch64_st4v2sf ((__builtin_aarch64_simd_sf *) __a, __o);
  19978. }
  19979. __extension__ static __inline void __attribute__ ((__always_inline__))
  19980. vst4q_s8 (int8_t * __a, int8x16x4_t val)
  19981. {
  19982. __builtin_aarch64_simd_xi __o;
  19983. __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t) val.val[0], 0);
  19984. __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t) val.val[1], 1);
  19985. __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t) val.val[2], 2);
  19986. __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t) val.val[3], 3);
  19987. __builtin_aarch64_st4v16qi ((__builtin_aarch64_simd_qi *) __a, __o);
  19988. }
  19989. __extension__ static __inline void __attribute__ ((__always_inline__))
  19990. vst4q_p8 (poly8_t * __a, poly8x16x4_t val)
  19991. {
  19992. __builtin_aarch64_simd_xi __o;
  19993. __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t) val.val[0], 0);
  19994. __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t) val.val[1], 1);
  19995. __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t) val.val[2], 2);
  19996. __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t) val.val[3], 3);
  19997. __builtin_aarch64_st4v16qi ((__builtin_aarch64_simd_qi *) __a, __o);
  19998. }
  19999. __extension__ static __inline void __attribute__ ((__always_inline__))
  20000. vst4q_s16 (int16_t * __a, int16x8x4_t val)
  20001. {
  20002. __builtin_aarch64_simd_xi __o;
  20003. __o = __builtin_aarch64_set_qregxiv8hi (__o, (int16x8_t) val.val[0], 0);
  20004. __o = __builtin_aarch64_set_qregxiv8hi (__o, (int16x8_t) val.val[1], 1);
  20005. __o = __builtin_aarch64_set_qregxiv8hi (__o, (int16x8_t) val.val[2], 2);
  20006. __o = __builtin_aarch64_set_qregxiv8hi (__o, (int16x8_t) val.val[3], 3);
  20007. __builtin_aarch64_st4v8hi ((__builtin_aarch64_simd_hi *) __a, __o);
  20008. }
  20009. __extension__ static __inline void __attribute__ ((__always_inline__))
  20010. vst4q_p16 (poly16_t * __a, poly16x8x4_t val)
  20011. {
  20012. __builtin_aarch64_simd_xi __o;
  20013. __o = __builtin_aarch64_set_qregxiv8hi (__o, (int16x8_t) val.val[0], 0);
  20014. __o = __builtin_aarch64_set_qregxiv8hi (__o, (int16x8_t) val.val[1], 1);
  20015. __o = __builtin_aarch64_set_qregxiv8hi (__o, (int16x8_t) val.val[2], 2);
  20016. __o = __builtin_aarch64_set_qregxiv8hi (__o, (int16x8_t) val.val[3], 3);
  20017. __builtin_aarch64_st4v8hi ((__builtin_aarch64_simd_hi *) __a, __o);
  20018. }
  20019. __extension__ static __inline void __attribute__ ((__always_inline__))
  20020. vst4q_s32 (int32_t * __a, int32x4x4_t val)
  20021. {
  20022. __builtin_aarch64_simd_xi __o;
  20023. __o = __builtin_aarch64_set_qregxiv4si (__o, (int32x4_t) val.val[0], 0);
  20024. __o = __builtin_aarch64_set_qregxiv4si (__o, (int32x4_t) val.val[1], 1);
  20025. __o = __builtin_aarch64_set_qregxiv4si (__o, (int32x4_t) val.val[2], 2);
  20026. __o = __builtin_aarch64_set_qregxiv4si (__o, (int32x4_t) val.val[3], 3);
  20027. __builtin_aarch64_st4v4si ((__builtin_aarch64_simd_si *) __a, __o);
  20028. }
  20029. __extension__ static __inline void __attribute__ ((__always_inline__))
  20030. vst4q_s64 (int64_t * __a, int64x2x4_t val)
  20031. {
  20032. __builtin_aarch64_simd_xi __o;
  20033. __o = __builtin_aarch64_set_qregxiv2di (__o, (int64x2_t) val.val[0], 0);
  20034. __o = __builtin_aarch64_set_qregxiv2di (__o, (int64x2_t) val.val[1], 1);
  20035. __o = __builtin_aarch64_set_qregxiv2di (__o, (int64x2_t) val.val[2], 2);
  20036. __o = __builtin_aarch64_set_qregxiv2di (__o, (int64x2_t) val.val[3], 3);
  20037. __builtin_aarch64_st4v2di ((__builtin_aarch64_simd_di *) __a, __o);
  20038. }
  20039. __extension__ static __inline void __attribute__ ((__always_inline__))
  20040. vst4q_u8 (uint8_t * __a, uint8x16x4_t val)
  20041. {
  20042. __builtin_aarch64_simd_xi __o;
  20043. __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t) val.val[0], 0);
  20044. __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t) val.val[1], 1);
  20045. __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t) val.val[2], 2);
  20046. __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t) val.val[3], 3);
  20047. __builtin_aarch64_st4v16qi ((__builtin_aarch64_simd_qi *) __a, __o);
  20048. }
  20049. __extension__ static __inline void __attribute__ ((__always_inline__))
  20050. vst4q_u16 (uint16_t * __a, uint16x8x4_t val)
  20051. {
  20052. __builtin_aarch64_simd_xi __o;
  20053. __o = __builtin_aarch64_set_qregxiv8hi (__o, (int16x8_t) val.val[0], 0);
  20054. __o = __builtin_aarch64_set_qregxiv8hi (__o, (int16x8_t) val.val[1], 1);
  20055. __o = __builtin_aarch64_set_qregxiv8hi (__o, (int16x8_t) val.val[2], 2);
  20056. __o = __builtin_aarch64_set_qregxiv8hi (__o, (int16x8_t) val.val[3], 3);
  20057. __builtin_aarch64_st4v8hi ((__builtin_aarch64_simd_hi *) __a, __o);
  20058. }
  20059. __extension__ static __inline void __attribute__ ((__always_inline__))
  20060. vst4q_u32 (uint32_t * __a, uint32x4x4_t val)
  20061. {
  20062. __builtin_aarch64_simd_xi __o;
  20063. __o = __builtin_aarch64_set_qregxiv4si (__o, (int32x4_t) val.val[0], 0);
  20064. __o = __builtin_aarch64_set_qregxiv4si (__o, (int32x4_t) val.val[1], 1);
  20065. __o = __builtin_aarch64_set_qregxiv4si (__o, (int32x4_t) val.val[2], 2);
  20066. __o = __builtin_aarch64_set_qregxiv4si (__o, (int32x4_t) val.val[3], 3);
  20067. __builtin_aarch64_st4v4si ((__builtin_aarch64_simd_si *) __a, __o);
  20068. }
  20069. __extension__ static __inline void __attribute__ ((__always_inline__))
  20070. vst4q_u64 (uint64_t * __a, uint64x2x4_t val)
  20071. {
  20072. __builtin_aarch64_simd_xi __o;
  20073. __o = __builtin_aarch64_set_qregxiv2di (__o, (int64x2_t) val.val[0], 0);
  20074. __o = __builtin_aarch64_set_qregxiv2di (__o, (int64x2_t) val.val[1], 1);
  20075. __o = __builtin_aarch64_set_qregxiv2di (__o, (int64x2_t) val.val[2], 2);
  20076. __o = __builtin_aarch64_set_qregxiv2di (__o, (int64x2_t) val.val[3], 3);
  20077. __builtin_aarch64_st4v2di ((__builtin_aarch64_simd_di *) __a, __o);
  20078. }
  20079. __extension__ static __inline void __attribute__ ((__always_inline__))
  20080. vst4q_f32 (float32_t * __a, float32x4x4_t val)
  20081. {
  20082. __builtin_aarch64_simd_xi __o;
  20083. __o = __builtin_aarch64_set_qregxiv4sf (__o, (float32x4_t) val.val[0], 0);
  20084. __o = __builtin_aarch64_set_qregxiv4sf (__o, (float32x4_t) val.val[1], 1);
  20085. __o = __builtin_aarch64_set_qregxiv4sf (__o, (float32x4_t) val.val[2], 2);
  20086. __o = __builtin_aarch64_set_qregxiv4sf (__o, (float32x4_t) val.val[3], 3);
  20087. __builtin_aarch64_st4v4sf ((__builtin_aarch64_simd_sf *) __a, __o);
  20088. }
  20089. __extension__ static __inline void __attribute__ ((__always_inline__))
  20090. vst4q_f64 (float64_t * __a, float64x2x4_t val)
  20091. {
  20092. __builtin_aarch64_simd_xi __o;
  20093. __o = __builtin_aarch64_set_qregxiv2df (__o, (float64x2_t) val.val[0], 0);
  20094. __o = __builtin_aarch64_set_qregxiv2df (__o, (float64x2_t) val.val[1], 1);
  20095. __o = __builtin_aarch64_set_qregxiv2df (__o, (float64x2_t) val.val[2], 2);
  20096. __o = __builtin_aarch64_set_qregxiv2df (__o, (float64x2_t) val.val[3], 3);
  20097. __builtin_aarch64_st4v2df ((__builtin_aarch64_simd_df *) __a, __o);
  20098. }
  20099. /* vsub */
  20100. __extension__ static __inline int64_t __attribute__ ((__always_inline__))
  20101. vsubd_s64 (int64_t __a, int64_t __b)
  20102. {
  20103. return __a - __b;
  20104. }
  20105. __extension__ static __inline uint64_t __attribute__ ((__always_inline__))
  20106. vsubd_u64 (uint64_t __a, uint64_t __b)
  20107. {
  20108. return __a - __b;
  20109. }
  20110. /* vtbx1 */
  20111. __extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
  20112. vtbx1_s8 (int8x8_t __r, int8x8_t __tab, int8x8_t __idx)
  20113. {
  20114. uint8x8_t __mask = vclt_u8 (vreinterpret_u8_s8 (__idx),
  20115. vmov_n_u8 (8));
  20116. int8x8_t __tbl = vtbl1_s8 (__tab, __idx);
  20117. return vbsl_s8 (__mask, __tbl, __r);
  20118. }
  20119. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  20120. vtbx1_u8 (uint8x8_t __r, uint8x8_t __tab, uint8x8_t __idx)
  20121. {
  20122. uint8x8_t __mask = vclt_u8 (__idx, vmov_n_u8 (8));
  20123. uint8x8_t __tbl = vtbl1_u8 (__tab, __idx);
  20124. return vbsl_u8 (__mask, __tbl, __r);
  20125. }
  20126. __extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
  20127. vtbx1_p8 (poly8x8_t __r, poly8x8_t __tab, uint8x8_t __idx)
  20128. {
  20129. uint8x8_t __mask = vclt_u8 (__idx, vmov_n_u8 (8));
  20130. poly8x8_t __tbl = vtbl1_p8 (__tab, __idx);
  20131. return vbsl_p8 (__mask, __tbl, __r);
  20132. }
  20133. /* vtbx3 */
  20134. __extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
  20135. vtbx3_s8 (int8x8_t __r, int8x8x3_t __tab, int8x8_t __idx)
  20136. {
  20137. uint8x8_t __mask = vclt_u8 (vreinterpret_u8_s8 (__idx),
  20138. vmov_n_u8 (24));
  20139. int8x8_t __tbl = vtbl3_s8 (__tab, __idx);
  20140. return vbsl_s8 (__mask, __tbl, __r);
  20141. }
  20142. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  20143. vtbx3_u8 (uint8x8_t __r, uint8x8x3_t __tab, uint8x8_t __idx)
  20144. {
  20145. uint8x8_t __mask = vclt_u8 (__idx, vmov_n_u8 (24));
  20146. uint8x8_t __tbl = vtbl3_u8 (__tab, __idx);
  20147. return vbsl_u8 (__mask, __tbl, __r);
  20148. }
  20149. __extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
  20150. vtbx3_p8 (poly8x8_t __r, poly8x8x3_t __tab, uint8x8_t __idx)
  20151. {
  20152. uint8x8_t __mask = vclt_u8 (__idx, vmov_n_u8 (24));
  20153. poly8x8_t __tbl = vtbl3_p8 (__tab, __idx);
  20154. return vbsl_p8 (__mask, __tbl, __r);
  20155. }
  20156. /* vtrn */
  20157. __extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
  20158. vtrn1_f32 (float32x2_t __a, float32x2_t __b)
  20159. {
  20160. #ifdef __AARCH64EB__
  20161. return __builtin_shuffle (__a, __b, (uint32x2_t) {3, 1});
  20162. #else
  20163. return __builtin_shuffle (__a, __b, (uint32x2_t) {0, 2});
  20164. #endif
  20165. }
  20166. __extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
  20167. vtrn1_p8 (poly8x8_t __a, poly8x8_t __b)
  20168. {
  20169. #ifdef __AARCH64EB__
  20170. return __builtin_shuffle (__a, __b, (uint8x8_t) {9, 1, 11, 3, 13, 5, 15, 7});
  20171. #else
  20172. return __builtin_shuffle (__a, __b, (uint8x8_t) {0, 8, 2, 10, 4, 12, 6, 14});
  20173. #endif
  20174. }
  20175. __extension__ static __inline poly16x4_t __attribute__ ((__always_inline__))
  20176. vtrn1_p16 (poly16x4_t __a, poly16x4_t __b)
  20177. {
  20178. #ifdef __AARCH64EB__
  20179. return __builtin_shuffle (__a, __b, (uint16x4_t) {5, 1, 7, 3});
  20180. #else
  20181. return __builtin_shuffle (__a, __b, (uint16x4_t) {0, 4, 2, 6});
  20182. #endif
  20183. }
  20184. __extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
  20185. vtrn1_s8 (int8x8_t __a, int8x8_t __b)
  20186. {
  20187. #ifdef __AARCH64EB__
  20188. return __builtin_shuffle (__a, __b, (uint8x8_t) {9, 1, 11, 3, 13, 5, 15, 7});
  20189. #else
  20190. return __builtin_shuffle (__a, __b, (uint8x8_t) {0, 8, 2, 10, 4, 12, 6, 14});
  20191. #endif
  20192. }
  20193. __extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
  20194. vtrn1_s16 (int16x4_t __a, int16x4_t __b)
  20195. {
  20196. #ifdef __AARCH64EB__
  20197. return __builtin_shuffle (__a, __b, (uint16x4_t) {5, 1, 7, 3});
  20198. #else
  20199. return __builtin_shuffle (__a, __b, (uint16x4_t) {0, 4, 2, 6});
  20200. #endif
  20201. }
  20202. __extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
  20203. vtrn1_s32 (int32x2_t __a, int32x2_t __b)
  20204. {
  20205. #ifdef __AARCH64EB__
  20206. return __builtin_shuffle (__a, __b, (uint32x2_t) {3, 1});
  20207. #else
  20208. return __builtin_shuffle (__a, __b, (uint32x2_t) {0, 2});
  20209. #endif
  20210. }
  20211. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  20212. vtrn1_u8 (uint8x8_t __a, uint8x8_t __b)
  20213. {
  20214. #ifdef __AARCH64EB__
  20215. return __builtin_shuffle (__a, __b, (uint8x8_t) {9, 1, 11, 3, 13, 5, 15, 7});
  20216. #else
  20217. return __builtin_shuffle (__a, __b, (uint8x8_t) {0, 8, 2, 10, 4, 12, 6, 14});
  20218. #endif
  20219. }
  20220. __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
  20221. vtrn1_u16 (uint16x4_t __a, uint16x4_t __b)
  20222. {
  20223. #ifdef __AARCH64EB__
  20224. return __builtin_shuffle (__a, __b, (uint16x4_t) {5, 1, 7, 3});
  20225. #else
  20226. return __builtin_shuffle (__a, __b, (uint16x4_t) {0, 4, 2, 6});
  20227. #endif
  20228. }
  20229. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  20230. vtrn1_u32 (uint32x2_t __a, uint32x2_t __b)
  20231. {
  20232. #ifdef __AARCH64EB__
  20233. return __builtin_shuffle (__a, __b, (uint32x2_t) {3, 1});
  20234. #else
  20235. return __builtin_shuffle (__a, __b, (uint32x2_t) {0, 2});
  20236. #endif
  20237. }
  20238. __extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
  20239. vtrn1q_f32 (float32x4_t __a, float32x4_t __b)
  20240. {
  20241. #ifdef __AARCH64EB__
  20242. return __builtin_shuffle (__a, __b, (uint32x4_t) {5, 1, 7, 3});
  20243. #else
  20244. return __builtin_shuffle (__a, __b, (uint32x4_t) {0, 4, 2, 6});
  20245. #endif
  20246. }
  20247. __extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
  20248. vtrn1q_f64 (float64x2_t __a, float64x2_t __b)
  20249. {
  20250. #ifdef __AARCH64EB__
  20251. return __builtin_shuffle (__a, __b, (uint64x2_t) {3, 1});
  20252. #else
  20253. return __builtin_shuffle (__a, __b, (uint64x2_t) {0, 2});
  20254. #endif
  20255. }
  20256. __extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
  20257. vtrn1q_p8 (poly8x16_t __a, poly8x16_t __b)
  20258. {
  20259. #ifdef __AARCH64EB__
  20260. return __builtin_shuffle (__a, __b,
  20261. (uint8x16_t) {17, 1, 19, 3, 21, 5, 23, 7, 25, 9, 27, 11, 29, 13, 31, 15});
  20262. #else
  20263. return __builtin_shuffle (__a, __b,
  20264. (uint8x16_t) {0, 16, 2, 18, 4, 20, 6, 22, 8, 24, 10, 26, 12, 28, 14, 30});
  20265. #endif
  20266. }
  20267. __extension__ static __inline poly16x8_t __attribute__ ((__always_inline__))
  20268. vtrn1q_p16 (poly16x8_t __a, poly16x8_t __b)
  20269. {
  20270. #ifdef __AARCH64EB__
  20271. return __builtin_shuffle (__a, __b, (uint16x8_t) {9, 1, 11, 3, 13, 5, 15, 7});
  20272. #else
  20273. return __builtin_shuffle (__a, __b, (uint16x8_t) {0, 8, 2, 10, 4, 12, 6, 14});
  20274. #endif
  20275. }
  20276. __extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
  20277. vtrn1q_s8 (int8x16_t __a, int8x16_t __b)
  20278. {
  20279. #ifdef __AARCH64EB__
  20280. return __builtin_shuffle (__a, __b,
  20281. (uint8x16_t) {17, 1, 19, 3, 21, 5, 23, 7, 25, 9, 27, 11, 29, 13, 31, 15});
  20282. #else
  20283. return __builtin_shuffle (__a, __b,
  20284. (uint8x16_t) {0, 16, 2, 18, 4, 20, 6, 22, 8, 24, 10, 26, 12, 28, 14, 30});
  20285. #endif
  20286. }
  20287. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  20288. vtrn1q_s16 (int16x8_t __a, int16x8_t __b)
  20289. {
  20290. #ifdef __AARCH64EB__
  20291. return __builtin_shuffle (__a, __b, (uint16x8_t) {9, 1, 11, 3, 13, 5, 15, 7});
  20292. #else
  20293. return __builtin_shuffle (__a, __b, (uint16x8_t) {0, 8, 2, 10, 4, 12, 6, 14});
  20294. #endif
  20295. }
  20296. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  20297. vtrn1q_s32 (int32x4_t __a, int32x4_t __b)
  20298. {
  20299. #ifdef __AARCH64EB__
  20300. return __builtin_shuffle (__a, __b, (uint32x4_t) {5, 1, 7, 3});
  20301. #else
  20302. return __builtin_shuffle (__a, __b, (uint32x4_t) {0, 4, 2, 6});
  20303. #endif
  20304. }
  20305. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  20306. vtrn1q_s64 (int64x2_t __a, int64x2_t __b)
  20307. {
  20308. #ifdef __AARCH64EB__
  20309. return __builtin_shuffle (__a, __b, (uint64x2_t) {3, 1});
  20310. #else
  20311. return __builtin_shuffle (__a, __b, (uint64x2_t) {0, 2});
  20312. #endif
  20313. }
  20314. __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
  20315. vtrn1q_u8 (uint8x16_t __a, uint8x16_t __b)
  20316. {
  20317. #ifdef __AARCH64EB__
  20318. return __builtin_shuffle (__a, __b,
  20319. (uint8x16_t) {17, 1, 19, 3, 21, 5, 23, 7, 25, 9, 27, 11, 29, 13, 31, 15});
  20320. #else
  20321. return __builtin_shuffle (__a, __b,
  20322. (uint8x16_t) {0, 16, 2, 18, 4, 20, 6, 22, 8, 24, 10, 26, 12, 28, 14, 30});
  20323. #endif
  20324. }
  20325. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  20326. vtrn1q_u16 (uint16x8_t __a, uint16x8_t __b)
  20327. {
  20328. #ifdef __AARCH64EB__
  20329. return __builtin_shuffle (__a, __b, (uint16x8_t) {9, 1, 11, 3, 13, 5, 15, 7});
  20330. #else
  20331. return __builtin_shuffle (__a, __b, (uint16x8_t) {0, 8, 2, 10, 4, 12, 6, 14});
  20332. #endif
  20333. }
  20334. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  20335. vtrn1q_u32 (uint32x4_t __a, uint32x4_t __b)
  20336. {
  20337. #ifdef __AARCH64EB__
  20338. return __builtin_shuffle (__a, __b, (uint32x4_t) {5, 1, 7, 3});
  20339. #else
  20340. return __builtin_shuffle (__a, __b, (uint32x4_t) {0, 4, 2, 6});
  20341. #endif
  20342. }
  20343. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  20344. vtrn1q_u64 (uint64x2_t __a, uint64x2_t __b)
  20345. {
  20346. #ifdef __AARCH64EB__
  20347. return __builtin_shuffle (__a, __b, (uint64x2_t) {3, 1});
  20348. #else
  20349. return __builtin_shuffle (__a, __b, (uint64x2_t) {0, 2});
  20350. #endif
  20351. }
  20352. __extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
  20353. vtrn2_f32 (float32x2_t __a, float32x2_t __b)
  20354. {
  20355. #ifdef __AARCH64EB__
  20356. return __builtin_shuffle (__a, __b, (uint32x2_t) {2, 0});
  20357. #else
  20358. return __builtin_shuffle (__a, __b, (uint32x2_t) {1, 3});
  20359. #endif
  20360. }
  20361. __extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
  20362. vtrn2_p8 (poly8x8_t __a, poly8x8_t __b)
  20363. {
  20364. #ifdef __AARCH64EB__
  20365. return __builtin_shuffle (__a, __b, (uint8x8_t) {8, 0, 10, 2, 12, 4, 14, 6});
  20366. #else
  20367. return __builtin_shuffle (__a, __b, (uint8x8_t) {1, 9, 3, 11, 5, 13, 7, 15});
  20368. #endif
  20369. }
  20370. __extension__ static __inline poly16x4_t __attribute__ ((__always_inline__))
  20371. vtrn2_p16 (poly16x4_t __a, poly16x4_t __b)
  20372. {
  20373. #ifdef __AARCH64EB__
  20374. return __builtin_shuffle (__a, __b, (uint16x4_t) {4, 0, 6, 2});
  20375. #else
  20376. return __builtin_shuffle (__a, __b, (uint16x4_t) {1, 5, 3, 7});
  20377. #endif
  20378. }
  20379. __extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
  20380. vtrn2_s8 (int8x8_t __a, int8x8_t __b)
  20381. {
  20382. #ifdef __AARCH64EB__
  20383. return __builtin_shuffle (__a, __b, (uint8x8_t) {8, 0, 10, 2, 12, 4, 14, 6});
  20384. #else
  20385. return __builtin_shuffle (__a, __b, (uint8x8_t) {1, 9, 3, 11, 5, 13, 7, 15});
  20386. #endif
  20387. }
  20388. __extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
  20389. vtrn2_s16 (int16x4_t __a, int16x4_t __b)
  20390. {
  20391. #ifdef __AARCH64EB__
  20392. return __builtin_shuffle (__a, __b, (uint16x4_t) {4, 0, 6, 2});
  20393. #else
  20394. return __builtin_shuffle (__a, __b, (uint16x4_t) {1, 5, 3, 7});
  20395. #endif
  20396. }
  20397. __extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
  20398. vtrn2_s32 (int32x2_t __a, int32x2_t __b)
  20399. {
  20400. #ifdef __AARCH64EB__
  20401. return __builtin_shuffle (__a, __b, (uint32x2_t) {2, 0});
  20402. #else
  20403. return __builtin_shuffle (__a, __b, (uint32x2_t) {1, 3});
  20404. #endif
  20405. }
  20406. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  20407. vtrn2_u8 (uint8x8_t __a, uint8x8_t __b)
  20408. {
  20409. #ifdef __AARCH64EB__
  20410. return __builtin_shuffle (__a, __b, (uint8x8_t) {8, 0, 10, 2, 12, 4, 14, 6});
  20411. #else
  20412. return __builtin_shuffle (__a, __b, (uint8x8_t) {1, 9, 3, 11, 5, 13, 7, 15});
  20413. #endif
  20414. }
  20415. __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
  20416. vtrn2_u16 (uint16x4_t __a, uint16x4_t __b)
  20417. {
  20418. #ifdef __AARCH64EB__
  20419. return __builtin_shuffle (__a, __b, (uint16x4_t) {4, 0, 6, 2});
  20420. #else
  20421. return __builtin_shuffle (__a, __b, (uint16x4_t) {1, 5, 3, 7});
  20422. #endif
  20423. }
  20424. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  20425. vtrn2_u32 (uint32x2_t __a, uint32x2_t __b)
  20426. {
  20427. #ifdef __AARCH64EB__
  20428. return __builtin_shuffle (__a, __b, (uint32x2_t) {2, 0});
  20429. #else
  20430. return __builtin_shuffle (__a, __b, (uint32x2_t) {1, 3});
  20431. #endif
  20432. }
  20433. __extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
  20434. vtrn2q_f32 (float32x4_t __a, float32x4_t __b)
  20435. {
  20436. #ifdef __AARCH64EB__
  20437. return __builtin_shuffle (__a, __b, (uint32x4_t) {4, 0, 6, 2});
  20438. #else
  20439. return __builtin_shuffle (__a, __b, (uint32x4_t) {1, 5, 3, 7});
  20440. #endif
  20441. }
  20442. __extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
  20443. vtrn2q_f64 (float64x2_t __a, float64x2_t __b)
  20444. {
  20445. #ifdef __AARCH64EB__
  20446. return __builtin_shuffle (__a, __b, (uint64x2_t) {2, 0});
  20447. #else
  20448. return __builtin_shuffle (__a, __b, (uint64x2_t) {1, 3});
  20449. #endif
  20450. }
  20451. __extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
  20452. vtrn2q_p8 (poly8x16_t __a, poly8x16_t __b)
  20453. {
  20454. #ifdef __AARCH64EB__
  20455. return __builtin_shuffle (__a, __b,
  20456. (uint8x16_t) {16, 0, 18, 2, 20, 4, 22, 6, 24, 8, 26, 10, 28, 12, 30, 14});
  20457. #else
  20458. return __builtin_shuffle (__a, __b,
  20459. (uint8x16_t) {1, 17, 3, 19, 5, 21, 7, 23, 9, 25, 11, 27, 13, 29, 15, 31});
  20460. #endif
  20461. }
  20462. __extension__ static __inline poly16x8_t __attribute__ ((__always_inline__))
  20463. vtrn2q_p16 (poly16x8_t __a, poly16x8_t __b)
  20464. {
  20465. #ifdef __AARCH64EB__
  20466. return __builtin_shuffle (__a, __b, (uint16x8_t) {8, 0, 10, 2, 12, 4, 14, 6});
  20467. #else
  20468. return __builtin_shuffle (__a, __b, (uint16x8_t) {1, 9, 3, 11, 5, 13, 7, 15});
  20469. #endif
  20470. }
  20471. __extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
  20472. vtrn2q_s8 (int8x16_t __a, int8x16_t __b)
  20473. {
  20474. #ifdef __AARCH64EB__
  20475. return __builtin_shuffle (__a, __b,
  20476. (uint8x16_t) {16, 0, 18, 2, 20, 4, 22, 6, 24, 8, 26, 10, 28, 12, 30, 14});
  20477. #else
  20478. return __builtin_shuffle (__a, __b,
  20479. (uint8x16_t) {1, 17, 3, 19, 5, 21, 7, 23, 9, 25, 11, 27, 13, 29, 15, 31});
  20480. #endif
  20481. }
  20482. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  20483. vtrn2q_s16 (int16x8_t __a, int16x8_t __b)
  20484. {
  20485. #ifdef __AARCH64EB__
  20486. return __builtin_shuffle (__a, __b, (uint16x8_t) {8, 0, 10, 2, 12, 4, 14, 6});
  20487. #else
  20488. return __builtin_shuffle (__a, __b, (uint16x8_t) {1, 9, 3, 11, 5, 13, 7, 15});
  20489. #endif
  20490. }
  20491. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  20492. vtrn2q_s32 (int32x4_t __a, int32x4_t __b)
  20493. {
  20494. #ifdef __AARCH64EB__
  20495. return __builtin_shuffle (__a, __b, (uint32x4_t) {4, 0, 6, 2});
  20496. #else
  20497. return __builtin_shuffle (__a, __b, (uint32x4_t) {1, 5, 3, 7});
  20498. #endif
  20499. }
  20500. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  20501. vtrn2q_s64 (int64x2_t __a, int64x2_t __b)
  20502. {
  20503. #ifdef __AARCH64EB__
  20504. return __builtin_shuffle (__a, __b, (uint64x2_t) {2, 0});
  20505. #else
  20506. return __builtin_shuffle (__a, __b, (uint64x2_t) {1, 3});
  20507. #endif
  20508. }
  20509. __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
  20510. vtrn2q_u8 (uint8x16_t __a, uint8x16_t __b)
  20511. {
  20512. #ifdef __AARCH64EB__
  20513. return __builtin_shuffle (__a, __b,
  20514. (uint8x16_t) {16, 0, 18, 2, 20, 4, 22, 6, 24, 8, 26, 10, 28, 12, 30, 14});
  20515. #else
  20516. return __builtin_shuffle (__a, __b,
  20517. (uint8x16_t) {1, 17, 3, 19, 5, 21, 7, 23, 9, 25, 11, 27, 13, 29, 15, 31});
  20518. #endif
  20519. }
  20520. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  20521. vtrn2q_u16 (uint16x8_t __a, uint16x8_t __b)
  20522. {
  20523. #ifdef __AARCH64EB__
  20524. return __builtin_shuffle (__a, __b, (uint16x8_t) {8, 0, 10, 2, 12, 4, 14, 6});
  20525. #else
  20526. return __builtin_shuffle (__a, __b, (uint16x8_t) {1, 9, 3, 11, 5, 13, 7, 15});
  20527. #endif
  20528. }
  20529. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  20530. vtrn2q_u32 (uint32x4_t __a, uint32x4_t __b)
  20531. {
  20532. #ifdef __AARCH64EB__
  20533. return __builtin_shuffle (__a, __b, (uint32x4_t) {4, 0, 6, 2});
  20534. #else
  20535. return __builtin_shuffle (__a, __b, (uint32x4_t) {1, 5, 3, 7});
  20536. #endif
  20537. }
  20538. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  20539. vtrn2q_u64 (uint64x2_t __a, uint64x2_t __b)
  20540. {
  20541. #ifdef __AARCH64EB__
  20542. return __builtin_shuffle (__a, __b, (uint64x2_t) {2, 0});
  20543. #else
  20544. return __builtin_shuffle (__a, __b, (uint64x2_t) {1, 3});
  20545. #endif
  20546. }
  20547. __extension__ static __inline float32x2x2_t __attribute__ ((__always_inline__))
  20548. vtrn_f32 (float32x2_t a, float32x2_t b)
  20549. {
  20550. return (float32x2x2_t) {vtrn1_f32 (a, b), vtrn2_f32 (a, b)};
  20551. }
  20552. __extension__ static __inline poly8x8x2_t __attribute__ ((__always_inline__))
  20553. vtrn_p8 (poly8x8_t a, poly8x8_t b)
  20554. {
  20555. return (poly8x8x2_t) {vtrn1_p8 (a, b), vtrn2_p8 (a, b)};
  20556. }
  20557. __extension__ static __inline poly16x4x2_t __attribute__ ((__always_inline__))
  20558. vtrn_p16 (poly16x4_t a, poly16x4_t b)
  20559. {
  20560. return (poly16x4x2_t) {vtrn1_p16 (a, b), vtrn2_p16 (a, b)};
  20561. }
  20562. __extension__ static __inline int8x8x2_t __attribute__ ((__always_inline__))
  20563. vtrn_s8 (int8x8_t a, int8x8_t b)
  20564. {
  20565. return (int8x8x2_t) {vtrn1_s8 (a, b), vtrn2_s8 (a, b)};
  20566. }
  20567. __extension__ static __inline int16x4x2_t __attribute__ ((__always_inline__))
  20568. vtrn_s16 (int16x4_t a, int16x4_t b)
  20569. {
  20570. return (int16x4x2_t) {vtrn1_s16 (a, b), vtrn2_s16 (a, b)};
  20571. }
  20572. __extension__ static __inline int32x2x2_t __attribute__ ((__always_inline__))
  20573. vtrn_s32 (int32x2_t a, int32x2_t b)
  20574. {
  20575. return (int32x2x2_t) {vtrn1_s32 (a, b), vtrn2_s32 (a, b)};
  20576. }
  20577. __extension__ static __inline uint8x8x2_t __attribute__ ((__always_inline__))
  20578. vtrn_u8 (uint8x8_t a, uint8x8_t b)
  20579. {
  20580. return (uint8x8x2_t) {vtrn1_u8 (a, b), vtrn2_u8 (a, b)};
  20581. }
  20582. __extension__ static __inline uint16x4x2_t __attribute__ ((__always_inline__))
  20583. vtrn_u16 (uint16x4_t a, uint16x4_t b)
  20584. {
  20585. return (uint16x4x2_t) {vtrn1_u16 (a, b), vtrn2_u16 (a, b)};
  20586. }
  20587. __extension__ static __inline uint32x2x2_t __attribute__ ((__always_inline__))
  20588. vtrn_u32 (uint32x2_t a, uint32x2_t b)
  20589. {
  20590. return (uint32x2x2_t) {vtrn1_u32 (a, b), vtrn2_u32 (a, b)};
  20591. }
  20592. __extension__ static __inline float32x4x2_t __attribute__ ((__always_inline__))
  20593. vtrnq_f32 (float32x4_t a, float32x4_t b)
  20594. {
  20595. return (float32x4x2_t) {vtrn1q_f32 (a, b), vtrn2q_f32 (a, b)};
  20596. }
  20597. __extension__ static __inline poly8x16x2_t __attribute__ ((__always_inline__))
  20598. vtrnq_p8 (poly8x16_t a, poly8x16_t b)
  20599. {
  20600. return (poly8x16x2_t) {vtrn1q_p8 (a, b), vtrn2q_p8 (a, b)};
  20601. }
  20602. __extension__ static __inline poly16x8x2_t __attribute__ ((__always_inline__))
  20603. vtrnq_p16 (poly16x8_t a, poly16x8_t b)
  20604. {
  20605. return (poly16x8x2_t) {vtrn1q_p16 (a, b), vtrn2q_p16 (a, b)};
  20606. }
  20607. __extension__ static __inline int8x16x2_t __attribute__ ((__always_inline__))
  20608. vtrnq_s8 (int8x16_t a, int8x16_t b)
  20609. {
  20610. return (int8x16x2_t) {vtrn1q_s8 (a, b), vtrn2q_s8 (a, b)};
  20611. }
  20612. __extension__ static __inline int16x8x2_t __attribute__ ((__always_inline__))
  20613. vtrnq_s16 (int16x8_t a, int16x8_t b)
  20614. {
  20615. return (int16x8x2_t) {vtrn1q_s16 (a, b), vtrn2q_s16 (a, b)};
  20616. }
  20617. __extension__ static __inline int32x4x2_t __attribute__ ((__always_inline__))
  20618. vtrnq_s32 (int32x4_t a, int32x4_t b)
  20619. {
  20620. return (int32x4x2_t) {vtrn1q_s32 (a, b), vtrn2q_s32 (a, b)};
  20621. }
  20622. __extension__ static __inline uint8x16x2_t __attribute__ ((__always_inline__))
  20623. vtrnq_u8 (uint8x16_t a, uint8x16_t b)
  20624. {
  20625. return (uint8x16x2_t) {vtrn1q_u8 (a, b), vtrn2q_u8 (a, b)};
  20626. }
  20627. __extension__ static __inline uint16x8x2_t __attribute__ ((__always_inline__))
  20628. vtrnq_u16 (uint16x8_t a, uint16x8_t b)
  20629. {
  20630. return (uint16x8x2_t) {vtrn1q_u16 (a, b), vtrn2q_u16 (a, b)};
  20631. }
  20632. __extension__ static __inline uint32x4x2_t __attribute__ ((__always_inline__))
  20633. vtrnq_u32 (uint32x4_t a, uint32x4_t b)
  20634. {
  20635. return (uint32x4x2_t) {vtrn1q_u32 (a, b), vtrn2q_u32 (a, b)};
  20636. }
  20637. /* vtst */
  20638. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  20639. vtst_s8 (int8x8_t __a, int8x8_t __b)
  20640. {
  20641. return (uint8x8_t) ((__a & __b) != 0);
  20642. }
  20643. __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
  20644. vtst_s16 (int16x4_t __a, int16x4_t __b)
  20645. {
  20646. return (uint16x4_t) ((__a & __b) != 0);
  20647. }
  20648. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  20649. vtst_s32 (int32x2_t __a, int32x2_t __b)
  20650. {
  20651. return (uint32x2_t) ((__a & __b) != 0);
  20652. }
  20653. __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
  20654. vtst_s64 (int64x1_t __a, int64x1_t __b)
  20655. {
  20656. return (uint64x1_t) {(__a[0] & __b[0]) ? -1ll : 0ll};
  20657. }
  20658. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  20659. vtst_u8 (uint8x8_t __a, uint8x8_t __b)
  20660. {
  20661. return ((__a & __b) != 0);
  20662. }
  20663. __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
  20664. vtst_u16 (uint16x4_t __a, uint16x4_t __b)
  20665. {
  20666. return ((__a & __b) != 0);
  20667. }
  20668. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  20669. vtst_u32 (uint32x2_t __a, uint32x2_t __b)
  20670. {
  20671. return ((__a & __b) != 0);
  20672. }
  20673. __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
  20674. vtst_u64 (uint64x1_t __a, uint64x1_t __b)
  20675. {
  20676. return (uint64x1_t) {(__a[0] & __b[0]) ? -1ll : 0ll};
  20677. }
  20678. __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
  20679. vtstq_s8 (int8x16_t __a, int8x16_t __b)
  20680. {
  20681. return (uint8x16_t) ((__a & __b) != 0);
  20682. }
  20683. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  20684. vtstq_s16 (int16x8_t __a, int16x8_t __b)
  20685. {
  20686. return (uint16x8_t) ((__a & __b) != 0);
  20687. }
  20688. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  20689. vtstq_s32 (int32x4_t __a, int32x4_t __b)
  20690. {
  20691. return (uint32x4_t) ((__a & __b) != 0);
  20692. }
  20693. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  20694. vtstq_s64 (int64x2_t __a, int64x2_t __b)
  20695. {
  20696. return (uint64x2_t) ((__a & __b) != __AARCH64_INT64_C (0));
  20697. }
  20698. __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
  20699. vtstq_u8 (uint8x16_t __a, uint8x16_t __b)
  20700. {
  20701. return ((__a & __b) != 0);
  20702. }
  20703. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  20704. vtstq_u16 (uint16x8_t __a, uint16x8_t __b)
  20705. {
  20706. return ((__a & __b) != 0);
  20707. }
  20708. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  20709. vtstq_u32 (uint32x4_t __a, uint32x4_t __b)
  20710. {
  20711. return ((__a & __b) != 0);
  20712. }
  20713. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  20714. vtstq_u64 (uint64x2_t __a, uint64x2_t __b)
  20715. {
  20716. return ((__a & __b) != __AARCH64_UINT64_C (0));
  20717. }
  20718. __extension__ static __inline uint64_t __attribute__ ((__always_inline__))
  20719. vtstd_s64 (int64_t __a, int64_t __b)
  20720. {
  20721. return (__a & __b) ? -1ll : 0ll;
  20722. }
  20723. __extension__ static __inline uint64_t __attribute__ ((__always_inline__))
  20724. vtstd_u64 (uint64_t __a, uint64_t __b)
  20725. {
  20726. return (__a & __b) ? -1ll : 0ll;
  20727. }
  20728. /* vuqadd */
  20729. __extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
  20730. vuqadd_s8 (int8x8_t __a, uint8x8_t __b)
  20731. {
  20732. return __builtin_aarch64_suqaddv8qi_ssu (__a, __b);
  20733. }
  20734. __extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
  20735. vuqadd_s16 (int16x4_t __a, uint16x4_t __b)
  20736. {
  20737. return __builtin_aarch64_suqaddv4hi_ssu (__a, __b);
  20738. }
  20739. __extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
  20740. vuqadd_s32 (int32x2_t __a, uint32x2_t __b)
  20741. {
  20742. return __builtin_aarch64_suqaddv2si_ssu (__a, __b);
  20743. }
  20744. __extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
  20745. vuqadd_s64 (int64x1_t __a, uint64x1_t __b)
  20746. {
  20747. return (int64x1_t) {__builtin_aarch64_suqadddi_ssu (__a[0], __b[0])};
  20748. }
  20749. __extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
  20750. vuqaddq_s8 (int8x16_t __a, uint8x16_t __b)
  20751. {
  20752. return __builtin_aarch64_suqaddv16qi_ssu (__a, __b);
  20753. }
  20754. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  20755. vuqaddq_s16 (int16x8_t __a, uint16x8_t __b)
  20756. {
  20757. return __builtin_aarch64_suqaddv8hi_ssu (__a, __b);
  20758. }
  20759. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  20760. vuqaddq_s32 (int32x4_t __a, uint32x4_t __b)
  20761. {
  20762. return __builtin_aarch64_suqaddv4si_ssu (__a, __b);
  20763. }
  20764. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  20765. vuqaddq_s64 (int64x2_t __a, uint64x2_t __b)
  20766. {
  20767. return __builtin_aarch64_suqaddv2di_ssu (__a, __b);
  20768. }
  20769. __extension__ static __inline int8_t __attribute__ ((__always_inline__))
  20770. vuqaddb_s8 (int8_t __a, uint8_t __b)
  20771. {
  20772. return __builtin_aarch64_suqaddqi_ssu (__a, __b);
  20773. }
  20774. __extension__ static __inline int16_t __attribute__ ((__always_inline__))
  20775. vuqaddh_s16 (int16_t __a, uint16_t __b)
  20776. {
  20777. return __builtin_aarch64_suqaddhi_ssu (__a, __b);
  20778. }
  20779. __extension__ static __inline int32_t __attribute__ ((__always_inline__))
  20780. vuqadds_s32 (int32_t __a, uint32_t __b)
  20781. {
  20782. return __builtin_aarch64_suqaddsi_ssu (__a, __b);
  20783. }
  20784. __extension__ static __inline int64_t __attribute__ ((__always_inline__))
  20785. vuqaddd_s64 (int64_t __a, uint64_t __b)
  20786. {
  20787. return __builtin_aarch64_suqadddi_ssu (__a, __b);
  20788. }
  20789. #define __DEFINTERLEAVE(op, rettype, intype, funcsuffix, Q) \
  20790. __extension__ static __inline rettype \
  20791. __attribute__ ((__always_inline__)) \
  20792. v ## op ## Q ## _ ## funcsuffix (intype a, intype b) \
  20793. { \
  20794. return (rettype) {v ## op ## 1 ## Q ## _ ## funcsuffix (a, b), \
  20795. v ## op ## 2 ## Q ## _ ## funcsuffix (a, b)}; \
  20796. }
  20797. #define __INTERLEAVE_LIST(op) \
  20798. __DEFINTERLEAVE (op, float32x2x2_t, float32x2_t, f32,) \
  20799. __DEFINTERLEAVE (op, poly8x8x2_t, poly8x8_t, p8,) \
  20800. __DEFINTERLEAVE (op, poly16x4x2_t, poly16x4_t, p16,) \
  20801. __DEFINTERLEAVE (op, int8x8x2_t, int8x8_t, s8,) \
  20802. __DEFINTERLEAVE (op, int16x4x2_t, int16x4_t, s16,) \
  20803. __DEFINTERLEAVE (op, int32x2x2_t, int32x2_t, s32,) \
  20804. __DEFINTERLEAVE (op, uint8x8x2_t, uint8x8_t, u8,) \
  20805. __DEFINTERLEAVE (op, uint16x4x2_t, uint16x4_t, u16,) \
  20806. __DEFINTERLEAVE (op, uint32x2x2_t, uint32x2_t, u32,) \
  20807. __DEFINTERLEAVE (op, float32x4x2_t, float32x4_t, f32, q) \
  20808. __DEFINTERLEAVE (op, poly8x16x2_t, poly8x16_t, p8, q) \
  20809. __DEFINTERLEAVE (op, poly16x8x2_t, poly16x8_t, p16, q) \
  20810. __DEFINTERLEAVE (op, int8x16x2_t, int8x16_t, s8, q) \
  20811. __DEFINTERLEAVE (op, int16x8x2_t, int16x8_t, s16, q) \
  20812. __DEFINTERLEAVE (op, int32x4x2_t, int32x4_t, s32, q) \
  20813. __DEFINTERLEAVE (op, uint8x16x2_t, uint8x16_t, u8, q) \
  20814. __DEFINTERLEAVE (op, uint16x8x2_t, uint16x8_t, u16, q) \
  20815. __DEFINTERLEAVE (op, uint32x4x2_t, uint32x4_t, u32, q)
  20816. /* vuzp */
  20817. __extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
  20818. vuzp1_f32 (float32x2_t __a, float32x2_t __b)
  20819. {
  20820. #ifdef __AARCH64EB__
  20821. return __builtin_shuffle (__a, __b, (uint32x2_t) {3, 1});
  20822. #else
  20823. return __builtin_shuffle (__a, __b, (uint32x2_t) {0, 2});
  20824. #endif
  20825. }
  20826. __extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
  20827. vuzp1_p8 (poly8x8_t __a, poly8x8_t __b)
  20828. {
  20829. #ifdef __AARCH64EB__
  20830. return __builtin_shuffle (__a, __b, (uint8x8_t) {9, 11, 13, 15, 1, 3, 5, 7});
  20831. #else
  20832. return __builtin_shuffle (__a, __b, (uint8x8_t) {0, 2, 4, 6, 8, 10, 12, 14});
  20833. #endif
  20834. }
  20835. __extension__ static __inline poly16x4_t __attribute__ ((__always_inline__))
  20836. vuzp1_p16 (poly16x4_t __a, poly16x4_t __b)
  20837. {
  20838. #ifdef __AARCH64EB__
  20839. return __builtin_shuffle (__a, __b, (uint16x4_t) {5, 7, 1, 3});
  20840. #else
  20841. return __builtin_shuffle (__a, __b, (uint16x4_t) {0, 2, 4, 6});
  20842. #endif
  20843. }
  20844. __extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
  20845. vuzp1_s8 (int8x8_t __a, int8x8_t __b)
  20846. {
  20847. #ifdef __AARCH64EB__
  20848. return __builtin_shuffle (__a, __b, (uint8x8_t) {9, 11, 13, 15, 1, 3, 5, 7});
  20849. #else
  20850. return __builtin_shuffle (__a, __b, (uint8x8_t) {0, 2, 4, 6, 8, 10, 12, 14});
  20851. #endif
  20852. }
  20853. __extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
  20854. vuzp1_s16 (int16x4_t __a, int16x4_t __b)
  20855. {
  20856. #ifdef __AARCH64EB__
  20857. return __builtin_shuffle (__a, __b, (uint16x4_t) {5, 7, 1, 3});
  20858. #else
  20859. return __builtin_shuffle (__a, __b, (uint16x4_t) {0, 2, 4, 6});
  20860. #endif
  20861. }
  20862. __extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
  20863. vuzp1_s32 (int32x2_t __a, int32x2_t __b)
  20864. {
  20865. #ifdef __AARCH64EB__
  20866. return __builtin_shuffle (__a, __b, (uint32x2_t) {3, 1});
  20867. #else
  20868. return __builtin_shuffle (__a, __b, (uint32x2_t) {0, 2});
  20869. #endif
  20870. }
  20871. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  20872. vuzp1_u8 (uint8x8_t __a, uint8x8_t __b)
  20873. {
  20874. #ifdef __AARCH64EB__
  20875. return __builtin_shuffle (__a, __b, (uint8x8_t) {9, 11, 13, 15, 1, 3, 5, 7});
  20876. #else
  20877. return __builtin_shuffle (__a, __b, (uint8x8_t) {0, 2, 4, 6, 8, 10, 12, 14});
  20878. #endif
  20879. }
  20880. __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
  20881. vuzp1_u16 (uint16x4_t __a, uint16x4_t __b)
  20882. {
  20883. #ifdef __AARCH64EB__
  20884. return __builtin_shuffle (__a, __b, (uint16x4_t) {5, 7, 1, 3});
  20885. #else
  20886. return __builtin_shuffle (__a, __b, (uint16x4_t) {0, 2, 4, 6});
  20887. #endif
  20888. }
  20889. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  20890. vuzp1_u32 (uint32x2_t __a, uint32x2_t __b)
  20891. {
  20892. #ifdef __AARCH64EB__
  20893. return __builtin_shuffle (__a, __b, (uint32x2_t) {3, 1});
  20894. #else
  20895. return __builtin_shuffle (__a, __b, (uint32x2_t) {0, 2});
  20896. #endif
  20897. }
  20898. __extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
  20899. vuzp1q_f32 (float32x4_t __a, float32x4_t __b)
  20900. {
  20901. #ifdef __AARCH64EB__
  20902. return __builtin_shuffle (__a, __b, (uint32x4_t) {5, 7, 1, 3});
  20903. #else
  20904. return __builtin_shuffle (__a, __b, (uint32x4_t) {0, 2, 4, 6});
  20905. #endif
  20906. }
  20907. __extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
  20908. vuzp1q_f64 (float64x2_t __a, float64x2_t __b)
  20909. {
  20910. #ifdef __AARCH64EB__
  20911. return __builtin_shuffle (__a, __b, (uint64x2_t) {3, 1});
  20912. #else
  20913. return __builtin_shuffle (__a, __b, (uint64x2_t) {0, 2});
  20914. #endif
  20915. }
  20916. __extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
  20917. vuzp1q_p8 (poly8x16_t __a, poly8x16_t __b)
  20918. {
  20919. #ifdef __AARCH64EB__
  20920. return __builtin_shuffle (__a, __b, (uint8x16_t)
  20921. {17, 19, 21, 23, 25, 27, 29, 31, 1, 3, 5, 7, 9, 11, 13, 15});
  20922. #else
  20923. return __builtin_shuffle (__a, __b, (uint8x16_t)
  20924. {0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30});
  20925. #endif
  20926. }
  20927. __extension__ static __inline poly16x8_t __attribute__ ((__always_inline__))
  20928. vuzp1q_p16 (poly16x8_t __a, poly16x8_t __b)
  20929. {
  20930. #ifdef __AARCH64EB__
  20931. return __builtin_shuffle (__a, __b, (uint16x8_t) {9, 11, 13, 15, 1, 3, 5, 7});
  20932. #else
  20933. return __builtin_shuffle (__a, __b, (uint16x8_t) {0, 2, 4, 6, 8, 10, 12, 14});
  20934. #endif
  20935. }
  20936. __extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
  20937. vuzp1q_s8 (int8x16_t __a, int8x16_t __b)
  20938. {
  20939. #ifdef __AARCH64EB__
  20940. return __builtin_shuffle (__a, __b,
  20941. (uint8x16_t) {17, 19, 21, 23, 25, 27, 29, 31, 1, 3, 5, 7, 9, 11, 13, 15});
  20942. #else
  20943. return __builtin_shuffle (__a, __b,
  20944. (uint8x16_t) {0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30});
  20945. #endif
  20946. }
  20947. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  20948. vuzp1q_s16 (int16x8_t __a, int16x8_t __b)
  20949. {
  20950. #ifdef __AARCH64EB__
  20951. return __builtin_shuffle (__a, __b, (uint16x8_t) {9, 11, 13, 15, 1, 3, 5, 7});
  20952. #else
  20953. return __builtin_shuffle (__a, __b, (uint16x8_t) {0, 2, 4, 6, 8, 10, 12, 14});
  20954. #endif
  20955. }
  20956. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  20957. vuzp1q_s32 (int32x4_t __a, int32x4_t __b)
  20958. {
  20959. #ifdef __AARCH64EB__
  20960. return __builtin_shuffle (__a, __b, (uint32x4_t) {5, 7, 1, 3});
  20961. #else
  20962. return __builtin_shuffle (__a, __b, (uint32x4_t) {0, 2, 4, 6});
  20963. #endif
  20964. }
  20965. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  20966. vuzp1q_s64 (int64x2_t __a, int64x2_t __b)
  20967. {
  20968. #ifdef __AARCH64EB__
  20969. return __builtin_shuffle (__a, __b, (uint64x2_t) {3, 1});
  20970. #else
  20971. return __builtin_shuffle (__a, __b, (uint64x2_t) {0, 2});
  20972. #endif
  20973. }
  20974. __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
  20975. vuzp1q_u8 (uint8x16_t __a, uint8x16_t __b)
  20976. {
  20977. #ifdef __AARCH64EB__
  20978. return __builtin_shuffle (__a, __b,
  20979. (uint8x16_t) {17, 19, 21, 23, 25, 27, 29, 31, 1, 3, 5, 7, 9, 11, 13, 15});
  20980. #else
  20981. return __builtin_shuffle (__a, __b,
  20982. (uint8x16_t) {0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30});
  20983. #endif
  20984. }
  20985. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  20986. vuzp1q_u16 (uint16x8_t __a, uint16x8_t __b)
  20987. {
  20988. #ifdef __AARCH64EB__
  20989. return __builtin_shuffle (__a, __b, (uint16x8_t) {9, 11, 13, 15, 1, 3, 5, 7});
  20990. #else
  20991. return __builtin_shuffle (__a, __b, (uint16x8_t) {0, 2, 4, 6, 8, 10, 12, 14});
  20992. #endif
  20993. }
  20994. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  20995. vuzp1q_u32 (uint32x4_t __a, uint32x4_t __b)
  20996. {
  20997. #ifdef __AARCH64EB__
  20998. return __builtin_shuffle (__a, __b, (uint32x4_t) {5, 7, 1, 3});
  20999. #else
  21000. return __builtin_shuffle (__a, __b, (uint32x4_t) {0, 2, 4, 6});
  21001. #endif
  21002. }
  21003. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  21004. vuzp1q_u64 (uint64x2_t __a, uint64x2_t __b)
  21005. {
  21006. #ifdef __AARCH64EB__
  21007. return __builtin_shuffle (__a, __b, (uint64x2_t) {3, 1});
  21008. #else
  21009. return __builtin_shuffle (__a, __b, (uint64x2_t) {0, 2});
  21010. #endif
  21011. }
  21012. __extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
  21013. vuzp2_f32 (float32x2_t __a, float32x2_t __b)
  21014. {
  21015. #ifdef __AARCH64EB__
  21016. return __builtin_shuffle (__a, __b, (uint32x2_t) {2, 0});
  21017. #else
  21018. return __builtin_shuffle (__a, __b, (uint32x2_t) {1, 3});
  21019. #endif
  21020. }
  21021. __extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
  21022. vuzp2_p8 (poly8x8_t __a, poly8x8_t __b)
  21023. {
  21024. #ifdef __AARCH64EB__
  21025. return __builtin_shuffle (__a, __b, (uint8x8_t) {8, 10, 12, 14, 0, 2, 4, 6});
  21026. #else
  21027. return __builtin_shuffle (__a, __b, (uint8x8_t) {1, 3, 5, 7, 9, 11, 13, 15});
  21028. #endif
  21029. }
  21030. __extension__ static __inline poly16x4_t __attribute__ ((__always_inline__))
  21031. vuzp2_p16 (poly16x4_t __a, poly16x4_t __b)
  21032. {
  21033. #ifdef __AARCH64EB__
  21034. return __builtin_shuffle (__a, __b, (uint16x4_t) {4, 6, 0, 2});
  21035. #else
  21036. return __builtin_shuffle (__a, __b, (uint16x4_t) {1, 3, 5, 7});
  21037. #endif
  21038. }
  21039. __extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
  21040. vuzp2_s8 (int8x8_t __a, int8x8_t __b)
  21041. {
  21042. #ifdef __AARCH64EB__
  21043. return __builtin_shuffle (__a, __b, (uint8x8_t) {8, 10, 12, 14, 0, 2, 4, 6});
  21044. #else
  21045. return __builtin_shuffle (__a, __b, (uint8x8_t) {1, 3, 5, 7, 9, 11, 13, 15});
  21046. #endif
  21047. }
  21048. __extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
  21049. vuzp2_s16 (int16x4_t __a, int16x4_t __b)
  21050. {
  21051. #ifdef __AARCH64EB__
  21052. return __builtin_shuffle (__a, __b, (uint16x4_t) {4, 6, 0, 2});
  21053. #else
  21054. return __builtin_shuffle (__a, __b, (uint16x4_t) {1, 3, 5, 7});
  21055. #endif
  21056. }
  21057. __extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
  21058. vuzp2_s32 (int32x2_t __a, int32x2_t __b)
  21059. {
  21060. #ifdef __AARCH64EB__
  21061. return __builtin_shuffle (__a, __b, (uint32x2_t) {2, 0});
  21062. #else
  21063. return __builtin_shuffle (__a, __b, (uint32x2_t) {1, 3});
  21064. #endif
  21065. }
  21066. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  21067. vuzp2_u8 (uint8x8_t __a, uint8x8_t __b)
  21068. {
  21069. #ifdef __AARCH64EB__
  21070. return __builtin_shuffle (__a, __b, (uint8x8_t) {8, 10, 12, 14, 0, 2, 4, 6});
  21071. #else
  21072. return __builtin_shuffle (__a, __b, (uint8x8_t) {1, 3, 5, 7, 9, 11, 13, 15});
  21073. #endif
  21074. }
  21075. __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
  21076. vuzp2_u16 (uint16x4_t __a, uint16x4_t __b)
  21077. {
  21078. #ifdef __AARCH64EB__
  21079. return __builtin_shuffle (__a, __b, (uint16x4_t) {4, 6, 0, 2});
  21080. #else
  21081. return __builtin_shuffle (__a, __b, (uint16x4_t) {1, 3, 5, 7});
  21082. #endif
  21083. }
  21084. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  21085. vuzp2_u32 (uint32x2_t __a, uint32x2_t __b)
  21086. {
  21087. #ifdef __AARCH64EB__
  21088. return __builtin_shuffle (__a, __b, (uint32x2_t) {2, 0});
  21089. #else
  21090. return __builtin_shuffle (__a, __b, (uint32x2_t) {1, 3});
  21091. #endif
  21092. }
  21093. __extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
  21094. vuzp2q_f32 (float32x4_t __a, float32x4_t __b)
  21095. {
  21096. #ifdef __AARCH64EB__
  21097. return __builtin_shuffle (__a, __b, (uint32x4_t) {4, 6, 0, 2});
  21098. #else
  21099. return __builtin_shuffle (__a, __b, (uint32x4_t) {1, 3, 5, 7});
  21100. #endif
  21101. }
  21102. __extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
  21103. vuzp2q_f64 (float64x2_t __a, float64x2_t __b)
  21104. {
  21105. #ifdef __AARCH64EB__
  21106. return __builtin_shuffle (__a, __b, (uint64x2_t) {2, 0});
  21107. #else
  21108. return __builtin_shuffle (__a, __b, (uint64x2_t) {1, 3});
  21109. #endif
  21110. }
  21111. __extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
  21112. vuzp2q_p8 (poly8x16_t __a, poly8x16_t __b)
  21113. {
  21114. #ifdef __AARCH64EB__
  21115. return __builtin_shuffle (__a, __b,
  21116. (uint8x16_t) {16, 18, 20, 22, 24, 26, 28, 30, 0, 2, 4, 6, 8, 10, 12, 14});
  21117. #else
  21118. return __builtin_shuffle (__a, __b,
  21119. (uint8x16_t) {1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31});
  21120. #endif
  21121. }
  21122. __extension__ static __inline poly16x8_t __attribute__ ((__always_inline__))
  21123. vuzp2q_p16 (poly16x8_t __a, poly16x8_t __b)
  21124. {
  21125. #ifdef __AARCH64EB__
  21126. return __builtin_shuffle (__a, __b, (uint16x8_t) {8, 10, 12, 14, 0, 2, 4, 6});
  21127. #else
  21128. return __builtin_shuffle (__a, __b, (uint16x8_t) {1, 3, 5, 7, 9, 11, 13, 15});
  21129. #endif
  21130. }
  21131. __extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
  21132. vuzp2q_s8 (int8x16_t __a, int8x16_t __b)
  21133. {
  21134. #ifdef __AARCH64EB__
  21135. return __builtin_shuffle (__a, __b,
  21136. (uint8x16_t) {16, 18, 20, 22, 24, 26, 28, 30, 0, 2, 4, 6, 8, 10, 12, 14});
  21137. #else
  21138. return __builtin_shuffle (__a, __b,
  21139. (uint8x16_t) {1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31});
  21140. #endif
  21141. }
  21142. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  21143. vuzp2q_s16 (int16x8_t __a, int16x8_t __b)
  21144. {
  21145. #ifdef __AARCH64EB__
  21146. return __builtin_shuffle (__a, __b, (uint16x8_t) {8, 10, 12, 14, 0, 2, 4, 6});
  21147. #else
  21148. return __builtin_shuffle (__a, __b, (uint16x8_t) {1, 3, 5, 7, 9, 11, 13, 15});
  21149. #endif
  21150. }
  21151. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  21152. vuzp2q_s32 (int32x4_t __a, int32x4_t __b)
  21153. {
  21154. #ifdef __AARCH64EB__
  21155. return __builtin_shuffle (__a, __b, (uint32x4_t) {4, 6, 0, 2});
  21156. #else
  21157. return __builtin_shuffle (__a, __b, (uint32x4_t) {1, 3, 5, 7});
  21158. #endif
  21159. }
  21160. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  21161. vuzp2q_s64 (int64x2_t __a, int64x2_t __b)
  21162. {
  21163. #ifdef __AARCH64EB__
  21164. return __builtin_shuffle (__a, __b, (uint64x2_t) {2, 0});
  21165. #else
  21166. return __builtin_shuffle (__a, __b, (uint64x2_t) {1, 3});
  21167. #endif
  21168. }
  21169. __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
  21170. vuzp2q_u8 (uint8x16_t __a, uint8x16_t __b)
  21171. {
  21172. #ifdef __AARCH64EB__
  21173. return __builtin_shuffle (__a, __b, (uint8x16_t)
  21174. {16, 18, 20, 22, 24, 26, 28, 30, 0, 2, 4, 6, 8, 10, 12, 14});
  21175. #else
  21176. return __builtin_shuffle (__a, __b, (uint8x16_t)
  21177. {1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31});
  21178. #endif
  21179. }
  21180. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  21181. vuzp2q_u16 (uint16x8_t __a, uint16x8_t __b)
  21182. {
  21183. #ifdef __AARCH64EB__
  21184. return __builtin_shuffle (__a, __b, (uint16x8_t) {8, 10, 12, 14, 0, 2, 4, 6});
  21185. #else
  21186. return __builtin_shuffle (__a, __b, (uint16x8_t) {1, 3, 5, 7, 9, 11, 13, 15});
  21187. #endif
  21188. }
  21189. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  21190. vuzp2q_u32 (uint32x4_t __a, uint32x4_t __b)
  21191. {
  21192. #ifdef __AARCH64EB__
  21193. return __builtin_shuffle (__a, __b, (uint32x4_t) {4, 6, 0, 2});
  21194. #else
  21195. return __builtin_shuffle (__a, __b, (uint32x4_t) {1, 3, 5, 7});
  21196. #endif
  21197. }
  21198. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  21199. vuzp2q_u64 (uint64x2_t __a, uint64x2_t __b)
  21200. {
  21201. #ifdef __AARCH64EB__
  21202. return __builtin_shuffle (__a, __b, (uint64x2_t) {2, 0});
  21203. #else
  21204. return __builtin_shuffle (__a, __b, (uint64x2_t) {1, 3});
  21205. #endif
  21206. }
  21207. __INTERLEAVE_LIST (uzp)
  21208. /* vzip */
  21209. __extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
  21210. vzip1_f32 (float32x2_t __a, float32x2_t __b)
  21211. {
  21212. #ifdef __AARCH64EB__
  21213. return __builtin_shuffle (__a, __b, (uint32x2_t) {3, 1});
  21214. #else
  21215. return __builtin_shuffle (__a, __b, (uint32x2_t) {0, 2});
  21216. #endif
  21217. }
  21218. __extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
  21219. vzip1_p8 (poly8x8_t __a, poly8x8_t __b)
  21220. {
  21221. #ifdef __AARCH64EB__
  21222. return __builtin_shuffle (__a, __b, (uint8x8_t) {12, 4, 13, 5, 14, 6, 15, 7});
  21223. #else
  21224. return __builtin_shuffle (__a, __b, (uint8x8_t) {0, 8, 1, 9, 2, 10, 3, 11});
  21225. #endif
  21226. }
  21227. __extension__ static __inline poly16x4_t __attribute__ ((__always_inline__))
  21228. vzip1_p16 (poly16x4_t __a, poly16x4_t __b)
  21229. {
  21230. #ifdef __AARCH64EB__
  21231. return __builtin_shuffle (__a, __b, (uint16x4_t) {6, 2, 7, 3});
  21232. #else
  21233. return __builtin_shuffle (__a, __b, (uint16x4_t) {0, 4, 1, 5});
  21234. #endif
  21235. }
  21236. __extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
  21237. vzip1_s8 (int8x8_t __a, int8x8_t __b)
  21238. {
  21239. #ifdef __AARCH64EB__
  21240. return __builtin_shuffle (__a, __b, (uint8x8_t) {12, 4, 13, 5, 14, 6, 15, 7});
  21241. #else
  21242. return __builtin_shuffle (__a, __b, (uint8x8_t) {0, 8, 1, 9, 2, 10, 3, 11});
  21243. #endif
  21244. }
  21245. __extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
  21246. vzip1_s16 (int16x4_t __a, int16x4_t __b)
  21247. {
  21248. #ifdef __AARCH64EB__
  21249. return __builtin_shuffle (__a, __b, (uint16x4_t) {6, 2, 7, 3});
  21250. #else
  21251. return __builtin_shuffle (__a, __b, (uint16x4_t) {0, 4, 1, 5});
  21252. #endif
  21253. }
  21254. __extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
  21255. vzip1_s32 (int32x2_t __a, int32x2_t __b)
  21256. {
  21257. #ifdef __AARCH64EB__
  21258. return __builtin_shuffle (__a, __b, (uint32x2_t) {3, 1});
  21259. #else
  21260. return __builtin_shuffle (__a, __b, (uint32x2_t) {0, 2});
  21261. #endif
  21262. }
  21263. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  21264. vzip1_u8 (uint8x8_t __a, uint8x8_t __b)
  21265. {
  21266. #ifdef __AARCH64EB__
  21267. return __builtin_shuffle (__a, __b, (uint8x8_t) {12, 4, 13, 5, 14, 6, 15, 7});
  21268. #else
  21269. return __builtin_shuffle (__a, __b, (uint8x8_t) {0, 8, 1, 9, 2, 10, 3, 11});
  21270. #endif
  21271. }
  21272. __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
  21273. vzip1_u16 (uint16x4_t __a, uint16x4_t __b)
  21274. {
  21275. #ifdef __AARCH64EB__
  21276. return __builtin_shuffle (__a, __b, (uint16x4_t) {6, 2, 7, 3});
  21277. #else
  21278. return __builtin_shuffle (__a, __b, (uint16x4_t) {0, 4, 1, 5});
  21279. #endif
  21280. }
  21281. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  21282. vzip1_u32 (uint32x2_t __a, uint32x2_t __b)
  21283. {
  21284. #ifdef __AARCH64EB__
  21285. return __builtin_shuffle (__a, __b, (uint32x2_t) {3, 1});
  21286. #else
  21287. return __builtin_shuffle (__a, __b, (uint32x2_t) {0, 2});
  21288. #endif
  21289. }
  21290. __extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
  21291. vzip1q_f32 (float32x4_t __a, float32x4_t __b)
  21292. {
  21293. #ifdef __AARCH64EB__
  21294. return __builtin_shuffle (__a, __b, (uint32x4_t) {6, 2, 7, 3});
  21295. #else
  21296. return __builtin_shuffle (__a, __b, (uint32x4_t) {0, 4, 1, 5});
  21297. #endif
  21298. }
  21299. __extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
  21300. vzip1q_f64 (float64x2_t __a, float64x2_t __b)
  21301. {
  21302. #ifdef __AARCH64EB__
  21303. return __builtin_shuffle (__a, __b, (uint64x2_t) {3, 1});
  21304. #else
  21305. return __builtin_shuffle (__a, __b, (uint64x2_t) {0, 2});
  21306. #endif
  21307. }
  21308. __extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
  21309. vzip1q_p8 (poly8x16_t __a, poly8x16_t __b)
  21310. {
  21311. #ifdef __AARCH64EB__
  21312. return __builtin_shuffle (__a, __b, (uint8x16_t)
  21313. {24, 8, 25, 9, 26, 10, 27, 11, 28, 12, 29, 13, 30, 14, 31, 15});
  21314. #else
  21315. return __builtin_shuffle (__a, __b, (uint8x16_t)
  21316. {0, 16, 1, 17, 2, 18, 3, 19, 4, 20, 5, 21, 6, 22, 7, 23});
  21317. #endif
  21318. }
  21319. __extension__ static __inline poly16x8_t __attribute__ ((__always_inline__))
  21320. vzip1q_p16 (poly16x8_t __a, poly16x8_t __b)
  21321. {
  21322. #ifdef __AARCH64EB__
  21323. return __builtin_shuffle (__a, __b, (uint16x8_t)
  21324. {12, 4, 13, 5, 14, 6, 15, 7});
  21325. #else
  21326. return __builtin_shuffle (__a, __b, (uint16x8_t) {0, 8, 1, 9, 2, 10, 3, 11});
  21327. #endif
  21328. }
  21329. __extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
  21330. vzip1q_s8 (int8x16_t __a, int8x16_t __b)
  21331. {
  21332. #ifdef __AARCH64EB__
  21333. return __builtin_shuffle (__a, __b, (uint8x16_t)
  21334. {24, 8, 25, 9, 26, 10, 27, 11, 28, 12, 29, 13, 30, 14, 31, 15});
  21335. #else
  21336. return __builtin_shuffle (__a, __b, (uint8x16_t)
  21337. {0, 16, 1, 17, 2, 18, 3, 19, 4, 20, 5, 21, 6, 22, 7, 23});
  21338. #endif
  21339. }
  21340. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  21341. vzip1q_s16 (int16x8_t __a, int16x8_t __b)
  21342. {
  21343. #ifdef __AARCH64EB__
  21344. return __builtin_shuffle (__a, __b, (uint16x8_t)
  21345. {12, 4, 13, 5, 14, 6, 15, 7});
  21346. #else
  21347. return __builtin_shuffle (__a, __b, (uint16x8_t) {0, 8, 1, 9, 2, 10, 3, 11});
  21348. #endif
  21349. }
  21350. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  21351. vzip1q_s32 (int32x4_t __a, int32x4_t __b)
  21352. {
  21353. #ifdef __AARCH64EB__
  21354. return __builtin_shuffle (__a, __b, (uint32x4_t) {6, 2, 7, 3});
  21355. #else
  21356. return __builtin_shuffle (__a, __b, (uint32x4_t) {0, 4, 1, 5});
  21357. #endif
  21358. }
  21359. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  21360. vzip1q_s64 (int64x2_t __a, int64x2_t __b)
  21361. {
  21362. #ifdef __AARCH64EB__
  21363. return __builtin_shuffle (__a, __b, (uint64x2_t) {3, 1});
  21364. #else
  21365. return __builtin_shuffle (__a, __b, (uint64x2_t) {0, 2});
  21366. #endif
  21367. }
  21368. __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
  21369. vzip1q_u8 (uint8x16_t __a, uint8x16_t __b)
  21370. {
  21371. #ifdef __AARCH64EB__
  21372. return __builtin_shuffle (__a, __b, (uint8x16_t)
  21373. {24, 8, 25, 9, 26, 10, 27, 11, 28, 12, 29, 13, 30, 14, 31, 15});
  21374. #else
  21375. return __builtin_shuffle (__a, __b, (uint8x16_t)
  21376. {0, 16, 1, 17, 2, 18, 3, 19, 4, 20, 5, 21, 6, 22, 7, 23});
  21377. #endif
  21378. }
  21379. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  21380. vzip1q_u16 (uint16x8_t __a, uint16x8_t __b)
  21381. {
  21382. #ifdef __AARCH64EB__
  21383. return __builtin_shuffle (__a, __b, (uint16x8_t)
  21384. {12, 4, 13, 5, 14, 6, 15, 7});
  21385. #else
  21386. return __builtin_shuffle (__a, __b, (uint16x8_t) {0, 8, 1, 9, 2, 10, 3, 11});
  21387. #endif
  21388. }
  21389. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  21390. vzip1q_u32 (uint32x4_t __a, uint32x4_t __b)
  21391. {
  21392. #ifdef __AARCH64EB__
  21393. return __builtin_shuffle (__a, __b, (uint32x4_t) {6, 2, 7, 3});
  21394. #else
  21395. return __builtin_shuffle (__a, __b, (uint32x4_t) {0, 4, 1, 5});
  21396. #endif
  21397. }
  21398. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  21399. vzip1q_u64 (uint64x2_t __a, uint64x2_t __b)
  21400. {
  21401. #ifdef __AARCH64EB__
  21402. return __builtin_shuffle (__a, __b, (uint64x2_t) {3, 1});
  21403. #else
  21404. return __builtin_shuffle (__a, __b, (uint64x2_t) {0, 2});
  21405. #endif
  21406. }
  21407. __extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
  21408. vzip2_f32 (float32x2_t __a, float32x2_t __b)
  21409. {
  21410. #ifdef __AARCH64EB__
  21411. return __builtin_shuffle (__a, __b, (uint32x2_t) {2, 0});
  21412. #else
  21413. return __builtin_shuffle (__a, __b, (uint32x2_t) {1, 3});
  21414. #endif
  21415. }
  21416. __extension__ static __inline poly8x8_t __attribute__ ((__always_inline__))
  21417. vzip2_p8 (poly8x8_t __a, poly8x8_t __b)
  21418. {
  21419. #ifdef __AARCH64EB__
  21420. return __builtin_shuffle (__a, __b, (uint8x8_t) {8, 0, 9, 1, 10, 2, 11, 3});
  21421. #else
  21422. return __builtin_shuffle (__a, __b, (uint8x8_t) {4, 12, 5, 13, 6, 14, 7, 15});
  21423. #endif
  21424. }
  21425. __extension__ static __inline poly16x4_t __attribute__ ((__always_inline__))
  21426. vzip2_p16 (poly16x4_t __a, poly16x4_t __b)
  21427. {
  21428. #ifdef __AARCH64EB__
  21429. return __builtin_shuffle (__a, __b, (uint16x4_t) {4, 0, 5, 1});
  21430. #else
  21431. return __builtin_shuffle (__a, __b, (uint16x4_t) {2, 6, 3, 7});
  21432. #endif
  21433. }
  21434. __extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
  21435. vzip2_s8 (int8x8_t __a, int8x8_t __b)
  21436. {
  21437. #ifdef __AARCH64EB__
  21438. return __builtin_shuffle (__a, __b, (uint8x8_t) {8, 0, 9, 1, 10, 2, 11, 3});
  21439. #else
  21440. return __builtin_shuffle (__a, __b, (uint8x8_t) {4, 12, 5, 13, 6, 14, 7, 15});
  21441. #endif
  21442. }
  21443. __extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
  21444. vzip2_s16 (int16x4_t __a, int16x4_t __b)
  21445. {
  21446. #ifdef __AARCH64EB__
  21447. return __builtin_shuffle (__a, __b, (uint16x4_t) {4, 0, 5, 1});
  21448. #else
  21449. return __builtin_shuffle (__a, __b, (uint16x4_t) {2, 6, 3, 7});
  21450. #endif
  21451. }
  21452. __extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
  21453. vzip2_s32 (int32x2_t __a, int32x2_t __b)
  21454. {
  21455. #ifdef __AARCH64EB__
  21456. return __builtin_shuffle (__a, __b, (uint32x2_t) {2, 0});
  21457. #else
  21458. return __builtin_shuffle (__a, __b, (uint32x2_t) {1, 3});
  21459. #endif
  21460. }
  21461. __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
  21462. vzip2_u8 (uint8x8_t __a, uint8x8_t __b)
  21463. {
  21464. #ifdef __AARCH64EB__
  21465. return __builtin_shuffle (__a, __b, (uint8x8_t) {8, 0, 9, 1, 10, 2, 11, 3});
  21466. #else
  21467. return __builtin_shuffle (__a, __b, (uint8x8_t) {4, 12, 5, 13, 6, 14, 7, 15});
  21468. #endif
  21469. }
  21470. __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
  21471. vzip2_u16 (uint16x4_t __a, uint16x4_t __b)
  21472. {
  21473. #ifdef __AARCH64EB__
  21474. return __builtin_shuffle (__a, __b, (uint16x4_t) {4, 0, 5, 1});
  21475. #else
  21476. return __builtin_shuffle (__a, __b, (uint16x4_t) {2, 6, 3, 7});
  21477. #endif
  21478. }
  21479. __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
  21480. vzip2_u32 (uint32x2_t __a, uint32x2_t __b)
  21481. {
  21482. #ifdef __AARCH64EB__
  21483. return __builtin_shuffle (__a, __b, (uint32x2_t) {2, 0});
  21484. #else
  21485. return __builtin_shuffle (__a, __b, (uint32x2_t) {1, 3});
  21486. #endif
  21487. }
  21488. __extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
  21489. vzip2q_f32 (float32x4_t __a, float32x4_t __b)
  21490. {
  21491. #ifdef __AARCH64EB__
  21492. return __builtin_shuffle (__a, __b, (uint32x4_t) {4, 0, 5, 1});
  21493. #else
  21494. return __builtin_shuffle (__a, __b, (uint32x4_t) {2, 6, 3, 7});
  21495. #endif
  21496. }
  21497. __extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
  21498. vzip2q_f64 (float64x2_t __a, float64x2_t __b)
  21499. {
  21500. #ifdef __AARCH64EB__
  21501. return __builtin_shuffle (__a, __b, (uint64x2_t) {2, 0});
  21502. #else
  21503. return __builtin_shuffle (__a, __b, (uint64x2_t) {1, 3});
  21504. #endif
  21505. }
  21506. __extension__ static __inline poly8x16_t __attribute__ ((__always_inline__))
  21507. vzip2q_p8 (poly8x16_t __a, poly8x16_t __b)
  21508. {
  21509. #ifdef __AARCH64EB__
  21510. return __builtin_shuffle (__a, __b, (uint8x16_t)
  21511. {16, 0, 17, 1, 18, 2, 19, 3, 20, 4, 21, 5, 22, 6, 23, 7});
  21512. #else
  21513. return __builtin_shuffle (__a, __b, (uint8x16_t)
  21514. {8, 24, 9, 25, 10, 26, 11, 27, 12, 28, 13, 29, 14, 30, 15, 31});
  21515. #endif
  21516. }
  21517. __extension__ static __inline poly16x8_t __attribute__ ((__always_inline__))
  21518. vzip2q_p16 (poly16x8_t __a, poly16x8_t __b)
  21519. {
  21520. #ifdef __AARCH64EB__
  21521. return __builtin_shuffle (__a, __b, (uint16x8_t) {8, 0, 9, 1, 10, 2, 11, 3});
  21522. #else
  21523. return __builtin_shuffle (__a, __b, (uint16x8_t)
  21524. {4, 12, 5, 13, 6, 14, 7, 15});
  21525. #endif
  21526. }
  21527. __extension__ static __inline int8x16_t __attribute__ ((__always_inline__))
  21528. vzip2q_s8 (int8x16_t __a, int8x16_t __b)
  21529. {
  21530. #ifdef __AARCH64EB__
  21531. return __builtin_shuffle (__a, __b, (uint8x16_t)
  21532. {16, 0, 17, 1, 18, 2, 19, 3, 20, 4, 21, 5, 22, 6, 23, 7});
  21533. #else
  21534. return __builtin_shuffle (__a, __b, (uint8x16_t)
  21535. {8, 24, 9, 25, 10, 26, 11, 27, 12, 28, 13, 29, 14, 30, 15, 31});
  21536. #endif
  21537. }
  21538. __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
  21539. vzip2q_s16 (int16x8_t __a, int16x8_t __b)
  21540. {
  21541. #ifdef __AARCH64EB__
  21542. return __builtin_shuffle (__a, __b, (uint16x8_t) {8, 0, 9, 1, 10, 2, 11, 3});
  21543. #else
  21544. return __builtin_shuffle (__a, __b, (uint16x8_t)
  21545. {4, 12, 5, 13, 6, 14, 7, 15});
  21546. #endif
  21547. }
  21548. __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
  21549. vzip2q_s32 (int32x4_t __a, int32x4_t __b)
  21550. {
  21551. #ifdef __AARCH64EB__
  21552. return __builtin_shuffle (__a, __b, (uint32x4_t) {4, 0, 5, 1});
  21553. #else
  21554. return __builtin_shuffle (__a, __b, (uint32x4_t) {2, 6, 3, 7});
  21555. #endif
  21556. }
  21557. __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
  21558. vzip2q_s64 (int64x2_t __a, int64x2_t __b)
  21559. {
  21560. #ifdef __AARCH64EB__
  21561. return __builtin_shuffle (__a, __b, (uint64x2_t) {2, 0});
  21562. #else
  21563. return __builtin_shuffle (__a, __b, (uint64x2_t) {1, 3});
  21564. #endif
  21565. }
  21566. __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
  21567. vzip2q_u8 (uint8x16_t __a, uint8x16_t __b)
  21568. {
  21569. #ifdef __AARCH64EB__
  21570. return __builtin_shuffle (__a, __b, (uint8x16_t)
  21571. {16, 0, 17, 1, 18, 2, 19, 3, 20, 4, 21, 5, 22, 6, 23, 7});
  21572. #else
  21573. return __builtin_shuffle (__a, __b, (uint8x16_t)
  21574. {8, 24, 9, 25, 10, 26, 11, 27, 12, 28, 13, 29, 14, 30, 15, 31});
  21575. #endif
  21576. }
  21577. __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
  21578. vzip2q_u16 (uint16x8_t __a, uint16x8_t __b)
  21579. {
  21580. #ifdef __AARCH64EB__
  21581. return __builtin_shuffle (__a, __b, (uint16x8_t) {8, 0, 9, 1, 10, 2, 11, 3});
  21582. #else
  21583. return __builtin_shuffle (__a, __b, (uint16x8_t)
  21584. {4, 12, 5, 13, 6, 14, 7, 15});
  21585. #endif
  21586. }
  21587. __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
  21588. vzip2q_u32 (uint32x4_t __a, uint32x4_t __b)
  21589. {
  21590. #ifdef __AARCH64EB__
  21591. return __builtin_shuffle (__a, __b, (uint32x4_t) {4, 0, 5, 1});
  21592. #else
  21593. return __builtin_shuffle (__a, __b, (uint32x4_t) {2, 6, 3, 7});
  21594. #endif
  21595. }
  21596. __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
  21597. vzip2q_u64 (uint64x2_t __a, uint64x2_t __b)
  21598. {
  21599. #ifdef __AARCH64EB__
  21600. return __builtin_shuffle (__a, __b, (uint64x2_t) {2, 0});
  21601. #else
  21602. return __builtin_shuffle (__a, __b, (uint64x2_t) {1, 3});
  21603. #endif
  21604. }
  21605. __INTERLEAVE_LIST (zip)
  21606. #undef __INTERLEAVE_LIST
  21607. #undef __DEFINTERLEAVE
  21608. /* End of optimal implementations in approved order. */
  21609. #undef __aarch64_vget_lane_any
  21610. #undef __aarch64_vdup_lane_any
  21611. #undef __aarch64_vdup_lane_f32
  21612. #undef __aarch64_vdup_lane_f64
  21613. #undef __aarch64_vdup_lane_p8
  21614. #undef __aarch64_vdup_lane_p16
  21615. #undef __aarch64_vdup_lane_s8
  21616. #undef __aarch64_vdup_lane_s16
  21617. #undef __aarch64_vdup_lane_s32
  21618. #undef __aarch64_vdup_lane_s64
  21619. #undef __aarch64_vdup_lane_u8
  21620. #undef __aarch64_vdup_lane_u16
  21621. #undef __aarch64_vdup_lane_u32
  21622. #undef __aarch64_vdup_lane_u64
  21623. #undef __aarch64_vdup_laneq_f32
  21624. #undef __aarch64_vdup_laneq_f64
  21625. #undef __aarch64_vdup_laneq_p8
  21626. #undef __aarch64_vdup_laneq_p16
  21627. #undef __aarch64_vdup_laneq_s8
  21628. #undef __aarch64_vdup_laneq_s16
  21629. #undef __aarch64_vdup_laneq_s32
  21630. #undef __aarch64_vdup_laneq_s64
  21631. #undef __aarch64_vdup_laneq_u8
  21632. #undef __aarch64_vdup_laneq_u16
  21633. #undef __aarch64_vdup_laneq_u32
  21634. #undef __aarch64_vdup_laneq_u64
  21635. #undef __aarch64_vdupq_lane_f32
  21636. #undef __aarch64_vdupq_lane_f64
  21637. #undef __aarch64_vdupq_lane_p8
  21638. #undef __aarch64_vdupq_lane_p16
  21639. #undef __aarch64_vdupq_lane_s8
  21640. #undef __aarch64_vdupq_lane_s16
  21641. #undef __aarch64_vdupq_lane_s32
  21642. #undef __aarch64_vdupq_lane_s64
  21643. #undef __aarch64_vdupq_lane_u8
  21644. #undef __aarch64_vdupq_lane_u16
  21645. #undef __aarch64_vdupq_lane_u32
  21646. #undef __aarch64_vdupq_lane_u64
  21647. #undef __aarch64_vdupq_laneq_f32
  21648. #undef __aarch64_vdupq_laneq_f64
  21649. #undef __aarch64_vdupq_laneq_p8
  21650. #undef __aarch64_vdupq_laneq_p16
  21651. #undef __aarch64_vdupq_laneq_s8
  21652. #undef __aarch64_vdupq_laneq_s16
  21653. #undef __aarch64_vdupq_laneq_s32
  21654. #undef __aarch64_vdupq_laneq_s64
  21655. #undef __aarch64_vdupq_laneq_u8
  21656. #undef __aarch64_vdupq_laneq_u16
  21657. #undef __aarch64_vdupq_laneq_u32
  21658. #undef __aarch64_vdupq_laneq_u64
  21659. #endif
  21660. #endif