Ravenports generated: 28 May 2021 17:27
[ravenports.git] / bucket_67 / thunderbird
1 # Buildsheet autogenerated by ravenadm tool -- Do not edit.
2
3 NAMEBASE=               thunderbird
4 VERSION=                78.10.2
5 KEYWORDS=               mail net_im news
6 VARIANTS=               standard
7 SDESC[standard]=        Mozilla Thunderbird mail/newsgroup client
8 HOMEPAGE=               https://www.thunderbird.net/
9 CONTACT=                nobody
10
11 DOWNLOAD_GROUPS=        main
12 SITES[main]=            MOZILLA/thunderbird/releases/78.10.2/source
13 DISTFILE[1]=            thunderbird-78.10.2.source.tar.xz:main
14 DF_INDEX=               1
15 SPKGS[standard]=        single
16
17 OPTIONS_AVAILABLE=      none
18 OPTIONS_STANDARD=       none
19
20 BUILD_DEPENDS=          rust:single:standard
21                         cbindgen:single:standard
22                         autoconf213:single:standard
23                         yasm:single:standard
24                         nasm:primary:standard
25                         zip:single:standard
26                         nodejs:primary:standard
27                         libvpx:single:standard
28                         evdev-proto:single:standard
29                         python-sqlite3:single:python_used
30 BUILDRUN_DEPENDS=       nss:primary:standard
31                         icu:single:standard
32                         libffi:single:standard
33                         libproxy:single:standard
34                         libevent:single:standard
35                         libcanberra:primary:standard
36                         libnotify:primary:standard
37                         harfbuzz:primary:standard
38                         aom:single:standard
39                         WebP:single:standard
40                         dav1d:single:standard
41                         ffmpeg:primary:standard
42                         dbus-glib:primary:standard
43                         startup-notification:single:standard
44
45 USES=                   cpe desktop-utils:single gmake jpeg png zlib
46                         perl:build pkgconfig iconv bz2 python:build
47                         gettext-runtime clang:keepcc
48 GNOME_COMPONENTS=       gconf gtk2 gtk3 gdkpixbuf pango
49 XORG_COMPONENTS=        x11 xcb xcomposite xdamage xext xfixes xrender xt
50                         pixman
51
52 LICENSE=                MPL:single
53 LICENSE_TERMS=          single:{{WRKSRC}}/toolkit/content/license.html
54 LICENSE_FILE=           MPL:stock
55 LICENSE_SCHEME=         solo
56
57 CPE_VENDOR=             mozilla
58 FPC_EQUIVALENT=         mail/thunderbird
59
60 MUST_CONFIGURE=         yes
61 CONFIGURE_OUTSOURCE=    yes
62 CONFIGURE_ENV=          PYTHON3={{PYTHON_CMD}}
63                         SETUPTOOLS_USE_DISTUTILS=stdlib
64
65 MAKE_ENV=               PYTHON3={{PYTHON_CMD}}
66                         CXXSTDLIB="stdc++"
67
68 QMAKE_ARGS=             --prefix="{{PREFIX}}"
69                         --with-system-nss
70                         --with-system-nspr
71                         --with-system-zlib
72                         --with-system-icu
73                         --with-system-png="{{LOCALBASE}}"
74                         --with-system-jpeg="{{LOCALBASE}}"
75                         --with-system-libevent
76                         --with-system-harfbuzz
77                         --with-system-graphite2
78                         --with-system-av1
79                         --with-system-webp
80                         --enable-system-ffi
81                         --enable-system-pixman
82                         --enable-install-strip
83                         --enable-strip
84                         --enable-calendar
85                         --enable-libproxy
86                         --enable-release
87                         --enable-optimize
88                         --enable-official-branding
89                         --enable-application=comm/mail
90                         --enable-update-channel=release
91                         --enable-rust-simd
92                         --with-intl-api
93                         --disable-alsa
94                         --disable-debug
95                         --disable-debug-symbols
96                         --disable-dtrace
97                         --disable-jack
98                         --disable-webrtc
99                         --disable-profiling
100                         --disable-pulseaudio
101                         --disable-tests
102                         --disable-updater
103                         --disable-hardening
104 VAR_OPSYS[linux]=       QMAKE_ARGS=--disable-elf-hack
105
106 post-patch:
107         ${REINPLACE_CMD} -e 's|%%LOCALBASE%%|${LOCALBASE}|g' \
108                 ${WRKSRC}/comm/mail/app/nsMailApp.cpp \
109                 ${WRKSRC}/browser/app/nsBrowserApp.cpp
110         (cd ${WRKSRC}/gfx/angle/checkout/src/compiler/translator && \
111                 ${REINPLACE_CMD} -e 's|<math.h>|<cmath>|' \
112                 InfoSink.h IntermNode.cpp)
113         # disable SCTP
114         ${REINPLACE_CMD} -e 's|MOZ_SCTP|MOZ_DISABLE_SCTP|' \
115                 ${WRKSRC}/netwerk/moz.build
116         # alsa headers use 'u_int32_t' and other BerkeleyDB/nvi
117         # fixed types (_XOPEN_SOURCE)
118         ${REINPLACE_CMD} -e 's@_XOPEN_SOURCE@&___@g' \
119                 ${WRKSRC}/media/libcubeb/src/cubeb_alsa.c
120         ${REINPLACE_CMD} -e 's@_POSIX_SOURCE@&___@g' \
121                 ${WRKSRC}/media/libcubeb/src/cubeb_jack.cpp
122         # Set mozilla options
123         @${ECHO_CMD} "--=> Setting configuration <=--"
124         @for arg in ${QMAKE_ARGS}; do \
125                 ${ECHO_CMD} ".mozconfig <<  $$arg" ;\
126                 ${ECHO_CMD} ac_add_options $$arg >> ${WRKSRC}/.mozconfig ;\
127         done
128         @${ECHO_CMD} LDFLAGS=\"-Wl,-rpath,${PREFIX}/lib/thunderbird\" \
129                 >> ${WRKSRC}/.mozconfig
130         # temporary
131         ${MV} ${WRKSRC}/third_party/rust/packed_simd/readme.md \
132               ${WRKSRC}/third_party/rust/packed_simd/README.md
133
134 post-patch-dragonfly:
135         ${REINPLACE_CMD} -e '/<malloc.h>/d' \
136                 ${WRKSRC}/comm/ldap/c-sdk/libraries/liblber/lber-int.h
137
138 post-install:
139         ${MKDIR} ${STAGEDIR}${PREFIX}/share/applications
140         ${MKDIR} ${STAGEDIR}${PREFIX}/share/pixmaps
141         ${INSTALL_DATA} ${FILESDIR}/thunderbird.desktop \
142                 ${STAGEDIR}${PREFIX}/share/applications
143         (cd ${STAGEDIR}${PREFIX}/share/pixmaps && ${LN} -sf \
144                 ../../lib/thunderbird/chrome/icons/default/default48.png \
145                 thunderbird.png)
146         # regenerate symlink to avoid absolute paths
147         ${RM} ${STAGEDIR}${PREFIX}/bin/thunderbird
148         (cd ${STAGEDIR}${PREFIX}/bin && \
149                 ${LN} -sf ../lib/thunderbird/thunderbird thunderbird)
150
151 pre-configure:
152         (cd ${WRKSRC} && ${LOCALBASE}/bin/autoconf-2.13)
153         (cd ${WRKSRC}/js/src/ && ${LOCALBASE}/bin/autoconf-2.13)
154
155 [FILE:391:descriptions/desc.single]
156 Thunderbird is a free and open source email, newsfeed, chat, and
157 calendaring client, that's easy to set up and customize. One of the core
158 principles of Thunderbird is the use and promotion of open standards -
159 this focus is a rejection of our world of closed platforms and services
160 that can't communicate with each other. We want our users to have
161 freedom and choice in how they communicate.
162
163
164 [FILE:112:distinfo]
165 ad070eb27ed5087819b62495e8f96ec0c8d8827598c415648c69ef989c634676    353926908 thunderbird-78.10.2.source.tar.xz
166
167
168 [FILE:949:manifests/plist.single]
169 bin/thunderbird
170 lib/thunderbird/
171  application.ini
172  dependentlibs.list
173  libldap60.so
174  libldif60.so
175  liblgpllibs.so
176  libmozgtk.so
177  libmozsqlite3.so
178  libprldap60.so
179  librnp.so
180  libxul.so
181  omni.ja
182  pingsender
183  platform.ini
184  plugin-container
185  removed-files
186  thunderbird
187  thunderbird-bin
188 lib/thunderbird/chrome/icons/default/
189  calendar-alarm-dialog.png
190  calendar-event-dialog.png
191  calendar-event-summary-dialog.png
192  calendar-task-dialog.png
193  calendar-task-summary-dialog.png
194  default128.png
195  default16.png
196  default22.png
197  default24.png
198  default256.png
199  default32.png
200  default48.png
201  default64.png
202 lib/thunderbird/defaults/messenger/mailViews.dat
203 lib/thunderbird/defaults/pref/channel-prefs.js
204 lib/thunderbird/features/wetransfer@extensions.thunderbird.net.xpi
205 lib/thunderbird/gtk2/libmozgtk.so
206 lib/thunderbird/isp/
207  Bogofilter.sfd
208  DSPAM.sfd
209  POPFile.sfd
210  SpamAssassin.sfd
211  SpamPal.sfd
212 share/applications/thunderbird.desktop
213 share/pixmaps/thunderbird.png
214
215
216 [FILE:5540:patches/patch-addon-search]
217 https://github.com/mozilla/addons/issues/708
218 https://github.com/mozilla/addons-frontend/issues/4610
219
220 diff --git mail/app/profile/all-thunderbird.js mail/app/profile/all-thunderbird.js
221 index 75c2c5e435e35..4d8c09c02759b 100644
222 --- comm/mail/app/profile/all-thunderbird.js
223 +++ comm/mail/app/profile/all-thunderbird.js
224 @@ -153,10 +153,10 @@ pref("extensions.getAddons.maxResults", 15);
225  pref("extensions.getAddons.get.url", "https://services.addons.thunderbird.net/api/v3/addons/search/?guid=%IDS%&lang=%LOCALE%");
226  pref("extensions.getAddons.compatOverides.url", "https://services.addons.thunderbird.net/api/v3/addons/compat-override/?guid=%IDS%&lang=%LOCALE%");
227  pref("extensions.getAddons.link.url", "https://addons.thunderbird.net/%LOCALE%/%APP%/");
228 -pref("extensions.getAddons.recommended.url", "https://services.addons.thunderbird.net/%LOCALE%/%APP%/api/%API_VERSION%/list/recommended/all/%MAX_RESULTS%/%OS%/%VERSION%?src=thunderbird");
229 +pref("extensions.getAddons.recommended.url", "https://services.addons.thunderbird.net/%LOCALE%/%APP%/api/%API_VERSION%/list/recommended/all/%MAX_RESULTS%/Linux/%VERSION%?src=thunderbird");
230  pref("extensions.getAddons.search.browseURL", "https://addons.thunderbird.net/%LOCALE%/%APP%/search/?q=%TERMS%");
231 -pref("extensions.getAddons.search.url", "https://services.addons.thunderbird.net/%LOCALE%/%APP%/api/%API_VERSION%/search/%TERMS%/all/%MAX_RESULTS%/%OS%/%VERSION%/%COMPATIBILITY_MODE%?src=thunderbird");
232 -pref("extensions.webservice.discoverURL", "https://services.addons.thunderbird.net/%LOCALE%/%APP%/discovery/pane/%VERSION%/%OS%");
233 +pref("extensions.getAddons.search.url", "https://services.addons.thunderbird.net/%LOCALE%/%APP%/api/%API_VERSION%/search/%TERMS%/all/%MAX_RESULTS%/Linux/%VERSION%/%COMPATIBILITY_MODE%?src=thunderbird");
234 +pref("extensions.webservice.discoverURL", "https://services.addons.thunderbird.net/%LOCALE%/%APP%/discovery/pane/%VERSION%/Linux");
235  pref("extensions.getAddons.siteRegExp", "^https://.*addons\\.thunderbird\\.net");
236  pref("extensions.getAddons.langpacks.url", "https://services.addons.thunderbird.net/api/v3/addons/language-tools/?app=thunderbird&type=language&appversion=%VERSION%");
237  
238 @@ -180,9 +180,9 @@ pref("security.cert_pinning.enforcement_level", 1);
239  //  .. etc ..
240  //
241  pref("extensions.update.enabled", true);
242 -pref("extensions.update.url", "https://versioncheck.addons.thunderbird.net/update/VersionCheck.php?reqVersion=%REQ_VERSION%&id=%ITEM_ID%&version=%ITEM_VERSION%&maxAppVersion=%ITEM_MAXAPPVERSION%&status=%ITEM_STATUS%&appID=%APP_ID%&appVersion=%APP_VERSION%&appOS=%APP_OS%&appABI=%APP_ABI%&locale=%APP_LOCALE%&currentAppVersion=%CURRENT_APP_VERSION%&updateType=%UPDATE_TYPE%&compatMode=%COMPATIBILITY_MODE%");
243 +pref("extensions.update.url", "https://versioncheck.addons.thunderbird.net/update/VersionCheck.php?reqVersion=%REQ_VERSION%&id=%ITEM_ID%&version=%ITEM_VERSION%&maxAppVersion=%ITEM_MAXAPPVERSION%&status=%ITEM_STATUS%&appID=%APP_ID%&appVersion=%APP_VERSION%&appOS=Linux&appABI=%APP_ABI%&locale=%APP_LOCALE%&currentAppVersion=%CURRENT_APP_VERSION%&updateType=%UPDATE_TYPE%&compatMode=%COMPATIBILITY_MODE%");
244  
245 -pref("extensions.update.background.url", "https://versioncheck-bg.addons.thunderbird.net/update/VersionCheck.php?reqVersion=%REQ_VERSION%&id=%ITEM_ID%&version=%ITEM_VERSION%&maxAppVersion=%ITEM_MAXAPPVERSION%&status=%ITEM_STATUS%&appID=%APP_ID%&appVersion=%APP_VERSION%&appOS=%APP_OS%&appABI=%APP_ABI%&locale=%APP_LOCALE%&currentAppVersion=%CURRENT_APP_VERSION%&updateType=%UPDATE_TYPE%&compatMode=%COMPATIBILITY_MODE%");
246 +pref("extensions.update.background.url", "https://versioncheck-bg.addons.thunderbird.net/update/VersionCheck.php?reqVersion=%REQ_VERSION%&id=%ITEM_ID%&version=%ITEM_VERSION%&maxAppVersion=%ITEM_MAXAPPVERSION%&status=%ITEM_STATUS%&appID=%APP_ID%&appVersion=%APP_VERSION%&appOS=Linux&appABI=%APP_ABI%&locale=%APP_LOCALE%&currentAppVersion=%CURRENT_APP_VERSION%&updateType=%UPDATE_TYPE%&compatMode=%COMPATIBILITY_MODE%");
247  
248  pref("extensions.update.interval", 86400);  // Check for updates to Extensions and
249                                              // Themes every day
250 diff --git toolkit/mozapps/extensions/internal/AddonRepository.jsm toolkit/mozapps/extensions/internal/AddonRepository.jsm
251 index f70fd8d7e3bd8..81e8cd7764fdf 100644
252 --- toolkit/mozapps/extensions/internal/AddonRepository.jsm
253 +++ toolkit/mozapps/extensions/internal/AddonRepository.jsm
254 @@ -602,7 +602,7 @@ var AddonRepository = {
255        addon.version = String(aEntry.current_version.version);
256        if (Array.isArray(aEntry.current_version.files)) {
257          for (let file of aEntry.current_version.files) {
258 -          if (file.platform == "all" || file.platform == PLATFORM) {
259 +          if (file.platform == "all" || file.platform == "linux" || file.platform == PLATFORM) {
260              if (file.url) {
261                addon.sourceURI = NetUtil.newURI(file.url);
262              }
263 diff --git toolkit/mozapps/extensions/internal/XPIDatabase.jsm toolkit/mozapps/extensions/internal/XPIDatabase.jsm
264 index f70fd8d7e3bd8..81e8cd7764fdf 100644
265 --- toolkit/mozapps/extensions/internal/XPIDatabase.jsm
266 +++ toolkit/mozapps/extensions/internal/XPIDatabase.jsm
267 @@ -355,7 +355,7 @@ class AddonInternal {
268      // Something is causing errors in here
269      try {
270        for (let platform of this.targetPlatforms) {
271 -        if (platform.os == Services.appinfo.OS) {
272 +        if (platform.os == "Linux" || platform.os == Services.appinfo.OS) {
273            if (platform.abi) {
274              needsABI = true;
275              if (platform.abi === abi)
276
277
278 [FILE:445:patches/patch-browser-app-nsBrowserApp.cpp]
279 --- browser/app/nsBrowserApp.cpp.orig   2016-09-19 16:19:28 UTC
280 +++ browser/app/nsBrowserApp.cpp
281 @@ -324,6 +324,9 @@ int main(int argc, char* argv[], char* e
282  {
283    mozilla::TimeStamp start = mozilla::TimeStamp::Now();
284  
285 +  setenv("MOZ_GMP_PATH", "%%LOCALBASE%%/lib/browser_plugins/symlinks/gecko", 0);
286 +  setenv("MOZ_PLUGIN_PATH", "%%LOCALBASE%%/lib/browser_plugins/symlinks/gecko", 0);
287 +
288  #ifdef HAS_DLL_BLOCKLIST
289    DllBlocklist_Initialize();
290  
291
292
293 [FILE:1817:patches/patch-bug1288587]
294 diff --git a/build/moz.configure/init.configure b/build/moz.configure/init.configure
295 index 855214a..1e91d51 100644
296 --- build/moz.configure/init.configure
297 +++ build/moz.configure/init.configure
298 @@ -251,6 +251,7 @@ option(env='PYTHON3', nargs=1, help='Python 3 interpre
299  @imports(_from='mozbuild.pythonutil', _import='find_python3_executable')
300  @imports(_from='mozbuild.pythonutil', _import='python_executable_version')
301  @imports(_from='six', _import='ensure_text')
302 +@imports(_from='__builtin__', _import='KeyError')
303  def virtualenv_python3(env_python, virtualenv_name, build_env, mozconfig, help):
304      # Avoid re-executing python when running configure --help.
305      if help:
306 @@ -283,6 +284,12 @@ def virtualenv_python3(env_python, build_env, mozconfi
307              python = mozconfig['vars']['added']['PYTHON3']
308          elif 'PYTHON3' in mozconfig['vars']['modified']:
309              python = mozconfig['vars']['modified']['PYTHON3'][1]
310 +        for i in ('env', 'vars'):
311 +            for j in ('added', 'modified'):
312 +                try:
313 +                    del mozconfig[i][j]['PYTHON3']
314 +                except KeyError:
315 +                    pass
316  
317      log.debug("python3: executable from configuration: %r" % python)
318  
319 @@ -365,7 +372,10 @@ def virtualenv_python3(env_python, build_env, mozconfi
320              sys.executable, manager.python_path))
321          log.info('Re-executing in the virtualenv')
322          if env_python:
323 -            del os.environ['PYTHON3']
324 +                try:
325 +                    del os.environ['PYTHON3']
326 +                except KeyError:
327 +                    pass
328          # Homebrew on macOS will change Python's sys.executable to a custom
329          # value which messes with mach's virtualenv handling code. Override
330          # Homebrew's changes with the correct sys.executable value.
331
332
333 [FILE:3590:patches/patch-bug1559213]
334 commit 717bba28411c
335 Author: Jory A. Pratt <anarchy@gentoo.org>
336 Date:   Thu Jun 13 11:53:00 2019 -0700
337
338     Bug 1559213 - Allow to use system av1 libs instead of bundled.
339 ---
340  config/external/moz.build      |  5 +++--
341  config/system-headers.mozbuild |  8 ++++++++
342  dom/media/platforms/moz.build  |  5 +++++
343  toolkit/moz.configure          | 19 ++++++++++++++++++-
344  4 files changed, 34 insertions(+), 3 deletions(-)
345
346 diff --git config/external/moz.build config/external/moz.build
347 index 03e4fa143bd1..a67d10b11fe6 100644
348 --- config/external/moz.build
349 +++ config/external/moz.build
350 @@ -37,8 +37,9 @@ if not CONFIG['MOZ_SYSTEM_LIBVPX']:
351      external_dirs += ['media/libvpx']
352  
353  if CONFIG['MOZ_AV1']:
354 -    external_dirs += ['media/libaom']
355 -    external_dirs += ['media/libdav1d']
356 +    if not CONFIG['MOZ_SYSTEM_AV1']:
357 +        external_dirs += ['media/libaom']
358 +        external_dirs += ['media/libdav1d']
359  
360  if not CONFIG['MOZ_SYSTEM_PNG']:
361      external_dirs += ['media/libpng']
362 diff --git config/system-headers.mozbuild config/system-headers.mozbuild
363 index bcf5c4925564..48964a999a9b 100644
364 --- config/system-headers.mozbuild
365 +++ config/system-headers.mozbuild
366 @@ -1304,6 +1304,14 @@ if CONFIG['MOZ_ENABLE_CONTENTMANAGER']:
367          'SelectSingleContentItemPage.h',
368      ]
369  
370 +if CONFIG['MOZ_SYSTEM_AV1']:
371 +    system_headers += [
372 +        'aom/aom_decoder.h',
373 +        'aom/aomdx.h',
374 +        'aom/aom_image.h',
375 +        'dav1d/dav1d.h',
376 +    ]
377 +
378  if CONFIG['MOZ_SYSTEM_LIBVPX']:
379      system_headers += [
380          'vpx_mem/vpx_mem.h',
381 diff --git dom/media/platforms/moz.build dom/media/platforms/moz.build
382 index 092cee0c9b66..38e45de5b5f0 100644
383 --- dom/media/platforms/moz.build
384 +++ dom/media/platforms/moz.build
385 @@ -80,6 +80,11 @@ if CONFIG['MOZ_AV1']:
386          'agnostic/AOMDecoder.cpp',
387          'agnostic/DAV1DDecoder.cpp',
388      ]
389 +    if CONFIG['MOZ_SYSTEM_AV1']:
390 +        CXXFLAGS += CONFIG['MOZ_SYSTEM_LIBAOM_CFLAGS']
391 +        OS_LIBS += CONFIG['MOZ_SYSTEM_LIBAOM_LIBS']
392 +        CXXFLAGS += CONFIG['MOZ_SYSTEM_LIBDAV1D_CFLAGS']
393 +        OS_LIBS += CONFIG['MOZ_SYSTEM_LIBDAV1D_LIBS']
394  
395  if CONFIG['MOZ_OMX']:
396      EXPORTS += [
397 diff --git toolkit/moz.configure toolkit/moz.configure
398 index 82b5a59acf42..e2329560b42b 100644
399 --- toolkit/moz.configure
400 +++ toolkit/moz.configure
401 @@ -441,7 +441,23 @@ def av1(value):
402      if value:
403          return True
404  
405 -@depends(target, nasm_version, when=av1 & compile_environment)
406 +option('--with-system-av1',
407 +       help="Use system av1 (located with pkgconfig)")
408 +
409 +system_libaom_info = pkg_check_modules('MOZ_SYSTEM_LIBAOM', 'aom >= 1.0.0',
410 +                                       when='--with-system-av1')
411 +
412 +system_libdav1d_info = pkg_check_modules('MOZ_SYSTEM_LIBDAV1D', 'dav1d >= 0.1.1',
413 +                                         when='--with-system-av1')
414 +
415 +@depends(system_libaom_info, system_libdav1d_info)
416 +def system_av1(system_libaom_info, system_libdav1d_info):
417 +    has_av1_libs = False
418 +    if system_libaom_info and system_libdav1d_info:
419 +        has_av1_libs = True
420 +    return has_av1_libs
421 +
422 +@depends(target, nasm_version, when=av1 & depends(system_av1)(lambda v: not v) & compile_environment)
423  def dav1d_asm(target, nasm_version):
424      if target.os != 'Android':
425          if target.cpu == 'aarch64':
426 @@ -457,6 +473,7 @@ set_config('MOZ_DAV1D_ASM', dav1d_asm)
427  set_define('MOZ_DAV1D_ASM', dav1d_asm)
428  set_config('MOZ_AV1', av1)
429  set_define('MOZ_AV1', av1)
430 +set_config('MOZ_SYSTEM_AV1', depends_if(system_av1)(lambda _: True))
431  
432  # Built-in fragmented MP4 support.
433  # ==============================================================
434
435
436 [FILE:1254:patches/patch-bug1618914]
437 [Wayland] Fall back to ftruncate if posix_fallocate isn't supported by filesystem.
438
439 diff --git widget/gtk/WindowSurfaceWayland.cpp widget/gtk/WindowSurfaceWayland.cpp
440 index 9a73326399bd5..9e42a7f1c5d18 100644
441 --- widget/gtk/WindowSurfaceWayland.cpp
442 +++ widget/gtk/WindowSurfaceWayland.cpp
443 @@ -222,20 +222,21 @@ static int WaylandAllocateShmMemory(int aSize) {
444  #ifdef HAVE_POSIX_FALLOCATE
445    do {
446      ret = posix_fallocate(fd, 0, aSize);
447    } while (ret == EINTR);
448 -  if (ret != 0) {
449 +  if (ret == 0) {
450 +    return fd;
451 +  } else if (ret != ENODEV && ret != EINVAL && ret != EOPNOTSUPP) {
452      close(fd);
453      MOZ_CRASH("posix_fallocate() fails to allocate shm memory");
454    }
455 -#else
456 +#endif
457    do {
458      ret = ftruncate(fd, aSize);
459    } while (ret < 0 && errno == EINTR);
460    if (ret < 0) {
461      close(fd);
462      MOZ_CRASH("ftruncate() fails to allocate shm memory");
463    }
464 -#endif
465  
466    return fd;
467  }
468 @@ -265,8 +266,8 @@ bool WaylandShmPool::Resize(int aSize) {
469  #ifdef HAVE_POSIX_FALLOCATE
470    do {
471      errno = posix_fallocate(mShmPoolFd, 0, aSize);
472    } while (errno == EINTR);
473 -  if (errno != 0) return false;
474 +  if (errno != 0 && errno != ENODEV && errno != EINVAL && errno != EOPNOTSUPP) return false;
475  #endif
476  
477    wl_shm_pool_resize(mShmPool, aSize);
478
479
480 [FILE:173909:patches/patch-bug1667736]
481 commit 33c996c701b9
482 Author: Henri Sivonen <hsivonen@hsivonen.fi>
483 Date:   Fri Oct 30 08:29:53 2020 +0000
484
485     Bug 1667736 - Update packed_simd to compile on Rust 1.48. r=glandium
486     
487     Differential Revision: https://phabricator.services.mozilla.com/D91572
488 ---
489  .cargo/config.in                                   |   2 +-
490  Cargo.lock                                         |   4 +-
491  Cargo.toml                                         |   2 +-
492  third_party/rust/packed_simd/.cargo-checksum.json  |   2 +-
493  third_party/rust/packed_simd/.travis.yml           | 237 +++++--------
494  third_party/rust/packed_simd/Cargo.toml            |  14 +-
495  .../rust/packed_simd/{readme.md => README.md}      | 111 +++----
496  third_party/rust/packed_simd/build.rs              |   2 +-
497  third_party/rust/packed_simd/ci/all.sh             |   2 +-
498  .../ci/docker/aarch64-unknown-linux-gnu/Dockerfile |   2 +-
499  .../ci/docker/arm-unknown-linux-gnueabi/Dockerfile |   2 +-
500  .../docker/arm-unknown-linux-gnueabihf/Dockerfile  |   2 +-
501  .../armv7-unknown-linux-gnueabihf/Dockerfile       |   2 +-
502  .../ci/docker/i586-unknown-linux-gnu/Dockerfile    |   2 +-
503  .../ci/docker/i686-unknown-linux-gnu/Dockerfile    |   2 +-
504  .../ci/docker/mips-unknown-linux-gnu/Dockerfile    |   2 +-
505  .../mips64-unknown-linux-gnuabi64/Dockerfile       |   2 +-
506  .../mips64el-unknown-linux-gnuabi64/Dockerfile     |   2 +-
507  .../ci/docker/mipsel-unknown-linux-musl/Dockerfile |   4 +-
508  .../ci/docker/powerpc-unknown-linux-gnu/Dockerfile |   3 +-
509  .../docker/powerpc64-unknown-linux-gnu/Dockerfile  |   2 +-
510  .../powerpc64le-unknown-linux-gnu/Dockerfile       |   2 +-
511  .../thumbv7neon-unknown-linux-gnueabihf/Dockerfile |   2 +-
512  .../ci/docker/x86_64-unknown-linux-gnu/Dockerfile  |   2 +-
513  third_party/rust/packed_simd/ci/dox.sh             |   7 +-
514  third_party/rust/packed_simd/ci/run.sh             |   6 +-
515  .../rust/packed_simd/ci/setup_benchmarks.sh        |   3 -
516  third_party/rust/packed_simd/src/api.rs            |  13 +-
517  third_party/rust/packed_simd/src/api/bit_manip.rs  |   1 +
518  third_party/rust/packed_simd/src/api/bitmask.rs    |  82 +++++
519  third_party/rust/packed_simd/src/api/cast/v128.rs  |   2 +-
520  third_party/rust/packed_simd/src/api/cast/v16.rs   |   2 +-
521  third_party/rust/packed_simd/src/api/cast/v256.rs  |   2 +-
522  third_party/rust/packed_simd/src/api/cast/v32.rs   |   2 +-
523  third_party/rust/packed_simd/src/api/cast/v512.rs  |   2 +-
524  third_party/rust/packed_simd/src/api/cast/v64.rs   |   2 +-
525  third_party/rust/packed_simd/src/api/default.rs    |   2 +
526  .../rust/packed_simd/src/api/from/from_array.rs    |   2 +
527  third_party/rust/packed_simd/src/api/hash.rs       |   2 +
528  .../packed_simd/src/api/into_bits/arch_specific.rs |   3 +-
529  .../rust/packed_simd/src/api/into_bits/v128.rs     |   2 +-
530  .../rust/packed_simd/src/api/into_bits/v16.rs      |   2 +-
531  .../rust/packed_simd/src/api/into_bits/v256.rs     |   2 +-
532  .../rust/packed_simd/src/api/into_bits/v32.rs      |   2 +-
533  .../rust/packed_simd/src/api/into_bits/v512.rs     |   2 +-
534  .../rust/packed_simd/src/api/into_bits/v64.rs      |   2 +-
535  .../rust/packed_simd/src/api/minimal/iuf.rs        |   6 +-
536  .../rust/packed_simd/src/api/minimal/mask.rs       |   6 +-
537  .../rust/packed_simd/src/api/minimal/ptr.rs        |  28 +-
538  .../src/api/ops/vector_float_min_max.rs            |   5 +
539  .../rust/packed_simd/src/api/ptr/gather_scatter.rs |  36 +-
540  .../src/api/reductions/float_arithmetic.rs         |  13 +-
541  .../rust/packed_simd/src/api/reductions/min_max.rs |   4 +
542  .../rust/packed_simd/src/api/slice/from_slice.rs   |   6 +-
543  .../packed_simd/src/api/slice/write_to_slice.rs    |   6 +-
544  third_party/rust/packed_simd/src/codegen.rs        |   3 +
545  .../rust/packed_simd/src/codegen/bit_manip.rs      |   2 +-
546  third_party/rust/packed_simd/src/codegen/llvm.rs   |   8 +
547  .../packed_simd/src/codegen/reductions/mask/x86.rs |   8 +-
548  .../src/codegen/reductions/mask/x86/sse.rs         |  32 --
549  .../rust/packed_simd/src/codegen/shuffle.rs        | 370 ++++++---------------
550  .../rust/packed_simd/src/codegen/shuffle1_dyn.rs   |  35 +-
551  third_party/rust/packed_simd/src/codegen/vPtr.rs   |   2 +
552  third_party/rust/packed_simd/src/lib.rs            |  29 +-
553  third_party/rust/packed_simd/src/masks.rs          |   2 +
554  third_party/rust/packed_simd/src/sealed.rs         |  15 +-
555  third_party/rust/packed_simd/src/testing/utils.rs  |  25 +-
556  third_party/rust/packed_simd/src/v128.rs           |  32 +-
557  third_party/rust/packed_simd/src/v16.rs            |   6 +-
558  third_party/rust/packed_simd/src/v256.rs           |  32 +-
559  third_party/rust/packed_simd/src/v32.rs            |  12 +-
560  third_party/rust/packed_simd/src/v512.rs           |  32 +-
561  third_party/rust/packed_simd/src/v64.rs            |  26 +-
562  third_party/rust/packed_simd/src/vPtr.rs           |   2 +-
563  third_party/rust/packed_simd/src/vSize.rs          |  20 +-
564  third_party/rust/packed_simd/tests/endianness.rs   |  62 ++--
565  76 files changed, 618 insertions(+), 801 deletions(-)
566
567 diff --git .cargo/config.in .cargo/config.in
568 index 1d25dffe4e49..7a321d933326 100644
569 --- .cargo/config.in
570 +++ .cargo/config.in
571 @@ -45,7 +45,7 @@ tag = "v0.4.2"
572  [source."https://github.com/hsivonen/packed_simd"]
573  git = "https://github.com/hsivonen/packed_simd"
574  replace-with = "vendored-sources"
575 -rev = "3541e3818fdc7c2a24f87e3459151a4ce955a67a"
576 +rev = "0917fe780032a6bbb23d71be545f9c1834128d75"
577  
578  [source."https://github.com/gfx-rs/naga"]
579  git = "https://github.com/gfx-rs/naga"
580 diff --git Cargo.lock Cargo.lock
581 index ea0a543b7397..5c030b1ef875 100644
582 --- Cargo.lock
583 +++ Cargo.lock
584 @@ -3578,8 +3578,8 @@ dependencies = [
585  
586  [[package]]
587  name = "packed_simd"
588 -version = "0.3.3"
589 -source = "git+https://github.com/hsivonen/packed_simd?rev=3541e3818fdc7c2a24f87e3459151a4ce955a67a#3541e3818fdc7c2a24f87e3459151a4ce955a67a"
590 +version = "0.3.4"
591 +source = "git+https://github.com/hsivonen/packed_simd?rev=0917fe780032a6bbb23d71be545f9c1834128d75#0917fe780032a6bbb23d71be545f9c1834128d75"
592  dependencies = [
593   "cfg-if",
594  ]
595 diff --git Cargo.toml Cargo.toml
596 index d1b826e2b388..f78c9a7408d9 100644
597 --- Cargo.toml
598 +++ Cargo.toml
599 @@ -66,7 +66,7 @@ panic = "abort"
600  
601  [patch.crates-io]
602  libudev-sys = { path = "dom/webauthn/libudev-sys" }
603 -packed_simd = { git = "https://github.com/hsivonen/packed_simd", rev="3541e3818fdc7c2a24f87e3459151a4ce955a67a" }
604 +packed_simd = { git = "https://github.com/hsivonen/packed_simd", rev="0917fe780032a6bbb23d71be545f9c1834128d75" }
605  rlbox_lucet_sandbox = { git = "https://github.com/PLSysSec/rlbox_lucet_sandbox/", rev="d510da5999a744c563b0acd18056069d1698273f" }
606  nix = { git = "https://github.com/shravanrn/nix/", branch = "r0.13.1", rev="4af6c367603869a30fddb5ffb0aba2b9477ba92e" }
607  spirv_cross = { git = "https://github.com/kvark/spirv_cross", branch = "wgpu3", rev = "20191ad2f370afd6d247edcb9ff9da32d3bedb9c" }
608 diff --git third_party/rust/packed_simd/.cargo-checksum.json third_party/rust/packed_simd/.cargo-checksum.json
609 index 01afcc1efdac..1512803e5729 100644
610 --- third_party/rust/packed_simd/.cargo-checksum.json
611 +++ third_party/rust/packed_simd/.cargo-checksum.json
612 @@ -1 +1 @@
613 -{"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}
614 \ No newline at end of file
615 +{"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}
616 \ No newline at end of file
617 diff --git third_party/rust/packed_simd/.travis.yml third_party/rust/packed_simd/.travis.yml
618 index 8d8ed54ab737..be3fb2369341 100644
619 --- third_party/rust/packed_simd/.travis.yml
620 +++ third_party/rust/packed_simd/.travis.yml
621 @@ -1,192 +1,129 @@
622  language: rust
623 -sudo: false
624  rust: nightly
625 +os: linux
626 +dist: focal
627  
628  stages:
629    - tools
630 -  - linux-tier1
631 -  - osx-tier1
632 -  - osx-tier2
633 -  - linux-tier2
634 -  - android
635 +  - build-test-verify # Passes full test suite, permit no regressions (unless it's rustup :/)
636 +  - 32bit-tier1
637 +  - 64bit-tier2
638 +  - 32bit-tier2
639  
640 -matrix:
641 -  fast_finish: true    
642 +jobs:
643 +  fast_finish: true
644    include:
645      # Android:
646 -    - env: TARGET=x86_64-linux-android NOVERIFY=1
647 +    - env: TARGET=x86_64-linux-android
648        name: "x86_64-unknown-linux-android + SSE2"
649 -      stage: android
650 +      stage: build-test-verify
651      - env: TARGET=arm-linux-androideabi
652        name: "arm-linux-androideabi"
653 -      stage: android
654 +      stage: build-test-verify
655      - env: TARGET=arm-linux-androideabi RUSTFLAGS="-C target-feature=+v7,+neon"
656        name: "arm-linux-androideabi + NEON"
657 -      stage: android
658 -    - env: TARGET=aarch64-linux-android
659 -      name: "aarch64-unknown-linux-android"
660 -      stage: android
661 -    - env: TARGET=aarch64-linux-android RUSTFLAGS="-C target-feature=+neon"
662 -      name: "aarch64-unknown-linux-android + NEON"
663 -      stage: android
664 +      stage: build-test-verify
665 +    - name: "aarch64-unknown-linux-android + NEON"
666 +      env: TARGET=aarch64-linux-android RUSTFLAGS="-C target-feature=+neon"
667 +      stage: build-test-verify
668      - env: TARGET="thumbv7neon-linux-androideabi"
669        name: "thumbv7neon-linux-androideabi"
670 -      stage: android
671 +      stage: 32bit-tier2
672      # Linux:
673      - env: TARGET=i586-unknown-linux-gnu
674        name: "i586-unknown-linux-gnu"
675 -      stage: linux-tier2
676 +      stage: 32bit-tier2
677      - env: TARGET=i586-unknown-linux-gnu RUSTFLAGS="-C target-feature=+sse"
678        name: "i586-unknown-linux-gnu + SSE"
679 -      stage: linux-tier2
680 +      stage: 32bit-tier2
681      - env: TARGET=i586-unknown-linux-gnu RUSTFLAGS="-C target-feature=+sse2"
682        name: "i586-unknown-linux-gnu + SSE2"
683 -      stage: linux-tier2
684 +      stage: 32bit-tier2
685      - env: TARGET=i686-unknown-linux-gnu
686        name: "i686-unknown-linux-gnu + SSE2"
687 -      stage: linux-tier1
688 +      stage: 32bit-tier1
689      - env: TARGET=i686-unknown-linux-gnu RUSTFLAGS="-C target-feature=+sse4.2"
690        name: "i686-unknown-linux-gnu + SSE4.2"
691 -      stage: linux-tier1
692 +      stage: 32bit-tier1
693      - env: TARGET=i686-unknown-linux-gnu RUSTFLAGS="-C target-feature=+avx2"
694        name: "i686-unknown-linux-gnu + AVX2"
695 -      stage: linux-tier1
696 -    - env: TARGET=x86_64-unknown-linux-gnu
697 -      name: "x86_64-unknown-linux-gnu + SSE2"
698 -      install: rustup component add rustfmt-preview
699 -      stage: linux-tier1
700 +      stage: 32bit-tier1
701      - env: TARGET=x86_64-unknown-linux-gnu RUSTFLAGS="-C target-feature=+sse4.2"
702        name: "x86_64-unknown-linux-gnu + SSE4.2"
703        install: rustup component add rustfmt-preview
704 -      stage: linux-tier1
705 -    - env: TARGET=x86_64-unknown-linux-gnu RUSTFLAGS="-C target-feature=+avx"
706 -      name: "x86_64-unknown-linux-gnu + AVX"
707 -      install: rustup component add rustfmt-preview
708 -      stage: linux-tier1
709 +      stage: build-test-verify
710      - env: TARGET=x86_64-unknown-linux-gnu RUSTFLAGS="-C target-feature=+avx2"
711        name: "x86_64-unknown-linux-gnu + AVX2"
712        install: rustup component add rustfmt-preview
713 -      stage: linux-tier1
714 -    - env: TARGET=x86_64-unknown-linux-gnu-emulated
715 -      name: "Intel SDE + SSE2"
716 -      install: true
717 -      stage: linux-tier1
718 -    - env: TARGET=x86_64-unknown-linux-gnu-emulated RUSTFLAGS="-C target-feature=+sse4.2"
719 -      name: "Intel SDE + SSE4.2"
720 -      install: true
721 -      stage: linux-tier1
722 -    - env: TARGET=x86_64-unknown-linux-gnu-emulated RUSTFLAGS="-C target-feature=+avx"
723 -      name: "Intel SDE + AVX"
724 -      install: true
725 -      stage: linux-tier1
726 -    - env: TARGET=x86_64-unknown-linux-gnu-emulated RUSTFLAGS="-C target-feature=+avx2"
727 -      name: "Intel SDE + AVX2"
728 -      install: true
729 -      stage: linux-tier1
730 -    - env: TARGET=x86_64-unknown-linux-gnu-emulated RUSTFLAGS="-C target-feature=+avx-512f"
731 -      name: "Intel SDE + AVX-512"
732 -      install: true
733 -      stage: linux-tier1
734 -    - env: TARGET=arm-unknown-linux-gnueabi
735 -      name: "arm-unknown-linux-gnueabi"
736 -      stage: linux-tier2
737 +      stage: build-test-verify
738      - env: TARGET=arm-unknown-linux-gnueabi RUSTFLAGS="-C target-feature=+v7,+neon"
739        name: "arm-unknown-linux-gnueabi + NEON"
740 -      stage: linux-tier2
741 +      stage: build-test-verify
742      - env: TARGET=arm-unknown-linux-gnueabihf
743        name: "arm-unknown-linux-gnueabihf"
744 -      stage: linux-tier2
745 +      stage: build-test-verify
746      - env: TARGET=arm-unknown-linux-gnueabihf RUSTFLAGS="-C target-feature=+v7,+neon"
747        name: "arm-unknown-linux-gnueabihf + NEON"
748 -      stage: linux-tier2
749 +      stage: build-test-verify
750      - env: TARGET=armv7-unknown-linux-gnueabihf
751        name: "armv7-unknown-linux-gnueabihf"
752 -      stage: linux-tier2
753 +      stage: build-test-verify
754      - env: TARGET=armv7-unknown-linux-gnueabihf RUSTFLAGS="-C target-feature=+neon"
755        name: "armv7-unknown-linux-gnueabihf + NEON"
756 -      stage: linux-tier2
757 +      stage: build-test-verify
758      - env: TARGET="thumbv7neon-unknown-linux-gnueabihf"
759        name: "thumbv7neon-unknown-linux-gnueabihf"
760 -      stage: linux-tier2
761 -    - env: TARGET=aarch64-unknown-linux-gnu
762 -      name: "aarch64-unknown-linux-gnu"
763 -      stage: linux-tier2
764 -    - env: TARGET=aarch64-unknown-linux-gnu RUSTFLAGS="-C target-feature=+neon"
765 -      name: "aarch64-unknown-linux-gnu + NEON"
766 -      stage: linux-tier2
767 +      stage: 32bit-tier2
768 +    - name: "aarch64-unknown-linux-gnu + NEON"
769 +      env: TARGET=aarch64-unknown-linux-gnu RUSTFLAGS="-C target-feature=+neon"
770 +      stage: build-test-verify
771      - env: TARGET=mips-unknown-linux-gnu
772        name: "mips-unknown-linux-gnu"
773 -      stage: linux-tier2
774 +      stage: 32bit-tier2
775      - env: TARGET=mipsel-unknown-linux-musl
776        name: "mipsel-unknown-linux-musl"
777 -      stage: linux-tier2
778 +      stage: 32bit-tier2
779      - env: TARGET=mips64-unknown-linux-gnuabi64
780        name: "mips64-unknown-linux-gnuabi64"
781 -      stage: linux-tier2
782 +      stage: 64bit-tier2
783      - env: TARGET=mips64el-unknown-linux-gnuabi64
784        name: "mips64el-unknown-linux-gnuabi64"
785 -      stage: linux-tier2
786 +      stage: 64bit-tier2
787        # FIXME: https://github.com/rust-lang-nursery/packed_simd/issues/18
788        # env: TARGET=mips64el-unknown-linux-gnuabi64 RUSTFLAGS="-C target-feature=+msa -C target-cpu=mips64r6"
789      - env: TARGET=powerpc-unknown-linux-gnu
790        name: "powerpc-unknown-linux-gnu"
791 -      stage: linux-tier2
792 +      stage: 32bit-tier2
793      - env: TARGET=powerpc64-unknown-linux-gnu
794        name: "powerpc64-unknown-linux-gnu"
795 -      stage: linux-tier2
796 -    - env: TARGET=powerpc64le-unknown-linux-gnu
797 -      name: "powerpc64le-unknown-linux-gnu"
798 -      stage: linux-tier2
799 -    - env: TARGET=powerpc64le-unknown-linux-gnu RUSTFLAGS="-C target-feature=+altivec"
800 -      name: "powerpc64le-unknown-linux-gnu + ALTIVEC"
801 -      stage: linux-tier2
802 -    - env: TARGET=powerpc64le-unknown-linux-gnu RUSTFLAGS="-C target-feature=+vsx"
803 -      name: "powerpc64le-unknown-linux-gnu + VSX"
804 -      stage: linux-tier2
805 -    - env: TARGET=s390x-unknown-linux-gnu
806 -      name: "s390x-unknown-linux-gnu"
807 -      stage: linux-tier2
808 +      stage: 64bit-tier2
809 +    - name: "powerpc64le-unknown-linux-gnu"
810 +      env: TARGET=powerpc64le-unknown-linux-gnu
811 +      stage: build-test-verify
812 +    - name: "powerpc64le-unknown-linux-gnu + ALTIVEC"
813 +      env: TARGET=powerpc64le-unknown-linux-gnu RUSTFLAGS="-C target-feature=+altivec"
814 +      stage: build-test-verify
815 +    - name: "powerpc64le-unknown-linux-gnu + VSX"
816 +      env: TARGET=powerpc64le-unknown-linux-gnu RUSTFLAGS="-C target-feature=+vsx"
817 +      stage: build-test-verify
818 +    - name: "s390x-unknown-linux-gnu"
819 +      env: TARGET=s390x-unknown-linux-gnu
820 +      stage: 64bit-tier2
821      - env: TARGET=sparc64-unknown-linux-gnu
822        name: "sparc64-unknown-linux-gnu"
823 -      stage: linux-tier2
824 +      stage: 64bit-tier2
825      # WebAssembly:
826      - env: TARGET=wasm32-unknown-unknown
827        name: "wasm32-unknown-unknown"
828 -      stage: osx-tier1 # For now
829 +      stage: 32bit-tier2
830      # MacOSX:
831 -    - os: osx
832 -      env: TARGET=i686-apple-darwin
833 -      name: "i686-apple-darwin + SSE2"
834 -      script: ci/run.sh
835 -      osx_image: xcode10
836 -      stage: osx-tier1
837 -    - os: osx
838 -      env: TARGET=i686-apple-darwin RUSTFLAGS="-C target-feature=+sse4.2"
839 -      name: "i686-apple-darwin + SSE4.2"
840 -      script: ci/run.sh
841 -      osx_image: xcode10
842 -      stage: osx-tier1
843 -      # Travis-CI OSX build bots do not support AVX2:
844 -    - os: osx
845 -      env: TARGET=i686-apple-darwin RUSTFLAGS="-C target-feature=+avx"
846 -      name: "i686-apple-darwin + AVX"
847 -      script: ci/run.sh
848 -      osx_image: xcode10
849 -      stage: osx-tier1
850 -    - os: osx
851 -      env: TARGET=x86_64-apple-darwin
852 -      name: "x86_64-apple-darwin + SSE2"
853 -      install: true
854 -      script: ci/run.sh
855 -      osx_image: xcode10
856 -      stage: osx-tier1
857      - os: osx
858        env: TARGET=x86_64-apple-darwin RUSTFLAGS="-C target-feature=+sse4.2"
859        name: "x86_64-apple-darwin + SSE4.2"
860        install: true
861        script: ci/run.sh
862        osx_image: xcode10
863 -      stage: osx-tier1
864 +      stage: build-test-verify
865        # Travis-CI OSX build bots do not support AVX2:
866      - os: osx
867        env: TARGET=x86_64-apple-darwin RUSTFLAGS="-C target-feature=+avx"
868 @@ -194,7 +131,7 @@ matrix:
869        install: true
870        script: ci/run.sh
871        osx_image: xcode10
872 -      stage: osx-tier1
873 +      stage: build-test-verify
874      # *BSDs:
875      #- env: TARGET=i686-unknown-freebsd NORUN=1
876      #  script: ci/run.sh
877 @@ -206,81 +143,75 @@ matrix:
878      #- env: TARGET=x86_64-sun-solaris NORUN=1
879      #  script: ci/run.sh
880      # iOS:
881 -    - os: osx
882 -      env: TARGET=i386-apple-ios
883 -      name: "i386-apple-ios"
884 -      script: ci/run.sh
885 -      osx_image: xcode9.4
886 -      stage: osx-tier2
887      - os: osx
888        env: TARGET=x86_64-apple-ios
889        name: "x86_64-apple-ios + SSE2"
890        script: ci/run.sh
891        osx_image: xcode9.4
892 -      stage: osx-tier2
893 -    - os: osx
894 -      env: TARGET=armv7-apple-ios NORUN=1
895 -      name: "armv7-apple-ios [Build only]"
896 -      script: ci/run.sh
897 +      stage: 64bit-tier2
898 +    - name: "aarch64-apple-ios + NEON"
899 +      env: TARGET=aarch64-apple-ios RUSTFLAGS="-C target-feature=+neon"
900 +      os: osx
901        osx_image: xcode9.4
902 -      stage: osx-tier2
903 -    - os: osx
904 -      env: TARGET=aarch64-apple-ios NORUN=1
905 -      name: "aarch64-apple-ios [Build only]"
906        script: ci/run.sh
907 -      osx_image: xcode9.4
908 -      stage: osx-tier2
909 +      stage: 64bit-tier2
910      # BENCHMARKS:
911      - name: "Benchmarks - x86_64-unknown-linux-gnu"
912        install: TARGET=x86_64-unknown-linux-gnu ./ci/setup_benchmarks.sh
913 -      script: PATH=$(pwd):$PATH NORUN=1 VERIFY=1 FEATURES=core_arch,ispc,sleef-sys ci/benchmark.sh
914 +      # FIXME: Use `core_arch,sleef-sys` features once they works again
915 +      script: PATH=$(pwd):$PATH NORUN=1 VERIFY=1 FEATURES=ispc ci/benchmark.sh
916        stage: tools
917      - name: "Benchmarks - x86_64-apple-darwin"
918        install: TARGET=x86_64-apple-darwin ./ci/setup_benchmarks.sh
919 -      script: PATH=$(pwd):$PATH NORUN=1 VERIFY=1 FEATURES=core_arch,ispc,sleef-sys ci/benchmark.sh
920 +      # FIXME: Use `core_arch,sleef-sys` features once they works again
921 +      script: PATH=$(pwd):$PATH NORUN=1 VERIFY=1 FEATURES=ispc ci/benchmark.sh
922        os: osx
923        osx_image: xcode9.4
924        stage: tools
925      # TOOLS:
926      - name: "Documentation"
927 -      install: cargo install mdbook
928 +      before_install:
929 +        - sudo add-apt-repository -y ppa:deadsnakes/ppa
930 +        - sudo apt-get update -y
931 +        - sudo apt-get install -y python3.9
932 +      install:
933 +        - cargo install mdbook
934        script: ci/dox.sh
935        stage: tools
936      - name: "rustfmt"
937        install: true
938 -      before_script: rustup component add rustfmt-preview
939 -      script: ci/all.sh check_fmt || true
940 +      script: |
941 +        if rustup component add rustfmt-preview ; then
942 +            ci/all.sh check_fmt || true
943 +        fi
944        stage: tools
945      - name: "clippy"
946        install: true
947 -      before_script: rustup component add clippy-preview
948 -      script: ci/all.sh clippy
949 +      script: |
950 +        if rustup component add clippy-preview ; then
951 +            ci/all.sh clippy
952 +        fi
953        stage: tools
954  
955    allow_failures:
956      # FIXME: ISPC cannot be found?
957      - name: "Benchmarks - x86_64-apple-darwin"
958 -    # FIXME: TBD
959 -    - env: TARGET=powerpc-unknown-linux-gnu
960 -    - env: TARGET=powerpc64-unknown-linux-gnu
961 -    - env: TARGET=powerpc64le-unknown-linux-gnu
962 -    - env: TARGET=powerpc64le-unknown-linux-gnu RUSTFLAGS="-C target-feature=+altivec"
963 -    - env: TARGET=powerpc64le-unknown-linux-gnu RUSTFLAGS="-C target-feature=+vsx"
964 +    # FIXME: i686 fails in inlining, apparently
965 +    - stage: 32bit-tier1
966      #- env: TARGET=i686-unknown-freebsd NORUN=1
967      #- env: TARGET=x86_64-unknown-freebsd NORUN=1
968      #- env: TARGET=x86_64-unknown-netbsd NORUN=1
969      #- env: TARGET=x86_64-sun-solaris NORUN=1
970  
971      # FIXME: TBD
972 -    - env: TARGET=arm-linux-androideabi
973 -    - env: TARGET=arm-linux-androideabi RUSTFLAGS="-C target-feature=+v7,+neon"
974 -    - env: TARGET=aarch64-linux-android
975 -    - env: TARGET=aarch64-linux-android RUSTFLAGS="-C target-feature=+neon"
976 +    - stage: 64bit-tier2
977 +    - stage: 32bit-tier2
978  
979      # FIXME: iOS
980      # https://github.com/rust-lang-nursery/packed_simd/issues/26
981 -    - env: TARGET=i386-apple-ios
982      - env: TARGET=x86_64-apple-ios
983 +    # Is this related to the above? Mysterious test failure
984 +    - name: "aarch64-apple-ios + NEON"
985  
986      # FIXME: https://github.com/rust-lang-nursery/packed_simd/issues/182
987      - env: TARGET=arm-unknown-linux-gnueabi RUSTFLAGS="-C target-feature=+v7,+neon"
988 diff --git third_party/rust/packed_simd/Cargo.toml third_party/rust/packed_simd/Cargo.toml
989 index 3db9354c9407..70bbf26ed259 100644
990 --- third_party/rust/packed_simd/Cargo.toml
991 +++ third_party/rust/packed_simd/Cargo.toml
992 @@ -1,6 +1,6 @@
993  [package]
994  name = "packed_simd"
995 -version = "0.3.3"
996 +version = "0.3.4"
997  authors = ["Gonzalo Brito Gadeschi <gonzalobg88@gmail.com>"]
998  description = "Portable Packed SIMD vectors"
999  documentation = "https://docs.rs/crate/packed_simd/"
1000 @@ -21,8 +21,8 @@ is-it-maintained-open-issues = { repository = "rust-lang-nursery/packed_simd" }
1001  maintenance = { status = "experimental" }
1002  
1003  [dependencies]
1004 -cfg-if = "^0.1.6"
1005 -core_arch = { version = "^0.1.3", optional = true }
1006 +cfg-if = "0.1.10"
1007 +core_arch = { version = "0.1.5", optional = true }
1008  
1009  [features]
1010  default = []
1011 @@ -31,12 +31,12 @@ libcore_neon = []
1012  
1013  [dev-dependencies]
1014  paste = "^0.1.3"
1015 -arrayvec = { version = "^0.4", default-features = false }
1016 +arrayvec = { version = "^0.5", default-features = false }
1017  
1018  [target.'cfg(target_arch = "x86_64")'.dependencies.sleef-sys]
1019 -version = "^0.1.2"
1020 +version = "0.1.2"
1021  optional = true
1022  
1023  [target.wasm32-unknown-unknown.dev-dependencies]
1024 -wasm-bindgen = "=0.2.19"
1025 -wasm-bindgen-test = "=0.2.19"
1026 \ No newline at end of file
1027 +wasm-bindgen = "=0.2.52"
1028 +wasm-bindgen-test = "=0.3.2"
1029 diff --git third_party/rust/packed_simd/readme.md third_party/rust/packed_simd/README.md
1030 similarity index 54%
1031 rename from third_party/rust/packed_simd/readme.md
1032 rename to third_party/rust/packed_simd/README.md
1033 index 3b27a2bba0d6..ad4f3f27093f 100644
1034 --- third_party/rust/packed_simd/readme.md
1035 +++ third_party/rust/packed_simd/README.md
1036 @@ -4,16 +4,14 @@
1037  
1038  [![Travis-CI Status]][travis] [![Appveyor Status]][appveyor] [![Latest Version]][crates.io] [![docs]][master_docs]
1039  
1040 -> This aims to be a 100% conforming implementation of Rust RFC 2366 for stabilization.
1041 -
1042 -**WARNING**: this crate only supports the most recent nightly Rust toolchain.
1043 +**WARNING**: this crate only supports the most recent nightly Rust toolchain
1044 +and will be superceded by [stdsimd](https://github.com/rust-lang/stdsimd).
1045  
1046  ## Documentation
1047  
1048  * [API docs (`master` branch)][master_docs]
1049  * [Performance guide][perf_guide]
1050 -* [API docs (`docs.rs`)][docs.rs]: **CURRENTLY DOWN** due to
1051 -  https://github.com/rust-lang-nursery/packed_simd/issues/110
1052 +* [API docs (`docs.rs`)][docs.rs]
1053  * [RFC2366 `std::simd`][rfc2366]: - contains motivation, design rationale,
1054    discussion, etc.
1055  
1056 @@ -39,17 +37,6 @@ Most of the examples come with both a scalar and a vectorized implementation.
1057    vector type as those of another vector type safely by just using the
1058    `.into_bits()` method.
1059  
1060 -* `core_arch` (default: disabled): enable this feature to recompile `core::arch`
1061 -  for the target-features enabled. `packed_simd` includes optimizations for some
1062 -  target feature combinations that are enabled by this feature. Note, however,
1063 -  that this is an unstable dependency, that rustc might break at any time.
1064 -
1065 -* `sleef-sys` (default: disabled - `x86_64` only): internally uses the [SLEEF]
1066 -  short-vector math library when profitable via the [`sleef-sys`][sleef_sys]
1067 -  crate. [SLEEF] is licensed under the [Boost Software License
1068 -  v1.0][boost_license], an extremely permissive license, and can be statically
1069 -  linked without issues.
1070 -
1071  ## Performance
1072  
1073  The following [ISPC] examples are also part of `packed_simd`'s
1074 @@ -75,60 +62,40 @@ slowdown:
1075  
1076  ## Platform support
1077  
1078 -The following table describes the supported platforms: `build` shows whether the
1079 -library compiles without issues for a given target, while `run` shows whether
1080 -the full testsuite passes on the target.
1081 -
1082 -| Linux targets:                    | build     | run     |
1083 -|-----------------------------------|-----------|---------|
1084 -| `i586-unknown-linux-gnu`          | âœ“         | âœ“       |
1085 -| `i686-unknown-linux-gnu`          | âœ“         | âœ“       |
1086 -| `x86_64-unknown-linux-gnu`        | âœ“         | âœ“       |
1087 -| `arm-unknown-linux-gnueabi`       | âœ—         | âœ—       |
1088 -| `arm-unknown-linux-gnueabihf`     | âœ“         | âœ“       |
1089 -| `armv7-unknown-linux-gnueabi`     | âœ“         | âœ“       |
1090 -| `aarch64-unknown-linux-gnu`       | âœ“         | âœ“       |
1091 -| `mips-unknown-linux-gnu`          | âœ“         | âœ“       |
1092 -| `mipsel-unknown-linux-musl`       | âœ“         | âœ“       |
1093 -| `mips64-unknown-linux-gnuabi64`   | âœ“         | âœ“       |
1094 -| `mips64el-unknown-linux-gnuabi64` | âœ“         | âœ“       |
1095 -| `powerpc-unknown-linux-gnu`       | âœ—         | âœ—       |
1096 -| `powerpc64-unknown-linux-gnu`     | âœ—         | âœ—       |
1097 -| `powerpc64le-unknown-linux-gnu`   | âœ—         | âœ—       |
1098 -| `s390x-unknown-linux-gnu`         | âœ“         | âœ“*      |
1099 -| `sparc64-unknown-linux-gnu`       | âœ“         | âœ“*      |
1100 -| `thumbv7neon-unknown-linux-gnueabihf` | âœ“         | âœ“      |
1101 -| **MacOSX targets:**               | **build** | **run** |
1102 -| `x86_64-apple-darwin`             | âœ“         | âœ“       |
1103 -| `i686-apple-darwin`               | âœ“         | âœ“       |
1104 -| **Windows targets:**              | **build** | **run** |
1105 -| `x86_64-pc-windows-msvc`          | âœ“         | âœ“       |
1106 -| `i686-pc-windows-msvc`            | âœ“         | âœ“       |
1107 -| `x86_64-pc-windows-gnu`           | âœ—          | âœ—        |
1108 -| `i686-pc-windows-gnu`             | âœ—          | âœ—        |
1109 -| **WebAssembly targets:**          | **build** | **run** |
1110 -| `wasm32-unknown-unknown`          | âœ“         | âœ“      |
1111 -| **Android targets:**              | **build** | **run** |
1112 -| `x86_64-linux-android`            | âœ“         | âœ“       |
1113 -| `arm-linux-androideabi`           | âœ“         | âœ“       |
1114 -| `aarch64-linux-android`           | âœ“         | âœ—       |
1115 -| `thumbv7neon-linux-androideabi`  | âœ“         | âœ“       |
1116 -| **iOS targets:**                  | **build** | **run** |
1117 -| `i386-apple-ios`                  | âœ“         | âœ—       |
1118 -| `x86_64-apple-ios`                | âœ“         | âœ—       |
1119 -| `armv7-apple-ios`                 | âœ“         | âœ—**     |
1120 -| `aarch64-apple-ios`               | âœ“         | âœ—**     |
1121 -| **xBSD targets:**                 | **build** | **run** |
1122 -| `i686-unknown-freebsd`            | âœ—         | âœ—**     |
1123 -| `x86_64-unknown-freebsd`          | âœ—         | âœ—**     |
1124 -| `x86_64-unknown-netbsd`           | âœ—         | âœ—**     |
1125 -| **Solaris targets:**              | **build** | **run** |
1126 -| `x86_64-sun-solaris`              | âœ—         | âœ—**     |
1127 -
1128 -[*] most of the test suite passes correctly on these platform but
1129 -there are correctness bugs open in the issue tracker.
1130 -
1131 -[**] it is currently not easily possible to run these platforms on CI.
1132 +The following table describes the supported platforms: `build` shows whether
1133 +the library compiles without issues for a given target, while `run` shows
1134 +whether the test suite passes for a given target.
1135 +
1136 +| **Linux**                             | **build** | **run** |
1137 +|---------------------------------------|-----------|---------|
1138 +| `i586-unknown-linux-gnu`              | âœ“         | âœ—       |
1139 +| `i686-unknown-linux-gnu`              | âœ“         | âœ—       |
1140 +| `x86_64-unknown-linux-gnu`            | âœ“         | âœ“       |
1141 +| `arm-unknown-linux-gnueabi`           | âœ—         | âœ—       |
1142 +| `arm-unknown-linux-gnueabihf`         | âœ“         | âœ“       |
1143 +| `armv7-unknown-linux-gnueabi`         | âœ“         | âœ“       |
1144 +| `aarch64-unknown-linux-gnu`           | âœ“         | âœ“       |
1145 +| `mips-unknown-linux-gnu`              | âœ“         | âœ—       |
1146 +| `mipsel-unknown-linux-musl`           | âœ“         | âœ—       |
1147 +| `mips64-unknown-linux-gnuabi64`       | âœ“         | âœ—       |
1148 +| `mips64el-unknown-linux-gnuabi64`     | âœ“         | âœ—       |
1149 +| `powerpc-unknown-linux-gnu`           | âœ—         | âœ—       |
1150 +| `powerpc64-unknown-linux-gnu`         | âœ—         | âœ—       |
1151 +| `powerpc64le-unknown-linux-gnu`       | âœ“         | âœ“       |
1152 +| `s390x-unknown-linux-gnu`             | âœ—         | âœ—       |
1153 +| `sparc64-unknown-linux-gnu`           | âœ“         | âœ—       |
1154 +| `thumbv7neon-unknown-linux-gnueabihf` | âœ“         | âœ“       |
1155 +| **MacOSX**                            | **build** | **run** |
1156 +| `x86_64-apple-darwin`                 | âœ“         | âœ“       |
1157 +| **Android**                           | **build** | **run** |
1158 +| `x86_64-linux-android`                | âœ“         | âœ“       |
1159 +| `arm-linux-androideabi`               | âœ“         | âœ“       |
1160 +| `aarch64-linux-android`               | âœ“         | âœ“       |
1161 +| `thumbv7neon-linux-androideabi`       | âœ—         | âœ—       |
1162 +| **iOS**                               | **build** | **run** |
1163 +| `x86_64-apple-ios`                    | âœ“         | âœ—       |
1164 +| `aarch64-apple-ios`                   | âœ“         | âœ—       |
1165 +
1166  
1167  ## Machine code verification
1168  
1169 @@ -162,8 +129,8 @@ Unless you explicitly state otherwise, any contribution intentionally submitted
1170  for inclusion in `packed_simd` by you, as defined in the Apache-2.0 license, shall be
1171  dual licensed as above, without any additional terms or conditions.
1172  
1173 -[travis]: https://travis-ci.org/rust-lang-nursery/packed_simd
1174 -[Travis-CI Status]: https://travis-ci.org/rust-lang-nursery/packed_simd.svg?branch=master
1175 +[travis]: https://travis-ci.com/rust-lang-nursery/packed_simd
1176 +[Travis-CI Status]: https://travis-ci.com/rust-lang-nursery/packed_simd.svg?branch=master
1177  [appveyor]: https://ci.appveyor.com/project/gnzlbg/packed-simd
1178  [Appveyor Status]: https://ci.appveyor.com/api/projects/status/hd7v9dvr442hgdix?svg=true
1179  [Latest Version]: https://img.shields.io/crates/v/packed_simd.svg
1180 diff --git third_party/rust/packed_simd/build.rs third_party/rust/packed_simd/build.rs
1181 index 85639ff9d085..5958b9b7856e 100644
1182 --- third_party/rust/packed_simd/build.rs
1183 +++ third_party/rust/packed_simd/build.rs
1184 @@ -1,5 +1,5 @@
1185  fn main() {
1186 -       println!("cargo:rustc-env=RUSTC_BOOTSTRAP=1");
1187 +    println!("cargo:rustc-env=RUSTC_BOOTSTRAP=1");
1188      let target = std::env::var("TARGET")
1189          .expect("TARGET environment variable not defined");
1190      if target.contains("neon") {
1191 diff --git third_party/rust/packed_simd/ci/all.sh third_party/rust/packed_simd/ci/all.sh
1192 index 273562d4a9bb..55a1fa2efefe 100755
1193 --- third_party/rust/packed_simd/ci/all.sh
1194 +++ third_party/rust/packed_simd/ci/all.sh
1195 @@ -21,7 +21,7 @@ cargo_fmt() {
1196  }
1197  
1198  cargo_clippy() {
1199 -    cargo clippy --all -- -D clippy::pedantic
1200 +    cargo clippy --all -- -D clippy::perf
1201  }
1202  
1203  CMD="-1"
1204 diff --git third_party/rust/packed_simd/ci/docker/aarch64-unknown-linux-gnu/Dockerfile third_party/rust/packed_simd/ci/docker/aarch64-unknown-linux-gnu/Dockerfile
1205 index 68261a2f033d..41ff4729ac59 100644
1206 --- third_party/rust/packed_simd/ci/docker/aarch64-unknown-linux-gnu/Dockerfile
1207 +++ third_party/rust/packed_simd/ci/docker/aarch64-unknown-linux-gnu/Dockerfile
1208 @@ -1,4 +1,4 @@
1209 -FROM ubuntu:17.10
1210 +FROM ubuntu:18.04
1211  RUN apt-get update && apt-get install -y --no-install-recommends \
1212    gcc \
1213    ca-certificates \
1214 diff --git third_party/rust/packed_simd/ci/docker/arm-unknown-linux-gnueabi/Dockerfile third_party/rust/packed_simd/ci/docker/arm-unknown-linux-gnueabi/Dockerfile
1215 index cb4de6a57eaa..e1c591dd979a 100644
1216 --- third_party/rust/packed_simd/ci/docker/arm-unknown-linux-gnueabi/Dockerfile
1217 +++ third_party/rust/packed_simd/ci/docker/arm-unknown-linux-gnueabi/Dockerfile
1218 @@ -1,4 +1,4 @@
1219 -FROM ubuntu:17.10
1220 +FROM ubuntu:18.04
1221  RUN apt-get update && apt-get install -y --no-install-recommends \
1222    gcc \
1223    ca-certificates \
1224 diff --git third_party/rust/packed_simd/ci/docker/arm-unknown-linux-gnueabihf/Dockerfile third_party/rust/packed_simd/ci/docker/arm-unknown-linux-gnueabihf/Dockerfile
1225 index c7bd61f0a796..757b79e7ecc1 100644
1226 --- third_party/rust/packed_simd/ci/docker/arm-unknown-linux-gnueabihf/Dockerfile
1227 +++ third_party/rust/packed_simd/ci/docker/arm-unknown-linux-gnueabihf/Dockerfile
1228 @@ -1,4 +1,4 @@
1229 -FROM ubuntu:17.10
1230 +FROM ubuntu:18.04
1231  RUN apt-get update && apt-get install -y --no-install-recommends \
1232    gcc \
1233    ca-certificates \
1234 diff --git third_party/rust/packed_simd/ci/docker/armv7-unknown-linux-gnueabihf/Dockerfile third_party/rust/packed_simd/ci/docker/armv7-unknown-linux-gnueabihf/Dockerfile
1235 index e01b87afdf56..253906293374 100644
1236 --- third_party/rust/packed_simd/ci/docker/armv7-unknown-linux-gnueabihf/Dockerfile
1237 +++ third_party/rust/packed_simd/ci/docker/armv7-unknown-linux-gnueabihf/Dockerfile
1238 @@ -1,4 +1,4 @@
1239 -FROM ubuntu:17.10
1240 +FROM ubuntu:18.04
1241  RUN apt-get update && apt-get install -y --no-install-recommends \
1242    gcc \
1243    ca-certificates \
1244 diff --git third_party/rust/packed_simd/ci/docker/i586-unknown-linux-gnu/Dockerfile third_party/rust/packed_simd/ci/docker/i586-unknown-linux-gnu/Dockerfile
1245 index 857974a858f1..01093698f679 100644
1246 --- third_party/rust/packed_simd/ci/docker/i586-unknown-linux-gnu/Dockerfile
1247 +++ third_party/rust/packed_simd/ci/docker/i586-unknown-linux-gnu/Dockerfile
1248 @@ -1,4 +1,4 @@
1249 -FROM ubuntu:17.10
1250 +FROM ubuntu:18.04
1251  RUN apt-get update && apt-get install -y --no-install-recommends \
1252    gcc-multilib \
1253    libc6-dev \
1254 diff --git third_party/rust/packed_simd/ci/docker/i686-unknown-linux-gnu/Dockerfile third_party/rust/packed_simd/ci/docker/i686-unknown-linux-gnu/Dockerfile
1255 index 857974a858f1..01093698f679 100644
1256 --- third_party/rust/packed_simd/ci/docker/i686-unknown-linux-gnu/Dockerfile
1257 +++ third_party/rust/packed_simd/ci/docker/i686-unknown-linux-gnu/Dockerfile
1258 @@ -1,4 +1,4 @@
1259 -FROM ubuntu:17.10
1260 +FROM ubuntu:18.04
1261  RUN apt-get update && apt-get install -y --no-install-recommends \
1262    gcc-multilib \
1263    libc6-dev \
1264 diff --git third_party/rust/packed_simd/ci/docker/mips-unknown-linux-gnu/Dockerfile third_party/rust/packed_simd/ci/docker/mips-unknown-linux-gnu/Dockerfile
1265 index 4711cead372a..3bd471e87d4d 100644
1266 --- third_party/rust/packed_simd/ci/docker/mips-unknown-linux-gnu/Dockerfile
1267 +++ third_party/rust/packed_simd/ci/docker/mips-unknown-linux-gnu/Dockerfile
1268 @@ -1,4 +1,4 @@
1269 -FROM ubuntu:17.10
1270 +FROM ubuntu:18.04
1271  
1272  RUN apt-get update && apt-get install -y --no-install-recommends \
1273          gcc libc6-dev qemu-user ca-certificates \
1274 diff --git third_party/rust/packed_simd/ci/docker/mips64-unknown-linux-gnuabi64/Dockerfile third_party/rust/packed_simd/ci/docker/mips64-unknown-linux-gnuabi64/Dockerfile
1275 index 1422e8c80924..f26f1f38eb22 100644
1276 --- third_party/rust/packed_simd/ci/docker/mips64-unknown-linux-gnuabi64/Dockerfile
1277 +++ third_party/rust/packed_simd/ci/docker/mips64-unknown-linux-gnuabi64/Dockerfile
1278 @@ -1,4 +1,4 @@
1279 -FROM ubuntu:17.10
1280 +FROM ubuntu:18.04
1281  
1282  RUN apt-get update && apt-get install -y --no-install-recommends \
1283          gcc libc6-dev qemu-user ca-certificates \
1284 diff --git third_party/rust/packed_simd/ci/docker/mips64el-unknown-linux-gnuabi64/Dockerfile third_party/rust/packed_simd/ci/docker/mips64el-unknown-linux-gnuabi64/Dockerfile
1285 index d94deb5b2013..7d9f0bd99250 100644
1286 --- third_party/rust/packed_simd/ci/docker/mips64el-unknown-linux-gnuabi64/Dockerfile
1287 +++ third_party/rust/packed_simd/ci/docker/mips64el-unknown-linux-gnuabi64/Dockerfile
1288 @@ -1,4 +1,4 @@
1289 -FROM ubuntu:17.10
1290 +FROM ubuntu:18.04
1291  
1292  RUN apt-get update && apt-get install -y --no-install-recommends \
1293          gcc libc6-dev qemu-user ca-certificates \
1294 diff --git third_party/rust/packed_simd/ci/docker/mipsel-unknown-linux-musl/Dockerfile third_party/rust/packed_simd/ci/docker/mipsel-unknown-linux-musl/Dockerfile
1295 index 40ac50675bd9..7488662ef281 100644
1296 --- third_party/rust/packed_simd/ci/docker/mipsel-unknown-linux-musl/Dockerfile
1297 +++ third_party/rust/packed_simd/ci/docker/mipsel-unknown-linux-musl/Dockerfile
1298 @@ -16,10 +16,10 @@ RUN mkdir /toolchain
1299  
1300  # Note that this originally came from:
1301  # 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
1302 -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 | \
1303 +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 | \
1304        tar xjf - -C /toolchain --strip-components=2
1305  
1306  ENV PATH=$PATH:/rust/bin:/toolchain/bin \
1307      CC_mipsel_unknown_linux_musl=mipsel-openwrt-linux-gcc \
1308      CARGO_TARGET_MIPSEL_UNKNOWN_LINUX_MUSL_LINKER=mipsel-openwrt-linux-gcc \
1309 -    CARGO_TARGET_MIPSEL_UNKNOWN_LINUX_MUSL_RUNNER="qemu-mipsel -L /toolchain"
1310 \ No newline at end of file
1311 +    CARGO_TARGET_MIPSEL_UNKNOWN_LINUX_MUSL_RUNNER="qemu-mipsel -L /toolchain"
1312 diff --git third_party/rust/packed_simd/ci/docker/powerpc-unknown-linux-gnu/Dockerfile third_party/rust/packed_simd/ci/docker/powerpc-unknown-linux-gnu/Dockerfile
1313 index 43b174ed87fc..80cfee8ab5b9 100644
1314 --- third_party/rust/packed_simd/ci/docker/powerpc-unknown-linux-gnu/Dockerfile
1315 +++ third_party/rust/packed_simd/ci/docker/powerpc-unknown-linux-gnu/Dockerfile
1316 @@ -1,4 +1,4 @@
1317 -FROM ubuntu:17.10
1318 +FROM ubuntu:18.04
1319  
1320  RUN apt-get update && apt-get install -y --no-install-recommends \
1321          gcc libc6-dev qemu-user ca-certificates \
1322 @@ -9,4 +9,5 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
1323  
1324  ENV CARGO_TARGET_POWERPC_UNKNOWN_LINUX_GNU_LINKER=powerpc-linux-gnu-gcc \
1325      CARGO_TARGET_POWERPC_UNKNOWN_LINUX_GNU_RUNNER="qemu-ppc -cpu Vger -L /usr/powerpc-linux-gnu" \
1326 +    CC=powerpc-linux-gnu-gcc \
1327      OBJDUMP=powerpc-linux-gnu-objdump
1328 diff --git third_party/rust/packed_simd/ci/docker/powerpc64-unknown-linux-gnu/Dockerfile third_party/rust/packed_simd/ci/docker/powerpc64-unknown-linux-gnu/Dockerfile
1329 index 7757ad28a42d..74031a2a3e6f 100644
1330 --- third_party/rust/packed_simd/ci/docker/powerpc64-unknown-linux-gnu/Dockerfile
1331 +++ third_party/rust/packed_simd/ci/docker/powerpc64-unknown-linux-gnu/Dockerfile
1332 @@ -1,4 +1,4 @@
1333 -FROM ubuntu:17.10
1334 +FROM ubuntu:18.04
1335  
1336  RUN apt-get update && apt-get install -y --no-install-recommends \
1337      gcc \
1338 diff --git third_party/rust/packed_simd/ci/docker/powerpc64le-unknown-linux-gnu/Dockerfile third_party/rust/packed_simd/ci/docker/powerpc64le-unknown-linux-gnu/Dockerfile
1339 index 0b0c214fdf1b..471a7d9651f7 100644
1340 --- third_party/rust/packed_simd/ci/docker/powerpc64le-unknown-linux-gnu/Dockerfile
1341 +++ third_party/rust/packed_simd/ci/docker/powerpc64le-unknown-linux-gnu/Dockerfile
1342 @@ -1,4 +1,4 @@
1343 -FROM ubuntu:17.10
1344 +FROM ubuntu:18.04
1345  
1346  RUN apt-get update && apt-get install -y --no-install-recommends \
1347          gcc libc6-dev qemu-user ca-certificates \
1348 diff --git third_party/rust/packed_simd/ci/docker/thumbv7neon-unknown-linux-gnueabihf/Dockerfile third_party/rust/packed_simd/ci/docker/thumbv7neon-unknown-linux-gnueabihf/Dockerfile
1349 index 696cb6c3fb52..588d23c65ae5 100644
1350 --- third_party/rust/packed_simd/ci/docker/thumbv7neon-unknown-linux-gnueabihf/Dockerfile
1351 +++ third_party/rust/packed_simd/ci/docker/thumbv7neon-unknown-linux-gnueabihf/Dockerfile
1352 @@ -1,4 +1,4 @@
1353 -FROM ubuntu:17.10
1354 +FROM ubuntu:18.04
1355  RUN apt-get update && apt-get install -y --no-install-recommends \
1356    gcc \
1357    ca-certificates \
1358 diff --git third_party/rust/packed_simd/ci/docker/x86_64-unknown-linux-gnu/Dockerfile third_party/rust/packed_simd/ci/docker/x86_64-unknown-linux-gnu/Dockerfile
1359 index e6b000d0516e..ce5bb88e625d 100644
1360 --- third_party/rust/packed_simd/ci/docker/x86_64-unknown-linux-gnu/Dockerfile
1361 +++ third_party/rust/packed_simd/ci/docker/x86_64-unknown-linux-gnu/Dockerfile
1362 @@ -1,4 +1,4 @@
1363 -FROM ubuntu:17.10
1364 +FROM ubuntu:18.04
1365  RUN apt-get update && apt-get install -y --no-install-recommends \
1366    gcc \
1367    libc6-dev \
1368 diff --git third_party/rust/packed_simd/ci/dox.sh third_party/rust/packed_simd/ci/dox.sh
1369 index 1743366407e3..560eaadcc880 100755
1370 --- third_party/rust/packed_simd/ci/dox.sh
1371 +++ third_party/rust/packed_simd/ci/dox.sh
1372 @@ -18,7 +18,10 @@ cp -r perf-guide/book target/doc/perf-guide
1373  
1374  # If we're on travis, not a PR, and on the right branch, publish!
1375  if [ "$TRAVIS_PULL_REQUEST" = "false" ] && [ "$TRAVIS_BRANCH" = "master" ]; then
1376 -  pip install ghp_import --install-option="--prefix=$HOME/.local"
1377 -  $HOME/.local/bin/ghp-import -n target/doc
1378 +  python3 -vV
1379 +  pip -vV
1380 +  python3.9 -vV
1381 +  pip install ghp_import --user
1382 +  ghp-import -n target/doc
1383    git push -qf https://${GH_PAGES}@github.com/${TRAVIS_REPO_SLUG}.git gh-pages
1384  fi
1385 diff --git third_party/rust/packed_simd/ci/run.sh third_party/rust/packed_simd/ci/run.sh
1386 index 7bb825883680..428a5d890257 100755
1387 --- third_party/rust/packed_simd/ci/run.sh
1388 +++ third_party/rust/packed_simd/ci/run.sh
1389 @@ -78,9 +78,11 @@ fi
1390  
1391  if [[ "${TARGET}" == "x86_64-unknown-linux-gnu" ]] || [[ "${TARGET}" == "x86_64-pc-windows-msvc" ]]; then
1392      # use sleef on linux and windows x86_64 builds
1393 -    cargo_test_impl --release --features=into_bits,core_arch,sleef-sys
1394 +    # FIXME: Use `core_arch,sleef-sys` features once they works again
1395 +    cargo_test_impl --release --features=into_bits
1396  else
1397 -    cargo_test_impl --release --features=into_bits,core_arch
1398 +    # FIXME: Use `core_arch` feature once it works again
1399 +    cargo_test_impl --release --features=into_bits
1400  fi
1401  
1402  # Verify code generation
1403 diff --git third_party/rust/packed_simd/ci/setup_benchmarks.sh third_party/rust/packed_simd/ci/setup_benchmarks.sh
1404 index ddc4765d5ceb..cd41a7851303 100755
1405 --- third_party/rust/packed_simd/ci/setup_benchmarks.sh
1406 +++ third_party/rust/packed_simd/ci/setup_benchmarks.sh
1407 @@ -5,6 +5,3 @@ set -ex
1408  # Get latest ISPC binary for the target and put it in the path
1409  git clone https://github.com/gnzlbg/ispc-binaries
1410  cp ispc-binaries/ispc-${TARGET} ispc
1411 -
1412 -# Rust-bindgen requires RUSTFMT
1413 -rustup component add rustfmt-preview
1414 diff --git third_party/rust/packed_simd/src/api.rs third_party/rust/packed_simd/src/api.rs
1415 index 9959a052ae96..4e9c4292e06c 100644
1416 --- third_party/rust/packed_simd/src/api.rs
1417 +++ third_party/rust/packed_simd/src/api.rs
1418 @@ -1,5 +1,7 @@
1419  //! Implements the Simd<[T; N]> APIs
1420  
1421 +#[macro_use]
1422 +mod bitmask;
1423  crate mod cast;
1424  #[macro_use]
1425  mod cmp;
1426 @@ -39,7 +41,7 @@ crate mod into_bits;
1427  
1428  macro_rules! impl_i {
1429      ([$elem_ty:ident; $elem_n:expr]: $tuple_id:ident, $mask_ty:ident
1430 -     | $ielem_ty:ident | $test_tt:tt | $($elem_ids:ident),*
1431 +     | $ielem_ty:ident, $ibitmask_ty:ident | $test_tt:tt | $($elem_ids:ident),*
1432       | From: $($from_vec_ty:ident),* | $(#[$doc:meta])*) => {
1433          impl_minimal_iuf!([$elem_ty; $elem_n]: $tuple_id | $ielem_ty | $test_tt
1434                            | $($elem_ids),* | $(#[$doc])*);
1435 @@ -93,6 +95,7 @@ macro_rules! impl_i {
1436          );
1437          impl_cmp_partial_ord!([$elem_ty; $elem_n]: $tuple_id | $test_tt);
1438          impl_cmp_ord!([$elem_ty; $elem_n]: $tuple_id | $test_tt | (0, 1));
1439 +        impl_bitmask!($tuple_id | $ibitmask_ty | (-1, 0) | $test_tt);
1440  
1441          test_select!($elem_ty, $mask_ty, $tuple_id, (1, 2) | $test_tt);
1442          test_cmp_partial_ord_int!([$elem_ty; $elem_n]: $tuple_id | $test_tt);
1443 @@ -102,7 +105,7 @@ macro_rules! impl_i {
1444  
1445  macro_rules! impl_u {
1446      ([$elem_ty:ident; $elem_n:expr]: $tuple_id:ident, $mask_ty:ident
1447 -     | $ielem_ty:ident | $test_tt:tt | $($elem_ids:ident),*
1448 +     | $ielem_ty:ident, $ibitmask_ty:ident | $test_tt:tt | $($elem_ids:ident),*
1449       | From: $($from_vec_ty:ident),* | $(#[$doc:meta])*) => {
1450          impl_minimal_iuf!([$elem_ty; $elem_n]: $tuple_id | $ielem_ty | $test_tt
1451                            | $($elem_ids),* | $(#[$doc])*);
1452 @@ -155,6 +158,8 @@ macro_rules! impl_u {
1453          );
1454          impl_cmp_partial_ord!([$elem_ty; $elem_n]: $tuple_id | $test_tt);
1455          impl_cmp_ord!([$elem_ty; $elem_n]: $tuple_id | $test_tt | (0, 1));
1456 +        impl_bitmask!($tuple_id | $ibitmask_ty | ($ielem_ty::max_value(), 0) |
1457 +                      $test_tt);
1458  
1459          test_select!($elem_ty, $mask_ty, $tuple_id, (1, 2) | $test_tt);
1460          test_cmp_partial_ord_int!([$elem_ty; $elem_n]: $tuple_id | $test_tt);
1461 @@ -222,7 +227,8 @@ macro_rules! impl_f {
1462  }
1463  
1464  macro_rules! impl_m {
1465 -    ([$elem_ty:ident; $elem_n:expr]: $tuple_id:ident | $ielem_ty:ident
1466 +    ([$elem_ty:ident; $elem_n:expr]: $tuple_id:ident
1467 +     | $ielem_ty:ident, $ibitmask_ty:ident
1468       | $test_tt:tt | $($elem_ids:ident),* | From: $($from_vec_ty:ident),*
1469       | $(#[$doc:meta])*) => {
1470          impl_minimal_mask!(
1471 @@ -265,6 +271,7 @@ macro_rules! impl_m {
1472              [$elem_ty; $elem_n]: $tuple_id | $test_tt | (false, true)
1473          );
1474          impl_shuffle1_dyn!([$elem_ty; $elem_n]: $tuple_id | $test_tt);
1475 +        impl_bitmask!($tuple_id | $ibitmask_ty | (true, false) | $test_tt);
1476  
1477          test_cmp_partial_ord_mask!([$elem_ty; $elem_n]: $tuple_id | $test_tt);
1478          test_shuffle1_dyn_mask!([$elem_ty; $elem_n]: $tuple_id | $test_tt);
1479 diff --git third_party/rust/packed_simd/src/api/bit_manip.rs third_party/rust/packed_simd/src/api/bit_manip.rs
1480 index 3d3c4eb8850a..6d8865706d3e 100644
1481 --- third_party/rust/packed_simd/src/api/bit_manip.rs
1482 +++ third_party/rust/packed_simd/src/api/bit_manip.rs
1483 @@ -37,6 +37,7 @@ macro_rules! impl_bit_manip {
1484              paste::item_with_macros! {
1485                  #[allow(overflowing_literals)]
1486                  pub mod [<$id _bit_manip>] {
1487 +                    #![allow(const_item_mutation)]
1488                      use super::*;
1489  
1490                      const LANE_WIDTH: usize = mem::size_of::<$elem_ty>() * 8;
1491 diff --git third_party/rust/packed_simd/src/api/bitmask.rs third_party/rust/packed_simd/src/api/bitmask.rs
1492 new file mode 100644
1493 index 000000000000..a06ff0fab1f4
1494 --- /dev/null
1495 +++ third_party/rust/packed_simd/src/api/bitmask.rs
1496 @@ -0,0 +1,82 @@
1497 +//! Bitmask API
1498 +
1499 +macro_rules! impl_bitmask {
1500 +    ($id:ident | $ibitmask_ty:ident | ($set:expr, $clear:expr)
1501 +     | $test_tt:tt) => {
1502 +        impl $id {
1503 +            /// Creates a bitmask with the MSB of each vector lane.
1504 +            ///
1505 +            /// If the vector has less than 8 lanes, the bits that do not
1506 +            /// correspond to any vector lanes are cleared.
1507 +            #[inline]
1508 +            pub fn bitmask(self) -> $ibitmask_ty {
1509 +                unsafe { codegen::llvm::simd_bitmask(self.0) }
1510 +            }
1511 +        }
1512 +
1513 +        test_if! {
1514 +            $test_tt:
1515 +            paste::item! {
1516 +                #[cfg(not(any(
1517 +                    // FIXME: https://github.com/rust-lang-nursery/packed_simd/issues/210
1518 +                    all(target_arch = "mips", target_endian = "big"),
1519 +                    all(target_arch = "mips64", target_endian = "big"),
1520 +                    target_arch = "sparc64",
1521 +                    target_arch = "s390x",
1522 +                )))]
1523 +                pub mod [<$id _bitmask>] {
1524 +                    use super::*;
1525 +                    #[cfg_attr(not(target_arch = "wasm32"), test)]
1526 +                    #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)]
1527 +                    fn bitmask() {
1528 +                        // clear all lanes
1529 +                        let vec = $id::splat($clear as _);
1530 +                        let bitmask: $ibitmask_ty = 0;
1531 +                        assert_eq!(vec.bitmask(), bitmask);
1532 +
1533 +                        // set even lanes
1534 +                        let mut vec = $id::splat($clear as _);
1535 +                        for i in 0..$id::lanes() {
1536 +                            if i % 2 == 0 {
1537 +                                vec = vec.replace(i, $set as _);
1538 +                            }
1539 +                        }
1540 +                        // create bitmask with even lanes set:
1541 +                        let mut bitmask: $ibitmask_ty = 0;
1542 +                        for i in 0..$id::lanes() {
1543 +                            if i % 2 == 0 {
1544 +                                bitmask |= 1 << i;
1545 +                            }
1546 +                        }
1547 +                        assert_eq!(vec.bitmask(), bitmask);
1548 +
1549 +
1550 +                        // set odd lanes
1551 +                        let mut vec = $id::splat($clear as _);
1552 +                        for i in 0..$id::lanes() {
1553 +                            if i % 2 != 0 {
1554 +                                vec = vec.replace(i, $set as _);
1555 +                            }
1556 +                        }
1557 +                        // create bitmask with odd lanes set:
1558 +                        let mut bitmask: $ibitmask_ty = 0;
1559 +                        for i in 0..$id::lanes() {
1560 +                            if i % 2 != 0 {
1561 +                                bitmask |= 1 << i;
1562 +                            }
1563 +                        }
1564 +                        assert_eq!(vec.bitmask(), bitmask);
1565 +
1566 +                        // set all lanes
1567 +                        let vec = $id::splat($set as _);
1568 +                        let mut bitmask: $ibitmask_ty = 0;
1569 +                        for i in 0..$id::lanes() {
1570 +                            bitmask |= 1 << i;
1571 +                        }
1572 +                        assert_eq!(vec.bitmask(), bitmask);
1573 +                    }
1574 +                }
1575 +            }
1576 +        }
1577 +    };
1578 +}
1579 diff --git third_party/rust/packed_simd/src/api/cast/v128.rs third_party/rust/packed_simd/src/api/cast/v128.rs
1580 index 78c07f3a5597..ab47ddc006d6 100644
1581 --- third_party/rust/packed_simd/src/api/cast/v128.rs
1582 +++ third_party/rust/packed_simd/src/api/cast/v128.rs
1583 @@ -1,5 +1,5 @@
1584  //! `FromCast` and `IntoCast` implementations for portable 128-bit wide vectors
1585 -#![rustfmt::skip]
1586 +#[rustfmt::skip]
1587  
1588  use crate::*;
1589  
1590 diff --git third_party/rust/packed_simd/src/api/cast/v16.rs third_party/rust/packed_simd/src/api/cast/v16.rs
1591 index d292936baa41..cf974bb08e70 100644
1592 --- third_party/rust/packed_simd/src/api/cast/v16.rs
1593 +++ third_party/rust/packed_simd/src/api/cast/v16.rs
1594 @@ -1,5 +1,5 @@
1595  //! `FromCast` and `IntoCast` implementations for portable 16-bit wide vectors
1596 -#![rustfmt::skip]
1597 +#[rustfmt::skip]
1598  
1599  use crate::*;
1600  
1601 diff --git third_party/rust/packed_simd/src/api/cast/v256.rs third_party/rust/packed_simd/src/api/cast/v256.rs
1602 index 0a669e0beebe..9389dcb4c7f7 100644
1603 --- third_party/rust/packed_simd/src/api/cast/v256.rs
1604 +++ third_party/rust/packed_simd/src/api/cast/v256.rs
1605 @@ -1,5 +1,5 @@
1606  //! `FromCast` and `IntoCast` implementations for portable 256-bit wide vectors
1607 -#![rustfmt::skip]
1608 +#[rustfmt::skip]
1609  
1610  use crate::*;
1611  
1612 diff --git third_party/rust/packed_simd/src/api/cast/v32.rs third_party/rust/packed_simd/src/api/cast/v32.rs
1613 index 65050cdacb4e..2b254ba0cf12 100644
1614 --- third_party/rust/packed_simd/src/api/cast/v32.rs
1615 +++ third_party/rust/packed_simd/src/api/cast/v32.rs
1616 @@ -1,5 +1,5 @@
1617  //! `FromCast` and `IntoCast` implementations for portable 32-bit wide vectors
1618 -#![rustfmt::skip]
1619 +#[rustfmt::skip]
1620  
1621  use crate::*;
1622  
1623 diff --git third_party/rust/packed_simd/src/api/cast/v512.rs third_party/rust/packed_simd/src/api/cast/v512.rs
1624 index 9ae1caed35e2..5a10ab066677 100644
1625 --- third_party/rust/packed_simd/src/api/cast/v512.rs
1626 +++ third_party/rust/packed_simd/src/api/cast/v512.rs
1627 @@ -1,5 +1,5 @@
1628  //! `FromCast` and `IntoCast` implementations for portable 512-bit wide vectors
1629 -#![rustfmt::skip]
1630 +#[rustfmt::skip]
1631  
1632  use crate::*;
1633  
1634 diff --git third_party/rust/packed_simd/src/api/cast/v64.rs third_party/rust/packed_simd/src/api/cast/v64.rs
1635 index 0e2f78f7335b..192a4638a362 100644
1636 --- third_party/rust/packed_simd/src/api/cast/v64.rs
1637 +++ third_party/rust/packed_simd/src/api/cast/v64.rs
1638 @@ -1,5 +1,5 @@
1639  //! `FromCast` and `IntoCast` implementations for portable 64-bit wide vectors
1640 -#![rustfmt::skip]
1641 +#[rustfmt::skip]
1642  
1643  use crate::*;
1644  
1645 diff --git third_party/rust/packed_simd/src/api/default.rs third_party/rust/packed_simd/src/api/default.rs
1646 index 843d51bcc4bb..7af55ea77a85 100644
1647 --- third_party/rust/packed_simd/src/api/default.rs
1648 +++ third_party/rust/packed_simd/src/api/default.rs
1649 @@ -12,6 +12,8 @@ macro_rules! impl_default {
1650          test_if!{
1651              $test_tt:
1652              paste::item! {
1653 +                // Comparisons use integer casts within mantissa^1 range.
1654 +                #[allow(clippy::float_cmp)]
1655                  pub mod [<$id _default>] {
1656                      use super::*;
1657                      #[cfg_attr(not(target_arch = "wasm32"), test)] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)]
1658 diff --git third_party/rust/packed_simd/src/api/from/from_array.rs third_party/rust/packed_simd/src/api/from/from_array.rs
1659 index 964d1501df6a..b83f93816262 100644
1660 --- third_party/rust/packed_simd/src/api/from/from_array.rs
1661 +++ third_party/rust/packed_simd/src/api/from/from_array.rs
1662 @@ -56,6 +56,8 @@ macro_rules! impl_from_array {
1663          test_if! {
1664              $test_tt:
1665              paste::item! {
1666 +                // Comparisons use integer casts within mantissa^1 range.
1667 +                #[allow(clippy::float_cmp)]
1668                  mod [<$id _from>] {
1669                      use super::*;
1670                      #[test]
1671 diff --git third_party/rust/packed_simd/src/api/hash.rs third_party/rust/packed_simd/src/api/hash.rs
1672 index 08d42496ea8b..ee80eff939c3 100644
1673 --- third_party/rust/packed_simd/src/api/hash.rs
1674 +++ third_party/rust/packed_simd/src/api/hash.rs
1675 @@ -36,6 +36,8 @@ macro_rules! impl_hash {
1676                          let mut v_hash = a_hash.clone();
1677                          a.hash(&mut a_hash);
1678  
1679 +                        // Integer within mantissa^1 range.
1680 +                        #[allow(clippy::float_cmp)]
1681                          let v = $id::splat(42 as $elem_ty);
1682                          v.hash(&mut v_hash);
1683                          assert_eq!(a_hash.finish(), v_hash.finish());
1684 diff --git third_party/rust/packed_simd/src/api/into_bits/arch_specific.rs third_party/rust/packed_simd/src/api/into_bits/arch_specific.rs
1685 index 6cc2fa37b728..fee6140052f9 100644
1686 --- third_party/rust/packed_simd/src/api/into_bits/arch_specific.rs
1687 +++ third_party/rust/packed_simd/src/api/into_bits/arch_specific.rs
1688 @@ -1,6 +1,6 @@
1689  //! `FromBits` and `IntoBits` between portable vector types and the
1690  //! architecture-specific vector types.
1691 -#![rustfmt::skip]
1692 +#[rustfmt::skip]
1693  
1694  // FIXME: MIPS FromBits/IntoBits
1695  
1696 @@ -84,7 +84,6 @@ macro_rules! impl_arch {
1697  // FIXME: 64-bit single element types
1698  // FIXME: arm/aarch float16x4_t missing
1699  impl_arch!(
1700 -    [x86["x86"]: __m64], [x86_64["x86_64"]: __m64],
1701      [arm["arm"]: int8x8_t, uint8x8_t, poly8x8_t, int16x4_t, uint16x4_t,
1702       poly16x4_t, int32x2_t, uint32x2_t, float32x2_t, int64x1_t,
1703       uint64x1_t],
1704 diff --git third_party/rust/packed_simd/src/api/into_bits/v128.rs third_party/rust/packed_simd/src/api/into_bits/v128.rs
1705 index 804dbf282d53..e32cd7f9f099 100644
1706 --- third_party/rust/packed_simd/src/api/into_bits/v128.rs
1707 +++ third_party/rust/packed_simd/src/api/into_bits/v128.rs
1708 @@ -1,5 +1,5 @@
1709  //! `FromBits` and `IntoBits` implementations for portable 128-bit wide vectors
1710 -#![rustfmt::skip]
1711 +#[rustfmt::skip]
1712  
1713  #[allow(unused)]  // wasm_bindgen_test
1714  use crate::*;
1715 diff --git third_party/rust/packed_simd/src/api/into_bits/v16.rs third_party/rust/packed_simd/src/api/into_bits/v16.rs
1716 index 1162a62e5bd1..e44d0e7f9a18 100644
1717 --- third_party/rust/packed_simd/src/api/into_bits/v16.rs
1718 +++ third_party/rust/packed_simd/src/api/into_bits/v16.rs
1719 @@ -1,5 +1,5 @@
1720  //! `FromBits` and `IntoBits` implementations for portable 16-bit wide vectors
1721 -#![rustfmt::skip]
1722 +#[rustfmt::skip]
1723  
1724  #[allow(unused)]  // wasm_bindgen_test
1725  use crate::*;
1726 diff --git third_party/rust/packed_simd/src/api/into_bits/v256.rs third_party/rust/packed_simd/src/api/into_bits/v256.rs
1727 index cc7a6646b535..c4c373e0d0b8 100644
1728 --- third_party/rust/packed_simd/src/api/into_bits/v256.rs
1729 +++ third_party/rust/packed_simd/src/api/into_bits/v256.rs
1730 @@ -1,5 +1,5 @@
1731  //! `FromBits` and `IntoBits` implementations for portable 256-bit wide vectors
1732 -#![rustfmt::skip]
1733 +#[rustfmt::skip]
1734  
1735  #[allow(unused)]  // wasm_bindgen_test
1736  use crate::*;
1737 diff --git third_party/rust/packed_simd/src/api/into_bits/v32.rs third_party/rust/packed_simd/src/api/into_bits/v32.rs
1738 index 2c183ecf1c77..5dba38a17976 100644
1739 --- third_party/rust/packed_simd/src/api/into_bits/v32.rs
1740 +++ third_party/rust/packed_simd/src/api/into_bits/v32.rs
1741 @@ -1,5 +1,5 @@
1742  //! `FromBits` and `IntoBits` implementations for portable 32-bit wide vectors
1743 -#![rustfmt::skip]
1744 +#[rustfmt::skip]
1745  
1746  #[allow(unused)]  // wasm_bindgen_test
1747  use crate::*;
1748 diff --git third_party/rust/packed_simd/src/api/into_bits/v512.rs third_party/rust/packed_simd/src/api/into_bits/v512.rs
1749 index 8dec6a7f63a0..4a771962c348 100644
1750 --- third_party/rust/packed_simd/src/api/into_bits/v512.rs
1751 +++ third_party/rust/packed_simd/src/api/into_bits/v512.rs
1752 @@ -1,5 +1,5 @@
1753  //! `FromBits` and `IntoBits` implementations for portable 512-bit wide vectors
1754 -#![rustfmt::skip]
1755 +#[rustfmt::skip]
1756  
1757  #[allow(unused)]  // wasm_bindgen_test
1758  use crate::*;
1759 diff --git third_party/rust/packed_simd/src/api/into_bits/v64.rs third_party/rust/packed_simd/src/api/into_bits/v64.rs
1760 index 8999d98e13f8..5b065f1bd5f7 100644
1761 --- third_party/rust/packed_simd/src/api/into_bits/v64.rs
1762 +++ third_party/rust/packed_simd/src/api/into_bits/v64.rs
1763 @@ -1,5 +1,5 @@
1764  //! `FromBits` and `IntoBits` implementations for portable 64-bit wide vectors
1765 -#![rustfmt::skip]
1766 +#[rustfmt::skip]
1767  
1768  #[allow(unused)]  // wasm_bindgen_test
1769  use crate::*;
1770 diff --git third_party/rust/packed_simd/src/api/minimal/iuf.rs third_party/rust/packed_simd/src/api/minimal/iuf.rs
1771 index 58ffabab994f..a155ac178a26 100644
1772 --- third_party/rust/packed_simd/src/api/minimal/iuf.rs
1773 +++ third_party/rust/packed_simd/src/api/minimal/iuf.rs
1774 @@ -53,7 +53,7 @@ macro_rules! impl_minimal_iuf {
1775  
1776              /// Extracts the value at `index`.
1777              ///
1778 -            /// # Precondition
1779 +            /// # Safety
1780              ///
1781              /// If `index >= Self::lanes()` the behavior is undefined.
1782              #[inline]
1783 @@ -80,7 +80,7 @@ macro_rules! impl_minimal_iuf {
1784  
1785              /// Returns a new vector where the value at `index` is replaced by `new_value`.
1786              ///
1787 -            /// # Precondition
1788 +            /// # Safety
1789              ///
1790              /// If `index >= Self::lanes()` the behavior is undefined.
1791              #[inline]
1792 @@ -101,6 +101,8 @@ macro_rules! impl_minimal_iuf {
1793          test_if!{
1794              $test_tt:
1795              paste::item! {
1796 +                // Comparisons use integer casts within mantissa^1 range.
1797 +                #[allow(clippy::float_cmp)]
1798                  pub mod [<$id _minimal>] {
1799                      use super::*;
1800                      #[cfg_attr(not(target_arch = "wasm32"), test)]
1801 diff --git third_party/rust/packed_simd/src/api/minimal/mask.rs third_party/rust/packed_simd/src/api/minimal/mask.rs
1802 index e65be95db12c..a420060b423d 100644
1803 --- third_party/rust/packed_simd/src/api/minimal/mask.rs
1804 +++ third_party/rust/packed_simd/src/api/minimal/mask.rs
1805 @@ -58,6 +58,8 @@ macro_rules! impl_minimal_mask {
1806  
1807              /// Extracts the value at `index`.
1808              ///
1809 +            /// # Safety
1810 +            ///
1811              /// If `index >= Self::lanes()` the behavior is undefined.
1812              #[inline]
1813              pub unsafe fn extract_unchecked(self, index: usize) -> bool {
1814 @@ -85,9 +87,9 @@ macro_rules! impl_minimal_mask {
1815              /// Returns a new vector where the value at `index` is replaced by
1816              /// `new_value`.
1817              ///
1818 -            /// # Panics
1819 +            /// # Safety
1820              ///
1821 -            /// If `index >= Self::lanes()`.
1822 +            /// If `index >= Self::lanes()` the behavior is undefined.
1823              #[inline]
1824              #[must_use = "replace_unchecked does not modify the original value - \
1825                            it returns a new vector with the value at `index` \
1826 diff --git third_party/rust/packed_simd/src/api/minimal/ptr.rs third_party/rust/packed_simd/src/api/minimal/ptr.rs
1827 index 75e5aad5c065..c3d61fbf6d5e 100644
1828 --- third_party/rust/packed_simd/src/api/minimal/ptr.rs
1829 +++ third_party/rust/packed_simd/src/api/minimal/ptr.rs
1830 @@ -68,7 +68,7 @@ macro_rules! impl_minimal_p {
1831  
1832              /// Extracts the value at `index`.
1833              ///
1834 -            /// # Precondition
1835 +            /// # Safety
1836              ///
1837              /// If `index >= Self::lanes()` the behavior is undefined.
1838              #[inline]
1839 @@ -96,7 +96,7 @@ macro_rules! impl_minimal_p {
1840  
1841              /// Returns a new vector where the value at `index` is replaced by `new_value`.
1842              ///
1843 -            /// # Precondition
1844 +            /// # Safety
1845              ///
1846              /// If `index >= Self::lanes()` the behavior is undefined.
1847              #[inline]
1848 @@ -215,7 +215,7 @@ macro_rules! impl_minimal_p {
1849                      f,
1850                      "{}<{}>(",
1851                      stringify!($id),
1852 -                    unsafe { crate::intrinsics::type_name::<T>() }
1853 +                    crate::intrinsics::type_name::<T>()
1854                  )?;
1855                  for i in 0..$elem_count {
1856                      if i > 0 {
1857 @@ -550,11 +550,7 @@ macro_rules! impl_minimal_p {
1858                          ];
1859  
1860                          for i in 0..$elem_count {
1861 -                            let ptr = unsafe {
1862 -                                crate::mem::transmute(
1863 -                                    &values[i] as *const i32
1864 -                                )
1865 -                            };
1866 +                            let ptr = &values[i] as *const i32 as *mut i32;
1867                              vec = vec.replace(i, ptr);
1868                              array[i] = ptr;
1869                          }
1870 @@ -611,7 +607,7 @@ macro_rules! impl_minimal_p {
1871  
1872              /// Instantiates a new vector with the values of the `slice`.
1873              ///
1874 -            /// # Precondition
1875 +            /// # Safety
1876              ///
1877              /// If `slice.len() < Self::lanes()` or `&slice[0]` is not aligned
1878              /// to an `align_of::<Self>()` boundary, the behavior is undefined.
1879 @@ -624,7 +620,7 @@ macro_rules! impl_minimal_p {
1880  
1881              /// Instantiates a new vector with the values of the `slice`.
1882              ///
1883 -            /// # Precondition
1884 +            /// # Safety
1885              ///
1886              /// If `slice.len() < Self::lanes()` the behavior is undefined.
1887              #[inline]
1888 @@ -827,7 +823,7 @@ macro_rules! impl_minimal_p {
1889  
1890              /// Writes the values of the vector to the `slice`.
1891              ///
1892 -            /// # Precondition
1893 +            /// # Safety
1894              ///
1895              /// If `slice.len() < Self::lanes()` or `&slice[0]` is not
1896              /// aligned to an `align_of::<Self>()` boundary, the behavior is
1897 @@ -843,7 +839,7 @@ macro_rules! impl_minimal_p {
1898  
1899              /// Writes the values of the vector to the `slice`.
1900              ///
1901 -            /// # Precondition
1902 +            /// # Safety
1903              ///
1904              /// If `slice.len() < Self::lanes()` the behavior is undefined.
1905              #[inline]
1906 @@ -1025,11 +1021,7 @@ macro_rules! impl_minimal_p {
1907                          ];
1908  
1909                          for i in 0..$elem_count {
1910 -                            let ptr = unsafe {
1911 -                                crate::mem::transmute(
1912 -                                    &values[i] as *const i32
1913 -                                )
1914 -                            };
1915 +                            let ptr = &values[i] as *const i32 as *mut i32;
1916                              vec = vec.replace(i, ptr);
1917                              array[i] = ptr;
1918                          }
1919 @@ -1151,7 +1143,7 @@ macro_rules! impl_minimal_p {
1920              /// As such, memory acquired directly from allocators or memory
1921              /// mapped files may be too large to handle with this function.
1922              ///
1923 -            /// Consider using wrapping_offset_from instead if these constraints
1924 +            /// Consider using `wrapping_offset_from` instead if these constraints
1925              /// are difficult to satisfy. The only advantage of this method is
1926              /// that it enables more aggressive compiler optimizations.
1927              #[inline]
1928 diff --git third_party/rust/packed_simd/src/api/ops/vector_float_min_max.rs third_party/rust/packed_simd/src/api/ops/vector_float_min_max.rs
1929 index 4126e87042f5..8310667b7a8d 100644
1930 --- third_party/rust/packed_simd/src/api/ops/vector_float_min_max.rs
1931 +++ third_party/rust/packed_simd/src/api/ops/vector_float_min_max.rs
1932 @@ -26,6 +26,11 @@ macro_rules! impl_ops_vector_float_min_max {
1933          test_if!{
1934              $test_tt:
1935              paste::item! {
1936 +                #[cfg(not(any(
1937 +                    // FIXME: https://github.com/rust-lang-nursery/packed_simd/issues/223
1938 +                    all(target_arch = "mips", target_endian = "big"),
1939 +                    target_arch = "mips64",
1940 +                )))]
1941                  pub mod [<$id _ops_vector_min_max>] {
1942                      use super::*;
1943                      #[cfg_attr(not(target_arch = "wasm32"), test)] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)]
1944 diff --git third_party/rust/packed_simd/src/api/ptr/gather_scatter.rs third_party/rust/packed_simd/src/api/ptr/gather_scatter.rs
1945 index 9d8e113bb44f..430435620939 100644
1946 --- third_party/rust/packed_simd/src/api/ptr/gather_scatter.rs
1947 +++ third_party/rust/packed_simd/src/api/ptr/gather_scatter.rs
1948 @@ -49,9 +49,9 @@ macro_rules! impl_ptr_read {
1949                          let mut ptr = $id::<i32>::null();
1950  
1951                          for i in 0..$elem_count {
1952 -                            ptr = ptr.replace(i, unsafe {
1953 -                                crate::mem::transmute(&v[i] as *const i32)
1954 -                            });
1955 +                            ptr = ptr.replace(i,
1956 +                                &v[i] as *const i32 as *mut i32
1957 +                            );
1958                          }
1959  
1960                          // all mask elements are true:
1961 @@ -135,32 +135,8 @@ macro_rules! impl_ptr_write {
1962                  M: sealed::Mask,
1963                  [M; $elem_count]: sealed::SimdArray,
1964              {
1965 -                // FIXME:
1966 -                // https://github.com/rust-lang-nursery/packed_simd/issues/85
1967 -                #[cfg(not(target_arch = "mips"))]
1968 -                {
1969 -                    use crate::llvm::simd_scatter;
1970 -                    simd_scatter(value.0, self.0, mask.0)
1971 -                }
1972 -                #[cfg(target_arch = "mips")]
1973 -                {
1974 -                    let m_ptr =
1975 -                        &mask as *const Simd<[M; $elem_count]> as *const M;
1976 -                    for i in 0..$elem_count {
1977 -                        let m = ptr::read(m_ptr.add(i));
1978 -                        if m.test() {
1979 -                            let t_ptr = &self
1980 -                                as *const Simd<[*mut T; $elem_count]>
1981 -                                as *mut *mut T;
1982 -                            let v_ptr = &value as *const Simd<[T; $elem_count]>
1983 -                                as *const T;
1984 -                            ptr::write(
1985 -                                ptr::read(t_ptr.add(i)),
1986 -                                ptr::read(v_ptr.add(i)),
1987 -                            );
1988 -                        }
1989 -                    }
1990 -                }
1991 +                use crate::llvm::simd_scatter;
1992 +                simd_scatter(value.0, self.0, mask.0)
1993              }
1994          }
1995  
1996 @@ -185,7 +161,7 @@ macro_rules! impl_ptr_write {
1997                          let mut ptr = $id::<i32>::null();
1998                          for i in 0..$elem_count {
1999                              ptr = ptr.replace(i, unsafe {
2000 -                                crate::mem::transmute(arr.as_ptr().add(i))
2001 +                                arr.as_ptr().add(i) as *mut i32
2002                              });
2003                          }
2004                          // ptr = [&arr[0], &arr[1], ...]
2005 diff --git third_party/rust/packed_simd/src/api/reductions/float_arithmetic.rs third_party/rust/packed_simd/src/api/reductions/float_arithmetic.rs
2006 index dd722ae25fdd..4a47452e5006 100644
2007 --- third_party/rust/packed_simd/src/api/reductions/float_arithmetic.rs
2008 +++ third_party/rust/packed_simd/src/api/reductions/float_arithmetic.rs
2009 @@ -93,6 +93,8 @@ macro_rules! impl_reduction_float_arithmetic {
2010          test_if! {
2011              $test_tt:
2012              paste::item! {
2013 +                // Comparisons use integer casts within mantissa^1 range.
2014 +                #[allow(clippy::float_cmp)]
2015                  pub mod [<$id _reduction_float_arith>] {
2016                      use super::*;
2017                      fn alternating(x: usize) -> $id {
2018 @@ -225,7 +227,7 @@ macro_rules! impl_reduction_float_arithmetic {
2019                          let mut v = $id::splat(0. as $elem_ty);
2020                          for i in 0..$id::lanes() {
2021                              let c = if i % 2 == 0 { 1e3 } else { -1. };
2022 -                            start *= 3.14 * c;
2023 +                            start *= ::core::$elem_ty::consts::PI * c;
2024                              scalar_reduction += start;
2025                              v = v.replace(i, start);
2026                          }
2027 @@ -257,6 +259,7 @@ macro_rules! impl_reduction_float_arithmetic {
2028                      #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)]
2029                      #[allow(unused, dead_code)]
2030                      fn product_roundoff() {
2031 +                        use ::core::convert::TryInto;
2032                          // Performs a tree-reduction
2033                          fn tree_reduce_product(a: &[$elem_ty]) -> $elem_ty {
2034                              assert!(!a.is_empty());
2035 @@ -278,7 +281,7 @@ macro_rules! impl_reduction_float_arithmetic {
2036                          let mut v = $id::splat(0. as $elem_ty);
2037                          for i in 0..$id::lanes() {
2038                              let c = if i % 2 == 0 { 1e3 } else { -1. };
2039 -                            start *= 3.14 * c;
2040 +                            start *= ::core::$elem_ty::consts::PI * c;
2041                              scalar_reduction *= start;
2042                              v = v.replace(i, start);
2043                          }
2044 @@ -288,7 +291,9 @@ macro_rules! impl_reduction_float_arithmetic {
2045                          v.write_to_slice_unaligned(&mut a);
2046                          let tree_reduction = tree_reduce_product(&a);
2047  
2048 -                        // tolerate 1 ULP difference:
2049 +                        // FIXME: Too imprecise, even only for product(f32x8).
2050 +                        // Figure out how to narrow this down.
2051 +                        let ulp_limit = $id::lanes() / 2;
2052                          let red_bits = simd_reduction.to_bits();
2053                          let tree_bits = tree_reduction.to_bits();
2054                          assert!(
2055 @@ -296,7 +301,7 @@ macro_rules! impl_reduction_float_arithmetic {
2056                                  red_bits - tree_bits
2057                              } else {
2058                                  tree_bits - red_bits
2059 -                            } < 2,
2060 +                            } < ulp_limit.try_into().unwrap(),
2061                              "vector: {:?} | simd_reduction: {:?} | \
2062                               tree_reduction: {} | scalar_reduction: {}",
2063                              v,
2064 diff --git third_party/rust/packed_simd/src/api/reductions/min_max.rs third_party/rust/packed_simd/src/api/reductions/min_max.rs
2065 index c4d3aa10f15c..c4c1400a8fc4 100644
2066 --- third_party/rust/packed_simd/src/api/reductions/min_max.rs
2067 +++ third_party/rust/packed_simd/src/api/reductions/min_max.rs
2068 @@ -76,6 +76,8 @@ macro_rules! impl_reduction_min_max {
2069          }
2070          test_if! {$test_tt:
2071          paste::item! {
2072 +            // Comparisons use integer casts within mantissa^1 range.
2073 +            #[allow(clippy::float_cmp)]
2074              pub mod [<$id _reduction_min_max>] {
2075                  use super::*;
2076                  #[cfg_attr(not(target_arch = "wasm32"), test)]
2077 @@ -124,6 +126,8 @@ macro_rules! test_reduction_float_min_max {
2078          test_if!{
2079              $test_tt:
2080              paste::item! {
2081 +                // Comparisons use integer casts within mantissa^1 range.
2082 +                #[allow(clippy::float_cmp)]
2083                  pub mod [<$id _reduction_min_max_nan>] {
2084                      use super::*;
2085                      #[cfg_attr(not(target_arch = "wasm32"), test)]
2086 diff --git third_party/rust/packed_simd/src/api/slice/from_slice.rs third_party/rust/packed_simd/src/api/slice/from_slice.rs
2087 index 109cd1f10b01..25082d1e6800 100644
2088 --- third_party/rust/packed_simd/src/api/slice/from_slice.rs
2089 +++ third_party/rust/packed_simd/src/api/slice/from_slice.rs
2090 @@ -38,7 +38,7 @@ macro_rules! impl_slice_from_slice {
2091  
2092              /// Instantiates a new vector with the values of the `slice`.
2093              ///
2094 -            /// # Precondition
2095 +            /// # Safety
2096              ///
2097              /// If `slice.len() < Self::lanes()` or `&slice[0]` is not aligned
2098              /// to an `align_of::<Self>()` boundary, the behavior is undefined.
2099 @@ -59,7 +59,7 @@ macro_rules! impl_slice_from_slice {
2100  
2101              /// Instantiates a new vector with the values of the `slice`.
2102              ///
2103 -            /// # Precondition
2104 +            /// # Safety
2105              ///
2106              /// If `slice.len() < Self::lanes()` the behavior is undefined.
2107              #[inline]
2108 @@ -84,6 +84,8 @@ macro_rules! impl_slice_from_slice {
2109          test_if! {
2110              $test_tt:
2111              paste::item! {
2112 +                // Comparisons use integer casts within mantissa^1 range.
2113 +                #[allow(clippy::float_cmp)]
2114                  pub mod [<$id _slice_from_slice>] {
2115                      use super::*;
2116                      use crate::iter::Iterator;
2117 diff --git third_party/rust/packed_simd/src/api/slice/write_to_slice.rs third_party/rust/packed_simd/src/api/slice/write_to_slice.rs
2118 index fcb288da70fc..b634d98b9962 100644
2119 --- third_party/rust/packed_simd/src/api/slice/write_to_slice.rs
2120 +++ third_party/rust/packed_simd/src/api/slice/write_to_slice.rs
2121 @@ -39,7 +39,7 @@ macro_rules! impl_slice_write_to_slice {
2122  
2123              /// Writes the values of the vector to the `slice`.
2124              ///
2125 -            /// # Precondition
2126 +            /// # Safety
2127              ///
2128              /// If `slice.len() < Self::lanes()` or `&slice[0]` is not
2129              /// aligned to an `align_of::<Self>()` boundary, the behavior is
2130 @@ -64,7 +64,7 @@ macro_rules! impl_slice_write_to_slice {
2131  
2132              /// Writes the values of the vector to the `slice`.
2133              ///
2134 -            /// # Precondition
2135 +            /// # Safety
2136              ///
2137              /// If `slice.len() < Self::lanes()` the behavior is undefined.
2138              #[inline]
2139 @@ -86,6 +86,8 @@ macro_rules! impl_slice_write_to_slice {
2140          test_if! {
2141              $test_tt:
2142              paste::item! {
2143 +                // Comparisons use integer casts within mantissa^1 range.
2144 +                #[allow(clippy::float_cmp)]
2145                  pub mod [<$id _slice_write_to_slice>] {
2146                      use super::*;
2147                      use crate::iter::Iterator;
2148 diff --git third_party/rust/packed_simd/src/codegen.rs third_party/rust/packed_simd/src/codegen.rs
2149 index b7ccd838603f..9d1517e203d1 100644
2150 --- third_party/rust/packed_simd/src/codegen.rs
2151 +++ third_party/rust/packed_simd/src/codegen.rs
2152 @@ -16,6 +16,8 @@ macro_rules! impl_simd_array {
2153          pub struct $tuple_id($(crate $elem_tys),*);
2154          //^^^^^^^ leaked through SimdArray
2155  
2156 +        impl crate::sealed::Seal for [$elem_ty; $elem_count] {}
2157 +
2158          impl crate::sealed::SimdArray for [$elem_ty; $elem_count] {
2159              type Tuple = $tuple_id;
2160              type T = $elem_ty;
2161 @@ -23,6 +25,7 @@ macro_rules! impl_simd_array {
2162              type NT = [u32; $elem_count];
2163          }
2164  
2165 +        impl crate::sealed::Seal for $tuple_id {}
2166          impl crate::sealed::Simd for $tuple_id {
2167              type Element = $elem_ty;
2168              const LANES: usize = $elem_count;
2169 diff --git third_party/rust/packed_simd/src/codegen/bit_manip.rs third_party/rust/packed_simd/src/codegen/bit_manip.rs
2170 index 947266f5bce8..83c7d1987cac 100644
2171 --- third_party/rust/packed_simd/src/codegen/bit_manip.rs
2172 +++ third_party/rust/packed_simd/src/codegen/bit_manip.rs
2173 @@ -1,5 +1,5 @@
2174  //! LLVM bit manipulation intrinsics.
2175 -#![rustfmt::skip]
2176 +#[rustfmt::skip]
2177  
2178  use crate::*;
2179  
2180 diff --git third_party/rust/packed_simd/src/codegen/llvm.rs third_party/rust/packed_simd/src/codegen/llvm.rs
2181 index 91c2b0758dcf..93c6ce6b77ed 100644
2182 --- third_party/rust/packed_simd/src/codegen/llvm.rs
2183 +++ third_party/rust/packed_simd/src/codegen/llvm.rs
2184 @@ -10,31 +10,37 @@ extern "platform-intrinsic" {
2185      // FIXME: Passing this intrinsics an `idx` array with an index that is
2186      // out-of-bounds will produce a monomorphization-time error.
2187      // https://github.com/rust-lang-nursery/packed_simd/issues/21
2188 +    #[rustc_args_required_const(2)]
2189      pub fn simd_shuffle2<T, U>(x: T, y: T, idx: [u32; 2]) -> U
2190      where
2191          T: Simd,
2192          <T as Simd>::Element: Shuffle<[u32; 2], Output = U>;
2193  
2194 +    #[rustc_args_required_const(2)]
2195      pub fn simd_shuffle4<T, U>(x: T, y: T, idx: [u32; 4]) -> U
2196      where
2197          T: Simd,
2198          <T as Simd>::Element: Shuffle<[u32; 4], Output = U>;
2199  
2200 +    #[rustc_args_required_const(2)]
2201      pub fn simd_shuffle8<T, U>(x: T, y: T, idx: [u32; 8]) -> U
2202      where
2203          T: Simd,
2204          <T as Simd>::Element: Shuffle<[u32; 8], Output = U>;
2205  
2206 +    #[rustc_args_required_const(2)]
2207      pub fn simd_shuffle16<T, U>(x: T, y: T, idx: [u32; 16]) -> U
2208      where
2209          T: Simd,
2210          <T as Simd>::Element: Shuffle<[u32; 16], Output = U>;
2211  
2212 +    #[rustc_args_required_const(2)]
2213      pub fn simd_shuffle32<T, U>(x: T, y: T, idx: [u32; 32]) -> U
2214      where
2215          T: Simd,
2216          <T as Simd>::Element: Shuffle<[u32; 32], Output = U>;
2217  
2218 +    #[rustc_args_required_const(2)]
2219      pub fn simd_shuffle64<T, U>(x: T, y: T, idx: [u32; 64]) -> U
2220      where
2221          T: Simd,
2222 @@ -96,4 +102,6 @@ extern "platform-intrinsic" {
2223  
2224      crate fn simd_gather<T, P, M>(value: T, pointers: P, mask: M) -> T;
2225      crate fn simd_scatter<T, P, M>(value: T, pointers: P, mask: M);
2226 +
2227 +    crate fn simd_bitmask<T, U>(value: T) -> U;
2228  }
2229 diff --git third_party/rust/packed_simd/src/codegen/reductions/mask/x86.rs third_party/rust/packed_simd/src/codegen/reductions/mask/x86.rs
2230 index 2ae4ed81c416..bcfb1a6e1772 100644
2231 --- third_party/rust/packed_simd/src/codegen/reductions/mask/x86.rs
2232 +++ third_party/rust/packed_simd/src/codegen/reductions/mask/x86.rs
2233 @@ -19,13 +19,7 @@ mod avx2;
2234  /// x86 64-bit m8x8 implementation
2235  macro_rules! x86_m8x8_impl {
2236      ($id:ident) => {
2237 -        cfg_if! {
2238 -            if #[cfg(all(target_arch = "x86_64", target_feature = "sse"))] {
2239 -                x86_m8x8_sse_impl!($id);
2240 -            } else {
2241 -                fallback_impl!($id);
2242 -            }
2243 -        }
2244 +        fallback_impl!($id);
2245      };
2246  }
2247  
2248 diff --git third_party/rust/packed_simd/src/codegen/reductions/mask/x86/sse.rs third_party/rust/packed_simd/src/codegen/reductions/mask/x86/sse.rs
2249 index 7482f9430a14..eb1ef7fac922 100644
2250 --- third_party/rust/packed_simd/src/codegen/reductions/mask/x86/sse.rs
2251 +++ third_party/rust/packed_simd/src/codegen/reductions/mask/x86/sse.rs
2252 @@ -34,35 +34,3 @@ macro_rules! x86_m32x4_sse_impl {
2253          }
2254      };
2255  }
2256 -
2257 -macro_rules! x86_m8x8_sse_impl {
2258 -    ($id:ident) => {
2259 -        impl All for $id {
2260 -            #[inline]
2261 -            #[target_feature(enable = "sse")]
2262 -            unsafe fn all(self) -> bool {
2263 -                #[cfg(target_arch = "x86")]
2264 -                use crate::arch::x86::_mm_movemask_pi8;
2265 -                #[cfg(target_arch = "x86_64")]
2266 -                use crate::arch::x86_64::_mm_movemask_pi8;
2267 -                // _mm_movemask_pi8(a) creates an 8bit mask containing the most
2268 -                // significant bit of each byte of `a`. If all bits are set,
2269 -                // then all 8 lanes of the mask are true.
2270 -                _mm_movemask_pi8(crate::mem::transmute(self))
2271 -                    == u8::max_value() as i32
2272 -            }
2273 -        }
2274 -        impl Any for $id {
2275 -            #[inline]
2276 -            #[target_feature(enable = "sse")]
2277 -            unsafe fn any(self) -> bool {
2278 -                #[cfg(target_arch = "x86")]
2279 -                use crate::arch::x86::_mm_movemask_pi8;
2280 -                #[cfg(target_arch = "x86_64")]
2281 -                use crate::arch::x86_64::_mm_movemask_pi8;
2282 -
2283 -                _mm_movemask_pi8(crate::mem::transmute(self)) != 0
2284 -            }
2285 -        }
2286 -    };
2287 -}
2288 diff --git third_party/rust/packed_simd/src/codegen/shuffle.rs third_party/rust/packed_simd/src/codegen/shuffle.rs
2289 index 35a9db905339..d92c9ee22427 100644
2290 --- third_party/rust/packed_simd/src/codegen/shuffle.rs
2291 +++ third_party/rust/packed_simd/src/codegen/shuffle.rs
2292 @@ -2,301 +2,149 @@
2293  //! lanes and vector element types.
2294  
2295  use crate::masks::*;
2296 -use crate::sealed::Shuffle;
2297 -
2298 -impl Shuffle<[u32; 2]> for i8 {
2299 -    type Output = crate::codegen::i8x2;
2300 -}
2301 -impl Shuffle<[u32; 4]> for i8 {
2302 -    type Output = crate::codegen::i8x4;
2303 -}
2304 -impl Shuffle<[u32; 8]> for i8 {
2305 -    type Output = crate::codegen::i8x8;
2306 -}
2307 -impl Shuffle<[u32; 16]> for i8 {
2308 -    type Output = crate::codegen::i8x16;
2309 -}
2310 -impl Shuffle<[u32; 32]> for i8 {
2311 -    type Output = crate::codegen::i8x32;
2312 -}
2313 -impl Shuffle<[u32; 64]> for i8 {
2314 -    type Output = crate::codegen::i8x64;
2315 -}
2316 -
2317 -impl Shuffle<[u32; 2]> for u8 {
2318 -    type Output = crate::codegen::u8x2;
2319 -}
2320 -impl Shuffle<[u32; 4]> for u8 {
2321 -    type Output = crate::codegen::u8x4;
2322 -}
2323 -impl Shuffle<[u32; 8]> for u8 {
2324 -    type Output = crate::codegen::u8x8;
2325 -}
2326 -impl Shuffle<[u32; 16]> for u8 {
2327 -    type Output = crate::codegen::u8x16;
2328 -}
2329 -impl Shuffle<[u32; 32]> for u8 {
2330 -    type Output = crate::codegen::u8x32;
2331 -}
2332 -impl Shuffle<[u32; 64]> for u8 {
2333 -    type Output = crate::codegen::u8x64;
2334 -}
2335 -
2336 -impl Shuffle<[u32; 2]> for m8 {
2337 -    type Output = crate::codegen::m8x2;
2338 -}
2339 -impl Shuffle<[u32; 4]> for m8 {
2340 -    type Output = crate::codegen::m8x4;
2341 -}
2342 -impl Shuffle<[u32; 8]> for m8 {
2343 -    type Output = crate::codegen::m8x8;
2344 -}
2345 -impl Shuffle<[u32; 16]> for m8 {
2346 -    type Output = crate::codegen::m8x16;
2347 -}
2348 -impl Shuffle<[u32; 32]> for m8 {
2349 -    type Output = crate::codegen::m8x32;
2350 -}
2351 -impl Shuffle<[u32; 64]> for m8 {
2352 -    type Output = crate::codegen::m8x64;
2353 -}
2354 -
2355 -impl Shuffle<[u32; 2]> for i16 {
2356 -    type Output = crate::codegen::i16x2;
2357 -}
2358 -impl Shuffle<[u32; 4]> for i16 {
2359 -    type Output = crate::codegen::i16x4;
2360 -}
2361 -impl Shuffle<[u32; 8]> for i16 {
2362 -    type Output = crate::codegen::i16x8;
2363 -}
2364 -impl Shuffle<[u32; 16]> for i16 {
2365 -    type Output = crate::codegen::i16x16;
2366 -}
2367 -impl Shuffle<[u32; 32]> for i16 {
2368 -    type Output = crate::codegen::i16x32;
2369 -}
2370 -
2371 -impl Shuffle<[u32; 2]> for u16 {
2372 -    type Output = crate::codegen::u16x2;
2373 -}
2374 -impl Shuffle<[u32; 4]> for u16 {
2375 -    type Output = crate::codegen::u16x4;
2376 -}
2377 -impl Shuffle<[u32; 8]> for u16 {
2378 -    type Output = crate::codegen::u16x8;
2379 -}
2380 -impl Shuffle<[u32; 16]> for u16 {
2381 -    type Output = crate::codegen::u16x16;
2382 -}
2383 -impl Shuffle<[u32; 32]> for u16 {
2384 -    type Output = crate::codegen::u16x32;
2385 -}
2386 -
2387 -impl Shuffle<[u32; 2]> for m16 {
2388 -    type Output = crate::codegen::m16x2;
2389 -}
2390 -impl Shuffle<[u32; 4]> for m16 {
2391 -    type Output = crate::codegen::m16x4;
2392 -}
2393 -impl Shuffle<[u32; 8]> for m16 {
2394 -    type Output = crate::codegen::m16x8;
2395 -}
2396 -impl Shuffle<[u32; 16]> for m16 {
2397 -    type Output = crate::codegen::m16x16;
2398 -}
2399 -impl Shuffle<[u32; 32]> for m16 {
2400 -    type Output = crate::codegen::m16x32;
2401 -}
2402 -
2403 -impl Shuffle<[u32; 2]> for i32 {
2404 -    type Output = crate::codegen::i32x2;
2405 -}
2406 -impl Shuffle<[u32; 4]> for i32 {
2407 -    type Output = crate::codegen::i32x4;
2408 -}
2409 -impl Shuffle<[u32; 8]> for i32 {
2410 -    type Output = crate::codegen::i32x8;
2411 -}
2412 -impl Shuffle<[u32; 16]> for i32 {
2413 -    type Output = crate::codegen::i32x16;
2414 -}
2415 -
2416 -impl Shuffle<[u32; 2]> for u32 {
2417 -    type Output = crate::codegen::u32x2;
2418 -}
2419 -impl Shuffle<[u32; 4]> for u32 {
2420 -    type Output = crate::codegen::u32x4;
2421 -}
2422 -impl Shuffle<[u32; 8]> for u32 {
2423 -    type Output = crate::codegen::u32x8;
2424 -}
2425 -impl Shuffle<[u32; 16]> for u32 {
2426 -    type Output = crate::codegen::u32x16;
2427 -}
2428 -
2429 -impl Shuffle<[u32; 2]> for f32 {
2430 -    type Output = crate::codegen::f32x2;
2431 -}
2432 -impl Shuffle<[u32; 4]> for f32 {
2433 -    type Output = crate::codegen::f32x4;
2434 -}
2435 -impl Shuffle<[u32; 8]> for f32 {
2436 -    type Output = crate::codegen::f32x8;
2437 -}
2438 -impl Shuffle<[u32; 16]> for f32 {
2439 -    type Output = crate::codegen::f32x16;
2440 -}
2441 -
2442 -impl Shuffle<[u32; 2]> for m32 {
2443 -    type Output = crate::codegen::m32x2;
2444 -}
2445 -impl Shuffle<[u32; 4]> for m32 {
2446 -    type Output = crate::codegen::m32x4;
2447 -}
2448 -impl Shuffle<[u32; 8]> for m32 {
2449 -    type Output = crate::codegen::m32x8;
2450 -}
2451 -impl Shuffle<[u32; 16]> for m32 {
2452 -    type Output = crate::codegen::m32x16;
2453 -}
2454 +use crate::sealed::{Shuffle, Seal};
2455 +
2456 +macro_rules! impl_shuffle {
2457 +    ($array:ty, $base:ty, $out:ty) => {
2458 +        impl Seal<$array> for $base {}
2459 +        impl Shuffle<$array> for $base {
2460 +            type Output = $out;
2461 +        }
2462 +    }
2463 +}
2464 +
2465 +impl_shuffle! { [u32; 2], i8, crate::codegen::i8x2 }
2466 +impl_shuffle! { [u32; 4], i8, crate::codegen::i8x4 }
2467 +impl_shuffle! { [u32; 8], i8, crate::codegen::i8x8 }
2468 +impl_shuffle! { [u32; 16], i8, crate::codegen::i8x16 }
2469 +impl_shuffle! { [u32; 32], i8, crate::codegen::i8x32 }
2470 +impl_shuffle! { [u32; 64], i8, crate::codegen::i8x64 }
2471 +
2472 +impl_shuffle! { [u32; 2], u8, crate::codegen::u8x2 }
2473 +impl_shuffle! { [u32; 4], u8, crate::codegen::u8x4 }
2474 +impl_shuffle! { [u32; 8], u8, crate::codegen::u8x8 }
2475 +impl_shuffle! { [u32; 16], u8, crate::codegen::u8x16 }
2476 +impl_shuffle! { [u32; 32], u8, crate::codegen::u8x32 }
2477 +impl_shuffle! { [u32; 64], u8, crate::codegen::u8x64 }
2478 +
2479 +impl_shuffle! { [u32; 2], m8, crate::codegen::m8x2 }
2480 +impl_shuffle! { [u32; 4], m8, crate::codegen::m8x4 }
2481 +impl_shuffle! { [u32; 8], m8, crate::codegen::m8x8 }
2482 +impl_shuffle! { [u32; 16], m8, crate::codegen::m8x16 }
2483 +impl_shuffle! { [u32; 32], m8, crate::codegen::m8x32 }
2484 +impl_shuffle! { [u32; 64], m8, crate::codegen::m8x64 }
2485 +
2486 +impl_shuffle! { [u32; 2], i16, crate::codegen::i16x2 }
2487 +impl_shuffle! { [u32; 4], i16, crate::codegen::i16x4 }
2488 +impl_shuffle! { [u32; 8], i16, crate::codegen::i16x8 }
2489 +impl_shuffle! { [u32; 16], i16, crate::codegen::i16x16 }
2490 +impl_shuffle! { [u32; 32], i16, crate::codegen::i16x32 }
2491 +
2492 +impl_shuffle! { [u32; 2], u16, crate::codegen::u16x2 }
2493 +impl_shuffle! { [u32; 4], u16, crate::codegen::u16x4 }
2494 +impl_shuffle! { [u32; 8], u16, crate::codegen::u16x8 }
2495 +impl_shuffle! { [u32; 16], u16, crate::codegen::u16x16 }
2496 +impl_shuffle! { [u32; 32], u16, crate::codegen::u16x32 }
2497 +
2498 +impl_shuffle! { [u32; 2], m16, crate::codegen::m16x2 }
2499 +impl_shuffle! { [u32; 4], m16, crate::codegen::m16x4 }
2500 +impl_shuffle! { [u32; 8], m16, crate::codegen::m16x8 }
2501 +impl_shuffle! { [u32; 16], m16, crate::codegen::m16x16 }
2502 +
2503 +impl_shuffle! { [u32; 2], i32, crate::codegen::i32x2 }
2504 +impl_shuffle! { [u32; 4], i32, crate::codegen::i32x4 }
2505 +impl_shuffle! { [u32; 8], i32, crate::codegen::i32x8 }
2506 +impl_shuffle! { [u32; 16], i32, crate::codegen::i32x16 }
2507 +
2508 +impl_shuffle! { [u32; 2], u32, crate::codegen::u32x2 }
2509 +impl_shuffle! { [u32; 4], u32, crate::codegen::u32x4 }
2510 +impl_shuffle! { [u32; 8], u32, crate::codegen::u32x8 }
2511 +impl_shuffle! { [u32; 16], u32, crate::codegen::u32x16 }
2512 +
2513 +impl_shuffle! { [u32; 2], f32, crate::codegen::f32x2 }
2514 +impl_shuffle! { [u32; 4], f32, crate::codegen::f32x4 }
2515 +impl_shuffle! { [u32; 8], f32, crate::codegen::f32x8 }
2516 +impl_shuffle! { [u32; 16], f32, crate::codegen::f32x16 }
2517 +
2518 +impl_shuffle! { [u32; 2], m32, crate::codegen::m32x2 }
2519 +impl_shuffle! { [u32; 4], m32, crate::codegen::m32x4 }
2520 +impl_shuffle! { [u32; 8], m32, crate::codegen::m32x8 }
2521 +impl_shuffle! { [u32; 16], m32, crate::codegen::m32x16 }
2522  
2523  /* FIXME: 64-bit single element vector
2524 -impl Shuffle<[u32; 1]> for i64 {
2525 -    type Output = crate::codegen::i64x1;
2526 -}
2527 +impl_shuffle! { [u32; 1], i64, crate::codegen::i64x1 }
2528  */
2529 -impl Shuffle<[u32; 2]> for i64 {
2530 -    type Output = crate::codegen::i64x2;
2531 -}
2532 -impl Shuffle<[u32; 4]> for i64 {
2533 -    type Output = crate::codegen::i64x4;
2534 -}
2535 -impl Shuffle<[u32; 8]> for i64 {
2536 -    type Output = crate::codegen::i64x8;
2537 -}
2538 +impl_shuffle! { [u32; 2], i64, crate::codegen::i64x2 }
2539 +impl_shuffle! { [u32; 4], i64, crate::codegen::i64x4 }
2540 +impl_shuffle! { [u32; 8], i64, crate::codegen::i64x8 }
2541  
2542  /* FIXME: 64-bit single element vector
2543 -impl Shuffle<[u32; 1]> for u64 {
2544 -    type Output = crate::codegen::u64x1;
2545 -}
2546 +impl_shuffle! { [u32; 1], i64, crate::codegen::i64x1 }
2547  */
2548 -impl Shuffle<[u32; 2]> for u64 {
2549 -    type Output = crate::codegen::u64x2;
2550 -}
2551 -impl Shuffle<[u32; 4]> for u64 {
2552 -    type Output = crate::codegen::u64x4;
2553 -}
2554 -impl Shuffle<[u32; 8]> for u64 {
2555 -    type Output = crate::codegen::u64x8;
2556 -}
2557 +impl_shuffle! { [u32; 2], u64, crate::codegen::u64x2 }
2558 +impl_shuffle! { [u32; 4], u64, crate::codegen::u64x4 }
2559 +impl_shuffle! { [u32; 8], u64, crate::codegen::u64x8 }
2560  
2561  /* FIXME: 64-bit single element vector
2562 -impl Shuffle<[u32; 1]> for f64 {
2563 -    type Output = crate::codegen::f64x1;
2564 -}
2565 +impl_shuffle! { [u32; 1], i64, crate::codegen::i64x1 }
2566  */
2567 -impl Shuffle<[u32; 2]> for f64 {
2568 -    type Output = crate::codegen::f64x2;
2569 -}
2570 -impl Shuffle<[u32; 4]> for f64 {
2571 -    type Output = crate::codegen::f64x4;
2572 -}
2573 -impl Shuffle<[u32; 8]> for f64 {
2574 -    type Output = crate::codegen::f64x8;
2575 -}
2576 +impl_shuffle! { [u32; 2], f64, crate::codegen::f64x2 }
2577 +impl_shuffle! { [u32; 4], f64, crate::codegen::f64x4 }
2578 +impl_shuffle! { [u32; 8], f64, crate::codegen::f64x8 }
2579  
2580  /* FIXME: 64-bit single element vector
2581 -impl Shuffle<[u32; 1]> for m64 {
2582 -    type Output = crate::codegen::m64x1;
2583 -}
2584 +impl_shuffle! { [u32; 1], i64, crate::codegen::i64x1 }
2585  */
2586 -impl Shuffle<[u32; 2]> for m64 {
2587 -    type Output = crate::codegen::m64x2;
2588 -}
2589 -impl Shuffle<[u32; 4]> for m64 {
2590 -    type Output = crate::codegen::m64x4;
2591 -}
2592 -impl Shuffle<[u32; 8]> for m64 {
2593 -    type Output = crate::codegen::m64x8;
2594 -}
2595 +impl_shuffle! { [u32; 2], m64, crate::codegen::m64x2 }
2596 +impl_shuffle! { [u32; 4], m64, crate::codegen::m64x4 }
2597 +impl_shuffle! { [u32; 8], m64, crate::codegen::m64x8 }
2598  
2599 -impl Shuffle<[u32; 2]> for isize {
2600 -    type Output = crate::codegen::isizex2;
2601 -}
2602 -impl Shuffle<[u32; 4]> for isize {
2603 -    type Output = crate::codegen::isizex4;
2604 -}
2605 -impl Shuffle<[u32; 8]> for isize {
2606 -    type Output = crate::codegen::isizex8;
2607 -}
2608 +impl_shuffle! { [u32; 2], isize, crate::codegen::isizex2 }
2609 +impl_shuffle! { [u32; 4], isize, crate::codegen::isizex4 }
2610 +impl_shuffle! { [u32; 8], isize, crate::codegen::isizex8 }
2611  
2612 -impl Shuffle<[u32; 2]> for usize {
2613 -    type Output = crate::codegen::usizex2;
2614 -}
2615 -impl Shuffle<[u32; 4]> for usize {
2616 -    type Output = crate::codegen::usizex4;
2617 -}
2618 -impl Shuffle<[u32; 8]> for usize {
2619 -    type Output = crate::codegen::usizex8;
2620 -}
2621 +impl_shuffle! { [u32; 2], usize, crate::codegen::usizex2 }
2622 +impl_shuffle! { [u32; 4], usize, crate::codegen::usizex4 }
2623 +impl_shuffle! { [u32; 8], usize, crate::codegen::usizex8 }
2624  
2625 +impl_shuffle! { [u32; 2], msize, crate::codegen::msizex2 }
2626 +impl_shuffle! { [u32; 4], msize, crate::codegen::msizex4 }
2627 +impl_shuffle! { [u32; 8], msize, crate::codegen::msizex8 }
2628 +
2629 +impl<T> Seal<[u32; 2]> for *const T {}
2630  impl<T> Shuffle<[u32; 2]> for *const T {
2631      type Output = crate::codegen::cptrx2<T>;
2632  }
2633 +impl<T> Seal<[u32; 4]> for *const T {}
2634  impl<T> Shuffle<[u32; 4]> for *const T {
2635      type Output = crate::codegen::cptrx4<T>;
2636  }
2637 +impl<T> Seal<[u32; 8]> for *const T {}
2638  impl<T> Shuffle<[u32; 8]> for *const T {
2639      type Output = crate::codegen::cptrx8<T>;
2640  }
2641  
2642 +impl<T> Seal<[u32; 2]> for *mut T {}
2643  impl<T> Shuffle<[u32; 2]> for *mut T {
2644      type Output = crate::codegen::mptrx2<T>;
2645  }
2646 +impl<T> Seal<[u32; 4]> for *mut T {}
2647  impl<T> Shuffle<[u32; 4]> for *mut T {
2648      type Output = crate::codegen::mptrx4<T>;
2649  }
2650 +impl<T> Seal<[u32; 8]> for *mut T {}
2651  impl<T> Shuffle<[u32; 8]> for *mut T {
2652      type Output = crate::codegen::mptrx8<T>;
2653  }
2654  
2655 -impl Shuffle<[u32; 2]> for msize {
2656 -    type Output = crate::codegen::msizex2;
2657 -}
2658 -impl Shuffle<[u32; 4]> for msize {
2659 -    type Output = crate::codegen::msizex4;
2660 -}
2661 -impl Shuffle<[u32; 8]> for msize {
2662 -    type Output = crate::codegen::msizex8;
2663 -}
2664 +impl_shuffle! { [u32; 1], i128, crate::codegen::i128x1 }
2665 +impl_shuffle! { [u32; 2], i128, crate::codegen::i128x2 }
2666 +impl_shuffle! { [u32; 4], i128, crate::codegen::i128x4 }
2667  
2668 -impl Shuffle<[u32; 1]> for i128 {
2669 -    type Output = crate::codegen::i128x1;
2670 -}
2671 -impl Shuffle<[u32; 2]> for i128 {
2672 -    type Output = crate::codegen::i128x2;
2673 -}
2674 -impl Shuffle<[u32; 4]> for i128 {
2675 -    type Output = crate::codegen::i128x4;
2676 -}
2677 +impl_shuffle! { [u32; 1], u128, crate::codegen::u128x1 }
2678 +impl_shuffle! { [u32; 2], u128, crate::codegen::u128x2 }
2679 +impl_shuffle! { [u32; 4], u128, crate::codegen::u128x4 }
2680  
2681 -impl Shuffle<[u32; 1]> for u128 {
2682 -    type Output = crate::codegen::u128x1;
2683 -}
2684 -impl Shuffle<[u32; 2]> for u128 {
2685 -    type Output = crate::codegen::u128x2;
2686 -}
2687 -impl Shuffle<[u32; 4]> for u128 {
2688 -    type Output = crate::codegen::u128x4;
2689 -}
2690 -
2691 -impl Shuffle<[u32; 1]> for m128 {
2692 -    type Output = crate::codegen::m128x1;
2693 -}
2694 -impl Shuffle<[u32; 2]> for m128 {
2695 -    type Output = crate::codegen::m128x2;
2696 -}
2697 -impl Shuffle<[u32; 4]> for m128 {
2698 -    type Output = crate::codegen::m128x4;
2699 -}
2700 +impl_shuffle! { [u32; 1], m128, crate::codegen::m128x1 }
2701 +impl_shuffle! { [u32; 2], m128, crate::codegen::m128x2 }
2702 +impl_shuffle! { [u32; 4], m128, crate::codegen::m128x4 }
2703 diff --git third_party/rust/packed_simd/src/codegen/shuffle1_dyn.rs third_party/rust/packed_simd/src/codegen/shuffle1_dyn.rs
2704 index 1e9f5816371a..a5403a06bb6e 100644
2705 --- third_party/rust/packed_simd/src/codegen/shuffle1_dyn.rs
2706 +++ third_party/rust/packed_simd/src/codegen/shuffle1_dyn.rs
2707 @@ -28,31 +28,10 @@ macro_rules! impl_fallback {
2708  macro_rules! impl_shuffle1_dyn {
2709      (u8x8) => {
2710          cfg_if! {
2711 -            if #[cfg(all(any(target_arch = "x86", target_arch = "x86_64"),
2712 -                         target_feature = "ssse3"))] {
2713 -                impl Shuffle1Dyn for u8x8 {
2714 -                    type Indices = Self;
2715 -                    #[inline]
2716 -                    fn shuffle1_dyn(self, indices: Self::Indices) -> Self {
2717 -                        #[cfg(target_arch = "x86")]
2718 -                        use crate::arch::x86::_mm_shuffle_pi8;
2719 -                        #[cfg(target_arch = "x86_64")]
2720 -                        use crate::arch::x86_64::_mm_shuffle_pi8;
2721 -
2722 -                        unsafe {
2723 -                            crate::mem::transmute(
2724 -                                _mm_shuffle_pi8(
2725 -                                    crate::mem::transmute(self.0),
2726 -                                    crate::mem::transmute(indices.0)
2727 -                                )
2728 -                            )
2729 -                        }
2730 -                    }
2731 -                }
2732 -            } else if #[cfg(all(
2733 +            if #[cfg(all(
2734                  any(
2735 -                    all(target_aarch = "aarch64", target_feature = "neon"),
2736 -                    all(target_aarch = "arm", target_feature = "v7",
2737 +                    all(target_arch = "aarch64", target_feature = "neon"),
2738 +                    all(target_arch = "doesnotexist", target_feature = "v7",
2739                          target_feature = "neon")
2740                  ),
2741                  any(feature = "core_arch", libcore_neon)
2742 @@ -62,9 +41,9 @@ macro_rules! impl_shuffle1_dyn {
2743                      type Indices = Self;
2744                      #[inline]
2745                      fn shuffle1_dyn(self, indices: Self::Indices) -> Self {
2746 -                        #[cfg(targt_arch = "aarch64")]
2747 +                        #[cfg(target_arch = "aarch64")]
2748                          use crate::arch::aarch64::vtbl1_u8;
2749 -                        #[cfg(targt_arch = "arm")]
2750 +                        #[cfg(target_arch = "doesnotexist")]
2751                          use crate::arch::arm::vtbl1_u8;
2752  
2753                          // This is safe because the binary is compiled with
2754 @@ -106,7 +85,7 @@ macro_rules! impl_shuffle1_dyn {
2755                          }
2756                      }
2757                  }
2758 -            } else if #[cfg(all(target_aarch = "aarch64", target_feature = "neon",
2759 +            } else if #[cfg(all(target_arch = "aarch64", target_feature = "neon",
2760                                  any(feature = "core_arch", libcore_neon)))] {
2761                  impl Shuffle1Dyn for u8x16 {
2762                      type Indices = Self;
2763 @@ -125,7 +104,7 @@ macro_rules! impl_shuffle1_dyn {
2764                          }
2765                      }
2766                  }
2767 -            } else if #[cfg(all(target_aarch = "arm", target_feature = "v7",
2768 +            } else if #[cfg(all(target_arch = "doesnotexist", target_feature = "v7",
2769                                  target_feature = "neon",
2770                                  any(feature = "core_arch", libcore_neon)))] {
2771                  impl Shuffle1Dyn for u8x16 {
2772 diff --git third_party/rust/packed_simd/src/codegen/vPtr.rs third_party/rust/packed_simd/src/codegen/vPtr.rs
2773 index 1f2bc7714dd9..cf4765538178 100644
2774 --- third_party/rust/packed_simd/src/codegen/vPtr.rs
2775 +++ third_party/rust/packed_simd/src/codegen/vPtr.rs
2776 @@ -8,6 +8,7 @@ macro_rules! impl_simd_ptr {
2777          pub struct $tuple_id<$ty>($(crate $tys),*);
2778          //^^^^^^^ leaked through SimdArray
2779  
2780 +        impl<$ty> crate::sealed::Seal for [$ptr_ty; $elem_count] {}
2781          impl<$ty> crate::sealed::SimdArray for [$ptr_ty; $elem_count] {
2782              type Tuple = $tuple_id<$ptr_ty>;
2783              type T = $ptr_ty;
2784 @@ -15,6 +16,7 @@ macro_rules! impl_simd_ptr {
2785              type NT = [u32; $elem_count];
2786          }
2787  
2788 +        impl<$ty> crate::sealed::Seal for $tuple_id<$ptr_ty> {}
2789          impl<$ty> crate::sealed::Simd for $tuple_id<$ptr_ty> {
2790              type Element = $ptr_ty;
2791              const LANES: usize = $elem_count;
2792 diff --git third_party/rust/packed_simd/src/lib.rs third_party/rust/packed_simd/src/lib.rs
2793 index d73645e72fbe..b0b56d4d7461 100644
2794 --- third_party/rust/packed_simd/src/lib.rs
2795 +++ third_party/rust/packed_simd/src/lib.rs
2796 @@ -201,6 +201,7 @@
2797  
2798  #![feature(
2799      repr_simd,
2800 +    rustc_attrs,
2801      const_fn,
2802      platform_intrinsics,
2803      stdsimd,
2804 @@ -209,22 +210,26 @@
2805      link_llvm_intrinsics,
2806      core_intrinsics,
2807      stmt_expr_attributes,
2808 -    align_offset,
2809 -    mmx_target_feature,
2810      crate_visibility_modifier,
2811      custom_inner_attributes
2812  )]
2813  #![allow(non_camel_case_types, non_snake_case,
2814 -         clippy::cast_possible_truncation,
2815 -         clippy::cast_lossless,
2816 -         clippy::cast_possible_wrap,
2817 -         clippy::cast_precision_loss,
2818 -         // This lint is currently broken for generic code
2819 -         // See https://github.com/rust-lang/rust-clippy/issues/3410
2820 -         clippy::use_self
2821 +        // FIXME: these types are unsound in C FFI already
2822 +        // See https://github.com/rust-lang/rust/issues/53346
2823 +        improper_ctypes_definitions,
2824 +        clippy::cast_possible_truncation,
2825 +        clippy::cast_lossless,
2826 +        clippy::cast_possible_wrap,
2827 +        clippy::cast_precision_loss,
2828 +        // TODO: manually add the `#[must_use]` attribute where appropriate
2829 +        clippy::must_use_candidate,
2830 +        // This lint is currently broken for generic code
2831 +        // See https://github.com/rust-lang/rust-clippy/issues/3410
2832 +        clippy::use_self,
2833 +        clippy::wrong_self_convention,
2834  )]
2835  #![cfg_attr(test, feature(hashmap_internals))]
2836 -#![deny(warnings, rust_2018_idioms, clippy::missing_inline_in_public_items)]
2837 +#![deny(rust_2018_idioms, clippy::missing_inline_in_public_items)]
2838  #![no_std]
2839  
2840  use cfg_if::cfg_if;
2841 @@ -256,6 +261,8 @@ mod api;
2842  mod codegen;
2843  mod sealed;
2844  
2845 +pub use crate::sealed::{Simd as SimdVector, Shuffle, SimdArray, Mask};
2846 +
2847  /// Packed SIMD vector type.
2848  ///
2849  /// # Examples
2850 @@ -276,6 +283,8 @@ pub struct Simd<A: sealed::SimdArray>(
2851      #[doc(hidden)] pub <A as sealed::SimdArray>::Tuple,
2852  );
2853  
2854 +impl<A: sealed::SimdArray> sealed::Seal for Simd<A> {}
2855 +
2856  /// Wrapper over `T` implementing a lexicoraphical order via the `PartialOrd`
2857  /// and/or `Ord` traits.
2858  #[repr(transparent)]
2859 diff --git third_party/rust/packed_simd/src/masks.rs third_party/rust/packed_simd/src/masks.rs
2860 index f83c4da95750..aeb36d232804 100644
2861 --- third_party/rust/packed_simd/src/masks.rs
2862 +++ third_party/rust/packed_simd/src/masks.rs
2863 @@ -6,7 +6,9 @@ macro_rules! impl_mask_ty {
2864          #[derive(Copy, Clone)]
2865          pub struct $id($elem_ty);
2866  
2867 +        impl crate::sealed::Seal for $id {}
2868          impl crate::sealed::Mask for $id {
2869 +            #[inline]
2870              fn test(&self) -> bool {
2871                  $id::test(self)
2872              }
2873 diff --git third_party/rust/packed_simd/src/sealed.rs third_party/rust/packed_simd/src/sealed.rs
2874 index 832acd3f1d54..0ec20300fdd4 100644
2875 --- third_party/rust/packed_simd/src/sealed.rs
2876 +++ third_party/rust/packed_simd/src/sealed.rs
2877 @@ -1,8 +1,11 @@
2878  //! Sealed traits
2879  
2880 +/// A sealed trait, this is logically private to the crate
2881 +/// and will prevent implementations from outside the crate
2882 +pub trait Seal<T = ()> {}
2883 +
2884  /// Trait implemented by arrays that can be SIMD types.
2885 -#[doc(hidden)]
2886 -pub trait SimdArray {
2887 +pub trait SimdArray: Seal {
2888      /// The type of the #[repr(simd)] type.
2889      type Tuple: Copy + Clone;
2890      /// The element type of the vector.
2891 @@ -16,7 +19,7 @@ pub trait SimdArray {
2892  /// This traits is used to constraint the arguments
2893  /// and result type of the portable shuffles.
2894  #[doc(hidden)]
2895 -pub trait Shuffle<Lanes> {
2896 +pub trait Shuffle<Lanes>: Seal<Lanes> {
2897      // Lanes is a `[u32; N]` where `N` is the number of vector lanes
2898  
2899      /// The result type of the shuffle.
2900 @@ -24,8 +27,7 @@ pub trait Shuffle<Lanes> {
2901  }
2902  
2903  /// This trait is implemented by all SIMD vector types.
2904 -#[doc(hidden)]
2905 -pub trait Simd {
2906 +pub trait Simd: Seal {
2907      /// Element type of the SIMD vector
2908      type Element;
2909      /// The number of elements in the SIMD vector.
2910 @@ -35,7 +37,6 @@ pub trait Simd {
2911  }
2912  
2913  /// This trait is implemented by all mask types
2914 -#[doc(hidden)]
2915 -pub trait Mask {
2916 +pub trait Mask: Seal {
2917      fn test(&self) -> bool;
2918  }
2919 diff --git third_party/rust/packed_simd/src/testing/utils.rs third_party/rust/packed_simd/src/testing/utils.rs
2920 index 7b8f21ac1c55..21f27aae5432 100644
2921 --- third_party/rust/packed_simd/src/testing/utils.rs
2922 +++ third_party/rust/packed_simd/src/testing/utils.rs
2923 @@ -1,6 +1,8 @@
2924  //! Testing utilities
2925  
2926  #![allow(dead_code)]
2927 +// FIXME: Or don't. But it's true this is a problematic comparison.
2928 +#![allow(clippy::neg_cmp_op_on_partial_ord)]
2929  
2930  use crate::{cmp::PartialOrd, fmt::Debug, LexicographicallyOrdered};
2931  
2932 @@ -19,14 +21,19 @@ pub fn test_lt<T>(
2933      assert!(a <= b, "{:?}, {:?}", a, b);
2934      assert!(b >= a, "{:?}, {:?}", a, b);
2935  
2936 -    // Irreflexivity
2937 -    assert!(!(a < a), "{:?}, {:?}", a, b);
2938 -    assert!(!(b < b), "{:?}, {:?}", a, b);
2939 -    assert!(!(a > a), "{:?}, {:?}", a, b);
2940 -    assert!(!(b > b), "{:?}, {:?}", a, b);
2941 +    // The elegance of the mathematical expression of irreflexivity is more
2942 +    // than clippy can handle.
2943 +    #[allow(clippy::eq_op)]
2944 +    {
2945 +        // Irreflexivity
2946 +        assert!(!(a < a), "{:?}, {:?}", a, b);
2947 +        assert!(!(b < b), "{:?}, {:?}", a, b);
2948 +        assert!(!(a > a), "{:?}, {:?}", a, b);
2949 +        assert!(!(b > b), "{:?}, {:?}", a, b);
2950  
2951 -    assert!(a <= a, "{:?}, {:?}", a, b);
2952 -    assert!(b <= b, "{:?}, {:?}", a, b);
2953 +        assert!(a <= a, "{:?}, {:?}", a, b);
2954 +        assert!(b <= b, "{:?}, {:?}", a, b);
2955 +    }
2956  }
2957  
2958  /// Tests PartialOrd for `a` and `b` where `a <= b` is true.
2959 @@ -38,8 +45,8 @@ pub fn test_le<T>(
2960      assert!(a <= b, "{:?}, {:?}", a, b);
2961      assert!(b >= a, "{:?}, {:?}", a, b);
2962  
2963 -    assert!(a == b || a < b, "{:?}, {:?}", a, b);
2964 -    assert!(a == b || b > a, "{:?}, {:?}", a, b);
2965 +    assert!(a <= b, "{:?}, {:?}", a, b);
2966 +    assert!(b >= a, "{:?}, {:?}", a, b);
2967  
2968      if a == b {
2969          assert!(!(a < b), "{:?}, {:?}", a, b);
2970 diff --git third_party/rust/packed_simd/src/v128.rs third_party/rust/packed_simd/src/v128.rs
2971 index 1d0282dc4278..7949f6619a4f 100644
2972 --- third_party/rust/packed_simd/src/v128.rs
2973 +++ third_party/rust/packed_simd/src/v128.rs
2974 @@ -1,42 +1,42 @@
2975  //! 128-bit wide vector types
2976 -#![rustfmt::skip]
2977 +#[rustfmt::skip]
2978  
2979  use crate::*;
2980  
2981 -impl_i!([i8; 16]: i8x16, m8x16 | i8 | test_v128 |
2982 +impl_i!([i8; 16]: i8x16, m8x16 | i8, u16 | test_v128 |
2983          x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15 |
2984          From: |
2985          /// A 128-bit vector with 16 `i8` lanes.
2986  );
2987 -impl_u!([u8; 16]: u8x16, m8x16 | u8 | test_v128 |
2988 +impl_u!([u8; 16]: u8x16, m8x16 | u8, u16 | test_v128 |
2989          x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15 |
2990          From: |
2991          /// A 128-bit vector with 16 `u8` lanes.
2992  );
2993 -impl_m!([m8; 16]: m8x16 | i8 | test_v128 |
2994 +impl_m!([m8; 16]: m8x16 | i8, u16 | test_v128 |
2995          x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15 |
2996          From: m16x16 |
2997          /// A 128-bit vector mask with 16 `m8` lanes.
2998  );
2999  
3000 -impl_i!([i16; 8]: i16x8, m16x8 | i16 | test_v128 | x0, x1, x2, x3, x4, x5, x6, x7 |
3001 +impl_i!([i16; 8]: i16x8, m16x8 | i16, u8 | test_v128 | x0, x1, x2, x3, x4, x5, x6, x7 |
3002          From: i8x8, u8x8 |
3003          /// A 128-bit vector with 8 `i16` lanes.
3004  );
3005 -impl_u!([u16; 8]: u16x8, m16x8 | u16| test_v128 | x0, x1, x2, x3, x4, x5, x6, x7 |
3006 +impl_u!([u16; 8]: u16x8, m16x8 | u16, u8 | test_v128 | x0, x1, x2, x3, x4, x5, x6, x7 |
3007          From: u8x8 |
3008          /// A 128-bit vector with 8 `u16` lanes.
3009  );
3010 -impl_m!([m16; 8]: m16x8 | i16 | test_v128 | x0, x1, x2, x3, x4, x5, x6, x7 |
3011 +impl_m!([m16; 8]: m16x8 | i16, u8 | test_v128 | x0, x1, x2, x3, x4, x5, x6, x7 |
3012          From: m8x8, m32x8 |
3013          /// A 128-bit vector mask with 8 `m16` lanes.
3014  );
3015  
3016 -impl_i!([i32; 4]: i32x4, m32x4 | i32 | test_v128 | x0, x1, x2, x3 |
3017 +impl_i!([i32; 4]: i32x4, m32x4 | i32, u8 | test_v128 | x0, x1, x2, x3 |
3018          From: i8x4, u8x4, i16x4, u16x4  |
3019          /// A 128-bit vector with 4 `i32` lanes.
3020  );
3021 -impl_u!([u32; 4]: u32x4, m32x4 | u32| test_v128 | x0, x1, x2, x3 |
3022 +impl_u!([u32; 4]: u32x4, m32x4 | u32, u8 | test_v128 | x0, x1, x2, x3 |
3023          From: u8x4, u16x4 |
3024          /// A 128-bit vector with 4 `u32` lanes.
3025  );
3026 @@ -44,16 +44,16 @@ impl_f!([f32; 4]: f32x4, m32x4 | f32 | test_v128 | x0, x1, x2, x3 |
3027          From: i8x4, u8x4, i16x4, u16x4 |
3028          /// A 128-bit vector with 4 `f32` lanes.
3029  );
3030 -impl_m!([m32; 4]: m32x4 | i32 | test_v128 | x0, x1, x2, x3 |
3031 +impl_m!([m32; 4]: m32x4 | i32, u8 | test_v128 | x0, x1, x2, x3 |
3032          From: m8x4, m16x4, m64x4 |
3033          /// A 128-bit vector mask with 4 `m32` lanes.
3034  );
3035  
3036 -impl_i!([i64; 2]: i64x2, m64x2 | i64 | test_v128 | x0, x1 |
3037 +impl_i!([i64; 2]: i64x2, m64x2 | i64, u8 | test_v128 | x0, x1 |
3038          From: i8x2, u8x2, i16x2, u16x2, i32x2, u32x2 |
3039          /// A 128-bit vector with 2 `i64` lanes.
3040  );
3041 -impl_u!([u64; 2]: u64x2, m64x2 | u64 | test_v128 | x0, x1 |
3042 +impl_u!([u64; 2]: u64x2, m64x2 | u64, u8 | test_v128 | x0, x1 |
3043          From: u8x2, u16x2, u32x2 |
3044          /// A 128-bit vector with 2 `u64` lanes.
3045  );
3046 @@ -61,20 +61,20 @@ impl_f!([f64; 2]: f64x2, m64x2 | f64 | test_v128 | x0, x1 |
3047          From: i8x2, u8x2, i16x2, u16x2, i32x2, u32x2, f32x2 |
3048          /// A 128-bit vector with 2 `f64` lanes.
3049  );
3050 -impl_m!([m64; 2]: m64x2 | i64 | test_v128 | x0, x1 |
3051 +impl_m!([m64; 2]: m64x2 | i64, u8 | test_v128 | x0, x1 |
3052          From: m8x2, m16x2, m32x2, m128x2 |
3053          /// A 128-bit vector mask with 2 `m64` lanes.
3054  );
3055  
3056 -impl_i!([i128; 1]: i128x1, m128x1 | i128 | test_v128 | x0 |
3057 +impl_i!([i128; 1]: i128x1, m128x1 | i128, u8 | test_v128 | x0 |
3058          From: /*i8x1, u8x1, i16x1, u16x1, i32x1, u32x1, i64x1, u64x1 */ | // FIXME: unary small vector types
3059          /// A 128-bit vector with 1 `i128` lane.
3060  );
3061 -impl_u!([u128; 1]: u128x1, m128x1 | u128 | test_v128 | x0 |
3062 +impl_u!([u128; 1]: u128x1, m128x1 | u128, u8 | test_v128 | x0 |
3063          From: /*u8x1, u16x1, u32x1, u64x1 */ | // FIXME: unary small vector types
3064          /// A 128-bit vector with 1 `u128` lane.
3065  );
3066 -impl_m!([m128; 1]: m128x1 | i128 | test_v128 | x0 |
3067 +impl_m!([m128; 1]: m128x1 | i128, u8 | test_v128 | x0 |
3068          From: /*m8x1, m16x1, m32x1, m64x1 */ | // FIXME: unary small vector types
3069          /// A 128-bit vector mask with 1 `m128` lane.
3070  );
3071 diff --git third_party/rust/packed_simd/src/v16.rs third_party/rust/packed_simd/src/v16.rs
3072 index 67a3832d2530..4ca5afb2a7d5 100644
3073 --- third_party/rust/packed_simd/src/v16.rs
3074 +++ third_party/rust/packed_simd/src/v16.rs
3075 @@ -2,15 +2,15 @@
3076  
3077  use crate::*;
3078  
3079 -impl_i!([i8; 2]: i8x2, m8x2 | i8 | test_v16 | x0, x1 |
3080 +impl_i!([i8; 2]: i8x2, m8x2 | i8, u8 | test_v16 | x0, x1 |
3081          From: |
3082          /// A 16-bit vector with 2 `i8` lanes.
3083  );
3084 -impl_u!([u8; 2]: u8x2, m8x2 | u8 | test_v16 | x0, x1 |
3085 +impl_u!([u8; 2]: u8x2, m8x2 | u8, u8 | test_v16 | x0, x1 |
3086          From: |
3087          /// A 16-bit vector with 2 `u8` lanes.
3088  );
3089 -impl_m!([m8; 2]: m8x2 | i8 | test_v16 | x0, x1 |
3090 +impl_m!([m8; 2]: m8x2 | i8, u8 | test_v16 | x0, x1 |
3091          From: m16x2, m32x2, m64x2, m128x2 |
3092          /// A 16-bit vector mask with 2 `m8` lanes.
3093  );
3094 diff --git third_party/rust/packed_simd/src/v256.rs third_party/rust/packed_simd/src/v256.rs
3095 index 6b59336f68b6..f0c3bc281383 100644
3096 --- third_party/rust/packed_simd/src/v256.rs
3097 +++ third_party/rust/packed_simd/src/v256.rs
3098 @@ -1,48 +1,48 @@
3099  //! 256-bit wide vector types
3100 -#![rustfmt::skip]
3101 +#[rustfmt::skip]
3102  
3103  use crate::*;
3104  
3105 -impl_i!([i8; 32]: i8x32, m8x32 | i8 | test_v256 |
3106 +impl_i!([i8; 32]: i8x32, m8x32 | i8, u32 | test_v256 |
3107          x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15,
3108          x16, x17, x18, x19, x20, x21, x22, x23, x24, x25, x26, x27, x28, x29, x30, x31 |
3109          From: |
3110          /// A 256-bit vector with 32 `i8` lanes.
3111  );
3112 -impl_u!([u8; 32]: u8x32, m8x32 | u8 | test_v256 |
3113 +impl_u!([u8; 32]: u8x32, m8x32 | u8, u32 | test_v256 |
3114          x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15,
3115          x16, x17, x18, x19, x20, x21, x22, x23, x24, x25, x26, x27, x28, x29, x30, x31 |
3116          From: |
3117          /// A 256-bit vector with 32 `u8` lanes.
3118  );
3119 -impl_m!([m8; 32]: m8x32 | i8 | test_v256 |
3120 +impl_m!([m8; 32]: m8x32 | i8, u32 | test_v256 |
3121          x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15,
3122          x16, x17, x18, x19, x20, x21, x22, x23, x24, x25, x26, x27, x28, x29, x30, x31 |
3123          From:  |
3124          /// A 256-bit vector mask with 32 `m8` lanes.
3125  );
3126  
3127 -impl_i!([i16; 16]: i16x16, m16x16 | i16 | test_v256 |
3128 +impl_i!([i16; 16]: i16x16, m16x16 | i16, u16 | test_v256 |
3129          x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15 |
3130          From: i8x16, u8x16 |
3131          /// A 256-bit vector with 16 `i16` lanes.
3132  );
3133 -impl_u!([u16; 16]: u16x16, m16x16 | u16 | test_v256 |
3134 +impl_u!([u16; 16]: u16x16, m16x16 | u16, u16 | test_v256 |
3135          x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15 |
3136          From: u8x16 |
3137          /// A 256-bit vector with 16 `u16` lanes.
3138  );
3139 -impl_m!([m16; 16]: m16x16 | i16 | test_v256 |
3140 +impl_m!([m16; 16]: m16x16 | i16, u16 | test_v256 |
3141          x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15 |
3142          From: m8x16 |
3143          /// A 256-bit vector mask with 16 `m16` lanes.
3144  );
3145  
3146 -impl_i!([i32; 8]: i32x8, m32x8 | i32 | test_v256 | x0, x1, x2, x3, x4, x5, x6, x7  |
3147 +impl_i!([i32; 8]: i32x8, m32x8 | i32, u8 | test_v256 | x0, x1, x2, x3, x4, x5, x6, x7  |
3148          From: i8x8, u8x8, i16x8, u16x8 |
3149          /// A 256-bit vector with 8 `i32` lanes.
3150  );
3151 -impl_u!([u32; 8]: u32x8, m32x8 | u32 | test_v256 | x0, x1, x2, x3, x4, x5, x6, x7 |
3152 +impl_u!([u32; 8]: u32x8, m32x8 | u32, u8 | test_v256 | x0, x1, x2, x3, x4, x5, x6, x7 |
3153          From: u8x8, u16x8 |
3154          /// A 256-bit vector with 8 `u32` lanes.
3155  );
3156 @@ -50,16 +50,16 @@ impl_f!([f32; 8]: f32x8, m32x8 | f32 | test_v256 | x0, x1, x2, x3, x4, x5, x6, x
3157          From: i8x8, u8x8, i16x8, u16x8 |
3158          /// A 256-bit vector with 8 `f32` lanes.
3159  );
3160 -impl_m!([m32; 8]: m32x8 | i32 | test_v256 | x0, x1, x2, x3, x4, x5, x6, x7 |
3161 +impl_m!([m32; 8]: m32x8 | i32, u8 | test_v256 | x0, x1, x2, x3, x4, x5, x6, x7 |
3162          From: m8x8, m16x8 |
3163          /// A 256-bit vector mask with 8 `m32` lanes.
3164  );
3165  
3166 -impl_i!([i64; 4]: i64x4, m64x4 | i64 | test_v256 | x0, x1, x2, x3 |
3167 +impl_i!([i64; 4]: i64x4, m64x4 | i64, u8 | test_v256 | x0, x1, x2, x3 |
3168          From: i8x4, u8x4, i16x4, u16x4, i32x4, u32x4 |
3169          /// A 256-bit vector with 4 `i64` lanes.
3170  );
3171 -impl_u!([u64; 4]: u64x4, m64x4 | u64 | test_v256 | x0, x1, x2, x3 |
3172 +impl_u!([u64; 4]: u64x4, m64x4 | u64, u8 | test_v256 | x0, x1, x2, x3 |
3173          From: u8x4, u16x4, u32x4 |
3174          /// A 256-bit vector with 4 `u64` lanes.
3175  );
3176 @@ -67,20 +67,20 @@ impl_f!([f64; 4]: f64x4, m64x4 | f64 | test_v256 | x0, x1, x2, x3 |
3177          From: i8x4, u8x4, i16x4, u16x4, i32x4, u32x4, f32x4 |
3178          /// A 256-bit vector with 4 `f64` lanes.
3179  );
3180 -impl_m!([m64; 4]: m64x4 | i64 | test_v256 | x0, x1, x2, x3 |
3181 +impl_m!([m64; 4]: m64x4 | i64, u8 | test_v256 | x0, x1, x2, x3 |
3182          From: m8x4, m16x4, m32x4 |
3183          /// A 256-bit vector mask with 4 `m64` lanes.
3184  );
3185  
3186 -impl_i!([i128; 2]: i128x2, m128x2 | i128 | test_v256 | x0, x1 |
3187 +impl_i!([i128; 2]: i128x2, m128x2 | i128, u8 | test_v256 | x0, x1 |
3188          From: i8x2, u8x2, i16x2, u16x2, i32x2, u32x2, i64x2, u64x2 |
3189          /// A 256-bit vector with 2 `i128` lanes.
3190  );
3191 -impl_u!([u128; 2]: u128x2, m128x2 | u128 | test_v256 | x0, x1 |
3192 +impl_u!([u128; 2]: u128x2, m128x2 | u128, u8 | test_v256 | x0, x1 |
3193          From: u8x2, u16x2, u32x2, u64x2 |
3194          /// A 256-bit vector with 2 `u128` lanes.
3195  );
3196 -impl_m!([m128; 2]: m128x2 | i128 | test_v256 | x0, x1 |
3197 +impl_m!([m128; 2]: m128x2 | i128, u8 | test_v256 | x0, x1 |
3198          From: m8x2, m16x2, m32x2, m64x2 |
3199          /// A 256-bit vector mask with 2 `m128` lanes.
3200  );
3201 diff --git third_party/rust/packed_simd/src/v32.rs third_party/rust/packed_simd/src/v32.rs
3202 index 09cef9bdd472..75a1838e5e0e 100644
3203 --- third_party/rust/packed_simd/src/v32.rs
3204 +++ third_party/rust/packed_simd/src/v32.rs
3205 @@ -2,28 +2,28 @@
3206  
3207  use crate::*;
3208  
3209 -impl_i!([i8; 4]: i8x4, m8x4 | i8 | test_v32 | x0, x1, x2, x3 |
3210 +impl_i!([i8; 4]: i8x4, m8x4 | i8, u8 | test_v32 | x0, x1, x2, x3 |
3211          From: |
3212          /// A 32-bit vector with 4 `i8` lanes.
3213  );
3214 -impl_u!([u8; 4]: u8x4, m8x4 | u8 | test_v32 | x0, x1, x2, x3 |
3215 +impl_u!([u8; 4]: u8x4, m8x4 | u8, u8 | test_v32 | x0, x1, x2, x3 |
3216          From: |
3217          /// A 32-bit vector with 4 `u8` lanes.
3218  );
3219 -impl_m!([m8; 4]: m8x4 | i8 | test_v32 | x0, x1, x2, x3 |
3220 +impl_m!([m8; 4]: m8x4 | i8, u8 | test_v32 | x0, x1, x2, x3 |
3221          From: m16x4, m32x4, m64x4 |
3222          /// A 32-bit vector mask with 4 `m8` lanes.
3223  );
3224  
3225 -impl_i!([i16; 2]: i16x2, m16x2 | i16 | test_v32 | x0, x1 |
3226 +impl_i!([i16; 2]: i16x2, m16x2 | i16, u8 | test_v32 | x0, x1 |
3227          From: i8x2, u8x2 |
3228          /// A 32-bit vector with 2 `i16` lanes.
3229  );
3230 -impl_u!([u16; 2]: u16x2, m16x2 | u16 | test_v32 | x0, x1 |
3231 +impl_u!([u16; 2]: u16x2, m16x2 | u16, u8 | test_v32 | x0, x1 |
3232          From: u8x2 |
3233          /// A 32-bit vector with 2 `u16` lanes.
3234  );
3235 -impl_m!([m16; 2]: m16x2 | i16 | test_v32 | x0, x1 |
3236 +impl_m!([m16; 2]: m16x2 | i16, u8 | test_v32 | x0, x1 |
3237          From: m8x2, m32x2, m64x2, m128x2 |
3238          /// A 32-bit vector mask with 2 `m16` lanes.
3239  );
3240 diff --git third_party/rust/packed_simd/src/v512.rs third_party/rust/packed_simd/src/v512.rs
3241 index b1714aded369..4c8c71338aca 100644
3242 --- third_party/rust/packed_simd/src/v512.rs
3243 +++ third_party/rust/packed_simd/src/v512.rs
3244 @@ -1,9 +1,9 @@
3245  //! 512-bit wide vector types
3246 -#![rustfmt::skip]
3247 +#[rustfmt::skip]
3248  
3249  use crate::*;
3250  
3251 -impl_i!([i8; 64]: i8x64, m8x64 | i8 | test_v512 |
3252 +impl_i!([i8; 64]: i8x64, m8x64 | i8, u64 | test_v512 |
3253          x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15,
3254          x16, x17, x18, x19, x20, x21, x22, x23, x24, x25, x26, x27, x28, x29, x30, x31,
3255          x32, x33, x34, x35, x36, x37, x38, x39, x40, x41, x42, x43, x44, x45, x46, x47,
3256 @@ -11,7 +11,7 @@ impl_i!([i8; 64]: i8x64, m8x64 | i8 | test_v512 |
3257          From: |
3258          /// A 512-bit vector with 64 `i8` lanes.
3259  );
3260 -impl_u!([u8; 64]: u8x64, m8x64 | u8 | test_v512 |
3261 +impl_u!([u8; 64]: u8x64, m8x64 | u8, u64 | test_v512 |
3262          x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15,
3263          x16, x17, x18, x19, x20, x21, x22, x23, x24, x25, x26, x27, x28, x29, x30, x31,
3264          x32, x33, x34, x35, x36, x37, x38, x39, x40, x41, x42, x43, x44, x45, x46, x47,
3265 @@ -19,7 +19,7 @@ impl_u!([u8; 64]: u8x64, m8x64 | u8 | test_v512 |
3266          From: |
3267          /// A 512-bit vector with 64 `u8` lanes.
3268  );
3269 -impl_m!([m8; 64]: m8x64 | i8 | test_v512 |
3270 +impl_m!([m8; 64]: m8x64 | i8, u64 | test_v512 |
3271          x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15,
3272          x16, x17, x18, x19, x20, x21, x22, x23, x24, x25, x26, x27, x28, x29, x30, x31,
3273          x32, x33, x34, x35, x36, x37, x38, x39, x40, x41, x42, x43, x44, x45, x46, x47,
3274 @@ -28,31 +28,31 @@ impl_m!([m8; 64]: m8x64 | i8 | test_v512 |
3275          /// A 512-bit vector mask with 64 `m8` lanes.
3276  );
3277  
3278 -impl_i!([i16; 32]: i16x32, m16x32 | i16 | test_v512 |
3279 +impl_i!([i16; 32]: i16x32, m16x32 | i16, u32 | test_v512 |
3280          x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15,
3281          x16, x17, x18, x19, x20, x21, x22, x23, x24, x25, x26, x27, x28, x29, x30, x31 |
3282          From: i8x32, u8x32 |
3283          /// A 512-bit vector with 32 `i16` lanes.
3284  );
3285 -impl_u!([u16; 32]: u16x32, m16x32 | u16 | test_v512 |
3286 +impl_u!([u16; 32]: u16x32, m16x32 | u16, u32 | test_v512 |
3287          x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15,
3288          x16, x17, x18, x19, x20, x21, x22, x23, x24, x25, x26, x27, x28, x29, x30, x31 |
3289          From: u8x32 |
3290          /// A 512-bit vector with 32 `u16` lanes.
3291  );
3292 -impl_m!([m16; 32]: m16x32 | i16 | test_v512 |
3293 +impl_m!([m16; 32]: m16x32 | i16, u32 | test_v512 |
3294          x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15,
3295          x16, x17, x18, x19, x20, x21, x22, x23, x24, x25, x26, x27, x28, x29, x30, x31 |
3296          From: m8x32 |
3297          /// A 512-bit vector mask with 32 `m16` lanes.
3298  );
3299  
3300 -impl_i!([i32; 16]: i32x16, m32x16 | i32 | test_v512 |
3301 +impl_i!([i32; 16]: i32x16, m32x16 | i32, u16 | test_v512 |
3302          x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15 |
3303          From: i8x16, u8x16, i16x16, u16x16 |
3304          /// A 512-bit vector with 16 `i32` lanes.
3305  );
3306 -impl_u!([u32; 16]: u32x16, m32x16 | u32 | test_v512 |
3307 +impl_u!([u32; 16]: u32x16, m32x16 | u32, u16 | test_v512 |
3308          x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15 |
3309          From: u8x16, u16x16 |
3310          /// A 512-bit vector with 16 `u32` lanes.
3311 @@ -62,17 +62,17 @@ impl_f!([f32; 16]: f32x16, m32x16 | f32 | test_v512 |
3312          From: i8x16, u8x16, i16x16, u16x16 |
3313          /// A 512-bit vector with 16 `f32` lanes.
3314  );
3315 -impl_m!([m32; 16]: m32x16 | i32 | test_v512 |
3316 +impl_m!([m32; 16]: m32x16 | i32, u16 | test_v512 |
3317          x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15 |
3318          From: m8x16, m16x16 |
3319          /// A 512-bit vector mask with 16 `m32` lanes.
3320  );
3321  
3322 -impl_i!([i64; 8]: i64x8, m64x8 | i64 | test_v512 | x0, x1, x2, x3, x4, x5, x6, x7 |
3323 +impl_i!([i64; 8]: i64x8, m64x8 | i64, u8 | test_v512 | x0, x1, x2, x3, x4, x5, x6, x7 |
3324          From: i8x8, u8x8, i16x8, u16x8, i32x8, u32x8 |
3325          /// A 512-bit vector with 8 `i64` lanes.
3326  );
3327 -impl_u!([u64; 8]: u64x8, m64x8 | u64 | test_v512 | x0, x1, x2, x3, x4, x5, x6, x7 |
3328 +impl_u!([u64; 8]: u64x8, m64x8 | u64, u8 | test_v512 | x0, x1, x2, x3, x4, x5, x6, x7 |
3329          From: u8x8, u16x8, u32x8 |
3330          /// A 512-bit vector with 8 `u64` lanes.
3331  );
3332 @@ -80,20 +80,20 @@ impl_f!([f64; 8]: f64x8, m64x8 | f64 | test_v512 | x0, x1, x2, x3, x4, x5, x6, x
3333          From: i8x8, u8x8, i16x8, u16x8, i32x8, u32x8, f32x8 |
3334          /// A 512-bit vector with 8 `f64` lanes.
3335  );
3336 -impl_m!([m64; 8]: m64x8 | i64 | test_v512 | x0, x1, x2, x3, x4, x5, x6, x7 |
3337 +impl_m!([m64; 8]: m64x8 | i64, u8 | test_v512 | x0, x1, x2, x3, x4, x5, x6, x7 |
3338          From: m8x8, m16x8, m32x8 |
3339          /// A 512-bit vector mask with 8 `m64` lanes.
3340  );
3341  
3342 -impl_i!([i128; 4]: i128x4, m128x4 | i128 | test_v512 | x0, x1, x2, x3 |
3343 +impl_i!([i128; 4]: i128x4, m128x4 | i128, u8 | test_v512 | x0, x1, x2, x3 |
3344          From: i8x4, u8x4, i16x4, u16x4, i32x4, u32x4, i64x4, u64x4 |
3345          /// A 512-bit vector with 4 `i128` lanes.
3346  );
3347 -impl_u!([u128; 4]: u128x4, m128x4 | u128 | test_v512 | x0, x1, x2, x3 |
3348 +impl_u!([u128; 4]: u128x4, m128x4 | u128, u8 | test_v512 | x0, x1, x2, x3 |
3349          From: u8x4, u16x4, u32x4, u64x4 |
3350          /// A 512-bit vector with 4 `u128` lanes.
3351  );
3352 -impl_m!([m128; 4]: m128x4 | i128 | test_v512 | x0, x1, x2, x3 |
3353 +impl_m!([m128; 4]: m128x4 | i128, u8 | test_v512 | x0, x1, x2, x3 |
3354          From: m8x4, m16x4, m32x4, m64x4 |
3355          /// A 512-bit vector mask with 4 `m128` lanes.
3356  );
3357 diff --git third_party/rust/packed_simd/src/v64.rs third_party/rust/packed_simd/src/v64.rs
3358 index 1ee6219c040b..bf6b9de61005 100644
3359 --- third_party/rust/packed_simd/src/v64.rs
3360 +++ third_party/rust/packed_simd/src/v64.rs
3361 @@ -1,43 +1,43 @@
3362  //! 64-bit wide vector types
3363 -#![rustfmt::skip]
3364 +#[rustfmt::skip]
3365  
3366  use super::*;
3367  
3368 -impl_i!([i8; 8]: i8x8, m8x8 | i8 | test_v64 | x0, x1, x2, x3, x4, x5, x6, x7 |
3369 +impl_i!([i8; 8]: i8x8, m8x8 | i8, u8 | test_v64 | x0, x1, x2, x3, x4, x5, x6, x7 |
3370          From: |
3371          /// A 64-bit vector with 8 `i8` lanes.
3372  );
3373 -impl_u!([u8; 8]: u8x8, m8x8 | u8 | test_v64 | x0, x1, x2, x3, x4, x5, x6, x7 |
3374 +impl_u!([u8; 8]: u8x8, m8x8 | u8, u8 | test_v64 | x0, x1, x2, x3, x4, x5, x6, x7 |
3375          From: |
3376          /// A 64-bit vector with 8 `u8` lanes.
3377  );
3378 -impl_m!([m8; 8]: m8x8 | i8 | test_v64 | x0, x1, x2, x3, x4, x5, x6, x7 |
3379 +impl_m!([m8; 8]: m8x8 | i8, u8 | test_v64 | x0, x1, x2, x3, x4, x5, x6, x7 |
3380          From: m16x8, m32x8 |
3381          /// A 64-bit vector mask with 8 `m8` lanes.
3382  );
3383  
3384 -impl_i!([i16; 4]: i16x4, m16x4 | i16 | test_v64 | x0, x1, x2, x3 |
3385 +impl_i!([i16; 4]: i16x4, m16x4 | i16, u8 | test_v64 | x0, x1, x2, x3 |
3386          From: i8x4, u8x4 |
3387          /// A 64-bit vector with 4 `i16` lanes.
3388  );
3389 -impl_u!([u16; 4]: u16x4, m16x4 | u16 | test_v64 | x0, x1, x2, x3 |
3390 +impl_u!([u16; 4]: u16x4, m16x4 | u16, u8 | test_v64 | x0, x1, x2, x3 |
3391          From: u8x4 |
3392          /// A 64-bit vector with 4 `u16` lanes.
3393  );
3394 -impl_m!([m16; 4]: m16x4 | i16 | test_v64 | x0, x1, x2, x3 |
3395 +impl_m!([m16; 4]: m16x4 | i16, u8 | test_v64 | x0, x1, x2, x3 |
3396          From: m8x4, m32x4, m64x4 |
3397          /// A 64-bit vector mask with 4 `m16` lanes.
3398  );
3399  
3400 -impl_i!([i32; 2]: i32x2, m32x2 | i32 | test_v64 | x0, x1 |
3401 +impl_i!([i32; 2]: i32x2, m32x2 | i32, u8 | test_v64 | x0, x1 |
3402          From: i8x2, u8x2, i16x2, u16x2 |
3403          /// A 64-bit vector with 2 `i32` lanes.
3404  );
3405 -impl_u!([u32; 2]: u32x2, m32x2 | u32 | test_v64 | x0, x1 |
3406 +impl_u!([u32; 2]: u32x2, m32x2 | u32, u8 | test_v64 | x0, x1 |
3407          From: u8x2, u16x2 |
3408          /// A 64-bit vector with 2 `u32` lanes.
3409  );
3410 -impl_m!([m32; 2]: m32x2 | i32 | test_v64 | x0, x1 |
3411 +impl_m!([m32; 2]: m32x2 | i32, u8 | test_v64 | x0, x1 |
3412          From: m8x2, m16x2, m64x2, m128x2 |
3413          /// A 64-bit vector mask with 2 `m32` lanes.
3414  );
3415 @@ -47,15 +47,15 @@ impl_f!([f32; 2]: f32x2, m32x2 | f32 | test_v64 | x0, x1 |
3416  );
3417  
3418  /*
3419 -impl_i!([i64; 1]: i64x1, m64x1 | i64 | test_v64 | x0 |
3420 +impl_i!([i64; 1]: i64x1, m64x1 | i64, u8 | test_v64 | x0 |
3421          From: /*i8x1, u8x1, i16x1, u16x1, i32x1, u32x1*/ |  // FIXME: primitive to vector conversion
3422          /// A 64-bit vector with 1 `i64` lanes.
3423  );
3424 -impl_u!([u64; 1]: u64x1, m64x1 | u64 | test_v64 | x0 |
3425 +impl_u!([u64; 1]: u64x1, m64x1 | u64, u8 | test_v64 | x0 |
3426          From: /*u8x1, u16x1, u32x1*/ | // FIXME: primitive to vector conversion
3427          /// A 64-bit vector with 1 `u64` lanes.
3428  );
3429 -impl_m!([m64; 1]: m64x1 | i64 | test_v64 | x0 |
3430 +impl_m!([m64; 1]: m64x1 | i64, u8 | test_v64 | x0 |
3431          From: /*m8x1, m16x1, m32x1, */ m128x1 | // FIXME: unary small vector types
3432          /// A 64-bit vector mask with 1 `m64` lanes.
3433  );
3434 diff --git third_party/rust/packed_simd/src/vPtr.rs third_party/rust/packed_simd/src/vPtr.rs
3435 index fe9fb28ffa89..e34cb170eb1c 100644
3436 --- third_party/rust/packed_simd/src/vPtr.rs
3437 +++ third_party/rust/packed_simd/src/vPtr.rs
3438 @@ -1,5 +1,5 @@
3439  //! Vectors of pointers
3440 -#![rustfmt::skip]
3441 +#[rustfmt::skip]
3442  
3443  use crate::*;
3444  
3445 diff --git third_party/rust/packed_simd/src/vSize.rs third_party/rust/packed_simd/src/vSize.rs
3446 index 5594323372b4..b5d891006138 100644
3447 --- third_party/rust/packed_simd/src/vSize.rs
3448 +++ third_party/rust/packed_simd/src/vSize.rs
3449 @@ -3,50 +3,50 @@
3450  use crate::codegen::pointer_sized_int::{isize_, usize_};
3451  use crate::*;
3452  
3453 -impl_i!([isize; 2]: isizex2, msizex2 | isize_ | test_v128 |
3454 +impl_i!([isize; 2]: isizex2, msizex2 | isize_, u8 | test_v128 |
3455          x0, x1|
3456          From: |
3457          /// A vector with 2 `isize` lanes.
3458  );
3459  
3460 -impl_u!([usize; 2]: usizex2, msizex2 | usize_ | test_v128 |
3461 +impl_u!([usize; 2]: usizex2, msizex2 | usize_, u8 | test_v128 |
3462          x0, x1|
3463          From: |
3464          /// A vector with 2 `usize` lanes.
3465  );
3466 -impl_m!([msize; 2]: msizex2 | isize_ | test_v128 |
3467 +impl_m!([msize; 2]: msizex2 | isize_, u8 | test_v128 |
3468          x0, x1 |
3469          From: |
3470          /// A vector mask with 2 `msize` lanes.
3471  );
3472  
3473 -impl_i!([isize; 4]: isizex4, msizex4 | isize_ | test_v256 |
3474 +impl_i!([isize; 4]: isizex4, msizex4 | isize_, u8 | test_v256 |
3475          x0, x1, x2, x3 |
3476          From: |
3477          /// A vector with 4 `isize` lanes.
3478  );
3479 -impl_u!([usize; 4]: usizex4, msizex4 | usize_ | test_v256 |
3480 +impl_u!([usize; 4]: usizex4, msizex4 | usize_, u8 | test_v256 |
3481          x0, x1, x2, x3|
3482          From: |
3483          /// A vector with 4 `usize` lanes.
3484  );
3485 -impl_m!([msize; 4]: msizex4 | isize_ | test_v256 |
3486 +impl_m!([msize; 4]: msizex4 | isize_, u8 | test_v256 |
3487          x0, x1, x2, x3 |
3488          From: |
3489          /// A vector mask with 4 `msize` lanes.
3490  );
3491  
3492 -impl_i!([isize; 8]: isizex8, msizex8 | isize_ | test_v512 |
3493 +impl_i!([isize; 8]: isizex8, msizex8 | isize_, u8 | test_v512 |
3494          x0, x1, x2, x3, x4, x5, x6, x7 |
3495          From: |
3496 -        /// A vector with 4 `isize` lanes.
3497 +        /// A vector with 8 `isize` lanes.
3498  );
3499 -impl_u!([usize; 8]: usizex8, msizex8 | usize_ | test_v512 |
3500 +impl_u!([usize; 8]: usizex8, msizex8 | usize_, u8 | test_v512 |
3501          x0, x1, x2, x3, x4, x5, x6, x7 |
3502          From: |
3503          /// A vector with 8 `usize` lanes.
3504  );
3505 -impl_m!([msize; 8]: msizex8 | isize_ | test_v512 |
3506 +impl_m!([msize; 8]: msizex8 | isize_, u8 | test_v512 |
3507          x0, x1, x2, x3, x4, x5, x6, x7 |
3508          From: |
3509          /// A vector mask with 8 `msize` lanes.
3510 diff --git third_party/rust/packed_simd/tests/endianness.rs third_party/rust/packed_simd/tests/endianness.rs
3511 index 1e6b4f354301..31fb7073afb3 100644
3512 --- third_party/rust/packed_simd/tests/endianness.rs
3513 +++ third_party/rust/packed_simd/tests/endianness.rs
3514 @@ -17,7 +17,7 @@ fn endian_indexing() {
3515  #[cfg_attr(not(target_arch = "wasm32"), test)]
3516  #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)]
3517  fn endian_bitcasts() {
3518 -    #[cfg_attr(rustfmt, rustfmt_skip)]
3519 +    #[rustfmt::skip]
3520      let x = i8x16::new(
3521          0, 1, 2, 3, 4, 5, 6, 7,
3522          8, 9, 10, 11, 12, 13, 14, 15,
3523 @@ -34,13 +34,13 @@ fn endian_bitcasts() {
3524  #[cfg_attr(not(target_arch = "wasm32"), test)]
3525  #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)]
3526  fn endian_casts() {
3527 -    #[cfg_attr(rustfmt, rustfmt_skip)]
3528 +    #[rustfmt::skip]
3529      let x = i8x16::new(
3530          0, 1, 2, 3, 4, 5, 6, 7,
3531          8, 9, 10, 11, 12, 13, 14, 15,
3532      );
3533      let t: i16x16 = x.into(); // simd_cast
3534 -    #[cfg_attr(rustfmt, rustfmt_skip)]
3535 +    #[rustfmt::skip]
3536      let e = i16x16::new(
3537          0, 1, 2, 3, 4, 5, 6, 7,
3538          8, 9, 10, 11, 12, 13, 14, 15,
3539 @@ -51,7 +51,7 @@ fn endian_casts() {
3540  #[cfg_attr(not(target_arch = "wasm32"), test)]
3541  #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)]
3542  fn endian_load_and_stores() {
3543 -    #[cfg_attr(rustfmt, rustfmt_skip)]
3544 +    #[rustfmt::skip]
3545      let x = i8x16::new(
3546          0, 1, 2, 3, 4, 5, 6, 7,
3547          8, 9, 10, 11, 12, 13, 14, 15,
3548 @@ -82,10 +82,15 @@ fn endian_array_union() {
3549          vec: f32x4,
3550      }
3551      let x: [f32; 4] = unsafe { A { vec: f32x4::new(0., 1., 2., 3.) }.data };
3552 -    assert_eq!(x[0], 0_f32);
3553 -    assert_eq!(x[1], 1_f32);
3554 -    assert_eq!(x[2], 2_f32);
3555 -    assert_eq!(x[3], 3_f32);
3556 +    // As all of these are integer values within the mantissa^1 range, it
3557 +    // would be very unusual for them to actually fail to compare.
3558 +    #[allow(clippy::float_cmp)]
3559 +    {
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 +    }
3565      let y: f32x4 = unsafe { A { data: [3., 2., 1., 0.] }.vec };
3566      assert_eq!(y, f32x4::new(3., 2., 1., 0.));
3567  
3568 @@ -93,23 +98,23 @@ fn endian_array_union() {
3569          data: [i8; 16],
3570          vec: i8x16,
3571      }
3572 -    #[cfg_attr(rustfmt, rustfmt_skip)]
3573 +    #[rustfmt::skip]
3574      let x = i8x16::new(
3575          0, 1, 2, 3, 4, 5, 6, 7,
3576          8, 9, 10, 11, 12, 13, 14, 15,
3577      );
3578      let x: [i8; 16] = unsafe { B { vec: x }.data };
3579  
3580 -    for i in 0..16 {
3581 -        assert_eq!(x[i], i as i8);
3582 +    for (i, v) in x.iter().enumerate() {
3583 +        assert_eq!(i as i8, *v);
3584      }
3585  
3586 -    #[cfg_attr(rustfmt, rustfmt_skip)]
3587 +    #[rustfmt::skip]
3588      let y = [
3589          15, 14, 13, 12, 11, 19, 9, 8,
3590          7, 6, 5, 4, 3, 2, 1, 0
3591      ];
3592 -    #[cfg_attr(rustfmt, rustfmt_skip)]
3593 +    #[rustfmt::skip]
3594      let e = i8x16::new(
3595          15, 14, 13, 12, 11, 19, 9, 8,
3596          7, 6, 5, 4, 3, 2, 1, 0
3597 @@ -121,7 +126,7 @@ fn endian_array_union() {
3598          data: [i16; 8],
3599          vec: i8x16,
3600      }
3601 -    #[cfg_attr(rustfmt, rustfmt_skip)]
3602 +    #[rustfmt::skip]
3603      let x = i8x16::new(
3604          0, 1, 2, 3, 4, 5, 6, 7,
3605          8, 9, 10, 11, 12, 13, 14, 15,
3606 @@ -145,21 +150,26 @@ fn endian_tuple_access() {
3607          vec: f32x4,
3608      }
3609      let x: F32x4T = unsafe { A { vec: f32x4::new(0., 1., 2., 3.) }.data };
3610 -    assert_eq!(x.0, 0_f32);
3611 -    assert_eq!(x.1, 1_f32);
3612 -    assert_eq!(x.2, 2_f32);
3613 -    assert_eq!(x.3, 3_f32);
3614 +    // As all of these are integer values within the mantissa^1 range, it
3615 +    // would be very unusual for them to actually fail to compare.
3616 +    #[allow(clippy::float_cmp)]
3617 +    {
3618 +        assert_eq!(x.0, 0_f32);
3619 +        assert_eq!(x.1, 1_f32);
3620 +        assert_eq!(x.2, 2_f32);
3621 +        assert_eq!(x.3, 3_f32);
3622 +    }
3623      let y: f32x4 = unsafe { A { data: (3., 2., 1., 0.) }.vec };
3624      assert_eq!(y, f32x4::new(3., 2., 1., 0.));
3625  
3626 -    #[cfg_attr(rustfmt, rustfmt_skip)]
3627 +    #[rustfmt::skip]
3628      type I8x16T = (i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8);
3629      union B {
3630          data: I8x16T,
3631          vec: i8x16,
3632      }
3633  
3634 -    #[cfg_attr(rustfmt, rustfmt_skip)]
3635 +    #[rustfmt::skip]
3636      let x = i8x16::new(
3637          0, 1, 2, 3, 4, 5, 6, 7,
3638          8, 9, 10, 11, 12, 13, 14, 15,
3639 @@ -183,27 +193,27 @@ fn endian_tuple_access() {
3640      assert_eq!(x.14, 14);
3641      assert_eq!(x.15, 15);
3642  
3643 -    #[cfg_attr(rustfmt, rustfmt_skip)]
3644 +    #[rustfmt::skip]
3645      let y = (
3646          15, 14, 13, 12, 11, 10, 9, 8,
3647          7, 6, 5, 4, 3, 2, 1, 0
3648      );
3649      let z: i8x16 = unsafe { B { data: y }.vec };
3650 -    #[cfg_attr(rustfmt, rustfmt_skip)]
3651 +    #[rustfmt::skip]
3652      let e = i8x16::new(
3653          15, 14, 13, 12, 11, 10, 9, 8,
3654          7, 6, 5, 4, 3, 2, 1, 0
3655      );
3656      assert_eq!(e, z);
3657  
3658 -    #[cfg_attr(rustfmt, rustfmt_skip)]
3659 +    #[rustfmt::skip]
3660      type I16x8T = (i16, i16, i16, i16, i16, i16, i16, i16);
3661      union C {
3662          data: I16x8T,
3663          vec: i8x16,
3664      }
3665  
3666 -    #[cfg_attr(rustfmt, rustfmt_skip)]
3667 +    #[rustfmt::skip]
3668      let x = i8x16::new(
3669          0, 1, 2, 3, 4, 5, 6, 7,
3670          8, 9, 10, 11, 12, 13, 14, 15,
3671 @@ -224,7 +234,7 @@ fn endian_tuple_access() {
3672      assert_eq!(x.6, e[6]);
3673      assert_eq!(x.7, e[7]);
3674  
3675 -    #[cfg_attr(rustfmt, rustfmt_skip)]
3676 +    #[rustfmt::skip]
3677      #[repr(C)]
3678      #[derive(Copy ,Clone)]
3679      pub struct Tup(pub i8, pub i8, pub i16, pub i8, pub i8, pub i16,
3680 @@ -235,7 +245,7 @@ fn endian_tuple_access() {
3681          vec: i8x16,
3682      }
3683  
3684 -    #[cfg_attr(rustfmt, rustfmt_skip)]
3685 +    #[rustfmt::skip]
3686      let x = i8x16::new(
3687          0, 1, 2, 3, 4, 5, 6, 7,
3688          8, 9, 10, 11, 12, 13, 14, 15,
3689
3690
3691 [FILE:11510:patches/patch-bug292127]
3692 --- comm/ldap/c-sdk/include/ldap.h~
3693 +++ comm/ldap/c-sdk/include/ldap.h
3694 @@ -40,6 +40,229 @@
3695  #ifndef _LDAP_H
3696  #define _LDAP_H
3697  
3698 +/* rename symbols to not clash with openldap (bug 292127) */
3699 +#define ldap_abandon moz_ldap_abandon
3700 +#define ldap_abandon_ext moz_ldap_abandon_ext
3701 +#define ldap_abandoned moz_ldap_abandoned
3702 +#define ldap_add moz_ldap_add
3703 +#define ldap_add_ext moz_ldap_add_ext
3704 +#define ldap_add_ext_s moz_ldap_add_ext_s
3705 +#define ldap_add_result_entry moz_ldap_add_result_entry
3706 +#define ldap_add_s moz_ldap_add_s
3707 +#define ldap_ber_free moz_ldap_ber_free
3708 +#define ldap_bind moz_ldap_bind
3709 +#define ldap_bind_s moz_ldap_bind_s
3710 +#define ldap_build_filter moz_ldap_build_filter
3711 +#define ldap_cache_flush moz_ldap_cache_flush
3712 +#define ldap_charray_add moz_ldap_charray_add
3713 +#define ldap_charray_dup moz_ldap_charray_dup
3714 +#define ldap_charray_free moz_ldap_charray_free
3715 +#define ldap_charray_inlist moz_ldap_charray_inlist
3716 +#define ldap_charray_merge moz_ldap_charray_merge
3717 +#define ldap_charray_position moz_ldap_charray_position
3718 +#define ldap_compare moz_ldap_compare
3719 +#define ldap_compare_ext moz_ldap_compare_ext
3720 +#define ldap_compare_ext_s moz_ldap_compare_ext_s
3721 +#define ldap_compare_s moz_ldap_compare_s
3722 +#define ldap_control_free moz_ldap_control_free
3723 +#define ldap_controls_free moz_ldap_controls_free
3724 +#define ldap_count_entries moz_ldap_count_entries
3725 +#define ldap_count_messages moz_ldap_count_messages
3726 +#define ldap_count_references moz_ldap_count_references
3727 +#define ldap_count_values moz_ldap_count_values
3728 +#define ldap_count_values_len moz_ldap_count_values_len
3729 +#define ldap_create_authzid_control moz_ldap_create_authzid_control
3730 +#define ldap_create_filter moz_ldap_create_filter
3731 +#define ldap_create_geteffectiveRights_control moz_ldap_create_geteffectiveRights_control
3732 +#define ldap_create_passwordpolicy_control moz_ldap_create_passwordpolicy_control
3733 +#define ldap_create_passwordpolicy_control_ext moz_ldap_create_passwordpolicy_control_ext
3734 +#define ldap_create_persistentsearch_control moz_ldap_create_persistentsearch_control
3735 +#define ldap_create_proxiedauth_control moz_ldap_create_proxiedauth_control
3736 +#define ldap_create_proxyauth_control moz_ldap_create_proxyauth_control
3737 +#define ldap_create_sort_control moz_ldap_create_sort_control
3738 +#define ldap_create_sort_keylist moz_ldap_create_sort_keylist
3739 +#define ldap_create_userstatus_control moz_ldap_create_userstatus_control
3740 +#define ldap_create_virtuallist_control moz_ldap_create_virtuallist_control
3741 +#define ldap_delete moz_ldap_delete
3742 +#define ldap_delete_ext moz_ldap_delete_ext
3743 +#define ldap_delete_ext_s moz_ldap_delete_ext_s
3744 +#define ldap_delete_result_entry moz_ldap_delete_result_entry
3745 +#define ldap_delete_s moz_ldap_delete_s
3746 +#define ldap_dn2ufn moz_ldap_dn2ufn
3747 +#define ldap_entry2html moz_ldap_entry2html
3748 +#define ldap_entry2html_search moz_ldap_entry2html_search
3749 +#define ldap_entry2text moz_ldap_entry2text
3750 +#define ldap_entry2text_search moz_ldap_entry2text_search
3751 +#define ldap_err2string moz_ldap_err2string
3752 +#define ldap_errlist moz_ldap_errlist
3753 +#define ldap_explode moz_ldap_explode
3754 +#define ldap_explode_dn moz_ldap_explode_dn
3755 +#define ldap_explode_dns moz_ldap_explode_dns
3756 +#define ldap_explode_rdn moz_ldap_explode_rdn
3757 +#define ldap_extended_operation moz_ldap_extended_operation
3758 +#define ldap_extended_operation_s moz_ldap_extended_operation_s
3759 +#define ldap_find_control moz_ldap_find_control
3760 +#define ldap_first_attribute moz_ldap_first_attribute
3761 +#define ldap_first_disptmpl moz_ldap_first_disptmpl
3762 +#define ldap_first_entry moz_ldap_first_entry
3763 +#define ldap_first_message moz_ldap_first_message
3764 +#define ldap_first_reference moz_ldap_first_reference
3765 +#define ldap_first_searchobj moz_ldap_first_searchobj
3766 +#define ldap_first_tmplcol moz_ldap_first_tmplcol
3767 +#define ldap_first_tmplrow moz_ldap_first_tmplrow
3768 +#define ldap_free_friendlymap moz_ldap_free_friendlymap
3769 +#define ldap_free_searchprefs moz_ldap_free_searchprefs
3770 +#define ldap_free_sort_keylist moz_ldap_free_sort_keylist
3771 +#define ldap_free_templates moz_ldap_free_templates
3772 +#define ldap_free_urldesc moz_ldap_free_urldesc
3773 +#define ldap_friendly_name moz_ldap_friendly_name
3774 +#define ldap_get_dn moz_ldap_get_dn
3775 +#define ldap_get_entry_controls moz_ldap_get_entry_controls
3776 +#define ldap_get_lang_values moz_ldap_get_lang_values
3777 +#define ldap_get_lang_values_len moz_ldap_get_lang_values_len
3778 +#define ldap_get_lderrno moz_ldap_get_lderrno
3779 +#define ldap_get_option moz_ldap_get_option
3780 +#define ldap_get_values moz_ldap_get_values
3781 +#define ldap_get_values_len moz_ldap_get_values_len
3782 +#define ldap_getfilter_free moz_ldap_getfilter_free
3783 +#define ldap_getfirstfilter moz_ldap_getfirstfilter
3784 +#define ldap_getnextfilter moz_ldap_getnextfilter
3785 +#define ldap_init moz_ldap_init
3786 +#define ldap_init_getfilter moz_ldap_init_getfilter
3787 +#define ldap_init_getfilter_buf moz_ldap_init_getfilter_buf
3788 +#define ldap_init_searchprefs moz_ldap_init_searchprefs
3789 +#define ldap_init_searchprefs_buf moz_ldap_init_searchprefs_buf
3790 +#define ldap_init_templates moz_ldap_init_templates
3791 +#define ldap_init_templates_buf moz_ldap_init_templates_buf
3792 +#define ldap_is_dns_dn moz_ldap_is_dns_dn
3793 +#define ldap_is_ldap_url moz_ldap_is_ldap_url
3794 +#define ldap_keysort_entries moz_ldap_keysort_entries
3795 +#define ldap_ld_free moz_ldap_ld_free
3796 +#define ldap_memcache_abandon moz_ldap_memcache_abandon
3797 +#define ldap_memcache_append moz_ldap_memcache_append
3798 +#define ldap_memcache_createkey moz_ldap_memcache_createkey
3799 +#define ldap_memcache_destroy moz_ldap_memcache_destroy
3800 +#define ldap_memcache_flush moz_ldap_memcache_flush
3801 +#define ldap_memcache_flush_results moz_ldap_memcache_flush_results
3802 +#define ldap_memcache_get moz_ldap_memcache_get
3803 +#define ldap_memcache_init moz_ldap_memcache_init
3804 +#define ldap_memcache_new moz_ldap_memcache_new
3805 +#define ldap_memcache_result moz_ldap_memcache_result
3806 +#define ldap_memcache_set moz_ldap_memcache_set
3807 +#define ldap_memcache_update moz_ldap_memcache_update
3808 +#define ldap_memfree moz_ldap_memfree
3809 +#define ldap_modify moz_ldap_modify
3810 +#define ldap_modify_ext moz_ldap_modify_ext
3811 +#define ldap_modify_ext_s moz_ldap_modify_ext_s
3812 +#define ldap_modify_s moz_ldap_modify_s
3813 +#define ldap_modrdn moz_ldap_modrdn
3814 +#define ldap_modrdn2 moz_ldap_modrdn2
3815 +#define ldap_modrdn2_s moz_ldap_modrdn2_s
3816 +#define ldap_modrdn_s moz_ldap_modrdn_s
3817 +#define ldap_mods_free moz_ldap_mods_free
3818 +#define ldap_msgdelete moz_ldap_msgdelete
3819 +#define ldap_msgfree moz_ldap_msgfree
3820 +#define ldap_msgid moz_ldap_msgid
3821 +#define ldap_msgtype moz_ldap_msgtype
3822 +#define ldap_multisort_entries moz_ldap_multisort_entries
3823 +#define ldap_name2template moz_ldap_name2template
3824 +#define ldap_next_attribute moz_ldap_next_attribute
3825 +#define ldap_next_disptmpl moz_ldap_next_disptmpl
3826 +#define ldap_next_entry moz_ldap_next_entry
3827 +#define ldap_next_message moz_ldap_next_message
3828 +#define ldap_next_reference moz_ldap_next_reference
3829 +#define ldap_next_searchobj moz_ldap_next_searchobj
3830 +#define ldap_next_tmplcol moz_ldap_next_tmplcol
3831 +#define ldap_next_tmplrow moz_ldap_next_tmplrow
3832 +#define ldap_oc2template moz_ldap_oc2template
3833 +#define ldap_open moz_ldap_open
3834 +#define ldap_parse_authzid_control moz_ldap_parse_authzid_control
3835 +#define ldap_parse_entrychange_control moz_ldap_parse_entrychange_control
3836 +#define ldap_parse_extended_result moz_ldap_parse_extended_result
3837 +#define ldap_parse_passwd moz_ldap_parse_passwd
3838 +#define ldap_parse_passwordpolicy_control moz_ldap_parse_passwordpolicy_control
3839 +#define ldap_parse_passwordpolicy_control_ext moz_ldap_parse_passwordpolicy_control_ext
3840 +#define ldap_parse_reference moz_ldap_parse_reference
3841 +#define ldap_parse_result moz_ldap_parse_result
3842 +#define ldap_parse_sasl_bind_result moz_ldap_parse_sasl_bind_result
3843 +#define ldap_parse_sort_control moz_ldap_parse_sort_control
3844 +#define ldap_parse_userstatus_control moz_ldap_parse_userstatus_control
3845 +#define ldap_parse_virtuallist_control moz_ldap_parse_virtuallist_control
3846 +#define ldap_parse_whoami moz_ldap_parse_whoami
3847 +#define ldap_passwd moz_ldap_passwd
3848 +#define ldap_passwd_s moz_ldap_passwd_s
3849 +#define ldap_passwordpolicy_err2txt moz_ldap_passwordpolicy_err2txt
3850 +#define ldap_perror moz_ldap_perror
3851 +#define ldap_rename moz_ldap_rename
3852 +#define ldap_rename_s moz_ldap_rename_s
3853 +#define ldap_result moz_ldap_result
3854 +#define ldap_result2error moz_ldap_result2error
3855 +#define ldap_sasl_bind moz_ldap_sasl_bind
3856 +#define ldap_sasl_bind_s moz_ldap_sasl_bind_s
3857 +#define ldap_sasl_interactive_bind_ext_s moz_ldap_sasl_interactive_bind_ext_s
3858 +#define ldap_sasl_interactive_bind_s moz_ldap_sasl_interactive_bind_s
3859 +#define ldap_search moz_ldap_search
3860 +#define ldap_search_ext moz_ldap_search_ext
3861 +#define ldap_search_ext_s moz_ldap_search_ext_s
3862 +#define ldap_search_s moz_ldap_search_s
3863 +#define ldap_search_st moz_ldap_search_st
3864 +#define ldap_set_filter_additions moz_ldap_set_filter_additions
3865 +#define ldap_set_lderrno moz_ldap_set_lderrno
3866 +#define ldap_set_option moz_ldap_set_option
3867 +#define ldap_set_rebind_proc moz_ldap_set_rebind_proc
3868 +#define ldap_setfilteraffixes moz_ldap_setfilteraffixes
3869 +#define ldap_simple_bind moz_ldap_simple_bind
3870 +#define ldap_simple_bind_s moz_ldap_simple_bind_s
3871 +#define ldap_sort_entries moz_ldap_sort_entries
3872 +#define ldap_sort_strcasecmp moz_ldap_sort_strcasecmp
3873 +#define ldap_sort_values moz_ldap_sort_values
3874 +#define ldap_start_tls_s moz_ldap_start_tls_s
3875 +#define ldap_str2charray moz_ldap_str2charray
3876 +#define ldap_tmplattrs moz_ldap_tmplattrs
3877 +#define ldap_tmplerr2string moz_ldap_tmplerr2string
3878 +#define ldap_tmplerrlist moz_ldap_tmplerrlist
3879 +#define ldap_ufn_search_c moz_ldap_ufn_search_c
3880 +#define ldap_ufn_search_ct moz_ldap_ufn_search_ct
3881 +#define ldap_ufn_search_ctx moz_ldap_ufn_search_ctx
3882 +#define ldap_ufn_search_s moz_ldap_ufn_search_s
3883 +#define ldap_ufn_setfilter moz_ldap_ufn_setfilter
3884 +#define ldap_ufn_setprefix moz_ldap_ufn_setprefix
3885 +#define ldap_ufn_timeout moz_ldap_ufn_timeout
3886 +#define ldap_unbind moz_ldap_unbind
3887 +#define ldap_unbind_ext moz_ldap_unbind_ext
3888 +#define ldap_unbind_s moz_ldap_unbind_s
3889 +#define ldap_url_parse moz_ldap_url_parse
3890 +#define ldap_url_parse_no_defaults moz_ldap_url_parse_no_defaults
3891 +#define ldap_url_search moz_ldap_url_search
3892 +#define ldap_url_search_s moz_ldap_url_search_s
3893 +#define ldap_url_search_st moz_ldap_url_search_st
3894 +#define ldap_utf8characters moz_ldap_utf8characters
3895 +#define ldap_utf8copy moz_ldap_utf8copy
3896 +#define ldap_utf8getcc moz_ldap_utf8getcc
3897 +#define ldap_utf8isalnum moz_ldap_utf8isalnum
3898 +#define ldap_utf8isalpha moz_ldap_utf8isalpha
3899 +#define ldap_utf8isdigit moz_ldap_utf8isdigit
3900 +#define ldap_utf8isspace moz_ldap_utf8isspace
3901 +#define ldap_utf8isxdigit moz_ldap_utf8isxdigit
3902 +#define ldap_utf8len moz_ldap_utf8len
3903 +#define ldap_utf8next moz_ldap_utf8next
3904 +#define ldap_utf8prev moz_ldap_utf8prev
3905 +#define ldap_utf8strtok_r moz_ldap_utf8strtok_r
3906 +#define ldap_vals2html moz_ldap_vals2html
3907 +#define ldap_vals2text moz_ldap_vals2text
3908 +#define ldap_value_free moz_ldap_value_free
3909 +#define ldap_value_free_len moz_ldap_value_free_len
3910 +#define ldap_version moz_ldap_version
3911 +#define ldap_whoami moz_ldap_whoami
3912 +#define ldap_whoami_s moz_ldap_whoami_s
3913 +#define ldap_x_calloc moz_ldap_x_calloc
3914 +#define ldap_x_free moz_ldap_x_free
3915 +#define ldap_x_hostlist_first moz_ldap_x_hostlist_first
3916 +#define ldap_x_hostlist_next moz_ldap_x_hostlist_next
3917 +#define ldap_x_hostlist_statusfree moz_ldap_x_hostlist_statusfree
3918 +#define ldap_x_malloc moz_ldap_x_malloc
3919 +#define ldap_x_realloc moz_ldap_x_realloc
3920 +
3921  /* Standard LDAP API functions and declarations */
3922  #include "ldap-standard.h"
3923  
3924
3925
3926 [FILE:9904:patches/patch-bug847568]
3927 # Allow building against system-wide graphite2/harfbuzz.
3928
3929 diff --git config/system-headers.mozbuild config/system-headers.mozbuild
3930 index 7620b4d00623..09d3db5ca8c0 100644
3931 --- config/system-headers.mozbuild
3932 +++ config/system-headers.mozbuild
3933 @@ -1299,6 +1299,19 @@ if CONFIG['MOZ_ENABLE_LIBPROXY']:
3934          'proxy.h',
3935      ]
3936  
3937 +if CONFIG['MOZ_SYSTEM_GRAPHITE2']:
3938 +    system_headers += [
3939 +        'graphite2/Font.h',
3940 +        'graphite2/Segment.h',
3941 +    ]
3942 +
3943 +if CONFIG['MOZ_SYSTEM_HARFBUZZ']:
3944 +    system_headers += [
3945 +        'harfbuzz/hb-glib.h',
3946 +        'harfbuzz/hb-ot.h',
3947 +        'harfbuzz/hb.h',
3948 +    ]
3949 +
3950  if CONFIG['MOZ_SYSTEM_LIBVPX']:
3951      system_headers += [
3952          'vpx_mem/vpx_mem.h',
3953 diff --git dom/base/moz.build dom/base/moz.build
3954 index 8e19020315ae..2fcdbb6f7b42 100644
3955 --- dom/base/moz.build
3956 +++ dom/base/moz.build
3957 @@ -543,6 +543,9 @@ if CONFIG['MOZ_BUILD_APP'] in ['browser', 'mobile/android', 'xulrunner']:
3958  if CONFIG['MOZ_X11']:
3959      CXXFLAGS += CONFIG['TK_CFLAGS']
3960  
3961 +if CONFIG['MOZ_SYSTEM_HARFBUZZ']:
3962 +    CXXFLAGS += CONFIG['MOZ_HARFBUZZ_CFLAGS']
3963 +
3964  GeneratedFile('UseCounterList.h', script='gen-usecounters.py',
3965                entry_point='use_counter_list', inputs=['UseCounters.conf'])
3966  
3967 diff --git gfx/graphite2/geckoextra/moz.build gfx/graphite2/geckoextra/moz.build
3968 new file mode 100644
3969 index 0000000000000..24e8d7a03274a
3970 --- /dev/null
3971 +++ gfx/graphite2/geckoextra/moz.build
3972 @@ -0,0 +1,21 @@
3973 +# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
3974 +# vim: set filetype=python:
3975 +# This Source Code Form is subject to the terms of the Mozilla Public
3976 +# License, v. 2.0. If a copy of the MPL was not distributed with this
3977 +# file, You can obtain one at http://mozilla.org/MPL/2.0/.
3978 +
3979 +EXPORTS.graphite2 += [
3980 +    'include/GraphiteExtra.h',
3981 +    'include/GraphiteStructsForRLBox.h',
3982 +]
3983 +
3984 +UNIFIED_SOURCES += [
3985 +    '../geckoextra/src/GraphiteExtra.cpp',
3986 +]
3987 +
3988 +CXXFLAGS += CONFIG['MOZ_GRAPHITE2_CFLAGS']
3989 +
3990 +# Match bundled graphite2 configuration
3991 +AllowCompilerWarnings()
3992 +
3993 +FINAL_LIBRARY = 'gkmedias'
3994 diff --git gfx/graphite2/moz-gr-update.sh gfx/graphite2/moz-gr-update.sh
3995 index faaab1b17971..04eff5f09882 100644
3996 --- gfx/graphite2/moz-gr-update.sh
3997 +++ gfx/graphite2/moz-gr-update.sh
3998 @@ -1,6 +1,7 @@
3999  #!/bin/bash
4000  
4001  # Script used to update the Graphite2 library in the mozilla source tree
4002 +# and bump version for --with-system-graphite2
4003  
4004  # This script lives in gfx/graphite2, along with the library source,
4005  # but must be run from the top level of the mozilla-central tree.
4006 @@ -37,12 +38,16 @@ echo "See" $0 "for update procedure." >> gfx/graphite2/README.mozilla
4007  #find gfx/graphite2/ -name "*.cpp" -exec perl -p -i -e "s/<cstdio>/<stdio.h>/;s/Windows.h/windows.h/;" {} \;
4008  #find gfx/graphite2/ -name "*.h" -exec perl -p -i -e "s/<cstdio>/<stdio.h>/;s/Windows.h/windows.h/;" {} \;
4009  
4010 +# chase version for --with-system-graphite2
4011 +perl -p -i -e "s/[0-9]+\,[0-9]+\,[0-9]+/$RELEASE/ and tr/./,/ \
4012 +  if /GR2_VERSION_REQUIRE/" old-configure.in
4013 +
4014  # summarize what's been touched
4015  echo Updated to $RELEASE.
4016  echo Here is what changed in the gfx/graphite2 directory:
4017  echo
4018  
4019 -hg stat gfx/graphite2
4020 +hg stat old-configure.in gfx/graphite2
4021  
4022  echo
4023  echo If gfx/graphite2/src/files.mk has changed, please make corresponding
4024 diff --git gfx/harfbuzz/README-mozilla gfx/harfbuzz/README-mozilla
4025 index 22c76a7df020..a01490bd49ee 100644
4026 --- gfx/harfbuzz/README-mozilla
4027 +++ gfx/harfbuzz/README-mozilla
4028 @@ -15,3 +15,8 @@ from within the gfx/harfbuzz directory.
4029  
4030  If the collection of source files changes, manual updates to moz.build may be
4031  needed as we don't use the upstream makefiles.
4032 +
4033 +The in-tree copy may be omitted during build by --with-system-harfbuzz.
4034 +Make sure to keep pkg-config version check within toolkit/moz.configure in sync
4035 +with checkout version or increment latest tag by one if it's not based
4036 +on upstream release.
4037 diff --git gfx/moz.build gfx/moz.build
4038 index 771f652e837a..3b358d84e384 100644
4039 --- gfx/moz.build
4040 +++ gfx/moz.build
4041 @@ -13,6 +13,14 @@ with Files('wr/**'):
4042  if CONFIG['MOZ_TREE_CAIRO']:
4043      DIRS += ['cairo']
4044  
4045 +if CONFIG['MOZ_SYSTEM_GRAPHITE2']:
4046 +    DIRS += ['graphite2/geckoextra']
4047 +else:
4048 +    DIRS += ['graphite2/src' ]
4049 +
4050 +if not CONFIG['MOZ_SYSTEM_HARFBUZZ']:
4051 +    DIRS += ['harfbuzz/src']
4052 +
4053  DIRS += [
4054      '2d',
4055      'ycbcr',
4056 @@ -21,8 +29,6 @@ DIRS += [
4057      'qcms',
4058      'gl',
4059      'layers',
4060 -    'graphite2/src',
4061 -    'harfbuzz/src',
4062      'ots/src',
4063      'thebes',
4064      'ipc',
4065 diff --git gfx/skia/generate_mozbuild.py gfx/skia/generate_mozbuild.py
4066 index e06ae3457a47..93faa61594a3 100755
4067 --- gfx/skia/generate_mozbuild.py
4068 +++ gfx/skia/generate_mozbuild.py
4069 @@ -117,6 +117,9 @@ if CONFIG['CC_TYPE'] in ('clang', 'clang-cl'):
4070          '-Wno-unused-private-field',
4071      ]
4072  
4073 +if CONFIG['MOZ_SYSTEM_HARFBUZZ']:
4074 +    CXXFLAGS += CONFIG['MOZ_HARFBUZZ_CFLAGS']
4075 +
4076  if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('gtk', 'android'):
4077      CXXFLAGS += CONFIG['MOZ_CAIRO_CFLAGS']
4078      CXXFLAGS += CONFIG['CAIRO_FT_CFLAGS']
4079 diff --git gfx/skia/moz.build gfx/skia/moz.build
4080 index 2118677ca3a8..e4978b413784 100644
4081 --- gfx/skia/moz.build
4082 +++ gfx/skia/moz.build
4083 @@ -493,6 +493,9 @@ if CONFIG['CC_TYPE'] in ('clang', 'clang-cl'):
4084          '-Wno-unused-private-field',
4085      ]
4086  
4087 +if CONFIG['MOZ_SYSTEM_HARFBUZZ']:
4088 +    CXXFLAGS += CONFIG['MOZ_HARFBUZZ_CFLAGS']
4089 +
4090  if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('gtk', 'android'):
4091      CXXFLAGS += CONFIG['MOZ_CAIRO_CFLAGS']
4092      CXXFLAGS += CONFIG['CAIRO_FT_CFLAGS']
4093 diff --git gfx/thebes/moz.build gfx/thebes/moz.build
4094 index 56f1b9fe3f4b..0ac1100b0df3 100644
4095 --- gfx/thebes/moz.build
4096 +++ gfx/thebes/moz.build
4097 @@ -284,7 +284,13 @@ if CONFIG['MOZ_WAYLAND']:
4098  
4099  LOCAL_INCLUDES += CONFIG['SKIA_INCLUDES']
4100  
4101 -DEFINES['GRAPHITE2_STATIC'] = True
4102 +if CONFIG['MOZ_SYSTEM_GRAPHITE2']:
4103 +    CXXFLAGS += CONFIG['MOZ_GRAPHITE2_CFLAGS']
4104 +else:
4105 +    DEFINES['GRAPHITE2_STATIC'] = True
4106 +
4107 +if CONFIG['MOZ_SYSTEM_HARFBUZZ']:
4108 +    CXXFLAGS += CONFIG['MOZ_HARFBUZZ_CFLAGS']
4109  
4110  if CONFIG['CC_TYPE'] == 'clang':
4111      # Suppress warnings from Skia header files.
4112 diff --git intl/unicharutil/util/moz.build intl/unicharutil/util/moz.build
4113 index cb1233c56d7e..06fb1f9f174b 100644
4114 --- intl/unicharutil/util/moz.build
4115 +++ intl/unicharutil/util/moz.build
4116 @@ -25,4 +25,7 @@ UNIFIED_SOURCES += [
4117      'nsUnicodeProperties.cpp',
4118  ]
4119  
4120 +if CONFIG['MOZ_SYSTEM_HARFBUZZ']:
4121 +    CXXFLAGS += CONFIG['MOZ_HARFBUZZ_CFLAGS']
4122 +
4123  FINAL_LIBRARY = 'xul'
4124 diff --git netwerk/dns/moz.build netwerk/dns/moz.build
4125 index 79c26e3e7001..c4d93bc5f7dc 100644
4126 --- netwerk/dns/moz.build
4127 +++ netwerk/dns/moz.build
4128 @@ -86,3 +86,6 @@ USE_LIBS += ['icu']
4129  
4130  if CONFIG['CC_TYPE'] in ('clang', 'gcc'):
4131      CXXFLAGS += ['-Wno-error=shadow']
4132 +
4133 +if CONFIG['MOZ_SYSTEM_HARFBUZZ']:
4134 +    CXXFLAGS += CONFIG['MOZ_HARFBUZZ_CFLAGS']
4135 diff --git old-configure.in old-configure.in
4136 index 95a58b634593..b614eef85c89 100644
4137 --- old-configure.in
4138 +++ old-configure.in
4139 @@ -2639,6 +2639,27 @@ dnl ========================================================
4140  
4141  AC_SUBST(MOZ_LINUX_32_SSE2_STARTUP_ERROR)
4142  
4143 +dnl ========================================================
4144 +dnl Check for graphite2
4145 +dnl ========================================================
4146 +if test -n "$MOZ_SYSTEM_GRAPHITE2"; then
4147 +    dnl graphite2.pc has bogus version, check manually
4148 +    _SAVE_CFLAGS=$CFLAGS
4149 +    CFLAGS="$CFLAGS $MOZ_GRAPHITE2_CFLAGS"
4150 +    AC_TRY_COMPILE([ #include <graphite2/Font.h>
4151 +                     #define GR2_VERSION_REQUIRE(major,minor,bugfix)  \
4152 +                             ( GR2_VERSION_MAJOR * 10000 + GR2_VERSION_MINOR \
4153 +                               * 100 + GR2_VERSION_BUGFIX >= \
4154 +                               (major) * 10000 + (minor) * 100 + (bugfix) )
4155 +                   ], [
4156 +                     #if !GR2_VERSION_REQUIRE(1,3,14)
4157 +                     #error "Insufficient graphite2 version."
4158 +                     #endif
4159 +                   ], [],
4160 +                   [AC_MSG_ERROR([--with-system-graphite2 requested but no working libgraphite2 found])])
4161 +    CFLAGS=$_SAVE_CFLAGS
4162 +fi
4163 +
4164  dnl ========================================================
4165  dnl Check for pixman and cairo
4166  dnl ========================================================
4167 diff --git toolkit/library/moz.build toolkit/library/moz.build
4168 index 24f940e1ed7e..079a575adec3 100644
4169 --- toolkit/library/moz.build
4170 +++ toolkit/library/moz.build
4171 @@ -248,6 +248,12 @@ if CONFIG['MOZ_SYSTEM_PNG']:
4172  if CONFIG['MOZ_SYSTEM_WEBP']:
4173      OS_LIBS += CONFIG['MOZ_WEBP_LIBS']
4174  
4175 +if CONFIG['MOZ_SYSTEM_GRAPHITE2']:
4176 +    OS_LIBS += CONFIG['MOZ_GRAPHITE2_LIBS']
4177 +
4178 +if CONFIG['MOZ_SYSTEM_HARFBUZZ']:
4179 +    OS_LIBS += CONFIG['MOZ_HARFBUZZ_LIBS']
4180 +
4181  if CONFIG['MOZ_SYSTEM_LIBEVENT']:
4182      OS_LIBS += CONFIG['MOZ_LIBEVENT_LIBS']
4183  
4184 diff --git toolkit/moz.configure toolkit/moz.configure
4185 index 9297e4d6f501..d8e273887e4b 100644
4186 --- toolkit/moz.configure
4187 +++ toolkit/moz.configure
4188 @@ -937,6 +937,25 @@ add_old_configure_assignment('FT2_LIBS',
4189  add_old_configure_assignment('FT2_CFLAGS',
4190                               ft2_info.cflags)
4191  
4192 +# Graphite2
4193 +# ==============================================================
4194 +option('--with-system-graphite2',
4195 +       help="Use system graphite2 (located with pkgconfig)")
4196 +
4197 +system_graphite2 = pkg_check_modules('MOZ_GRAPHITE2', 'graphite2',
4198 +                                     when='--with-system-graphite2')
4199 +
4200 +set_config('MOZ_SYSTEM_GRAPHITE2', depends_if(system_graphite2)(lambda _: True))
4201 +
4202 +# HarfBuzz
4203 +# ==============================================================
4204 +option('--with-system-harfbuzz',
4205 +       help="Use system harfbuzz (located with pkgconfig)")
4206 +
4207 +system_harfbuzz = pkg_check_modules('MOZ_HARFBUZZ', 'harfbuzz >= 2.6.6',
4208 +                                    when='--with-system-harfbuzz')
4209 +
4210 +set_config('MOZ_SYSTEM_HARFBUZZ', depends_if(system_harfbuzz)(lambda _: True))
4211  
4212  # Remote agent (part of CDP based remote protocol)
4213  # ==============================================================
4214
4215
4216 [FILE:1292:patches/patch-comm_ldap_c-sdk_include_portable.h]
4217 --- comm/ldap/c-sdk/include/portable.h.orig     2020-05-21 20:31:05 UTC
4218 +++ comm/ldap/c-sdk/include/portable.h
4219 @@ -119,11 +119,15 @@
4220  #  define OPENLOG_OPTIONS (LOG_PID | LOG_NOWAIT)
4221  #endif
4222  
4223 +#ifdef __DragonFly__
4224 +#define DRAGONFLY
4225 +#endif
4226 +
4227  /*
4228   * some systems don't have the BSD re_comp and re_exec routines
4229   */
4230  #ifndef NEED_BSDREGEX
4231 -#  if (defined(SYSV) || defined(NETBSD) || defined(FREEBSD) ||       \
4232 +#  if (defined(SYSV) || defined(NETBSD) || defined(FREEBSD) || defined(DRAGONFLY) || \
4233         defined(__OpenBSD__) || defined(linux) || defined(DARWIN)) && \
4234        !defined(sgi)
4235  #    define NEED_BSDREGEX
4236 @@ -274,7 +278,7 @@ int strncasecmp(const char *, const char
4237        defined(SUNOS4) || defined(SNI) || defined(BSDI) || defined(NCR) ||      \
4238        defined(OSF1) || defined(NEC) || defined(VMS) ||                         \
4239        (defined(HPUX10) && !defined(_REENTRANT)) || defined(HPUX11) ||          \
4240 -      defined(UnixWare) || defined(NETBSD) || defined(FREEBSD) ||              \
4241 +      defined(UnixWare) || defined(NETBSD) || defined(FREEBSD) || defined(DRAGONFLY) || \
4242        defined(OPENBSD) || (defined(LINUX) && __GLIBC__ < 2) ||                 \
4243        (defined(AIX) && !defined(USE_REENTRANT_LIBC))
4244  #    define GETHOSTBYNAME(n, r, b, l, e) gethostbyname(n)
4245
4246
4247 [FILE:421:patches/patch-comm_mail_app_nsMailApp.cpp]
4248 --- comm/mail/app/nsMailApp.cpp.orig    2020-07-13 18:10:03 UTC
4249 +++ comm/mail/app/nsMailApp.cpp
4250 @@ -306,6 +306,9 @@ int main(int argc, char* argv[], char* e
4251    }
4252  #endif
4253  
4254 +  setenv("MOZ_GMP_PATH", "%%LOCALBASE%%/lib/browser_plugins/symlinks/gecko", 0);
4255 +  setenv("MOZ_PLUGIN_PATH", "%%LOCALBASE%%/lib/browser_plugins/symlinks/gecko", 0);
4256 +
4257  #ifdef HAS_DLL_BLOCKLIST
4258    DllBlocklist_Initialize(gBlocklistInitFlags);
4259  #endif
4260
4261
4262 [FILE:679:patches/patch-comm_third__party_botan_configure.py]
4263 --- comm/third_party/botan/configure.py.orig    2020-07-13 18:10:04 UTC
4264 +++ comm/third_party/botan/configure.py
4265 @@ -2936,11 +2936,7 @@ def set_defaults_for_unset_options(optio
4266          options.os = find_canonical_os_name(options.os)
4267  
4268      def deduce_compiler_type_from_cc_bin(cc_bin):
4269 -        if cc_bin.find('clang') != -1 or cc_bin in ['emcc', 'em++']:
4270 -            return 'clang'
4271 -        if cc_bin.find('-g++') != -1 or cc_bin.find('g++') != -1:
4272 -            return 'gcc'
4273 -        return None
4274 +        return 'gcc'
4275  
4276      if options.compiler is None and options.compiler_binary is not None:
4277          options.compiler = deduce_compiler_type_from_cc_bin(options.compiler_binary)
4278
4279
4280 [FILE:286:patches/patch-comm_third__party_botan_src_build-data_os_freebsd.txt]
4281 FreeBSD 11.3 doesn't have sys/auxv.h
4282
4283 --- comm/third_party/botan/src/build-data/os/freebsd.txt.orig   2020-09-08 23:21:51 UTC
4284 +++ comm/third_party/botan/src/build-data/os/freebsd.txt
4285 @@ -11,7 +11,6 @@ dev_random
4286  arc4random
4287  explicit_bzero
4288  cap_enter
4289 -elf_aux_info
4290  getentropy
4291  
4292  atomics
4293
4294
4295 [FILE:36325:patches/patch-cubeb-oss]
4296 https://github.com/kinetiknz/cubeb/pull/600
4297
4298 --- dom/media/CubebUtils.cpp.orig       2020-08-19 02:08:51 UTC
4299 +++ dom/media/CubebUtils.cpp
4300 @@ -126,7 +126,7 @@ const char kBrandBundleURL[] = "chrome://branding/locale/brand.properties";
4301  
4302  const char* AUDIOSTREAM_BACKEND_ID_STR[] = {
4303      "jack",  "pulse",       "alsa",  "audiounit", "audioqueue", "wasapi",
4304 -    "winmm", "directsound", "sndio", "opensl",    "audiotrack", "kai"};
4305 +    "winmm", "directsound", "sndio", "opensl", "oss", "audiotrack", "kai"};
4306  /* Index for failures to create an audio stream the first time. */
4307  const int CUBEB_BACKEND_INIT_FAILURE_FIRST =
4308      ArrayLength(AUDIOSTREAM_BACKEND_ID_STR);
4309 --- media/libcubeb/src/moz.build.orig   2020-08-19 02:09:19 UTC
4310 +++ media/libcubeb/src/moz.build
4311 @@ -40,6 +40,12 @@ if CONFIG['MOZ_JACK']:
4312      ]
4313      DEFINES['USE_JACK'] = True
4314  
4315 +if CONFIG['OS_ARCH'] in ('DragonFly', 'FreeBSD', 'SunOS'):
4316 +    SOURCES += [
4317 +        'cubeb_oss.c',
4318 +    ]
4319 +    DEFINES['USE_OSS'] = True
4320 +
4321  if CONFIG['OS_ARCH'] == 'OpenBSD':
4322      SOURCES += [
4323          'cubeb_sndio.c',
4324 --- media/libcubeb/src/cubeb.c.orig     2020-08-19 02:09:26 UTC
4325 +++ media/libcubeb/src/cubeb.c
4326 @@ -60,6 +60,9 @@ int sun_init(cubeb ** context, char const * context_name);
4327  #if defined(USE_OPENSL)
4328  int opensl_init(cubeb ** context, char const * context_name);
4329  #endif
4330 +#if defined(USE_OSS)
4331 +int oss_init(cubeb ** context, char const * context_name);
4332 +#endif
4333  #if defined(USE_AUDIOTRACK)
4334  int audiotrack_init(cubeb ** context, char const * context_name);
4335  #endif
4336 @@ -165,6 +168,10 @@ cubeb_init(cubeb ** context, char const * context_name, char const * backend_nam
4337  #if defined(USE_OPENSL)
4338        init_oneshot = opensl_init;
4339  #endif
4340 +    } else if (!strcmp(backend_name, "oss")) {
4341 +#if defined(USE_OSS)
4342 +      init_oneshot = oss_init;
4343 +#endif
4344      } else if (!strcmp(backend_name, "audiotrack")) {
4345  #if defined(USE_AUDIOTRACK)
4346        init_oneshot = audiotrack_init;
4347 @@ -200,6 +207,9 @@ cubeb_init(cubeb ** context, char const * context_name, char const * backend_nam
4348  #if defined(USE_ALSA)
4349      alsa_init,
4350  #endif
4351 +#if defined (USE_OSS)
4352 +    oss_init,
4353 +#endif
4354  #if defined(USE_AUDIOUNIT_RUST)
4355      audiounit_rust_init,
4356  #endif
4357 --- /dev/null
4358 +++ media/libcubeb/src/cubeb_oss.c
4359 @@ -0,0 +1,1263 @@
4360 +/*
4361 + * Copyright Â© 2019-2020 Nia Alarie <nia@NetBSD.org>
4362 + * Copyright Â© 2020 Ka Ho Ng <khng300@gmail.com>
4363 + * Copyright Â© 2020 The FreeBSD Foundation
4364 + *
4365 + * Portions of this software were developed by Ka Ho Ng
4366 + * under sponsorship from the FreeBSD Foundation.
4367 + *
4368 + * This program is made available under an ISC-style license.  See the
4369 + * accompanying file LICENSE for details.
4370 + */
4371 +
4372 +#if defined(__FreeBSD__) && __FreeBSD__ < 12
4373 +#define _WITH_GETLINE
4374 +#endif
4375 +#include <assert.h>
4376 +#include <ctype.h>
4377 +#include <limits.h>
4378 +#include <errno.h>
4379 +#include <sys/types.h>
4380 +#include <sys/soundcard.h>
4381 +#include <sys/ioctl.h>
4382 +#include <fcntl.h>
4383 +#include <unistd.h>
4384 +#include <pthread.h>
4385 +#include <stdbool.h>
4386 +#include <stdlib.h>
4387 +#include <stdio.h>
4388 +#include <string.h>
4389 +#include <poll.h>
4390 +#include "cubeb/cubeb.h"
4391 +#include "cubeb_mixer.h"
4392 +#include "cubeb_strings.h"
4393 +#include "cubeb-internal.h"
4394 +
4395 +/* Supported well by most hardware. */
4396 +#ifndef OSS_PREFER_RATE
4397 +#define OSS_PREFER_RATE (48000)
4398 +#endif
4399 +
4400 +/* Standard acceptable minimum. */
4401 +#ifndef OSS_LATENCY_MS
4402 +#define OSS_LATENCY_MS (8)
4403 +#endif
4404 +
4405 +#ifndef OSS_NFRAGS
4406 +#define OSS_NFRAGS (4)
4407 +#endif
4408 +
4409 +#ifndef OSS_DEFAULT_DEVICE
4410 +#define OSS_DEFAULT_DEVICE "/dev/dsp"
4411 +#endif
4412 +
4413 +#ifndef OSS_DEFAULT_MIXER
4414 +#define OSS_DEFAULT_MIXER "/dev/mixer"
4415 +#endif
4416 +
4417 +#define ENV_AUDIO_DEVICE "AUDIO_DEVICE"
4418 +
4419 +#ifndef OSS_MAX_CHANNELS
4420 +# if defined(__FreeBSD__) || defined(__DragonFly__)
4421 +/*
4422 + * The current maximum number of channels supported
4423 + * on FreeBSD is 8.
4424 + *
4425 + * Reference: FreeBSD 12.1-RELEASE
4426 + */
4427 +#  define OSS_MAX_CHANNELS (8)
4428 +# elif defined(__sun__)
4429 +/*
4430 + * The current maximum number of channels supported
4431 + * on Illumos is 16.
4432 + *
4433 + * Reference: PSARC 2008/318
4434 + */
4435 +#  define OSS_MAX_CHANNELS (16)
4436 +# else
4437 +#  define OSS_MAX_CHANNELS (2)
4438 +# endif
4439 +#endif
4440 +
4441 +#if defined(__FreeBSD__) || defined(__DragonFly__)
4442 +#define SNDSTAT_BEGIN_STR "Installed devices:"
4443 +#define SNDSTAT_USER_BEGIN_STR "Installed devices from userspace:"
4444 +#define SNDSTAT_FV_BEGIN_STR "File Versions:"
4445 +#endif
4446 +
4447 +static struct cubeb_ops const oss_ops;
4448 +
4449 +struct cubeb {
4450 +  struct cubeb_ops const * ops;
4451 +
4452 +  /* Our intern string store */
4453 +  pthread_mutex_t mutex; /* protects devid_strs */
4454 +  cubeb_strings *devid_strs;
4455 +};
4456 +
4457 +struct oss_stream {
4458 +  oss_devnode_t name;
4459 +  int fd;
4460 +  void * buf;
4461 +
4462 +  struct stream_info {
4463 +    int channels;
4464 +    int sample_rate;
4465 +    int fmt;
4466 +    int precision;
4467 +  } info;
4468 +
4469 +  unsigned int frame_size; /* precision in bytes * channels */
4470 +  bool floating;
4471 +};
4472 +
4473 +struct cubeb_stream {
4474 +  struct cubeb * context;
4475 +  void * user_ptr;
4476 +  pthread_t thread;
4477 +  bool doorbell; /* (m) */
4478 +  pthread_cond_t doorbell_cv; /* (m) */
4479 +  pthread_cond_t stopped_cv; /* (m) */
4480 +  pthread_mutex_t mtx; /* Members protected by this should be marked (m) */
4481 +  bool thread_created; /* (m) */
4482 +  bool running; /* (m) */
4483 +  bool destroying; /* (m) */
4484 +  cubeb_state state; /* (m) */
4485 +  float volume /* (m) */;
4486 +  struct oss_stream play;
4487 +  struct oss_stream record;
4488 +  cubeb_data_callback data_cb;
4489 +  cubeb_state_callback state_cb;
4490 +  uint64_t frames_written /* (m) */;
4491 +  unsigned int nfr; /* Number of frames allocated */
4492 +  unsigned int nfrags;
4493 +  unsigned int bufframes;
4494 +};
4495 +
4496 +static char const *
4497 +oss_cubeb_devid_intern(cubeb *context, char const * devid)
4498 +{
4499 +  char const *is;
4500 +  pthread_mutex_lock(&context->mutex);
4501 +  is = cubeb_strings_intern(context->devid_strs, devid);
4502 +  pthread_mutex_unlock(&context->mutex);
4503 +  return is;
4504 +}
4505 +
4506 +int
4507 +oss_init(cubeb **context, char const *context_name) {
4508 +  cubeb * c;
4509 +
4510 +  (void)context_name;
4511 +  if ((c = calloc(1, sizeof(cubeb))) == NULL) {
4512 +    return CUBEB_ERROR;
4513 +  }
4514 +
4515 +  if (cubeb_strings_init(&c->devid_strs) == CUBEB_ERROR) {
4516 +    goto fail;
4517 +  }
4518 +
4519 +  if (pthread_mutex_init(&c->mutex, NULL) != 0) {
4520 +    goto fail;
4521 +  }
4522 +
4523 +  c->ops = &oss_ops;
4524 +  *context = c;
4525 +  return CUBEB_OK;
4526 +
4527 +fail:
4528 +  cubeb_strings_destroy(c->devid_strs);
4529 +  free(c);
4530 +  return CUBEB_ERROR;
4531 +}
4532 +
4533 +static void
4534 +oss_destroy(cubeb * context)
4535 +{
4536 +  pthread_mutex_destroy(&context->mutex);
4537 +  cubeb_strings_destroy(context->devid_strs);
4538 +  free(context);
4539 +}
4540 +
4541 +static char const *
4542 +oss_get_backend_id(cubeb * context)
4543 +{
4544 +  return "oss";
4545 +}
4546 +
4547 +static int
4548 +oss_get_preferred_sample_rate(cubeb * context, uint32_t * rate)
4549 +{
4550 +  (void)context;
4551 +
4552 +  *rate = OSS_PREFER_RATE;
4553 +  return CUBEB_OK;
4554 +}
4555 +
4556 +static int
4557 +oss_get_max_channel_count(cubeb * context, uint32_t * max_channels)
4558 +{
4559 +  (void)context;
4560 +
4561 +  *max_channels = OSS_MAX_CHANNELS;
4562 +  return CUBEB_OK;
4563 +}
4564 +
4565 +static int
4566 +oss_get_min_latency(cubeb * context, cubeb_stream_params params,
4567 +                    uint32_t * latency_frames)
4568 +{
4569 +  (void)context;
4570 +
4571 +  *latency_frames = (OSS_LATENCY_MS * params.rate) / 1000;
4572 +  return CUBEB_OK;
4573 +}
4574 +
4575 +static void
4576 +oss_free_cubeb_device_info_strings(cubeb_device_info *cdi)
4577 +{
4578 +  free((char *)cdi->device_id);
4579 +  free((char *)cdi->friendly_name);
4580 +  free((char *)cdi->group_id);
4581 +  cdi->device_id = NULL;
4582 +  cdi->friendly_name = NULL;
4583 +  cdi->group_id = NULL;
4584 +}
4585 +
4586 +#if defined(__FreeBSD__) || defined(__DragonFly__)
4587 +/*
4588 + * Check if the specified DSP is okay for the purpose specified
4589 + * in type. Here type can only specify one operation each time
4590 + * this helper is called.
4591 + *
4592 + * Return 0 if OK, otherwise 1.
4593 + */
4594 +static int
4595 +oss_probe_open(const char *dsppath, cubeb_device_type type,
4596 +               int *fdp, oss_audioinfo *resai)
4597 +{
4598 +  oss_audioinfo ai;
4599 +  int error;
4600 +  int oflags = (type == CUBEB_DEVICE_TYPE_INPUT) ? O_RDONLY : O_WRONLY;
4601 +  int dspfd = open(dsppath, oflags);
4602 +  if (dspfd == -1)
4603 +    return 1;
4604 +
4605 +  ai.dev = -1;
4606 +  error = ioctl(dspfd, SNDCTL_AUDIOINFO, &ai);
4607 +  if (error < 0) {
4608 +    close(dspfd);
4609 +    return 1;
4610 +  }
4611 +
4612 +  if (resai)
4613 +    *resai = ai;
4614 +  if (fdp)
4615 +    *fdp = dspfd;
4616 +  else
4617 +    close(dspfd);
4618 +  return 0;
4619 +}
4620 +
4621 +struct sndstat_info {
4622 +  oss_devnode_t devname;
4623 +  const char *desc;
4624 +  cubeb_device_type type;
4625 +  int preferred;
4626 +};
4627 +
4628 +static int
4629 +oss_sndstat_line_parse(char *line, int is_ud, struct sndstat_info *sinfo)
4630 +{
4631 +    char *matchptr = line, *n = NULL;
4632 +    struct sndstat_info res;
4633 +
4634 +    memset(&res, 0, sizeof(res));
4635 +
4636 +    n = strchr(matchptr, ':');
4637 +    if (n == NULL)
4638 +      goto fail;
4639 +    if (is_ud == 0) {
4640 +      unsigned int devunit;
4641 +
4642 +      if (sscanf(matchptr, "pcm%u: ", &devunit) < 1)
4643 +        goto fail;
4644 +
4645 +      if (snprintf(res.devname, sizeof(res.devname), "/dev/dsp%u", devunit) < 1)
4646 +        goto fail;
4647 +    } else {
4648 +      if (n - matchptr >= (ssize_t)(sizeof(res.devname) - strlen("/dev/")))
4649 +        goto fail;
4650 +
4651 +      strlcpy(res.devname, "/dev/", sizeof(res.devname));
4652 +      strncat(res.devname, matchptr, n - matchptr);
4653 +    }
4654 +    matchptr = n + 1;
4655 +
4656 +    n = strchr(matchptr, '<');
4657 +    if (n == NULL)
4658 +      goto fail;
4659 +    matchptr = n + 1;
4660 +    n = strrchr(matchptr, '>');
4661 +    if (n == NULL)
4662 +      goto fail;
4663 +    *n = 0;
4664 +    res.desc = matchptr;
4665 +    matchptr = n + 1;
4666 +
4667 +    n = strchr(matchptr, '(');
4668 +    if (n == NULL)
4669 +      goto fail;
4670 +    matchptr = n + 1;
4671 +    n = strrchr(matchptr, ')');
4672 +    if (n == NULL)
4673 +      goto fail;
4674 +    *n = 0;
4675 +    if (!isdigit(matchptr[0])) {
4676 +      if (strstr(matchptr, "play") != NULL)
4677 +        res.type |= CUBEB_DEVICE_TYPE_OUTPUT;
4678 +      if (strstr(matchptr, "rec") != NULL)
4679 +        res.type |= CUBEB_DEVICE_TYPE_INPUT;
4680 +    } else {
4681 +      int p, r;
4682 +      if (sscanf(matchptr, "%dp:%*dv/%dr:%*dv", &p, &r) != 2)
4683 +        goto fail;
4684 +      if (p > 0)
4685 +        res.type |= CUBEB_DEVICE_TYPE_OUTPUT;
4686 +      if (r > 0)
4687 +        res.type |= CUBEB_DEVICE_TYPE_INPUT;
4688 +    }
4689 +    matchptr = n + 1;
4690 +    if (strstr(matchptr, "default") != NULL)
4691 +      res.preferred = 1;
4692 +
4693 +    *sinfo = res;
4694 +    return 0;
4695 +
4696 +fail:
4697 +    return 1;
4698 +}
4699 +
4700 +/*
4701 + * XXX: On FreeBSD we have to rely on SNDCTL_CARDINFO to get all
4702 + * the usable audio devices currently, as SNDCTL_AUDIOINFO will
4703 + * never return directly usable audio device nodes.
4704 + */
4705 +static int
4706 +oss_enumerate_devices(cubeb * context, cubeb_device_type type,
4707 +                      cubeb_device_collection * collection)
4708 +{
4709 +  cubeb_device_info *devinfop = NULL;
4710 +  char *line = NULL;
4711 +  size_t linecap = 0;
4712 +  FILE *sndstatfp = NULL;
4713 +  int collection_cnt = 0;
4714 +  int is_ud = 0;
4715 +  int skipall = 0;
4716 +
4717 +  devinfop = calloc(1, sizeof(cubeb_device_info));
4718 +  if (devinfop == NULL)
4719 +    goto fail;
4720 +
4721 +  sndstatfp = fopen("/dev/sndstat", "r");
4722 +  if (sndstatfp == NULL)
4723 +    goto fail;
4724 +  while (getline(&line, &linecap, sndstatfp) > 0) {
4725 +    const char *devid = NULL;
4726 +    struct sndstat_info sinfo;
4727 +    oss_audioinfo ai;
4728 +
4729 +    if (!strncmp(line, SNDSTAT_FV_BEGIN_STR, strlen(SNDSTAT_FV_BEGIN_STR))) {
4730 +      skipall = 1;
4731 +      continue;
4732 +    }
4733 +    if (!strncmp(line, SNDSTAT_BEGIN_STR, strlen(SNDSTAT_BEGIN_STR))) {
4734 +      is_ud = 0;
4735 +      skipall = 0;
4736 +      continue;
4737 +    }
4738 +    if (!strncmp(line, SNDSTAT_USER_BEGIN_STR, strlen(SNDSTAT_USER_BEGIN_STR))) {
4739 +      is_ud = 1;
4740 +      skipall = 0;
4741 +      continue;
4742 +    }
4743 +    if (skipall || isblank(line[0]))
4744 +      continue;
4745 +
4746 +    if (oss_sndstat_line_parse(line, is_ud, &sinfo))
4747 +      continue;
4748 +
4749 +    devinfop[collection_cnt].type = 0;
4750 +    switch (sinfo.type) {
4751 +    case CUBEB_DEVICE_TYPE_INPUT:
4752 +      if (type & CUBEB_DEVICE_TYPE_OUTPUT)
4753 +        continue;
4754 +      break;
4755 +    case CUBEB_DEVICE_TYPE_OUTPUT:
4756 +      if (type & CUBEB_DEVICE_TYPE_INPUT)
4757 +        continue;
4758 +      break;
4759 +    case 0:
4760 +      continue;
4761 +    }
4762 +
4763 +    if (oss_probe_open(sinfo.devname, type, NULL, &ai))
4764 +      continue;
4765 +
4766 +    devid = oss_cubeb_devid_intern(context, sinfo.devname);
4767 +    if (devid == NULL)
4768 +      continue;
4769 +
4770 +    devinfop[collection_cnt].device_id = strdup(sinfo.devname);
4771 +    asprintf((char **)&devinfop[collection_cnt].friendly_name, "%s: %s",
4772 +             sinfo.devname, sinfo.desc);
4773 +    devinfop[collection_cnt].group_id = strdup(sinfo.devname);
4774 +    devinfop[collection_cnt].vendor_name = NULL;
4775 +    if (devinfop[collection_cnt].device_id == NULL ||
4776 +        devinfop[collection_cnt].friendly_name == NULL ||
4777 +        devinfop[collection_cnt].group_id == NULL) {
4778 +      oss_free_cubeb_device_info_strings(&devinfop[collection_cnt]);
4779 +      continue;
4780 +    }
4781 +
4782 +    devinfop[collection_cnt].type = type;
4783 +    devinfop[collection_cnt].devid = devid;
4784 +    devinfop[collection_cnt].state = CUBEB_DEVICE_STATE_ENABLED;
4785 +    devinfop[collection_cnt].preferred =
4786 +        (sinfo.preferred) ? CUBEB_DEVICE_PREF_ALL : CUBEB_DEVICE_PREF_NONE;
4787 +    devinfop[collection_cnt].format = CUBEB_DEVICE_FMT_S16NE;
4788 +    devinfop[collection_cnt].default_format = CUBEB_DEVICE_FMT_S16NE;
4789 +    devinfop[collection_cnt].max_channels = ai.max_channels;
4790 +    devinfop[collection_cnt].default_rate = OSS_PREFER_RATE;
4791 +    devinfop[collection_cnt].max_rate = ai.max_rate;
4792 +    devinfop[collection_cnt].min_rate = ai.min_rate;
4793 +    devinfop[collection_cnt].latency_lo = 0;
4794 +    devinfop[collection_cnt].latency_hi = 0;
4795 +
4796 +    collection_cnt++;
4797 +
4798 +    void *newp = reallocarray(devinfop, collection_cnt + 1,
4799 +                              sizeof(cubeb_device_info));
4800 +    if (newp == NULL)
4801 +      goto fail;
4802 +    devinfop = newp;
4803 +  }
4804 +
4805 +  free(line);
4806 +  fclose(sndstatfp);
4807 +
4808 +  collection->count = collection_cnt;
4809 +  collection->device = devinfop;
4810 +
4811 +  return CUBEB_OK;
4812 +
4813 +fail:
4814 +  free(line);
4815 +  if (sndstatfp)
4816 +    fclose(sndstatfp);
4817 +  free(devinfop);
4818 +  return CUBEB_ERROR;
4819 +}
4820 +
4821 +#else
4822 +
4823 +static int
4824 +oss_enumerate_devices(cubeb * context, cubeb_device_type type,
4825 +                      cubeb_device_collection * collection)
4826 +{
4827 +  oss_sysinfo si;
4828 +  int error, i;
4829 +  cubeb_device_info *devinfop = NULL;
4830 +  int collection_cnt = 0;
4831 +  int mixer_fd = -1;
4832 +
4833 +  mixer_fd = open(OSS_DEFAULT_MIXER, O_RDWR);
4834 +  if (mixer_fd == -1) {
4835 +    LOG("Failed to open mixer %s. errno: %d", OSS_DEFAULT_MIXER, errno);
4836 +    return CUBEB_ERROR;
4837 +  }
4838 +
4839 +  error = ioctl(mixer_fd, SNDCTL_SYSINFO, &si);
4840 +  if (error) {
4841 +    LOG("Failed to run SNDCTL_SYSINFO on mixer %s. errno: %d", OSS_DEFAULT_MIXER, errno);
4842 +    goto fail;
4843 +  }
4844 +
4845 +  devinfop = calloc(si.numaudios, sizeof(cubeb_device_info));
4846 +  if (devinfop == NULL)
4847 +    goto fail;
4848 +
4849 +  collection->count = 0;
4850 +  for (i = 0; i < si.numaudios; i++) {
4851 +    oss_audioinfo ai;
4852 +    cubeb_device_info cdi = { 0 };
4853 +    const char *devid = NULL;
4854 +
4855 +    ai.dev = i;
4856 +    error = ioctl(mixer_fd, SNDCTL_AUDIOINFO, &ai);
4857 +    if (error)
4858 +      goto fail;
4859 +
4860 +    assert(ai.dev < si.numaudios);
4861 +    if (!ai.enabled)
4862 +      continue;
4863 +
4864 +    cdi.type = 0;
4865 +    switch (ai.caps & DSP_CAP_DUPLEX) {
4866 +    case DSP_CAP_INPUT:
4867 +      if (type & CUBEB_DEVICE_TYPE_OUTPUT)
4868 +        continue;
4869 +      break;
4870 +    case DSP_CAP_OUTPUT:
4871 +      if (type & CUBEB_DEVICE_TYPE_INPUT)
4872 +        continue;
4873 +      break;
4874 +    case 0:
4875 +      continue;
4876 +    }
4877 +    cdi.type = type;
4878 +
4879 +    devid = oss_cubeb_devid_intern(context, ai.devnode);
4880 +    cdi.device_id = strdup(ai.name);
4881 +    cdi.friendly_name = strdup(ai.name);
4882 +    cdi.group_id = strdup(ai.name);
4883 +    if (devid == NULL || cdi.device_id == NULL || cdi.friendly_name == NULL ||
4884 +        cdi.group_id == NULL) {
4885 +      oss_free_cubeb_device_info_strings(&cdi);
4886 +      continue;
4887 +    }
4888 +
4889 +    cdi.devid = devid;
4890 +    cdi.vendor_name = NULL;
4891 +    cdi.state = CUBEB_DEVICE_STATE_ENABLED;
4892 +    cdi.preferred = CUBEB_DEVICE_PREF_NONE;
4893 +    cdi.format = CUBEB_DEVICE_FMT_S16NE;
4894 +    cdi.default_format = CUBEB_DEVICE_FMT_S16NE;
4895 +    cdi.max_channels = ai.max_channels;
4896 +    cdi.default_rate = OSS_PREFER_RATE;
4897 +    cdi.max_rate = ai.max_rate;
4898 +    cdi.min_rate = ai.min_rate;
4899 +    cdi.latency_lo = 0;
4900 +    cdi.latency_hi = 0;
4901 +
4902 +    devinfop[collection_cnt++] = cdi;
4903 +  }
4904 +
4905 +  collection->count = collection_cnt;
4906 +  collection->device = devinfop;
4907 +
4908 +  if (mixer_fd != -1)
4909 +    close(mixer_fd);
4910 +  return CUBEB_OK;
4911 +
4912 +fail:
4913 +  if (mixer_fd != -1)
4914 +    close(mixer_fd);
4915 +  free(devinfop);
4916 +  return CUBEB_ERROR;
4917 +}
4918 +
4919 +#endif
4920 +
4921 +static int
4922 +oss_device_collection_destroy(cubeb * context,
4923 +                              cubeb_device_collection * collection)
4924 +{
4925 +  size_t i;
4926 +  for (i = 0; i < collection->count; i++) {
4927 +    oss_free_cubeb_device_info_strings(&collection->device[i]);
4928 +  }
4929 +  free(collection->device);
4930 +  collection->device = NULL;
4931 +  collection->count = 0;
4932 +  return 0;
4933 +}
4934 +
4935 +static unsigned int
4936 +oss_chn_from_cubeb(cubeb_channel chn)
4937 +{
4938 +  switch (chn) {
4939 +    case CHANNEL_FRONT_LEFT:
4940 +      return CHID_L;
4941 +    case CHANNEL_FRONT_RIGHT:
4942 +      return CHID_R;
4943 +    case CHANNEL_FRONT_CENTER:
4944 +      return CHID_C;
4945 +    case CHANNEL_LOW_FREQUENCY:
4946 +      return CHID_LFE;
4947 +    case CHANNEL_BACK_LEFT:
4948 +      return CHID_LR;
4949 +    case CHANNEL_BACK_RIGHT:
4950 +      return CHID_RR;
4951 +    case CHANNEL_SIDE_LEFT:
4952 +      return CHID_LS;
4953 +    case CHANNEL_SIDE_RIGHT:
4954 +      return CHID_RS;
4955 +    default:
4956 +      return CHID_UNDEF;
4957 +  }
4958 +}
4959 +
4960 +static unsigned long long
4961 +oss_cubeb_layout_to_chnorder(cubeb_channel_layout layout)
4962 +{
4963 +  unsigned int i, nchns = 0;
4964 +  unsigned long long chnorder = 0;
4965 +
4966 +  for (i = 0; layout; i++, layout >>= 1) {
4967 +    unsigned long long chid = oss_chn_from_cubeb((layout & 1) << i);
4968 +    if (chid == CHID_UNDEF)
4969 +      continue;
4970 +
4971 +    chnorder |= (chid & 0xf) << nchns * 4;
4972 +    nchns++;
4973 +  }
4974 +
4975 +  return chnorder;
4976 +}
4977 +
4978 +static int
4979 +oss_copy_params(int fd, cubeb_stream * stream, cubeb_stream_params * params,
4980 +                struct stream_info * sinfo)
4981 +{
4982 +  unsigned long long chnorder;
4983 +
4984 +  sinfo->channels = params->channels;
4985 +  sinfo->sample_rate = params->rate;
4986 +  switch (params->format) {
4987 +  case CUBEB_SAMPLE_S16LE:
4988 +    sinfo->fmt = AFMT_S16_LE;
4989 +    sinfo->precision = 16;
4990 +    break;
4991 +  case CUBEB_SAMPLE_S16BE:
4992 +    sinfo->fmt = AFMT_S16_BE;
4993 +    sinfo->precision = 16;
4994 +    break;
4995 +  case CUBEB_SAMPLE_FLOAT32NE:
4996 +    sinfo->fmt = AFMT_S32_NE;
4997 +    sinfo->precision = 32;
4998 +    break;
4999 +  default:
5000 +    LOG("Unsupported format");
5001 +    return CUBEB_ERROR_INVALID_FORMAT;
5002 +  }
5003 +  if (ioctl(fd, SNDCTL_DSP_CHANNELS, &sinfo->channels) == -1) {
5004 +    return CUBEB_ERROR;
5005 +  }
5006 +  if (ioctl(fd, SNDCTL_DSP_SETFMT, &sinfo->fmt) == -1) {
5007 +    return CUBEB_ERROR;
5008 +  }
5009 +  if (ioctl(fd, SNDCTL_DSP_SPEED, &sinfo->sample_rate) == -1) {
5010 +    return CUBEB_ERROR;
5011 +  }
5012 +  /* Mono layout is an exception */
5013 +  if (params->layout != CUBEB_LAYOUT_UNDEFINED && params->layout != CUBEB_LAYOUT_MONO) {
5014 +    chnorder = oss_cubeb_layout_to_chnorder(params->layout);
5015 +    if (ioctl(fd, SNDCTL_DSP_SET_CHNORDER, &chnorder) == -1)
5016 +      LOG("Non-fatal error %d occured when setting channel order.", errno);
5017 +  }
5018 +  return CUBEB_OK;
5019 +}
5020 +
5021 +static int
5022 +oss_stream_stop(cubeb_stream * s)
5023 +{
5024 +  pthread_mutex_lock(&s->mtx);
5025 +  if (s->thread_created && s->running) {
5026 +    s->running = false;
5027 +    s->doorbell = false;
5028 +    pthread_cond_wait(&s->stopped_cv, &s->mtx);
5029 +  }
5030 +  if (s->state != CUBEB_STATE_STOPPED) {
5031 +    s->state = CUBEB_STATE_STOPPED;
5032 +    pthread_mutex_unlock(&s->mtx);
5033 +    s->state_cb(s, s->user_ptr, CUBEB_STATE_STOPPED);
5034 +  } else {
5035 +    pthread_mutex_unlock(&s->mtx);
5036 +  }
5037 +  return CUBEB_OK;
5038 +}
5039 +
5040 +static void
5041 +oss_stream_destroy(cubeb_stream * s)
5042 +{
5043 +  pthread_mutex_lock(&s->mtx);
5044 +  if (s->thread_created) {
5045 +    s->destroying = true;
5046 +    s->doorbell = true;
5047 +    pthread_cond_signal(&s->doorbell_cv);
5048 +  }
5049 +  pthread_mutex_unlock(&s->mtx);
5050 +  pthread_join(s->thread, NULL);
5051 +
5052 +  pthread_cond_destroy(&s->doorbell_cv);
5053 +  pthread_cond_destroy(&s->stopped_cv);
5054 +  pthread_mutex_destroy(&s->mtx);
5055 +  if (s->play.fd != -1) {
5056 +    close(s->play.fd);
5057 +  }
5058 +  if (s->record.fd != -1) {
5059 +    close(s->record.fd);
5060 +  }
5061 +  free(s->play.buf);
5062 +  free(s->record.buf);
5063 +  free(s);
5064 +}
5065 +
5066 +static void
5067 +oss_float_to_linear32(void * buf, unsigned sample_count, float vol)
5068 +{
5069 +  float * in = buf;
5070 +  int32_t * out = buf;
5071 +  int32_t * tail = out + sample_count;
5072 +
5073 +  while (out < tail) {
5074 +    int64_t f = *(in++) * vol * 0x80000000LL;
5075 +    if (f < -INT32_MAX)
5076 +      f = -INT32_MAX;
5077 +    else if (f > INT32_MAX)
5078 +      f = INT32_MAX;
5079 +    *(out++) = f;
5080 +  }
5081 +}
5082 +
5083 +static void
5084 +oss_linear32_to_float(void * buf, unsigned sample_count)
5085 +{
5086 +  int32_t * in = buf;
5087 +  float * out = buf;
5088 +  float * tail = out + sample_count;
5089 +
5090 +  while (out < tail) {
5091 +    *(out++) = (1.0 / 0x80000000LL) * *(in++);
5092 +  }
5093 +}
5094 +
5095 +static void
5096 +oss_linear16_set_vol(int16_t * buf, unsigned sample_count, float vol)
5097 +{
5098 +  unsigned i;
5099 +  int32_t multiplier = vol * 0x8000;
5100 +
5101 +  for (i = 0; i < sample_count; ++i) {
5102 +    buf[i] = (buf[i] * multiplier) >> 15;
5103 +  }
5104 +}
5105 +
5106 +/* 1 - Stopped by cubeb_stream_stop, otherwise 0 */
5107 +static int
5108 +oss_audio_loop(cubeb_stream * s, cubeb_state *new_state)
5109 +{
5110 +  cubeb_state state = CUBEB_STATE_STOPPED;
5111 +  int trig = 0;
5112 +  int drain = 0;
5113 +  struct pollfd pfds[2];
5114 +  unsigned int ppending, rpending;
5115 +
5116 +  pfds[0].fd = s->play.fd;
5117 +  pfds[0].events = POLLOUT;
5118 +  pfds[1].fd = s->record.fd;
5119 +  pfds[1].events = POLLIN;
5120 +
5121 +  ppending = 0;
5122 +  rpending = s->bufframes;
5123 +
5124 +  if (s->record.fd != -1) {
5125 +    if (ioctl(s->record.fd, SNDCTL_DSP_SETTRIGGER, &trig)) {
5126 +      LOG("Error %d occured when setting trigger on record fd", errno);
5127 +      state = CUBEB_STATE_ERROR;
5128 +      goto breakdown;
5129 +    }
5130 +    trig |= PCM_ENABLE_INPUT;
5131 +    if (ioctl(s->record.fd, SNDCTL_DSP_SETTRIGGER, &trig)) {
5132 +      LOG("Error %d occured when setting trigger on record fd", errno);
5133 +      state = CUBEB_STATE_ERROR;
5134 +      goto breakdown;
5135 +    }
5136 +    memset(s->record.buf, 0, s->bufframes * s->record.frame_size);
5137 +  }
5138 +
5139 +  while (1) {
5140 +    long nfr = 0;
5141 +
5142 +    pthread_mutex_lock(&s->mtx);
5143 +    if (!s->running || s->destroying) {
5144 +      pthread_mutex_unlock(&s->mtx);
5145 +      break;
5146 +    }
5147 +    pthread_mutex_unlock(&s->mtx);
5148 +    if (s->play.fd == -1 && s->record.fd == -1) {
5149 +      /*
5150 +       * Stop here if the stream is not play & record stream,
5151 +       * play-only stream or record-only stream
5152 +       */
5153 +
5154 +      goto breakdown;
5155 +    }
5156 +
5157 +    while ((s->bufframes - ppending) >= s->nfr && rpending >= s->nfr) {
5158 +      long n = ((s->bufframes - ppending) < rpending) ? s->bufframes - ppending : rpending;
5159 +      char *rptr = NULL, *pptr = NULL;
5160 +      if (s->record.fd != -1)
5161 +        rptr = (char *)s->record.buf;
5162 +      if (s->play.fd != -1)
5163 +        pptr = (char *)s->play.buf + ppending * s->play.frame_size;
5164 +      if (s->record.fd != -1 && s->record.floating) {
5165 +        oss_linear32_to_float(s->record.buf, s->record.info.channels * n);
5166 +      }
5167 +      nfr = s->data_cb(s, s->user_ptr, rptr, pptr, n);
5168 +      if (nfr == CUBEB_ERROR) {
5169 +        state = CUBEB_STATE_ERROR;
5170 +        goto breakdown;
5171 +      }
5172 +      if (pptr) {
5173 +        float vol;
5174 +
5175 +        pthread_mutex_lock(&s->mtx);
5176 +        vol = s->volume;
5177 +        pthread_mutex_unlock(&s->mtx);
5178 +
5179 +        if (s->play.floating) {
5180 +          oss_float_to_linear32(pptr, s->play.info.channels * nfr, vol);
5181 +        } else {
5182 +          oss_linear16_set_vol((int16_t *)pptr, s->play.info.channels * nfr, vol);
5183 +        }
5184 +      }
5185 +      if (pptr) {
5186 +        ppending += nfr;
5187 +        assert(ppending <= s->bufframes);
5188 +      }
5189 +      if (rptr) {
5190 +        assert(rpending >= nfr);
5191 +        rpending -= nfr;
5192 +        memmove(rptr, rptr + nfr * s->record.frame_size,
5193 +                (s->bufframes - nfr) * s->record.frame_size);
5194 +      }
5195 +      if (nfr < n) {
5196 +        if (s->play.fd != -1) {
5197 +          drain = 1;
5198 +          break;
5199 +        } else {
5200 +          /*
5201 +           * This is a record-only stream and number of frames
5202 +           * returned from data_cb() is smaller than number
5203 +           * of frames required to read. Stop here.
5204 +           */
5205 +
5206 +          state = CUBEB_STATE_STOPPED;
5207 +          goto breakdown;
5208 +        }
5209 +      }
5210 +    }
5211 +
5212 +    ssize_t n, frames;
5213 +    int nfds;
5214 +
5215 +    pfds[0].revents = 0;
5216 +    pfds[1].revents = 0;
5217 +
5218 +    nfds = poll(pfds, 2, 1000);
5219 +    if (nfds == -1) {
5220 +      if (errno == EINTR)
5221 +        continue;
5222 +      LOG("Error %d occured when polling playback and record fd", errno);
5223 +      state = CUBEB_STATE_ERROR;
5224 +      goto breakdown;
5225 +    } else if (nfds == 0)
5226 +      continue;
5227 +
5228 +    if ((pfds[0].revents & (POLLERR | POLLHUP)) ||
5229 +        (pfds[1].revents & (POLLERR | POLLHUP))) {
5230 +      LOG("Error occured on playback, record fds");
5231 +      state = CUBEB_STATE_ERROR;
5232 +      goto breakdown;
5233 +    }
5234 +
5235 +    if (pfds[0].revents) {
5236 +      while (ppending > 0) {
5237 +        size_t bytes = ppending * s->play.frame_size;
5238 +        if ((n = write(s->play.fd, (uint8_t *)s->play.buf, bytes)) < 0) {
5239 +          if (errno == EINTR)
5240 +            continue;
5241 +          if (errno == EAGAIN) {
5242 +            if (drain)
5243 +              continue;
5244 +            break;
5245 +          }
5246 +          state = CUBEB_STATE_ERROR;
5247 +          goto breakdown;
5248 +        }
5249 +        frames = n / s->play.frame_size;
5250 +        pthread_mutex_lock(&s->mtx);
5251 +        s->frames_written += frames;
5252 +        pthread_mutex_unlock(&s->mtx);
5253 +        ppending -= frames;
5254 +        memmove(s->play.buf, (uint8_t *)s->play.buf + n,
5255 +                (s->bufframes - frames) * s->play.frame_size);
5256 +      }
5257 +    }
5258 +    if (pfds[1].revents) {
5259 +      while (s->bufframes - rpending > 0) {
5260 +        size_t bytes = (s->bufframes - rpending) * s->record.frame_size;
5261 +        size_t read_ofs = rpending * s->record.frame_size;
5262 +        if ((n = read(s->record.fd, (uint8_t *)s->record.buf + read_ofs, bytes)) < 0) {
5263 +          if (errno == EINTR)
5264 +            continue;
5265 +          if (errno == EAGAIN)
5266 +            break;
5267 +          state = CUBEB_STATE_ERROR;
5268 +          goto breakdown;
5269 +        }
5270 +        frames = n / s->record.frame_size;
5271 +        rpending += frames;
5272 +      }
5273 +    }
5274 +    if (drain) {
5275 +      state = CUBEB_STATE_DRAINED;
5276 +      goto breakdown;
5277 +    }
5278 +  }
5279 +
5280 +  return 1;
5281 +
5282 +breakdown:
5283 +  pthread_mutex_lock(&s->mtx);
5284 +  *new_state = s->state = state;
5285 +  s->running = false;
5286 +  pthread_mutex_unlock(&s->mtx);
5287 +  return 0;
5288 +}
5289 +
5290 +static void *
5291 +oss_io_routine(void *arg)
5292 +{
5293 +  cubeb_stream *s = arg;
5294 +  cubeb_state new_state;
5295 +  int stopped;
5296 +
5297 +  do {
5298 +    pthread_mutex_lock(&s->mtx);
5299 +    if (s->destroying) {
5300 +      pthread_mutex_unlock(&s->mtx);
5301 +      break;
5302 +    }
5303 +    pthread_mutex_unlock(&s->mtx);
5304 +
5305 +    stopped = oss_audio_loop(s, &new_state);
5306 +    if (s->record.fd != -1)
5307 +      ioctl(s->record.fd, SNDCTL_DSP_HALT_INPUT, NULL);
5308 +    if (!stopped)
5309 +      s->state_cb(s, s->user_ptr, new_state);
5310 +
5311 +    pthread_mutex_lock(&s->mtx);
5312 +    pthread_cond_signal(&s->stopped_cv);
5313 +    if (s->destroying) {
5314 +      pthread_mutex_unlock(&s->mtx);
5315 +      break;
5316 +    }
5317 +    while (!s->doorbell) {
5318 +      pthread_cond_wait(&s->doorbell_cv, &s->mtx);
5319 +    }
5320 +    s->doorbell = false;
5321 +    pthread_mutex_unlock(&s->mtx);
5322 +  } while (1);
5323 +
5324 +  pthread_mutex_lock(&s->mtx);
5325 +  s->thread_created = false;
5326 +  pthread_mutex_unlock(&s->mtx);
5327 +  return NULL;
5328 +}
5329 +
5330 +static inline int
5331 +oss_calc_frag_shift(unsigned int frames, unsigned int frame_size)
5332 +{
5333 +  int n = 4;
5334 +  int blksize = (frames * frame_size + OSS_NFRAGS - 1) / OSS_NFRAGS;
5335 +  while ((1 << n) < blksize)
5336 +    n++;
5337 +  return n;
5338 +}
5339 +
5340 +static inline int
5341 +oss_get_frag_params(unsigned int shift)
5342 +{
5343 +  return (OSS_NFRAGS << 16) | shift;
5344 +}
5345 +
5346 +static int
5347 +oss_stream_init(cubeb * context,
5348 +                cubeb_stream ** stream,
5349 +                char const * stream_name,
5350 +                cubeb_devid input_device,
5351 +                cubeb_stream_params * input_stream_params,
5352 +                cubeb_devid output_device,
5353 +                cubeb_stream_params * output_stream_params,
5354 +                unsigned int latency_frames,
5355 +                cubeb_data_callback data_callback,
5356 +                cubeb_state_callback state_callback,
5357 +                void * user_ptr)
5358 +{
5359 +  int ret = CUBEB_OK;
5360 +  unsigned int playnfr = 0, recnfr = 0;
5361 +  cubeb_stream *s = NULL;
5362 +  const char *defdsp;
5363 +
5364 +  if (!(defdsp = getenv(ENV_AUDIO_DEVICE)) || *defdsp == '\0')
5365 +    defdsp = OSS_DEFAULT_DEVICE;
5366 +
5367 +  (void)stream_name;
5368 +  if ((s = calloc(1, sizeof(cubeb_stream))) == NULL) {
5369 +    ret = CUBEB_ERROR;
5370 +    goto error;
5371 +  }
5372 +  s->state = CUBEB_STATE_STOPPED;
5373 +  s->record.fd = s->play.fd = -1;
5374 +  s->nfr = latency_frames;
5375 +  if (input_device != NULL) {
5376 +    strlcpy(s->record.name, input_device, sizeof(s->record.name));
5377 +  } else {
5378 +    strlcpy(s->record.name, defdsp, sizeof(s->record.name));
5379 +  }
5380 +  if (output_device != NULL) {
5381 +    strlcpy(s->play.name, output_device, sizeof(s->play.name));
5382 +  } else {
5383 +    strlcpy(s->play.name, defdsp, sizeof(s->play.name));
5384 +  }
5385 +  if (input_stream_params != NULL) {
5386 +    unsigned int nb_channels;
5387 +    if (input_stream_params->prefs & CUBEB_STREAM_PREF_LOOPBACK) {
5388 +      LOG("Loopback not supported");
5389 +      ret = CUBEB_ERROR_NOT_SUPPORTED;
5390 +      goto error;
5391 +    }
5392 +    nb_channels = cubeb_channel_layout_nb_channels(input_stream_params->layout);
5393 +    if (input_stream_params->layout != CUBEB_LAYOUT_UNDEFINED &&
5394 +        nb_channels != input_stream_params->channels) {
5395 +      LOG("input_stream_params->layout does not match input_stream_params->channels");
5396 +      ret = CUBEB_ERROR_INVALID_PARAMETER;
5397 +      goto error;
5398 +    }
5399 +    if (s->record.fd == -1) {
5400 +      if ((s->record.fd = open(s->record.name, O_RDONLY | O_NONBLOCK)) == -1) {
5401 +        LOG("Audio device \"%s\" could not be opened as read-only",
5402 +            s->record.name);
5403 +        ret = CUBEB_ERROR_DEVICE_UNAVAILABLE;
5404 +        goto error;
5405 +      }
5406 +    }
5407 +    if ((ret = oss_copy_params(s->record.fd, s, input_stream_params,
5408 +                               &s->record.info)) != CUBEB_OK) {
5409 +      LOG("Setting record params failed");
5410 +      goto error;
5411 +    }
5412 +    s->record.floating = (input_stream_params->format == CUBEB_SAMPLE_FLOAT32NE);
5413 +    s->record.frame_size = s->record.info.channels * (s->record.info.precision / 8);
5414 +    recnfr = (1 << oss_calc_frag_shift(s->nfr, s->record.frame_size)) / s->record.frame_size;
5415 +  }
5416 +  if (output_stream_params != NULL) {
5417 +    unsigned int nb_channels;
5418 +    if (output_stream_params->prefs & CUBEB_STREAM_PREF_LOOPBACK) {
5419 +      LOG("Loopback not supported");
5420 +      ret = CUBEB_ERROR_NOT_SUPPORTED;
5421 +      goto error;
5422 +    }
5423 +    nb_channels = cubeb_channel_layout_nb_channels(output_stream_params->layout);
5424 +    if (output_stream_params->layout != CUBEB_LAYOUT_UNDEFINED &&
5425 +        nb_channels != output_stream_params->channels) {
5426 +      LOG("output_stream_params->layout does not match output_stream_params->channels");
5427 +      ret = CUBEB_ERROR_INVALID_PARAMETER;
5428 +      goto error;
5429 +    }
5430 +    if (s->play.fd == -1) {
5431 +      if ((s->play.fd = open(s->play.name, O_WRONLY | O_NONBLOCK)) == -1) {
5432 +        LOG("Audio device \"%s\" could not be opened as write-only",
5433 +            s->play.name);
5434 +        ret = CUBEB_ERROR_DEVICE_UNAVAILABLE;
5435 +        goto error;
5436 +      }
5437 +    }
5438 +    if ((ret = oss_copy_params(s->play.fd, s, output_stream_params,
5439 +                               &s->play.info)) != CUBEB_OK) {
5440 +      LOG("Setting play params failed");
5441 +      goto error;
5442 +    }
5443 +    s->play.floating = (output_stream_params->format == CUBEB_SAMPLE_FLOAT32NE);
5444 +    s->play.frame_size = s->play.info.channels * (s->play.info.precision / 8);
5445 +    playnfr = (1 << oss_calc_frag_shift(s->nfr, s->play.frame_size)) / s->play.frame_size;
5446 +  }
5447 +  /* Use the largest nframes among playing and recording streams */
5448 +  s->nfr = (playnfr > recnfr) ? playnfr : recnfr;
5449 +  s->nfrags = OSS_NFRAGS;
5450 +  s->bufframes = s->nfr * s->nfrags;
5451 +  if (s->play.fd != -1) {
5452 +    int frag = oss_get_frag_params(oss_calc_frag_shift(s->nfr, s->play.frame_size));
5453 +    if (ioctl(s->record.fd, SNDCTL_DSP_SETFRAGMENT, &frag))
5454 +      LOG("Failed to set record fd with SNDCTL_DSP_SETFRAGMENT. frag: 0x%x",
5455 +          frag);
5456 +  }
5457 +  if (s->record.fd != -1) {
5458 +    int frag = oss_get_frag_params(oss_calc_frag_shift(s->nfr, s->record.frame_size));
5459 +    if (ioctl(s->record.fd, SNDCTL_DSP_SETFRAGMENT, &frag))
5460 +      LOG("Failed to set record fd with SNDCTL_DSP_SETFRAGMENT. frag: 0x%x",
5461 +          frag);
5462 +  }
5463 +  s->context = context;
5464 +  s->volume = 1.0;
5465 +  s->state_cb = state_callback;
5466 +  s->data_cb = data_callback;
5467 +  s->user_ptr = user_ptr;
5468 +
5469 +  if (pthread_mutex_init(&s->mtx, NULL) != 0) {
5470 +    LOG("Failed to create mutex");
5471 +    goto error;
5472 +  }
5473 +  if (pthread_cond_init(&s->doorbell_cv, NULL) != 0) {
5474 +    LOG("Failed to create cv");
5475 +    goto error;
5476 +  }
5477 +  if (pthread_cond_init(&s->stopped_cv, NULL) != 0) {
5478 +    LOG("Failed to create cv");
5479 +    goto error;
5480 +  }
5481 +  s->doorbell = false;
5482 +
5483 +  if (s->play.fd != -1) {
5484 +    if ((s->play.buf = calloc(s->bufframes, s->play.frame_size)) == NULL) {
5485 +      ret = CUBEB_ERROR;
5486 +      goto error;
5487 +    }
5488 +  }
5489 +  if (s->record.fd != -1) {
5490 +    if ((s->record.buf = calloc(s->bufframes, s->record.frame_size)) == NULL) {
5491 +      ret = CUBEB_ERROR;
5492 +      goto error;
5493 +    }
5494 +  }
5495 +
5496 +  *stream = s;
5497 +  return CUBEB_OK;
5498 +error:
5499 +  if (s != NULL) {
5500 +    oss_stream_destroy(s);
5501 +  }
5502 +  return ret;
5503 +}
5504 +
5505 +static int
5506 +oss_stream_thr_create(cubeb_stream * s)
5507 +{
5508 +  if (s->thread_created) {
5509 +    s->doorbell = true;
5510 +    pthread_cond_signal(&s->doorbell_cv);
5511 +    return CUBEB_OK;
5512 +  }
5513 +
5514 +  if (pthread_create(&s->thread, NULL, oss_io_routine, s) != 0) {
5515 +    LOG("Couldn't create thread");
5516 +    return CUBEB_ERROR;
5517 +  }
5518 +
5519 +  return CUBEB_OK;
5520 +}
5521 +
5522 +static int
5523 +oss_stream_start(cubeb_stream * s)
5524 +{
5525 +  s->state_cb(s, s->user_ptr, CUBEB_STATE_STARTED);
5526 +  pthread_mutex_lock(&s->mtx);
5527 +  /* Disallow starting an already started stream */
5528 +  assert(!s->running && s->state != CUBEB_STATE_STARTED);
5529 +  if (oss_stream_thr_create(s) != CUBEB_OK) {
5530 +    pthread_mutex_unlock(&s->mtx);
5531 +    s->state_cb(s, s->user_ptr, CUBEB_STATE_ERROR);
5532 +    return CUBEB_ERROR;
5533 +  }
5534 +  s->state = CUBEB_STATE_STARTED;
5535 +  s->thread_created = true;
5536 +  s->running = true;
5537 +  pthread_mutex_unlock(&s->mtx);
5538 +  return CUBEB_OK;
5539 +}
5540 +
5541 +static int
5542 +oss_stream_get_position(cubeb_stream * s, uint64_t * position)
5543 +{
5544 +  pthread_mutex_lock(&s->mtx);
5545 +  *position = s->frames_written;
5546 +  pthread_mutex_unlock(&s->mtx);
5547 +  return CUBEB_OK;
5548 +}
5549 +
5550 +static int
5551 +oss_stream_get_latency(cubeb_stream * s, uint32_t * latency)
5552 +{
5553 +  int delay;
5554 +
5555 +  if (ioctl(s->play.fd, SNDCTL_DSP_GETODELAY, &delay) == -1) {
5556 +    return CUBEB_ERROR;
5557 +  }
5558 +
5559 +  /* Return number of frames there */
5560 +  *latency = delay / s->play.frame_size;
5561 +  return CUBEB_OK;
5562 +}
5563 +
5564 +static int
5565 +oss_stream_set_volume(cubeb_stream * stream, float volume)
5566 +{
5567 +  if (volume < 0.0)
5568 +    volume = 0.0;
5569 +  else if (volume > 1.0)
5570 +    volume = 1.0;
5571 +  pthread_mutex_lock(&stream->mtx);
5572 +  stream->volume = volume;
5573 +  pthread_mutex_unlock(&stream->mtx);
5574 +  return CUBEB_OK;
5575 +}
5576 +
5577 +static int
5578 +oss_get_current_device(cubeb_stream * stream, cubeb_device ** const device)
5579 +{
5580 +  *device = calloc(1, sizeof(cubeb_device));
5581 +  if (*device == NULL) {
5582 +    return CUBEB_ERROR;
5583 +  }
5584 +  (*device)->input_name = stream->record.fd != -1 ?
5585 +    strdup(stream->record.name) : NULL;
5586 +  (*device)->output_name = stream->play.fd != -1 ?
5587 +    strdup(stream->play.name) : NULL;
5588 +  return CUBEB_OK;
5589 +}
5590 +
5591 +static int
5592 +oss_stream_device_destroy(cubeb_stream * stream, cubeb_device * device)
5593 +{
5594 +  (void)stream;
5595 +  free(device->input_name);
5596 +  free(device->output_name);
5597 +  free(device);
5598 +  return CUBEB_OK;
5599 +}
5600 +
5601 +static struct cubeb_ops const oss_ops = {
5602 +    .init = oss_init,
5603 +    .get_backend_id = oss_get_backend_id,
5604 +    .get_max_channel_count = oss_get_max_channel_count,
5605 +    .get_min_latency = oss_get_min_latency,
5606 +    .get_preferred_sample_rate = oss_get_preferred_sample_rate,
5607 +    .enumerate_devices = oss_enumerate_devices,
5608 +    .device_collection_destroy = oss_device_collection_destroy,
5609 +    .destroy = oss_destroy,
5610 +    .stream_init = oss_stream_init,
5611 +    .stream_destroy = oss_stream_destroy,
5612 +    .stream_start = oss_stream_start,
5613 +    .stream_stop = oss_stream_stop,
5614 +    .stream_reset_default_device = NULL,
5615 +    .stream_get_position = oss_stream_get_position,
5616 +    .stream_get_latency = oss_stream_get_latency,
5617 +    .stream_get_input_latency = NULL,
5618 +    .stream_set_volume = oss_stream_set_volume,
5619 +    .stream_get_current_device = oss_get_current_device,
5620 +    .stream_device_destroy = oss_stream_device_destroy,
5621 +    .stream_register_device_changed_callback = NULL,
5622 +    .register_device_collection_changed = NULL};
5623
5624
5625 [FILE:886:patches/patch-env-api-keys]
5626 # Accept API keys from environment like before bug 1294585
5627
5628 --- build/moz.configure/keyfiles.configure
5629 +++ build/moz.configure/keyfiles.configure
5630 @@ -18,6 +18,7 @@ def keyfile(desc, help=None, callback=lambda x: x):
5631      @checking('for the %s key' % desc, lambda x: x and x is not no_key)
5632      @imports(_from='__builtin__', _import='open')
5633      @imports(_from='__builtin__', _import='IOError')
5634 +    @imports(_from='os', _import='environ')
5635      def keyfile(value):
5636          if value:
5637              try:
5638 @@ -28,7 +29,7 @@ def keyfile(desc, help=None, callback=lambda x: x):
5639                      raise FatalCheckError("'%s' is empty." % value[0])
5640              except IOError as e:
5641                  raise FatalCheckError("'%s': %s." % (value[0], e.strerror))
5642 -        return no_key
5643 +        return environ.get('MOZ_%s_KEY' % desc.upper().replace(' ', '_')) or no_key
5644  
5645      return keyfile
5646  
5647
5648
5649 [FILE:2142:patches/patch-freebsd11.3]
5650 Drop after FreeBSD 11.3 EOL around 2020-09-20.
5651 https://svnweb.freebsd.org/changeset/base/351766
5652
5653 mozglue/baseprofiler/core/shared-libraries-linux.cc:374:34: error: use of undeclared
5654       identifier 'NT_GNU_BUILD_ID'
5655       if (note_header->n_type == NT_GNU_BUILD_ID) break;
5656                                  ^
5657 In file included from Unified_cpp_mozglue_baseprofiler0.cpp:137:
5658 mozglue/baseprofiler/lul/LulElf.cpp:762:32: error: use of undeclared identifier
5659       'NT_GNU_BUILD_ID'
5660     if (note_header->n_type == NT_GNU_BUILD_ID) break;
5661                                ^
5662 In file included from Unified_cpp_tools_profiler1.cpp:38:
5663 tools/profiler/lul/LulElf.cpp:776:32: error: use of undeclared identifier
5664       'NT_GNU_BUILD_ID'
5665     if (note_header->n_type == NT_GNU_BUILD_ID) break;
5666                                ^
5667
5668 --- mozglue/baseprofiler/core/shared-libraries-linux.cc.orig    2020-06-25 17:04:48 UTC
5669 +++ mozglue/baseprofiler/core/shared-libraries-linux.cc
5670 @@ -50,6 +50,11 @@ extern "C" MOZ_EXPORT __attribute__((weak)) int dl_ite
5671  #  define ElfW(type) Elf_##type
5672  #endif
5673  
5674 +#if defined(GP_OS_freebsd) && !defined(NT_GNU_BUILD_ID)
5675 +// FreeBSD < 11.4 doesn't define NT_GNU_BUILD_ID
5676 +#  define NT_GNU_BUILD_ID 3
5677 +#endif
5678 +
5679  // ----------------------------------------------------------------------------
5680  // Starting imports from toolkit/crashreporter/google-breakpad/, as needed by
5681  // this file when moved to mozglue.
5682 --- mozglue/baseprofiler/lul/LulElf.cpp.orig    2020-06-25 17:04:48 UTC
5683 +++ mozglue/baseprofiler/lul/LulElf.cpp
5684 @@ -79,6 +79,11 @@
5685  #  define EM_AARCH64 183
5686  #endif
5687  
5688 +#if defined(GP_OS_freebsd) && !defined(NT_GNU_BUILD_ID)
5689 +// FreeBSD < 11.4 doesn't define NT_GNU_BUILD_ID
5690 +#  define NT_GNU_BUILD_ID 3
5691 +#endif
5692 +
5693  // This namespace contains helper functions.
5694  namespace {
5695  
5696 --- tools/profiler/lul/LulElf.cpp.orig  2020-06-25 17:05:05 UTC
5697 +++ tools/profiler/lul/LulElf.cpp
5698 @@ -84,6 +84,11 @@
5699  #  define EM_AARCH64 183
5700  #endif
5701  
5702 +#if defined(GP_OS_freebsd) && !defined(NT_GNU_BUILD_ID)
5703 +// FreeBSD < 11.4 doesn't define NT_GNU_BUILD_ID
5704 +#  define NT_GNU_BUILD_ID 3
5705 +#endif
5706 +
5707  // This namespace contains helper functions.
5708  namespace {
5709  
5710
5711
5712 [FILE:890:patches/patch-gfx_skia_skia_src_core_SkCpu.cpp]
5713 Regressed by https://svnweb.freebsd.org/changeset/base/324815
5714
5715 gfx/skia/skia/src/core/SkCpu.cpp:81:27: error: use of undeclared identifier 'getauxval'
5716         uint32_t hwcaps = getauxval(AT_HWCAP);
5717                           ^
5718
5719 --- gfx/skia/skia/src/core/SkCpu.cpp.orig       2020-07-13 18:06:57 UTC
5720 +++ gfx/skia/skia/src/core/SkCpu.cpp
5721 @@ -72,6 +72,20 @@
5722          return features;
5723      }
5724  
5725 +#elif defined(SK_CPU_ARM64) && defined(__FreeBSD__)
5726 +    #include <machine/armreg.h>
5727 +
5728 +    static uint32_t read_cpu_features() {
5729 +        uint32_t features = 0;
5730 +        uint64_t id_aa64isar0;
5731 +
5732 +        id_aa64isar0 = READ_SPECIALREG(ID_AA64ISAR0_EL1);
5733 +        if (ID_AA64ISAR0_CRC32(id_aa64isar0) == ID_AA64ISAR0_CRC32_BASE) {
5734 +            features |= SkCpu::CRC32;
5735 +        }
5736 +        return features;
5737 +    }
5738 +
5739  #elif defined(SK_CPU_ARM64) && __has_include(<sys/auxv.h>)
5740      #include <sys/auxv.h>
5741  
5742
5743
5744 [FILE:290:files/thunderbird.desktop]
5745 [Desktop Entry]
5746 Encoding=UTF-8
5747 Name=Thunderbird
5748 GenericName=Mail Client
5749 Comment=Mail client and News Reader
5750 Exec=thunderbird %u
5751 Icon=thunderbird.png
5752 StartupNotify=true
5753 Terminal=false
5754 Type=Application
5755 Categories=Network;Email;News;InstantMessaging;
5756 MimeType=application/mbox;message/rfc822;
5757