thunderbird-78.5-rust-1.48.patch 195 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942
  1. # HG changeset patch
  2. # User Henri Sivonen <hsivonen@hsivonen.fi>
  3. # Date 1604046593 0
  4. # Node ID 632353012d05c8e71314d27edca945ce9c13f4ea
  5. # Parent 2876425c75f75f638b41e8c6093e84b817938a9a
  6. Bug 1667736 - Update packed_simd to compile on Rust 1.48. r=glandium
  7. Differential Revision: https://phabricator.services.mozilla.com/D91572
  8. diff --git a/.cargo/config.in b/.cargo/config.in
  9. --- a/.cargo/config.in
  10. +++ b/.cargo/config.in
  11. @@ -45,7 +45,7 @@ rev = "21c26326f5f45f415c49eac4ba5bc41a2
  12. [source."https://github.com/hsivonen/packed_simd"]
  13. git = "https://github.com/hsivonen/packed_simd"
  14. replace-with = "vendored-sources"
  15. -rev = "3541e3818fdc7c2a24f87e3459151a4ce955a67a"
  16. +rev = "0917fe780032a6bbb23d71be545f9c1834128d75"
  17. [source."https://github.com/djg/cubeb-pulse-rs"]
  18. git = "https://github.com/djg/cubeb-pulse-rs"
  19. diff --git a/Cargo.lock b/Cargo.lock
  20. --- a/Cargo.lock
  21. +++ b/Cargo.lock
  22. @@ -3573,18 +3573,18 @@ version = "0.4.0"
  23. source = "registry+https://github.com/rust-lang/crates.io-index"
  24. checksum = "49a4b8ea2179e6a2e27411d3bca09ca6dd630821cf6894c6c7c8467a8ee7ef13"
  25. dependencies = [
  26. "stable_deref_trait",
  27. ]
  28. [[package]]
  29. name = "packed_simd"
  30. -version = "0.3.3"
  31. -source = "git+https://github.com/hsivonen/packed_simd?rev=3541e3818fdc7c2a24f87e3459151a4ce955a67a#3541e3818fdc7c2a24f87e3459151a4ce955a67a"
  32. +version = "0.3.4"
  33. +source = "git+https://github.com/hsivonen/packed_simd?rev=0917fe780032a6bbb23d71be545f9c1834128d75#0917fe780032a6bbb23d71be545f9c1834128d75"
  34. dependencies = [
  35. "cfg-if",
  36. ]
  37. [[package]]
  38. name = "parity-wasm"
  39. version = "0.41.0"
  40. source = "registry+https://github.com/rust-lang/crates.io-index"
  41. diff --git a/Cargo.toml b/Cargo.toml
  42. --- a/Cargo.toml
  43. +++ b/Cargo.toml
  44. @@ -66,7 +66,7 @@ panic = "abort"
  45. [patch.crates-io]
  46. libudev-sys = { path = "dom/webauthn/libudev-sys" }
  47. -packed_simd = { git = "https://github.com/hsivonen/packed_simd", rev="3541e3818fdc7c2a24f87e3459151a4ce955a67a" }
  48. +packed_simd = { git = "https://github.com/hsivonen/packed_simd", rev="0917fe780032a6bbb23d71be545f9c1834128d75" }
  49. rlbox_lucet_sandbox = { git = "https://github.com/PLSysSec/rlbox_lucet_sandbox/", rev="d510da5999a744c563b0acd18056069d1698273f" }
  50. nix = { git = "https://github.com/shravanrn/nix/", branch = "r0.13.1", rev="4af6c367603869a30fddb5ffb0aba2b9477ba92e" }
  51. spirv_cross = { git = "https://github.com/kvark/spirv_cross", branch = "wgpu3", rev = "20191ad2f370afd6d247edcb9ff9da32d3bedb9c" }
  52. diff --git a/third_party/rust/packed_simd/.cargo-checksum.json b/third_party/rust/packed_simd/.cargo-checksum.json
  53. --- a/third_party/rust/packed_simd/.cargo-checksum.json
  54. +++ b/third_party/rust/packed_simd/.cargo-checksum.json
  55. @@ -1,1 +1,1 @@
  56. -{"files":{".appveyor.yml":"f1ed01850e0d725f9498f52a1a63ddf40702ad6e0bf5b2d7c4c04d76e96794a3",".travis.yml":"e9258d9a54fdaf4cbc12405fe5993ac4497eb2b29021691dbc91b19cb9b52227","Cargo.toml":"089941ba3c89ea111cbea3cc3abdcdcf2b9d0ae0db268d7269ee38226db950e5","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"6485b8ed310d3f0340bf1ad1f47645069ce4069dcc6bb46c7d5c6faf41de1fdb","bors.toml":"dee881dc69b9b7834e4eba5d95c3ed5a416d4628815a167d6a22d4cb4fb064b8","build.rs":"f3baefc5e5bb9b250e762a1466371b922fd7ee4243c217b2d014307603c2f57a","ci/all.sh":"a23d14e10cb26a0eb719e389c30eb955fa53cddcd436890646df09af640bd2eb","ci/android-install-ndk.sh":"0f1746108cc30bf9b9ba45bcde7b19fc1a8bdf5b0258035b4eb8dc69b75efac4","ci/android-install-sdk.sh":"3490432022c5c8f5a115c084f7a9aca1626f96c0c87ffb62019228c4346b47e4","ci/android-sysimage.sh":"ebf4e5daa1f0fe1b2092b79f0f3f161c4c4275cb744e52352c4d81ab451e4c5a","ci/benchmark.sh":"b61d19ef6b90deba8fb79dee74c8b062d94844676293da346da87bb78a9a49a4","ci/deploy_and_run_on_ios_simulator.rs":"ec8ecf82d92072676aa47f0d1a3d021b60a7ae3531153ef12d2ff4541fc294dc","ci/docker/aarch64-linux-android/Dockerfile":"ace2e7d33c87bc0f6d3962a4a3408c04557646f7f51ab99cfbf574906796b016","ci/docker/aarch64-unknown-linux-gnu/Dockerfile":"1ecdac757101d951794fb2ab0deaa278199cf25f2e08a15c7d40ff31a8556184","ci/docker/arm-linux-androideabi/Dockerfile":"370e55d3330a413a3ccf677b3afb3e0ef9018a5fab263faa97ae8ac017fc2286","ci/docker/arm-unknown-linux-gnueabi/Dockerfile":"e25d88f6c0c94aada3d2e3f08243f755feb7e869dc5dc505b3799719cb1af591","ci/docker/arm-unknown-linux-gnueabihf/Dockerfile":"f126f4c7bae8c11ab8b16df06ad997863f0838825a9c08c9899a3eedb6d570bd","ci/docker/armv7-unknown-linux-gnueabihf/Dockerfile":"b647545c158ee480a4c581dbdc1f57833aef056c8d498acc04b573e842bf803c","ci/docker/i586-unknown-linux-gnu/Dockerfile":"0d492759017307ccf74dc2aa4a8cf6623daf3dc728c708dc2b18fa7940800cba","ci/docker/i686-unknown-linux-gnu/Dockerfile":"0d492759017307ccf74dc2aa4a8cf6623daf3dc728c708dc2b18fa7940800cba","ci/docker/mips-unknown-linux-gnu/Dockerfile":"323776469bb7b160385f3621d66e3ee14c75242f8180f916e65af048a29d4ea0","ci/docker/mips64-unknown-linux-gnuabi64/Dockerfile":"c647f6948a9a43b0be695cbed4eac752120d0faf28e5e69c718cb10406921dab","ci/docker/mips64el-unknown-linux-gnuabi64/Dockerfile":"77bfd00cc8639509be381b394f077e39b45a00158ad61b4e1656714c714665d1","ci/docker/mipsel-unknown-linux-musl/Dockerfile":"ec5bea6c98a3b626731fdb95f9ff2d1182639c76e8fb16d3271d0fc884901524","ci/docker/powerpc-unknown-linux-gnu/Dockerfile":"4f2b662de66e83d1354f650b7077692309637f786c2ea5516c31b5c2ee10af2d","ci/docker/powerpc64-unknown-linux-gnu/Dockerfile":"a9595402b772bc365982e22a0096a8988825d90b09b5faa97ab192e76072f71d","ci/docker/powerpc64le-unknown-linux-gnu/Dockerfile":"df3c381c157439695ae8cd10ab71664702c061e3b4ab22906a5ad6c2680acfed","ci/docker/s390x-unknown-linux-gnu/Dockerfile":"93fb44df3d7fd31ead158570667c97b5076a05c3d968af4a84bc13819a8f2db8","ci/docker/sparc64-unknown-linux-gnu/Dockerfile":"da1c39a3ff1fe22e41395fa7c8934e90b4c1788e551b9aec6e38bfd94effc437","ci/docker/thumbv7neon-linux-androideabi/Dockerfile":"c2decd5591bd7a09378901bef629cd944acf052eb55e4f35b79eb9cb4d62246a","ci/docker/thumbv7neon-unknown-linux-gnueabihf/Dockerfile":"75c0c56161c7382b439de74c00de1c0e3dc9d59560cd6720976a751034b78714","ci/docker/wasm32-unknown-unknown/Dockerfile":"3e5f294bc1e004aa599086c2af49d6f3e7459fa250f5fbdd60cf67d53db78758","ci/docker/x86_64-linux-android/Dockerfile":"685040273cf350d5509e580ac451555efa19790c8723ca2af066adadc6880ad2","ci/docker/x86_64-unknown-linux-gnu-emulated/Dockerfile":"44b6203d9290bfdc53d81219f0937e1110847a23dd982ec8c4de388354f01536","ci/docker/x86_64-unknown-linux-gnu/Dockerfile":"d253c86803b22da428fa9cc671a05f18d3318eca7733b8dccb4f7be1ddf524c5","ci/dox.sh":"5b61711be47a4e3dde0ddd15ba73d256ea95fd75af3897732c24db1dc7e66366","ci/linux-s390x.sh":"d6b732d7795b4ba131326aff893bca6228a7d2eb0e9402f135705413dbbe0dce","ci/linux-sparc64.sh":"c92966838b1ab7ad3b7a344833ee726aba6b647cf5952e56f0ad1ba420b13325","ci/lld-shim.rs":"3d7f71ec23a49e2b67f694a0168786f9a954dda15f5a138815d966643fd3fcc3","ci/max_line_width.sh":"0a1518bba4c9ecaa55694cb2e9930d0e19c265baabf73143f17f9cf285aaa5bb","ci/run-docker.sh":"92e036390ad9b0d16f109579df1b5ced2e72e9afea40c7d011400ebd3a2a90de","ci/run.sh":"63259e22a96ba539f53c06b1b39f53e3a78a71171652e7afc170836110ccd913","ci/run_examples.sh":"d1a23c6c35374a0678ba5114b9b8fefd8be0a79e774872a8bf0898d1baca18d0","ci/runtest-android.rs":"145a8e9799a5223975061fe7e586ade5669ee4877a7d7a4cf6b4ab48e8e36c7c","ci/setup_benchmarks.sh":"73fb981a8fdb1dcd54409d3c0fbbfb8f77a3ceabf8626a6b9bf9d21d6bc8ce72","ci/test-runner-linux":"c8aa6025cff5306f4f31d0c61dc5f9d4dd5a1d189ab613ef8d4c367c694d9ccd","contributing.md":"2cc8c9c560ae17867e69b06d09b758dbf7bc39eb774ada50a743724b10acc0a2","perf-guide/.gitignore":"fe82c7da551079d832cf74200b0b359b4df9828cb4a0416fa7384f07a2ae6a13","perf-guide/book.toml":"115a98284126c6b180178b44713314cc494f08a71662ee2ce15cf67f17a51064","perf-guide/src/SUMMARY.md":"3e03bffc991fdc2050f3d51842d72d9d21ea6abab56a3baf3b2d5973a78b89e1","perf-guide/src/ascii.css":"29afb08833b2fe2250f0412e1fa1161a2432a0820a14953c87124407417c741a","perf-guide/src/bound_checks.md":"5e4991ff58a183ef0cd9fdc1feb4cd12d083b44bdf87393bbb0927808ef3ce7d","perf-guide/src/float-math/approx.md":"8c09032fa2d795a0c5db1775826c850d28eb2627846d0965c60ee72de63735ad","perf-guide/src/float-math/fma.md":"311076ba4b741d604a82e74b83a8d7e8c318fcbd7f64c4392d1cf5af95c60243","perf-guide/src/float-math/fp.md":"04153e775ab6e4f0d7837bcc515230d327b04edfa34c84ce9c9e10ebaeef2be8","perf-guide/src/float-math/svml.md":"0798873b8eedaeda5fed62dc91645b57c20775a02d3cd74d8bd06958f1516506","perf-guide/src/introduction.md":"9f5a19e9e6751f25d2daad39891a0cc600974527ec4c8305843f9618910671bd","perf-guide/src/prof/linux.md":"447731eb5de7d69166728fdbc5ecb0c0c9db678ea493b45a592d67dd002184c0","perf-guide/src/prof/mca.md":"f56d54f3d20e7aa4d32052186e8237b03d65971eb5d112802b442570ff11d344","perf-guide/src/prof/profiling.md":"8a650c0fd6ede0964789bb6577557eeef1d8226a896788602ce61528e260e43c","perf-guide/src/target-feature/attribute.md":"615f88dca0a707b6c416fa605435dd6e1fb5361cc639429cbf68cd87624bd78b","perf-guide/src/target-feature/features.md":"17077760ff24c006b606dd21889c53d87228f4311f3ba3a574f9afdeacd86165","perf-guide/src/target-feature/inlining.md":"7ed1d7068d8173a00d84c16cfe5871cd68b9f04f8d0cca2d01ebc84957ebf2f6","perf-guide/src/target-feature/practice.md":"c4b371842e0086df178488fec97f20def8f0c62ee588bcd25fd948b9b1fa227e","perf-guide/src/target-feature/runtime.md":"835425f5ee597fb3e51d36e725a81ebee29f4561231d19563cd4da81dbb1cfcb","perf-guide/src/target-feature/rustflags.md":"ab49712e9293a65d74d540ba4784fcb57ff1119ec05a575d895c071f1a620f64","perf-guide/src/vert-hor-ops.md":"c6211c0ee91e60552ec592d89d9d957eedc21dee3cbd89e1ad6765ea06a27471","readme.md":"585a8f0e16877fb9abb00cd17a175fcb9d7857840c6c61209f1827ffab095070","rustfmt.toml":"de6101d0670bad65fb3b337d56957d2a024e017e5ab146ec784d77312daaf8ff","src/api.rs":"331a3a4abb19cee2df5f2df4ad7c3e88b45e62cf23fdacfc9bbaa633dc5cf788","src/api/bit_manip.rs":"e68290ee679cc5abc9c73afbe635c1035f8cbfe849e5c751a1680e459244c39e","src/api/cast.rs":"03b94a3d316ac7b7be7068810044911e965e889a0ace7bae762749ca74a92747","src/api/cast/macros.rs":"b0a14d0c83ad2ebb7a275180f6d9e3f2bc312ba57a7d3d6c39fad4e0f20f9408","src/api/cast/v128.rs":"63e28c6a3edf1a7a635f51b8d3c6adbb1d46f884d92a196b3d4a6e743d809416","src/api/cast/v16.rs":"2a584eeb57fd47baad6f3533764301b04aaaac23702b7a8db12598ac02899262","src/api/cast/v256.rs":"b91c15ed8d1536ecd97b4eb79ff9d5aba0552cd9b6f0ea6435b05f2273e23b3a","src/api/cast/v32.rs":"62ec89fcce7fa7f28497ee5770adc8f81d2d3a6b2925b02f7dc06504c40e8f38","src/api/cast/v512.rs":"d855cb943ae7106e9599ef38e30a3afb1c6bd5433178baca54cb128fd9a7d143","src/api/cast/v64.rs":"fe0f7dfaf4fc0c0c1a78c96fcfcdfdc2a1e2845843b11aa797a0c6fb52a8f774","src/api/cmp.rs":"357c3a2a09c6d4611c32dd7fa95be2fae933d513e229026ec9b44451a77b884e","src/api/cmp/eq.rs":"60f70f355bae4cb5b17db53204cacc3890f70670611c17df638d4c04f7cc8075","src/api/cmp/ord.rs":"589f7234761c294fa5df8f525bc4acd5a47cdb602207d524a0d4e19804cd9695","src/api/cmp/partial_eq.rs":"3ed23d2a930b0f9750c3a5309da766b03dc4f9c4d375b42ad3c50fe732693d15","src/api/cmp/partial_ord.rs":"e16b11805c94048acd058c93994b5bc74bb187f8d7e3b86a87df60e1601467f9","src/api/cmp/vertical.rs":"de3d62f38eba817299aa16f1e1939954c9a447e316509397465c2830852ba053","src/api/default.rs":"b61f92fc0e33a2633b3375eb405beba480da071cde03df4d437d8a6058afcd97","src/api/fmt.rs":"67fb804bb86b6cd77cf8cd492b5733ce437071b66fe3297278b8a6552c325dda","src/api/fmt/binary.rs":"35cb5c266197d6224d598fb3d286e5fe48ef0c01ed356c2ff6fe9ba946f96a92","src/api/fmt/debug.rs":"aa18eea443bf353fea3db8b1a025132bbcaf91e747ecfa43b8d9fce9af395a0c","src/api/fmt/lower_hex.rs":"69d5be366631af309f214e8031c8c20267fcc27a695eac6f45c6bc1df72a67e6","src/api/fmt/octal.rs":"9eb11ba3d990213f3c7f1ec25edba7ce997cb1320e16d308c83498ba6b9bfbd9","src/api/fmt/upper_hex.rs":"a4637d085b7bb20e759ce58e08435b510a563ba3dd468af2b03560fdc5511562","src/api/from.rs":"2e599d8329cb05eaf06224cc441355c4b7b51254fc19256619333be8c149d444","src/api/from/from_array.rs":"4151593c7bba7455821fffa5b59867005a77c95d32f1f0cc3fd87294000157d9","src/api/from/from_vector.rs":"9764371aa9e6005aace74dea14f59e5611a095b7cf42707940924749282c52f0","src/api/hash.rs":"562cfa3f1d8eb9a733c035a3665a599c2f1e341ee820d8fbdd102a4398a441bc","src/api/into_bits.rs":"82297f0697d67b5a015e904e7e6e7b2a7066ba825bc54b94b4ff3e22d7a1eefb","src/api/into_bits/arch_specific.rs":"1f925390b0ce7132587d95f2419c6e2ad3e1a9d17eb1d9c120a1c1c4bdf4277e","src/api/into_bits/macros.rs":"d762406de25aedff88d460dec7a80dc8e825a2a419d53218ce007efa6a1d3e04","src/api/into_bits/v128.rs":"ecdc5893664c71d7ab1ff3697c3fbe490d20d8748b9b76881d05e7625e40d74c","src/api/into_bits/v16.rs":"5459ec7dad1ad7bd30dc7e48374580b993abf23701d9c3cb22203fa0a9aabb6d","src/api/into_bits/v256.rs":"90ea351da0380ead1bf0f63b620afd40d01d638d09f7e7be31840bd2c1d9c663","src/api/into_bits/v32.rs":"ee1dc5a430050e16f51154b5fe85b1536f5feddf2ea23dd1d3859b67c4afc6fc","src/api/into_bits/v512.rs":"f72098ed1c9a23944f3d01abaf5e0f2d0e81d35a06fdadd2183e896d41b59867","src/api/into_bits/v64.rs":"6394462facdfe7827349c742b7801f1291e75a720dfb8c0b52100df46f371c98","src/api/math.rs":"8b2a2fc651917a850539f993aa0b9e5bf4da67b11685285b8de8cdca311719ec","src/api/math/float.rs":"61d2794d68262a1090ae473bd30793b5f65cf732f32a6694a3af2ce5d9225616","src/api/math/float/abs.rs":"5b6b2701e2e11135b7ce58a05052ea8120e10e4702c95d046b9d21b827b26bf8","src/api/math/float/consts.rs":"78acba000d3fa527111300b6327c1932de9c4c1e02d4174e1a5615c01463d38c","src/api/math/float/cos.rs":"4c2dd7173728ef189314f1576c9486e03be21b7da98843b2f9011282a7979e31","src/api/math/float/exp.rs":"7c6d5f1e304f498a01cfa23b92380c815d7da0ad94eae3483783bc377d287eef","src/api/math/float/ln.rs":"54c7583f3df793b39ff57534fade27b41bb992439e5dc178252f5ca3190a3e54","src/api/math/float/mul_add.rs":"62cac77660d20159276d4c9ef066eb90c81cbddb808e8e157182c607625ad2eb","src/api/math/float/mul_adde.rs":"bae056ee9f3a70df39ec3c3b2f6437c65303888a7b843ef1a5bcf1f5aca0e602","src/api/math/float/powf.rs":"9ddb938984b36d39d82a82f862f80df8f7fb013f1d222d45698d41d88472f568","src/api/math/float/recpre.rs":"589225794ff1dbf31158dff660e6d4509ecc8befbb57c633900dea5ac0b840d6","src/api/math/float/rsqrte.rs":"a32abdcc318d7ccc8448231f54d75b884b7cbeb03a7d595713ab6243036f4dbf","src/api/math/float/sin.rs":"cbd3622b7df74f19691743001c8cf747a201f8977ad90542fee915f37dcd1e49","src/api/math/float/sqrt.rs":"0c66d5d63fb08e4d99c6b82a8828e41173aff1ac9fa1a2764a11fac217ccf2ac","src/api/math/float/sqrte.rs":"731e1c9f321b662accdd27dacb3aac2e8043b7aecb2f2161dde733bd9f025362","src/api/minimal.rs":"1f22bcc528555444e76de569ec0ae2029b9ae9d04805efeafa93369c8098036b","src/api/minimal/iuf.rs":"c501a6696950cf5e521765f178de548af64fdfb6e10d026616d09fab93ca2d17","src/api/minimal/mask.rs":"42e415f536c5193d0218f5a754b34b87fd7c971bff068009f958712166ff056d","src/api/minimal/ptr.rs":"a9ee482d1dd1c956fb8f3f179e6e620b1de4e9d713961461d4c6923a4ef2e67c","src/api/ops.rs":"3e273b277a0f3019d42c3c59ca94a5afd4885d5ae6d2182e5089bbeec9de42ee","src/api/ops/scalar_arithmetic.rs":"d2d5ad897a59dd0787544f927e0e7ca4072c3e58b0f4a2324083312b0d5a21d7","src/api/ops/scalar_bitwise.rs":"482204e459ca6be79568e1c9f70adbe2d2151412ddf122fb2161be8ebb51c40c","src/api/ops/scalar_mask_bitwise.rs":"c250f52042e37b22d57256c80d4604104cfd2fbe2a2e127c676267270ca5d350","src/api/ops/scalar_shifts.rs":"987f8fdebeedc16e3d77c1b732e7826ef70633c541d16dfa290845d5c6289150","src/api/ops/vector_arithmetic.rs":"ddca15d09ddeef502c2ed66117a62300ca65d87e959e8b622d767bdf1c307910","src/api/ops/vector_bitwise.rs":"b3968f7005b649edcc22a54e2379b14d5ee19045f2e784029805781ae043b5ee","src/api/ops/vector_float_min_max.rs":"f5155dce75219f4ba11275b1f295d2fdcddd49d174a6f1fb2ace7ea42813ce41","src/api/ops/vector_int_min_max.rs":"a378789c6ff9b32a51fbd0a97ffd36ed102cd1fe6a067d2b02017c1df342def6","src/api/ops/vector_mask_bitwise.rs":"5052d18517d765415d40327e6e8e55a312daaca0a5e2aec959bfa54b1675f9c8","src/api/ops/vector_neg.rs":"5c62f6b0221983cdbd23cd0a3af3672e6ba1255f0dfe8b19aae6fbd6503e231b","src/api/ops/vector_rotates.rs":"03cbe8a400fd7c688e4ee771a990a6754f2031b1a59b19ae81158b21471167e5","src/api/ops/vector_shifts.rs":"9bf69d0087268f61009e39aea52e03a90f378910206b6a28e8393178b6a5d0e0","src/api/ptr.rs":"8a793251bed6130dcfb2f1519ceaa18b751bbb15875928d0fb6deb5a5e07523a","src/api/ptr/gather_scatter.rs":"9ddd960365e050674b25b2fd3116e24d94669b4375d74e71c03e3f1469576066","src/api/reductions.rs":"ae5baca81352ecd44526d6c30c0a1feeda475ec73ddd3c3ec6b14e944e5448ee","src/api/reductions/bitwise.rs":"8bf910ae226188bd15fc7e125f058cd2566b6186fcd0cd8fd020f352c39ce139","src/api/reductions/float_arithmetic.rs":"e58c8c87806a95df2b2b5b48ac5991036df024096d9d7c171a480fe9282896a4","src/api/reductions/integer_arithmetic.rs":"47471da1c5f859489680bb5d34ced3d3aa20081c16053a3af121a4496fcb57bf","src/api/reductions/mask.rs":"db83327a950e33a317f37fd33ca4e20c347fb415975ec024f3e23da8509425af","src/api/reductions/min_max.rs":"f27be3aa28e1c1f46de7890198db6e12f00c207085e89ef2de7e57ee443cdb98","src/api/select.rs":"a98e2ccf9fc6bdeed32d337c8675bc96c2fbe2cc34fbf149ad6047fb8e749774","src/api/shuffle.rs":"da58200790868c09659819322a489929a5b6e56c596ed07e6a44293ea02e7d09","src/api/shuffle1_dyn.rs":"bfea5a91905b31444e9ef7ca6eddb7a9606b7e22d3f71bb842eb2795a0346620","src/api/slice.rs":"ee87484e8af329547b9a5d4f2a69e8bed6ea10bbd96270d706083843d4eea2ac","src/api/slice/from_slice.rs":"4d4fe8a329c885fcb4fbcbedf99efb15a95296fe6b3f595056cc37037450d5ac","src/api/slice/write_to_slice.rs":"f5b23b2c4b91cfb26b713a9013a6c0da7f45eaefb79ba06dcbc27f3f23bda679","src/api/swap_bytes.rs":"4a6792a2e49a77475e1b237592b4b2804dbddb79c474331acd0dd71b36934259","src/codegen.rs":"c6eebc3d3665420aa6a2f317977e3c41a4f43e0550ac630cdbe8e4bbed5e2031","src/codegen/bit_manip.rs":"5559e095105a80003e0de35af1d19b0c65c9ab04eb743c7e01c5442d882eb34e","src/codegen/llvm.rs":"d1299c189abb17a6133f047574cffc7a6db4c1be37cb7d4785491cb5e8f8cf54","src/codegen/math.rs":"35f96e37a78fcf0cdb02146b7f27a45108fe06a37fc2a54d8851ce131a326178","src/codegen/math/float.rs":"dd86c0449e576c83b719700962ac017c332987fac08d91f2b7a2b1b883598170","src/codegen/math/float/abs.rs":"f56e2b4b8055ea861c1f5cbc6b6e1d8e7e5af163b62c13574ddee4e09513bfbc","src/codegen/math/float/cos.rs":"ef3b511a24d23045b310315e80348a9b7fedb576fc2de52d74290616a0abeb2a","src/codegen/math/float/cos_pi.rs":"4e7631a5d73dac21531e09ef1802d1180f8997509c2c8fa9f67f322194263a97","src/codegen/math/float/exp.rs":"61b691598c41b5622f24e4320c1bdd08701e612a516438bdddcc728fc3405c8c","src/codegen/math/float/ln.rs":"46b718b1ba8c9d99e1ad40f53d20dfde08a3063ca7bd2a9fdd6698e060da687e","src/codegen/math/float/macros.rs":"dd42135fff13f9aca4fd3a1a4e14c7e6c31aadc6d817d63b0d2fb9e62e062744","src/codegen/math/float/mul_add.rs":"a37bf764345d4b1714f97e83897b7cf0855fc2811704bcbc0012db91825339e1","src/codegen/math/float/mul_adde.rs":"c75702bfcb361de45964a93caf959a695ef2376bd069227600b8c6872665c755","src/codegen/math/float/powf.rs":"642346e982bc4c39203de0864d2149c4179cd7b21cf67a2951687932b4675872","src/codegen/math/float/sin.rs":"9d68164c90cdca6a85155040cdac42e27342ebe0b925273ef1593df721af4258","src/codegen/math/float/sin_cos_pi.rs":"9be02ad48585a1e8d99129382fbffbaed47852f15459256a708850b6b7a75405","src/codegen/math/float/sin_pi.rs":"9890347905b4d4a3c7341c3eb06406e46e60582bcf6960688bd727e5dadc6c57","src/codegen/math/float/sqrt.rs":"e3c60dcfb0c6d2fc62adabcc931b2d4040b83cab294dea36443fb4b89eb79e34","src/codegen/math/float/sqrte.rs":"f0f4ef9eb475ae41bcc7ec6a95ad744ba6b36925faa8b2c2814004396d196b63","src/codegen/pointer_sized_int.rs":"a70697169c28218b56fd2e8d5353f2e00671d1150d0c8cef77d613bdfacd84cb","src/codegen/reductions.rs":"645e2514746d01387ddd07f0aa4ffd8430cc9ab428d4fb13773ea319fa25dd95","src/codegen/reductions/mask.rs":"8f1afe6aabf096a3278e1fc3a30f736e04aa8b9ce96373cee22162d18cfe2702","src/codegen/reductions/mask/aarch64.rs":"cba6e17603d39795dcfe8339b6b7d8714c3e162a1f0a635979f037aa24fe4206","src/codegen/reductions/mask/arm.rs":"9447904818aa2c7c25d0963eead452a639a11ca7dbd6d21eedbfcaade07a0f33","src/codegen/reductions/mask/fallback.rs":"7a0ef9f7fd03ae318b495b95e121350cd61caffc5cc6ee17fabf130d5d933453","src/codegen/reductions/mask/fallback_impl.rs":"76547f396e55ef403327c77c314cf8db8c7a5c9b9819bfb925abeacf130249e5","src/codegen/reductions/mask/x86.rs":"14bd2c482071f2355beebcf7b7ecf950ff2dfcdb08c3ca50993092434a9de717","src/codegen/reductions/mask/x86/avx.rs":"b4913d87844c522903641cbbf10db4551addb1ce5e9e78278e21612fa65c733b","src/codegen/reductions/mask/x86/avx2.rs":"677aed3f056285285daa3adff8bc65e739630b4424defa6d9665e160f027507e","src/codegen/reductions/mask/x86/sse.rs":"226610b4ff88c676d5187114dd57b4a8800de6ce40884675e9198445b1ed0306","src/codegen/reductions/mask/x86/sse2.rs":"bc38e6c31cb4b3d62147eba6cac264e519e2a48e0f7ce9010cfa9ef0cf0ec9fd","src/codegen/shuffle.rs":"0abca97e92cdce49a58a39cc447eb09dc7d7715ef256c8dbd2181a186e61bb64","src/codegen/shuffle1_dyn.rs":"04523e9338133bdedb012dd076c2c564b79ce5593b0fc56d0fb6910e04190a81","src/codegen/swap_bytes.rs":"1d6cdc716eadddc92b4fd506b2445a821caa8dc00860447de09d7ebd69c2087f","src/codegen/v128.rs":"94226b31ec403d18d9d2fe06713f147c9c79e9b5f9105089088266313f843185","src/codegen/v16.rs":"ddec4ffb66b6f7aaffb9a1780c5ddba82557abd74f45073d335047e04cf74924","src/codegen/v256.rs":"6b63917f0444118d6b1595bff2045e59b97c4d24012bd575f69f1f0efc5a0241","src/codegen/v32.rs":"3477b3c5540aed86e61e2f5807dd31db947413cec9181c587d93ed6ec74f0eba","src/codegen/v512.rs":"5854f99d3aabc4cd42b28a20d9ce447756dc2ba024a409a69b6a8ae1f1842fc5","src/codegen/v64.rs":"e9e89caebfe63d10c0cbca61e4dfdba3b7e02ee0989170f80beed23237ddd950","src/codegen/vPtr.rs":"96d609a9eece4dcbbcc01ba0b8744d7f5958be12774176a2945bc676f4e6b5cb","src/codegen/vSize.rs":"eeee9858749aa82142b27bc120d1989bb74a6b82e1e4efbbeaccc9634dc9acfc","src/lib.rs":"1b5d419ff05ee0370d671810423ccc254708cc8d415c1dbac2a7a36be4bf63a8","src/masks.rs":"870f429967b2d7d5133f4d28d6c753fc5cef0570b27b29d4e966a066d22d2d0e","src/sealed.rs":"ff7f0324276408ae8249941cfa32c90b8835a54d750896b683efea857af19db2","src/testing.rs":"1d3a7862ef625e235a5734ad7204e68d350f902c0695182b1f08a0552432416e","src/testing/macros.rs":"6378856d7a40ba5ec5c7c0dad6327d79f0c77266921c24296d10aed6c68e9b98","src/testing/utils.rs":"d6fd5a5017f1f85d9d99585754f8f6ad06fc3d683b34083543e67a7cc6c1772c","src/v128.rs":"18fe263c4aa28cd06461c7070b0269f69f4a2e75749b8f142a83dfdfe4d22bf5","src/v16.rs":"e5c663c9fb3547eaeac78a5f7db9969f4d8b5ec96112bf2954602fff11f0aebd","src/v256.rs":"68732cd688ad12a56d8b4f8ddf279f77bdfe1be2943c7dc0c1b4f1a76798aa0f","src/v32.rs":"785b22a1ccb4a41bb53dfeb0670f624c0ce42e6cdf62d1747e3283777a1c70bd","src/v512.rs":"d1337bfe07f06a8f37f8e8fa7d4315b9307476ee435ad80dd5269eaed564fbfa","src/v64.rs":"3077468d65125b8f085e9454c8b2463a4d5225697464ba6a1300f8799528fd4b","src/vPtr.rs":"c9a53f41f466e17b6648a4ce390fd8f4d3a848d440eb8a9a803a11608d76eb05","src/vSize.rs":"5c46d3e8c3ee5863d9b6e37e681f871386e0efc254d6d84ba711edb529ce7b3c","tests/endianness.rs":"541a144be017e3dd7da7c8ea49d907dc02538245e8c5f3deb5bd43da92c929e1"},"package":null}
  57. \ No newline at end of file
  58. +{"files":{".appveyor.yml":"f1ed01850e0d725f9498f52a1a63ddf40702ad6e0bf5b2d7c4c04d76e96794a3",".travis.yml":"d56de6531d3c4880e3aada85ac8e6d7388e5d781871e181cb8ade2a746d5d5f5","Cargo.toml":"e94ccb82002e8b55680c2c5fec554a9e864c5f354e113278d0aa927df279330d","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"6485b8ed310d3f0340bf1ad1f47645069ce4069dcc6bb46c7d5c6faf41de1fdb","README.md":"49d01e49a33393af64fa6c813b6a724f68a4d1abfbedcb96413651ed105aa820","bors.toml":"dee881dc69b9b7834e4eba5d95c3ed5a416d4628815a167d6a22d4cb4fb064b8","build.rs":"c3312e786c7fcb8f16c0785fe235ebbcf43fbeab6d7d683752f62043ca92d887","ci/all.sh":"2ae6b2445b4db83833e40b37efd0016c6b9879ee988b9b3ef94db5439a3e1606","ci/android-install-ndk.sh":"0f1746108cc30bf9b9ba45bcde7b19fc1a8bdf5b0258035b4eb8dc69b75efac4","ci/android-install-sdk.sh":"3490432022c5c8f5a115c084f7a9aca1626f96c0c87ffb62019228c4346b47e4","ci/android-sysimage.sh":"ebf4e5daa1f0fe1b2092b79f0f3f161c4c4275cb744e52352c4d81ab451e4c5a","ci/benchmark.sh":"b61d19ef6b90deba8fb79dee74c8b062d94844676293da346da87bb78a9a49a4","ci/deploy_and_run_on_ios_simulator.rs":"ec8ecf82d92072676aa47f0d1a3d021b60a7ae3531153ef12d2ff4541fc294dc","ci/docker/aarch64-linux-android/Dockerfile":"ace2e7d33c87bc0f6d3962a4a3408c04557646f7f51ab99cfbf574906796b016","ci/docker/aarch64-unknown-linux-gnu/Dockerfile":"da88c0d50f16dc08448c7fdf1fa5ed2cbe576acf9e7dd85b5b818621b2a8c702","ci/docker/arm-linux-androideabi/Dockerfile":"370e55d3330a413a3ccf677b3afb3e0ef9018a5fab263faa97ae8ac017fc2286","ci/docker/arm-unknown-linux-gnueabi/Dockerfile":"bb5f8ae890707c128652290ffc544447643bf12037ddd73c6ad6989f848cb380","ci/docker/arm-unknown-linux-gnueabihf/Dockerfile":"1afaefcbc05b740859acd4e067bc92439be6bcbe8f2e9678474fb434bcd398d9","ci/docker/armv7-unknown-linux-gnueabihf/Dockerfile":"8282ea707a94109beed47a57574755e2d58401735904a03f85fb64c578c53b4f","ci/docker/i586-unknown-linux-gnu/Dockerfile":"49792922269f371bd29da4727e9085101b27be67a6b97755d0196c63317f7abb","ci/docker/i686-unknown-linux-gnu/Dockerfile":"49792922269f371bd29da4727e9085101b27be67a6b97755d0196c63317f7abb","ci/docker/mips-unknown-linux-gnu/Dockerfile":"b2ebc25797612c4f8395fe9d407725156044955bfbcf442036b7f55b43a5f9da","ci/docker/mips64-unknown-linux-gnuabi64/Dockerfile":"b0c1692ac65bc56dd30494b1993d8e929c48cc9c4b92029b7c7592af6d4f9220","ci/docker/mips64el-unknown-linux-gnuabi64/Dockerfile":"4e9249c179300138141d0b2b7401b11897f64aed69f541f078c1db4594df2827","ci/docker/mipsel-unknown-linux-musl/Dockerfile":"3164c52b0dcbb01afa78292b15b5c43503ccf0491cf6eb801ec2bf22ae274e52","ci/docker/powerpc-unknown-linux-gnu/Dockerfile":"786f799d0b56eb54d7b6c4b00e1aed4ce81776e14e44767e083c89d014b72004","ci/docker/powerpc64-unknown-linux-gnu/Dockerfile":"e8bc363837cd9c2d8b22402acb8c1c329efc11ba5d12170603d2fe2eae9da059","ci/docker/powerpc64le-unknown-linux-gnu/Dockerfile":"47998d45b781d797b9e6085ebe898d90de0c952b54537a8db4e8d7503eb032d9","ci/docker/s390x-unknown-linux-gnu/Dockerfile":"93fb44df3d7fd31ead158570667c97b5076a05c3d968af4a84bc13819a8f2db8","ci/docker/sparc64-unknown-linux-gnu/Dockerfile":"da1c39a3ff1fe22e41395fa7c8934e90b4c1788e551b9aec6e38bfd94effc437","ci/docker/thumbv7neon-linux-androideabi/Dockerfile":"c2decd5591bd7a09378901bef629cd944acf052eb55e4f35b79eb9cb4d62246a","ci/docker/thumbv7neon-unknown-linux-gnueabihf/Dockerfile":"51955a8bf3c4d440f47382af6f5426ebff94ab01a04da36175babda9a057740f","ci/docker/wasm32-unknown-unknown/Dockerfile":"3e5f294bc1e004aa599086c2af49d6f3e7459fa250f5fbdd60cf67d53db78758","ci/docker/x86_64-linux-android/Dockerfile":"685040273cf350d5509e580ac451555efa19790c8723ca2af066adadc6880ad2","ci/docker/x86_64-unknown-linux-gnu-emulated/Dockerfile":"44b6203d9290bfdc53d81219f0937e1110847a23dd982ec8c4de388354f01536","ci/docker/x86_64-unknown-linux-gnu/Dockerfile":"7f4e3ca5fa288ea70edb4d1f75309708cd30b192e2e4444e61c4d5b3b58f89cf","ci/dox.sh":"434e9611c52e389312d2b03564adf09429f10cc76fe66a8644adb104903b87b7","ci/linux-s390x.sh":"d6b732d7795b4ba131326aff893bca6228a7d2eb0e9402f135705413dbbe0dce","ci/linux-sparc64.sh":"c92966838b1ab7ad3b7a344833ee726aba6b647cf5952e56f0ad1ba420b13325","ci/lld-shim.rs":"3d7f71ec23a49e2b67f694a0168786f9a954dda15f5a138815d966643fd3fcc3","ci/max_line_width.sh":"0a1518bba4c9ecaa55694cb2e9930d0e19c265baabf73143f17f9cf285aaa5bb","ci/run-docker.sh":"92e036390ad9b0d16f109579df1b5ced2e72e9afea40c7d011400ebd3a2a90de","ci/run.sh":"41dd6a60efaaeae9661a01370cce98b631f78392859a0cf68c946c0a16edf5f7","ci/run_examples.sh":"d1a23c6c35374a0678ba5114b9b8fefd8be0a79e774872a8bf0898d1baca18d0","ci/runtest-android.rs":"145a8e9799a5223975061fe7e586ade5669ee4877a7d7a4cf6b4ab48e8e36c7c","ci/setup_benchmarks.sh":"fae3960023f6f3d1388cd2ad22fdbab4b075f1f29dd4292d7994a20783beb6cf","ci/test-runner-linux":"c8aa6025cff5306f4f31d0c61dc5f9d4dd5a1d189ab613ef8d4c367c694d9ccd","contributing.md":"2cc8c9c560ae17867e69b06d09b758dbf7bc39eb774ada50a743724b10acc0a2","perf-guide/.gitignore":"fe82c7da551079d832cf74200b0b359b4df9828cb4a0416fa7384f07a2ae6a13","perf-guide/book.toml":"115a98284126c6b180178b44713314cc494f08a71662ee2ce15cf67f17a51064","perf-guide/src/SUMMARY.md":"3e03bffc991fdc2050f3d51842d72d9d21ea6abab56a3baf3b2d5973a78b89e1","perf-guide/src/ascii.css":"29afb08833b2fe2250f0412e1fa1161a2432a0820a14953c87124407417c741a","perf-guide/src/bound_checks.md":"5e4991ff58a183ef0cd9fdc1feb4cd12d083b44bdf87393bbb0927808ef3ce7d","perf-guide/src/float-math/approx.md":"8c09032fa2d795a0c5db1775826c850d28eb2627846d0965c60ee72de63735ad","perf-guide/src/float-math/fma.md":"311076ba4b741d604a82e74b83a8d7e8c318fcbd7f64c4392d1cf5af95c60243","perf-guide/src/float-math/fp.md":"04153e775ab6e4f0d7837bcc515230d327b04edfa34c84ce9c9e10ebaeef2be8","perf-guide/src/float-math/svml.md":"0798873b8eedaeda5fed62dc91645b57c20775a02d3cd74d8bd06958f1516506","perf-guide/src/introduction.md":"9f5a19e9e6751f25d2daad39891a0cc600974527ec4c8305843f9618910671bd","perf-guide/src/prof/linux.md":"447731eb5de7d69166728fdbc5ecb0c0c9db678ea493b45a592d67dd002184c0","perf-guide/src/prof/mca.md":"f56d54f3d20e7aa4d32052186e8237b03d65971eb5d112802b442570ff11d344","perf-guide/src/prof/profiling.md":"8a650c0fd6ede0964789bb6577557eeef1d8226a896788602ce61528e260e43c","perf-guide/src/target-feature/attribute.md":"615f88dca0a707b6c416fa605435dd6e1fb5361cc639429cbf68cd87624bd78b","perf-guide/src/target-feature/features.md":"17077760ff24c006b606dd21889c53d87228f4311f3ba3a574f9afdeacd86165","perf-guide/src/target-feature/inlining.md":"7ed1d7068d8173a00d84c16cfe5871cd68b9f04f8d0cca2d01ebc84957ebf2f6","perf-guide/src/target-feature/practice.md":"c4b371842e0086df178488fec97f20def8f0c62ee588bcd25fd948b9b1fa227e","perf-guide/src/target-feature/runtime.md":"835425f5ee597fb3e51d36e725a81ebee29f4561231d19563cd4da81dbb1cfcb","perf-guide/src/target-feature/rustflags.md":"ab49712e9293a65d74d540ba4784fcb57ff1119ec05a575d895c071f1a620f64","perf-guide/src/vert-hor-ops.md":"c6211c0ee91e60552ec592d89d9d957eedc21dee3cbd89e1ad6765ea06a27471","rustfmt.toml":"de6101d0670bad65fb3b337d56957d2a024e017e5ab146ec784d77312daaf8ff","src/api.rs":"f6e92f056565e6fd93f98829a408aee9e790251e0cbd8a8bc30c8662b4d6fabb","src/api/bit_manip.rs":"c47a4d0f7451f7e35d07715e4f39a472e07457fd456fdb726864a4f6887252a3","src/api/bitmask.rs":"6d2beefd62ee5d9c8eb060bee6abc641616bf828c99f82abf97b21bf004e894b","src/api/cast.rs":"03b94a3d316ac7b7be7068810044911e965e889a0ace7bae762749ca74a92747","src/api/cast/macros.rs":"b0a14d0c83ad2ebb7a275180f6d9e3f2bc312ba57a7d3d6c39fad4e0f20f9408","src/api/cast/v128.rs":"2107ea6a426a0fe37a0aa6a03a579ff0bdeb5a1599ea76e2d81734a82f41276d","src/api/cast/v16.rs":"d785cf93b8e61200c9ae1c32b9f5e9d9518e87c261c56bcaf92f2e47b0009eb4","src/api/cast/v256.rs":"b81fcfd367a5de532d922dedf18579e53666facef7957c0e1bc827825e500ae6","src/api/cast/v32.rs":"2aac9ec0a67a97328ba908b13a1ff98da3dcd7781910d592d31f9207cbd9a7d2","src/api/cast/v512.rs":"33b33de818f8d4eccc982bc2f3951a8b3d03e9762ec02789b3df82e3f5ed3fc3","src/api/cast/v64.rs":"ec878917d52a8c952633251b3a938a2cbe0a63fee6d12c15840d9f1343d1f394","src/api/cmp.rs":"357c3a2a09c6d4611c32dd7fa95be2fae933d513e229026ec9b44451a77b884e","src/api/cmp/eq.rs":"60f70f355bae4cb5b17db53204cacc3890f70670611c17df638d4c04f7cc8075","src/api/cmp/ord.rs":"589f7234761c294fa5df8f525bc4acd5a47cdb602207d524a0d4e19804cd9695","src/api/cmp/partial_eq.rs":"3ed23d2a930b0f9750c3a5309da766b03dc4f9c4d375b42ad3c50fe732693d15","src/api/cmp/partial_ord.rs":"e16b11805c94048acd058c93994b5bc74bb187f8d7e3b86a87df60e1601467f9","src/api/cmp/vertical.rs":"de3d62f38eba817299aa16f1e1939954c9a447e316509397465c2830852ba053","src/api/default.rs":"67bf21c134127d12a7028c8b88a57f0ceee8ccbd74976da8ca74eb9f16a174d5","src/api/fmt.rs":"67fb804bb86b6cd77cf8cd492b5733ce437071b66fe3297278b8a6552c325dda","src/api/fmt/binary.rs":"35cb5c266197d6224d598fb3d286e5fe48ef0c01ed356c2ff6fe9ba946f96a92","src/api/fmt/debug.rs":"aa18eea443bf353fea3db8b1a025132bbcaf91e747ecfa43b8d9fce9af395a0c","src/api/fmt/lower_hex.rs":"69d5be366631af309f214e8031c8c20267fcc27a695eac6f45c6bc1df72a67e6","src/api/fmt/octal.rs":"9eb11ba3d990213f3c7f1ec25edba7ce997cb1320e16d308c83498ba6b9bfbd9","src/api/fmt/upper_hex.rs":"a4637d085b7bb20e759ce58e08435b510a563ba3dd468af2b03560fdc5511562","src/api/from.rs":"2e599d8329cb05eaf06224cc441355c4b7b51254fc19256619333be8c149d444","src/api/from/from_array.rs":"dd3fc64fb17d6184bb60343f8da26a05edf0e5f3c14caf55d49fa15e21d948dc","src/api/from/from_vector.rs":"9764371aa9e6005aace74dea14f59e5611a095b7cf42707940924749282c52f0","src/api/hash.rs":"5076ece87969592c876486f5b1ea8affbeaec379d1a14a30859e0aa5592019de","src/api/into_bits.rs":"82297f0697d67b5a015e904e7e6e7b2a7066ba825bc54b94b4ff3e22d7a1eefb","src/api/into_bits/arch_specific.rs":"4acab22af90112072a2608fafc66fccf18cbf2e641b72af28404d30833cfe5c6","src/api/into_bits/macros.rs":"d762406de25aedff88d460dec7a80dc8e825a2a419d53218ce007efa6a1d3e04","src/api/into_bits/v128.rs":"3c502b9ce85bfcc727d6f053d49030b0ba9f46bd8e9fa5aa109382a2033f9f87","src/api/into_bits/v16.rs":"f4f4f61ba88aa51b158ec56ca3dce234349aea0daf2b3029a14ab5125d1e41e5","src/api/into_bits/v256.rs":"c24c3676707a0feb868dabe00766d74deab176794f905f79056337198c7cf790","src/api/into_bits/v32.rs":"905ba683d342fa32f4202b80bb46530807bd0a5b588f6c2e8c9f475223c47775","src/api/into_bits/v512.rs":"7cd89005215a9326eed8a742125dcbf981cba1aca72a313478eabf3df71b1160","src/api/into_bits/v64.rs":"d6238022ccff7b92e55b3f6017fc269acb6f36330a6d7e8fb389853a0f1b6478","src/api/math.rs":"8b2a2fc651917a850539f993aa0b9e5bf4da67b11685285b8de8cdca311719ec","src/api/math/float.rs":"61d2794d68262a1090ae473bd30793b5f65cf732f32a6694a3af2ce5d9225616","src/api/math/float/abs.rs":"5b6b2701e2e11135b7ce58a05052ea8120e10e4702c95d046b9d21b827b26bf8","src/api/math/float/consts.rs":"78acba000d3fa527111300b6327c1932de9c4c1e02d4174e1a5615c01463d38c","src/api/math/float/cos.rs":"4c2dd7173728ef189314f1576c9486e03be21b7da98843b2f9011282a7979e31","src/api/math/float/exp.rs":"7c6d5f1e304f498a01cfa23b92380c815d7da0ad94eae3483783bc377d287eef","src/api/math/float/ln.rs":"54c7583f3df793b39ff57534fade27b41bb992439e5dc178252f5ca3190a3e54","src/api/math/float/mul_add.rs":"62cac77660d20159276d4c9ef066eb90c81cbddb808e8e157182c607625ad2eb","src/api/math/float/mul_adde.rs":"bae056ee9f3a70df39ec3c3b2f6437c65303888a7b843ef1a5bcf1f5aca0e602","src/api/math/float/powf.rs":"9ddb938984b36d39d82a82f862f80df8f7fb013f1d222d45698d41d88472f568","src/api/math/float/recpre.rs":"589225794ff1dbf31158dff660e6d4509ecc8befbb57c633900dea5ac0b840d6","src/api/math/float/rsqrte.rs":"a32abdcc318d7ccc8448231f54d75b884b7cbeb03a7d595713ab6243036f4dbf","src/api/math/float/sin.rs":"cbd3622b7df74f19691743001c8cf747a201f8977ad90542fee915f37dcd1e49","src/api/math/float/sqrt.rs":"0c66d5d63fb08e4d99c6b82a8828e41173aff1ac9fa1a2764a11fac217ccf2ac","src/api/math/float/sqrte.rs":"731e1c9f321b662accdd27dacb3aac2e8043b7aecb2f2161dde733bd9f025362","src/api/minimal.rs":"1f22bcc528555444e76de569ec0ae2029b9ae9d04805efeafa93369c8098036b","src/api/minimal/iuf.rs":"819cff26d3e196f807645bcc1d79eb27d9f175edb89910f2274d52a1e913cd11","src/api/minimal/mask.rs":"0cae10ae1fc65f5070e686c0c79bfba27b86b33d6c399367bd4848fb367dcec4","src/api/minimal/ptr.rs":"f65ebf21866a863485344432d9a7a9b7418f7fad5fdf841a4e2fa56ec0766ad0","src/api/ops.rs":"3e273b277a0f3019d42c3c59ca94a5afd4885d5ae6d2182e5089bbeec9de42ee","src/api/ops/scalar_arithmetic.rs":"d2d5ad897a59dd0787544f927e0e7ca4072c3e58b0f4a2324083312b0d5a21d7","src/api/ops/scalar_bitwise.rs":"482204e459ca6be79568e1c9f70adbe2d2151412ddf122fb2161be8ebb51c40c","src/api/ops/scalar_mask_bitwise.rs":"c250f52042e37b22d57256c80d4604104cfd2fbe2a2e127c676267270ca5d350","src/api/ops/scalar_shifts.rs":"987f8fdebeedc16e3d77c1b732e7826ef70633c541d16dfa290845d5c6289150","src/api/ops/vector_arithmetic.rs":"ddca15d09ddeef502c2ed66117a62300ca65d87e959e8b622d767bdf1c307910","src/api/ops/vector_bitwise.rs":"b3968f7005b649edcc22a54e2379b14d5ee19045f2e784029805781ae043b5ee","src/api/ops/vector_float_min_max.rs":"76bf8cb607e2c442923c1da1061a6b80d742d607408033c2a3761161114cf2a0","src/api/ops/vector_int_min_max.rs":"a378789c6ff9b32a51fbd0a97ffd36ed102cd1fe6a067d2b02017c1df342def6","src/api/ops/vector_mask_bitwise.rs":"5052d18517d765415d40327e6e8e55a312daaca0a5e2aec959bfa54b1675f9c8","src/api/ops/vector_neg.rs":"5c62f6b0221983cdbd23cd0a3af3672e6ba1255f0dfe8b19aae6fbd6503e231b","src/api/ops/vector_rotates.rs":"03cbe8a400fd7c688e4ee771a990a6754f2031b1a59b19ae81158b21471167e5","src/api/ops/vector_shifts.rs":"9bf69d0087268f61009e39aea52e03a90f378910206b6a28e8393178b6a5d0e0","src/api/ptr.rs":"8a793251bed6130dcfb2f1519ceaa18b751bbb15875928d0fb6deb5a5e07523a","src/api/ptr/gather_scatter.rs":"138b02b0fa1fdd785b95fc7048488be7e3ef277e0bc6ac5affb26af6a11d41a6","src/api/reductions.rs":"ae5baca81352ecd44526d6c30c0a1feeda475ec73ddd3c3ec6b14e944e5448ee","src/api/reductions/bitwise.rs":"8bf910ae226188bd15fc7e125f058cd2566b6186fcd0cd8fd020f352c39ce139","src/api/reductions/float_arithmetic.rs":"3997125f87c7bac07fffda3a1d814e0e6c77ca83099546a9e2fb8dc92231129f","src/api/reductions/integer_arithmetic.rs":"47471da1c5f859489680bb5d34ced3d3aa20081c16053a3af121a4496fcb57bf","src/api/reductions/mask.rs":"db83327a950e33a317f37fd33ca4e20c347fb415975ec024f3e23da8509425af","src/api/reductions/min_max.rs":"d40ccad10220ae5982785015bef92e4b0749583c2b060cad0aa4f92d99491c3b","src/api/select.rs":"a98e2ccf9fc6bdeed32d337c8675bc96c2fbe2cc34fbf149ad6047fb8e749774","src/api/shuffle.rs":"da58200790868c09659819322a489929a5b6e56c596ed07e6a44293ea02e7d09","src/api/shuffle1_dyn.rs":"bfea5a91905b31444e9ef7ca6eddb7a9606b7e22d3f71bb842eb2795a0346620","src/api/slice.rs":"ee87484e8af329547b9a5d4f2a69e8bed6ea10bbd96270d706083843d4eea2ac","src/api/slice/from_slice.rs":"53691dc9958dec4180004a42d140552b405e8cd875caa282e89af378dd63c8bc","src/api/slice/write_to_slice.rs":"3dd2e511af43dc6fa911dd0b12f6f00323e0acd1202a01365db400557d52a89b","src/api/swap_bytes.rs":"4a6792a2e49a77475e1b237592b4b2804dbddb79c474331acd0dd71b36934259","src/codegen.rs":"a29d38fa0a85eaf787fb49989e625bf64effd5f39c126fbb2a24be206d2a3917","src/codegen/bit_manip.rs":"17ecebcff1f080e712fea5eb51602a73f4201ed56a198220342c8eb55bb92692","src/codegen/llvm.rs":"b1f24237f61b7c5ddb8d47f3943aab79a95ce0e75af87ab2d1c88d842faffd39","src/codegen/math.rs":"35f96e37a78fcf0cdb02146b7f27a45108fe06a37fc2a54d8851ce131a326178","src/codegen/math/float.rs":"dd86c0449e576c83b719700962ac017c332987fac08d91f2b7a2b1b883598170","src/codegen/math/float/abs.rs":"f56e2b4b8055ea861c1f5cbc6b6e1d8e7e5af163b62c13574ddee4e09513bfbc","src/codegen/math/float/cos.rs":"ef3b511a24d23045b310315e80348a9b7fedb576fc2de52d74290616a0abeb2a","src/codegen/math/float/cos_pi.rs":"4e7631a5d73dac21531e09ef1802d1180f8997509c2c8fa9f67f322194263a97","src/codegen/math/float/exp.rs":"61b691598c41b5622f24e4320c1bdd08701e612a516438bdddcc728fc3405c8c","src/codegen/math/float/ln.rs":"46b718b1ba8c9d99e1ad40f53d20dfde08a3063ca7bd2a9fdd6698e060da687e","src/codegen/math/float/macros.rs":"dd42135fff13f9aca4fd3a1a4e14c7e6c31aadc6d817d63b0d2fb9e62e062744","src/codegen/math/float/mul_add.rs":"a37bf764345d4b1714f97e83897b7cf0855fc2811704bcbc0012db91825339e1","src/codegen/math/float/mul_adde.rs":"c75702bfcb361de45964a93caf959a695ef2376bd069227600b8c6872665c755","src/codegen/math/float/powf.rs":"642346e982bc4c39203de0864d2149c4179cd7b21cf67a2951687932b4675872","src/codegen/math/float/sin.rs":"9d68164c90cdca6a85155040cdac42e27342ebe0b925273ef1593df721af4258","src/codegen/math/float/sin_cos_pi.rs":"9be02ad48585a1e8d99129382fbffbaed47852f15459256a708850b6b7a75405","src/codegen/math/float/sin_pi.rs":"9890347905b4d4a3c7341c3eb06406e46e60582bcf6960688bd727e5dadc6c57","src/codegen/math/float/sqrt.rs":"e3c60dcfb0c6d2fc62adabcc931b2d4040b83cab294dea36443fb4b89eb79e34","src/codegen/math/float/sqrte.rs":"f0f4ef9eb475ae41bcc7ec6a95ad744ba6b36925faa8b2c2814004396d196b63","src/codegen/pointer_sized_int.rs":"a70697169c28218b56fd2e8d5353f2e00671d1150d0c8cef77d613bdfacd84cb","src/codegen/reductions.rs":"645e2514746d01387ddd07f0aa4ffd8430cc9ab428d4fb13773ea319fa25dd95","src/codegen/reductions/mask.rs":"8f1afe6aabf096a3278e1fc3a30f736e04aa8b9ce96373cee22162d18cfe2702","src/codegen/reductions/mask/aarch64.rs":"cba6e17603d39795dcfe8339b6b7d8714c3e162a1f0a635979f037aa24fe4206","src/codegen/reductions/mask/arm.rs":"9447904818aa2c7c25d0963eead452a639a11ca7dbd6d21eedbfcaade07a0f33","src/codegen/reductions/mask/fallback.rs":"7a0ef9f7fd03ae318b495b95e121350cd61caffc5cc6ee17fabf130d5d933453","src/codegen/reductions/mask/fallback_impl.rs":"76547f396e55ef403327c77c314cf8db8c7a5c9b9819bfb925abeacf130249e5","src/codegen/reductions/mask/x86.rs":"4c0457b6276f9809223590092a4c77e73812330326cdabd28df06820de10a310","src/codegen/reductions/mask/x86/avx.rs":"b4913d87844c522903641cbbf10db4551addb1ce5e9e78278e21612fa65c733b","src/codegen/reductions/mask/x86/avx2.rs":"677aed3f056285285daa3adff8bc65e739630b4424defa6d9665e160f027507e","src/codegen/reductions/mask/x86/sse.rs":"5a827c6f8e1074e324f6e4c778942badb6c09d747a7142de01cadec1240b3428","src/codegen/reductions/mask/x86/sse2.rs":"bc38e6c31cb4b3d62147eba6cac264e519e2a48e0f7ce9010cfa9ef0cf0ec9fd","src/codegen/shuffle.rs":"99a0b52c2470097b028af134221099baba383446a01c7dc3ae560209880bcdb7","src/codegen/shuffle1_dyn.rs":"abbc95305dad815ab2ded3e8357791bcff080414668b55a4d397558a1d202d01","src/codegen/swap_bytes.rs":"1d6cdc716eadddc92b4fd506b2445a821caa8dc00860447de09d7ebd69c2087f","src/codegen/v128.rs":"94226b31ec403d18d9d2fe06713f147c9c79e9b5f9105089088266313f843185","src/codegen/v16.rs":"ddec4ffb66b6f7aaffb9a1780c5ddba82557abd74f45073d335047e04cf74924","src/codegen/v256.rs":"6b63917f0444118d6b1595bff2045e59b97c4d24012bd575f69f1f0efc5a0241","src/codegen/v32.rs":"3477b3c5540aed86e61e2f5807dd31db947413cec9181c587d93ed6ec74f0eba","src/codegen/v512.rs":"5854f99d3aabc4cd42b28a20d9ce447756dc2ba024a409a69b6a8ae1f1842fc5","src/codegen/v64.rs":"e9e89caebfe63d10c0cbca61e4dfdba3b7e02ee0989170f80beed23237ddd950","src/codegen/vPtr.rs":"711c753a08d53a2879c4fb87a0762c46ce4e34c22f0ca88d2e4c557a0f679969","src/codegen/vSize.rs":"eeee9858749aa82142b27bc120d1989bb74a6b82e1e4efbbeaccc9634dc9acfc","src/lib.rs":"b842b5e47008b9bd59af4d2e309b84204d90a53d36595684082adc46b6934987","src/masks.rs":"be05e923ac58fe6eb61311561b5583cd306574f206dc09fe8e3c7de3dd0c1433","src/sealed.rs":"ae7fdeaf5d84cd7710ed730ca72ca7eaba93df6cb0acb183e5c0a7327acf197f","src/testing.rs":"1d3a7862ef625e235a5734ad7204e68d350f902c0695182b1f08a0552432416e","src/testing/macros.rs":"6378856d7a40ba5ec5c7c0dad6327d79f0c77266921c24296d10aed6c68e9b98","src/testing/utils.rs":"5ec6a47b836f364ec6dede19750a19eaac704162327d03041eb0f007d5f8d75c","src/v128.rs":"16cf9a8e7156b899ee9b9cd3f2dba9d13ec63289bea8c3ee9ae2e43ad9510288","src/v16.rs":"cb6465cf1e00bf530183af1819b9fe3d7eec978f8765d5e85d9b58a39a4b4045","src/v256.rs":"fe235017da18c7f3c361831c60e3173ad304d8ea1e95d64ebebc79da2d708511","src/v32.rs":"145d347855bac59b2de6508f9e594654e6c330423af9edc0e2ac8f4d1abdf45e","src/v512.rs":"f372f277f3e62eb5c945bb1c460333fdb17b6974fcc876633788ff53bded9599","src/v64.rs":"0b8079881b71575e3414be0b7f8f7eaba65281ba6732f2b2f61f73e95b6f48f7","src/vPtr.rs":"8b3e433d487180bb4304ff71245ecad90f0010f43e139a72027b672abe58facc","src/vSize.rs":"eda5aa020706cbf94d15bada41a0c2a35fc8f3f37cb7c2cd6f34d201399a495e","tests/endianness.rs":"7db22078f31fe1421fc2d21f2e6b9df5eb0bdc99c10f6985d3a74c0df8f205dc"},"package":null}
  59. \ No newline at end of file
  60. diff --git a/third_party/rust/packed_simd/.travis.yml b/third_party/rust/packed_simd/.travis.yml
  61. --- a/third_party/rust/packed_simd/.travis.yml
  62. +++ b/third_party/rust/packed_simd/.travis.yml
  63. @@ -1,291 +1,222 @@
  64. language: rust
  65. -sudo: false
  66. rust: nightly
  67. +os: linux
  68. +dist: focal
  69. stages:
  70. - tools
  71. - - linux-tier1
  72. - - osx-tier1
  73. - - osx-tier2
  74. - - linux-tier2
  75. - - android
  76. + - build-test-verify # Passes full test suite, permit no regressions (unless it's rustup :/)
  77. + - 32bit-tier1
  78. + - 64bit-tier2
  79. + - 32bit-tier2
  80. -matrix:
  81. - fast_finish: true
  82. +jobs:
  83. + fast_finish: true
  84. include:
  85. # Android:
  86. - - env: TARGET=x86_64-linux-android NOVERIFY=1
  87. + - env: TARGET=x86_64-linux-android
  88. name: "x86_64-unknown-linux-android + SSE2"
  89. - stage: android
  90. + stage: build-test-verify
  91. - env: TARGET=arm-linux-androideabi
  92. name: "arm-linux-androideabi"
  93. - stage: android
  94. + stage: build-test-verify
  95. - env: TARGET=arm-linux-androideabi RUSTFLAGS="-C target-feature=+v7,+neon"
  96. name: "arm-linux-androideabi + NEON"
  97. - stage: android
  98. - - env: TARGET=aarch64-linux-android
  99. - name: "aarch64-unknown-linux-android"
  100. - stage: android
  101. - - env: TARGET=aarch64-linux-android RUSTFLAGS="-C target-feature=+neon"
  102. - name: "aarch64-unknown-linux-android + NEON"
  103. - stage: android
  104. + stage: build-test-verify
  105. + - name: "aarch64-unknown-linux-android + NEON"
  106. + env: TARGET=aarch64-linux-android RUSTFLAGS="-C target-feature=+neon"
  107. + stage: build-test-verify
  108. - env: TARGET="thumbv7neon-linux-androideabi"
  109. name: "thumbv7neon-linux-androideabi"
  110. - stage: android
  111. + stage: 32bit-tier2
  112. # Linux:
  113. - env: TARGET=i586-unknown-linux-gnu
  114. name: "i586-unknown-linux-gnu"
  115. - stage: linux-tier2
  116. + stage: 32bit-tier2
  117. - env: TARGET=i586-unknown-linux-gnu RUSTFLAGS="-C target-feature=+sse"
  118. name: "i586-unknown-linux-gnu + SSE"
  119. - stage: linux-tier2
  120. + stage: 32bit-tier2
  121. - env: TARGET=i586-unknown-linux-gnu RUSTFLAGS="-C target-feature=+sse2"
  122. name: "i586-unknown-linux-gnu + SSE2"
  123. - stage: linux-tier2
  124. + stage: 32bit-tier2
  125. - env: TARGET=i686-unknown-linux-gnu
  126. name: "i686-unknown-linux-gnu + SSE2"
  127. - stage: linux-tier1
  128. + stage: 32bit-tier1
  129. - env: TARGET=i686-unknown-linux-gnu RUSTFLAGS="-C target-feature=+sse4.2"
  130. name: "i686-unknown-linux-gnu + SSE4.2"
  131. - stage: linux-tier1
  132. + stage: 32bit-tier1
  133. - env: TARGET=i686-unknown-linux-gnu RUSTFLAGS="-C target-feature=+avx2"
  134. name: "i686-unknown-linux-gnu + AVX2"
  135. - stage: linux-tier1
  136. - - env: TARGET=x86_64-unknown-linux-gnu
  137. - name: "x86_64-unknown-linux-gnu + SSE2"
  138. - install: rustup component add rustfmt-preview
  139. - stage: linux-tier1
  140. + stage: 32bit-tier1
  141. - env: TARGET=x86_64-unknown-linux-gnu RUSTFLAGS="-C target-feature=+sse4.2"
  142. name: "x86_64-unknown-linux-gnu + SSE4.2"
  143. install: rustup component add rustfmt-preview
  144. - stage: linux-tier1
  145. - - env: TARGET=x86_64-unknown-linux-gnu RUSTFLAGS="-C target-feature=+avx"
  146. - name: "x86_64-unknown-linux-gnu + AVX"
  147. - install: rustup component add rustfmt-preview
  148. - stage: linux-tier1
  149. + stage: build-test-verify
  150. - env: TARGET=x86_64-unknown-linux-gnu RUSTFLAGS="-C target-feature=+avx2"
  151. name: "x86_64-unknown-linux-gnu + AVX2"
  152. install: rustup component add rustfmt-preview
  153. - stage: linux-tier1
  154. - - env: TARGET=x86_64-unknown-linux-gnu-emulated
  155. - name: "Intel SDE + SSE2"
  156. - install: true
  157. - stage: linux-tier1
  158. - - env: TARGET=x86_64-unknown-linux-gnu-emulated RUSTFLAGS="-C target-feature=+sse4.2"
  159. - name: "Intel SDE + SSE4.2"
  160. - install: true
  161. - stage: linux-tier1
  162. - - env: TARGET=x86_64-unknown-linux-gnu-emulated RUSTFLAGS="-C target-feature=+avx"
  163. - name: "Intel SDE + AVX"
  164. - install: true
  165. - stage: linux-tier1
  166. - - env: TARGET=x86_64-unknown-linux-gnu-emulated RUSTFLAGS="-C target-feature=+avx2"
  167. - name: "Intel SDE + AVX2"
  168. - install: true
  169. - stage: linux-tier1
  170. - - env: TARGET=x86_64-unknown-linux-gnu-emulated RUSTFLAGS="-C target-feature=+avx-512f"
  171. - name: "Intel SDE + AVX-512"
  172. - install: true
  173. - stage: linux-tier1
  174. - - env: TARGET=arm-unknown-linux-gnueabi
  175. - name: "arm-unknown-linux-gnueabi"
  176. - stage: linux-tier2
  177. + stage: build-test-verify
  178. - env: TARGET=arm-unknown-linux-gnueabi RUSTFLAGS="-C target-feature=+v7,+neon"
  179. name: "arm-unknown-linux-gnueabi + NEON"
  180. - stage: linux-tier2
  181. + stage: build-test-verify
  182. - env: TARGET=arm-unknown-linux-gnueabihf
  183. name: "arm-unknown-linux-gnueabihf"
  184. - stage: linux-tier2
  185. + stage: build-test-verify
  186. - env: TARGET=arm-unknown-linux-gnueabihf RUSTFLAGS="-C target-feature=+v7,+neon"
  187. name: "arm-unknown-linux-gnueabihf + NEON"
  188. - stage: linux-tier2
  189. + stage: build-test-verify
  190. - env: TARGET=armv7-unknown-linux-gnueabihf
  191. name: "armv7-unknown-linux-gnueabihf"
  192. - stage: linux-tier2
  193. + stage: build-test-verify
  194. - env: TARGET=armv7-unknown-linux-gnueabihf RUSTFLAGS="-C target-feature=+neon"
  195. name: "armv7-unknown-linux-gnueabihf + NEON"
  196. - stage: linux-tier2
  197. + stage: build-test-verify
  198. - env: TARGET="thumbv7neon-unknown-linux-gnueabihf"
  199. name: "thumbv7neon-unknown-linux-gnueabihf"
  200. - stage: linux-tier2
  201. - - env: TARGET=aarch64-unknown-linux-gnu
  202. - name: "aarch64-unknown-linux-gnu"
  203. - stage: linux-tier2
  204. - - env: TARGET=aarch64-unknown-linux-gnu RUSTFLAGS="-C target-feature=+neon"
  205. - name: "aarch64-unknown-linux-gnu + NEON"
  206. - stage: linux-tier2
  207. + stage: 32bit-tier2
  208. + - name: "aarch64-unknown-linux-gnu + NEON"
  209. + env: TARGET=aarch64-unknown-linux-gnu RUSTFLAGS="-C target-feature=+neon"
  210. + stage: build-test-verify
  211. - env: TARGET=mips-unknown-linux-gnu
  212. name: "mips-unknown-linux-gnu"
  213. - stage: linux-tier2
  214. + stage: 32bit-tier2
  215. - env: TARGET=mipsel-unknown-linux-musl
  216. name: "mipsel-unknown-linux-musl"
  217. - stage: linux-tier2
  218. + stage: 32bit-tier2
  219. - env: TARGET=mips64-unknown-linux-gnuabi64
  220. name: "mips64-unknown-linux-gnuabi64"
  221. - stage: linux-tier2
  222. + stage: 64bit-tier2
  223. - env: TARGET=mips64el-unknown-linux-gnuabi64
  224. name: "mips64el-unknown-linux-gnuabi64"
  225. - stage: linux-tier2
  226. + stage: 64bit-tier2
  227. # FIXME: https://github.com/rust-lang-nursery/packed_simd/issues/18
  228. # env: TARGET=mips64el-unknown-linux-gnuabi64 RUSTFLAGS="-C target-feature=+msa -C target-cpu=mips64r6"
  229. - env: TARGET=powerpc-unknown-linux-gnu
  230. name: "powerpc-unknown-linux-gnu"
  231. - stage: linux-tier2
  232. + stage: 32bit-tier2
  233. - env: TARGET=powerpc64-unknown-linux-gnu
  234. name: "powerpc64-unknown-linux-gnu"
  235. - stage: linux-tier2
  236. - - env: TARGET=powerpc64le-unknown-linux-gnu
  237. - name: "powerpc64le-unknown-linux-gnu"
  238. - stage: linux-tier2
  239. - - env: TARGET=powerpc64le-unknown-linux-gnu RUSTFLAGS="-C target-feature=+altivec"
  240. - name: "powerpc64le-unknown-linux-gnu + ALTIVEC"
  241. - stage: linux-tier2
  242. - - env: TARGET=powerpc64le-unknown-linux-gnu RUSTFLAGS="-C target-feature=+vsx"
  243. - name: "powerpc64le-unknown-linux-gnu + VSX"
  244. - stage: linux-tier2
  245. - - env: TARGET=s390x-unknown-linux-gnu
  246. - name: "s390x-unknown-linux-gnu"
  247. - stage: linux-tier2
  248. + stage: 64bit-tier2
  249. + - name: "powerpc64le-unknown-linux-gnu"
  250. + env: TARGET=powerpc64le-unknown-linux-gnu
  251. + stage: build-test-verify
  252. + - name: "powerpc64le-unknown-linux-gnu + ALTIVEC"
  253. + env: TARGET=powerpc64le-unknown-linux-gnu RUSTFLAGS="-C target-feature=+altivec"
  254. + stage: build-test-verify
  255. + - name: "powerpc64le-unknown-linux-gnu + VSX"
  256. + env: TARGET=powerpc64le-unknown-linux-gnu RUSTFLAGS="-C target-feature=+vsx"
  257. + stage: build-test-verify
  258. + - name: "s390x-unknown-linux-gnu"
  259. + env: TARGET=s390x-unknown-linux-gnu
  260. + stage: 64bit-tier2
  261. - env: TARGET=sparc64-unknown-linux-gnu
  262. name: "sparc64-unknown-linux-gnu"
  263. - stage: linux-tier2
  264. + stage: 64bit-tier2
  265. # WebAssembly:
  266. - env: TARGET=wasm32-unknown-unknown
  267. name: "wasm32-unknown-unknown"
  268. - stage: osx-tier1 # For now
  269. + stage: 32bit-tier2
  270. # MacOSX:
  271. - os: osx
  272. - env: TARGET=i686-apple-darwin
  273. - name: "i686-apple-darwin + SSE2"
  274. - script: ci/run.sh
  275. - osx_image: xcode10
  276. - stage: osx-tier1
  277. - - os: osx
  278. - env: TARGET=i686-apple-darwin RUSTFLAGS="-C target-feature=+sse4.2"
  279. - name: "i686-apple-darwin + SSE4.2"
  280. - script: ci/run.sh
  281. - osx_image: xcode10
  282. - stage: osx-tier1
  283. - # Travis-CI OSX build bots do not support AVX2:
  284. - - os: osx
  285. - env: TARGET=i686-apple-darwin RUSTFLAGS="-C target-feature=+avx"
  286. - name: "i686-apple-darwin + AVX"
  287. - script: ci/run.sh
  288. - osx_image: xcode10
  289. - stage: osx-tier1
  290. - - os: osx
  291. - env: TARGET=x86_64-apple-darwin
  292. - name: "x86_64-apple-darwin + SSE2"
  293. - install: true
  294. - script: ci/run.sh
  295. - osx_image: xcode10
  296. - stage: osx-tier1
  297. - - os: osx
  298. env: TARGET=x86_64-apple-darwin RUSTFLAGS="-C target-feature=+sse4.2"
  299. name: "x86_64-apple-darwin + SSE4.2"
  300. install: true
  301. script: ci/run.sh
  302. osx_image: xcode10
  303. - stage: osx-tier1
  304. + stage: build-test-verify
  305. # Travis-CI OSX build bots do not support AVX2:
  306. - os: osx
  307. env: TARGET=x86_64-apple-darwin RUSTFLAGS="-C target-feature=+avx"
  308. name: "x86_64-apple-darwin + AVX"
  309. install: true
  310. script: ci/run.sh
  311. osx_image: xcode10
  312. - stage: osx-tier1
  313. + stage: build-test-verify
  314. # *BSDs:
  315. #- env: TARGET=i686-unknown-freebsd NORUN=1
  316. # script: ci/run.sh
  317. #- env: TARGET=x86_64-unknown-freebsd NORUN=1
  318. # script: ci/run.sh
  319. #- env: TARGET=x86_64-unknown-netbsd NORUN=1
  320. # script: ci/run.sh
  321. # Solaris:
  322. #- env: TARGET=x86_64-sun-solaris NORUN=1
  323. # script: ci/run.sh
  324. # iOS:
  325. - os: osx
  326. - env: TARGET=i386-apple-ios
  327. - name: "i386-apple-ios"
  328. - script: ci/run.sh
  329. - osx_image: xcode9.4
  330. - stage: osx-tier2
  331. - - os: osx
  332. env: TARGET=x86_64-apple-ios
  333. name: "x86_64-apple-ios + SSE2"
  334. script: ci/run.sh
  335. osx_image: xcode9.4
  336. - stage: osx-tier2
  337. - - os: osx
  338. - env: TARGET=armv7-apple-ios NORUN=1
  339. - name: "armv7-apple-ios [Build only]"
  340. - script: ci/run.sh
  341. + stage: 64bit-tier2
  342. + - name: "aarch64-apple-ios + NEON"
  343. + env: TARGET=aarch64-apple-ios RUSTFLAGS="-C target-feature=+neon"
  344. + os: osx
  345. osx_image: xcode9.4
  346. - stage: osx-tier2
  347. - - os: osx
  348. - env: TARGET=aarch64-apple-ios NORUN=1
  349. - name: "aarch64-apple-ios [Build only]"
  350. script: ci/run.sh
  351. - osx_image: xcode9.4
  352. - stage: osx-tier2
  353. + stage: 64bit-tier2
  354. # BENCHMARKS:
  355. - name: "Benchmarks - x86_64-unknown-linux-gnu"
  356. install: TARGET=x86_64-unknown-linux-gnu ./ci/setup_benchmarks.sh
  357. - script: PATH=$(pwd):$PATH NORUN=1 VERIFY=1 FEATURES=core_arch,ispc,sleef-sys ci/benchmark.sh
  358. + # FIXME: Use `core_arch,sleef-sys` features once they works again
  359. + script: PATH=$(pwd):$PATH NORUN=1 VERIFY=1 FEATURES=ispc ci/benchmark.sh
  360. stage: tools
  361. - name: "Benchmarks - x86_64-apple-darwin"
  362. install: TARGET=x86_64-apple-darwin ./ci/setup_benchmarks.sh
  363. - script: PATH=$(pwd):$PATH NORUN=1 VERIFY=1 FEATURES=core_arch,ispc,sleef-sys ci/benchmark.sh
  364. + # FIXME: Use `core_arch,sleef-sys` features once they works again
  365. + script: PATH=$(pwd):$PATH NORUN=1 VERIFY=1 FEATURES=ispc ci/benchmark.sh
  366. os: osx
  367. osx_image: xcode9.4
  368. stage: tools
  369. # TOOLS:
  370. - name: "Documentation"
  371. - install: cargo install mdbook
  372. + before_install:
  373. + - sudo add-apt-repository -y ppa:deadsnakes/ppa
  374. + - sudo apt-get update -y
  375. + - sudo apt-get install -y python3.9
  376. + install:
  377. + - cargo install mdbook
  378. script: ci/dox.sh
  379. stage: tools
  380. - name: "rustfmt"
  381. install: true
  382. - before_script: rustup component add rustfmt-preview
  383. - script: ci/all.sh check_fmt || true
  384. + script: |
  385. + if rustup component add rustfmt-preview ; then
  386. + ci/all.sh check_fmt || true
  387. + fi
  388. stage: tools
  389. - name: "clippy"
  390. install: true
  391. - before_script: rustup component add clippy-preview
  392. - script: ci/all.sh clippy
  393. + script: |
  394. + if rustup component add clippy-preview ; then
  395. + ci/all.sh clippy
  396. + fi
  397. stage: tools
  398. allow_failures:
  399. # FIXME: ISPC cannot be found?
  400. - name: "Benchmarks - x86_64-apple-darwin"
  401. - # FIXME: TBD
  402. - - env: TARGET=powerpc-unknown-linux-gnu
  403. - - env: TARGET=powerpc64-unknown-linux-gnu
  404. - - env: TARGET=powerpc64le-unknown-linux-gnu
  405. - - env: TARGET=powerpc64le-unknown-linux-gnu RUSTFLAGS="-C target-feature=+altivec"
  406. - - env: TARGET=powerpc64le-unknown-linux-gnu RUSTFLAGS="-C target-feature=+vsx"
  407. + # FIXME: i686 fails in inlining, apparently
  408. + - stage: 32bit-tier1
  409. #- env: TARGET=i686-unknown-freebsd NORUN=1
  410. #- env: TARGET=x86_64-unknown-freebsd NORUN=1
  411. #- env: TARGET=x86_64-unknown-netbsd NORUN=1
  412. #- env: TARGET=x86_64-sun-solaris NORUN=1
  413. # FIXME: TBD
  414. - - env: TARGET=arm-linux-androideabi
  415. - - env: TARGET=arm-linux-androideabi RUSTFLAGS="-C target-feature=+v7,+neon"
  416. - - env: TARGET=aarch64-linux-android
  417. - - env: TARGET=aarch64-linux-android RUSTFLAGS="-C target-feature=+neon"
  418. + - stage: 64bit-tier2
  419. + - stage: 32bit-tier2
  420. # FIXME: iOS
  421. # https://github.com/rust-lang-nursery/packed_simd/issues/26
  422. - - env: TARGET=i386-apple-ios
  423. - env: TARGET=x86_64-apple-ios
  424. + # Is this related to the above? Mysterious test failure
  425. + - name: "aarch64-apple-ios + NEON"
  426. # FIXME: https://github.com/rust-lang-nursery/packed_simd/issues/182
  427. - env: TARGET=arm-unknown-linux-gnueabi RUSTFLAGS="-C target-feature=+v7,+neon"
  428. - env: TARGET=arm-unknown-linux-gnueabihf RUSTFLAGS="-C target-feature=+v7,+neon"
  429. - env: TARGET=armv7-unknown-linux-gnueabihf RUSTFLAGS="-C target-feature=+neon"
  430. # FIXME: https://github.com/rust-lang-nursery/packed_simd/issues/183
  431. - env: TARGET=wasm32-unknown-unknown
  432. diff --git a/third_party/rust/packed_simd/Cargo.toml b/third_party/rust/packed_simd/Cargo.toml
  433. --- a/third_party/rust/packed_simd/Cargo.toml
  434. +++ b/third_party/rust/packed_simd/Cargo.toml
  435. @@ -1,11 +1,11 @@
  436. [package]
  437. name = "packed_simd"
  438. -version = "0.3.3"
  439. +version = "0.3.4"
  440. authors = ["Gonzalo Brito Gadeschi <gonzalobg88@gmail.com>"]
  441. description = "Portable Packed SIMD vectors"
  442. documentation = "https://docs.rs/crate/packed_simd/"
  443. homepage = "https://github.com/rust-lang-nursery/packed_simd"
  444. repository = "https://github.com/rust-lang-nursery/packed_simd"
  445. keywords = ["simd", "vector", "portability"]
  446. categories = ["hardware-support", "concurrency", "no-std", "data-structures"]
  447. license = "MIT/Apache-2.0"
  448. @@ -16,27 +16,27 @@ edition = "2018"
  449. appveyor = { repository = "rust-lang-nursery/packed_simd" }
  450. travis-ci = { repository = "rust-lang-nursery/packed_simd" }
  451. codecov = { repository = "rust-lang-nursery/packed_simd" }
  452. is-it-maintained-issue-resolution = { repository = "rust-lang-nursery/packed_simd" }
  453. is-it-maintained-open-issues = { repository = "rust-lang-nursery/packed_simd" }
  454. maintenance = { status = "experimental" }
  455. [dependencies]
  456. -cfg-if = "^0.1.6"
  457. -core_arch = { version = "^0.1.3", optional = true }
  458. +cfg-if = "0.1.10"
  459. +core_arch = { version = "0.1.5", optional = true }
  460. [features]
  461. default = []
  462. into_bits = []
  463. libcore_neon = []
  464. [dev-dependencies]
  465. paste = "^0.1.3"
  466. -arrayvec = { version = "^0.4", default-features = false }
  467. +arrayvec = { version = "^0.5", default-features = false }
  468. [target.'cfg(target_arch = "x86_64")'.dependencies.sleef-sys]
  469. -version = "^0.1.2"
  470. +version = "0.1.2"
  471. optional = true
  472. [target.wasm32-unknown-unknown.dev-dependencies]
  473. -wasm-bindgen = "=0.2.19"
  474. -wasm-bindgen-test = "=0.2.19"
  475. \ No newline at end of file
  476. +wasm-bindgen = "=0.2.52"
  477. +wasm-bindgen-test = "=0.3.2"
  478. diff --git a/third_party/rust/packed_simd/readme.md b/third_party/rust/packed_simd/README.md
  479. rename from third_party/rust/packed_simd/readme.md
  480. rename to third_party/rust/packed_simd/README.md
  481. --- a/third_party/rust/packed_simd/readme.md
  482. +++ b/third_party/rust/packed_simd/README.md
  483. @@ -1,24 +1,22 @@
  484. # `Simd<[T; N]>`
  485. ## Implementation of [Rust RFC #2366: `std::simd`][rfc2366]
  486. [![Travis-CI Status]][travis] [![Appveyor Status]][appveyor] [![Latest Version]][crates.io] [![docs]][master_docs]
  487. -> This aims to be a 100% conforming implementation of Rust RFC 2366 for stabilization.
  488. -
  489. -**WARNING**: this crate only supports the most recent nightly Rust toolchain.
  490. +**WARNING**: this crate only supports the most recent nightly Rust toolchain
  491. +and will be superceded by [stdsimd](https://github.com/rust-lang/stdsimd).
  492. ## Documentation
  493. * [API docs (`master` branch)][master_docs]
  494. * [Performance guide][perf_guide]
  495. -* [API docs (`docs.rs`)][docs.rs]: **CURRENTLY DOWN** due to
  496. - https://github.com/rust-lang-nursery/packed_simd/issues/110
  497. +* [API docs (`docs.rs`)][docs.rs]
  498. * [RFC2366 `std::simd`][rfc2366]: - contains motivation, design rationale,
  499. discussion, etc.
  500. ## Examples
  501. Most of the examples come with both a scalar and a vectorized implementation.
  502. * [`aobench`](https://github.com/rust-lang-nursery/packed_simd/tree/master/examples/aobench)
  503. @@ -34,27 +32,16 @@ Most of the examples come with both a sc
  504. ## Cargo features
  505. * `into_bits` (default: disabled): enables `FromBits`/`IntoBits` trait
  506. implementations for the vector types. These allow reinterpreting the bits of a
  507. vector type as those of another vector type safely by just using the
  508. `.into_bits()` method.
  509. -* `core_arch` (default: disabled): enable this feature to recompile `core::arch`
  510. - for the target-features enabled. `packed_simd` includes optimizations for some
  511. - target feature combinations that are enabled by this feature. Note, however,
  512. - that this is an unstable dependency, that rustc might break at any time.
  513. -
  514. -* `sleef-sys` (default: disabled - `x86_64` only): internally uses the [SLEEF]
  515. - short-vector math library when profitable via the [`sleef-sys`][sleef_sys]
  516. - crate. [SLEEF] is licensed under the [Boost Software License
  517. - v1.0][boost_license], an extremely permissive license, and can be statically
  518. - linked without issues.
  519. -
  520. ## Performance
  521. The following [ISPC] examples are also part of `packed_simd`'s
  522. [`examples/`](https://github.com/rust-lang-nursery/packed_simd/tree/master/examples/)
  523. directory, where `packed_simd`+[`rayon`][rayon] are used to emulate [ISPC]'s
  524. Single-Program-Multiple-Data (SPMD) programming model. The performance results
  525. on different hardware is shown in the `readme.md` of each example. The following
  526. table summarizes the performance ranges, where `+` means speed-up and `-`
  527. @@ -70,70 +57,50 @@ slowdown:
  528. While SPMD is not the intended use case for `packed_simd`, it is possible to
  529. combine the library with [`rayon`][rayon] to poorly emulate [ISPC]'s SPMD programming
  530. model in Rust. Writing performant code is not as straightforward as with
  531. [ISPC], but with some care (e.g. see the [Performance Guide][perf_guide]) one
  532. can easily match and often out-perform [ISPC]'s "default performance".
  533. ## Platform support
  534. -The following table describes the supported platforms: `build` shows whether the
  535. -library compiles without issues for a given target, while `run` shows whether
  536. -the full testsuite passes on the target.
  537. +The following table describes the supported platforms: `build` shows whether
  538. +the library compiles without issues for a given target, while `run` shows
  539. +whether the test suite passes for a given target.
  540. -| Linux targets: | build | run |
  541. -|-----------------------------------|-----------|---------|
  542. -| `i586-unknown-linux-gnu` | ✓ | ✓ |
  543. -| `i686-unknown-linux-gnu` | ✓ | ✓ |
  544. -| `x86_64-unknown-linux-gnu` | ✓ | ✓ |
  545. -| `arm-unknown-linux-gnueabi` | ✗ | ✗ |
  546. -| `arm-unknown-linux-gnueabihf` | ✓ | ✓ |
  547. -| `armv7-unknown-linux-gnueabi` | ✓ | ✓ |
  548. -| `aarch64-unknown-linux-gnu` | ✓ | ✓ |
  549. -| `mips-unknown-linux-gnu` | ✓ | ✓ |
  550. -| `mipsel-unknown-linux-musl` | ✓ | ✓ |
  551. -| `mips64-unknown-linux-gnuabi64` | ✓ | ✓ |
  552. -| `mips64el-unknown-linux-gnuabi64` | ✓ | ✓ |
  553. -| `powerpc-unknown-linux-gnu` | ✗ | ✗ |
  554. -| `powerpc64-unknown-linux-gnu` | ✗ | ✗ |
  555. -| `powerpc64le-unknown-linux-gnu` | ✗ | ✗ |
  556. -| `s390x-unknown-linux-gnu` | ✓ | ✓* |
  557. -| `sparc64-unknown-linux-gnu` | ✓ | ✓* |
  558. -| `thumbv7neon-unknown-linux-gnueabihf` | ✓ | ✓ |
  559. -| **MacOSX targets:** | **build** | **run** |
  560. -| `x86_64-apple-darwin` | ✓ | ✓ |
  561. -| `i686-apple-darwin` | ✓ | ✓ |
  562. -| **Windows targets:** | **build** | **run** |
  563. -| `x86_64-pc-windows-msvc` | ✓ | ✓ |
  564. -| `i686-pc-windows-msvc` | ✓ | ✓ |
  565. -| `x86_64-pc-windows-gnu` | ✗ | ✗ |
  566. -| `i686-pc-windows-gnu` | ✗ | ✗ |
  567. -| **WebAssembly targets:** | **build** | **run** |
  568. -| `wasm32-unknown-unknown` | ✓ | ✓ |
  569. -| **Android targets:** | **build** | **run** |
  570. -| `x86_64-linux-android` | ✓ | ✓ |
  571. -| `arm-linux-androideabi` | ✓ | ✓ |
  572. -| `aarch64-linux-android` | ✓ | ✗ |
  573. -| `thumbv7neon-linux-androideabi` | ✓ | ✓ |
  574. -| **iOS targets:** | **build** | **run** |
  575. -| `i386-apple-ios` | ✓ | ✗ |
  576. -| `x86_64-apple-ios` | ✓ | ✗ |
  577. -| `armv7-apple-ios` | ✓ | ✗** |
  578. -| `aarch64-apple-ios` | ✓ | ✗** |
  579. -| **xBSD targets:** | **build** | **run** |
  580. -| `i686-unknown-freebsd` | ✗ | ✗** |
  581. -| `x86_64-unknown-freebsd` | ✗ | ✗** |
  582. -| `x86_64-unknown-netbsd` | ✗ | ✗** |
  583. -| **Solaris targets:** | **build** | **run** |
  584. -| `x86_64-sun-solaris` | ✗ | ✗** |
  585. +| **Linux** | **build** | **run** |
  586. +|---------------------------------------|-----------|---------|
  587. +| `i586-unknown-linux-gnu` | ✓ | ✗ |
  588. +| `i686-unknown-linux-gnu` | ✓ | ✗ |
  589. +| `x86_64-unknown-linux-gnu` | ✓ | ✓ |
  590. +| `arm-unknown-linux-gnueabi` | ✗ | ✗ |
  591. +| `arm-unknown-linux-gnueabihf` | ✓ | ✓ |
  592. +| `armv7-unknown-linux-gnueabi` | ✓ | ✓ |
  593. +| `aarch64-unknown-linux-gnu` | ✓ | ✓ |
  594. +| `mips-unknown-linux-gnu` | ✓ | ✗ |
  595. +| `mipsel-unknown-linux-musl` | ✓ | ✗ |
  596. +| `mips64-unknown-linux-gnuabi64` | ✓ | ✗ |
  597. +| `mips64el-unknown-linux-gnuabi64` | ✓ | ✗ |
  598. +| `powerpc-unknown-linux-gnu` | ✗ | ✗ |
  599. +| `powerpc64-unknown-linux-gnu` | ✗ | ✗ |
  600. +| `powerpc64le-unknown-linux-gnu` | ✓ | ✓ |
  601. +| `s390x-unknown-linux-gnu` | ✗ | ✗ |
  602. +| `sparc64-unknown-linux-gnu` | ✓ | ✗ |
  603. +| `thumbv7neon-unknown-linux-gnueabihf` | ✓ | ✓ |
  604. +| **MacOSX** | **build** | **run** |
  605. +| `x86_64-apple-darwin` | ✓ | ✓ |
  606. +| **Android** | **build** | **run** |
  607. +| `x86_64-linux-android` | ✓ | ✓ |
  608. +| `arm-linux-androideabi` | ✓ | ✓ |
  609. +| `aarch64-linux-android` | ✓ | ✓ |
  610. +| `thumbv7neon-linux-androideabi` | ✗ | ✗ |
  611. +| **iOS** | **build** | **run** |
  612. +| `x86_64-apple-ios` | ✓ | ✗ |
  613. +| `aarch64-apple-ios` | ✓ | ✗ |
  614. -[*] most of the test suite passes correctly on these platform but
  615. -there are correctness bugs open in the issue tracker.
  616. -
  617. -[**] it is currently not easily possible to run these platforms on CI.
  618. ## Machine code verification
  619. The
  620. [`verify/`](https://github.com/rust-lang-nursery/packed_simd/tree/master/verify)
  621. crate tests disassembles the portable packed vector APIs at run-time and
  622. compares the generated machine code against the desired one to make sure that
  623. this crate remains efficient.
  624. @@ -157,18 +124,18 @@ Please see the [contributing instruction
  625. Contributions in any form (issues, pull requests, etc.) to this project
  626. must adhere to Rust's [Code of Conduct].
  627. Unless you explicitly state otherwise, any contribution intentionally submitted
  628. for inclusion in `packed_simd` by you, as defined in the Apache-2.0 license, shall be
  629. dual licensed as above, without any additional terms or conditions.
  630. -[travis]: https://travis-ci.org/rust-lang-nursery/packed_simd
  631. -[Travis-CI Status]: https://travis-ci.org/rust-lang-nursery/packed_simd.svg?branch=master
  632. +[travis]: https://travis-ci.com/rust-lang-nursery/packed_simd
  633. +[Travis-CI Status]: https://travis-ci.com/rust-lang-nursery/packed_simd.svg?branch=master
  634. [appveyor]: https://ci.appveyor.com/project/gnzlbg/packed-simd
  635. [Appveyor Status]: https://ci.appveyor.com/api/projects/status/hd7v9dvr442hgdix?svg=true
  636. [Latest Version]: https://img.shields.io/crates/v/packed_simd.svg
  637. [crates.io]: https://crates.io/crates/packed_simd
  638. [docs]: https://docs.rs/packed_simd/badge.svg
  639. [docs.rs]: https://docs.rs/packed_simd/
  640. [master_docs]: https://rust-lang-nursery.github.io/packed_simd/packed_simd/
  641. [perf_guide]: https://rust-lang-nursery.github.io/packed_simd/perf-guide/
  642. diff --git a/third_party/rust/packed_simd/build.rs b/third_party/rust/packed_simd/build.rs
  643. --- a/third_party/rust/packed_simd/build.rs
  644. +++ b/third_party/rust/packed_simd/build.rs
  645. @@ -1,8 +1,8 @@
  646. fn main() {
  647. - println!("cargo:rustc-env=RUSTC_BOOTSTRAP=1");
  648. + println!("cargo:rustc-env=RUSTC_BOOTSTRAP=1");
  649. let target = std::env::var("TARGET")
  650. .expect("TARGET environment variable not defined");
  651. if target.contains("neon") {
  652. println!("cargo:rustc-cfg=libcore_neon");
  653. }
  654. }
  655. diff --git a/third_party/rust/packed_simd/ci/all.sh b/third_party/rust/packed_simd/ci/all.sh
  656. --- a/third_party/rust/packed_simd/ci/all.sh
  657. +++ b/third_party/rust/packed_simd/ci/all.sh
  658. @@ -16,17 +16,17 @@ cargo_check_fmt() {
  659. cargo fmt --all -- --check
  660. }
  661. cargo_fmt() {
  662. cargo fmt --all
  663. }
  664. cargo_clippy() {
  665. - cargo clippy --all -- -D clippy::pedantic
  666. + cargo clippy --all -- -D clippy::perf
  667. }
  668. CMD="-1"
  669. case $op in
  670. clean*)
  671. CMD=cargo_clean
  672. ;;
  673. diff --git a/third_party/rust/packed_simd/ci/docker/aarch64-unknown-linux-gnu/Dockerfile b/third_party/rust/packed_simd/ci/docker/aarch64-unknown-linux-gnu/Dockerfile
  674. --- a/third_party/rust/packed_simd/ci/docker/aarch64-unknown-linux-gnu/Dockerfile
  675. +++ b/third_party/rust/packed_simd/ci/docker/aarch64-unknown-linux-gnu/Dockerfile
  676. @@ -1,9 +1,9 @@
  677. -FROM ubuntu:17.10
  678. +FROM ubuntu:18.04
  679. RUN apt-get update && apt-get install -y --no-install-recommends \
  680. gcc \
  681. ca-certificates \
  682. libc6-dev \
  683. gcc-aarch64-linux-gnu \
  684. libc6-dev-arm64-cross \
  685. qemu-user \
  686. make \
  687. diff --git a/third_party/rust/packed_simd/ci/docker/arm-unknown-linux-gnueabi/Dockerfile b/third_party/rust/packed_simd/ci/docker/arm-unknown-linux-gnueabi/Dockerfile
  688. --- a/third_party/rust/packed_simd/ci/docker/arm-unknown-linux-gnueabi/Dockerfile
  689. +++ b/third_party/rust/packed_simd/ci/docker/arm-unknown-linux-gnueabi/Dockerfile
  690. @@ -1,9 +1,9 @@
  691. -FROM ubuntu:17.10
  692. +FROM ubuntu:18.04
  693. RUN apt-get update && apt-get install -y --no-install-recommends \
  694. gcc \
  695. ca-certificates \
  696. libc6-dev \
  697. libc6-armel-cross \
  698. libc6-dev-armel-cross \
  699. binutils-arm-linux-gnueabi \
  700. gcc-arm-linux-gnueabi \
  701. diff --git a/third_party/rust/packed_simd/ci/docker/arm-unknown-linux-gnueabihf/Dockerfile b/third_party/rust/packed_simd/ci/docker/arm-unknown-linux-gnueabihf/Dockerfile
  702. --- a/third_party/rust/packed_simd/ci/docker/arm-unknown-linux-gnueabihf/Dockerfile
  703. +++ b/third_party/rust/packed_simd/ci/docker/arm-unknown-linux-gnueabihf/Dockerfile
  704. @@ -1,9 +1,9 @@
  705. -FROM ubuntu:17.10
  706. +FROM ubuntu:18.04
  707. RUN apt-get update && apt-get install -y --no-install-recommends \
  708. gcc \
  709. ca-certificates \
  710. libc6-dev \
  711. gcc-arm-linux-gnueabihf \
  712. libc6-dev-armhf-cross \
  713. qemu-user \
  714. make \
  715. diff --git a/third_party/rust/packed_simd/ci/docker/armv7-unknown-linux-gnueabihf/Dockerfile b/third_party/rust/packed_simd/ci/docker/armv7-unknown-linux-gnueabihf/Dockerfile
  716. --- a/third_party/rust/packed_simd/ci/docker/armv7-unknown-linux-gnueabihf/Dockerfile
  717. +++ b/third_party/rust/packed_simd/ci/docker/armv7-unknown-linux-gnueabihf/Dockerfile
  718. @@ -1,9 +1,9 @@
  719. -FROM ubuntu:17.10
  720. +FROM ubuntu:18.04
  721. RUN apt-get update && apt-get install -y --no-install-recommends \
  722. gcc \
  723. ca-certificates \
  724. libc6-dev \
  725. gcc-arm-linux-gnueabihf \
  726. libc6-dev-armhf-cross \
  727. qemu-user \
  728. make \
  729. diff --git a/third_party/rust/packed_simd/ci/docker/i586-unknown-linux-gnu/Dockerfile b/third_party/rust/packed_simd/ci/docker/i586-unknown-linux-gnu/Dockerfile
  730. --- a/third_party/rust/packed_simd/ci/docker/i586-unknown-linux-gnu/Dockerfile
  731. +++ b/third_party/rust/packed_simd/ci/docker/i586-unknown-linux-gnu/Dockerfile
  732. @@ -1,7 +1,7 @@
  733. -FROM ubuntu:17.10
  734. +FROM ubuntu:18.04
  735. RUN apt-get update && apt-get install -y --no-install-recommends \
  736. gcc-multilib \
  737. libc6-dev \
  738. file \
  739. make \
  740. ca-certificates
  741. diff --git a/third_party/rust/packed_simd/ci/docker/i686-unknown-linux-gnu/Dockerfile b/third_party/rust/packed_simd/ci/docker/i686-unknown-linux-gnu/Dockerfile
  742. --- a/third_party/rust/packed_simd/ci/docker/i686-unknown-linux-gnu/Dockerfile
  743. +++ b/third_party/rust/packed_simd/ci/docker/i686-unknown-linux-gnu/Dockerfile
  744. @@ -1,7 +1,7 @@
  745. -FROM ubuntu:17.10
  746. +FROM ubuntu:18.04
  747. RUN apt-get update && apt-get install -y --no-install-recommends \
  748. gcc-multilib \
  749. libc6-dev \
  750. file \
  751. make \
  752. ca-certificates
  753. diff --git a/third_party/rust/packed_simd/ci/docker/mips-unknown-linux-gnu/Dockerfile b/third_party/rust/packed_simd/ci/docker/mips-unknown-linux-gnu/Dockerfile
  754. --- a/third_party/rust/packed_simd/ci/docker/mips-unknown-linux-gnu/Dockerfile
  755. +++ b/third_party/rust/packed_simd/ci/docker/mips-unknown-linux-gnu/Dockerfile
  756. @@ -1,9 +1,9 @@
  757. -FROM ubuntu:17.10
  758. +FROM ubuntu:18.04
  759. RUN apt-get update && apt-get install -y --no-install-recommends \
  760. gcc libc6-dev qemu-user ca-certificates \
  761. gcc-mips-linux-gnu libc6-dev-mips-cross \
  762. qemu-system-mips \
  763. qemu-user \
  764. make \
  765. file
  766. diff --git a/third_party/rust/packed_simd/ci/docker/mips64-unknown-linux-gnuabi64/Dockerfile b/third_party/rust/packed_simd/ci/docker/mips64-unknown-linux-gnuabi64/Dockerfile
  767. --- a/third_party/rust/packed_simd/ci/docker/mips64-unknown-linux-gnuabi64/Dockerfile
  768. +++ b/third_party/rust/packed_simd/ci/docker/mips64-unknown-linux-gnuabi64/Dockerfile
  769. @@ -1,9 +1,9 @@
  770. -FROM ubuntu:17.10
  771. +FROM ubuntu:18.04
  772. RUN apt-get update && apt-get install -y --no-install-recommends \
  773. gcc libc6-dev qemu-user ca-certificates \
  774. gcc-mips64-linux-gnuabi64 libc6-dev-mips64-cross \
  775. qemu-system-mips64 qemu-user
  776. ENV CARGO_TARGET_MIPS64_UNKNOWN_LINUX_GNUABI64_LINKER=mips64-linux-gnuabi64-gcc \
  777. CARGO_TARGET_MIPS64_UNKNOWN_LINUX_GNUABI64_RUNNER="qemu-mips64 -L /usr/mips64-linux-gnuabi64" \
  778. diff --git a/third_party/rust/packed_simd/ci/docker/mips64el-unknown-linux-gnuabi64/Dockerfile b/third_party/rust/packed_simd/ci/docker/mips64el-unknown-linux-gnuabi64/Dockerfile
  779. --- a/third_party/rust/packed_simd/ci/docker/mips64el-unknown-linux-gnuabi64/Dockerfile
  780. +++ b/third_party/rust/packed_simd/ci/docker/mips64el-unknown-linux-gnuabi64/Dockerfile
  781. @@ -1,9 +1,9 @@
  782. -FROM ubuntu:17.10
  783. +FROM ubuntu:18.04
  784. RUN apt-get update && apt-get install -y --no-install-recommends \
  785. gcc libc6-dev qemu-user ca-certificates \
  786. gcc-mips64el-linux-gnuabi64 libc6-dev-mips64el-cross \
  787. qemu-system-mips64el
  788. ENV CARGO_TARGET_MIPS64EL_UNKNOWN_LINUX_GNUABI64_LINKER=mips64el-linux-gnuabi64-gcc \
  789. CARGO_TARGET_MIPS64EL_UNKNOWN_LINUX_GNUABI64_RUNNER="qemu-mips64el -L /usr/mips64el-linux-gnuabi64" \
  790. diff --git a/third_party/rust/packed_simd/ci/docker/mipsel-unknown-linux-musl/Dockerfile b/third_party/rust/packed_simd/ci/docker/mipsel-unknown-linux-musl/Dockerfile
  791. --- a/third_party/rust/packed_simd/ci/docker/mipsel-unknown-linux-musl/Dockerfile
  792. +++ b/third_party/rust/packed_simd/ci/docker/mipsel-unknown-linux-musl/Dockerfile
  793. @@ -11,15 +11,15 @@ RUN apt-get update && \
  794. bzip2 \
  795. curl \
  796. file
  797. RUN mkdir /toolchain
  798. # Note that this originally came from:
  799. # https://downloads.openwrt.org/snapshots/trunk/malta/generic/OpenWrt-Toolchain-malta-le_gcc-5.3.0_musl-1.1.15.Linux-x86_64.tar.bz2
  800. -RUN curl -L https://s3-us-west-1.amazonaws.com/rust-lang-ci2/libc/OpenWrt-Toolchain-malta-le_gcc-5.3.0_musl-1.1.15.Linux-x86_64.tar.bz2 | \
  801. +RUN curl -L https://ci-mirrors.rust-lang.org/libc/OpenWrt-Toolchain-malta-le_gcc-5.3.0_musl-1.1.15.Linux-x86_64.tar.bz2 | \
  802. tar xjf - -C /toolchain --strip-components=2
  803. ENV PATH=$PATH:/rust/bin:/toolchain/bin \
  804. CC_mipsel_unknown_linux_musl=mipsel-openwrt-linux-gcc \
  805. CARGO_TARGET_MIPSEL_UNKNOWN_LINUX_MUSL_LINKER=mipsel-openwrt-linux-gcc \
  806. - CARGO_TARGET_MIPSEL_UNKNOWN_LINUX_MUSL_RUNNER="qemu-mipsel -L /toolchain"
  807. \ No newline at end of file
  808. + CARGO_TARGET_MIPSEL_UNKNOWN_LINUX_MUSL_RUNNER="qemu-mipsel -L /toolchain"
  809. diff --git a/third_party/rust/packed_simd/ci/docker/powerpc-unknown-linux-gnu/Dockerfile b/third_party/rust/packed_simd/ci/docker/powerpc-unknown-linux-gnu/Dockerfile
  810. --- a/third_party/rust/packed_simd/ci/docker/powerpc-unknown-linux-gnu/Dockerfile
  811. +++ b/third_party/rust/packed_simd/ci/docker/powerpc-unknown-linux-gnu/Dockerfile
  812. @@ -1,12 +1,13 @@
  813. -FROM ubuntu:17.10
  814. +FROM ubuntu:18.04
  815. RUN apt-get update && apt-get install -y --no-install-recommends \
  816. gcc libc6-dev qemu-user ca-certificates \
  817. gcc-powerpc-linux-gnu libc6-dev-powerpc-cross \
  818. qemu-system-ppc \
  819. make \
  820. file
  821. ENV CARGO_TARGET_POWERPC_UNKNOWN_LINUX_GNU_LINKER=powerpc-linux-gnu-gcc \
  822. CARGO_TARGET_POWERPC_UNKNOWN_LINUX_GNU_RUNNER="qemu-ppc -cpu Vger -L /usr/powerpc-linux-gnu" \
  823. + CC=powerpc-linux-gnu-gcc \
  824. OBJDUMP=powerpc-linux-gnu-objdump
  825. diff --git a/third_party/rust/packed_simd/ci/docker/powerpc64-unknown-linux-gnu/Dockerfile b/third_party/rust/packed_simd/ci/docker/powerpc64-unknown-linux-gnu/Dockerfile
  826. --- a/third_party/rust/packed_simd/ci/docker/powerpc64-unknown-linux-gnu/Dockerfile
  827. +++ b/third_party/rust/packed_simd/ci/docker/powerpc64-unknown-linux-gnu/Dockerfile
  828. @@ -1,9 +1,9 @@
  829. -FROM ubuntu:17.10
  830. +FROM ubuntu:18.04
  831. RUN apt-get update && apt-get install -y --no-install-recommends \
  832. gcc \
  833. ca-certificates \
  834. libc6-dev \
  835. gcc-powerpc64-linux-gnu \
  836. libc6-dev-ppc64-cross \
  837. qemu-user \
  838. diff --git a/third_party/rust/packed_simd/ci/docker/powerpc64le-unknown-linux-gnu/Dockerfile b/third_party/rust/packed_simd/ci/docker/powerpc64le-unknown-linux-gnu/Dockerfile
  839. --- a/third_party/rust/packed_simd/ci/docker/powerpc64le-unknown-linux-gnu/Dockerfile
  840. +++ b/third_party/rust/packed_simd/ci/docker/powerpc64le-unknown-linux-gnu/Dockerfile
  841. @@ -1,9 +1,9 @@
  842. -FROM ubuntu:17.10
  843. +FROM ubuntu:18.04
  844. RUN apt-get update && apt-get install -y --no-install-recommends \
  845. gcc libc6-dev qemu-user ca-certificates \
  846. gcc-powerpc64le-linux-gnu libc6-dev-ppc64el-cross \
  847. qemu-system-ppc file make
  848. ENV CARGO_TARGET_POWERPC64LE_UNKNOWN_LINUX_GNU_LINKER=powerpc64le-linux-gnu-gcc \
  849. CARGO_TARGET_POWERPC64LE_UNKNOWN_LINUX_GNU_RUNNER="qemu-ppc64le -L /usr/powerpc64le-linux-gnu" \
  850. diff --git a/third_party/rust/packed_simd/ci/docker/thumbv7neon-unknown-linux-gnueabihf/Dockerfile b/third_party/rust/packed_simd/ci/docker/thumbv7neon-unknown-linux-gnueabihf/Dockerfile
  851. --- a/third_party/rust/packed_simd/ci/docker/thumbv7neon-unknown-linux-gnueabihf/Dockerfile
  852. +++ b/third_party/rust/packed_simd/ci/docker/thumbv7neon-unknown-linux-gnueabihf/Dockerfile
  853. @@ -1,9 +1,9 @@
  854. -FROM ubuntu:17.10
  855. +FROM ubuntu:18.04
  856. RUN apt-get update && apt-get install -y --no-install-recommends \
  857. gcc \
  858. ca-certificates \
  859. libc6-dev \
  860. gcc-arm-linux-gnueabihf \
  861. libc6-dev-armhf-cross \
  862. qemu-user \
  863. make \
  864. diff --git a/third_party/rust/packed_simd/ci/docker/x86_64-unknown-linux-gnu/Dockerfile b/third_party/rust/packed_simd/ci/docker/x86_64-unknown-linux-gnu/Dockerfile
  865. --- a/third_party/rust/packed_simd/ci/docker/x86_64-unknown-linux-gnu/Dockerfile
  866. +++ b/third_party/rust/packed_simd/ci/docker/x86_64-unknown-linux-gnu/Dockerfile
  867. @@ -1,9 +1,9 @@
  868. -FROM ubuntu:17.10
  869. +FROM ubuntu:18.04
  870. RUN apt-get update && apt-get install -y --no-install-recommends \
  871. gcc \
  872. libc6-dev \
  873. file \
  874. make \
  875. ca-certificates \
  876. cmake \
  877. libclang-dev \
  878. diff --git a/third_party/rust/packed_simd/ci/dox.sh b/third_party/rust/packed_simd/ci/dox.sh
  879. --- a/third_party/rust/packed_simd/ci/dox.sh
  880. +++ b/third_party/rust/packed_simd/ci/dox.sh
  881. @@ -13,12 +13,15 @@ cargo doc --features=into_bits
  882. # mdbook build perf-guide -d target/doc/perf-guide
  883. cd perf-guide
  884. mdbook build
  885. cd -
  886. cp -r perf-guide/book target/doc/perf-guide
  887. # If we're on travis, not a PR, and on the right branch, publish!
  888. if [ "$TRAVIS_PULL_REQUEST" = "false" ] && [ "$TRAVIS_BRANCH" = "master" ]; then
  889. - pip install ghp_import --install-option="--prefix=$HOME/.local"
  890. - $HOME/.local/bin/ghp-import -n target/doc
  891. + python3 -vV
  892. + pip -vV
  893. + python3.9 -vV
  894. + pip install ghp_import --user
  895. + ghp-import -n target/doc
  896. git push -qf https://${GH_PAGES}@github.com/${TRAVIS_REPO_SLUG}.git gh-pages
  897. fi
  898. diff --git a/third_party/rust/packed_simd/ci/run.sh b/third_party/rust/packed_simd/ci/run.sh
  899. --- a/third_party/rust/packed_simd/ci/run.sh
  900. +++ b/third_party/rust/packed_simd/ci/run.sh
  901. @@ -73,19 +73,21 @@ cargo_test_impl() {
  902. # Debug run:
  903. if [[ "${TARGET}" != "wasm32-unknown-unknown" ]]; then
  904. # Run wasm32-unknown-unknown in release mode only
  905. cargo_test_impl
  906. fi
  907. if [[ "${TARGET}" == "x86_64-unknown-linux-gnu" ]] || [[ "${TARGET}" == "x86_64-pc-windows-msvc" ]]; then
  908. # use sleef on linux and windows x86_64 builds
  909. - cargo_test_impl --release --features=into_bits,core_arch,sleef-sys
  910. + # FIXME: Use `core_arch,sleef-sys` features once they works again
  911. + cargo_test_impl --release --features=into_bits
  912. else
  913. - cargo_test_impl --release --features=into_bits,core_arch
  914. + # FIXME: Use `core_arch` feature once it works again
  915. + cargo_test_impl --release --features=into_bits
  916. fi
  917. # Verify code generation
  918. if [[ "${NOVERIFY}" != "1" ]]; then
  919. cp -r verify/verify target/verify
  920. export STDSIMD_ASSERT_INSTR_LIMIT=30
  921. if [[ "${TARGET}" == "i586-unknown-linux-gnu" ]]; then
  922. export STDSIMD_ASSERT_INSTR_LIMIT=50
  923. diff --git a/third_party/rust/packed_simd/ci/setup_benchmarks.sh b/third_party/rust/packed_simd/ci/setup_benchmarks.sh
  924. --- a/third_party/rust/packed_simd/ci/setup_benchmarks.sh
  925. +++ b/third_party/rust/packed_simd/ci/setup_benchmarks.sh
  926. @@ -1,10 +1,7 @@
  927. #!/usr/bin/env bash
  928. set -ex
  929. # Get latest ISPC binary for the target and put it in the path
  930. git clone https://github.com/gnzlbg/ispc-binaries
  931. cp ispc-binaries/ispc-${TARGET} ispc
  932. -
  933. -# Rust-bindgen requires RUSTFMT
  934. -rustup component add rustfmt-preview
  935. diff --git a/third_party/rust/packed_simd/src/api.rs b/third_party/rust/packed_simd/src/api.rs
  936. --- a/third_party/rust/packed_simd/src/api.rs
  937. +++ b/third_party/rust/packed_simd/src/api.rs
  938. @@ -1,10 +1,12 @@
  939. //! Implements the Simd<[T; N]> APIs
  940. +#[macro_use]
  941. +mod bitmask;
  942. crate mod cast;
  943. #[macro_use]
  944. mod cmp;
  945. #[macro_use]
  946. mod default;
  947. #[macro_use]
  948. mod fmt;
  949. #[macro_use]
  950. @@ -34,17 +36,17 @@ mod swap_bytes;
  951. #[macro_use]
  952. mod bit_manip;
  953. #[cfg(feature = "into_bits")]
  954. crate mod into_bits;
  955. macro_rules! impl_i {
  956. ([$elem_ty:ident; $elem_n:expr]: $tuple_id:ident, $mask_ty:ident
  957. - | $ielem_ty:ident | $test_tt:tt | $($elem_ids:ident),*
  958. + | $ielem_ty:ident, $ibitmask_ty:ident | $test_tt:tt | $($elem_ids:ident),*
  959. | From: $($from_vec_ty:ident),* | $(#[$doc:meta])*) => {
  960. impl_minimal_iuf!([$elem_ty; $elem_n]: $tuple_id | $ielem_ty | $test_tt
  961. | $($elem_ids),* | $(#[$doc])*);
  962. impl_ops_vector_arithmetic!([$elem_ty; $elem_n]: $tuple_id | $test_tt);
  963. impl_ops_scalar_arithmetic!([$elem_ty; $elem_n]: $tuple_id | $test_tt);
  964. impl_ops_vector_bitwise!(
  965. [$elem_ty; $elem_n]: $tuple_id | $test_tt | (!(0 as $elem_ty), 0)
  966. );
  967. @@ -88,26 +90,27 @@ macro_rules! impl_i {
  968. [$elem_ty; $elem_n]: $tuple_id | $test_tt | (0, 1)
  969. );
  970. impl_cmp_eq!([$elem_ty; $elem_n]: $tuple_id | $test_tt | (0, 1));
  971. impl_cmp_vertical!(
  972. [$elem_ty; $elem_n]: $tuple_id, $mask_ty, false, (1, 0) | $test_tt
  973. );
  974. impl_cmp_partial_ord!([$elem_ty; $elem_n]: $tuple_id | $test_tt);
  975. impl_cmp_ord!([$elem_ty; $elem_n]: $tuple_id | $test_tt | (0, 1));
  976. + impl_bitmask!($tuple_id | $ibitmask_ty | (-1, 0) | $test_tt);
  977. test_select!($elem_ty, $mask_ty, $tuple_id, (1, 2) | $test_tt);
  978. test_cmp_partial_ord_int!([$elem_ty; $elem_n]: $tuple_id | $test_tt);
  979. test_shuffle1_dyn!([$elem_ty; $elem_n]: $tuple_id | $test_tt);
  980. }
  981. }
  982. macro_rules! impl_u {
  983. ([$elem_ty:ident; $elem_n:expr]: $tuple_id:ident, $mask_ty:ident
  984. - | $ielem_ty:ident | $test_tt:tt | $($elem_ids:ident),*
  985. + | $ielem_ty:ident, $ibitmask_ty:ident | $test_tt:tt | $($elem_ids:ident),*
  986. | From: $($from_vec_ty:ident),* | $(#[$doc:meta])*) => {
  987. impl_minimal_iuf!([$elem_ty; $elem_n]: $tuple_id | $ielem_ty | $test_tt
  988. | $($elem_ids),* | $(#[$doc])*);
  989. impl_ops_vector_arithmetic!([$elem_ty; $elem_n]: $tuple_id | $test_tt);
  990. impl_ops_scalar_arithmetic!([$elem_ty; $elem_n]: $tuple_id | $test_tt);
  991. impl_ops_vector_bitwise!(
  992. [$elem_ty; $elem_n]: $tuple_id | $test_tt | (!(0 as $elem_ty), 0)
  993. );
  994. @@ -150,16 +153,18 @@ macro_rules! impl_u {
  995. [$elem_ty; $elem_n]: $tuple_id | $test_tt | (1, 0)
  996. );
  997. impl_cmp_eq!([$elem_ty; $elem_n]: $tuple_id | $test_tt | (0, 1));
  998. impl_cmp_vertical!(
  999. [$elem_ty; $elem_n]: $tuple_id, $mask_ty, false, (1, 0) | $test_tt
  1000. );
  1001. impl_cmp_partial_ord!([$elem_ty; $elem_n]: $tuple_id | $test_tt);
  1002. impl_cmp_ord!([$elem_ty; $elem_n]: $tuple_id | $test_tt | (0, 1));
  1003. + impl_bitmask!($tuple_id | $ibitmask_ty | ($ielem_ty::max_value(), 0) |
  1004. + $test_tt);
  1005. test_select!($elem_ty, $mask_ty, $tuple_id, (1, 2) | $test_tt);
  1006. test_cmp_partial_ord_int!([$elem_ty; $elem_n]: $tuple_id | $test_tt);
  1007. test_shuffle1_dyn!([$elem_ty; $elem_n]: $tuple_id | $test_tt);
  1008. }
  1009. }
  1010. macro_rules! impl_f {
  1011. @@ -217,17 +222,18 @@ macro_rules! impl_f {
  1012. test_reduction_float_min_max!(
  1013. [$elem_ty; $elem_n]: $tuple_id | $test_tt
  1014. );
  1015. test_shuffle1_dyn!([$elem_ty; $elem_n]: $tuple_id | $test_tt);
  1016. }
  1017. }
  1018. macro_rules! impl_m {
  1019. - ([$elem_ty:ident; $elem_n:expr]: $tuple_id:ident | $ielem_ty:ident
  1020. + ([$elem_ty:ident; $elem_n:expr]: $tuple_id:ident
  1021. + | $ielem_ty:ident, $ibitmask_ty:ident
  1022. | $test_tt:tt | $($elem_ids:ident),* | From: $($from_vec_ty:ident),*
  1023. | $(#[$doc:meta])*) => {
  1024. impl_minimal_mask!(
  1025. [$elem_ty; $elem_n]: $tuple_id | $ielem_ty | $test_tt
  1026. | $($elem_ids),* | $(#[$doc])*
  1027. );
  1028. impl_ops_vector_mask_bitwise!(
  1029. [$elem_ty; $elem_n]: $tuple_id | $test_tt | (true, false)
  1030. @@ -260,16 +266,17 @@ macro_rules! impl_m {
  1031. | $test_tt
  1032. );
  1033. impl_select!([$elem_ty; $elem_n]: $tuple_id | $test_tt);
  1034. impl_cmp_partial_ord!([$elem_ty; $elem_n]: $tuple_id | $test_tt);
  1035. impl_cmp_ord!(
  1036. [$elem_ty; $elem_n]: $tuple_id | $test_tt | (false, true)
  1037. );
  1038. impl_shuffle1_dyn!([$elem_ty; $elem_n]: $tuple_id | $test_tt);
  1039. + impl_bitmask!($tuple_id | $ibitmask_ty | (true, false) | $test_tt);
  1040. test_cmp_partial_ord_mask!([$elem_ty; $elem_n]: $tuple_id | $test_tt);
  1041. test_shuffle1_dyn_mask!([$elem_ty; $elem_n]: $tuple_id | $test_tt);
  1042. }
  1043. }
  1044. macro_rules! impl_const_p {
  1045. ([$elem_ty:ty; $elem_n:expr]: $tuple_id:ident, $mask_ty:ident,
  1046. diff --git a/third_party/rust/packed_simd/src/api/bit_manip.rs b/third_party/rust/packed_simd/src/api/bit_manip.rs
  1047. --- a/third_party/rust/packed_simd/src/api/bit_manip.rs
  1048. +++ b/third_party/rust/packed_simd/src/api/bit_manip.rs
  1049. @@ -32,16 +32,17 @@ macro_rules! impl_bit_manip {
  1050. }
  1051. }
  1052. test_if! {
  1053. $test_tt:
  1054. paste::item_with_macros! {
  1055. #[allow(overflowing_literals)]
  1056. pub mod [<$id _bit_manip>] {
  1057. + #![allow(const_item_mutation)]
  1058. use super::*;
  1059. const LANE_WIDTH: usize = mem::size_of::<$elem_ty>() * 8;
  1060. macro_rules! test_func {
  1061. ($x:expr, $func:ident) => {{
  1062. let mut actual = $x;
  1063. for i in 0..$id::lanes() {
  1064. diff --git a/third_party/rust/packed_simd/src/api/bitmask.rs b/third_party/rust/packed_simd/src/api/bitmask.rs
  1065. new file mode 100644
  1066. --- /dev/null
  1067. +++ b/third_party/rust/packed_simd/src/api/bitmask.rs
  1068. @@ -0,0 +1,82 @@
  1069. +//! Bitmask API
  1070. +
  1071. +macro_rules! impl_bitmask {
  1072. + ($id:ident | $ibitmask_ty:ident | ($set:expr, $clear:expr)
  1073. + | $test_tt:tt) => {
  1074. + impl $id {
  1075. + /// Creates a bitmask with the MSB of each vector lane.
  1076. + ///
  1077. + /// If the vector has less than 8 lanes, the bits that do not
  1078. + /// correspond to any vector lanes are cleared.
  1079. + #[inline]
  1080. + pub fn bitmask(self) -> $ibitmask_ty {
  1081. + unsafe { codegen::llvm::simd_bitmask(self.0) }
  1082. + }
  1083. + }
  1084. +
  1085. + test_if! {
  1086. + $test_tt:
  1087. + paste::item! {
  1088. + #[cfg(not(any(
  1089. + // FIXME: https://github.com/rust-lang-nursery/packed_simd/issues/210
  1090. + all(target_arch = "mips", target_endian = "big"),
  1091. + all(target_arch = "mips64", target_endian = "big"),
  1092. + target_arch = "sparc64",
  1093. + target_arch = "s390x",
  1094. + )))]
  1095. + pub mod [<$id _bitmask>] {
  1096. + use super::*;
  1097. + #[cfg_attr(not(target_arch = "wasm32"), test)]
  1098. + #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)]
  1099. + fn bitmask() {
  1100. + // clear all lanes
  1101. + let vec = $id::splat($clear as _);
  1102. + let bitmask: $ibitmask_ty = 0;
  1103. + assert_eq!(vec.bitmask(), bitmask);
  1104. +
  1105. + // set even lanes
  1106. + let mut vec = $id::splat($clear as _);
  1107. + for i in 0..$id::lanes() {
  1108. + if i % 2 == 0 {
  1109. + vec = vec.replace(i, $set as _);
  1110. + }
  1111. + }
  1112. + // create bitmask with even lanes set:
  1113. + let mut bitmask: $ibitmask_ty = 0;
  1114. + for i in 0..$id::lanes() {
  1115. + if i % 2 == 0 {
  1116. + bitmask |= 1 << i;
  1117. + }
  1118. + }
  1119. + assert_eq!(vec.bitmask(), bitmask);
  1120. +
  1121. +
  1122. + // set odd lanes
  1123. + let mut vec = $id::splat($clear as _);
  1124. + for i in 0..$id::lanes() {
  1125. + if i % 2 != 0 {
  1126. + vec = vec.replace(i, $set as _);
  1127. + }
  1128. + }
  1129. + // create bitmask with odd lanes set:
  1130. + let mut bitmask: $ibitmask_ty = 0;
  1131. + for i in 0..$id::lanes() {
  1132. + if i % 2 != 0 {
  1133. + bitmask |= 1 << i;
  1134. + }
  1135. + }
  1136. + assert_eq!(vec.bitmask(), bitmask);
  1137. +
  1138. + // set all lanes
  1139. + let vec = $id::splat($set as _);
  1140. + let mut bitmask: $ibitmask_ty = 0;
  1141. + for i in 0..$id::lanes() {
  1142. + bitmask |= 1 << i;
  1143. + }
  1144. + assert_eq!(vec.bitmask(), bitmask);
  1145. + }
  1146. + }
  1147. + }
  1148. + }
  1149. + };
  1150. +}
  1151. diff --git a/third_party/rust/packed_simd/src/api/cast/v128.rs b/third_party/rust/packed_simd/src/api/cast/v128.rs
  1152. --- a/third_party/rust/packed_simd/src/api/cast/v128.rs
  1153. +++ b/third_party/rust/packed_simd/src/api/cast/v128.rs
  1154. @@ -1,10 +1,10 @@
  1155. //! `FromCast` and `IntoCast` implementations for portable 128-bit wide vectors
  1156. -#![rustfmt::skip]
  1157. +#[rustfmt::skip]
  1158. use crate::*;
  1159. impl_from_cast!(
  1160. i8x16[test_v128]: u8x16, m8x16, i16x16, u16x16, m16x16, i32x16, u32x16, f32x16, m32x16
  1161. );
  1162. impl_from_cast!(
  1163. u8x16[test_v128]: i8x16, m8x16, i16x16, u16x16, m16x16, i32x16, u32x16, f32x16, m32x16
  1164. diff --git a/third_party/rust/packed_simd/src/api/cast/v16.rs b/third_party/rust/packed_simd/src/api/cast/v16.rs
  1165. --- a/third_party/rust/packed_simd/src/api/cast/v16.rs
  1166. +++ b/third_party/rust/packed_simd/src/api/cast/v16.rs
  1167. @@ -1,10 +1,10 @@
  1168. //! `FromCast` and `IntoCast` implementations for portable 16-bit wide vectors
  1169. -#![rustfmt::skip]
  1170. +#[rustfmt::skip]
  1171. use crate::*;
  1172. impl_from_cast!(
  1173. i8x2[test_v16]: u8x2, m8x2, i16x2, u16x2, m16x2, i32x2, u32x2, f32x2, m32x2,
  1174. i64x2, u64x2, f64x2, m64x2, i128x2, u128x2, m128x2, isizex2, usizex2, msizex2
  1175. );
  1176. impl_from_cast!(
  1177. diff --git a/third_party/rust/packed_simd/src/api/cast/v256.rs b/third_party/rust/packed_simd/src/api/cast/v256.rs
  1178. --- a/third_party/rust/packed_simd/src/api/cast/v256.rs
  1179. +++ b/third_party/rust/packed_simd/src/api/cast/v256.rs
  1180. @@ -1,10 +1,10 @@
  1181. //! `FromCast` and `IntoCast` implementations for portable 256-bit wide vectors
  1182. -#![rustfmt::skip]
  1183. +#[rustfmt::skip]
  1184. use crate::*;
  1185. impl_from_cast!(i8x32[test_v256]: u8x32, m8x32, i16x32, u16x32, m16x32);
  1186. impl_from_cast!(u8x32[test_v256]: i8x32, m8x32, i16x32, u16x32, m16x32);
  1187. impl_from_cast_mask!(m8x32[test_v256]: i8x32, u8x32, i16x32, u16x32, m16x32);
  1188. impl_from_cast!(
  1189. diff --git a/third_party/rust/packed_simd/src/api/cast/v32.rs b/third_party/rust/packed_simd/src/api/cast/v32.rs
  1190. --- a/third_party/rust/packed_simd/src/api/cast/v32.rs
  1191. +++ b/third_party/rust/packed_simd/src/api/cast/v32.rs
  1192. @@ -1,10 +1,10 @@
  1193. //! `FromCast` and `IntoCast` implementations for portable 32-bit wide vectors
  1194. -#![rustfmt::skip]
  1195. +#[rustfmt::skip]
  1196. use crate::*;
  1197. impl_from_cast!(
  1198. i8x4[test_v32]: u8x4, m8x4, i16x4, u16x4, m16x4, i32x4, u32x4, f32x4, m32x4,
  1199. i64x4, u64x4, f64x4, m64x4, i128x4, u128x4, m128x4, isizex4, usizex4, msizex4
  1200. );
  1201. impl_from_cast!(
  1202. diff --git a/third_party/rust/packed_simd/src/api/cast/v512.rs b/third_party/rust/packed_simd/src/api/cast/v512.rs
  1203. --- a/third_party/rust/packed_simd/src/api/cast/v512.rs
  1204. +++ b/third_party/rust/packed_simd/src/api/cast/v512.rs
  1205. @@ -1,10 +1,10 @@
  1206. //! `FromCast` and `IntoCast` implementations for portable 512-bit wide vectors
  1207. -#![rustfmt::skip]
  1208. +#[rustfmt::skip]
  1209. use crate::*;
  1210. impl_from_cast!(i8x64[test_v512]: u8x64, m8x64);
  1211. impl_from_cast!(u8x64[test_v512]: i8x64, m8x64);
  1212. impl_from_cast_mask!(m8x64[test_v512]: i8x64, u8x64);
  1213. impl_from_cast!(i16x32[test_v512]: i8x32, u8x32, m8x32, u16x32, m16x32);
  1214. diff --git a/third_party/rust/packed_simd/src/api/cast/v64.rs b/third_party/rust/packed_simd/src/api/cast/v64.rs
  1215. --- a/third_party/rust/packed_simd/src/api/cast/v64.rs
  1216. +++ b/third_party/rust/packed_simd/src/api/cast/v64.rs
  1217. @@ -1,10 +1,10 @@
  1218. //! `FromCast` and `IntoCast` implementations for portable 64-bit wide vectors
  1219. -#![rustfmt::skip]
  1220. +#[rustfmt::skip]
  1221. use crate::*;
  1222. impl_from_cast!(
  1223. i8x8[test_v64]: u8x8, m8x8, i16x8, u16x8, m16x8, i32x8, u32x8, f32x8, m32x8,
  1224. i64x8, u64x8, f64x8, m64x8, isizex8, usizex8, msizex8
  1225. );
  1226. impl_from_cast!(
  1227. diff --git a/third_party/rust/packed_simd/src/api/default.rs b/third_party/rust/packed_simd/src/api/default.rs
  1228. --- a/third_party/rust/packed_simd/src/api/default.rs
  1229. +++ b/third_party/rust/packed_simd/src/api/default.rs
  1230. @@ -7,16 +7,18 @@ macro_rules! impl_default {
  1231. fn default() -> Self {
  1232. Self::splat($elem_ty::default())
  1233. }
  1234. }
  1235. test_if!{
  1236. $test_tt:
  1237. paste::item! {
  1238. + // Comparisons use integer casts within mantissa^1 range.
  1239. + #[allow(clippy::float_cmp)]
  1240. pub mod [<$id _default>] {
  1241. use super::*;
  1242. #[cfg_attr(not(target_arch = "wasm32"), test)] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)]
  1243. fn default() {
  1244. let a = $id::default();
  1245. for i in 0..$id::lanes() {
  1246. assert_eq!(a.extract(i), $elem_ty::default());
  1247. }
  1248. diff --git a/third_party/rust/packed_simd/src/api/from/from_array.rs b/third_party/rust/packed_simd/src/api/from/from_array.rs
  1249. --- a/third_party/rust/packed_simd/src/api/from/from_array.rs
  1250. +++ b/third_party/rust/packed_simd/src/api/from/from_array.rs
  1251. @@ -51,16 +51,18 @@ macro_rules! impl_from_array {
  1252. unsafe { U { array: self }.vec }
  1253. }
  1254. }
  1255. */
  1256. test_if! {
  1257. $test_tt:
  1258. paste::item! {
  1259. + // Comparisons use integer casts within mantissa^1 range.
  1260. + #[allow(clippy::float_cmp)]
  1261. mod [<$id _from>] {
  1262. use super::*;
  1263. #[test]
  1264. fn array() {
  1265. let vec: $id = Default::default();
  1266. // FIXME: Workaround for arrays with more than 32
  1267. // elements.
  1268. diff --git a/third_party/rust/packed_simd/src/api/hash.rs b/third_party/rust/packed_simd/src/api/hash.rs
  1269. --- a/third_party/rust/packed_simd/src/api/hash.rs
  1270. +++ b/third_party/rust/packed_simd/src/api/hash.rs
  1271. @@ -31,16 +31,18 @@ macro_rules! impl_hash {
  1272. crate::mem::size_of::<A>(),
  1273. crate::mem::size_of::<$id>()
  1274. );
  1275. #[allow(deprecated)]
  1276. let mut a_hash = SipHasher13::new();
  1277. let mut v_hash = a_hash.clone();
  1278. a.hash(&mut a_hash);
  1279. + // Integer within mantissa^1 range.
  1280. + #[allow(clippy::float_cmp)]
  1281. let v = $id::splat(42 as $elem_ty);
  1282. v.hash(&mut v_hash);
  1283. assert_eq!(a_hash.finish(), v_hash.finish());
  1284. }
  1285. }
  1286. }
  1287. }
  1288. };
  1289. diff --git a/third_party/rust/packed_simd/src/api/into_bits/arch_specific.rs b/third_party/rust/packed_simd/src/api/into_bits/arch_specific.rs
  1290. --- a/third_party/rust/packed_simd/src/api/into_bits/arch_specific.rs
  1291. +++ b/third_party/rust/packed_simd/src/api/into_bits/arch_specific.rs
  1292. @@ -1,11 +1,11 @@
  1293. //! `FromBits` and `IntoBits` between portable vector types and the
  1294. //! architecture-specific vector types.
  1295. -#![rustfmt::skip]
  1296. +#[rustfmt::skip]
  1297. // FIXME: MIPS FromBits/IntoBits
  1298. #[allow(unused)]
  1299. use crate::*;
  1300. /// This macro implements FromBits for the portable and the architecture
  1301. /// specific vector types.
  1302. @@ -79,17 +79,16 @@ macro_rules! impl_arch {
  1303. }
  1304. ////////////////////////////////////////////////////////////////////////////////
  1305. // Implementations for the 64-bit wide vector types:
  1306. // FIXME: 64-bit single element types
  1307. // FIXME: arm/aarch float16x4_t missing
  1308. impl_arch!(
  1309. - [x86["x86"]: __m64], [x86_64["x86_64"]: __m64],
  1310. [arm["arm"]: int8x8_t, uint8x8_t, poly8x8_t, int16x4_t, uint16x4_t,
  1311. poly16x4_t, int32x2_t, uint32x2_t, float32x2_t, int64x1_t,
  1312. uint64x1_t],
  1313. [aarch64["aarch64"]: int8x8_t, uint8x8_t, poly8x8_t, int16x4_t, uint16x4_t,
  1314. poly16x4_t, int32x2_t, uint32x2_t, float32x2_t, int64x1_t, uint64x1_t,
  1315. float64x1_t] |
  1316. from: i8x8, u8x8, m8x8, i16x4, u16x4, m16x4, i32x2, u32x2, f32x2, m32x2 |
  1317. into: i8x8, u8x8, i16x4, u16x4, i32x2, u32x2, f32x2 |
  1318. diff --git a/third_party/rust/packed_simd/src/api/into_bits/v128.rs b/third_party/rust/packed_simd/src/api/into_bits/v128.rs
  1319. --- a/third_party/rust/packed_simd/src/api/into_bits/v128.rs
  1320. +++ b/third_party/rust/packed_simd/src/api/into_bits/v128.rs
  1321. @@ -1,10 +1,10 @@
  1322. //! `FromBits` and `IntoBits` implementations for portable 128-bit wide vectors
  1323. -#![rustfmt::skip]
  1324. +#[rustfmt::skip]
  1325. #[allow(unused)] // wasm_bindgen_test
  1326. use crate::*;
  1327. impl_from_bits!(i8x16[test_v128]: u8x16, m8x16, i16x8, u16x8, m16x8, i32x4, u32x4, f32x4, m32x4, i64x2, u64x2, f64x2, m64x2, i128x1, u128x1, m128x1);
  1328. impl_from_bits!(u8x16[test_v128]: i8x16, m8x16, i16x8, u16x8, m16x8, i32x4, u32x4, f32x4, m32x4, i64x2, u64x2, f64x2, m64x2, i128x1, u128x1, m128x1);
  1329. impl_from_bits!(m8x16[test_v128]: m16x8, m32x4, m64x2, m128x1);
  1330. diff --git a/third_party/rust/packed_simd/src/api/into_bits/v16.rs b/third_party/rust/packed_simd/src/api/into_bits/v16.rs
  1331. --- a/third_party/rust/packed_simd/src/api/into_bits/v16.rs
  1332. +++ b/third_party/rust/packed_simd/src/api/into_bits/v16.rs
  1333. @@ -1,9 +1,9 @@
  1334. //! `FromBits` and `IntoBits` implementations for portable 16-bit wide vectors
  1335. -#![rustfmt::skip]
  1336. +#[rustfmt::skip]
  1337. #[allow(unused)] // wasm_bindgen_test
  1338. use crate::*;
  1339. impl_from_bits!(i8x2[test_v16]: u8x2, m8x2);
  1340. impl_from_bits!(u8x2[test_v16]: i8x2, m8x2);
  1341. // note: m8x2 cannot be constructed from all i8x2 or u8x2 bit patterns
  1342. diff --git a/third_party/rust/packed_simd/src/api/into_bits/v256.rs b/third_party/rust/packed_simd/src/api/into_bits/v256.rs
  1343. --- a/third_party/rust/packed_simd/src/api/into_bits/v256.rs
  1344. +++ b/third_party/rust/packed_simd/src/api/into_bits/v256.rs
  1345. @@ -1,10 +1,10 @@
  1346. //! `FromBits` and `IntoBits` implementations for portable 256-bit wide vectors
  1347. -#![rustfmt::skip]
  1348. +#[rustfmt::skip]
  1349. #[allow(unused)] // wasm_bindgen_test
  1350. use crate::*;
  1351. impl_from_bits!(i8x32[test_v256]: u8x32, m8x32, i16x16, u16x16, m16x16, i32x8, u32x8, f32x8, m32x8, i64x4, u64x4, f64x4, m64x4, i128x2, u128x2, m128x2);
  1352. impl_from_bits!(u8x32[test_v256]: i8x32, m8x32, i16x16, u16x16, m16x16, i32x8, u32x8, f32x8, m32x8, i64x4, u64x4, f64x4, m64x4, i128x2, u128x2, m128x2);
  1353. impl_from_bits!(m8x32[test_v256]: m16x16, m32x8, m64x4, m128x2);
  1354. diff --git a/third_party/rust/packed_simd/src/api/into_bits/v32.rs b/third_party/rust/packed_simd/src/api/into_bits/v32.rs
  1355. --- a/third_party/rust/packed_simd/src/api/into_bits/v32.rs
  1356. +++ b/third_party/rust/packed_simd/src/api/into_bits/v32.rs
  1357. @@ -1,10 +1,10 @@
  1358. //! `FromBits` and `IntoBits` implementations for portable 32-bit wide vectors
  1359. -#![rustfmt::skip]
  1360. +#[rustfmt::skip]
  1361. #[allow(unused)] // wasm_bindgen_test
  1362. use crate::*;
  1363. impl_from_bits!(i8x4[test_v32]: u8x4, m8x4, i16x2, u16x2, m16x2);
  1364. impl_from_bits!(u8x4[test_v32]: i8x4, m8x4, i16x2, u16x2, m16x2);
  1365. impl_from_bits!(m8x4[test_v32]: m16x2);
  1366. diff --git a/third_party/rust/packed_simd/src/api/into_bits/v512.rs b/third_party/rust/packed_simd/src/api/into_bits/v512.rs
  1367. --- a/third_party/rust/packed_simd/src/api/into_bits/v512.rs
  1368. +++ b/third_party/rust/packed_simd/src/api/into_bits/v512.rs
  1369. @@ -1,10 +1,10 @@
  1370. //! `FromBits` and `IntoBits` implementations for portable 512-bit wide vectors
  1371. -#![rustfmt::skip]
  1372. +#[rustfmt::skip]
  1373. #[allow(unused)] // wasm_bindgen_test
  1374. use crate::*;
  1375. impl_from_bits!(i8x64[test_v512]: u8x64, m8x64, i16x32, u16x32, m16x32, i32x16, u32x16, f32x16, m32x16, i64x8, u64x8, f64x8, m64x8, i128x4, u128x4, m128x4);
  1376. impl_from_bits!(u8x64[test_v512]: i8x64, m8x64, i16x32, u16x32, m16x32, i32x16, u32x16, f32x16, m32x16, i64x8, u64x8, f64x8, m64x8, i128x4, u128x4, m128x4);
  1377. impl_from_bits!(m8x64[test_v512]: m16x32, m32x16, m64x8, m128x4);
  1378. diff --git a/third_party/rust/packed_simd/src/api/into_bits/v64.rs b/third_party/rust/packed_simd/src/api/into_bits/v64.rs
  1379. --- a/third_party/rust/packed_simd/src/api/into_bits/v64.rs
  1380. +++ b/third_party/rust/packed_simd/src/api/into_bits/v64.rs
  1381. @@ -1,10 +1,10 @@
  1382. //! `FromBits` and `IntoBits` implementations for portable 64-bit wide vectors
  1383. -#![rustfmt::skip]
  1384. +#[rustfmt::skip]
  1385. #[allow(unused)] // wasm_bindgen_test
  1386. use crate::*;
  1387. impl_from_bits!(i8x8[test_v64]: u8x8, m8x8, i16x4, u16x4, m16x4, i32x2, u32x2, f32x2, m32x2);
  1388. impl_from_bits!(u8x8[test_v64]: i8x8, m8x8, i16x4, u16x4, m16x4, i32x2, u32x2, f32x2, m32x2);
  1389. impl_from_bits!(m8x8[test_v64]: m16x4, m32x2);
  1390. diff --git a/third_party/rust/packed_simd/src/api/minimal/iuf.rs b/third_party/rust/packed_simd/src/api/minimal/iuf.rs
  1391. --- a/third_party/rust/packed_simd/src/api/minimal/iuf.rs
  1392. +++ b/third_party/rust/packed_simd/src/api/minimal/iuf.rs
  1393. @@ -48,17 +48,17 @@ macro_rules! impl_minimal_iuf {
  1394. #[inline]
  1395. pub fn extract(self, index: usize) -> $elem_ty {
  1396. assert!(index < $elem_count);
  1397. unsafe { self.extract_unchecked(index) }
  1398. }
  1399. /// Extracts the value at `index`.
  1400. ///
  1401. - /// # Precondition
  1402. + /// # Safety
  1403. ///
  1404. /// If `index >= Self::lanes()` the behavior is undefined.
  1405. #[inline]
  1406. pub unsafe fn extract_unchecked(self, index: usize) -> $elem_ty {
  1407. use crate::llvm::simd_extract;
  1408. let e: $ielem_ty = simd_extract(self.0, index as u32);
  1409. e as $elem_ty
  1410. }
  1411. @@ -75,17 +75,17 @@ macro_rules! impl_minimal_iuf {
  1412. ]
  1413. pub fn replace(self, index: usize, new_value: $elem_ty) -> Self {
  1414. assert!(index < $elem_count);
  1415. unsafe { self.replace_unchecked(index, new_value) }
  1416. }
  1417. /// Returns a new vector where the value at `index` is replaced by `new_value`.
  1418. ///
  1419. - /// # Precondition
  1420. + /// # Safety
  1421. ///
  1422. /// If `index >= Self::lanes()` the behavior is undefined.
  1423. #[inline]
  1424. #[must_use = "replace_unchecked does not modify the original value - \
  1425. it returns a new vector with the value at `index` \
  1426. replaced by `new_value`d"
  1427. ]
  1428. pub unsafe fn replace_unchecked(
  1429. @@ -96,16 +96,18 @@ macro_rules! impl_minimal_iuf {
  1430. use crate::llvm::simd_insert;
  1431. Simd(simd_insert(self.0, index as u32, new_value as $ielem_ty))
  1432. }
  1433. }
  1434. test_if!{
  1435. $test_tt:
  1436. paste::item! {
  1437. + // Comparisons use integer casts within mantissa^1 range.
  1438. + #[allow(clippy::float_cmp)]
  1439. pub mod [<$id _minimal>] {
  1440. use super::*;
  1441. #[cfg_attr(not(target_arch = "wasm32"), test)]
  1442. #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)]
  1443. fn minimal() {
  1444. // lanes:
  1445. assert_eq!($elem_count, $id::lanes());
  1446. diff --git a/third_party/rust/packed_simd/src/api/minimal/mask.rs b/third_party/rust/packed_simd/src/api/minimal/mask.rs
  1447. --- a/third_party/rust/packed_simd/src/api/minimal/mask.rs
  1448. +++ b/third_party/rust/packed_simd/src/api/minimal/mask.rs
  1449. @@ -53,16 +53,18 @@ macro_rules! impl_minimal_mask {
  1450. #[inline]
  1451. pub fn extract(self, index: usize) -> bool {
  1452. assert!(index < $elem_count);
  1453. unsafe { self.extract_unchecked(index) }
  1454. }
  1455. /// Extracts the value at `index`.
  1456. ///
  1457. + /// # Safety
  1458. + ///
  1459. /// If `index >= Self::lanes()` the behavior is undefined.
  1460. #[inline]
  1461. pub unsafe fn extract_unchecked(self, index: usize) -> bool {
  1462. use crate::llvm::simd_extract;
  1463. let x: $ielem_ty = simd_extract(self.0, index as u32);
  1464. x != 0
  1465. }
  1466. @@ -80,19 +82,19 @@ macro_rules! impl_minimal_mask {
  1467. pub fn replace(self, index: usize, new_value: bool) -> Self {
  1468. assert!(index < $elem_count);
  1469. unsafe { self.replace_unchecked(index, new_value) }
  1470. }
  1471. /// Returns a new vector where the value at `index` is replaced by
  1472. /// `new_value`.
  1473. ///
  1474. - /// # Panics
  1475. + /// # Safety
  1476. ///
  1477. - /// If `index >= Self::lanes()`.
  1478. + /// If `index >= Self::lanes()` the behavior is undefined.
  1479. #[inline]
  1480. #[must_use = "replace_unchecked does not modify the original value - \
  1481. it returns a new vector with the value at `index` \
  1482. replaced by `new_value`d"
  1483. ]
  1484. pub unsafe fn replace_unchecked(
  1485. self,
  1486. index: usize,
  1487. diff --git a/third_party/rust/packed_simd/src/api/minimal/ptr.rs b/third_party/rust/packed_simd/src/api/minimal/ptr.rs
  1488. --- a/third_party/rust/packed_simd/src/api/minimal/ptr.rs
  1489. +++ b/third_party/rust/packed_simd/src/api/minimal/ptr.rs
  1490. @@ -63,17 +63,17 @@ macro_rules! impl_minimal_p {
  1491. #[inline]
  1492. pub fn extract(self, index: usize) -> $elem_ty {
  1493. assert!(index < $elem_count);
  1494. unsafe { self.extract_unchecked(index) }
  1495. }
  1496. /// Extracts the value at `index`.
  1497. ///
  1498. - /// # Precondition
  1499. + /// # Safety
  1500. ///
  1501. /// If `index >= Self::lanes()` the behavior is undefined.
  1502. #[inline]
  1503. pub unsafe fn extract_unchecked(self, index: usize) -> $elem_ty {
  1504. use crate::llvm::simd_extract;
  1505. simd_extract(self.0, index as u32)
  1506. }
  1507. @@ -91,17 +91,17 @@ macro_rules! impl_minimal_p {
  1508. #[allow(clippy::not_unsafe_ptr_arg_deref)]
  1509. pub fn replace(self, index: usize, new_value: $elem_ty) -> Self {
  1510. assert!(index < $elem_count);
  1511. unsafe { self.replace_unchecked(index, new_value) }
  1512. }
  1513. /// Returns a new vector where the value at `index` is replaced by `new_value`.
  1514. ///
  1515. - /// # Precondition
  1516. + /// # Safety
  1517. ///
  1518. /// If `index >= Self::lanes()` the behavior is undefined.
  1519. #[inline]
  1520. #[must_use = "replace_unchecked does not modify the original value - \
  1521. it returns a new vector with the value at `index` \
  1522. replaced by `new_value`d"
  1523. ]
  1524. pub unsafe fn replace_unchecked(
  1525. @@ -210,17 +210,17 @@ macro_rules! impl_minimal_p {
  1526. impl<T> crate::fmt::Debug for $id<T> {
  1527. #[allow(clippy::missing_inline_in_public_items)]
  1528. fn fmt(&self, f: &mut crate::fmt::Formatter<'_>)
  1529. -> crate::fmt::Result {
  1530. write!(
  1531. f,
  1532. "{}<{}>(",
  1533. stringify!($id),
  1534. - unsafe { crate::intrinsics::type_name::<T>() }
  1535. + crate::intrinsics::type_name::<T>()
  1536. )?;
  1537. for i in 0..$elem_count {
  1538. if i > 0 {
  1539. write!(f, ", ")?;
  1540. }
  1541. self.extract(i).fmt(f)?;
  1542. }
  1543. write!(f, ")")
  1544. @@ -545,21 +545,17 @@ macro_rules! impl_minimal_p {
  1545. let values = [1_i32; $elem_count];
  1546. let mut vec: $id<i32> = Default::default();
  1547. let mut array = [
  1548. $id::<i32>::null().extract(0); $elem_count
  1549. ];
  1550. for i in 0..$elem_count {
  1551. - let ptr = unsafe {
  1552. - crate::mem::transmute(
  1553. - &values[i] as *const i32
  1554. - )
  1555. - };
  1556. + let ptr = &values[i] as *const i32 as *mut i32;
  1557. vec = vec.replace(i, ptr);
  1558. array[i] = ptr;
  1559. }
  1560. // FIXME: there is no impl of From<$id<T>> for [$elem_ty; N]
  1561. // let a0 = From::from(vec);
  1562. // assert_eq!(a0, array);
  1563. #[allow(unused_assignments)]
  1564. @@ -606,30 +602,30 @@ macro_rules! impl_minimal_p {
  1565. unsafe {
  1566. assert!(slice.len() >= $elem_count);
  1567. Self::from_slice_unaligned_unchecked(slice)
  1568. }
  1569. }
  1570. /// Instantiates a new vector with the values of the `slice`.
  1571. ///
  1572. - /// # Precondition
  1573. + /// # Safety
  1574. ///
  1575. /// If `slice.len() < Self::lanes()` or `&slice[0]` is not aligned
  1576. /// to an `align_of::<Self>()` boundary, the behavior is undefined.
  1577. #[inline]
  1578. pub unsafe fn from_slice_aligned_unchecked(slice: &[$elem_ty])
  1579. -> Self {
  1580. #[allow(clippy::cast_ptr_alignment)]
  1581. *(slice.get_unchecked(0) as *const $elem_ty as *const Self)
  1582. }
  1583. /// Instantiates a new vector with the values of the `slice`.
  1584. ///
  1585. - /// # Precondition
  1586. + /// # Safety
  1587. ///
  1588. /// If `slice.len() < Self::lanes()` the behavior is undefined.
  1589. #[inline]
  1590. pub unsafe fn from_slice_unaligned_unchecked(
  1591. slice: &[$elem_ty],
  1592. ) -> Self {
  1593. use crate::mem::size_of;
  1594. let target_ptr =
  1595. @@ -822,33 +818,33 @@ macro_rules! impl_minimal_p {
  1596. unsafe {
  1597. assert!(slice.len() >= $elem_count);
  1598. self.write_to_slice_unaligned_unchecked(slice);
  1599. }
  1600. }
  1601. /// Writes the values of the vector to the `slice`.
  1602. ///
  1603. - /// # Precondition
  1604. + /// # Safety
  1605. ///
  1606. /// If `slice.len() < Self::lanes()` or `&slice[0]` is not
  1607. /// aligned to an `align_of::<Self>()` boundary, the behavior is
  1608. /// undefined.
  1609. #[inline]
  1610. pub unsafe fn write_to_slice_aligned_unchecked(
  1611. self, slice: &mut [$elem_ty],
  1612. ) {
  1613. #[allow(clippy::cast_ptr_alignment)]
  1614. *(slice.get_unchecked_mut(0) as *mut $elem_ty as *mut Self) =
  1615. self;
  1616. }
  1617. /// Writes the values of the vector to the `slice`.
  1618. ///
  1619. - /// # Precondition
  1620. + /// # Safety
  1621. ///
  1622. /// If `slice.len() < Self::lanes()` the behavior is undefined.
  1623. #[inline]
  1624. pub unsafe fn write_to_slice_unaligned_unchecked(
  1625. self, slice: &mut [$elem_ty],
  1626. ) {
  1627. let target_ptr =
  1628. slice.get_unchecked_mut(0) as *mut $elem_ty as *mut u8;
  1629. @@ -1020,21 +1016,17 @@ macro_rules! impl_minimal_p {
  1630. let mut vec: $id<i32> = Default::default();
  1631. let mut array = [
  1632. $id::<i32>::null().extract(0);
  1633. $elem_count
  1634. ];
  1635. for i in 0..$elem_count {
  1636. - let ptr = unsafe {
  1637. - crate::mem::transmute(
  1638. - &values[i] as *const i32
  1639. - )
  1640. - };
  1641. + let ptr = &values[i] as *const i32 as *mut i32;
  1642. vec = vec.replace(i, ptr);
  1643. array[i] = ptr;
  1644. }
  1645. #[allow(deprecated)]
  1646. let mut a_hash = SipHasher13::new();
  1647. let mut v_hash = a_hash.clone();
  1648. array.hash(&mut a_hash);
  1649. @@ -1146,17 +1138,17 @@ macro_rules! impl_minimal_p {
  1650. /// allocation. For instance, no known 64-bit platform can ever
  1651. /// serve a request for 263 bytes due to page-table limitations or
  1652. /// splitting the address space. However, some 32-bit and 16-bit
  1653. /// platforms may successfully serve a request for more than
  1654. /// `isize::MAX` bytes with things like Physical Address Extension.
  1655. /// As such, memory acquired directly from allocators or memory
  1656. /// mapped files may be too large to handle with this function.
  1657. ///
  1658. - /// Consider using wrapping_offset_from instead if these constraints
  1659. + /// Consider using `wrapping_offset_from` instead if these constraints
  1660. /// are difficult to satisfy. The only advantage of this method is
  1661. /// that it enables more aggressive compiler optimizations.
  1662. #[inline]
  1663. pub unsafe fn offset_from(self, origin: Self) -> $isize_ty {
  1664. // FIXME: should use LLVM's `sub nsw nuw`.
  1665. self.wrapping_offset_from(origin)
  1666. }
  1667. diff --git a/third_party/rust/packed_simd/src/api/ops/vector_float_min_max.rs b/third_party/rust/packed_simd/src/api/ops/vector_float_min_max.rs
  1668. --- a/third_party/rust/packed_simd/src/api/ops/vector_float_min_max.rs
  1669. +++ b/third_party/rust/packed_simd/src/api/ops/vector_float_min_max.rs
  1670. @@ -21,16 +21,21 @@ macro_rules! impl_ops_vector_float_min_m
  1671. pub fn max(self, x: Self) -> Self {
  1672. use crate::llvm::simd_fmax;
  1673. unsafe { Simd(simd_fmax(self.0, x.0)) }
  1674. }
  1675. }
  1676. test_if!{
  1677. $test_tt:
  1678. paste::item! {
  1679. + #[cfg(not(any(
  1680. + // FIXME: https://github.com/rust-lang-nursery/packed_simd/issues/223
  1681. + all(target_arch = "mips", target_endian = "big"),
  1682. + target_arch = "mips64",
  1683. + )))]
  1684. pub mod [<$id _ops_vector_min_max>] {
  1685. use super::*;
  1686. #[cfg_attr(not(target_arch = "wasm32"), test)] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)]
  1687. fn min_max() {
  1688. let n = crate::$elem_ty::NAN;
  1689. let o = $id::splat(1. as $elem_ty);
  1690. let t = $id::splat(2. as $elem_ty);
  1691. diff --git a/third_party/rust/packed_simd/src/api/ptr/gather_scatter.rs b/third_party/rust/packed_simd/src/api/ptr/gather_scatter.rs
  1692. --- a/third_party/rust/packed_simd/src/api/ptr/gather_scatter.rs
  1693. +++ b/third_party/rust/packed_simd/src/api/ptr/gather_scatter.rs
  1694. @@ -44,19 +44,19 @@ macro_rules! impl_ptr_read {
  1695. let mut v = [0_i32; $elem_count];
  1696. for i in 0..$elem_count {
  1697. v[i] = i as i32;
  1698. }
  1699. let mut ptr = $id::<i32>::null();
  1700. for i in 0..$elem_count {
  1701. - ptr = ptr.replace(i, unsafe {
  1702. - crate::mem::transmute(&v[i] as *const i32)
  1703. - });
  1704. + ptr = ptr.replace(i,
  1705. + &v[i] as *const i32 as *mut i32
  1706. + );
  1707. }
  1708. // all mask elements are true:
  1709. let mask = $mask_ty::splat(true);
  1710. let def = Simd::<[i32; $elem_count]>::splat(42_i32);
  1711. let r: Simd<[i32; $elem_count]> = unsafe {
  1712. ptr.read(mask, def)
  1713. };
  1714. @@ -130,42 +130,18 @@ macro_rules! impl_ptr_write {
  1715. #[inline]
  1716. pub unsafe fn write<M>(
  1717. self, mask: Simd<[M; $elem_count]>,
  1718. value: Simd<[T; $elem_count]>,
  1719. ) where
  1720. M: sealed::Mask,
  1721. [M; $elem_count]: sealed::SimdArray,
  1722. {
  1723. - // FIXME:
  1724. - // https://github.com/rust-lang-nursery/packed_simd/issues/85
  1725. - #[cfg(not(target_arch = "mips"))]
  1726. - {
  1727. - use crate::llvm::simd_scatter;
  1728. - simd_scatter(value.0, self.0, mask.0)
  1729. - }
  1730. - #[cfg(target_arch = "mips")]
  1731. - {
  1732. - let m_ptr =
  1733. - &mask as *const Simd<[M; $elem_count]> as *const M;
  1734. - for i in 0..$elem_count {
  1735. - let m = ptr::read(m_ptr.add(i));
  1736. - if m.test() {
  1737. - let t_ptr = &self
  1738. - as *const Simd<[*mut T; $elem_count]>
  1739. - as *mut *mut T;
  1740. - let v_ptr = &value as *const Simd<[T; $elem_count]>
  1741. - as *const T;
  1742. - ptr::write(
  1743. - ptr::read(t_ptr.add(i)),
  1744. - ptr::read(v_ptr.add(i)),
  1745. - );
  1746. - }
  1747. - }
  1748. - }
  1749. + use crate::llvm::simd_scatter;
  1750. + simd_scatter(value.0, self.0, mask.0)
  1751. }
  1752. }
  1753. test_if! {
  1754. $test_tt:
  1755. paste::item! {
  1756. mod [<$id _write>] {
  1757. use super::*;
  1758. @@ -180,17 +156,17 @@ macro_rules! impl_ptr_write {
  1759. for i in 0..$elem_count {
  1760. arr[i] = i as i32;
  1761. }
  1762. // arr = [0, 1, 2, ...]
  1763. let mut ptr = $id::<i32>::null();
  1764. for i in 0..$elem_count {
  1765. ptr = ptr.replace(i, unsafe {
  1766. - crate::mem::transmute(arr.as_ptr().add(i))
  1767. + arr.as_ptr().add(i) as *mut i32
  1768. });
  1769. }
  1770. // ptr = [&arr[0], &arr[1], ...]
  1771. // write `fourty_two` to all elements of `v`
  1772. {
  1773. let backup = arr;
  1774. unsafe {
  1775. diff --git a/third_party/rust/packed_simd/src/api/reductions/float_arithmetic.rs b/third_party/rust/packed_simd/src/api/reductions/float_arithmetic.rs
  1776. --- a/third_party/rust/packed_simd/src/api/reductions/float_arithmetic.rs
  1777. +++ b/third_party/rust/packed_simd/src/api/reductions/float_arithmetic.rs
  1778. @@ -88,16 +88,18 @@ macro_rules! impl_reduction_float_arithm
  1779. fn product<I: Iterator<Item = &'a $id>>(iter: I) -> $id {
  1780. iter.fold($id::splat(1.), |a, b| crate::ops::Mul::mul(a, *b))
  1781. }
  1782. }
  1783. test_if! {
  1784. $test_tt:
  1785. paste::item! {
  1786. + // Comparisons use integer casts within mantissa^1 range.
  1787. + #[allow(clippy::float_cmp)]
  1788. pub mod [<$id _reduction_float_arith>] {
  1789. use super::*;
  1790. fn alternating(x: usize) -> $id {
  1791. let mut v = $id::splat(1 as $elem_ty);
  1792. for i in 0..$id::lanes() {
  1793. if i % x == 0 {
  1794. v = v.replace(i, 2 as $elem_ty);
  1795. }
  1796. @@ -220,17 +222,17 @@ macro_rules! impl_reduction_float_arithm
  1797. }
  1798. let mut start = crate::$elem_ty::EPSILON;
  1799. let mut scalar_reduction = 0. as $elem_ty;
  1800. let mut v = $id::splat(0. as $elem_ty);
  1801. for i in 0..$id::lanes() {
  1802. let c = if i % 2 == 0 { 1e3 } else { -1. };
  1803. - start *= 3.14 * c;
  1804. + start *= ::core::$elem_ty::consts::PI * c;
  1805. scalar_reduction += start;
  1806. v = v.replace(i, start);
  1807. }
  1808. let simd_reduction = v.sum();
  1809. let mut a = [0. as $elem_ty; $id::lanes()];
  1810. v.write_to_slice_unaligned(&mut a);
  1811. let tree_reduction = tree_reduce_sum(&a);
  1812. @@ -252,16 +254,17 @@ macro_rules! impl_reduction_float_arithm
  1813. scalar_reduction
  1814. );
  1815. }
  1816. #[cfg_attr(not(target_arch = "wasm32"), test)]
  1817. #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)]
  1818. #[allow(unused, dead_code)]
  1819. fn product_roundoff() {
  1820. + use ::core::convert::TryInto;
  1821. // Performs a tree-reduction
  1822. fn tree_reduce_product(a: &[$elem_ty]) -> $elem_ty {
  1823. assert!(!a.is_empty());
  1824. if a.len() == 1 {
  1825. a[0]
  1826. } else if a.len() == 2 {
  1827. a[0] * a[1]
  1828. } else {
  1829. @@ -273,35 +276,37 @@ macro_rules! impl_reduction_float_arithm
  1830. }
  1831. let mut start = crate::$elem_ty::EPSILON;
  1832. let mut scalar_reduction = 1. as $elem_ty;
  1833. let mut v = $id::splat(0. as $elem_ty);
  1834. for i in 0..$id::lanes() {
  1835. let c = if i % 2 == 0 { 1e3 } else { -1. };
  1836. - start *= 3.14 * c;
  1837. + start *= ::core::$elem_ty::consts::PI * c;
  1838. scalar_reduction *= start;
  1839. v = v.replace(i, start);
  1840. }
  1841. let simd_reduction = v.product();
  1842. let mut a = [0. as $elem_ty; $id::lanes()];
  1843. v.write_to_slice_unaligned(&mut a);
  1844. let tree_reduction = tree_reduce_product(&a);
  1845. - // tolerate 1 ULP difference:
  1846. + // FIXME: Too imprecise, even only for product(f32x8).
  1847. + // Figure out how to narrow this down.
  1848. + let ulp_limit = $id::lanes() / 2;
  1849. let red_bits = simd_reduction.to_bits();
  1850. let tree_bits = tree_reduction.to_bits();
  1851. assert!(
  1852. if red_bits > tree_bits {
  1853. red_bits - tree_bits
  1854. } else {
  1855. tree_bits - red_bits
  1856. - } < 2,
  1857. + } < ulp_limit.try_into().unwrap(),
  1858. "vector: {:?} | simd_reduction: {:?} | \
  1859. tree_reduction: {} | scalar_reduction: {}",
  1860. v,
  1861. simd_reduction,
  1862. tree_reduction,
  1863. scalar_reduction
  1864. );
  1865. }
  1866. diff --git a/third_party/rust/packed_simd/src/api/reductions/min_max.rs b/third_party/rust/packed_simd/src/api/reductions/min_max.rs
  1867. --- a/third_party/rust/packed_simd/src/api/reductions/min_max.rs
  1868. +++ b/third_party/rust/packed_simd/src/api/reductions/min_max.rs
  1869. @@ -71,16 +71,18 @@ macro_rules! impl_reduction_min_max {
  1870. x = x.min(self.extract(i));
  1871. }
  1872. x
  1873. }
  1874. }
  1875. }
  1876. test_if! {$test_tt:
  1877. paste::item! {
  1878. + // Comparisons use integer casts within mantissa^1 range.
  1879. + #[allow(clippy::float_cmp)]
  1880. pub mod [<$id _reduction_min_max>] {
  1881. use super::*;
  1882. #[cfg_attr(not(target_arch = "wasm32"), test)]
  1883. #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)]
  1884. pub fn max_element() {
  1885. let v = $id::splat(0 as $elem_ty);
  1886. assert_eq!(v.max_element(), 0 as $elem_ty);
  1887. if $id::lanes() > 1 {
  1888. @@ -119,16 +121,18 @@ macro_rules! impl_reduction_min_max {
  1889. };
  1890. }
  1891. macro_rules! test_reduction_float_min_max {
  1892. ([$elem_ty:ident; $elem_count:expr]: $id:ident | $test_tt:tt) => {
  1893. test_if!{
  1894. $test_tt:
  1895. paste::item! {
  1896. + // Comparisons use integer casts within mantissa^1 range.
  1897. + #[allow(clippy::float_cmp)]
  1898. pub mod [<$id _reduction_min_max_nan>] {
  1899. use super::*;
  1900. #[cfg_attr(not(target_arch = "wasm32"), test)]
  1901. #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)]
  1902. fn min_element_test() {
  1903. let n = crate::$elem_ty::NAN;
  1904. assert_eq!(n.min(-3.), -3.);
  1905. diff --git a/third_party/rust/packed_simd/src/api/slice/from_slice.rs b/third_party/rust/packed_simd/src/api/slice/from_slice.rs
  1906. --- a/third_party/rust/packed_simd/src/api/slice/from_slice.rs
  1907. +++ b/third_party/rust/packed_simd/src/api/slice/from_slice.rs
  1908. @@ -33,17 +33,17 @@ macro_rules! impl_slice_from_slice {
  1909. unsafe {
  1910. assert!(slice.len() >= $elem_count);
  1911. Self::from_slice_unaligned_unchecked(slice)
  1912. }
  1913. }
  1914. /// Instantiates a new vector with the values of the `slice`.
  1915. ///
  1916. - /// # Precondition
  1917. + /// # Safety
  1918. ///
  1919. /// If `slice.len() < Self::lanes()` or `&slice[0]` is not aligned
  1920. /// to an `align_of::<Self>()` boundary, the behavior is undefined.
  1921. #[inline]
  1922. pub unsafe fn from_slice_aligned_unchecked(
  1923. slice: &[$elem_ty],
  1924. ) -> Self {
  1925. debug_assert!(slice.len() >= $elem_count);
  1926. @@ -54,17 +54,17 @@ macro_rules! impl_slice_from_slice {
  1927. );
  1928. #[allow(clippy::cast_ptr_alignment)]
  1929. *(target_ptr as *const Self)
  1930. }
  1931. /// Instantiates a new vector with the values of the `slice`.
  1932. ///
  1933. - /// # Precondition
  1934. + /// # Safety
  1935. ///
  1936. /// If `slice.len() < Self::lanes()` the behavior is undefined.
  1937. #[inline]
  1938. pub unsafe fn from_slice_unaligned_unchecked(
  1939. slice: &[$elem_ty],
  1940. ) -> Self {
  1941. use crate::mem::size_of;
  1942. debug_assert!(slice.len() >= $elem_count);
  1943. @@ -79,16 +79,18 @@ macro_rules! impl_slice_from_slice {
  1944. );
  1945. x
  1946. }
  1947. }
  1948. test_if! {
  1949. $test_tt:
  1950. paste::item! {
  1951. + // Comparisons use integer casts within mantissa^1 range.
  1952. + #[allow(clippy::float_cmp)]
  1953. pub mod [<$id _slice_from_slice>] {
  1954. use super::*;
  1955. use crate::iter::Iterator;
  1956. #[cfg_attr(not(target_arch = "wasm32"), test)]
  1957. #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)]
  1958. fn from_slice_unaligned() {
  1959. let mut unaligned = [42 as $elem_ty; $id::lanes() + 1];
  1960. diff --git a/third_party/rust/packed_simd/src/api/slice/write_to_slice.rs b/third_party/rust/packed_simd/src/api/slice/write_to_slice.rs
  1961. --- a/third_party/rust/packed_simd/src/api/slice/write_to_slice.rs
  1962. +++ b/third_party/rust/packed_simd/src/api/slice/write_to_slice.rs
  1963. @@ -34,17 +34,17 @@ macro_rules! impl_slice_write_to_slice {
  1964. unsafe {
  1965. assert!(slice.len() >= $elem_count);
  1966. self.write_to_slice_unaligned_unchecked(slice);
  1967. }
  1968. }
  1969. /// Writes the values of the vector to the `slice`.
  1970. ///
  1971. - /// # Precondition
  1972. + /// # Safety
  1973. ///
  1974. /// If `slice.len() < Self::lanes()` or `&slice[0]` is not
  1975. /// aligned to an `align_of::<Self>()` boundary, the behavior is
  1976. /// undefined.
  1977. #[inline]
  1978. pub unsafe fn write_to_slice_aligned_unchecked(
  1979. self, slice: &mut [$elem_ty],
  1980. ) {
  1981. @@ -59,17 +59,17 @@ macro_rules! impl_slice_write_to_slice {
  1982. #[allow(clippy::cast_ptr_alignment)]
  1983. #[allow(clippy::cast_ptr_alignment)]
  1984. #[allow(clippy::cast_ptr_alignment)]
  1985. *(target_ptr as *mut Self) = self;
  1986. }
  1987. /// Writes the values of the vector to the `slice`.
  1988. ///
  1989. - /// # Precondition
  1990. + /// # Safety
  1991. ///
  1992. /// If `slice.len() < Self::lanes()` the behavior is undefined.
  1993. #[inline]
  1994. pub unsafe fn write_to_slice_unaligned_unchecked(
  1995. self, slice: &mut [$elem_ty],
  1996. ) {
  1997. debug_assert!(slice.len() >= $elem_count);
  1998. let target_ptr =
  1999. @@ -81,16 +81,18 @@ macro_rules! impl_slice_write_to_slice {
  2000. crate::mem::size_of::<Self>(),
  2001. );
  2002. }
  2003. }
  2004. test_if! {
  2005. $test_tt:
  2006. paste::item! {
  2007. + // Comparisons use integer casts within mantissa^1 range.
  2008. + #[allow(clippy::float_cmp)]
  2009. pub mod [<$id _slice_write_to_slice>] {
  2010. use super::*;
  2011. use crate::iter::Iterator;
  2012. #[cfg_attr(not(target_arch = "wasm32"), test)]
  2013. #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)]
  2014. fn write_to_slice_unaligned() {
  2015. let mut unaligned = [0 as $elem_ty; $id::lanes() + 1];
  2016. diff --git a/third_party/rust/packed_simd/src/codegen.rs b/third_party/rust/packed_simd/src/codegen.rs
  2017. --- a/third_party/rust/packed_simd/src/codegen.rs
  2018. +++ b/third_party/rust/packed_simd/src/codegen.rs
  2019. @@ -11,23 +11,26 @@ crate mod swap_bytes;
  2020. macro_rules! impl_simd_array {
  2021. ([$elem_ty:ident; $elem_count:expr]:
  2022. $tuple_id:ident | $($elem_tys:ident),*) => {
  2023. #[derive(Copy, Clone)]
  2024. #[repr(simd)]
  2025. pub struct $tuple_id($(crate $elem_tys),*);
  2026. //^^^^^^^ leaked through SimdArray
  2027. + impl crate::sealed::Seal for [$elem_ty; $elem_count] {}
  2028. +
  2029. impl crate::sealed::SimdArray for [$elem_ty; $elem_count] {
  2030. type Tuple = $tuple_id;
  2031. type T = $elem_ty;
  2032. const N: usize = $elem_count;
  2033. type NT = [u32; $elem_count];
  2034. }
  2035. + impl crate::sealed::Seal for $tuple_id {}
  2036. impl crate::sealed::Simd for $tuple_id {
  2037. type Element = $elem_ty;
  2038. const LANES: usize = $elem_count;
  2039. type LanesType = [u32; $elem_count];
  2040. }
  2041. }
  2042. }
  2043. diff --git a/third_party/rust/packed_simd/src/codegen/bit_manip.rs b/third_party/rust/packed_simd/src/codegen/bit_manip.rs
  2044. --- a/third_party/rust/packed_simd/src/codegen/bit_manip.rs
  2045. +++ b/third_party/rust/packed_simd/src/codegen/bit_manip.rs
  2046. @@ -1,10 +1,10 @@
  2047. //! LLVM bit manipulation intrinsics.
  2048. -#![rustfmt::skip]
  2049. +#[rustfmt::skip]
  2050. use crate::*;
  2051. #[allow(improper_ctypes, dead_code)]
  2052. extern "C" {
  2053. #[link_name = "llvm.ctlz.v2i8"]
  2054. fn ctlz_u8x2(x: u8x2, is_zero_undef: bool) -> u8x2;
  2055. #[link_name = "llvm.ctlz.v4i8"]
  2056. diff --git a/third_party/rust/packed_simd/src/codegen/llvm.rs b/third_party/rust/packed_simd/src/codegen/llvm.rs
  2057. --- a/third_party/rust/packed_simd/src/codegen/llvm.rs
  2058. +++ b/third_party/rust/packed_simd/src/codegen/llvm.rs
  2059. @@ -5,41 +5,47 @@ use crate::sealed::Shuffle;
  2060. #[allow(unused_imports)] // FIXME: spurious warning?
  2061. use crate::sealed::Simd;
  2062. // Shuffle intrinsics: expanded in users' crates, therefore public.
  2063. extern "platform-intrinsic" {
  2064. // FIXME: Passing this intrinsics an `idx` array with an index that is
  2065. // out-of-bounds will produce a monomorphization-time error.
  2066. // https://github.com/rust-lang-nursery/packed_simd/issues/21
  2067. + #[rustc_args_required_const(2)]
  2068. pub fn simd_shuffle2<T, U>(x: T, y: T, idx: [u32; 2]) -> U
  2069. where
  2070. T: Simd,
  2071. <T as Simd>::Element: Shuffle<[u32; 2], Output = U>;
  2072. + #[rustc_args_required_const(2)]
  2073. pub fn simd_shuffle4<T, U>(x: T, y: T, idx: [u32; 4]) -> U
  2074. where
  2075. T: Simd,
  2076. <T as Simd>::Element: Shuffle<[u32; 4], Output = U>;
  2077. + #[rustc_args_required_const(2)]
  2078. pub fn simd_shuffle8<T, U>(x: T, y: T, idx: [u32; 8]) -> U
  2079. where
  2080. T: Simd,
  2081. <T as Simd>::Element: Shuffle<[u32; 8], Output = U>;
  2082. + #[rustc_args_required_const(2)]
  2083. pub fn simd_shuffle16<T, U>(x: T, y: T, idx: [u32; 16]) -> U
  2084. where
  2085. T: Simd,
  2086. <T as Simd>::Element: Shuffle<[u32; 16], Output = U>;
  2087. + #[rustc_args_required_const(2)]
  2088. pub fn simd_shuffle32<T, U>(x: T, y: T, idx: [u32; 32]) -> U
  2089. where
  2090. T: Simd,
  2091. <T as Simd>::Element: Shuffle<[u32; 32], Output = U>;
  2092. + #[rustc_args_required_const(2)]
  2093. pub fn simd_shuffle64<T, U>(x: T, y: T, idx: [u32; 64]) -> U
  2094. where
  2095. T: Simd,
  2096. <T as Simd>::Element: Shuffle<[u32; 64], Output = U>;
  2097. }
  2098. pub use self::simd_shuffle16 as __shuffle_vector16;
  2099. pub use self::simd_shuffle2 as __shuffle_vector2;
  2100. @@ -91,9 +97,11 @@ extern "platform-intrinsic" {
  2101. crate fn simd_fmin<T>(a: T, b: T) -> T;
  2102. crate fn simd_fmax<T>(a: T, b: T) -> T;
  2103. crate fn simd_fsqrt<T>(a: T) -> T;
  2104. crate fn simd_fma<T>(a: T, b: T, c: T) -> T;
  2105. crate fn simd_gather<T, P, M>(value: T, pointers: P, mask: M) -> T;
  2106. crate fn simd_scatter<T, P, M>(value: T, pointers: P, mask: M);
  2107. +
  2108. + crate fn simd_bitmask<T, U>(value: T) -> U;
  2109. }
  2110. diff --git a/third_party/rust/packed_simd/src/codegen/reductions/mask/x86.rs b/third_party/rust/packed_simd/src/codegen/reductions/mask/x86.rs
  2111. --- a/third_party/rust/packed_simd/src/codegen/reductions/mask/x86.rs
  2112. +++ b/third_party/rust/packed_simd/src/codegen/reductions/mask/x86.rs
  2113. @@ -14,23 +14,17 @@ mod avx;
  2114. #[cfg(target_feature = "avx2")]
  2115. #[macro_use]
  2116. mod avx2;
  2117. /// x86 64-bit m8x8 implementation
  2118. macro_rules! x86_m8x8_impl {
  2119. ($id:ident) => {
  2120. - cfg_if! {
  2121. - if #[cfg(all(target_arch = "x86_64", target_feature = "sse"))] {
  2122. - x86_m8x8_sse_impl!($id);
  2123. - } else {
  2124. - fallback_impl!($id);
  2125. - }
  2126. - }
  2127. + fallback_impl!($id);
  2128. };
  2129. }
  2130. /// x86 128-bit m8x16 implementation
  2131. macro_rules! x86_m8x16_impl {
  2132. ($id:ident) => {
  2133. cfg_if! {
  2134. if #[cfg(target_feature = "sse2")] {
  2135. diff --git a/third_party/rust/packed_simd/src/codegen/reductions/mask/x86/sse.rs b/third_party/rust/packed_simd/src/codegen/reductions/mask/x86/sse.rs
  2136. --- a/third_party/rust/packed_simd/src/codegen/reductions/mask/x86/sse.rs
  2137. +++ b/third_party/rust/packed_simd/src/codegen/reductions/mask/x86/sse.rs
  2138. @@ -29,40 +29,8 @@ macro_rules! x86_m32x4_sse_impl {
  2139. #[cfg(target_arch = "x86_64")]
  2140. use crate::arch::x86_64::_mm_movemask_ps;
  2141. _mm_movemask_ps(crate::mem::transmute(self)) != 0
  2142. }
  2143. }
  2144. };
  2145. }
  2146. -
  2147. -macro_rules! x86_m8x8_sse_impl {
  2148. - ($id:ident) => {
  2149. - impl All for $id {
  2150. - #[inline]
  2151. - #[target_feature(enable = "sse")]
  2152. - unsafe fn all(self) -> bool {
  2153. - #[cfg(target_arch = "x86")]
  2154. - use crate::arch::x86::_mm_movemask_pi8;
  2155. - #[cfg(target_arch = "x86_64")]
  2156. - use crate::arch::x86_64::_mm_movemask_pi8;
  2157. - // _mm_movemask_pi8(a) creates an 8bit mask containing the most
  2158. - // significant bit of each byte of `a`. If all bits are set,
  2159. - // then all 8 lanes of the mask are true.
  2160. - _mm_movemask_pi8(crate::mem::transmute(self))
  2161. - == u8::max_value() as i32
  2162. - }
  2163. - }
  2164. - impl Any for $id {
  2165. - #[inline]
  2166. - #[target_feature(enable = "sse")]
  2167. - unsafe fn any(self) -> bool {
  2168. - #[cfg(target_arch = "x86")]
  2169. - use crate::arch::x86::_mm_movemask_pi8;
  2170. - #[cfg(target_arch = "x86_64")]
  2171. - use crate::arch::x86_64::_mm_movemask_pi8;
  2172. -
  2173. - _mm_movemask_pi8(crate::mem::transmute(self)) != 0
  2174. - }
  2175. - }
  2176. - };
  2177. -}
  2178. diff --git a/third_party/rust/packed_simd/src/codegen/shuffle.rs b/third_party/rust/packed_simd/src/codegen/shuffle.rs
  2179. --- a/third_party/rust/packed_simd/src/codegen/shuffle.rs
  2180. +++ b/third_party/rust/packed_simd/src/codegen/shuffle.rs
  2181. @@ -1,302 +1,150 @@
  2182. //! Implementations of the `ShuffleResult` trait for the different numbers of
  2183. //! lanes and vector element types.
  2184. use crate::masks::*;
  2185. -use crate::sealed::Shuffle;
  2186. -
  2187. -impl Shuffle<[u32; 2]> for i8 {
  2188. - type Output = crate::codegen::i8x2;
  2189. -}
  2190. -impl Shuffle<[u32; 4]> for i8 {
  2191. - type Output = crate::codegen::i8x4;
  2192. -}
  2193. -impl Shuffle<[u32; 8]> for i8 {
  2194. - type Output = crate::codegen::i8x8;
  2195. -}
  2196. -impl Shuffle<[u32; 16]> for i8 {
  2197. - type Output = crate::codegen::i8x16;
  2198. -}
  2199. -impl Shuffle<[u32; 32]> for i8 {
  2200. - type Output = crate::codegen::i8x32;
  2201. -}
  2202. -impl Shuffle<[u32; 64]> for i8 {
  2203. - type Output = crate::codegen::i8x64;
  2204. -}
  2205. -
  2206. -impl Shuffle<[u32; 2]> for u8 {
  2207. - type Output = crate::codegen::u8x2;
  2208. -}
  2209. -impl Shuffle<[u32; 4]> for u8 {
  2210. - type Output = crate::codegen::u8x4;
  2211. -}
  2212. -impl Shuffle<[u32; 8]> for u8 {
  2213. - type Output = crate::codegen::u8x8;
  2214. -}
  2215. -impl Shuffle<[u32; 16]> for u8 {
  2216. - type Output = crate::codegen::u8x16;
  2217. -}
  2218. -impl Shuffle<[u32; 32]> for u8 {
  2219. - type Output = crate::codegen::u8x32;
  2220. -}
  2221. -impl Shuffle<[u32; 64]> for u8 {
  2222. - type Output = crate::codegen::u8x64;
  2223. -}
  2224. -
  2225. -impl Shuffle<[u32; 2]> for m8 {
  2226. - type Output = crate::codegen::m8x2;
  2227. -}
  2228. -impl Shuffle<[u32; 4]> for m8 {
  2229. - type Output = crate::codegen::m8x4;
  2230. -}
  2231. -impl Shuffle<[u32; 8]> for m8 {
  2232. - type Output = crate::codegen::m8x8;
  2233. -}
  2234. -impl Shuffle<[u32; 16]> for m8 {
  2235. - type Output = crate::codegen::m8x16;
  2236. -}
  2237. -impl Shuffle<[u32; 32]> for m8 {
  2238. - type Output = crate::codegen::m8x32;
  2239. -}
  2240. -impl Shuffle<[u32; 64]> for m8 {
  2241. - type Output = crate::codegen::m8x64;
  2242. -}
  2243. +use crate::sealed::{Shuffle, Seal};
  2244. -impl Shuffle<[u32; 2]> for i16 {
  2245. - type Output = crate::codegen::i16x2;
  2246. -}
  2247. -impl Shuffle<[u32; 4]> for i16 {
  2248. - type Output = crate::codegen::i16x4;
  2249. -}
  2250. -impl Shuffle<[u32; 8]> for i16 {
  2251. - type Output = crate::codegen::i16x8;
  2252. -}
  2253. -impl Shuffle<[u32; 16]> for i16 {
  2254. - type Output = crate::codegen::i16x16;
  2255. -}
  2256. -impl Shuffle<[u32; 32]> for i16 {
  2257. - type Output = crate::codegen::i16x32;
  2258. -}
  2259. -
  2260. -impl Shuffle<[u32; 2]> for u16 {
  2261. - type Output = crate::codegen::u16x2;
  2262. -}
  2263. -impl Shuffle<[u32; 4]> for u16 {
  2264. - type Output = crate::codegen::u16x4;
  2265. -}
  2266. -impl Shuffle<[u32; 8]> for u16 {
  2267. - type Output = crate::codegen::u16x8;
  2268. -}
  2269. -impl Shuffle<[u32; 16]> for u16 {
  2270. - type Output = crate::codegen::u16x16;
  2271. -}
  2272. -impl Shuffle<[u32; 32]> for u16 {
  2273. - type Output = crate::codegen::u16x32;
  2274. -}
  2275. -
  2276. -impl Shuffle<[u32; 2]> for m16 {
  2277. - type Output = crate::codegen::m16x2;
  2278. -}
  2279. -impl Shuffle<[u32; 4]> for m16 {
  2280. - type Output = crate::codegen::m16x4;
  2281. -}
  2282. -impl Shuffle<[u32; 8]> for m16 {
  2283. - type Output = crate::codegen::m16x8;
  2284. -}
  2285. -impl Shuffle<[u32; 16]> for m16 {
  2286. - type Output = crate::codegen::m16x16;
  2287. -}
  2288. -impl Shuffle<[u32; 32]> for m16 {
  2289. - type Output = crate::codegen::m16x32;
  2290. -}
  2291. -
  2292. -impl Shuffle<[u32; 2]> for i32 {
  2293. - type Output = crate::codegen::i32x2;
  2294. -}
  2295. -impl Shuffle<[u32; 4]> for i32 {
  2296. - type Output = crate::codegen::i32x4;
  2297. -}
  2298. -impl Shuffle<[u32; 8]> for i32 {
  2299. - type Output = crate::codegen::i32x8;
  2300. -}
  2301. -impl Shuffle<[u32; 16]> for i32 {
  2302. - type Output = crate::codegen::i32x16;
  2303. +macro_rules! impl_shuffle {
  2304. + ($array:ty, $base:ty, $out:ty) => {
  2305. + impl Seal<$array> for $base {}
  2306. + impl Shuffle<$array> for $base {
  2307. + type Output = $out;
  2308. + }
  2309. + }
  2310. }
  2311. -impl Shuffle<[u32; 2]> for u32 {
  2312. - type Output = crate::codegen::u32x2;
  2313. -}
  2314. -impl Shuffle<[u32; 4]> for u32 {
  2315. - type Output = crate::codegen::u32x4;
  2316. -}
  2317. -impl Shuffle<[u32; 8]> for u32 {
  2318. - type Output = crate::codegen::u32x8;
  2319. -}
  2320. -impl Shuffle<[u32; 16]> for u32 {
  2321. - type Output = crate::codegen::u32x16;
  2322. -}
  2323. +impl_shuffle! { [u32; 2], i8, crate::codegen::i8x2 }
  2324. +impl_shuffle! { [u32; 4], i8, crate::codegen::i8x4 }
  2325. +impl_shuffle! { [u32; 8], i8, crate::codegen::i8x8 }
  2326. +impl_shuffle! { [u32; 16], i8, crate::codegen::i8x16 }
  2327. +impl_shuffle! { [u32; 32], i8, crate::codegen::i8x32 }
  2328. +impl_shuffle! { [u32; 64], i8, crate::codegen::i8x64 }
  2329. -impl Shuffle<[u32; 2]> for f32 {
  2330. - type Output = crate::codegen::f32x2;
  2331. -}
  2332. -impl Shuffle<[u32; 4]> for f32 {
  2333. - type Output = crate::codegen::f32x4;
  2334. -}
  2335. -impl Shuffle<[u32; 8]> for f32 {
  2336. - type Output = crate::codegen::f32x8;
  2337. -}
  2338. -impl Shuffle<[u32; 16]> for f32 {
  2339. - type Output = crate::codegen::f32x16;
  2340. -}
  2341. +impl_shuffle! { [u32; 2], u8, crate::codegen::u8x2 }
  2342. +impl_shuffle! { [u32; 4], u8, crate::codegen::u8x4 }
  2343. +impl_shuffle! { [u32; 8], u8, crate::codegen::u8x8 }
  2344. +impl_shuffle! { [u32; 16], u8, crate::codegen::u8x16 }
  2345. +impl_shuffle! { [u32; 32], u8, crate::codegen::u8x32 }
  2346. +impl_shuffle! { [u32; 64], u8, crate::codegen::u8x64 }
  2347. +
  2348. +impl_shuffle! { [u32; 2], m8, crate::codegen::m8x2 }
  2349. +impl_shuffle! { [u32; 4], m8, crate::codegen::m8x4 }
  2350. +impl_shuffle! { [u32; 8], m8, crate::codegen::m8x8 }
  2351. +impl_shuffle! { [u32; 16], m8, crate::codegen::m8x16 }
  2352. +impl_shuffle! { [u32; 32], m8, crate::codegen::m8x32 }
  2353. +impl_shuffle! { [u32; 64], m8, crate::codegen::m8x64 }
  2354. +
  2355. +impl_shuffle! { [u32; 2], i16, crate::codegen::i16x2 }
  2356. +impl_shuffle! { [u32; 4], i16, crate::codegen::i16x4 }
  2357. +impl_shuffle! { [u32; 8], i16, crate::codegen::i16x8 }
  2358. +impl_shuffle! { [u32; 16], i16, crate::codegen::i16x16 }
  2359. +impl_shuffle! { [u32; 32], i16, crate::codegen::i16x32 }
  2360. -impl Shuffle<[u32; 2]> for m32 {
  2361. - type Output = crate::codegen::m32x2;
  2362. -}
  2363. -impl Shuffle<[u32; 4]> for m32 {
  2364. - type Output = crate::codegen::m32x4;
  2365. -}
  2366. -impl Shuffle<[u32; 8]> for m32 {
  2367. - type Output = crate::codegen::m32x8;
  2368. -}
  2369. -impl Shuffle<[u32; 16]> for m32 {
  2370. - type Output = crate::codegen::m32x16;
  2371. -}
  2372. +impl_shuffle! { [u32; 2], u16, crate::codegen::u16x2 }
  2373. +impl_shuffle! { [u32; 4], u16, crate::codegen::u16x4 }
  2374. +impl_shuffle! { [u32; 8], u16, crate::codegen::u16x8 }
  2375. +impl_shuffle! { [u32; 16], u16, crate::codegen::u16x16 }
  2376. +impl_shuffle! { [u32; 32], u16, crate::codegen::u16x32 }
  2377. +
  2378. +impl_shuffle! { [u32; 2], m16, crate::codegen::m16x2 }
  2379. +impl_shuffle! { [u32; 4], m16, crate::codegen::m16x4 }
  2380. +impl_shuffle! { [u32; 8], m16, crate::codegen::m16x8 }
  2381. +impl_shuffle! { [u32; 16], m16, crate::codegen::m16x16 }
  2382. -/* FIXME: 64-bit single element vector
  2383. -impl Shuffle<[u32; 1]> for i64 {
  2384. - type Output = crate::codegen::i64x1;
  2385. -}
  2386. -*/
  2387. -impl Shuffle<[u32; 2]> for i64 {
  2388. - type Output = crate::codegen::i64x2;
  2389. -}
  2390. -impl Shuffle<[u32; 4]> for i64 {
  2391. - type Output = crate::codegen::i64x4;
  2392. -}
  2393. -impl Shuffle<[u32; 8]> for i64 {
  2394. - type Output = crate::codegen::i64x8;
  2395. -}
  2396. +impl_shuffle! { [u32; 2], i32, crate::codegen::i32x2 }
  2397. +impl_shuffle! { [u32; 4], i32, crate::codegen::i32x4 }
  2398. +impl_shuffle! { [u32; 8], i32, crate::codegen::i32x8 }
  2399. +impl_shuffle! { [u32; 16], i32, crate::codegen::i32x16 }
  2400. +
  2401. +impl_shuffle! { [u32; 2], u32, crate::codegen::u32x2 }
  2402. +impl_shuffle! { [u32; 4], u32, crate::codegen::u32x4 }
  2403. +impl_shuffle! { [u32; 8], u32, crate::codegen::u32x8 }
  2404. +impl_shuffle! { [u32; 16], u32, crate::codegen::u32x16 }
  2405. +
  2406. +impl_shuffle! { [u32; 2], f32, crate::codegen::f32x2 }
  2407. +impl_shuffle! { [u32; 4], f32, crate::codegen::f32x4 }
  2408. +impl_shuffle! { [u32; 8], f32, crate::codegen::f32x8 }
  2409. +impl_shuffle! { [u32; 16], f32, crate::codegen::f32x16 }
  2410. +
  2411. +impl_shuffle! { [u32; 2], m32, crate::codegen::m32x2 }
  2412. +impl_shuffle! { [u32; 4], m32, crate::codegen::m32x4 }
  2413. +impl_shuffle! { [u32; 8], m32, crate::codegen::m32x8 }
  2414. +impl_shuffle! { [u32; 16], m32, crate::codegen::m32x16 }
  2415. /* FIXME: 64-bit single element vector
  2416. -impl Shuffle<[u32; 1]> for u64 {
  2417. - type Output = crate::codegen::u64x1;
  2418. -}
  2419. +impl_shuffle! { [u32; 1], i64, crate::codegen::i64x1 }
  2420. */
  2421. -impl Shuffle<[u32; 2]> for u64 {
  2422. - type Output = crate::codegen::u64x2;
  2423. -}
  2424. -impl Shuffle<[u32; 4]> for u64 {
  2425. - type Output = crate::codegen::u64x4;
  2426. -}
  2427. -impl Shuffle<[u32; 8]> for u64 {
  2428. - type Output = crate::codegen::u64x8;
  2429. -}
  2430. +impl_shuffle! { [u32; 2], i64, crate::codegen::i64x2 }
  2431. +impl_shuffle! { [u32; 4], i64, crate::codegen::i64x4 }
  2432. +impl_shuffle! { [u32; 8], i64, crate::codegen::i64x8 }
  2433. /* FIXME: 64-bit single element vector
  2434. -impl Shuffle<[u32; 1]> for f64 {
  2435. - type Output = crate::codegen::f64x1;
  2436. -}
  2437. +impl_shuffle! { [u32; 1], i64, crate::codegen::i64x1 }
  2438. */
  2439. -impl Shuffle<[u32; 2]> for f64 {
  2440. - type Output = crate::codegen::f64x2;
  2441. -}
  2442. -impl Shuffle<[u32; 4]> for f64 {
  2443. - type Output = crate::codegen::f64x4;
  2444. -}
  2445. -impl Shuffle<[u32; 8]> for f64 {
  2446. - type Output = crate::codegen::f64x8;
  2447. -}
  2448. +impl_shuffle! { [u32; 2], u64, crate::codegen::u64x2 }
  2449. +impl_shuffle! { [u32; 4], u64, crate::codegen::u64x4 }
  2450. +impl_shuffle! { [u32; 8], u64, crate::codegen::u64x8 }
  2451. /* FIXME: 64-bit single element vector
  2452. -impl Shuffle<[u32; 1]> for m64 {
  2453. - type Output = crate::codegen::m64x1;
  2454. -}
  2455. +impl_shuffle! { [u32; 1], i64, crate::codegen::i64x1 }
  2456. */
  2457. -impl Shuffle<[u32; 2]> for m64 {
  2458. - type Output = crate::codegen::m64x2;
  2459. -}
  2460. -impl Shuffle<[u32; 4]> for m64 {
  2461. - type Output = crate::codegen::m64x4;
  2462. -}
  2463. -impl Shuffle<[u32; 8]> for m64 {
  2464. - type Output = crate::codegen::m64x8;
  2465. -}
  2466. +impl_shuffle! { [u32; 2], f64, crate::codegen::f64x2 }
  2467. +impl_shuffle! { [u32; 4], f64, crate::codegen::f64x4 }
  2468. +impl_shuffle! { [u32; 8], f64, crate::codegen::f64x8 }
  2469. +
  2470. +/* FIXME: 64-bit single element vector
  2471. +impl_shuffle! { [u32; 1], i64, crate::codegen::i64x1 }
  2472. +*/
  2473. +impl_shuffle! { [u32; 2], m64, crate::codegen::m64x2 }
  2474. +impl_shuffle! { [u32; 4], m64, crate::codegen::m64x4 }
  2475. +impl_shuffle! { [u32; 8], m64, crate::codegen::m64x8 }
  2476. -impl Shuffle<[u32; 2]> for isize {
  2477. - type Output = crate::codegen::isizex2;
  2478. -}
  2479. -impl Shuffle<[u32; 4]> for isize {
  2480. - type Output = crate::codegen::isizex4;
  2481. -}
  2482. -impl Shuffle<[u32; 8]> for isize {
  2483. - type Output = crate::codegen::isizex8;
  2484. -}
  2485. +impl_shuffle! { [u32; 2], isize, crate::codegen::isizex2 }
  2486. +impl_shuffle! { [u32; 4], isize, crate::codegen::isizex4 }
  2487. +impl_shuffle! { [u32; 8], isize, crate::codegen::isizex8 }
  2488. -impl Shuffle<[u32; 2]> for usize {
  2489. - type Output = crate::codegen::usizex2;
  2490. -}
  2491. -impl Shuffle<[u32; 4]> for usize {
  2492. - type Output = crate::codegen::usizex4;
  2493. -}
  2494. -impl Shuffle<[u32; 8]> for usize {
  2495. - type Output = crate::codegen::usizex8;
  2496. -}
  2497. +impl_shuffle! { [u32; 2], usize, crate::codegen::usizex2 }
  2498. +impl_shuffle! { [u32; 4], usize, crate::codegen::usizex4 }
  2499. +impl_shuffle! { [u32; 8], usize, crate::codegen::usizex8 }
  2500. +impl_shuffle! { [u32; 2], msize, crate::codegen::msizex2 }
  2501. +impl_shuffle! { [u32; 4], msize, crate::codegen::msizex4 }
  2502. +impl_shuffle! { [u32; 8], msize, crate::codegen::msizex8 }
  2503. +
  2504. +impl<T> Seal<[u32; 2]> for *const T {}
  2505. impl<T> Shuffle<[u32; 2]> for *const T {
  2506. type Output = crate::codegen::cptrx2<T>;
  2507. }
  2508. +impl<T> Seal<[u32; 4]> for *const T {}
  2509. impl<T> Shuffle<[u32; 4]> for *const T {
  2510. type Output = crate::codegen::cptrx4<T>;
  2511. }
  2512. +impl<T> Seal<[u32; 8]> for *const T {}
  2513. impl<T> Shuffle<[u32; 8]> for *const T {
  2514. type Output = crate::codegen::cptrx8<T>;
  2515. }
  2516. +impl<T> Seal<[u32; 2]> for *mut T {}
  2517. impl<T> Shuffle<[u32; 2]> for *mut T {
  2518. type Output = crate::codegen::mptrx2<T>;
  2519. }
  2520. +impl<T> Seal<[u32; 4]> for *mut T {}
  2521. impl<T> Shuffle<[u32; 4]> for *mut T {
  2522. type Output = crate::codegen::mptrx4<T>;
  2523. }
  2524. +impl<T> Seal<[u32; 8]> for *mut T {}
  2525. impl<T> Shuffle<[u32; 8]> for *mut T {
  2526. type Output = crate::codegen::mptrx8<T>;
  2527. }
  2528. -impl Shuffle<[u32; 2]> for msize {
  2529. - type Output = crate::codegen::msizex2;
  2530. -}
  2531. -impl Shuffle<[u32; 4]> for msize {
  2532. - type Output = crate::codegen::msizex4;
  2533. -}
  2534. -impl Shuffle<[u32; 8]> for msize {
  2535. - type Output = crate::codegen::msizex8;
  2536. -}
  2537. -
  2538. -impl Shuffle<[u32; 1]> for i128 {
  2539. - type Output = crate::codegen::i128x1;
  2540. -}
  2541. -impl Shuffle<[u32; 2]> for i128 {
  2542. - type Output = crate::codegen::i128x2;
  2543. -}
  2544. -impl Shuffle<[u32; 4]> for i128 {
  2545. - type Output = crate::codegen::i128x4;
  2546. -}
  2547. +impl_shuffle! { [u32; 1], i128, crate::codegen::i128x1 }
  2548. +impl_shuffle! { [u32; 2], i128, crate::codegen::i128x2 }
  2549. +impl_shuffle! { [u32; 4], i128, crate::codegen::i128x4 }
  2550. -impl Shuffle<[u32; 1]> for u128 {
  2551. - type Output = crate::codegen::u128x1;
  2552. -}
  2553. -impl Shuffle<[u32; 2]> for u128 {
  2554. - type Output = crate::codegen::u128x2;
  2555. -}
  2556. -impl Shuffle<[u32; 4]> for u128 {
  2557. - type Output = crate::codegen::u128x4;
  2558. -}
  2559. +impl_shuffle! { [u32; 1], u128, crate::codegen::u128x1 }
  2560. +impl_shuffle! { [u32; 2], u128, crate::codegen::u128x2 }
  2561. +impl_shuffle! { [u32; 4], u128, crate::codegen::u128x4 }
  2562. -impl Shuffle<[u32; 1]> for m128 {
  2563. - type Output = crate::codegen::m128x1;
  2564. -}
  2565. -impl Shuffle<[u32; 2]> for m128 {
  2566. - type Output = crate::codegen::m128x2;
  2567. -}
  2568. -impl Shuffle<[u32; 4]> for m128 {
  2569. - type Output = crate::codegen::m128x4;
  2570. -}
  2571. +impl_shuffle! { [u32; 1], m128, crate::codegen::m128x1 }
  2572. +impl_shuffle! { [u32; 2], m128, crate::codegen::m128x2 }
  2573. +impl_shuffle! { [u32; 4], m128, crate::codegen::m128x4 }
  2574. diff --git a/third_party/rust/packed_simd/src/codegen/shuffle1_dyn.rs b/third_party/rust/packed_simd/src/codegen/shuffle1_dyn.rs
  2575. --- a/third_party/rust/packed_simd/src/codegen/shuffle1_dyn.rs
  2576. +++ b/third_party/rust/packed_simd/src/codegen/shuffle1_dyn.rs
  2577. @@ -23,53 +23,32 @@ macro_rules! impl_fallback {
  2578. }
  2579. }
  2580. };
  2581. }
  2582. macro_rules! impl_shuffle1_dyn {
  2583. (u8x8) => {
  2584. cfg_if! {
  2585. - if #[cfg(all(any(target_arch = "x86", target_arch = "x86_64"),
  2586. - target_feature = "ssse3"))] {
  2587. - impl Shuffle1Dyn for u8x8 {
  2588. - type Indices = Self;
  2589. - #[inline]
  2590. - fn shuffle1_dyn(self, indices: Self::Indices) -> Self {
  2591. - #[cfg(target_arch = "x86")]
  2592. - use crate::arch::x86::_mm_shuffle_pi8;
  2593. - #[cfg(target_arch = "x86_64")]
  2594. - use crate::arch::x86_64::_mm_shuffle_pi8;
  2595. -
  2596. - unsafe {
  2597. - crate::mem::transmute(
  2598. - _mm_shuffle_pi8(
  2599. - crate::mem::transmute(self.0),
  2600. - crate::mem::transmute(indices.0)
  2601. - )
  2602. - )
  2603. - }
  2604. - }
  2605. - }
  2606. - } else if #[cfg(all(
  2607. + if #[cfg(all(
  2608. any(
  2609. - all(target_aarch = "aarch64", target_feature = "neon"),
  2610. - all(target_aarch = "arm", target_feature = "v7",
  2611. + all(target_arch = "aarch64", target_feature = "neon"),
  2612. + all(target_arch = "doesnotexist", target_feature = "v7",
  2613. target_feature = "neon")
  2614. ),
  2615. any(feature = "core_arch", libcore_neon)
  2616. )
  2617. )] {
  2618. impl Shuffle1Dyn for u8x8 {
  2619. type Indices = Self;
  2620. #[inline]
  2621. fn shuffle1_dyn(self, indices: Self::Indices) -> Self {
  2622. - #[cfg(targt_arch = "aarch64")]
  2623. + #[cfg(target_arch = "aarch64")]
  2624. use crate::arch::aarch64::vtbl1_u8;
  2625. - #[cfg(targt_arch = "arm")]
  2626. + #[cfg(target_arch = "doesnotexist")]
  2627. use crate::arch::arm::vtbl1_u8;
  2628. // This is safe because the binary is compiled with
  2629. // neon enabled at compile-time and can therefore only
  2630. // run on CPUs that have it enabled.
  2631. unsafe {
  2632. Simd(mem::transmute(
  2633. vtbl1_u8(mem::transmute(self.0),
  2634. @@ -101,17 +80,17 @@ macro_rules! impl_shuffle1_dyn {
  2635. unsafe {
  2636. Simd(mem::transmute(
  2637. _mm_shuffle_epi8(mem::transmute(self.0),
  2638. crate::mem::transmute(indices))
  2639. ))
  2640. }
  2641. }
  2642. }
  2643. - } else if #[cfg(all(target_aarch = "aarch64", target_feature = "neon",
  2644. + } else if #[cfg(all(target_arch = "aarch64", target_feature = "neon",
  2645. any(feature = "core_arch", libcore_neon)))] {
  2646. impl Shuffle1Dyn for u8x16 {
  2647. type Indices = Self;
  2648. #[inline]
  2649. fn shuffle1_dyn(self, indices: Self::Indices) -> Self {
  2650. use crate::arch::aarch64::vqtbl1q_u8;
  2651. // This is safe because the binary is compiled with
  2652. @@ -120,17 +99,17 @@ macro_rules! impl_shuffle1_dyn {
  2653. unsafe {
  2654. Simd(mem::transmute(
  2655. vqtbl1q_u8(mem::transmute(self.0),
  2656. crate::mem::transmute(indices.0))
  2657. ))
  2658. }
  2659. }
  2660. }
  2661. - } else if #[cfg(all(target_aarch = "arm", target_feature = "v7",
  2662. + } else if #[cfg(all(target_arch = "doesnotexist", target_feature = "v7",
  2663. target_feature = "neon",
  2664. any(feature = "core_arch", libcore_neon)))] {
  2665. impl Shuffle1Dyn for u8x16 {
  2666. type Indices = Self;
  2667. #[inline]
  2668. fn shuffle1_dyn(self, indices: Self::Indices) -> Self {
  2669. use crate::arch::arm::vtbl2_u8;
  2670. diff --git a/third_party/rust/packed_simd/src/codegen/vPtr.rs b/third_party/rust/packed_simd/src/codegen/vPtr.rs
  2671. --- a/third_party/rust/packed_simd/src/codegen/vPtr.rs
  2672. +++ b/third_party/rust/packed_simd/src/codegen/vPtr.rs
  2673. @@ -3,23 +3,25 @@
  2674. macro_rules! impl_simd_ptr {
  2675. ([$ptr_ty:ty; $elem_count:expr]: $tuple_id:ident | $ty:ident
  2676. | $($tys:ty),*) => {
  2677. #[derive(Copy, Clone)]
  2678. #[repr(simd)]
  2679. pub struct $tuple_id<$ty>($(crate $tys),*);
  2680. //^^^^^^^ leaked through SimdArray
  2681. + impl<$ty> crate::sealed::Seal for [$ptr_ty; $elem_count] {}
  2682. impl<$ty> crate::sealed::SimdArray for [$ptr_ty; $elem_count] {
  2683. type Tuple = $tuple_id<$ptr_ty>;
  2684. type T = $ptr_ty;
  2685. const N: usize = $elem_count;
  2686. type NT = [u32; $elem_count];
  2687. }
  2688. + impl<$ty> crate::sealed::Seal for $tuple_id<$ptr_ty> {}
  2689. impl<$ty> crate::sealed::Simd for $tuple_id<$ptr_ty> {
  2690. type Element = $ptr_ty;
  2691. const LANES: usize = $elem_count;
  2692. type LanesType = [u32; $elem_count];
  2693. }
  2694. }
  2695. }
  2696. diff --git a/third_party/rust/packed_simd/src/lib.rs b/third_party/rust/packed_simd/src/lib.rs
  2697. --- a/third_party/rust/packed_simd/src/lib.rs
  2698. +++ b/third_party/rust/packed_simd/src/lib.rs
  2699. @@ -196,40 +196,45 @@
  2700. //!
  2701. //! * casting from an `f64` to an `f32` **rounds to nearest, ties to even**.
  2702. //!
  2703. //! Numeric casts are not very "precise": sometimes lossy, sometimes value
  2704. //! preserving, etc.
  2705. #![feature(
  2706. repr_simd,
  2707. + rustc_attrs,
  2708. const_fn,
  2709. platform_intrinsics,
  2710. stdsimd,
  2711. aarch64_target_feature,
  2712. arm_target_feature,
  2713. link_llvm_intrinsics,
  2714. core_intrinsics,
  2715. stmt_expr_attributes,
  2716. - align_offset,
  2717. - mmx_target_feature,
  2718. crate_visibility_modifier,
  2719. custom_inner_attributes
  2720. )]
  2721. #![allow(non_camel_case_types, non_snake_case,
  2722. - clippy::cast_possible_truncation,
  2723. - clippy::cast_lossless,
  2724. - clippy::cast_possible_wrap,
  2725. - clippy::cast_precision_loss,
  2726. - // This lint is currently broken for generic code
  2727. - // See https://github.com/rust-lang/rust-clippy/issues/3410
  2728. - clippy::use_self
  2729. + // FIXME: these types are unsound in C FFI already
  2730. + // See https://github.com/rust-lang/rust/issues/53346
  2731. + improper_ctypes_definitions,
  2732. + clippy::cast_possible_truncation,
  2733. + clippy::cast_lossless,
  2734. + clippy::cast_possible_wrap,
  2735. + clippy::cast_precision_loss,
  2736. + // TODO: manually add the `#[must_use]` attribute where appropriate
  2737. + clippy::must_use_candidate,
  2738. + // This lint is currently broken for generic code
  2739. + // See https://github.com/rust-lang/rust-clippy/issues/3410
  2740. + clippy::use_self,
  2741. + clippy::wrong_self_convention,
  2742. )]
  2743. #![cfg_attr(test, feature(hashmap_internals))]
  2744. -#![deny(warnings, rust_2018_idioms, clippy::missing_inline_in_public_items)]
  2745. +#![deny(rust_2018_idioms, clippy::missing_inline_in_public_items)]
  2746. #![no_std]
  2747. use cfg_if::cfg_if;
  2748. cfg_if! {
  2749. if #[cfg(feature = "core_arch")] {
  2750. #[allow(unused_imports)]
  2751. use core_arch as arch;
  2752. @@ -251,16 +256,18 @@ use core::{
  2753. #[macro_use]
  2754. mod testing;
  2755. #[macro_use]
  2756. mod api;
  2757. mod codegen;
  2758. mod sealed;
  2759. +pub use crate::sealed::{Simd as SimdVector, Shuffle, SimdArray, Mask};
  2760. +
  2761. /// Packed SIMD vector type.
  2762. ///
  2763. /// # Examples
  2764. ///
  2765. /// ```
  2766. /// # use packed_simd::Simd;
  2767. /// let v = Simd::<[i32; 4]>::new(0, 1, 2, 3);
  2768. /// assert_eq!(v.extract(2), 2);
  2769. @@ -271,16 +278,18 @@ pub struct Simd<A: sealed::SimdArray>(
  2770. // FIXME: this type should be private,
  2771. // but it currently must be public for the
  2772. // `shuffle!` macro to work: it needs to
  2773. // access the internal `repr(simd)` type
  2774. // to call the shuffle intrinsics.
  2775. #[doc(hidden)] pub <A as sealed::SimdArray>::Tuple,
  2776. );
  2777. +impl<A: sealed::SimdArray> sealed::Seal for Simd<A> {}
  2778. +
  2779. /// Wrapper over `T` implementing a lexicoraphical order via the `PartialOrd`
  2780. /// and/or `Ord` traits.
  2781. #[repr(transparent)]
  2782. #[derive(Copy, Clone, Debug)]
  2783. #[allow(clippy::missing_inline_in_public_items)]
  2784. pub struct LexicographicallyOrdered<T>(T);
  2785. mod masks;
  2786. diff --git a/third_party/rust/packed_simd/src/masks.rs b/third_party/rust/packed_simd/src/masks.rs
  2787. --- a/third_party/rust/packed_simd/src/masks.rs
  2788. +++ b/third_party/rust/packed_simd/src/masks.rs
  2789. @@ -1,17 +1,19 @@
  2790. //! Mask types
  2791. macro_rules! impl_mask_ty {
  2792. ($id:ident : $elem_ty:ident | #[$doc:meta]) => {
  2793. #[$doc]
  2794. #[derive(Copy, Clone)]
  2795. pub struct $id($elem_ty);
  2796. + impl crate::sealed::Seal for $id {}
  2797. impl crate::sealed::Mask for $id {
  2798. + #[inline]
  2799. fn test(&self) -> bool {
  2800. $id::test(self)
  2801. }
  2802. }
  2803. impl $id {
  2804. /// Instantiate a mask with `value`
  2805. #[inline]
  2806. diff --git a/third_party/rust/packed_simd/src/sealed.rs b/third_party/rust/packed_simd/src/sealed.rs
  2807. --- a/third_party/rust/packed_simd/src/sealed.rs
  2808. +++ b/third_party/rust/packed_simd/src/sealed.rs
  2809. @@ -1,41 +1,42 @@
  2810. //! Sealed traits
  2811. +/// A sealed trait, this is logically private to the crate
  2812. +/// and will prevent implementations from outside the crate
  2813. +pub trait Seal<T = ()> {}
  2814. +
  2815. /// Trait implemented by arrays that can be SIMD types.
  2816. -#[doc(hidden)]
  2817. -pub trait SimdArray {
  2818. +pub trait SimdArray: Seal {
  2819. /// The type of the #[repr(simd)] type.
  2820. type Tuple: Copy + Clone;
  2821. /// The element type of the vector.
  2822. type T;
  2823. /// The number of elements in the array.
  2824. const N: usize;
  2825. /// The type: `[u32; Self::N]`.
  2826. type NT;
  2827. }
  2828. /// This traits is used to constraint the arguments
  2829. /// and result type of the portable shuffles.
  2830. #[doc(hidden)]
  2831. -pub trait Shuffle<Lanes> {
  2832. +pub trait Shuffle<Lanes>: Seal<Lanes> {
  2833. // Lanes is a `[u32; N]` where `N` is the number of vector lanes
  2834. /// The result type of the shuffle.
  2835. type Output;
  2836. }
  2837. /// This trait is implemented by all SIMD vector types.
  2838. -#[doc(hidden)]
  2839. -pub trait Simd {
  2840. +pub trait Simd: Seal {
  2841. /// Element type of the SIMD vector
  2842. type Element;
  2843. /// The number of elements in the SIMD vector.
  2844. const LANES: usize;
  2845. /// The type: `[u32; Self::N]`.
  2846. type LanesType;
  2847. }
  2848. /// This trait is implemented by all mask types
  2849. -#[doc(hidden)]
  2850. -pub trait Mask {
  2851. +pub trait Mask: Seal {
  2852. fn test(&self) -> bool;
  2853. }
  2854. diff --git a/third_party/rust/packed_simd/src/testing/utils.rs b/third_party/rust/packed_simd/src/testing/utils.rs
  2855. --- a/third_party/rust/packed_simd/src/testing/utils.rs
  2856. +++ b/third_party/rust/packed_simd/src/testing/utils.rs
  2857. @@ -1,11 +1,13 @@
  2858. //! Testing utilities
  2859. #![allow(dead_code)]
  2860. +// FIXME: Or don't. But it's true this is a problematic comparison.
  2861. +#![allow(clippy::neg_cmp_op_on_partial_ord)]
  2862. use crate::{cmp::PartialOrd, fmt::Debug, LexicographicallyOrdered};
  2863. /// Tests PartialOrd for `a` and `b` where `a < b` is true.
  2864. pub fn test_lt<T>(
  2865. a: LexicographicallyOrdered<T>, b: LexicographicallyOrdered<T>,
  2866. ) where
  2867. LexicographicallyOrdered<T>: Debug + PartialOrd,
  2868. @@ -14,37 +16,42 @@ pub fn test_lt<T>(
  2869. assert!(b > a, "{:?}, {:?}", a, b);
  2870. assert!(!(a == b), "{:?}, {:?}", a, b);
  2871. assert!(a != b, "{:?}, {:?}", a, b);
  2872. assert!(a <= b, "{:?}, {:?}", a, b);
  2873. assert!(b >= a, "{:?}, {:?}", a, b);
  2874. - // Irreflexivity
  2875. - assert!(!(a < a), "{:?}, {:?}", a, b);
  2876. - assert!(!(b < b), "{:?}, {:?}", a, b);
  2877. - assert!(!(a > a), "{:?}, {:?}", a, b);
  2878. - assert!(!(b > b), "{:?}, {:?}", a, b);
  2879. + // The elegance of the mathematical expression of irreflexivity is more
  2880. + // than clippy can handle.
  2881. + #[allow(clippy::eq_op)]
  2882. + {
  2883. + // Irreflexivity
  2884. + assert!(!(a < a), "{:?}, {:?}", a, b);
  2885. + assert!(!(b < b), "{:?}, {:?}", a, b);
  2886. + assert!(!(a > a), "{:?}, {:?}", a, b);
  2887. + assert!(!(b > b), "{:?}, {:?}", a, b);
  2888. - assert!(a <= a, "{:?}, {:?}", a, b);
  2889. - assert!(b <= b, "{:?}, {:?}", a, b);
  2890. + assert!(a <= a, "{:?}, {:?}", a, b);
  2891. + assert!(b <= b, "{:?}, {:?}", a, b);
  2892. + }
  2893. }
  2894. /// Tests PartialOrd for `a` and `b` where `a <= b` is true.
  2895. pub fn test_le<T>(
  2896. a: LexicographicallyOrdered<T>, b: LexicographicallyOrdered<T>,
  2897. ) where
  2898. LexicographicallyOrdered<T>: Debug + PartialOrd,
  2899. {
  2900. assert!(a <= b, "{:?}, {:?}", a, b);
  2901. assert!(b >= a, "{:?}, {:?}", a, b);
  2902. - assert!(a == b || a < b, "{:?}, {:?}", a, b);
  2903. - assert!(a == b || b > a, "{:?}, {:?}", a, b);
  2904. + assert!(a <= b, "{:?}, {:?}", a, b);
  2905. + assert!(b >= a, "{:?}, {:?}", a, b);
  2906. if a == b {
  2907. assert!(!(a < b), "{:?}, {:?}", a, b);
  2908. assert!(!(b > a), "{:?}, {:?}", a, b);
  2909. assert!(!(a != b), "{:?}, {:?}", a, b);
  2910. } else {
  2911. assert!(a != b, "{:?}, {:?}", a, b);
  2912. diff --git a/third_party/rust/packed_simd/src/v128.rs b/third_party/rust/packed_simd/src/v128.rs
  2913. --- a/third_party/rust/packed_simd/src/v128.rs
  2914. +++ b/third_party/rust/packed_simd/src/v128.rs
  2915. @@ -1,80 +1,80 @@
  2916. //! 128-bit wide vector types
  2917. -#![rustfmt::skip]
  2918. +#[rustfmt::skip]
  2919. use crate::*;
  2920. -impl_i!([i8; 16]: i8x16, m8x16 | i8 | test_v128 |
  2921. +impl_i!([i8; 16]: i8x16, m8x16 | i8, u16 | test_v128 |
  2922. x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15 |
  2923. From: |
  2924. /// A 128-bit vector with 16 `i8` lanes.
  2925. );
  2926. -impl_u!([u8; 16]: u8x16, m8x16 | u8 | test_v128 |
  2927. +impl_u!([u8; 16]: u8x16, m8x16 | u8, u16 | test_v128 |
  2928. x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15 |
  2929. From: |
  2930. /// A 128-bit vector with 16 `u8` lanes.
  2931. );
  2932. -impl_m!([m8; 16]: m8x16 | i8 | test_v128 |
  2933. +impl_m!([m8; 16]: m8x16 | i8, u16 | test_v128 |
  2934. x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15 |
  2935. From: m16x16 |
  2936. /// A 128-bit vector mask with 16 `m8` lanes.
  2937. );
  2938. -impl_i!([i16; 8]: i16x8, m16x8 | i16 | test_v128 | x0, x1, x2, x3, x4, x5, x6, x7 |
  2939. +impl_i!([i16; 8]: i16x8, m16x8 | i16, u8 | test_v128 | x0, x1, x2, x3, x4, x5, x6, x7 |
  2940. From: i8x8, u8x8 |
  2941. /// A 128-bit vector with 8 `i16` lanes.
  2942. );
  2943. -impl_u!([u16; 8]: u16x8, m16x8 | u16| test_v128 | x0, x1, x2, x3, x4, x5, x6, x7 |
  2944. +impl_u!([u16; 8]: u16x8, m16x8 | u16, u8 | test_v128 | x0, x1, x2, x3, x4, x5, x6, x7 |
  2945. From: u8x8 |
  2946. /// A 128-bit vector with 8 `u16` lanes.
  2947. );
  2948. -impl_m!([m16; 8]: m16x8 | i16 | test_v128 | x0, x1, x2, x3, x4, x5, x6, x7 |
  2949. +impl_m!([m16; 8]: m16x8 | i16, u8 | test_v128 | x0, x1, x2, x3, x4, x5, x6, x7 |
  2950. From: m8x8, m32x8 |
  2951. /// A 128-bit vector mask with 8 `m16` lanes.
  2952. );
  2953. -impl_i!([i32; 4]: i32x4, m32x4 | i32 | test_v128 | x0, x1, x2, x3 |
  2954. +impl_i!([i32; 4]: i32x4, m32x4 | i32, u8 | test_v128 | x0, x1, x2, x3 |
  2955. From: i8x4, u8x4, i16x4, u16x4 |
  2956. /// A 128-bit vector with 4 `i32` lanes.
  2957. );
  2958. -impl_u!([u32; 4]: u32x4, m32x4 | u32| test_v128 | x0, x1, x2, x3 |
  2959. +impl_u!([u32; 4]: u32x4, m32x4 | u32, u8 | test_v128 | x0, x1, x2, x3 |
  2960. From: u8x4, u16x4 |
  2961. /// A 128-bit vector with 4 `u32` lanes.
  2962. );
  2963. impl_f!([f32; 4]: f32x4, m32x4 | f32 | test_v128 | x0, x1, x2, x3 |
  2964. From: i8x4, u8x4, i16x4, u16x4 |
  2965. /// A 128-bit vector with 4 `f32` lanes.
  2966. );
  2967. -impl_m!([m32; 4]: m32x4 | i32 | test_v128 | x0, x1, x2, x3 |
  2968. +impl_m!([m32; 4]: m32x4 | i32, u8 | test_v128 | x0, x1, x2, x3 |
  2969. From: m8x4, m16x4, m64x4 |
  2970. /// A 128-bit vector mask with 4 `m32` lanes.
  2971. );
  2972. -impl_i!([i64; 2]: i64x2, m64x2 | i64 | test_v128 | x0, x1 |
  2973. +impl_i!([i64; 2]: i64x2, m64x2 | i64, u8 | test_v128 | x0, x1 |
  2974. From: i8x2, u8x2, i16x2, u16x2, i32x2, u32x2 |
  2975. /// A 128-bit vector with 2 `i64` lanes.
  2976. );
  2977. -impl_u!([u64; 2]: u64x2, m64x2 | u64 | test_v128 | x0, x1 |
  2978. +impl_u!([u64; 2]: u64x2, m64x2 | u64, u8 | test_v128 | x0, x1 |
  2979. From: u8x2, u16x2, u32x2 |
  2980. /// A 128-bit vector with 2 `u64` lanes.
  2981. );
  2982. impl_f!([f64; 2]: f64x2, m64x2 | f64 | test_v128 | x0, x1 |
  2983. From: i8x2, u8x2, i16x2, u16x2, i32x2, u32x2, f32x2 |
  2984. /// A 128-bit vector with 2 `f64` lanes.
  2985. );
  2986. -impl_m!([m64; 2]: m64x2 | i64 | test_v128 | x0, x1 |
  2987. +impl_m!([m64; 2]: m64x2 | i64, u8 | test_v128 | x0, x1 |
  2988. From: m8x2, m16x2, m32x2, m128x2 |
  2989. /// A 128-bit vector mask with 2 `m64` lanes.
  2990. );
  2991. -impl_i!([i128; 1]: i128x1, m128x1 | i128 | test_v128 | x0 |
  2992. +impl_i!([i128; 1]: i128x1, m128x1 | i128, u8 | test_v128 | x0 |
  2993. From: /*i8x1, u8x1, i16x1, u16x1, i32x1, u32x1, i64x1, u64x1 */ | // FIXME: unary small vector types
  2994. /// A 128-bit vector with 1 `i128` lane.
  2995. );
  2996. -impl_u!([u128; 1]: u128x1, m128x1 | u128 | test_v128 | x0 |
  2997. +impl_u!([u128; 1]: u128x1, m128x1 | u128, u8 | test_v128 | x0 |
  2998. From: /*u8x1, u16x1, u32x1, u64x1 */ | // FIXME: unary small vector types
  2999. /// A 128-bit vector with 1 `u128` lane.
  3000. );
  3001. -impl_m!([m128; 1]: m128x1 | i128 | test_v128 | x0 |
  3002. +impl_m!([m128; 1]: m128x1 | i128, u8 | test_v128 | x0 |
  3003. From: /*m8x1, m16x1, m32x1, m64x1 */ | // FIXME: unary small vector types
  3004. /// A 128-bit vector mask with 1 `m128` lane.
  3005. );
  3006. diff --git a/third_party/rust/packed_simd/src/v16.rs b/third_party/rust/packed_simd/src/v16.rs
  3007. --- a/third_party/rust/packed_simd/src/v16.rs
  3008. +++ b/third_party/rust/packed_simd/src/v16.rs
  3009. @@ -1,16 +1,16 @@
  3010. //! 16-bit wide vector types
  3011. use crate::*;
  3012. -impl_i!([i8; 2]: i8x2, m8x2 | i8 | test_v16 | x0, x1 |
  3013. +impl_i!([i8; 2]: i8x2, m8x2 | i8, u8 | test_v16 | x0, x1 |
  3014. From: |
  3015. /// A 16-bit vector with 2 `i8` lanes.
  3016. );
  3017. -impl_u!([u8; 2]: u8x2, m8x2 | u8 | test_v16 | x0, x1 |
  3018. +impl_u!([u8; 2]: u8x2, m8x2 | u8, u8 | test_v16 | x0, x1 |
  3019. From: |
  3020. /// A 16-bit vector with 2 `u8` lanes.
  3021. );
  3022. -impl_m!([m8; 2]: m8x2 | i8 | test_v16 | x0, x1 |
  3023. +impl_m!([m8; 2]: m8x2 | i8, u8 | test_v16 | x0, x1 |
  3024. From: m16x2, m32x2, m64x2, m128x2 |
  3025. /// A 16-bit vector mask with 2 `m8` lanes.
  3026. );
  3027. diff --git a/third_party/rust/packed_simd/src/v256.rs b/third_party/rust/packed_simd/src/v256.rs
  3028. --- a/third_party/rust/packed_simd/src/v256.rs
  3029. +++ b/third_party/rust/packed_simd/src/v256.rs
  3030. @@ -1,86 +1,86 @@
  3031. //! 256-bit wide vector types
  3032. -#![rustfmt::skip]
  3033. +#[rustfmt::skip]
  3034. use crate::*;
  3035. -impl_i!([i8; 32]: i8x32, m8x32 | i8 | test_v256 |
  3036. +impl_i!([i8; 32]: i8x32, m8x32 | i8, u32 | test_v256 |
  3037. x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15,
  3038. x16, x17, x18, x19, x20, x21, x22, x23, x24, x25, x26, x27, x28, x29, x30, x31 |
  3039. From: |
  3040. /// A 256-bit vector with 32 `i8` lanes.
  3041. );
  3042. -impl_u!([u8; 32]: u8x32, m8x32 | u8 | test_v256 |
  3043. +impl_u!([u8; 32]: u8x32, m8x32 | u8, u32 | test_v256 |
  3044. x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15,
  3045. x16, x17, x18, x19, x20, x21, x22, x23, x24, x25, x26, x27, x28, x29, x30, x31 |
  3046. From: |
  3047. /// A 256-bit vector with 32 `u8` lanes.
  3048. );
  3049. -impl_m!([m8; 32]: m8x32 | i8 | test_v256 |
  3050. +impl_m!([m8; 32]: m8x32 | i8, u32 | test_v256 |
  3051. x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15,
  3052. x16, x17, x18, x19, x20, x21, x22, x23, x24, x25, x26, x27, x28, x29, x30, x31 |
  3053. From: |
  3054. /// A 256-bit vector mask with 32 `m8` lanes.
  3055. );
  3056. -impl_i!([i16; 16]: i16x16, m16x16 | i16 | test_v256 |
  3057. +impl_i!([i16; 16]: i16x16, m16x16 | i16, u16 | test_v256 |
  3058. x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15 |
  3059. From: i8x16, u8x16 |
  3060. /// A 256-bit vector with 16 `i16` lanes.
  3061. );
  3062. -impl_u!([u16; 16]: u16x16, m16x16 | u16 | test_v256 |
  3063. +impl_u!([u16; 16]: u16x16, m16x16 | u16, u16 | test_v256 |
  3064. x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15 |
  3065. From: u8x16 |
  3066. /// A 256-bit vector with 16 `u16` lanes.
  3067. );
  3068. -impl_m!([m16; 16]: m16x16 | i16 | test_v256 |
  3069. +impl_m!([m16; 16]: m16x16 | i16, u16 | test_v256 |
  3070. x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15 |
  3071. From: m8x16 |
  3072. /// A 256-bit vector mask with 16 `m16` lanes.
  3073. );
  3074. -impl_i!([i32; 8]: i32x8, m32x8 | i32 | test_v256 | x0, x1, x2, x3, x4, x5, x6, x7 |
  3075. +impl_i!([i32; 8]: i32x8, m32x8 | i32, u8 | test_v256 | x0, x1, x2, x3, x4, x5, x6, x7 |
  3076. From: i8x8, u8x8, i16x8, u16x8 |
  3077. /// A 256-bit vector with 8 `i32` lanes.
  3078. );
  3079. -impl_u!([u32; 8]: u32x8, m32x8 | u32 | test_v256 | x0, x1, x2, x3, x4, x5, x6, x7 |
  3080. +impl_u!([u32; 8]: u32x8, m32x8 | u32, u8 | test_v256 | x0, x1, x2, x3, x4, x5, x6, x7 |
  3081. From: u8x8, u16x8 |
  3082. /// A 256-bit vector with 8 `u32` lanes.
  3083. );
  3084. impl_f!([f32; 8]: f32x8, m32x8 | f32 | test_v256 | x0, x1, x2, x3, x4, x5, x6, x7 |
  3085. From: i8x8, u8x8, i16x8, u16x8 |
  3086. /// A 256-bit vector with 8 `f32` lanes.
  3087. );
  3088. -impl_m!([m32; 8]: m32x8 | i32 | test_v256 | x0, x1, x2, x3, x4, x5, x6, x7 |
  3089. +impl_m!([m32; 8]: m32x8 | i32, u8 | test_v256 | x0, x1, x2, x3, x4, x5, x6, x7 |
  3090. From: m8x8, m16x8 |
  3091. /// A 256-bit vector mask with 8 `m32` lanes.
  3092. );
  3093. -impl_i!([i64; 4]: i64x4, m64x4 | i64 | test_v256 | x0, x1, x2, x3 |
  3094. +impl_i!([i64; 4]: i64x4, m64x4 | i64, u8 | test_v256 | x0, x1, x2, x3 |
  3095. From: i8x4, u8x4, i16x4, u16x4, i32x4, u32x4 |
  3096. /// A 256-bit vector with 4 `i64` lanes.
  3097. );
  3098. -impl_u!([u64; 4]: u64x4, m64x4 | u64 | test_v256 | x0, x1, x2, x3 |
  3099. +impl_u!([u64; 4]: u64x4, m64x4 | u64, u8 | test_v256 | x0, x1, x2, x3 |
  3100. From: u8x4, u16x4, u32x4 |
  3101. /// A 256-bit vector with 4 `u64` lanes.
  3102. );
  3103. impl_f!([f64; 4]: f64x4, m64x4 | f64 | test_v256 | x0, x1, x2, x3 |
  3104. From: i8x4, u8x4, i16x4, u16x4, i32x4, u32x4, f32x4 |
  3105. /// A 256-bit vector with 4 `f64` lanes.
  3106. );
  3107. -impl_m!([m64; 4]: m64x4 | i64 | test_v256 | x0, x1, x2, x3 |
  3108. +impl_m!([m64; 4]: m64x4 | i64, u8 | test_v256 | x0, x1, x2, x3 |
  3109. From: m8x4, m16x4, m32x4 |
  3110. /// A 256-bit vector mask with 4 `m64` lanes.
  3111. );
  3112. -impl_i!([i128; 2]: i128x2, m128x2 | i128 | test_v256 | x0, x1 |
  3113. +impl_i!([i128; 2]: i128x2, m128x2 | i128, u8 | test_v256 | x0, x1 |
  3114. From: i8x2, u8x2, i16x2, u16x2, i32x2, u32x2, i64x2, u64x2 |
  3115. /// A 256-bit vector with 2 `i128` lanes.
  3116. );
  3117. -impl_u!([u128; 2]: u128x2, m128x2 | u128 | test_v256 | x0, x1 |
  3118. +impl_u!([u128; 2]: u128x2, m128x2 | u128, u8 | test_v256 | x0, x1 |
  3119. From: u8x2, u16x2, u32x2, u64x2 |
  3120. /// A 256-bit vector with 2 `u128` lanes.
  3121. );
  3122. -impl_m!([m128; 2]: m128x2 | i128 | test_v256 | x0, x1 |
  3123. +impl_m!([m128; 2]: m128x2 | i128, u8 | test_v256 | x0, x1 |
  3124. From: m8x2, m16x2, m32x2, m64x2 |
  3125. /// A 256-bit vector mask with 2 `m128` lanes.
  3126. );
  3127. diff --git a/third_party/rust/packed_simd/src/v32.rs b/third_party/rust/packed_simd/src/v32.rs
  3128. --- a/third_party/rust/packed_simd/src/v32.rs
  3129. +++ b/third_party/rust/packed_simd/src/v32.rs
  3130. @@ -1,29 +1,29 @@
  3131. //! 32-bit wide vector types
  3132. use crate::*;
  3133. -impl_i!([i8; 4]: i8x4, m8x4 | i8 | test_v32 | x0, x1, x2, x3 |
  3134. +impl_i!([i8; 4]: i8x4, m8x4 | i8, u8 | test_v32 | x0, x1, x2, x3 |
  3135. From: |
  3136. /// A 32-bit vector with 4 `i8` lanes.
  3137. );
  3138. -impl_u!([u8; 4]: u8x4, m8x4 | u8 | test_v32 | x0, x1, x2, x3 |
  3139. +impl_u!([u8; 4]: u8x4, m8x4 | u8, u8 | test_v32 | x0, x1, x2, x3 |
  3140. From: |
  3141. /// A 32-bit vector with 4 `u8` lanes.
  3142. );
  3143. -impl_m!([m8; 4]: m8x4 | i8 | test_v32 | x0, x1, x2, x3 |
  3144. +impl_m!([m8; 4]: m8x4 | i8, u8 | test_v32 | x0, x1, x2, x3 |
  3145. From: m16x4, m32x4, m64x4 |
  3146. /// A 32-bit vector mask with 4 `m8` lanes.
  3147. );
  3148. -impl_i!([i16; 2]: i16x2, m16x2 | i16 | test_v32 | x0, x1 |
  3149. +impl_i!([i16; 2]: i16x2, m16x2 | i16, u8 | test_v32 | x0, x1 |
  3150. From: i8x2, u8x2 |
  3151. /// A 32-bit vector with 2 `i16` lanes.
  3152. );
  3153. -impl_u!([u16; 2]: u16x2, m16x2 | u16 | test_v32 | x0, x1 |
  3154. +impl_u!([u16; 2]: u16x2, m16x2 | u16, u8 | test_v32 | x0, x1 |
  3155. From: u8x2 |
  3156. /// A 32-bit vector with 2 `u16` lanes.
  3157. );
  3158. -impl_m!([m16; 2]: m16x2 | i16 | test_v32 | x0, x1 |
  3159. +impl_m!([m16; 2]: m16x2 | i16, u8 | test_v32 | x0, x1 |
  3160. From: m8x2, m32x2, m64x2, m128x2 |
  3161. /// A 32-bit vector mask with 2 `m16` lanes.
  3162. );
  3163. diff --git a/third_party/rust/packed_simd/src/v512.rs b/third_party/rust/packed_simd/src/v512.rs
  3164. --- a/third_party/rust/packed_simd/src/v512.rs
  3165. +++ b/third_party/rust/packed_simd/src/v512.rs
  3166. @@ -1,99 +1,99 @@
  3167. //! 512-bit wide vector types
  3168. -#![rustfmt::skip]
  3169. +#[rustfmt::skip]
  3170. use crate::*;
  3171. -impl_i!([i8; 64]: i8x64, m8x64 | i8 | test_v512 |
  3172. +impl_i!([i8; 64]: i8x64, m8x64 | i8, u64 | test_v512 |
  3173. x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15,
  3174. x16, x17, x18, x19, x20, x21, x22, x23, x24, x25, x26, x27, x28, x29, x30, x31,
  3175. x32, x33, x34, x35, x36, x37, x38, x39, x40, x41, x42, x43, x44, x45, x46, x47,
  3176. x48, x49, x50, x51, x52, x53, x54, x55, x56, x57, x58, x59, x60, x61, x62, x63 |
  3177. From: |
  3178. /// A 512-bit vector with 64 `i8` lanes.
  3179. );
  3180. -impl_u!([u8; 64]: u8x64, m8x64 | u8 | test_v512 |
  3181. +impl_u!([u8; 64]: u8x64, m8x64 | u8, u64 | test_v512 |
  3182. x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15,
  3183. x16, x17, x18, x19, x20, x21, x22, x23, x24, x25, x26, x27, x28, x29, x30, x31,
  3184. x32, x33, x34, x35, x36, x37, x38, x39, x40, x41, x42, x43, x44, x45, x46, x47,
  3185. x48, x49, x50, x51, x52, x53, x54, x55, x56, x57, x58, x59, x60, x61, x62, x63 |
  3186. From: |
  3187. /// A 512-bit vector with 64 `u8` lanes.
  3188. );
  3189. -impl_m!([m8; 64]: m8x64 | i8 | test_v512 |
  3190. +impl_m!([m8; 64]: m8x64 | i8, u64 | test_v512 |
  3191. x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15,
  3192. x16, x17, x18, x19, x20, x21, x22, x23, x24, x25, x26, x27, x28, x29, x30, x31,
  3193. x32, x33, x34, x35, x36, x37, x38, x39, x40, x41, x42, x43, x44, x45, x46, x47,
  3194. x48, x49, x50, x51, x52, x53, x54, x55, x56, x57, x58, x59, x60, x61, x62, x63 |
  3195. From: |
  3196. /// A 512-bit vector mask with 64 `m8` lanes.
  3197. );
  3198. -impl_i!([i16; 32]: i16x32, m16x32 | i16 | test_v512 |
  3199. +impl_i!([i16; 32]: i16x32, m16x32 | i16, u32 | test_v512 |
  3200. x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15,
  3201. x16, x17, x18, x19, x20, x21, x22, x23, x24, x25, x26, x27, x28, x29, x30, x31 |
  3202. From: i8x32, u8x32 |
  3203. /// A 512-bit vector with 32 `i16` lanes.
  3204. );
  3205. -impl_u!([u16; 32]: u16x32, m16x32 | u16 | test_v512 |
  3206. +impl_u!([u16; 32]: u16x32, m16x32 | u16, u32 | test_v512 |
  3207. x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15,
  3208. x16, x17, x18, x19, x20, x21, x22, x23, x24, x25, x26, x27, x28, x29, x30, x31 |
  3209. From: u8x32 |
  3210. /// A 512-bit vector with 32 `u16` lanes.
  3211. );
  3212. -impl_m!([m16; 32]: m16x32 | i16 | test_v512 |
  3213. +impl_m!([m16; 32]: m16x32 | i16, u32 | test_v512 |
  3214. x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15,
  3215. x16, x17, x18, x19, x20, x21, x22, x23, x24, x25, x26, x27, x28, x29, x30, x31 |
  3216. From: m8x32 |
  3217. /// A 512-bit vector mask with 32 `m16` lanes.
  3218. );
  3219. -impl_i!([i32; 16]: i32x16, m32x16 | i32 | test_v512 |
  3220. +impl_i!([i32; 16]: i32x16, m32x16 | i32, u16 | test_v512 |
  3221. x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15 |
  3222. From: i8x16, u8x16, i16x16, u16x16 |
  3223. /// A 512-bit vector with 16 `i32` lanes.
  3224. );
  3225. -impl_u!([u32; 16]: u32x16, m32x16 | u32 | test_v512 |
  3226. +impl_u!([u32; 16]: u32x16, m32x16 | u32, u16 | test_v512 |
  3227. x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15 |
  3228. From: u8x16, u16x16 |
  3229. /// A 512-bit vector with 16 `u32` lanes.
  3230. );
  3231. impl_f!([f32; 16]: f32x16, m32x16 | f32 | test_v512 |
  3232. x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15 |
  3233. From: i8x16, u8x16, i16x16, u16x16 |
  3234. /// A 512-bit vector with 16 `f32` lanes.
  3235. );
  3236. -impl_m!([m32; 16]: m32x16 | i32 | test_v512 |
  3237. +impl_m!([m32; 16]: m32x16 | i32, u16 | test_v512 |
  3238. x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15 |
  3239. From: m8x16, m16x16 |
  3240. /// A 512-bit vector mask with 16 `m32` lanes.
  3241. );
  3242. -impl_i!([i64; 8]: i64x8, m64x8 | i64 | test_v512 | x0, x1, x2, x3, x4, x5, x6, x7 |
  3243. +impl_i!([i64; 8]: i64x8, m64x8 | i64, u8 | test_v512 | x0, x1, x2, x3, x4, x5, x6, x7 |
  3244. From: i8x8, u8x8, i16x8, u16x8, i32x8, u32x8 |
  3245. /// A 512-bit vector with 8 `i64` lanes.
  3246. );
  3247. -impl_u!([u64; 8]: u64x8, m64x8 | u64 | test_v512 | x0, x1, x2, x3, x4, x5, x6, x7 |
  3248. +impl_u!([u64; 8]: u64x8, m64x8 | u64, u8 | test_v512 | x0, x1, x2, x3, x4, x5, x6, x7 |
  3249. From: u8x8, u16x8, u32x8 |
  3250. /// A 512-bit vector with 8 `u64` lanes.
  3251. );
  3252. impl_f!([f64; 8]: f64x8, m64x8 | f64 | test_v512 | x0, x1, x2, x3, x4, x5, x6, x7 |
  3253. From: i8x8, u8x8, i16x8, u16x8, i32x8, u32x8, f32x8 |
  3254. /// A 512-bit vector with 8 `f64` lanes.
  3255. );
  3256. -impl_m!([m64; 8]: m64x8 | i64 | test_v512 | x0, x1, x2, x3, x4, x5, x6, x7 |
  3257. +impl_m!([m64; 8]: m64x8 | i64, u8 | test_v512 | x0, x1, x2, x3, x4, x5, x6, x7 |
  3258. From: m8x8, m16x8, m32x8 |
  3259. /// A 512-bit vector mask with 8 `m64` lanes.
  3260. );
  3261. -impl_i!([i128; 4]: i128x4, m128x4 | i128 | test_v512 | x0, x1, x2, x3 |
  3262. +impl_i!([i128; 4]: i128x4, m128x4 | i128, u8 | test_v512 | x0, x1, x2, x3 |
  3263. From: i8x4, u8x4, i16x4, u16x4, i32x4, u32x4, i64x4, u64x4 |
  3264. /// A 512-bit vector with 4 `i128` lanes.
  3265. );
  3266. -impl_u!([u128; 4]: u128x4, m128x4 | u128 | test_v512 | x0, x1, x2, x3 |
  3267. +impl_u!([u128; 4]: u128x4, m128x4 | u128, u8 | test_v512 | x0, x1, x2, x3 |
  3268. From: u8x4, u16x4, u32x4, u64x4 |
  3269. /// A 512-bit vector with 4 `u128` lanes.
  3270. );
  3271. -impl_m!([m128; 4]: m128x4 | i128 | test_v512 | x0, x1, x2, x3 |
  3272. +impl_m!([m128; 4]: m128x4 | i128, u8 | test_v512 | x0, x1, x2, x3 |
  3273. From: m8x4, m16x4, m32x4, m64x4 |
  3274. /// A 512-bit vector mask with 4 `m128` lanes.
  3275. );
  3276. diff --git a/third_party/rust/packed_simd/src/v64.rs b/third_party/rust/packed_simd/src/v64.rs
  3277. --- a/third_party/rust/packed_simd/src/v64.rs
  3278. +++ b/third_party/rust/packed_simd/src/v64.rs
  3279. @@ -1,66 +1,66 @@
  3280. //! 64-bit wide vector types
  3281. -#![rustfmt::skip]
  3282. +#[rustfmt::skip]
  3283. use super::*;
  3284. -impl_i!([i8; 8]: i8x8, m8x8 | i8 | test_v64 | x0, x1, x2, x3, x4, x5, x6, x7 |
  3285. +impl_i!([i8; 8]: i8x8, m8x8 | i8, u8 | test_v64 | x0, x1, x2, x3, x4, x5, x6, x7 |
  3286. From: |
  3287. /// A 64-bit vector with 8 `i8` lanes.
  3288. );
  3289. -impl_u!([u8; 8]: u8x8, m8x8 | u8 | test_v64 | x0, x1, x2, x3, x4, x5, x6, x7 |
  3290. +impl_u!([u8; 8]: u8x8, m8x8 | u8, u8 | test_v64 | x0, x1, x2, x3, x4, x5, x6, x7 |
  3291. From: |
  3292. /// A 64-bit vector with 8 `u8` lanes.
  3293. );
  3294. -impl_m!([m8; 8]: m8x8 | i8 | test_v64 | x0, x1, x2, x3, x4, x5, x6, x7 |
  3295. +impl_m!([m8; 8]: m8x8 | i8, u8 | test_v64 | x0, x1, x2, x3, x4, x5, x6, x7 |
  3296. From: m16x8, m32x8 |
  3297. /// A 64-bit vector mask with 8 `m8` lanes.
  3298. );
  3299. -impl_i!([i16; 4]: i16x4, m16x4 | i16 | test_v64 | x0, x1, x2, x3 |
  3300. +impl_i!([i16; 4]: i16x4, m16x4 | i16, u8 | test_v64 | x0, x1, x2, x3 |
  3301. From: i8x4, u8x4 |
  3302. /// A 64-bit vector with 4 `i16` lanes.
  3303. );
  3304. -impl_u!([u16; 4]: u16x4, m16x4 | u16 | test_v64 | x0, x1, x2, x3 |
  3305. +impl_u!([u16; 4]: u16x4, m16x4 | u16, u8 | test_v64 | x0, x1, x2, x3 |
  3306. From: u8x4 |
  3307. /// A 64-bit vector with 4 `u16` lanes.
  3308. );
  3309. -impl_m!([m16; 4]: m16x4 | i16 | test_v64 | x0, x1, x2, x3 |
  3310. +impl_m!([m16; 4]: m16x4 | i16, u8 | test_v64 | x0, x1, x2, x3 |
  3311. From: m8x4, m32x4, m64x4 |
  3312. /// A 64-bit vector mask with 4 `m16` lanes.
  3313. );
  3314. -impl_i!([i32; 2]: i32x2, m32x2 | i32 | test_v64 | x0, x1 |
  3315. +impl_i!([i32; 2]: i32x2, m32x2 | i32, u8 | test_v64 | x0, x1 |
  3316. From: i8x2, u8x2, i16x2, u16x2 |
  3317. /// A 64-bit vector with 2 `i32` lanes.
  3318. );
  3319. -impl_u!([u32; 2]: u32x2, m32x2 | u32 | test_v64 | x0, x1 |
  3320. +impl_u!([u32; 2]: u32x2, m32x2 | u32, u8 | test_v64 | x0, x1 |
  3321. From: u8x2, u16x2 |
  3322. /// A 64-bit vector with 2 `u32` lanes.
  3323. );
  3324. -impl_m!([m32; 2]: m32x2 | i32 | test_v64 | x0, x1 |
  3325. +impl_m!([m32; 2]: m32x2 | i32, u8 | test_v64 | x0, x1 |
  3326. From: m8x2, m16x2, m64x2, m128x2 |
  3327. /// A 64-bit vector mask with 2 `m32` lanes.
  3328. );
  3329. impl_f!([f32; 2]: f32x2, m32x2 | f32 | test_v64 | x0, x1 |
  3330. From: i8x2, u8x2, i16x2, u16x2 |
  3331. /// A 64-bit vector with 2 `f32` lanes.
  3332. );
  3333. /*
  3334. -impl_i!([i64; 1]: i64x1, m64x1 | i64 | test_v64 | x0 |
  3335. +impl_i!([i64; 1]: i64x1, m64x1 | i64, u8 | test_v64 | x0 |
  3336. From: /*i8x1, u8x1, i16x1, u16x1, i32x1, u32x1*/ | // FIXME: primitive to vector conversion
  3337. /// A 64-bit vector with 1 `i64` lanes.
  3338. );
  3339. -impl_u!([u64; 1]: u64x1, m64x1 | u64 | test_v64 | x0 |
  3340. +impl_u!([u64; 1]: u64x1, m64x1 | u64, u8 | test_v64 | x0 |
  3341. From: /*u8x1, u16x1, u32x1*/ | // FIXME: primitive to vector conversion
  3342. /// A 64-bit vector with 1 `u64` lanes.
  3343. );
  3344. -impl_m!([m64; 1]: m64x1 | i64 | test_v64 | x0 |
  3345. +impl_m!([m64; 1]: m64x1 | i64, u8 | test_v64 | x0 |
  3346. From: /*m8x1, m16x1, m32x1, */ m128x1 | // FIXME: unary small vector types
  3347. /// A 64-bit vector mask with 1 `m64` lanes.
  3348. );
  3349. impl_f!([f64; 1]: f64x1, m64x1 | f64 | test_v64 | x0 |
  3350. From: /*i8x1, u8x1, i16x1, u16x1, i32x1, u32x1, f32x1*/ | // FIXME: unary small vector types
  3351. /// A 64-bit vector with 1 `f64` lanes.
  3352. );
  3353. */
  3354. diff --git a/third_party/rust/packed_simd/src/vPtr.rs b/third_party/rust/packed_simd/src/vPtr.rs
  3355. --- a/third_party/rust/packed_simd/src/vPtr.rs
  3356. +++ b/third_party/rust/packed_simd/src/vPtr.rs
  3357. @@ -1,10 +1,10 @@
  3358. //! Vectors of pointers
  3359. -#![rustfmt::skip]
  3360. +#[rustfmt::skip]
  3361. use crate::*;
  3362. impl_const_p!(
  3363. [*const T; 2]: cptrx2, msizex2, usizex2, isizex2 | test_v128 | x0, x1 | From: |
  3364. /// A vector with 2 `*const T` lanes
  3365. );
  3366. diff --git a/third_party/rust/packed_simd/src/vSize.rs b/third_party/rust/packed_simd/src/vSize.rs
  3367. --- a/third_party/rust/packed_simd/src/vSize.rs
  3368. +++ b/third_party/rust/packed_simd/src/vSize.rs
  3369. @@ -1,53 +1,53 @@
  3370. //! Vectors with pointer-sized elements
  3371. use crate::codegen::pointer_sized_int::{isize_, usize_};
  3372. use crate::*;
  3373. -impl_i!([isize; 2]: isizex2, msizex2 | isize_ | test_v128 |
  3374. +impl_i!([isize; 2]: isizex2, msizex2 | isize_, u8 | test_v128 |
  3375. x0, x1|
  3376. From: |
  3377. /// A vector with 2 `isize` lanes.
  3378. );
  3379. -impl_u!([usize; 2]: usizex2, msizex2 | usize_ | test_v128 |
  3380. +impl_u!([usize; 2]: usizex2, msizex2 | usize_, u8 | test_v128 |
  3381. x0, x1|
  3382. From: |
  3383. /// A vector with 2 `usize` lanes.
  3384. );
  3385. -impl_m!([msize; 2]: msizex2 | isize_ | test_v128 |
  3386. +impl_m!([msize; 2]: msizex2 | isize_, u8 | test_v128 |
  3387. x0, x1 |
  3388. From: |
  3389. /// A vector mask with 2 `msize` lanes.
  3390. );
  3391. -impl_i!([isize; 4]: isizex4, msizex4 | isize_ | test_v256 |
  3392. +impl_i!([isize; 4]: isizex4, msizex4 | isize_, u8 | test_v256 |
  3393. x0, x1, x2, x3 |
  3394. From: |
  3395. /// A vector with 4 `isize` lanes.
  3396. );
  3397. -impl_u!([usize; 4]: usizex4, msizex4 | usize_ | test_v256 |
  3398. +impl_u!([usize; 4]: usizex4, msizex4 | usize_, u8 | test_v256 |
  3399. x0, x1, x2, x3|
  3400. From: |
  3401. /// A vector with 4 `usize` lanes.
  3402. );
  3403. -impl_m!([msize; 4]: msizex4 | isize_ | test_v256 |
  3404. +impl_m!([msize; 4]: msizex4 | isize_, u8 | test_v256 |
  3405. x0, x1, x2, x3 |
  3406. From: |
  3407. /// A vector mask with 4 `msize` lanes.
  3408. );
  3409. -impl_i!([isize; 8]: isizex8, msizex8 | isize_ | test_v512 |
  3410. +impl_i!([isize; 8]: isizex8, msizex8 | isize_, u8 | test_v512 |
  3411. x0, x1, x2, x3, x4, x5, x6, x7 |
  3412. From: |
  3413. - /// A vector with 4 `isize` lanes.
  3414. + /// A vector with 8 `isize` lanes.
  3415. );
  3416. -impl_u!([usize; 8]: usizex8, msizex8 | usize_ | test_v512 |
  3417. +impl_u!([usize; 8]: usizex8, msizex8 | usize_, u8 | test_v512 |
  3418. x0, x1, x2, x3, x4, x5, x6, x7 |
  3419. From: |
  3420. /// A vector with 8 `usize` lanes.
  3421. );
  3422. -impl_m!([msize; 8]: msizex8 | isize_ | test_v512 |
  3423. +impl_m!([msize; 8]: msizex8 | isize_, u8 | test_v512 |
  3424. x0, x1, x2, x3, x4, x5, x6, x7 |
  3425. From: |
  3426. /// A vector mask with 8 `msize` lanes.
  3427. );
  3428. diff --git a/third_party/rust/packed_simd/tests/endianness.rs b/third_party/rust/packed_simd/tests/endianness.rs
  3429. --- a/third_party/rust/packed_simd/tests/endianness.rs
  3430. +++ b/third_party/rust/packed_simd/tests/endianness.rs
  3431. @@ -12,51 +12,51 @@ fn endian_indexing() {
  3432. assert_eq!(v.extract(1), 1);
  3433. assert_eq!(v.extract(2), 2);
  3434. assert_eq!(v.extract(3), 3);
  3435. }
  3436. #[cfg_attr(not(target_arch = "wasm32"), test)]
  3437. #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)]
  3438. fn endian_bitcasts() {
  3439. - #[cfg_attr(rustfmt, rustfmt_skip)]
  3440. + #[rustfmt::skip]
  3441. let x = i8x16::new(
  3442. 0, 1, 2, 3, 4, 5, 6, 7,
  3443. 8, 9, 10, 11, 12, 13, 14, 15,
  3444. );
  3445. let t: i16x8 = unsafe { mem::transmute(x) };
  3446. let e: i16x8 = if cfg!(target_endian = "little") {
  3447. i16x8::new(256, 770, 1284, 1798, 2312, 2826, 3340, 3854)
  3448. } else {
  3449. i16x8::new(1, 515, 1029, 1543, 2057, 2571, 3085, 3599)
  3450. };
  3451. assert_eq!(t, e);
  3452. }
  3453. #[cfg_attr(not(target_arch = "wasm32"), test)]
  3454. #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)]
  3455. fn endian_casts() {
  3456. - #[cfg_attr(rustfmt, rustfmt_skip)]
  3457. + #[rustfmt::skip]
  3458. let x = i8x16::new(
  3459. 0, 1, 2, 3, 4, 5, 6, 7,
  3460. 8, 9, 10, 11, 12, 13, 14, 15,
  3461. );
  3462. let t: i16x16 = x.into(); // simd_cast
  3463. - #[cfg_attr(rustfmt, rustfmt_skip)]
  3464. + #[rustfmt::skip]
  3465. let e = i16x16::new(
  3466. 0, 1, 2, 3, 4, 5, 6, 7,
  3467. 8, 9, 10, 11, 12, 13, 14, 15,
  3468. );
  3469. assert_eq!(t, e);
  3470. }
  3471. #[cfg_attr(not(target_arch = "wasm32"), test)]
  3472. #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)]
  3473. fn endian_load_and_stores() {
  3474. - #[cfg_attr(rustfmt, rustfmt_skip)]
  3475. + #[rustfmt::skip]
  3476. let x = i8x16::new(
  3477. 0, 1, 2, 3, 4, 5, 6, 7,
  3478. 8, 9, 10, 11, 12, 13, 14, 15,
  3479. );
  3480. let mut y: [i16; 8] = [0; 8];
  3481. x.write_to_slice_unaligned(unsafe {
  3482. slice::from_raw_parts_mut(&mut y as *mut _ as *mut i8, 16)
  3483. });
  3484. @@ -77,56 +77,61 @@ fn endian_load_and_stores() {
  3485. #[cfg_attr(not(target_arch = "wasm32"), test)]
  3486. #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)]
  3487. fn endian_array_union() {
  3488. union A {
  3489. data: [f32; 4],
  3490. vec: f32x4,
  3491. }
  3492. let x: [f32; 4] = unsafe { A { vec: f32x4::new(0., 1., 2., 3.) }.data };
  3493. - assert_eq!(x[0], 0_f32);
  3494. - assert_eq!(x[1], 1_f32);
  3495. - assert_eq!(x[2], 2_f32);
  3496. - assert_eq!(x[3], 3_f32);
  3497. + // As all of these are integer values within the mantissa^1 range, it
  3498. + // would be very unusual for them to actually fail to compare.
  3499. + #[allow(clippy::float_cmp)]
  3500. + {
  3501. + assert_eq!(x[0], 0_f32);
  3502. + assert_eq!(x[1], 1_f32);
  3503. + assert_eq!(x[2], 2_f32);
  3504. + assert_eq!(x[3], 3_f32);
  3505. + }
  3506. let y: f32x4 = unsafe { A { data: [3., 2., 1., 0.] }.vec };
  3507. assert_eq!(y, f32x4::new(3., 2., 1., 0.));
  3508. union B {
  3509. data: [i8; 16],
  3510. vec: i8x16,
  3511. }
  3512. - #[cfg_attr(rustfmt, rustfmt_skip)]
  3513. + #[rustfmt::skip]
  3514. let x = i8x16::new(
  3515. 0, 1, 2, 3, 4, 5, 6, 7,
  3516. 8, 9, 10, 11, 12, 13, 14, 15,
  3517. );
  3518. let x: [i8; 16] = unsafe { B { vec: x }.data };
  3519. - for i in 0..16 {
  3520. - assert_eq!(x[i], i as i8);
  3521. + for (i, v) in x.iter().enumerate() {
  3522. + assert_eq!(i as i8, *v);
  3523. }
  3524. - #[cfg_attr(rustfmt, rustfmt_skip)]
  3525. + #[rustfmt::skip]
  3526. let y = [
  3527. 15, 14, 13, 12, 11, 19, 9, 8,
  3528. 7, 6, 5, 4, 3, 2, 1, 0
  3529. ];
  3530. - #[cfg_attr(rustfmt, rustfmt_skip)]
  3531. + #[rustfmt::skip]
  3532. let e = i8x16::new(
  3533. 15, 14, 13, 12, 11, 19, 9, 8,
  3534. 7, 6, 5, 4, 3, 2, 1, 0
  3535. );
  3536. let z = unsafe { B { data: y }.vec };
  3537. assert_eq!(z, e);
  3538. union C {
  3539. data: [i16; 8],
  3540. vec: i8x16,
  3541. }
  3542. - #[cfg_attr(rustfmt, rustfmt_skip)]
  3543. + #[rustfmt::skip]
  3544. let x = i8x16::new(
  3545. 0, 1, 2, 3, 4, 5, 6, 7,
  3546. 8, 9, 10, 11, 12, 13, 14, 15,
  3547. );
  3548. let x: [i16; 8] = unsafe { C { vec: x }.data };
  3549. let e: [i16; 8] = if cfg!(target_endian = "little") {
  3550. [256, 770, 1284, 1798, 2312, 2826, 3340, 3854]
  3551. @@ -140,31 +145,36 @@ fn endian_array_union() {
  3552. #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)]
  3553. fn endian_tuple_access() {
  3554. type F32x4T = (f32, f32, f32, f32);
  3555. union A {
  3556. data: F32x4T,
  3557. vec: f32x4,
  3558. }
  3559. let x: F32x4T = unsafe { A { vec: f32x4::new(0., 1., 2., 3.) }.data };
  3560. - assert_eq!(x.0, 0_f32);
  3561. - assert_eq!(x.1, 1_f32);
  3562. - assert_eq!(x.2, 2_f32);
  3563. - assert_eq!(x.3, 3_f32);
  3564. + // As all of these are integer values within the mantissa^1 range, it
  3565. + // would be very unusual for them to actually fail to compare.
  3566. + #[allow(clippy::float_cmp)]
  3567. + {
  3568. + assert_eq!(x.0, 0_f32);
  3569. + assert_eq!(x.1, 1_f32);
  3570. + assert_eq!(x.2, 2_f32);
  3571. + assert_eq!(x.3, 3_f32);
  3572. + }
  3573. let y: f32x4 = unsafe { A { data: (3., 2., 1., 0.) }.vec };
  3574. assert_eq!(y, f32x4::new(3., 2., 1., 0.));
  3575. - #[cfg_attr(rustfmt, rustfmt_skip)]
  3576. + #[rustfmt::skip]
  3577. type I8x16T = (i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8);
  3578. union B {
  3579. data: I8x16T,
  3580. vec: i8x16,
  3581. }
  3582. - #[cfg_attr(rustfmt, rustfmt_skip)]
  3583. + #[rustfmt::skip]
  3584. let x = i8x16::new(
  3585. 0, 1, 2, 3, 4, 5, 6, 7,
  3586. 8, 9, 10, 11, 12, 13, 14, 15,
  3587. );
  3588. let x: I8x16T = unsafe { B { vec: x }.data };
  3589. assert_eq!(x.0, 0);
  3590. assert_eq!(x.1, 1);
  3591. @@ -178,37 +188,37 @@ fn endian_tuple_access() {
  3592. assert_eq!(x.9, 9);
  3593. assert_eq!(x.10, 10);
  3594. assert_eq!(x.11, 11);
  3595. assert_eq!(x.12, 12);
  3596. assert_eq!(x.13, 13);
  3597. assert_eq!(x.14, 14);
  3598. assert_eq!(x.15, 15);
  3599. - #[cfg_attr(rustfmt, rustfmt_skip)]
  3600. + #[rustfmt::skip]
  3601. let y = (
  3602. 15, 14, 13, 12, 11, 10, 9, 8,
  3603. 7, 6, 5, 4, 3, 2, 1, 0
  3604. );
  3605. let z: i8x16 = unsafe { B { data: y }.vec };
  3606. - #[cfg_attr(rustfmt, rustfmt_skip)]
  3607. + #[rustfmt::skip]
  3608. let e = i8x16::new(
  3609. 15, 14, 13, 12, 11, 10, 9, 8,
  3610. 7, 6, 5, 4, 3, 2, 1, 0
  3611. );
  3612. assert_eq!(e, z);
  3613. - #[cfg_attr(rustfmt, rustfmt_skip)]
  3614. + #[rustfmt::skip]
  3615. type I16x8T = (i16, i16, i16, i16, i16, i16, i16, i16);
  3616. union C {
  3617. data: I16x8T,
  3618. vec: i8x16,
  3619. }
  3620. - #[cfg_attr(rustfmt, rustfmt_skip)]
  3621. + #[rustfmt::skip]
  3622. let x = i8x16::new(
  3623. 0, 1, 2, 3, 4, 5, 6, 7,
  3624. 8, 9, 10, 11, 12, 13, 14, 15,
  3625. );
  3626. let x: I16x8T = unsafe { C { vec: x }.data };
  3627. let e: [i16; 8] = if cfg!(target_endian = "little") {
  3628. [256, 770, 1284, 1798, 2312, 2826, 3340, 3854]
  3629. @@ -219,28 +229,28 @@ fn endian_tuple_access() {
  3630. assert_eq!(x.1, e[1]);
  3631. assert_eq!(x.2, e[2]);
  3632. assert_eq!(x.3, e[3]);
  3633. assert_eq!(x.4, e[4]);
  3634. assert_eq!(x.5, e[5]);
  3635. assert_eq!(x.6, e[6]);
  3636. assert_eq!(x.7, e[7]);
  3637. - #[cfg_attr(rustfmt, rustfmt_skip)]
  3638. + #[rustfmt::skip]
  3639. #[repr(C)]
  3640. #[derive(Copy ,Clone)]
  3641. pub struct Tup(pub i8, pub i8, pub i16, pub i8, pub i8, pub i16,
  3642. pub i8, pub i8, pub i16, pub i8, pub i8, pub i16);
  3643. union D {
  3644. data: Tup,
  3645. vec: i8x16,
  3646. }
  3647. - #[cfg_attr(rustfmt, rustfmt_skip)]
  3648. + #[rustfmt::skip]
  3649. let x = i8x16::new(
  3650. 0, 1, 2, 3, 4, 5, 6, 7,
  3651. 8, 9, 10, 11, 12, 13, 14, 15,
  3652. );
  3653. let x: Tup = unsafe { D { vec: x }.data };
  3654. let e: [i16; 12] = if cfg!(target_endian = "little") {
  3655. [0, 1, 770, 4, 5, 1798, 8, 9, 2826, 12, 13, 3854]