avx512bwintrin.h 100 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333
  1. /* Copyright (C) 2014-2022 Free Software Foundation, Inc.
  2. This file is part of GCC.
  3. GCC is free software; you can redistribute it and/or modify
  4. it under the terms of the GNU General Public License as published by
  5. the Free Software Foundation; either version 3, or (at your option)
  6. any later version.
  7. GCC is distributed in the hope that it will be useful,
  8. but WITHOUT ANY WARRANTY; without even the implied warranty of
  9. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  10. GNU General Public License for more details.
  11. Under Section 7 of GPL version 3, you are granted additional
  12. permissions described in the GCC Runtime Library Exception, version
  13. 3.1, as published by the Free Software Foundation.
  14. You should have received a copy of the GNU General Public License and
  15. a copy of the GCC Runtime Library Exception along with this program;
  16. see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
  17. <http://www.gnu.org/licenses/>. */
  18. #ifndef _IMMINTRIN_H_INCLUDED
  19. #error "Never use <avx512bwintrin.h> directly; include <immintrin.h> instead."
  20. #endif
  21. #ifndef _AVX512BWINTRIN_H_INCLUDED
  22. #define _AVX512BWINTRIN_H_INCLUDED
  23. #ifndef __AVX512BW__
  24. #pragma GCC push_options
  25. #pragma GCC target("avx512bw")
  26. #define __DISABLE_AVX512BW__
  27. #endif /* __AVX512BW__ */
  28. /* Internal data types for implementing the intrinsics. */
  29. typedef short __v32hi __attribute__ ((__vector_size__ (64)));
  30. typedef short __v32hi_u __attribute__ ((__vector_size__ (64), \
  31. __may_alias__, __aligned__ (1)));
  32. typedef char __v64qi __attribute__ ((__vector_size__ (64)));
  33. typedef char __v64qi_u __attribute__ ((__vector_size__ (64), \
  34. __may_alias__, __aligned__ (1)));
  35. typedef unsigned long long __mmask64;
  36. extern __inline unsigned char
  37. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  38. _ktest_mask32_u8 (__mmask32 __A, __mmask32 __B, unsigned char *__CF)
  39. {
  40. *__CF = (unsigned char) __builtin_ia32_ktestcsi (__A, __B);
  41. return (unsigned char) __builtin_ia32_ktestzsi (__A, __B);
  42. }
  43. extern __inline unsigned char
  44. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  45. _ktest_mask64_u8 (__mmask64 __A, __mmask64 __B, unsigned char *__CF)
  46. {
  47. *__CF = (unsigned char) __builtin_ia32_ktestcdi (__A, __B);
  48. return (unsigned char) __builtin_ia32_ktestzdi (__A, __B);
  49. }
  50. extern __inline unsigned char
  51. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  52. _ktestz_mask32_u8 (__mmask32 __A, __mmask32 __B)
  53. {
  54. return (unsigned char) __builtin_ia32_ktestzsi (__A, __B);
  55. }
  56. extern __inline unsigned char
  57. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  58. _ktestz_mask64_u8 (__mmask64 __A, __mmask64 __B)
  59. {
  60. return (unsigned char) __builtin_ia32_ktestzdi (__A, __B);
  61. }
  62. extern __inline unsigned char
  63. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  64. _ktestc_mask32_u8 (__mmask32 __A, __mmask32 __B)
  65. {
  66. return (unsigned char) __builtin_ia32_ktestcsi (__A, __B);
  67. }
  68. extern __inline unsigned char
  69. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  70. _ktestc_mask64_u8 (__mmask64 __A, __mmask64 __B)
  71. {
  72. return (unsigned char) __builtin_ia32_ktestcdi (__A, __B);
  73. }
  74. extern __inline unsigned char
  75. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  76. _kortest_mask32_u8 (__mmask32 __A, __mmask32 __B, unsigned char *__CF)
  77. {
  78. *__CF = (unsigned char) __builtin_ia32_kortestcsi (__A, __B);
  79. return (unsigned char) __builtin_ia32_kortestzsi (__A, __B);
  80. }
  81. extern __inline unsigned char
  82. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  83. _kortest_mask64_u8 (__mmask64 __A, __mmask64 __B, unsigned char *__CF)
  84. {
  85. *__CF = (unsigned char) __builtin_ia32_kortestcdi (__A, __B);
  86. return (unsigned char) __builtin_ia32_kortestzdi (__A, __B);
  87. }
  88. extern __inline unsigned char
  89. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  90. _kortestz_mask32_u8 (__mmask32 __A, __mmask32 __B)
  91. {
  92. return (unsigned char) __builtin_ia32_kortestzsi (__A, __B);
  93. }
  94. extern __inline unsigned char
  95. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  96. _kortestz_mask64_u8 (__mmask64 __A, __mmask64 __B)
  97. {
  98. return (unsigned char) __builtin_ia32_kortestzdi (__A, __B);
  99. }
  100. extern __inline unsigned char
  101. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  102. _kortestc_mask32_u8 (__mmask32 __A, __mmask32 __B)
  103. {
  104. return (unsigned char) __builtin_ia32_kortestcsi (__A, __B);
  105. }
  106. extern __inline unsigned char
  107. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  108. _kortestc_mask64_u8 (__mmask64 __A, __mmask64 __B)
  109. {
  110. return (unsigned char) __builtin_ia32_kortestcdi (__A, __B);
  111. }
  112. extern __inline __mmask32
  113. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  114. _kadd_mask32 (__mmask32 __A, __mmask32 __B)
  115. {
  116. return (__mmask32) __builtin_ia32_kaddsi ((__mmask32) __A, (__mmask32) __B);
  117. }
  118. extern __inline __mmask64
  119. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  120. _kadd_mask64 (__mmask64 __A, __mmask64 __B)
  121. {
  122. return (__mmask64) __builtin_ia32_kadddi ((__mmask64) __A, (__mmask64) __B);
  123. }
  124. extern __inline unsigned int
  125. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  126. _cvtmask32_u32 (__mmask32 __A)
  127. {
  128. return (unsigned int) __builtin_ia32_kmovd ((__mmask32) __A);
  129. }
  130. extern __inline unsigned long long
  131. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  132. _cvtmask64_u64 (__mmask64 __A)
  133. {
  134. return (unsigned long long) __builtin_ia32_kmovq ((__mmask64) __A);
  135. }
  136. extern __inline __mmask32
  137. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  138. _cvtu32_mask32 (unsigned int __A)
  139. {
  140. return (__mmask32) __builtin_ia32_kmovd ((__mmask32) __A);
  141. }
  142. extern __inline __mmask64
  143. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  144. _cvtu64_mask64 (unsigned long long __A)
  145. {
  146. return (__mmask64) __builtin_ia32_kmovq ((__mmask64) __A);
  147. }
  148. extern __inline __mmask32
  149. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  150. _load_mask32 (__mmask32 *__A)
  151. {
  152. return (__mmask32) __builtin_ia32_kmovd (*__A);
  153. }
  154. extern __inline __mmask64
  155. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  156. _load_mask64 (__mmask64 *__A)
  157. {
  158. return (__mmask64) __builtin_ia32_kmovq (*(__mmask64 *) __A);
  159. }
  160. extern __inline void
  161. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  162. _store_mask32 (__mmask32 *__A, __mmask32 __B)
  163. {
  164. *(__mmask32 *) __A = __builtin_ia32_kmovd (__B);
  165. }
  166. extern __inline void
  167. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  168. _store_mask64 (__mmask64 *__A, __mmask64 __B)
  169. {
  170. *(__mmask64 *) __A = __builtin_ia32_kmovq (__B);
  171. }
  172. extern __inline __mmask32
  173. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  174. _knot_mask32 (__mmask32 __A)
  175. {
  176. return (__mmask32) __builtin_ia32_knotsi ((__mmask32) __A);
  177. }
  178. extern __inline __mmask64
  179. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  180. _knot_mask64 (__mmask64 __A)
  181. {
  182. return (__mmask64) __builtin_ia32_knotdi ((__mmask64) __A);
  183. }
  184. extern __inline __mmask32
  185. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  186. _kor_mask32 (__mmask32 __A, __mmask32 __B)
  187. {
  188. return (__mmask32) __builtin_ia32_korsi ((__mmask32) __A, (__mmask32) __B);
  189. }
  190. extern __inline __mmask64
  191. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  192. _kor_mask64 (__mmask64 __A, __mmask64 __B)
  193. {
  194. return (__mmask64) __builtin_ia32_kordi ((__mmask64) __A, (__mmask64) __B);
  195. }
  196. extern __inline __mmask32
  197. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  198. _kxnor_mask32 (__mmask32 __A, __mmask32 __B)
  199. {
  200. return (__mmask32) __builtin_ia32_kxnorsi ((__mmask32) __A, (__mmask32) __B);
  201. }
  202. extern __inline __mmask64
  203. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  204. _kxnor_mask64 (__mmask64 __A, __mmask64 __B)
  205. {
  206. return (__mmask64) __builtin_ia32_kxnordi ((__mmask64) __A, (__mmask64) __B);
  207. }
  208. extern __inline __mmask32
  209. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  210. _kxor_mask32 (__mmask32 __A, __mmask32 __B)
  211. {
  212. return (__mmask32) __builtin_ia32_kxorsi ((__mmask32) __A, (__mmask32) __B);
  213. }
  214. extern __inline __mmask64
  215. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  216. _kxor_mask64 (__mmask64 __A, __mmask64 __B)
  217. {
  218. return (__mmask64) __builtin_ia32_kxordi ((__mmask64) __A, (__mmask64) __B);
  219. }
  220. extern __inline __mmask32
  221. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  222. _kand_mask32 (__mmask32 __A, __mmask32 __B)
  223. {
  224. return (__mmask32) __builtin_ia32_kandsi ((__mmask32) __A, (__mmask32) __B);
  225. }
  226. extern __inline __mmask64
  227. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  228. _kand_mask64 (__mmask64 __A, __mmask64 __B)
  229. {
  230. return (__mmask64) __builtin_ia32_kanddi ((__mmask64) __A, (__mmask64) __B);
  231. }
  232. extern __inline __mmask32
  233. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  234. _kandn_mask32 (__mmask32 __A, __mmask32 __B)
  235. {
  236. return (__mmask32) __builtin_ia32_kandnsi ((__mmask32) __A, (__mmask32) __B);
  237. }
  238. extern __inline __mmask64
  239. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  240. _kandn_mask64 (__mmask64 __A, __mmask64 __B)
  241. {
  242. return (__mmask64) __builtin_ia32_kandndi ((__mmask64) __A, (__mmask64) __B);
  243. }
  244. extern __inline __m512i
  245. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  246. _mm512_mask_mov_epi16 (__m512i __W, __mmask32 __U, __m512i __A)
  247. {
  248. return (__m512i) __builtin_ia32_movdquhi512_mask ((__v32hi) __A,
  249. (__v32hi) __W,
  250. (__mmask32) __U);
  251. }
  252. extern __inline __m512i
  253. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  254. _mm512_maskz_mov_epi16 (__mmask32 __U, __m512i __A)
  255. {
  256. return (__m512i) __builtin_ia32_movdquhi512_mask ((__v32hi) __A,
  257. (__v32hi)
  258. _mm512_setzero_si512 (),
  259. (__mmask32) __U);
  260. }
  261. extern __inline __m512i
  262. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  263. _mm512_loadu_epi16 (void const *__P)
  264. {
  265. return (__m512i) (*(__v32hi_u *) __P);
  266. }
  267. extern __inline __m512i
  268. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  269. _mm512_mask_loadu_epi16 (__m512i __W, __mmask32 __U, void const *__P)
  270. {
  271. return (__m512i) __builtin_ia32_loaddquhi512_mask ((const short *) __P,
  272. (__v32hi) __W,
  273. (__mmask32) __U);
  274. }
  275. extern __inline __m512i
  276. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  277. _mm512_maskz_loadu_epi16 (__mmask32 __U, void const *__P)
  278. {
  279. return (__m512i) __builtin_ia32_loaddquhi512_mask ((const short *) __P,
  280. (__v32hi)
  281. _mm512_setzero_si512 (),
  282. (__mmask32) __U);
  283. }
  284. extern __inline void
  285. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  286. _mm512_storeu_epi16 (void *__P, __m512i __A)
  287. {
  288. *(__v32hi_u *) __P = (__v32hi_u) __A;
  289. }
  290. extern __inline void
  291. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  292. _mm512_mask_storeu_epi16 (void *__P, __mmask32 __U, __m512i __A)
  293. {
  294. __builtin_ia32_storedquhi512_mask ((short *) __P,
  295. (__v32hi) __A,
  296. (__mmask32) __U);
  297. }
  298. extern __inline __m512i
  299. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  300. _mm512_mask_mov_epi8 (__m512i __W, __mmask64 __U, __m512i __A)
  301. {
  302. return (__m512i) __builtin_ia32_movdquqi512_mask ((__v64qi) __A,
  303. (__v64qi) __W,
  304. (__mmask64) __U);
  305. }
  306. extern __inline __m512i
  307. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  308. _mm512_maskz_mov_epi8 (__mmask64 __U, __m512i __A)
  309. {
  310. return (__m512i) __builtin_ia32_movdquqi512_mask ((__v64qi) __A,
  311. (__v64qi)
  312. _mm512_setzero_si512 (),
  313. (__mmask64) __U);
  314. }
  315. extern __inline __mmask32
  316. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  317. _mm512_kunpackw (__mmask32 __A, __mmask32 __B)
  318. {
  319. return (__mmask32) __builtin_ia32_kunpcksi ((__mmask32) __A,
  320. (__mmask32) __B);
  321. }
  322. extern __inline __mmask32
  323. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  324. _kunpackw_mask32 (__mmask16 __A, __mmask16 __B)
  325. {
  326. return (__mmask32) __builtin_ia32_kunpcksi ((__mmask32) __A,
  327. (__mmask32) __B);
  328. }
  329. extern __inline __mmask64
  330. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  331. _mm512_kunpackd (__mmask64 __A, __mmask64 __B)
  332. {
  333. return (__mmask64) __builtin_ia32_kunpckdi ((__mmask64) __A,
  334. (__mmask64) __B);
  335. }
  336. extern __inline __mmask64
  337. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  338. _kunpackd_mask64 (__mmask32 __A, __mmask32 __B)
  339. {
  340. return (__mmask64) __builtin_ia32_kunpckdi ((__mmask64) __A,
  341. (__mmask64) __B);
  342. }
  343. extern __inline __m512i
  344. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  345. _mm512_loadu_epi8 (void const *__P)
  346. {
  347. return (__m512i) (*(__v64qi_u *) __P);
  348. }
  349. extern __inline __m512i
  350. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  351. _mm512_mask_loadu_epi8 (__m512i __W, __mmask64 __U, void const *__P)
  352. {
  353. return (__m512i) __builtin_ia32_loaddquqi512_mask ((const char *) __P,
  354. (__v64qi) __W,
  355. (__mmask64) __U);
  356. }
  357. extern __inline __m512i
  358. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  359. _mm512_maskz_loadu_epi8 (__mmask64 __U, void const *__P)
  360. {
  361. return (__m512i) __builtin_ia32_loaddquqi512_mask ((const char *) __P,
  362. (__v64qi)
  363. _mm512_setzero_si512 (),
  364. (__mmask64) __U);
  365. }
  366. extern __inline void
  367. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  368. _mm512_storeu_epi8 (void *__P, __m512i __A)
  369. {
  370. *(__v64qi_u *) __P = (__v64qi_u) __A;
  371. }
  372. extern __inline void
  373. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  374. _mm512_mask_storeu_epi8 (void *__P, __mmask64 __U, __m512i __A)
  375. {
  376. __builtin_ia32_storedquqi512_mask ((char *) __P,
  377. (__v64qi) __A,
  378. (__mmask64) __U);
  379. }
  380. extern __inline __m512i
  381. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  382. _mm512_sad_epu8 (__m512i __A, __m512i __B)
  383. {
  384. return (__m512i) __builtin_ia32_psadbw512 ((__v64qi) __A,
  385. (__v64qi) __B);
  386. }
  387. extern __inline __m256i
  388. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  389. _mm512_cvtepi16_epi8 (__m512i __A)
  390. {
  391. return (__m256i) __builtin_ia32_pmovwb512_mask ((__v32hi) __A,
  392. (__v32qi) _mm256_undefined_si256(),
  393. (__mmask32) -1);
  394. }
  395. extern __inline void
  396. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  397. _mm512_mask_cvtepi16_storeu_epi8 (void * __P, __mmask32 __M, __m512i __A)
  398. {
  399. __builtin_ia32_pmovwb512mem_mask ((__v32qi *) __P, (__v32hi) __A, __M);
  400. }
  401. extern __inline __m256i
  402. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  403. _mm512_mask_cvtepi16_epi8 (__m256i __O, __mmask32 __M, __m512i __A)
  404. {
  405. return (__m256i) __builtin_ia32_pmovwb512_mask ((__v32hi) __A,
  406. (__v32qi) __O, __M);
  407. }
  408. extern __inline __m256i
  409. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  410. _mm512_maskz_cvtepi16_epi8 (__mmask32 __M, __m512i __A)
  411. {
  412. return (__m256i) __builtin_ia32_pmovwb512_mask ((__v32hi) __A,
  413. (__v32qi)
  414. _mm256_setzero_si256 (),
  415. __M);
  416. }
  417. extern __inline __m256i
  418. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  419. _mm512_cvtsepi16_epi8 (__m512i __A)
  420. {
  421. return (__m256i) __builtin_ia32_pmovswb512_mask ((__v32hi) __A,
  422. (__v32qi)_mm256_undefined_si256(),
  423. (__mmask32) -1);
  424. }
  425. extern __inline void
  426. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  427. _mm512_mask_cvtsepi16_storeu_epi8 (void * __P, __mmask32 __M, __m512i __A)
  428. {
  429. __builtin_ia32_pmovswb512mem_mask ((__v32qi *) __P, (__v32hi) __A, __M);
  430. }
  431. extern __inline __m256i
  432. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  433. _mm512_mask_cvtsepi16_epi8 (__m256i __O, __mmask32 __M, __m512i __A)
  434. {
  435. return (__m256i) __builtin_ia32_pmovswb512_mask ((__v32hi) __A,
  436. (__v32qi)__O,
  437. __M);
  438. }
  439. extern __inline __m256i
  440. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  441. _mm512_maskz_cvtsepi16_epi8 (__mmask32 __M, __m512i __A)
  442. {
  443. return (__m256i) __builtin_ia32_pmovswb512_mask ((__v32hi) __A,
  444. (__v32qi)
  445. _mm256_setzero_si256 (),
  446. __M);
  447. }
  448. extern __inline __m256i
  449. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  450. _mm512_cvtusepi16_epi8 (__m512i __A)
  451. {
  452. return (__m256i) __builtin_ia32_pmovuswb512_mask ((__v32hi) __A,
  453. (__v32qi)_mm256_undefined_si256(),
  454. (__mmask32) -1);
  455. }
  456. extern __inline __m256i
  457. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  458. _mm512_mask_cvtusepi16_epi8 (__m256i __O, __mmask32 __M, __m512i __A)
  459. {
  460. return (__m256i) __builtin_ia32_pmovuswb512_mask ((__v32hi) __A,
  461. (__v32qi) __O,
  462. __M);
  463. }
  464. extern __inline void
  465. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  466. _mm512_mask_cvtusepi16_storeu_epi8 (void * __P, __mmask32 __M, __m512i __A)
  467. {
  468. __builtin_ia32_pmovuswb512mem_mask ((__v32qi *) __P, (__v32hi) __A, __M);
  469. }
  470. extern __inline __m256i
  471. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  472. _mm512_maskz_cvtusepi16_epi8 (__mmask32 __M, __m512i __A)
  473. {
  474. return (__m256i) __builtin_ia32_pmovuswb512_mask ((__v32hi) __A,
  475. (__v32qi)
  476. _mm256_setzero_si256 (),
  477. __M);
  478. }
  479. extern __inline __m512i
  480. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  481. _mm512_broadcastb_epi8 (__m128i __A)
  482. {
  483. return (__m512i) __builtin_ia32_pbroadcastb512_mask ((__v16qi) __A,
  484. (__v64qi)_mm512_undefined_epi32(),
  485. (__mmask64) -1);
  486. }
  487. extern __inline __m512i
  488. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  489. _mm512_mask_broadcastb_epi8 (__m512i __O, __mmask64 __M, __m128i __A)
  490. {
  491. return (__m512i) __builtin_ia32_pbroadcastb512_mask ((__v16qi) __A,
  492. (__v64qi) __O,
  493. __M);
  494. }
  495. extern __inline __m512i
  496. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  497. _mm512_maskz_broadcastb_epi8 (__mmask64 __M, __m128i __A)
  498. {
  499. return (__m512i) __builtin_ia32_pbroadcastb512_mask ((__v16qi) __A,
  500. (__v64qi)
  501. _mm512_setzero_si512 (),
  502. __M);
  503. }
  504. extern __inline __m512i
  505. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  506. _mm512_mask_set1_epi8 (__m512i __O, __mmask64 __M, char __A)
  507. {
  508. return (__m512i) __builtin_ia32_pbroadcastb512_gpr_mask (__A,
  509. (__v64qi) __O,
  510. __M);
  511. }
  512. extern __inline __m512i
  513. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  514. _mm512_maskz_set1_epi8 (__mmask64 __M, char __A)
  515. {
  516. return (__m512i)
  517. __builtin_ia32_pbroadcastb512_gpr_mask (__A,
  518. (__v64qi)
  519. _mm512_setzero_si512 (),
  520. __M);
  521. }
  522. extern __inline __m512i
  523. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  524. _mm512_broadcastw_epi16 (__m128i __A)
  525. {
  526. return (__m512i) __builtin_ia32_pbroadcastw512_mask ((__v8hi) __A,
  527. (__v32hi)_mm512_undefined_epi32(),
  528. (__mmask32) -1);
  529. }
  530. extern __inline __m512i
  531. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  532. _mm512_mask_broadcastw_epi16 (__m512i __O, __mmask32 __M, __m128i __A)
  533. {
  534. return (__m512i) __builtin_ia32_pbroadcastw512_mask ((__v8hi) __A,
  535. (__v32hi) __O,
  536. __M);
  537. }
  538. extern __inline __m512i
  539. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  540. _mm512_maskz_broadcastw_epi16 (__mmask32 __M, __m128i __A)
  541. {
  542. return (__m512i) __builtin_ia32_pbroadcastw512_mask ((__v8hi) __A,
  543. (__v32hi)
  544. _mm512_setzero_si512 (),
  545. __M);
  546. }
  547. extern __inline __m512i
  548. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  549. _mm512_mask_set1_epi16 (__m512i __O, __mmask32 __M, short __A)
  550. {
  551. return (__m512i) __builtin_ia32_pbroadcastw512_gpr_mask (__A,
  552. (__v32hi) __O,
  553. __M);
  554. }
  555. extern __inline __m512i
  556. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  557. _mm512_maskz_set1_epi16 (__mmask32 __M, short __A)
  558. {
  559. return (__m512i)
  560. __builtin_ia32_pbroadcastw512_gpr_mask (__A,
  561. (__v32hi)
  562. _mm512_setzero_si512 (),
  563. __M);
  564. }
  565. extern __inline __m512i
  566. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  567. _mm512_mulhrs_epi16 (__m512i __A, __m512i __B)
  568. {
  569. return (__m512i) __builtin_ia32_pmulhrsw512_mask ((__v32hi) __A,
  570. (__v32hi) __B,
  571. (__v32hi)
  572. _mm512_setzero_si512 (),
  573. (__mmask32) -1);
  574. }
  575. extern __inline __m512i
  576. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  577. _mm512_mask_mulhrs_epi16 (__m512i __W, __mmask32 __U, __m512i __A,
  578. __m512i __B)
  579. {
  580. return (__m512i) __builtin_ia32_pmulhrsw512_mask ((__v32hi) __A,
  581. (__v32hi) __B,
  582. (__v32hi) __W,
  583. (__mmask32) __U);
  584. }
  585. extern __inline __m512i
  586. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  587. _mm512_maskz_mulhrs_epi16 (__mmask32 __U, __m512i __A, __m512i __B)
  588. {
  589. return (__m512i) __builtin_ia32_pmulhrsw512_mask ((__v32hi) __A,
  590. (__v32hi) __B,
  591. (__v32hi)
  592. _mm512_setzero_si512 (),
  593. (__mmask32) __U);
  594. }
  595. extern __inline __m512i
  596. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  597. _mm512_mulhi_epi16 (__m512i __A, __m512i __B)
  598. {
  599. return (__m512i) __builtin_ia32_pmulhw512_mask ((__v32hi) __A,
  600. (__v32hi) __B,
  601. (__v32hi)
  602. _mm512_setzero_si512 (),
  603. (__mmask32) -1);
  604. }
  605. extern __inline __m512i
  606. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  607. _mm512_mask_mulhi_epi16 (__m512i __W, __mmask32 __U, __m512i __A,
  608. __m512i __B)
  609. {
  610. return (__m512i) __builtin_ia32_pmulhw512_mask ((__v32hi) __A,
  611. (__v32hi) __B,
  612. (__v32hi) __W,
  613. (__mmask32) __U);
  614. }
  615. extern __inline __m512i
  616. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  617. _mm512_maskz_mulhi_epi16 (__mmask32 __U, __m512i __A, __m512i __B)
  618. {
  619. return (__m512i) __builtin_ia32_pmulhw512_mask ((__v32hi) __A,
  620. (__v32hi) __B,
  621. (__v32hi)
  622. _mm512_setzero_si512 (),
  623. (__mmask32) __U);
  624. }
  625. extern __inline __m512i
  626. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  627. _mm512_mulhi_epu16 (__m512i __A, __m512i __B)
  628. {
  629. return (__m512i) __builtin_ia32_pmulhuw512_mask ((__v32hi) __A,
  630. (__v32hi) __B,
  631. (__v32hi)
  632. _mm512_setzero_si512 (),
  633. (__mmask32) -1);
  634. }
  635. extern __inline __m512i
  636. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  637. _mm512_mask_mulhi_epu16 (__m512i __W, __mmask32 __U, __m512i __A,
  638. __m512i __B)
  639. {
  640. return (__m512i) __builtin_ia32_pmulhuw512_mask ((__v32hi) __A,
  641. (__v32hi) __B,
  642. (__v32hi) __W,
  643. (__mmask32) __U);
  644. }
  645. extern __inline __m512i
  646. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  647. _mm512_maskz_mulhi_epu16 (__mmask32 __U, __m512i __A, __m512i __B)
  648. {
  649. return (__m512i) __builtin_ia32_pmulhuw512_mask ((__v32hi) __A,
  650. (__v32hi) __B,
  651. (__v32hi)
  652. _mm512_setzero_si512 (),
  653. (__mmask32) __U);
  654. }
  655. extern __inline __m512i
  656. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  657. _mm512_mullo_epi16 (__m512i __A, __m512i __B)
  658. {
  659. return (__m512i) ((__v32hu) __A * (__v32hu) __B);
  660. }
  661. extern __inline __m512i
  662. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  663. _mm512_mask_mullo_epi16 (__m512i __W, __mmask32 __U, __m512i __A,
  664. __m512i __B)
  665. {
  666. return (__m512i) __builtin_ia32_pmullw512_mask ((__v32hi) __A,
  667. (__v32hi) __B,
  668. (__v32hi) __W,
  669. (__mmask32) __U);
  670. }
  671. extern __inline __m512i
  672. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  673. _mm512_maskz_mullo_epi16 (__mmask32 __U, __m512i __A, __m512i __B)
  674. {
  675. return (__m512i) __builtin_ia32_pmullw512_mask ((__v32hi) __A,
  676. (__v32hi) __B,
  677. (__v32hi)
  678. _mm512_setzero_si512 (),
  679. (__mmask32) __U);
  680. }
  681. extern __inline __m512i
  682. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  683. _mm512_cvtepi8_epi16 (__m256i __A)
  684. {
  685. return (__m512i) __builtin_ia32_pmovsxbw512_mask ((__v32qi) __A,
  686. (__v32hi)
  687. _mm512_setzero_si512 (),
  688. (__mmask32) -1);
  689. }
  690. extern __inline __m512i
  691. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  692. _mm512_mask_cvtepi8_epi16 (__m512i __W, __mmask32 __U, __m256i __A)
  693. {
  694. return (__m512i) __builtin_ia32_pmovsxbw512_mask ((__v32qi) __A,
  695. (__v32hi) __W,
  696. (__mmask32) __U);
  697. }
  698. extern __inline __m512i
  699. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  700. _mm512_maskz_cvtepi8_epi16 (__mmask32 __U, __m256i __A)
  701. {
  702. return (__m512i) __builtin_ia32_pmovsxbw512_mask ((__v32qi) __A,
  703. (__v32hi)
  704. _mm512_setzero_si512 (),
  705. (__mmask32) __U);
  706. }
  707. extern __inline __m512i
  708. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  709. _mm512_cvtepu8_epi16 (__m256i __A)
  710. {
  711. return (__m512i) __builtin_ia32_pmovzxbw512_mask ((__v32qi) __A,
  712. (__v32hi)
  713. _mm512_setzero_si512 (),
  714. (__mmask32) -1);
  715. }
  716. extern __inline __m512i
  717. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  718. _mm512_mask_cvtepu8_epi16 (__m512i __W, __mmask32 __U, __m256i __A)
  719. {
  720. return (__m512i) __builtin_ia32_pmovzxbw512_mask ((__v32qi) __A,
  721. (__v32hi) __W,
  722. (__mmask32) __U);
  723. }
  724. extern __inline __m512i
  725. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  726. _mm512_maskz_cvtepu8_epi16 (__mmask32 __U, __m256i __A)
  727. {
  728. return (__m512i) __builtin_ia32_pmovzxbw512_mask ((__v32qi) __A,
  729. (__v32hi)
  730. _mm512_setzero_si512 (),
  731. (__mmask32) __U);
  732. }
  733. extern __inline __m512i
  734. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  735. _mm512_permutexvar_epi16 (__m512i __A, __m512i __B)
  736. {
  737. return (__m512i) __builtin_ia32_permvarhi512_mask ((__v32hi) __B,
  738. (__v32hi) __A,
  739. (__v32hi)
  740. _mm512_setzero_si512 (),
  741. (__mmask32) -1);
  742. }
  743. extern __inline __m512i
  744. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  745. _mm512_maskz_permutexvar_epi16 (__mmask32 __M, __m512i __A,
  746. __m512i __B)
  747. {
  748. return (__m512i) __builtin_ia32_permvarhi512_mask ((__v32hi) __B,
  749. (__v32hi) __A,
  750. (__v32hi)
  751. _mm512_setzero_si512 (),
  752. (__mmask32) __M);
  753. }
  754. extern __inline __m512i
  755. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  756. _mm512_mask_permutexvar_epi16 (__m512i __W, __mmask32 __M, __m512i __A,
  757. __m512i __B)
  758. {
  759. return (__m512i) __builtin_ia32_permvarhi512_mask ((__v32hi) __B,
  760. (__v32hi) __A,
  761. (__v32hi) __W,
  762. (__mmask32) __M);
  763. }
  764. extern __inline __m512i
  765. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  766. _mm512_permutex2var_epi16 (__m512i __A, __m512i __I, __m512i __B)
  767. {
  768. return (__m512i) __builtin_ia32_vpermt2varhi512_mask ((__v32hi) __I
  769. /* idx */ ,
  770. (__v32hi) __A,
  771. (__v32hi) __B,
  772. (__mmask32) -1);
  773. }
  774. extern __inline __m512i
  775. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  776. _mm512_mask_permutex2var_epi16 (__m512i __A, __mmask32 __U,
  777. __m512i __I, __m512i __B)
  778. {
  779. return (__m512i) __builtin_ia32_vpermt2varhi512_mask ((__v32hi) __I
  780. /* idx */ ,
  781. (__v32hi) __A,
  782. (__v32hi) __B,
  783. (__mmask32)
  784. __U);
  785. }
  786. extern __inline __m512i
  787. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  788. _mm512_mask2_permutex2var_epi16 (__m512i __A, __m512i __I,
  789. __mmask32 __U, __m512i __B)
  790. {
  791. return (__m512i) __builtin_ia32_vpermi2varhi512_mask ((__v32hi) __A,
  792. (__v32hi) __I
  793. /* idx */ ,
  794. (__v32hi) __B,
  795. (__mmask32)
  796. __U);
  797. }
  798. extern __inline __m512i
  799. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  800. _mm512_maskz_permutex2var_epi16 (__mmask32 __U, __m512i __A,
  801. __m512i __I, __m512i __B)
  802. {
  803. return (__m512i) __builtin_ia32_vpermt2varhi512_maskz ((__v32hi) __I
  804. /* idx */ ,
  805. (__v32hi) __A,
  806. (__v32hi) __B,
  807. (__mmask32)
  808. __U);
  809. }
  810. extern __inline __m512i
  811. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  812. _mm512_avg_epu8 (__m512i __A, __m512i __B)
  813. {
  814. return (__m512i) __builtin_ia32_pavgb512_mask ((__v64qi) __A,
  815. (__v64qi) __B,
  816. (__v64qi)
  817. _mm512_setzero_si512 (),
  818. (__mmask64) -1);
  819. }
  820. extern __inline __m512i
  821. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  822. _mm512_mask_avg_epu8 (__m512i __W, __mmask64 __U, __m512i __A,
  823. __m512i __B)
  824. {
  825. return (__m512i) __builtin_ia32_pavgb512_mask ((__v64qi) __A,
  826. (__v64qi) __B,
  827. (__v64qi) __W,
  828. (__mmask64) __U);
  829. }
  830. extern __inline __m512i
  831. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  832. _mm512_maskz_avg_epu8 (__mmask64 __U, __m512i __A, __m512i __B)
  833. {
  834. return (__m512i) __builtin_ia32_pavgb512_mask ((__v64qi) __A,
  835. (__v64qi) __B,
  836. (__v64qi)
  837. _mm512_setzero_si512 (),
  838. (__mmask64) __U);
  839. }
  840. extern __inline __m512i
  841. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  842. _mm512_add_epi8 (__m512i __A, __m512i __B)
  843. {
  844. return (__m512i) ((__v64qu) __A + (__v64qu) __B);
  845. }
  846. extern __inline __m512i
  847. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  848. _mm512_mask_add_epi8 (__m512i __W, __mmask64 __U, __m512i __A,
  849. __m512i __B)
  850. {
  851. return (__m512i) __builtin_ia32_paddb512_mask ((__v64qi) __A,
  852. (__v64qi) __B,
  853. (__v64qi) __W,
  854. (__mmask64) __U);
  855. }
  856. extern __inline __m512i
  857. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  858. _mm512_maskz_add_epi8 (__mmask64 __U, __m512i __A, __m512i __B)
  859. {
  860. return (__m512i) __builtin_ia32_paddb512_mask ((__v64qi) __A,
  861. (__v64qi) __B,
  862. (__v64qi)
  863. _mm512_setzero_si512 (),
  864. (__mmask64) __U);
  865. }
  866. extern __inline __m512i
  867. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  868. _mm512_sub_epi8 (__m512i __A, __m512i __B)
  869. {
  870. return (__m512i) ((__v64qu) __A - (__v64qu) __B);
  871. }
  872. extern __inline __m512i
  873. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  874. _mm512_mask_sub_epi8 (__m512i __W, __mmask64 __U, __m512i __A,
  875. __m512i __B)
  876. {
  877. return (__m512i) __builtin_ia32_psubb512_mask ((__v64qi) __A,
  878. (__v64qi) __B,
  879. (__v64qi) __W,
  880. (__mmask64) __U);
  881. }
  882. extern __inline __m512i
  883. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  884. _mm512_maskz_sub_epi8 (__mmask64 __U, __m512i __A, __m512i __B)
  885. {
  886. return (__m512i) __builtin_ia32_psubb512_mask ((__v64qi) __A,
  887. (__v64qi) __B,
  888. (__v64qi)
  889. _mm512_setzero_si512 (),
  890. (__mmask64) __U);
  891. }
  892. extern __inline __m512i
  893. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  894. _mm512_avg_epu16 (__m512i __A, __m512i __B)
  895. {
  896. return (__m512i) __builtin_ia32_pavgw512_mask ((__v32hi) __A,
  897. (__v32hi) __B,
  898. (__v32hi)
  899. _mm512_setzero_si512 (),
  900. (__mmask32) -1);
  901. }
  902. extern __inline __m512i
  903. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  904. _mm512_mask_avg_epu16 (__m512i __W, __mmask32 __U, __m512i __A,
  905. __m512i __B)
  906. {
  907. return (__m512i) __builtin_ia32_pavgw512_mask ((__v32hi) __A,
  908. (__v32hi) __B,
  909. (__v32hi) __W,
  910. (__mmask32) __U);
  911. }
  912. extern __inline __m512i
  913. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  914. _mm512_maskz_avg_epu16 (__mmask32 __U, __m512i __A, __m512i __B)
  915. {
  916. return (__m512i) __builtin_ia32_pavgw512_mask ((__v32hi) __A,
  917. (__v32hi) __B,
  918. (__v32hi)
  919. _mm512_setzero_si512 (),
  920. (__mmask32) __U);
  921. }
  922. extern __inline __m512i
  923. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  924. _mm512_subs_epi8 (__m512i __A, __m512i __B)
  925. {
  926. return (__m512i) __builtin_ia32_psubsb512_mask ((__v64qi) __A,
  927. (__v64qi) __B,
  928. (__v64qi)
  929. _mm512_setzero_si512 (),
  930. (__mmask64) -1);
  931. }
  932. extern __inline __m512i
  933. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  934. _mm512_mask_subs_epi8 (__m512i __W, __mmask64 __U, __m512i __A,
  935. __m512i __B)
  936. {
  937. return (__m512i) __builtin_ia32_psubsb512_mask ((__v64qi) __A,
  938. (__v64qi) __B,
  939. (__v64qi) __W,
  940. (__mmask64) __U);
  941. }
  942. extern __inline __m512i
  943. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  944. _mm512_maskz_subs_epi8 (__mmask64 __U, __m512i __A, __m512i __B)
  945. {
  946. return (__m512i) __builtin_ia32_psubsb512_mask ((__v64qi) __A,
  947. (__v64qi) __B,
  948. (__v64qi)
  949. _mm512_setzero_si512 (),
  950. (__mmask64) __U);
  951. }
  952. extern __inline __m512i
  953. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  954. _mm512_subs_epu8 (__m512i __A, __m512i __B)
  955. {
  956. return (__m512i) __builtin_ia32_psubusb512_mask ((__v64qi) __A,
  957. (__v64qi) __B,
  958. (__v64qi)
  959. _mm512_setzero_si512 (),
  960. (__mmask64) -1);
  961. }
  962. extern __inline __m512i
  963. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  964. _mm512_mask_subs_epu8 (__m512i __W, __mmask64 __U, __m512i __A,
  965. __m512i __B)
  966. {
  967. return (__m512i) __builtin_ia32_psubusb512_mask ((__v64qi) __A,
  968. (__v64qi) __B,
  969. (__v64qi) __W,
  970. (__mmask64) __U);
  971. }
  972. extern __inline __m512i
  973. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  974. _mm512_maskz_subs_epu8 (__mmask64 __U, __m512i __A, __m512i __B)
  975. {
  976. return (__m512i) __builtin_ia32_psubusb512_mask ((__v64qi) __A,
  977. (__v64qi) __B,
  978. (__v64qi)
  979. _mm512_setzero_si512 (),
  980. (__mmask64) __U);
  981. }
  982. extern __inline __m512i
  983. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  984. _mm512_adds_epi8 (__m512i __A, __m512i __B)
  985. {
  986. return (__m512i) __builtin_ia32_paddsb512_mask ((__v64qi) __A,
  987. (__v64qi) __B,
  988. (__v64qi)
  989. _mm512_setzero_si512 (),
  990. (__mmask64) -1);
  991. }
  992. extern __inline __m512i
  993. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  994. _mm512_mask_adds_epi8 (__m512i __W, __mmask64 __U, __m512i __A,
  995. __m512i __B)
  996. {
  997. return (__m512i) __builtin_ia32_paddsb512_mask ((__v64qi) __A,
  998. (__v64qi) __B,
  999. (__v64qi) __W,
  1000. (__mmask64) __U);
  1001. }
  1002. extern __inline __m512i
  1003. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  1004. _mm512_maskz_adds_epi8 (__mmask64 __U, __m512i __A, __m512i __B)
  1005. {
  1006. return (__m512i) __builtin_ia32_paddsb512_mask ((__v64qi) __A,
  1007. (__v64qi) __B,
  1008. (__v64qi)
  1009. _mm512_setzero_si512 (),
  1010. (__mmask64) __U);
  1011. }
  1012. extern __inline __m512i
  1013. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  1014. _mm512_adds_epu8 (__m512i __A, __m512i __B)
  1015. {
  1016. return (__m512i) __builtin_ia32_paddusb512_mask ((__v64qi) __A,
  1017. (__v64qi) __B,
  1018. (__v64qi)
  1019. _mm512_setzero_si512 (),
  1020. (__mmask64) -1);
  1021. }
  1022. extern __inline __m512i
  1023. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  1024. _mm512_mask_adds_epu8 (__m512i __W, __mmask64 __U, __m512i __A,
  1025. __m512i __B)
  1026. {
  1027. return (__m512i) __builtin_ia32_paddusb512_mask ((__v64qi) __A,
  1028. (__v64qi) __B,
  1029. (__v64qi) __W,
  1030. (__mmask64) __U);
  1031. }
  1032. extern __inline __m512i
  1033. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  1034. _mm512_maskz_adds_epu8 (__mmask64 __U, __m512i __A, __m512i __B)
  1035. {
  1036. return (__m512i) __builtin_ia32_paddusb512_mask ((__v64qi) __A,
  1037. (__v64qi) __B,
  1038. (__v64qi)
  1039. _mm512_setzero_si512 (),
  1040. (__mmask64) __U);
  1041. }
  1042. extern __inline __m512i
  1043. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  1044. _mm512_sub_epi16 (__m512i __A, __m512i __B)
  1045. {
  1046. return (__m512i) ((__v32hu) __A - (__v32hu) __B);
  1047. }
  1048. extern __inline __m512i
  1049. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  1050. _mm512_mask_sub_epi16 (__m512i __W, __mmask32 __U, __m512i __A,
  1051. __m512i __B)
  1052. {
  1053. return (__m512i) __builtin_ia32_psubw512_mask ((__v32hi) __A,
  1054. (__v32hi) __B,
  1055. (__v32hi) __W,
  1056. (__mmask32) __U);
  1057. }
  1058. extern __inline __m512i
  1059. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  1060. _mm512_maskz_sub_epi16 (__mmask32 __U, __m512i __A, __m512i __B)
  1061. {
  1062. return (__m512i) __builtin_ia32_psubw512_mask ((__v32hi) __A,
  1063. (__v32hi) __B,
  1064. (__v32hi)
  1065. _mm512_setzero_si512 (),
  1066. (__mmask32) __U);
  1067. }
  1068. extern __inline __m512i
  1069. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  1070. _mm512_subs_epi16 (__m512i __A, __m512i __B)
  1071. {
  1072. return (__m512i) __builtin_ia32_psubsw512_mask ((__v32hi) __A,
  1073. (__v32hi) __B,
  1074. (__v32hi)
  1075. _mm512_setzero_si512 (),
  1076. (__mmask32) -1);
  1077. }
  1078. extern __inline __m512i
  1079. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  1080. _mm512_mask_subs_epi16 (__m512i __W, __mmask32 __U, __m512i __A,
  1081. __m512i __B)
  1082. {
  1083. return (__m512i) __builtin_ia32_psubsw512_mask ((__v32hi) __A,
  1084. (__v32hi) __B,
  1085. (__v32hi) __W,
  1086. (__mmask32) __U);
  1087. }
  1088. extern __inline __m512i
  1089. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  1090. _mm512_maskz_subs_epi16 (__mmask32 __U, __m512i __A, __m512i __B)
  1091. {
  1092. return (__m512i) __builtin_ia32_psubsw512_mask ((__v32hi) __A,
  1093. (__v32hi) __B,
  1094. (__v32hi)
  1095. _mm512_setzero_si512 (),
  1096. (__mmask32) __U);
  1097. }
  1098. extern __inline __m512i
  1099. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  1100. _mm512_subs_epu16 (__m512i __A, __m512i __B)
  1101. {
  1102. return (__m512i) __builtin_ia32_psubusw512_mask ((__v32hi) __A,
  1103. (__v32hi) __B,
  1104. (__v32hi)
  1105. _mm512_setzero_si512 (),
  1106. (__mmask32) -1);
  1107. }
  1108. extern __inline __m512i
  1109. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  1110. _mm512_mask_subs_epu16 (__m512i __W, __mmask32 __U, __m512i __A,
  1111. __m512i __B)
  1112. {
  1113. return (__m512i) __builtin_ia32_psubusw512_mask ((__v32hi) __A,
  1114. (__v32hi) __B,
  1115. (__v32hi) __W,
  1116. (__mmask32) __U);
  1117. }
  1118. extern __inline __m512i
  1119. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  1120. _mm512_maskz_subs_epu16 (__mmask32 __U, __m512i __A, __m512i __B)
  1121. {
  1122. return (__m512i) __builtin_ia32_psubusw512_mask ((__v32hi) __A,
  1123. (__v32hi) __B,
  1124. (__v32hi)
  1125. _mm512_setzero_si512 (),
  1126. (__mmask32) __U);
  1127. }
  1128. extern __inline __m512i
  1129. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  1130. _mm512_add_epi16 (__m512i __A, __m512i __B)
  1131. {
  1132. return (__m512i) ((__v32hu) __A + (__v32hu) __B);
  1133. }
  1134. extern __inline __m512i
  1135. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  1136. _mm512_mask_add_epi16 (__m512i __W, __mmask32 __U, __m512i __A,
  1137. __m512i __B)
  1138. {
  1139. return (__m512i) __builtin_ia32_paddw512_mask ((__v32hi) __A,
  1140. (__v32hi) __B,
  1141. (__v32hi) __W,
  1142. (__mmask32) __U);
  1143. }
  1144. extern __inline __m512i
  1145. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  1146. _mm512_maskz_add_epi16 (__mmask32 __U, __m512i __A, __m512i __B)
  1147. {
  1148. return (__m512i) __builtin_ia32_paddw512_mask ((__v32hi) __A,
  1149. (__v32hi) __B,
  1150. (__v32hi)
  1151. _mm512_setzero_si512 (),
  1152. (__mmask32) __U);
  1153. }
  1154. extern __inline __m512i
  1155. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  1156. _mm512_adds_epi16 (__m512i __A, __m512i __B)
  1157. {
  1158. return (__m512i) __builtin_ia32_paddsw512_mask ((__v32hi) __A,
  1159. (__v32hi) __B,
  1160. (__v32hi)
  1161. _mm512_setzero_si512 (),
  1162. (__mmask32) -1);
  1163. }
  1164. extern __inline __m512i
  1165. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  1166. _mm512_mask_adds_epi16 (__m512i __W, __mmask32 __U, __m512i __A,
  1167. __m512i __B)
  1168. {
  1169. return (__m512i) __builtin_ia32_paddsw512_mask ((__v32hi) __A,
  1170. (__v32hi) __B,
  1171. (__v32hi) __W,
  1172. (__mmask32) __U);
  1173. }
  1174. extern __inline __m512i
  1175. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  1176. _mm512_maskz_adds_epi16 (__mmask32 __U, __m512i __A, __m512i __B)
  1177. {
  1178. return (__m512i) __builtin_ia32_paddsw512_mask ((__v32hi) __A,
  1179. (__v32hi) __B,
  1180. (__v32hi)
  1181. _mm512_setzero_si512 (),
  1182. (__mmask32) __U);
  1183. }
  1184. extern __inline __m512i
  1185. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  1186. _mm512_adds_epu16 (__m512i __A, __m512i __B)
  1187. {
  1188. return (__m512i) __builtin_ia32_paddusw512_mask ((__v32hi) __A,
  1189. (__v32hi) __B,
  1190. (__v32hi)
  1191. _mm512_setzero_si512 (),
  1192. (__mmask32) -1);
  1193. }
  1194. extern __inline __m512i
  1195. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  1196. _mm512_mask_adds_epu16 (__m512i __W, __mmask32 __U, __m512i __A,
  1197. __m512i __B)
  1198. {
  1199. return (__m512i) __builtin_ia32_paddusw512_mask ((__v32hi) __A,
  1200. (__v32hi) __B,
  1201. (__v32hi) __W,
  1202. (__mmask32) __U);
  1203. }
  1204. extern __inline __m512i
  1205. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  1206. _mm512_maskz_adds_epu16 (__mmask32 __U, __m512i __A, __m512i __B)
  1207. {
  1208. return (__m512i) __builtin_ia32_paddusw512_mask ((__v32hi) __A,
  1209. (__v32hi) __B,
  1210. (__v32hi)
  1211. _mm512_setzero_si512 (),
  1212. (__mmask32) __U);
  1213. }
  1214. extern __inline __m512i
  1215. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  1216. _mm512_srl_epi16 (__m512i __A, __m128i __B)
  1217. {
  1218. return (__m512i) __builtin_ia32_psrlw512_mask ((__v32hi) __A,
  1219. (__v8hi) __B,
  1220. (__v32hi)
  1221. _mm512_setzero_si512 (),
  1222. (__mmask32) -1);
  1223. }
  1224. extern __inline __m512i
  1225. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  1226. _mm512_mask_srl_epi16 (__m512i __W, __mmask32 __U, __m512i __A,
  1227. __m128i __B)
  1228. {
  1229. return (__m512i) __builtin_ia32_psrlw512_mask ((__v32hi) __A,
  1230. (__v8hi) __B,
  1231. (__v32hi) __W,
  1232. (__mmask32) __U);
  1233. }
  1234. extern __inline __m512i
  1235. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  1236. _mm512_maskz_srl_epi16 (__mmask32 __U, __m512i __A, __m128i __B)
  1237. {
  1238. return (__m512i) __builtin_ia32_psrlw512_mask ((__v32hi) __A,
  1239. (__v8hi) __B,
  1240. (__v32hi)
  1241. _mm512_setzero_si512 (),
  1242. (__mmask32) __U);
  1243. }
  1244. extern __inline __m512i
  1245. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  1246. _mm512_packs_epi16 (__m512i __A, __m512i __B)
  1247. {
  1248. return (__m512i) __builtin_ia32_packsswb512_mask ((__v32hi) __A,
  1249. (__v32hi) __B,
  1250. (__v64qi)
  1251. _mm512_setzero_si512 (),
  1252. (__mmask64) -1);
  1253. }
  1254. extern __inline __m512i
  1255. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  1256. _mm512_sll_epi16 (__m512i __A, __m128i __B)
  1257. {
  1258. return (__m512i) __builtin_ia32_psllw512_mask ((__v32hi) __A,
  1259. (__v8hi) __B,
  1260. (__v32hi)
  1261. _mm512_setzero_si512 (),
  1262. (__mmask32) -1);
  1263. }
  1264. extern __inline __m512i
  1265. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  1266. _mm512_mask_sll_epi16 (__m512i __W, __mmask32 __U, __m512i __A,
  1267. __m128i __B)
  1268. {
  1269. return (__m512i) __builtin_ia32_psllw512_mask ((__v32hi) __A,
  1270. (__v8hi) __B,
  1271. (__v32hi) __W,
  1272. (__mmask32) __U);
  1273. }
  1274. extern __inline __m512i
  1275. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  1276. _mm512_maskz_sll_epi16 (__mmask32 __U, __m512i __A, __m128i __B)
  1277. {
  1278. return (__m512i) __builtin_ia32_psllw512_mask ((__v32hi) __A,
  1279. (__v8hi) __B,
  1280. (__v32hi)
  1281. _mm512_setzero_si512 (),
  1282. (__mmask32) __U);
  1283. }
  1284. extern __inline __m512i
  1285. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  1286. _mm512_maddubs_epi16 (__m512i __X, __m512i __Y)
  1287. {
  1288. return (__m512i) __builtin_ia32_pmaddubsw512_mask ((__v64qi) __X,
  1289. (__v64qi) __Y,
  1290. (__v32hi)
  1291. _mm512_setzero_si512 (),
  1292. (__mmask32) -1);
  1293. }
  1294. extern __inline __m512i
  1295. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  1296. _mm512_mask_maddubs_epi16 (__m512i __W, __mmask32 __U, __m512i __X,
  1297. __m512i __Y)
  1298. {
  1299. return (__m512i) __builtin_ia32_pmaddubsw512_mask ((__v64qi) __X,
  1300. (__v64qi) __Y,
  1301. (__v32hi) __W,
  1302. (__mmask32) __U);
  1303. }
  1304. extern __inline __m512i
  1305. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  1306. _mm512_maskz_maddubs_epi16 (__mmask32 __U, __m512i __X, __m512i __Y)
  1307. {
  1308. return (__m512i) __builtin_ia32_pmaddubsw512_mask ((__v64qi) __X,
  1309. (__v64qi) __Y,
  1310. (__v32hi)
  1311. _mm512_setzero_si512 (),
  1312. (__mmask32) __U);
  1313. }
  1314. extern __inline __m512i
  1315. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  1316. _mm512_madd_epi16 (__m512i __A, __m512i __B)
  1317. {
  1318. return (__m512i) __builtin_ia32_pmaddwd512_mask ((__v32hi) __A,
  1319. (__v32hi) __B,
  1320. (__v16si)
  1321. _mm512_setzero_si512 (),
  1322. (__mmask16) -1);
  1323. }
  1324. extern __inline __m512i
  1325. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  1326. _mm512_mask_madd_epi16 (__m512i __W, __mmask16 __U, __m512i __A,
  1327. __m512i __B)
  1328. {
  1329. return (__m512i) __builtin_ia32_pmaddwd512_mask ((__v32hi) __A,
  1330. (__v32hi) __B,
  1331. (__v16si) __W,
  1332. (__mmask16) __U);
  1333. }
  1334. extern __inline __m512i
  1335. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  1336. _mm512_maskz_madd_epi16 (__mmask16 __U, __m512i __A, __m512i __B)
  1337. {
  1338. return (__m512i) __builtin_ia32_pmaddwd512_mask ((__v32hi) __A,
  1339. (__v32hi) __B,
  1340. (__v16si)
  1341. _mm512_setzero_si512 (),
  1342. (__mmask16) __U);
  1343. }
  1344. extern __inline __m512i
  1345. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  1346. _mm512_unpackhi_epi8 (__m512i __A, __m512i __B)
  1347. {
  1348. return (__m512i) __builtin_ia32_punpckhbw512_mask ((__v64qi) __A,
  1349. (__v64qi) __B,
  1350. (__v64qi)
  1351. _mm512_setzero_si512 (),
  1352. (__mmask64) -1);
  1353. }
  1354. extern __inline __m512i
  1355. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  1356. _mm512_mask_unpackhi_epi8 (__m512i __W, __mmask64 __U, __m512i __A,
  1357. __m512i __B)
  1358. {
  1359. return (__m512i) __builtin_ia32_punpckhbw512_mask ((__v64qi) __A,
  1360. (__v64qi) __B,
  1361. (__v64qi) __W,
  1362. (__mmask64) __U);
  1363. }
  1364. extern __inline __m512i
  1365. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  1366. _mm512_maskz_unpackhi_epi8 (__mmask64 __U, __m512i __A, __m512i __B)
  1367. {
  1368. return (__m512i) __builtin_ia32_punpckhbw512_mask ((__v64qi) __A,
  1369. (__v64qi) __B,
  1370. (__v64qi)
  1371. _mm512_setzero_si512 (),
  1372. (__mmask64) __U);
  1373. }
  1374. extern __inline __m512i
  1375. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  1376. _mm512_unpackhi_epi16 (__m512i __A, __m512i __B)
  1377. {
  1378. return (__m512i) __builtin_ia32_punpckhwd512_mask ((__v32hi) __A,
  1379. (__v32hi) __B,
  1380. (__v32hi)
  1381. _mm512_setzero_si512 (),
  1382. (__mmask32) -1);
  1383. }
  1384. extern __inline __m512i
  1385. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  1386. _mm512_mask_unpackhi_epi16 (__m512i __W, __mmask32 __U, __m512i __A,
  1387. __m512i __B)
  1388. {
  1389. return (__m512i) __builtin_ia32_punpckhwd512_mask ((__v32hi) __A,
  1390. (__v32hi) __B,
  1391. (__v32hi) __W,
  1392. (__mmask32) __U);
  1393. }
  1394. extern __inline __m512i
  1395. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  1396. _mm512_maskz_unpackhi_epi16 (__mmask32 __U, __m512i __A, __m512i __B)
  1397. {
  1398. return (__m512i) __builtin_ia32_punpckhwd512_mask ((__v32hi) __A,
  1399. (__v32hi) __B,
  1400. (__v32hi)
  1401. _mm512_setzero_si512 (),
  1402. (__mmask32) __U);
  1403. }
  1404. extern __inline __m512i
  1405. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  1406. _mm512_unpacklo_epi8 (__m512i __A, __m512i __B)
  1407. {
  1408. return (__m512i) __builtin_ia32_punpcklbw512_mask ((__v64qi) __A,
  1409. (__v64qi) __B,
  1410. (__v64qi)
  1411. _mm512_setzero_si512 (),
  1412. (__mmask64) -1);
  1413. }
  1414. extern __inline __m512i
  1415. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  1416. _mm512_mask_unpacklo_epi8 (__m512i __W, __mmask64 __U, __m512i __A,
  1417. __m512i __B)
  1418. {
  1419. return (__m512i) __builtin_ia32_punpcklbw512_mask ((__v64qi) __A,
  1420. (__v64qi) __B,
  1421. (__v64qi) __W,
  1422. (__mmask64) __U);
  1423. }
  1424. extern __inline __m512i
  1425. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  1426. _mm512_maskz_unpacklo_epi8 (__mmask64 __U, __m512i __A, __m512i __B)
  1427. {
  1428. return (__m512i) __builtin_ia32_punpcklbw512_mask ((__v64qi) __A,
  1429. (__v64qi) __B,
  1430. (__v64qi)
  1431. _mm512_setzero_si512 (),
  1432. (__mmask64) __U);
  1433. }
  1434. extern __inline __m512i
  1435. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  1436. _mm512_unpacklo_epi16 (__m512i __A, __m512i __B)
  1437. {
  1438. return (__m512i) __builtin_ia32_punpcklwd512_mask ((__v32hi) __A,
  1439. (__v32hi) __B,
  1440. (__v32hi)
  1441. _mm512_setzero_si512 (),
  1442. (__mmask32) -1);
  1443. }
  1444. extern __inline __m512i
  1445. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  1446. _mm512_mask_unpacklo_epi16 (__m512i __W, __mmask32 __U, __m512i __A,
  1447. __m512i __B)
  1448. {
  1449. return (__m512i) __builtin_ia32_punpcklwd512_mask ((__v32hi) __A,
  1450. (__v32hi) __B,
  1451. (__v32hi) __W,
  1452. (__mmask32) __U);
  1453. }
  1454. extern __inline __m512i
  1455. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  1456. _mm512_maskz_unpacklo_epi16 (__mmask32 __U, __m512i __A, __m512i __B)
  1457. {
  1458. return (__m512i) __builtin_ia32_punpcklwd512_mask ((__v32hi) __A,
  1459. (__v32hi) __B,
  1460. (__v32hi)
  1461. _mm512_setzero_si512 (),
  1462. (__mmask32) __U);
  1463. }
  1464. extern __inline __mmask64
  1465. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  1466. _mm512_cmpeq_epu8_mask (__m512i __A, __m512i __B)
  1467. {
  1468. return (__mmask64) __builtin_ia32_ucmpb512_mask ((__v64qi) __A,
  1469. (__v64qi) __B, 0,
  1470. (__mmask64) -1);
  1471. }
  1472. extern __inline __mmask64
  1473. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  1474. _mm512_cmpeq_epi8_mask (__m512i __A, __m512i __B)
  1475. {
  1476. return (__mmask64) __builtin_ia32_pcmpeqb512_mask ((__v64qi) __A,
  1477. (__v64qi) __B,
  1478. (__mmask64) -1);
  1479. }
  1480. extern __inline __mmask64
  1481. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  1482. _mm512_mask_cmpeq_epu8_mask (__mmask64 __U, __m512i __A, __m512i __B)
  1483. {
  1484. return (__mmask64) __builtin_ia32_ucmpb512_mask ((__v64qi) __A,
  1485. (__v64qi) __B, 0,
  1486. __U);
  1487. }
  1488. extern __inline __mmask64
  1489. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  1490. _mm512_mask_cmpeq_epi8_mask (__mmask64 __U, __m512i __A, __m512i __B)
  1491. {
  1492. return (__mmask64) __builtin_ia32_pcmpeqb512_mask ((__v64qi) __A,
  1493. (__v64qi) __B,
  1494. __U);
  1495. }
  1496. extern __inline __mmask32
  1497. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  1498. _mm512_cmpeq_epu16_mask (__m512i __A, __m512i __B)
  1499. {
  1500. return (__mmask32) __builtin_ia32_ucmpw512_mask ((__v32hi) __A,
  1501. (__v32hi) __B, 0,
  1502. (__mmask32) -1);
  1503. }
  1504. extern __inline __mmask32
  1505. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  1506. _mm512_cmpeq_epi16_mask (__m512i __A, __m512i __B)
  1507. {
  1508. return (__mmask32) __builtin_ia32_pcmpeqw512_mask ((__v32hi) __A,
  1509. (__v32hi) __B,
  1510. (__mmask32) -1);
  1511. }
  1512. extern __inline __mmask32
  1513. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  1514. _mm512_mask_cmpeq_epu16_mask (__mmask32 __U, __m512i __A, __m512i __B)
  1515. {
  1516. return (__mmask32) __builtin_ia32_ucmpw512_mask ((__v32hi) __A,
  1517. (__v32hi) __B, 0,
  1518. __U);
  1519. }
  1520. extern __inline __mmask32
  1521. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  1522. _mm512_mask_cmpeq_epi16_mask (__mmask32 __U, __m512i __A, __m512i __B)
  1523. {
  1524. return (__mmask32) __builtin_ia32_pcmpeqw512_mask ((__v32hi) __A,
  1525. (__v32hi) __B,
  1526. __U);
  1527. }
  1528. extern __inline __mmask64
  1529. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  1530. _mm512_cmpgt_epu8_mask (__m512i __A, __m512i __B)
  1531. {
  1532. return (__mmask64) __builtin_ia32_ucmpb512_mask ((__v64qi) __A,
  1533. (__v64qi) __B, 6,
  1534. (__mmask64) -1);
  1535. }
  1536. extern __inline __mmask64
  1537. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  1538. _mm512_cmpgt_epi8_mask (__m512i __A, __m512i __B)
  1539. {
  1540. return (__mmask64) __builtin_ia32_pcmpgtb512_mask ((__v64qi) __A,
  1541. (__v64qi) __B,
  1542. (__mmask64) -1);
  1543. }
  1544. extern __inline __mmask64
  1545. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  1546. _mm512_mask_cmpgt_epu8_mask (__mmask64 __U, __m512i __A, __m512i __B)
  1547. {
  1548. return (__mmask64) __builtin_ia32_ucmpb512_mask ((__v64qi) __A,
  1549. (__v64qi) __B, 6,
  1550. __U);
  1551. }
  1552. extern __inline __mmask64
  1553. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  1554. _mm512_mask_cmpgt_epi8_mask (__mmask64 __U, __m512i __A, __m512i __B)
  1555. {
  1556. return (__mmask64) __builtin_ia32_pcmpgtb512_mask ((__v64qi) __A,
  1557. (__v64qi) __B,
  1558. __U);
  1559. }
  1560. extern __inline __mmask32
  1561. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  1562. _mm512_cmpgt_epu16_mask (__m512i __A, __m512i __B)
  1563. {
  1564. return (__mmask32) __builtin_ia32_ucmpw512_mask ((__v32hi) __A,
  1565. (__v32hi) __B, 6,
  1566. (__mmask32) -1);
  1567. }
  1568. extern __inline __mmask32
  1569. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  1570. _mm512_cmpgt_epi16_mask (__m512i __A, __m512i __B)
  1571. {
  1572. return (__mmask32) __builtin_ia32_pcmpgtw512_mask ((__v32hi) __A,
  1573. (__v32hi) __B,
  1574. (__mmask32) -1);
  1575. }
  1576. extern __inline __mmask32
  1577. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  1578. _mm512_mask_cmpgt_epu16_mask (__mmask32 __U, __m512i __A, __m512i __B)
  1579. {
  1580. return (__mmask32) __builtin_ia32_ucmpw512_mask ((__v32hi) __A,
  1581. (__v32hi) __B, 6,
  1582. __U);
  1583. }
  1584. extern __inline __mmask32
  1585. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  1586. _mm512_mask_cmpgt_epi16_mask (__mmask32 __U, __m512i __A, __m512i __B)
  1587. {
  1588. return (__mmask32) __builtin_ia32_pcmpgtw512_mask ((__v32hi) __A,
  1589. (__v32hi) __B,
  1590. __U);
  1591. }
  1592. extern __inline __mmask64
  1593. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  1594. _mm512_movepi8_mask (__m512i __A)
  1595. {
  1596. return (__mmask64) __builtin_ia32_cvtb2mask512 ((__v64qi) __A);
  1597. }
  1598. extern __inline __mmask32
  1599. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  1600. _mm512_movepi16_mask (__m512i __A)
  1601. {
  1602. return (__mmask32) __builtin_ia32_cvtw2mask512 ((__v32hi) __A);
  1603. }
  1604. extern __inline __m512i
  1605. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  1606. _mm512_movm_epi8 (__mmask64 __A)
  1607. {
  1608. return (__m512i) __builtin_ia32_cvtmask2b512 (__A);
  1609. }
  1610. extern __inline __m512i
  1611. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  1612. _mm512_movm_epi16 (__mmask32 __A)
  1613. {
  1614. return (__m512i) __builtin_ia32_cvtmask2w512 (__A);
  1615. }
  1616. extern __inline __mmask64
  1617. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  1618. _mm512_test_epi8_mask (__m512i __A, __m512i __B)
  1619. {
  1620. return (__mmask64) __builtin_ia32_ptestmb512 ((__v64qi) __A,
  1621. (__v64qi) __B,
  1622. (__mmask64) -1);
  1623. }
  1624. extern __inline __mmask64
  1625. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  1626. _mm512_mask_test_epi8_mask (__mmask64 __U, __m512i __A, __m512i __B)
  1627. {
  1628. return (__mmask64) __builtin_ia32_ptestmb512 ((__v64qi) __A,
  1629. (__v64qi) __B, __U);
  1630. }
  1631. extern __inline __mmask32
  1632. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  1633. _mm512_test_epi16_mask (__m512i __A, __m512i __B)
  1634. {
  1635. return (__mmask32) __builtin_ia32_ptestmw512 ((__v32hi) __A,
  1636. (__v32hi) __B,
  1637. (__mmask32) -1);
  1638. }
  1639. extern __inline __mmask32
  1640. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  1641. _mm512_mask_test_epi16_mask (__mmask32 __U, __m512i __A, __m512i __B)
  1642. {
  1643. return (__mmask32) __builtin_ia32_ptestmw512 ((__v32hi) __A,
  1644. (__v32hi) __B, __U);
  1645. }
  1646. extern __inline __mmask64
  1647. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  1648. _mm512_testn_epi8_mask (__m512i __A, __m512i __B)
  1649. {
  1650. return (__mmask64) __builtin_ia32_ptestnmb512 ((__v64qi) __A,
  1651. (__v64qi) __B,
  1652. (__mmask64) -1);
  1653. }
  1654. extern __inline __mmask64
  1655. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  1656. _mm512_mask_testn_epi8_mask (__mmask64 __U, __m512i __A, __m512i __B)
  1657. {
  1658. return (__mmask64) __builtin_ia32_ptestnmb512 ((__v64qi) __A,
  1659. (__v64qi) __B, __U);
  1660. }
  1661. extern __inline __mmask32
  1662. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  1663. _mm512_testn_epi16_mask (__m512i __A, __m512i __B)
  1664. {
  1665. return (__mmask32) __builtin_ia32_ptestnmw512 ((__v32hi) __A,
  1666. (__v32hi) __B,
  1667. (__mmask32) -1);
  1668. }
  1669. extern __inline __mmask32
  1670. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  1671. _mm512_mask_testn_epi16_mask (__mmask32 __U, __m512i __A, __m512i __B)
  1672. {
  1673. return (__mmask32) __builtin_ia32_ptestnmw512 ((__v32hi) __A,
  1674. (__v32hi) __B, __U);
  1675. }
  1676. extern __inline __m512i
  1677. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  1678. _mm512_shuffle_epi8 (__m512i __A, __m512i __B)
  1679. {
  1680. return (__m512i) __builtin_ia32_pshufb512_mask ((__v64qi) __A,
  1681. (__v64qi) __B,
  1682. (__v64qi)
  1683. _mm512_setzero_si512 (),
  1684. (__mmask64) -1);
  1685. }
  1686. extern __inline __m512i
  1687. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  1688. _mm512_mask_shuffle_epi8 (__m512i __W, __mmask64 __U, __m512i __A,
  1689. __m512i __B)
  1690. {
  1691. return (__m512i) __builtin_ia32_pshufb512_mask ((__v64qi) __A,
  1692. (__v64qi) __B,
  1693. (__v64qi) __W,
  1694. (__mmask64) __U);
  1695. }
  1696. extern __inline __m512i
  1697. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  1698. _mm512_maskz_shuffle_epi8 (__mmask64 __U, __m512i __A, __m512i __B)
  1699. {
  1700. return (__m512i) __builtin_ia32_pshufb512_mask ((__v64qi) __A,
  1701. (__v64qi) __B,
  1702. (__v64qi)
  1703. _mm512_setzero_si512 (),
  1704. (__mmask64) __U);
  1705. }
  1706. extern __inline __m512i
  1707. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  1708. _mm512_min_epu16 (__m512i __A, __m512i __B)
  1709. {
  1710. return (__m512i) __builtin_ia32_pminuw512_mask ((__v32hi) __A,
  1711. (__v32hi) __B,
  1712. (__v32hi)
  1713. _mm512_setzero_si512 (),
  1714. (__mmask32) -1);
  1715. }
  1716. extern __inline __m512i
  1717. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  1718. _mm512_maskz_min_epu16 (__mmask32 __M, __m512i __A, __m512i __B)
  1719. {
  1720. return (__m512i) __builtin_ia32_pminuw512_mask ((__v32hi) __A,
  1721. (__v32hi) __B,
  1722. (__v32hi)
  1723. _mm512_setzero_si512 (),
  1724. (__mmask32) __M);
  1725. }
  1726. extern __inline __m512i
  1727. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  1728. _mm512_mask_min_epu16 (__m512i __W, __mmask32 __M, __m512i __A,
  1729. __m512i __B)
  1730. {
  1731. return (__m512i) __builtin_ia32_pminuw512_mask ((__v32hi) __A,
  1732. (__v32hi) __B,
  1733. (__v32hi) __W,
  1734. (__mmask32) __M);
  1735. }
  1736. extern __inline __m512i
  1737. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  1738. _mm512_min_epi16 (__m512i __A, __m512i __B)
  1739. {
  1740. return (__m512i) __builtin_ia32_pminsw512_mask ((__v32hi) __A,
  1741. (__v32hi) __B,
  1742. (__v32hi)
  1743. _mm512_setzero_si512 (),
  1744. (__mmask32) -1);
  1745. }
  1746. extern __inline __m512i
  1747. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  1748. _mm512_maskz_min_epi16 (__mmask32 __M, __m512i __A, __m512i __B)
  1749. {
  1750. return (__m512i) __builtin_ia32_pminsw512_mask ((__v32hi) __A,
  1751. (__v32hi) __B,
  1752. (__v32hi)
  1753. _mm512_setzero_si512 (),
  1754. (__mmask32) __M);
  1755. }
  1756. extern __inline __m512i
  1757. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  1758. _mm512_mask_min_epi16 (__m512i __W, __mmask32 __M, __m512i __A,
  1759. __m512i __B)
  1760. {
  1761. return (__m512i) __builtin_ia32_pminsw512_mask ((__v32hi) __A,
  1762. (__v32hi) __B,
  1763. (__v32hi) __W,
  1764. (__mmask32) __M);
  1765. }
  1766. extern __inline __m512i
  1767. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  1768. _mm512_max_epu8 (__m512i __A, __m512i __B)
  1769. {
  1770. return (__m512i) __builtin_ia32_pmaxub512_mask ((__v64qi) __A,
  1771. (__v64qi) __B,
  1772. (__v64qi)
  1773. _mm512_setzero_si512 (),
  1774. (__mmask64) -1);
  1775. }
  1776. extern __inline __m512i
  1777. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  1778. _mm512_maskz_max_epu8 (__mmask64 __M, __m512i __A, __m512i __B)
  1779. {
  1780. return (__m512i) __builtin_ia32_pmaxub512_mask ((__v64qi) __A,
  1781. (__v64qi) __B,
  1782. (__v64qi)
  1783. _mm512_setzero_si512 (),
  1784. (__mmask64) __M);
  1785. }
  1786. extern __inline __m512i
  1787. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  1788. _mm512_mask_max_epu8 (__m512i __W, __mmask64 __M, __m512i __A,
  1789. __m512i __B)
  1790. {
  1791. return (__m512i) __builtin_ia32_pmaxub512_mask ((__v64qi) __A,
  1792. (__v64qi) __B,
  1793. (__v64qi) __W,
  1794. (__mmask64) __M);
  1795. }
  1796. extern __inline __m512i
  1797. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  1798. _mm512_max_epi8 (__m512i __A, __m512i __B)
  1799. {
  1800. return (__m512i) __builtin_ia32_pmaxsb512_mask ((__v64qi) __A,
  1801. (__v64qi) __B,
  1802. (__v64qi)
  1803. _mm512_setzero_si512 (),
  1804. (__mmask64) -1);
  1805. }
  1806. extern __inline __m512i
  1807. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  1808. _mm512_maskz_max_epi8 (__mmask64 __M, __m512i __A, __m512i __B)
  1809. {
  1810. return (__m512i) __builtin_ia32_pmaxsb512_mask ((__v64qi) __A,
  1811. (__v64qi) __B,
  1812. (__v64qi)
  1813. _mm512_setzero_si512 (),
  1814. (__mmask64) __M);
  1815. }
  1816. extern __inline __m512i
  1817. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  1818. _mm512_mask_max_epi8 (__m512i __W, __mmask64 __M, __m512i __A,
  1819. __m512i __B)
  1820. {
  1821. return (__m512i) __builtin_ia32_pmaxsb512_mask ((__v64qi) __A,
  1822. (__v64qi) __B,
  1823. (__v64qi) __W,
  1824. (__mmask64) __M);
  1825. }
  1826. extern __inline __m512i
  1827. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  1828. _mm512_min_epu8 (__m512i __A, __m512i __B)
  1829. {
  1830. return (__m512i) __builtin_ia32_pminub512_mask ((__v64qi) __A,
  1831. (__v64qi) __B,
  1832. (__v64qi)
  1833. _mm512_setzero_si512 (),
  1834. (__mmask64) -1);
  1835. }
  1836. extern __inline __m512i
  1837. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  1838. _mm512_maskz_min_epu8 (__mmask64 __M, __m512i __A, __m512i __B)
  1839. {
  1840. return (__m512i) __builtin_ia32_pminub512_mask ((__v64qi) __A,
  1841. (__v64qi) __B,
  1842. (__v64qi)
  1843. _mm512_setzero_si512 (),
  1844. (__mmask64) __M);
  1845. }
  1846. extern __inline __m512i
  1847. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  1848. _mm512_mask_min_epu8 (__m512i __W, __mmask64 __M, __m512i __A,
  1849. __m512i __B)
  1850. {
  1851. return (__m512i) __builtin_ia32_pminub512_mask ((__v64qi) __A,
  1852. (__v64qi) __B,
  1853. (__v64qi) __W,
  1854. (__mmask64) __M);
  1855. }
  1856. extern __inline __m512i
  1857. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  1858. _mm512_min_epi8 (__m512i __A, __m512i __B)
  1859. {
  1860. return (__m512i) __builtin_ia32_pminsb512_mask ((__v64qi) __A,
  1861. (__v64qi) __B,
  1862. (__v64qi)
  1863. _mm512_setzero_si512 (),
  1864. (__mmask64) -1);
  1865. }
  1866. extern __inline __m512i
  1867. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  1868. _mm512_maskz_min_epi8 (__mmask64 __M, __m512i __A, __m512i __B)
  1869. {
  1870. return (__m512i) __builtin_ia32_pminsb512_mask ((__v64qi) __A,
  1871. (__v64qi) __B,
  1872. (__v64qi)
  1873. _mm512_setzero_si512 (),
  1874. (__mmask64) __M);
  1875. }
  1876. extern __inline __m512i
  1877. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  1878. _mm512_mask_min_epi8 (__m512i __W, __mmask64 __M, __m512i __A,
  1879. __m512i __B)
  1880. {
  1881. return (__m512i) __builtin_ia32_pminsb512_mask ((__v64qi) __A,
  1882. (__v64qi) __B,
  1883. (__v64qi) __W,
  1884. (__mmask64) __M);
  1885. }
  1886. extern __inline __m512i
  1887. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  1888. _mm512_max_epi16 (__m512i __A, __m512i __B)
  1889. {
  1890. return (__m512i) __builtin_ia32_pmaxsw512_mask ((__v32hi) __A,
  1891. (__v32hi) __B,
  1892. (__v32hi)
  1893. _mm512_setzero_si512 (),
  1894. (__mmask32) -1);
  1895. }
  1896. extern __inline __m512i
  1897. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  1898. _mm512_maskz_max_epi16 (__mmask32 __M, __m512i __A, __m512i __B)
  1899. {
  1900. return (__m512i) __builtin_ia32_pmaxsw512_mask ((__v32hi) __A,
  1901. (__v32hi) __B,
  1902. (__v32hi)
  1903. _mm512_setzero_si512 (),
  1904. (__mmask32) __M);
  1905. }
  1906. extern __inline __m512i
  1907. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  1908. _mm512_mask_max_epi16 (__m512i __W, __mmask32 __M, __m512i __A,
  1909. __m512i __B)
  1910. {
  1911. return (__m512i) __builtin_ia32_pmaxsw512_mask ((__v32hi) __A,
  1912. (__v32hi) __B,
  1913. (__v32hi) __W,
  1914. (__mmask32) __M);
  1915. }
  1916. extern __inline __m512i
  1917. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  1918. _mm512_max_epu16 (__m512i __A, __m512i __B)
  1919. {
  1920. return (__m512i) __builtin_ia32_pmaxuw512_mask ((__v32hi) __A,
  1921. (__v32hi) __B,
  1922. (__v32hi)
  1923. _mm512_setzero_si512 (),
  1924. (__mmask32) -1);
  1925. }
  1926. extern __inline __m512i
  1927. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  1928. _mm512_maskz_max_epu16 (__mmask32 __M, __m512i __A, __m512i __B)
  1929. {
  1930. return (__m512i) __builtin_ia32_pmaxuw512_mask ((__v32hi) __A,
  1931. (__v32hi) __B,
  1932. (__v32hi)
  1933. _mm512_setzero_si512 (),
  1934. (__mmask32) __M);
  1935. }
  1936. extern __inline __m512i
  1937. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  1938. _mm512_mask_max_epu16 (__m512i __W, __mmask32 __M, __m512i __A,
  1939. __m512i __B)
  1940. {
  1941. return (__m512i) __builtin_ia32_pmaxuw512_mask ((__v32hi) __A,
  1942. (__v32hi) __B,
  1943. (__v32hi) __W,
  1944. (__mmask32) __M);
  1945. }
  1946. extern __inline __m512i
  1947. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  1948. _mm512_sra_epi16 (__m512i __A, __m128i __B)
  1949. {
  1950. return (__m512i) __builtin_ia32_psraw512_mask ((__v32hi) __A,
  1951. (__v8hi) __B,
  1952. (__v32hi)
  1953. _mm512_setzero_si512 (),
  1954. (__mmask32) -1);
  1955. }
  1956. extern __inline __m512i
  1957. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  1958. _mm512_mask_sra_epi16 (__m512i __W, __mmask32 __U, __m512i __A,
  1959. __m128i __B)
  1960. {
  1961. return (__m512i) __builtin_ia32_psraw512_mask ((__v32hi) __A,
  1962. (__v8hi) __B,
  1963. (__v32hi) __W,
  1964. (__mmask32) __U);
  1965. }
  1966. extern __inline __m512i
  1967. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  1968. _mm512_maskz_sra_epi16 (__mmask32 __U, __m512i __A, __m128i __B)
  1969. {
  1970. return (__m512i) __builtin_ia32_psraw512_mask ((__v32hi) __A,
  1971. (__v8hi) __B,
  1972. (__v32hi)
  1973. _mm512_setzero_si512 (),
  1974. (__mmask32) __U);
  1975. }
  1976. extern __inline __m512i
  1977. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  1978. _mm512_srav_epi16 (__m512i __A, __m512i __B)
  1979. {
  1980. return (__m512i) __builtin_ia32_psrav32hi_mask ((__v32hi) __A,
  1981. (__v32hi) __B,
  1982. (__v32hi)
  1983. _mm512_setzero_si512 (),
  1984. (__mmask32) -1);
  1985. }
  1986. extern __inline __m512i
  1987. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  1988. _mm512_mask_srav_epi16 (__m512i __W, __mmask32 __U, __m512i __A,
  1989. __m512i __B)
  1990. {
  1991. return (__m512i) __builtin_ia32_psrav32hi_mask ((__v32hi) __A,
  1992. (__v32hi) __B,
  1993. (__v32hi) __W,
  1994. (__mmask32) __U);
  1995. }
  1996. extern __inline __m512i
  1997. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  1998. _mm512_maskz_srav_epi16 (__mmask32 __U, __m512i __A, __m512i __B)
  1999. {
  2000. return (__m512i) __builtin_ia32_psrav32hi_mask ((__v32hi) __A,
  2001. (__v32hi) __B,
  2002. (__v32hi)
  2003. _mm512_setzero_si512 (),
  2004. (__mmask32) __U);
  2005. }
  2006. extern __inline __m512i
  2007. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  2008. _mm512_srlv_epi16 (__m512i __A, __m512i __B)
  2009. {
  2010. return (__m512i) __builtin_ia32_psrlv32hi_mask ((__v32hi) __A,
  2011. (__v32hi) __B,
  2012. (__v32hi)
  2013. _mm512_setzero_si512 (),
  2014. (__mmask32) -1);
  2015. }
  2016. extern __inline __m512i
  2017. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  2018. _mm512_mask_srlv_epi16 (__m512i __W, __mmask32 __U, __m512i __A,
  2019. __m512i __B)
  2020. {
  2021. return (__m512i) __builtin_ia32_psrlv32hi_mask ((__v32hi) __A,
  2022. (__v32hi) __B,
  2023. (__v32hi) __W,
  2024. (__mmask32) __U);
  2025. }
  2026. extern __inline __m512i
  2027. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  2028. _mm512_maskz_srlv_epi16 (__mmask32 __U, __m512i __A, __m512i __B)
  2029. {
  2030. return (__m512i) __builtin_ia32_psrlv32hi_mask ((__v32hi) __A,
  2031. (__v32hi) __B,
  2032. (__v32hi)
  2033. _mm512_setzero_si512 (),
  2034. (__mmask32) __U);
  2035. }
  2036. extern __inline __m512i
  2037. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  2038. _mm512_sllv_epi16 (__m512i __A, __m512i __B)
  2039. {
  2040. return (__m512i) __builtin_ia32_psllv32hi_mask ((__v32hi) __A,
  2041. (__v32hi) __B,
  2042. (__v32hi)
  2043. _mm512_setzero_si512 (),
  2044. (__mmask32) -1);
  2045. }
  2046. extern __inline __m512i
  2047. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  2048. _mm512_mask_sllv_epi16 (__m512i __W, __mmask32 __U, __m512i __A,
  2049. __m512i __B)
  2050. {
  2051. return (__m512i) __builtin_ia32_psllv32hi_mask ((__v32hi) __A,
  2052. (__v32hi) __B,
  2053. (__v32hi) __W,
  2054. (__mmask32) __U);
  2055. }
  2056. extern __inline __m512i
  2057. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  2058. _mm512_maskz_sllv_epi16 (__mmask32 __U, __m512i __A, __m512i __B)
  2059. {
  2060. return (__m512i) __builtin_ia32_psllv32hi_mask ((__v32hi) __A,
  2061. (__v32hi) __B,
  2062. (__v32hi)
  2063. _mm512_setzero_si512 (),
  2064. (__mmask32) __U);
  2065. }
  2066. extern __inline __m512i
  2067. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  2068. _mm512_mask_packs_epi16 (__m512i __W, __mmask64 __M, __m512i __A,
  2069. __m512i __B)
  2070. {
  2071. return (__m512i) __builtin_ia32_packsswb512_mask ((__v32hi) __A,
  2072. (__v32hi) __B,
  2073. (__v64qi) __W,
  2074. (__mmask64) __M);
  2075. }
  2076. extern __inline __m512i
  2077. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  2078. _mm512_maskz_packs_epi16 (__mmask64 __M, __m512i __A, __m512i __B)
  2079. {
  2080. return (__m512i) __builtin_ia32_packsswb512_mask ((__v32hi) __A,
  2081. (__v32hi) __B,
  2082. (__v64qi)
  2083. _mm512_setzero_si512 (),
  2084. __M);
  2085. }
  2086. extern __inline __m512i
  2087. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  2088. _mm512_packus_epi16 (__m512i __A, __m512i __B)
  2089. {
  2090. return (__m512i) __builtin_ia32_packuswb512_mask ((__v32hi) __A,
  2091. (__v32hi) __B,
  2092. (__v64qi)
  2093. _mm512_setzero_si512 (),
  2094. (__mmask64) -1);
  2095. }
  2096. extern __inline __m512i
  2097. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  2098. _mm512_mask_packus_epi16 (__m512i __W, __mmask64 __M, __m512i __A,
  2099. __m512i __B)
  2100. {
  2101. return (__m512i) __builtin_ia32_packuswb512_mask ((__v32hi) __A,
  2102. (__v32hi) __B,
  2103. (__v64qi) __W,
  2104. (__mmask64) __M);
  2105. }
  2106. extern __inline __m512i
  2107. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  2108. _mm512_maskz_packus_epi16 (__mmask64 __M, __m512i __A, __m512i __B)
  2109. {
  2110. return (__m512i) __builtin_ia32_packuswb512_mask ((__v32hi) __A,
  2111. (__v32hi) __B,
  2112. (__v64qi)
  2113. _mm512_setzero_si512 (),
  2114. (__mmask64) __M);
  2115. }
  2116. extern __inline __m512i
  2117. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  2118. _mm512_abs_epi8 (__m512i __A)
  2119. {
  2120. return (__m512i) __builtin_ia32_pabsb512_mask ((__v64qi) __A,
  2121. (__v64qi)
  2122. _mm512_setzero_si512 (),
  2123. (__mmask64) -1);
  2124. }
  2125. extern __inline __m512i
  2126. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  2127. _mm512_mask_abs_epi8 (__m512i __W, __mmask64 __U, __m512i __A)
  2128. {
  2129. return (__m512i) __builtin_ia32_pabsb512_mask ((__v64qi) __A,
  2130. (__v64qi) __W,
  2131. (__mmask64) __U);
  2132. }
  2133. extern __inline __m512i
  2134. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  2135. _mm512_maskz_abs_epi8 (__mmask64 __U, __m512i __A)
  2136. {
  2137. return (__m512i) __builtin_ia32_pabsb512_mask ((__v64qi) __A,
  2138. (__v64qi)
  2139. _mm512_setzero_si512 (),
  2140. (__mmask64) __U);
  2141. }
  2142. extern __inline __m512i
  2143. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  2144. _mm512_abs_epi16 (__m512i __A)
  2145. {
  2146. return (__m512i) __builtin_ia32_pabsw512_mask ((__v32hi) __A,
  2147. (__v32hi)
  2148. _mm512_setzero_si512 (),
  2149. (__mmask32) -1);
  2150. }
  2151. extern __inline __m512i
  2152. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  2153. _mm512_mask_abs_epi16 (__m512i __W, __mmask32 __U, __m512i __A)
  2154. {
  2155. return (__m512i) __builtin_ia32_pabsw512_mask ((__v32hi) __A,
  2156. (__v32hi) __W,
  2157. (__mmask32) __U);
  2158. }
  2159. extern __inline __m512i
  2160. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  2161. _mm512_maskz_abs_epi16 (__mmask32 __U, __m512i __A)
  2162. {
  2163. return (__m512i) __builtin_ia32_pabsw512_mask ((__v32hi) __A,
  2164. (__v32hi)
  2165. _mm512_setzero_si512 (),
  2166. (__mmask32) __U);
  2167. }
  2168. extern __inline __mmask64
  2169. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  2170. _mm512_mask_cmpneq_epu8_mask (__mmask64 __M, __m512i __X, __m512i __Y)
  2171. {
  2172. return (__mmask64) __builtin_ia32_ucmpb512_mask ((__v64qi) __X,
  2173. (__v64qi) __Y, 4,
  2174. (__mmask64) __M);
  2175. }
  2176. extern __inline __mmask64
  2177. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  2178. _mm512_mask_cmplt_epu8_mask (__mmask64 __M, __m512i __X, __m512i __Y)
  2179. {
  2180. return (__mmask64) __builtin_ia32_ucmpb512_mask ((__v64qi) __X,
  2181. (__v64qi) __Y, 1,
  2182. (__mmask64) __M);
  2183. }
  2184. extern __inline __mmask64
  2185. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  2186. _mm512_mask_cmpge_epu8_mask (__mmask64 __M, __m512i __X, __m512i __Y)
  2187. {
  2188. return (__mmask64) __builtin_ia32_ucmpb512_mask ((__v64qi) __X,
  2189. (__v64qi) __Y, 5,
  2190. (__mmask64) __M);
  2191. }
  2192. extern __inline __mmask64
  2193. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  2194. _mm512_mask_cmple_epu8_mask (__mmask64 __M, __m512i __X, __m512i __Y)
  2195. {
  2196. return (__mmask64) __builtin_ia32_ucmpb512_mask ((__v64qi) __X,
  2197. (__v64qi) __Y, 2,
  2198. (__mmask64) __M);
  2199. }
  2200. extern __inline __mmask32
  2201. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  2202. _mm512_mask_cmpneq_epu16_mask (__mmask32 __M, __m512i __X, __m512i __Y)
  2203. {
  2204. return (__mmask32) __builtin_ia32_ucmpw512_mask ((__v32hi) __X,
  2205. (__v32hi) __Y, 4,
  2206. (__mmask32) __M);
  2207. }
  2208. extern __inline __mmask32
  2209. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  2210. _mm512_mask_cmplt_epu16_mask (__mmask32 __M, __m512i __X, __m512i __Y)
  2211. {
  2212. return (__mmask32) __builtin_ia32_ucmpw512_mask ((__v32hi) __X,
  2213. (__v32hi) __Y, 1,
  2214. (__mmask32) __M);
  2215. }
  2216. extern __inline __mmask32
  2217. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  2218. _mm512_mask_cmpge_epu16_mask (__mmask32 __M, __m512i __X, __m512i __Y)
  2219. {
  2220. return (__mmask32) __builtin_ia32_ucmpw512_mask ((__v32hi) __X,
  2221. (__v32hi) __Y, 5,
  2222. (__mmask32) __M);
  2223. }
  2224. extern __inline __mmask32
  2225. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  2226. _mm512_mask_cmple_epu16_mask (__mmask32 __M, __m512i __X, __m512i __Y)
  2227. {
  2228. return (__mmask32) __builtin_ia32_ucmpw512_mask ((__v32hi) __X,
  2229. (__v32hi) __Y, 2,
  2230. (__mmask32) __M);
  2231. }
  2232. extern __inline __mmask64
  2233. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  2234. _mm512_mask_cmpneq_epi8_mask (__mmask64 __M, __m512i __X, __m512i __Y)
  2235. {
  2236. return (__mmask64) __builtin_ia32_cmpb512_mask ((__v64qi) __X,
  2237. (__v64qi) __Y, 4,
  2238. (__mmask64) __M);
  2239. }
  2240. extern __inline __mmask64
  2241. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  2242. _mm512_mask_cmplt_epi8_mask (__mmask64 __M, __m512i __X, __m512i __Y)
  2243. {
  2244. return (__mmask64) __builtin_ia32_cmpb512_mask ((__v64qi) __X,
  2245. (__v64qi) __Y, 1,
  2246. (__mmask64) __M);
  2247. }
  2248. extern __inline __mmask64
  2249. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  2250. _mm512_mask_cmpge_epi8_mask (__mmask64 __M, __m512i __X, __m512i __Y)
  2251. {
  2252. return (__mmask64) __builtin_ia32_cmpb512_mask ((__v64qi) __X,
  2253. (__v64qi) __Y, 5,
  2254. (__mmask64) __M);
  2255. }
  2256. extern __inline __mmask64
  2257. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  2258. _mm512_mask_cmple_epi8_mask (__mmask64 __M, __m512i __X, __m512i __Y)
  2259. {
  2260. return (__mmask64) __builtin_ia32_cmpb512_mask ((__v64qi) __X,
  2261. (__v64qi) __Y, 2,
  2262. (__mmask64) __M);
  2263. }
  2264. extern __inline __mmask32
  2265. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  2266. _mm512_mask_cmpneq_epi16_mask (__mmask32 __M, __m512i __X, __m512i __Y)
  2267. {
  2268. return (__mmask32) __builtin_ia32_cmpw512_mask ((__v32hi) __X,
  2269. (__v32hi) __Y, 4,
  2270. (__mmask32) __M);
  2271. }
  2272. extern __inline __mmask32
  2273. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  2274. _mm512_mask_cmplt_epi16_mask (__mmask32 __M, __m512i __X, __m512i __Y)
  2275. {
  2276. return (__mmask32) __builtin_ia32_cmpw512_mask ((__v32hi) __X,
  2277. (__v32hi) __Y, 1,
  2278. (__mmask32) __M);
  2279. }
  2280. extern __inline __mmask32
  2281. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  2282. _mm512_mask_cmpge_epi16_mask (__mmask32 __M, __m512i __X, __m512i __Y)
  2283. {
  2284. return (__mmask32) __builtin_ia32_cmpw512_mask ((__v32hi) __X,
  2285. (__v32hi) __Y, 5,
  2286. (__mmask32) __M);
  2287. }
  2288. extern __inline __mmask32
  2289. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  2290. _mm512_mask_cmple_epi16_mask (__mmask32 __M, __m512i __X, __m512i __Y)
  2291. {
  2292. return (__mmask32) __builtin_ia32_cmpw512_mask ((__v32hi) __X,
  2293. (__v32hi) __Y, 2,
  2294. (__mmask32) __M);
  2295. }
  2296. extern __inline __mmask64
  2297. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  2298. _mm512_cmpneq_epu8_mask (__m512i __X, __m512i __Y)
  2299. {
  2300. return (__mmask64) __builtin_ia32_ucmpb512_mask ((__v64qi) __X,
  2301. (__v64qi) __Y, 4,
  2302. (__mmask64) -1);
  2303. }
  2304. extern __inline __mmask64
  2305. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  2306. _mm512_cmplt_epu8_mask (__m512i __X, __m512i __Y)
  2307. {
  2308. return (__mmask64) __builtin_ia32_ucmpb512_mask ((__v64qi) __X,
  2309. (__v64qi) __Y, 1,
  2310. (__mmask64) -1);
  2311. }
  2312. extern __inline __mmask64
  2313. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  2314. _mm512_cmpge_epu8_mask (__m512i __X, __m512i __Y)
  2315. {
  2316. return (__mmask64) __builtin_ia32_ucmpb512_mask ((__v64qi) __X,
  2317. (__v64qi) __Y, 5,
  2318. (__mmask64) -1);
  2319. }
  2320. extern __inline __mmask64
  2321. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  2322. _mm512_cmple_epu8_mask (__m512i __X, __m512i __Y)
  2323. {
  2324. return (__mmask64) __builtin_ia32_ucmpb512_mask ((__v64qi) __X,
  2325. (__v64qi) __Y, 2,
  2326. (__mmask64) -1);
  2327. }
  2328. extern __inline __mmask32
  2329. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  2330. _mm512_cmpneq_epu16_mask (__m512i __X, __m512i __Y)
  2331. {
  2332. return (__mmask32) __builtin_ia32_ucmpw512_mask ((__v32hi) __X,
  2333. (__v32hi) __Y, 4,
  2334. (__mmask32) -1);
  2335. }
  2336. extern __inline __mmask32
  2337. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  2338. _mm512_cmplt_epu16_mask (__m512i __X, __m512i __Y)
  2339. {
  2340. return (__mmask32) __builtin_ia32_ucmpw512_mask ((__v32hi) __X,
  2341. (__v32hi) __Y, 1,
  2342. (__mmask32) -1);
  2343. }
  2344. extern __inline __mmask32
  2345. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  2346. _mm512_cmpge_epu16_mask (__m512i __X, __m512i __Y)
  2347. {
  2348. return (__mmask32) __builtin_ia32_ucmpw512_mask ((__v32hi) __X,
  2349. (__v32hi) __Y, 5,
  2350. (__mmask32) -1);
  2351. }
  2352. extern __inline __mmask32
  2353. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  2354. _mm512_cmple_epu16_mask (__m512i __X, __m512i __Y)
  2355. {
  2356. return (__mmask32) __builtin_ia32_ucmpw512_mask ((__v32hi) __X,
  2357. (__v32hi) __Y, 2,
  2358. (__mmask32) -1);
  2359. }
  2360. extern __inline __mmask64
  2361. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  2362. _mm512_cmpneq_epi8_mask (__m512i __X, __m512i __Y)
  2363. {
  2364. return (__mmask64) __builtin_ia32_cmpb512_mask ((__v64qi) __X,
  2365. (__v64qi) __Y, 4,
  2366. (__mmask64) -1);
  2367. }
  2368. extern __inline __mmask64
  2369. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  2370. _mm512_cmplt_epi8_mask (__m512i __X, __m512i __Y)
  2371. {
  2372. return (__mmask64) __builtin_ia32_cmpb512_mask ((__v64qi) __X,
  2373. (__v64qi) __Y, 1,
  2374. (__mmask64) -1);
  2375. }
  2376. extern __inline __mmask64
  2377. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  2378. _mm512_cmpge_epi8_mask (__m512i __X, __m512i __Y)
  2379. {
  2380. return (__mmask64) __builtin_ia32_cmpb512_mask ((__v64qi) __X,
  2381. (__v64qi) __Y, 5,
  2382. (__mmask64) -1);
  2383. }
  2384. extern __inline __mmask64
  2385. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  2386. _mm512_cmple_epi8_mask (__m512i __X, __m512i __Y)
  2387. {
  2388. return (__mmask64) __builtin_ia32_cmpb512_mask ((__v64qi) __X,
  2389. (__v64qi) __Y, 2,
  2390. (__mmask64) -1);
  2391. }
  2392. extern __inline __mmask32
  2393. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  2394. _mm512_cmpneq_epi16_mask (__m512i __X, __m512i __Y)
  2395. {
  2396. return (__mmask32) __builtin_ia32_cmpw512_mask ((__v32hi) __X,
  2397. (__v32hi) __Y, 4,
  2398. (__mmask32) -1);
  2399. }
  2400. extern __inline __mmask32
  2401. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  2402. _mm512_cmplt_epi16_mask (__m512i __X, __m512i __Y)
  2403. {
  2404. return (__mmask32) __builtin_ia32_cmpw512_mask ((__v32hi) __X,
  2405. (__v32hi) __Y, 1,
  2406. (__mmask32) -1);
  2407. }
  2408. extern __inline __mmask32
  2409. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  2410. _mm512_cmpge_epi16_mask (__m512i __X, __m512i __Y)
  2411. {
  2412. return (__mmask32) __builtin_ia32_cmpw512_mask ((__v32hi) __X,
  2413. (__v32hi) __Y, 5,
  2414. (__mmask32) -1);
  2415. }
  2416. extern __inline __mmask32
  2417. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  2418. _mm512_cmple_epi16_mask (__m512i __X, __m512i __Y)
  2419. {
  2420. return (__mmask32) __builtin_ia32_cmpw512_mask ((__v32hi) __X,
  2421. (__v32hi) __Y, 2,
  2422. (__mmask32) -1);
  2423. }
  2424. extern __inline __m512i
  2425. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  2426. _mm512_packs_epi32 (__m512i __A, __m512i __B)
  2427. {
  2428. return (__m512i) __builtin_ia32_packssdw512_mask ((__v16si) __A,
  2429. (__v16si) __B,
  2430. (__v32hi)
  2431. _mm512_setzero_si512 (),
  2432. (__mmask32) -1);
  2433. }
  2434. extern __inline __m512i
  2435. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  2436. _mm512_maskz_packs_epi32 (__mmask32 __M, __m512i __A, __m512i __B)
  2437. {
  2438. return (__m512i) __builtin_ia32_packssdw512_mask ((__v16si) __A,
  2439. (__v16si) __B,
  2440. (__v32hi)
  2441. _mm512_setzero_si512 (),
  2442. __M);
  2443. }
  2444. extern __inline __m512i
  2445. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  2446. _mm512_mask_packs_epi32 (__m512i __W, __mmask32 __M, __m512i __A,
  2447. __m512i __B)
  2448. {
  2449. return (__m512i) __builtin_ia32_packssdw512_mask ((__v16si) __A,
  2450. (__v16si) __B,
  2451. (__v32hi) __W,
  2452. __M);
  2453. }
  2454. extern __inline __m512i
  2455. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  2456. _mm512_packus_epi32 (__m512i __A, __m512i __B)
  2457. {
  2458. return (__m512i) __builtin_ia32_packusdw512_mask ((__v16si) __A,
  2459. (__v16si) __B,
  2460. (__v32hi)
  2461. _mm512_setzero_si512 (),
  2462. (__mmask32) -1);
  2463. }
  2464. extern __inline __m512i
  2465. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  2466. _mm512_maskz_packus_epi32 (__mmask32 __M, __m512i __A, __m512i __B)
  2467. {
  2468. return (__m512i) __builtin_ia32_packusdw512_mask ((__v16si) __A,
  2469. (__v16si) __B,
  2470. (__v32hi)
  2471. _mm512_setzero_si512 (),
  2472. __M);
  2473. }
  2474. extern __inline __m512i
  2475. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  2476. _mm512_mask_packus_epi32 (__m512i __W, __mmask32 __M, __m512i __A,
  2477. __m512i __B)
  2478. {
  2479. return (__m512i) __builtin_ia32_packusdw512_mask ((__v16si) __A,
  2480. (__v16si) __B,
  2481. (__v32hi) __W,
  2482. __M);
  2483. }
  2484. #ifdef __OPTIMIZE__
  2485. extern __inline __mmask32
  2486. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  2487. _kshiftli_mask32 (__mmask32 __A, unsigned int __B)
  2488. {
  2489. return (__mmask32) __builtin_ia32_kshiftlisi ((__mmask32) __A,
  2490. (__mmask8) __B);
  2491. }
  2492. extern __inline __mmask64
  2493. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  2494. _kshiftli_mask64 (__mmask64 __A, unsigned int __B)
  2495. {
  2496. return (__mmask64) __builtin_ia32_kshiftlidi ((__mmask64) __A,
  2497. (__mmask8) __B);
  2498. }
  2499. extern __inline __mmask32
  2500. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  2501. _kshiftri_mask32 (__mmask32 __A, unsigned int __B)
  2502. {
  2503. return (__mmask32) __builtin_ia32_kshiftrisi ((__mmask32) __A,
  2504. (__mmask8) __B);
  2505. }
  2506. extern __inline __mmask64
  2507. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  2508. _kshiftri_mask64 (__mmask64 __A, unsigned int __B)
  2509. {
  2510. return (__mmask64) __builtin_ia32_kshiftridi ((__mmask64) __A,
  2511. (__mmask8) __B);
  2512. }
  2513. extern __inline __m512i
  2514. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  2515. _mm512_alignr_epi8 (__m512i __A, __m512i __B, const int __N)
  2516. {
  2517. return (__m512i) __builtin_ia32_palignr512 ((__v8di) __A,
  2518. (__v8di) __B, __N * 8);
  2519. }
  2520. extern __inline __m512i
  2521. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  2522. _mm512_mask_alignr_epi8 (__m512i __W, __mmask64 __U, __m512i __A,
  2523. __m512i __B, const int __N)
  2524. {
  2525. return (__m512i) __builtin_ia32_palignr512_mask ((__v8di) __A,
  2526. (__v8di) __B,
  2527. __N * 8,
  2528. (__v8di) __W,
  2529. (__mmask64) __U);
  2530. }
  2531. extern __inline __m512i
  2532. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  2533. _mm512_maskz_alignr_epi8 (__mmask64 __U, __m512i __A, __m512i __B,
  2534. const int __N)
  2535. {
  2536. return (__m512i) __builtin_ia32_palignr512_mask ((__v8di) __A,
  2537. (__v8di) __B,
  2538. __N * 8,
  2539. (__v8di)
  2540. _mm512_setzero_si512 (),
  2541. (__mmask64) __U);
  2542. }
  2543. extern __inline __m512i
  2544. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  2545. _mm512_dbsad_epu8 (__m512i __A, __m512i __B, const int __imm)
  2546. {
  2547. return (__m512i) __builtin_ia32_dbpsadbw512_mask ((__v64qi) __A,
  2548. (__v64qi) __B,
  2549. __imm,
  2550. (__v32hi)
  2551. _mm512_setzero_si512 (),
  2552. (__mmask32) -1);
  2553. }
  2554. extern __inline __m512i
  2555. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  2556. _mm512_mask_dbsad_epu8 (__m512i __W, __mmask32 __U, __m512i __A,
  2557. __m512i __B, const int __imm)
  2558. {
  2559. return (__m512i) __builtin_ia32_dbpsadbw512_mask ((__v64qi) __A,
  2560. (__v64qi) __B,
  2561. __imm,
  2562. (__v32hi) __W,
  2563. (__mmask32) __U);
  2564. }
  2565. extern __inline __m512i
  2566. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  2567. _mm512_maskz_dbsad_epu8 (__mmask32 __U, __m512i __A, __m512i __B,
  2568. const int __imm)
  2569. {
  2570. return (__m512i) __builtin_ia32_dbpsadbw512_mask ((__v64qi) __A,
  2571. (__v64qi) __B,
  2572. __imm,
  2573. (__v32hi)
  2574. _mm512_setzero_si512 (),
  2575. (__mmask32) __U);
  2576. }
  2577. extern __inline __m512i
  2578. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  2579. _mm512_srli_epi16 (__m512i __A, const int __imm)
  2580. {
  2581. return (__m512i) __builtin_ia32_psrlwi512_mask ((__v32hi) __A, __imm,
  2582. (__v32hi)
  2583. _mm512_setzero_si512 (),
  2584. (__mmask32) -1);
  2585. }
  2586. extern __inline __m512i
  2587. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  2588. _mm512_mask_srli_epi16 (__m512i __W, __mmask32 __U, __m512i __A,
  2589. const int __imm)
  2590. {
  2591. return (__m512i) __builtin_ia32_psrlwi512_mask ((__v32hi) __A, __imm,
  2592. (__v32hi) __W,
  2593. (__mmask32) __U);
  2594. }
  2595. extern __inline __m512i
  2596. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  2597. _mm512_maskz_srli_epi16 (__mmask32 __U, __m512i __A, const int __imm)
  2598. {
  2599. return (__m512i) __builtin_ia32_psrlwi512_mask ((__v32hi) __A, __imm,
  2600. (__v32hi)
  2601. _mm512_setzero_si512 (),
  2602. (__mmask32) __U);
  2603. }
  2604. extern __inline __m512i
  2605. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  2606. _mm512_slli_epi16 (__m512i __A, const int __B)
  2607. {
  2608. return (__m512i) __builtin_ia32_psllwi512_mask ((__v32hi) __A, __B,
  2609. (__v32hi)
  2610. _mm512_setzero_si512 (),
  2611. (__mmask32) -1);
  2612. }
  2613. extern __inline __m512i
  2614. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  2615. _mm512_mask_slli_epi16 (__m512i __W, __mmask32 __U, __m512i __A,
  2616. const int __B)
  2617. {
  2618. return (__m512i) __builtin_ia32_psllwi512_mask ((__v32hi) __A, __B,
  2619. (__v32hi) __W,
  2620. (__mmask32) __U);
  2621. }
  2622. extern __inline __m512i
  2623. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  2624. _mm512_maskz_slli_epi16 (__mmask32 __U, __m512i __A, const int __B)
  2625. {
  2626. return (__m512i) __builtin_ia32_psllwi512_mask ((__v32hi) __A, __B,
  2627. (__v32hi)
  2628. _mm512_setzero_si512 (),
  2629. (__mmask32) __U);
  2630. }
  2631. extern __inline __m512i
  2632. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  2633. _mm512_shufflehi_epi16 (__m512i __A, const int __imm)
  2634. {
  2635. return (__m512i) __builtin_ia32_pshufhw512_mask ((__v32hi) __A,
  2636. __imm,
  2637. (__v32hi)
  2638. _mm512_setzero_si512 (),
  2639. (__mmask32) -1);
  2640. }
  2641. extern __inline __m512i
  2642. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  2643. _mm512_mask_shufflehi_epi16 (__m512i __W, __mmask32 __U, __m512i __A,
  2644. const int __imm)
  2645. {
  2646. return (__m512i) __builtin_ia32_pshufhw512_mask ((__v32hi) __A,
  2647. __imm,
  2648. (__v32hi) __W,
  2649. (__mmask32) __U);
  2650. }
  2651. extern __inline __m512i
  2652. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  2653. _mm512_maskz_shufflehi_epi16 (__mmask32 __U, __m512i __A,
  2654. const int __imm)
  2655. {
  2656. return (__m512i) __builtin_ia32_pshufhw512_mask ((__v32hi) __A,
  2657. __imm,
  2658. (__v32hi)
  2659. _mm512_setzero_si512 (),
  2660. (__mmask32) __U);
  2661. }
  2662. extern __inline __m512i
  2663. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  2664. _mm512_shufflelo_epi16 (__m512i __A, const int __imm)
  2665. {
  2666. return (__m512i) __builtin_ia32_pshuflw512_mask ((__v32hi) __A,
  2667. __imm,
  2668. (__v32hi)
  2669. _mm512_setzero_si512 (),
  2670. (__mmask32) -1);
  2671. }
  2672. extern __inline __m512i
  2673. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  2674. _mm512_mask_shufflelo_epi16 (__m512i __W, __mmask32 __U, __m512i __A,
  2675. const int __imm)
  2676. {
  2677. return (__m512i) __builtin_ia32_pshuflw512_mask ((__v32hi) __A,
  2678. __imm,
  2679. (__v32hi) __W,
  2680. (__mmask32) __U);
  2681. }
  2682. extern __inline __m512i
  2683. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  2684. _mm512_maskz_shufflelo_epi16 (__mmask32 __U, __m512i __A,
  2685. const int __imm)
  2686. {
  2687. return (__m512i) __builtin_ia32_pshuflw512_mask ((__v32hi) __A,
  2688. __imm,
  2689. (__v32hi)
  2690. _mm512_setzero_si512 (),
  2691. (__mmask32) __U);
  2692. }
  2693. extern __inline __m512i
  2694. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  2695. _mm512_srai_epi16 (__m512i __A, const int __imm)
  2696. {
  2697. return (__m512i) __builtin_ia32_psrawi512_mask ((__v32hi) __A, __imm,
  2698. (__v32hi)
  2699. _mm512_setzero_si512 (),
  2700. (__mmask32) -1);
  2701. }
  2702. extern __inline __m512i
  2703. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  2704. _mm512_mask_srai_epi16 (__m512i __W, __mmask32 __U, __m512i __A,
  2705. const int __imm)
  2706. {
  2707. return (__m512i) __builtin_ia32_psrawi512_mask ((__v32hi) __A, __imm,
  2708. (__v32hi) __W,
  2709. (__mmask32) __U);
  2710. }
  2711. extern __inline __m512i
  2712. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  2713. _mm512_maskz_srai_epi16 (__mmask32 __U, __m512i __A, const int __imm)
  2714. {
  2715. return (__m512i) __builtin_ia32_psrawi512_mask ((__v32hi) __A, __imm,
  2716. (__v32hi)
  2717. _mm512_setzero_si512 (),
  2718. (__mmask32) __U);
  2719. }
  2720. extern __inline __m512i
  2721. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  2722. _mm512_mask_blend_epi16 (__mmask32 __U, __m512i __A, __m512i __W)
  2723. {
  2724. return (__m512i) __builtin_ia32_blendmw_512_mask ((__v32hi) __A,
  2725. (__v32hi) __W,
  2726. (__mmask32) __U);
  2727. }
  2728. extern __inline __m512i
  2729. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  2730. _mm512_mask_blend_epi8 (__mmask64 __U, __m512i __A, __m512i __W)
  2731. {
  2732. return (__m512i) __builtin_ia32_blendmb_512_mask ((__v64qi) __A,
  2733. (__v64qi) __W,
  2734. (__mmask64) __U);
  2735. }
  2736. extern __inline __mmask32
  2737. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  2738. _mm512_mask_cmp_epi16_mask (__mmask32 __U, __m512i __X, __m512i __Y,
  2739. const int __P)
  2740. {
  2741. return (__mmask32) __builtin_ia32_cmpw512_mask ((__v32hi) __X,
  2742. (__v32hi) __Y, __P,
  2743. (__mmask32) __U);
  2744. }
  2745. extern __inline __mmask32
  2746. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  2747. _mm512_cmp_epi16_mask (__m512i __X, __m512i __Y, const int __P)
  2748. {
  2749. return (__mmask32) __builtin_ia32_cmpw512_mask ((__v32hi) __X,
  2750. (__v32hi) __Y, __P,
  2751. (__mmask32) -1);
  2752. }
  2753. extern __inline __mmask64
  2754. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  2755. _mm512_mask_cmp_epi8_mask (__mmask64 __U, __m512i __X, __m512i __Y,
  2756. const int __P)
  2757. {
  2758. return (__mmask64) __builtin_ia32_cmpb512_mask ((__v64qi) __X,
  2759. (__v64qi) __Y, __P,
  2760. (__mmask64) __U);
  2761. }
  2762. extern __inline __mmask64
  2763. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  2764. _mm512_cmp_epi8_mask (__m512i __X, __m512i __Y, const int __P)
  2765. {
  2766. return (__mmask64) __builtin_ia32_cmpb512_mask ((__v64qi) __X,
  2767. (__v64qi) __Y, __P,
  2768. (__mmask64) -1);
  2769. }
  2770. extern __inline __mmask32
  2771. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  2772. _mm512_mask_cmp_epu16_mask (__mmask32 __U, __m512i __X, __m512i __Y,
  2773. const int __P)
  2774. {
  2775. return (__mmask32) __builtin_ia32_ucmpw512_mask ((__v32hi) __X,
  2776. (__v32hi) __Y, __P,
  2777. (__mmask32) __U);
  2778. }
  2779. extern __inline __mmask32
  2780. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  2781. _mm512_cmp_epu16_mask (__m512i __X, __m512i __Y, const int __P)
  2782. {
  2783. return (__mmask32) __builtin_ia32_ucmpw512_mask ((__v32hi) __X,
  2784. (__v32hi) __Y, __P,
  2785. (__mmask32) -1);
  2786. }
  2787. extern __inline __mmask64
  2788. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  2789. _mm512_mask_cmp_epu8_mask (__mmask64 __U, __m512i __X, __m512i __Y,
  2790. const int __P)
  2791. {
  2792. return (__mmask64) __builtin_ia32_ucmpb512_mask ((__v64qi) __X,
  2793. (__v64qi) __Y, __P,
  2794. (__mmask64) __U);
  2795. }
  2796. extern __inline __mmask64
  2797. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  2798. _mm512_cmp_epu8_mask (__m512i __X, __m512i __Y, const int __P)
  2799. {
  2800. return (__mmask64) __builtin_ia32_ucmpb512_mask ((__v64qi) __X,
  2801. (__v64qi) __Y, __P,
  2802. (__mmask64) -1);
  2803. }
  2804. extern __inline __m512i
  2805. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  2806. _mm512_bslli_epi128 (__m512i __A, const int __N)
  2807. {
  2808. return (__m512i) __builtin_ia32_pslldq512 (__A, __N * 8);
  2809. }
  2810. extern __inline __m512i
  2811. __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
  2812. _mm512_bsrli_epi128 (__m512i __A, const int __N)
  2813. {
  2814. return (__m512i) __builtin_ia32_psrldq512 (__A, __N * 8);
  2815. }
  2816. #else
  2817. #define _kshiftli_mask32(X, Y) \
  2818. ((__mmask32) __builtin_ia32_kshiftlisi ((__mmask32)(X), (__mmask8)(Y)))
  2819. #define _kshiftli_mask64(X, Y) \
  2820. ((__mmask64) __builtin_ia32_kshiftlidi ((__mmask64)(X), (__mmask8)(Y)))
  2821. #define _kshiftri_mask32(X, Y) \
  2822. ((__mmask32) __builtin_ia32_kshiftrisi ((__mmask32)(X), (__mmask8)(Y)))
  2823. #define _kshiftri_mask64(X, Y) \
  2824. ((__mmask64) __builtin_ia32_kshiftridi ((__mmask64)(X), (__mmask8)(Y)))
  2825. #define _mm512_alignr_epi8(X, Y, N) \
  2826. ((__m512i) __builtin_ia32_palignr512 ((__v8di)(__m512i)(X), \
  2827. (__v8di)(__m512i)(Y), \
  2828. (int)((N) * 8)))
  2829. #define _mm512_mask_alignr_epi8(W, U, X, Y, N) \
  2830. ((__m512i) __builtin_ia32_palignr512_mask ((__v8di)(__m512i)(X), \
  2831. (__v8di)(__m512i)(Y), (int)((N) * 8), \
  2832. (__v8di)(__m512i)(W), (__mmask64)(U)))
  2833. #define _mm512_maskz_alignr_epi8(U, X, Y, N) \
  2834. ((__m512i) __builtin_ia32_palignr512_mask ((__v8di)(__m512i)(X), \
  2835. (__v8di)(__m512i)(Y), (int)((N) * 8), \
  2836. (__v8di)(__m512i) \
  2837. _mm512_setzero_si512 (), \
  2838. (__mmask64)(U)))
  2839. #define _mm512_dbsad_epu8(X, Y, C) \
  2840. ((__m512i) __builtin_ia32_dbpsadbw512_mask ((__v64qi)(__m512i) (X), \
  2841. (__v64qi)(__m512i) (Y), (int) (C), \
  2842. (__v32hi)(__m512i) \
  2843. _mm512_setzero_si512 (), \
  2844. (__mmask32)-1))
  2845. #define _mm512_mask_dbsad_epu8(W, U, X, Y, C) \
  2846. ((__m512i) __builtin_ia32_dbpsadbw512_mask ((__v64qi)(__m512i) (X), \
  2847. (__v64qi)(__m512i) (Y), (int) (C), \
  2848. (__v32hi)(__m512i)(W), \
  2849. (__mmask32)(U)))
  2850. #define _mm512_maskz_dbsad_epu8(U, X, Y, C) \
  2851. ((__m512i) __builtin_ia32_dbpsadbw512_mask ((__v64qi)(__m512i) (X), \
  2852. (__v64qi)(__m512i) (Y), (int) (C), \
  2853. (__v32hi)(__m512i) \
  2854. _mm512_setzero_si512 (), \
  2855. (__mmask32)(U)))
  2856. #define _mm512_srli_epi16(A, B) \
  2857. ((__m512i) __builtin_ia32_psrlwi512_mask ((__v32hi)(__m512i)(A), \
  2858. (int)(B), (__v32hi)_mm512_setzero_si512 (), (__mmask32)-1))
  2859. #define _mm512_mask_srli_epi16(W, U, A, B) \
  2860. ((__m512i) __builtin_ia32_psrlwi512_mask ((__v32hi)(__m512i)(A), \
  2861. (int)(B), (__v32hi)(__m512i)(W), (__mmask32)(U)))
  2862. #define _mm512_maskz_srli_epi16(U, A, B) \
  2863. ((__m512i) __builtin_ia32_psrlwi512_mask ((__v32hi)(__m512i)(A), \
  2864. (int)(B), (__v32hi)_mm512_setzero_si512 (), (__mmask32)(U)))
  2865. #define _mm512_slli_epi16(X, C) \
  2866. ((__m512i)__builtin_ia32_psllwi512_mask ((__v32hi)(__m512i)(X), (int)(C),\
  2867. (__v32hi)(__m512i)_mm512_setzero_si512 (), \
  2868. (__mmask32)-1))
  2869. #define _mm512_mask_slli_epi16(W, U, X, C) \
  2870. ((__m512i)__builtin_ia32_psllwi512_mask ((__v32hi)(__m512i)(X), (int)(C),\
  2871. (__v32hi)(__m512i)(W),\
  2872. (__mmask32)(U)))
  2873. #define _mm512_maskz_slli_epi16(U, X, C) \
  2874. ((__m512i)__builtin_ia32_psllwi512_mask ((__v32hi)(__m512i)(X), (int)(C),\
  2875. (__v32hi)(__m512i)_mm512_setzero_si512 (), \
  2876. (__mmask32)(U)))
  2877. #define _mm512_shufflehi_epi16(A, B) \
  2878. ((__m512i) __builtin_ia32_pshufhw512_mask ((__v32hi)(__m512i)(A), (int)(B), \
  2879. (__v32hi)(__m512i) \
  2880. _mm512_setzero_si512 (), \
  2881. (__mmask32)-1))
  2882. #define _mm512_mask_shufflehi_epi16(W, U, A, B) \
  2883. ((__m512i) __builtin_ia32_pshufhw512_mask ((__v32hi)(__m512i)(A), (int)(B), \
  2884. (__v32hi)(__m512i)(W), \
  2885. (__mmask32)(U)))
  2886. #define _mm512_maskz_shufflehi_epi16(U, A, B) \
  2887. ((__m512i) __builtin_ia32_pshufhw512_mask ((__v32hi)(__m512i)(A), (int)(B), \
  2888. (__v32hi)(__m512i) \
  2889. _mm512_setzero_si512 (), \
  2890. (__mmask32)(U)))
  2891. #define _mm512_shufflelo_epi16(A, B) \
  2892. ((__m512i) __builtin_ia32_pshuflw512_mask ((__v32hi)(__m512i)(A), (int)(B), \
  2893. (__v32hi)(__m512i) \
  2894. _mm512_setzero_si512 (), \
  2895. (__mmask32)-1))
  2896. #define _mm512_mask_shufflelo_epi16(W, U, A, B) \
  2897. ((__m512i) __builtin_ia32_pshuflw512_mask ((__v32hi)(__m512i)(A), (int)(B), \
  2898. (__v32hi)(__m512i)(W), \
  2899. (__mmask32)(U)))
  2900. #define _mm512_maskz_shufflelo_epi16(U, A, B) \
  2901. ((__m512i) __builtin_ia32_pshuflw512_mask ((__v32hi)(__m512i)(A), (int)(B), \
  2902. (__v32hi)(__m512i) \
  2903. _mm512_setzero_si512 (), \
  2904. (__mmask32)(U)))
  2905. #define _mm512_srai_epi16(A, B) \
  2906. ((__m512i) __builtin_ia32_psrawi512_mask ((__v32hi)(__m512i)(A), \
  2907. (int)(B), (__v32hi)_mm512_setzero_si512 (), (__mmask32)-1))
  2908. #define _mm512_mask_srai_epi16(W, U, A, B) \
  2909. ((__m512i) __builtin_ia32_psrawi512_mask ((__v32hi)(__m512i)(A), \
  2910. (int)(B), (__v32hi)(__m512i)(W), (__mmask32)(U)))
  2911. #define _mm512_maskz_srai_epi16(U, A, B) \
  2912. ((__m512i) __builtin_ia32_psrawi512_mask ((__v32hi)(__m512i)(A), \
  2913. (int)(B), (__v32hi)_mm512_setzero_si512 (), (__mmask32)(U)))
  2914. #define _mm512_mask_blend_epi16(__U, __A, __W) \
  2915. ((__m512i) __builtin_ia32_blendmw_512_mask ((__v32hi) (__A), \
  2916. (__v32hi) (__W), \
  2917. (__mmask32) (__U)))
  2918. #define _mm512_mask_blend_epi8(__U, __A, __W) \
  2919. ((__m512i) __builtin_ia32_blendmb_512_mask ((__v64qi) (__A), \
  2920. (__v64qi) (__W), \
  2921. (__mmask64) (__U)))
  2922. #define _mm512_cmp_epi16_mask(X, Y, P) \
  2923. ((__mmask32) __builtin_ia32_cmpw512_mask ((__v32hi)(__m512i)(X), \
  2924. (__v32hi)(__m512i)(Y), (int)(P),\
  2925. (__mmask32)(-1)))
  2926. #define _mm512_cmp_epi8_mask(X, Y, P) \
  2927. ((__mmask64) __builtin_ia32_cmpb512_mask ((__v64qi)(__m512i)(X), \
  2928. (__v64qi)(__m512i)(Y), (int)(P),\
  2929. (__mmask64)(-1)))
  2930. #define _mm512_cmp_epu16_mask(X, Y, P) \
  2931. ((__mmask32) __builtin_ia32_ucmpw512_mask ((__v32hi)(__m512i)(X), \
  2932. (__v32hi)(__m512i)(Y), (int)(P),\
  2933. (__mmask32)(-1)))
  2934. #define _mm512_cmp_epu8_mask(X, Y, P) \
  2935. ((__mmask64) __builtin_ia32_ucmpb512_mask ((__v64qi)(__m512i)(X), \
  2936. (__v64qi)(__m512i)(Y), (int)(P),\
  2937. (__mmask64)(-1)))
  2938. #define _mm512_mask_cmp_epi16_mask(M, X, Y, P) \
  2939. ((__mmask32) __builtin_ia32_cmpw512_mask ((__v32hi)(__m512i)(X), \
  2940. (__v32hi)(__m512i)(Y), (int)(P),\
  2941. (__mmask32)(M)))
  2942. #define _mm512_mask_cmp_epi8_mask(M, X, Y, P) \
  2943. ((__mmask64) __builtin_ia32_cmpb512_mask ((__v64qi)(__m512i)(X), \
  2944. (__v64qi)(__m512i)(Y), (int)(P),\
  2945. (__mmask64)(M)))
  2946. #define _mm512_mask_cmp_epu16_mask(M, X, Y, P) \
  2947. ((__mmask32) __builtin_ia32_ucmpw512_mask ((__v32hi)(__m512i)(X), \
  2948. (__v32hi)(__m512i)(Y), (int)(P),\
  2949. (__mmask32)(M)))
  2950. #define _mm512_mask_cmp_epu8_mask(M, X, Y, P) \
  2951. ((__mmask64) __builtin_ia32_ucmpb512_mask ((__v64qi)(__m512i)(X), \
  2952. (__v64qi)(__m512i)(Y), (int)(P),\
  2953. (__mmask64)(M)))
  2954. #define _mm512_bslli_epi128(A, N) \
  2955. ((__m512i)__builtin_ia32_pslldq512 ((__m512i)(A), (int)(N) * 8))
  2956. #define _mm512_bsrli_epi128(A, N) \
  2957. ((__m512i)__builtin_ia32_psrldq512 ((__m512i)(A), (int)(N) * 8))
  2958. #endif
  2959. #ifdef __DISABLE_AVX512BW__
  2960. #undef __DISABLE_AVX512BW__
  2961. #pragma GCC pop_options
  2962. #endif /* __DISABLE_AVX512BW__ */
  2963. #endif /* _AVX512BWINTRIN_H_INCLUDED */