From 784ab04d40b0e1c8c5a69db8c79e6b2c86e4b6ea Mon Sep 17 00:00:00 2001 From: bill-auger Date: Oct 08 2021 05:24:00 +0000 Subject: [PATCH 1/73] [iceweasel]: update branding checksum --- diff --git a/libre/iceweasel/PKGBUILD b/libre/iceweasel/PKGBUILD index e09263d..9d13a0a 100644 --- a/libre/iceweasel/PKGBUILD +++ b/libre/iceweasel/PKGBUILD @@ -87,7 +87,7 @@ sha256sums=('299a472373021cc9194449c9f4bb962d5f74ef05e8af0448c589761ea34fbc84' 'SKIP' 'd7c7a65c4b7ec9ea40df129724ffb369d3f775b0514e3c267c52eec6d284b5e6' '9cdc2602661717712092d28bb494e5b48e518cb930898aca85eaf21f91f7ef58') -sha256sums+=('b3cf2d984a979a1daf997efaa46358c601a7b3e957cbc21f4155ea0a72def8e5' +sha256sums+=('5552a56e40aef9fa174676f2b303208d905f519d2bb868d9cefe0950a2f65373' 'SKIP' '6ebbf18792cb57067f500fd4575c341d4708c5c0a232d676471f87dfa590621b' 'afeaeb6e9a6af901b57e25d85014e5c792efe4ff9dabb58663377f487b9d2887' From e69e247f97e6a193677b81277b0639bec066808f Mon Sep 17 00:00:00 2001 From: grizzlyuser Date: Oct 08 2021 05:26:52 +0000 Subject: [PATCH 2/73] libre/iceweasel: Update to 93.0 according to upstreams Arch Linux ARM has removed the patch and webrtc disable flag --- diff --git a/libre/iceweasel/0001-Use-remoting-name-for-GDK-application-names.patch b/libre/iceweasel/0001-Use-remoting-name-for-GDK-application-names.patch index 6060c34..c1feb3f 100644 --- a/libre/iceweasel/0001-Use-remoting-name-for-GDK-application-names.patch +++ b/libre/iceweasel/0001-Use-remoting-name-for-GDK-application-names.patch @@ -9,10 +9,10 @@ Subject: [PATCH] Use remoting name for GDK application names 2 files changed, 6 insertions(+), 12 deletions(-) diff --git a/toolkit/xre/nsAppRunner.cpp b/toolkit/xre/nsAppRunner.cpp -index 055be3e7a3554..f660bd26e331c 100644 +index bb14d84338334..f5c0222987fb0 100644 --- a/toolkit/xre/nsAppRunner.cpp +++ b/toolkit/xre/nsAppRunner.cpp -@@ -4304,11 +4304,7 @@ int XREMain::XRE_mainStartup(bool* aExitFlag) { +@@ -4299,11 +4299,7 @@ int XREMain::XRE_mainStartup(bool* aExitFlag) { // consistently. // Set program name to the one defined in application.ini. diff --git a/libre/iceweasel/9001-FSDG-always-sync-remote-settings-with-local-dump.patch b/libre/iceweasel/9001-FSDG-always-sync-remote-settings-with-local-dump.patch index de515a4..9fcaef7 100644 --- a/libre/iceweasel/9001-FSDG-always-sync-remote-settings-with-local-dump.patch +++ b/libre/iceweasel/9001-FSDG-always-sync-remote-settings-with-local-dump.patch @@ -318,10 +318,12 @@ index ef91781ac6..8736951968 100644 const params = { ...filters, _expected: expectedTimestamp ?? 0, -@@ -166,6 +166,9 @@ var Utils = { +@@ -273,7 +264,10 @@ var Utils = { + .map(([k, v]) => `${k}=${encodeURIComponent(v)}`) .join("&"); } - const response = await fetch(url); +- const response = await Utils.fetch(url); ++ const response = await fetch(url); + const responseDate = new Date().toUTCString() + response.headers.set("Date", responseDate); + response.headers.set("Last-Modified", responseDate); diff --git a/libre/iceweasel/PKGBUILD b/libre/iceweasel/PKGBUILD index 9d13a0a..a418503 100644 --- a/libre/iceweasel/PKGBUILD +++ b/libre/iceweasel/PKGBUILD @@ -47,10 +47,10 @@ pkgname=iceweasel epoch=1 -pkgver=92.0 +pkgver=93.0 pkgrel=1 pkgrel+=.parabola1 -_brandingver=91.0-1 +_brandingver=93.0-1 pkgdesc="Standalone web browser derived from Mozilla Firefox" arch=(x86_64) arch+=(i686 armv7h) @@ -79,25 +79,23 @@ source+=(https://repo.parabola.nu/other/iceweasel/${pkgname}_${_brandingver}.bra 9003-FSDG-misc.patch process-json-files.py vendor.js.in) -source_armv7h=(arm.patch - build-arm-libopus.patch) +source_armv7h=(build-arm-libopus.patch) source_i686=('avoid-libxul-OOM-python-check.patch' 'rust-static-disable-network-test-on-static-libraries.patch') -sha256sums=('299a472373021cc9194449c9f4bb962d5f74ef05e8af0448c589761ea34fbc84' +sha256sums=('a78f080f5849bc284b84299f3540934a12e961a7ea368b592ae6576ea1f97102' 'SKIP' - 'd7c7a65c4b7ec9ea40df129724ffb369d3f775b0514e3c267c52eec6d284b5e6' + 'bb9769a8fe720abea2bba5b895c70c4fba0d44bb553399d83350268edf85cdeb' '9cdc2602661717712092d28bb494e5b48e518cb930898aca85eaf21f91f7ef58') -sha256sums+=('5552a56e40aef9fa174676f2b303208d905f519d2bb868d9cefe0950a2f65373' +sha256sums+=('d0f9afefbaaf838bbdd4067df0bbcd03e0e0a60a3e3addecdcc62ffb9c432015' 'SKIP' - '6ebbf18792cb57067f500fd4575c341d4708c5c0a232d676471f87dfa590621b' + '362d38ac2d99da2eec85bb5723239e7044e302503956488d0df31132409b993d' 'afeaeb6e9a6af901b57e25d85014e5c792efe4ff9dabb58663377f487b9d2887' '39e3a5e1ad137e21f842a44d7e3bd24050292d2b41fe59b4e7c7dfed52a195dd' '9386f1c50506cd20ab6d212335d5e4417faeb2aea371dd46f2d107d171e80b83' 'c93ce98e1cb64033079343ff1f3037fab6a3bc6d3eb5bc14c5edb70e2d45965d') sha256sums_i686=('2f0c81a38c4578f68f5456b618fe84a78974072821488173eb55e0e72287e353' '10c5276eab2e87f400a6ec15d7ffbef3b0407ee888dea36f1128927ca55b9041') -sha256sums_armv7h=('bc00516032330760444939c516a60c78f868631e1b37f075f0fe71a53737b966' - '2d4d91f7e35d0860225084e37ec320ca6cae669f6c9c8fe7735cdbd542e3a7c9') +sha256sums_armv7h=('2d4d91f7e35d0860225084e37ec320ca6cae669f6c9c8fe7735cdbd542e3a7c9') validpgpkeys=('14F26682D0916CDD81E37B6D61B7B526D98F0353') # Mozilla Software Releases validpgpkeys+=('BFA8008A8265677063B11BF47171986E4B745536') # Andreas Grapentin validpgpkeys+=('3954A7AB837D0EA9CFA9798925DB7D9B5A8D4B40') # bill-auger @@ -198,7 +196,6 @@ END cat >>../mozconfig < Date: Oct 08 2021 05:28:29 +0000 Subject: [PATCH 3/73] [iceweasel]: update branding checksum --- diff --git a/libre/iceweasel/PKGBUILD b/libre/iceweasel/PKGBUILD index a418503..96b248a 100644 --- a/libre/iceweasel/PKGBUILD +++ b/libre/iceweasel/PKGBUILD @@ -86,7 +86,7 @@ sha256sums=('a78f080f5849bc284b84299f3540934a12e961a7ea368b592ae6576ea1f97102' 'SKIP' 'bb9769a8fe720abea2bba5b895c70c4fba0d44bb553399d83350268edf85cdeb' '9cdc2602661717712092d28bb494e5b48e518cb930898aca85eaf21f91f7ef58') -sha256sums+=('d0f9afefbaaf838bbdd4067df0bbcd03e0e0a60a3e3addecdcc62ffb9c432015' +sha256sums+=('2b2dcb5f15dba7f4ce8bc19de260dbc75219a93b107931bb0f6aff705c579fe5' 'SKIP' '362d38ac2d99da2eec85bb5723239e7044e302503956488d0df31132409b993d' 'afeaeb6e9a6af901b57e25d85014e5c792efe4ff9dabb58663377f487b9d2887' From d9fe50a454470a940fd1e95a723fd27e0b253264 Mon Sep 17 00:00:00 2001 From: David P Date: Oct 11 2021 22:27:51 +0000 Subject: [PATCH 4/73] updpkg: libre/linux-libre 5.14.11-1 Signed-off-by: David P --- diff --git a/libre/linux-libre/0001-ZEN-Add-sysctl-and-CONFIG-to-disallow-unprivileged-C.patch b/libre/linux-libre/0001-ZEN-Add-sysctl-and-CONFIG-to-disallow-unprivileged-C.patch index c5e5b05..46cfcfa 100644 --- a/libre/linux-libre/0001-ZEN-Add-sysctl-and-CONFIG-to-disallow-unprivileged-C.patch +++ b/libre/linux-libre/0001-ZEN-Add-sysctl-and-CONFIG-to-disallow-unprivileged-C.patch @@ -1,7 +1,7 @@ -From 90de407f12e8ed9cb361678882c2af236b06107e Mon Sep 17 00:00:00 2001 +From f76db6fc04fadf872a138740592b4e8ec9ba9149 Mon Sep 17 00:00:00 2001 From: "Jan Alexander Steffens (heftig)" Date: Mon, 16 Sep 2019 04:53:20 +0200 -Subject: [PATCH 1/2] ZEN: Add sysctl and CONFIG to disallow unprivileged +Subject: [PATCH 1/6] ZEN: Add sysctl and CONFIG to disallow unprivileged CLONE_NEWUSER Our default behavior continues to match the vanilla kernel. @@ -14,10 +14,10 @@ Our default behavior continues to match the vanilla kernel. 5 files changed, 53 insertions(+) diff --git a/include/linux/user_namespace.h b/include/linux/user_namespace.h -index bfa6463f8a95..27aa2bd5e50a 100644 +index eb70cabe6e7f..dda54e3bc47c 100644 --- a/include/linux/user_namespace.h +++ b/include/linux/user_namespace.h -@@ -116,6 +116,8 @@ void put_ucounts(struct ucounts *ucounts); +@@ -137,6 +137,8 @@ static inline void set_rlimit_ucount_max(struct user_namespace *ns, #ifdef CONFIG_USER_NS @@ -26,7 +26,7 @@ index bfa6463f8a95..27aa2bd5e50a 100644 static inline struct user_namespace *get_user_ns(struct user_namespace *ns) { if (ns) -@@ -149,6 +151,8 @@ extern bool current_in_userns(const struct user_namespace *target_ns); +@@ -170,6 +172,8 @@ extern bool current_in_userns(const struct user_namespace *target_ns); struct ns_common *ns_get_owner(struct ns_common *ns); #else @@ -36,10 +36,10 @@ index bfa6463f8a95..27aa2bd5e50a 100644 { return &init_user_ns; diff --git a/init/Kconfig b/init/Kconfig -index a61c92066c2e..6a2920f2e2ad 100644 +index 55f9f7738ebb..33c6a820ac08 100644 --- a/init/Kconfig +++ b/init/Kconfig -@@ -1195,6 +1195,22 @@ config USER_NS +@@ -1198,6 +1198,22 @@ config USER_NS If unsure, say N. @@ -63,7 +63,7 @@ index a61c92066c2e..6a2920f2e2ad 100644 bool "PID Namespaces" default y diff --git a/kernel/fork.c b/kernel/fork.c -index 567fee340500..f8ad32116152 100644 +index cbba21e3a58d..7267d46c29ea 100644 --- a/kernel/fork.c +++ b/kernel/fork.c @@ -98,6 +98,10 @@ @@ -77,7 +77,7 @@ index 567fee340500..f8ad32116152 100644 #include #include #include -@@ -1871,6 +1875,10 @@ static __latent_entropy struct task_struct *copy_process( +@@ -1877,6 +1881,10 @@ static __latent_entropy struct task_struct *copy_process( if ((clone_flags & (CLONE_NEWUSER|CLONE_FS)) == (CLONE_NEWUSER|CLONE_FS)) return ERR_PTR(-EINVAL); @@ -88,7 +88,7 @@ index 567fee340500..f8ad32116152 100644 /* * Thread groups must share signals as well, and detached threads * can only be started up within the thread group. -@@ -2973,6 +2981,12 @@ int ksys_unshare(unsigned long unshare_flags) +@@ -2981,6 +2989,12 @@ int ksys_unshare(unsigned long unshare_flags) if (unshare_flags & CLONE_NEWNS) unshare_flags |= CLONE_FS; @@ -102,10 +102,10 @@ index 567fee340500..f8ad32116152 100644 if (err) goto bad_unshare_out; diff --git a/kernel/sysctl.c b/kernel/sysctl.c -index d4a78e08f6d8..0260dfe2daff 100644 +index 272f4a272f8c..760e8a2d815d 100644 --- a/kernel/sysctl.c +++ b/kernel/sysctl.c -@@ -103,6 +103,9 @@ +@@ -105,6 +105,9 @@ #ifdef CONFIG_LOCKUP_DETECTOR #include #endif @@ -115,7 +115,7 @@ index d4a78e08f6d8..0260dfe2daff 100644 #if defined(CONFIG_SYSCTL) -@@ -1896,6 +1899,15 @@ static struct ctl_table kern_table[] = { +@@ -1908,6 +1911,15 @@ static struct ctl_table kern_table[] = { .proc_handler = proc_dointvec, }, #endif @@ -132,7 +132,7 @@ index d4a78e08f6d8..0260dfe2daff 100644 { .procname = "tainted", diff --git a/kernel/user_namespace.c b/kernel/user_namespace.c -index 27670ab7a4ed..300c72d2a381 100644 +index ef82d401dde8..5a6c2e07174b 100644 --- a/kernel/user_namespace.c +++ b/kernel/user_namespace.c @@ -21,6 +21,13 @@ @@ -150,5 +150,5 @@ index 27670ab7a4ed..300c72d2a381 100644 static DEFINE_MUTEX(userns_state_mutex); -- -2.32.0 +2.33.0 diff --git a/libre/linux-libre/0002-Bluetooth-btusb-Add-support-for-IMC-Networks-Mediate.patch b/libre/linux-libre/0002-Bluetooth-btusb-Add-support-for-IMC-Networks-Mediate.patch new file mode 100644 index 0000000..09a894e --- /dev/null +++ b/libre/linux-libre/0002-Bluetooth-btusb-Add-support-for-IMC-Networks-Mediate.patch @@ -0,0 +1,79 @@ +From 810821eb3b1894f2cfcc29cffd42d193b8fe54a6 Mon Sep 17 00:00:00 2001 +From: Wai Paulo Valerio Wang +Date: Thu, 8 Jul 2021 04:00:59 +0800 +Subject: [PATCH 2/6] Bluetooth: btusb: Add support for IMC Networks Mediatek + Chip + +This add supports for IMC Networks Wireless_Device Media Chip +which contains the MT7921 chipset. + +$ lsusb + +Bus 001 Device 004: ID 13d3:3563 IMC Networks Wireless_Device + +$ cat /sys/kernel/debug/usb/devices + +T: Bus=01 Lev=01 Prnt=01 Port=03 Cnt=03 Dev#= 4 Spd=480 MxCh= 0 +D: Ver= 2.10 Cls=ef(misc ) Sub=02 Prot=01 MxPS=64 #Cfgs= 1 +P: Vendor=13d3 ProdID=3563 Rev= 1.00 +S: Manufacturer=MediaTek Inc. +S: Product=Wireless_Device +S: SerialNumber=000000000 +C:* #Ifs= 3 Cfg#= 1 Atr=e0 MxPwr=100mA +A: FirstIf#= 0 IfCount= 3 Cls=e0(wlcon) Sub=01 Prot=01 +I:* If#= 0 Alt= 0 #EPs= 3 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb +E: Ad=81(I) Atr=03(Int.) MxPS= 16 Ivl=125us +E: Ad=82(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms +E: Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms +I:* If#= 1 Alt= 0 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb +E: Ad=83(I) Atr=01(Isoc) MxPS= 0 Ivl=1ms +E: Ad=03(O) Atr=01(Isoc) MxPS= 0 Ivl=1ms +I: If#= 1 Alt= 1 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb +E: Ad=83(I) Atr=01(Isoc) MxPS= 9 Ivl=1ms +E: Ad=03(O) Atr=01(Isoc) MxPS= 9 Ivl=1ms +I: If#= 1 Alt= 2 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb +E: Ad=83(I) Atr=01(Isoc) MxPS= 17 Ivl=1ms +E: Ad=03(O) Atr=01(Isoc) MxPS= 17 Ivl=1ms +I: If#= 1 Alt= 3 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb +E: Ad=83(I) Atr=01(Isoc) MxPS= 25 Ivl=1ms +E: Ad=03(O) Atr=01(Isoc) MxPS= 25 Ivl=1ms +I: If#= 1 Alt= 4 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb +E: Ad=83(I) Atr=01(Isoc) MxPS= 33 Ivl=1ms +E: Ad=03(O) Atr=01(Isoc) MxPS= 33 Ivl=1ms +I: If#= 1 Alt= 5 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb +E: Ad=83(I) Atr=01(Isoc) MxPS= 49 Ivl=1ms +E: Ad=03(O) Atr=01(Isoc) MxPS= 49 Ivl=1ms +I: If#= 1 Alt= 6 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb +E: Ad=83(I) Atr=01(Isoc) MxPS= 63 Ivl=1ms +E: Ad=03(O) Atr=01(Isoc) MxPS= 63 Ivl=1ms +I:* If#= 2 Alt= 0 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=(none) +E: Ad=8a(I) Atr=03(Int.) MxPS= 64 Ivl=125us +E: Ad=0a(O) Atr=03(Int.) MxPS= 64 Ivl=125us +I: If#= 2 Alt= 1 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=(none) +E: Ad=8a(I) Atr=03(Int.) MxPS= 512 Ivl=125us +E: Ad=0a(O) Atr=03(Int.) MxPS= 512 Ivl=125us + +Signed-off-by: Wai Paulo Valerio Wang +Signed-off-by: Marcel Holtmann +For: https://bugs.archlinux.org/task/72138 +--- + drivers/bluetooth/btusb.c | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c +index bd37d6fb88c2..e13a510e1698 100644 +--- a/drivers/bluetooth/btusb.c ++++ b/drivers/bluetooth/btusb.c +@@ -414,6 +414,9 @@ static const struct usb_device_id blacklist_table[] = { + { USB_DEVICE(0x04ca, 0x3802), .driver_info = BTUSB_MEDIATEK | + BTUSB_WIDEBAND_SPEECH | + BTUSB_VALID_LE_STATES }, ++ { USB_DEVICE(0x13d3, 0x3563), .driver_info = BTUSB_MEDIATEK | ++ BTUSB_WIDEBAND_SPEECH | ++ BTUSB_VALID_LE_STATES }, + + /* Additional Realtek 8723AE Bluetooth devices */ + { USB_DEVICE(0x0930, 0x021d), .driver_info = BTUSB_REALTEK }, +-- +2.33.0 + diff --git a/libre/linux-libre/0002-Bluetooth-btusb-check-conditions-before-enabling-USB.patch b/libre/linux-libre/0002-Bluetooth-btusb-check-conditions-before-enabling-USB.patch deleted file mode 100644 index 574623c..0000000 --- a/libre/linux-libre/0002-Bluetooth-btusb-check-conditions-before-enabling-USB.patch +++ /dev/null @@ -1,85 +0,0 @@ -From bdb12383a58d6989a0b1c2f925890948146bbc90 Mon Sep 17 00:00:00 2001 -From: Pauli Virtanen -Date: Mon, 26 Jul 2021 21:02:06 +0300 -Subject: [PATCH 2/2] Bluetooth: btusb: check conditions before enabling USB - ALT 3 for WBS -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Some USB BT adapters don't satisfy the MTU requirement mentioned in -commit e848dbd364ac ("Bluetooth: btusb: Add support USB ALT 3 for WBS") -and have ALT 3 setting that produces no/garbled audio. Some adapters -with larger MTU were also reported to have problems with ALT 3. - -Add a flag and check it and MTU before selecting ALT 3, falling back to -ALT 1. Enable the flag for Realtek, restoring the previous behavior for -non-Realtek devices. - -Tested with USB adapters (mtu<72, no/garbled sound with ALT3, ALT1 -works) BCM20702A1 0b05:17cb, CSR8510A10 0a12:0001, and (mtu>=72, ALT3 -works) RTL8761BU 0bda:8771, Intel AX200 8087:0029 (after disabling -ALT6). Also got reports for (mtu>=72, ALT 3 reported to produce bad -audio) Intel 8087:0a2b. - -Signed-off-by: Pauli Virtanen -Fixes: e848dbd364ac ("Bluetooth: btusb: Add support USB ALT 3 for WBS") -Tested-by: Michał Kępień - -Fixes: https://bugs.archlinux.org/task/71567 ---- - drivers/bluetooth/btusb.c | 22 ++++++++++++++-------- - 1 file changed, 14 insertions(+), 8 deletions(-) - -diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c -index 6d23308119d1..e8062d0b7d4d 100644 ---- a/drivers/bluetooth/btusb.c -+++ b/drivers/bluetooth/btusb.c -@@ -516,6 +516,7 @@ static const struct dmi_system_id btusb_needs_reset_resume_table[] = { - #define BTUSB_HW_RESET_ACTIVE 12 - #define BTUSB_TX_WAIT_VND_EVT 13 - #define BTUSB_WAKEUP_DISABLE 14 -+#define BTUSB_USE_ALT3_FOR_WBS 15 - - struct btusb_data { - struct hci_dev *hdev; -@@ -1748,16 +1749,20 @@ static void btusb_work(struct work_struct *work) - /* Bluetooth USB spec recommends alt 6 (63 bytes), but - * many adapters do not support it. Alt 1 appears to - * work for all adapters that do not have alt 6, and -- * which work with WBS at all. -+ * which work with WBS at all. Some devices prefer -+ * alt 3 (HCI payload >= 60 Bytes let air packet -+ * data satisfy 60 bytes), requiring -+ * MTU >= 3 (packets) * 25 (size) - 3 (headers) = 72 -+ * see also Core spec 5, vol 4, B 2.1.1 & Table 2.1. - */ -- new_alts = btusb_find_altsetting(data, 6) ? 6 : 1; -- /* Because mSBC frames do not need to be aligned to the -- * SCO packet boundary. If support the Alt 3, use the -- * Alt 3 for HCI payload >= 60 Bytes let air packet -- * data satisfy 60 bytes. -- */ -- if (new_alts == 1 && btusb_find_altsetting(data, 3)) -+ if (btusb_find_altsetting(data, 6)) -+ new_alts = 6; -+ else if (test_bit(BTUSB_USE_ALT3_FOR_WBS, &data->flags) && -+ hdev->sco_mtu >= 72 && -+ btusb_find_altsetting(data, 3)) - new_alts = 3; -+ else -+ new_alts = 1; - } - - if (btusb_switch_alt_setting(hdev, new_alts) < 0) -@@ -4733,6 +4738,7 @@ static int btusb_probe(struct usb_interface *intf, - * (DEVICE_REMOTE_WAKEUP) - */ - set_bit(BTUSB_WAKEUP_DISABLE, &data->flags); -+ set_bit(BTUSB_USE_ALT3_FOR_WBS, &data->flags); - } - - if (!reset) --- -2.32.0 - diff --git a/libre/linux-libre/0003-Bluetooth-btusb-Add-support-for-Foxconn-Mediatek-Chi.patch b/libre/linux-libre/0003-Bluetooth-btusb-Add-support-for-Foxconn-Mediatek-Chi.patch new file mode 100644 index 0000000..4af5a53 --- /dev/null +++ b/libre/linux-libre/0003-Bluetooth-btusb-Add-support-for-Foxconn-Mediatek-Chi.patch @@ -0,0 +1,71 @@ +From 38c2ca84b97f9d6021c2607e214f99acd84dac2d Mon Sep 17 00:00:00 2001 +From: Aaron Ma +Date: Fri, 23 Jul 2021 01:17:18 +0800 +Subject: [PATCH 3/6] Bluetooth: btusb: Add support for Foxconn Mediatek Chip + +Add support for another Foxconn / Hon Hai device with MT7921 chip. + +T: Bus=05 Lev=01 Prnt=01 Port=03 Cnt=02 Dev#= 3 Spd=480 MxCh= 0 +D: Ver= 2.10 Cls=ef(misc ) Sub=02 Prot=01 MxPS=64 #Cfgs= 1 +P: Vendor=0489 ProdID=e0cd Rev= 1.00 +S: Manufacturer=MediaTek Inc. +S: Product=Wireless_Device +S: SerialNumber=000000000 +C:* #Ifs= 3 Cfg#= 1 Atr=e0 MxPwr=100mA +A: FirstIf#= 0 IfCount= 3 Cls=e0(wlcon) Sub=01 Prot=01 +I:* If#= 0 Alt= 0 #EPs= 3 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb +E: Ad=81(I) Atr=03(Int.) MxPS= 16 Ivl=125us +E: Ad=82(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms +E: Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms +I:* If#= 1 Alt= 0 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb +E: Ad=83(I) Atr=01(Isoc) MxPS= 0 Ivl=1ms +E: Ad=03(O) Atr=01(Isoc) MxPS= 0 Ivl=1ms +I: If#= 1 Alt= 1 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb +E: Ad=83(I) Atr=01(Isoc) MxPS= 9 Ivl=1ms +E: Ad=03(O) Atr=01(Isoc) MxPS= 9 Ivl=1ms +I: If#= 1 Alt= 2 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb +E: Ad=83(I) Atr=01(Isoc) MxPS= 17 Ivl=1ms +E: Ad=03(O) Atr=01(Isoc) MxPS= 17 Ivl=1ms +I: If#= 1 Alt= 3 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb +E: Ad=83(I) Atr=01(Isoc) MxPS= 25 Ivl=1ms +E: Ad=03(O) Atr=01(Isoc) MxPS= 25 Ivl=1ms +I: If#= 1 Alt= 4 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb +E: Ad=83(I) Atr=01(Isoc) MxPS= 33 Ivl=1ms +E: Ad=03(O) Atr=01(Isoc) MxPS= 33 Ivl=1ms +I: If#= 1 Alt= 5 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb +E: Ad=83(I) Atr=01(Isoc) MxPS= 49 Ivl=1ms +E: Ad=03(O) Atr=01(Isoc) MxPS= 49 Ivl=1ms +I: If#= 1 Alt= 6 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb +E: Ad=83(I) Atr=01(Isoc) MxPS= 63 Ivl=1ms +E: Ad=03(O) Atr=01(Isoc) MxPS= 63 Ivl=1ms +I:* If#= 2 Alt= 0 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=(none) +E: Ad=8a(I) Atr=03(Int.) MxPS= 64 Ivl=125us +E: Ad=0a(O) Atr=03(Int.) MxPS= 64 Ivl=125us +I: If#= 2 Alt= 1 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=(none) +E: Ad=8a(I) Atr=03(Int.) MxPS= 512 Ivl=125us +E: Ad=0a(O) Atr=03(Int.) MxPS= 512 Ivl=125us + +Signed-off-by: Aaron Ma +Signed-off-by: Marcel Holtmann +For: https://bugs.archlinux.org/task/72138 +--- + drivers/bluetooth/btusb.c | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c +index e13a510e1698..aac732cc9612 100644 +--- a/drivers/bluetooth/btusb.c ++++ b/drivers/bluetooth/btusb.c +@@ -417,6 +417,9 @@ static const struct usb_device_id blacklist_table[] = { + { USB_DEVICE(0x13d3, 0x3563), .driver_info = BTUSB_MEDIATEK | + BTUSB_WIDEBAND_SPEECH | + BTUSB_VALID_LE_STATES }, ++ { USB_DEVICE(0x0489, 0xe0cd), .driver_info = BTUSB_MEDIATEK | ++ BTUSB_WIDEBAND_SPEECH | ++ BTUSB_VALID_LE_STATES }, + + /* Additional Realtek 8723AE Bluetooth devices */ + { USB_DEVICE(0x0930, 0x021d), .driver_info = BTUSB_REALTEK }, +-- +2.33.0 + diff --git a/libre/linux-libre/0004-ALSA-pcm-Check-mmap-capability-of-runtime-dma-buffer.patch b/libre/linux-libre/0004-ALSA-pcm-Check-mmap-capability-of-runtime-dma-buffer.patch new file mode 100644 index 0000000..64b8717 --- /dev/null +++ b/libre/linux-libre/0004-ALSA-pcm-Check-mmap-capability-of-runtime-dma-buffer.patch @@ -0,0 +1,64 @@ +From ab60c2d0242fc428a436c25c1144f6acd9d6f419 Mon Sep 17 00:00:00 2001 +From: Takashi Iwai +Date: Mon, 9 Aug 2021 09:18:27 +0200 +Subject: [PATCH 4/6] ALSA: pcm: Check mmap capability of runtime dma buffer at + first + +Currently we check only the substream->dma_buffer as the preset of the +buffer configuration for verifying the availability of mmap. But a +few drivers rather set up the buffer in the own way without the +standard buffer preallocation using substream->dma_buffer, and they +miss the proper checks. (Now it's working more or less fine as most +of them are running only on x86). + +Actually, they may set up the runtime dma_buffer (referred via +snd_pcm_get_dma_buf()) at the open callback, though. That is, this +could have been used as the primary source. + +This patch changes the hw_support_mmap() function to check the runtime +dma buffer at first. It's usually NULL with the standard buffer +preallocation, and in that case, we continue checking +substream->dma_buffer as fallback. + +Signed-off-by: Takashi Iwai +Fixes: https://bugs.archlinux.org/task/72059 +--- + sound/core/pcm_native.c | 9 +++++++-- + 1 file changed, 7 insertions(+), 2 deletions(-) + +diff --git a/sound/core/pcm_native.c b/sound/core/pcm_native.c +index 71323d807dbf..dc9fa312fadd 100644 +--- a/sound/core/pcm_native.c ++++ b/sound/core/pcm_native.c +@@ -243,13 +243,18 @@ int snd_pcm_info_user(struct snd_pcm_substream *substream, + + static bool hw_support_mmap(struct snd_pcm_substream *substream) + { ++ struct snd_dma_buffer *dmabuf; ++ + if (!(substream->runtime->hw.info & SNDRV_PCM_INFO_MMAP)) + return false; + + if (substream->ops->mmap || substream->ops->page) + return true; + +- switch (substream->dma_buffer.dev.type) { ++ dmabuf = snd_pcm_get_dma_buf(substream); ++ if (!dmabuf) ++ dmabuf = &substream->dma_buffer; ++ switch (dmabuf->dev.type) { + case SNDRV_DMA_TYPE_UNKNOWN: + /* we can't know the device, so just assume that the driver does + * everything right +@@ -259,7 +264,7 @@ static bool hw_support_mmap(struct snd_pcm_substream *substream) + case SNDRV_DMA_TYPE_VMALLOC: + return true; + default: +- return dma_can_mmap(substream->dma_buffer.dev.dev); ++ return dma_can_mmap(dmabuf->dev.dev); + } + } + +-- +2.33.0 + diff --git a/libre/linux-libre/0005-ALSA-pci-rme-Set-up-buffer-type-properly.patch b/libre/linux-libre/0005-ALSA-pci-rme-Set-up-buffer-type-properly.patch new file mode 100644 index 0000000..f1d7db9 --- /dev/null +++ b/libre/linux-libre/0005-ALSA-pci-rme-Set-up-buffer-type-properly.patch @@ -0,0 +1,75 @@ +From 7b0c23ec626e579ffa7ef239cac20dc7fa1797e9 Mon Sep 17 00:00:00 2001 +From: Takashi Iwai +Date: Mon, 9 Aug 2021 09:18:28 +0200 +Subject: [PATCH 5/6] ALSA: pci: rme: Set up buffer type properly + +Although the regression of the mmap was fixed in the recent commit +dc0dc8a73e8e ("ALSA: pcm: Fix mmap breakage without explicit buffer +setup"), RME9652 and HDSP drivers have still potential issues with +their mmap handling. Namely, they use the default mmap handler +without the standard buffer preallocation, and PCM core wouldn't use +the coherent DMA mapping. It's practically OK on x86, but on some +exotic architectures, it wouldn't work. + +This patch addresses the potential breakage by replacing the buffer +setup with the proper macro. It also simplifies the source code, +too. + +Signed-off-by: Takashi Iwai +Fixes: https://bugs.archlinux.org/task/72059 +--- + sound/pci/rme9652/hdsp.c | 6 ++---- + sound/pci/rme9652/rme9652.c | 6 ++---- + 2 files changed, 4 insertions(+), 8 deletions(-) + +diff --git a/sound/pci/rme9652/hdsp.c b/sound/pci/rme9652/hdsp.c +index 8457a4bbc3df..22b8b3357918 100644 +--- a/sound/pci/rme9652/hdsp.c ++++ b/sound/pci/rme9652/hdsp.c +@@ -4518,8 +4518,7 @@ static int snd_hdsp_playback_open(struct snd_pcm_substream *substream) + snd_pcm_set_sync(substream); + + runtime->hw = snd_hdsp_playback_subinfo; +- runtime->dma_area = hdsp->playback_buffer; +- runtime->dma_bytes = HDSP_DMA_AREA_BYTES; ++ snd_pcm_set_runtime_buffer(substream, &hdsp->playback_dma_buf); + + hdsp->playback_pid = current->pid; + hdsp->playback_substream = substream; +@@ -4595,8 +4594,7 @@ static int snd_hdsp_capture_open(struct snd_pcm_substream *substream) + snd_pcm_set_sync(substream); + + runtime->hw = snd_hdsp_capture_subinfo; +- runtime->dma_area = hdsp->capture_buffer; +- runtime->dma_bytes = HDSP_DMA_AREA_BYTES; ++ snd_pcm_set_runtime_buffer(substream, &hdsp->capture_dma_buf); + + hdsp->capture_pid = current->pid; + hdsp->capture_substream = substream; +diff --git a/sound/pci/rme9652/rme9652.c b/sound/pci/rme9652/rme9652.c +index f1aad38760d6..9ad2533925c4 100644 +--- a/sound/pci/rme9652/rme9652.c ++++ b/sound/pci/rme9652/rme9652.c +@@ -2279,8 +2279,7 @@ static int snd_rme9652_playback_open(struct snd_pcm_substream *substream) + snd_pcm_set_sync(substream); + + runtime->hw = snd_rme9652_playback_subinfo; +- runtime->dma_area = rme9652->playback_buffer; +- runtime->dma_bytes = RME9652_DMA_AREA_BYTES; ++ snd_pcm_set_runtime_buffer(substream, &rme9652->playback_dma_buf); + + if (rme9652->capture_substream == NULL) { + rme9652_stop(rme9652); +@@ -2339,8 +2338,7 @@ static int snd_rme9652_capture_open(struct snd_pcm_substream *substream) + snd_pcm_set_sync(substream); + + runtime->hw = snd_rme9652_capture_subinfo; +- runtime->dma_area = rme9652->capture_buffer; +- runtime->dma_bytes = RME9652_DMA_AREA_BYTES; ++ snd_pcm_set_runtime_buffer(substream, &rme9652->capture_dma_buf); + + if (rme9652->playback_substream == NULL) { + rme9652_stop(rme9652); +-- +2.33.0 + diff --git a/libre/linux-libre/0006-ALSA-pci-cs46xx-Fix-set-up-buffer-type-properly.patch b/libre/linux-libre/0006-ALSA-pci-cs46xx-Fix-set-up-buffer-type-properly.patch new file mode 100644 index 0000000..0305e70 --- /dev/null +++ b/libre/linux-libre/0006-ALSA-pci-cs46xx-Fix-set-up-buffer-type-properly.patch @@ -0,0 +1,95 @@ +From b5ed7b38f5551c5dfca87ab29d679f3d6d327557 Mon Sep 17 00:00:00 2001 +From: Takashi Iwai +Date: Mon, 9 Aug 2021 09:18:29 +0200 +Subject: [PATCH 6/6] ALSA: pci: cs46xx: Fix set up buffer type properly + +CS46xx driver switches the buffer depending on the number of periods, +and in some cases it switches to the own buffer without updating the +buffer type properly. This may cause a problem with the mmap on +exotic architectures that require the own mmap call for the coherent +DMA buffer. + +This patch addresses the potential breakage by replacing the buffer +setup with the proper macro. It also simplifies the source code, +too. + +Signed-off-by: Takashi Iwai +Fixes: https://bugs.archlinux.org/task/72059 +--- + sound/pci/cs46xx/cs46xx_lib.c | 30 ++++++++---------------------- + 1 file changed, 8 insertions(+), 22 deletions(-) + +diff --git a/sound/pci/cs46xx/cs46xx_lib.c b/sound/pci/cs46xx/cs46xx_lib.c +index 1e1eb17f8e07..d43927dcd61e 100644 +--- a/sound/pci/cs46xx/cs46xx_lib.c ++++ b/sound/pci/cs46xx/cs46xx_lib.c +@@ -1121,9 +1121,7 @@ static int snd_cs46xx_playback_hw_params(struct snd_pcm_substream *substream, + if (params_periods(hw_params) == CS46XX_FRAGS) { + if (runtime->dma_area != cpcm->hw_buf.area) + snd_pcm_lib_free_pages(substream); +- runtime->dma_area = cpcm->hw_buf.area; +- runtime->dma_addr = cpcm->hw_buf.addr; +- runtime->dma_bytes = cpcm->hw_buf.bytes; ++ snd_pcm_set_runtime_buffer(substream, &cpcm->hw_buf); + + + #ifdef CONFIG_SND_CS46XX_NEW_DSP +@@ -1143,11 +1141,8 @@ static int snd_cs46xx_playback_hw_params(struct snd_pcm_substream *substream, + #endif + + } else { +- if (runtime->dma_area == cpcm->hw_buf.area) { +- runtime->dma_area = NULL; +- runtime->dma_addr = 0; +- runtime->dma_bytes = 0; +- } ++ if (runtime->dma_area == cpcm->hw_buf.area) ++ snd_pcm_set_runtime_buffer(substream, NULL); + err = snd_pcm_lib_malloc_pages(substream, params_buffer_bytes(hw_params)); + if (err < 0) { + #ifdef CONFIG_SND_CS46XX_NEW_DSP +@@ -1196,9 +1191,7 @@ static int snd_cs46xx_playback_hw_free(struct snd_pcm_substream *substream) + if (runtime->dma_area != cpcm->hw_buf.area) + snd_pcm_lib_free_pages(substream); + +- runtime->dma_area = NULL; +- runtime->dma_addr = 0; +- runtime->dma_bytes = 0; ++ snd_pcm_set_runtime_buffer(substream, NULL); + + return 0; + } +@@ -1287,16 +1280,11 @@ static int snd_cs46xx_capture_hw_params(struct snd_pcm_substream *substream, + if (runtime->periods == CS46XX_FRAGS) { + if (runtime->dma_area != chip->capt.hw_buf.area) + snd_pcm_lib_free_pages(substream); +- runtime->dma_area = chip->capt.hw_buf.area; +- runtime->dma_addr = chip->capt.hw_buf.addr; +- runtime->dma_bytes = chip->capt.hw_buf.bytes; ++ snd_pcm_set_runtime_buffer(substream, &chip->capt.hw_buf); + substream->ops = &snd_cs46xx_capture_ops; + } else { +- if (runtime->dma_area == chip->capt.hw_buf.area) { +- runtime->dma_area = NULL; +- runtime->dma_addr = 0; +- runtime->dma_bytes = 0; +- } ++ if (runtime->dma_area == chip->capt.hw_buf.area) ++ snd_pcm_set_runtime_buffer(substream, NULL); + err = snd_pcm_lib_malloc_pages(substream, params_buffer_bytes(hw_params)); + if (err < 0) + return err; +@@ -1313,9 +1301,7 @@ static int snd_cs46xx_capture_hw_free(struct snd_pcm_substream *substream) + + if (runtime->dma_area != chip->capt.hw_buf.area) + snd_pcm_lib_free_pages(substream); +- runtime->dma_area = NULL; +- runtime->dma_addr = 0; +- runtime->dma_bytes = 0; ++ snd_pcm_set_runtime_buffer(substream, NULL); + + return 0; + } +-- +2.33.0 + diff --git a/libre/linux-libre/PKGBUILD b/libre/linux-libre/PKGBUILD index a1fbb70..fabfb34 100644 --- a/libre/linux-libre/PKGBUILD +++ b/libre/linux-libre/PKGBUILD @@ -14,7 +14,7 @@ _replacesoldkernels=() # '%' gets replaced with kernel suffix _replacesoldmodules=() # '%' gets replaced with kernel suffix pkgbase=linux-libre -pkgver=5.13.8 +pkgver=5.14.11 pkgrel=1 pkgdesc='Linux-libre' rcnver=5.11.11 @@ -28,7 +28,7 @@ makedepends=( ) makedepends_armv7h=(uboot-tools vboot-utils dtc) # required by linux-libre-chromebook options=('!strip') -_srcname=linux-5.13 +_srcname=linux-5.14 source=( "https://linux-libre.fsfla.org/pub/linux-libre/releases/${_srcname##*-}-gnu/linux-libre-${_srcname##*-}-gnu.tar.xz"{,.sign} "https://linux-libre.fsfla.org/pub/linux-libre/releases/$pkgver-gnu/patch-${_srcname##*-}-gnu-$pkgver-gnu.xz"{,.sign} @@ -46,7 +46,11 @@ source=( 0002-fix-Atmel-maXTouch-touchscreen-support.patch # Arch Linux patches 0001-ZEN-Add-sysctl-and-CONFIG-to-disallow-unprivileged-C.patch - 0002-Bluetooth-btusb-check-conditions-before-enabling-USB.patch + 0002-Bluetooth-btusb-Add-support-for-IMC-Networks-Mediate.patch + 0003-Bluetooth-btusb-Add-support-for-Foxconn-Mediatek-Chi.patch + 0004-ALSA-pcm-Check-mmap-capability-of-runtime-dma-buffer.patch + 0005-ALSA-pci-rme-Set-up-buffer-type-properly.patch + 0006-ALSA-pci-cs46xx-Fix-set-up-buffer-type-properly.patch ) source_i686=( # avoid using zstd compression in ultra mode (exhausts virtual memory) @@ -72,9 +76,9 @@ validpgpkeys=( '474402C8C582DAFBE389C427BCB7CF877E7D47A7' # Alexandre Oliva '6DB9C4B4F0D8C0DC432CF6E4227CA7C556B2BA78' # David P. ) -sha512sums=('a24f2db9316297127447b3d7fd7a1e9e7b9a8bdb5e59e6e341568cbf877c4b65d2ccdb27ec1c23b07af6c365b2930b040bcef0d989202b503bc55b107c04d121' +sha512sums=('18798d032184ce141216ad72fcbb5ddb340809fe8d953acb50700aa0b47d36fca104dcedc7521fb3aea913d8fbeb4bd3eab1cf2c955388e6996c4154eac67d0c' 'SKIP' - '53a9a1abfb8ae6e73337986ed780034d5ecf4d89bf1bbf7d4c2b5b04b527b00296c7c427045c8ab454a175db1ab272c76ef115edd4b88f4f530cbd884e604bb5' + '951cdb68af3bbf3b841376f82fd9c82dfd7a159cae8564e5d772f99f3170deafcabc00cb0ecfa6e7669c22087577f2eafa47d3b50bc8ea6ee5edbc65821986e1' 'SKIP' '13cb5bc42542e7b8bb104d5f68253f6609e463b6799800418af33eb0272cc269aaa36163c3e6f0aacbdaaa1d05e2827a4a7c4a08a029238439ed08b89c564bb3' 'SKIP' @@ -82,8 +86,8 @@ sha512sums=('a24f2db9316297127447b3d7fd7a1e9e7b9a8bdb5e59e6e341568cbf877c4b65d2c 'SKIP' '267295aa0cea65684968420c68b32f1a66a22d018b9d2b2c1ef14267bcf4cb68aaf7099d073cbfefe6c25c8608bdcbbd45f7ac8893fdcecbf1e621abdfe9ecc1' 'SKIP' - '929fd5c34b07a63b5e50296523a6b3686ac9014a74ed5e41b0b1f0b169306ee2dace9e9259b4222c84fb1edb9a96e09bcd3d7f0e5611bef93f5c8754a67a3367' - 'e78d10fe5d709e714dfc2e56a487de7d03e0fcaca17d48cd279659ab930f44ef903683d3f6f10b1330f59f15e80c7571f6bd3d47d75fdaed7d93999346b8af57' + '4e9ac0b6d4dd3a8074259e71dab9db90b44bc0231d134c4dce798fee13b15bfdda2bf0926d3a1f98e596ab633f2ba3640d92ccab5ae6defffad9dd352fd35112' + '6032a527651f9e8053728cec73afa50aa056264b402372899927848a287ad27291335afe00848f0d41a7adb7d662c3a26def7c5c91777bed3ed325c4ec41a035' '51e8b4da770067e8257d292622d865cb16ac57fdfd8967bdfb74efec197dae9eab958e5637a728640ae60885bdde41c06c8076227a4f83db0b752215f91f3a87' '53103bf55b957b657039510527df0df01279dec59cda115a4d6454e4135025d4546167fa30bdc99107f232561c1e096d8328609ab5a876cf7017176f92ad3e0b' '167bc73c6c1c63931806238905dc44c7d87c5a5c0f6293159f2133dfe717fb44081018d810675716d1605ec7dff5e8333b87b19e09e2de21d0448e447437873b' @@ -91,8 +95,12 @@ sha512sums=('a24f2db9316297127447b3d7fd7a1e9e7b9a8bdb5e59e6e341568cbf877c4b65d2c '143dea30c6da00e504c99984a98a0eb2411f558fcdd9dfa7f607d6c14e9e7dffff9cb00121d9317044b07e3e210808286598c785ee854084b993ec9cb14d8232' '02af4dd2a007e41db0c63822c8ab3b80b5d25646af1906dc85d0ad9bb8bbf5236f8e381d7f91cf99ed4b0978c50aee37cb9567cdeef65b7ec3d91b882852b1af' 'b8fe56e14006ab866970ddbd501c054ae37186ddc065bb869cf7d18db8c0d455118d5bda3255fb66a0dde38b544655cfe9040ffe46e41d19830b47959b2fb168' - 'fac53c8ce68e9f56c8930a9392c89377c909f6a43a318010194949def91a104f34f46c2b32457e571435a8b326c47a48737ceb6255644bb6d42c59b27b07449a' - '722d92b750f0a5af39b850c18ff0c57dac0165e3c0219415843ec5207945971448790fec3fca570b62c8726c89b0ca6b7a5b16fd503e4581b3a63b3adfcf2c50') + 'dba36283b9ea3db5fcc9a72051a8e9cf4d409ec59769e6da9db4d321b72972242670210ad961a37f62aba68f7262e9f2f6308cfe62cda9fa050c72363a0c404a' + '693ac0e0e32cd0ab6c485deb43d6408dc9fc31234e4113206cf901a302eddf1a965f97f82ed7186f6426c085176ce95c48e116e9824d92bfd1f6656447da18dc' + 'c4a19ccec8b7636f1b5b1cf8e135e46d3aa4d233af4a1e72c2aaa83536505013f0c83602fe05ce08212b4327bebfb4f8a84b57c0d81509f0b48df5dfcc334254' + '4d81c2995e7cc5fc36929eb5bf9cc68ec02cb24147f18a88da79facd3e25182b156ca4430bf2765ff1e4c6be237d3a3e527498cd49d75217a5e16b62a478be6d' + '12c0da7fbd4e4e6ffc473ecd6dffee1dd61c201dad854347400c8f551adc35c033d6fa623cc5c1b2fe7930cdab868a8c99c6874ee171c9143e0f370398759c96' + '7f6fd402d8c29ee4f6c98ed2236318ab3f57f3dd47a92911e1b556df251b67fc83f7256223f06d1fefa849a3ceb5e40d247d2d5664ddd7cd9749bab4bc1ecb36') sha512sums_i686=('3a346ff5e0fdefafd28bc3dd0e4b6cd68e3f0014e59d1611d99f2edb8d074fd32649eeb0894a7e340e4f907b5cfc0e08e0753e0427a68dc113bb22835a892968') sha512sums_armv7h=('a4aa00ca3f03d524d3fb6379116c4e4e7908e7c30f6347f55be256c44d806d8db5f04c96369d5a725e45b7390e9fde842f388cdc5d5699d80ec5d1519f7367f4' 'SKIP' @@ -171,6 +179,7 @@ prepare() { echo "Setting config..." cp ../config.$CARCH .config make olddefconfig + diff -u ../config .config || : make -s kernelrelease > version echo "Prepared $pkgbase version $( Date: Oct 12 2021 00:44:56 +0000 Subject: [PATCH 5/73] updpkg: libre/linux-libre-lts 5.10.72-1 Signed-off-by: David P --- diff --git a/libre/linux-libre-lts/0002-gcc-plugins-modern-gcc-plugin-infrastructure-requres.patch b/libre/linux-libre-lts/0002-gcc-plugins-modern-gcc-plugin-infrastructure-requres.patch new file mode 100644 index 0000000..8e6cee0 --- /dev/null +++ b/libre/linux-libre-lts/0002-gcc-plugins-modern-gcc-plugin-infrastructure-requres.patch @@ -0,0 +1,76 @@ +From 50b29ce228d0622eae2b9854c5e4b9334c540a7a Mon Sep 17 00:00:00 2001 +From: Levente Polyak +Date: Thu, 1 Sep 2021 22:19:19 +0200 +Subject: [PATCH] gcc-plugins: modern gcc plugin infrastructure requres c++11 + std + +Bump the used std to c++11 to avoid detection failure. This fixes the +support check on modern gcc plugin infrastructure that requires a +minimum standard of c++11 to compile. + +This effectively requires GCC 4.8.1. + +Signed-off-by: Levente Polyak +--- + scripts/gcc-plugin.sh | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/scripts/gcc-plugin.sh b/scripts/gcc-plugin.sh +index b79fd0bea838..7abc00f60a8b 100755 +--- a/scripts/gcc-plugin.sh ++++ b/scripts/gcc-plugin.sh +@@ -8,7 +8,7 @@ srctree=$(dirname "$0") + gccplugins_dir=$($* -print-file-name=plugin) + + # we need a c++ compiler that supports the designated initializer GNU extension +-$HOSTCC -c -x c++ -std=gnu++98 - -fsyntax-only -I $srctree/gcc-plugins -I $gccplugins_dir/include 2>/dev/null </dev/null < +Date: Sat Dec 26 13:21:58 2020 -0500 + + gcc-plugins: fix gcc 11 indigestion with plugins... + + Fedora Rawhide has started including gcc 11,and the g++ compiler + throws a wobbly when it hits scripts/gcc-plugins: + + HOSTCXX scripts/gcc-plugins/latent_entropy_plugin.so + In file included from /usr/include/c++/11/type_traits:35, + from /usr/lib/gcc/x86_64-redhat-linux/11/plugin/include/system.h:244, + from /usr/lib/gcc/x86_64-redhat-linux/11/plugin/include/gcc-plugin.h:28, + from scripts/gcc-plugins/gcc-common.h:7, + from scripts/gcc-plugins/latent_entropy_plugin.c:78: + /usr/include/c++/11/bits/c++0x_warning.h:32:2: error: #error This file requires compiler and library support for the ISO + C++ 2011 standard. This support must be enabled with the -std=c++11 or -std=gnu++11 compiler options. + 32 | #error This file requires compiler and library support \ + + In fact, it works just fine with c++11, which has been in gcc since 4.8, + and we now require 4.9 as a minimum. + + Signed-off-by: Valdis Kletnieks + Acked-by: Josh Poimboeuf + Signed-off-by: Kees Cook + Link: https://lore.kernel.org/r/82487.1609006918@turing-police + +diff --git a/scripts/gcc-plugins/Makefile b/scripts/gcc-plugins/Makefile +index d66949bfeba4..b5487cce69e8 100644 +--- a/scripts/gcc-plugins/Makefile ++++ b/scripts/gcc-plugins/Makefile +@@ -22,9 +22,9 @@ always-y += $(GCC_PLUGIN) + GCC_PLUGINS_DIR = $(shell $(CC) -print-file-name=plugin) + + plugin_cxxflags = -Wp,-MMD,$(depfile) $(KBUILD_HOSTCXXFLAGS) -fPIC \ +- -I $(GCC_PLUGINS_DIR)/include -I $(obj) -std=gnu++98 \ ++ -I $(GCC_PLUGINS_DIR)/include -I $(obj) -std=gnu++11 \ + -fno-rtti -fno-exceptions -fasynchronous-unwind-tables \ +- -ggdb -Wno-narrowing -Wno-unused-variable -Wno-c++11-compat \ ++ -ggdb -Wno-narrowing -Wno-unused-variable \ + -Wno-format-diag + + plugin_ldflags = -shared diff --git a/libre/linux-libre-lts/PKGBUILD b/libre/linux-libre-lts/PKGBUILD index 31f8eed..55a4c7d 100644 --- a/libre/linux-libre-lts/PKGBUILD +++ b/libre/linux-libre-lts/PKGBUILD @@ -9,18 +9,16 @@ # Based on linux-lts package -# NOTE: Don't build htmldocs due to an error in sphinx (armv7h only) - _replacesarchkernel=('linux%') # '%' gets replaced with kernel suffix _replacesoldkernels=() # '%' gets replaced with kernel suffix _replacesoldmodules=() # '%' gets replaced with kernel suffix pkgbase=linux-libre-lts -pkgver=5.10.56 +pkgver=5.10.72 pkgrel=1 pkgdesc='LTS Linux-libre' -rcnver=5.10.56 -rcnrel=armv7-x45 +rcnver=5.10.72 +rcnrel=armv7-x53 url='https://linux-libre.fsfla.org/' arch=(i686 x86_64 armv7h) license=(GPL2) @@ -31,8 +29,8 @@ makedepends=( options=('!strip') _srcname=linux-5.10 source=( - "https://linux-libre.fsfla.org/pub/linux-libre/releases/${_srcname##*-}-gnu/linux-libre-${_srcname##*-}-gnu.tar.xz"{,.sign} - "https://linux-libre.fsfla.org/pub/linux-libre/releases/$pkgver-gnu/patch-${_srcname##*-}-gnu-$pkgver-gnu.xz"{,.sign} + "https://linux-libre.fsfla.org/pub/linux-libre/releases/${_srcname##*-}-gnu1/linux-libre-${_srcname##*-}-gnu1.tar.xz"{,.sign} + "https://linux-libre.fsfla.org/pub/linux-libre/releases/$pkgver-gnu1/patch-${_srcname##*-}-gnu1-$pkgver-gnu1.xz"{,.sign} "https://repo.parabola.nu/other/linux-libre/logos/logo_linux_"{clut224.ppm,vga16.ppm,mono.pbm}{,.sig} config.i686 config.x86_64 config.armv7h # the main kernel config files linux-armv7h.preset # armv7h preset file for mkinitcpio ramdisk @@ -46,6 +44,7 @@ source=( 0002-fix-Atmel-maXTouch-touchscreen-support.patch # Arch Linux patches 0001-ZEN-Add-sysctl-and-CONFIG-to-disallow-unprivileged-C.patch + 0002-gcc-plugins-modern-gcc-plugin-infrastructure-requres.patch ) source_i686=( # avoid using zstd compression in ultra mode (exhausts virtual memory) @@ -59,9 +58,9 @@ validpgpkeys=( '474402C8C582DAFBE389C427BCB7CF877E7D47A7' # Alexandre Oliva '6DB9C4B4F0D8C0DC432CF6E4227CA7C556B2BA78' # David P. ) -sha512sums=('ccc52db049a66ff146d9fc84fb00e783f2d04211156233a382f87589fec7631b8fbb3e76bfd94279607b883d25f9745e6c7d2bd62b13311dc6b425002bd42ec0' +sha512sums=('4bf48611e8a217931c2347f1aa3257da5ba210f263fb35edef43e935fd3fcab5333fc884198fe6ab180cc11ed11dd48b71dff4071b85f18830a6bf9e1c2cf97f' 'SKIP' - '44f57270e8c973d03515ff8526865e5cecd7e7ae29c4c10468a2ee33b98baa20cdca07fe64910740a3b38c4a08eeb5727fb26d415cfd719403b976685d0e2b86' + 'a25bf1a32e8dba38a910eae4d6436f2a6716807e810655f0170f8ea90d136aa353057fd8cc5d05281ca8a684efef7ef4036ac96039f8d122f62d5b1f362229c3' 'SKIP' '13cb5bc42542e7b8bb104d5f68253f6609e463b6799800418af33eb0272cc269aaa36163c3e6f0aacbdaaa1d05e2827a4a7c4a08a029238439ed08b89c564bb3' 'SKIP' @@ -70,14 +69,15 @@ sha512sums=('ccc52db049a66ff146d9fc84fb00e783f2d04211156233a382f87589fec7631b8fb '267295aa0cea65684968420c68b32f1a66a22d018b9d2b2c1ef14267bcf4cb68aaf7099d073cbfefe6c25c8608bdcbbd45f7ac8893fdcecbf1e621abdfe9ecc1' 'SKIP' '42e5e4913993650bb9bb22accbc1c272e8e0be4891e5bb82fb7c0f140d56bdc6f5282f353d53d49e4aa3a010d464c64001fb6d14d615c6778c10bec204435ea3' - 'f7397cfec791ba8df9e342a850f4794acc5e69707a5c4e5f9c03b14c75f975317055a2be59ee51c3fd22bb8c534639454931bac79d9f3761453a62fc085d8801' + 'd6e61670635d717e84c2c3caca17fcc284d23cab85768246fece85b274e8668933392fe66c2d2f0d742fe5b4fab2e799a18389b32c21c075f8c54c68ea224950' '6012fa7b97c15ada82f0c205ea983bebac8b672ca498e22f524d219bdd8715784b24ce7d457803e8221a945c3daff95c4e467f70a420b9c2aa95d627f2d160a9' '53103bf55b957b657039510527df0df01279dec59cda115a4d6454e4135025d4546167fa30bdc99107f232561c1e096d8328609ab5a876cf7017176f92ad3e0b' '02af4dd2a007e41db0c63822c8ab3b80b5d25646af1906dc85d0ad9bb8bbf5236f8e381d7f91cf99ed4b0978c50aee37cb9567cdeef65b7ec3d91b882852b1af' 'b8fe56e14006ab866970ddbd501c054ae37186ddc065bb869cf7d18db8c0d455118d5bda3255fb66a0dde38b544655cfe9040ffe46e41d19830b47959b2fb168' - 'aed7844c51ec705ef1ef5d9f1adf27939073c99d4fcc97051bed2fba1ec161fdde4c57cbe039209fb86c72918493bea55ed26189c1dda3dbea3a3a7019363818') + 'aed7844c51ec705ef1ef5d9f1adf27939073c99d4fcc97051bed2fba1ec161fdde4c57cbe039209fb86c72918493bea55ed26189c1dda3dbea3a3a7019363818' + 'd1db702f9e3a09288ad591361b89ec35b991e421494553e61cc3998037cb6c60627d77d7b7e41f7e7fdab90245a4ee2e4844d68ce96eeaa021dde8548f2673f7') sha512sums_i686=('3a346ff5e0fdefafd28bc3dd0e4b6cd68e3f0014e59d1611d99f2edb8d074fd32649eeb0894a7e340e4f907b5cfc0e08e0753e0427a68dc113bb22835a892968') -sha512sums_armv7h=('8105ecb83dd3afa8b20f1a0846ff63ae5e6368a46e3e2f5a270d94e1ef5886b2b48eb9a8ff6ce9be2d0474abcc793c760984cd9df37b53914d0a8f68e010f20e' +sha512sums_armv7h=('cf29c386ccfaa33a14bb9028bbc8d783b2e872b420e96174e6040faf93d0a1d73d4df75a7d4fb0b8a0dbaae32593b698d16da47436aa29b8b483bdf4c91bb515' 'SKIP') _replacesarchkernel=("${_replacesarchkernel[@]/\%/${pkgbase#linux-libre}}") @@ -98,7 +98,7 @@ prepare() { if [ "${_srcname##*-}" != "$pkgver" ]; then echo "Applying upstream patch..." - patch -Np1 < "../patch-${_srcname##*-}-gnu-$pkgver-gnu" + patch -Np1 < "../patch-${_srcname##*-}-gnu1-$pkgver-gnu1" fi echo "Adding freedo as boot logo..." @@ -144,7 +144,7 @@ prepare() { echo "Setting config..." cp ../config.$CARCH .config make olddefconfig - +#return 1 make -s kernelrelease > version echo "Prepared $pkgbase version $( Date: Oct 13 2021 01:30:48 +0000 Subject: [PATCH 6/73] updpkg: libre/linux-libre-hardened 5.14.11.hardened1-1 Signed-off-by: David P --- diff --git a/libre/linux-libre-hardened/PKGBUILD b/libre/linux-libre-hardened/PKGBUILD index 84ce20d..ed3fc5c 100644 --- a/libre/linux-libre-hardened/PKGBUILD +++ b/libre/linux-libre-hardened/PKGBUILD @@ -9,7 +9,7 @@ _replacesoldkernels=() # '%' gets replaced with kernel suffix _replacesoldmodules=() # '%' gets replaced with kernel suffix pkgbase=linux-libre-hardened -pkgver=5.12.19.hardened1 +pkgver=5.14.11.hardened1 pkgrel=1 pkgdesc='Security-Hardened Linux-libre' url='https://linux-libre.fsfla.org/' @@ -20,7 +20,7 @@ makedepends=( xmlto python-sphinx python-sphinx_rtd_theme graphviz imagemagick ) options=('!strip') -_srcname=linux-5.12 +_srcname=linux-5.14 _srctag=${pkgver%.*}-${pkgver##*.} source=( "https://linux-libre.fsfla.org/pub/linux-libre/releases/${_srcname##*-}-gnu/linux-libre-${_srcname##*-}-gnu.tar.xz"{,.sign} @@ -36,7 +36,6 @@ source=( # https://labs.parabola.nu/issues/877 # http://www.fsfla.org/pipermail/linux-libre/2015-November/003202.html 0002-fix-Atmel-maXTouch-touchscreen-support.patch - # Arch Linux patches ) validpgpkeys=( '474402C8C582DAFBE389C427BCB7CF877E7D47A7' # Alexandre Oliva @@ -44,11 +43,11 @@ validpgpkeys=( '6DB9C4B4F0D8C0DC432CF6E4227CA7C556B2BA78' # David P. 'E240B57E2C4630BA768E2F26FC1B547C8D8172C8' # Levente Polyak ) -sha512sums=('07730c51e4030dc9c1d01367098eabafd5665c40a69f8b102b2fa0aaae4f2124c32f60560b30a55fab18a76eb782650fac04a4aa2aaa558e96bfd13faaea328c' +sha512sums=('18798d032184ce141216ad72fcbb5ddb340809fe8d953acb50700aa0b47d36fca104dcedc7521fb3aea913d8fbeb4bd3eab1cf2c955388e6996c4154eac67d0c' 'SKIP' - '9857f7c8e88f9a59faaea695245d668d7c73347bcf43feb60d61fa94dfc9c7bfdfcbca6a6afa32839991924644bd990a7fff2b60b68d4f14da74b343ede5ff15' + '951cdb68af3bbf3b841376f82fd9c82dfd7a159cae8564e5d772f99f3170deafcabc00cb0ecfa6e7669c22087577f2eafa47d3b50bc8ea6ee5edbc65821986e1' 'SKIP' - 'e5e427702841d941c605a9fe27ba051c7e947dc7c2ab5906cd19a40b9fe99863e41b9e860e8f00fad2f11922403d9ee042a94b9e7fefc85e89f333192b2bda85' + 'ae0fb696bcea16040ffae245e874957aa797d977b73c8c84cb2c130ad858b03f7bf0848c374e33e521b5db30c77ade08230b9446f1700b1e32ac65d9463f7b90' 'SKIP' '13cb5bc42542e7b8bb104d5f68253f6609e463b6799800418af33eb0272cc269aaa36163c3e6f0aacbdaaa1d05e2827a4a7c4a08a029238439ed08b89c564bb3' 'SKIP' @@ -56,7 +55,7 @@ sha512sums=('07730c51e4030dc9c1d01367098eabafd5665c40a69f8b102b2fa0aaae4f2124c32 'SKIP' '267295aa0cea65684968420c68b32f1a66a22d018b9d2b2c1ef14267bcf4cb68aaf7099d073cbfefe6c25c8608bdcbbd45f7ac8893fdcecbf1e621abdfe9ecc1' 'SKIP' - '17e5fead55a8bbffaaa4a37ed09bd38309b2dbcbebbd44fdd2f382732da8a0e41dded9ab78fbcb154788e8e0f7ddd5bf02a5f3dede630731bdd6e72773effcc7' + '71c0705f03b2c3937fb30ef07f81d6bc48f43e7433eec2dd52b94bb55d91123d200e9fa74f522fb6b66495e0ec8b56b2949dd2974d777e265471186ea6a0a033' '02af4dd2a007e41db0c63822c8ab3b80b5d25646af1906dc85d0ad9bb8bbf5236f8e381d7f91cf99ed4b0978c50aee37cb9567cdeef65b7ec3d91b882852b1af' 'b8fe56e14006ab866970ddbd501c054ae37186ddc065bb869cf7d18db8c0d455118d5bda3255fb66a0dde38b544655cfe9040ffe46e41d19830b47959b2fb168') diff --git a/libre/linux-libre-hardened/config b/libre/linux-libre-hardened/config index e836681..389c065 100644 --- a/libre/linux-libre-hardened/config +++ b/libre/linux-libre-hardened/config @@ -1,11 +1,13 @@ # # Automatically generated file; DO NOT EDIT. -# Linux/x86 5.12.19-gnu-hardened1 Kernel Configuration +# Linux/x86 5.14.11-gnu-hardened1 Kernel Configuration # CONFIG_CC_VERSION_TEXT="gcc (GCC) 11.1.0" CONFIG_CC_IS_GCC=y CONFIG_GCC_VERSION=110100 CONFIG_CLANG_VERSION=0 +CONFIG_AS_IS_GNU=y +CONFIG_AS_VERSION=23601 CONFIG_LD_IS_BFD=y CONFIG_LD_VERSION=23601 CONFIG_LLD_VERSION=0 @@ -14,6 +16,7 @@ CONFIG_CC_CAN_LINK_STATIC=y CONFIG_CC_HAS_ASM_GOTO=y CONFIG_CC_HAS_ASM_GOTO_OUTPUT=y CONFIG_CC_HAS_ASM_INLINE=y +CONFIG_CC_HAS_NO_PROFILE_FN_ATTR=y CONFIG_IRQ_WORK=y CONFIG_BUILDTIME_TABLE_SORT=y CONFIG_THREAD_INFO_IN_TASK=y @@ -100,12 +103,29 @@ CONFIG_NO_HZ=y CONFIG_HIGH_RES_TIMERS=y # end of Timers subsystem +CONFIG_BPF=y +CONFIG_HAVE_EBPF_JIT=y +CONFIG_ARCH_WANT_DEFAULT_BPF_JIT=y + +# +# BPF subsystem +# +CONFIG_BPF_SYSCALL=y +CONFIG_BPF_JIT=y +CONFIG_BPF_JIT_ALWAYS_ON=y +CONFIG_BPF_JIT_DEFAULT_ON=y +CONFIG_BPF_UNPRIV_DEFAULT_OFF=y +# CONFIG_BPF_PRELOAD is not set +CONFIG_BPF_LSM=y +# end of BPF subsystem + # CONFIG_PREEMPT_NONE is not set # CONFIG_PREEMPT_VOLUNTARY is not set CONFIG_PREEMPT=y CONFIG_PREEMPT_COUNT=y CONFIG_PREEMPTION=y CONFIG_PREEMPT_DYNAMIC=y +CONFIG_SCHED_CORE=y # # CPU/Task time and stats accounting @@ -193,6 +213,7 @@ CONFIG_CGROUP_DEVICE=y CONFIG_CGROUP_CPUACCT=y CONFIG_CGROUP_PERF=y CONFIG_CGROUP_BPF=y +CONFIG_CGROUP_MISC=y # CONFIG_CGROUP_DEBUG is not set CONFIG_SOCK_CGROUP_DATA=y CONFIG_NAMESPACES=y @@ -224,7 +245,6 @@ CONFIG_SYSCTL=y CONFIG_HAVE_UID16=y CONFIG_SYSCTL_EXCEPTION_TRACE=y CONFIG_HAVE_PCSPKR_PLATFORM=y -CONFIG_BPF=y # CONFIG_EXPERT is not set # CONFIG_UID16 is not set CONFIG_MULTIUSER=y @@ -253,12 +273,6 @@ CONFIG_KALLSYMS=y CONFIG_KALLSYMS_ALL=y CONFIG_KALLSYMS_ABSOLUTE_PERCPU=y CONFIG_KALLSYMS_BASE_RELATIVE=y -CONFIG_BPF_LSM=y -CONFIG_BPF_SYSCALL=y -CONFIG_ARCH_WANT_DEFAULT_BPF_JIT=y -CONFIG_BPF_JIT_ALWAYS_ON=y -CONFIG_BPF_JIT_DEFAULT_ON=y -# CONFIG_BPF_PRELOAD is not set # CONFIG_USERFAULTFD is not set CONFIG_ARCH_HAS_MEMBARRIER_SYNC_CORE=y CONFIG_KCMP=y @@ -307,7 +321,6 @@ CONFIG_GENERIC_BUG_RELATIVE_POINTERS=y CONFIG_ARCH_MAY_HAVE_PC_FDC=y CONFIG_GENERIC_CALIBRATE_DELAY=y CONFIG_ARCH_HAS_CPU_RELAX=y -CONFIG_ARCH_HAS_CACHE_LINE_SIZE=y CONFIG_ARCH_HAS_FILTER_PGPROT=y CONFIG_HAVE_SETUP_PER_CPU_AREA=y CONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNK=y @@ -315,7 +328,6 @@ CONFIG_NEED_PER_CPU_PAGE_FIRST_CHUNK=y CONFIG_ARCH_HIBERNATION_POSSIBLE=y CONFIG_ARCH_SUSPEND_POSSIBLE=y CONFIG_ARCH_WANT_GENERAL_HUGETLB=y -CONFIG_ZONE_DMA32=y CONFIG_AUDIT_ARCH=y CONFIG_HAVE_INTEL_TXT=y CONFIG_X86_64_SMP=y @@ -328,7 +340,6 @@ CONFIG_CC_HAS_SANE_STACKPROTECTOR=y # # Processor type and features # -CONFIG_ZONE_DMA=y CONFIG_SMP=y CONFIG_X86_FEATURE_NAMES=y CONFIG_X86_X2APIC=y @@ -445,7 +456,6 @@ CONFIG_X86_PMEM_LEGACY_DEVICE=y CONFIG_X86_PMEM_LEGACY=m CONFIG_X86_CHECK_BIOS_CORRUPTION=y CONFIG_X86_BOOTPARAM_MEMORY_CORRUPTION_CHECK=y -CONFIG_X86_RESERVE_LOW=64 CONFIG_MTRR=y CONFIG_MTRR_SANITIZER=y CONFIG_MTRR_SANITIZER_ENABLE_DEFAULT=1 @@ -496,12 +506,8 @@ CONFIG_HAVE_LIVEPATCH=y # end of Processor type and features CONFIG_ARCH_HAS_ADD_PAGES=y -CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y -CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y +CONFIG_ARCH_MHP_MEMMAP_ON_MEMORY_ENABLE=y CONFIG_USE_PERCPU_NUMA_NODE_ID=y -CONFIG_ARCH_ENABLE_SPLIT_PMD_PTLOCK=y -CONFIG_ARCH_ENABLE_HUGEPAGE_MIGRATION=y -CONFIG_ARCH_ENABLE_THP_MIGRATION=y # # Power management and ACPI options @@ -593,7 +599,9 @@ CONFIG_BXT_WC_PMIC_OPREGION=y CONFIG_CHT_WC_PMIC_OPREGION=y CONFIG_CHT_DC_TI_PMIC_OPREGION=y CONFIG_TPS68470_PMIC_OPREGION=y +CONFIG_ACPI_VIOT=y CONFIG_X86_PM_TIMER=y +CONFIG_ACPI_PRMT=y # # CPU Frequency scaling @@ -738,9 +746,11 @@ CONFIG_KVM_COMPAT=y CONFIG_HAVE_KVM_IRQ_BYPASS=y CONFIG_HAVE_KVM_NO_POLL=y CONFIG_KVM_XFER_TO_GUEST_WORK=y +CONFIG_HAVE_KVM_PM_NOTIFIER=y CONFIG_VIRTUALIZATION=y CONFIG_KVM=m CONFIG_KVM_INTEL=m +CONFIG_X86_SGX_KVM=y CONFIG_KVM_AMD=m CONFIG_KVM_AMD_SEV=y CONFIG_KVM_XEN=y @@ -781,6 +791,7 @@ CONFIG_ARCH_HAS_SET_MEMORY=y CONFIG_ARCH_HAS_SET_DIRECT_MAP=y CONFIG_HAVE_ARCH_THREAD_STRUCT_WHITELIST=y CONFIG_ARCH_WANTS_DYNAMIC_TASK_STRUCT=y +CONFIG_ARCH_WANTS_NO_INSTR=y CONFIG_HAVE_ASM_MODVERSIONS=y CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y CONFIG_HAVE_RSEQ=y @@ -845,6 +856,8 @@ CONFIG_COMPAT_OLD_SIGACTION=y CONFIG_COMPAT_32BIT_TIME=y CONFIG_HAVE_ARCH_VMAP_STACK=y CONFIG_VMAP_STACK=y +CONFIG_HAVE_ARCH_RANDOMIZE_KSTACK_OFFSET=y +CONFIG_RANDOMIZE_KSTACK_OFFSET_DEFAULT=y CONFIG_ARCH_HAS_STRICT_KERNEL_RWX=y CONFIG_STRICT_KERNEL_RWX=y CONFIG_ARCH_HAS_STRICT_MODULE_RWX=y @@ -891,10 +904,12 @@ CONFIG_MODULE_SIG_ALL=y # CONFIG_MODULE_SIG_SHA384 is not set CONFIG_MODULE_SIG_SHA512=y CONFIG_MODULE_SIG_HASH="sha512" -CONFIG_MODULE_COMPRESS=y +# CONFIG_MODULE_COMPRESS_NONE is not set # CONFIG_MODULE_COMPRESS_GZIP is not set -CONFIG_MODULE_COMPRESS_XZ=y +# CONFIG_MODULE_COMPRESS_XZ is not set +CONFIG_MODULE_COMPRESS_ZSTD=y # CONFIG_MODULE_ALLOW_MISSING_NAMESPACE_IMPORTS is not set +CONFIG_MODPROBE_PATH="/sbin/modprobe" CONFIG_MODULES_TREE_LOOKUP=y CONFIG_BLOCK=y CONFIG_BLK_RQ_ALLOC_TIME=y @@ -909,9 +924,11 @@ CONFIG_BLK_DEV_THROTTLING=y CONFIG_BLK_DEV_THROTTLING_LOW=y # CONFIG_BLK_CMDLINE_PARSER is not set CONFIG_BLK_WBT=y +CONFIG_BLK_WBT_MQ=y CONFIG_BLK_CGROUP_IOLATENCY=y +CONFIG_BLK_CGROUP_FC_APPID=y CONFIG_BLK_CGROUP_IOCOST=y -CONFIG_BLK_WBT_MQ=y +CONFIG_BLK_CGROUP_IOPRIO=y CONFIG_BLK_DEBUG_FS=y CONFIG_BLK_DEBUG_FS_ZONED=y CONFIG_BLK_SED_OPAL=y @@ -995,7 +1012,6 @@ CONFIG_COREDUMP=y CONFIG_SELECT_MEMORY_MODEL=y CONFIG_SPARSEMEM_MANUAL=y CONFIG_SPARSEMEM=y -CONFIG_NEED_MULTIPLE_NODES=y CONFIG_SPARSEMEM_EXTREME=y CONFIG_SPARSEMEM_VMEMMAP_ENABLE=y CONFIG_SPARSEMEM_VMEMMAP=y @@ -1003,19 +1019,24 @@ CONFIG_HAVE_FAST_GUP=y CONFIG_NUMA_KEEP_MEMINFO=y CONFIG_MEMORY_ISOLATION=y CONFIG_HAVE_BOOTMEM_INFO_NODE=y +CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y CONFIG_MEMORY_HOTPLUG=y CONFIG_MEMORY_HOTPLUG_SPARSE=y CONFIG_MEMORY_HOTPLUG_DEFAULT_ONLINE=y +CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y CONFIG_MEMORY_HOTREMOVE=y +CONFIG_MHP_MEMMAP_ON_MEMORY=y CONFIG_SPLIT_PTLOCK_CPUS=4 +CONFIG_ARCH_ENABLE_SPLIT_PMD_PTLOCK=y CONFIG_MEMORY_BALLOON=y CONFIG_BALLOON_COMPACTION=y CONFIG_COMPACTION=y CONFIG_PAGE_REPORTING=y CONFIG_MIGRATION=y +CONFIG_ARCH_ENABLE_HUGEPAGE_MIGRATION=y +CONFIG_ARCH_ENABLE_THP_MIGRATION=y CONFIG_CONTIG_ALLOC=y CONFIG_PHYS_ADDR_T_64BIT=y -CONFIG_BOUNCE=y CONFIG_VIRT_TO_BUS=y CONFIG_MMU_NOTIFIER=y CONFIG_KSM=y @@ -1033,6 +1054,7 @@ CONFIG_FRONTSWAP=y CONFIG_CMA=y # CONFIG_CMA_DEBUG is not set # CONFIG_CMA_DEBUGFS is not set +CONFIG_CMA_SYSFS=y CONFIG_CMA_AREAS=7 CONFIG_ZSWAP=y # CONFIG_ZSWAP_COMPRESSOR_DEFAULT_DEFLATE is not set @@ -1055,7 +1077,10 @@ CONFIG_ZSMALLOC=y CONFIG_GENERIC_EARLY_IOREMAP=y # CONFIG_DEFERRED_STRUCT_PAGE_INIT is not set CONFIG_IDLE_PAGE_TRACKING=y +CONFIG_ARCH_HAS_CACHE_LINE_SIZE=y CONFIG_ARCH_HAS_PTE_DEVMAP=y +CONFIG_ZONE_DMA=y +CONFIG_ZONE_DMA32=y CONFIG_ZONE_DEVICE=y CONFIG_DEV_PAGEMAP_OPS=y CONFIG_HMM_MIRROR=y @@ -1068,6 +1093,7 @@ CONFIG_ARCH_HAS_PKEYS=y CONFIG_READ_ONLY_THP_FOR_FS=y CONFIG_ARCH_HAS_PTE_SPECIAL=y CONFIG_MAPPING_DIRTY_HELPERS=y +CONFIG_SECRETMEM=y # end of Memory Management options CONFIG_NET=y @@ -1213,13 +1239,13 @@ CONFIG_NETFILTER_INGRESS=y CONFIG_NETFILTER_NETLINK=m CONFIG_NETFILTER_FAMILY_BRIDGE=y CONFIG_NETFILTER_FAMILY_ARP=y +CONFIG_NETFILTER_NETLINK_HOOK=m CONFIG_NETFILTER_NETLINK_ACCT=m CONFIG_NETFILTER_NETLINK_QUEUE=m CONFIG_NETFILTER_NETLINK_LOG=m CONFIG_NETFILTER_NETLINK_OSF=m CONFIG_NF_CONNTRACK=m -CONFIG_NF_LOG_COMMON=m -CONFIG_NF_LOG_NETDEV=m +CONFIG_NF_LOG_SYSLOG=m CONFIG_NETFILTER_CONNCOUNT=m CONFIG_NF_CONNTRACK_MARK=y CONFIG_NF_CONNTRACK_SECMARK=y @@ -1293,6 +1319,7 @@ CONFIG_NFT_REJECT_NETDEV=m CONFIG_NF_FLOW_TABLE_INET=m CONFIG_NF_FLOW_TABLE=m CONFIG_NETFILTER_XTABLES=m +CONFIG_NETFILTER_XTABLES_COMPAT=y # # Xtables combined modules @@ -1533,7 +1560,6 @@ CONFIG_NF_DEFRAG_IPV6=m CONFIG_NF_TABLES_BRIDGE=m CONFIG_NFT_BRIDGE_META=m CONFIG_NFT_BRIDGE_REJECT=m -CONFIG_NF_LOG_BRIDGE=m CONFIG_NF_CONNTRACK_BRIDGE=m CONFIG_BRIDGE_NF_EBTABLES=m CONFIG_BRIDGE_EBT_BROUTE=m @@ -1588,12 +1614,11 @@ CONFIG_BRIDGE_IGMP_SNOOPING=y CONFIG_BRIDGE_VLAN_FILTERING=y CONFIG_BRIDGE_MRP=y CONFIG_BRIDGE_CFM=y -CONFIG_HAVE_NET_DSA=y CONFIG_NET_DSA=m -CONFIG_NET_DSA_TAG_8021Q=m CONFIG_NET_DSA_TAG_AR9331=m CONFIG_NET_DSA_TAG_BRCM_COMMON=m CONFIG_NET_DSA_TAG_BRCM=m +CONFIG_NET_DSA_TAG_BRCM_LEGACY=m CONFIG_NET_DSA_TAG_BRCM_PREPEND=m CONFIG_NET_DSA_TAG_HELLCREEK=m CONFIG_NET_DSA_TAG_GSWIP=m @@ -1778,6 +1803,8 @@ CONFIG_QRTR_TUN=m CONFIG_QRTR_MHI=m CONFIG_NET_NCSI=y CONFIG_NCSI_OEM_CMD_GET_MAC=y +CONFIG_NCSI_OEM_CMD_KEEP_PHY=y +CONFIG_PCPU_DEV_REFCNT=y CONFIG_RPS=y CONFIG_RFS_ACCEL=y CONFIG_SOCK_RX_QUEUE_MAPPING=y @@ -1786,7 +1813,6 @@ CONFIG_CGROUP_NET_PRIO=y CONFIG_CGROUP_NET_CLASSID=y CONFIG_NET_RX_BUSY_POLL=y CONFIG_BQL=y -CONFIG_BPF_JIT=y CONFIG_BPF_STREAM_PARSER=y CONFIG_NET_FLOW_LIMIT=y @@ -1878,6 +1904,7 @@ CONFIG_CAN_MCP251XFD=m CONFIG_CAN_8DEV_USB=m CONFIG_CAN_EMS_USB=m CONFIG_CAN_ESD_USB2=m +CONFIG_CAN_ETAS_ES58X=m CONFIG_CAN_GS_USB=m CONFIG_CAN_KVASER_USB=m CONFIG_CAN_MCBA_USB=m @@ -1902,6 +1929,7 @@ CONFIG_BT_LE=y CONFIG_BT_6LOWPAN=m CONFIG_BT_LEDS=y CONFIG_BT_MSFTEXT=y +CONFIG_BT_AOSPEXT=y # CONFIG_BT_DEBUGFS is not set # CONFIG_BT_SELFTEST is not set @@ -1945,6 +1973,7 @@ CONFIG_BT_ATH3K=m CONFIG_BT_MTKSDIO=m CONFIG_BT_MTKUART=m CONFIG_BT_HCIRSI=m +CONFIG_BT_VIRTIO=m # end of Bluetooth device drivers CONFIG_AF_RXRPC=m @@ -2053,12 +2082,12 @@ CONFIG_LWTUNNEL_BPF=y CONFIG_DST_CACHE=y CONFIG_GRO_CELLS=y CONFIG_SOCK_VALIDATE_XMIT=y +CONFIG_NET_SELFTESTS=m CONFIG_NET_SOCK_MSG=y CONFIG_NET_DEVLINK=y CONFIG_PAGE_POOL=y CONFIG_FAILOVER=m CONFIG_ETHTOOL_NETLINK=y -CONFIG_HAVE_EBPF_JIT=y # # Device Drivers @@ -2148,6 +2177,8 @@ CONFIG_PCI_SW_SWITCHTEC=m CONFIG_CXL_BUS=m CONFIG_CXL_MEM=m # CONFIG_CXL_MEM_RAW_COMMANDS is not set +CONFIG_CXL_ACPI=m +CONFIG_CXL_PMEM=m CONFIG_PCCARD=m CONFIG_PCMCIA=m CONFIG_PCMCIA_LOAD_CIS=y @@ -2207,6 +2238,7 @@ CONFIG_REGMAP_W1=m CONFIG_REGMAP_MMIO=y CONFIG_REGMAP_IRQ=y CONFIG_REGMAP_SOUNDWIRE=m +CONFIG_REGMAP_SOUNDWIRE_MBQ=m CONFIG_REGMAP_SCCB=m CONFIG_REGMAP_SPI_AVMM=m CONFIG_DMA_SHARED_BUFFER=y @@ -2285,6 +2317,7 @@ CONFIG_MTD_PLATRAM=m # CONFIG_MTD_PMC551 is not set # CONFIG_MTD_DATAFLASH is not set # CONFIG_MTD_MCHP23K256 is not set +# CONFIG_MTD_MCHP48L640 is not set # CONFIG_MTD_SST25L is not set # CONFIG_MTD_SLRAM is not set # CONFIG_MTD_PHRAM is not set @@ -2387,7 +2420,6 @@ CONFIG_ZRAM_DEF_COMP_LZORLE=y CONFIG_ZRAM_DEF_COMP="lzo-rle" CONFIG_ZRAM_WRITEBACK=y # CONFIG_ZRAM_MEMORY_TRACKING is not set -CONFIG_BLK_DEV_UMEM=m CONFIG_BLK_DEV_LOOP=m CONFIG_BLK_DEV_LOOP_MIN_COUNT=0 CONFIG_BLK_DEV_CRYPTOLOOP=m @@ -2457,10 +2489,10 @@ CONFIG_DS1682=m CONFIG_VMWARE_BALLOON=m CONFIG_LATTICE_ECP3_CONFIG=m # CONFIG_SRAM is not set +CONFIG_DW_XDATA_PCIE=m CONFIG_PCI_ENDPOINT_TEST=m CONFIG_XILINX_SDFEC=m CONFIG_MISC_RTSX=m -CONFIG_PVPANIC=m CONFIG_C2PORT=m CONFIG_C2PORT_DURAMAR_2150=m @@ -2504,11 +2536,11 @@ CONFIG_MISC_RTSX_PCI=m CONFIG_MISC_RTSX_USB=m CONFIG_HABANA_AI=m CONFIG_UACCE=m +CONFIG_PVPANIC=y +CONFIG_PVPANIC_MMIO=m +CONFIG_PVPANIC_PCI=m # end of Misc devices -CONFIG_HAVE_IDE=y -# CONFIG_IDE is not set - # # SCSI device support # @@ -2590,6 +2622,7 @@ CONFIG_SCSI_MPT3SAS=m CONFIG_SCSI_MPT2SAS_MAX_SGE=128 CONFIG_SCSI_MPT3SAS_MAX_SGE=128 CONFIG_SCSI_MPT2SAS=m +CONFIG_SCSI_MPI3MR=m CONFIG_SCSI_SMARTPQI=m CONFIG_SCSI_UFSHCD=m CONFIG_SCSI_UFSHCD_PCI=m @@ -2642,6 +2675,7 @@ CONFIG_QEDI=m CONFIG_QEDF=m CONFIG_SCSI_LPFC=m # CONFIG_SCSI_LPFC_DEBUG_FS is not set +CONFIG_SCSI_EFCT=m CONFIG_SCSI_DC395x=m CONFIG_SCSI_AM53C974=m CONFIG_SCSI_WD719X=m @@ -2939,6 +2973,7 @@ CONFIG_NET_DSA_MICROCHIP_KSZ9477_I2C=m CONFIG_NET_DSA_MICROCHIP_KSZ9477_SPI=m CONFIG_NET_DSA_MICROCHIP_KSZ8795=m CONFIG_NET_DSA_MICROCHIP_KSZ8795_SPI=m +CONFIG_NET_DSA_MICROCHIP_KSZ8863_SMI=m CONFIG_NET_DSA_MV88E6XXX=m CONFIG_NET_DSA_MV88E6XXX_PTP=y CONFIG_NET_DSA_MSCC_SEVILLE=m @@ -3101,6 +3136,8 @@ CONFIG_I40EVF=m CONFIG_ICE=m CONFIG_FM10K=m CONFIG_IGC=m +CONFIG_NET_VENDOR_MICROSOFT=y +CONFIG_MICROSOFT_MANA=m CONFIG_JME=m CONFIG_NET_VENDOR_MARVELL=y CONFIG_MVMDIO=m @@ -3125,8 +3162,10 @@ CONFIG_MLX5_EN_ARFS=y CONFIG_MLX5_EN_RXNFC=y CONFIG_MLX5_MPFS=y CONFIG_MLX5_ESWITCH=y +CONFIG_MLX5_BRIDGE=y CONFIG_MLX5_CLS_ACT=y CONFIG_MLX5_TC_CT=y +CONFIG_MLX5_TC_SAMPLE=y CONFIG_MLX5_CORE_EN_DCB=y CONFIG_MLX5_CORE_IPOIB=y CONFIG_MLX5_FPGA_IPSEC=y @@ -3143,8 +3182,6 @@ CONFIG_MLXSW_CORE_HWMON=y CONFIG_MLXSW_CORE_THERMAL=y CONFIG_MLXSW_PCI=m CONFIG_MLXSW_I2C=m -CONFIG_MLXSW_SWITCHIB=m -CONFIG_MLXSW_SWITCHX2=m CONFIG_MLXSW_SPECTRUM=m CONFIG_MLXSW_SPECTRUM_DCB=y CONFIG_MLXSW_MINIMAL=m @@ -3252,6 +3289,7 @@ CONFIG_STMMAC_ETH=m CONFIG_STMMAC_PLATFORM=m CONFIG_DWMAC_GENERIC=m CONFIG_DWMAC_INTEL=m +CONFIG_DWMAC_LOONGSON=m CONFIG_STMMAC_PCI=m CONFIG_NET_VENDOR_SUN=y CONFIG_HAPPYMEAL=m @@ -3285,7 +3323,6 @@ CONFIG_NET_VENDOR_XIRCOM=y CONFIG_PCMCIA_XIRC2PS=m CONFIG_FDDI=m CONFIG_DEFXX=m -CONFIG_DEFXX_MMIO=y CONFIG_SKFP=m # CONFIG_HIPPI is not set CONFIG_NET_SB1000=m @@ -3318,11 +3355,15 @@ CONFIG_INTEL_XWAY_PHY=m CONFIG_LSI_ET1011C_PHY=m CONFIG_MARVELL_PHY=m CONFIG_MARVELL_10G_PHY=m +CONFIG_MARVELL_88X2222_PHY=m +CONFIG_MEDIATEK_GE_PHY=m CONFIG_MICREL_PHY=m CONFIG_MICROCHIP_PHY=m CONFIG_MICROCHIP_T1_PHY=m CONFIG_MICROSEMI_PHY=m +CONFIG_MOTORCOMM_PHY=m CONFIG_NATIONAL_PHY=m +CONFIG_NXP_C45_TJA11XX_PHY=m CONFIG_NXP_TJA11XX_PHY=m CONFIG_AT803X_PHY=m CONFIG_QSEMI_PHY=m @@ -3342,6 +3383,8 @@ CONFIG_XILINX_GMII2RGMII=m CONFIG_MICREL_KS8995MA=m CONFIG_MDIO_DEVICE=m CONFIG_MDIO_BUS=m +CONFIG_FWNODE_MDIO=m +CONFIG_ACPI_MDIO=m CONFIG_MDIO_DEVRES=m CONFIG_MDIO_BITBANG=m CONFIG_MDIO_BCM_UNIMAC=m @@ -3730,6 +3773,17 @@ CONFIG_IEEE802154_CA8210=m # CONFIG_IEEE802154_CA8210_DEBUGFS is not set CONFIG_IEEE802154_MCR20A=m CONFIG_IEEE802154_HWSIM=m + +# +# Wireless WAN +# +CONFIG_WWAN=y +CONFIG_WWAN_HWSIM=m +CONFIG_MHI_WWAN_CTRL=m +CONFIG_RPMSG_WWAN_CTRL=m +CONFIG_IOSM=m +# end of Wireless WAN + CONFIG_XEN_NETDEV_FRONTEND=m CONFIG_XEN_NETDEV_BACKEND=m CONFIG_VMXNET3=m @@ -3883,6 +3937,7 @@ CONFIG_JOYSTICK_WALKERA0701=m CONFIG_JOYSTICK_PSXPAD_SPI=m CONFIG_JOYSTICK_PSXPAD_SPI_FF=y CONFIG_JOYSTICK_PXRC=m +CONFIG_JOYSTICK_QWIIC=m CONFIG_JOYSTICK_FSIA6B=m CONFIG_INPUT_TABLET=y CONFIG_TABLET_USB_ACECAD=m @@ -3892,7 +3947,6 @@ CONFIG_TABLET_USB_KBTAB=m CONFIG_TABLET_USB_PEGASUS=m CONFIG_TABLET_SERIAL_WACOM4=m CONFIG_INPUT_TOUCHSCREEN=y -CONFIG_TOUCHSCREEN_PROPERTIES=y CONFIG_TOUCHSCREEN_88PM860X=m CONFIG_TOUCHSCREEN_ADS7846=m CONFIG_TOUCHSCREEN_AD7877=m @@ -3924,7 +3978,9 @@ CONFIG_TOUCHSCREEN_EXC3000=m CONFIG_TOUCHSCREEN_FUJITSU=m CONFIG_TOUCHSCREEN_GOODIX=m CONFIG_TOUCHSCREEN_HIDEEP=m +CONFIG_TOUCHSCREEN_HYCON_HY46XX=m CONFIG_TOUCHSCREEN_ILI210X=m +CONFIG_TOUCHSCREEN_ILITEK=m CONFIG_TOUCHSCREEN_S6SY761=m CONFIG_TOUCHSCREEN_GUNZE=m CONFIG_TOUCHSCREEN_EKTF2127=m @@ -3936,6 +3992,7 @@ CONFIG_TOUCHSCREEN_MAX11801=m CONFIG_TOUCHSCREEN_MCS5000=m CONFIG_TOUCHSCREEN_MMS114=m CONFIG_TOUCHSCREEN_MELFAS_MIP4=m +CONFIG_TOUCHSCREEN_MSG2638=m CONFIG_TOUCHSCREEN_MTOUCH=m CONFIG_TOUCHSCREEN_INEXIO=m CONFIG_TOUCHSCREEN_MK712=m @@ -4001,6 +4058,7 @@ CONFIG_INPUT_AD714X=m CONFIG_INPUT_AD714X_I2C=m CONFIG_INPUT_AD714X_SPI=m CONFIG_INPUT_ARIZONA_HAPTICS=m +CONFIG_INPUT_ATC260X_ONKEY=m CONFIG_INPUT_BMA150=m CONFIG_INPUT_E3X0_BUTTON=m CONFIG_INPUT_PCSPKR=m @@ -4044,6 +4102,7 @@ CONFIG_INPUT_ADXL34X_I2C=m CONFIG_INPUT_ADXL34X_SPI=m CONFIG_INPUT_IMS_PCU=m CONFIG_INPUT_IQS269A=m +CONFIG_INPUT_IQS626A=m CONFIG_INPUT_CMA3000=m CONFIG_INPUT_CMA3000_I2C=m CONFIG_INPUT_XEN_KBDDEV_FRONTEND=m @@ -4169,19 +4228,13 @@ CONFIG_SERIAL_SPRD=m CONFIG_SERIAL_MCTRL_GPIO=y CONFIG_SERIAL_NONSTANDARD=y -CONFIG_ROCKETPORT=m -CONFIG_CYCLADES=m -CONFIG_CYZ_INTR=y CONFIG_MOXA_INTELLIO=m CONFIG_MOXA_SMARTIO=m CONFIG_SYNCLINK_GT=m -CONFIG_ISI=m CONFIG_N_HDLC=m CONFIG_N_GSM=m CONFIG_NOZOMI=m CONFIG_NULL_TTY=m -CONFIG_TRACE_ROUTER=m -CONFIG_TRACE_SINK=m CONFIG_HVC_DRIVER=y CONFIG_HVC_IRQ=y CONFIG_HVC_XEN=y @@ -4224,10 +4277,7 @@ CONFIG_IPWIRELESS=m CONFIG_MWAVE=m # CONFIG_DEVMEM is not set -# CONFIG_DEVKMEM is not set CONFIG_NVRAM=m -CONFIG_RAW_DRIVER=m -CONFIG_MAX_RAW_DEVS=8192 # CONFIG_DEVPORT is not set CONFIG_HPET=y # CONFIG_HPET_MMAP is not set @@ -4252,8 +4302,10 @@ CONFIG_TCG_TIS_ST33ZP24=m CONFIG_TCG_TIS_ST33ZP24_I2C=m CONFIG_TCG_TIS_ST33ZP24_SPI=m CONFIG_TELCLOCK=m +CONFIG_XILLYBUS_CLASS=m CONFIG_XILLYBUS=m CONFIG_XILLYBUS_PCIE=m +CONFIG_XILLYUSB=m # end of Character devices # CONFIG_RANDOM_TRUST_CPU is not set @@ -4341,6 +4393,7 @@ CONFIG_I2C_XILINX=m # CONFIG_I2C_DIOLAN_U2C=m CONFIG_I2C_DLN2=m +CONFIG_I2C_CP2615=m CONFIG_I2C_PARPORT=m CONFIG_I2C_ROBOTFUZZ_OSIF=m CONFIG_I2C_TAOS_EVM=m @@ -4373,6 +4426,8 @@ CONFIG_SPI_MEM=y # SPI Master Controller Drivers # CONFIG_SPI_ALTERA=m +CONFIG_SPI_ALTERA_CORE=m +CONFIG_SPI_ALTERA_DFL=m CONFIG_SPI_AXI_SPI_ENGINE=m CONFIG_SPI_BITBANG=m CONFIG_SPI_BUTTERFLY=m @@ -4637,6 +4692,7 @@ CONFIG_W1_SLAVE_DS28E17=m # end of 1-wire Slaves CONFIG_POWER_RESET=y +CONFIG_POWER_RESET_ATC260X=m CONFIG_POWER_RESET_MT6323=y CONFIG_POWER_RESET_RESTART=y CONFIG_POWER_SUPPLY=y @@ -4704,11 +4760,14 @@ CONFIG_CHARGER_BQ256XX=m CONFIG_CHARGER_SMB347=m CONFIG_CHARGER_TPS65090=m CONFIG_BATTERY_GAUGE_LTC2941=m +CONFIG_BATTERY_GOLDFISH=m CONFIG_BATTERY_RT5033=m CONFIG_CHARGER_RT9455=m CONFIG_CHARGER_CROS_USBPD=m CONFIG_CHARGER_BD99954=m CONFIG_CHARGER_WILCO=m +CONFIG_BATTERY_SURFACE=m +CONFIG_CHARGER_SURFACE=m CONFIG_HWMON=y CONFIG_HWMON_VID=m # CONFIG_HWMON_DEBUG_CHIP is not set @@ -4742,7 +4801,6 @@ CONFIG_SENSORS_AXI_FAN_CONTROL=m CONFIG_SENSORS_K8TEMP=m CONFIG_SENSORS_K10TEMP=m CONFIG_SENSORS_FAM15H_POWER=m -CONFIG_SENSORS_AMD_ENERGY=m CONFIG_SENSORS_APPLESMC=m CONFIG_SENSORS_ASB100=m CONFIG_SENSORS_ASPEED=m @@ -4833,15 +4891,20 @@ CONFIG_SENSORS_NCT6775=m CONFIG_SENSORS_NCT7802=m CONFIG_SENSORS_NCT7904=m CONFIG_SENSORS_NPCM7XX=m +CONFIG_SENSORS_NZXT_KRAKEN2=m CONFIG_SENSORS_PCF8591=m CONFIG_PMBUS=m CONFIG_SENSORS_PMBUS=m CONFIG_SENSORS_ADM1266=m CONFIG_SENSORS_ADM1275=m CONFIG_SENSORS_BEL_PFE=m +CONFIG_SENSORS_BPA_RS600=m +CONFIG_SENSORS_FSP_3Y=m CONFIG_SENSORS_IBM_CFFPS=m +CONFIG_SENSORS_DPS920AB=m CONFIG_SENSORS_INSPUR_IPSPS=m CONFIG_SENSORS_IR35221=m +CONFIG_SENSORS_IR36021=m CONFIG_SENSORS_IR38064=m CONFIG_SENSORS_IRPS5401=m CONFIG_SENSORS_ISL68137=m @@ -4849,6 +4912,7 @@ CONFIG_SENSORS_LM25066=m CONFIG_SENSORS_LTC2978=m # CONFIG_SENSORS_LTC2978_REGULATOR is not set CONFIG_SENSORS_LTC3815=m +CONFIG_SENSORS_MAX15301=m CONFIG_SENSORS_MAX16064=m CONFIG_SENSORS_MAX16601=m CONFIG_SENSORS_MAX20730=m @@ -4856,10 +4920,13 @@ CONFIG_SENSORS_MAX20751=m CONFIG_SENSORS_MAX31785=m CONFIG_SENSORS_MAX34440=m CONFIG_SENSORS_MAX8688=m +CONFIG_SENSORS_MP2888=m CONFIG_SENSORS_MP2975=m +CONFIG_SENSORS_PIM4328=m CONFIG_SENSORS_PM6764TR=m CONFIG_SENSORS_PXE1610=m CONFIG_SENSORS_Q54SJ108A2=m +CONFIG_SENSORS_STPDDC60=m CONFIG_SENSORS_TPS40422=m CONFIG_SENSORS_TPS53679=m CONFIG_SENSORS_UCD9000=m @@ -4870,6 +4937,7 @@ CONFIG_SENSORS_SBTSI=m CONFIG_SENSORS_SHT15=m CONFIG_SENSORS_SHT21=m CONFIG_SENSORS_SHT3x=m +CONFIG_SENSORS_SHT4x=m CONFIG_SENSORS_SHTC1=m CONFIG_SENSORS_SIS5595=m CONFIG_SENSORS_DME1737=m @@ -4962,6 +5030,7 @@ CONFIG_PROC_THERMAL_MMIO_RAPL=m CONFIG_INTEL_BXT_PMIC_THERMAL=m CONFIG_INTEL_PCH_THERMAL=m +CONFIG_INTEL_TCC_COOLING=m # end of Intel thermal drivers CONFIG_GENERIC_ADC_THERMAL=m @@ -4971,6 +5040,7 @@ CONFIG_WATCHDOG_CORE=y CONFIG_WATCHDOG_HANDLE_BOOT_ENABLED=y CONFIG_WATCHDOG_OPEN_TIMEOUT=0 CONFIG_WATCHDOG_SYSFS=y +# CONFIG_WATCHDOG_HRTIMER_PRETIMEOUT is not set # # Watchdog Pretimeout Governors @@ -5153,16 +5223,13 @@ CONFIG_PCF50633_ADC=m CONFIG_PCF50633_GPIO=m CONFIG_UCB1400_CORE=m CONFIG_MFD_RDC321X=m +CONFIG_MFD_RT4831=m CONFIG_MFD_RT5033=m CONFIG_MFD_RC5T583=y -CONFIG_MFD_SEC_CORE=y CONFIG_MFD_SI476X_CORE=m CONFIG_MFD_SM501=m CONFIG_MFD_SM501_GPIO=y CONFIG_MFD_SKY81452=m -CONFIG_ABX500_CORE=y -CONFIG_AB3100_CORE=y -CONFIG_AB3100_OTP=y CONFIG_MFD_SYSCON=y CONFIG_MFD_TI_AM335X_TSCADC=m CONFIG_MFD_LP3943=m @@ -5174,7 +5241,6 @@ CONFIG_TPS65010=m CONFIG_TPS6507X=m CONFIG_MFD_TPS65086=m CONFIG_MFD_TPS65090=y -CONFIG_MFD_TPS68470=y CONFIG_MFD_TI_LP873X=m CONFIG_MFD_TPS6586X=y CONFIG_MFD_TPS65910=y @@ -5189,7 +5255,7 @@ CONFIG_MFD_WL1273_CORE=m CONFIG_MFD_LM3533=m CONFIG_MFD_TQMX86=m CONFIG_MFD_VX855=m -CONFIG_MFD_ARIZONA=y +CONFIG_MFD_ARIZONA=m CONFIG_MFD_ARIZONA_I2C=m CONFIG_MFD_ARIZONA_SPI=m CONFIG_MFD_CS47L24=y @@ -5205,6 +5271,8 @@ CONFIG_MFD_WM8350=y CONFIG_MFD_WM8350_I2C=y CONFIG_MFD_WM8994=m CONFIG_MFD_WCD934X=m +CONFIG_MFD_ATC260X=m +CONFIG_MFD_ATC260X_I2C=m CONFIG_RAVE_SP_CORE=m CONFIG_MFD_INTEL_M10_BMC=m # end of Multifunction device drivers @@ -5223,6 +5291,7 @@ CONFIG_REGULATOR_AAT2870=m CONFIG_REGULATOR_ARIZONA_LDO1=m CONFIG_REGULATOR_ARIZONA_MICSUPP=m CONFIG_REGULATOR_AS3711=m +CONFIG_REGULATOR_ATC260X=m CONFIG_REGULATOR_AXP20X=m CONFIG_REGULATOR_BCM590XX=m CONFIG_REGULATOR_BD9571MWV=m @@ -5248,6 +5317,7 @@ CONFIG_REGULATOR_MAX14577=m CONFIG_REGULATOR_MAX1586=m CONFIG_REGULATOR_MAX8649=m CONFIG_REGULATOR_MAX8660=m +CONFIG_REGULATOR_MAX8893=m CONFIG_REGULATOR_MAX8907=m CONFIG_REGULATOR_MAX8925=m CONFIG_REGULATOR_MAX8952=m @@ -5262,6 +5332,7 @@ CONFIG_REGULATOR_MP8859=m CONFIG_REGULATOR_MT6311=m CONFIG_REGULATOR_MT6323=m CONFIG_REGULATOR_MT6358=m +CONFIG_REGULATOR_MT6359=m CONFIG_REGULATOR_MT6360=m CONFIG_REGULATOR_MT6397=m CONFIG_REGULATOR_PALMAS=m @@ -5275,11 +5346,11 @@ CONFIG_REGULATOR_PWM=m CONFIG_REGULATOR_RASPBERRYPI_TOUCHSCREEN_ATTINY=m CONFIG_REGULATOR_RC5T583=m CONFIG_REGULATOR_RT4801=m +CONFIG_REGULATOR_RT4831=m CONFIG_REGULATOR_RT5033=m +CONFIG_REGULATOR_RT6160=m +CONFIG_REGULATOR_RT6245=m CONFIG_REGULATOR_RTMV20=m -CONFIG_REGULATOR_S2MPA01=m -CONFIG_REGULATOR_S2MPS11=m -CONFIG_REGULATOR_S5M8767=m CONFIG_REGULATOR_SKY81452=m CONFIG_REGULATOR_SLG51000=m CONFIG_REGULATOR_TPS51632=m @@ -5381,6 +5452,7 @@ CONFIG_VIDEO_TUNER=m CONFIG_V4L2_MEM2MEM_DEV=m CONFIG_V4L2_FLASH_LED_CLASS=m CONFIG_V4L2_FWNODE=m +CONFIG_V4L2_ASYNC=m CONFIG_VIDEOBUF_GEN=m CONFIG_VIDEOBUF_DMA_SG=m CONFIG_VIDEOBUF_VMALLOC=m @@ -5410,7 +5482,6 @@ CONFIG_DVB_DYNAMIC_MINORS=y # # Drivers filtered as selected at 'Filter media drivers' # -CONFIG_TTPCI_EEPROM=m CONFIG_MEDIA_USB_SUPPORT=y # @@ -5581,7 +5652,6 @@ CONFIG_VIDEO_TW686X=m # Media capture/analog TV support # CONFIG_VIDEO_IVTV=m -# CONFIG_VIDEO_IVTV_DEPRECATED_IOCTLS is not set CONFIG_VIDEO_IVTV_ALSA=m CONFIG_VIDEO_FB_IVTV=m # CONFIG_VIDEO_FB_IVTV_FORCE_PAT is not set @@ -5618,14 +5688,10 @@ CONFIG_VIDEO_SAA7164=m # # Media digital TV PCI Adapters # -CONFIG_DVB_AV7110_IR=y -CONFIG_DVB_AV7110=m -CONFIG_DVB_AV7110_OSD=y CONFIG_DVB_BUDGET_CORE=m CONFIG_DVB_BUDGET=m CONFIG_DVB_BUDGET_CI=m CONFIG_DVB_BUDGET_AV=m -CONFIG_DVB_BUDGET_PATCH=m CONFIG_DVB_B2C2_FLEXCOP_PCI=m # CONFIG_DVB_B2C2_FLEXCOP_PCI_DEBUG is not set CONFIG_DVB_PLUTO2=m @@ -5672,6 +5738,7 @@ CONFIG_MEDIA_COMMON_OPTIONS=y # CONFIG_VIDEO_CX2341X=m CONFIG_VIDEO_TVEEPROM=m +CONFIG_TTPCI_EEPROM=m CONFIG_CYPRESS_FIRMWARE=m CONFIG_VIDEOBUF2_CORE=m CONFIG_VIDEOBUF2_V4L2=m @@ -5761,6 +5828,7 @@ CONFIG_VIDEO_M52790=m CONFIG_VIDEO_APTINA_PLL=m CONFIG_VIDEO_CCS_PLL=m CONFIG_VIDEO_HI556=m +CONFIG_VIDEO_IMX208=m CONFIG_VIDEO_IMX214=m CONFIG_VIDEO_IMX219=m CONFIG_VIDEO_IMX258=m @@ -5946,7 +6014,6 @@ CONFIG_DVB_TDA10071=m # # DVB-T (terrestrial) frontends # -CONFIG_DVB_SP8870=m CONFIG_DVB_SP887X=m CONFIG_DVB_CX22700=m CONFIG_DVB_CX22702=m @@ -6064,7 +6131,6 @@ CONFIG_DRM_MIPI_DSI=y CONFIG_DRM_DP_AUX_CHARDEV=y # CONFIG_DRM_DEBUG_SELFTEST is not set CONFIG_DRM_KMS_HELPER=m -CONFIG_DRM_KMS_FB_HELPER=y CONFIG_DRM_FBDEV_EMULATION=y CONFIG_DRM_FBDEV_OVERALLOC=100 CONFIG_DRM_LOAD_EDID_FIRMWARE=y @@ -6097,7 +6163,6 @@ CONFIG_DRM_AMDGPU=m CONFIG_DRM_AMDGPU_SI=y CONFIG_DRM_AMDGPU_CIK=y CONFIG_DRM_AMDGPU_USERPTR=y -# CONFIG_DRM_AMDGPU_GART_DEBUGFS is not set # # ACP (Audio CoProcessor) Configuration @@ -6112,9 +6177,11 @@ CONFIG_DRM_AMD_DC=y CONFIG_DRM_AMD_DC_DCN=y CONFIG_DRM_AMD_DC_HDCP=y CONFIG_DRM_AMD_DC_SI=y +CONFIG_DRM_AMD_SECURE_DISPLAY=y # end of Display Engine Configuration CONFIG_HSA_AMD=y +CONFIG_HSA_AMD_SVM=y CONFIG_DRM_NOUVEAU=m # CONFIG_NOUVEAU_LEGACY_CTX_SUPPORT is not set CONFIG_NOUVEAU_DEBUG=5 @@ -6130,6 +6197,7 @@ CONFIG_DRM_I915_COMPRESS_ERROR=y CONFIG_DRM_I915_USERPTR=y CONFIG_DRM_I915_GVT=y CONFIG_DRM_I915_GVT_KVMGT=m +CONFIG_DRM_I915_REQUEST_TIMEOUT=20000 CONFIG_DRM_I915_FENCE_TIMEOUT=10000 CONFIG_DRM_I915_USERFAULT_AUTOSUSPEND=250 CONFIG_DRM_I915_HEARTBEAT_INTERVAL=2500 @@ -6142,7 +6210,6 @@ CONFIG_DRM_VKMS=m CONFIG_DRM_VMWGFX=m CONFIG_DRM_VMWGFX_FBCON=y CONFIG_DRM_GMA500=m -CONFIG_DRM_GMA600=y CONFIG_DRM_UDL=m CONFIG_DRM_AST=m CONFIG_DRM_MGAG200=m @@ -6170,6 +6237,7 @@ CONFIG_DRM_ANALOGIX_DP=m # CONFIG_DRM_ETNAVIV is not set CONFIG_DRM_CIRRUS_QEMU=m CONFIG_DRM_GM12U320=m +CONFIG_DRM_SIMPLEDRM=m CONFIG_TINYDRM_HX8357D=m CONFIG_TINYDRM_ILI9225=m CONFIG_TINYDRM_ILI9341=m @@ -6181,6 +6249,8 @@ CONFIG_TINYDRM_ST7735R=m CONFIG_DRM_XEN=y CONFIG_DRM_XEN_FRONTEND=m CONFIG_DRM_VBOXVIDEO=m +CONFIG_DRM_GUD=m +CONFIG_DRM_HYPERV=m # CONFIG_DRM_LEGACY is not set CONFIG_DRM_PANEL_ORIENTATION_QUIRKS=y @@ -6252,6 +6322,7 @@ CONFIG_XEN_FBDEV_FRONTEND=m # CONFIG_FB_MB862XX is not set CONFIG_FB_HYPERV=m CONFIG_FB_SIMPLE=y +# CONFIG_FB_SSD1307 is not set # CONFIG_FB_SM712 is not set # end of Frame buffer Devices @@ -6280,6 +6351,7 @@ CONFIG_BACKLIGHT_DA9052=m CONFIG_BACKLIGHT_MAX8925=m CONFIG_BACKLIGHT_APPLE=m CONFIG_BACKLIGHT_QCOM_WLED=m +CONFIG_BACKLIGHT_RT4831=m CONFIG_BACKLIGHT_SAHARA=m CONFIG_BACKLIGHT_WM831X=m CONFIG_BACKLIGHT_ADP5520=m @@ -6355,6 +6427,7 @@ CONFIG_SND_DEBUG=y # CONFIG_SND_JACK_INJECTION_DEBUG is not set CONFIG_SND_VMASTER=y CONFIG_SND_DMA_SGBUF=y +CONFIG_SND_CTL_LED=m CONFIG_SND_SEQUENCER=m CONFIG_SND_SEQ_DUMMY=m CONFIG_SND_SEQUENCER_OSS=m @@ -6560,6 +6633,7 @@ CONFIG_SND_DESIGNWARE_PCM=y # CONFIG_SND_SOC_FSL_ESAI is not set # CONFIG_SND_SOC_FSL_MICFIL is not set CONFIG_SND_SOC_FSL_XCVR=m +CONFIG_SND_SOC_FSL_RPMSG=m # CONFIG_SND_SOC_IMX_AUDMUX is not set # end of SoC Audio for Freescale CPUs @@ -6593,6 +6667,8 @@ CONFIG_SND_SOC_INTEL_SKYLAKE_COMMON=m CONFIG_SND_SOC_ACPI_INTEL_MATCH=m CONFIG_SND_SOC_INTEL_MACH=y CONFIG_SND_SOC_INTEL_USER_FRIENDLY_LONG_NAMES=y +CONFIG_SND_SOC_INTEL_HDA_DSP_COMMON=m +CONFIG_SND_SOC_INTEL_SOF_MAXIM_COMMON=m CONFIG_SND_SOC_INTEL_HASWELL_MACH=m CONFIG_SND_SOC_INTEL_BDW_RT5650_MACH=m CONFIG_SND_SOC_INTEL_BDW_RT5677_MACH=m @@ -6625,6 +6701,7 @@ CONFIG_SND_SOC_INTEL_GLK_DA7219_MAX98357A_MACH=m CONFIG_SND_SOC_INTEL_GLK_RT5682_MAX98357A_MACH=m CONFIG_SND_SOC_INTEL_SKL_HDA_DSP_GENERIC_MACH=m CONFIG_SND_SOC_INTEL_SOF_RT5682_MACH=m +CONFIG_SND_SOC_INTEL_SOF_CS42L42_MACH=m CONFIG_SND_SOC_INTEL_SOF_PCM512x_MACH=m CONFIG_SND_SOC_INTEL_CML_LP_DA7219_MAX98357A_MACH=m CONFIG_SND_SOC_INTEL_SOF_CML_RT1011_RT5682_MACH=m @@ -6789,8 +6866,10 @@ CONFIG_SND_SOC_RT286=m CONFIG_SND_SOC_RT298=m CONFIG_SND_SOC_RT1011=m CONFIG_SND_SOC_RT1015=m +CONFIG_SND_SOC_RT1015P=m CONFIG_SND_SOC_RT1308=m CONFIG_SND_SOC_RT1308_SDW=m +CONFIG_SND_SOC_RT1316_SDW=m CONFIG_SND_SOC_RT5514=m CONFIG_SND_SOC_RT5514_SPI=m CONFIG_SND_SOC_RT5616=m @@ -6811,8 +6890,10 @@ CONFIG_SND_SOC_RT700=m CONFIG_SND_SOC_RT700_SDW=m CONFIG_SND_SOC_RT711=m CONFIG_SND_SOC_RT711_SDW=m +CONFIG_SND_SOC_RT711_SDCA_SDW=m CONFIG_SND_SOC_RT715=m CONFIG_SND_SOC_RT715_SDW=m +CONFIG_SND_SOC_RT715_SDCA_SDW=m CONFIG_SND_SOC_SGTL5000=m CONFIG_SND_SOC_SI476X=m CONFIG_SND_SOC_SIGMADSP=m @@ -6822,6 +6903,7 @@ CONFIG_SND_SOC_SIMPLE_AMPLIFIER=m CONFIG_SND_SOC_SIMPLE_MUX=m CONFIG_SND_SOC_SPDIF=m CONFIG_SND_SOC_SSM2305=m +CONFIG_SND_SOC_SSM2518=m CONFIG_SND_SOC_SSM2602=m CONFIG_SND_SOC_SSM2602_SPI=m CONFIG_SND_SOC_SSM2602_I2C=m @@ -6839,6 +6921,7 @@ CONFIG_SND_SOC_TAS5720=m CONFIG_SND_SOC_TAS6424=m CONFIG_SND_SOC_TDA7419=m CONFIG_SND_SOC_TFA9879=m +CONFIG_SND_SOC_TFA989X=m CONFIG_SND_SOC_TLV320AIC23=m CONFIG_SND_SOC_TLV320AIC23_I2C=m CONFIG_SND_SOC_TLV320AIC23_SPI=m @@ -6847,13 +6930,18 @@ CONFIG_SND_SOC_TLV320AIC32X4=m CONFIG_SND_SOC_TLV320AIC32X4_I2C=m CONFIG_SND_SOC_TLV320AIC32X4_SPI=m CONFIG_SND_SOC_TLV320AIC3X=m +CONFIG_SND_SOC_TLV320AIC3X_I2C=m +CONFIG_SND_SOC_TLV320AIC3X_SPI=m CONFIG_SND_SOC_TLV320ADCX140=m CONFIG_SND_SOC_TS3A227E=m CONFIG_SND_SOC_TSCS42XX=m CONFIG_SND_SOC_TSCS454=m CONFIG_SND_SOC_UDA1334=m CONFIG_SND_SOC_WCD9335=m +CONFIG_SND_SOC_WCD_MBHC=m CONFIG_SND_SOC_WCD934X=m +CONFIG_SND_SOC_WCD938X=m +CONFIG_SND_SOC_WCD938X_SDW=m CONFIG_SND_SOC_WM5102=m CONFIG_SND_SOC_WM8510=m CONFIG_SND_SOC_WM8523=m @@ -6881,7 +6969,6 @@ CONFIG_SND_SOC_WM8978=m CONFIG_SND_SOC_WM8985=m CONFIG_SND_SOC_WSA881X=m CONFIG_SND_SOC_ZL38060=m -CONFIG_SND_SOC_ZX_AUD96P22=m CONFIG_SND_SOC_MAX9759=m CONFIG_SND_SOC_MT6351=m CONFIG_SND_SOC_MT6358=m @@ -6905,6 +6992,7 @@ CONFIG_SND_X86=y CONFIG_HDMI_LPE_AUDIO=m CONFIG_SND_SYNTH_EMUX=m CONFIG_SND_XEN_FRONTEND=m +CONFIG_SND_VIRTIO=m CONFIG_AC97_BUS=m # @@ -6947,6 +7035,7 @@ CONFIG_HID_ELAN=m CONFIG_HID_ELECOM=m CONFIG_HID_ELO=m CONFIG_HID_EZKEY=m +CONFIG_HID_FT260=m CONFIG_HID_GEMBIRD=m CONFIG_HID_GFRM=m CONFIG_HID_GLORIOUS=m @@ -7004,6 +7093,7 @@ CONFIG_HID_RETRODE=m CONFIG_HID_ROCCAT=m CONFIG_HID_SAITEK=m CONFIG_HID_SAMSUNG=m +CONFIG_HID_SEMITEK=m CONFIG_HID_SONY=m CONFIG_SONY_FF=y CONFIG_HID_SPEEDLINK=m @@ -7063,6 +7153,15 @@ CONFIG_INTEL_ISH_FIRMWARE_DOWNLOADER=m # CONFIG_AMD_SFH_HID=m # end of AMD SFH HID Support + +# +# Surface System Aggregator Module HID support +# +CONFIG_SURFACE_HID=m +CONFIG_SURFACE_KBD=m +# end of Surface System Aggregator Module HID support + +CONFIG_SURFACE_HID_CORE=m # end of HID support CONFIG_USB_OHCI_LITTLE_ENDIAN=y @@ -7296,8 +7395,8 @@ CONFIG_TYPEC_WCOVE=m CONFIG_TYPEC_UCSI=m CONFIG_UCSI_CCG=m CONFIG_UCSI_ACPI=m -CONFIG_TYPEC_HD3SS3220=m CONFIG_TYPEC_TPS6598X=m +CONFIG_TYPEC_HD3SS3220=m CONFIG_TYPEC_STUSB160X=m # @@ -7407,6 +7506,7 @@ CONFIG_LEDS_PWM=m CONFIG_LEDS_REGULATOR=m CONFIG_LEDS_BD2802=m CONFIG_LEDS_INTEL_SS4200=m +CONFIG_LEDS_LT3593=m CONFIG_LEDS_ADP5520=m CONFIG_LEDS_MC13783=m CONFIG_LEDS_TCA6507=m @@ -7458,11 +7558,6 @@ CONFIG_LEDS_TRIGGER_NETDEV=m CONFIG_LEDS_TRIGGER_PATTERN=m CONFIG_LEDS_TRIGGER_AUDIO=m CONFIG_LEDS_TRIGGER_TTY=m - -# -# LED Blink -# -CONFIG_LEDS_BLINK=y CONFIG_ACCESSIBILITY=y CONFIG_A11Y_BRAILLE_CONSOLE=y @@ -7497,7 +7592,7 @@ CONFIG_INFINIBAND_QIB=m CONFIG_INFINIBAND_QIB_DCA=y CONFIG_INFINIBAND_CXGB4=m CONFIG_INFINIBAND_EFA=m -CONFIG_INFINIBAND_I40IW=m +CONFIG_INFINIBAND_IRDMA=m CONFIG_MLX4_INFINIBAND=m CONFIG_MLX5_INFINIBAND=m CONFIG_INFINIBAND_OCRDMA=m @@ -7546,6 +7641,7 @@ CONFIG_EDAC_SBRIDGE=m CONFIG_EDAC_SKX=m CONFIG_EDAC_I10NM=m CONFIG_EDAC_PND2=m +CONFIG_EDAC_IGEN6=m CONFIG_RTC_LIB=y CONFIG_RTC_MC146818_LIB=y CONFIG_RTC_CLASS=y @@ -7610,7 +7706,6 @@ CONFIG_RTC_DRV_EM3027=m CONFIG_RTC_DRV_RV3028=m CONFIG_RTC_DRV_RV3032=m CONFIG_RTC_DRV_RV8803=m -CONFIG_RTC_DRV_S5M=m CONFIG_RTC_DRV_SD3078=m # @@ -7685,6 +7780,7 @@ CONFIG_RTC_DRV_MT6397=m # HID Sensor RTC drivers # CONFIG_RTC_DRV_HID_SENSOR_TIME=m +CONFIG_RTC_DRV_GOLDFISH=m CONFIG_RTC_DRV_WILCO_EC=m CONFIG_DMADEVICES=y # CONFIG_DMADEVICES_DEBUG is not set @@ -7699,6 +7795,7 @@ CONFIG_ALTERA_MSGDMA=m CONFIG_INTEL_IDMA64=m CONFIG_INTEL_IDXD=m CONFIG_INTEL_IDXD_SVM=y +CONFIG_INTEL_IDXD_PERFMON=y CONFIG_INTEL_IOATDMA=m CONFIG_PLX_DMA=m CONFIG_QCOM_HIDMA_MGMT=m @@ -7764,6 +7861,7 @@ CONFIG_UIO_NETX=m CONFIG_UIO_PRUSS=m CONFIG_UIO_MF624=m CONFIG_UIO_HV_GENERIC=m +CONFIG_UIO_DFL=m CONFIG_VFIO_IOMMU_TYPE1=m CONFIG_VFIO_VIRQFD=m CONFIG_VFIO=m @@ -7774,13 +7872,13 @@ CONFIG_VFIO_PCI_MMAP=y CONFIG_VFIO_PCI_INTX=y CONFIG_VFIO_PCI_IGD=y CONFIG_VFIO_MDEV=m -CONFIG_VFIO_MDEV_DEVICE=m CONFIG_IRQ_BYPASS_MANAGER=m CONFIG_VIRT_DRIVERS=y CONFIG_VBOXGUEST=m CONFIG_NITRO_ENCLAVES=m CONFIG_ACRN_HSM=m CONFIG_VIRTIO=y +CONFIG_ARCH_HAS_RESTRICTED_VIRTIO_MEMORY_ACCESS=y CONFIG_VIRTIO_PCI_LIB=m CONFIG_VIRTIO_MENU=y CONFIG_VIRTIO_PCI=m @@ -7796,9 +7894,11 @@ CONFIG_VIRTIO_DMA_SHARED_BUFFER=m CONFIG_VDPA=m CONFIG_VDPA_SIM=m CONFIG_VDPA_SIM_NET=m +CONFIG_VDPA_SIM_BLOCK=m CONFIG_IFCVF=m CONFIG_MLX5_VDPA=y CONFIG_MLX5_VDPA_NET=m +CONFIG_VP_VDPA=m CONFIG_VHOST_IOTLB=m CONFIG_VHOST_RING=m CONFIG_VHOST=m @@ -7854,9 +7954,9 @@ CONFIG_XEN_UNPOPULATED_ALLOC=y # end of Xen driver support # CONFIG_GREYBUS is not set +# CONFIG_COMEDI is not set CONFIG_STAGING=y CONFIG_PRISM2_USB=m -# CONFIG_COMEDI is not set CONFIG_RTL8192U=m CONFIG_RTLLIB=m CONFIG_RTLLIB_CRYPTO_CCMP=m @@ -7900,7 +8000,6 @@ CONFIG_ADT7316_I2C=m # # Capacitance to digital converters # -CONFIG_AD7150=m CONFIG_AD7746=m # end of Capacitance to digital converters @@ -7947,6 +8046,11 @@ CONFIG_VIDEO_ATOMISP_OV5693=m CONFIG_VIDEO_ATOMISP_LM3554=m # CONFIG_VIDEO_ZORAN is not set CONFIG_VIDEO_IPU3_IMGU=m +CONFIG_DVB_AV7110_IR=y +CONFIG_DVB_AV7110=m +CONFIG_DVB_AV7110_OSD=y +CONFIG_DVB_BUDGET_PATCH=m +CONFIG_DVB_SP8870=m # # Android @@ -7965,31 +8069,12 @@ CONFIG_UNISYS_VISORHBA=m # CONFIG_FB_TFT is not set CONFIG_MOST_COMPONENTS=m CONFIG_MOST_NET=m -CONFIG_MOST_SOUND=m CONFIG_MOST_VIDEO=m CONFIG_MOST_I2C=m CONFIG_KS7010=m CONFIG_PI433=m - -# -# Gasket devices -# -CONFIG_STAGING_GASKET_FRAMEWORK=m -CONFIG_STAGING_APEX_DRIVER=m -# end of Gasket devices - CONFIG_FIELDBUS_DEV=m -CONFIG_KPC2000=y -CONFIG_KPC2000_CORE=m -CONFIG_KPC2000_SPI=m -CONFIG_KPC2000_I2C=m -CONFIG_KPC2000_DMA=m CONFIG_QLGE=m -CONFIG_WIMAX=m -CONFIG_WIMAX_DEBUG_LEVEL=8 -CONFIG_WIMAX_I2400M=m -CONFIG_WIMAX_I2400M_USB=m -CONFIG_WIMAX_I2400M_DEBUG_LEVEL=8 CONFIG_WFX=m CONFIG_X86_PLATFORM_DEVICES=y CONFIG_ACPI_WMI=m @@ -8000,10 +8085,12 @@ CONFIG_INTEL_WMI_THUNDERBOLT=m CONFIG_MXM_WMI=m CONFIG_PEAQ_WMI=m CONFIG_XIAOMI_WMI=m +CONFIG_GIGABYTE_WMI=m CONFIG_ACERHDF=m CONFIG_ACER_WIRELESS=m CONFIG_ACER_WMI=m CONFIG_AMD_PMC=m +CONFIG_ADV_SWBUTTON=m CONFIG_APPLE_GMUX=m CONFIG_ASUS_LAPTOP=m CONFIG_ASUS_WIRELESS=m @@ -8022,6 +8109,7 @@ CONFIG_DELL_SMBIOS_WMI=y CONFIG_DELL_SMBIOS_SMM=y CONFIG_DELL_SMO8800=m CONFIG_DELL_WMI=m +CONFIG_DELL_WMI_PRIVACY=y CONFIG_DELL_WMI_AIO=m CONFIG_DELL_WMI_DESCRIPTOR=m CONFIG_DELL_WMI_LED=m @@ -8031,7 +8119,7 @@ CONFIG_FUJITSU_LAPTOP=m CONFIG_FUJITSU_TABLET=m CONFIG_GPD_POCKET_FAN=m CONFIG_HP_ACCEL=m -CONFIG_HP_WIRELESS=m +CONFIG_WIRELESS_HOTKEY=m CONFIG_HP_WMI=m CONFIG_IBM_RTL=m CONFIG_IDEAPAD_LAPTOP=m @@ -8043,8 +8131,11 @@ CONFIG_THINKPAD_ACPI_ALSA_SUPPORT=y # CONFIG_THINKPAD_ACPI_UNSAFE_LEDS is not set CONFIG_THINKPAD_ACPI_VIDEO=y CONFIG_THINKPAD_ACPI_HOTKEY_POLL=y -CONFIG_INTEL_ATOMISP2_LED=m +CONFIG_THINKPAD_LMI=m +CONFIG_X86_PLATFORM_DRIVERS_INTEL=y CONFIG_INTEL_CHT_INT33FE=m +CONFIG_INTEL_SKL_INT3472=m +CONFIG_INTEL_ATOMISP2_LED=m CONFIG_INTEL_HID_EVENT=m CONFIG_INTEL_INT0002_VGPIO=m CONFIG_INTEL_MENLOW=m @@ -8070,6 +8161,7 @@ CONFIG_TOPSTAR_LAPTOP=m CONFIG_I2C_MULTI_INSTANTIATE=m CONFIG_MLX_PLATFORM=m CONFIG_TOUCHSCREEN_DMI=y +CONFIG_FW_ATTR_CLASS=m CONFIG_INTEL_IPS=m CONFIG_INTEL_RST=m CONFIG_INTEL_SMARTCONNECT=m @@ -8129,24 +8221,34 @@ CONFIG_SURFACE_3_BUTTON=m CONFIG_SURFACE_3_POWER_OPREGION=m CONFIG_SURFACE_ACPI_NOTIFY=m CONFIG_SURFACE_AGGREGATOR_CDEV=m +CONFIG_SURFACE_AGGREGATOR_REGISTRY=m +CONFIG_SURFACE_DTX=m CONFIG_SURFACE_GPE=m CONFIG_SURFACE_HOTPLUG=m +CONFIG_SURFACE_PLATFORM_PROFILE=m CONFIG_SURFACE_PRO3_BUTTON=m CONFIG_SURFACE_AGGREGATOR=m CONFIG_SURFACE_AGGREGATOR_BUS=y # CONFIG_SURFACE_AGGREGATOR_ERROR_INJECTION is not set CONFIG_HAVE_CLK=y -CONFIG_CLKDEV_LOOKUP=y CONFIG_HAVE_CLK_PREPARE=y CONFIG_COMMON_CLK=y CONFIG_COMMON_CLK_WM831X=m + +# +# Clock driver for ARM Reference designs +# +# CONFIG_ICST is not set +# CONFIG_CLK_SP810 is not set +# end of Clock driver for ARM Reference designs + +CONFIG_LMK04832=m CONFIG_COMMON_CLK_MAX9485=m CONFIG_COMMON_CLK_SI5341=m CONFIG_COMMON_CLK_SI5351=m CONFIG_COMMON_CLK_SI544=m CONFIG_COMMON_CLK_CDCE706=m CONFIG_COMMON_CLK_CS2000_CP=m -CONFIG_COMMON_CLK_S2MPS11=m CONFIG_CLK_TWL6040=m CONFIG_COMMON_CLK_PALMAS=m CONFIG_COMMON_CLK_PWM=m @@ -8178,6 +8280,7 @@ CONFIG_IOMMU_IO_PGTABLE=y # CONFIG_IOMMU_DEBUGFS is not set # CONFIG_IOMMU_DEFAULT_PASSTHROUGH is not set CONFIG_IOMMU_DMA=y +CONFIG_IOMMU_SVA_LIB=y CONFIG_AMD_IOMMU=y CONFIG_AMD_IOMMU_V2=y CONFIG_DMAR_TABLE=y @@ -8188,6 +8291,7 @@ CONFIG_INTEL_IOMMU_FLOPPY_WA=y CONFIG_INTEL_IOMMU_SCALABLE_MODE_DEFAULT_ON=y CONFIG_IRQ_REMAP=y CONFIG_HYPERV_IOMMU=y +CONFIG_VIRTIO_IOMMU=m # # Remoteproc drivers @@ -8281,7 +8385,6 @@ CONFIG_EXTCON=y # Extcon Device Drivers # CONFIG_EXTCON_ADC_JACK=m -CONFIG_EXTCON_ARIZONA=m CONFIG_EXTCON_AXP288=m CONFIG_EXTCON_FSA9480=m CONFIG_EXTCON_GPIO=m @@ -8332,10 +8435,15 @@ CONFIG_BMA400_SPI=m CONFIG_BMC150_ACCEL=m CONFIG_BMC150_ACCEL_I2C=m CONFIG_BMC150_ACCEL_SPI=m +CONFIG_BMI088_ACCEL=m +CONFIG_BMI088_ACCEL_SPI=m CONFIG_DA280=m CONFIG_DA311=m CONFIG_DMARD09=m CONFIG_DMARD10=m +CONFIG_FXLS8962AF=m +CONFIG_FXLS8962AF_I2C=m +CONFIG_FXLS8962AF_SPI=m CONFIG_HID_SENSOR_ACCEL_3D=m CONFIG_IIO_CROS_EC_ACCEL_LEGACY=m CONFIG_IIO_ST_ACCEL_3AXIS=m @@ -8357,6 +8465,7 @@ CONFIG_MMA9553=m CONFIG_MXC4005=m CONFIG_MXC6255=m CONFIG_SCA3000=m +CONFIG_SCA3300=m CONFIG_STK8312=m CONFIG_STK8BA50=m # end of Accelerometers @@ -8422,8 +8531,10 @@ CONFIG_TI_ADC128S052=m CONFIG_TI_ADC161S626=m CONFIG_TI_ADS1015=m CONFIG_TI_ADS7950=m +CONFIG_TI_ADS131E08=m CONFIG_TI_AM335X_ADC=m CONFIG_TI_TLC4541=m +CONFIG_TI_TSC2046=m CONFIG_TWL4030_MADC=m CONFIG_TWL6030_GPADC=m CONFIG_VIPERBOARD_ADC=m @@ -8443,6 +8554,12 @@ CONFIG_HMC425=m # end of Amplifiers # +# Capacitance to digital converters +# +CONFIG_AD7150=m +# end of Capacitance to digital converters + +# # Chemical Sensors # CONFIG_ATLAS_PH_SENSOR=m @@ -8458,6 +8575,8 @@ CONFIG_SCD30_I2C=m CONFIG_SCD30_SERIAL=m CONFIG_SENSIRION_SGP30=m CONFIG_SPS30=m +CONFIG_SPS30_I2C=m +CONFIG_SPS30_SERIAL=m CONFIG_VZ89X=m # end of Chemical Sensors @@ -8475,6 +8594,11 @@ CONFIG_HID_SENSOR_IIO_TRIGGER=m CONFIG_IIO_MS_SENSORS_I2C=m # +# IIO SCMI Sensors +# +# end of IIO SCMI Sensors + +# # SSP Sensor Common # CONFIG_IIO_SSP_SENSORS_COMMONS=m @@ -8625,6 +8749,9 @@ CONFIG_INV_MPU6050_SPI=m CONFIG_IIO_ST_LSM6DSX=m CONFIG_IIO_ST_LSM6DSX_I2C=m CONFIG_IIO_ST_LSM6DSX_SPI=m +CONFIG_IIO_ST_LSM9DS0=m +CONFIG_IIO_ST_LSM9DS0_I2C=m +CONFIG_IIO_ST_LSM9DS0_SPI=m # end of Inertial measurement units CONFIG_IIO_ADIS_LIB=m @@ -8676,6 +8803,7 @@ CONFIG_TCS3414=m CONFIG_TCS3472=m CONFIG_SENSORS_TSL2563=m CONFIG_TSL2583=m +CONFIG_TSL2591=m CONFIG_TSL2772=m CONFIG_TSL4531=m CONFIG_US5182D=m @@ -8799,6 +8927,7 @@ CONFIG_AS3935=m # # Proximity and distance sensors # +CONFIG_CROS_EC_MKBP_PROXIMITY=m CONFIG_ISL29501=m CONFIG_LIDAR_LITE_V2=m CONFIG_MB1232=m @@ -8830,6 +8959,7 @@ CONFIG_MLX90614=m CONFIG_MLX90632=m CONFIG_TMP006=m CONFIG_TMP007=m +CONFIG_TMP117=m CONFIG_TSYS01=m CONFIG_TSYS02D=m CONFIG_MAX31856=m @@ -8873,7 +9003,6 @@ CONFIG_IPACK_BUS=m CONFIG_BOARD_TPCI200=m CONFIG_SERIAL_IPOCTAL=m CONFIG_RESET_CONTROLLER=y -CONFIG_RESET_BRCMSTB_RESCAL=y CONFIG_RESET_TI_SYSCON=m # @@ -8881,6 +9010,7 @@ CONFIG_RESET_TI_SYSCON=m # CONFIG_GENERIC_PHY=y CONFIG_USB_LGM_PHY=m +CONFIG_PHY_CAN_TRANSCEIVER=m CONFIG_BCM_KONA_USB2_PHY=m CONFIG_PHY_PXA_28NM_HSIC=m CONFIG_PHY_PXA_28NM_USB2=m @@ -9005,9 +9135,12 @@ CONFIG_SLIMBUS=m CONFIG_SLIM_QCOM_CTRL=m CONFIG_INTERCONNECT=y CONFIG_COUNTER=m +CONFIG_INTERRUPT_CNT=m +CONFIG_INTEL_QEP=m CONFIG_MOST=m CONFIG_MOST_USB_HDM=m CONFIG_MOST_CDEV=m +CONFIG_MOST_SND=m # end of Device Drivers # @@ -9117,6 +9250,8 @@ CONFIG_OVERLAY_FS_METACOPY=y # # Caches # +CONFIG_NETFS_SUPPORT=m +CONFIG_NETFS_STATS=y CONFIG_FSCACHE=m CONFIG_FSCACHE_STATS=y # CONFIG_FSCACHE_HISTOGRAM is not set @@ -9169,6 +9304,8 @@ CONFIG_TMPFS_XATTR=y CONFIG_TMPFS_INODE64=y CONFIG_HUGETLBFS=y CONFIG_HUGETLB_PAGE=y +CONFIG_HUGETLB_PAGE_FREE_VMEMMAP=y +# CONFIG_HUGETLB_PAGE_FREE_VMEMMAP_DEFAULT_ON is not set CONFIG_MEMFD_CREATE=y CONFIG_ARCH_HAS_GIGANTIC_PAGE=y CONFIG_CONFIGFS_FS=y @@ -9265,7 +9402,6 @@ CONFIG_EROFS_FS_XATTR=y CONFIG_EROFS_FS_POSIX_ACL=y CONFIG_EROFS_FS_SECURITY=y CONFIG_EROFS_FS_ZIP=y -CONFIG_EROFS_FS_CLUSTER_PAGE_LIMIT=2 CONFIG_VBOXSF_FS=m CONFIG_NETWORK_FILESYSTEMS=y CONFIG_NFS_FS=m @@ -9303,7 +9439,7 @@ CONFIG_LOCKD=m CONFIG_LOCKD_V4=y CONFIG_NFS_ACL_SUPPORT=m CONFIG_NFS_COMMON=y -CONFIG_NFS_V4_2_SSC_HELPER=m +CONFIG_NFS_V4_2_SSC_HELPER=y CONFIG_SUNRPC=m CONFIG_SUNRPC_GSS=m CONFIG_SUNRPC_BACKCHANNEL=y @@ -9452,6 +9588,7 @@ CONFIG_SECURITY_LOCKDOWN_LSM=y CONFIG_LOCK_DOWN_KERNEL_FORCE_NONE=y # CONFIG_LOCK_DOWN_KERNEL_FORCE_INTEGRITY is not set # CONFIG_LOCK_DOWN_KERNEL_FORCE_CONFIDENTIALITY is not set +CONFIG_SECURITY_LANDLOCK=y # CONFIG_INTEGRITY is not set # CONFIG_IMA_SECURE_AND_OR_TRUSTED_BOOT is not set # CONFIG_DEFAULT_SECURITY_SELINUX is not set @@ -9459,7 +9596,7 @@ CONFIG_LOCK_DOWN_KERNEL_FORCE_NONE=y # CONFIG_DEFAULT_SECURITY_TOMOYO is not set # CONFIG_DEFAULT_SECURITY_APPARMOR is not set CONFIG_DEFAULT_SECURITY_DAC=y -CONFIG_LSM="lockdown,yama,bpf" +CONFIG_LSM="landlock,lockdown,yama,bpf" # # Kernel hardening options @@ -9534,6 +9671,7 @@ CONFIG_CRYPTO_RSA=y CONFIG_CRYPTO_DH=y CONFIG_CRYPTO_ECC=m CONFIG_CRYPTO_ECDH=m +CONFIG_CRYPTO_ECDSA=m CONFIG_CRYPTO_ECRDSA=m CONFIG_CRYPTO_SM2=m CONFIG_CRYPTO_CURVE25519=m @@ -9789,10 +9927,10 @@ CONFIG_842_COMPRESS=m CONFIG_842_DECOMPRESS=m CONFIG_ZLIB_INFLATE=y CONFIG_ZLIB_DEFLATE=y -CONFIG_LZO_COMPRESS=y +CONFIG_LZO_COMPRESS=m CONFIG_LZO_DECOMPRESS=y CONFIG_LZ4_COMPRESS=y -CONFIG_LZ4HC_COMPRESS=y +CONFIG_LZ4HC_COMPRESS=m CONFIG_LZ4_DECOMPRESS=y CONFIG_ZSTD_COMPRESS=y CONFIG_ZSTD_DECOMPRESS=y @@ -9890,10 +10028,10 @@ CONFIG_ARCH_STACKWALK=y CONFIG_SBITMAP=y CONFIG_PARMAN=m CONFIG_OBJAGG=m -# CONFIG_STRING_SELFTEST is not set # end of Library routines CONFIG_PLDMFW=y +CONFIG_ASN1_ENCODER=m # # Kernel hacking @@ -9904,6 +10042,7 @@ CONFIG_PLDMFW=y # CONFIG_PRINTK_TIME=y # CONFIG_PRINTK_CALLER is not set +# CONFIG_STACKTRACE_BUILD_ID is not set CONFIG_CONSOLE_LOGLEVEL_DEFAULT=4 CONFIG_CONSOLE_LOGLEVEL_QUIET=1 CONFIG_MESSAGE_LOGLEVEL_DEFAULT=4 @@ -9993,9 +10132,10 @@ CONFIG_CC_HAS_WORKING_NOSANITIZE_ADDRESS=y CONFIG_HAVE_ARCH_KFENCE=y CONFIG_KFENCE=y CONFIG_KFENCE_STATIC_KEYS=y -CONFIG_KFENCE_SAMPLE_INTERVAL=0 +CONFIG_KFENCE_SAMPLE_INTERVAL=100 CONFIG_KFENCE_NUM_OBJECTS=255 CONFIG_KFENCE_STRESS_TEST_FAULTS=0 +CONFIG_KFENCE_BUG_ON_DATA_CORRUPTION=y # end of Memory Debugging CONFIG_DEBUG_SHIRQ=y @@ -10080,7 +10220,6 @@ CONFIG_DEBUG_CREDENTIALS=y CONFIG_RCU_CPU_STALL_TIMEOUT=60 # CONFIG_RCU_TRACE is not set # CONFIG_RCU_EQS_DEBUG is not set -# CONFIG_RCU_STRICT_GRACE_PERIOD is not set # end of RCU Debugging # CONFIG_DEBUG_WQ_FORCE_RR_CPU is not set @@ -10115,12 +10254,15 @@ CONFIG_FUNCTION_GRAPH_TRACER=y CONFIG_DYNAMIC_FTRACE=y CONFIG_DYNAMIC_FTRACE_WITH_REGS=y CONFIG_DYNAMIC_FTRACE_WITH_DIRECT_CALLS=y +CONFIG_DYNAMIC_FTRACE_WITH_ARGS=y CONFIG_FUNCTION_PROFILER=y CONFIG_STACK_TRACER=y # CONFIG_IRQSOFF_TRACER is not set # CONFIG_PREEMPT_TRACER is not set CONFIG_SCHED_TRACER=y CONFIG_HWLAT_TRACER=y +CONFIG_OSNOISE_TRACER=y +CONFIG_TIMERLAT_TRACER=y CONFIG_MMIOTRACE=y CONFIG_FTRACE_SYSCALLS=y CONFIG_TRACER_SNAPSHOT=y @@ -10195,9 +10337,9 @@ CONFIG_CC_HAS_SANCOV_TRACE_PC=y # CONFIG_KCOV is not set CONFIG_RUNTIME_TESTING_MENU=y # CONFIG_LKDTM is not set -# CONFIG_TEST_LIST_SORT is not set # CONFIG_TEST_MIN_HEAP is not set # CONFIG_TEST_SORT is not set +# CONFIG_TEST_DIV64 is not set # CONFIG_KPROBES_SANITY_TEST is not set # CONFIG_BACKTRACE_SELF_TEST is not set # CONFIG_RBTREE_TEST is not set @@ -10207,10 +10349,12 @@ CONFIG_RUNTIME_TESTING_MENU=y CONFIG_ATOMIC64_SELFTEST=y CONFIG_ASYNC_RAID6_TEST=m # CONFIG_TEST_HEXDUMP is not set +# CONFIG_STRING_SELFTEST is not set # CONFIG_TEST_STRING_HELPERS is not set # CONFIG_TEST_STRSCPY is not set CONFIG_TEST_KSTRTOX=y # CONFIG_TEST_PRINTF is not set +# CONFIG_TEST_SCANF is not set # CONFIG_TEST_BITMAP is not set # CONFIG_TEST_UUID is not set # CONFIG_TEST_XARRAY is not set @@ -10239,6 +10383,8 @@ CONFIG_TEST_KSTRTOX=y # CONFIG_TEST_HMM is not set # CONFIG_TEST_FREE_PAGES is not set # CONFIG_TEST_FPU is not set +# CONFIG_TEST_CLOCKSOURCE_WATCHDOG is not set +CONFIG_ARCH_USE_MEMTEST=y # CONFIG_MEMTEST is not set # CONFIG_HYPERV_TESTING is not set # end of Kernel Testing and Coverage From 9754fd489449d9df05eeeecf6bff7bcd720a4b86 Mon Sep 17 00:00:00 2001 From: David P Date: Oct 13 2021 01:31:44 +0000 Subject: [PATCH 7/73] updpkg: libre/linux-libre-pae 5.14.11-1 Signed-off-by: David P --- diff --git a/libre/linux-libre-pae/0001-ZEN-Add-sysctl-and-CONFIG-to-disallow-unprivileged-C.patch b/libre/linux-libre-pae/0001-ZEN-Add-sysctl-and-CONFIG-to-disallow-unprivileged-C.patch index c5e5b05..46cfcfa 100644 --- a/libre/linux-libre-pae/0001-ZEN-Add-sysctl-and-CONFIG-to-disallow-unprivileged-C.patch +++ b/libre/linux-libre-pae/0001-ZEN-Add-sysctl-and-CONFIG-to-disallow-unprivileged-C.patch @@ -1,7 +1,7 @@ -From 90de407f12e8ed9cb361678882c2af236b06107e Mon Sep 17 00:00:00 2001 +From f76db6fc04fadf872a138740592b4e8ec9ba9149 Mon Sep 17 00:00:00 2001 From: "Jan Alexander Steffens (heftig)" Date: Mon, 16 Sep 2019 04:53:20 +0200 -Subject: [PATCH 1/2] ZEN: Add sysctl and CONFIG to disallow unprivileged +Subject: [PATCH 1/6] ZEN: Add sysctl and CONFIG to disallow unprivileged CLONE_NEWUSER Our default behavior continues to match the vanilla kernel. @@ -14,10 +14,10 @@ Our default behavior continues to match the vanilla kernel. 5 files changed, 53 insertions(+) diff --git a/include/linux/user_namespace.h b/include/linux/user_namespace.h -index bfa6463f8a95..27aa2bd5e50a 100644 +index eb70cabe6e7f..dda54e3bc47c 100644 --- a/include/linux/user_namespace.h +++ b/include/linux/user_namespace.h -@@ -116,6 +116,8 @@ void put_ucounts(struct ucounts *ucounts); +@@ -137,6 +137,8 @@ static inline void set_rlimit_ucount_max(struct user_namespace *ns, #ifdef CONFIG_USER_NS @@ -26,7 +26,7 @@ index bfa6463f8a95..27aa2bd5e50a 100644 static inline struct user_namespace *get_user_ns(struct user_namespace *ns) { if (ns) -@@ -149,6 +151,8 @@ extern bool current_in_userns(const struct user_namespace *target_ns); +@@ -170,6 +172,8 @@ extern bool current_in_userns(const struct user_namespace *target_ns); struct ns_common *ns_get_owner(struct ns_common *ns); #else @@ -36,10 +36,10 @@ index bfa6463f8a95..27aa2bd5e50a 100644 { return &init_user_ns; diff --git a/init/Kconfig b/init/Kconfig -index a61c92066c2e..6a2920f2e2ad 100644 +index 55f9f7738ebb..33c6a820ac08 100644 --- a/init/Kconfig +++ b/init/Kconfig -@@ -1195,6 +1195,22 @@ config USER_NS +@@ -1198,6 +1198,22 @@ config USER_NS If unsure, say N. @@ -63,7 +63,7 @@ index a61c92066c2e..6a2920f2e2ad 100644 bool "PID Namespaces" default y diff --git a/kernel/fork.c b/kernel/fork.c -index 567fee340500..f8ad32116152 100644 +index cbba21e3a58d..7267d46c29ea 100644 --- a/kernel/fork.c +++ b/kernel/fork.c @@ -98,6 +98,10 @@ @@ -77,7 +77,7 @@ index 567fee340500..f8ad32116152 100644 #include #include #include -@@ -1871,6 +1875,10 @@ static __latent_entropy struct task_struct *copy_process( +@@ -1877,6 +1881,10 @@ static __latent_entropy struct task_struct *copy_process( if ((clone_flags & (CLONE_NEWUSER|CLONE_FS)) == (CLONE_NEWUSER|CLONE_FS)) return ERR_PTR(-EINVAL); @@ -88,7 +88,7 @@ index 567fee340500..f8ad32116152 100644 /* * Thread groups must share signals as well, and detached threads * can only be started up within the thread group. -@@ -2973,6 +2981,12 @@ int ksys_unshare(unsigned long unshare_flags) +@@ -2981,6 +2989,12 @@ int ksys_unshare(unsigned long unshare_flags) if (unshare_flags & CLONE_NEWNS) unshare_flags |= CLONE_FS; @@ -102,10 +102,10 @@ index 567fee340500..f8ad32116152 100644 if (err) goto bad_unshare_out; diff --git a/kernel/sysctl.c b/kernel/sysctl.c -index d4a78e08f6d8..0260dfe2daff 100644 +index 272f4a272f8c..760e8a2d815d 100644 --- a/kernel/sysctl.c +++ b/kernel/sysctl.c -@@ -103,6 +103,9 @@ +@@ -105,6 +105,9 @@ #ifdef CONFIG_LOCKUP_DETECTOR #include #endif @@ -115,7 +115,7 @@ index d4a78e08f6d8..0260dfe2daff 100644 #if defined(CONFIG_SYSCTL) -@@ -1896,6 +1899,15 @@ static struct ctl_table kern_table[] = { +@@ -1908,6 +1911,15 @@ static struct ctl_table kern_table[] = { .proc_handler = proc_dointvec, }, #endif @@ -132,7 +132,7 @@ index d4a78e08f6d8..0260dfe2daff 100644 { .procname = "tainted", diff --git a/kernel/user_namespace.c b/kernel/user_namespace.c -index 27670ab7a4ed..300c72d2a381 100644 +index ef82d401dde8..5a6c2e07174b 100644 --- a/kernel/user_namespace.c +++ b/kernel/user_namespace.c @@ -21,6 +21,13 @@ @@ -150,5 +150,5 @@ index 27670ab7a4ed..300c72d2a381 100644 static DEFINE_MUTEX(userns_state_mutex); -- -2.32.0 +2.33.0 diff --git a/libre/linux-libre-pae/0002-Bluetooth-btusb-Add-support-for-IMC-Networks-Mediate.patch b/libre/linux-libre-pae/0002-Bluetooth-btusb-Add-support-for-IMC-Networks-Mediate.patch new file mode 100644 index 0000000..09a894e --- /dev/null +++ b/libre/linux-libre-pae/0002-Bluetooth-btusb-Add-support-for-IMC-Networks-Mediate.patch @@ -0,0 +1,79 @@ +From 810821eb3b1894f2cfcc29cffd42d193b8fe54a6 Mon Sep 17 00:00:00 2001 +From: Wai Paulo Valerio Wang +Date: Thu, 8 Jul 2021 04:00:59 +0800 +Subject: [PATCH 2/6] Bluetooth: btusb: Add support for IMC Networks Mediatek + Chip + +This add supports for IMC Networks Wireless_Device Media Chip +which contains the MT7921 chipset. + +$ lsusb + +Bus 001 Device 004: ID 13d3:3563 IMC Networks Wireless_Device + +$ cat /sys/kernel/debug/usb/devices + +T: Bus=01 Lev=01 Prnt=01 Port=03 Cnt=03 Dev#= 4 Spd=480 MxCh= 0 +D: Ver= 2.10 Cls=ef(misc ) Sub=02 Prot=01 MxPS=64 #Cfgs= 1 +P: Vendor=13d3 ProdID=3563 Rev= 1.00 +S: Manufacturer=MediaTek Inc. +S: Product=Wireless_Device +S: SerialNumber=000000000 +C:* #Ifs= 3 Cfg#= 1 Atr=e0 MxPwr=100mA +A: FirstIf#= 0 IfCount= 3 Cls=e0(wlcon) Sub=01 Prot=01 +I:* If#= 0 Alt= 0 #EPs= 3 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb +E: Ad=81(I) Atr=03(Int.) MxPS= 16 Ivl=125us +E: Ad=82(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms +E: Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms +I:* If#= 1 Alt= 0 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb +E: Ad=83(I) Atr=01(Isoc) MxPS= 0 Ivl=1ms +E: Ad=03(O) Atr=01(Isoc) MxPS= 0 Ivl=1ms +I: If#= 1 Alt= 1 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb +E: Ad=83(I) Atr=01(Isoc) MxPS= 9 Ivl=1ms +E: Ad=03(O) Atr=01(Isoc) MxPS= 9 Ivl=1ms +I: If#= 1 Alt= 2 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb +E: Ad=83(I) Atr=01(Isoc) MxPS= 17 Ivl=1ms +E: Ad=03(O) Atr=01(Isoc) MxPS= 17 Ivl=1ms +I: If#= 1 Alt= 3 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb +E: Ad=83(I) Atr=01(Isoc) MxPS= 25 Ivl=1ms +E: Ad=03(O) Atr=01(Isoc) MxPS= 25 Ivl=1ms +I: If#= 1 Alt= 4 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb +E: Ad=83(I) Atr=01(Isoc) MxPS= 33 Ivl=1ms +E: Ad=03(O) Atr=01(Isoc) MxPS= 33 Ivl=1ms +I: If#= 1 Alt= 5 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb +E: Ad=83(I) Atr=01(Isoc) MxPS= 49 Ivl=1ms +E: Ad=03(O) Atr=01(Isoc) MxPS= 49 Ivl=1ms +I: If#= 1 Alt= 6 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb +E: Ad=83(I) Atr=01(Isoc) MxPS= 63 Ivl=1ms +E: Ad=03(O) Atr=01(Isoc) MxPS= 63 Ivl=1ms +I:* If#= 2 Alt= 0 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=(none) +E: Ad=8a(I) Atr=03(Int.) MxPS= 64 Ivl=125us +E: Ad=0a(O) Atr=03(Int.) MxPS= 64 Ivl=125us +I: If#= 2 Alt= 1 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=(none) +E: Ad=8a(I) Atr=03(Int.) MxPS= 512 Ivl=125us +E: Ad=0a(O) Atr=03(Int.) MxPS= 512 Ivl=125us + +Signed-off-by: Wai Paulo Valerio Wang +Signed-off-by: Marcel Holtmann +For: https://bugs.archlinux.org/task/72138 +--- + drivers/bluetooth/btusb.c | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c +index bd37d6fb88c2..e13a510e1698 100644 +--- a/drivers/bluetooth/btusb.c ++++ b/drivers/bluetooth/btusb.c +@@ -414,6 +414,9 @@ static const struct usb_device_id blacklist_table[] = { + { USB_DEVICE(0x04ca, 0x3802), .driver_info = BTUSB_MEDIATEK | + BTUSB_WIDEBAND_SPEECH | + BTUSB_VALID_LE_STATES }, ++ { USB_DEVICE(0x13d3, 0x3563), .driver_info = BTUSB_MEDIATEK | ++ BTUSB_WIDEBAND_SPEECH | ++ BTUSB_VALID_LE_STATES }, + + /* Additional Realtek 8723AE Bluetooth devices */ + { USB_DEVICE(0x0930, 0x021d), .driver_info = BTUSB_REALTEK }, +-- +2.33.0 + diff --git a/libre/linux-libre-pae/0002-Bluetooth-btusb-check-conditions-before-enabling-USB.patch b/libre/linux-libre-pae/0002-Bluetooth-btusb-check-conditions-before-enabling-USB.patch deleted file mode 100644 index 574623c..0000000 --- a/libre/linux-libre-pae/0002-Bluetooth-btusb-check-conditions-before-enabling-USB.patch +++ /dev/null @@ -1,85 +0,0 @@ -From bdb12383a58d6989a0b1c2f925890948146bbc90 Mon Sep 17 00:00:00 2001 -From: Pauli Virtanen -Date: Mon, 26 Jul 2021 21:02:06 +0300 -Subject: [PATCH 2/2] Bluetooth: btusb: check conditions before enabling USB - ALT 3 for WBS -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Some USB BT adapters don't satisfy the MTU requirement mentioned in -commit e848dbd364ac ("Bluetooth: btusb: Add support USB ALT 3 for WBS") -and have ALT 3 setting that produces no/garbled audio. Some adapters -with larger MTU were also reported to have problems with ALT 3. - -Add a flag and check it and MTU before selecting ALT 3, falling back to -ALT 1. Enable the flag for Realtek, restoring the previous behavior for -non-Realtek devices. - -Tested with USB adapters (mtu<72, no/garbled sound with ALT3, ALT1 -works) BCM20702A1 0b05:17cb, CSR8510A10 0a12:0001, and (mtu>=72, ALT3 -works) RTL8761BU 0bda:8771, Intel AX200 8087:0029 (after disabling -ALT6). Also got reports for (mtu>=72, ALT 3 reported to produce bad -audio) Intel 8087:0a2b. - -Signed-off-by: Pauli Virtanen -Fixes: e848dbd364ac ("Bluetooth: btusb: Add support USB ALT 3 for WBS") -Tested-by: Michał Kępień - -Fixes: https://bugs.archlinux.org/task/71567 ---- - drivers/bluetooth/btusb.c | 22 ++++++++++++++-------- - 1 file changed, 14 insertions(+), 8 deletions(-) - -diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c -index 6d23308119d1..e8062d0b7d4d 100644 ---- a/drivers/bluetooth/btusb.c -+++ b/drivers/bluetooth/btusb.c -@@ -516,6 +516,7 @@ static const struct dmi_system_id btusb_needs_reset_resume_table[] = { - #define BTUSB_HW_RESET_ACTIVE 12 - #define BTUSB_TX_WAIT_VND_EVT 13 - #define BTUSB_WAKEUP_DISABLE 14 -+#define BTUSB_USE_ALT3_FOR_WBS 15 - - struct btusb_data { - struct hci_dev *hdev; -@@ -1748,16 +1749,20 @@ static void btusb_work(struct work_struct *work) - /* Bluetooth USB spec recommends alt 6 (63 bytes), but - * many adapters do not support it. Alt 1 appears to - * work for all adapters that do not have alt 6, and -- * which work with WBS at all. -+ * which work with WBS at all. Some devices prefer -+ * alt 3 (HCI payload >= 60 Bytes let air packet -+ * data satisfy 60 bytes), requiring -+ * MTU >= 3 (packets) * 25 (size) - 3 (headers) = 72 -+ * see also Core spec 5, vol 4, B 2.1.1 & Table 2.1. - */ -- new_alts = btusb_find_altsetting(data, 6) ? 6 : 1; -- /* Because mSBC frames do not need to be aligned to the -- * SCO packet boundary. If support the Alt 3, use the -- * Alt 3 for HCI payload >= 60 Bytes let air packet -- * data satisfy 60 bytes. -- */ -- if (new_alts == 1 && btusb_find_altsetting(data, 3)) -+ if (btusb_find_altsetting(data, 6)) -+ new_alts = 6; -+ else if (test_bit(BTUSB_USE_ALT3_FOR_WBS, &data->flags) && -+ hdev->sco_mtu >= 72 && -+ btusb_find_altsetting(data, 3)) - new_alts = 3; -+ else -+ new_alts = 1; - } - - if (btusb_switch_alt_setting(hdev, new_alts) < 0) -@@ -4733,6 +4738,7 @@ static int btusb_probe(struct usb_interface *intf, - * (DEVICE_REMOTE_WAKEUP) - */ - set_bit(BTUSB_WAKEUP_DISABLE, &data->flags); -+ set_bit(BTUSB_USE_ALT3_FOR_WBS, &data->flags); - } - - if (!reset) --- -2.32.0 - diff --git a/libre/linux-libre-pae/0003-Bluetooth-btusb-Add-support-for-Foxconn-Mediatek-Chi.patch b/libre/linux-libre-pae/0003-Bluetooth-btusb-Add-support-for-Foxconn-Mediatek-Chi.patch new file mode 100644 index 0000000..4af5a53 --- /dev/null +++ b/libre/linux-libre-pae/0003-Bluetooth-btusb-Add-support-for-Foxconn-Mediatek-Chi.patch @@ -0,0 +1,71 @@ +From 38c2ca84b97f9d6021c2607e214f99acd84dac2d Mon Sep 17 00:00:00 2001 +From: Aaron Ma +Date: Fri, 23 Jul 2021 01:17:18 +0800 +Subject: [PATCH 3/6] Bluetooth: btusb: Add support for Foxconn Mediatek Chip + +Add support for another Foxconn / Hon Hai device with MT7921 chip. + +T: Bus=05 Lev=01 Prnt=01 Port=03 Cnt=02 Dev#= 3 Spd=480 MxCh= 0 +D: Ver= 2.10 Cls=ef(misc ) Sub=02 Prot=01 MxPS=64 #Cfgs= 1 +P: Vendor=0489 ProdID=e0cd Rev= 1.00 +S: Manufacturer=MediaTek Inc. +S: Product=Wireless_Device +S: SerialNumber=000000000 +C:* #Ifs= 3 Cfg#= 1 Atr=e0 MxPwr=100mA +A: FirstIf#= 0 IfCount= 3 Cls=e0(wlcon) Sub=01 Prot=01 +I:* If#= 0 Alt= 0 #EPs= 3 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb +E: Ad=81(I) Atr=03(Int.) MxPS= 16 Ivl=125us +E: Ad=82(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms +E: Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms +I:* If#= 1 Alt= 0 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb +E: Ad=83(I) Atr=01(Isoc) MxPS= 0 Ivl=1ms +E: Ad=03(O) Atr=01(Isoc) MxPS= 0 Ivl=1ms +I: If#= 1 Alt= 1 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb +E: Ad=83(I) Atr=01(Isoc) MxPS= 9 Ivl=1ms +E: Ad=03(O) Atr=01(Isoc) MxPS= 9 Ivl=1ms +I: If#= 1 Alt= 2 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb +E: Ad=83(I) Atr=01(Isoc) MxPS= 17 Ivl=1ms +E: Ad=03(O) Atr=01(Isoc) MxPS= 17 Ivl=1ms +I: If#= 1 Alt= 3 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb +E: Ad=83(I) Atr=01(Isoc) MxPS= 25 Ivl=1ms +E: Ad=03(O) Atr=01(Isoc) MxPS= 25 Ivl=1ms +I: If#= 1 Alt= 4 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb +E: Ad=83(I) Atr=01(Isoc) MxPS= 33 Ivl=1ms +E: Ad=03(O) Atr=01(Isoc) MxPS= 33 Ivl=1ms +I: If#= 1 Alt= 5 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb +E: Ad=83(I) Atr=01(Isoc) MxPS= 49 Ivl=1ms +E: Ad=03(O) Atr=01(Isoc) MxPS= 49 Ivl=1ms +I: If#= 1 Alt= 6 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb +E: Ad=83(I) Atr=01(Isoc) MxPS= 63 Ivl=1ms +E: Ad=03(O) Atr=01(Isoc) MxPS= 63 Ivl=1ms +I:* If#= 2 Alt= 0 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=(none) +E: Ad=8a(I) Atr=03(Int.) MxPS= 64 Ivl=125us +E: Ad=0a(O) Atr=03(Int.) MxPS= 64 Ivl=125us +I: If#= 2 Alt= 1 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=(none) +E: Ad=8a(I) Atr=03(Int.) MxPS= 512 Ivl=125us +E: Ad=0a(O) Atr=03(Int.) MxPS= 512 Ivl=125us + +Signed-off-by: Aaron Ma +Signed-off-by: Marcel Holtmann +For: https://bugs.archlinux.org/task/72138 +--- + drivers/bluetooth/btusb.c | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c +index e13a510e1698..aac732cc9612 100644 +--- a/drivers/bluetooth/btusb.c ++++ b/drivers/bluetooth/btusb.c +@@ -417,6 +417,9 @@ static const struct usb_device_id blacklist_table[] = { + { USB_DEVICE(0x13d3, 0x3563), .driver_info = BTUSB_MEDIATEK | + BTUSB_WIDEBAND_SPEECH | + BTUSB_VALID_LE_STATES }, ++ { USB_DEVICE(0x0489, 0xe0cd), .driver_info = BTUSB_MEDIATEK | ++ BTUSB_WIDEBAND_SPEECH | ++ BTUSB_VALID_LE_STATES }, + + /* Additional Realtek 8723AE Bluetooth devices */ + { USB_DEVICE(0x0930, 0x021d), .driver_info = BTUSB_REALTEK }, +-- +2.33.0 + diff --git a/libre/linux-libre-pae/0004-ALSA-pcm-Check-mmap-capability-of-runtime-dma-buffer.patch b/libre/linux-libre-pae/0004-ALSA-pcm-Check-mmap-capability-of-runtime-dma-buffer.patch new file mode 100644 index 0000000..64b8717 --- /dev/null +++ b/libre/linux-libre-pae/0004-ALSA-pcm-Check-mmap-capability-of-runtime-dma-buffer.patch @@ -0,0 +1,64 @@ +From ab60c2d0242fc428a436c25c1144f6acd9d6f419 Mon Sep 17 00:00:00 2001 +From: Takashi Iwai +Date: Mon, 9 Aug 2021 09:18:27 +0200 +Subject: [PATCH 4/6] ALSA: pcm: Check mmap capability of runtime dma buffer at + first + +Currently we check only the substream->dma_buffer as the preset of the +buffer configuration for verifying the availability of mmap. But a +few drivers rather set up the buffer in the own way without the +standard buffer preallocation using substream->dma_buffer, and they +miss the proper checks. (Now it's working more or less fine as most +of them are running only on x86). + +Actually, they may set up the runtime dma_buffer (referred via +snd_pcm_get_dma_buf()) at the open callback, though. That is, this +could have been used as the primary source. + +This patch changes the hw_support_mmap() function to check the runtime +dma buffer at first. It's usually NULL with the standard buffer +preallocation, and in that case, we continue checking +substream->dma_buffer as fallback. + +Signed-off-by: Takashi Iwai +Fixes: https://bugs.archlinux.org/task/72059 +--- + sound/core/pcm_native.c | 9 +++++++-- + 1 file changed, 7 insertions(+), 2 deletions(-) + +diff --git a/sound/core/pcm_native.c b/sound/core/pcm_native.c +index 71323d807dbf..dc9fa312fadd 100644 +--- a/sound/core/pcm_native.c ++++ b/sound/core/pcm_native.c +@@ -243,13 +243,18 @@ int snd_pcm_info_user(struct snd_pcm_substream *substream, + + static bool hw_support_mmap(struct snd_pcm_substream *substream) + { ++ struct snd_dma_buffer *dmabuf; ++ + if (!(substream->runtime->hw.info & SNDRV_PCM_INFO_MMAP)) + return false; + + if (substream->ops->mmap || substream->ops->page) + return true; + +- switch (substream->dma_buffer.dev.type) { ++ dmabuf = snd_pcm_get_dma_buf(substream); ++ if (!dmabuf) ++ dmabuf = &substream->dma_buffer; ++ switch (dmabuf->dev.type) { + case SNDRV_DMA_TYPE_UNKNOWN: + /* we can't know the device, so just assume that the driver does + * everything right +@@ -259,7 +264,7 @@ static bool hw_support_mmap(struct snd_pcm_substream *substream) + case SNDRV_DMA_TYPE_VMALLOC: + return true; + default: +- return dma_can_mmap(substream->dma_buffer.dev.dev); ++ return dma_can_mmap(dmabuf->dev.dev); + } + } + +-- +2.33.0 + diff --git a/libre/linux-libre-pae/0005-ALSA-pci-rme-Set-up-buffer-type-properly.patch b/libre/linux-libre-pae/0005-ALSA-pci-rme-Set-up-buffer-type-properly.patch new file mode 100644 index 0000000..f1d7db9 --- /dev/null +++ b/libre/linux-libre-pae/0005-ALSA-pci-rme-Set-up-buffer-type-properly.patch @@ -0,0 +1,75 @@ +From 7b0c23ec626e579ffa7ef239cac20dc7fa1797e9 Mon Sep 17 00:00:00 2001 +From: Takashi Iwai +Date: Mon, 9 Aug 2021 09:18:28 +0200 +Subject: [PATCH 5/6] ALSA: pci: rme: Set up buffer type properly + +Although the regression of the mmap was fixed in the recent commit +dc0dc8a73e8e ("ALSA: pcm: Fix mmap breakage without explicit buffer +setup"), RME9652 and HDSP drivers have still potential issues with +their mmap handling. Namely, they use the default mmap handler +without the standard buffer preallocation, and PCM core wouldn't use +the coherent DMA mapping. It's practically OK on x86, but on some +exotic architectures, it wouldn't work. + +This patch addresses the potential breakage by replacing the buffer +setup with the proper macro. It also simplifies the source code, +too. + +Signed-off-by: Takashi Iwai +Fixes: https://bugs.archlinux.org/task/72059 +--- + sound/pci/rme9652/hdsp.c | 6 ++---- + sound/pci/rme9652/rme9652.c | 6 ++---- + 2 files changed, 4 insertions(+), 8 deletions(-) + +diff --git a/sound/pci/rme9652/hdsp.c b/sound/pci/rme9652/hdsp.c +index 8457a4bbc3df..22b8b3357918 100644 +--- a/sound/pci/rme9652/hdsp.c ++++ b/sound/pci/rme9652/hdsp.c +@@ -4518,8 +4518,7 @@ static int snd_hdsp_playback_open(struct snd_pcm_substream *substream) + snd_pcm_set_sync(substream); + + runtime->hw = snd_hdsp_playback_subinfo; +- runtime->dma_area = hdsp->playback_buffer; +- runtime->dma_bytes = HDSP_DMA_AREA_BYTES; ++ snd_pcm_set_runtime_buffer(substream, &hdsp->playback_dma_buf); + + hdsp->playback_pid = current->pid; + hdsp->playback_substream = substream; +@@ -4595,8 +4594,7 @@ static int snd_hdsp_capture_open(struct snd_pcm_substream *substream) + snd_pcm_set_sync(substream); + + runtime->hw = snd_hdsp_capture_subinfo; +- runtime->dma_area = hdsp->capture_buffer; +- runtime->dma_bytes = HDSP_DMA_AREA_BYTES; ++ snd_pcm_set_runtime_buffer(substream, &hdsp->capture_dma_buf); + + hdsp->capture_pid = current->pid; + hdsp->capture_substream = substream; +diff --git a/sound/pci/rme9652/rme9652.c b/sound/pci/rme9652/rme9652.c +index f1aad38760d6..9ad2533925c4 100644 +--- a/sound/pci/rme9652/rme9652.c ++++ b/sound/pci/rme9652/rme9652.c +@@ -2279,8 +2279,7 @@ static int snd_rme9652_playback_open(struct snd_pcm_substream *substream) + snd_pcm_set_sync(substream); + + runtime->hw = snd_rme9652_playback_subinfo; +- runtime->dma_area = rme9652->playback_buffer; +- runtime->dma_bytes = RME9652_DMA_AREA_BYTES; ++ snd_pcm_set_runtime_buffer(substream, &rme9652->playback_dma_buf); + + if (rme9652->capture_substream == NULL) { + rme9652_stop(rme9652); +@@ -2339,8 +2338,7 @@ static int snd_rme9652_capture_open(struct snd_pcm_substream *substream) + snd_pcm_set_sync(substream); + + runtime->hw = snd_rme9652_capture_subinfo; +- runtime->dma_area = rme9652->capture_buffer; +- runtime->dma_bytes = RME9652_DMA_AREA_BYTES; ++ snd_pcm_set_runtime_buffer(substream, &rme9652->capture_dma_buf); + + if (rme9652->playback_substream == NULL) { + rme9652_stop(rme9652); +-- +2.33.0 + diff --git a/libre/linux-libre-pae/0006-ALSA-pci-cs46xx-Fix-set-up-buffer-type-properly.patch b/libre/linux-libre-pae/0006-ALSA-pci-cs46xx-Fix-set-up-buffer-type-properly.patch new file mode 100644 index 0000000..0305e70 --- /dev/null +++ b/libre/linux-libre-pae/0006-ALSA-pci-cs46xx-Fix-set-up-buffer-type-properly.patch @@ -0,0 +1,95 @@ +From b5ed7b38f5551c5dfca87ab29d679f3d6d327557 Mon Sep 17 00:00:00 2001 +From: Takashi Iwai +Date: Mon, 9 Aug 2021 09:18:29 +0200 +Subject: [PATCH 6/6] ALSA: pci: cs46xx: Fix set up buffer type properly + +CS46xx driver switches the buffer depending on the number of periods, +and in some cases it switches to the own buffer without updating the +buffer type properly. This may cause a problem with the mmap on +exotic architectures that require the own mmap call for the coherent +DMA buffer. + +This patch addresses the potential breakage by replacing the buffer +setup with the proper macro. It also simplifies the source code, +too. + +Signed-off-by: Takashi Iwai +Fixes: https://bugs.archlinux.org/task/72059 +--- + sound/pci/cs46xx/cs46xx_lib.c | 30 ++++++++---------------------- + 1 file changed, 8 insertions(+), 22 deletions(-) + +diff --git a/sound/pci/cs46xx/cs46xx_lib.c b/sound/pci/cs46xx/cs46xx_lib.c +index 1e1eb17f8e07..d43927dcd61e 100644 +--- a/sound/pci/cs46xx/cs46xx_lib.c ++++ b/sound/pci/cs46xx/cs46xx_lib.c +@@ -1121,9 +1121,7 @@ static int snd_cs46xx_playback_hw_params(struct snd_pcm_substream *substream, + if (params_periods(hw_params) == CS46XX_FRAGS) { + if (runtime->dma_area != cpcm->hw_buf.area) + snd_pcm_lib_free_pages(substream); +- runtime->dma_area = cpcm->hw_buf.area; +- runtime->dma_addr = cpcm->hw_buf.addr; +- runtime->dma_bytes = cpcm->hw_buf.bytes; ++ snd_pcm_set_runtime_buffer(substream, &cpcm->hw_buf); + + + #ifdef CONFIG_SND_CS46XX_NEW_DSP +@@ -1143,11 +1141,8 @@ static int snd_cs46xx_playback_hw_params(struct snd_pcm_substream *substream, + #endif + + } else { +- if (runtime->dma_area == cpcm->hw_buf.area) { +- runtime->dma_area = NULL; +- runtime->dma_addr = 0; +- runtime->dma_bytes = 0; +- } ++ if (runtime->dma_area == cpcm->hw_buf.area) ++ snd_pcm_set_runtime_buffer(substream, NULL); + err = snd_pcm_lib_malloc_pages(substream, params_buffer_bytes(hw_params)); + if (err < 0) { + #ifdef CONFIG_SND_CS46XX_NEW_DSP +@@ -1196,9 +1191,7 @@ static int snd_cs46xx_playback_hw_free(struct snd_pcm_substream *substream) + if (runtime->dma_area != cpcm->hw_buf.area) + snd_pcm_lib_free_pages(substream); + +- runtime->dma_area = NULL; +- runtime->dma_addr = 0; +- runtime->dma_bytes = 0; ++ snd_pcm_set_runtime_buffer(substream, NULL); + + return 0; + } +@@ -1287,16 +1280,11 @@ static int snd_cs46xx_capture_hw_params(struct snd_pcm_substream *substream, + if (runtime->periods == CS46XX_FRAGS) { + if (runtime->dma_area != chip->capt.hw_buf.area) + snd_pcm_lib_free_pages(substream); +- runtime->dma_area = chip->capt.hw_buf.area; +- runtime->dma_addr = chip->capt.hw_buf.addr; +- runtime->dma_bytes = chip->capt.hw_buf.bytes; ++ snd_pcm_set_runtime_buffer(substream, &chip->capt.hw_buf); + substream->ops = &snd_cs46xx_capture_ops; + } else { +- if (runtime->dma_area == chip->capt.hw_buf.area) { +- runtime->dma_area = NULL; +- runtime->dma_addr = 0; +- runtime->dma_bytes = 0; +- } ++ if (runtime->dma_area == chip->capt.hw_buf.area) ++ snd_pcm_set_runtime_buffer(substream, NULL); + err = snd_pcm_lib_malloc_pages(substream, params_buffer_bytes(hw_params)); + if (err < 0) + return err; +@@ -1313,9 +1301,7 @@ static int snd_cs46xx_capture_hw_free(struct snd_pcm_substream *substream) + + if (runtime->dma_area != chip->capt.hw_buf.area) + snd_pcm_lib_free_pages(substream); +- runtime->dma_area = NULL; +- runtime->dma_addr = 0; +- runtime->dma_bytes = 0; ++ snd_pcm_set_runtime_buffer(substream, NULL); + + return 0; + } +-- +2.33.0 + diff --git a/libre/linux-libre-pae/PKGBUILD b/libre/linux-libre-pae/PKGBUILD index 912bfad..42e4b06 100644 --- a/libre/linux-libre-pae/PKGBUILD +++ b/libre/linux-libre-pae/PKGBUILD @@ -9,7 +9,7 @@ _replacesoldkernels=() # '%' gets replaced with kernel suffix _replacesoldmodules=() # '%' gets replaced with kernel suffix pkgbase=linux-libre-pae -pkgver=5.13.9 +pkgver=5.14.11 pkgrel=1 pkgdesc='Linux-libre PAE (physical address extension)' url='https://linux-libre.fsfla.org/' @@ -20,7 +20,7 @@ makedepends=( xmlto python-sphinx python-sphinx_rtd_theme graphviz imagemagick ) options=('!strip') -_srcname=linux-5.13 +_srcname=linux-5.14 source=( "https://linux-libre.fsfla.org/pub/linux-libre/releases/${_srcname##*-}-gnu/linux-libre-${_srcname##*-}-gnu.tar.xz"{,.sign} "https://linux-libre.fsfla.org/pub/linux-libre/releases/$pkgver-gnu/patch-${_srcname##*-}-gnu-$pkgver-gnu.xz"{,.sign} @@ -36,15 +36,19 @@ source=( 0002-fix-Atmel-maXTouch-touchscreen-support.patch # Arch Linux patches 0001-ZEN-Add-sysctl-and-CONFIG-to-disallow-unprivileged-C.patch - 0002-Bluetooth-btusb-check-conditions-before-enabling-USB.patch + 0002-Bluetooth-btusb-Add-support-for-IMC-Networks-Mediate.patch + 0003-Bluetooth-btusb-Add-support-for-Foxconn-Mediatek-Chi.patch + 0004-ALSA-pcm-Check-mmap-capability-of-runtime-dma-buffer.patch + 0005-ALSA-pci-rme-Set-up-buffer-type-properly.patch + 0006-ALSA-pci-cs46xx-Fix-set-up-buffer-type-properly.patch ) validpgpkeys=( '474402C8C582DAFBE389C427BCB7CF877E7D47A7' # Alexandre Oliva '6DB9C4B4F0D8C0DC432CF6E4227CA7C556B2BA78' # David P. ) -sha512sums=('a24f2db9316297127447b3d7fd7a1e9e7b9a8bdb5e59e6e341568cbf877c4b65d2ccdb27ec1c23b07af6c365b2930b040bcef0d989202b503bc55b107c04d121' +sha512sums=('18798d032184ce141216ad72fcbb5ddb340809fe8d953acb50700aa0b47d36fca104dcedc7521fb3aea913d8fbeb4bd3eab1cf2c955388e6996c4154eac67d0c' 'SKIP' - '8f1b7cb25e22f241567f3b78c66a2203d6c3746e464be7f7ddfcc42198fb41f7a4a179820ca2aa751c53098652b14789c204d9057bdfe6b6927dec68c1d26eec' + '951cdb68af3bbf3b841376f82fd9c82dfd7a159cae8564e5d772f99f3170deafcabc00cb0ecfa6e7669c22087577f2eafa47d3b50bc8ea6ee5edbc65821986e1' 'SKIP' '13cb5bc42542e7b8bb104d5f68253f6609e463b6799800418af33eb0272cc269aaa36163c3e6f0aacbdaaa1d05e2827a4a7c4a08a029238439ed08b89c564bb3' 'SKIP' @@ -52,11 +56,15 @@ sha512sums=('a24f2db9316297127447b3d7fd7a1e9e7b9a8bdb5e59e6e341568cbf877c4b65d2c 'SKIP' '267295aa0cea65684968420c68b32f1a66a22d018b9d2b2c1ef14267bcf4cb68aaf7099d073cbfefe6c25c8608bdcbbd45f7ac8893fdcecbf1e621abdfe9ecc1' 'SKIP' - '2f35c40ecff2de26048122dac3b60639012a8aaaa887f2de20c4865c6607e6f8caad540bfcec21cb3d7f38cdba94c975f0867a13b69116723ce6683403ccea32' + '176fe512658e8a958214225c7873aa1df597c5d69c515ab20f7495fa922b2b3e9b6715be96d5b7eb2438476db4a70992e4caa946b0f85401923ab402d6e41c63' '02af4dd2a007e41db0c63822c8ab3b80b5d25646af1906dc85d0ad9bb8bbf5236f8e381d7f91cf99ed4b0978c50aee37cb9567cdeef65b7ec3d91b882852b1af' 'b8fe56e14006ab866970ddbd501c054ae37186ddc065bb869cf7d18db8c0d455118d5bda3255fb66a0dde38b544655cfe9040ffe46e41d19830b47959b2fb168' - 'fac53c8ce68e9f56c8930a9392c89377c909f6a43a318010194949def91a104f34f46c2b32457e571435a8b326c47a48737ceb6255644bb6d42c59b27b07449a' - '722d92b750f0a5af39b850c18ff0c57dac0165e3c0219415843ec5207945971448790fec3fca570b62c8726c89b0ca6b7a5b16fd503e4581b3a63b3adfcf2c50') + 'dba36283b9ea3db5fcc9a72051a8e9cf4d409ec59769e6da9db4d321b72972242670210ad961a37f62aba68f7262e9f2f6308cfe62cda9fa050c72363a0c404a' + '693ac0e0e32cd0ab6c485deb43d6408dc9fc31234e4113206cf901a302eddf1a965f97f82ed7186f6426c085176ce95c48e116e9824d92bfd1f6656447da18dc' + 'c4a19ccec8b7636f1b5b1cf8e135e46d3aa4d233af4a1e72c2aaa83536505013f0c83602fe05ce08212b4327bebfb4f8a84b57c0d81509f0b48df5dfcc334254' + '4d81c2995e7cc5fc36929eb5bf9cc68ec02cb24147f18a88da79facd3e25182b156ca4430bf2765ff1e4c6be237d3a3e527498cd49d75217a5e16b62a478be6d' + '12c0da7fbd4e4e6ffc473ecd6dffee1dd61c201dad854347400c8f551adc35c033d6fa623cc5c1b2fe7930cdab868a8c99c6874ee171c9143e0f370398759c96' + '7f6fd402d8c29ee4f6c98ed2236318ab3f57f3dd47a92911e1b556df251b67fc83f7256223f06d1fefa849a3ceb5e40d247d2d5664ddd7cd9749bab4bc1ecb36') _replacesarchkernel=("${_replacesarchkernel[@]/\%/${pkgbase#linux-libre}}") _replacesoldkernels=("${_replacesoldkernels[@]/\%/${pkgbase#linux-libre}}") @@ -95,6 +103,7 @@ prepare() { echo "Setting config..." cp ../config .config make olddefconfig + diff -u ../config .config || : make -s kernelrelease > version echo "Prepared $pkgbase version $( Date: Oct 13 2021 21:08:45 +0000 Subject: [PATCH 8/73] updpkg: libre/linux-libre-pck 5.14.11.pck2-1 Signed-off-by: David P --- diff --git a/libre/linux-libre-pck/PKGBUILD b/libre/linux-libre-pck/PKGBUILD index a57cfca..ed91294 100644 --- a/libre/linux-libre-pck/PKGBUILD +++ b/libre/linux-libre-pck/PKGBUILD @@ -13,7 +13,7 @@ _replacesoldkernels=() _replacesoldmodules=() pkgbase=linux-libre-pck -pkgver=5.13.9.pck1 +pkgver=5.14.11.pck2 pkgrel=1 pkgdesc='Linux-libre PCK' url='https://wiki.parabola.nu/PCK' @@ -21,10 +21,10 @@ arch=(i686 x86_64 armv7h) license=(GPL2) makedepends=( bc kmod libelf pahole cpio perl tar xz -# xmlto python-sphinx python-sphinx_rtd_theme graphviz imagemagick + xmlto python-sphinx python-sphinx_rtd_theme graphviz imagemagick ) options=('!strip') -_srcname=linux-5.13 +_srcname=linux-5.14 source=( "https://linux-libre.fsfla.org/pub/linux-libre/releases/${_srcname##*-}-gnu/linux-libre-${_srcname##*-}-gnu.tar.xz"{,.sign} "https://linux-libre.fsfla.org/pub/linux-libre/releases/${pkgver%.*}-gnu/patch-${_srcname##*-}-gnu-${pkgver%.*}-gnu.xz"{,.sign} @@ -36,14 +36,14 @@ validpgpkeys=( '474402C8C582DAFBE389C427BCB7CF877E7D47A7' # Alexandre Oliva '6DB9C4B4F0D8C0DC432CF6E4227CA7C556B2BA78' # David P. ) -sha512sums=('a24f2db9316297127447b3d7fd7a1e9e7b9a8bdb5e59e6e341568cbf877c4b65d2ccdb27ec1c23b07af6c365b2930b040bcef0d989202b503bc55b107c04d121' +sha512sums=('18798d032184ce141216ad72fcbb5ddb340809fe8d953acb50700aa0b47d36fca104dcedc7521fb3aea913d8fbeb4bd3eab1cf2c955388e6996c4154eac67d0c' 'SKIP' - '8f1b7cb25e22f241567f3b78c66a2203d6c3746e464be7f7ddfcc42198fb41f7a4a179820ca2aa751c53098652b14789c204d9057bdfe6b6927dec68c1d26eec' + '951cdb68af3bbf3b841376f82fd9c82dfd7a159cae8564e5d772f99f3170deafcabc00cb0ecfa6e7669c22087577f2eafa47d3b50bc8ea6ee5edbc65821986e1' 'SKIP' - '07173b3bf2f0bd9b11f803d0946ce42f981c7f4ec57078efc349386d5dda8c0db37692ffeccb1d2dbb7fe6e243645baafd57c547c1dd0386e4becf257df8510e' + 'a2ea7c7d8cb863d9e9d41f3cb3cab26f2f86940ee0dacd2fc56689304fe309d0f6b7ed8d4ddf5e4ec05445c3ad4a5fff03e33f9e82a32f4bad338af3168947aa' 'SKIP' - '1e7c176717e3295ce96c7b4d5d8f9efe28a3fd51095368d4ca985661f0b8ae38d92312598b14a1b37ffb29d97a5fe09b9ee75db3f461e4af3b7b5ff8913030cb' - 'd92eb8d42a3d87c6ced2ef54536141f55ebe5a101d71f7a90b853fe890954388a5460917d2f1c51c73208a8e727c3c1c203525b83554f67d8512e533ba25f832' + '443f93a4086bbfe096be06ad084185c0c9ec9ba7913969ffeb426f75052fa6a5fb28d3f61f39f0086720633bc33ffd6f4985d1db53395e0bd43309469cd0ae64' + 'e5fd36b0ae7b91d0d9590ddcf1dbcd23c0fe772366a6088fb35c09cfd85486913edb65c45a42c1a590cc144c5d092b5925d824146837f42ba326f8b3fefeec7e' '6728253ca04a603ef35ceb06b284c509d8ffda6a8c6403fe687afe5d956425588ebbd62bfc5dd1d7fd9a03071a30c7cd86ac72a1fd67cbbf1ebdac85ee703caf' '53103bf55b957b657039510527df0df01279dec59cda115a4d6454e4135025d4546167fa30bdc99107f232561c1e096d8328609ab5a876cf7017176f92ad3e0b') @@ -85,6 +85,7 @@ prepare() { echo "Setting config..." cp ../config.$CARCH .config make olddefconfig + diff -u ../config .config || : make -s kernelrelease > version echo "Prepared $pkgbase version $( Date: Oct 13 2021 23:08:33 +0000 Subject: [PATCH 9/73] updpkg: libre/arm-linux-gnueabi-binutils 2.37-1 Signed-off-by: David P --- diff --git a/libre/arm-linux-gnueabi-binutils/PKGBUILD b/libre/arm-linux-gnueabi-binutils/PKGBUILD index ff4ff4c..145ee20 100644 --- a/libre/arm-linux-gnueabi-binutils/PKGBUILD +++ b/libre/arm-linux-gnueabi-binutils/PKGBUILD @@ -2,7 +2,7 @@ _target=arm-linux-gnueabi pkgname=$_target-binutils -pkgver=2.36.1 +pkgver=2.37 pkgrel=1 pkgdesc='A set of programs to assemble and manipulate binary and object files for the ARM GNU EABI little-endian target' arch=('x86_64' 'i686' 'armv7h') @@ -10,7 +10,7 @@ url='https://www.gnu.org/software/binutils/' license=(GPL) depends=(zlib) source=(https://ftp.gnu.org/gnu/binutils/binutils-$pkgver.tar.bz2{,.sig}) -sha512sums=('5c40cfe05b922492627db71990dd2ba6030fd2de4bdba3f53a3f274543ff161fb56e2f6bdac107e0ffdcfd095e499c54e1157ee1865723baefa67b5b4d3da201' +sha512sums=('b3f5184697f77e94c95d48f6879de214eb5e17aa6ef8e96f65530d157e515b1ae2f290e98453e4ff126462520fa0f63852b6e1c8fbb397ed2e41984336bc78c6' 'SKIP') validpgpkeys=('EAF1C276A747E9ED86210CBAC3126D3B4AE55E93' # Tristan Gingold '3A24BC1E8FB409FA9F14371813FCEF89DD9E3C4F') # Nick Clifton (Chief Binutils Maintainer) From 1c8f7bc7de23d07829986b7e4009e842a3b758b5 Mon Sep 17 00:00:00 2001 From: David P Date: Oct 13 2021 23:26:25 +0000 Subject: [PATCH 10/73] updpkg: libre/sh-elf-binutils 2.37-1 Signed-off-by: David P --- diff --git a/libre/sh-elf-binutils/PKGBUILD b/libre/sh-elf-binutils/PKGBUILD index 20c3e21..fa4de58 100644 --- a/libre/sh-elf-binutils/PKGBUILD +++ b/libre/sh-elf-binutils/PKGBUILD @@ -2,7 +2,7 @@ _target=sh-elf pkgname=$_target-binutils -pkgver=2.36.1 +pkgver=2.37 pkgrel=1 pkgdesc='A set of programs to assemble and manipulate binary and object files for the SuperH (bare-metal) target' arch=('x86_64' 'i686' 'armv7h') @@ -10,7 +10,7 @@ url='http://www.gnu.org/software/binutils/' license=(GPL) depends=(zlib) source=(https://ftp.gnu.org/gnu/binutils/binutils-$pkgver.tar.bz2{,.sig}) -sha512sums=('5c40cfe05b922492627db71990dd2ba6030fd2de4bdba3f53a3f274543ff161fb56e2f6bdac107e0ffdcfd095e499c54e1157ee1865723baefa67b5b4d3da201' +sha512sums=('b3f5184697f77e94c95d48f6879de214eb5e17aa6ef8e96f65530d157e515b1ae2f290e98453e4ff126462520fa0f63852b6e1c8fbb397ed2e41984336bc78c6' 'SKIP') validpgpkeys=('EAF1C276A747E9ED86210CBAC3126D3B4AE55E93' # Tristan Gingold '3A24BC1E8FB409FA9F14371813FCEF89DD9E3C4F') # Nick Clifton (Chief Binutils Maintainer) From 6a5dc7a9fc37ffe0a73de3f68c8dc9e8b2440c26 Mon Sep 17 00:00:00 2001 From: David P Date: Oct 13 2021 23:42:07 +0000 Subject: [PATCH 11/73] updpkg: libre/xtensa-elf-binutils 2.37-1 Signed-off-by: David P --- diff --git a/libre/xtensa-elf-binutils/PKGBUILD b/libre/xtensa-elf-binutils/PKGBUILD index e5aa96e..3d70a0f 100644 --- a/libre/xtensa-elf-binutils/PKGBUILD +++ b/libre/xtensa-elf-binutils/PKGBUILD @@ -2,7 +2,7 @@ _target=xtensa-elf pkgname=$_target-binutils -pkgver=2.36.1 +pkgver=2.37 pkgrel=1 pkgdesc='A set of programs to assemble and manipulate binary and object files for the Xtensa (bare-metal) target' arch=('x86_64' 'i686' 'armv7h') @@ -11,7 +11,7 @@ license=('GPL') depends=('zlib') source=(https://ftp.gnu.org/gnu/binutils/binutils-$pkgver.tar.bz2{,.sig} binutils-2.36_fixup.patch binutils-2.34_fixup.patch binutils.patch) -sha512sums=('5c40cfe05b922492627db71990dd2ba6030fd2de4bdba3f53a3f274543ff161fb56e2f6bdac107e0ffdcfd095e499c54e1157ee1865723baefa67b5b4d3da201' +sha512sums=('b3f5184697f77e94c95d48f6879de214eb5e17aa6ef8e96f65530d157e515b1ae2f290e98453e4ff126462520fa0f63852b6e1c8fbb397ed2e41984336bc78c6' 'SKIP' 'fa1e3e1b30d625eae4e59f1396079cc3fa4d77ec4f119ad20c52db1e1ff1819989ff16dc583d7c719caeb7c0ece48d76fe7c08a85b960c7bc924fe780ffa4ac2' '4e5bbba907eec565f5c3ea00fa5a19c146ec19b1f2db38c6581f80a524475ad9b066839ca671da05c6fab9af402f2bb76e01d227e7456b3ef48c6d685605c8d1' From c1bfed0516d229efd29fc80732a72ce115dc7b34 Mon Sep 17 00:00:00 2001 From: David P Date: Oct 14 2021 02:11:09 +0000 Subject: [PATCH 12/73] updpkg: libre/arm-linux-gnueabi-gcc 11.2.0-1 Signed-off-by: David P --- diff --git a/libre/arm-linux-gnueabi-gcc/PKGBUILD b/libre/arm-linux-gnueabi-gcc/PKGBUILD index 5694131..8b9b4e4 100644 --- a/libre/arm-linux-gnueabi-gcc/PKGBUILD +++ b/libre/arm-linux-gnueabi-gcc/PKGBUILD @@ -2,10 +2,10 @@ _target=arm-linux-gnueabi pkgname=$_target-gcc -_pkgver=10.2.0 -pkgver=$_pkgver -_islver=0.22 +pkgver=11.2.0 +_islver=0.24 pkgrel=1 +#_snapshot=8-20210107 pkgdesc='The GNU Compiler Collection - cross compiler for ARM GNU EABI little-endian target' arch=(x86_64 i686 armv7h) url='http://gcc.gnu.org/' @@ -13,18 +13,19 @@ license=(GPL LGPL FDL) depends=($_target-binutils libmpc zlib) makedepends=(gmp mpfr) options=(!emptydirs !strip) -source=(https://gcc.gnu.org/pub/gcc/releases/gcc-$_pkgver/gcc-$_pkgver.tar.xz{,.sig} - http://isl.gforge.inria.fr/isl-$_islver.tar.bz2) -sha512sums=('42ae38928bd2e8183af445da34220964eb690b675b1892bbeb7cd5bb62be499011ec9a93397dba5e2fb681afadfc6f2767d03b9035b44ba9be807187ae6dc65e' +source=(https://gcc.gnu.org/pub/gcc/releases/gcc-$pkgver/gcc-$pkgver.tar.xz{,.sig} + #https://gcc.gnu.org/pub/gcc/snapshots/$_snapshot/gcc-$_snapshot.tar.xz + https://libisl.sourceforge.io/isl-$_islver.tar.bz2) +sha512sums=('d53a0a966230895c54f01aea38696f818817b505f1e2bfa65e508753fcd01b2aedb4a61434f41f3a2ddbbd9f41384b96153c684ded3f0fa97c82758d9de5c7cf' 'SKIP' - 'fc2c9796979610dd51143dcefe4f5c989c4354571cc5a1fcc6b932fd41f42a54f6b43adfd289af61be7bd06f3a523fa6a7d7ee56680e32d8036beb4c188fa668') + 'aab3bddbda96b801d0f56d2869f943157aad52a6f6e6a61745edd740234c635c38231af20bc3f1a08d416a5e973a90e18249078ed8e4ae2f1d5de57658738e95') validpgpkeys=(33C235A34C46AA3FFB293709A328C3A2C3C45C06 # Jakub Jelinek 13975A70E63C361C73AE69EF6EEB81F8981C74C7) # Richard Guenther if [ -n "$_snapshot" ]; then _basedir=gcc-$_snapshot else - _basedir=gcc-$_pkgver + _basedir=gcc-$pkgver fi prepare() { @@ -33,7 +34,7 @@ prepare() { # link isl for in-tree builds ln -sf ../isl-$_islver isl - echo $_pkgver > gcc/BASE-VER + echo $pkgver > gcc/BASE-VER # hack! - some configure tests for header files using "$CPP $CPPFLAGS" sed -i "/ac_cpp=/s/\$CPPFLAGS/\$CPPFLAGS -O2/" "$srcdir"/$_basedir/{libiberty,gcc}/configure @@ -49,6 +50,11 @@ build() { CFLAGS=${CFLAGS/-pipe/} CXXFLAGS=${CXXFLAGS/-pipe/} + if [ "$CARCH" = i686 ]; then + # using -Werror=format-security causes i686 build to fail + CXXFLAGS+=' -Wno-error=format-security' + fi + $srcdir/$_basedir/configure \ --target=$_target \ --prefix=/usr \ From 0c3eae2ec3e5263d3b6680f687e7cf10192f2a67 Mon Sep 17 00:00:00 2001 From: Megver83 Date: Oct 14 2021 16:15:01 +0000 Subject: [PATCH 13/73] updpkg: libre/sh-elf-gcc 11.2.0-1 Signed-off-by: Megver83 --- diff --git a/libre/sh-elf-gcc/PKGBUILD b/libre/sh-elf-gcc/PKGBUILD index 7ef0bcb..ef40f7b 100644 --- a/libre/sh-elf-gcc/PKGBUILD +++ b/libre/sh-elf-gcc/PKGBUILD @@ -2,10 +2,10 @@ _target=sh-elf pkgname=$_target-gcc -_pkgver=10.2.0 -pkgver=$_pkgver -_islver=0.22 +pkgver=11.2.0 +_islver=0.24 pkgrel=1 +#_snapshot=8-20210107 pkgdesc='The GNU Compiler Collection - cross compiler for SuperH (bare-metal) target' arch=(x86_64 i686 armv7h) url='http://gcc.gnu.org/' @@ -14,17 +14,18 @@ depends=($_target-binutils libmpc zlib) makedepends=(gmp mpfr $_target-newlib) optdepends=("$_target-newlib: Standard C library ($_target target)") options=(!emptydirs !strip) -source=(https://gcc.gnu.org/pub/gcc/releases/gcc-$_pkgver/gcc-$_pkgver.tar.xz{,.sig} - http://isl.gforge.inria.fr/isl-$_islver.tar.bz2) -sha512sums=('42ae38928bd2e8183af445da34220964eb690b675b1892bbeb7cd5bb62be499011ec9a93397dba5e2fb681afadfc6f2767d03b9035b44ba9be807187ae6dc65e' +source=(https://gcc.gnu.org/pub/gcc/releases/gcc-$pkgver/gcc-$pkgver.tar.xz{,.sig} + #https://gcc.gnu.org/pub/gcc/snapshots/$_snapshot/gcc-$_snapshot.tar.xz + https://libisl.sourceforge.io/isl-$_islver.tar.bz2) +sha512sums=('d53a0a966230895c54f01aea38696f818817b505f1e2bfa65e508753fcd01b2aedb4a61434f41f3a2ddbbd9f41384b96153c684ded3f0fa97c82758d9de5c7cf' 'SKIP' - 'fc2c9796979610dd51143dcefe4f5c989c4354571cc5a1fcc6b932fd41f42a54f6b43adfd289af61be7bd06f3a523fa6a7d7ee56680e32d8036beb4c188fa668') + 'aab3bddbda96b801d0f56d2869f943157aad52a6f6e6a61745edd740234c635c38231af20bc3f1a08d416a5e973a90e18249078ed8e4ae2f1d5de57658738e95') validpgpkeys=(33C235A34C46AA3FFB293709A328C3A2C3C45C06 # Jakub Jelinek 13975A70E63C361C73AE69EF6EEB81F8981C74C7) # Richard Guenther if [ -n "$_snapshot" ]; then _basedir=gcc-$_snapshot else - _basedir=gcc-$_pkgver + _basedir=gcc-$pkgver fi prepare() { @@ -33,7 +34,7 @@ prepare() { # link isl for in-tree builds ln -sf ../isl-$_islver isl - echo $_pkgver > gcc/BASE-VER + echo $pkgver > gcc/BASE-VER # hack! - some configure tests for header files using "$CPP $CPPFLAGS" sed -i "/ac_cpp=/s/\$CPPFLAGS/\$CPPFLAGS -O2/" "$srcdir"/$_basedir/{libiberty,gcc}/configure @@ -48,7 +49,12 @@ build() { # http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48565 CFLAGS=${CFLAGS/-pipe/} CXXFLAGS=${CXXFLAGS/-pipe/} - + + if [ "$CARCH" = i686 ]; then + # using -Werror=format-security causes i686 build to fail + CXXFLAGS+=' -Wno-error=format-security' + fi + $srcdir/$_basedir/configure \ --target=$_target \ --prefix=/usr \ From b3fd4d33c63367821a8d80c05f00e5edab5a4ad4 Mon Sep 17 00:00:00 2001 From: David P Date: Oct 14 2021 16:17:12 +0000 Subject: [PATCH 14/73] updpkg: libre/xtensa-elf-gcc 11.2.0-1 Signed-off-by: David P --- diff --git a/libre/xtensa-elf-gcc/PKGBUILD b/libre/xtensa-elf-gcc/PKGBUILD index adb789f..b9db258 100644 --- a/libre/xtensa-elf-gcc/PKGBUILD +++ b/libre/xtensa-elf-gcc/PKGBUILD @@ -2,10 +2,10 @@ _target=xtensa-elf pkgname=$_target-gcc -_pkgver=10.2.0 -pkgver=$_pkgver -_islver=0.22 +pkgver=11.2.0 +_islver=0.24 pkgrel=1 +#_snapshot=8-20210107 pkgdesc='The GNU Compiler Collection - cross compiler for Xtensa (bare-metal) target' arch=(x86_64 i686 armv7h) url='http://gcc.gnu.org/' @@ -13,30 +13,32 @@ license=(GPL LGPL FDL) depends=($_target-binutils libmpc zlib) makedepends=(gmp mpfr) options=(!emptydirs !strip) -source=(https://gcc.gnu.org/pub/gcc/releases/gcc-$_pkgver/gcc-$_pkgver.tar.xz{,.sig} - http://isl.gforge.inria.fr/isl-$_islver.tar.bz2 +source=(https://gcc.gnu.org/pub/gcc/releases/gcc-$pkgver/gcc-$pkgver.tar.xz{,.sig} + #https://gcc.gnu.org/pub/gcc/snapshots/$_snapshot/gcc-$_snapshot.tar.xz + https://libisl.sourceforge.io/isl-$_islver.tar.bz2 gcc.patch) -sha512sums=('42ae38928bd2e8183af445da34220964eb690b675b1892bbeb7cd5bb62be499011ec9a93397dba5e2fb681afadfc6f2767d03b9035b44ba9be807187ae6dc65e' +sha512sums=('d53a0a966230895c54f01aea38696f818817b505f1e2bfa65e508753fcd01b2aedb4a61434f41f3a2ddbbd9f41384b96153c684ded3f0fa97c82758d9de5c7cf' 'SKIP' - 'fc2c9796979610dd51143dcefe4f5c989c4354571cc5a1fcc6b932fd41f42a54f6b43adfd289af61be7bd06f3a523fa6a7d7ee56680e32d8036beb4c188fa668' + 'aab3bddbda96b801d0f56d2869f943157aad52a6f6e6a61745edd740234c635c38231af20bc3f1a08d416a5e973a90e18249078ed8e4ae2f1d5de57658738e95' '7637408259cef4b14a2f41690bbc769ad0dc6cf4d1c782405526aeb58f68193269af6882b23fb57c3521174e45709ed2d54f0af1f835646e70a3bfd9f626aad9') validpgpkeys=(33C235A34C46AA3FFB293709A328C3A2C3C45C06 # Jakub Jelinek 13975A70E63C361C73AE69EF6EEB81F8981C74C7) # Richard Guenther if [ -n "$_snapshot" ]; then _basedir=gcc-$_snapshot else - _basedir=gcc-$_pkgver + _basedir=gcc-$pkgver fi prepare() { cd $_basedir + # https://github.com/qca/open-ath9k-htc-firmware/tree/master/local/patches patch -Np1 -i ../gcc.patch # link isl for in-tree builds ln -sf ../isl-$_islver isl - echo $_pkgver > gcc/BASE-VER + echo $pkgver > gcc/BASE-VER # hack! - some configure tests for header files using "$CPP $CPPFLAGS" sed -i "/ac_cpp=/s/\$CPPFLAGS/\$CPPFLAGS -O2/" "$srcdir"/$_basedir/{libiberty,gcc}/configure @@ -52,6 +54,11 @@ build() { CFLAGS=${CFLAGS/-pipe/} CXXFLAGS=${CXXFLAGS/-pipe/} + if [ "$CARCH" = i686 ]; then + # using -Werror=format-security causes i686 build to fail + CXXFLAGS+=' -Wno-error=format-security' + fi + $srcdir/$_basedir/configure \ --target=$_target \ --prefix=/usr \ From a2e05211157ba21d35acb27a72a0a56a2f93c6d9 Mon Sep 17 00:00:00 2001 From: David P Date: Oct 14 2021 23:14:23 +0000 Subject: [PATCH 15/73] updpkg: libre/linux-libre-firmware 1:1.4-1 Signed-off-by: David P --- diff --git a/libre/linux-libre-firmware/0001-Update-carl9170-to-latest-upstream.patch b/libre/linux-libre-firmware/0001-Update-carl9170-to-latest-upstream.patch deleted file mode 100644 index e56707e..0000000 --- a/libre/linux-libre-firmware/0001-Update-carl9170-to-latest-upstream.patch +++ /dev/null @@ -1,4982 +0,0 @@ -From c164bf7f87f9081fee7e1a186dd7a87a9a020b9e Mon Sep 17 00:00:00 2001 -From: Jason Self -Date: Thu, 4 Jul 2019 15:12:33 -0700 -Subject: [PATCH 1/8] Update carl9170 to latest upstream - -Based on commit 001384147050b9cd9daadb4d3115cc0f13f5b319 -Dated May 5 2019. ---- - WHENCE | 4 +- - carl9170fw/carlfw/include/wl.h | 2 +- - carl9170fw/carlfw/src/hostif.c | 8 +- - carl9170fw/carlfw/src/printf.c | 0 - carl9170fw/carlfw/src/wlantx.c | 5 +- - carl9170fw/config/CMakeLists.txt | 6 +- - carl9170fw/config/conf.c | 210 ++++++---- - carl9170fw/config/confdata.c | 329 +++++++++------ - carl9170fw/config/expr.c | 206 +++++++--- - carl9170fw/config/expr.h | 105 ++++- - carl9170fw/config/kconf_id.c | 54 --- - carl9170fw/config/lkc.h | 50 +-- - carl9170fw/config/lkc_proto.h | 19 +- - carl9170fw/config/menu.c | 259 +++++++++--- - carl9170fw/config/preprocess.c | 573 +++++++++++++++++++++++++++ - carl9170fw/config/symbol.c | 255 ++++-------- - carl9170fw/config/util.c | 86 ++-- - carl9170fw/config/zconf.l | 336 ++++++++++------ - carl9170fw/config/zconf.y | 403 +++++++++---------- - carl9170fw/include/linux/ieee80211.h | 24 +- - carl9170fw/include/shared/wlan.h | 2 +- - carl9170fw/toolchain/Makefile | 8 +- - carl9170fw/toolchain/SHA256SUMS | 18 +- - 23 files changed, 1942 insertions(+), 1020 deletions(-) - mode change 100755 => 100644 carl9170fw/carlfw/src/printf.c - delete mode 100644 carl9170fw/config/kconf_id.c - create mode 100644 carl9170fw/config/preprocess.c - -diff --git a/WHENCE b/WHENCE -index dd8ec20..2932155 100644 ---- a/WHENCE -+++ b/WHENCE -@@ -142,8 +142,8 @@ From https://git.kernel.org/pub/scm/utils/cis-tools/cis-tools.git - - Driver: carl9170 -- Atheros AR9170 802.11 draft-n USB driver - --Version: Based on commit 370b7919114a02149088c482c8709cafb9bf7478 --dated May 2 2018. -+Version: Based on commit 001384147050b9cd9daadb4d3115cc0f13f5b319 -+dated May 5 2019. - - Licence: GPLv2 or later. - -diff --git a/carl9170fw/carlfw/include/wl.h b/carl9170fw/carlfw/include/wl.h -index 8499ca2..5566be4 100644 ---- a/carl9170fw/carlfw/include/wl.h -+++ b/carl9170fw/carlfw/include/wl.h -@@ -237,7 +237,7 @@ static inline __inline void unhide_super(struct dma_desc *desc) - desc->totalLen += sizeof(struct carl9170_tx_superdesc); - } - --static inline __inline __hot void read_tsf(uint32_t *tsf) -+static inline __inline __hot void read_tsf(uint32_t tsf[static 2]) - { - /* - * "According to the [hardware] documentation: -diff --git a/carl9170fw/carlfw/src/hostif.c b/carl9170fw/carlfw/src/hostif.c -index 73e89c7..06726db 100644 ---- a/carl9170fw/carlfw/src/hostif.c -+++ b/carl9170fw/carlfw/src/hostif.c -@@ -213,10 +213,14 @@ void handle_cmd(struct carl9170_rsp *resp) - fw.reboot = 1; - break; - -- case CARL9170_CMD_READ_TSF: -+ case CARL9170_CMD_READ_TSF: { -+ uint32_t tmptsf[2]; -+ -+ read_tsf(tmptsf); - resp->hdr.len = 8; -- read_tsf((uint32_t *)resp->tsf.tsf); -+ memcpy(resp->tsf.tsf, tmptsf, sizeof(tmptsf)); - break; -+ } - - case CARL9170_CMD_RX_FILTER: - resp->hdr.len = 0; -diff --git a/carl9170fw/carlfw/src/printf.c b/carl9170fw/carlfw/src/printf.c -old mode 100755 -new mode 100644 -diff --git a/carl9170fw/carlfw/src/wlantx.c b/carl9170fw/carlfw/src/wlantx.c -index 474c040..a8d0952 100644 ---- a/carl9170fw/carlfw/src/wlantx.c -+++ b/carl9170fw/carlfw/src/wlantx.c -@@ -260,7 +260,7 @@ static void __wlan_tx(struct dma_desc *desc) - - if (unlikely(super->s.fill_in_tsf)) { - struct ieee80211_mgmt *mgmt = (void *) &super->f.data.i3e; -- uint32_t *tsf = (uint32_t *) &mgmt->u.probe_resp.timestamp; -+ uint32_t tmptsf[2]; - - /* - * Truth be told: this is a hack. -@@ -272,7 +272,8 @@ static void __wlan_tx(struct dma_desc *desc) - * (even, if it's got an accurate atomic clock source). - */ - -- read_tsf(tsf); -+ read_tsf(tmptsf); -+ memcpy(&mgmt->u.probe_resp.timestamp, tmptsf, sizeof(tmptsf)); - } - - wlan_tx_ampdu(super); -diff --git a/carl9170fw/config/CMakeLists.txt b/carl9170fw/config/CMakeLists.txt -index 0a96a82..23e7218 100644 ---- a/carl9170fw/config/CMakeLists.txt -+++ b/carl9170fw/config/CMakeLists.txt -@@ -11,13 +11,13 @@ include_directories(${CMAKE_CURRENT_SOURCE_DIR}) - - file(MAKE_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/../include/generated") - --BISON_TARGET(zconf zconf.y zconf.tab.c COMPILE_FLAGS "-l -b zconf -p zconf -t") --FLEX_TARGET(zconfscan zconf.l zconf.lex.c COMPILE_FLAGS "-Pzconf -L") -+BISON_TARGET(zconf zconf.y zconf.tab.c COMPILE_FLAGS "-l -b zconf -p yy -t") -+FLEX_TARGET(zconfscan zconf.l zconf.lex.c COMPILE_FLAGS "-Pyy -L") - - SET(zconf_deps ${FLEX_zconfscan_OUTPUTS}) - SET_SOURCE_FILES_PROPERTIES(${BISON_zconf_OUTPUTS} - PROPERTIES OBJECT_DEPENDS "${zconf_deps}") - --set(conf_src conf.c ${BISON_zconf_OUTPUTS}) -+set(conf_src conf.c symbol.c confdata.c expr.c preprocess.c ${BISON_zconf_OUTPUTS} ${FLEX_zconfscan_OUTPUTS}) - - add_executable(conf ${conf_src}) -diff --git a/carl9170fw/config/conf.c b/carl9170fw/config/conf.c -index 6be6143..2949b7d 100644 ---- a/carl9170fw/config/conf.c -+++ b/carl9170fw/config/conf.c -@@ -1,9 +1,8 @@ -+// SPDX-License-Identifier: GPL-2.0 - /* - * Copyright (C) 2002 Roman Zippel -- * Released under the terms of the GNU GPL v2.0. - */ - --#include - #include - #include - #include -@@ -20,10 +19,10 @@ - - static void conf(struct menu *menu); - static void check_conf(struct menu *menu); --static void xfgets(char *str, int size, FILE *in); - - enum input_mode { - oldaskconfig, -+ syncconfig, - oldconfig, - allnoconfig, - allyesconfig, -@@ -33,12 +32,13 @@ enum input_mode { - defconfig, - savedefconfig, - listnewconfig, -- oldnoconfig, --} input_mode = oldaskconfig; -+ olddefconfig, -+}; -+static enum input_mode input_mode = oldaskconfig; - - static int indent = 1; - static int tty_stdio; --static int valid_stdin = 1; -+static int sync_kconfig; - static int conf_cnt; - static char line[PATH_MAX]; - static struct menu *rootEntry; -@@ -70,14 +70,14 @@ static void strip(char *str) - *p-- = 0; - } - --static void check_stdin(void) -+/* Helper function to facilitate fgets() by Jean Sacren. */ -+static void xfgets(char *str, int size, FILE *in) - { -- if (!valid_stdin) { -- printf(_("aborted!\n\n")); -- printf(_("Console input/output is redirected. ")); -- printf(_("Run 'make config' to update configuration.\n\n")); -- exit(1); -- } -+ if (!fgets(str, size, in)) -+ fprintf(stderr, "\nError in reading or end of file.\n"); -+ -+ if (!tty_stdio) -+ printf("%s", str); - } - - static int conf_askvalue(struct symbol *sym, const char *def) -@@ -85,7 +85,7 @@ static int conf_askvalue(struct symbol *sym, const char *def) - enum symbol_type type = sym_get_type(sym); - - if (!sym_has_value(sym)) -- printf(_("(NEW) ")); -+ printf("(NEW) "); - - line[0] = '\n'; - line[1] = 0; -@@ -99,17 +99,15 @@ static int conf_askvalue(struct symbol *sym, const char *def) - - switch (input_mode) { - case oldconfig: -+ case syncconfig: - if (sym_has_value(sym)) { - printf("%s\n", def); - return 0; - } -- check_stdin(); - /* fall through */ - case oldaskconfig: - fflush(stdout); - xfgets(line, sizeof(line), stdin); -- if (!tty_stdio) -- printf("\n"); - return 1; - default: - break; -@@ -134,7 +132,7 @@ static int conf_string(struct menu *menu) - const char *def; - - while (1) { -- printf("%*s%s ", indent - 1, "", _(menu->prompt->text)); -+ printf("%*s%s ", indent - 1, "", menu->prompt->text); - printf("(%s) ", sym->name); - def = sym_get_string_value(sym); - if (sym_get_string_value(sym)) -@@ -167,7 +165,7 @@ static int conf_sym(struct menu *menu) - tristate oldval, newval; - - while (1) { -- printf("%*s%s ", indent - 1, "", _(menu->prompt->text)); -+ printf("%*s%s ", indent - 1, "", menu->prompt->text); - if (sym->name) - printf("(%s) ", sym->name); - putchar('['); -@@ -189,9 +187,7 @@ static int conf_sym(struct menu *menu) - printf("/m"); - if (oldval != yes && sym_tristate_within_range(sym, yes)) - printf("/y"); -- if (menu_has_help(menu)) -- printf("/?"); -- printf("] "); -+ printf("/?] "); - if (!conf_askvalue(sym, sym_get_string_value(sym))) - return 0; - strip(line); -@@ -254,7 +250,7 @@ static int conf_choice(struct menu *menu) - case no: - return 1; - case mod: -- printf("%*s%s\n", indent - 1, "", _(menu_get_prompt(menu))); -+ printf("%*s%s\n", indent - 1, "", menu_get_prompt(menu)); - return 0; - case yes: - break; -@@ -264,7 +260,7 @@ static int conf_choice(struct menu *menu) - while (1) { - int cnt, def; - -- printf("%*s%s\n", indent - 1, "", _(menu_get_prompt(menu))); -+ printf("%*s%s\n", indent - 1, "", menu_get_prompt(menu)); - def_sym = sym_get_choice_value(sym); - cnt = def = 0; - line[0] = 0; -@@ -272,7 +268,7 @@ static int conf_choice(struct menu *menu) - if (!menu_is_visible(child)) - continue; - if (!child->sym) { -- printf("%*c %s\n", indent, '*', _(menu_get_prompt(child))); -+ printf("%*c %s\n", indent, '*', menu_get_prompt(child)); - continue; - } - cnt++; -@@ -281,30 +277,27 @@ static int conf_choice(struct menu *menu) - printf("%*c", indent, '>'); - } else - printf("%*c", indent, ' '); -- printf(" %d. %s", cnt, _(menu_get_prompt(child))); -+ printf(" %d. %s", cnt, menu_get_prompt(child)); - if (child->sym->name) - printf(" (%s)", child->sym->name); - if (!sym_has_value(child->sym)) -- printf(_(" (NEW)")); -+ printf(" (NEW)"); - printf("\n"); - } -- printf(_("%*schoice"), indent - 1, ""); -+ printf("%*schoice", indent - 1, ""); - if (cnt == 1) { - printf("[1]: 1\n"); - goto conf_childs; - } -- printf("[1-%d", cnt); -- if (menu_has_help(menu)) -- printf("?"); -- printf("]: "); -+ printf("[1-%d?]: ", cnt); - switch (input_mode) { - case oldconfig: -+ case syncconfig: - if (!is_new) { - cnt = def; - printf("%d\n", cnt); - break; - } -- check_stdin(); - /* fall through */ - case oldaskconfig: - fflush(stdout); -@@ -364,9 +357,11 @@ static void conf(struct menu *menu) - - switch (prop->type) { - case P_MENU: -- if ((input_mode == listnewconfig || -- input_mode == oldnoconfig) && -- rootEntry != menu) { -+ /* -+ * Except in oldaskconfig mode, we show only menus that -+ * contain new symbols. -+ */ -+ if (input_mode != oldaskconfig && rootEntry != menu) { - check_conf(menu); - return; - } -@@ -376,7 +371,7 @@ static void conf(struct menu *menu) - if (prompt) - printf("%*c\n%*c %s\n%*c\n", - indent, '*', -- indent, '*', _(prompt), -+ indent, '*', prompt, - indent, '*'); - default: - ; -@@ -426,12 +421,22 @@ static void check_conf(struct menu *menu) - if (sym_is_changable(sym) || - (sym_is_choice(sym) && sym_get_tristate_value(sym) == yes)) { - if (input_mode == listnewconfig) { -- if (sym->name && !sym_is_choice_value(sym)) { -- printf("%s%s\n", CONFIG_, sym->name); -+ if (sym->name) { -+ const char *str; -+ -+ if (sym->type == S_STRING) { -+ str = sym_get_string_value(sym); -+ str = sym_escape_string_value(str); -+ printf("%s%s=%s\n", CONFIG_, sym->name, str); -+ free((void *)str); -+ } else { -+ str = sym_get_string_value(sym); -+ printf("%s%s=%s\n", CONFIG_, sym->name, str); -+ } - } -- } else if (input_mode != oldnoconfig) { -+ } else { - if (!conf_cnt++) -- printf(_("*\n* Restart config...\n*\n")); -+ printf("*\n* Restart config...\n*\n"); - rootEntry = menu_get_parent_menu(menu); - conf(rootEntry); - } -@@ -443,8 +448,9 @@ static void check_conf(struct menu *menu) - } - - static struct option long_opts[] = { -- {"askconfig", no_argument, NULL, oldaskconfig}, -- {"config", no_argument, NULL, oldconfig}, -+ {"oldaskconfig", no_argument, NULL, oldaskconfig}, -+ {"oldconfig", no_argument, NULL, oldconfig}, -+ {"syncconfig", no_argument, NULL, syncconfig}, - {"defconfig", optional_argument, NULL, defconfig}, - {"savedefconfig", required_argument, NULL, savedefconfig}, - {"allnoconfig", no_argument, NULL, allnoconfig}, -@@ -453,7 +459,7 @@ static struct option long_opts[] = { - {"alldefconfig", no_argument, NULL, alldefconfig}, - {"randconfig", no_argument, NULL, randconfig}, - {"listnewconfig", no_argument, NULL, listnewconfig}, -- {"noconfig", no_argument, NULL, oldnoconfig}, -+ {"olddefconfig", no_argument, NULL, olddefconfig}, - {NULL, 0, NULL, 0} - }; - -@@ -463,10 +469,11 @@ static void conf_usage(const char *progname) - printf("Usage: %s [-s] [option] \n", progname); - printf("[option] is _one_ of the following:\n"); - printf(" --listnewconfig List new options\n"); -- printf(" --askconfig Start a new configuration using a line-oriented program\n"); -- printf(" --config Update a configuration using a provided .config as base\n"); -- printf(" --silentconfig Same as config, but quietly, additionally update deps\n"); -- printf(" --noconfig Same as silentconfig but set new symbols to no\n"); -+ printf(" --oldaskconfig Start a new configuration using a line-oriented program\n"); -+ printf(" --oldconfig Update a configuration using a provided .config as base\n"); -+ printf(" --syncconfig Similar to oldconfig but generates configuration in\n" -+ " include/{generated/,config/}\n"); -+ printf(" --olddefconfig Same as oldconfig but sets new symbols to their default value\n"); - printf(" --defconfig New config with default defined in \n"); - printf(" --savedefconfig Save the minimal current configuration to \n"); - printf(" --allnoconfig New config where all options are answered with no\n"); -@@ -482,12 +489,9 @@ int main(int ac, char **av) - int opt; - const char *name, *defconfig_file = NULL /* gcc uninit */; - struct stat tmpstat; -+ int no_conf_write = 0; - -- setlocale(LC_ALL, ""); -- bindtextdomain(PACKAGE, LOCALEDIR); -- textdomain(PACKAGE); -- -- tty_stdio = isatty(0) && isatty(1) && isatty(2); -+ tty_stdio = isatty(0) && isatty(1); - - while ((opt = getopt_long(ac, av, "s", long_opts, NULL)) != -1) { - if (opt == 's') { -@@ -496,6 +500,14 @@ int main(int ac, char **av) - } - input_mode = (enum input_mode)opt; - switch (opt) { -+ case syncconfig: -+ /* -+ * syncconfig is invoked during the build stage. -+ * Suppress distracting "configuration written to ..." -+ */ -+ conf_set_message_callback(NULL); -+ sync_kconfig = 1; -+ break; - case defconfig: - case savedefconfig: - defconfig_file = optarg; -@@ -532,7 +544,7 @@ int main(int ac, char **av) - case allmodconfig: - case alldefconfig: - case listnewconfig: -- case oldnoconfig: -+ case olddefconfig: - break; - case '?': - conf_usage(progname); -@@ -541,30 +553,45 @@ int main(int ac, char **av) - } - } - if (ac == optind) { -- printf(_("%s: Kconfig file missing\n"), av[0]); -+ fprintf(stderr, "%s: Kconfig file missing\n", av[0]); - conf_usage(progname); - exit(1); - } - name = av[optind]; - conf_parse(name); - //zconfdump(stdout); -+ if (sync_kconfig) { -+ name = conf_get_configname(); -+ if (stat(name, &tmpstat)) { -+ fprintf(stderr, "***\n" -+ "*** Configuration file \"%s\" not found!\n" -+ "***\n" -+ "*** Please run some configurator (e.g. \"make oldconfig\" or\n" -+ "*** \"make menuconfig\" or \"make xconfig\").\n" -+ "***\n", name); -+ exit(1); -+ } -+ } - - switch (input_mode) { - case defconfig: - if (!defconfig_file) - defconfig_file = conf_get_default_confname(); - if (conf_read(defconfig_file)) { -- printf(_("***\n" -- "*** Can't find default configuration \"%s\"!\n" -- "***\n"), defconfig_file); -+ fprintf(stderr, -+ "***\n" -+ "*** Can't find default configuration \"%s\"!\n" -+ "***\n", -+ defconfig_file); - exit(1); - } - break; - case savedefconfig: -+ case syncconfig: - case oldaskconfig: - case oldconfig: - case listnewconfig: -- case oldnoconfig: -+ case olddefconfig: - conf_read(NULL); - break; - case allnoconfig: -@@ -578,7 +605,7 @@ int main(int ac, char **av) - if ((strcmp(name, "") != 0) && (strcmp(name, "1") != 0)) { - if (conf_read_simple(name, S_DEF_USER)) { - fprintf(stderr, -- _("*** Can't read seed configuration \"%s\"!\n"), -+ "*** Can't read seed configuration \"%s\"!\n", - name); - exit(1); - } -@@ -595,7 +622,7 @@ int main(int ac, char **av) - if (conf_read_simple(name, S_DEF_USER) && - conf_read_simple("all.config", S_DEF_USER)) { - fprintf(stderr, -- _("*** KCONFIG_ALLCONFIG set, but no \"%s\" or \"all.config\" file found\n"), -+ "*** KCONFIG_ALLCONFIG set, but no \"%s\" or \"all.config\" file found\n", - name); - exit(1); - } -@@ -604,7 +631,17 @@ int main(int ac, char **av) - break; - } - -- valid_stdin = tty_stdio; -+ if (sync_kconfig) { -+ name = getenv("KCONFIG_NOSILENTUPDATE"); -+ if (name && *name) { -+ if (conf_get_changed()) { -+ fprintf(stderr, -+ "\n*** The configuration requires explicit update.\n\n"); -+ return 1; -+ } -+ no_conf_write = 1; -+ } -+ } - - switch (input_mode) { - case allnoconfig: -@@ -635,44 +672,51 @@ int main(int ac, char **av) - /* fall through */ - case oldconfig: - case listnewconfig: -- case oldnoconfig: -+ case syncconfig: - /* Update until a loop caused no more changes */ - do { - conf_cnt = 0; - check_conf(&rootmenu); -- } while (conf_cnt && -- (input_mode != listnewconfig && -- input_mode != oldnoconfig)); -+ } while (conf_cnt); -+ break; -+ case olddefconfig: -+ default: - break; - } - - if (input_mode == savedefconfig) { - if (conf_write_defconfig(defconfig_file)) { -- fprintf(stderr, _("n*** Error while saving defconfig to: %s\n\n"), -+ fprintf(stderr, "n*** Error while saving defconfig to: %s\n\n", - defconfig_file); - return 1; - } - } else if (input_mode != listnewconfig) { -- /* -- * build so we shall update autoconf. -- */ -- if (conf_write(NULL)) { -- fprintf(stderr, _("\n*** Error during writing of the configuration.\n\n")); -+ if (!no_conf_write && conf_write(NULL)) { -+ fprintf(stderr, "\n*** Error during writing of the configuration.\n\n"); - exit(1); - } -- if (conf_write_autoconf()) { -- fprintf(stderr, _("\n*** Error during update of the configuration.\n\n")); -+ -+ /* -+ * Create auto.conf if it does not exist. -+ * This prevents GNU Make 4.1 or older from emitting -+ * "include/generated/auto.conf: No such file or directory" -+ * in the top-level Makefile -+ * -+ * syncconfig always creates or updates auto.conf because it is -+ * used during the build. -+ */ -+ -+ /* -+ * In our cmake case, we always want to update the autogenerated -+ * files. -+ */ -+ sync_kconfig = 1; -+ -+ if (conf_write_autoconf(sync_kconfig) && sync_kconfig) { -+ fprintf(stderr, -+ "\n*** Error during sync of the configuration.\n\n"); - return 1; - } - } - return 0; - } -- --/* -- * Helper function to facilitate fgets() by Jean Sacren. -- */ --void xfgets(char *str, int size, FILE *in) --{ -- if (fgets(str, size, in) == NULL) -- fprintf(stderr, "\nError in reading or end of file.\n"); --} -diff --git a/carl9170fw/config/confdata.c b/carl9170fw/config/confdata.c -index e606f06..d67695d 100644 ---- a/carl9170fw/config/confdata.c -+++ b/carl9170fw/config/confdata.c -@@ -1,12 +1,13 @@ -+// SPDX-License-Identifier: GPL-2.0 - /* - * Copyright (C) 2002 Roman Zippel -- * Released under the terms of the GNU GPL v2.0. - */ - - #include - #include - #include - #include -+#include - #include - #include - #include -@@ -16,6 +17,105 @@ - - #include "lkc.h" - -+/* return true if 'path' exists, false otherwise */ -+static bool is_present(const char *path) -+{ -+ struct stat st; -+ -+ return !stat(path, &st); -+} -+ -+/* return true if 'path' exists and it is a directory, false otherwise */ -+static bool is_dir(const char *path) -+{ -+ struct stat st; -+ -+ if (stat(path, &st)) -+ return 0; -+ -+ return S_ISDIR(st.st_mode); -+} -+ -+/* -+ * Create the parent directory of the given path. -+ * -+ * For example, if 'include/config/auto.conf' is given, create 'include/config'. -+ */ -+static int make_parent_dir(const char *path) -+{ -+ char tmp[PATH_MAX + 1]; -+ char *p; -+ -+ strncpy(tmp, path, sizeof(tmp)); -+ tmp[sizeof(tmp) - 1] = 0; -+ -+ /* Remove the base name. Just return if nothing is left */ -+ p = strrchr(tmp, '/'); -+ if (!p) -+ return 0; -+ *(p + 1) = 0; -+ -+ /* Just in case it is an absolute path */ -+ p = tmp; -+ while (*p == '/') -+ p++; -+ -+ while ((p = strchr(p, '/'))) { -+ *p = 0; -+ -+ /* skip if the directory exists */ -+ if (!is_dir(tmp) && mkdir(tmp, 0755)) -+ return -1; -+ -+ *p = '/'; -+ while (*p == '/') -+ p++; -+ } -+ -+ return 0; -+} -+ -+static char depfile_path[PATH_MAX]; -+static size_t depfile_prefix_len; -+ -+/* touch depfile for symbol 'name' */ -+static int conf_touch_dep(const char *name) -+{ -+ int fd, ret; -+ const char *s; -+ char *d, c; -+ -+ /* check overflow: prefix + name + ".h" + '\0' must fit in buffer. */ -+ if (depfile_prefix_len + strlen(name) + 3 > sizeof(depfile_path)) -+ return -1; -+ -+ d = depfile_path + depfile_prefix_len; -+ s = name; -+ -+ while ((c = *s++)) -+ *d++ = (c == '_') ? '/' : tolower(c); -+ strcpy(d, ".h"); -+ -+ /* Assume directory path already exists. */ -+ fd = open(depfile_path, O_WRONLY | O_CREAT | O_TRUNC, 0644); -+ if (fd == -1) { -+ if (errno != ENOENT) -+ return -1; -+ -+ ret = make_parent_dir(depfile_path); -+ if (ret) -+ return ret; -+ -+ /* Try it again. */ -+ fd = open(depfile_path, O_WRONLY | O_CREAT | O_TRUNC, 0644); -+ if (fd == -1) -+ return -1; -+ } -+ close(fd); -+ -+ return 0; -+} -+ - struct conf_printer { - void (*print_symbol)(FILE *, struct symbol *, const char *, void *); - void (*print_comment)(FILE *, const char *, void *); -@@ -28,7 +128,7 @@ static void conf_message(const char *fmt, ...) - __attribute__ ((format (printf, 1, 2))); - - static const char *conf_filename; --static int conf_lineno, conf_warnings, conf_unsaved; -+static int conf_lineno, conf_warnings; - - const char conf_defname[] = "include/generated/defconfig"; - -@@ -43,16 +143,16 @@ static void conf_warning(const char *fmt, ...) - conf_warnings++; - } - --static void conf_default_message_callback(const char *fmt, va_list ap) -+static void conf_default_message_callback(const char *s) - { - printf("#\n# "); -- vprintf(fmt, ap); -+ printf("%s", s); - printf("\n#\n"); - } - --static void (*conf_message_callback) (const char *fmt, va_list ap) = -+static void (*conf_message_callback)(const char *s) = - conf_default_message_callback; --void conf_set_message_callback(void (*fn) (const char *fmt, va_list ap)) -+void conf_set_message_callback(void (*fn)(const char *s)) - { - conf_message_callback = fn; - } -@@ -60,10 +160,15 @@ void conf_set_message_callback(void (*fn) (const char *fmt, va_list ap)) - static void conf_message(const char *fmt, ...) - { - va_list ap; -+ char buf[4096]; -+ -+ if (!conf_message_callback) -+ return; - - va_start(ap, fmt); -- if (conf_message_callback) -- conf_message_callback(fmt, ap); -+ -+ vsnprintf(buf, sizeof(buf), fmt, ap); -+ conf_message_callback(buf); - va_end(ap); - } - -@@ -81,43 +186,16 @@ const char *conf_get_autoconfig_name(void) - return name ? name : "include/generated/auto.conf"; - } - --static char *conf_expand_value(const char *in) --{ -- struct symbol *sym; -- const char *src; -- static char res_value[SYMBOL_MAXLENGTH]; -- char *dst, name[SYMBOL_MAXLENGTH]; -- -- res_value[0] = 0; -- dst = name; -- while ((src = strchr(in, '$'))) { -- strncat(res_value, in, src - in); -- src++; -- dst = name; -- while (isalnum(*src) || *src == '_') -- *dst++ = *src++; -- *dst = 0; -- sym = sym_lookup(name, 0); -- sym_calc_value(sym); -- strcat(res_value, sym_get_string_value(sym)); -- in = src; -- } -- strcat(res_value, in); -- -- return res_value; --} -- - char *conf_get_default_confname(void) - { -- struct stat buf; - static char fullname[PATH_MAX+1]; - char *env, *name; - -- name = conf_expand_value(conf_defname); -+ name = expand_string(conf_defname); - env = getenv(SRCTREE); - if (env) { - sprintf(fullname, "%s/%s", env, name); -- if (!stat(fullname, &buf)) -+ if (is_present(fullname)) - return fullname; - } - return name; -@@ -150,14 +228,6 @@ static int conf_set_sym_val(struct symbol *sym, int def, int def_flags, char *p) - conf_warning("symbol value '%s' invalid for %s", - p, sym->name); - return 1; -- case S_OTHER: -- if (*p != '"') { -- for (p2 = p; *p2 && !isspace(*p2); p2++) -- ; -- sym->type = S_STRING; -- goto done; -- } -- /* fall through */ - case S_STRING: - if (*p++ != '"') - break; -@@ -176,9 +246,8 @@ static int conf_set_sym_val(struct symbol *sym, int def, int def_flags, char *p) - /* fall through */ - case S_INT: - case S_HEX: -- done: - if (sym_string_valid(sym, p)) { -- sym->def[def].val = strdup(p); -+ sym->def[def].val = xstrdup(p); - sym->flags |= def_flags; - } else { - if (def != S_DEF_AUTO) -@@ -201,7 +270,7 @@ static int add_byte(int c, char **lineptr, size_t slen, size_t *n) - if (new_size > *n) { - new_size += LINE_GROWTH - 1; - new_size *= 2; -- nline = realloc(*lineptr, new_size); -+ nline = xrealloc(*lineptr, new_size); - if (!nline) - return -1; - -@@ -274,10 +343,11 @@ int conf_read_simple(const char *name, int def) - if (expr_calc_value(prop->visible.expr) == no || - prop->expr->type != E_SYMBOL) - continue; -- name = conf_expand_value(prop->expr->left.sym->name); -+ sym_calc_value(prop->expr->left.sym); -+ name = sym_get_string_value(prop->expr->left.sym); - in = zconf_fopen(name); - if (in) { -- conf_message(_("using defaults found in %s"), -+ conf_message("using defaults found in %s", - name); - goto load; - } -@@ -290,7 +360,6 @@ load: - conf_filename = name; - conf_lineno = 0; - conf_warnings = 0; -- conf_unsaved = 0; - - def_flags = SYMBOL_DEF << def; - for_all_symbols(i, sym) { -@@ -327,7 +396,7 @@ load: - sym = sym_find(line + 2 + strlen(CONFIG_)); - if (!sym) { - sym_add_change_count(1); -- goto setsym; -+ continue; - } - } else { - sym = sym_lookup(line + 2 + strlen(CONFIG_), 0); -@@ -357,17 +426,22 @@ load: - if (*p2 == '\r') - *p2 = 0; - } -- if (def == S_DEF_USER) { -- sym = sym_find(line + strlen(CONFIG_)); -- if (!sym) { -+ -+ sym = sym_find(line + strlen(CONFIG_)); -+ if (!sym) { -+ if (def == S_DEF_AUTO) -+ /* -+ * Reading from include/config/auto.conf -+ * If CONFIG_FOO previously existed in -+ * auto.conf but it is missing now, -+ * include/config/foo.h must be touched. -+ */ -+ conf_touch_dep(line + strlen(CONFIG_)); -+ else - sym_add_change_count(1); -- goto setsym; -- } -- } else { -- sym = sym_lookup(line + strlen(CONFIG_), 0); -- if (sym->type == S_UNKNOWN) -- sym->type = S_OTHER; -+ continue; - } -+ - if (sym->flags & def_flags) { - conf_warning("override: reassigning to symbol %s", sym->name); - } -@@ -380,7 +454,7 @@ load: - - continue; - } --setsym: -+ - if (sym && sym_is_choice_value(sym)) { - struct symbol *cs = prop_get_symbol(sym_get_choice_prop(sym)); - switch (sym->def[def].tri) { -@@ -409,6 +483,7 @@ setsym: - int conf_read(const char *name) - { - struct symbol *sym; -+ int conf_unsaved = 0; - int i; - - sym_set_change_count(0); -@@ -422,7 +497,7 @@ int conf_read(const char *name) - - for_all_symbols(i, sym) { - sym_calc_value(sym); -- if (sym_is_choice(sym) || (sym->flags & SYMBOL_AUTO)) -+ if (sym_is_choice(sym) || (sym->flags & SYMBOL_NO_WRITE)) - continue; - if (sym_has_value(sym) && (sym->flags & SYMBOL_WRITE)) { - /* check that calculated value agrees with saved value */ -@@ -678,7 +753,6 @@ static void conf_write_symbol(FILE *fp, struct symbol *sym, - const char *str; - - switch (sym->type) { -- case S_OTHER: - case S_UNKNOWN: - break; - case S_STRING: -@@ -791,15 +865,14 @@ int conf_write(const char *name) - struct menu *menu; - const char *basename; - const char *str; -- char dirname[PATH_MAX+1], tmpname[PATH_MAX+1], newname[PATH_MAX+1]; -+ char dirname[PATH_MAX+1], tmpname[PATH_MAX+22], newname[PATH_MAX+8]; - char *env; - - dirname[0] = 0; - if (name && name[0]) { -- struct stat st; - char *slash; - -- if (!stat(name, &st) && S_ISDIR(st.st_mode)) { -+ if (is_dir(name)) { - strcpy(dirname, name); - strcat(dirname, "/"); - basename = conf_get_configname(); -@@ -877,33 +950,61 @@ next: - return 1; - } - -- conf_message(_("configuration written to %s"), newname); -+ conf_message("configuration written to %s", newname); - - sym_set_change_count(0); - - return 0; - } - --static int conf_split_config(void) -+/* write a dependency file as used by kbuild to track dependencies */ -+static int conf_write_dep(const char *name) -+{ -+ struct file *file; -+ FILE *out; -+ -+ if (!name) -+ name = ".kconfig.d"; -+ out = fopen("..config.tmp", "w"); -+ if (!out) -+ return 1; -+ fprintf(out, "deps_config := \\\n"); -+ for (file = file_list; file; file = file->next) { -+ if (file->next) -+ fprintf(out, "\t%s \\\n", file->name); -+ else -+ fprintf(out, "\t%s\n", file->name); -+ } -+ fprintf(out, "\n%s: \\\n" -+ "\t$(deps_config)\n\n", conf_get_autoconfig_name()); -+ -+ env_write_dep(out, conf_get_autoconfig_name()); -+ -+ fprintf(out, "\n$(deps_config): ;\n"); -+ fclose(out); -+ -+ if (make_parent_dir(name)) -+ return 1; -+ rename("..config.tmp", name); -+ return 0; -+} -+ -+static int conf_touch_deps(void) - { - const char *name; -- char path[PATH_MAX+1]; -- char *s, *d, c; - struct symbol *sym; -- struct stat sb; -- int res, i, fd; -+ int res, i; -+ -+ strcpy(depfile_path, "include/generated/"); -+ depfile_prefix_len = strlen(depfile_path); - - name = conf_get_autoconfig_name(); - conf_read_simple(name, S_DEF_AUTO); - sym_calc_value(modules_sym); - -- if (chdir("include/generated")) -- return 1; -- -- res = 0; - for_all_symbols(i, sym) { - sym_calc_value(sym); -- if ((sym->flags & SYMBOL_AUTO) || !sym->name) -+ if ((sym->flags & SYMBOL_NO_WRITE) || !sym->name) - continue; - if (sym->flags & SYMBOL_WRITE) { - if (sym->flags & SYMBOL_DEF_AUTO) { -@@ -952,63 +1053,30 @@ static int conf_split_config(void) - * different from 'no'). - */ - -- /* Replace all '_' and append ".h" */ -- s = sym->name; -- d = path; -- while ((c = *s++)) { -- c = tolower(c); -- *d++ = (c == '_') ? '/' : c; -- } -- strcpy(d, ".h"); -- -- /* Assume directory path already exists. */ -- fd = open(path, O_WRONLY | O_CREAT | O_TRUNC, 0644); -- if (fd == -1) { -- if (errno != ENOENT) { -- res = 1; -- break; -- } -- /* -- * Create directory components, -- * unless they exist already. -- */ -- d = path; -- while ((d = strchr(d, '/'))) { -- *d = 0; -- if (stat(path, &sb) && mkdir(path, 0755)) { -- res = 1; -- goto out; -- } -- *d++ = '/'; -- } -- /* Try it again. */ -- fd = open(path, O_WRONLY | O_CREAT | O_TRUNC, 0644); -- if (fd == -1) { -- res = 1; -- break; -- } -- } -- close(fd); -+ res = conf_touch_dep(sym->name); -+ if (res) -+ return res; - } --out: -- if (chdir("../..")) -- return 1; - -- return res; -+ return 0; - } - --int conf_write_autoconf(void) -+int conf_write_autoconf(int overwrite) - { - struct symbol *sym; - const char *name; -+ const char *autoconf_name = conf_get_autoconfig_name(); - FILE *out, *tristate, *out_h, *out_c; - int i; - -+ if (!overwrite && is_present(autoconf_name)) -+ return 0; -+ - sym_clear_all_valid(); - -- file_write_dep("include/generated/auto.conf.cmd"); -+ conf_write_dep("include/generated/auto.conf.cmd"); - -- if (conf_split_config()) -+ if (conf_touch_deps()) - return 1; - - out = fopen(".tmpconfig", "w"); -@@ -1065,24 +1133,35 @@ int conf_write_autoconf(void) - name = getenv("KCONFIG_AUTOHEADER"); - if (!name) - name = "include/generated/autoconf.h"; -+ if (make_parent_dir(name)) -+ return 1; - if (rename(".tmpconfig.h", name)) - return 1; -+ - name = getenv("KCONFIG_TRISTATE"); - if (!name) - name = "include/generated/tristate.conf"; -+ if (make_parent_dir(name)) -+ return 1; - if (rename(".tmpconfig_tristate", name)) - return 1; -+ -+ if (make_parent_dir(autoconf_name)) -+ return 1; -+ - name = getenv("KCONFIG_CMAKE"); - if (!name) - name = "config.cmake"; -+ if (make_parent_dir(name)) -+ return 1; - if (rename(".tmpconfig.cmake", name)) - return 1; -- name = conf_get_autoconfig_name(); -+ - /* - * This must be the last step, kbuild has a dependency on auto.conf - * and this marks the successful completion of the previous steps. - */ -- if (rename(".tmpconfig", name)) -+ if (rename(".tmpconfig", autoconf_name)) - return 1; - - return 0; -@@ -1186,7 +1265,7 @@ void set_all_choice_values(struct symbol *csym) - bool conf_set_all_new_symbols(enum conf_def_mode mode) - { - struct symbol *sym, *csym; -- int i, cnt, pby, pty, ptm; /* pby: probability of boolean = y -+ int i, cnt, pby, pty, ptm; /* pby: probability of bool = y - * pty: probability of tristate = y - * ptm: probability of tristate = m - */ -diff --git a/carl9170fw/config/expr.c b/carl9170fw/config/expr.c -index 8cee597..77ffff3 100644 ---- a/carl9170fw/config/expr.c -+++ b/carl9170fw/config/expr.c -@@ -1,8 +1,10 @@ -+// SPDX-License-Identifier: GPL-2.0 - /* - * Copyright (C) 2002 Roman Zippel -- * Released under the terms of the GNU GPL v2.0. - */ - -+#include -+#include - #include - #include - #include -@@ -94,7 +96,7 @@ struct expr *expr_copy(const struct expr *org) - e->right.expr = expr_copy(org->right.expr); - break; - default: -- printf("can't copy type %d\n", e->type); -+ fprintf(stderr, "can't copy type %d\n", e->type); - free(e); - e = NULL; - break; -@@ -113,7 +115,7 @@ void expr_free(struct expr *e) - break; - case E_NOT: - expr_free(e->left.expr); -- return; -+ break; - case E_EQUAL: - case E_GEQ: - case E_GTH: -@@ -127,7 +129,7 @@ void expr_free(struct expr *e) - expr_free(e->right.expr); - break; - default: -- printf("how to free type %d?\n", e->type); -+ fprintf(stderr, "how to free type %d?\n", e->type); - break; - } - free(e); -@@ -138,8 +140,18 @@ static int trans_count; - #define e1 (*ep1) - #define e2 (*ep2) - -+/* -+ * expr_eliminate_eq() helper. -+ * -+ * Walks the two expression trees given in 'ep1' and 'ep2'. Any node that does -+ * not have type 'type' (E_OR/E_AND) is considered a leaf, and is compared -+ * against all other leaves. Two equal leaves are both replaced with either 'y' -+ * or 'n' as appropriate for 'type', to be eliminated later. -+ */ - static void __expr_eliminate_eq(enum expr_type type, struct expr **ep1, struct expr **ep2) - { -+ /* Recurse down to leaves */ -+ - if (e1->type == type) { - __expr_eliminate_eq(type, &e1->left.expr, &e2); - __expr_eliminate_eq(type, &e1->right.expr, &e2); -@@ -150,12 +162,18 @@ static void __expr_eliminate_eq(enum expr_type type, struct expr **ep1, struct e - __expr_eliminate_eq(type, &e1, &e2->right.expr); - return; - } -+ -+ /* e1 and e2 are leaves. Compare them. */ -+ - if (e1->type == E_SYMBOL && e2->type == E_SYMBOL && - e1->left.sym == e2->left.sym && - (e1->left.sym == &symbol_yes || e1->left.sym == &symbol_no)) - return; - if (!expr_eq(e1, e2)) - return; -+ -+ /* e1 and e2 are equal leaves. Prepare them for elimination. */ -+ - trans_count++; - expr_free(e1); expr_free(e2); - switch (type) { -@@ -172,6 +190,35 @@ static void __expr_eliminate_eq(enum expr_type type, struct expr **ep1, struct e - } - } - -+/* -+ * Rewrites the expressions 'ep1' and 'ep2' to remove operands common to both. -+ * Example reductions: -+ * -+ * ep1: A && B -> ep1: y -+ * ep2: A && B && C -> ep2: C -+ * -+ * ep1: A || B -> ep1: n -+ * ep2: A || B || C -> ep2: C -+ * -+ * ep1: A && (B && FOO) -> ep1: FOO -+ * ep2: (BAR && B) && A -> ep2: BAR -+ * -+ * ep1: A && (B || C) -> ep1: y -+ * ep2: (C || B) && A -> ep2: y -+ * -+ * Comparisons are done between all operands at the same "level" of && or ||. -+ * For example, in the expression 'e1 && (e2 || e3) && (e4 || e5)', the -+ * following operands will be compared: -+ * -+ * - 'e1', 'e2 || e3', and 'e4 || e5', against each other -+ * - e2 against e3 -+ * - e4 against e5 -+ * -+ * Parentheses are irrelevant within a single level. 'e1 && (e2 && e3)' and -+ * '(e1 && e2) && e3' are both a single level. -+ * -+ * See __expr_eliminate_eq() as well. -+ */ - void expr_eliminate_eq(struct expr **ep1, struct expr **ep2) - { - if (!e1 || !e2) -@@ -197,6 +244,12 @@ void expr_eliminate_eq(struct expr **ep1, struct expr **ep2) - #undef e1 - #undef e2 - -+/* -+ * Returns true if 'e1' and 'e2' are equal, after minor simplification. Two -+ * &&/|| expressions are considered equal if every operand in one expression -+ * equals some operand in the other (operands do not need to appear in the same -+ * order), recursively. -+ */ - static int expr_eq(struct expr *e1, struct expr *e2) - { - int res, old_count; -@@ -243,6 +296,17 @@ static int expr_eq(struct expr *e1, struct expr *e2) - return 0; - } - -+/* -+ * Recursively performs the following simplifications in-place (as well as the -+ * corresponding simplifications with swapped operands): -+ * -+ * expr && n -> n -+ * expr && y -> expr -+ * expr || n -> expr -+ * expr || y -> y -+ * -+ * Returns the optimized expression. -+ */ - static struct expr *expr_eliminate_yn(struct expr *e) - { - struct expr *tmp; -@@ -516,12 +580,21 @@ static struct expr *expr_join_and(struct expr *e1, struct expr *e2) - return NULL; - } - -+/* -+ * expr_eliminate_dups() helper. -+ * -+ * Walks the two expression trees given in 'ep1' and 'ep2'. Any node that does -+ * not have type 'type' (E_OR/E_AND) is considered a leaf, and is compared -+ * against all other leaves to look for simplifications. -+ */ - static void expr_eliminate_dups1(enum expr_type type, struct expr **ep1, struct expr **ep2) - { - #define e1 (*ep1) - #define e2 (*ep2) - struct expr *tmp; - -+ /* Recurse down to leaves */ -+ - if (e1->type == type) { - expr_eliminate_dups1(type, &e1->left.expr, &e2); - expr_eliminate_dups1(type, &e1->right.expr, &e2); -@@ -532,6 +605,9 @@ static void expr_eliminate_dups1(enum expr_type type, struct expr **ep1, struct - expr_eliminate_dups1(type, &e1, &e2->right.expr); - return; - } -+ -+ /* e1 and e2 are leaves. Compare and process them. */ -+ - if (e1 == e2) - return; - -@@ -568,6 +644,17 @@ static void expr_eliminate_dups1(enum expr_type type, struct expr **ep1, struct - #undef e2 - } - -+/* -+ * Rewrites 'e' in-place to remove ("join") duplicate and other redundant -+ * operands. -+ * -+ * Example simplifications: -+ * -+ * A || B || A -> A || B -+ * A && B && A=y -> A=y && B -+ * -+ * Returns the deduplicated expression. -+ */ - struct expr *expr_eliminate_dups(struct expr *e) - { - int oldcount; -@@ -584,6 +671,7 @@ struct expr *expr_eliminate_dups(struct expr *e) - ; - } - if (!trans_count) -+ /* No simplifications done in this pass. We're done */ - break; - e = expr_eliminate_yn(e); - } -@@ -591,6 +679,12 @@ struct expr *expr_eliminate_dups(struct expr *e) - return e; - } - -+/* -+ * Performs various simplifications involving logical operators and -+ * comparisons. -+ * -+ * Allocates and returns a new expression. -+ */ - struct expr *expr_transform(struct expr *e) - { - struct expr *tmp; -@@ -805,6 +899,20 @@ bool expr_depends_symbol(struct expr *dep, struct symbol *sym) - return false; - } - -+/* -+ * Inserts explicit comparisons of type 'type' to symbol 'sym' into the -+ * expression 'e'. -+ * -+ * Examples transformations for type == E_UNEQUAL, sym == &symbol_no: -+ * -+ * A -> A!=n -+ * !A -> A=n -+ * A && B -> !(A=n || B=n) -+ * A || B -> !(A=n && B=n) -+ * A && (B || C) -> !(A=n || (B=n && C=n)) -+ * -+ * Allocates and returns a new expression. -+ */ - struct expr *expr_trans_compare(struct expr *e, enum expr_type type, struct symbol *sym) - { - struct expr *e1, *e2; -@@ -874,7 +982,6 @@ enum string_value_kind { - k_string, - k_signed, - k_unsigned, -- k_invalid - }; - - union string_value { -@@ -905,13 +1012,10 @@ static enum string_value_kind expr_parse_string(const char *str, - val->u = strtoull(str, &tail, 16); - kind = k_unsigned; - break; -- case S_STRING: -- case S_UNKNOWN: -+ default: - val->s = strtoll(str, &tail, 0); - kind = k_signed; - break; -- default: -- return k_invalid; - } - return !errno && !*tail && tail > str && isxdigit(tail[-1]) - ? kind : k_string; -@@ -967,13 +1071,7 @@ tristate expr_calc_value(struct expr *e) - - if (k1 == k_string || k2 == k_string) - res = strcmp(str1, str2); -- else if (k1 == k_invalid || k2 == k_invalid) { -- if (e->type != E_EQUAL && e->type != E_UNEQUAL) { -- printf("Cannot compare \"%s\" and \"%s\"\n", str1, str2); -- return no; -- } -- res = strcmp(str1, str2); -- } else if (k1 == k_unsigned || k2 == k_unsigned) -+ else if (k1 == k_unsigned || k2 == k_unsigned) - res = (lval.u > rval.u) - (lval.u < rval.u); - else /* if (k1 == k_signed && k2 == k_signed) */ - res = (lval.s > rval.s) - (lval.s < rval.s); -@@ -1031,49 +1129,9 @@ static int expr_compare_type(enum expr_type t1, enum expr_type t2) - return 0; - } - --static inline struct expr * --expr_get_leftmost_symbol(const struct expr *e) --{ -- -- if (e == NULL) -- return NULL; -- -- while (e->type != E_SYMBOL) -- e = e->left.expr; -- -- return expr_copy(e); --} -- --/* -- * Given expression `e1' and `e2', returns the leaf of the longest -- * sub-expression of `e1' not containing 'e2. -- */ --struct expr *expr_simplify_unmet_dep(struct expr *e1, struct expr *e2) --{ -- struct expr *ret; -- -- switch (e1->type) { -- case E_OR: -- return expr_alloc_and( -- expr_simplify_unmet_dep(e1->left.expr, e2), -- expr_simplify_unmet_dep(e1->right.expr, e2)); -- case E_AND: { -- struct expr *e; -- e = expr_alloc_and(expr_copy(e1), expr_copy(e2)); -- e = expr_eliminate_dups(e); -- ret = (!expr_eq(e, e1)) ? e1 : NULL; -- expr_free(e); -- break; -- } -- default: -- ret = e1; -- break; -- } -- -- return expr_get_leftmost_symbol(ret); --} -- --void expr_print(struct expr *e, void (*fn)(void *, struct symbol *, const char *), void *data, int prevtoken) -+void expr_print(struct expr *e, -+ void (*fn)(void *, struct symbol *, const char *), -+ void *data, int prevtoken) - { - if (!e) { - fn(data, NULL, "y"); -@@ -1207,3 +1265,33 @@ void expr_gstr_print(struct expr *e, struct gstr *gs) - { - expr_print(e, expr_print_gstr_helper, gs, E_NONE); - } -+ -+/* -+ * Transform the top level "||" tokens into newlines and prepend each -+ * line with a minus. This makes expressions much easier to read. -+ * Suitable for reverse dependency expressions. -+ */ -+static void expr_print_revdep(struct expr *e, -+ void (*fn)(void *, struct symbol *, const char *), -+ void *data, tristate pr_type, const char **title) -+{ -+ if (e->type == E_OR) { -+ expr_print_revdep(e->left.expr, fn, data, pr_type, title); -+ expr_print_revdep(e->right.expr, fn, data, pr_type, title); -+ } else if (expr_calc_value(e) == pr_type) { -+ if (*title) { -+ fn(data, NULL, *title); -+ *title = NULL; -+ } -+ -+ fn(data, NULL, " - "); -+ expr_print(e, fn, data, E_NONE); -+ fn(data, NULL, "\n"); -+ } -+} -+ -+void expr_gstr_print_revdep(struct expr *e, struct gstr *gs, -+ tristate pr_type, const char *title) -+{ -+ expr_print_revdep(e, expr_print_gstr_helper, gs, pr_type, &title); -+} -diff --git a/carl9170fw/config/expr.h b/carl9170fw/config/expr.h -index a73f762..999edb6 100644 ---- a/carl9170fw/config/expr.h -+++ b/carl9170fw/config/expr.h -@@ -1,6 +1,6 @@ -+/* SPDX-License-Identifier: GPL-2.0 */ - /* - * Copyright (C) 2002 Roman Zippel -- * Released under the terms of the GNU GPL v2.0. - */ - - #ifndef EXPR_H -@@ -62,7 +62,7 @@ struct symbol_value { - }; - - enum symbol_type { -- S_UNKNOWN, S_BOOLEAN, S_TRISTATE, S_INT, S_HEX, S_STRING, S_OTHER -+ S_UNKNOWN, S_BOOLEAN, S_TRISTATE, S_INT, S_HEX, S_STRING - }; - - /* enum values are used as index to symbol.def[] */ -@@ -74,21 +74,64 @@ enum { - S_DEF_COUNT - }; - -+/* -+ * Represents a configuration symbol. -+ * -+ * Choices are represented as a special kind of symbol and have the -+ * SYMBOL_CHOICE bit set in 'flags'. -+ */ - struct symbol { -+ /* The next symbol in the same bucket in the symbol hash table */ - struct symbol *next; -+ -+ /* The name of the symbol, e.g. "FOO" for 'config FOO' */ - char *name; -+ -+ /* S_BOOLEAN, S_TRISTATE, ... */ - enum symbol_type type; -+ -+ /* -+ * The calculated value of the symbol. The SYMBOL_VALID bit is set in -+ * 'flags' when this is up to date. Note that this value might differ -+ * from the user value set in e.g. a .config file, due to visibility. -+ */ - struct symbol_value curr; -+ -+ /* -+ * Values for the symbol provided from outside. def[S_DEF_USER] holds -+ * the .config value. -+ */ - struct symbol_value def[S_DEF_COUNT]; -+ -+ /* -+ * An upper bound on the tristate value the user can set for the symbol -+ * if it is a boolean or tristate. Calculated from prompt dependencies, -+ * which also inherit dependencies from enclosing menus, choices, and -+ * ifs. If 'n', the user value will be ignored. -+ * -+ * Symbols lacking prompts always have visibility 'n'. -+ */ - tristate visible; -+ -+ /* SYMBOL_* flags */ - int flags; -+ -+ /* List of properties. See prop_type. */ - struct property *prop; -+ -+ /* Dependencies from enclosing menus, choices, and ifs */ - struct expr_value dir_dep; -+ -+ /* Reverse dependencies through being selected by other symbols */ - struct expr_value rev_dep; -+ -+ /* -+ * "Weak" reverse dependencies through being implied by other symbols -+ */ - struct expr_value implied; - }; - --#define for_all_symbols(i, sym) for (i = 0; i < SYMBOL_HASHSIZE; i++) for (sym = symbol_hash[i]; sym; sym = sym->next) if (sym->type != S_OTHER) -+#define for_all_symbols(i, sym) for (i = 0; i < SYMBOL_HASHSIZE; i++) for (sym = symbol_hash[i]; sym; sym = sym->next) - - #define SYMBOL_CONST 0x0001 /* symbol is const */ - #define SYMBOL_CHECK 0x0008 /* used during dependency checking */ -@@ -98,7 +141,7 @@ struct symbol { - #define SYMBOL_OPTIONAL 0x0100 /* choice is optional - values can be 'n' */ - #define SYMBOL_WRITE 0x0200 /* write symbol to file (KCONFIG_CONFIG) */ - #define SYMBOL_CHANGED 0x0400 /* ? */ --#define SYMBOL_AUTO 0x1000 /* value from environment variable */ -+#define SYMBOL_NO_WRITE 0x1000 /* Symbol for internal use only; it will not be written */ - #define SYMBOL_CHECKED 0x2000 /* used during dependency checking */ - #define SYMBOL_WARNED 0x8000 /* warning has been issued */ - -@@ -128,18 +171,20 @@ struct symbol { - * config BAZ - * int "BAZ Value" - * range 1..255 -+ * -+ * Please, also check zconf.y:print_symbol() when modifying the -+ * list of property types! - */ - enum prop_type { - P_UNKNOWN, - P_PROMPT, /* prompt "foo prompt" or "BAZ Value" */ - P_COMMENT, /* text associated with a comment */ -- P_MENU, /* prompt associated with a menuconfig option */ -+ P_MENU, /* prompt associated with a menu or menuconfig symbol */ - P_DEFAULT, /* default y */ - P_CHOICE, /* choice value */ - P_SELECT, /* select BAR */ - P_IMPLY, /* imply BAR */ - P_RANGE, /* range 7..100 (for a symbol) */ -- P_ENV, /* value from environment variable */ - P_SYMBOL, /* where a symbol is defined */ - }; - -@@ -166,22 +211,67 @@ struct property { - for (st = sym->prop; st; st = st->next) \ - if (st->text) - -+/* -+ * Represents a node in the menu tree, as seen in e.g. menuconfig (though used -+ * for all front ends). Each symbol, menu, etc. defined in the Kconfig files -+ * gets a node. A symbol defined in multiple locations gets one node at each -+ * location. -+ */ - struct menu { -+ /* The next menu node at the same level */ - struct menu *next; -+ -+ /* The parent menu node, corresponding to e.g. a menu or choice */ - struct menu *parent; -+ -+ /* The first child menu node, for e.g. menus and choices */ - struct menu *list; -+ -+ /* -+ * The symbol associated with the menu node. Choices are implemented as -+ * a special kind of symbol. NULL for menus, comments, and ifs. -+ */ - struct symbol *sym; -+ -+ /* -+ * The prompt associated with the node. This holds the prompt for a -+ * symbol as well as the text for a menu or comment, along with the -+ * type (P_PROMPT, P_MENU, etc.) -+ */ - struct property *prompt; -+ -+ /* -+ * 'visible if' dependencies. If more than one is given, they will be -+ * ANDed together. -+ */ - struct expr *visibility; -+ -+ /* -+ * Ordinary dependencies from e.g. 'depends on' and 'if', ANDed -+ * together -+ */ - struct expr *dep; -+ -+ /* MENU_* flags */ - unsigned int flags; -+ -+ /* Any help text associated with the node */ - char *help; -+ -+ /* The location where the menu node appears in the Kconfig files */ - struct file *file; - int lineno; -+ -+ /* For use by front ends that need to store auxiliary data */ - void *data; - }; - -+/* -+ * Set on a menu node when the corresponding symbol changes state in some way. -+ * Can be checked by front ends. -+ */ - #define MENU_CHANGED 0x0001 -+ - #define MENU_ROOT 0x0002 - - struct jump_key { -@@ -217,11 +307,12 @@ struct expr *expr_transform(struct expr *e); - int expr_contains_symbol(struct expr *dep, struct symbol *sym); - bool expr_depends_symbol(struct expr *dep, struct symbol *sym); - struct expr *expr_trans_compare(struct expr *e, enum expr_type type, struct symbol *sym); --struct expr *expr_simplify_unmet_dep(struct expr *e1, struct expr *e2); - - void expr_fprint(struct expr *e, FILE *out); - struct gstr; /* forward */ - void expr_gstr_print(struct expr *e, struct gstr *gs); -+void expr_gstr_print_revdep(struct expr *e, struct gstr *gs, -+ tristate pr_type, const char *title); - - static inline int expr_is_yes(struct expr *e) - { -diff --git a/carl9170fw/config/kconf_id.c b/carl9170fw/config/kconf_id.c -deleted file mode 100644 -index 5abbc72..0000000 ---- a/carl9170fw/config/kconf_id.c -+++ /dev/null -@@ -1,54 +0,0 @@ -- --static struct kconf_id kconf_id_array[] = { -- { "mainmenu", T_MAINMENU, TF_COMMAND }, -- { "menu", T_MENU, TF_COMMAND }, -- { "endmenu", T_ENDMENU, TF_COMMAND }, -- { "source", T_SOURCE, TF_COMMAND }, -- { "choice", T_CHOICE, TF_COMMAND }, -- { "endchoice", T_ENDCHOICE, TF_COMMAND }, -- { "comment", T_COMMENT, TF_COMMAND }, -- { "config", T_CONFIG, TF_COMMAND }, -- { "menuconfig", T_MENUCONFIG, TF_COMMAND }, -- { "help", T_HELP, TF_COMMAND }, -- { "---help---", T_HELP, TF_COMMAND }, -- { "if", T_IF, TF_COMMAND|TF_PARAM }, -- { "endif", T_ENDIF, TF_COMMAND }, -- { "depends", T_DEPENDS, TF_COMMAND }, -- { "optional", T_OPTIONAL, TF_COMMAND }, -- { "default", T_DEFAULT, TF_COMMAND, S_UNKNOWN }, -- { "prompt", T_PROMPT, TF_COMMAND }, -- { "tristate", T_TYPE, TF_COMMAND, S_TRISTATE }, -- { "def_tristate", T_DEFAULT, TF_COMMAND, S_TRISTATE }, -- { "bool", T_TYPE, TF_COMMAND, S_BOOLEAN }, -- { "boolean", T_TYPE, TF_COMMAND, S_BOOLEAN }, -- { "def_bool", T_DEFAULT, TF_COMMAND, S_BOOLEAN }, -- { "int", T_TYPE, TF_COMMAND, S_INT }, -- { "hex", T_TYPE, TF_COMMAND, S_HEX }, -- { "string", T_TYPE, TF_COMMAND, S_STRING }, -- { "select", T_SELECT, TF_COMMAND }, -- { "imply", T_IMPLY, TF_COMMAND }, -- { "range", T_RANGE, TF_COMMAND }, -- { "visible", T_VISIBLE, TF_COMMAND }, -- { "option", T_OPTION, TF_COMMAND }, -- { "on", T_ON, TF_PARAM }, -- { "modules", T_OPT_MODULES, TF_OPTION }, -- { "defconfig_list", T_OPT_DEFCONFIG_LIST, TF_OPTION }, -- { "env", T_OPT_ENV, TF_OPTION }, -- { "allnoconfig_y", T_OPT_ALLNOCONFIG_Y, TF_OPTION }, --}; -- --#define KCONF_ID_ARRAY_SIZE (sizeof(kconf_id_array)/sizeof(struct kconf_id)) -- --static const struct kconf_id *kconf_id_lookup(register const char *str, register unsigned int len) --{ -- int i; -- -- for (i = 0; i < KCONF_ID_ARRAY_SIZE; i++) { -- struct kconf_id *id = kconf_id_array+i; -- int l = strlen(id->name); -- -- if (len == l && !memcmp(str, id->name, len)) -- return id; -- } -- return NULL; --} -diff --git a/carl9170fw/config/lkc.h b/carl9170fw/config/lkc.h -index cdcbe43..531ff7c 100644 ---- a/carl9170fw/config/lkc.h -+++ b/carl9170fw/config/lkc.h -@@ -1,6 +1,6 @@ -+/* SPDX-License-Identifier: GPL-2.0 */ - /* - * Copyright (C) 2002 Roman Zippel -- * Released under the terms of the GNU GPL v2.0. - */ - - #ifndef LKC_H -@@ -8,15 +8,6 @@ - - #include "expr.h" - --#ifndef KBUILD_NO_NLS --# include --#else --static inline const char *gettext(const char *txt) { return txt; } --static inline void textdomain(const char *domainname) {} --static inline void bindtextdomain(const char *name, const char *dir) {} --static inline char *bind_textdomain_codeset(const char *dn, char *c) { return c; } --#endif -- - #ifdef __cplusplus - extern "C" { - #endif -@@ -29,11 +20,6 @@ extern "C" { - #define PACKAGE "linux" - #endif - --#define LOCALEDIR "/usr/share/locale" -- --#define _(text) gettext(text) --#define N_(text) (text) -- - #ifndef CONFIG_ - #define CONFIG_ "CONFIG_" - #endif -@@ -44,10 +30,6 @@ static inline const char *CONFIG_prefix(void) - #undef CONFIG_ - #define CONFIG_ CONFIG_prefix() - --#define TF_COMMAND 0x0001 --#define TF_PARAM 0x0002 --#define TF_OPTION 0x0004 -- - enum conf_def_mode { - def_default, - def_yes, -@@ -56,18 +38,7 @@ enum conf_def_mode { - def_random - }; - --#define T_OPT_MODULES 1 --#define T_OPT_DEFCONFIG_LIST 2 --#define T_OPT_ENV 3 --#define T_OPT_ALLNOCONFIG_Y 4 -- --struct kconf_id { -- const char *name; -- int token; -- unsigned int flags; -- enum symbol_type stype; --}; -- -+extern int yylineno; - void zconfdump(FILE *out); - void zconf_starthelp(void); - FILE *zconf_fopen(const char *name); -@@ -100,21 +71,27 @@ void menu_warn(struct menu *menu, const char *fmt, ...); - struct menu *menu_add_menu(void); - void menu_end_menu(void); - void menu_add_entry(struct symbol *sym); --void menu_end_entry(void); - void menu_add_dep(struct expr *dep); - void menu_add_visibility(struct expr *dep); - struct property *menu_add_prompt(enum prop_type type, char *prompt, struct expr *dep); - void menu_add_expr(enum prop_type type, struct expr *expr, struct expr *dep); - void menu_add_symbol(enum prop_type type, struct symbol *sym, struct expr *dep); --void menu_add_option(int token, char *arg); -+void menu_add_option_modules(void); -+void menu_add_option_defconfig_list(void); -+void menu_add_option_allnoconfig_y(void); - void menu_finalize(struct menu *parent); - void menu_set_type(int type); - - /* util.c */ - struct file *file_lookup(const char *name); --int file_write_dep(const char *name); - void *xmalloc(size_t size); - void *xcalloc(size_t nmemb, size_t size); -+void *xrealloc(void *p, size_t size); -+char *xstrdup(const char *s); -+char *xstrndup(const char *s, size_t n); -+ -+/* zconf.l */ -+int yylex(void); - - struct gstr { - size_t len; -@@ -132,16 +109,13 @@ void str_printf(struct gstr *gs, const char *fmt, ...); - const char *str_get(struct gstr *gs); - - /* symbol.c */ --extern struct expr *sym_env_list; -- --void sym_init(void); - void sym_clear_all_valid(void); - struct symbol *sym_choice_default(struct symbol *sym); -+struct property *sym_get_range_prop(struct symbol *sym); - const char *sym_get_string_default(struct symbol *sym); - struct symbol *sym_check_deps(struct symbol *sym); - struct property *prop_alloc(enum prop_type type, struct symbol *sym); - struct symbol *prop_get_symbol(struct property *prop); --struct property *sym_get_env_prop(struct symbol *sym); - - static inline tristate sym_get_tristate_value(struct symbol *sym) - { -diff --git a/carl9170fw/config/lkc_proto.h b/carl9170fw/config/lkc_proto.h -index 5d86e2d..86c2675 100644 ---- a/carl9170fw/config/lkc_proto.h -+++ b/carl9170fw/config/lkc_proto.h -@@ -7,10 +7,10 @@ int conf_read(const char *name); - int conf_read_simple(const char *name, int); - int conf_write_defconfig(const char *name); - int conf_write(const char *name); --int conf_write_autoconf(void); -+int conf_write_autoconf(int overwrite); - bool conf_get_changed(void); - void conf_set_changed_callback(void (*fn)(void)); --void conf_set_message_callback(void (*fn)(const char *fmt, va_list ap)); -+void conf_set_message_callback(void (*fn)(const char *s)); - - /* menu.c */ - extern struct menu rootmenu; -@@ -31,7 +31,6 @@ extern struct symbol * symbol_hash[SYMBOL_HASHSIZE]; - - struct symbol * sym_lookup(const char *name, int flags); - struct symbol * sym_find(const char *name); --const char * sym_expand_string_value(const char *in); - const char * sym_escape_string_value(const char *in); - struct symbol ** sym_re_search(const char *pattern); - const char * sym_type_name(enum symbol_type type); -@@ -49,5 +48,19 @@ const char * sym_get_string_value(struct symbol *sym); - - const char * prop_get_type_name(enum prop_type type); - -+/* preprocess.c */ -+enum variable_flavor { -+ VAR_SIMPLE, -+ VAR_RECURSIVE, -+ VAR_APPEND, -+}; -+void env_write_dep(FILE *f, const char *auto_conf_name); -+void variable_add(const char *name, const char *value, -+ enum variable_flavor flavor); -+void variable_all_del(void); -+char *expand_string(const char *in); -+char *expand_dollar(const char **str); -+char *expand_one_token(const char **str); -+ - /* expr.c */ - void expr_print(struct expr *e, void (*fn)(void *, struct symbol *, const char *), void *data, int prevtoken); -diff --git a/carl9170fw/config/menu.c b/carl9170fw/config/menu.c -index e935793..d9d1646 100644 ---- a/carl9170fw/config/menu.c -+++ b/carl9170fw/config/menu.c -@@ -1,6 +1,6 @@ -+// SPDX-License-Identifier: GPL-2.0 - /* - * Copyright (C) 2002 Roman Zippel -- * Released under the terms of the GNU GPL v2.0. - */ - - #include -@@ -62,13 +62,8 @@ void menu_add_entry(struct symbol *sym) - menu_add_symbol(P_SYMBOL, sym, NULL); - } - --void menu_end_entry(void) --{ --} -- - struct menu *menu_add_menu(void) - { -- menu_end_entry(); - last_entry_ptr = ¤t_entry->list; - return current_menu = current_entry; - } -@@ -79,19 +74,23 @@ void menu_end_menu(void) - current_menu = current_menu->parent; - } - --static struct expr *menu_check_dep(struct expr *e) -+/* -+ * Rewrites 'm' to 'm' && MODULES, so that it evaluates to 'n' when running -+ * without modules -+ */ -+static struct expr *rewrite_m(struct expr *e) - { - if (!e) - return e; - - switch (e->type) { - case E_NOT: -- e->left.expr = menu_check_dep(e->left.expr); -+ e->left.expr = rewrite_m(e->left.expr); - break; - case E_OR: - case E_AND: -- e->left.expr = menu_check_dep(e->left.expr); -- e->right.expr = menu_check_dep(e->right.expr); -+ e->left.expr = rewrite_m(e->left.expr); -+ e->right.expr = rewrite_m(e->right.expr); - break; - case E_SYMBOL: - /* change 'm' into 'm' && MODULES */ -@@ -106,7 +105,7 @@ static struct expr *menu_check_dep(struct expr *e) - - void menu_add_dep(struct expr *dep) - { -- current_entry->dep = expr_alloc_and(current_entry->dep, menu_check_dep(dep)); -+ current_entry->dep = expr_alloc_and(current_entry->dep, dep); - } - - void menu_set_type(int type) -@@ -131,7 +130,7 @@ static struct property *menu_add_prop(enum prop_type type, char *prompt, struct - - prop->menu = current_entry; - prop->expr = expr; -- prop->visible.expr = menu_check_dep(dep); -+ prop->visible.expr = dep; - - if (prompt) { - if (isspace(*prompt)) { -@@ -196,31 +195,26 @@ void menu_add_symbol(enum prop_type type, struct symbol *sym, struct expr *dep) - menu_add_prop(type, NULL, expr_alloc_symbol(sym), dep); - } - --void menu_add_option(int token, char *arg) -+void menu_add_option_modules(void) - { -- switch (token) { -- case T_OPT_MODULES: -- if (modules_sym) -- zconf_error("symbol '%s' redefines option 'modules'" -- " already defined by symbol '%s'", -- current_entry->sym->name, -- modules_sym->name -- ); -- modules_sym = current_entry->sym; -- break; -- case T_OPT_DEFCONFIG_LIST: -- if (!sym_defconfig_list) -- sym_defconfig_list = current_entry->sym; -- else if (sym_defconfig_list != current_entry->sym) -- zconf_error("trying to redefine defconfig symbol"); -- break; -- case T_OPT_ENV: -- prop_add_env(arg); -- break; -- case T_OPT_ALLNOCONFIG_Y: -- current_entry->sym->flags |= SYMBOL_ALLNOCONFIG_Y; -- break; -- } -+ if (modules_sym) -+ zconf_error("symbol '%s' redefines option 'modules' already defined by symbol '%s'", -+ current_entry->sym->name, modules_sym->name); -+ modules_sym = current_entry->sym; -+} -+ -+void menu_add_option_defconfig_list(void) -+{ -+ if (!sym_defconfig_list) -+ sym_defconfig_list = current_entry->sym; -+ else if (sym_defconfig_list != current_entry->sym) -+ zconf_error("trying to redefine defconfig symbol"); -+ sym_defconfig_list->flags |= SYMBOL_NO_WRITE; -+} -+ -+void menu_add_option_allnoconfig_y(void) -+{ -+ current_entry->sym->flags |= SYMBOL_ALLNOCONFIG_Y; - } - - static int menu_validate_number(struct symbol *sym, struct symbol *sym2) -@@ -252,6 +246,16 @@ static void sym_check_prop(struct symbol *sym) - "'%s': number is invalid", - sym->name); - } -+ if (sym_is_choice(sym)) { -+ struct property *choice_prop = -+ sym_get_choice_prop(sym2); -+ -+ if (!choice_prop || -+ prop_get_symbol(choice_prop) != sym) -+ prop_warn(prop, -+ "choice default symbol '%s' is not contained in the choice", -+ sym2->name); -+ } - break; - case P_SELECT: - case P_IMPLY: -@@ -260,13 +264,13 @@ static void sym_check_prop(struct symbol *sym) - if (sym->type != S_BOOLEAN && sym->type != S_TRISTATE) - prop_warn(prop, - "config symbol '%s' uses %s, but is " -- "not boolean or tristate", sym->name, use); -+ "not bool or tristate", sym->name, use); - else if (sym2->type != S_UNKNOWN && - sym2->type != S_BOOLEAN && - sym2->type != S_TRISTATE) - prop_warn(prop, - "'%s' has wrong type. '%s' only " -- "accept arguments of boolean and " -+ "accept arguments of bool and " - "tristate type", sym2->name, use); - break; - case P_RANGE: -@@ -292,6 +296,11 @@ void menu_finalize(struct menu *parent) - - sym = parent->sym; - if (parent->list) { -+ /* -+ * This menu node has children. We (recursively) process them -+ * and propagate parent dependencies before moving on. -+ */ -+ - if (sym && sym_is_choice(sym)) { - if (sym->type == S_UNKNOWN) { - /* find the first choice value to find out choice type */ -@@ -309,30 +318,83 @@ void menu_finalize(struct menu *parent) - if (menu->sym && menu->sym->type == S_UNKNOWN) - menu_set_type(sym->type); - } -+ -+ /* -+ * Use the choice itself as the parent dependency of -+ * the contained items. This turns the mode of the -+ * choice into an upper bound on the visibility of the -+ * choice value symbols. -+ */ - parentdep = expr_alloc_symbol(sym); - } else if (parent->prompt) -+ /* Menu node for 'menu' */ - parentdep = parent->prompt->visible.expr; - else -+ /* Menu node for 'if' */ - parentdep = parent->dep; - -+ /* For each child menu node... */ - for (menu = parent->list; menu; menu = menu->next) { -- basedep = expr_transform(menu->dep); -+ /* -+ * Propagate parent dependencies to the child menu -+ * node, also rewriting and simplifying expressions -+ */ -+ basedep = rewrite_m(menu->dep); -+ basedep = expr_transform(basedep); - basedep = expr_alloc_and(expr_copy(parentdep), basedep); - basedep = expr_eliminate_dups(basedep); - menu->dep = basedep; -+ - if (menu->sym) -+ /* -+ * Note: For symbols, all prompts are included -+ * too in the symbol's own property list -+ */ - prop = menu->sym->prop; - else -+ /* -+ * For non-symbol menu nodes, we just need to -+ * handle the prompt -+ */ - prop = menu->prompt; -+ -+ /* For each property... */ - for (; prop; prop = prop->next) { - if (prop->menu != menu) -+ /* -+ * Two possibilities: -+ * -+ * 1. The property lacks dependencies -+ * and so isn't location-specific, -+ * e.g. an 'option' -+ * -+ * 2. The property belongs to a symbol -+ * defined in multiple locations and -+ * is from some other location. It -+ * will be handled there in that -+ * case. -+ * -+ * Skip the property. -+ */ - continue; -- dep = expr_transform(prop->visible.expr); -+ -+ /* -+ * Propagate parent dependencies to the -+ * property's condition, rewriting and -+ * simplifying expressions at the same time -+ */ -+ dep = rewrite_m(prop->visible.expr); -+ dep = expr_transform(dep); - dep = expr_alloc_and(expr_copy(basedep), dep); - dep = expr_eliminate_dups(dep); - if (menu->sym && menu->sym->type != S_TRISTATE) - dep = expr_trans_bool(dep); - prop->visible.expr = dep; -+ -+ /* -+ * Handle selects and implies, which modify the -+ * dependencies of the selected/implied symbol -+ */ - if (prop->type == P_SELECT) { - struct symbol *es = prop_get_symbol(prop); - es->rev_dep.expr = expr_alloc_or(es->rev_dep.expr, -@@ -344,34 +406,81 @@ void menu_finalize(struct menu *parent) - } - } - } -+ -+ if (sym && sym_is_choice(sym)) -+ expr_free(parentdep); -+ -+ /* -+ * Recursively process children in the same fashion before -+ * moving on -+ */ - for (menu = parent->list; menu; menu = menu->next) - menu_finalize(menu); - } else if (sym) { -+ /* -+ * Automatic submenu creation. If sym is a symbol and A, B, C, -+ * ... are consecutive items (symbols, menus, ifs, etc.) that -+ * all depend on sym, then the following menu structure is -+ * created: -+ * -+ * sym -+ * +-A -+ * +-B -+ * +-C -+ * ... -+ * -+ * This also works recursively, giving the following structure -+ * if A is a symbol and B depends on A: -+ * -+ * sym -+ * +-A -+ * | +-B -+ * +-C -+ * ... -+ */ -+ - basedep = parent->prompt ? parent->prompt->visible.expr : NULL; - basedep = expr_trans_compare(basedep, E_UNEQUAL, &symbol_no); - basedep = expr_eliminate_dups(expr_transform(basedep)); -+ -+ /* Examine consecutive elements after sym */ - last_menu = NULL; - for (menu = parent->next; menu; menu = menu->next) { - dep = menu->prompt ? menu->prompt->visible.expr : menu->dep; - if (!expr_contains_symbol(dep, sym)) -+ /* No dependency, quit */ - break; - if (expr_depends_symbol(dep, sym)) -+ /* Absolute dependency, put in submenu */ - goto next; -+ -+ /* -+ * Also consider it a dependency on sym if our -+ * dependencies contain sym and are a "superset" of -+ * sym's dependencies, e.g. '(sym || Q) && R' when sym -+ * depends on R. -+ * -+ * Note that 'R' might be from an enclosing menu or if, -+ * making this a more common case than it might seem. -+ */ - dep = expr_trans_compare(dep, E_UNEQUAL, &symbol_no); - dep = expr_eliminate_dups(expr_transform(dep)); - dep2 = expr_copy(basedep); - expr_eliminate_eq(&dep, &dep2); - expr_free(dep); - if (!expr_is_yes(dep2)) { -+ /* Not superset, quit */ - expr_free(dep2); - break; - } -+ /* Superset, put in submenu */ - expr_free(dep2); - next: - menu_finalize(menu); - menu->parent = parent; - last_menu = menu; - } -+ expr_free(basedep); - if (last_menu) { - parent->list = parent->next; - parent->next = last_menu->next; -@@ -420,6 +529,35 @@ void menu_finalize(struct menu *parent) - *ep = expr_alloc_one(E_LIST, NULL); - (*ep)->right.sym = menu->sym; - } -+ -+ /* -+ * This code serves two purposes: -+ * -+ * (1) Flattening 'if' blocks, which do not specify a submenu -+ * and only add dependencies. -+ * -+ * (Automatic submenu creation might still create a submenu -+ * from an 'if' before this code runs.) -+ * -+ * (2) "Undoing" any automatic submenus created earlier below -+ * promptless symbols. -+ * -+ * Before: -+ * -+ * A -+ * if ... (or promptless symbol) -+ * +-B -+ * +-C -+ * D -+ * -+ * After: -+ * -+ * A -+ * if ... (or promptless symbol) -+ * B -+ * C -+ * D -+ */ - if (menu->list && (!menu->prompt || !menu->prompt->text)) { - for (last_menu = menu->list; ; last_menu = last_menu->next) { - last_menu->parent = parent; -@@ -444,6 +582,15 @@ void menu_finalize(struct menu *parent) - sym->flags |= SYMBOL_WARNED; - } - -+ /* -+ * For non-optional choices, add a reverse dependency (corresponding to -+ * a select) of ' && m'. This prevents the user from -+ * setting the choice mode to 'n' when the choice is visible. -+ * -+ * This would also work for non-choice symbols, but only non-optional -+ * choices clear SYMBOL_OPTIONAL as of writing. Choices are implemented -+ * as a type of symbol. -+ */ - if (sym && !sym_is_optional(sym) && parent->prompt) { - sym->rev_dep.expr = expr_alloc_or(sym->rev_dep.expr, - expr_alloc_and(parent->prompt->visible.expr, -@@ -558,7 +705,7 @@ static void get_prompt_str(struct gstr *r, struct property *prop, - struct menu *submenu[8], *menu, *location = NULL; - struct jump_key *jump = NULL; - -- str_printf(r, _("Prompt: %s\n"), _(prop->text)); -+ str_printf(r, "Prompt: %s\n", prop->text); - menu = prop->menu->parent; - for (i = 0; menu != &rootmenu && i < 8; menu = menu->parent) { - bool accessible = menu_is_visible(menu); -@@ -591,16 +738,16 @@ static void get_prompt_str(struct gstr *r, struct property *prop, - } - - if (i > 0) { -- str_printf(r, _(" Location:\n")); -+ str_printf(r, " Location:\n"); - for (j = 4; --i >= 0; j += 2) { - menu = submenu[i]; - if (jump && menu == location) - jump->offset = strlen(r->s); - str_printf(r, "%*c-> %s", j, ' ', -- _(menu_get_prompt(menu))); -+ menu_get_prompt(menu)); - if (menu->sym) { - str_printf(r, " (%s [=%s])", menu->sym->name ? -- menu->sym->name : _(""), -+ menu->sym->name : "", - sym_get_string_value(menu->sym)); - } - str_append(r, "\n"); -@@ -664,27 +811,27 @@ static void get_symbol_str(struct gstr *r, struct symbol *sym, - - prop = get_symbol_prop(sym); - if (prop) { -- str_printf(r, _(" Defined at %s:%d\n"), prop->menu->file->name, -+ str_printf(r, " Defined at %s:%d\n", prop->menu->file->name, - prop->menu->lineno); - if (!expr_is_yes(prop->visible.expr)) { -- str_append(r, _(" Depends on: ")); -+ str_append(r, " Depends on: "); - expr_gstr_print(prop->visible.expr, r); - str_append(r, "\n"); - } - } - -- get_symbol_props_str(r, sym, P_SELECT, _(" Selects: ")); -+ get_symbol_props_str(r, sym, P_SELECT, " Selects: "); - if (sym->rev_dep.expr) { -- str_append(r, _(" Selected by: ")); -- expr_gstr_print(sym->rev_dep.expr, r); -- str_append(r, "\n"); -+ expr_gstr_print_revdep(sym->rev_dep.expr, r, yes, " Selected by [y]:\n"); -+ expr_gstr_print_revdep(sym->rev_dep.expr, r, mod, " Selected by [m]:\n"); -+ expr_gstr_print_revdep(sym->rev_dep.expr, r, no, " Selected by [n]:\n"); - } - -- get_symbol_props_str(r, sym, P_IMPLY, _(" Implies: ")); -+ get_symbol_props_str(r, sym, P_IMPLY, " Implies: "); - if (sym->implied.expr) { -- str_append(r, _(" Implied by: ")); -- expr_gstr_print(sym->implied.expr, r); -- str_append(r, "\n"); -+ expr_gstr_print_revdep(sym->implied.expr, r, yes, " Implied by [y]:\n"); -+ expr_gstr_print_revdep(sym->implied.expr, r, mod, " Implied by [m]:\n"); -+ expr_gstr_print_revdep(sym->implied.expr, r, no, " Implied by [n]:\n"); - } - - str_append(r, "\n\n"); -@@ -699,7 +846,7 @@ struct gstr get_relations_str(struct symbol **sym_arr, struct list_head *head) - for (i = 0; sym_arr && (sym = sym_arr[i]); i++) - get_symbol_str(&res, sym, head); - if (!i) -- str_append(&res, _("No matches found.\n")); -+ str_append(&res, "No matches found.\n"); - return res; - } - -@@ -714,7 +861,7 @@ void menu_get_ext_help(struct menu *menu, struct gstr *help) - str_printf(help, "%s%s:\n\n", CONFIG_, sym->name); - help_text = menu_get_help(menu); - } -- str_printf(help, "%s\n", _(help_text)); -+ str_printf(help, "%s\n", help_text); - if (sym) - get_symbol_str(help, sym, NULL); - } -diff --git a/carl9170fw/config/preprocess.c b/carl9170fw/config/preprocess.c -new file mode 100644 -index 0000000..592dfbf ---- /dev/null -+++ b/carl9170fw/config/preprocess.c -@@ -0,0 +1,573 @@ -+// SPDX-License-Identifier: GPL-2.0 -+// -+// Copyright (C) 2018 Masahiro Yamada -+ -+#include -+#include -+#include -+#include -+#include -+#include -+ -+#include "list.h" -+#include "lkc.h" -+ -+#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0])) -+ -+static char *expand_string_with_args(const char *in, int argc, char *argv[]); -+ -+static void __attribute__((noreturn)) pperror(const char *format, ...) -+{ -+ va_list ap; -+ -+ fprintf(stderr, "%s:%d: ", current_file->name, yylineno); -+ va_start(ap, format); -+ vfprintf(stderr, format, ap); -+ va_end(ap); -+ fprintf(stderr, "\n"); -+ -+ exit(1); -+} -+ -+/* -+ * Environment variables -+ */ -+static LIST_HEAD(env_list); -+ -+struct env { -+ char *name; -+ char *value; -+ struct list_head node; -+}; -+ -+static void env_add(const char *name, const char *value) -+{ -+ struct env *e; -+ -+ e = xmalloc(sizeof(*e)); -+ e->name = xstrdup(name); -+ e->value = xstrdup(value); -+ -+ list_add_tail(&e->node, &env_list); -+} -+ -+static void env_del(struct env *e) -+{ -+ list_del(&e->node); -+ free(e->name); -+ free(e->value); -+ free(e); -+} -+ -+/* The returned pointer must be freed when done */ -+static char *env_expand(const char *name) -+{ -+ struct env *e; -+ const char *value; -+ -+ if (!*name) -+ return NULL; -+ -+ list_for_each_entry(e, &env_list, node) { -+ if (!strcmp(name, e->name)) -+ return xstrdup(e->value); -+ } -+ -+ value = getenv(name); -+ if (!value) -+ return NULL; -+ -+ /* -+ * We need to remember all referenced environment variables. -+ * They will be written out to include/config/auto.conf.cmd -+ */ -+ env_add(name, value); -+ -+ return xstrdup(value); -+} -+ -+void env_write_dep(FILE *f, const char *autoconfig_name) -+{ -+ struct env *e, *tmp; -+ -+ list_for_each_entry_safe(e, tmp, &env_list, node) { -+ fprintf(f, "ifneq \"$(%s)\" \"%s\"\n", e->name, e->value); -+ fprintf(f, "%s: FORCE\n", autoconfig_name); -+ fprintf(f, "endif\n"); -+ env_del(e); -+ } -+} -+ -+/* -+ * Built-in functions -+ */ -+struct function { -+ const char *name; -+ unsigned int min_args; -+ unsigned int max_args; -+ char *(*func)(int argc, char *argv[]); -+}; -+ -+static char *do_error_if(int argc, char *argv[]) -+{ -+ if (!strcmp(argv[0], "y")) -+ pperror("%s", argv[1]); -+ -+ return NULL; -+} -+ -+static char *do_filename(int argc, char *argv[]) -+{ -+ return xstrdup(current_file->name); -+} -+ -+static char *do_info(int argc, char *argv[]) -+{ -+ printf("%s\n", argv[0]); -+ -+ return xstrdup(""); -+} -+ -+static char *do_lineno(int argc, char *argv[]) -+{ -+ char buf[16]; -+ -+ sprintf(buf, "%d", yylineno); -+ -+ return xstrdup(buf); -+} -+ -+static char *do_shell(int argc, char *argv[]) -+{ -+ FILE *p; -+ char buf[256]; -+ char *cmd; -+ size_t nread; -+ int i; -+ -+ cmd = argv[0]; -+ -+ p = popen(cmd, "r"); -+ if (!p) { -+ perror(cmd); -+ exit(1); -+ } -+ -+ nread = fread(buf, 1, sizeof(buf), p); -+ if (nread == sizeof(buf)) -+ nread--; -+ -+ /* remove trailing new lines */ -+ while (nread > 0 && buf[nread - 1] == '\n') -+ nread--; -+ -+ buf[nread] = 0; -+ -+ /* replace a new line with a space */ -+ for (i = 0; i < nread; i++) { -+ if (buf[i] == '\n') -+ buf[i] = ' '; -+ } -+ -+ if (pclose(p) == -1) { -+ perror(cmd); -+ exit(1); -+ } -+ -+ return xstrdup(buf); -+} -+ -+static char *do_warning_if(int argc, char *argv[]) -+{ -+ if (!strcmp(argv[0], "y")) -+ fprintf(stderr, "%s:%d: %s\n", -+ current_file->name, yylineno, argv[1]); -+ -+ return xstrdup(""); -+} -+ -+static const struct function function_table[] = { -+ /* Name MIN MAX Function */ -+ { "error-if", 2, 2, do_error_if }, -+ { "filename", 0, 0, do_filename }, -+ { "info", 1, 1, do_info }, -+ { "lineno", 0, 0, do_lineno }, -+ { "shell", 1, 1, do_shell }, -+ { "warning-if", 2, 2, do_warning_if }, -+}; -+ -+#define FUNCTION_MAX_ARGS 16 -+ -+static char *function_expand(const char *name, int argc, char *argv[]) -+{ -+ const struct function *f; -+ int i; -+ -+ for (i = 0; i < ARRAY_SIZE(function_table); i++) { -+ f = &function_table[i]; -+ if (strcmp(f->name, name)) -+ continue; -+ -+ if (argc < f->min_args) -+ pperror("too few function arguments passed to '%s'", -+ name); -+ -+ if (argc > f->max_args) -+ pperror("too many function arguments passed to '%s'", -+ name); -+ -+ return f->func(argc, argv); -+ } -+ -+ return NULL; -+} -+ -+/* -+ * Variables (and user-defined functions) -+ */ -+static LIST_HEAD(variable_list); -+ -+struct variable { -+ char *name; -+ char *value; -+ enum variable_flavor flavor; -+ int exp_count; -+ struct list_head node; -+}; -+ -+static struct variable *variable_lookup(const char *name) -+{ -+ struct variable *v; -+ -+ list_for_each_entry(v, &variable_list, node) { -+ if (!strcmp(name, v->name)) -+ return v; -+ } -+ -+ return NULL; -+} -+ -+static char *variable_expand(const char *name, int argc, char *argv[]) -+{ -+ struct variable *v; -+ char *res; -+ -+ v = variable_lookup(name); -+ if (!v) -+ return NULL; -+ -+ if (argc == 0 && v->exp_count) -+ pperror("Recursive variable '%s' references itself (eventually)", -+ name); -+ -+ if (v->exp_count > 1000) -+ pperror("Too deep recursive expansion"); -+ -+ v->exp_count++; -+ -+ if (v->flavor == VAR_RECURSIVE) -+ res = expand_string_with_args(v->value, argc, argv); -+ else -+ res = xstrdup(v->value); -+ -+ v->exp_count--; -+ -+ return res; -+} -+ -+void variable_add(const char *name, const char *value, -+ enum variable_flavor flavor) -+{ -+ struct variable *v; -+ char *new_value; -+ bool append = false; -+ -+ v = variable_lookup(name); -+ if (v) { -+ /* For defined variables, += inherits the existing flavor */ -+ if (flavor == VAR_APPEND) { -+ flavor = v->flavor; -+ append = true; -+ } else { -+ free(v->value); -+ } -+ } else { -+ /* For undefined variables, += assumes the recursive flavor */ -+ if (flavor == VAR_APPEND) -+ flavor = VAR_RECURSIVE; -+ -+ v = xmalloc(sizeof(*v)); -+ v->name = xstrdup(name); -+ v->exp_count = 0; -+ list_add_tail(&v->node, &variable_list); -+ } -+ -+ v->flavor = flavor; -+ -+ if (flavor == VAR_SIMPLE) -+ new_value = expand_string(value); -+ else -+ new_value = xstrdup(value); -+ -+ if (append) { -+ v->value = xrealloc(v->value, -+ strlen(v->value) + strlen(new_value) + 2); -+ strcat(v->value, " "); -+ strcat(v->value, new_value); -+ free(new_value); -+ } else { -+ v->value = new_value; -+ } -+} -+ -+static void variable_del(struct variable *v) -+{ -+ list_del(&v->node); -+ free(v->name); -+ free(v->value); -+ free(v); -+} -+ -+void variable_all_del(void) -+{ -+ struct variable *v, *tmp; -+ -+ list_for_each_entry_safe(v, tmp, &variable_list, node) -+ variable_del(v); -+} -+ -+/* -+ * Evaluate a clause with arguments. argc/argv are arguments from the upper -+ * function call. -+ * -+ * Returned string must be freed when done -+ */ -+static char *eval_clause(const char *str, size_t len, int argc, char *argv[]) -+{ -+ char *tmp, *name, *res, *endptr, *prev, *p; -+ int new_argc = 0; -+ char *new_argv[FUNCTION_MAX_ARGS]; -+ int nest = 0; -+ int i; -+ unsigned long n; -+ -+ tmp = xstrndup(str, len); -+ -+ /* -+ * If variable name is '1', '2', etc. It is generally an argument -+ * from a user-function call (i.e. local-scope variable). If not -+ * available, then look-up global-scope variables. -+ */ -+ n = strtoul(tmp, &endptr, 10); -+ if (!*endptr && n > 0 && n <= argc) { -+ res = xstrdup(argv[n - 1]); -+ goto free_tmp; -+ } -+ -+ prev = p = tmp; -+ -+ /* -+ * Split into tokens -+ * The function name and arguments are separated by a comma. -+ * For example, if the function call is like this: -+ * $(foo,$(x),$(y)) -+ * -+ * The input string for this helper should be: -+ * foo,$(x),$(y) -+ * -+ * and split into: -+ * new_argv[0] = 'foo' -+ * new_argv[1] = '$(x)' -+ * new_argv[2] = '$(y)' -+ */ -+ while (*p) { -+ if (nest == 0 && *p == ',') { -+ *p = 0; -+ if (new_argc >= FUNCTION_MAX_ARGS) -+ pperror("too many function arguments"); -+ new_argv[new_argc++] = prev; -+ prev = p + 1; -+ } else if (*p == '(') { -+ nest++; -+ } else if (*p == ')') { -+ nest--; -+ } -+ -+ p++; -+ } -+ new_argv[new_argc++] = prev; -+ -+ /* -+ * Shift arguments -+ * new_argv[0] represents a function name or a variable name. Put it -+ * into 'name', then shift the rest of the arguments. This simplifies -+ * 'const' handling. -+ */ -+ name = expand_string_with_args(new_argv[0], argc, argv); -+ new_argc--; -+ for (i = 0; i < new_argc; i++) -+ new_argv[i] = expand_string_with_args(new_argv[i + 1], -+ argc, argv); -+ -+ /* Search for variables */ -+ res = variable_expand(name, new_argc, new_argv); -+ if (res) -+ goto free; -+ -+ /* Look for built-in functions */ -+ res = function_expand(name, new_argc, new_argv); -+ if (res) -+ goto free; -+ -+ /* Last, try environment variable */ -+ if (new_argc == 0) { -+ res = env_expand(name); -+ if (res) -+ goto free; -+ } -+ -+ res = xstrdup(""); -+free: -+ for (i = 0; i < new_argc; i++) -+ free(new_argv[i]); -+ free(name); -+free_tmp: -+ free(tmp); -+ -+ return res; -+} -+ -+/* -+ * Expand a string that follows '$' -+ * -+ * For example, if the input string is -+ * ($(FOO)$($(BAR)))$(BAZ) -+ * this helper evaluates -+ * $($(FOO)$($(BAR))) -+ * and returns a new string containing the expansion (note that the string is -+ * recursively expanded), also advancing 'str' to point to the next character -+ * after the corresponding closing parenthesis, in this case, *str will be -+ * $(BAR) -+ */ -+static char *expand_dollar_with_args(const char **str, int argc, char *argv[]) -+{ -+ const char *p = *str; -+ const char *q; -+ int nest = 0; -+ -+ /* -+ * In Kconfig, variable/function references always start with "$(". -+ * Neither single-letter variables as in $A nor curly braces as in ${CC} -+ * are supported. '$' not followed by '(' loses its special meaning. -+ */ -+ if (*p != '(') { -+ *str = p; -+ return xstrdup("$"); -+ } -+ -+ p++; -+ q = p; -+ while (*q) { -+ if (*q == '(') { -+ nest++; -+ } else if (*q == ')') { -+ if (nest-- == 0) -+ break; -+ } -+ q++; -+ } -+ -+ if (!*q) -+ pperror("unterminated reference to '%s': missing ')'", p); -+ -+ /* Advance 'str' to after the expanded initial portion of the string */ -+ *str = q + 1; -+ -+ return eval_clause(p, q - p, argc, argv); -+} -+ -+char *expand_dollar(const char **str) -+{ -+ return expand_dollar_with_args(str, 0, NULL); -+} -+ -+static char *__expand_string(const char **str, bool (*is_end)(char c), -+ int argc, char *argv[]) -+{ -+ const char *in, *p; -+ char *expansion, *out; -+ size_t in_len, out_len; -+ -+ out = xmalloc(1); -+ *out = 0; -+ out_len = 1; -+ -+ p = in = *str; -+ -+ while (1) { -+ if (*p == '$') { -+ in_len = p - in; -+ p++; -+ expansion = expand_dollar_with_args(&p, argc, argv); -+ out_len += in_len + strlen(expansion); -+ out = xrealloc(out, out_len); -+ strncat(out, in, in_len); -+ strcat(out, expansion); -+ free(expansion); -+ in = p; -+ continue; -+ } -+ -+ if (is_end(*p)) -+ break; -+ -+ p++; -+ } -+ -+ in_len = p - in; -+ out_len += in_len; -+ out = xrealloc(out, out_len); -+ strncat(out, in, in_len); -+ -+ /* Advance 'str' to the end character */ -+ *str = p; -+ -+ return out; -+} -+ -+static bool is_end_of_str(char c) -+{ -+ return !c; -+} -+ -+/* -+ * Expand variables and functions in the given string. Undefined variables -+ * expand to an empty string. -+ * The returned string must be freed when done. -+ */ -+static char *expand_string_with_args(const char *in, int argc, char *argv[]) -+{ -+ return __expand_string(&in, is_end_of_str, argc, argv); -+} -+ -+char *expand_string(const char *in) -+{ -+ return expand_string_with_args(in, 0, NULL); -+} -+ -+static bool is_end_of_token(char c) -+{ -+ return !(isalnum(c) || c == '_' || c == '-'); -+} -+ -+/* -+ * Expand variables in a token. The parsing stops when a token separater -+ * (in most cases, it is a whitespace) is encountered. 'str' is updated to -+ * point to the next character. -+ * -+ * The returned string must be freed when done. -+ */ -+char *expand_one_token(const char **str) -+{ -+ return __expand_string(str, is_end_of_token, 0, NULL); -+} -diff --git a/carl9170fw/config/symbol.c b/carl9170fw/config/symbol.c -index 3c8bd9b..1f9266d 100644 ---- a/carl9170fw/config/symbol.c -+++ b/carl9170fw/config/symbol.c -@@ -1,6 +1,6 @@ -+// SPDX-License-Identifier: GPL-2.0 - /* - * Copyright (C) 2002 Roman Zippel -- * Released under the terms of the GNU GPL v2.0. - */ - - #include -@@ -33,33 +33,6 @@ struct symbol *sym_defconfig_list; - struct symbol *modules_sym; - tristate modules_val; - --struct expr *sym_env_list; -- --static void sym_add_default(struct symbol *sym, const char *def) --{ -- struct property *prop = prop_alloc(P_DEFAULT, sym); -- -- prop->expr = expr_alloc_symbol(sym_lookup(def, SYMBOL_CONST)); --} -- --void sym_init(void) --{ -- struct symbol *sym; -- struct utsname uts; -- static bool inited = false; -- -- if (inited) -- return; -- inited = true; -- -- uname(&uts); -- -- sym = sym_lookup("UNAME_RELEASE", 0); -- sym->type = S_STRING; -- sym->flags |= SYMBOL_AUTO; -- sym_add_default(sym, uts.release); --} -- - enum symbol_type sym_get_type(struct symbol *sym) - { - enum symbol_type type = sym->type; -@@ -77,7 +50,7 @@ const char *sym_type_name(enum symbol_type type) - { - switch (type) { - case S_BOOLEAN: -- return "boolean"; -+ return "bool"; - case S_TRISTATE: - return "tristate"; - case S_INT: -@@ -88,8 +61,6 @@ const char *sym_type_name(enum symbol_type type) - return "string"; - case S_UNKNOWN: - return "unknown"; -- case S_OTHER: -- break; - } - return "???"; - } -@@ -103,15 +74,6 @@ struct property *sym_get_choice_prop(struct symbol *sym) - return NULL; - } - --struct property *sym_get_env_prop(struct symbol *sym) --{ -- struct property *prop; -- -- for_all_properties(sym, prop, P_ENV) -- return prop; -- return NULL; --} -- - static struct property *sym_get_default_prop(struct symbol *sym) - { - struct property *prop; -@@ -124,7 +86,7 @@ static struct property *sym_get_default_prop(struct symbol *sym) - return NULL; - } - --static struct property *sym_get_range_prop(struct symbol *sym) -+struct property *sym_get_range_prop(struct symbol *sym) - { - struct property *prop; - -@@ -183,7 +145,7 @@ static void sym_validate_range(struct symbol *sym) - sprintf(str, "%lld", val2); - else - sprintf(str, "0x%llx", val2); -- sym->curr.val = strdup(str); -+ sym->curr.val = xstrdup(str); - } - - static void sym_set_changed(struct symbol *sym) -@@ -243,7 +205,7 @@ static void sym_calc_visibility(struct symbol *sym) - tri = yes; - if (sym->dir_dep.expr) - tri = expr_calc_value(sym->dir_dep.expr); -- if (tri == mod) -+ if (tri == mod && sym_get_type(sym) == S_BOOLEAN) - tri = yes; - if (sym->dir_dep.tri != tri) { - sym->dir_dep.tri = tri; -@@ -333,6 +295,27 @@ static struct symbol *sym_calc_choice(struct symbol *sym) - return def_sym; - } - -+static void sym_warn_unmet_dep(struct symbol *sym) -+{ -+ struct gstr gs = str_new(); -+ -+ str_printf(&gs, -+ "\nWARNING: unmet direct dependencies detected for %s\n", -+ sym->name); -+ str_printf(&gs, -+ " Depends on [%c]: ", -+ sym->dir_dep.tri == mod ? 'm' : 'n'); -+ expr_gstr_print(sym->dir_dep.expr, &gs); -+ str_printf(&gs, "\n"); -+ -+ expr_gstr_print_revdep(sym->rev_dep.expr, &gs, yes, -+ " Selected by [y]:\n"); -+ expr_gstr_print_revdep(sym->rev_dep.expr, &gs, mod, -+ " Selected by [m]:\n"); -+ -+ fputs(str_get(&gs), stderr); -+} -+ - void sym_calc_value(struct symbol *sym) - { - struct symbol_value newval, oldval; -@@ -371,11 +354,13 @@ void sym_calc_value(struct symbol *sym) - sym->curr.tri = no; - return; - } -- if (!sym_is_choice_value(sym)) -- sym->flags &= ~SYMBOL_WRITE; -+ sym->flags &= ~SYMBOL_WRITE; - - sym_calc_visibility(sym); - -+ if (sym->visible != no) -+ sym->flags |= SYMBOL_WRITE; -+ - /* set default if recursively called */ - sym->curr = newval; - -@@ -390,7 +375,6 @@ void sym_calc_value(struct symbol *sym) - /* if the symbol is visible use the user value - * if available, otherwise try the default value - */ -- sym->flags |= SYMBOL_WRITE; - if (sym_has_value(sym)) { - newval.tri = EXPR_AND(sym->def[S_DEF_USER].tri, - sym->visible); -@@ -402,9 +386,10 @@ void sym_calc_value(struct symbol *sym) - if (!sym_is_choice(sym)) { - prop = sym_get_default_prop(sym); - if (prop) { -- sym->flags |= SYMBOL_WRITE; - newval.tri = EXPR_AND(expr_calc_value(prop->expr), - prop->visible.tri); -+ if (newval.tri != no) -+ sym->flags |= SYMBOL_WRITE; - } - if (sym->implied.tri != no) { - sym->flags |= SYMBOL_WRITE; -@@ -412,18 +397,8 @@ void sym_calc_value(struct symbol *sym) - } - } - calc_newval: -- if (sym->dir_dep.tri == no && sym->rev_dep.tri != no) { -- struct expr *e; -- e = expr_simplify_unmet_dep(sym->rev_dep.expr, -- sym->dir_dep.expr); -- fprintf(stderr, "warning: ("); -- expr_fprint(e, stderr); -- fprintf(stderr, ") selects %s which has unmet direct dependencies (", -- sym->name); -- expr_fprint(sym->dir_dep.expr, stderr); -- fprintf(stderr, ")\n"); -- expr_free(e); -- } -+ if (sym->dir_dep.tri < sym->rev_dep.tri) -+ sym_warn_unmet_dep(sym); - newval.tri = EXPR_OR(newval.tri, sym->rev_dep.tri); - } - if (newval.tri == mod && -@@ -433,12 +408,9 @@ void sym_calc_value(struct symbol *sym) - case S_STRING: - case S_HEX: - case S_INT: -- if (sym->visible != no) { -- sym->flags |= SYMBOL_WRITE; -- if (sym_has_value(sym)) { -- newval.val = sym->def[S_DEF_USER].val; -- break; -- } -+ if (sym->visible != no && sym_has_value(sym)) { -+ newval.val = sym->def[S_DEF_USER].val; -+ break; - } - prop = sym_get_default_prop(sym); - if (prop) { -@@ -480,7 +452,7 @@ void sym_calc_value(struct symbol *sym) - } - } - -- if (sym->flags & SYMBOL_AUTO) -+ if (sym->flags & SYMBOL_NO_WRITE) - sym->flags &= ~SYMBOL_WRITE; - - if (sym->flags & SYMBOL_NEED_SET_CHOICE_VALUES) -@@ -783,7 +755,6 @@ const char *sym_get_string_default(struct symbol *sym) - return str; - case S_STRING: - return str; -- case S_OTHER: - case S_UNKNOWN: - break; - } -@@ -851,7 +822,7 @@ struct symbol *sym_lookup(const char *name, int flags) - : !(symbol->flags & (SYMBOL_CONST|SYMBOL_CHOICE)))) - return symbol; - } -- new_name = strdup(name); -+ new_name = xstrdup(name); - } else { - new_name = NULL; - hash = 0; -@@ -896,55 +867,6 @@ struct symbol *sym_find(const char *name) - return symbol; - } - --/* -- * Expand symbol's names embedded in the string given in argument. Symbols' -- * name to be expanded shall be prefixed by a '$'. Unknown symbol expands to -- * the empty string. -- */ --const char *sym_expand_string_value(const char *in) --{ -- const char *src; -- char *res; -- size_t reslen; -- -- reslen = strlen(in) + 1; -- res = xmalloc(reslen); -- res[0] = '\0'; -- -- while ((src = strchr(in, '$'))) { -- char *p, name[SYMBOL_MAXLENGTH]; -- const char *symval = ""; -- struct symbol *sym; -- size_t newlen; -- -- strncat(res, in, src - in); -- src++; -- -- p = name; -- while (isalnum(*src) || *src == '_') -- *p++ = *src++; -- *p = '\0'; -- -- sym = sym_find(name); -- if (sym != NULL) { -- sym_calc_value(sym); -- symval = sym_get_string_value(sym); -- } -- -- newlen = strlen(res) + strlen(symval) + strlen(src) + 1; -- if (newlen > reslen) { -- reslen = newlen; -- res = realloc(res, reslen); -- } -- -- strcat(res, symval); -- in = src; -- } -- strcat(res, in); -- -- return res; --} -- - const char *sym_escape_string_value(const char *in) - { - const char *p; -@@ -1086,7 +1008,7 @@ static struct dep_stack { - struct dep_stack *prev, *next; - struct symbol *sym; - struct property *prop; -- struct expr *expr; -+ struct expr **expr; - } *check_top; - - static void dep_stack_insert(struct dep_stack *stack, struct symbol *sym) -@@ -1150,37 +1072,52 @@ static void sym_check_print_recursive(struct symbol *last_sym) - if (stack->sym == last_sym) - fprintf(stderr, "%s:%d:error: recursive dependency detected!\n", - prop->file->name, prop->lineno); -- fprintf(stderr, "For a resolution refer to Documentation/kbuild/kconfig-language.txt\n"); -- fprintf(stderr, "subsection \"Kconfig recursive dependency limitations\"\n"); -- if (stack->expr) { -- fprintf(stderr, "%s:%d:\tsymbol %s %s value contains %s\n", -- prop->file->name, prop->lineno, -+ -+ if (sym_is_choice(sym)) { -+ fprintf(stderr, "%s:%d:\tchoice %s contains symbol %s\n", -+ menu->file->name, menu->lineno, - sym->name ? sym->name : "", -- prop_get_type_name(prop->type), - next_sym->name ? next_sym->name : ""); -- } else if (stack->prop) { -+ } else if (sym_is_choice_value(sym)) { -+ fprintf(stderr, "%s:%d:\tsymbol %s is part of choice %s\n", -+ menu->file->name, menu->lineno, -+ sym->name ? sym->name : "", -+ next_sym->name ? next_sym->name : ""); -+ } else if (stack->expr == &sym->dir_dep.expr) { - fprintf(stderr, "%s:%d:\tsymbol %s depends on %s\n", - prop->file->name, prop->lineno, - sym->name ? sym->name : "", - next_sym->name ? next_sym->name : ""); -- } else if (sym_is_choice(sym)) { -- fprintf(stderr, "%s:%d:\tchoice %s contains symbol %s\n", -- menu->file->name, menu->lineno, -+ } else if (stack->expr == &sym->rev_dep.expr) { -+ fprintf(stderr, "%s:%d:\tsymbol %s is selected by %s\n", -+ prop->file->name, prop->lineno, - sym->name ? sym->name : "", - next_sym->name ? next_sym->name : ""); -- } else if (sym_is_choice_value(sym)) { -- fprintf(stderr, "%s:%d:\tsymbol %s is part of choice %s\n", -- menu->file->name, menu->lineno, -+ } else if (stack->expr == &sym->implied.expr) { -+ fprintf(stderr, "%s:%d:\tsymbol %s is implied by %s\n", -+ prop->file->name, prop->lineno, -+ sym->name ? sym->name : "", -+ next_sym->name ? next_sym->name : ""); -+ } else if (stack->expr) { -+ fprintf(stderr, "%s:%d:\tsymbol %s %s value contains %s\n", -+ prop->file->name, prop->lineno, - sym->name ? sym->name : "", -+ prop_get_type_name(prop->type), - next_sym->name ? next_sym->name : ""); - } else { -- fprintf(stderr, "%s:%d:\tsymbol %s is selected by %s\n", -+ fprintf(stderr, "%s:%d:\tsymbol %s %s is visible depending on %s\n", - prop->file->name, prop->lineno, - sym->name ? sym->name : "", -+ prop_get_type_name(prop->type), - next_sym->name ? next_sym->name : ""); - } - } - -+ fprintf(stderr, -+ "For a resolution refer to Documentation/kbuild/kconfig-language.txt\n" -+ "subsection \"Kconfig recursive dependency limitations\"\n" -+ "\n"); -+ - if (check_top == &cv_stack) - dep_stack_remove(); - } -@@ -1215,7 +1152,7 @@ static struct symbol *sym_check_expr_deps(struct expr *e) - default: - break; - } -- printf("Oops! How to check %d?\n", e->type); -+ fprintf(stderr, "Oops! How to check %d?\n", e->type); - return NULL; - } - -@@ -1228,12 +1165,26 @@ static struct symbol *sym_check_sym_deps(struct symbol *sym) - - dep_stack_insert(&stack, sym); - -+ stack.expr = &sym->dir_dep.expr; -+ sym2 = sym_check_expr_deps(sym->dir_dep.expr); -+ if (sym2) -+ goto out; -+ -+ stack.expr = &sym->rev_dep.expr; - sym2 = sym_check_expr_deps(sym->rev_dep.expr); - if (sym2) - goto out; - -+ stack.expr = &sym->implied.expr; -+ sym2 = sym_check_expr_deps(sym->implied.expr); -+ if (sym2) -+ goto out; -+ -+ stack.expr = NULL; -+ - for (prop = sym->prop; prop; prop = prop->next) { -- if (prop->type == P_CHOICE || prop->type == P_SELECT) -+ if (prop->type == P_CHOICE || prop->type == P_SELECT || -+ prop->type == P_IMPLY) - continue; - stack.prop = prop; - sym2 = sym_check_expr_deps(prop->visible.expr); -@@ -1241,7 +1192,7 @@ static struct symbol *sym_check_sym_deps(struct symbol *sym) - break; - if (prop->type != P_DEFAULT || sym_is_choice(sym)) - continue; -- stack.expr = prop->expr; -+ stack.expr = &prop->expr; - sym2 = sym_check_expr_deps(prop->expr); - if (sym2) - break; -@@ -1319,9 +1270,6 @@ struct symbol *sym_check_deps(struct symbol *sym) - sym->flags &= ~SYMBOL_CHECK; - } - -- if (sym2 && sym2 == sym) -- sym2 = NULL; -- - return sym2; - } - -@@ -1360,8 +1308,6 @@ const char *prop_get_type_name(enum prop_type type) - switch (type) { - case P_PROMPT: - return "prompt"; -- case P_ENV: -- return "env"; - case P_COMMENT: - return "comment"; - case P_MENU: -@@ -1383,32 +1329,3 @@ const char *prop_get_type_name(enum prop_type type) - } - return "unknown"; - } -- --static void prop_add_env(const char *env) --{ -- struct symbol *sym, *sym2; -- struct property *prop; -- char *p; -- -- sym = current_entry->sym; -- sym->flags |= SYMBOL_AUTO; -- for_all_properties(sym, prop, P_ENV) { -- sym2 = prop_get_symbol(prop); -- if (strcmp(sym2->name, env)) -- menu_warn(current_entry, "redefining environment symbol from %s", -- sym2->name); -- return; -- } -- -- prop = prop_alloc(P_ENV, sym); -- prop->expr = expr_alloc_symbol(sym_lookup(env, SYMBOL_CONST)); -- -- sym_env_list = expr_alloc_one(E_LIST, sym_env_list); -- sym_env_list->right.sym = sym; -- -- p = getenv(env); -- if (p) -- sym_add_default(sym, p); -- else -- menu_warn(current_entry, "environment variable %s undefined", env); --} -diff --git a/carl9170fw/config/util.c b/carl9170fw/config/util.c -index 0e76042..2958539 100644 ---- a/carl9170fw/config/util.c -+++ b/carl9170fw/config/util.c -@@ -1,8 +1,7 @@ -+// SPDX-License-Identifier: GPL-2.0 - /* - * Copyright (C) 2002-2005 Roman Zippel - * Copyright (C) 2002-2005 Sam Ravnborg -- * -- * Released under the terms of the GNU GPL v2.0. - */ - - #include -@@ -14,69 +13,21 @@ - struct file *file_lookup(const char *name) - { - struct file *file; -- const char *file_name = sym_expand_string_value(name); - - for (file = file_list; file; file = file->next) { - if (!strcmp(name, file->name)) { -- free((void *)file_name); - return file; - } - } - - file = xmalloc(sizeof(*file)); - memset(file, 0, sizeof(*file)); -- file->name = file_name; -+ file->name = xstrdup(name); - file->next = file_list; - file_list = file; - return file; - } - --/* write a dependency file as used by kbuild to track dependencies */ --int file_write_dep(const char *name) --{ -- struct symbol *sym, *env_sym; -- struct expr *e; -- struct file *file; -- FILE *out; -- -- if (!name) -- name = ".kconfig.d"; -- out = fopen("..config.tmp", "w"); -- if (!out) -- return 1; -- fprintf(out, "deps_config := \\\n"); -- for (file = file_list; file; file = file->next) { -- if (file->next) -- fprintf(out, "\t%s \\\n", file->name); -- else -- fprintf(out, "\t%s\n", file->name); -- } -- fprintf(out, "\n%s: \\\n" -- "\t$(deps_config)\n\n", conf_get_autoconfig_name()); -- -- expr_list_for_each_sym(sym_env_list, e, sym) { -- struct property *prop; -- const char *value; -- -- prop = sym_get_env_prop(sym); -- env_sym = prop_get_symbol(prop); -- if (!env_sym) -- continue; -- value = getenv(env_sym->name); -- if (!value) -- value = ""; -- fprintf(out, "ifneq \"$(%s)\" \"%s\"\n", env_sym->name, value); -- fprintf(out, "%s: FORCE\n", conf_get_autoconfig_name()); -- fprintf(out, "endif\n"); -- } -- -- fprintf(out, "\n$(deps_config): ;\n"); -- fclose(out); -- rename("..config.tmp", name); -- return 0; --} -- -- - /* Allocate initial growable string */ - struct gstr str_new(void) - { -@@ -104,7 +55,7 @@ void str_append(struct gstr *gs, const char *s) - if (s) { - l = strlen(gs->s) + strlen(s) + 1; - if (l > gs->len) { -- gs->s = realloc(gs->s, l); -+ gs->s = xrealloc(gs->s, l); - gs->len = l; - } - strcat(gs->s, s); -@@ -145,3 +96,34 @@ void *xcalloc(size_t nmemb, size_t size) - fprintf(stderr, "Out of memory.\n"); - exit(1); - } -+ -+void *xrealloc(void *p, size_t size) -+{ -+ p = realloc(p, size); -+ if (p) -+ return p; -+ fprintf(stderr, "Out of memory.\n"); -+ exit(1); -+} -+ -+char *xstrdup(const char *s) -+{ -+ char *p; -+ -+ p = strdup(s); -+ if (p) -+ return p; -+ fprintf(stderr, "Out of memory.\n"); -+ exit(1); -+} -+ -+char *xstrndup(const char *s, size_t n) -+{ -+ char *p; -+ -+ p = strndup(s, n); -+ if (p) -+ return p; -+ fprintf(stderr, "Out of memory.\n"); -+ exit(1); -+} -diff --git a/carl9170fw/config/zconf.l b/carl9170fw/config/zconf.l -index 9720530..c52cce8 100644 ---- a/carl9170fw/config/zconf.l -+++ b/carl9170fw/config/zconf.l -@@ -1,13 +1,13 @@ --%option nostdinit noyywrap never-interactive full ecs --%option 8bit nodefault perf-report perf-report --%option noinput --%x COMMAND HELP STRING PARAM --%{ -+/* SPDX-License-Identifier: GPL-2.0 */ - /* - * Copyright (C) 2002 Roman Zippel -- * Released under the terms of the GNU GPL v2.0. - */ -+%option nostdinit noyywrap never-interactive full ecs -+%option 8bit nodefault yylineno -+%x ASSIGN_VAL HELP STRING -+%{ - -+#include - #include - #include - #include -@@ -15,6 +15,9 @@ - #include - - #include "lkc.h" -+#include "zconf.tab.h" -+ -+#define YY_DECL static int yylex1(void) - - #define START_STRSIZE 16 - -@@ -23,6 +26,8 @@ static struct { - int lineno; - } current_pos; - -+static int prev_prev_token = T_EOL; -+static int prev_token = T_EOL; - static char *text; - static int text_size, text_asize; - -@@ -35,6 +40,8 @@ struct buffer *current_buf; - - static int last_ts, first_ts; - -+static char *expand_token(const char *in, size_t n); -+static void append_expanded_string(const char *in); - static void zconf_endhelp(void); - static void zconf_endfile(void); - -@@ -52,7 +59,7 @@ static void append_string(const char *str, int size) - if (new_size > text_asize) { - new_size += START_STRSIZE - 1; - new_size &= -START_STRSIZE; -- text = realloc(text, new_size); -+ text = xrealloc(text, new_size); - text_asize = new_size; - } - memcpy(text + text_size, str, size); -@@ -71,7 +78,7 @@ static void warn_ignored_character(char chr) - { - fprintf(stderr, - "%s:%d:warning: ignoring unsupported character '%c'\n", -- zconf_curname(), zconf_lineno(), chr); -+ current_file->name, yylineno, chr); - } - %} - -@@ -81,116 +88,113 @@ n [A-Za-z0-9_-] - int str = 0; - int ts, i; - --[ \t]*#.*\n | --[ \t]*\n { -- current_file->lineno++; -- return T_EOL; --} --[ \t]*#.* -- -- --[ \t]+ { -- BEGIN(COMMAND); --} -- --. { -- unput(yytext[0]); -- BEGIN(COMMAND); --} -- -- --{ -- {n}+ { -- const struct kconf_id *id = kconf_id_lookup(yytext, yyleng); -- BEGIN(PARAM); -- current_pos.file = current_file; -- current_pos.lineno = current_file->lineno; -- if (id && id->flags & TF_COMMAND) { -- zconflval.id = id; -- return id->token; -- } -- alloc_string(yytext, yyleng); -- zconflval.string = text; -- return T_WORD; -- } -- . warn_ignored_character(*yytext); -- \n { -- BEGIN(INITIAL); -- current_file->lineno++; -- return T_EOL; -- } --} -+#.* /* ignore comment */ -+[ \t]* /* whitespaces */ -+\\\n /* escaped new line */ -+\n return T_EOL; -+"allnoconfig_y" return T_ALLNOCONFIG_Y; -+"bool" return T_BOOL; -+"choice" return T_CHOICE; -+"comment" return T_COMMENT; -+"config" return T_CONFIG; -+"def_bool" return T_DEF_BOOL; -+"def_tristate" return T_DEF_TRISTATE; -+"default" return T_DEFAULT; -+"defconfig_list" return T_DEFCONFIG_LIST; -+"depends" return T_DEPENDS; -+"endchoice" return T_ENDCHOICE; -+"endif" return T_ENDIF; -+"endmenu" return T_ENDMENU; -+"help"|"---help---" return T_HELP; -+"hex" return T_HEX; -+"if" return T_IF; -+"imply" return T_IMPLY; -+"int" return T_INT; -+"mainmenu" return T_MAINMENU; -+"menu" return T_MENU; -+"menuconfig" return T_MENUCONFIG; -+"modules" return T_MODULES; -+"on" return T_ON; -+"option" return T_OPTION; -+"optional" return T_OPTIONAL; -+"prompt" return T_PROMPT; -+"range" return T_RANGE; -+"select" return T_SELECT; -+"source" return T_SOURCE; -+"string" return T_STRING; -+"tristate" return T_TRISTATE; -+"visible" return T_VISIBLE; -+"||" return T_OR; -+"&&" return T_AND; -+"=" return T_EQUAL; -+"!=" return T_UNEQUAL; -+"<" return T_LESS; -+"<=" return T_LESS_EQUAL; -+">" return T_GREATER; -+">=" return T_GREATER_EQUAL; -+"!" return T_NOT; -+"(" return T_OPEN_PAREN; -+")" return T_CLOSE_PAREN; -+":=" return T_COLON_EQUAL; -+"+=" return T_PLUS_EQUAL; -+\"|\' { -+ str = yytext[0]; -+ new_string(); -+ BEGIN(STRING); -+ } -+{n}+ { -+ alloc_string(yytext, yyleng); -+ yylval.string = text; -+ return T_WORD; -+ } -+({n}|$)+ { -+ /* this token includes at least one '$' */ -+ yylval.string = expand_token(yytext, yyleng); -+ if (strlen(yylval.string)) -+ return T_WORD; -+ free(yylval.string); -+ } -+. warn_ignored_character(*yytext); - --{ -- "&&" return T_AND; -- "||" return T_OR; -- "(" return T_OPEN_PAREN; -- ")" return T_CLOSE_PAREN; -- "!" return T_NOT; -- "=" return T_EQUAL; -- "!=" return T_UNEQUAL; -- "<=" return T_LESS_EQUAL; -- ">=" return T_GREATER_EQUAL; -- "<" return T_LESS; -- ">" return T_GREATER; -- \"|\' { -- str = yytext[0]; -- new_string(); -- BEGIN(STRING); -- } -- \n BEGIN(INITIAL); current_file->lineno++; return T_EOL; -- ({n}|[/.])+ { -- const struct kconf_id *id = kconf_id_lookup(yytext, yyleng); -- if (id && id->flags & TF_PARAM) { -- zconflval.id = id; -- return id->token; -- } -+{ -+ [^[:blank:]\n]+.* { - alloc_string(yytext, yyleng); -- zconflval.string = text; -- return T_WORD; -- } -- #.* /* comment */ -- \\\n current_file->lineno++; -- [[:blank:]]+ -- . warn_ignored_character(*yytext); -- <> { -- BEGIN(INITIAL); -+ yylval.string = text; -+ return T_ASSIGN_VAL; - } -+ \n { BEGIN(INITIAL); return T_EOL; } -+ . - } - - { -- [^'"\\\n]+/\n { -- append_string(yytext, yyleng); -- zconflval.string = text; -- return T_WORD_QUOTE; -- } -- [^'"\\\n]+ { -+ "$".* append_expanded_string(yytext); -+ [^$'"\\\n]+ { - append_string(yytext, yyleng); - } -- \\.?/\n { -- append_string(yytext + 1, yyleng - 1); -- zconflval.string = text; -- return T_WORD_QUOTE; -- } - \\.? { - append_string(yytext + 1, yyleng - 1); - } - \'|\" { - if (str == yytext[0]) { -- BEGIN(PARAM); -- zconflval.string = text; -+ BEGIN(INITIAL); -+ yylval.string = text; - return T_WORD_QUOTE; - } else - append_string(yytext, 1); - } - \n { -- printf("%s:%d:warning: multi-line strings not supported\n", zconf_curname(), zconf_lineno()); -- current_file->lineno++; -+ fprintf(stderr, -+ "%s:%d:warning: multi-line strings not supported\n", -+ zconf_curname(), zconf_lineno()); -+ unput('\n'); - BEGIN(INITIAL); -- return T_EOL; -+ yylval.string = text; -+ return T_WORD_QUOTE; - } - <> { - BEGIN(INITIAL); -+ yylval.string = text; -+ return T_WORD_QUOTE; - } - } - -@@ -218,12 +222,10 @@ n [A-Za-z0-9_-] - } - } - [ \t]*\n/[^ \t\n] { -- current_file->lineno++; - zconf_endhelp(); - return T_HELPTEXT; - } - [ \t]*\n { -- current_file->lineno++; - append_string("\n", 1); - } - [^ \t\n].* { -@@ -243,6 +245,12 @@ n [A-Za-z0-9_-] - } - - <> { -+ BEGIN(INITIAL); -+ -+ if (prev_token != T_EOL && prev_token != T_HELPTEXT) -+ fprintf(stderr, "%s:%d:warning: no new line at end of file\n", -+ current_file->name, yylineno); -+ - if (current_file) { - zconf_endfile(); - return T_EOL; -@@ -252,6 +260,93 @@ n [A-Za-z0-9_-] - } - - %% -+ -+/* second stage lexer */ -+int yylex(void) -+{ -+ int token; -+ -+repeat: -+ token = yylex1(); -+ -+ if (prev_token == T_EOL || prev_token == T_HELPTEXT) { -+ if (token == T_EOL) { -+ /* Do not pass unneeded T_EOL to the parser. */ -+ goto repeat; -+ } else { -+ /* -+ * For the parser, update file/lineno at the first token -+ * of each statement. Generally, \n is a statement -+ * terminator in Kconfig, but it is not always true -+ * because \n could be escaped by a backslash. -+ */ -+ current_pos.file = current_file; -+ current_pos.lineno = yylineno; -+ } -+ } -+ -+ if (prev_prev_token == T_EOL && prev_token == T_WORD && -+ (token == T_EQUAL || token == T_COLON_EQUAL || token == T_PLUS_EQUAL)) -+ BEGIN(ASSIGN_VAL); -+ -+ prev_prev_token = prev_token; -+ prev_token = token; -+ -+ return token; -+} -+ -+static char *expand_token(const char *in, size_t n) -+{ -+ char *out; -+ int c; -+ char c2; -+ const char *rest, *end; -+ -+ new_string(); -+ append_string(in, n); -+ -+ /* get the whole line because we do not know the end of token. */ -+ while ((c = input()) != EOF) { -+ if (c == '\n') { -+ unput(c); -+ break; -+ } -+ c2 = c; -+ append_string(&c2, 1); -+ } -+ -+ rest = text; -+ out = expand_one_token(&rest); -+ -+ /* push back unused characters to the input stream */ -+ end = rest + strlen(rest); -+ while (end > rest) -+ unput(*--end); -+ -+ free(text); -+ -+ return out; -+} -+ -+static void append_expanded_string(const char *str) -+{ -+ const char *end; -+ char *res; -+ -+ str++; -+ -+ res = expand_dollar(&str); -+ -+ /* push back unused characters to the input stream */ -+ end = str + strlen(str); -+ while (end > str) -+ unput(*--end); -+ -+ append_string(res, strlen(res)); -+ -+ free(res); -+} -+ - void zconf_starthelp(void) - { - new_string(); -@@ -261,7 +356,7 @@ void zconf_starthelp(void) - - static void zconf_endhelp(void) - { -- zconflval.string = text; -+ yylval.string = text; - BEGIN(INITIAL); - } - -@@ -294,7 +389,7 @@ void zconf_initscan(const char *name) - { - yyin = zconf_fopen(name); - if (!yyin) { -- printf("can't find file %s\n", name); -+ fprintf(stderr, "can't find file %s\n", name); - exit(1); - } - -@@ -302,7 +397,7 @@ void zconf_initscan(const char *name) - memset(current_buf, 0, sizeof(*current_buf)); - - current_file = file_lookup(name); -- current_file->lineno = 1; -+ yylineno = 1; - } - - void zconf_nextfile(const char *name) -@@ -315,35 +410,34 @@ void zconf_nextfile(const char *name) - current_buf->state = YY_CURRENT_BUFFER; - yyin = zconf_fopen(file->name); - if (!yyin) { -- printf("%s:%d: can't open file \"%s\"\n", -- zconf_curname(), zconf_lineno(), file->name); -+ fprintf(stderr, "%s:%d: can't open file \"%s\"\n", -+ zconf_curname(), zconf_lineno(), file->name); - exit(1); - } - yy_switch_to_buffer(yy_create_buffer(yyin, YY_BUF_SIZE)); - buf->parent = current_buf; - current_buf = buf; - -- for (iter = current_file->parent; iter; iter = iter->parent ) { -- if (!strcmp(current_file->name,iter->name) ) { -- printf("%s:%d: recursive inclusion detected. " -- "Inclusion path:\n current file : '%s'\n", -- zconf_curname(), zconf_lineno(), -- zconf_curname()); -- iter = current_file->parent; -- while (iter && \ -- strcmp(iter->name,current_file->name)) { -- printf(" included from: '%s:%d'\n", -- iter->name, iter->lineno-1); -+ current_file->lineno = yylineno; -+ file->parent = current_file; -+ -+ for (iter = current_file; iter; iter = iter->parent) { -+ if (!strcmp(iter->name, file->name)) { -+ fprintf(stderr, -+ "Recursive inclusion detected.\n" -+ "Inclusion path:\n" -+ " current file : %s\n", file->name); -+ iter = file; -+ do { - iter = iter->parent; -- } -- if (iter) -- printf(" included from: '%s:%d'\n", -- iter->name, iter->lineno+1); -+ fprintf(stderr, " included from: %s:%d\n", -+ iter->name, iter->lineno - 1); -+ } while (strcmp(iter->name, file->name)); - exit(1); - } - } -- file->lineno = 1; -- file->parent = current_file; -+ -+ yylineno = 1; - current_file = file; - } - -@@ -352,6 +446,8 @@ static void zconf_endfile(void) - struct buffer *parent; - - current_file = current_file->parent; -+ if (current_file) -+ yylineno = current_file->lineno; - - parent = current_buf->parent; - if (parent) { -diff --git a/carl9170fw/config/zconf.y b/carl9170fw/config/zconf.y -index 79c4f04..60936c7 100644 ---- a/carl9170fw/config/zconf.y -+++ b/carl9170fw/config/zconf.y -@@ -1,8 +1,8 @@ --%{ -+/* SPDX-License-Identifier: GPL-2.0 */ - /* - * Copyright (C) 2002 Roman Zippel -- * Released under the terms of the GNU GPL v2.0. - */ -+%{ - - #include - #include -@@ -20,63 +20,69 @@ - - int cdebug = PRINTD; - --extern int zconflex(void); -+static void yyerror(const char *err); - static void zconfprint(const char *err, ...); - static void zconf_error(const char *err, ...); --static void zconferror(const char *err); --static bool zconf_endtoken(const struct kconf_id *id, int starttoken, int endtoken); -+static bool zconf_endtoken(const char *tokenname, -+ const char *expected_tokenname); - - struct symbol *symbol_hash[SYMBOL_HASHSIZE]; - - static struct menu *current_menu, *current_entry; - - %} --%expect 32 - - %union - { - char *string; -- struct file *file; - struct symbol *symbol; - struct expr *expr; - struct menu *menu; -- const struct kconf_id *id; -+ enum symbol_type type; -+ enum variable_flavor flavor; - } - --%token T_MAINMENU --%token T_MENU --%token T_ENDMENU --%token T_SOURCE --%token T_CHOICE --%token T_ENDCHOICE --%token T_COMMENT --%token T_CONFIG --%token T_MENUCONFIG --%token T_HELP - %token T_HELPTEXT --%token T_IF --%token T_ENDIF --%token T_DEPENDS --%token T_OPTIONAL --%token T_PROMPT --%token T_TYPE --%token T_DEFAULT --%token T_SELECT --%token T_IMPLY --%token T_RANGE --%token T_VISIBLE --%token T_OPTION --%token T_ON - %token T_WORD - %token T_WORD_QUOTE --%token T_UNEQUAL --%token T_LESS --%token T_LESS_EQUAL --%token T_GREATER --%token T_GREATER_EQUAL -+%token T_ALLNOCONFIG_Y -+%token T_BOOL -+%token T_CHOICE - %token T_CLOSE_PAREN -+%token T_COLON_EQUAL -+%token T_COMMENT -+%token T_CONFIG -+%token T_DEFAULT -+%token T_DEFCONFIG_LIST -+%token T_DEF_BOOL -+%token T_DEF_TRISTATE -+%token T_DEPENDS -+%token T_ENDCHOICE -+%token T_ENDIF -+%token T_ENDMENU -+%token T_HELP -+%token T_HEX -+%token T_IF -+%token T_IMPLY -+%token T_INT -+%token T_MAINMENU -+%token T_MENU -+%token T_MENUCONFIG -+%token T_MODULES -+%token T_ON - %token T_OPEN_PAREN -+%token T_OPTION -+%token T_OPTIONAL -+%token T_PLUS_EQUAL -+%token T_PROMPT -+%token T_RANGE -+%token T_SELECT -+%token T_SOURCE -+%token T_STRING -+%token T_TRISTATE -+%token T_VISIBLE - %token T_EOL -+%token T_ASSIGN_VAL - - %left T_OR - %left T_AND -@@ -85,13 +91,15 @@ static struct menu *current_menu, *current_entry; - %nonassoc T_NOT - - %type prompt -+%type nonconst_symbol - %type symbol -+%type type logic_type default - %type expr - %type if_expr --%type end --%type option_name -+%type end - %type if_entry menu_entry choice_entry --%type symbol_option_arg word_opt -+%type word_opt assign_val -+%type assign_op - - %destructor { - fprintf(stderr, "%s:%d: missing end statement for this entry\n", -@@ -100,71 +108,53 @@ static struct menu *current_menu, *current_entry; - menu_end_menu(); - } if_entry menu_entry choice_entry - --%{ --/* Include zconf_id.c here so it can see the token constants. */ --#include "kconf_id.c" --%} -- - %% --input: nl start | start; -+input: mainmenu_stmt stmt_list | stmt_list; - --start: mainmenu_stmt stmt_list | stmt_list; -+/* mainmenu entry */ -+ -+mainmenu_stmt: T_MAINMENU prompt T_EOL -+{ -+ menu_add_prompt(P_MENU, $2, NULL); -+}; - - stmt_list: - /* empty */ - | stmt_list common_stmt - | stmt_list choice_stmt - | stmt_list menu_stmt -- | stmt_list end { zconf_error("unexpected end statement"); } - | stmt_list T_WORD error T_EOL { zconf_error("unknown statement \"%s\"", $2); } -- | stmt_list option_name error T_EOL --{ -- zconf_error("unexpected option \"%s\"", $2->name); --} - | stmt_list error T_EOL { zconf_error("invalid statement"); } - ; - --option_name: -- T_DEPENDS | T_PROMPT | T_TYPE | T_SELECT | T_IMPLY | T_OPTIONAL | T_RANGE | T_DEFAULT | T_VISIBLE --; -- - common_stmt: -- T_EOL -- | if_stmt -+ if_stmt - | comment_stmt - | config_stmt - | menuconfig_stmt - | source_stmt -+ | assignment_stmt - ; - --option_error: -- T_WORD error T_EOL { zconf_error("unknown option \"%s\"", $1); } -- | error T_EOL { zconf_error("invalid option"); } --; -- -- - /* config/menuconfig entry */ - --config_entry_start: T_CONFIG T_WORD T_EOL -+config_entry_start: T_CONFIG nonconst_symbol T_EOL - { -- struct symbol *sym = sym_lookup($2, 0); -- sym->flags |= SYMBOL_OPTIONAL; -- menu_add_entry(sym); -- printd(DEBUG_PARSE, "%s:%d:config %s\n", zconf_curname(), zconf_lineno(), $2); -+ $2->flags |= SYMBOL_OPTIONAL; -+ menu_add_entry($2); -+ printd(DEBUG_PARSE, "%s:%d:config %s\n", zconf_curname(), zconf_lineno(), $2->name); - }; - - config_stmt: config_entry_start config_option_list - { -- menu_end_entry(); - printd(DEBUG_PARSE, "%s:%d:endconfig\n", zconf_curname(), zconf_lineno()); - }; - --menuconfig_entry_start: T_MENUCONFIG T_WORD T_EOL -+menuconfig_entry_start: T_MENUCONFIG nonconst_symbol T_EOL - { -- struct symbol *sym = sym_lookup($2, 0); -- sym->flags |= SYMBOL_OPTIONAL; -- menu_add_entry(sym); -- printd(DEBUG_PARSE, "%s:%d:menuconfig %s\n", zconf_curname(), zconf_lineno(), $2); -+ $2->flags |= SYMBOL_OPTIONAL; -+ menu_add_entry($2); -+ printd(DEBUG_PARSE, "%s:%d:menuconfig %s\n", zconf_curname(), zconf_lineno(), $2->name); - }; - - menuconfig_stmt: menuconfig_entry_start config_option_list -@@ -173,26 +163,22 @@ menuconfig_stmt: menuconfig_entry_start config_option_list - current_entry->prompt->type = P_MENU; - else - zconfprint("warning: menuconfig statement without prompt"); -- menu_end_entry(); - printd(DEBUG_PARSE, "%s:%d:endconfig\n", zconf_curname(), zconf_lineno()); - }; - - config_option_list: - /* empty */ - | config_option_list config_option -- | config_option_list symbol_option - | config_option_list depends - | config_option_list help -- | config_option_list option_error -- | config_option_list T_EOL - ; - --config_option: T_TYPE prompt_stmt_opt T_EOL -+config_option: type prompt_stmt_opt T_EOL - { -- menu_set_type($1->stype); -+ menu_set_type($1); - printd(DEBUG_PARSE, "%s:%d:type(%u)\n", - zconf_curname(), zconf_lineno(), -- $1->stype); -+ $1); - }; - - config_option: T_PROMPT prompt if_expr T_EOL -@@ -201,25 +187,25 @@ config_option: T_PROMPT prompt if_expr T_EOL - printd(DEBUG_PARSE, "%s:%d:prompt\n", zconf_curname(), zconf_lineno()); - }; - --config_option: T_DEFAULT expr if_expr T_EOL -+config_option: default expr if_expr T_EOL - { - menu_add_expr(P_DEFAULT, $2, $3); -- if ($1->stype != S_UNKNOWN) -- menu_set_type($1->stype); -+ if ($1 != S_UNKNOWN) -+ menu_set_type($1); - printd(DEBUG_PARSE, "%s:%d:default(%u)\n", - zconf_curname(), zconf_lineno(), -- $1->stype); -+ $1); - }; - --config_option: T_SELECT T_WORD if_expr T_EOL -+config_option: T_SELECT nonconst_symbol if_expr T_EOL - { -- menu_add_symbol(P_SELECT, sym_lookup($2, 0), $3); -+ menu_add_symbol(P_SELECT, $2, $3); - printd(DEBUG_PARSE, "%s:%d:select\n", zconf_curname(), zconf_lineno()); - }; - --config_option: T_IMPLY T_WORD if_expr T_EOL -+config_option: T_IMPLY nonconst_symbol if_expr T_EOL - { -- menu_add_symbol(P_IMPLY, sym_lookup($2, 0), $3); -+ menu_add_symbol(P_IMPLY, $2, $3); - printd(DEBUG_PARSE, "%s:%d:imply\n", zconf_curname(), zconf_lineno()); - }; - -@@ -229,34 +215,30 @@ config_option: T_RANGE symbol symbol if_expr T_EOL - printd(DEBUG_PARSE, "%s:%d:range\n", zconf_curname(), zconf_lineno()); - }; - --symbol_option: T_OPTION symbol_option_list T_EOL --; -+config_option: T_OPTION T_MODULES T_EOL -+{ -+ menu_add_option_modules(); -+}; - --symbol_option_list: -- /* empty */ -- | symbol_option_list T_WORD symbol_option_arg -+config_option: T_OPTION T_DEFCONFIG_LIST T_EOL - { -- const struct kconf_id *id = kconf_id_lookup($2, strlen($2)); -- if (id && id->flags & TF_OPTION) -- menu_add_option(id->token, $3); -- else -- zconfprint("warning: ignoring unknown option %s", $2); -- free($2); -+ menu_add_option_defconfig_list(); - }; - --symbol_option_arg: -- /* empty */ { $$ = NULL; } -- | T_EQUAL prompt { $$ = $2; } --; -+config_option: T_OPTION T_ALLNOCONFIG_Y T_EOL -+{ -+ menu_add_option_allnoconfig_y(); -+}; - - /* choice entry */ - - choice: T_CHOICE word_opt T_EOL - { - struct symbol *sym = sym_lookup($2, SYMBOL_CHOICE); -- sym->flags |= SYMBOL_AUTO; -+ sym->flags |= SYMBOL_NO_WRITE; - menu_add_entry(sym); - menu_add_expr(P_CHOICE, NULL, NULL); -+ free($2); - printd(DEBUG_PARSE, "%s:%d:choice\n", zconf_curname(), zconf_lineno()); - }; - -@@ -267,7 +249,7 @@ choice_entry: choice choice_option_list - - choice_end: end - { -- if (zconf_endtoken($1, T_CHOICE, T_ENDCHOICE)) { -+ if (zconf_endtoken($1, "choice")) { - menu_end_menu(); - printd(DEBUG_PARSE, "%s:%d:endchoice\n", zconf_curname(), zconf_lineno()); - } -@@ -281,8 +263,6 @@ choice_option_list: - | choice_option_list choice_option - | choice_option_list depends - | choice_option_list help -- | choice_option_list T_EOL -- | choice_option_list option_error - ; - - choice_option: T_PROMPT prompt if_expr T_EOL -@@ -291,15 +271,11 @@ choice_option: T_PROMPT prompt if_expr T_EOL - printd(DEBUG_PARSE, "%s:%d:prompt\n", zconf_curname(), zconf_lineno()); - }; - --choice_option: T_TYPE prompt_stmt_opt T_EOL -+choice_option: logic_type prompt_stmt_opt T_EOL - { -- if ($1->stype == S_BOOLEAN || $1->stype == S_TRISTATE) { -- menu_set_type($1->stype); -- printd(DEBUG_PARSE, "%s:%d:type(%u)\n", -- zconf_curname(), zconf_lineno(), -- $1->stype); -- } else -- YYERROR; -+ menu_set_type($1); -+ printd(DEBUG_PARSE, "%s:%d:type(%u)\n", -+ zconf_curname(), zconf_lineno(), $1); - }; - - choice_option: T_OPTIONAL T_EOL -@@ -308,16 +284,28 @@ choice_option: T_OPTIONAL T_EOL - printd(DEBUG_PARSE, "%s:%d:optional\n", zconf_curname(), zconf_lineno()); - }; - --choice_option: T_DEFAULT T_WORD if_expr T_EOL -+choice_option: T_DEFAULT nonconst_symbol if_expr T_EOL - { -- if ($1->stype == S_UNKNOWN) { -- menu_add_symbol(P_DEFAULT, sym_lookup($2, 0), $3); -- printd(DEBUG_PARSE, "%s:%d:default\n", -- zconf_curname(), zconf_lineno()); -- } else -- YYERROR; -+ menu_add_symbol(P_DEFAULT, $2, $3); -+ printd(DEBUG_PARSE, "%s:%d:default\n", -+ zconf_curname(), zconf_lineno()); - }; - -+type: -+ logic_type -+ | T_INT { $$ = S_INT; } -+ | T_HEX { $$ = S_HEX; } -+ | T_STRING { $$ = S_STRING; } -+ -+logic_type: -+ T_BOOL { $$ = S_BOOLEAN; } -+ | T_TRISTATE { $$ = S_TRISTATE; } -+ -+default: -+ T_DEFAULT { $$ = S_UNKNOWN; } -+ | T_DEF_BOOL { $$ = S_BOOLEAN; } -+ | T_DEF_TRISTATE { $$ = S_TRISTATE; } -+ - choice_block: - /* empty */ - | choice_block common_stmt -@@ -325,7 +313,7 @@ choice_block: - - /* if entry */ - --if_entry: T_IF expr nl -+if_entry: T_IF expr T_EOL - { - printd(DEBUG_PARSE, "%s:%d:if\n", zconf_curname(), zconf_lineno()); - menu_add_entry(NULL); -@@ -335,29 +323,15 @@ if_entry: T_IF expr nl - - if_end: end - { -- if (zconf_endtoken($1, T_IF, T_ENDIF)) { -+ if (zconf_endtoken($1, "if")) { - menu_end_menu(); - printd(DEBUG_PARSE, "%s:%d:endif\n", zconf_curname(), zconf_lineno()); - } - }; - --if_stmt: if_entry if_block if_end -+if_stmt: if_entry stmt_list if_end - ; - --if_block: -- /* empty */ -- | if_block common_stmt -- | if_block menu_stmt -- | if_block choice_stmt --; -- --/* mainmenu entry */ -- --mainmenu_stmt: T_MAINMENU prompt nl --{ -- menu_add_prompt(P_MENU, $2, NULL); --}; -- - /* menu entry */ - - menu: T_MENU prompt T_EOL -@@ -367,33 +341,33 @@ menu: T_MENU prompt T_EOL - printd(DEBUG_PARSE, "%s:%d:menu\n", zconf_curname(), zconf_lineno()); - }; - --menu_entry: menu visibility_list depends_list -+menu_entry: menu menu_option_list - { - $$ = menu_add_menu(); - }; - - menu_end: end - { -- if (zconf_endtoken($1, T_MENU, T_ENDMENU)) { -+ if (zconf_endtoken($1, "menu")) { - menu_end_menu(); - printd(DEBUG_PARSE, "%s:%d:endmenu\n", zconf_curname(), zconf_lineno()); - } - }; - --menu_stmt: menu_entry menu_block menu_end -+menu_stmt: menu_entry stmt_list menu_end - ; - --menu_block: -+menu_option_list: - /* empty */ -- | menu_block common_stmt -- | menu_block menu_stmt -- | menu_block choice_stmt -+ | menu_option_list visible -+ | menu_option_list depends - ; - - source_stmt: T_SOURCE prompt T_EOL - { - printd(DEBUG_PARSE, "%s:%d:source %s\n", zconf_curname(), zconf_lineno(), $2); - zconf_nextfile($2); -+ free($2); - }; - - /* comment entry */ -@@ -405,10 +379,13 @@ comment: T_COMMENT prompt T_EOL - printd(DEBUG_PARSE, "%s:%d:comment\n", zconf_curname(), zconf_lineno()); - }; - --comment_stmt: comment depends_list --{ -- menu_end_entry(); --}; -+comment_stmt: comment comment_option_list -+; -+ -+comment_option_list: -+ /* empty */ -+ | comment_option_list depends -+; - - /* help option */ - -@@ -420,18 +397,22 @@ help_start: T_HELP T_EOL - - help: help_start T_HELPTEXT - { -+ if (current_entry->help) { -+ free(current_entry->help); -+ zconfprint("warning: '%s' defined with more than one help text -- only the last one will be used", -+ current_entry->sym->name ?: ""); -+ } -+ -+ /* Is the help text empty or all whitespace? */ -+ if ($2[strspn($2, " \f\n\r\t\v")] == '\0') -+ zconfprint("warning: '%s' defined with blank help text", -+ current_entry->sym->name ?: ""); -+ - current_entry->help = $2; - }; - - /* depends option */ - --depends_list: -- /* empty */ -- | depends_list depends -- | depends_list T_EOL -- | depends_list option_error --; -- - depends: T_DEPENDS T_ON expr T_EOL - { - menu_add_dep($3); -@@ -439,14 +420,7 @@ depends: T_DEPENDS T_ON expr T_EOL - }; - - /* visibility option */ -- --visibility_list: -- /* empty */ -- | visibility_list visible -- | visibility_list T_EOL --; -- --visible: T_VISIBLE if_expr -+visible: T_VISIBLE if_expr T_EOL - { - menu_add_visibility($2); - }; -@@ -464,14 +438,9 @@ prompt: T_WORD - | T_WORD_QUOTE - ; - --end: T_ENDMENU T_EOL { $$ = $1; } -- | T_ENDCHOICE T_EOL { $$ = $1; } -- | T_ENDIF T_EOL { $$ = $1; } --; -- --nl: -- T_EOL -- | nl T_EOL -+end: T_ENDMENU T_EOL { $$ = "menu"; } -+ | T_ENDCHOICE T_EOL { $$ = "choice"; } -+ | T_ENDIF T_EOL { $$ = "if"; } - ; - - if_expr: /* empty */ { $$ = NULL; } -@@ -491,13 +460,31 @@ expr: symbol { $$ = expr_alloc_symbol($1); } - | expr T_AND expr { $$ = expr_alloc_two(E_AND, $1, $3); } - ; - --symbol: T_WORD { $$ = sym_lookup($1, 0); free($1); } -+/* For symbol definitions, selects, etc., where quotes are not accepted */ -+nonconst_symbol: T_WORD { $$ = sym_lookup($1, 0); free($1); }; -+ -+symbol: nonconst_symbol - | T_WORD_QUOTE { $$ = sym_lookup($1, SYMBOL_CONST); free($1); } - ; - - word_opt: /* empty */ { $$ = NULL; } - | T_WORD - -+/* assignment statement */ -+ -+assignment_stmt: T_WORD assign_op assign_val T_EOL { variable_add($1, $3, $2); free($1); free($3); } -+ -+assign_op: -+ T_EQUAL { $$ = VAR_RECURSIVE; } -+ | T_COLON_EQUAL { $$ = VAR_SIMPLE; } -+ | T_PLUS_EQUAL { $$ = VAR_APPEND; } -+; -+ -+assign_val: -+ /* empty */ { $$ = xstrdup(""); }; -+ | T_ASSIGN_VAL -+; -+ - %% - - void conf_parse(const char *name) -@@ -507,61 +494,51 @@ void conf_parse(const char *name) - - zconf_initscan(name); - -- sym_init(); - _menu_init(); -- rootmenu.prompt = menu_add_prompt(P_MENU, "CARL9170 Firmware Configuration", NULL); - - if (getenv("ZCONF_DEBUG")) -- zconfdebug = 1; -- zconfparse(); -- if (zconfnerrs) -+ yydebug = 1; -+ yyparse(); -+ -+ /* Variables are expanded in the parse phase. We can free them here. */ -+ variable_all_del(); -+ -+ if (yynerrs) - exit(1); - if (!modules_sym) - modules_sym = sym_find( "n" ); - -- rootmenu.prompt->text = _(rootmenu.prompt->text); -- rootmenu.prompt->text = sym_expand_string_value(rootmenu.prompt->text); -+ if (!menu_has_prompt(&rootmenu)) { -+ current_entry = &rootmenu; -+ menu_add_prompt(P_MENU, "Main menu", NULL); -+ } - - menu_finalize(&rootmenu); - for_all_symbols(i, sym) { - if (sym_check_deps(sym)) -- zconfnerrs++; -+ yynerrs++; - } -- if (zconfnerrs) -+ if (yynerrs) - exit(1); - sym_set_change_count(1); - } - --static const char *zconf_tokenname(int token) --{ -- switch (token) { -- case T_MENU: return "menu"; -- case T_ENDMENU: return "endmenu"; -- case T_CHOICE: return "choice"; -- case T_ENDCHOICE: return "endchoice"; -- case T_IF: return "if"; -- case T_ENDIF: return "endif"; -- case T_DEPENDS: return "depends"; -- case T_VISIBLE: return "visible"; -- } -- return ""; --} -- --static bool zconf_endtoken(const struct kconf_id *id, int starttoken, int endtoken) -+static bool zconf_endtoken(const char *tokenname, -+ const char *expected_tokenname) - { -- if (id->token != endtoken) { -+ if (strcmp(tokenname, expected_tokenname)) { - zconf_error("unexpected '%s' within %s block", -- id->name, zconf_tokenname(starttoken)); -- zconfnerrs++; -+ tokenname, expected_tokenname); -+ yynerrs++; - return false; - } - if (current_menu->file != current_file) { - zconf_error("'%s' in different file than '%s'", -- id->name, zconf_tokenname(starttoken)); -+ tokenname, expected_tokenname); - fprintf(stderr, "%s:%d: location of the '%s'\n", - current_menu->file->name, current_menu->lineno, -- zconf_tokenname(starttoken)); -- zconfnerrs++; -+ expected_tokenname); -+ yynerrs++; - return false; - } - return true; -@@ -582,7 +559,7 @@ static void zconf_error(const char *err, ...) - { - va_list ap; - -- zconfnerrs++; -+ yynerrs++; - fprintf(stderr, "%s:%d: ", zconf_curname(), zconf_lineno()); - va_start(ap, err); - vfprintf(stderr, err, ap); -@@ -590,7 +567,7 @@ static void zconf_error(const char *err, ...) - fprintf(stderr, "\n"); - } - --static void zconferror(const char *err) -+static void yyerror(const char *err) - { - fprintf(stderr, "%s:%d: %s\n", zconf_curname(), zconf_lineno() + 1, err); - } -@@ -623,7 +600,7 @@ static void print_symbol(FILE *out, struct menu *menu) - fprintf(out, "\nconfig %s\n", sym->name); - switch (sym->type) { - case S_BOOLEAN: -- fputs(" boolean\n", out); -+ fputs(" bool\n", out); - break; - case S_TRISTATE: - fputs(" tristate\n", out); -@@ -686,6 +663,10 @@ static void print_symbol(FILE *out, struct menu *menu) - print_quoted_string(out, prop->text); - fputc('\n', out); - break; -+ case P_SYMBOL: -+ fputs( " symbol ", out); -+ fprintf(out, "%s\n", prop->sym->name); -+ break; - default: - fprintf(out, " unknown prop %d!\n", prop->type); - break; -@@ -746,9 +727,5 @@ void zconfdump(FILE *out) - } - } - --#include "zconf.lex.c" - #include "util.c" --#include "confdata.c" --#include "expr.c" --#include "symbol.c" - #include "menu.c" -diff --git a/carl9170fw/include/linux/ieee80211.h b/carl9170fw/include/linux/ieee80211.h -index 31c59ea..46ce6cf 100644 ---- a/carl9170fw/include/linux/ieee80211.h -+++ b/carl9170fw/include/linux/ieee80211.h -@@ -897,33 +897,33 @@ struct ieee80211_mgmt { - __le16 status_code; - /* possibly followed by Challenge text */ - u8 variable[0]; -- } __packed auth; -+ } __packed __aligned(4) auth; - struct { - __le16 reason_code; -- } __packed deauth; -+ } __packed __aligned(4) deauth; - struct { - __le16 capab_info; - __le16 listen_interval; - /* followed by SSID and Supported rates */ - u8 variable[0]; -- } __packed assoc_req; -+ } __packed __aligned(4) assoc_req; - struct { - __le16 capab_info; - __le16 status_code; - __le16 aid; - /* followed by Supported rates */ - u8 variable[0]; -- } __packed assoc_resp, reassoc_resp; -+ } __packed __aligned(4) assoc_resp, reassoc_resp; - struct { - __le16 capab_info; - __le16 listen_interval; - u8 current_ap[6]; - /* followed by SSID and Supported rates */ - u8 variable[0]; -- } __packed reassoc_req; -+ } __packed __aligned(4) reassoc_req; - struct { - __le16 reason_code; -- } __packed disassoc; -+ } __packed __aligned(4) disassoc; - struct { - __le64 timestamp; - __le16 beacon_int; -@@ -931,11 +931,11 @@ struct ieee80211_mgmt { - /* followed by some of SSID, Supported rates, - * FH Params, DS Params, CF Params, IBSS Params, TIM */ - u8 variable[0]; -- } __packed beacon; -+ } __packed __aligned(4) beacon; - struct { - /* only variable items: SSID, Supported rates */ - u8 variable[0]; -- } __packed probe_req; -+ } __packed __aligned(4) probe_req; - struct { - __le64 timestamp; - __le16 beacon_int; -@@ -943,7 +943,7 @@ struct ieee80211_mgmt { - /* followed by some of SSID, Supported rates, - * FH Params, DS Params, CF Params, IBSS Params */ - u8 variable[0]; -- } __packed probe_resp; -+ } __packed __aligned(4) probe_resp; - struct { - u8 category; - union { -@@ -1041,8 +1041,8 @@ struct ieee80211_mgmt { - u8 variable[0]; - } __packed ftm; - } u; -- } __packed action; -- } u; -+ } __packed __aligned(4) action; -+ } u __aligned(2); - } __packed __aligned(2); - - /* Supported rates membership selectors */ -@@ -1245,7 +1245,7 @@ struct ieee80211_bar { - __u8 ta[6]; - __le16 control; - __le16 start_seq_num; --} __packed __aligned(4); -+} __packed __aligned(2); - - /* 802.11 BA(R) control masks */ - #define IEEE80211_BAR_CTRL_ACK_POLICY_NORMAL 0x0000 -diff --git a/carl9170fw/include/shared/wlan.h b/carl9170fw/include/shared/wlan.h -index 9c6b7ff..117f005 100644 ---- a/carl9170fw/include/shared/wlan.h -+++ b/carl9170fw/include/shared/wlan.h -@@ -273,7 +273,7 @@ struct ar9170_tx_frame { - struct ieee80211_hdr i3e; - u8 payload[0]; - } data; --} __packed; -+} __packed __aligned(4); - - struct carl9170_tx_superframe { - struct carl9170_tx_superdesc s; -diff --git a/carl9170fw/toolchain/Makefile b/carl9170fw/toolchain/Makefile -index 11db906..43e546d 100644 ---- a/carl9170fw/toolchain/Makefile -+++ b/carl9170fw/toolchain/Makefile -@@ -1,16 +1,16 @@ --BINUTILS_VER=2.31.1 -+BINUTILS_VER=2.32 - BINUTILS_TAR=binutils-$(BINUTILS_VER).tar.xz - BINUTILS_URL="https://ftp.gnu.org/gnu/binutils/$(BINUTILS_TAR)" - --NEWLIB_VER=3.0.0 -+NEWLIB_VER=3.1.0 - NEWLIB_TAR=newlib-$(NEWLIB_VER).tar.gz - NEWLIB_URL="ftp://sourceware.org/pub/newlib/$(NEWLIB_TAR)" - --GCC_VER=8.2.0 -+GCC_VER=9.1.0 - GCC_TAR=gcc-$(GCC_VER).tar.xz - GCC_URL="https://ftp.gnu.org/gnu/gcc/gcc-$(GCC_VER)/$(GCC_TAR)" - --MPFR_VER=4.0.1 -+MPFR_VER=4.0.2 - MPFR_TAR=mpfr-$(MPFR_VER).tar.xz - MPFR_URL="https://ftp.gnu.org/gnu/mpfr/$(MPFR_TAR)" - -diff --git a/carl9170fw/toolchain/SHA256SUMS b/carl9170fw/toolchain/SHA256SUMS -index 1b65040..3a53959 100644 ---- a/carl9170fw/toolchain/SHA256SUMS -+++ b/carl9170fw/toolchain/SHA256SUMS -@@ -1,16 +1,6 @@ --1cf7adf8ff4b5aa49041c8734bbcf1ad18cc4c94d0029aae0f4e48841088479a src/gcc-7.2.0.tar.xz --5b76a9b97c9464209772ed25ce55181a7bb144a66e5669aaec945aa64da3189b src/newlib-2.5.0.tar.gz --0b871e271c4c620444f8264f72143b4d224aa305306d85dd77ab8dce785b1e85 src/binutils-2.29.tar.xz - 87b565e89a9a684fe4ebeeddb8399dce2599f9c9049854ca8c0dfbdea0e21912 src/gmp-6.1.2.tar.xz --617decc6ea09889fb08ede330917a00b16809b8db88c29c31bfbb49cbf88ecc3 src/mpc-1.0.3.tar.gz --7a62ac1a04408614fccdc506e4844b10cf0ad2c2b1677097f8f35d3a1344a950 src/mpfr-3.1.6.tar.xz - 6985c538143c1208dcb1ac42cedad6ff52e267b47e5f970183a3e75125b43c2e src/mpc-1.1.0.tar.gz --fbe2cd1418b321f5c899ce4f0f0f4e73f5ecc7d02145b0e1fd096f5c3afb8a1d src/mpfr-4.0.0.tar.xz --c8566335ee74e5fcaeb8595b4ebd0400c4b043d6acb3263ecb1314f8f5501332 src/newlib-3.0.0.tar.gz --832ca6ae04636adbb430e865a1451adf6979ab44ca1c8374f61fba65645ce15c src/gcc-7.3.0.tar.xz --e7010a46969f9d3e53b650a518663f98a5dde3c3ae21b7d71e5e6803bc36b577 src/binutils-2.29.1.tar.xz --67874a60826303ee2fb6affc6dc0ddd3e749e9bfcb4c8655e3953d0458a6e16e src/mpfr-4.0.1.tar.xz --6e46b8aeae2f727a36f0bd9505e405768a72218f1796f0d09757d45209871ae6 src/binutils-2.30.tar.xz --1d1866f992626e61349a1ccd0b8d5253816222cdc13390dcfaa74b093aa2b153 src/gcc-8.1.0.tar.xz --5d20086ecf5752cc7d9134246e9588fa201740d540f7eb84d795b1f7a93bca86 src/binutils-2.31.1.tar.xz --196c3c04ba2613f893283977e6011b2345d1cd1af9abeac58e916b1aab3e0080 src/gcc-8.2.0.tar.xz -\ No newline at end of file -+fb4fa1cc21e9060719208300a61420e4089d6de6ef59cf533b57fe74801d102a src/newlib-3.1.0.tar.gz -+1d3be708604eae0e42d578ba93b390c2a145f17743a744d8f3f8c2ad5855a38a src/mpfr-4.0.2.tar.xz -+0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04 src/binutils-2.32.tar.xz -+79a66834e96a6050d8fe78db2c3b32fb285b230b855d0a66288235bc04b327a0 src/gcc-9.1.0.tar.xz --- -2.26.0 - diff --git a/libre/linux-libre-firmware/0002-Add-firmware-for-the-ATUSB-IEEE-802.15.4-USB-Adapter.patch b/libre/linux-libre-firmware/0002-Add-firmware-for-the-ATUSB-IEEE-802.15.4-USB-Adapter.patch deleted file mode 100644 index aa4cb07..0000000 --- a/libre/linux-libre-firmware/0002-Add-firmware-for-the-ATUSB-IEEE-802.15.4-USB-Adapter.patch +++ /dev/null @@ -1,4893 +0,0 @@ -From dd4bc9ff49b9a7075e579fdd62fd930d27a9a7df Mon Sep 17 00:00:00 2001 -From: Jason Self -Date: Thu, 4 Jul 2019 15:55:48 -0700 -Subject: [PATCH 2/8] Add firmware for the ATUSB IEEE 802.15.4 USB Adapter - -http://shop.sysmocom.de/products/atusb/ ---- - INSTALL | 20 +- - Makefile | 6 +- - WHENCE | 12 ++ - atusb/Makefile | 236 +++++++++++++++++++++ - atusb/README | 94 +++++++++ - atusb/an/README | 25 +++ - atusb/an/dec.py | 127 ++++++++++++ - atusb/an/get.py | 31 +++ - atusb/an/plot | 12 ++ - atusb/atusb.c | 63 ++++++ - atusb/board.c | 120 +++++++++++ - atusb/board.h | 95 +++++++++ - atusb/board_app.c | 173 ++++++++++++++++ - atusb/board_atusb.c | 162 +++++++++++++++ - atusb/board_atusb.h | 48 +++++ - atusb/board_hulusb.c | 179 ++++++++++++++++ - atusb/board_hulusb.h | 66 ++++++ - atusb/board_rzusb.c | 169 +++++++++++++++ - atusb/board_rzusb.h | 48 +++++ - atusb/boot.c | 77 +++++++ - atusb/descr.c | 104 ++++++++++ - atusb/ep0.c | 338 ++++++++++++++++++++++++++++++ - atusb/flash.c | 97 +++++++++ - atusb/include/at86rf230.h | 402 ++++++++++++++++++++++++++++++++++++ - atusb/include/atusb/atusb.h | 97 +++++++++ - atusb/include/atusb/ep0.h | 64 ++++++ - atusb/mac.c | 250 ++++++++++++++++++++++ - atusb/mac.h | 26 +++ - atusb/sernum.c | 47 +++++ - atusb/sernum.h | 37 ++++ - atusb/spi.c | 51 +++++ - atusb/spi.h | 30 +++ - atusb/uart.c | 64 ++++++ - atusb/uart.h | 25 +++ - atusb/usb/atu2.c | 247 ++++++++++++++++++++++ - atusb/usb/dfu.c | 260 +++++++++++++++++++++++ - atusb/usb/dfu.h | 119 +++++++++++ - atusb/usb/dfu_common.c | 101 +++++++++ - atusb/usb/usb.c | 181 ++++++++++++++++ - atusb/usb/usb.h | 189 +++++++++++++++++ - atusb/version.h | 23 +++ - 42 files changed, 4512 insertions(+), 3 deletions(-) - create mode 100644 atusb/Makefile - create mode 100644 atusb/README - create mode 100644 atusb/an/README - create mode 100755 atusb/an/dec.py - create mode 100755 atusb/an/get.py - create mode 100755 atusb/an/plot - create mode 100644 atusb/atusb.c - create mode 100644 atusb/board.c - create mode 100644 atusb/board.h - create mode 100644 atusb/board_app.c - create mode 100644 atusb/board_atusb.c - create mode 100644 atusb/board_atusb.h - create mode 100644 atusb/board_hulusb.c - create mode 100644 atusb/board_hulusb.h - create mode 100644 atusb/board_rzusb.c - create mode 100644 atusb/board_rzusb.h - create mode 100644 atusb/boot.c - create mode 100644 atusb/descr.c - create mode 100644 atusb/ep0.c - create mode 100644 atusb/flash.c - create mode 100644 atusb/include/at86rf230.h - create mode 100644 atusb/include/atusb/atusb.h - create mode 100644 atusb/include/atusb/ep0.h - create mode 100644 atusb/mac.c - create mode 100644 atusb/mac.h - create mode 100644 atusb/sernum.c - create mode 100644 atusb/sernum.h - create mode 100644 atusb/spi.c - create mode 100644 atusb/spi.h - create mode 100644 atusb/uart.c - create mode 100644 atusb/uart.h - create mode 100644 atusb/usb/atu2.c - create mode 100644 atusb/usb/dfu.c - create mode 100644 atusb/usb/dfu.h - create mode 100644 atusb/usb/dfu_common.c - create mode 100644 atusb/usb/usb.c - create mode 100644 atusb/usb/usb.h - create mode 100644 atusb/version.h - -diff --git a/INSTALL b/INSTALL -index 74c5cfd..7fb1116 100644 ---- a/INSTALL -+++ b/INSTALL -@@ -16,6 +16,8 @@ In order to build everything you will need the following on the host - system: - - * A C/C++ compiler, like GCC -+ * AVR-GCC -+ * Standard C library for AVR-GCC - * Cmake - * GNU Bison/YACC - * GNU Flex -@@ -32,13 +34,27 @@ system: - - On GNU/Linux distros that use apt you can install these with: - -- apt install binutils-arm-linux-gnueabi binutils-arm-none-eabi bison \ -- cmake flex g++ gcc gcc-arm-linux-gnueabi gcc-arm-none-eabi gperf make wget -+ apt install avr-gcc avr-libc binutils-arm-linux-gnueabi \ -+ binutils-arm-none-eabi bison cmake flex g++ gcc \ -+ gcc-arm-linux-gnueabi gcc-arm-none-eabi gperf make wget - - CARL9170 Firmware Configuration -+------------------------------- - When building the carl9170 firmware you will be prompted with - configuration questions. - -+atusb: Firmware for the ATUSB IEEE 802.15.4 USB Adapter -+------------------------------------------------------- -+ -+To flash the firmware you need dfu-util on the host. Issue -+ -+ make dfu -+ -+right after plugging the device into the USB port while the red led is -+still on. -+ -+Refer to the included README file for more information. -+ - Licensing - --------- - -diff --git a/Makefile b/Makefile -index 21d16fb..8474b30 100644 ---- a/Makefile -+++ b/Makefile -@@ -17,7 +17,7 @@ shell=/bin/sh - prefix=/lib/firmware - install_program=install - --.PHONY: all test clean install a56 as31 aica ath9k_htc_toolchain ath9k_htc av7110 b43-tools carl9170fw-toolchain carl9170fw cis-tools cis dsp56k ihex2fw isci keyspan_pda openfwwf usbdux -+.PHONY: all test clean install a56 as31 aica ath9k_htc_toolchain ath9k_htc atusb av7110 b43-tools carl9170fw-toolchain carl9170fw cis-tools cis dsp56k ihex2fw isci keyspan_pda openfwwf usbdux - - all: aica ath9k_htc av7110 carl9170fw cis dsp56k isci keyspan_pda openfwwf usbdux - -@@ -36,6 +36,9 @@ ath9k_htc_toolchain: - ath9k_htc: ath9k_htc_toolchain - cd ath9k_htc && $(MAKE) -C target_firmware - -+atusb: -+ cd atusb && $(MAKE) -+ - av7110: - cd av7110 && $(MAKE) - -@@ -81,6 +84,7 @@ clean: - if [ -a as31/Makefile ]; then cd as31 && $(MAKE) clean; fi; - cd ath9k_htc && $(MAKE) toolchain-clean - cd ath9k_htc && $(MAKE) -C target_firmware clean -+ cd atusb && $(MAKE) clean - cd av7110 && $(MAKE) clean - cd carl9170fw/toolchain && $(MAKE) clean - if [ -a carl9170fw/Makefile ]; then cd carl9170fw && $(MAKE) clean; fi; -diff --git a/WHENCE b/WHENCE -index 2932155..756de43 100644 ---- a/WHENCE -+++ b/WHENCE -@@ -112,6 +112,18 @@ From https://github.com/qca/open-ath9k-htc-firmware - - -------------------------------------------------------------------------- - -+atusb: Firmware for the ATUSB IEEE 802.15.4 USB Adapter -+http://shop.sysmocom.de/products/atusb/ -+ -+From http://projects.qi-hardware.com/index.php/p/ben-wpan/source/tree/master/atusb/fw -+ -+License: GPL-2.0-or-later -+ -+Version: Based on commit 805db6ebf5d80692158acadf88e239da9d3e67af -+dated September 13 2017 -+ -+-------------------------------------------------------------------------- -+ - Driver: b43 - OpenFWWF -- Free firmware for some Broadcom 43xx series WLAN chips - - License: GPLv2 -diff --git a/atusb/Makefile b/atusb/Makefile -new file mode 100644 -index 0000000..c79cb26 ---- /dev/null -+++ b/atusb/Makefile -@@ -0,0 +1,236 @@ -+# -+# Makefile - Makefile of the ATUSB firmware -+# -+# Written 2010-2011, 2013 by Werner Almesberger -+# Copyright 2010-2011, 2013 by Werner Almesberger -+# -+# This program is free software; you can redistribute it and/or modify -+# it under the terms of the GNU General Public License as published by -+# the Free Software Foundation; either version 2 of the License, or -+# (at your option) any later version. -+# -+ -+SHELL = /bin/bash -+ -+NAME = atusb -+DEBUG = false -+ -+CFLAGS = -g -mmcu=$(CHIP) -DBOOT_ADDR=$(BOOT_ADDR) \ -+ -Wall -Wextra -Wshadow -Werror -Wno-unused-parameter \ -+ -Wmissing-prototypes -Wmissing-declarations -Wstrict-prototypes -+ -+ifeq ($(DEBUG),true) -+CFLAGS += -DDEBUG -+endif -+ -+ifeq ($(NAME),rzusb) -+CHIP=at90usb1287 -+CFLAGS += -DRZUSB -DAT86RF230 -+else ifeq ($(NAME),hulusb) -+CHIP=at90usb1287 -+CFLAGS += -DHULUSB -DAT86RF212 -+else -+CHIP=atmega32u2 -+CFLAGS += -DATUSB -DAT86RF231 -+endif -+HOST=jlime -+BOOT_ADDR=0x7000 -+ -+AVR_PREFIX = $(BIN_PATH) avr- -+CC = $(AVR_PREFIX)gcc -+OBJCOPY = $(AVR_PREFIX)objcopy -+#OBJDUMP = $(AVR_PREFIX)objdump -+SIZE = $(AVR_PREFIX)size -+ -+# BCD notion is 0xJJMM with JJ being major and MM being minor. Thus 0x0020 is -+# version 0.2 */ -+USB_BCD_VERSION = 0030 -+USB_VENDOR_ID = 20b7 -+USB_PRODUCT_ID = 1540 -+USB_ID = $(USB_VENDOR_ID):$(USB_PRODUCT_ID) -+ -+OBJS = atusb.o board.o board_app.o sernum.o spi.o descr.o ep0.o \ -+ dfu_common.o usb.o app-atu2.o mac.o -+BOOT_OBJS = boot.o board.o sernum.o spi.o flash.o dfu.o \ -+ dfu_common.o usb.o boot-atu2.o -+ -+ifeq ($(DEBUG),true) -+OBJS += uart.o -+endif -+ -+ifeq ($(NAME),rzusb) -+OBJS += board_rzusb.o -+BOOT_OBJS += board_rzusb.o -+else ifeq ($(NAME),hulusb) -+OBJS += board_hulusb.o -+BOOT_OBJS += board_hulusb.o -+else -+OBJS += board_atusb.o -+BOOT_OBJS += board_atusb.o -+endif -+ -+ -+vpath %.c usb/ -+ -+CFLAGS += -Iinclude -Iusb -I. -+ -+# ----- Verbosity control ----------------------------------------------------- -+ -+CC_normal := $(CC) -+BUILD_normal := -+DEPEND_normal := $(CPP) $(CFLAGS) -MM -MG -+ -+CC_quiet = @echo " CC " $@ && $(CC_normal) -+BUILD_quiet = @echo " BUILD " $@ && $(BUILD_normal) -+DEPEND_quiet = @$(DEPEND_normal) -+ -+ifeq ($(V),1) -+ CC = $(CC_normal) -+ BUILD = $(BUILD_normal) -+ DEPEND = $(DEPEND_normal) -+else -+ CC = $(CC_quiet) -+ BUILD = $(BUILD_quiet) -+ DEPEND = $(DEPEND_quiet) -+endif -+ -+# ----- Rules ----------------------------------------------------------------- -+ -+.PHONY: all clean upload prog dfu update version.c bindist -+.PHONY: prog-app prog-read on off reset -+ -+all: $(NAME).bin boot.hex -+ -+$(NAME).elf: $(OBJS) -+ $(MAKE) version.o -+ $(CC) $(CFLAGS) -o $@ $(OBJS) version.o -+ $(SIZE) $@ -+ -+boot.elf: $(BOOT_OBJS) -+ $(CC) $(CFLAGS) -o $@ $(BOOT_OBJS) \ -+ -Wl,--section-start=.text=$(BOOT_ADDR) -+ $(SIZE) $@ -+ -+%.bin: %.elf -+ $(BUILD) $(OBJCOPY) -j .text -j .data -O binary $< $@ -+ @echo "build #`cat .version`, `ls -l $@`" -+ -+%.dfu: %.bin -+ cp $(NAME).bin $(NAME).dfu -+ dfu-suffix -a $(NAME).dfu -d 0x$(USB_BCD_VERSION) \ -+ -p 0x$(USB_PRODUCT_ID) -v 0x$(USB_VENDOR_ID) -+ -+%.hex: %.elf -+ $(BUILD) $(OBJCOPY) -j .text -j .data -O ihex $< $@ -+ @echo "Size: `$(SIZE) -A boot.hex | sed '/Total */s///p;d'` B" -+ -+# ----- Cleanup --------------------------------------------------------------- -+ -+clean: -+ rm -f $(NAME).bin $(NAME).elf $(NAME).dfu -+ rm -f $(OBJS) $(OBJS:.o=.d) -+ rm -f boot.hex boot.elf -+ rm -f $(BOOT_OBJS) $(BOOT_OBJS:.o=.d) -+ rm -f version.c version.d version.o -+ -+# ----- Build version --------------------------------------------------------- -+ -+version.c: -+ @if [ -f .version ]; then \ -+ v=`cat .version`; \ -+ expr $$v + 1 >.version; \ -+ else \ -+ echo 0 >.version; \ -+ fi -+ @[ -s .version ] || echo 0 >.version -+ @echo '/* MACHINE-GENERATED. DO NOT EDIT ! */' >version.c -+ @echo '#include "version.h"' >>version.c -+ @echo "const char *build_date = \"`date`\";" >>version.c -+ @echo "const uint16_t build_number = `cat .version`;" \ -+ >>version.c -+ -+# ----- Dependencies ---------------------------------------------------------- -+ -+MKDEP = \ -+ $(DEPEND) $< | \ -+ sed \ -+ -e 's|^$(basename $(notdir $<)).o:|$@:|' \ -+ -e '/^\(.*:\)\? */{p;s///;s/ *\\\?$$/ /;s/ */:\n/g;H;}' \ -+ -e '$${g;p;}' \ -+ -e d >$(basename $@).d; \ -+ [ "$${PIPESTATUS[*]}" = "0 0" ] || \ -+ { rm -f $(basename $@).d; exit 1; } -+ -+%.o: %.c -+ $(CC) $(CFLAGS) -Os -c $< -+ $(MKDEP) -+ -+-include $(OBJS:.o=.d) -+ -+# ----- Object file variants -------------------------------------------------- -+ -+app-%.o: usb/%.c -+ $(CC) $(CFLAGS) -Os -o $@ -c $< -+ $(MKDEP) -+ -+boot-%.o: usb/%.c -+ $(CC) $(CFLAGS) -DBOOT_LOADER -Os -o $@ -c $< -+ $(MKDEP) -+ -+# ----- Distribution ---------------------------------------------------------- -+ -+BINDIST_BASE=http://downloads.qi-hardware.com/people/werner/wpan/bindist -+ATUSB_BIN_NAME=atusb-`git rev-parse HEAD | cut -c 1-7`.bin -+ -+bindist: -+ qippl atusb.bin wpan/bindist/$(ATUSB_BIN_NAME) -+ @echo $(BINDIST_BASE)/$(ATUSB_BIN_NAME) -+ @echo md5sum: `md5sum atusb.bin | sed 's/ .*//'` -+ @echo atrf-id: \ -+ `sed '/.*number = \(.*\);/s//#\1/p;d' version.c` \ -+ `sed '/.*date = "\(.*\)";/s//\1/p;d' version.c` -+ -+# ----- Programming and device control ---------------------------------------- -+ -+upload: $(NAME).bin boot.hex -+ scp $(NAME).bin boot.hex $(HOST): -+ -+# lfuse: external clock, slow start-up -+# hfuse: 4 kB boot loader, reset into boot loader -+# lock: allow everything but SPM to the boot loader -+# Note: when trying to program 0xef, we get back 0x2f, failing -+# verification. So we just program 0x2f. -+ -+prog-app: -+ ssh $(HOST) avrdude -F -p $(CHIP) -c nanonote_atusb -e \ -+ -U flash:w:atusb.bin:r \ -+ -U lfuse:w:0x60:m -+ -+prog: -+ ssh $(HOST) avrdude -F -p $(CHIP) -c nanonote_atusb -e \ -+ -U flash:w:boot.hex:i \ -+ -U lfuse:w:0x60:m \ -+ -U hfuse:w:0xd8:m \ -+ -U lock:w:0x2f:m -+ -+prog-read: -+ ssh $(HOST) avrdude -F -p $(CHIP) -c nanonote_atusb \ -+ -U flash:r:mcu.bin:r -+ -+dfu: $(NAME).dfu -+ dfu-util -d $(USB_ID) -D $(NAME).dfu -+ -+update: $(NAME).bin -+ -atrf-reset -a -+ usbwait -r -i 0.01 -t 5 $(USB_ID) -+ $(MAKE) dfu -+ -+on: -+ ssh $(HOST) poke 0x10010318 4 -+ -+off: -+ ssh $(HOST) poke 0x10010314 4 -+ -+reset: -+ ssh $(HOST) poke 0x10010318 2048 -+ ssh $(HOST) poke 0x10010314 2048 -diff --git a/atusb/README b/atusb/README -new file mode 100644 -index 0000000..99ceb22 ---- /dev/null -+++ b/atusb/README -@@ -0,0 +1,94 @@ -+Requires a very recent toolchain, because ATmega32U2 is relatively new. -+ -+- Building: -+ -+ make -+ -+- Uploading the firmware to a Ben (for flashing with the atusb-pgm cable): -+ -+ make HOST= upload -+ -+ Example: -+ -+ make HOST=ben upload -+ -+ HOST defaults to "jlime". -+ -+- Flashing the boot loader: -+ -+ Prerequisite: avrdude on the Ben. -+ -+ Disconnect the atusb board from USB. Insert the atusb-pgm connector into -+ the Ben. Place the atusb-pgm adapter on the exposed contact pads of the -+ atusb board and push it down. Then run -+ -+ make prog -+ -+ This takes about 30 seconds. If the programming fails with an error -+ message like "Yikes! Invalid device signature.", verify that the -+ atusb-pgm board is properly connected and placed, then try again. -+ -+- Uploading the application: -+ -+ Prerequisite: dfu-util installed on the PC. -+ -+ Insert atusb into the PC, then run -+ -+ make dfu -+ -+ Note: since the boot loader resets the USB bus after timing out, -+ this operation can fail with a message like "No DFU capable USB device -+ found". Just retry, and it will eventually get through. -+ -+ -+HULUSB notes: -+------------- -+To prepare and flash the firmware on a HULUSB device some additional steps are -+needed; -+ -+avr-objcopy -O ihex -R .signature -R .fuse -R .eeprom hulusb.elf hulusb.hex -+dfu-programmer at90usb1287 flash hulusb.hex -+dfu-programmer at90usb1287 reset -+ -+-------------------------- -+ -+Making the toolchain: -+ -+# patches according to -+# http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&p=789527 -+ -+# some gcc prerequisites -+ -+apt-get remove avr-libc gcc-avr binutils-avr -+apt-get install libmpfr-dev libmpc-dev -+ -+# binutils -+ -+wget http://ftp.gnu.org/gnu/binutils/binutils-2.21.tar.bz2 -+tar xfj binutils-2.21.tar.bz2 -+cd binutils-2.21 -+./configure --target=avr --disable-nls -+make -+make install -+ -+# gcc -+ -+wget http://ftpmirror.gnu.org/gcc/gcc-4.5.2/gcc-4.5.2.tar.bz2 -+wget -O gcc_452_avr.patch http://gcc.gnu.org/bugzilla/attachment.cgi?id=23050 -+tar xfj gcc-4.5.2.tar.bz2 -+cd gcc-4.5.2 -+patch -p1 -s <../gcc_452_avr.patch -+mkdir obj-avr -+cd obj-avr -+../configure --target=avr --enable-languages=c \ -+ --disable-nls --disable-libssp --with-dwarf2 -+make -+make install -+ -+wget http://download.savannah.gnu.org/releases/avr-libc/avr-libc-1.7.1.tar.bz2 -+tar xfj avr-libc-1.7.1.tar.bz2 -+cd avr-libc-1.7.1 -+./bootstrap # the automake at the end takes a while -+./configure --build=`./config.guess` --host=avr -+make -+make install -diff --git a/atusb/an/README b/atusb/an/README -new file mode 100644 -index 0000000..8e0d2fc ---- /dev/null -+++ b/atusb/an/README -@@ -0,0 +1,25 @@ -+workflow: -+ -+- connect zprobe (note: it currently inverts because it didn't have any -+ other chips around. this may change later.) -+ -+- capture the USB signals at an interesting moment with a sample rate of -+ 50 MSa/s -+ -+- zoom into the frame(s) of interest -+ -+- download the data with -+ ./get.py -+ -+- decode with -+ ./dec.py -+ -+ For manual decoding, set the coders to D+ and D- (we need D- for SE0 -+ and SE1 detection), then click on a rising clock edge left of the -+ packet and move the cursor to the right. -+ -+- if there are problems with the clock, the analog signal and digital -+ signals derived from it can be examined after running dec.py with -+ ./plot -+ -+ (Note that the digital zprobe hides any analog anomalies.) -diff --git a/atusb/an/dec.py b/atusb/an/dec.py -new file mode 100755 -index 0000000..8534857 ---- /dev/null -+++ b/atusb/an/dec.py -@@ -0,0 +1,127 @@ -+#!/usr/bin/python -+ -+from tmc.wave import * -+from tmc.dxplore import dxplore -+from tmc.decode import d_usb_stream -+ -+ -+# -+# Clock recovery: we assume that each change in the wave is triggered by a -+# clock edge. We know the clock's nominal period and resynchronize on each -+# edge. Additionally, we can obtain a list of times when a timing violation -+# has occurred. -+# -+# Note that the timing violations logic doesn't make much sense in its present -+# form, since it mainly measures noise (particularly if we're digitizing slow -+# edges) and not clock drift. -+# -+# A more useful metric would be accumulated error from some point of reference -+# or at least the timing of same edges, to eliminate (generally harmless) time -+# offsets introduced by digitizing. -+# -+# So it would probably make more sense for "recover" not to check for timing -+# violations at all, and leave this to more specialized functions. -+# -+def recover(self, period, min = None, max = None, t0 = None): -+ if t0 is None: -+ t0 = self.data[0] -+ v = not self.initial -+ res = [] -+ violations = [] -+ for t in self.data: -+ v = not v -+ if t <= t0: -+ continue -+ n = 0 -+ while t0 < t-period/2: -+ res.append(t0) -+ t0 += period -+ n += 1 -+ if min is not None: -+ if t0-t > n*min: -+ violations.append(t) -+ if max is not None: -+ if t-t0 > n*max: -+ violations.append(t) -+ t0 = t -+ return res, violations -+ -+ -+# -+# Load the analog waves saved by get.py -+# -+wv = waves() -+wv.load("_wv") -+ -+# -+# Digitize the waves and save the result. -+# -+dp = wv[0].digitize(1.5, 1.8) -+dm = wv[1].digitize(1.5, 1.8) -+wv = waves(dp, dm, dp-dm) -+wv.save("_dig") -+ -+# -+# Also record the differential signal. -+# -+wd = wv[1]-wv[0] -+dd = wd.digitize(-0.5, 0.5) -+wd.save("_diff") -+ -+# -+# Run clock recovery on D+/D-. We only need one, but check both to be sure. -+# -+#p = 1/1.5e6 -+p = 1/12e6 -+dp_t, viol = recover(dp, p, p*0.9, p*1.1) -+print viol -+dm_t, viol = recover(dm, p, p*.9, p*1.1, t0 = dp.data[0]) -+print viol -+ -+# -+# Shift the clock by half a period, add a few periods to get steady state and -+# SE0s (if any), and then sample the data lines. -+# -+clk = map(lambda t: t+p/2, dp_t) -+clk.extend((clk[-1]+p, clk[-1]+2*p, clk[-1]+3*p)) -+dp_bv = dp.get(clk) -+dm_bv = dm.get(clk) -+ -+# -+# Save a wave with the recovered clock to make it easier to find the bits in -+# analog graphs. -+# -+dd.data = dp_t; -+dd.save("_clk") -+ -+# -+# For decoding, we need a fake bit clock. We generate it by doubling each data -+# bit and generating a L->H transition during this bit. -+# -+dpd = [] -+dmd = [] -+dck = [] -+ -+# err, silly, seems that we've mixed up D+ and D- all over the place :-) -+print d_usb_stream(dm_bv[:], dp_bv[:]) -+ -+for v in dp_bv: -+ dpd.append(v) -+ dpd.append(v) -+ dck.append(0) -+ dck.append(1) -+ -+for v in dm_bv: -+ dmd.append(v) -+ dmd.append(v) -+ -+# -+# Display the reconstructed digital signal. Note that the absolute time is only -+# correct at the beginning and that relative time is only accurate over -+# intervals in which no significant clock resynchronization has occurred. -+# -+# In fact, dxplore should probably have an option to either turn off time -+# entirely or to display a user-provided time axis. The latter may be a bit -+# tricky to implement. -+# -+dxplore((dmd, dpd, dck), 0, p/2, labels = ("D+", "D-", "CLK")) -diff --git a/atusb/an/get.py b/atusb/an/get.py -new file mode 100755 -index 0000000..685e00f ---- /dev/null -+++ b/atusb/an/get.py -@@ -0,0 +1,31 @@ -+#!/usr/bin/python -+ -+from tmc.scope import rigol_ds1000c -+ -+#-800, +1600 -+s = rigol_ds1000c() -+#s.debug = False -+ -+pos = s.hor.pos -+scale = s.hor.scale -+t0 = pos-scale*s.div_hor/2 -+t1 = pos+scale*s.div_hor/2 -+print t0, t1 -+ -+#zoom = 10 -+#step = scale/s.samples_per_div/zoom -+#print step -+step = 4e-9 -+step = 2e-9 -+ -+w = s.wave((s.ch[0], s.ch[1]), start = t0, end = t1, step = step) -+w[0] = 3.3-w[0] -+w[1] = 3.3-w[1] -+ -+s.hor.pos = pos -+s.hor.scale = scale -+ -+w[0].label = "D+"; -+w[1].label = "D-"; -+ -+w.save("_wv") -diff --git a/atusb/an/plot b/atusb/an/plot -new file mode 100755 -index 0000000..1dea789 ---- /dev/null -+++ b/atusb/an/plot -@@ -0,0 +1,12 @@ -+#!/bin/sh -+# -+# Plot output of "dec" -+# -+gnuplot -persist < -+ -+#include -+#include -+#include -+ -+#include "usb.h" -+ -+#include "board.h" -+#include "sernum.h" -+#include "spi.h" -+#include "atusb/ep0.h" -+ -+#ifdef DEBUG -+#include "uart.h" -+#endif -+ -+ -+int main(void) -+{ -+ board_init(); -+ board_app_init(); -+ reset_rf(); -+ -+ user_get_descriptor = sernum_get_descr; -+ -+ /* now we should be at 8 MHz */ -+ -+#ifdef DEBUG -+ uart_init(); -+ static FILE atben_stdout = FDEV_SETUP_STREAM(uart_write_char, NULL, -+ _FDEV_SETUP_WRITE); -+ stdout = &atben_stdout; -+#endif -+ -+ usb_init(); -+ ep0_init(); -+#ifdef ATUSB -+ timer_init(); -+ -+ /* move interrupt vectors to 0 */ -+ MCUCR = 1 << IVCE; -+ MCUCR = 0; -+#endif -+ -+ sei(); -+ -+ while (1) -+ sleep_mode(); -+} -diff --git a/atusb/board.c b/atusb/board.c -new file mode 100644 -index 0000000..c3b8d26 ---- /dev/null -+++ b/atusb/board.c -@@ -0,0 +1,120 @@ -+/* -+ * fw/board.c - Board-specific functions (for boot loader and application) -+ * -+ * Written 2011, 2013 by Werner Almesberger -+ * Copyright 2011, 2013 Werner Almesberger -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ */ -+ -+ -+#include -+#include -+ -+#include -+#include -+#include -+ -+#define F_CPU 8000000UL -+#include -+ -+#include "usb.h" -+#include "at86rf230.h" -+#include "board.h" -+#include "spi.h" -+ -+ -+uint8_t board_sernum[42] = { 42, USB_DT_STRING }; -+ -+/* ----- Register access --------------------------------------------------- */ -+ -+void change_state(uint8_t new) -+{ -+ while ((reg_read(REG_TRX_STATUS) & TRX_STATUS_MASK) == -+ TRX_STATUS_TRANSITION); -+ reg_write(REG_TRX_STATE, new); -+} -+ -+ -+uint8_t reg_read(uint8_t reg) -+{ -+ uint8_t value; -+ -+ spi_begin(); -+ spi_send(AT86RF230_REG_READ | reg); -+ value = spi_recv(); -+ spi_end(); -+ -+ return value; -+} -+ -+ -+uint8_t subreg_read(uint8_t address, uint8_t mask, uint8_t position) -+{ -+ /* Read current register value and mask out subregister. */ -+ uint8_t register_value = reg_read(address); -+ register_value &= mask; -+ register_value >>= position; /* Align subregister value. */ -+ -+ return register_value; -+} -+ -+ -+void reg_write(uint8_t reg, uint8_t value) -+{ -+ spi_begin(); -+ spi_send(AT86RF230_REG_WRITE | reg); -+ spi_send(value); -+ spi_end(); -+} -+ -+ -+void subreg_write(uint8_t address, uint8_t mask, uint8_t position, uint8_t value) -+{ -+ /* Read current register value and mask area outside the subregister. */ -+ uint8_t register_value = reg_read(address); -+ register_value &= ~mask; -+ -+ /* Start preparing the new subregister value. shift in place and mask. */ -+ value <<= position; -+ value &= mask; -+ -+ value |= register_value; /* Set the new subregister value. */ -+ -+ /* Write the modified register value. */ -+ reg_write(address, value); -+} -+ -+ -+void panic(void) -+{ -+ cli(); -+ while (1) { -+ SET(LED); -+ _delay_ms(100); -+ CLR(LED); -+ _delay_ms(100); -+ } -+} -+ -+ -+static char hex(uint8_t nibble) -+{ -+ return nibble < 10 ? '0'+nibble : 'a'+nibble-10; -+} -+ -+ -+void get_sernum(void) -+{ -+ uint8_t sig; -+ uint8_t i; -+ -+ for (i = 0; i != 10; i++) { -+ sig = boot_signature_byte_get(i+0xe); -+ board_sernum[(i << 2)+2] = hex(sig >> 4); -+ board_sernum[(i << 2)+4] = hex(sig & 0xf); -+ } -+} -diff --git a/atusb/board.h b/atusb/board.h -new file mode 100644 -index 0000000..dbcd410 ---- /dev/null -+++ b/atusb/board.h -@@ -0,0 +1,95 @@ -+/* -+ * fw/board.h - Board-specific functions and definitions -+ * -+ * Written 2008-2011, 2013, 2013 by Werner Almesberger -+ * Copyright 2008-2011, 2013, 2013 Werner Almesberger -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ */ -+ -+#ifndef BOARD_H -+#define BOARD_H -+ -+#include -+#include -+ -+#include -+ -+#ifdef ATUSB -+#include "board_atusb.h" -+#endif -+#ifdef RZUSB -+#include "board_rzusb.h" -+#endif -+#ifdef HULUSB -+#include "board_hulusb.h" -+#endif -+ -+#define SET_2(p, b) PORT##p |= 1 << (b) -+#define CLR_2(p, b) PORT##p &= ~(1 << (b)) -+#define IN_2(p, b) DDR##p &= ~(1 << (b)) -+#define OUT_2(p, b) DDR##p |= 1 << (b) -+#define PIN_2(p, b) ((PIN##p >> (b)) & 1) -+ -+#define SET_1(p, b) SET_2(p, b) -+#define CLR_1(p, b) CLR_2(p, b) -+#define IN_1(p, b) IN_2(p, b) -+#define OUT_1(p, b) OUT_2(p, b) -+#define PIN_1(p, b) PIN_2(p, b) -+ -+#define SET(n) SET_1(n##_PORT, n##_BIT) -+#define CLR(n) CLR_1(n##_PORT, n##_BIT) -+#define IN(n) IN_1(n##_PORT, n##_BIT) -+#define OUT(n) OUT_1(n##_PORT, n##_BIT) -+#define PIN(n) PIN_1(n##_PORT, n##_BIT) -+ -+ -+#define USB_VENDOR ATUSB_VENDOR_ID -+#define USB_PRODUCT ATUSB_PRODUCT_ID -+ -+#define DFU_USB_VENDOR USB_VENDOR -+#define DFU_USB_PRODUCT USB_PRODUCT -+ -+ -+#define BOARD_MAX_mA 40 -+ -+#ifdef BOOT_LOADER -+#define NUM_EPS 1 -+#else -+#define NUM_EPS 2 -+#endif -+ -+#define HAS_BOARD_SERNUM -+ -+extern uint8_t board_sernum[42]; -+extern uint8_t irq_serial; -+ -+ -+void reset_rf(void); -+void reset_cpu(void); -+uint8_t read_irq(void); -+void slp_tr(void); -+ -+void led(bool on); -+void panic(void); -+ -+uint64_t timer_read(void); -+void timer_init(void); -+ -+bool gpio(uint8_t port, uint8_t data, uint8_t dir, uint8_t mask, uint8_t *res); -+void gpio_cleanup(void); -+ -+void get_sernum(void); -+ -+void board_app_init(void); -+ -+uint8_t reg_read(uint8_t reg); -+uint8_t subreg_read(uint8_t address, uint8_t mask, uint8_t position); -+void reg_write(uint8_t reg, uint8_t value); -+void subreg_write(uint8_t address, uint8_t mask, uint8_t position, uint8_t value); -+void change_state(uint8_t new); -+ -+#endif /* !BOARD_H */ -diff --git a/atusb/board_app.c b/atusb/board_app.c -new file mode 100644 -index 0000000..1fa9bf4 ---- /dev/null -+++ b/atusb/board_app.c -@@ -0,0 +1,173 @@ -+/* -+ * fw/board_app.c - Board-specific functions (for the application) -+ * -+ * Written 2011, 2013 by Werner Almesberger -+ * Copyright 2011, 2013 Werner Almesberger -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ */ -+ -+ -+#include -+#include -+#include -+ -+#include -+#include -+ -+#define F_CPU 8000000UL -+#include -+ -+#include "usb.h" -+#include "at86rf230.h" -+#include "spi.h" -+#include "mac.h" -+#include "board.h" -+ -+ -+static volatile uint32_t timer_h = 0; /* 2^(16+32) / 8 MHz = ~1.1 years */ -+ -+ -+void reset_cpu(void) -+{ -+ WDTCSR = 1 << WDE; -+} -+ -+ -+uint8_t read_irq(void) -+{ -+ return PIN(IRQ_RF); -+} -+ -+ -+void slp_tr(void) -+{ -+ SET(SLP_TR); -+ CLR(SLP_TR); -+} -+ -+ -+ISR(TIMER1_OVF_vect) -+{ -+ timer_h++; -+} -+ -+ -+uint64_t timer_read(void) -+{ -+ uint32_t high; -+ uint8_t low, mid; -+ -+ do { -+ if (TIFR1 & (1 << TOV1)) { -+ TIFR1 = 1 << TOV1; -+ timer_h++; -+ } -+ high = timer_h; -+ low = TCNT1L; -+ mid = TCNT1H; -+ } -+ while (TIFR1 & (1 << TOV1)); -+ -+ /* -+ * We need all these casts because the intermediate results are handled -+ * as if they were signed and thus get sign-expanded. Sounds wrong-ish. -+ */ -+ return (uint64_t) high << 16 | (uint64_t) mid << 8 | (uint64_t) low; -+} -+ -+ -+void timer_init(void) -+{ -+ /* configure timer 1 as a free-running CLK counter */ -+ -+ TCCR1A = 0; -+ TCCR1B = 1 << CS10; -+ -+ /* enable timer overflow interrupt */ -+ -+ TIMSK1 = 1 << TOIE1; -+} -+ -+ -+bool gpio(uint8_t port, uint8_t data, uint8_t dir, uint8_t mask, uint8_t *res) -+{ -+ EIMSK = 0; /* recover INT_RF to ATUSB_GPIO_CLEANUP or an MCU reset */ -+ -+ switch (port) { -+ case 1: -+ DDRB = (DDRB & ~mask) | dir; -+ PORTB = (PORTB & ~mask) | data; -+ break; -+ case 2: -+ DDRC = (DDRC & ~mask) | dir; -+ PORTC = (PORTC & ~mask) | data; -+ break; -+ case 3: -+ DDRD = (DDRD & ~mask) | dir; -+ PORTD = (PORTD & ~mask) | data; -+ break; -+ default: -+ return 0; -+ } -+ -+ /* disable the UART so that we can meddle with these pins as well. */ -+ spi_off(); -+ _delay_ms(1); -+ -+ switch (port) { -+ case 1: -+ res[0] = PINB; -+ res[1] = PORTB; -+ res[2] = DDRB; -+ break; -+ case 2: -+ res[0] = PINC; -+ res[1] = PORTC; -+ res[2] = DDRC; -+ break; -+ case 3: -+ res[0] = PIND; -+ res[1] = PORTD; -+ res[2] = DDRD; -+ break; -+ } -+ -+ return 1; -+} -+ -+ -+void gpio_cleanup(void) -+{ -+ EIMSK = 1 << 0; -+} -+ -+ -+static void done(void *user) -+{ -+ led(0); -+} -+ -+ -+uint8_t irq_serial; -+ -+#if defined(ATUSB) || defined(HULUSB) -+ISR(INT0_vect) -+#endif -+#ifdef RZUSB -+ISR(TIMER1_CAPT_vect) -+#endif -+{ -+ if (mac_irq) { -+ if (mac_irq()) -+ return; -+ } -+ if (eps[1].state == EP_IDLE) { -+ led(1); -+ irq_serial = (irq_serial+1) | 0x80; -+ usb_send(&eps[1], &irq_serial, 1, done, NULL); -+ } -+} -diff --git a/atusb/board_atusb.c b/atusb/board_atusb.c -new file mode 100644 -index 0000000..a02fb7f ---- /dev/null -+++ b/atusb/board_atusb.c -@@ -0,0 +1,162 @@ -+/* -+ * fw/board_atusb.c - ATUSB Board-specific functions (for boot loader and application) -+ * -+ * Written 2016 by Stefan Schmidt -+ * Copyright 2016 Stefan Schmidt -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ */ -+ -+ -+#include -+#include -+ -+#include -+#include -+#include -+ -+#define F_CPU 8000000UL -+#include -+ -+#include "usb.h" -+#include "at86rf230.h" -+#include "board.h" -+#include "spi.h" -+#include "usb/usb.h" -+ -+static bool spi_initialized = 0; -+ -+void reset_rf(void) -+{ -+ /* set up all the outputs; default port value is 0 */ -+ -+ DDRB = 0; -+ DDRC = 0; -+ DDRD = 0; -+ PORTB = 0; -+ PORTC = 0; -+ PORTD = 0; -+ -+ OUT(LED); -+ OUT(nRST_RF); /* this also resets the transceiver */ -+ OUT(SLP_TR); -+ -+ spi_init(); -+ -+ /* AT86RF231 data sheet, 12.4.13, reset pulse width: 625 ns (min) */ -+ -+ CLR(nRST_RF); -+ _delay_us(2); -+ SET(nRST_RF); -+ -+ /* 12.4.14: SPI access latency after reset: 625 ns (min) */ -+ -+ _delay_us(2); -+ -+ /* we must restore TRX_CTRL_0 after each reset (9.6.4) */ -+ -+ set_clkm(); -+} -+ -+void led(bool on) -+{ -+ if (on) -+ SET(LED); -+ else -+ CLR(LED); -+} -+ -+void set_clkm(void) -+{ -+ /* switch CLKM to 8 MHz */ -+ -+ /* -+ * @@@ Note: Atmel advise against changing the external clock in -+ * mid-flight. We should therefore switch to the RC clock first, then -+ * crank up the external clock, and finally switch back to the external -+ * clock. The clock switching procedure is described in the ATmega32U2 -+ * data sheet in secton 8.2.2. -+ */ -+ spi_begin(); -+ spi_send(AT86RF230_REG_WRITE | REG_TRX_CTRL_0); -+ spi_send(CLKM_CTRL_8MHz); -+ spi_end(); -+} -+ -+void board_init(void) -+{ -+ /* Disable the watchdog timer */ -+ -+ MCUSR = 0; /* Remove override */ -+ WDTCSR |= 1 << WDCE; /* Enable change */ -+ WDTCSR = 1 << WDCE; /* Disable watchdog while still enabling -+ change */ -+ -+ CLKPR = 1 << CLKPCE; -+ /* We start with a 1 MHz/8 clock. Disable the prescaler. */ -+ CLKPR = 0; -+ -+ get_sernum(); -+} -+ -+void spi_begin(void) -+{ -+ if (!spi_initialized) -+ spi_init(); -+ CLR(nSS); -+} -+ -+void spi_off(void) -+{ -+ spi_initialized = 0; -+ UCSR1B = 0; -+} -+ -+void spi_init(void) -+{ -+ SET(nSS); -+ OUT(SCLK); -+ OUT(MOSI); -+ OUT(nSS); -+ IN(MISO); -+ -+ UBRR1 = 0; /* set bit rate to zero to begin */ -+ UCSR1C = 1 << UMSEL11 | 1 << UMSEL10; -+ /* set MSPI, MSB first, SPI data mode 0 */ -+ UCSR1B = 1 << RXEN1 | 1 << TXEN1; -+ /* enable receiver and transmitter */ -+ UBRR1 = 0; /* reconfirm the bit rate */ -+ -+ spi_initialized = 1; -+} -+ -+void usb_init(void) -+{ -+ USBCON |= 1 << FRZCLK; /* freeze the clock */ -+ -+ /* enable the PLL and wait for it to lock */ -+ PLLCSR &= ~(1 << PLLP2 | 1 << PLLP1 | 1 << PLLP0); -+ PLLCSR |= 1 << PLLE; -+ while (!(PLLCSR & (1 << PLOCK))); -+ -+ USBCON &= ~(1 << USBE); /* reset the controller */ -+ USBCON |= 1 << USBE; -+ -+ USBCON &= ~(1 << FRZCLK); /* thaw the clock */ -+ -+ UDCON &= ~(1 << DETACH); /* attach the pull-up */ -+ UDIEN = 1 << EORSTE; /* enable device interrupts */ -+// UDCON |= 1 << RSTCPU; /* reset CPU on bus reset */ -+ -+ ep_init(); -+} -+ -+void board_app_init(void) -+{ -+ /* enable INT0, trigger on rising edge */ -+ EICRA = 1 << ISC01 | 1 << ISC00; -+ EIMSK = 1 << 0; -+} -diff --git a/atusb/board_atusb.h b/atusb/board_atusb.h -new file mode 100644 -index 0000000..e5974c7 ---- /dev/null -+++ b/atusb/board_atusb.h -@@ -0,0 +1,48 @@ -+/* -+ * fw/board_atusb.h - ATUSB Board-specific functions and definitions -+ * -+ * Written 2016 by Stefan Schmidt -+ * Copyright 2016 Stefan Schmidt -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ */ -+ -+#ifndef BOARD_ATUSB_H -+#define BOARD_ATUSB_H -+ -+#include -+#include -+ -+#define LED_PORT B -+#define LED_BIT 6 -+#define nRST_RF_PORT C -+#define nRST_RF_BIT 7 -+#define SLP_TR_PORT B -+#define SLP_TR_BIT 4 -+ -+#define SCLK_PORT D -+#define SCLK_BIT 5 -+#define MOSI_PORT D -+#define MOSI_BIT 3 -+ -+#define MISO_PORT D -+#define MISO_BIT 2 -+#define nSS_PORT D -+#define nSS_BIT 1 -+#define IRQ_RF_PORT D -+#define IRQ_RF_BIT 0 -+ -+#define SPI_WAIT_DONE() while (!(UCSR1A & 1 << RXC1)) -+#define SPI_DATA UDR1 -+ -+void set_clkm(void); -+void board_init(void); -+ -+void spi_begin(void); -+void spi_off(void); -+void spi_init(void); -+ -+#endif /* !BOARD_H */ -diff --git a/atusb/board_hulusb.c b/atusb/board_hulusb.c -new file mode 100644 -index 0000000..084714e ---- /dev/null -+++ b/atusb/board_hulusb.c -@@ -0,0 +1,179 @@ -+/* -+ * fw/board_hulusb.c - Busware HUL Board-specific functions (for boot loader and application) -+ * -+ * Written 2017 by Filzmaier Josef -+ * Based on fw/board_rzusb written and Copyright 2016 Stefan Schmidt -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ */ -+ -+ -+#include -+#include -+ -+#include -+#include -+#include -+ -+#define F_CPU 8000000UL -+#include -+ -+#include "usb.h" -+#include "at86rf230.h" -+#include "board.h" -+#include "spi.h" -+#include "usb/usb.h" -+ -+static bool spi_initialized = 0; -+ -+void reset_rf(void) -+{ -+ /* set up all the outputs; default port value is 0 */ -+ -+ DDRB = 0; -+ DDRC = 0; -+ DDRD = 0; -+ PORTB = 0; -+ PORTC = 0; -+ PORTD = 0; -+ -+ OUT(LED_RED); -+ OUT(LED_GREEN); -+ SET(LED_RED); /* Leds are active low on HULUSB board */ -+ CLR(LED_GREEN); /* Green Led indicates the dongle is running */ -+ OUT(nRST_RF); /* this also resets the transceiver */ -+ OUT(SLP_TR); -+ -+ spi_init(); -+ -+ /* AT86RF212 data sheet, Appendix B, p166 Power-On Reset procedure */ -+ /*-----------------------------------------------------------------*/ -+ CLR(SLP_TR); -+ SET(nRST_RF); -+ SET(nSS); -+ _delay_us(400); -+ -+ CLR(nRST_RF); -+ _delay_us(2); -+ SET(nRST_RF); -+ -+ /* 5.1.4.5: Wait t10: 625 ns (min) */ -+ -+ _delay_us(2); -+ -+ reg_write(REG_TRX_CTRL_0, 0x19); -+ -+ change_state(TRX_CMD_FORCE_TRX_OFF); -+ /*-----------------------------------------------------------------*/ -+ -+ /* we must restore TRX_CTRL_0 after each reset (7.7.4) */ -+ -+ set_clkm(); -+} -+ -+void led_red(bool on) { -+ if (on) -+ CLR(LED_RED); -+ else -+ SET(LED_RED); -+} -+ -+void led_green(bool on) { -+ if (on) -+ CLR(LED_GREEN); -+ else -+ SET(LED_GREEN); -+} -+ -+void led(bool on) -+{ -+ led_red(on); -+} -+ -+void set_clkm(void) -+{ -+ /* CLKM is not connected on BUSWARE HUL and therefore it is running in -+ * async mode. */ -+ reg_write(REG_TRX_CTRL_0, 0x00); -+ -+ /* TX_AUTO_CRC_ON, default disabled */ -+ subreg_write(SR_TX_AUTO_CRC_ON, 1); -+} -+ -+void board_init(void) -+{ -+ /* Disable the watchdog timer */ -+ -+ MCUSR = 0; /* Remove override */ -+ WDTCSR |= 1 << WDCE; /* Enable change */ -+ WDTCSR = 1 << WDCE; /* Disable watchdog while still enabling -+ change */ -+ -+ CLKPR = 1 << CLKPCE; -+ /* We start with a 16 MHz/8 clock. Put the prescaler to 2. */ -+ CLKPR = 1 << CLKPS0; -+ -+ get_sernum(); -+} -+ -+void spi_begin(void) -+{ -+ if (!spi_initialized) -+ spi_init(); -+ CLR(nSS); -+} -+ -+void spi_off(void) -+{ -+ spi_initialized = 0; -+ SPCR &= ~(1 << SPE); -+} -+ -+void spi_init(void) -+{ -+ SET(nSS); -+ OUT(SCLK); -+ OUT(MOSI); -+ OUT(nSS); -+ IN(MISO); -+ -+ SPCR = (1 << SPE) | (1 << MSTR); -+ SPSR = (1 << SPI2X); -+ -+ spi_initialized = 1; -+} -+ -+void usb_init(void) -+{ -+ USBCON |= 1 << FRZCLK; /* freeze the clock */ -+ -+ /* enable the PLL and wait for it to lock */ -+ /* TODO sheet page 50 For Atmel AT90USB128x only. Do not use with Atmel AT90USB64x. */ -+ /* FOR 8 XTAL Mhz only!!! */ -+ PLLCSR = ((1 << PLLP1) | (1 << PLLP0)); -+ PLLCSR |= 1 << PLLE; -+ while (!(PLLCSR & (1 << PLOCK))); -+ -+ UHWCON |= (1 << UVREGE); -+ -+ USBCON &= ~((1 << USBE) | (1 << OTGPADE)); /* reset the controller */ -+ USBCON |= ((1 << USBE) | (1 << OTGPADE)); -+ -+ USBCON &= ~(1 << FRZCLK); /* thaw the clock */ -+ -+ UDCON &= ~(1 << DETACH); /* attach the pull-up */ -+ UDIEN = 1 << EORSTE; /* enable device interrupts */ -+ // UDCON |= 1 << RSTCPU; /* reset CPU on bus reset */ -+ -+ ep_init(); -+} -+ -+void board_app_init(void) -+{ -+ /* enable INT0, trigger on rising edge */ -+ EICRA = 1 << ISC01 | 1 << ISC00; -+ EIMSK = 1 << INT0; -+} -diff --git a/atusb/board_hulusb.h b/atusb/board_hulusb.h -new file mode 100644 -index 0000000..a1dadf0 ---- /dev/null -+++ b/atusb/board_hulusb.h -@@ -0,0 +1,66 @@ -+/* -+ * fw/board_hulusb.h - Busware HUL Board-specific functions (for boot loader and application) -+ * -+ * Written 2017 by Filzmaier Josef -+ * Based on fw/board_rzusb written and Copyright 2016 Stefan Schmidt -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ */ -+ -+#ifndef BOARD_HULUSB_H -+#define BOARD_HULUSB_H -+ -+#include -+#include -+ -+#define LED_RED_PORT A -+#define LED_GREEN_PORT A -+#define LED_RED_BIT 3 -+#define LED_GREEN_BIT 4 -+#define LED_PORT LED_RED_PORT -+#define LED_BIT LED_RED_BIT -+ -+#define nRST_RF_PORT B -+#define nRST_RF_BIT 5 -+#define SLP_TR_PORT B -+#define SLP_TR_BIT 4 -+ -+#define SCLK_PORT B -+#define SCLK_BIT 1 -+#define MOSI_PORT B -+#define MOSI_BIT 2 -+ -+#define MISO_PORT B -+#define MISO_BIT 3 -+#define nSS_PORT B -+#define nSS_BIT 0 -+#define IRQ_RF_PORT D -+#define IRQ_RF_BIT 4 -+ -+#define SR_TX_AUTO_CRC_ON 0x04, 0x20, 5 -+#define SR_CHANNEL 0x08, 0x1f, 0 -+ -+#define RG_CC_CTRL_1 (0x14) -+ -+#define SPI_WAIT_DONE() while ((SPSR & (1 << SPIF)) == 0) -+#define SPI_DATA SPDR -+ -+void set_clkm(void); -+void board_init(void); -+ -+void led_red(bool on); -+void led_green(bool on); -+ -+void spi_begin(void); -+void spi_off(void); -+void spi_init(void); -+ -+#ifdef DEBUG -+void printStatus(void); -+#define PRINT_STATUS() printStatus() -+#endif -+ -+#endif /* !BOARD_HULUSB_H */ -diff --git a/atusb/board_rzusb.c b/atusb/board_rzusb.c -new file mode 100644 -index 0000000..e83d6fa ---- /dev/null -+++ b/atusb/board_rzusb.c -@@ -0,0 +1,169 @@ -+/* -+ * fw/board_rzusb.c - RZUSB Board-specific functions (for boot loader and application) -+ * -+ * Written 2016 by Stefan Schmidt -+ * Copyright 2016 Stefan Schmidt -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ */ -+ -+ -+#include -+#include -+ -+#include -+#include -+#include -+ -+#define F_CPU 8000000UL -+#include -+ -+#include "usb.h" -+#include "at86rf230.h" -+#include "board.h" -+#include "spi.h" -+#include "usb/usb.h" -+ -+static bool spi_initialized = 0; -+ -+void reset_rf(void) -+{ -+ /* set up all the outputs; default port value is 0 */ -+ -+ DDRB = 0; -+ DDRC = 0; -+ DDRD = 0; -+ PORTB = 0; -+ PORTC = 0; -+ PORTD = 0; -+ -+ OUT(LED); -+ OUT(nRST_RF); /* this also resets the transceiver */ -+ OUT(SLP_TR); -+ -+ spi_init(); -+ -+ /* AT86RF231 data sheet, 12.4.13, reset pulse width: 625 ns (min) */ -+ -+ CLR(nRST_RF); -+ _delay_us(2); -+ SET(nRST_RF); -+ -+ /* 12.4.14: SPI access latency after reset: 625 ns (min) */ -+ -+ _delay_us(2); -+ -+ /* we must restore TRX_CTRL_0 after each reset (9.6.4) */ -+ -+ set_clkm(); -+} -+ -+void led(bool on) -+{ -+ if (on) -+ SET(LED); -+ else -+ CLR(LED); -+} -+ -+void set_clkm(void) -+{ -+ /* switch CLKM to 8 MHz */ -+ -+ /* -+ * @@@ Note: Atmel advise against changing the external clock in -+ * mid-flight. We should therefore switch to the RC clock first, then -+ * crank up the external clock, and finally switch back to the external -+ * clock. The clock switching procedure is described in the ATmega32U2 -+ * data sheet in secton 8.2.2. -+ */ -+ spi_begin(); -+ spi_send(AT86RF230_REG_WRITE | REG_TRX_CTRL_0); -+ spi_send(0x10); -+ spi_end(); -+ -+ /* TX_AUTO_CRC_ON, default disabled */ -+ spi_begin(); -+ spi_send(AT86RF230_REG_WRITE | 0x05); -+ spi_send(0x80); -+ spi_end(); -+} -+ -+void board_init(void) -+{ -+ /* Disable the watchdog timer */ -+ -+ MCUSR = 0; /* Remove override */ -+ WDTCSR |= 1 << WDCE; /* Enable change */ -+ WDTCSR = 1 << WDCE; /* Disable watchdog while still enabling -+ change */ -+ -+ CLKPR = 1 << CLKPCE; -+ /* We start with a 16 MHz/8 clock. Put the prescaler to 2. */ -+ CLKPR = 1 << CLKPS0; -+ -+ get_sernum(); -+} -+ -+void spi_begin(void) -+{ -+ if (!spi_initialized) -+ spi_init(); -+ CLR(nSS); -+} -+ -+void spi_off(void) -+{ -+ spi_initialized = 0; -+ SPCR &= ~(1 << SPE); -+} -+ -+void spi_init(void) -+{ -+ SET(nSS); -+ OUT(SCLK); -+ OUT(MOSI); -+ OUT(nSS); -+ IN(MISO); -+ -+ SPCR = (1 << SPE) | (1 << MSTR); -+ SPSR = (1 << SPI2X); -+ -+ spi_initialized = 1; -+} -+ -+void usb_init(void) -+{ -+ USBCON |= 1 << FRZCLK; /* freeze the clock */ -+ -+ /* enable the PLL and wait for it to lock */ -+ /* TODO sheet page 50 For Atmel AT90USB128x only. Do not use with Atmel AT90USB64x. */ -+ /* FOR 8 XTAL Mhz only!!! */ -+ PLLCSR = ((1 << PLLP1) | (1 << PLLP0)); -+ PLLCSR |= 1 << PLLE; -+ while (!(PLLCSR & (1 << PLOCK))); -+ -+ UHWCON |= (1 << UVREGE); -+ -+ USBCON &= ~((1 << USBE) | (1 << OTGPADE)); /* reset the controller */ -+ USBCON |= ((1 << USBE) | (1 << OTGPADE)); -+ -+ USBCON &= ~(1 << FRZCLK); /* thaw the clock */ -+ -+ UDCON &= ~(1 << DETACH); /* attach the pull-up */ -+ UDIEN = 1 << EORSTE; /* enable device interrupts */ -+// UDCON |= 1 << RSTCPU; /* reset CPU on bus reset */ -+ -+ ep_init(); -+} -+ -+void board_app_init(void) -+{ -+ /* enable timer input capture 1, trigger on rising edge */ -+ TCCR1B = (1 << ICES1); -+ TIFR1 = (1 << ICF1); -+ TIMSK1 = (1 << ICIE1); -+} -diff --git a/atusb/board_rzusb.h b/atusb/board_rzusb.h -new file mode 100644 -index 0000000..c2e518f ---- /dev/null -+++ b/atusb/board_rzusb.h -@@ -0,0 +1,48 @@ -+/* -+ * fw/board_rzusb.h - RZUSB Board-specific functions and definitions -+ * -+ * Written 2016 by Stefan Schmidt -+ * Copyright 2016 Stefan Schmidt -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ */ -+ -+#ifndef BOARD_RZUSB_H -+#define BOARD_RZUSB_H -+ -+#include -+#include -+ -+#define LED_PORT D -+#define LED_BIT 7 -+#define nRST_RF_PORT B -+#define nRST_RF_BIT 5 -+#define SLP_TR_PORT B -+#define SLP_TR_BIT 4 -+ -+#define SCLK_PORT B -+#define SCLK_BIT 1 -+#define MOSI_PORT B -+#define MOSI_BIT 2 -+ -+#define MISO_PORT B -+#define MISO_BIT 3 -+#define nSS_PORT B -+#define nSS_BIT 0 -+#define IRQ_RF_PORT D -+#define IRQ_RF_BIT 4 -+ -+#define SPI_WAIT_DONE() while ((SPSR & (1 << SPIF)) == 0) -+#define SPI_DATA SPDR -+ -+void set_clkm(void); -+void board_init(void); -+ -+void spi_begin(void); -+void spi_off(void); -+void spi_init(void); -+ -+#endif /* !BOARD_H */ -diff --git a/atusb/boot.c b/atusb/boot.c -new file mode 100644 -index 0000000..6826ac6 ---- /dev/null -+++ b/atusb/boot.c -@@ -0,0 +1,77 @@ -+/* -+ * fw/boot.c - DFU boot loader for ATUSB -+ * -+ * Written 2008-2011 by Werner Almesberger -+ * Copyright 2008-2011 Werner Almesberger -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ */ -+ -+ -+#include -+ -+#include -+#include -+#include -+ -+#define F_CPU 8000000UL -+#include -+ -+#include "usb.h" -+#include "dfu.h" -+ -+#include "board.h" -+#include "spi.h" -+#include "atusb/ep0.h" -+ -+ -+#define MS_TO_LOOPS(ms) ((uint32_t) (ms)*335) -+ -+ -+static void (*run_payload)(void) = 0; -+ -+ -+int main(void) -+{ -+ /* -+ * pgm_read_byte gets cached and there doesn't seem to be any other -+ * way to dissuade gcc from doing this. -+ */ -+ volatile int zero = 0; -+ uint32_t loop = 0; -+ -+ board_init(); -+ reset_rf(); -+ -+ /* now we should be at 8 MHz */ -+ -+ usb_init(); -+ dfu_init(); -+ -+ /* move interrupt vectors to the boot loader */ -+ MCUCR = 1 << IVCE; -+ MCUCR = 1 << IVSEL; -+ -+ sei(); -+ -+ led(1); -+ -+ while (loop != MS_TO_LOOPS(2500)) { -+ if (dfu.state == dfuIDLE && pgm_read_byte(zero) != 0xff) -+ loop++; -+ else -+ loop = 0; -+ } -+ -+ led(0); -+ -+ cli(); -+ -+ usb_reset(); -+ run_payload(); -+ -+ while (1); /* not reached */ -+} -diff --git a/atusb/descr.c b/atusb/descr.c -new file mode 100644 -index 0000000..f96b0ee ---- /dev/null -+++ b/atusb/descr.c -@@ -0,0 +1,104 @@ -+/* -+ * fw/descr.c - USB descriptors -+ * -+ * Written 2008-2011, 2014 by Werner Almesberger -+ * Copyright 2008-2011, 2014 Werner Almesberger -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ */ -+ -+ -+#include "usb.h" -+#include "dfu.h" -+#include "board.h" -+ -+ -+#define LE(x) ((uint16_t) (x) & 0xff), ((uint16_t) (x) >> 8) -+ -+/* -+ * Device descriptor -+ */ -+ -+const uint8_t device_descriptor[18] = { -+ 18, /* bLength */ -+ USB_DT_DEVICE, /* bDescriptorType */ -+ LE(0x200), /* bcdUSB */ -+ USB_CLASS_VENDOR_SPEC, /* bDeviceClass */ -+ 0x00, /* bDeviceSubClass */ -+ 0x00, /* bDeviceProtocol */ -+ EP0_SIZE, /* bMaxPacketSize */ -+ LE(USB_VENDOR), /* idVendor */ -+ LE(USB_PRODUCT), /* idProduct */ -+ LE(0x0001), /* bcdDevice */ -+ 0, /* iManufacturer */ -+ 0, /* iProduct */ -+#ifdef HAS_BOARD_SERNUM -+ 1, /* iSerialNumber */ -+#else -+ 0, /* iSerialNumber */ -+#endif -+ 1 /* bNumConfigurations */ -+}; -+ -+ -+/* -+ * Our configuration -+ * -+ * We're always bus-powered. -+ */ -+ -+const uint8_t config_descriptor[] = { -+ 9, /* bLength */ -+ USB_DT_CONFIG, /* bDescriptorType */ -+#if 0 -+ LE(9+9+7+7), /* wTotalLength */ -+#else -+ LE(9+9+7+9), /* wTotalLength */ -+#endif -+ 2, /* bNumInterfaces */ -+ 1, /* bConfigurationValue (> 0 !) */ -+ 0, /* iConfiguration */ -+ USB_ATTR_BUS_POWERED, /* bmAttributes */ -+ ((BOARD_MAX_mA)+1)/2, /* bMaxPower */ -+ -+ /* Interface #0 */ -+ -+ 9, /* bLength */ -+ USB_DT_INTERFACE, /* bDescriptorType */ -+ 0, /* bInterfaceNumber */ -+ 0, /* bAlternateSetting */ -+ 1, /* bNumEndpoints */ -+ USB_CLASS_VENDOR_SPEC, /* bInterfaceClass */ -+ 0, /* bInterfaceSubClass */ -+ 0, /* bInterfaceProtocol */ -+ 0, /* iInterface */ -+ -+#if 0 -+ /* EP OUT */ -+ -+ 7, /* bLength */ -+ USB_DT_ENDPOINT, /* bDescriptorType */ -+ 0x01, /* bEndPointAddress */ -+ 0x02, /* bmAttributes (bulk) */ -+ LE(EP1_SIZE), /* wMaxPacketSize */ -+ 0, /* bInterval */ -+#endif -+ -+#if 1 -+ /* EP IN */ -+ -+ 7, /* bLength */ -+ USB_DT_ENDPOINT, /* bDescriptorType */ -+ 0x81, /* bEndPointAddress */ -+ 0x02, /* bmAttributes (bulk) */ -+ LE(EP1_SIZE), /* wMaxPacketSize */ -+ 0, /* bInterval */ -+#endif -+ -+ /* Interface #1 */ -+ -+ DFU_ITF_DESCR(1, 0, dfu_proto_runtime, 0) -+}; -diff --git a/atusb/ep0.c b/atusb/ep0.c -new file mode 100644 -index 0000000..fa43f3b ---- /dev/null -+++ b/atusb/ep0.c -@@ -0,0 +1,338 @@ -+/* -+ * fw/ep0.c - EP0 extension protocol -+ * -+ * Written 2008-2011, 2013 by Werner Almesberger -+ * Copyright 2008-2011, 2013 Werner Almesberger -+ * Copyright 2015-2016 Stefan Schmidt -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ */ -+ -+ -+#include -+#include -+#include -+ -+#include -+#include -+ -+#define F_CPU 8000000UL -+#include -+ -+#ifndef NULL -+#define NULL 0 -+#endif -+ -+#include "usb.h" -+#include "dfu.h" -+ -+#include "at86rf230.h" -+#include "atusb/ep0.h" -+#include "version.h" -+#include "board.h" -+#include "sernum.h" -+#include "spi.h" -+#include "mac.h" -+ -+#ifdef ATUSB -+#define HW_TYPE ATUSB_HW_TYPE_110131 -+#endif -+ -+#ifdef RZUSB -+#define HW_TYPE ATUSB_HW_TYPE_RZUSB -+#endif -+ -+#ifdef HULUSB -+#define HW_TYPE ATUSB_HW_TYPE_HULUSB -+#endif -+ -+#ifdef DEBUG -+#include "uart.h" -+#include -+#define debug(FORMAT,args...) printf(FORMAT,##args) -+#define error(FORMAT,args...) printf(FORMAT,##args) -+#else -+#define debug(...) -+#define error(...) -+#endif -+ -+ -+static const uint8_t id[] = { EP0ATUSB_MAJOR, EP0ATUSB_MINOR, HW_TYPE }; -+static uint8_t buf[MAX_PSDU+3]; /* command, PHDR, and LQI */ -+static uint8_t size; -+ -+ -+static void do_eeprom_write(void *user) -+{ -+ int i; -+ -+ for (i = 0; i < size; i++) -+ eeprom_update_byte((uint8_t*)i, buf[i]); -+} -+ -+static void do_buf_write(void *user) -+{ -+ uint8_t i; -+ -+ spi_begin(); -+ for (i = 0; i != size; i++) -+ spi_send(buf[i]); -+ spi_end(); -+} -+ -+ -+#define BUILD_OFFSET 7 /* '#' plus "65535" plus ' ' */ -+ -+ -+static bool my_setup(const struct setup_request *setup) -+{ -+ uint16_t req = setup->bmRequestType | setup->bRequest << 8; -+ unsigned tmp; -+ uint8_t i; -+ uint64_t tmp64; -+ -+ switch (req) { -+ case ATUSB_FROM_DEV(ATUSB_ID): -+ debug("ATUSB_ID\n"); -+ if (setup->wLength > 3) -+ return 0; -+ usb_send(&eps[0], id, setup->wLength, NULL, NULL); -+ return 1; -+ case ATUSB_FROM_DEV(ATUSB_BUILD): -+ debug("ATUSB_BUILD\n"); -+ tmp = build_number; -+ for (i = BUILD_OFFSET-2; tmp; i--) { -+ buf[i] = (tmp % 10)+'0'; -+ tmp /= 10; -+ } -+ buf[i] = '#'; -+ buf[BUILD_OFFSET-1] = ' '; -+ for (size = 0; build_date[size]; size++) -+ buf[BUILD_OFFSET+size] = build_date[size]; -+ size += BUILD_OFFSET-i; -+ if (size > setup->wLength) -+ return 0; -+ usb_send(&eps[0], buf+i, size, NULL, NULL); -+ return 1; -+ -+ case ATUSB_TO_DEV(ATUSB_RESET): -+ debug("ATUSB_RESET\n"); -+ reset_cpu(); -+ while (1); -+ -+ case ATUSB_TO_DEV(ATUSB_RF_RESET): -+ debug("ATUSB_RF_RESET\n"); -+ reset_rf(); -+ mac_reset(); -+ //ep_send_zlp(EP_CTRL); -+ return 1; -+ -+ case ATUSB_FROM_DEV(ATUSB_POLL_INT): -+ debug("ATUSB_POLL_INT\n"); -+ if (setup->wLength < 1) -+ return 0; -+ *buf = read_irq(); -+ usb_send(&eps[0], buf, 1, NULL, NULL); -+ return 1; -+ -+ case ATUSB_FROM_DEV(ATUSB_TIMER): -+ debug("ATUSB_TIMER\n"); -+ size = setup->wLength; -+ if (size > sizeof(tmp64)) -+ size = sizeof(tmp64); -+ tmp64 = timer_read(); -+ memcpy(buf, &tmp64, sizeof(tmp64)); -+ usb_send(&eps[0], buf, size, NULL, NULL); -+ return 1; -+ -+ case ATUSB_FROM_DEV(ATUSB_GPIO): -+ debug("ATUSB_GPIO\n"); -+ if (setup->wLength < 3) -+ return 0; -+ if (!gpio(setup->wIndex, setup->wValue, setup->wValue >> 8, -+ setup->wIndex >> 8, buf)) -+ return 0; -+ usb_send(&eps[0], buf, 3, NULL, NULL); -+ return 1; -+ case ATUSB_TO_DEV(ATUSB_GPIO_CLEANUP): -+ gpio_cleanup(); -+ return 1; -+ -+ case ATUSB_TO_DEV(ATUSB_SLP_TR): -+ debug("ATUSB_SLP_TR\n"); -+ slp_tr(); -+ return 1; -+ -+ case ATUSB_TO_DEV(ATUSB_REG_WRITE): -+ debug("ATUSB_REG_WRITE\n"); -+ spi_begin(); -+ spi_send(AT86RF230_REG_WRITE | setup->wIndex); -+ spi_send(setup->wValue); -+ spi_end(); -+ //ep_send_zlp(EP_CTRL); -+ return 1; -+ case ATUSB_FROM_DEV(ATUSB_REG_READ): -+ debug("ATUSB_REG_READ\n"); -+ spi_begin(); -+ spi_send(AT86RF230_REG_READ | setup->wIndex); -+ *buf = spi_recv(); -+ spi_end(); -+ usb_send(&eps[0], buf, 1, NULL, NULL); -+ return 1; -+ -+ case ATUSB_TO_DEV(ATUSB_BUF_WRITE): -+ debug("ATUSB_BUF_WRITE\n"); -+ if (setup->wLength < 1) -+ return 0; -+ if (setup->wLength > MAX_PSDU) -+ return 0; -+ buf[0] = AT86RF230_BUF_WRITE; -+ buf[1] = setup->wLength; -+ size = setup->wLength+2; -+ usb_recv(&eps[0], buf+2, setup->wLength, do_buf_write, NULL); -+ return 1; -+ case ATUSB_FROM_DEV(ATUSB_BUF_READ): -+ debug("ATUSB_BUF_READ\n"); -+ if (setup->wLength < 2) /* PHR+LQI */ -+ return 0; -+ if (setup->wLength > MAX_PSDU+2) /* PHR+PSDU+LQI */ -+ return 0; -+ spi_begin(); -+ spi_send(AT86RF230_BUF_READ); -+ size = spi_recv(); -+ if (size >= setup->wLength) -+ size = setup->wLength-1; -+ for (i = 0; i != size+1; i++) -+ buf[i] = spi_recv(); -+ spi_end(); -+ usb_send(&eps[0], buf, size+1, NULL, NULL); -+ return 1; -+ -+ case ATUSB_TO_DEV(ATUSB_SRAM_WRITE): -+ debug("ATUSB_SRAM_WRITE\n"); -+ if (setup->wIndex > SRAM_SIZE) -+ return 0; -+ if (setup->wIndex+setup->wLength > SRAM_SIZE) -+ return 0; -+ buf[0] = AT86RF230_SRAM_WRITE; -+ buf[1] = setup->wIndex; -+ size = setup->wLength+2; -+ usb_recv(&eps[0], buf+2, setup->wLength, do_buf_write, NULL); -+ return 1; -+ case ATUSB_FROM_DEV(ATUSB_SRAM_READ): -+ debug("ATUSB_SRAM_READ\n"); -+ if (setup->wIndex > SRAM_SIZE) -+ return 0; -+ if (setup->wIndex+setup->wLength > SRAM_SIZE) -+ return 0; -+ spi_begin(); -+ spi_send(AT86RF230_SRAM_READ); -+ spi_send(setup->wIndex); -+ for (i = 0; i != setup->wLength; i++) -+ buf[i] = spi_recv(); -+ spi_end(); -+ usb_send(&eps[0], buf, setup->wLength, NULL, NULL); -+ return 1; -+ -+ case ATUSB_TO_DEV(ATUSB_SPI_WRITE): -+ size = setup->wLength+2; -+ if (size > sizeof(buf)) -+ return 0; -+ buf[0] = setup->wValue; -+ buf[1] = setup->wIndex; -+ if (setup->wLength) -+ usb_recv(&eps[0], buf+2, setup->wLength, -+ do_buf_write, NULL); -+ else -+ do_buf_write(NULL); -+ return 1; -+ case ATUSB_FROM_DEV(ATUSB_SPI_WRITE2_SYNC): -+ spi_begin(); -+ spi_send(setup->wValue); -+ spi_send(setup->wIndex); -+ spi_end(); -+ buf[0] = irq_serial; -+ if (setup->wLength) -+ usb_send(&eps[0], buf, 1, NULL, NULL); -+ return 1; -+ -+ case ATUSB_FROM_DEV(ATUSB_SPI_READ1): -+ case ATUSB_FROM_DEV(ATUSB_SPI_READ2): -+ spi_begin(); -+ spi_send(setup->wValue); -+ if (req == ATUSB_FROM_DEV(ATUSB_SPI_READ2)) -+ spi_send(setup->wIndex); -+ for (i = 0; i != setup->wLength; i++) -+ buf[i] = spi_recv(); -+ spi_end(); -+ usb_send(&eps[0], buf, setup->wLength, NULL, NULL); -+ return 1; -+ -+ case ATUSB_TO_DEV(ATUSB_RX_MODE): -+ return mac_rx(setup->wValue); -+ case ATUSB_TO_DEV(ATUSB_TX): -+ return mac_tx(setup->wValue, setup->wIndex, setup->wLength); -+ case ATUSB_TO_DEV(ATUSB_EUI64_WRITE): -+ debug("ATUSB_EUI64_WRITE\n"); -+ usb_recv(&eps[0], buf, setup->wLength, do_eeprom_write, NULL); -+ _delay_ms(100); -+ reset_cpu(); -+ return 1; -+ -+ case ATUSB_FROM_DEV(ATUSB_EUI64_READ): -+ debug("ATUSB_EUI64_READ\n"); -+ eeprom_read_block(buf, (const void*)0, 8); -+ usb_send(&eps[0], buf, 8, NULL, NULL); -+ return 1; -+ -+ default: -+ error("Unrecognized SETUP: 0x%02x 0x%02x ...\n", -+ setup->bmRequestType, setup->bRequest); -+ return 0; -+ } -+} -+ -+ -+static bool my_dfu_setup(const struct setup_request *setup) -+{ -+ switch (setup->bmRequestType | setup->bRequest << 8) { -+ case DFU_TO_DEV(DFU_DETACH): -+ /* @@@ should use wTimeout */ -+ dfu.state = appDETACH; -+ return 1; -+ default: -+ return dfu_setup_common(setup); -+ } -+} -+ -+ -+static void my_set_interface(int nth) -+{ -+ if (nth) { -+ user_setup = my_dfu_setup; -+ user_get_descriptor = dfu_my_descr; -+ dfu.state = appIDLE; -+ } else { -+ user_setup = my_setup; -+ user_get_descriptor = sernum_get_descr; -+ } -+} -+ -+ -+static void my_reset(void) -+{ -+ if (dfu.state == appDETACH) -+ reset_cpu(); -+} -+ -+ -+void ep0_init(void) -+{ -+ user_setup = my_setup; -+ user_set_interface = my_set_interface; -+ my_set_interface(0); -+ user_reset = my_reset; -+} -diff --git a/atusb/flash.c b/atusb/flash.c -new file mode 100644 -index 0000000..1f8e59d ---- /dev/null -+++ b/atusb/flash.c -@@ -0,0 +1,97 @@ -+/* -+ * fw/flash.c - Board-specific flash functions -+ * -+ * Written 2011, 2013-2015 by Werner Almesberger -+ * Copyright 2011, 2013-2015 Werner Almesberger -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ */ -+ -+ -+#include -+#include -+ -+#include -+#include -+ -+#include "dfu.h" -+#include "board.h" -+ -+ -+static uint32_t payload; -+ -+ -+static void flash_start(void) -+{ -+ payload = 0; -+} -+ -+ -+static bool flash_can_write(uint16_t size) -+{ -+ return payload+size <= BOOT_ADDR; -+} -+ -+ -+static void flash_write(const uint8_t *buf, uint16_t size) -+{ -+ static uint8_t last; -+ const uint8_t *p; -+ -+ for (p = buf; p != buf+size; p++) { -+ if (!(payload & (SPM_PAGESIZE-1))) { -+ boot_page_erase(payload); -+ boot_spm_busy_wait(); -+ } -+ -+ if (payload & 1) -+ boot_page_fill(payload, last | (*p << 8)); -+ else -+ last = *p; -+ payload++; -+ -+ if (!(payload & (SPM_PAGESIZE-1))) { -+ boot_page_write(payload-SPM_PAGESIZE); -+ boot_spm_busy_wait(); -+ } -+ } -+} -+ -+ -+static void flash_end_write(void) -+{ -+ if (payload & (SPM_PAGESIZE-1)) { -+ boot_page_write(payload & ~(SPM_PAGESIZE-1)); -+ boot_spm_busy_wait(); -+ } -+ boot_rww_enable(); -+} -+ -+ -+static uint16_t flash_read(uint8_t *buf, uint16_t size) -+{ -+ uint16_t got = 0; -+ -+ while (size && payload != (uint32_t) FLASHEND+1) { -+ *buf++ = pgm_read_byte(payload); -+ payload++; -+ size--; -+ got++; -+ } -+ return got; -+} -+ -+ -+static const struct dfu_flash_ops flash_ops = { -+ .start = flash_start, -+ .can_write = flash_can_write, -+ .write = flash_write, -+ .end_write = flash_end_write, -+ .read = flash_read, -+}; -+ -+ -+const struct dfu_flash_ops *dfu_flash_ops = &flash_ops; -diff --git a/atusb/include/at86rf230.h b/atusb/include/at86rf230.h -new file mode 100644 -index 0000000..4c3ae22 ---- /dev/null -+++ b/atusb/include/at86rf230.h -@@ -0,0 +1,402 @@ -+/* -+ * include/at86rf230.h - AT86RF230/AT86RF231 protocol and register definitions -+ * -+ * Written 2008-2011 by Werner Almesberger -+ * Copyright 2008-2011 Werner Almesberger -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ */ -+ -+ -+#ifndef AT86RF230_H -+#define AT86RF230_H -+ -+enum { -+ AT86RF230_REG_WRITE = 0xc0, /* 11... */ -+ AT86RF230_REG_READ = 0x80, /* 10... */ -+ AT86RF230_BUF_WRITE = 0x60, /* 011... */ -+ AT86RF230_BUF_READ = 0x20, /* 001... */ -+ AT86RF230_SRAM_WRITE = 0x40, /* 010... */ -+ AT86RF230_SRAM_READ = 0x00 /* 000... */ -+}; -+ -+#define MAX_PSDU 127 /* octets, see AT86RF230 manual section 8.1 */ -+#define SRAM_SIZE 128 -+ -+ -+/* --- Registers ----------------------------------------------------------- */ -+ -+enum { -+ REG_TRX_STATUS = 0x01, -+ REG_TRX_STATE = 0x02, -+ REG_TRX_CTRL_0 = 0x03, -+ -+ REG_TRX_CTRL_1 = 0x04, /* 231 only */ -+ -+ REG_PHY_TX_PWR = 0x05, -+ REG_PHY_RSSI = 0x06, -+ REG_PHY_ED_LEVEL = 0x07, -+ REG_PHY_CC_CCA = 0x08, -+ REG_CCA_THRES = 0x09, -+ -+ REG_RX_CTRL = 0x0a, /* 231 only */ -+ REG_SFD_VALUE = 0x0b, /* 231 only */ -+ REG_TRX_CTRL_2 = 0x0c, /* 231 only */ -+ REG_ANT_DIV = 0x0d, /* 231 only */ -+ -+ REG_IRQ_MASK = 0x0e, -+ REG_IRQ_STATUS = 0x0f, -+ REG_VREG_CTRL = 0x10, -+ REG_BATMON = 0x11, -+ REG_XOSC_CTRL = 0x12, -+ -+ REG_RX_SYN = 0x15, /* 231 only */ -+ REG_XAH_CTRL_1 = 0x17, /* 231 only */ -+ REG_FTN_CTRL = 0x18, /* 231 only */ -+ -+ REG_PLL_CF = 0x1a, -+ REL_PLL_DCU = 0x1b, -+ REG_PART_NUM = 0x1c, -+ REG_VERSION_NUM = 0x1d, -+ REG_MAN_ID_0 = 0x1e, -+ REG_MAN_ID_1 = 0x1f, -+ REG_SHORT_ADDR_0 = 0x20, -+ REG_SHORT_ADDR_1 = 0x21, -+ REG_PAN_ID_0 = 0x22, -+ REG_PAN_ID_1 = 0x23, -+ REG_IEEE_ADDR_0 = 0x24, -+ REG_IEEE_ADDR_1 = 0x25, -+ REG_IEEE_ADDR_2 = 0x26, -+ REG_IEEE_ADDR_3 = 0x27, -+ REG_IEEE_ADDR_4 = 0x28, -+ REG_IEEE_ADDR_5 = 0x29, -+ REG_IEEE_ADDR_6 = 0x2a, -+ REG_IEEE_ADDR_7 = 0x2b, -+ -+ REG_XAH_CTRL_0 = 0x2c, /* XAH_CTRL in 230 */ -+ REG_CSMA_SEED_0 = 0x2d, -+ REG_CSMA_SEED_1 = 0x2e, -+ REG_CSMA_BE = 0x2f, /* 231 only */ -+ -+ REG_CONT_TX_0 = 0x36, -+ REG_CONT_TX_1 = 0x3d, /* 230 only */ -+}; -+ -+/* --- TRX_STATUS --- ------------------------------------------------------ */ -+ -+#define CCA_DONE (1 << 7) -+#define CCA_STATUS (1 << 6) -+ -+#define TRX_STATUS_SHIFT 0 -+#define TRX_STATUS_MASK 0x1f -+ -+enum { -+ TRX_STATUS_P_ON = 0x00, /* reset default */ -+ TRX_STATUS_BUSY_RX = 0x01, -+ TRX_STATUS_BUSY_TX = 0x02, -+ TRX_STATUS_RX_ON = 0x06, -+ TRX_STATUS_TRX_OFF = 0x08, -+ TRX_STATUS_PLL_ON = 0x09, -+ TRX_STATUS_SLEEP = 0x0f, -+ TRX_STATUS_BUSY_RX_AACK = 0x11, -+ TRX_STATUS_BUSY_TX_ARET = 0x12, -+ TRX_STATUS_RX_AACK_ON = 0x16, -+ TRX_STATUS_TX_ARET_ON = 0x19, -+ TRX_STATUS_RX_ON_NOCLK = 0x1c, -+ TRX_STATUS_RX_AACK_ON_NOCLK = 0x1d, -+ TRX_STATUS_BUSY_RX_AACK_NOCLK = 0x1e, -+ TRX_STATUS_TRANSITION = 0x1f /* ..._IN_PROGRESS */ -+}; -+ -+/* --- TRX_STATE ----------------------------------------------------------- */ -+ -+#define TRAC_STATUS_SHIFT 5 -+#define TRAC_STATUS_MASK 7 -+ -+enum { -+ TRAC_STATUS_SUCCESS = 0, /* reset default */ -+ TRAC_STATUS_SUCCESS_DATA_PENDING = 1, -+ TRAC_STATUS_SUCCESS_WAIT_FOR_ACK = 2, /* 231 only */ -+ TRAC_STATUS_CHANNEL_ACCESS_FAILURE = 3, -+ TRAC_STATUS_NO_ACK = 5, -+ TRAC_STATUS_INVALID = 7 -+}; -+ -+#define TRX_CMD_SHIFT 0 -+#define TRX_CMD_MASK 0x1f -+ -+enum { -+ TRX_CMD_NOP = 0x00, /* reset default */ -+ TRX_CMD_TX_START = 0x02, -+ TRX_CMD_FORCE_TRX_OFF = 0x03, -+ TRX_CMD_FORCE_PLL_ON = 0x04, /* 231 only */ -+ TRX_CMD_RX_ON = 0x06, -+ TRX_CMD_TRX_OFF = 0x08, -+ TRX_CMD_PLL_ON = 0x09, -+ TRX_CMD_RX_AACK_ON = 0x16, -+ TRX_CMD_TX_ARET_ON = 0x19, -+}; -+ -+/* --- TRX_CTRL_0 ---------------------------------------------------------- */ -+ -+#define PAD_IO_SHIFT 6 -+#define PAD_IO_MASK 3 -+ -+enum { -+ PAD_IO_2mA, /* reset default */ -+ PAD_IO_4mA, -+ PAD_IO_6mA, -+ PAD_IO_8mA -+}; -+ -+#define PAD_IO_CLKM_SHIFT 4 -+#define PAD_IO_CLKM_MASK 3 -+ -+enum { -+ PAD_IO_CLKM_2mA, -+ PAD_IO_CLKM_4mA, /* reset default */ -+ PAD_IO_CLKM_5mA, -+ PAD_IO_CLKM_8mA, -+}; -+ -+#define CLKM_SHA_SEL (1 << 3) -+ -+#define CLKM_CTRL_SHIFT 0 -+#define CLKM_CTRL_MASK 7 -+ -+enum { -+ CLKM_CTRL_OFF = 0, -+ CLKM_CTRL_1MHz = 1, /* reset default */ -+ CLKM_CTRL_2MHz = 2, -+ CLKM_CTRL_4MHz = 3, -+ CLKM_CTRL_8MHz = 4, -+ CLKM_CTRL_16MHz = 5 -+}; -+ -+/* --- TRX_CTRL_1 (231 only) ----------------------------------------------- */ -+ -+#define PA_EXT_EN (1 << 7) -+#define IRQ_2_EXT_EN (1 << 6) -+#define TX_AUTO_CRC_ON (1 << 5) /* 231 location */ -+#define RX_BL_CTRL (1 << 4) -+ -+#define SPI_CMD_MODE_SHIFT 2 -+#define SPI_CMD_MODE_MASK 3 -+ -+enum { -+ SPI_CMD_MODE_EMPTY = 0, /* reset default */ -+ SPI_CMD_MODE_TRX_STATUS = 1, -+ SPI_CMD_MODE_PHY_RSSI = 2, -+ SPI_CMD_MODE_IRQ_STATUS = 3, -+}; -+ -+#define IRQ_MASK_MODE (1 << 1) -+#define IRQ_POLARITY (1 << 0) -+ -+/* --- PHY_TX_PWR ---------------------------------------------------------- */ -+ -+#define TX_AUTO_CRC_ON_230 (1 << 7) /* 230 location */ -+ -+#define PA_BUF_LT_SHIFT 6 -+#define PA_BUF_LT_MASK 3 -+ -+#define PA_LT_SHIFT 4 -+#define PA_LT_MASK 3 -+ -+#define TX_PWR_SHIFT 0 -+#define TX_PWR_MASK 0x0f -+ -+/* --- PHY_RSSI ------------------------------------------------------------ */ -+ -+#define RX_CRC_VALID (1 << 7) -+ -+#define RND_VALUE_SHIFT 5 /* 231 only */ -+#define RND_VALUE_MASK 3 -+ -+#define RSSI_SHIFT 0 -+#define RSSI_MASK 0x1f -+ -+/* --- PHY_CC_CCA ---------------------------------------------------------- */ -+ -+#define CCA_REQUEST (1 << 7) -+ -+#define CCA_MODE_SHIFT 5 -+#define CCA_MODE_MASK 3 -+ -+enum { -+ CCA_MODE_CARRIER_OR_ENERGY = 0, /* 231 only */ -+ CCA_MODE_ENERGY = 1, /* reset default */ -+ CCA_MODE_CARRIER = 2, -+ CCA_MODE_CARRIER_AND_ENERGY = 3 -+}; -+ -+#define CHANNEL_SHIFT 0 -+#define CHANNEL_MASK 0x1f -+ -+/* --- CCA_THRES ----------------------------------------------------------- */ -+ -+#define CCA_ED_THRES_SHIFT 0 -+#define CCA_ED_THRES_MASK 0x0f -+ -+/* --- RX_CTRL (231 only) -------------------------------------------------- */ -+ -+#define PDT_THRES_SHIFT 0 -+#define PDT_THRES_MASK 0x0f -+ -+enum { -+ PDT_THRES_DEFAULT = 0x07, /* reset default */ -+ PDT_THRES_DIVERSITY = 0x03, -+}; -+ -+/* --- TRX_CTRL_2 (231 only) ----------------------------------------------- */ -+ -+#define RX_SAFE_MODE (1 << 7) -+ -+#define OQPSK_DATA_RATE_SHIFT 0 -+#define OQPSK_DATA_RATE_MASK 3 -+ -+enum { -+ OQPSK_DATA_RATE_250 = 0, /* reset default */ -+ OQPSK_DATA_RATE_500 = 1, -+ OQPSK_DATA_RATE_1000 = 2, -+ OQPSK_DATA_RATE_2000 = 3 -+}; -+ -+/* --- ANT_DIV (231 only) -------------------------------------------------- */ -+ -+#define ANT_SEL (1 << 7) -+#define ANT_DIV_EN (1 << 3) -+#define ANT_EXT_SW_EN (1 << 2) -+ -+#define ANT_CTRL_SHIFT 0 -+#define ANT_CTRL_MASK 3 -+ -+enum { -+ ANT_CTRL_ANT_0 = 1, -+ ANT_CTRL_ANT_1 = 2, -+ ANT_CTRL_NODIV = 3, /* reset default */ -+}; -+ -+/* --- IRQ_MASK/IRQ_STATUS ------------------------------------------------- */ -+ -+enum { -+ IRQ_PLL_LOCK = 1 << 0, -+ IRQ_PLL_UNLOCK = 1 << 1, -+ IRQ_RX_START = 1 << 2, -+ IRQ_TRX_END = 1 << 3, -+ IRQ_CCA_ED_DONE = 1 << 4, /* 231 only */ -+ IRQ_AMI = 1 << 5, /* 231 only */ -+ IRQ_TRX_UR = 1 << 6, -+ IRQ_BAT_LOW = 1 << 7 -+}; -+ -+/* --- VREG_CTRL ----------------------------------------------------------- */ -+ -+#define AVREG_EXT (1 << 7) -+#define AVDD_OK (1 << 6) -+#define DVREG_EXT (1 << 3) -+#define DVDD_OK (1 << 2) -+ -+/* --- BATMON -------------------------------------------------------------- */ -+ -+#define BATMON_OK (1 << 5) -+#define BATMON_HR (1 << 4) -+ -+#define BATMON_VTH_SHIFT 0 -+#define BATMON_VTH_MASK 0x0f -+ -+/* --- XOSC_CTRL ----------------------------------------------------------- */ -+ -+#define XTAL_MODE_SHIFT 4 -+#define XTAL_MODE_MASK 0x0f -+ -+enum { -+ XTAL_MODE_OFF = 0x0, /* 230 only */ -+ XTAL_MODE_EXT = 0x4, -+ XTAL_MODE_INT = 0xf /* reset default */ -+}; -+ -+#define XTAL_TRIM_SHIFT 4 -+#define XTAL_TRIM_MASK 0x0f -+ -+/* --- RX_SYN (231 only) --------------------------------------------------- */ -+ -+#define RX_PDT_DIS (1 << 7) -+ -+#define RX_PDT_LEVEL_SHIFT 0 -+#define RX_PDT_LEVEL_MASK 0xf -+ -+/* --- XAH_CTRL_1 (231 only) ----------------------------------------------- */ -+ -+#define AACK_FLTR_RES_FT (1 << 5) -+#define AACK_UPLD_RES_FT (1 << 4) -+#define AACK_ACK_TIME (1 << 2) -+#define AACK_PROM_MODE (1 << 1) -+ -+/* --- FTN_CTRL (231 only) ------------------------------------------------- */ -+ -+#define FTN_START (1 << 7) -+ -+/* --- PLL_CF -------------------------------------------------------------- */ -+ -+#define PLL_CF_START (1 << 7) -+ -+/* --- PLL_DCU ------------------------------------------------------------- */ -+ -+#define PLL_DCU_START (1 << 7) -+ -+/* --- XAH_CTRL_0 (XAH_CTRL in 230) ---------------------------------------- */ -+ -+#define MAX_FRAME_RETRIES_SHIFT 4 -+#define MAX_FRAME_RETRIES_MASK 0x0f -+ -+#define MAX_CSMA_RETRIES_SHIFT 1 -+#define MAX_CSMA_RETRIES_MASK 0x07 -+ -+#define SLOTTED_OPERATION (1 << 0) /* 231 only */ -+ -+/* --- CSMA_SEED_1 --------------------------------------------------------- */ -+ -+#define MIN_BE_SHIFT_230 6 /* 230 location */ -+#define MIN_BE_MASK_230 3 -+ -+#define AACK_FVN_MODE_SHIFT 6 /* 231 only */ -+#define AACK_FVN_MODE_MASK 3 -+ -+enum { -+ AACK_FVN_MODE_0 = 0, -+ AACK_FVN_MODE_01 = 1, /* reset default */ -+ AACK_FVN_MODE_012 = 2, -+ AACK_FVN_MODE_ANY = 3 -+}; -+ -+#define AACK_SET_PD (1 << 5) -+#define AACK_DIS_ACK (1 << 4) /* 231 only */ -+#define I_AM_COORD (1 << 3) -+ -+#define CSMA_SEED_1_SHIFT 0 -+#define CSMA_SEED_1_MASK 7 -+ -+/* --- CSMA_BE ------------------------------------------------------------- */ -+ -+#define MAX_BE_SHIFT 4 -+#define MAX_BE_MASK 0x0f -+ -+#define MIN_BE_SHIFT 0 /* 231 location */ -+#define MIN_BE_MASK 0x0f -+ -+/* --- REG_CONT_TX_0 ------------------------------------------------------- */ -+ -+#define CONT_TX_MAGIC 0x0f -+ -+/* --- REG_CONT_TX_1 (230 only) -------------------------------------------- */ -+ -+#define CONT_TX_MOD 0x00 /* modulated */ -+#define CONT_TX_M2M 0x10 /* f_CH-2 MHz */ -+#define CONT_TX_M500K 0x80 /* f_CH-0.5 MHz */ -+#define CONT_TX_P500K 0xc0 /* f_CH+0.5 MHz */ -+ -+#endif /* !AT86RF230_H */ -diff --git a/atusb/include/atusb/atusb.h b/atusb/include/atusb/atusb.h -new file mode 100644 -index 0000000..555d14b ---- /dev/null -+++ b/atusb/include/atusb/atusb.h -@@ -0,0 +1,97 @@ -+/* -+ * atusb.h - Definitions shared between kernel and ATUSB firmware -+ * -+ * Written 2013 by Werner Almesberger -+ * -+ * This program is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU General Public License as -+ * published by the Free Software Foundation, version 2, or -+ * (at your option) any later version. -+ * -+ * This file should be identical for kernel and firmware. -+ * Kernel: drivers/net/ieee802154/atusb.h -+ * Firmware: ben-wpan/atusb/fw/include/atusb/atusb.h -+ */ -+ -+#ifndef _ATUSB_H -+#define _ATUSB_H -+ -+#define ATUSB_VENDOR_ID 0x20b7 /* Qi Hardware*/ -+#define ATUSB_PRODUCT_ID 0x1540 /* 802.15.4, device 0 */ -+ /* -- - - */ -+ -+#define ATUSB_BUILD_SIZE 256 /* maximum build version/date message length */ -+ -+/* Commands to our device. Make sure this is synced with the firmware */ -+enum atusb_requests { -+ ATUSB_ID = 0x00, /* system status/control grp */ -+ ATUSB_BUILD, -+ ATUSB_RESET, -+ ATUSB_RF_RESET = 0x10, /* debug/test group */ -+ ATUSB_POLL_INT, -+ ATUSB_TEST, /* atusb-sil only */ -+ ATUSB_TIMER, -+ ATUSB_GPIO, -+ ATUSB_SLP_TR, -+ ATUSB_GPIO_CLEANUP, -+ ATUSB_REG_WRITE = 0x20, /* transceiver group */ -+ ATUSB_REG_READ, -+ ATUSB_BUF_WRITE, -+ ATUSB_BUF_READ, -+ ATUSB_SRAM_WRITE, -+ ATUSB_SRAM_READ, -+ ATUSB_SPI_WRITE = 0x30, /* SPI group */ -+ ATUSB_SPI_READ1, -+ ATUSB_SPI_READ2, -+ ATUSB_SPI_WRITE2_SYNC, -+ ATUSB_RX_MODE = 0x40, /* HardMAC group */ -+ ATUSB_TX, -+ ATUSB_EUI64_WRITE = 0x50, /* Parameter in EEPROM grp */ -+ ATUSB_EUI64_READ, -+}; -+ -+enum { -+ ATUSB_HW_TYPE_100813, /* 2010-08-13 */ -+ ATUSB_HW_TYPE_101216, /* 2010-12-16 */ -+ ATUSB_HW_TYPE_110131, /* 2011-01-31, ATmega32U2-based */ -+ ATUSB_HW_TYPE_RZUSB, /* Atmel Raven USB dongle with at86rf230 */ -+ ATUSB_HW_TYPE_HULUSB, /* Busware HUL USB dongle with at86rf212 */ -+}; -+ -+/* -+ * Direction bRequest wValue wIndex wLength -+ * -+ * ->host ATUSB_ID - - 3 -+ * ->host ATUSB_BUILD - - #bytes -+ * host-> ATUSB_RESET - - 0 -+ * -+ * host-> ATUSB_RF_RESET - - 0 -+ * ->host ATUSB_POLL_INT - - 1 -+ * host-> ATUSB_TEST - - 0 -+ * ->host ATUSB_TIMER - - #bytes (6) -+ * ->host ATUSB_GPIO dir+data mask+p# 3 -+ * host-> ATUSB_SLP_TR - - 0 -+ * host-> ATUSB_GPIO_CLEANUP - - 0 -+ * -+ * host-> ATUSB_REG_WRITE value addr 0 -+ * ->host ATUSB_REG_READ - addr 1 -+ * host-> ATUSB_BUF_WRITE - - #bytes -+ * ->host ATUSB_BUF_READ - - #bytes -+ * host-> ATUSB_SRAM_WRITE - addr #bytes -+ * ->host ATUSB_SRAM_READ - addr #bytes -+ * -+ * host-> ATUSB_SPI_WRITE byte0 byte1 #bytes -+ * ->host ATUSB_SPI_READ1 byte0 - #bytes -+ * ->host ATUSB_SPI_READ2 byte0 byte1 #bytes -+ * ->host ATUSB_SPI_WRITE2_SYNC byte0 byte1 0/1 -+ * -+ * host-> ATUSB_RX_MODE on - 0 -+ * host-> ATUSB_TX flags ack_seq #bytes -+ * host-> ATUSB_EUI64_WRITE - - #bytes (8) -+ * ->host ATUSB_EUI64_READ - - #bytes (8) -+ */ -+ -+#define ATUSB_REQ_FROM_DEV (USB_TYPE_VENDOR | USB_DIR_IN) -+#define ATUSB_REQ_TO_DEV (USB_TYPE_VENDOR | USB_DIR_OUT) -+ -+#endif /* !_ATUSB_H */ -diff --git a/atusb/include/atusb/ep0.h b/atusb/include/atusb/ep0.h -new file mode 100644 -index 0000000..7777345 ---- /dev/null -+++ b/atusb/include/atusb/ep0.h -@@ -0,0 +1,64 @@ -+/* -+ * include/atusb/ep0.h - EP0 extension protocol -+ * -+ * Written 2008-2011, 2013 by Werner Almesberger -+ * Copyright 2008-2011, 2013 Werner Almesberger -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ */ -+ -+ -+#ifndef EP0_H -+#define EP0_H -+ -+#include -+ -+ -+/* -+ * EP0 protocol: -+ * -+ * 0.0 initial release -+ * 0.1 addition of ATUSB_TEST -+ * 0.2 First public release -+ * 0.3 ATUSB_EUI64_READ/WRITE for permanent EUI64 handling -+ * Support to run the firmware on Atmel Raven USB dongles -+ * Remove FCS frame check from firmware and leave it to the driver -+ * Use extended operation mode for TX for automatic ACK handling -+ */ -+ -+#define EP0ATUSB_MAJOR 0 /* EP0 protocol, major revision */ -+#define EP0ATUSB_MINOR 3 /* EP0 protocol, minor revision */ -+ -+ -+/* -+ * bmRequestType: -+ * -+ * D7 D6..5 D4...0 -+ * | | | -+ * direction (0 = host->dev) -+ * type (2 = vendor) -+ * recipient (0 = device) -+ */ -+ -+#ifndef USB_TYPE_VENDOR -+#define USB_TYPE_VENDOR 0x40 -+#endif -+ -+#ifndef USB_DIR_IN -+#define USB_DIR_IN 0x80 -+#endif -+ -+#ifndef USB_DIR_OUT -+#define USB_DIR_OUT 0x00 -+#endif -+ -+#define ATUSB_FROM_DEV(req) (ATUSB_REQ_FROM_DEV | (req) << 8) -+#define ATUSB_TO_DEV(req) (ATUSB_REQ_TO_DEV | (req) << 8) -+ -+ -+void ep0_init(void); -+ -+#endif /* !EP0_H */ -diff --git a/atusb/mac.c b/atusb/mac.c -new file mode 100644 -index 0000000..835002c ---- /dev/null -+++ b/atusb/mac.c -@@ -0,0 +1,250 @@ -+/* -+ * fw/mac.c - HardMAC functions -+ * -+ * Written 2011, 2013 by Werner Almesberger -+ * Copyright 2011, 2013 Werner Almesberger -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ */ -+ -+#include -+#include -+#include -+ -+#include "usb.h" -+ -+#include "at86rf230.h" -+#include "spi.h" -+#include "board.h" -+#include "mac.h" -+ -+#define RX_BUFS 3 -+ -+ -+bool (*mac_irq)(void) = NULL; -+ -+ -+static uint8_t rx_buf[RX_BUFS][MAX_PSDU+2]; /* PHDR+payload+LQ */ -+static uint8_t tx_buf[MAX_PSDU]; -+static uint8_t tx_size = 0; -+static bool txing = 0; -+static bool queued_tx_ack = 0; -+static uint8_t next_seq, this_seq, queued_seq; -+ -+ -+/* ----- Receive buffer management ----------------------------------------- */ -+ -+ -+static uint8_t rx_in = 0, rx_out = 0; -+ -+ -+static inline void next_buf(uint8_t *index) -+{ -+ *index = (*index+1) % RX_BUFS; -+} -+ -+ -+/* ----- Interrupt handling ------------------------------------------------ */ -+ -+ -+static void rx_done(void *user); -+static void tx_ack_done(void *user); -+ -+ -+static void usb_next(void) -+{ -+ const uint8_t *buf; -+ -+ if (rx_in != rx_out) { -+ buf = rx_buf[rx_out]; -+ led(1); -+ usb_send(&eps[1], buf, buf[0]+2, rx_done, NULL); -+ } -+ -+ if (queued_tx_ack) { -+ usb_send(&eps[1], &queued_seq, 1, tx_ack_done, NULL); -+ queued_tx_ack = 0; -+ } -+} -+ -+ -+static void tx_ack_done(void *user) -+{ -+ usb_next(); -+} -+ -+static void rx_done(void *user) -+{ -+ led(0); -+ next_buf(&rx_out); -+ usb_next(); -+#ifdef AT86RF230 -+ /* slap at86rf230 - reduce fragmentation issue */ -+ change_state(TRX_STATUS_RX_AACK_ON); -+#endif -+} -+ -+ -+static void receive_frame(void) -+{ -+ uint8_t size; -+ uint8_t *buf; -+ -+ spi_begin(); -+ spi_io(AT86RF230_BUF_READ); -+ -+ size = spi_recv(); -+ if (!size || (size & 0x80)) { -+ spi_end(); -+ return; -+ } -+ -+ buf = rx_buf[rx_in]; -+ spi_recv_block(buf+1, size+1); -+ spi_end(); -+ -+ buf[0] = size; -+ next_buf(&rx_in); -+ -+ if (eps[1].state == EP_IDLE) -+ usb_next(); -+} -+ -+ -+static bool handle_irq(void) -+{ -+ uint8_t irq; -+ -+ irq = reg_read(REG_IRQ_STATUS); -+ if (!(irq & IRQ_TRX_END)) -+ return 1; -+ -+ if (txing) { -+ if (eps[1].state == EP_IDLE) { -+ usb_send(&eps[1], &this_seq, 1, tx_ack_done, NULL); -+ } else { -+ queued_tx_ack = 1; -+ queued_seq = this_seq; -+ } -+ txing = 0; -+ return 1; -+ } -+ -+ /* likely */ -+ if (eps[1].state == EP_IDLE || rx_in != rx_out) -+ receive_frame(); -+ -+ return 1; -+} -+ -+ -+/* ----- TX/RX ------------------------------------------------------------- */ -+ -+ -+bool mac_rx(int on) -+{ -+ if (on) { -+ mac_irq = handle_irq; -+ reg_read(REG_IRQ_STATUS); -+ change_state(TRX_CMD_RX_AACK_ON); -+ } else { -+ mac_irq = NULL; -+ change_state(TRX_CMD_FORCE_TRX_OFF); -+ txing = 0; -+ } -+ return 1; -+} -+ -+ -+static void do_tx(void *user) -+{ -+ uint16_t timeout = 0xffff; -+ uint8_t status; -+ uint8_t i; -+ -+ /* -+ * If we time out here, the host driver will time out waiting for the -+ * TRX_END acknowledgement. -+ */ -+ do { -+ if (!--timeout) -+ return; -+ status = reg_read(REG_TRX_STATUS) & TRX_STATUS_MASK; -+ } -+ while (status != TRX_STATUS_RX_ON && status != TRX_STATUS_RX_AACK_ON); -+ -+#ifdef AT86RF231 -+ /* -+ * We use TRX_CMD_FORCE_PLL_ON instead of TRX_CMD_PLL_ON because a new -+ * reception may have begun while we were still working on the previous -+ * one. -+ */ -+ reg_write(REG_TRX_STATE, TRX_CMD_FORCE_PLL_ON); -+#endif -+#ifdef AT86RF230 -+ /* -+ * at86rf230 doesn't support force change, nevetherless this works -+ * somehow -+ */ -+ reg_write(REG_TRX_STATE, TRX_CMD_PLL_ON); -+#endif -+#ifdef AT86RF212 -+ /* -+ * We use TRX_CMD_FORCE_PLL_ON instead of TRX_CMD_PLL_ON because a new -+ * reception may have begun while we were still working on the previous -+ * one. -+ */ -+ reg_write(REG_TRX_STATE, TRX_CMD_FORCE_PLL_ON); -+#endif -+ -+ handle_irq(); -+ -+ spi_begin(); -+ spi_send(AT86RF230_BUF_WRITE); -+ spi_send(tx_size+2); /* CRC */ -+ for (i = 0; i != tx_size; i++) -+ spi_send(tx_buf[i]); -+ spi_end(); -+ -+ change_state(TRX_STATUS_TX_ARET_ON); -+ -+ slp_tr(); -+ -+ txing = 1; -+ this_seq = next_seq; -+ -+ /* -+ * Wait until we reach BUSY_TX_ARET, so that we command the transition to -+ * RX_AACK_ON which will be executed upon TX completion. -+ */ -+ change_state(TRX_CMD_PLL_ON); -+ change_state(TRX_CMD_RX_AACK_ON); -+} -+ -+ -+bool mac_tx(uint16_t flags, uint8_t seq, uint16_t len) -+{ -+ if (len > MAX_PSDU) -+ return 0; -+ tx_size = len; -+ next_seq = seq; -+ usb_recv(&eps[0], tx_buf, len, do_tx, NULL); -+ return 1; -+} -+ -+ -+void mac_reset(void) -+{ -+ mac_irq = NULL; -+ txing = 0; -+ queued_tx_ack = 0; -+ rx_in = rx_out = 0; -+ next_seq = this_seq = queued_seq = 0; -+ -+ /* enable CRC and PHY_RSSI (with RX_CRC_VALID) in SPI status return */ -+ reg_write(REG_TRX_CTRL_1, -+ TX_AUTO_CRC_ON | SPI_CMD_MODE_PHY_RSSI << SPI_CMD_MODE_SHIFT); -+} -diff --git a/atusb/mac.h b/atusb/mac.h -new file mode 100644 -index 0000000..f3c92fb ---- /dev/null -+++ b/atusb/mac.h -@@ -0,0 +1,26 @@ -+/* -+ * fw/mac.h - HardMAC functions -+ * -+ * Written 2011, 2013 by Werner Almesberger -+ * Copyright 2011, 2013 Werner Almesberger -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ */ -+ -+#ifndef MAC_H -+#define MAC_H -+ -+#include -+#include -+ -+ -+extern bool (*mac_irq)(void); -+ -+bool mac_rx(int on); -+bool mac_tx(uint16_t flags, uint8_t seq, uint16_t len); -+void mac_reset(void); -+ -+#endif /* !MAC_H */ -diff --git a/atusb/sernum.c b/atusb/sernum.c -new file mode 100644 -index 0000000..41e434c ---- /dev/null -+++ b/atusb/sernum.c -@@ -0,0 +1,47 @@ -+/* -+ * fw/sernum.c - ATUSB serial number -+ * -+ * Written 2008-2011, 2013 by Werner Almesberger -+ * Copyright 2008-2011, 2013 Werner Almesberger -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ */ -+ -+ -+#include -+#include -+ -+#include "usb.h" -+ -+#include "board.h" -+#include "sernum.h" -+ -+ -+static const uint8_t string_descriptor_0[] = { -+ 4, /* blength */ -+ USB_DT_STRING, /* bDescriptorType */ -+ LE(USB_LANGID_ENGLISH_US) /* wLANGID[0] */ -+}; -+ -+ -+bool sernum_get_descr(uint8_t type, uint8_t index, const uint8_t **reply, -+ uint8_t *size) -+{ -+ if (type != USB_DT_STRING) -+ return 0; -+ switch (index) { -+ case 0: -+ *reply = string_descriptor_0; -+ *size = sizeof(string_descriptor_0); -+ return 1; -+ case 1: -+ *reply = board_sernum; -+ *size = sizeof(board_sernum); -+ return 1; -+ default: -+ return 0; -+ } -+} -diff --git a/atusb/sernum.h b/atusb/sernum.h -new file mode 100644 -index 0000000..31a8e27 ---- /dev/null -+++ b/atusb/sernum.h -@@ -0,0 +1,37 @@ -+/* -+ * fw/sernum.h - ATUSB serial number -+ * -+ * Written 2011, 2013 by Werner Almesberger -+ * Copyright 2011, 2013 Werner Almesberger -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ */ -+ -+#ifndef SERNUM_H -+#define SERNUM_H -+ -+#include -+#include -+ -+#include "board.h" -+ -+ -+#ifdef HAS_BOARD_SERNUM -+ -+bool sernum_get_descr(uint8_t type, uint8_t index, const uint8_t **reply, -+ uint8_t *size); -+ -+#else /* HAS_BOARD_SERNUM */ -+ -+static inline bool sernum_get_descr(uint8_t type, uint8_t index, -+ const uint8_t **reply, uint8_t *size) -+{ -+ return 0; -+} -+ -+#endif /* !HAS_BOARD_SERNUM */ -+ -+#endif /* !SERNUM_H */ -diff --git a/atusb/spi.c b/atusb/spi.c -new file mode 100644 -index 0000000..3fa5715 ---- /dev/null -+++ b/atusb/spi.c -@@ -0,0 +1,51 @@ -+/* -+ * fw/spi.c - ATmega8 family SPI I/O -+ * -+ * Written 2011, 2013 by Werner Almesberger -+ * Copyright 2011, 2013 Werner Almesberger -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ */ -+ -+ -+#include -+#include -+ -+#include -+ -+#include "board.h" -+#include "spi.h" -+ -+ -+uint8_t spi_io(uint8_t v) -+{ -+// while (!(UCSR1A & 1 << UDRE1)); -+ SPI_DATA = v; -+ SPI_WAIT_DONE(); -+ return SPI_DATA; -+} -+ -+ -+void spi_end(void) -+{ -+// while (!(UCSR1A & 1 << TXC1)); -+ SET(nSS); -+} -+ -+ -+void spi_recv_block(uint8_t *buf, uint8_t n) -+{ -+ if (!n) -+ return; -+ SPI_DATA = 0; -+ while (--n) { -+ SPI_WAIT_DONE(); -+ *buf++ = SPI_DATA; -+ SPI_DATA = 0; -+ } -+ SPI_WAIT_DONE(); -+ *buf++ = SPI_DATA; -+} -diff --git a/atusb/spi.h b/atusb/spi.h -new file mode 100644 -index 0000000..6e04f4e ---- /dev/null -+++ b/atusb/spi.h -@@ -0,0 +1,30 @@ -+/* -+ * fw/spi.h - ATmega8 family SPI I/O -+ * -+ * Written 2011, 2013 by Werner Almesberger -+ * Copyright 2011, 2013 Werner Almesberger -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ */ -+ -+#ifndef SPI_H -+#define SPI_H -+ -+#include -+ -+ -+void spi_begin(void); -+uint8_t spi_io(uint8_t v); -+void spi_end(void); -+void spi_off(void); -+void spi_init(void); -+ -+#define spi_send(v) (void) spi_io(v) -+#define spi_recv(v) spi_io(0) -+ -+void spi_recv_block(uint8_t *buf, uint8_t n); -+ -+#endif /* !SPI_H */ -diff --git a/atusb/uart.c b/atusb/uart.c -new file mode 100644 -index 0000000..44bec27 ---- /dev/null -+++ b/atusb/uart.c -@@ -0,0 +1,64 @@ -+/* -+ * fw/uart.h - Functions needed for debugging over uart -+ * -+ * Code adapted from http://www.roboternetz.de/wissen/index.php/UART_mit_avr-gcc -+ * and http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial -+ * -+ * Published under the Creative Commons Share-Alike licence -+ * https://creativecommons.org/licenses/by-sa/2.0/de/ -+ * -+ * S. Salewski 2007 -+ * -+ * Adapted by -+ * Josef Filzmaier 2017 -+ */ -+ -+#include -+#include "uart.h" -+ -+#define USART_BAUD 38400UL -+#define F_CPU 8000000UL -+ -+#define Wait_USART_Ready() while (!(UCSR1A & (1< -+ -+void uart_init(void); -+int uart_write_char(char c, FILE* stream); -+void uart_new_line(void); -+ -+#endif /* UART_H_ */ -diff --git a/atusb/usb/atu2.c b/atusb/usb/atu2.c -new file mode 100644 -index 0000000..98158bf ---- /dev/null -+++ b/atusb/usb/atu2.c -@@ -0,0 +1,247 @@ -+/* -+ * fw/usb/atu2.c - Chip-specific driver for Atmel ATxxxU2 USB chips -+ * -+ * Written 2008-2011, 2013-2014 by Werner Almesberger -+ * Copyright 2008-2011, 2013-2014 Werner Almesberger -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ */ -+ -+/* -+ * Known issues: -+ * - no suspend/resume -+ * - we don't call back after failed transmissions, -+ * - we don't reset the EP buffer after failed receptions -+ * - enumeration often encounters an error -71 (from which it recovers) -+ */ -+ -+#include -+#include -+ -+#define F_CPU 8000000UL -+#include -+ -+#include -+#include -+#include "usb.h" -+#include "board.h" -+ -+ -+#ifndef NULL -+#define NULL 0 -+#endif -+ -+#if 1 -+#define BUG_ON(cond) do { if (cond) panic(); } while (0) -+#else -+#define BUG_ON(cond) -+#endif -+ -+ -+struct ep_descr eps[NUM_EPS]; -+ -+ -+static uint16_t usb_read_word(void) -+{ -+ uint8_t low; -+ -+ low = UEDATX; -+ return low | UEDATX << 8; -+} -+ -+ -+static void enable_addr(void *user) -+{ -+ while (!(UEINTX & (1 << TXINI))); -+ UDADDR |= 1 << ADDEN; -+} -+ -+ -+void set_addr(uint8_t addr) -+{ -+ UDADDR = addr; -+ usb_send(&eps[0], NULL, 0, enable_addr, NULL); -+} -+ -+ -+void usb_ep_change(struct ep_descr *ep) -+{ -+ if (ep->state == EP_TX) { -+ UENUM = ep-eps; -+ UEIENX |= 1 << TXINE; -+ } -+} -+ -+ -+static bool ep_setup(void) -+{ -+ struct setup_request setup; -+ -+ BUG_ON(UEBCLX < 8); -+ -+ setup.bmRequestType = UEDATX; -+ setup.bRequest = UEDATX; -+ setup.wValue = usb_read_word(); -+ setup.wIndex = usb_read_word(); -+ setup.wLength = usb_read_word(); -+ -+ if (!handle_setup(&setup)) -+ return 0; -+ if (!(setup.bmRequestType & 0x80) && eps[0].state == EP_IDLE) -+ usb_send(&eps[0], NULL, 0, NULL, NULL); -+ return 1; -+} -+ -+ -+static bool ep_rx(struct ep_descr *ep) -+{ -+ uint8_t size; -+ -+ size = UEBCLX; -+ if (size > ep->end-ep->buf) -+ return 0; -+ while (size--) -+ *ep->buf++ = UEDATX; -+ if (ep->buf == ep->end) { -+ ep->state = EP_IDLE; -+ if (ep->callback) -+ ep->callback(ep->user); -+// if (ep == &eps[0]) -+ usb_send(ep, NULL, 0, NULL, NULL); -+ } -+ return 1; -+} -+ -+ -+static void ep_tx(struct ep_descr *ep) -+{ -+ uint8_t size = ep->end-ep->buf; -+ uint8_t left; -+ -+ if (size > ep->size) -+ size = ep->size; -+ for (left = size; left; left--) -+ UEDATX = *ep->buf++; -+ if (size == ep->size) -+ return; -+ ep->state = EP_IDLE; -+} -+ -+ -+static void handle_ep(int n) -+{ -+ struct ep_descr *ep = eps+n; -+ uint8_t mask; -+ -+ UENUM = n; -+ if (UEINTX & (1 << RXSTPI)) { -+ /* @@@ EP_RX. EP_TX: cancel */ -+ ep->state = EP_IDLE; -+ if (!ep_setup()) -+ goto stall; -+ UEINTX = ~(1 << RXSTPI); -+ } -+ if (UEINTX & (1 << RXOUTI)) { -+ /* @@ EP_TX: cancel */ -+ if (ep->state != EP_RX) -+ goto stall; -+ if (!ep_rx(ep)) -+ goto stall; -+ /* @@@ gcc 4.5.2 wants this cast */ -+ UEINTX = (uint8_t) ~(1 << RXOUTI | 1 << FIFOCON); -+ } -+ if (UEINTX & (1 << STALLEDI)) { -+ ep->state = EP_IDLE; -+ UEINTX = ~(1 << STALLEDI); -+ } -+ if (UEINTX & (1 << TXINI)) { -+ /* @@ EP_RX: cancel (?) */ -+ if (ep->state == EP_TX) { -+ ep_tx(ep); -+ mask = 1 << TXINI; -+ if (n) -+ mask |= 1 << FIFOCON; -+ UEINTX = ~mask; -+ if (ep->state == EP_IDLE && ep->callback) -+ ep->callback(ep->user); -+ } else { -+ UEIENX &= ~(1 << TXINE); -+ } -+ } -+ return; -+ -+stall: -+ UEINTX = ~(1 << RXSTPI | 1 << RXOUTI | 1 << STALLEDI); -+ ep->state = EP_IDLE; -+ UECONX |= 1 << STALLRQ; -+} -+ -+ -+void ep_init(void) -+{ -+ UENUM = 0; -+ UECONX = (1 << RSTDT) | (1 << EPEN); /* enable */ -+ UECFG0X = 0; /* control, direction is ignored */ -+ UECFG1X = 3 << EPSIZE0; /* 64 bytes */ -+ UECFG1X |= 1 << ALLOC; -+ -+ while (!(UESTA0X & (1 << CFGOK))); -+ -+ UEIENX = -+ (1 << RXSTPE) | (1 << RXOUTE) | (1 << STALLEDE) | (1 << TXINE); -+ -+ eps[0].state = EP_IDLE; -+ eps[0].size = 64; -+ -+#ifndef BOOT_LOADER -+ -+ UENUM = 1; -+ UECONX = (1 << RSTDT) | (1 << EPEN); /* enable */ -+ UECFG0X = (1 << EPTYPE1) | (1 << EPDIR); /* bulk IN */ -+ UECFG1X = 3 << EPSIZE0; /* 64 bytes */ -+ UECFG1X |= 1 << ALLOC; -+ -+ while (!(UESTA0X & (1 << CFGOK))); -+ -+ UEIENX = (1 << STALLEDE) | (1 << TXINE); -+ -+ eps[1].state = EP_IDLE; -+ eps[1].size = 64; -+ -+#endif -+} -+ -+ -+ISR(USB_GEN_vect) -+{ -+ uint8_t flags; -+ -+ flags = UDINT; -+ if (flags & (1 << EORSTI)) { -+ if (user_reset) -+ user_reset(); -+ ep_init(); -+ UDINT = ~(1 << EORSTI); -+ } -+} -+ -+ -+ISR(USB_COM_vect) -+{ -+ uint8_t flags, i; -+ -+ flags = UEINT; -+ for (i = 0; i != NUM_EPS; i++) -+ if (flags & (1 << i)) -+ handle_ep(i); -+} -+ -+ -+void usb_reset(void) -+{ -+ UDCON |= 1 << DETACH; /* detach the pull-up */ -+ _delay_ms(1); -+} -diff --git a/atusb/usb/dfu.c b/atusb/usb/dfu.c -new file mode 100644 -index 0000000..c84a28d ---- /dev/null -+++ b/atusb/usb/dfu.c -@@ -0,0 +1,260 @@ -+/* -+ * boot/dfu.c - DFU protocol engine -+ * -+ * Written 2008-2011, 2013-2015 by Werner Almesberger -+ * Copyright 2008-2011, 2013-2015 Werner Almesberger -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ */ -+ -+/* -+ * http://www.usb.org/developers/devclass_docs/DFU_1.1.pdf -+ */ -+ -+/* -+ * A few, erm, shortcuts: -+ * -+ * - we don't bother with the app* states since DFU is all this firmware does -+ * - after DFU_DNLOAD, we just block until things are written, so we never -+ * enter dfuDNLOAD_SYNC or dfuDNBUSY -+ * - no dfuMANIFEST_SYNC, dfuMANIFEST, or dfuMANIFEST_WAIT_RESET -+ * - to keep our buffers small, we only accept EP0-sized blocks -+ */ -+ -+ -+#include -+#include -+ -+#include "usb.h" -+#include "dfu.h" -+ -+#include "board.h" -+ -+ -+#ifndef NULL -+#define NULL 0 -+#endif -+ -+#define debug(...) -+#define error(...) -+ -+ -+#ifndef DFU_ALT_SETTINGS -+#define DFU_ALT_SETTINGS 1 -+#endif -+ -+#ifndef DFU_ALT_NAME_0_IDX -+#define DFU_ALT_NAME_0_IDX 0 -+#endif -+ -+#ifndef DFU_ALT_NAME_1_IDX -+#define DFU_ALT_NAME_1_IDX 0 -+#endif -+ -+#ifndef DFU_ALT_NAME_2_IDX -+#define DFU_ALT_NAME_2_IDX 0 -+#endif -+ -+ -+const uint8_t device_descriptor[] = { -+ 18, /* bLength */ -+ USB_DT_DEVICE, /* bDescriptorType */ -+ LE(0x100), /* bcdUSB */ -+ USB_CLASS_APP_SPEC, /* bDeviceClass */ -+ 0x00, /* bDeviceSubClass (per interface) */ -+ 0x00, /* bDeviceProtocol (per interface) */ -+ EP0_SIZE, /* bMaxPacketSize */ -+ LE(DFU_USB_VENDOR), /* idVendor */ -+ LE(DFU_USB_PRODUCT), /* idProduct */ -+ LE(0x0001), /* bcdDevice */ -+ 0, /* iManufacturer */ -+ 0, /* iProduct */ -+#ifdef HAS_BOARD_SERNUM -+ 1, /* iSerialNumber */ -+#else -+ 0, /* iSerialNumber */ -+#endif -+ 1 /* bNumConfigurations */ -+}; -+ -+ -+const uint8_t config_descriptor[] = { -+ 9, /* bLength */ -+ USB_DT_CONFIG, /* bDescriptorType */ -+ LE(9+9*DFU_ALT_SETTINGS), /* wTotalLength */ -+ 1, /* bNumInterfaces */ -+ 1, /* bConfigurationValue (> 0 !) */ -+ 0, /* iConfiguration */ -+// USB_ATTR_SELF_POWERED | USB_ATTR_BUS_POWERED, -+ USB_ATTR_BUS_POWERED, /* bmAttributes */ -+ ((BOARD_MAX_mA)+1)/2, /* bMaxPower */ -+ -+ /* Interface #0 */ -+ -+ DFU_ITF_DESCR(0, 0, dfu_proto_dfu, DFU_ALT_NAME_0_IDX) -+#if DFU_ALT_SETTINGS > 1 -+ DFU_ITF_DESCR(0, 1, dfu_proto_dfu, DFU_ALT_NAME_1_IDX) -+#endif -+#if DFU_ALT_SETTINGS > 2 -+ DFU_ITF_DESCR(0, 2, dfu_proto_dfu, DFU_ALT_NAME_2_IDX) -+#endif -+}; -+ -+ -+static uint16_t next_block = 0; -+static bool did_download; -+ -+ -+static uint8_t buf[EP0_SIZE]; -+ -+ -+static void block_write(void *user) -+{ -+ uint16_t *size = user; -+ -+ dfu_flash_ops->write(buf, *size); -+} -+ -+ -+static bool block_receive(uint16_t length) -+{ -+ static uint16_t size; -+ -+ if (!dfu_flash_ops->can_write(length)) { -+ dfu.state = dfuERROR; -+ dfu.status = errADDRESS; -+ return 0; -+ } -+ if (length > EP0_SIZE) { -+ dfu.state = dfuERROR; -+ dfu.status = errUNKNOWN; -+ return 0; -+ } -+ size = length; -+ usb_recv(&eps[0], buf, size, block_write, &size); -+ return 1; -+} -+ -+ -+static bool block_transmit(uint16_t length) -+{ -+ uint16_t got; -+ -+ if (length > EP0_SIZE) { -+ dfu.state = dfuERROR; -+ dfu.status = errUNKNOWN; -+ return 1; -+ } -+ got = dfu_flash_ops->read(buf, length); -+ if (got < length) { -+ length = got; -+ dfu.state = dfuIDLE; -+ } -+ usb_send(&eps[0], buf, length, NULL, NULL); -+ return 1; -+} -+ -+ -+static bool my_setup(const struct setup_request *setup) -+{ -+ bool ok; -+ -+ switch (setup->bmRequestType | setup->bRequest << 8) { -+ case DFU_TO_DEV(DFU_DETACH): -+ debug("DFU_DETACH\n"); -+ /* -+ * The DFU spec says thay this is sent in protocol 1 only. -+ * However, dfu-util also sends it to get out of DFU mode, -+ * so we just don't make a fuss and ignore it. -+ */ -+ return 1; -+ case DFU_TO_DEV(DFU_DNLOAD): -+ debug("DFU_DNLOAD\n"); -+ if (dfu.state == dfuIDLE) { -+ next_block = setup->wValue; -+ dfu_flash_ops->start(); -+ } -+ else if (dfu.state != dfuDNLOAD_IDLE) { -+ error("bad state\n"); -+ return 0; -+ } -+ if (dfu.state != dfuIDLE && setup->wValue == next_block-1) { -+ debug("retransmisson\n"); -+ return 1; -+ } -+ if (setup->wValue != next_block) { -+ debug("bad block (%d vs. %d)\n", -+ setup->wValue, next_block); -+ dfu.state = dfuERROR; -+ dfu.status = errUNKNOWN; -+ return 1; -+ } -+ if (!setup->wLength) { -+ debug("DONE\n"); -+ dfu_flash_ops->end_write(); -+ dfu.state = dfuIDLE; -+ did_download = 1; -+ return 1; -+ } -+ ok = block_receive(setup->wLength); -+ next_block++; -+ dfu.state = dfuDNLOAD_IDLE; -+ return ok; -+ case DFU_FROM_DEV(DFU_UPLOAD): -+ debug("DFU_UPLOAD\n"); -+ if (dfu.state == dfuIDLE) { -+ next_block = setup->wValue; -+ dfu_flash_ops->start(); -+ } -+ else if (dfu.state != dfuUPLOAD_IDLE) -+ return 0; -+ if (dfu.state != dfuIDLE && setup->wValue == next_block-1) { -+ debug("retransmisson\n"); -+ /* @@@ try harder */ -+ dfu.state = dfuERROR; -+ dfu.status = errUNKNOWN; -+ return 1; -+ } -+ if (setup->wValue != next_block) { -+ debug("bad block (%d vs. %d)\n", -+ setup->wValue, next_block); -+ dfu.state = dfuERROR; -+ dfu.status = errUNKNOWN; -+ return 1; -+ } -+ ok = block_transmit(setup->wLength); -+ next_block++; -+ dfu.state = dfuUPLOAD_IDLE; -+ return ok; -+ case DFU_TO_DEV(DFU_ABORT): -+ debug("DFU_ABORT\n"); -+ dfu.state = dfuIDLE; -+ dfu.status = OK; -+ return 1; -+ default: -+ return dfu_setup_common(setup); -+ } -+} -+ -+ -+static void my_reset(void) -+{ -+#if 0 -+ /* @@@ not nice -- think about where this should go */ -+ extern void run_payload(void); -+ -+ if (did_download) -+ run_payload(); -+#endif -+} -+ -+ -+void dfu_init(void) -+{ -+ user_setup = my_setup; -+ user_get_descriptor = dfu_my_descr; -+ user_reset = my_reset; -+} -diff --git a/atusb/usb/dfu.h b/atusb/usb/dfu.h -new file mode 100644 -index 0000000..bc35bbc ---- /dev/null -+++ b/atusb/usb/dfu.h -@@ -0,0 +1,119 @@ -+/* -+ * boot/dfu.h - DFU protocol constants and data structures -+ * -+ * Written 2008, 2011, 2013-2015 by Werner Almesberger -+ * Copyright 2008, 2011, 2013-2015 Werner Almesberger -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ */ -+ -+ -+#ifndef DFU_H -+#define DFU_H -+ -+#include -+#include -+ -+#include "usb.h" -+ -+ -+enum dfu_request { -+ DFU_DETACH, -+ DFU_DNLOAD, -+ DFU_UPLOAD, -+ DFU_GETSTATUS, -+ DFU_CLRSTATUS, -+ DFU_GETSTATE, -+ DFU_ABORT, -+}; -+ -+ -+enum dfu_status { -+ OK, -+ errTARGET, -+ errFILE, -+ errWRITE, -+ errERASE, -+ errCHECK_ERASED, -+ errPROG, -+ errVERIFY, -+ errADDRESS, -+ errNOTDONE, -+ errFIRMWARE, -+ errVENDOR, -+ errUSBR, -+ errPOR, -+ errUNKNOWN, -+ errSTALLEDPKT, -+}; -+ -+ -+enum dfu_state { -+ appIDLE, -+ appDETACH, -+ dfuIDLE, -+ dfuDNLOAD_SYNC, -+ dfuDNBUSY, -+ dfuDNLOAD_IDLE, -+ dfuMANIFEST_SYNC, -+ dfuMANIFEST, -+ dfuMANIFEST_WAIT_RESET, -+ dfuUPLOAD_IDLE, -+ dfuERROR -+}; -+ -+enum dfu_itf_proto { -+ dfu_proto_runtime = 1, /* Runtime protocol */ -+ dfu_proto_dfu = 2, /* DFU mode protocol */ -+}; -+ -+ -+#define DFU_DT_FUNCTIONAL 0x21 /* DFU FUNCTIONAL descriptor type */ -+ -+ -+#define DFU_TO_DEV(req) (0x21 | (req) << 8) -+#define DFU_FROM_DEV(req) (0xa1 | (req) << 8) -+ -+ -+struct dfu { -+ uint8_t status; /* bStatus */ -+ uint8_t toL, toM, toH; /* bwPollTimeout */ -+ uint8_t state; /* bState */ -+ uint8_t iString; -+}; -+ -+ -+#define DFU_ITF_DESCR(itf, alt, proto, idx) \ -+ 9, /* bLength */ \ -+ USB_DT_INTERFACE, /* bDescriptorType */ \ -+ (itf), /* bInterfaceNumber */ \ -+ (alt), /* bAlternateSetting */ \ -+ 0, /* bNumEndpoints */ \ -+ 0xfe, /* bInterfaceClass (application specific) */ \ -+ 0x01, /* bInterfaceSubClass (device fw upgrade) */ \ -+ (proto), /* bInterfaceProtocol (dfu_proto_*) */ \ -+ (idx), /* iInterface */ -+ -+ -+struct dfu_flash_ops { -+ void (*start)(void); -+ bool (*can_write)(uint16_t size); -+ void (*write)(const uint8_t *buf, uint16_t size); -+ void (*end_write)(void); -+ uint16_t (*read)(uint8_t *buf, uint16_t size); -+}; -+ -+extern struct dfu dfu; -+extern const struct dfu_flash_ops *dfu_flash_ops; -+ -+ -+bool dfu_setup_common(const struct setup_request *setup); -+bool dfu_my_descr(uint8_t type, uint8_t index, const uint8_t **reply, -+ uint8_t *size); -+ -+void dfu_init(void); -+ -+#endif /* !DFU_H */ -diff --git a/atusb/usb/dfu_common.c b/atusb/usb/dfu_common.c -new file mode 100644 -index 0000000..9b6feef ---- /dev/null -+++ b/atusb/usb/dfu_common.c -@@ -0,0 +1,101 @@ -+/* -+ * boot/dfu_common.c - DFU protocol engine parts common to App/DFU -+ * -+ * Written 2008-2011, 2013-2014 by Werner Almesberger -+ * Copyright 2008-2011, 2013-2014 Werner Almesberger -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ */ -+ -+/* -+ * http://www.usb.org/developers/devclass_docs/DFU_1.1.pdf -+ */ -+ -+/* -+ * A few, erm, shortcuts: -+ * -+ * - we don't bother with the app* states since DFU is all this firmware does -+ * - after DFU_DNLOAD, we just block until things are written, so we never -+ * enter dfuDNLOAD_SYNC or dfuDNBUSY -+ * - no dfuMANIFEST_SYNC, dfuMANIFEST, or dfuMANIFEST_WAIT_RESET -+ * - to keep our buffers small, we only accept EP0-sized blocks -+ */ -+ -+ -+#include -+#include -+ -+#include "usb.h" -+#include "dfu.h" -+ -+#include "board.h" -+#include "../sernum.h" -+ -+ -+#ifndef NULL -+#define NULL 0 -+#endif -+ -+#define debug(...) -+#define error(...) -+ -+ -+static const uint8_t functional_descriptor[] = { -+ 9, /* bLength */ -+ DFU_DT_FUNCTIONAL, /* bDescriptorType */ -+ 0xf, /* bmAttributes (claim omnipotence :-) */ -+ LE(0xffff), /* wDetachTimeOut (we're very patient) */ -+ LE(EP0_SIZE), /* wTransferSize */ -+ LE(0x101), /* bcdDFUVersion */ -+}; -+ -+ -+/* -+ * The worst-case activity would be flashing a one page and erasing another -+ * one, would should take less than 10 ms. A 100 ms timeout ought to be plenty. -+ */ -+ -+struct dfu dfu = { -+ OK, /* bStatus */ -+ LE(100), 0, /* bwPollTimeout, 100 ms */ -+ dfuIDLE, /* bState */ -+ 0, /* iString */ -+}; -+ -+ -+bool dfu_setup_common(const struct setup_request *setup) -+{ -+ switch (setup->bmRequestType | setup->bRequest << 8) { -+ case DFU_FROM_DEV(DFU_GETSTATUS): -+ debug("DFU_GETSTATUS\n"); -+ usb_send(&eps[0], (uint8_t *) &dfu, sizeof(dfu), NULL, NULL); -+ return 1; -+ case DFU_TO_DEV(DFU_CLRSTATUS): -+ debug("DFU_CLRSTATUS\n"); -+ dfu.state = dfuIDLE; -+ dfu.status = OK; -+ return 1; -+ case DFU_FROM_DEV(DFU_GETSTATE): -+ debug("DFU_GETSTATE\n"); -+ usb_send(&eps[0], &dfu.state, 1, NULL, NULL); -+ return 1; -+ default: -+ error("DFU rt %x, rq%x ?\n", -+ setup->bmRequestType, setup->bRequest); -+ return 0; -+ } -+} -+ -+ -+bool dfu_my_descr(uint8_t type, uint8_t index, const uint8_t **reply, -+ uint8_t *size) -+{ -+ if (type != DFU_DT_FUNCTIONAL) -+ return sernum_get_descr(type, index, reply, size); -+ *reply = functional_descriptor; -+ *size = sizeof(functional_descriptor); -+ return 1; -+} -diff --git a/atusb/usb/usb.c b/atusb/usb/usb.c -new file mode 100644 -index 0000000..543d8c2 ---- /dev/null -+++ b/atusb/usb/usb.c -@@ -0,0 +1,181 @@ -+/* -+ * fw/usb/usb.c - USB hardware setup and standard device requests -+ * -+ * Written 2008-2011, 2013, 2015 by Werner Almesberger -+ * Copyright 2008-2011, 2013, 2015 Werner Almesberger -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ */ -+ -+/* -+ * Known issues: -+ * - no suspend/resume -+ * - should support EP clearing and stalling -+ */ -+ -+#include -+#include -+ -+#include "usb.h" -+#include "board.h" -+ -+ -+#ifndef NULL -+#define NULL 0 -+#endif -+ -+#if 1 -+extern void panic(void); -+#define BUG_ON(cond) do { if (cond) panic(); } while (0) -+#else -+#define BUG_ON(cond) -+#endif -+ -+bool (*user_setup)(const struct setup_request *setup); -+void (*user_set_interface)(int nth); -+bool (*user_get_descriptor)(uint8_t type, uint8_t index, -+ const uint8_t **reply, uint8_t *size); -+void (*user_reset)(void); -+ -+ -+void usb_io(struct ep_descr *ep, enum ep_state state, uint8_t *buf, -+ uint8_t size, void (*callback)(void *user), void *user) -+{ -+ BUG_ON(ep->state); -+ ep->state = state; -+ ep->buf = buf; -+ ep->end = buf+size; -+ ep->callback = callback; -+ ep->user = user; -+ usb_ep_change(ep); -+} -+ -+ -+static bool get_descriptor(uint8_t type, uint8_t index, uint16_t length) -+{ -+ const uint8_t *reply; -+ uint8_t size; -+ -+ switch (type) { -+ case USB_DT_DEVICE: -+ reply = device_descriptor; -+ size = reply[0]; -+ break; -+ case USB_DT_CONFIG: -+ if (index) -+ return 0; -+ reply = config_descriptor; -+ size = reply[2]; -+ break; -+ default: -+ if (!user_get_descriptor) -+ return 0; -+ if (!user_get_descriptor(type, index, &reply, &size)) -+ return 0; -+ } -+ if (length < size) -+ size = length; -+ usb_send(&eps[0], reply, size, NULL, NULL); -+ return 1; -+} -+ -+ -+bool handle_setup(const struct setup_request *setup) -+{ -+ switch (setup->bmRequestType | setup->bRequest << 8) { -+ -+ /* -+ * Device request -+ * -+ * See http://www.beyondlogic.org/usbnutshell/usb6.htm -+ */ -+ -+ case FROM_DEVICE(GET_STATUS): -+ if (setup->wLength != 2) -+ return 0; -+ usb_send(&eps[0], "\000", 2, NULL, NULL); -+ break; -+ case TO_DEVICE(CLEAR_FEATURE): -+ break; -+ case TO_DEVICE(SET_FEATURE): -+ return 0; -+ case TO_DEVICE(SET_ADDRESS): -+ set_addr(setup->wValue); -+ break; -+ case FROM_DEVICE(GET_DESCRIPTOR): -+ case FROM_INTERFACE(GET_DESCRIPTOR): -+ if (!get_descriptor(setup->wValue >> 8, setup->wValue, -+ setup->wLength)) -+ return 0; -+ break; -+ case TO_DEVICE(SET_DESCRIPTOR): -+ return 0; -+ case FROM_DEVICE(GET_CONFIGURATION): -+ usb_send(&eps[0], "", 1, NULL, NULL); -+ break; -+ case TO_DEVICE(SET_CONFIGURATION): -+ if (setup->wValue != config_descriptor[5]) -+ return 0; -+ break; -+ -+ /* -+ * Interface request -+ */ -+ -+ case FROM_INTERFACE(GET_STATUS): -+ return 0; -+ case TO_INTERFACE(CLEAR_FEATURE): -+ return 0; -+ case TO_INTERFACE(SET_FEATURE): -+ return 0; -+ case FROM_INTERFACE(GET_INTERFACE): -+ return 0; -+ case TO_INTERFACE(SET_INTERFACE): -+ { -+ const uint8_t *interface_descriptor = -+ config_descriptor+9; -+ const uint8_t *p; -+ int i; -+ -+ i = 0; -+ for (p = interface_descriptor; -+ p != config_descriptor+config_descriptor[2]; -+ p += p[0]) { -+ if (p[1] != USB_DT_INTERFACE) -+ continue; -+ if (p[2] == setup->wIndex && -+ p[3] == setup->wValue) { -+ if (user_set_interface) -+ user_set_interface(i); -+ return 1; -+ } -+ i++; -+ } -+ return 0; -+ } -+ break; -+ -+ /* -+ * Endpoint request -+ */ -+ -+ case FROM_ENDPOINT(GET_STATUS): -+ return 0; -+ case TO_ENDPOINT(CLEAR_FEATURE): -+ return 0; -+ case TO_ENDPOINT(SET_FEATURE): -+ return 0; -+ case FROM_ENDPOINT(SYNCH_FRAME): -+ return 0; -+ -+ default: -+ if (user_setup) -+ return user_setup(setup); -+ return 0; -+ } -+ -+ return 1; -+} -diff --git a/atusb/usb/usb.h b/atusb/usb/usb.h -new file mode 100644 -index 0000000..cb40f9e ---- /dev/null -+++ b/atusb/usb/usb.h -@@ -0,0 +1,189 @@ -+/* -+ * fw/usb//usb.h - USB hardware setup and standard device requests -+ * -+ * Written 2008, 2009, 2011, 2013, 2015 by Werner Almesberger -+ * Copyright 2008, 2009, 2011, 2013, 2015 Werner Almesberger -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ */ -+ -+ -+#ifndef USB_H -+#define USB_H -+ -+ -+#include -+#include -+ -+ -+/* -+ * Packet identifier types -+ */ -+ -+#define PID_OUT 0x1 -+#define PID_IN 0x9 -+#define PID_SOF 0x5 -+#define PID_SETUP 0xd -+#define PID_DATA0 0x3 -+#define PID_DATA1 0xb -+#define PID_ACK 0x2 -+#define PID_NAK 0xa -+#define PID_STALL 0xe -+ -+/* -+ * Descriptor types -+ * -+ * Reuse libusb naming scheme (/usr/include/usb.h) -+ */ -+ -+#define USB_DT_DEVICE 1 -+#define USB_DT_CONFIG 2 -+#define USB_DT_STRING 3 -+#define USB_DT_INTERFACE 4 -+#define USB_DT_ENDPOINT 5 -+ -+/* -+ * Device classes -+ * -+ * Reuse libusb naming scheme (/usr/include/usb.h) -+ */ -+ -+#define USB_CLASS_PER_INTERFACE 0 -+#define USB_CLASS_COMM 2 -+#define USB_CLASS_HID 3 -+#define USB_CLASS_MASS_STORAGE 8 -+#define USB_CLASS_HUB 9 -+#define USB_CLASS_DATA 10 -+#define USB_CLASS_APP_SPEC 0xfe -+#define USB_CLASS_VENDOR_SPEC 0xff -+ -+/* -+ * Configuration attributes -+ */ -+ -+#define USB_ATTR_BUS_POWERED 0x80 -+#define USB_ATTR_SELF_POWERED 0x40 -+#define USB_ATTR_REMOTE_WAKEUP 0x20 -+ -+/* -+ * Endpoint type -+ */ -+ -+#define USB_ENDPOINT_TYPE_CONTROL 0 -+#define USB_ENDPOINT_TYPE_ISOCHRONOUS 1 -+#define USB_ENDPOINT_TYPE_BULK 2 -+#define USB_ENDPOINT_TYPE_INTERRUPT 3 -+ -+/* -+ * Setup request types -+ */ -+ -+#define TO_DEVICE(req) (0x00 | (req) << 8) -+#define FROM_DEVICE(req) (0x80 | (req) << 8) -+#define TO_INTERFACE(req) (0x01 | (req) << 8) -+#define FROM_INTERFACE(req) (0x81 | (req) << 8) -+#define TO_ENDPOINT(req) (0x02 | (req) << 8) -+#define FROM_ENDPOINT(req) (0x82 | (req) << 8) -+ -+/* -+ * Setup requests -+ */ -+ -+#define GET_STATUS 0x00 -+#define CLEAR_FEATURE 0x01 -+#define SET_FEATURE 0x03 -+#define SET_ADDRESS 0x05 -+#define GET_DESCRIPTOR 0x06 -+#define SET_DESCRIPTOR 0x07 -+#define GET_CONFIGURATION 0x08 -+#define SET_CONFIGURATION 0x09 -+#define GET_INTERFACE 0x0a -+#define SET_INTERFACE 0x0b -+#define SYNCH_FRAME 0x0c -+ -+/* -+ * USB Language ID codes -+ * -+ * http://www.usb.org/developers/docs/USB_LANGIDs.pdf -+ */ -+ -+#define USB_LANGID_ENGLISH_US 0x409 -+ -+ -+/* -+ * Odd. sdcc seems to think "x" assumes the size of the destination, i.e., -+ * uint8_t. Hence the cast. -+ */ -+ -+#define LE(x) ((uint16_t) (x) & 0xff), ((uint16_t) (x) >> 8) -+ -+#define LO(x) (((uint8_t *) &(x))[0]) -+#define HI(x) (((uint8_t *) &(x))[1]) -+ -+ -+#ifdef LOW_SPEED -+#define EP0_SIZE 8 -+#else -+#define EP0_SIZE 64 -+#endif -+ -+#define EP1_SIZE 64 /* simplify */ -+ -+ -+enum ep_state { -+ EP_IDLE, -+ EP_RX, -+ EP_TX, -+ EP_STALL, -+}; -+ -+struct ep_descr { -+ enum ep_state state; -+ uint8_t *buf; -+ uint8_t *end; -+ uint8_t size; -+ void (*callback)(void *user); -+ void *user; -+}; -+ -+struct setup_request { -+ uint8_t bmRequestType; -+ uint8_t bRequest; -+ uint16_t wValue; -+ uint16_t wIndex; -+ uint16_t wLength; -+}; -+ -+ -+extern const uint8_t device_descriptor[]; -+extern const uint8_t config_descriptor[]; -+extern struct ep_descr eps[]; -+ -+extern bool (*user_setup)(const struct setup_request *setup); -+extern void (*user_set_interface)(int nth); -+extern bool (*user_get_descriptor)(uint8_t type, uint8_t index, -+ const uint8_t **reply, uint8_t *size); -+extern void (*user_reset)(void); -+ -+ -+#define usb_left(ep) ((ep)->end-(ep)->buf) -+#define usb_send(ep, buf, size, callback, user) \ -+ usb_io(ep, EP_TX, (void *) buf, size, callback, user) -+#define usb_recv(ep, buf, size, callback, user) \ -+ usb_io(ep, EP_RX, buf, size, callback, user) -+ -+void usb_io(struct ep_descr *ep, enum ep_state state, uint8_t *buf, -+ uint8_t size, void (*callback)(void *user), void *user); -+ -+bool handle_setup(const struct setup_request *setup); -+void set_addr(uint8_t addr); -+void usb_ep_change(struct ep_descr *ep); -+void usb_reset(void); -+void usb_init(void); -+ -+void ep_init(void); -+ -+#endif /* !USB_H */ -diff --git a/atusb/version.h b/atusb/version.h -new file mode 100644 -index 0000000..8fd6a2c ---- /dev/null -+++ b/atusb/version.h -@@ -0,0 +1,23 @@ -+/* -+ * fw/version.h - Automatically generated version string -+ * -+ * Written 2008, 2011 by Werner Almesberger -+ * Copyright 2008, 2011 Werner Almesberger -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ */ -+ -+ -+#ifndef VERSION_H -+#define VERSION_H -+ -+#include -+ -+ -+extern const char *build_date; -+extern const uint16_t build_number; -+ -+#endif /* !VERSION_H */ --- -2.26.0 - diff --git a/libre/linux-libre-firmware/0003-Update-INSTALL-document.patch b/libre/linux-libre-firmware/0003-Update-INSTALL-document.patch deleted file mode 100644 index 038b518..0000000 --- a/libre/linux-libre-firmware/0003-Update-INSTALL-document.patch +++ /dev/null @@ -1,44 +0,0 @@ -From 02054c86c9fce8978cc7372b758339191cc9f6d6 Mon Sep 17 00:00:00 2001 -From: Jason Self -Date: Thu, 4 Jul 2019 16:34:28 -0700 -Subject: [PATCH 3/8] Update INSTALL document - -To include the correct package name for GCC-AVR and improved -descriptions. ---- - INSTALL | 6 +++--- - 1 file changed, 3 insertions(+), 3 deletions(-) - -diff --git a/INSTALL b/INSTALL -index 7fb1116..9ea6dad 100644 ---- a/INSTALL -+++ b/INSTALL -@@ -16,14 +16,14 @@ In order to build everything you will need the following on the host - system: - - * A C/C++ compiler, like GCC -- * AVR-GCC -- * Standard C library for AVR-GCC - * Cmake - * GNU Bison/YACC - * GNU Flex - * GNU Gperf - * GNU Make - * GNU Wget -+ * GNU C cross-compiler for AVR -+ * Standard C library for Atmel AVR - * GNU C cross-compiler for ARM: - - arm-linux-gnueabi-gcc - - arm-linux-gnueabi-ld -@@ -34,7 +34,7 @@ system: - - On GNU/Linux distros that use apt you can install these with: - -- apt install avr-gcc avr-libc binutils-arm-linux-gnueabi \ -+ apt install gcc-avr avr-libc binutils-arm-linux-gnueabi \ - binutils-arm-none-eabi bison cmake flex g++ gcc \ - gcc-arm-linux-gnueabi gcc-arm-none-eabi gperf make wget - --- -2.26.0 - diff --git a/libre/linux-libre-firmware/0004-atusb-Build-updates.patch b/libre/linux-libre-firmware/0004-atusb-Build-updates.patch deleted file mode 100644 index 6411835..0000000 --- a/libre/linux-libre-firmware/0004-atusb-Build-updates.patch +++ /dev/null @@ -1,73 +0,0 @@ -From d6bb7bf71810db1b02dec985e8383594c193f55f Mon Sep 17 00:00:00 2001 -From: Jason Self -Date: Thu, 4 Jul 2019 16:57:58 -0700 -Subject: [PATCH 4/8] atusb: Build updates - -Update the root level Makefile to both invoke "make atusb.dfu" when -building. - -Update the INSTALL document to mention the dependency on dfu-util. - -Update the root level Makefile to install atusb.dfu if it's compiled. -Even though the kernel itself doesn't load the firmware into the -device this will ensure that pre-compiled firmware is included in the -release tarballs. ---- - INSTALL | 5 +++-- - Makefile | 3 ++- - 2 files changed, 5 insertions(+), 3 deletions(-) - -diff --git a/INSTALL b/INSTALL -index 9ea6dad..70c4381 100644 ---- a/INSTALL -+++ b/INSTALL -@@ -17,6 +17,7 @@ system: - - * A C/C++ compiler, like GCC - * Cmake -+ * dfu-util - Device Firmware Upgrade Utilities - * GNU Bison/YACC - * GNU Flex - * GNU Gperf -@@ -35,7 +36,7 @@ system: - On GNU/Linux distros that use apt you can install these with: - - apt install gcc-avr avr-libc binutils-arm-linux-gnueabi \ -- binutils-arm-none-eabi bison cmake flex g++ gcc \ -+ binutils-arm-none-eabi bison cmake dfu-util flex g++ gcc \ - gcc-arm-linux-gnueabi gcc-arm-none-eabi gperf make wget - - CARL9170 Firmware Configuration -@@ -48,7 +49,7 @@ atusb: Firmware for the ATUSB IEEE 802.15.4 USB Adapter - - To flash the firmware you need dfu-util on the host. Issue - -- make dfu -+ dfu-util -d 20b7:1540 -D atusb.dfu - - right after plugging the device into the USB port while the red led is - still on. -diff --git a/Makefile b/Makefile -index 8474b30..51f708d 100644 ---- a/Makefile -+++ b/Makefile -@@ -37,7 +37,7 @@ ath9k_htc: ath9k_htc_toolchain - cd ath9k_htc && $(MAKE) -C target_firmware - - atusb: -- cd atusb && $(MAKE) -+ cd atusb && $(MAKE) atusb.dfu - - av7110: - cd av7110 && $(MAKE) -@@ -103,6 +103,7 @@ install: - ln -s ath9k_htc/htc_9271-1.4.0.fw $(prefix)/htc_9271.fw; fi; - if [ -a ath9k_htc/target_firmware/htc_7010.fw ]; then $(install_program) -D ath9k_htc/target_firmware/htc_7010.fw $(prefix)/ath9k_htc/htc_7010-1.4.0.fw && \ - ln -s ath9k_htc/htc_7010-1.4.0.fw $(prefix)/htc_7010.fw; fi; -+ if [ -a atusb/atusb.dfu ]; then $(install_program) -D atusb/atusb.dfu $(prefix)/atusb/atusb.dfu; fi; - if [ -a av7110/bootcode.bin ]; then $(install_program) -D av7110/bootcode.bin $(prefix)/av7110/bootcode.bin; fi; - if [ -a cis/3CCFEM556.cis ]; then $(install_program) -D cis/3CCFEM556.cis $(prefix)/cis/3CCFEM556.cis; fi; - if [ -a cis/3CXEM556.cis ]; then $(install_program) -D cis/3CXEM556.cis $(prefix)/cis/3CXEM556.cis; fi; --- -2.26.0 - diff --git a/libre/linux-libre-firmware/0006-Makefile-Change-spaces-for-atusb-to-tab.patch b/libre/linux-libre-firmware/0006-Makefile-Change-spaces-for-atusb-to-tab.patch deleted file mode 100644 index 8dafb6b..0000000 --- a/libre/linux-libre-firmware/0006-Makefile-Change-spaces-for-atusb-to-tab.patch +++ /dev/null @@ -1,25 +0,0 @@ -From 06147f83be16e7ab5e08c280c61e015b60bd0acc Mon Sep 17 00:00:00 2001 -From: Jason Self -Date: Thu, 4 Jul 2019 17:14:30 -0700 -Subject: [PATCH 6/8] Makefile: Change spaces for atusb to tab - ---- - Makefile | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/Makefile b/Makefile -index 51f708d..b5c5d05 100644 ---- a/Makefile -+++ b/Makefile -@@ -103,7 +103,7 @@ install: - ln -s ath9k_htc/htc_9271-1.4.0.fw $(prefix)/htc_9271.fw; fi; - if [ -a ath9k_htc/target_firmware/htc_7010.fw ]; then $(install_program) -D ath9k_htc/target_firmware/htc_7010.fw $(prefix)/ath9k_htc/htc_7010-1.4.0.fw && \ - ln -s ath9k_htc/htc_7010-1.4.0.fw $(prefix)/htc_7010.fw; fi; -- if [ -a atusb/atusb.dfu ]; then $(install_program) -D atusb/atusb.dfu $(prefix)/atusb/atusb.dfu; fi; -+ if [ -a atusb/atusb.dfu ]; then $(install_program) -D atusb/atusb.dfu $(prefix)/atusb/atusb.dfu; fi; - if [ -a av7110/bootcode.bin ]; then $(install_program) -D av7110/bootcode.bin $(prefix)/av7110/bootcode.bin; fi; - if [ -a cis/3CCFEM556.cis ]; then $(install_program) -D cis/3CCFEM556.cis $(prefix)/cis/3CCFEM556.cis; fi; - if [ -a cis/3CXEM556.cis ]; then $(install_program) -D cis/3CXEM556.cis $(prefix)/cis/3CXEM556.cis; fi; --- -2.26.0 - diff --git a/libre/linux-libre-firmware/0007-Makefile-Add-atusb-to-all.patch b/libre/linux-libre-firmware/0007-Makefile-Add-atusb-to-all.patch deleted file mode 100644 index 1da3c00..0000000 --- a/libre/linux-libre-firmware/0007-Makefile-Add-atusb-to-all.patch +++ /dev/null @@ -1,25 +0,0 @@ -From b43de635d524d519e47bcba78d081a0f811584b1 Mon Sep 17 00:00:00 2001 -From: Jason Self -Date: Thu, 4 Jul 2019 18:34:05 -0700 -Subject: [PATCH 7/8] Makefile: Add atusb to 'all' - ---- - Makefile | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/Makefile b/Makefile -index b5c5d05..b5bfb47 100644 ---- a/Makefile -+++ b/Makefile -@@ -19,7 +19,7 @@ install_program=install - - .PHONY: all test clean install a56 as31 aica ath9k_htc_toolchain ath9k_htc atusb av7110 b43-tools carl9170fw-toolchain carl9170fw cis-tools cis dsp56k ihex2fw isci keyspan_pda openfwwf usbdux - --all: aica ath9k_htc av7110 carl9170fw cis dsp56k isci keyspan_pda openfwwf usbdux -+all: aica ath9k_htc atusb av7110 carl9170fw cis dsp56k isci keyspan_pda openfwwf usbdux - - a56: - cd a56 && $(MAKE) --- -2.26.0 - diff --git a/libre/linux-libre-firmware/0008-Makefile-Set-shell-to-bin-bash.patch b/libre/linux-libre-firmware/0008-Makefile-Set-shell-to-bin-bash.patch deleted file mode 100644 index 6029cd5..0000000 --- a/libre/linux-libre-firmware/0008-Makefile-Set-shell-to-bin-bash.patch +++ /dev/null @@ -1,25 +0,0 @@ -From a4d24e3a224a19404bc3ac98389ff376198c85ef Mon Sep 17 00:00:00 2001 -From: Jason Self -Date: Thu, 4 Jul 2019 18:37:45 -0700 -Subject: [PATCH 8/8] Makefile: Set shell to /bin/bash - ---- - Makefile | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/Makefile b/Makefile -index b5bfb47..5e38d94 100644 ---- a/Makefile -+++ b/Makefile -@@ -13,7 +13,7 @@ - # You should have received a copy of the GNU General Public License - # along with this program. If not, see . - --shell=/bin/sh -+shell=/bin/bash - prefix=/lib/firmware - install_program=install - --- -2.26.0 - diff --git a/libre/linux-libre-firmware/PKGBUILD b/libre/linux-libre-firmware/PKGBUILD index 68e9145..1c99507 100644 --- a/libre/linux-libre-firmware/PKGBUILD +++ b/libre/linux-libre-firmware/PKGBUILD @@ -4,18 +4,18 @@ # Contributor: Luke Shumaker pkgname=linux-libre-firmware -pkgver=1.3.1 -pkgrel=2 +pkgver=1.4 +pkgrel=1 epoch=1 pkgdesc='Firmware files for Linux-libre' arch=(any) url='https://jxself.org/firmware' license=(GPL3) -makedepends=(arm-linux-gnueabi-gcc # av7110 - arm-none-eabi-gcc # aica - avr-gcc avr-libc dfu-util # atusb - sh-elf-gcc sh-elf-newlib cmake # carl9170fw - xtensa-elf-gcc # ath9k_htc +makedepends=(arm-linux-gnueabi-gcc # av7110 + arm-none-eabi-gcc # aica + avr-gcc avr-libc dfu-util # atusb + sh-elf-gcc sh-elf-newlib cmake # carl9170fw + xtensa-elf-gcc # ath9k_htc ) optdepends=('dfu-util: to flash the atusb firmware') provides=(linux-firmware) @@ -36,29 +36,13 @@ conflicts=(linux-firmware ath9k-htc-firmware) replaces=(${conflicts[@]}) options=(!buildflags !makeflags) -source=( - "$url/$pkgname-$pkgver.tar.lz"{,.asc} - 0001-Update-carl9170-to-latest-upstream.patch - 0002-Add-firmware-for-the-ATUSB-IEEE-802.15.4-USB-Adapter.patch - 0003-Update-INSTALL-document.patch - 0004-atusb-Build-updates.patch - 0006-Makefile-Change-spaces-for-atusb-to-tab.patch - 0007-Makefile-Add-atusb-to-all.patch - 0008-Makefile-Set-shell-to-bin-bash.patch -) -sha512sums=('d827ec7024b4900dcdf6af8cdd4e72b02596d0ade5c2262460cd573785300498e6aa655b9a59cd22e38a6a787826a564ae33acfac52e68df1d082445e66f18df' - 'SKIP' - '07263a406cb15c9f91f41c8fb6d4307875665b8106adf526353d64306611458e11ce311842caa9efa623091c897ec9f87cfe54584c9c47590195867958cf4086' - 'a4e8752cfee8dfd0b17ff798d2b5ea7a773ebcf688f7614d1c1a92fe7f092c626a289069a472bc873a77c9cf52f1e37953b0ba47c37a9dfb2a763a695ca77625' - '1665ce62de148383fe4f30aa5714ef6bb1dfd4eed110415995069830b36a4b1aafb05e4cd6cf428dc0817e2affb91740e41b3fab8d2385683d6c18790bbf5afd' - '0168ba0f3a8f3938a96b7f72d081283ca04b7ba90c5474d8ccf0716d6964137980f49623c5489271158a48827319a20ee4f19bd94f5bb956ee97d5ba637070c1' - 'fa006627935beb7ae78fad5b63423a54e4eae384761ff618fff173250fb5d0c7eef9d5a707733d037edc95259ef59c9053c4245b80a004928b6809ea1cb43cf8' - '8014d9eccb4c5193d1b4b056e163b5631c207adc78522e413650eb053c90e7b9e333c9e5cb6f73b63985e27020f4c69e7b791176702c55f711f6db95387e6bff' - '59560f16978b2fd7d8c828d7609ee4f71cbdc902b70cfb87feca686958dd4df05c61c5e1bfa5e0c2a060f23185a0b9e5d07d487e172764767cdc4b26a6240b79') +source=("$url/$pkgname-$pkgver.tar.lz"{,.asc}) +sha512sums=('3b4c8afb63c55f05df0b2686459c6bb2c0cb56db8384d5527506ff4a14b8de80e1a3037a9b57cccccd6953d869c6a71a6500c4c7b735253ea0b57c79854d9457' + 'SKIP') validpgpkeys=('F611A908FFA165C699584ED49D0DB31B545A3198') # Jason Self prepare(){ - cd $pkgname-$pkgver/src + cd "$pkgname-$pkgver/src" local src for src in "${source[@]}"; do @@ -69,25 +53,27 @@ prepare(){ patch -Np1 < "$srcdir/$src" done - # Use our cross compilers and build carl9170fw with the default config + # Use our cross compilers sed -e 's|$PWD/../toolchain/inst/bin/||g' \ - -e 's|${CMAKE_SOURCE_DIR}/toolchain/inst/bin/||g' \ + -i ath9k_htc/target_firmware/configure + sed -e 's|${CMAKE_SOURCE_DIR}/toolchain/inst/bin/||g' \ -e '/CMAKE_FIND_ROOT_PATH/d' \ - -e 's/: ath9k_htc_toolchain$/:/' \ + -i carl9170fw/extra/sh-elf-linux.cmake + + # Remove toolchains and build carl9170fw with the default config + sed -e 's/: ath9k_htc_toolchain$/:/' \ -e 's/: carl9170fw-toolchain$/:/' \ -e '/cd carl9170fw && .\/autogen.sh$/ s/$/ --alldefconfig/' \ - -i Makefile \ - ath9k_htc/target_firmware/configure \ - carl9170fw/extra/sh-elf-linux.cmake + -i Makefile } build(){ - make -C $pkgname-$pkgver/src + make -C "$pkgname-$pkgver/src" } package(){ - cd $pkgname-$pkgver/src + cd "$pkgname-$pkgver/src" - make prefix=$pkgdir/usr/lib/firmware install - install -Dm644 WHENCE $pkgdir/usr/share/licenses/$pkgname/WHENCE + make prefix="$pkgdir/usr/lib/firmware install" + install -Dm644 WHENCE "$pkgdir/usr/share/licenses/$pkgname/WHENCE" } From ee2601c074ecde286b965de7b07947b9e02e0fb8 Mon Sep 17 00:00:00 2001 From: Parabola automatic package builder Date: Oct 14 2021 23:32:53 +0000 Subject: [PATCH 16/73] Update libre/your-freedom --- diff --git a/libre/your-freedom/PKGBUILD b/libre/your-freedom/PKGBUILD index 98779ff..f833775 100644 --- a/libre/your-freedom/PKGBUILD +++ b/libre/your-freedom/PKGBUILD @@ -4,8 +4,8 @@ pkgname=your-freedom pkgdesc="This package conflicts with every nonfree package known to date to ensure your system is free." license=('GPL3') url="https://git.parabola.nu/blacklist.git" -pkgver=20210928 -_gitver=7d2e711096135e4f5c160fc739e23fd1ec7a3c07 +pkgver=20211014 +_gitver=00c03ece88c2cb7d7d45fae45d01950378cfef91 pkgrel=1 arch=('any') @@ -13,7 +13,7 @@ install=${pkgname}.install makedepends=(librelib) source=(blacklist-${_gitver}.txt::https://git.parabola.nu/blacklist.git/plain/blacklist.txt?id=${_gitver}) -sha512sums=('746be9d938a565a99dc3a2a273b580e0c7c2026a14f727bb09a996eacfbb40ce25ca62db58caa462f5546c60dd7be6b5f87cd65e2ab3fd843d4662a77f3ce827') +sha512sums=('b697ec86dbf8dbe8abfba4124be696eab60267961b7adf513a8033ed8f9978ecd52d4c719dd2a0af72274f9e683951cee45901ac372dc07a6b0f46a6d635a3c9') package() { From 9ffd901c919987a590cfea19a5c2bb6be81ddaaa Mon Sep 17 00:00:00 2001 From: David P Date: Oct 18 2021 12:43:46 +0000 Subject: [PATCH 17/73] linux-libre-lts: don't build htmldocs (armv7h) Signed-off-by: David P --- diff --git a/libre/linux-libre-lts/PKGBUILD b/libre/linux-libre-lts/PKGBUILD index 55a4c7d..653a7ac 100644 --- a/libre/linux-libre-lts/PKGBUILD +++ b/libre/linux-libre-lts/PKGBUILD @@ -9,6 +9,8 @@ # Based on linux-lts package +# NOTE: Don't build htmldocs due to an error in sphinx (armv7h only) + _replacesarchkernel=('linux%') # '%' gets replaced with kernel suffix _replacesoldkernels=() # '%' gets replaced with kernel suffix _replacesoldmodules=() # '%' gets replaced with kernel suffix @@ -152,7 +154,9 @@ prepare() { build() { cd $_srcname make all - make htmldocs + if ! [ "$CARCH" = armv7h ]; then + make htmldocs + fi } _package() { @@ -316,7 +320,8 @@ _package-docs() { ln -sr "$builddir/Documentation" "$pkgdir/usr/share/doc/$pkgbase" } -pkgname=("$pkgbase" "$pkgbase-headers" "$pkgbase-docs") +pkgname=("$pkgbase" "$pkgbase-headers") +[[ $CARCH = armv7h ]] || pkgname+=("$pkgbase-docs") for _p in "${pkgname[@]}"; do eval "package_$_p() { $(declare -f "_package${_p#$pkgbase}") From 19dca05f8d753ad809799eb995cefbd691de6688 Mon Sep 17 00:00:00 2001 From: Parabola automatic package builder Date: Oct 18 2021 21:44:34 +0000 Subject: [PATCH 18/73] Update libre/your-freedom --- diff --git a/libre/your-freedom/PKGBUILD b/libre/your-freedom/PKGBUILD index f833775..89aefa8 100644 --- a/libre/your-freedom/PKGBUILD +++ b/libre/your-freedom/PKGBUILD @@ -4,8 +4,8 @@ pkgname=your-freedom pkgdesc="This package conflicts with every nonfree package known to date to ensure your system is free." license=('GPL3') url="https://git.parabola.nu/blacklist.git" -pkgver=20211014 -_gitver=00c03ece88c2cb7d7d45fae45d01950378cfef91 +pkgver=20211018 +_gitver=c5b0ce0101756d82b19daab6df3c2b653793cdf6 pkgrel=1 arch=('any') @@ -13,7 +13,7 @@ install=${pkgname}.install makedepends=(librelib) source=(blacklist-${_gitver}.txt::https://git.parabola.nu/blacklist.git/plain/blacklist.txt?id=${_gitver}) -sha512sums=('b697ec86dbf8dbe8abfba4124be696eab60267961b7adf513a8033ed8f9978ecd52d4c719dd2a0af72274f9e683951cee45901ac372dc07a6b0f46a6d635a3c9') +sha512sums=('97b90ef448c9c41b93e939b5be42d170c8836473ebefb0f24adf3a1eb13c5a832486cbe063f191f3b536b384a2c16c5d2e952931d71e27b1240aa1b20f571703') package() { From a405b5371c9e46f92f794a95b778a56356df9123 Mon Sep 17 00:00:00 2001 From: Parabola automatic package builder Date: Oct 18 2021 22:00:21 +0000 Subject: [PATCH 19/73] Update libre/your-freedom --- diff --git a/libre/your-freedom/PKGBUILD b/libre/your-freedom/PKGBUILD index 89aefa8..1067a48 100644 --- a/libre/your-freedom/PKGBUILD +++ b/libre/your-freedom/PKGBUILD @@ -4,8 +4,8 @@ pkgname=your-freedom pkgdesc="This package conflicts with every nonfree package known to date to ensure your system is free." license=('GPL3') url="https://git.parabola.nu/blacklist.git" -pkgver=20211018 -_gitver=c5b0ce0101756d82b19daab6df3c2b653793cdf6 +pkgver=20211018.1 +_gitver=e3eeb82dc48d248e18ff240e778d77b765b336ce pkgrel=1 arch=('any') @@ -13,7 +13,7 @@ install=${pkgname}.install makedepends=(librelib) source=(blacklist-${_gitver}.txt::https://git.parabola.nu/blacklist.git/plain/blacklist.txt?id=${_gitver}) -sha512sums=('97b90ef448c9c41b93e939b5be42d170c8836473ebefb0f24adf3a1eb13c5a832486cbe063f191f3b536b384a2c16c5d2e952931d71e27b1240aa1b20f571703') +sha512sums=('e93f5f1476068a261ff84b2a07d222fd09587ac97adae0236e309d3a72a26b47421e99aabfebef8029c1c24449634e274996a548e0db6eb16e67f08795a56084') package() { From fcd3033e675f4ef197a0cfe2dddbb6be9d12e76a Mon Sep 17 00:00:00 2001 From: Omar Vega Ramos Date: Oct 27 2021 07:15:06 +0000 Subject: [PATCH 20/73] systemd-249.5-2.parabola1: updating version --- diff --git a/libre/systemd/PKGBUILD b/libre/systemd/PKGBUILD index 2ea8fb9..85072d6 100644 --- a/libre/systemd/PKGBUILD +++ b/libre/systemd/PKGBUILD @@ -11,10 +11,10 @@ pkgname+=('systemd-common' 'systemd-udev') # We split Arch's systemd-libs into systemd-$X, for the following $X: _systemd_libs=('libsystemd' 'libudev' 'nss-systemd' 'nss-myhostname' 'nss-mymachines' 'nss-resolve') pkgname+=("${_systemd_libs[@]/#/systemd-}") -_tag='91ea8d825553fc1ecfc19448be24a4da56b13d00' # git rev-parse v${_tag_name} -_tag_name=249.4 +_tag='f1d37a5c491d85255e9996960dc2889a15022b78' # git rev-parse v${_tag_name} +_tag_name=249.5 pkgver="${_tag_name/-/}" -pkgrel=1 +pkgrel=2 pkgrel+=.parabola1 arch=('x86_64') arch+=('i686' 'armv7h' 'ppc64le') @@ -91,6 +91,11 @@ sha512sums=('SKIP' '28a5b3fc9e2c5cec9267bb96725c73ee77788514f140c0cf8df765af64bc8130dd02f4863d9128ac45d54256b2ab4f2b06d1a3f65660ce1dfba5727618cd1839') _backports=( + # coredumpctl: stop truncating information about coredump + '473627e1c9fcdf8f819ced2bb79cb7e9ff598b0c' + + # Revert "core: Check unit start rate limiting earlier" + '4fa9d8f14523982482386d398d2b2669902f2098' ) _reverts=( From abb944bd774546492d607eb0bd34af92048dca18 Mon Sep 17 00:00:00 2001 From: bill-auger Date: Oct 29 2021 21:44:39 +0000 Subject: [PATCH 21/73] [p11-kit]: rebuild against latest libffi --- diff --git a/nonsystemd/p11-kit/PKGBUILD b/nonsystemd/p11-kit/PKGBUILD index 90a986f..cd1bbe9 100644 --- a/nonsystemd/p11-kit/PKGBUILD +++ b/nonsystemd/p11-kit/PKGBUILD @@ -5,7 +5,7 @@ pkgbase=p11-kit pkgname=(p11-kit libp11-kit) pkgver=0.24.0 -pkgrel=1 +pkgrel=2 pkgrel+=.nonsystemd1 pkgdesc="Loads and enumerates PKCS#11 modules" url="https://p11-glue.freedesktop.org" From 9ab3befd9790b7448d6cf289c7a093a1eccf9385 Mon Sep 17 00:00:00 2001 From: Parabola automatic package builder Date: Oct 31 2021 22:51:45 +0000 Subject: [PATCH 22/73] Update libre/your-freedom --- diff --git a/libre/your-freedom/PKGBUILD b/libre/your-freedom/PKGBUILD index 1067a48..43eb22f 100644 --- a/libre/your-freedom/PKGBUILD +++ b/libre/your-freedom/PKGBUILD @@ -4,8 +4,8 @@ pkgname=your-freedom pkgdesc="This package conflicts with every nonfree package known to date to ensure your system is free." license=('GPL3') url="https://git.parabola.nu/blacklist.git" -pkgver=20211018.1 -_gitver=e3eeb82dc48d248e18ff240e778d77b765b336ce +pkgver=20211031 +_gitver=3cc30bc2bfdaa2cdb47d3ab78d6ffd855307d50c pkgrel=1 arch=('any') @@ -13,7 +13,7 @@ install=${pkgname}.install makedepends=(librelib) source=(blacklist-${_gitver}.txt::https://git.parabola.nu/blacklist.git/plain/blacklist.txt?id=${_gitver}) -sha512sums=('e93f5f1476068a261ff84b2a07d222fd09587ac97adae0236e309d3a72a26b47421e99aabfebef8029c1c24449634e274996a548e0db6eb16e67f08795a56084') +sha512sums=('4a43619f7b19dfc2a12f0b769c097518f93d1a88159716148c0a2477df69ff6369fd8426a5ccadae8c4e9a152306f2724763a13183aca6a10f2c21292be1d1c9') package() { From 1b8d19ba6a2296fe102df7ff40b260a768ea21ed Mon Sep 17 00:00:00 2001 From: bill-auger Date: Nov 05 2021 20:20:57 +0000 Subject: [PATCH 23/73] [texlive-bin]: rebuild against latest poppler --- diff --git a/libre/texlive-bin/PKGBUILD b/libre/texlive-bin/PKGBUILD index 180a65b..2893476 100644 --- a/libre/texlive-bin/PKGBUILD +++ b/libre/texlive-bin/PKGBUILD @@ -17,7 +17,7 @@ pkgname=('texlive-bin' 'libsynctex') pkgver=2021.58686 pkgrel=3 -pkgrel+=.parabola6 +pkgrel+=.parabola7 license=('GPL') arch=('x86_64') arch+=('armv7h' 'i686') From a362bc628758f5dd846e898f7d5981f6ceb2449b Mon Sep 17 00:00:00 2001 From: bill-auger Date: Nov 05 2021 20:21:05 +0000 Subject: [PATCH 24/73] [texlive-bin]: rebuild against latest poppler --- diff --git a/libre/texlive-bin/PKGBUILD b/libre/texlive-bin/PKGBUILD index 2893476..7f86e84 100644 --- a/libre/texlive-bin/PKGBUILD +++ b/libre/texlive-bin/PKGBUILD @@ -17,7 +17,7 @@ pkgname=('texlive-bin' 'libsynctex') pkgver=2021.58686 pkgrel=3 -pkgrel+=.parabola7 +pkgrel+=.parabola8 license=('GPL') arch=('x86_64') arch+=('armv7h' 'i686') From 4433d8a4ceba42f645be784f43dfc99b198e19ac Mon Sep 17 00:00:00 2001 From: Tyler Swagar Date: Nov 05 2021 20:21:06 +0000 Subject: [PATCH 25/73] updpkg: nonsystemd/eudev 3.2.9-2: add udev rule hook (fixes mkinitcpio) --- diff --git a/nonsystemd/eudev/PKGBUILD b/nonsystemd/eudev/PKGBUILD index dd8d97c..f5724b8 100644 --- a/nonsystemd/eudev/PKGBUILD +++ b/nonsystemd/eudev/PKGBUILD @@ -10,7 +10,7 @@ _udev_ver=243 pkgbase=eudev pkgname=('eudev' 'eudev-libudev') pkgver=3.2.9 -pkgrel=1 +pkgrel=2 pkgdesc="The userspace dev tools (udev) forked by Gentoo" arch=('x86_64' 'i686' 'armv7h') url="http://www.gentoo.org/proj/en/eudev/" @@ -27,7 +27,7 @@ source=("$pkgname-$pkgver.tar.gz::https://github.com/gentoo/eudev/archive/v${pkg 'udev-default-rules.patch') sha256sums=('7d281276b480da3935d1acb239748c2c9db01a8043aad7e918ce57a223d8cd24' '892ce43218e0a458981bbce451252c8987dc398e60b8de288e7542b8f2409c13' - '77dd1fd318b4456409aceb077f060b87944defb07cf39d29ad1968dc6f361875' + '5a3b1aa1aea4a836b0c549265bcdef73012d526d8de95a47d8ea5c5c2ca5e2e9' '2782bd3a7686596e98bd2d3fdef9d59d7d439682b87bbcc43b1fd1f5fabb3505' '13596caef6ed85b58de674ebe7c47d9c7dd676240de5cc28ef3ccee2ce1d8a90' '80c8f87549374d3bc7c2831b9e069b0005cc5ef90122c2d02e78e27c9bc1dbed' diff --git a/nonsystemd/eudev/initcpio_install b/nonsystemd/eudev/initcpio_install index 610b71c..f2c214b 100644 --- a/nonsystemd/eudev/initcpio_install +++ b/nonsystemd/eudev/initcpio_install @@ -1,5 +1,48 @@ #!/bin/bash +# This is in 'udev' and 'systemd' hook... Let's hope we have +# it in mkinitcpio soon. +# https://github.com/archlinux/mkinitcpio/pull/54 +add_udev_rule() { + # Add an udev rules file to the initcpio image. Dependencies on binaries + # will be discovered and added. + # $1: path to rules file (or name of rules file) + + local rules="$1" rule= key= value= binary= + + if [[ ${rules:0:1} != '/' ]]; then + rules=$(PATH=/usr/lib/udev/rules.d:/lib/udev/rules.d type -P "$1") + fi + if [[ -z $rules ]]; then + # complain about not found rules + return 1 + fi + + add_file "$rules" /usr/lib/udev/rules.d/"${rules##*/}" + + while IFS=, read -ra rule; do + # skip empty lines, comments + [[ -z $rule || $rule = @(+([[:space:]])|#*) ]] && continue + + for pair in "${rule[@]}"; do + IFS=' =' read -r key value <<< "$pair" + case $key in + RUN@({program}|+)|IMPORT{program}|ENV{REMOVE_CMD}) + # strip quotes + binary=${value//[\"\']/} + # just take the first word as the binary name + binary=${binary%% *} + [[ ${binary:0:1} == '$' ]] && continue + if [[ ${binary:0:1} != '/' ]]; then + binary=$(PATH=/usr/lib/udev:/lib/udev type -P "$binary") + fi + add_binary "$binary" + ;; + esac + done + done <"$rules" +} + build() { add_file "/etc/udev/udev.conf" add_binary /usr/bin/udevd From 952855bbc5aae73162a6dc2908883615cb39e41e Mon Sep 17 00:00:00 2001 From: bill-auger Date: Nov 05 2021 20:21:06 +0000 Subject: [PATCH 26/73] [mkinitcpio][eudev]: move systemd hook function 'add_dev_rule'~ from 'eudev' to 'mkinitcpio' this commit reverts the previous changes to the 'eudev' PKGBUILD 9001-udev.patch was originally made against the archlinux mkinitcpio project; so it probably should be in the mkinitcpio package # https://labs.parabola.nu/issues/3121 # https://github.com/archlinux/mkinitcpio/pull/54 # https://github.com/archlinux/mkinitcpio/commit/9ee1333a5f3302d7ddb004cf0909c94b4cff60ba.diff --- diff --git a/nonsystemd/eudev/PKGBUILD b/nonsystemd/eudev/PKGBUILD index f5724b8..dd8d97c 100644 --- a/nonsystemd/eudev/PKGBUILD +++ b/nonsystemd/eudev/PKGBUILD @@ -10,7 +10,7 @@ _udev_ver=243 pkgbase=eudev pkgname=('eudev' 'eudev-libudev') pkgver=3.2.9 -pkgrel=2 +pkgrel=1 pkgdesc="The userspace dev tools (udev) forked by Gentoo" arch=('x86_64' 'i686' 'armv7h') url="http://www.gentoo.org/proj/en/eudev/" @@ -27,7 +27,7 @@ source=("$pkgname-$pkgver.tar.gz::https://github.com/gentoo/eudev/archive/v${pkg 'udev-default-rules.patch') sha256sums=('7d281276b480da3935d1acb239748c2c9db01a8043aad7e918ce57a223d8cd24' '892ce43218e0a458981bbce451252c8987dc398e60b8de288e7542b8f2409c13' - '5a3b1aa1aea4a836b0c549265bcdef73012d526d8de95a47d8ea5c5c2ca5e2e9' + '77dd1fd318b4456409aceb077f060b87944defb07cf39d29ad1968dc6f361875' '2782bd3a7686596e98bd2d3fdef9d59d7d439682b87bbcc43b1fd1f5fabb3505' '13596caef6ed85b58de674ebe7c47d9c7dd676240de5cc28ef3ccee2ce1d8a90' '80c8f87549374d3bc7c2831b9e069b0005cc5ef90122c2d02e78e27c9bc1dbed' diff --git a/nonsystemd/eudev/initcpio_install b/nonsystemd/eudev/initcpio_install index f2c214b..610b71c 100644 --- a/nonsystemd/eudev/initcpio_install +++ b/nonsystemd/eudev/initcpio_install @@ -1,48 +1,5 @@ #!/bin/bash -# This is in 'udev' and 'systemd' hook... Let's hope we have -# it in mkinitcpio soon. -# https://github.com/archlinux/mkinitcpio/pull/54 -add_udev_rule() { - # Add an udev rules file to the initcpio image. Dependencies on binaries - # will be discovered and added. - # $1: path to rules file (or name of rules file) - - local rules="$1" rule= key= value= binary= - - if [[ ${rules:0:1} != '/' ]]; then - rules=$(PATH=/usr/lib/udev/rules.d:/lib/udev/rules.d type -P "$1") - fi - if [[ -z $rules ]]; then - # complain about not found rules - return 1 - fi - - add_file "$rules" /usr/lib/udev/rules.d/"${rules##*/}" - - while IFS=, read -ra rule; do - # skip empty lines, comments - [[ -z $rule || $rule = @(+([[:space:]])|#*) ]] && continue - - for pair in "${rule[@]}"; do - IFS=' =' read -r key value <<< "$pair" - case $key in - RUN@({program}|+)|IMPORT{program}|ENV{REMOVE_CMD}) - # strip quotes - binary=${value//[\"\']/} - # just take the first word as the binary name - binary=${binary%% *} - [[ ${binary:0:1} == '$' ]] && continue - if [[ ${binary:0:1} != '/' ]]; then - binary=$(PATH=/usr/lib/udev:/lib/udev type -P "$binary") - fi - add_binary "$binary" - ;; - esac - done - done <"$rules" -} - build() { add_file "/etc/udev/udev.conf" add_binary /usr/bin/udevd diff --git a/nonsystemd/mkinitcpio/9001-udev.patch b/nonsystemd/mkinitcpio/9001-udev.patch new file mode 100644 index 0000000..0de1067 --- /dev/null +++ b/nonsystemd/mkinitcpio/9001-udev.patch @@ -0,0 +1,52 @@ +$ curl https://github.com/archlinux/mkinitcpio/commit/9ee1333a5f3302d7ddb004cf0909c94b4cff60ba.diff +diff --git a/functions b/functions +index 9539a60..f95fb92 100644 +--- a/functions ++++ b/functions +@@ -625,6 +625,46 @@ add_binary() { + return 0 + } + ++add_udev_rule() { ++ # Add an udev rules file to the initcpio image. Dependencies on binaries ++ # will be discovered and added. ++ # $1: path to rules file (or name of rules file) ++ ++ local rules="$1" rule= key= value= binary= ++ ++ if [[ ${rules:0:1} != '/' ]]; then ++ rules=$(PATH=/usr/lib/udev/rules.d:/lib/udev/rules.d type -P "$rules") ++ fi ++ if [[ -z $rules ]]; then ++ # complain about not found rules ++ return 1 ++ fi ++ ++ add_file "$rules" /usr/lib/udev/rules.d/"${rules##*/}" ++ ++ while IFS=, read -ra rule; do ++ # skip empty lines, comments ++ [[ -z $rule || $rule = @(+([[:space:]])|#*) ]] && continue ++ ++ for pair in "${rule[@]}"; do ++ IFS=' =' read -r key value <<< "$pair" ++ case $key in ++ RUN@({program}|+)|IMPORT{program}|ENV{REMOVE_CMD}) ++ # strip quotes ++ binary=${value//[\"\']/} ++ # just take the first word as the binary name ++ binary=${binary%% *} ++ [[ ${binary:0:1} == '$' ]] && continue ++ if [[ ${binary:0:1} != '/' ]]; then ++ binary=$(PATH=/usr/lib/udev:/lib/udev type -P "$binary") ++ fi ++ add_binary "$binary" ++ ;; ++ esac ++ done ++ done <"$rules" ++} ++ + parse_config() { + # parse key global variables set by the config file. + From be3c650affdd1bc2c96e71acf48043263f175255 Mon Sep 17 00:00:00 2001 From: bill-auger Date: Nov 05 2021 20:21:08 +0000 Subject: [PATCH 27/73] [mkinitcpio]: housekeeping --- diff --git a/nonsystemd/mkinitcpio/9000-nonsystemd.patch b/nonsystemd/mkinitcpio/9000-nonsystemd.patch new file mode 100644 index 0000000..7be07c0 --- /dev/null +++ b/nonsystemd/mkinitcpio/9000-nonsystemd.patch @@ -0,0 +1,50 @@ + Makefile | 6 +----- + init_functions | 11 ----------- + 2 files changed, 1 insertion(+), 16 deletions(-) + +diff --git a/Makefile b/Makefile +index 9ef0f6a..f6e322e 100644 +--- a/Makefile ++++ b/Makefile +@@ -17,7 +17,6 @@ DIRS = \ + /usr/share/man/man5 \ + /usr/share/man/man1 \ + /usr/share/mkinitcpio \ +- /usr/lib/systemd/system/shutdown.target.wants \ + /usr/lib/tmpfiles.d \ + /usr/share/libalpm/hooks \ + /usr/share/libalpm/scripts +@@ -57,10 +56,7 @@ install: all + + cp -at $(DESTDIR)/usr/lib/initcpio hooks install + install -m644 -t $(DESTDIR)/usr/share/mkinitcpio mkinitcpio.d/* +- install -m644 systemd/mkinitcpio-generate-shutdown-ramfs.service \ +- $(DESTDIR)/usr/lib/systemd/system/mkinitcpio-generate-shutdown-ramfs.service +- ln -s ../mkinitcpio-generate-shutdown-ramfs.service \ +- $(DESTDIR)/usr/lib/systemd/system/shutdown.target.wants/mkinitcpio-generate-shutdown-ramfs.service ++ + install -m644 tmpfiles/mkinitcpio.conf $(DESTDIR)/usr/lib/tmpfiles.d/mkinitcpio.conf + + install -m755 50-mkinitcpio.install $(DESTDIR)/usr/lib/kernel/install.d/50-mkinitcpio.install +diff --git a/init_functions b/init_functions +index 8ad10c7..5579a49 100644 +--- a/init_functions ++++ b/init_functions +@@ -298,17 +298,6 @@ fsck_root() { + elif bitfield_has_bit "$fsckret" 128; then + err "fatal error invoking fsck" + fi +- +- # ensure that root is going to be mounted rw. Otherwise, systemd +- # might fsck the device again. Annoy the user so that they fix this. +- if [ "${rwopt:-ro}" != 'rw' ]; then +- echo "********************** WARNING **********************" +- echo "* *" +- echo "* The root device is not configured to be mounted *" +- echo "* read-write! It may be fsck'd again later. *" +- echo "* *" +- echo "*****************************************************" +- fi + fi + } + diff --git a/nonsystemd/mkinitcpio/PKGBUILD b/nonsystemd/mkinitcpio/PKGBUILD index 96b40ce..d4734c8 100644 --- a/nonsystemd/mkinitcpio/PKGBUILD +++ b/nonsystemd/mkinitcpio/PKGBUILD @@ -3,17 +3,23 @@ # Maintainer (Arch): Thomas Bächler # Maintainer: David P. + +# parabola changes and rationale: +# - replace 'systemd' dep with 'udev' + + pkgname=mkinitcpio pkgver=30 pkgrel=1 pkgrel+=.nonsystemd1 pkgdesc="Modular initramfs image creation utility" arch=('any') -url="https://projects.archlinux.org/mkinitcpio.git/" +url='https://github.com/archlinux/mkinitcpio' license=('GPL') makedepends=('asciidoc') depends=('awk' 'mkinitcpio-busybox>=1.19.4-2' 'kmod' 'util-linux>=2.23' 'libarchive' 'coreutils' - 'bash' 'diffutils' 'findutils' 'grep' 'filesystem>=2011.10-1' 'zstd' 'udev') + 'bash' 'diffutils' 'findutils' 'grep' 'filesystem>=2011.10-1' 'zstd' 'systemd') +depends=( ${depends[*]/systemd/udev} ) optdepends=('gzip: Use gzip compression for the initramfs image' 'xz: Use lzma or xz compression for the initramfs image' 'bzip2: Use bzip2 compression for the initramfs image' @@ -22,21 +28,22 @@ optdepends=('gzip: Use gzip compression for the initramfs image' 'mkinitcpio-nfs-utils: Support for root filesystem on NFS') provides=('initramfs') backup=('etc/mkinitcpio.conf') -source=("https://sources.archlinux.org/other/$pkgname/$pkgname-$pkgver.tar.gz"{,.sig} - nosystemd.patch) +source=("https://sources.archlinux.org/other/$pkgname/$pkgname-$pkgver.tar.gz"{,.sig}) +source+=(9000-nonsystemd.patch) install=mkinitcpio.install sha512sums=('ef43a8ddc01697fa43bede4eebad3271bbc89efa57ba7e4e9f321e8174ff2af74d857b308c5c0f37b42a91906c91c1b022f9a651c70d5d3e9dfc8dc441a60ee4' - 'SKIP' - 'f1ad7792b3b42397c2645e834d4b6c6a89122060455954d1ab56a71c673c3b8a8fdbbd6d722d30195211672b9075d09ac07ce6fb5d9723f56ce540709ebe4665') + 'SKIP') +sha512sums+=('f1ad7792b3b42397c2645e834d4b6c6a89122060455954d1ab56a71c673c3b8a8fdbbd6d722d30195211672b9075d09ac07ce6fb5d9723f56ce540709ebe4665') b2sums=('2001f9ac12bfa7369ad32842956cd21b2a786cd28133b6d3256e4aa77210c78ec6cac8a710ff8c2feb5a4797c1a33ce8c8c7dfabd84d7927c08bf8377e330300' - 'SKIP' - '92e1969572e0022bd257f44314045f57db47821d99a40ea1290749967b50ead1cb11adaa9b79f4286fbf20a94173e0ba7f2d4f88208e31d7a03a8de4ea014396') + 'SKIP') +b2sums+=('92e1969572e0022bd257f44314045f57db47821d99a40ea1290749967b50ead1cb11adaa9b79f4286fbf20a94173e0ba7f2d4f88208e31d7a03a8de4ea014396') validpgpkeys=('ECCAC84C1BA08A6CC8E63FBBF22FB1D78A77AEAB' # Giancarlo Razzolini '86CFFCA918CF3AF47147588051E8B148A9999C34') # Evangelos Foutras prepare() { cd $pkgname-$pkgver - patch -Np1 -i ../nosystemd.patch + + patch -Np1 -i ../9000-nonsystemd.patch } check() { diff --git a/nonsystemd/mkinitcpio/nosystemd.patch b/nonsystemd/mkinitcpio/nosystemd.patch deleted file mode 100644 index 7be07c0..0000000 --- a/nonsystemd/mkinitcpio/nosystemd.patch +++ /dev/null @@ -1,50 +0,0 @@ - Makefile | 6 +----- - init_functions | 11 ----------- - 2 files changed, 1 insertion(+), 16 deletions(-) - -diff --git a/Makefile b/Makefile -index 9ef0f6a..f6e322e 100644 ---- a/Makefile -+++ b/Makefile -@@ -17,7 +17,6 @@ DIRS = \ - /usr/share/man/man5 \ - /usr/share/man/man1 \ - /usr/share/mkinitcpio \ -- /usr/lib/systemd/system/shutdown.target.wants \ - /usr/lib/tmpfiles.d \ - /usr/share/libalpm/hooks \ - /usr/share/libalpm/scripts -@@ -57,10 +56,7 @@ install: all - - cp -at $(DESTDIR)/usr/lib/initcpio hooks install - install -m644 -t $(DESTDIR)/usr/share/mkinitcpio mkinitcpio.d/* -- install -m644 systemd/mkinitcpio-generate-shutdown-ramfs.service \ -- $(DESTDIR)/usr/lib/systemd/system/mkinitcpio-generate-shutdown-ramfs.service -- ln -s ../mkinitcpio-generate-shutdown-ramfs.service \ -- $(DESTDIR)/usr/lib/systemd/system/shutdown.target.wants/mkinitcpio-generate-shutdown-ramfs.service -+ - install -m644 tmpfiles/mkinitcpio.conf $(DESTDIR)/usr/lib/tmpfiles.d/mkinitcpio.conf - - install -m755 50-mkinitcpio.install $(DESTDIR)/usr/lib/kernel/install.d/50-mkinitcpio.install -diff --git a/init_functions b/init_functions -index 8ad10c7..5579a49 100644 ---- a/init_functions -+++ b/init_functions -@@ -298,17 +298,6 @@ fsck_root() { - elif bitfield_has_bit "$fsckret" 128; then - err "fatal error invoking fsck" - fi -- -- # ensure that root is going to be mounted rw. Otherwise, systemd -- # might fsck the device again. Annoy the user so that they fix this. -- if [ "${rwopt:-ro}" != 'rw' ]; then -- echo "********************** WARNING **********************" -- echo "* *" -- echo "* The root device is not configured to be mounted *" -- echo "* read-write! It may be fsck'd again later. *" -- echo "* *" -- echo "*****************************************************" -- fi - fi - } - From 9212c7ee032eeb48d75cfc435af281de8fae00e3 Mon Sep 17 00:00:00 2001 From: bill-auger Date: Nov 05 2021 20:25:43 +0000 Subject: [PATCH 28/73] [mkinitcpio]: add udev.patch --- diff --git a/nonsystemd/mkinitcpio/PKGBUILD b/nonsystemd/mkinitcpio/PKGBUILD index d4734c8..5ee11d9 100644 --- a/nonsystemd/mkinitcpio/PKGBUILD +++ b/nonsystemd/mkinitcpio/PKGBUILD @@ -6,11 +6,12 @@ # parabola changes and rationale: # - replace 'systemd' dep with 'udev' +# - emergency patch (udev patch) pkgname=mkinitcpio pkgver=30 -pkgrel=1 +pkgrel=2 pkgrel+=.nonsystemd1 pkgdesc="Modular initramfs image creation utility" arch=('any') @@ -30,13 +31,16 @@ provides=('initramfs') backup=('etc/mkinitcpio.conf') source=("https://sources.archlinux.org/other/$pkgname/$pkgname-$pkgver.tar.gz"{,.sig}) source+=(9000-nonsystemd.patch) +source+=(9001-udev.patch) install=mkinitcpio.install sha512sums=('ef43a8ddc01697fa43bede4eebad3271bbc89efa57ba7e4e9f321e8174ff2af74d857b308c5c0f37b42a91906c91c1b022f9a651c70d5d3e9dfc8dc441a60ee4' 'SKIP') sha512sums+=('f1ad7792b3b42397c2645e834d4b6c6a89122060455954d1ab56a71c673c3b8a8fdbbd6d722d30195211672b9075d09ac07ce6fb5d9723f56ce540709ebe4665') +sha512sums+=('695e70d85cf4c666b4325113f5f784b06002b0d9c626338b72bec9049a133cd5a2209d73193574da18d8ecac2fab54754cf499c18faaff5b20e2053a4d338b12') b2sums=('2001f9ac12bfa7369ad32842956cd21b2a786cd28133b6d3256e4aa77210c78ec6cac8a710ff8c2feb5a4797c1a33ce8c8c7dfabd84d7927c08bf8377e330300' 'SKIP') b2sums+=('92e1969572e0022bd257f44314045f57db47821d99a40ea1290749967b50ead1cb11adaa9b79f4286fbf20a94173e0ba7f2d4f88208e31d7a03a8de4ea014396') +b2sums+=('0f53c448b2ada7923c1dbab331a0b68a9e79f402bd7e16388a6ea2da4c7d93539405e4bd86eccdaaabcdfdbb0c01c5ca337ba226b81dd8dc91f6411c4e678c64') validpgpkeys=('ECCAC84C1BA08A6CC8E63FBBF22FB1D78A77AEAB' # Giancarlo Razzolini '86CFFCA918CF3AF47147588051E8B148A9999C34') # Evangelos Foutras @@ -44,6 +48,11 @@ prepare() { cd $pkgname-$pkgver patch -Np1 -i ../9000-nonsystemd.patch + + # https://labs.parabola.nu/issues/3121 + # https://github.com/archlinux/mkinitcpio/pull/54 + # https://github.com/archlinux/mkinitcpio/commit/9ee1333a5f3302d7ddb004cf0909c94b4cff60ba.diff + patch -Np1 -i ../9001-udev.patch } check() { From 1b0e012308564c5067bfbe822ae8fbab4d7d89a7 Mon Sep 17 00:00:00 2001 From: bill-auger Date: Nov 05 2021 20:25:44 +0000 Subject: [PATCH 29/73] [hydrogen]: upgrade to v1.1.0 --- diff --git a/libre/hydrogen/PKGBUILD b/libre/hydrogen/PKGBUILD index a049d12..96ad3da 100644 --- a/libre/hydrogen/PKGBUILD +++ b/libre/hydrogen/PKGBUILD @@ -5,12 +5,14 @@ # Maintainer: Omar Vega Ramos # Contributor: André Silva + # parabola changes and rationale: # - removed drumkits recommendation + pkgname=hydrogen -pkgver=1.0.2 -pkgrel=1 +pkgver=1.1.0 +pkgrel=2 pkgrel+=.parabola1 pkgdesc="An advanced drum machine" pkgdesc+=", without nonfree drumkits recommendation" @@ -25,8 +27,9 @@ makedepends=('alsa-lib' 'cmake' 'jack' 'ladspa' 'libarchive' 'liblo' 'liblrdf' checkdepends=('cppunit') optdepends=('new-session-manager: for session management') source=("${pkgname}-${pkgver}.tar.gz::https://github.com/${pkgname}-music/${pkgname}/archive/${pkgver}.tar.gz") -sha512sums=('7466b7ef1da4a078d67e1cab8744b2e0c3c048bb55e1febd22023c591ed9e2bf1cea41adc38a775a2ac60978735517a92df404d5ca8bb13603ea68c8da70daa9') -b2sums=('a4210e666b11e173eb0e02728f601ac9811941b558096ae76f3ad45b91c5db1ff942cddd536a50f8f2f456871d69f3a6c52d53c926f4547f13783ccbb4fc250d') +sha512sums=('116380be03f03a9294e278be5c7ede90fe088f21bf31db46a5e5df2684d11676e518200e6c4a187063c769f5b97950af9602b9b2694ca37788f73a2666265cc8') +b2sums=('8008336d2199bf36d9efca8875217e4a5f3d66c0274e25334525292e7864ca1dc4da75f86cbba981dfdbc19a3dbafebff503ce1ef597adae56fc467b44611a19') + prepare() { # Change to list with free licensed drumkits only From c2721cea86e032ff1affbbb1f265c5ca5f9a63b8 Mon Sep 17 00:00:00 2001 From: bill-auger Date: Nov 05 2021 20:25:45 +0000 Subject: [PATCH 30/73] [icedove]: upgrade to v78.5.0 --- diff --git a/libre/icedove/PKGBUILD b/libre/icedove/PKGBUILD index 856c00f..3621e8f 100644 --- a/libre/icedove/PKGBUILD +++ b/libre/icedove/PKGBUILD @@ -11,103 +11,95 @@ # Contributor: Isaac David # Contributor: bill-auger + # parabola changes and rationale: # - rebranded to icedove -# - added makedepends: quilt mozilla-searchplugins python2-blessings -# - added replaces, conflicts: thunderbird +# - added makedepends for branding: quilt mozilla-searchplugins imagemagick # - disabled tests, they break in an environment without network access. # - disabled geo-location + _pkgname=thunderbird pkgname=icedove -replaces=("$_pkgname") epoch=1 -pkgver=68.9.0 +pkgver=78.5.0 pkgrel=1 pkgrel+=.parabola1 -_brandingver=68.6 +_brandingver=78.5 _brandingrel=1 pkgdesc='Standalone mail and news reader based on Mozilla Thunderbird' -url="https://wiki.parabola.nu/$pkgname" +url=https://wiki.parabola.nu/${pkgname} arch=(x86_64) arch+=(i686 armv7h) license=(MPL GPL LGPL) -depends=(gtk3 libxt startup-notification mime-types dbus-glib alsa-lib - nss hunspell sqlite ttf-font) # libvpx -depends+=(libicui18n.so libicuuc.so) -makedepends=(unzip zip diffutils python python2 yasm nasm mesa imake libpulse inetutils xorg-server-xvfb - autoconf2.13 rust clang llvm gtk2 cbindgen nodejs) +depends=( + glibc gtk3 libgdk-3.so mime-types dbus libdbus-1.so dbus-glib alsa-lib nss + hunspell sqlite ttf-font libvpx libvpx.so zlib bzip2 botan libwebp libevent + libjpeg-turbo libffi nspr gcc-libs libx11 libxrender libxfixes libxext + libxcomposite libxdamage pango libpango-1.0.so cairo gdk-pixbuf2 icu + libicui18n.so libicuuc.so freetype2 libfreetype.so fontconfig + libfontconfig.so glib2 libglib-2.0.so pixman libpixman-1.so gnupg +) +makedepends=( + unzip zip diffutils python python-setuptools yasm nasm mesa imake libpulse + inetutils xorg-server-xvfb autoconf2.13 rust clang llvm gtk2 cbindgen nodejs + gawk perl findutils +) +makedepends[15]='llvm10' # FIXME: DEBUG: | rustup: error while loading shared libraries: libLLVM-10.so: cannot open shared object file: No such file or directory + # ERROR: Command `rustup which rustc` failed with exit status 127. makedepends+=(quilt mozilla-searchplugins imagemagick) -optdepends=('libcanberra: sound support') +replaces=(${_pkgname}) options=(!emptydirs !makeflags) source=(https://ftp.mozilla.org/pub/mozilla.org/thunderbird/releases/$pkgver/source/thunderbird-$pkgver.source.tar.xz{,.asc} - $pkgname.desktop) + $pkgname.desktop + vendor-prefs.js + distribution.ini + mozconfig.cfg + configure-fix-passing-system-bzip2-ldflags.patch + thunderbird-78.4.3-gpgme-double-armored-fix.patch) source+=(https://repo.parabola.nu/other/icedove/${pkgname}_$_brandingver-$_brandingrel.branding.tar.xz{,.sig} - libre-searchengines.patch - mozilla-1338795-regression.patch) + libre-searchengines.patch) source_armv7h=(arm-wasm-vfp.patch) -sha512sums=('891472c95ba6ff46061131504e89010da512a84b0e1dea0482e603fd4c87f11e099280a245c7dd9fc9320c48229c26602565c089d86f1a1f4271b29b6fc606f0' +sha512sums=('dae49dc0910dd017250643c920c79f03d3ef14bcbafde7fcdb3aaeba2b27a42ef6f88c8de8b961f8bb1c3d1a153bc8988ab43a39eb051d81839cf3b9e8373118' 'SKIP' 'a3c9815491d9bed0440c60f35867a5b8a2a1343521f288035fcc46e651a11b926c75a9eca2d262b43d510a7a7119709b53637f1b00ddbbee8e5b0a4b33d7b8fd' - '5784493253f9b2b231a7f18d7c3c4a4bb9aec7ac4fa801772ac223342676e388ae0c094b95d89d92c1bd38c2f19feb6f51e074d0ea20228a256b6240ecf34832' - 'SKIP' - '3f3160441aa17a50b8bf9f95a0fed8e3428864901d7368409903289f069f51fa94e24b6140bf17981b91b55df77c7c29adb870dda9f1596a77ce1a54a62cac00' - 'f4e892fc7af85877ef6cedd82313f6c0f335cb676cfb30badaa127c51aed00773212b99f1598f5709d6f481f12264463d6334bcde8e8da38ec1ea666622d28a1') + 'e21d30a8b79724eda3488ac2bf9dfeb0c7f6bf39e59c37f17574b529d33043765eb54408a55fcbf6f3afa7a58ca99124992d443cdff23ac5c9bdbff33c75f60f' + '31d46f91d9612d30d8553a19d0d309d743467e58b568a4aeea3caf6bd805ba00656561c84a1511c59bce1cf24ba323bfad2cd26a19985f1bf7dfb6d282642972' + '636aad861322df5cc3cb9e7b0142a56981b9eeb010bacaa10148d3f74f43bc3c26580475ee5646556acb9980028cb3ffcc1a15788f8039ca0fe57e261457c113' + 'e3ed2708b8354015cb3d2c81048d1ce4932d1effbe2b40efa7cf9b45c1b923b9fd708645e2f8aa0136a485a3f7ce6b396b85721aaf535a4a764fd5005fb7e222' + '92f4c5946f288b30728382830b99b91980ecd845d1606ab251bbdde5cf53387e966727a23f35a3bf7756ee77e72e478f3fb468668e8c412f552547eeb3408299') +sha512sums+=('3b757a7c5f1f4aa83405d0dc7bb69b72230e0e2c944f9b5aeff8e22cc8e6a053aeb16e3ca6f450bf5de763a1aba8028bf4f299bdfb6f203239605ea16c40b4ed' + 'SKIP' + 'be1bf98b65471aa36d1e4a55a24907ac99ddd401daee180dfe26302bad6928f6b4fe5dc6bbc7a96d884237bbd1f6205a4788a82b13fd7e929edbaf64200e0f52') sha512sums_armv7h=('c25883c4860e511a99d9fbfba5b824145c0862729101721605725f609ca2a41848b741dd100eff390f57031dc5f14af3ea30133de30f75cb20197c420ae20972') validpgpkeys=(14F26682D0916CDD81E37B6D61B7B526D98F0353) # Mozilla Software Releases -validpgpkeys+=(BFA8008A8265677063B11BF47171986E4B745536) # Andreas Grapentin +validpgpkeys+=(BFA8008A8265677063B11BF47171986E4B745536 # Andreas Grapentin + 3954A7AB837D0EA9CFA9798925DB7D9B5A8D4B40) # bill-auger + prepare() { cd $_pkgname-$pkgver - # see: https://labs.parabola.nu/issues/2267 - # upstream BR: https://bugzilla.mozilla.org/show_bug.cgi?id=1628296 - patch -Np1 -i "$srcdir"/mozilla-1338795-regression.patch - - cat >.mozconfig </ + # eg: "ddg", "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-labs", "parabola-packages", "parabola-wiki-en", "searx", "wikipedia", "yacy"|g' + local remove_engines_sed_cmd='s|.*"google".*"wikipedia".*| "ddg", "wikipedia"| ; s|.*"google".*"wikipedia\(-[^"]*\)".*| "ddg", "wikipedia\1"|' + local engines_cfg_dir=comm/mail/components/search/extensions + local engines_cfg_file=${engines_cfg_dir}/list.json + sed -i "${remove_engines_sed_cmd}" ${engines_cfg_file} + + # Sanity-check search-engines patching + local removed_engines_regex='Bing|Google|Seznam|Twitter|Yahoo|Yandex|Яндекс|amazon|bing|google|ebay|twitter' + local engines_err_msg="search-engines patch and/or sed command needs re-working" + ! grep -E ${removed_engines_regex} ${engines_cfg_file} > /dev/null || ! echo "${engines_err_msg}" + + # Delete unused search engine configs + find ${engines_cfg_dir} -mindepth 1 -maxdepth 1 \ + -not -name ddg \ + -not -name wikipedia \ + -not -name list.json \ + -exec rm -rf {} \; # Patch and remove anything that's left - patch -Np1 -i "$srcdir/libre-searchengines.patch" sed -i '\|Phishing Protection|d \|UrlClassifier|d \|URLClassifier|d @@ -166,11 +182,10 @@ END \|extensions[.]webservice[.]discoverURL| s|https://services[.]addons[.]mozilla[.]org.\+["][)][;]|https://directory.fsf.org/wiki/Icedove");|g; ' comm/mail/app/profile/all-thunderbird.js - cp -av $srcdir/$pkgname-$_brandingver/preview.png \ - comm/mail/themes/linux/mail/preview.png - # Load our searchplugins - rm -rv comm/suite/locales/en-US/searchplugins + # TODO: this 'searchplugins' directory no longer exists, as of v78 + # so perhaps the replacement will not be used + rm -rv comm/suite/locales/en-US/searchplugins || : cp -av /usr/lib/mozilla/searchplugins comm/suite/locales/en-US/ } @@ -201,52 +216,14 @@ build() { } package() { + optdepends=('libcanberra: sound support') + cd $_pkgname-$pkgver DESTDIR="$pkgdir" ./mach install - _vendorjs="$pkgdir/usr/lib/$pkgname/defaults/preferences/vendor.js" - install -Dm644 /dev/stdin "$_vendorjs" < What's new" menu entry to mozilla.debian.net -//pref("mailnews.start_page.override_url", "http://wiki.debian.org/Icedove/WhatsNew45"); -END - - _distini="$pkgdir/usr/lib/$pkgname/distribution/distribution.ini" - install -Dm644 /dev/stdin "$_distini" < +Date: Sun, 8 Nov 2020 13:26:47 +0100 +Subject: [PATCH] configure: fix passing system bzip2 ldflags + +--- + comm/third_party/openpgp.configure | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/comm/third_party/openpgp.configure b/comm/third_party/openpgp.configure +index 2f9c796..2cbc907 100644 +--- a/comm/third_party/openpgp.configure ++++ b/comm/third_party/openpgp.configure +@@ -80,7 +80,7 @@ with only_when('--enable-compile-environment'): + if bzip2_pkg: + cflags = list(bzip2_pkg.cflags) + libs = bzip2_pkg.libs +- return namespace(cflags=cflags, libs=libs, path=(value[0]), ) ++ return namespace(cflags=cflags, ldflags=libs, ) + # Fallback + return namespace( + ldflags=['-lbz2'], +-- +2.28.0 + diff --git a/libre/icedove/distribution.ini b/libre/icedove/distribution.ini new file mode 100644 index 0000000..46b3acd --- /dev/null +++ b/libre/icedove/distribution.ini @@ -0,0 +1,9 @@ +[Global] +id=parabola +version=1.0 +about=Icedove for Parabola GNU/Linux-libre + +[Preferences] +app.distributor=parabola +app.distributor.channel=$pkgname +app.partner.parabola=parabola diff --git a/libre/icedove/libre-searchengines.patch b/libre/icedove/libre-searchengines.patch index 52c3a51..3518f2d 100644 --- a/libre/icedove/libre-searchengines.patch +++ b/libre/icedove/libre-searchengines.patch @@ -1,50 +1,15 @@ -diff -rupN thunderbird-60.5.1.orig/comm/mail/locales/en-US/chrome/messenger-region/region.properties thunderbird-60.5.1/comm/mail/locales/en-US/chrome/messenger-region/region.properties ---- thunderbird-60.5.1.orig/comm/mail/locales/en-US/chrome/messenger-region/region.properties 2019-03-07 10:38:57.276013048 +0100 -+++ thunderbird-60.5.1/comm/mail/locales/en-US/chrome/messenger-region/region.properties 2019-03-07 11:29:23.255564314 +0100 -@@ -3,9 +3,9 @@ - # file, You can obtain one at http://mozilla.org/MPL/2.0/. - - # Search engine order (order displayed in the search bar dropdown)s --browser.search.order.1=Bing --browser.search.order.2=Yahoo --browser.search.order.3= -+browser.search.order.1=searx -+browser.search.order.2=DuckDuckGo HTML -+browser.search.order.3=DuckDuckGo Lite - - # To make mapit buttons to disappear in the addressbook, specify empty string. For example: - # mail.addr_book.mapit_url.format= -@@ -20,14 +20,12 @@ browser.search.order.3= - # @ZI == zip code - # @CO == country - # Default map service: --mail.addr_book.mapit_url.format=https://maps.google.com/maps?q=@A1%20@A2%20@CI%20@ST%20@ZI%20@CO -+mail.addr_book.mapit_url.format=https://nominatim.openstreetmap.org/search.php?polygon=1&q=@A1%2C@A2%2C@CI%2C@ST%2C@ZI%2C@CO - # List of available map services (up to 5 can be defined here): --mail.addr_book.mapit_url.1.name=Google Maps --mail.addr_book.mapit_url.1.format=https://maps.google.com/maps?q=@A1%20@A2%20@CI%20@ST%20@ZI%20@CO --mail.addr_book.mapit_url.2.name=OpenStreetMap --mail.addr_book.mapit_url.2.format=https://nominatim.openstreetmap.org/search.php?polygon=1&q=@A1%2C@A2%2C@CI%2C@ST%2C@ZI%2C@CO -+mail.addr_book.mapit_url.1.name=OpenStreetMap -+mail.addr_book.mapit_url.1.format=https://nominatim.openstreetmap.org/search.php?polygon=1&q=@A1%2C@A2%2C@CI%2C@ST%2C@ZI%2C@CO - --mailnews.messageid_browser.url=https://groups.google.com/search?as_umsgid=%mid -+mailnews.messageid_browser.url= - - # Recognize non-standard versions of "Re:" in subjects from localized versions of MS Outlook et al. - # Specify a comma-separated list without spaces. For example: mailnews.localizedRe=AW,SV -diff -rupN thunderbird-60.5.1.orig/comm/mail/components/search/extensions/list.json thunderbird-60.5.1/comm/mail/locales/search/list.json ---- thunderbird-60.5.1.orig/comm/mail/components/search/extensions/list.json 2019-03-07 10:38:57.272679671 +0100 -+++ thunderbird-60.5.1/comm/mail/components/search/extensions/list.json 2019-03-07 11:26:46.920196972 +0100 -@@ -1,858 +1,757 @@ +diff --git a/comm/mail/components/search/extensions/list.json b/comm/mail/components/search/extensions/list.json +index e183e9b681..9b2045d2fc 100644 +--- a/comm/mail/components/search/extensions/list.json ++++ b/comm/mail/components/search/extensions/list.json +@@ -1,38 +1,16 @@ { "default": { - "searchDefault": "Google", - "searchOrder": ["Google", "Bing"], -+ "searchDefault": "searx", ++ "searchDefault": "duckduckgo-html", "visibleDefaultEngines": [ -- "google", "amazondotcom", "bing", "ddg", "twitter", "wikipedia" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + "google", "amazondotcom", "bing", "ddg", "wikipedia" ] }, - "regionOverrides": { @@ -67,77 +32,19 @@ diff -rupN thunderbird-60.5.1.orig/comm/mail/components/search/extensions/list.j "en-US": { "default": { "visibleDefaultEngines": [ -- "google", "amazondotcom", "bing", "ddg", "twitter", "wikipedia" -- ] + "google", "amazondotcom", "bing", "ddg", "wikipedia" + ] - }, - "experimental-hidden": { - "visibleDefaultEngines": [ - "amazon-ca", "amazon-au", "yandex-en", "google" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] +- ] } }, "ach": { - "default": { - "visibleDefaultEngines": [ -- "google", "bing", "amazondotcom", "ddg", "twitter", "wikipedia" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "af": { - "default": { - "visibleDefaultEngines": [ -- "google", "bing", "amazondotcom", "ddg", "wikipedia-af" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "an": { - "default": { - "visibleDefaultEngines": [ -- "google", "bing", "wikipedia-an", "ddg", "twitter" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "ar": { - "default": { - "visibleDefaultEngines": [ -- "google", "bing", "amazondotcom", "ddg", "wikipedia-ar" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "as": { - "default": { - "visibleDefaultEngines": [ -- "google", "amazon-in", "ddg", "wikipedia-as" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "ast": { - "default": { - "visibleDefaultEngines": [ -- "google", "bing", "ddg", "wikipedia-ast" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "az": { - "default": { - "visibleDefaultEngines": [ -- "google", "amazondotcom", "azerdict", "bing", "ddg", "wikipedia-az", "yandex-az" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "be": { - "default": { +@@ -89,18 +67,6 @@ "visibleDefaultEngines": [ -- "yandex-by", "google", "ddg", "wikipedia-be", "wikipedia-be-tarask" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + "yandex-by", "google", "ddg", "wikipedia-be", "wikipedia-be-tarask" ] - }, - "BY": { @@ -154,842 +61,150 @@ diff -rupN thunderbird-60.5.1.orig/comm/mail/components/search/extensions/list.j } }, "bg": { - "default": { - "visibleDefaultEngines": [ -- "google", "amazondotcom", "ddg", "pazaruvaj", "wikipedia-bg" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "bn": { - "default": { - "visibleDefaultEngines": [ -- "google", "amazon-in", "bing", "ddg", "wikipedia-bn" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "bn-BD": { - "default": { - "visibleDefaultEngines": [ -- "google", "bing", "ddg", "wikipedia-bn" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "bn-IN": { - "default": { - "visibleDefaultEngines": [ -- "google", "amazon-in", "bing", "ddg", "wikipedia-bn" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "br": { - "default": { - "visibleDefaultEngines": [ -- "google", "amazon-france", "ddg", "freelang", "wikipedia-br" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "bs": { - "default": { - "visibleDefaultEngines": [ -- "google", "ddg", "olx", "twitter", "wikipedia-bs" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "ca": { - "default": { - "visibleDefaultEngines": [ -- "google", "bing", "diec2", "ddg", "twitter", "wikipedia-ca" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "cak": { - "default": { - "visibleDefaultEngines": [ -- "google", "bing", "amazondotcom", "ddg", "wikipedia-es" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "crh": { - "default": { - "visibleDefaultEngines": [ -- "google", "ddg", "twitter", "wikipedia-crh" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } +@@ -168,7 +134,6 @@ }, "cs": { "default": { - "searchOrder": ["Google", "Seznam"], "visibleDefaultEngines": [ -- "google", "seznam-cz", "ddg", "heureka-cz", "mapy-cz", "wikipedia-cz" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "cy": { - "default": { - "visibleDefaultEngines": [ -- "google", "amazon-en-GB", "ddg", "palasprint", "wikipedia-cy" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "da": { - "default": { - "visibleDefaultEngines": [ -- "google", "bing", "amazon-en-GB", "ddg", "wikipedia-da" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "de": { - "default": { - "visibleDefaultEngines": [ -- "google", "amazon-de", "bing", "ddg", "ecosia", "leo_ende_de", "wikipedia-de" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "dsb": { - "default": { - "visibleDefaultEngines": [ -- "google", "bing", "amazon-de", "ddg", "leo_ende_de", "wikipedia-dsb" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + "google", "seznam-cz", "ddg", "heureka-cz", "mapy-cz", "wikipedia-cz" ] - } - }, - "el": { - "default": { - "visibleDefaultEngines": [ -- "google", "amazon-en-GB", "bing", "ddg", "wikipedia-el" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "en-CA": { - "default": { +@@ -221,11 +186,6 @@ "visibleDefaultEngines": [ -- "google", "amazon-ca", "bing", "ddg", "twitter", "wikipedia" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + "google", "bing", "amazon-en-GB", "chambers-en-GB", "ddg", "wikipedia" ] - } - }, - "en-GB": { - "default": { - "visibleDefaultEngines": [ -- "google", "bing", "amazon-en-GB", "chambers-en-GB", "ddg", "twitter", "wikipedia" -- ] - }, - "experimental-hidden": { - "visibleDefaultEngines": [ - "yandex-en" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] +- ] } }, "en-ZA": { - "default": { - "visibleDefaultEngines": [ -- "google", "bing", "amazondotcom", "ddg", "twitter", "wikipedia" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "eo": { - "default": { - "visibleDefaultEngines": [ -- "google", "bing", "amazondotcom", "ddg", "wikipedia-eo" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "es-AR": { - "default": { - "visibleDefaultEngines": [ -- "google", "amazondotcom", "drae", "ddg", "mercadolibre-ar", "wikipedia-es" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "es-CL": { - "default": { - "visibleDefaultEngines": [ -- "google", "bing", "drae", "ddg", "mercadolibre-cl", "wikipedia-es" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "es-ES": { - "default": { +@@ -268,11 +228,6 @@ "visibleDefaultEngines": [ -- "google", "bing", "drae", "ddg", "twitter", "wikipedia-es" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + "google", "bing", "ddg", "mercadolibre-mx", "wikipedia-es" ] - } - }, - "es-MX": { - "default": { - "visibleDefaultEngines": [ -- "google", "bing", "ddg", "mercadolibre-mx", "wikipedia-es" -- ] - }, - "experimental-hidden": { - "visibleDefaultEngines": [ - "amazon-mx" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] +- ] } }, "et": { - "default": { +@@ -322,11 +277,6 @@ "visibleDefaultEngines": [ -- "google", "neti-ee", "ddg", "osta-ee", "wikipedia-et", "eki-ee" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + "google", "bing", "bolcom-fy-NL", "ddg", "marktplaats-fy-NL", "wikipedia-fy-NL" ] +- }, +- "experimental-hidden": { +- "visibleDefaultEngines": [ +- "amazon-nl" +- ] } }, - "eu": { - "default": { - "visibleDefaultEngines": [ -- "google", "bing", "amazon-en-GB", "ddg", "wikipedia-eu" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } + "ga-IE": { +@@ -436,7 +386,6 @@ }, - "fa": { + "ja-JP-macos": { "default": { +- "searchOrder": ["Google", "Yahoo! JAPAN", "Bing", "Amazon.co.jp", "楽天市場", "ヤフオク!", "教えて!goo", "Wikipedia (ja)"], "visibleDefaultEngines": [ -- "google", "amazondotcom", "bing", "ddg", "wikipedia-fa" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + "google", "yahoo-jp", "bing", "amazon-jp", "rakuten", "yahoo-jp-auctions", "oshiete-goo", "wikipedia-ja", "ddg" ] - } +@@ -444,7 +393,6 @@ }, - "ff": { + "ja": { "default": { +- "searchOrder": ["Google", "Yahoo! JAPAN", "Bing", "Amazon.co.jp", "楽天市場", "ヤフオク!", "教えて!goo", "Wikipedia (ja)"], "visibleDefaultEngines": [ -- "google", "bing", "amazon-france", "ddg", "wikipedia-fr" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + "google", "yahoo-jp", "bing", "amazon-jp", "rakuten", "yahoo-jp-auctions", "oshiete-goo", "wikipedia-ja", "ddg" ] - } - }, - "fi": { - "default": { +@@ -469,18 +417,6 @@ "visibleDefaultEngines": [ -- "google", "bing", "ddg", "wikipedia-fi" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + "yandex-kk", "google", "ddg", "flip", "wikipedia-kk" ] +- }, +- "KZ": { +- "searchDefault": "Яндекс" +- }, +- "BY": { +- "searchDefault": "Яндекс" +- }, +- "RU": { +- "searchDefault": "Яндекс" +- }, +- "TR": { +- "searchDefault": "Яндекс" } }, - "fr": { - "default": { + "km": { +@@ -600,11 +536,6 @@ "visibleDefaultEngines": [ -- "google", "bing", "amazon-france", "ddg", "qwant", "wikipedia-fr" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + "google", "bing", "bolcom-nl", "ddg", "marktplaats-nl", "wikipedia-nl" ] - } - }, - "fy-NL": { - "default": { - "visibleDefaultEngines": [ -- "google", "bing", "bolcom-fy-NL", "ddg", "marktplaats-fy-NL", "wikipedia-fy-NL" -- ] - }, - "experimental-hidden": { - "visibleDefaultEngines": [ - "amazon-nl" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] +- ] } }, - "ga-IE": { - "default": { + "nn-NO": { +@@ -647,11 +578,6 @@ "visibleDefaultEngines": [ -- "google", "amazon-en-GB", "ddg", "tearma", "twitter", "wikipedia-ga-IE" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + "google", "bing", "ddg", "mercadolivre", "wikipedia-pt" ] +- }, +- "experimental-hidden": { +- "visibleDefaultEngines": [ +- "amazon-br" +- ] } }, - "gd": { - "default": { + "pt-PT": { +@@ -680,18 +606,6 @@ "visibleDefaultEngines": [ -- "google", "amazon-en-GB", "bbc-alba", "ddg", "faclair-beag", "wikipedia-gd" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + "yandex-ru", "google", "ddg", "ozonru", "priceru", "wikipedia-ru", "mailru" ] +- }, +- "RU": { +- "searchDefault": "Яндекс" +- }, +- "BY": { +- "searchDefault": "Яндекс" +- }, +- "KZ": { +- "searchDefault": "Яндекс" +- }, +- "TR": { +- "searchDefault": "Яндекс" } }, - "gl": { - "default": { + "si": { +@@ -776,18 +690,6 @@ "visibleDefaultEngines": [ -- "google", "amazon-en-GB", "ddg", "wikipedia-gl" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + "yandex-tr", "google", "ddg", "wikipedia-tr" ] +- }, +- "TR": { +- "searchDefault": "Yandex" +- }, +- "BY": { +- "searchDefault": "Yandex" +- }, +- "KZ": { +- "searchDefault": "Yandex" +- }, +- "RU": { +- "searchDefault": "Yandex" } }, - "gn": { - "default": { + "trs": { +@@ -844,9 +746,6 @@ "visibleDefaultEngines": [ -- "google", "bing", "amazondotcom", "ddg", "twitter", "wikipedia-gn" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "gu-IN": { - "default": { - "visibleDefaultEngines": [ -- "google", "bing", "amazon-in", "ddg", "wikipedia-gu" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "he": { - "default": { - "visibleDefaultEngines": [ -- "google", "ddg", "wikipedia-he", "morfix-dic" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "hi-IN": { - "default": { - "visibleDefaultEngines": [ -- "google", "bing", "ddg", "wikipedia-hi" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "hr": { - "default": { - "visibleDefaultEngines": [ -- "google", "amazon-en-GB", "bing", "ddg", "eudict", "twitter", "wikipedia-hr" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "hsb": { - "default": { - "visibleDefaultEngines": [ -- "google", "bing", "amazon-de", "ddg", "leo_ende_de", "wikipedia-hsb" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "hu": { - "default": { - "visibleDefaultEngines": [ -- "google", "ddg", "vatera", "wikipedia-hu" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "hy-AM": { - "default": { - "visibleDefaultEngines": [ -- "google", "amazondotcom", "ddg", "list-am", "wikipedia-hy" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "ia": { - "default": { - "visibleDefaultEngines": [ -- "google", "bing", "amazondotcom", "ddg", "twitter", "wikipedia-ia" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "id": { - "default": { - "visibleDefaultEngines": [ -- "google", "ddg", "wikipedia-id" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "is": { - "default": { - "visibleDefaultEngines": [ -- "google", "bing", "amazondotcom", "ddg", "wikipedia-is" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "it": { - "default": { - "visibleDefaultEngines": [ -- "google", "bing", "amazon-it", "ddg", "wikipedia-it" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "ja-JP-macos": { - "default": { -- "searchOrder": ["Google", "Yahoo! JAPAN", "Bing", "Amazon.co.jp", "楽天市場", "ヤフオク!", "教えて!goo", "Twitter", "Wikipedia (ja)"], - "visibleDefaultEngines": [ -- "google", "yahoo-jp", "bing", "amazon-jp", "rakuten", "yahoo-jp-auctions", "oshiete-goo", "twitter-ja", "wikipedia-ja", "ddg" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "ja": { - "default": { -- "searchOrder": ["Google", "Yahoo! JAPAN", "Bing", "Amazon.co.jp", "楽天市場", "ヤフオク!", "教えて!goo", "Twitter", "Wikipedia (ja)"], - "visibleDefaultEngines": [ -- "google", "yahoo-jp", "bing", "amazon-jp", "rakuten", "yahoo-jp-auctions", "oshiete-goo", "twitter-ja", "wikipedia-ja", "ddg" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "ka": { - "default": { - "visibleDefaultEngines": [ -- "google", "bing", "amazondotcom", "ddg", "twitter", "wikipedia-ka" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "kab": { - "default": { - "visibleDefaultEngines": [ -- "google", "bing", "ddg", "wikipedia-kab" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "kk": { - "default": { - "visibleDefaultEngines": [ -- "yandex-kk", "google", "ddg", "flip", "twitter", "wikipedia-kk" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] -- }, -- "KZ": { -- "searchDefault": "Яндекс" -- }, -- "BY": { -- "searchDefault": "Яндекс" -- }, -- "RU": { -- "searchDefault": "Яндекс" -- }, -- "TR": { -- "searchDefault": "Яндекс" - } - }, - "km": { - "default": { - "visibleDefaultEngines": [ -- "google", "bing", "amazondotcom", "ddg", "twitter", "wikipedia-km" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "kn": { - "default": { - "visibleDefaultEngines": [ -- "google", "bing", "amazon-in", "ddg", "kannadastore", "wikipedia-kn" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "ko": { - "default": { - "visibleDefaultEngines": [ -- "google", "ddg", "naver-kr", "daum-kr", "wikipedia-kr" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "lij": { - "default": { - "visibleDefaultEngines": [ -- "google", "bing", "amazon-it", "ddg", "wikipedia-lij" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "lo": { - "default": { - "visibleDefaultEngines": [ -- "google", "bing", "ddg", "wikipedia-lo", "twitter" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "lt": { - "default": { - "visibleDefaultEngines": [ -- "google", "wikipedia-lt", "bing", "amazondotcom", "ddg", "twitter" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "ltg": { - "default": { - "visibleDefaultEngines": [ -- "google", "ddg", "salidzinilv", "sslv", "wikipedia-ltg" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "lv": { - "default": { - "visibleDefaultEngines": [ -- "google", "ddg", "salidzinilv", "sslv", "wikipedia-lv" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "mai": { - "default": { - "visibleDefaultEngines": [ -- "google", "bing", "amazon-in", "ddg", "twitter", "wikipedia-hi" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "mk": { - "default": { - "visibleDefaultEngines": [ -- "google", "bing", "amazondotcom", "ddg", "wikipedia-mk" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "ml": { - "default": { - "visibleDefaultEngines": [ -- "google", "bing", "amazon-in", "ddg", "wikipedia", "wikipedia-ml" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "mr": { - "default": { - "visibleDefaultEngines": [ -- "google", "amazon-in", "ddg", "wikipedia-mr" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "ms": { - "default": { - "visibleDefaultEngines": [ -- "google", "bing", "amazondotcom", "ddg", "twitter", "wikipedia-ms" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "my": { - "default": { - "visibleDefaultEngines": [ -- "google", "bing", "amazondotcom", "ddg", "twitter", "wikipedia-my" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "nb-NO": { - "default": { - "visibleDefaultEngines": [ -- "google", "amazon-en-GB", "bing", "ddg", "gulesider-NO", "bok-NO", "qxl-NO", "wikipedia-NO" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "ne-NP": { - "default": { - "visibleDefaultEngines": [ -- "google", "bing", "ddg", "twitter", "wikipedia-ne" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "nl": { - "default": { - "visibleDefaultEngines": [ -- "google", "bing", "bolcom-nl", "ddg", "marktplaats-nl", "wikipedia-nl" -- ] -- }, -- "experimental-hidden": { -- "visibleDefaultEngines": [ -- "amazon-nl" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "nn-NO": { - "default": { - "visibleDefaultEngines": [ -- "google", "bing", "amazon-en-GB", "ddg", "gulesider-NO", "bok-NO", "qxl-NO", "wikipedia-NN" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "oc": { - "default": { - "visibleDefaultEngines": [ -- "google", "bing", "ddg", "twitter", "wikipedia-oc", "wiktionary-oc" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "or": { - "default": { - "visibleDefaultEngines": [ -- "google", "bing", "amazon-in", "ddg", "wikipedia-or" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "pa-IN": { - "default": { - "visibleDefaultEngines": [ -- "google", "bing", "amazon-in", "ddg", "wikipedia-pa" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "pl": { - "default": { - "visibleDefaultEngines": [ -- "google", "allegro-pl", "ddg", "pwn-pl", "wikipedia-pl", "wolnelektury-pl" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "pt-BR": { - "default": { - "visibleDefaultEngines": [ -- "google", "bing", "ddg", "mercadolivre", "twitter", "wikipedia-pt" -- ] -- }, -- "experimental-hidden": { -- "visibleDefaultEngines": [ -- "amazon-br" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "pt-PT": { - "default": { - "visibleDefaultEngines": [ -- "google", "amazon-en-GB", "ddg", "priberam", "wikipedia-pt" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "rm": { - "default": { - "visibleDefaultEngines": [ -- "google", "bing", "ddg", "leo_ende_de", "wikipedia-rm" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "ro": { - "default": { - "visibleDefaultEngines": [ -- "google", "bing", "amazondotcom", "ddg", "wikipedia-ro" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "ru": { - "default": { - "visibleDefaultEngines": [ -- "yandex-ru", "google", "ddg", "ozonru", "priceru", "wikipedia-ru", "mailru" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] -- }, -- "RU": { -- "searchDefault": "Яндекс" -- }, -- "BY": { -- "searchDefault": "Яндекс" -- }, -- "KZ": { -- "searchDefault": "Яндекс" -- }, -- "TR": { -- "searchDefault": "Яндекс" - } - }, - "si": { - "default": { - "visibleDefaultEngines": [ -- "google", "amazondotcom", "ddg", "wikipedia-si" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "sk": { - "default": { - "visibleDefaultEngines": [ -- "google", "azet-sk", "atlas-sk", "ddg", "wikipedia-sk", "zoznam-sk" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "sl": { - "default": { - "visibleDefaultEngines": [ -- "google", "ceneji", "ddg", "najdi-si", "odpiralni", "twitter", "wikipedia-sl" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "son": { - "default": { - "visibleDefaultEngines": [ -- "google", "bing", "amazon-france", "ddg", "wikipedia-fr" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "sq": { - "default": { - "visibleDefaultEngines": [ -- "google", "bing", "amazon-en-GB", "ddg", "wikipedia-sq" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "sr": { - "default": { - "visibleDefaultEngines": [ -- "google", "amazon-en-GB", "bing", "ddg", "wikipedia-sr", "pogodak" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "sv-SE": { - "default": { - "visibleDefaultEngines": [ -- "google", "bing", "allaannonser-sv-SE", "ddg", "prisjakt-sv-SE", "tyda-sv-SE", "wikipedia-sv-SE" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "ta": { - "default": { - "visibleDefaultEngines": [ -- "google", "amazon-in", "ddg", "wikipedia-ta" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "te": { - "default": { - "visibleDefaultEngines": [ -- "google", "amazon-in", "ddg", "wikipedia-te", "wiktionary-te" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "th": { - "default": { - "visibleDefaultEngines": [ -- "google", "amazondotcom", "bing", "ddg", "longdo", "wikipedia-th" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "tl": { - "default": { - "visibleDefaultEngines": [ -- "google", "bing", "amazondotcom", "ddg", "twitter", "wikipedia-tl" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "tr": { - "default": { - "visibleDefaultEngines": [ -- "yandex-tr", "google", "ddg", "twitter", "wikipedia-tr" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] -- }, -- "TR": { -- "searchDefault": "Yandex" -- }, -- "BY": { -- "searchDefault": "Yandex" -- }, -- "KZ": { -- "searchDefault": "Yandex" -- }, -- "RU": { -- "searchDefault": "Yandex" - } - }, - "trs": { - "default": { - "visibleDefaultEngines": [ -- "google", "bing", "amazondotcom", "ddg", "wikipedia-es" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "uk": { - "default": { - "visibleDefaultEngines": [ -- "google", "bing", "ddg", "wikipedia-uk", "hotline-ua" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "ur": { - "default": { - "visibleDefaultEngines": [ -- "google", "bing", "amazon-in", "ddg", "twitter", "wikipedia-ur" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "uz": { - "default": { - "visibleDefaultEngines": [ -- "google", "bing", "amazondotcom", "ddg", "twitter", "wikipedia-uz" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "vi": { - "default": { - "visibleDefaultEngines": [ -- "google", "coccoc", "ddg", "wikipedia-vi" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "wo": { - "default": { - "visibleDefaultEngines": [ -- "google", "bing", "amazon-france", "ddg", "twitter", "wikipedia-wo" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "xh": { - "default": { - "visibleDefaultEngines": [ -- "google", "bing", "ddg", "wikipedia" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "zh-CN": { - "default": { - "visibleDefaultEngines": [ -- "baidu", "google", "bing", "ddg", "wikipedia-zh-CN", "amazondotcn" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + "baidu", "google", "bing", "ddg", "wikipedia-zh-CN", "amazondotcn" ] - }, - "CN": { @@ -997,10 +212,39 @@ diff -rupN thunderbird-60.5.1.orig/comm/mail/components/search/extensions/list.j } }, "zh-TW": { - "default": { - "visibleDefaultEngines": [ -- "google", "ddg", "readmoo", "wikipedia-zh-TW" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - } +diff --git a/comm/mail/locales/en-US/chrome/messenger-region/region.properties b/comm/mail/locales/en-US/chrome/messenger-region/region.properties +index 8c2ebdc783..2dc0e11ab7 100644 +--- a/comm/mail/locales/en-US/chrome/messenger-region/region.properties ++++ b/comm/mail/locales/en-US/chrome/messenger-region/region.properties +@@ -3,9 +3,9 @@ + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + + # Search engine order (order displayed in the search bar dropdown)s +-browser.search.order.1=Bing +-browser.search.order.2=Yahoo +-browser.search.order.3= ++browser.search.order.1=searx ++browser.search.order.2=DuckDuckGo HTML ++browser.search.order.3=DuckDuckGo Lite + + # To make mapit buttons to disappear in the addressbook, specify empty string. For example: + # mail.addr_book.mapit_url.format= +@@ -20,14 +20,12 @@ browser.search.order.3= + # @ZI == zip code + # @CO == country + # Default map service: +-mail.addr_book.mapit_url.format=https://maps.google.com/maps?q=@A1%20@A2%20@CI%20@ST%20@ZI%20@CO ++mail.addr_book.mapit_url.format=https://nominatim.openstreetmap.org/search.php?polygon=1&q=@A1%2C@A2%2C@CI%2C@ST%2C@ZI%2C@CO + # List of available map services (up to 5 can be defined here): +-mail.addr_book.mapit_url.1.name=Google Maps +-mail.addr_book.mapit_url.1.format=https://maps.google.com/maps?q=@A1%20@A2%20@CI%20@ST%20@ZI%20@CO +-mail.addr_book.mapit_url.2.name=OpenStreetMap +-mail.addr_book.mapit_url.2.format=https://nominatim.openstreetmap.org/search.php?polygon=1&q=@A1%2C@A2%2C@CI%2C@ST%2C@ZI%2C@CO ++mail.addr_book.mapit_url.1.name=OpenStreetMap ++mail.addr_book.mapit_url.1.format=https://nominatim.openstreetmap.org/search.php?polygon=1&q=@A1%2C@A2%2C@CI%2C@ST%2C@ZI%2C@CO + +-mailnews.messageid_browser.url=https://groups.google.com/search?as_umsgid=%mid ++mailnews.messageid_browser.url= + + # Recognize non-standard versions of "Re:" in subjects from localized versions of MS Outlook et al. + # Specify a comma-separated list without spaces. For example: mailnews.localizedRe=AW,SV diff --git a/libre/icedove/mozconfig.cfg b/libre/icedove/mozconfig.cfg new file mode 100644 index 0000000..c2a9dbb --- /dev/null +++ b/libre/icedove/mozconfig.cfg @@ -0,0 +1,43 @@ +ac_add_options --enable-application=comm/mail +ac_add_options --enable-calendar + +ac_add_options --prefix=/usr +ac_add_options --enable-release +ac_add_options --enable-linker=gold +ac_add_options --enable-hardening +ac_add_options --enable-optimize +ac_add_options --enable-rust-simd +# https://bugzilla.mozilla.org/show_bug.cgi?id=1423822 +ac_add_options --disable-elf-hack + +# Branding +ac_add_options --disable-official-branding +ac_add_options --enable-update-channel=release +ac_add_options --with-distribution-id=nu.parabola +ac_add_options --with-branding=comm/mail/branding/icedove + +# System libraries +ac_add_options --with-system-zlib +ac_add_options --with-system-bz2 +ac_add_options --with-system-icu +ac_add_options --with-system-jpeg +# does not have APNG support +# ac_add_options --with-system-png +ac_add_options --with-system-libvpx +ac_add_options --with-system-nspr +ac_add_options --with-system-nss +ac_add_options --with-system-botan +ac_add_options --with-system-webp +ac_add_options --with-system-libevent +ac_add_options --with-system-ffi +ac_add_options --with-system-pixman + +# Features +ac_add_options --enable-alsa +ac_add_options --enable-openpgp +ac_add_options --enable-calendar +ac_add_options --disable-jack +ac_add_options --disable-crashreporter +ac_add_options --disable-updater +# tests require network access. +ac_add_options --disable-tests diff --git a/libre/icedove/mozilla-1338795-regression.patch b/libre/icedove/mozilla-1338795-regression.patch deleted file mode 100644 index 2c8cf21..0000000 --- a/libre/icedove/mozilla-1338795-regression.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- a/comm/mailnews/base/prefs/content/accountUtils.js 2020-04-04 22:28:38.105521722 +0200 -+++ b/comm/mailnews/base/prefs/content/accountUtils.js 2020-04-04 22:28:50.809027238 +0200 -@@ -488,7 +488,7 @@ function msgNewMailAccount(msgWindow, ok - let existingWindow = Services.wm.getMostRecentWindow("mail:autoconfig"); - if (existingWindow) { - existingWindow.focus(); -- } else if (AppConstants.MOZ_APP_NAME == "thunderbird") { -+ } else { - // disabling modal for the time being, see 688273 REMOVEME - window.openDialog( - "chrome://messenger/content/accountcreation/emailWizard.xul", diff --git a/libre/icedove/thunderbird-78.4.3-gpgme-double-armored-fix.patch b/libre/icedove/thunderbird-78.4.3-gpgme-double-armored-fix.patch new file mode 100644 index 0000000..ce5b41c --- /dev/null +++ b/libre/icedove/thunderbird-78.4.3-gpgme-double-armored-fix.patch @@ -0,0 +1,62 @@ +# HG changeset patch +# User Kai Engert +# Date 1605644505 -3600 +# Tue Nov 17 21:21:45 2020 +0100 +# Node ID 8eee96dfe5184bfe9b78abb473fb5b66d408d537 +# Parent 997190de89d38dccdb6de5b1e585c2f997d6d6c8 +Bug 1675939 - Detect if output from GPGME.gpgme_op_decrypt_ext is armored. r=PatrickBrunschwig + +diff --git a/comm/mail/extensions/openpgp/content/modules/GPGME.jsm b/comm/mail/extensions/openpgp/content/modules/GPGME.jsm +--- a/comm/mail/extensions/openpgp/content/modules/GPGME.jsm ++++ b/comm/mail/extensions/openpgp/content/modules/GPGME.jsm +@@ -74,6 +74,8 @@ var GPGME = { + throw new Error("gpgme_new failed"); + } + ++ GPGMELib.gpgme_set_armor(c1, 1); ++ + result.exitCode = GPGMELib.gpgme_op_decrypt_ext( + c1, + GPGMELib.GPGME_DECRYPT_UNWRAP, +@@ -98,14 +100,35 @@ var GPGME = { + ).contents; + + // The result of decrypt(GPGME_DECRYPT_UNWRAP) is an OpenPGP message. +- // However, GPGME always returns the results as a binary encoding. +- // GPG 1.12.0 ignored gpgme_set_armor(context, 1) and +- // gpgme_data_set_encoding(data_plain, GPGME_DATA_ENCODING_ARMOR). ++ // Because old versions of GPGME (e.g. 1.12.0) may return the ++ // results as a binary encoding (despite gpgme_set_armor), ++ // we check if the result looks like an armored message. ++ // If it doesn't we apply armoring ourselves. ++ ++ let armor_head = "-----BEGIN PGP MESSAGE-----"; ++ ++ let head_of_array = ctypes.cast( ++ result_buf, ++ ctypes.char.array(armor_head.length).ptr ++ ).contents; ++ ++ let isArmored = false; + +- // TODO: Find a way to pass the binary data directly to the +- // RNP.decrypt function for efficiency. ++ try { ++ // If this is binary, which usually isn't a valid UTF-8 ++ // encoding, it will throw an error. ++ let head_of_array_string = head_of_array.readString(); ++ if (head_of_array_string == armor_head) { ++ isArmored = true; ++ } ++ } catch (ex) {} + +- result.decryptedData = enArmorCB(unwrapped, result_len.value); ++ if (isArmored) { ++ result.decryptedData = unwrapped.readString(); ++ } else { ++ result.decryptedData = enArmorCB(unwrapped, result_len.value); ++ } ++ + GPGMELib.gpgme_free(result_buf); + } + diff --git a/libre/icedove/vendor-prefs.js b/libre/icedove/vendor-prefs.js new file mode 100644 index 0000000..701c33e --- /dev/null +++ b/libre/icedove/vendor-prefs.js @@ -0,0 +1,32 @@ +// Use LANG environment variable to choose locale +pref("intl.locale.requested", ""); + +// Use system-provided dictionaries +pref("spellchecker.dictionary_path", "/usr/share/hunspell"); + +// Disable default mailer checking +pref("mail.shell.checkDefaultMail", false); + +// Don't disable our bundled extensions in the application directory +pref("extensions.autoDisableScopes", 11); +pref("extensions.shownSelectionUI", true); + +// Disable telemetry +pref("datareporting.healthreport.uploadEnabled", false); +pref("datareporting.policy.dataSubmissionEnabled", false); +pref("toolkit.telemetry.archive.enabled", false); + +// Disable Social API for content +pref("social.remote-install.enabled", false); +pref("social.toast-notifications.enabled", false); + +// Make sure that whitelisted and directory installs are empty +pref("social.whitelist", ""); +pref("social.directories", ""); + +// Disable the GeoLocation API for content +pref("geo.enabled", false); + +// TODO: this "whats new" page should be in the branding package or abslibre +// Pointing the "Help -> What's new" menu entry to mozilla.debian.net +//pref("mailnews.start_page.override_url", "http://wiki.debian.org/Icedove/WhatsNew45"); From 500cd2500a4e557609e71e4510bf9c8d820da2fd Mon Sep 17 00:00:00 2001 From: bill-auger Date: Nov 05 2021 20:25:45 +0000 Subject: [PATCH 31/73] [icedove]: upgrade to v78.8.1 --- diff --git a/libre/icedove/PKGBUILD b/libre/icedove/PKGBUILD index 3621e8f..431045b 100644 --- a/libre/icedove/PKGBUILD +++ b/libre/icedove/PKGBUILD @@ -1,9 +1,9 @@ -# Maintainer (Arch): Levente Polyak -# Contributor (Arch): Jan Alexander Steffens (heftig) -# Contributor (Arch): Ionut Biru -# Contributor (Arch): Alexander Baldeck -# Contributor (Arch): Dale Blount -# Contributor (Arch): Anders Bostrom +# Maintainer (arch): Levente Polyak +# Contributor: Jan Alexander Steffens (heftig) +# Contributor: Ionut Biru +# Contributor: Alexander Baldeck +# Contributor: Dale Blount +# Contributor: Anders Bostrom # Maintainer: Andreas Grapentin # Contributor: André Silva # Contributor: Márcio Silva @@ -22,10 +22,10 @@ _pkgname=thunderbird pkgname=icedove epoch=1 -pkgver=78.5.0 +pkgver=78.8.1 pkgrel=1 pkgrel+=.parabola1 -_brandingver=78.5 +_brandingver=78.8 _brandingrel=1 pkgdesc='Standalone mail and news reader based on Mozilla Thunderbird' url=https://wiki.parabola.nu/${pkgname} @@ -43,11 +43,11 @@ depends=( makedepends=( unzip zip diffutils python python-setuptools yasm nasm mesa imake libpulse inetutils xorg-server-xvfb autoconf2.13 rust clang llvm gtk2 cbindgen nodejs - gawk perl findutils + gawk perl findutils libotr ) -makedepends[15]='llvm10' # FIXME: DEBUG: | rustup: error while loading shared libraries: libLLVM-10.so: cannot open shared object file: No such file or directory - # ERROR: Command `rustup which rustc` failed with exit status 127. -makedepends+=(quilt mozilla-searchplugins imagemagick) +#makedepends[15]='llvm10' # FIXME: DEBUG: | rustup: error while loading shared libraries: libLLVM-10.so: cannot open shared object file: No such file or directory +# # ERROR: Command `rustup which rustc` failed with exit status 127. +makedepends+=(quilt imagemagick) replaces=(${_pkgname}) options=(!emptydirs !makeflags) source=(https://ftp.mozilla.org/pub/mozilla.org/thunderbird/releases/$pkgver/source/thunderbird-$pkgver.source.tar.xz{,.asc} @@ -56,21 +56,19 @@ source=(https://ftp.mozilla.org/pub/mozilla.org/thunderbird/releases/$pkgver/sou distribution.ini mozconfig.cfg configure-fix-passing-system-bzip2-ldflags.patch - thunderbird-78.4.3-gpgme-double-armored-fix.patch) -source+=(https://repo.parabola.nu/other/icedove/${pkgname}_$_brandingver-$_brandingrel.branding.tar.xz{,.sig} - libre-searchengines.patch) + thunderbird-78.5-rust-1.48.patch) +source+=(https://repo.parabola.nu/other/icedove/${pkgname}_$_brandingver-$_brandingrel.branding.tar.xz{,.sig}) source_armv7h=(arm-wasm-vfp.patch) -sha512sums=('dae49dc0910dd017250643c920c79f03d3ef14bcbafde7fcdb3aaeba2b27a42ef6f88c8de8b961f8bb1c3d1a153bc8988ab43a39eb051d81839cf3b9e8373118' +sha512sums=('5158f7663acf3d00f45b457d1c172dcc95978d6782775faa4ec3995d3a799dfce668302e2c4b963a5607add831314fac76d516e45863a1971fbd4a6b0c4bdb10' 'SKIP' 'a3c9815491d9bed0440c60f35867a5b8a2a1343521f288035fcc46e651a11b926c75a9eca2d262b43d510a7a7119709b53637f1b00ddbbee8e5b0a4b33d7b8fd' 'e21d30a8b79724eda3488ac2bf9dfeb0c7f6bf39e59c37f17574b529d33043765eb54408a55fcbf6f3afa7a58ca99124992d443cdff23ac5c9bdbff33c75f60f' '31d46f91d9612d30d8553a19d0d309d743467e58b568a4aeea3caf6bd805ba00656561c84a1511c59bce1cf24ba323bfad2cd26a19985f1bf7dfb6d282642972' - '636aad861322df5cc3cb9e7b0142a56981b9eeb010bacaa10148d3f74f43bc3c26580475ee5646556acb9980028cb3ffcc1a15788f8039ca0fe57e261457c113' + '1eba1593ff0a9642d89e6d3e03388b1aef00437b2f6c1f0d81d250d9845b80e057c246eaeb31d8d22001abd65556a9603d1db597baf864481a5bfb7000886b29' 'e3ed2708b8354015cb3d2c81048d1ce4932d1effbe2b40efa7cf9b45c1b923b9fd708645e2f8aa0136a485a3f7ce6b396b85721aaf535a4a764fd5005fb7e222' - '92f4c5946f288b30728382830b99b91980ecd845d1606ab251bbdde5cf53387e966727a23f35a3bf7756ee77e72e478f3fb468668e8c412f552547eeb3408299') -sha512sums+=('3b757a7c5f1f4aa83405d0dc7bb69b72230e0e2c944f9b5aeff8e22cc8e6a053aeb16e3ca6f450bf5de763a1aba8028bf4f299bdfb6f203239605ea16c40b4ed' - 'SKIP' - 'be1bf98b65471aa36d1e4a55a24907ac99ddd401daee180dfe26302bad6928f6b4fe5dc6bbc7a96d884237bbd1f6205a4788a82b13fd7e929edbaf64200e0f52') + 'bbb8b0e7b9c67372eb22e1d6b6b5758fe504ded84c40a076d4a064374a1bf34ac12d5b514b328ac9ca984d976b9e0fbde81e68a66bec915c997d6be0c0917584') +sha512sums+=('4fa203586c5ba376e66b79fe73e3f7f729458ea9c8a1dd6151de4c6cddbaea41732fbc91717e19a1e113a5298c7650530a41098bba1fc2cd32f0f4613284caf2' + 'SKIP') sha512sums_armv7h=('c25883c4860e511a99d9fbfba5b824145c0862729101721605725f609ca2a41848b741dd100eff390f57031dc5f14af3ea30133de30f75cb20197c420ae20972') validpgpkeys=(14F26682D0916CDD81E37B6D61B7B526D98F0353) # Mozilla Software Releases validpgpkeys+=(BFA8008A8265677063B11BF47171986E4B745536 # Andreas Grapentin @@ -87,8 +85,7 @@ prepare() { src="${src%%::*}" src="${src##*/}" [[ $src = *.patch ]] || continue - [[ $src = libre-searchengines.patch ]] && continue # defer parabola patches - [[ $src = arm-wasm-vfp.patch ]] && continue # defer parabola patches + [[ $src = arm-wasm-vfp.patch ]] && continue # defer parabola patches echo "Applying patch $src..." patch -Np1 < "../$src" @@ -97,8 +94,8 @@ prepare() { cp ../mozconfig.cfg .mozconfig sed "s|@PWD@|${PWD@Q}|g" -i .mozconfig - if [[ ${CARCH} = arm* ]] - then + case "${CARCH}" in + armv*) patch -Np1 -i "${srcdir}"/arm-wasm-vfp.patch sed -i '/--enable-linker=gold/d' .mozconfig @@ -116,15 +113,15 @@ ac_add_options --disable-webrtc ac_add_options --disable-elf-hack ac_add_options --enable-optimize="-g0 -O2" END - fi - - if [[ ${CARCH} = i686 ]]; then + ;; + i686) sed -i 's/--enable-linker=gold/--enable-linker=bfd/' .mozconfig LDFLAGS+=" -Wl,--no-keep-memory -Wl,--reduce-memory-overheads" export LDFLAGS - fi + ;; + esac - # perform rebranding + # perform re-branding local branding_indir="${srcdir}"/${pkgname}-${_brandingver} local branding_outdir=comm/mail/branding/${pkgname} rm -rf -- ${branding_outdir} @@ -148,26 +145,14 @@ END cp -av "${branding_indir}"/preview.png comm/mail/themes/linux/mail/preview.png # Patch search-engines config - echo "applying libre-searchengines.patch" - patch -Np1 -i "${srcdir}"/libre-searchengines.patch - # TODO: custom searchplugins ID per new format ("ddg" is standard) - # where: ID is comm/mail/components/search/extensions// - # eg: "ddg", "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-labs", "parabola-packages", "parabola-wiki-en", "searx", "wikipedia", "yacy"|g' - local remove_engines_sed_cmd='s|.*"google".*"wikipedia".*| "ddg", "wikipedia"| ; s|.*"google".*"wikipedia\(-[^"]*\)".*| "ddg", "wikipedia\1"|' + local search_engines_sed_cmd='s|https://duckduckgo.com/|https://html.duckduckgo.com/html/|' local engines_cfg_dir=comm/mail/components/search/extensions - local engines_cfg_file=${engines_cfg_dir}/list.json - sed -i "${remove_engines_sed_cmd}" ${engines_cfg_file} - - # Sanity-check search-engines patching - local removed_engines_regex='Bing|Google|Seznam|Twitter|Yahoo|Yandex|Яндекс|amazon|bing|google|ebay|twitter' - local engines_err_msg="search-engines patch and/or sed command needs re-working" - ! grep -E ${removed_engines_regex} ${engines_cfg_file} > /dev/null || ! echo "${engines_err_msg}" + sed -i "${search_engines_sed_cmd}" ${engines_cfg_dir}/ddg/manifest.json # Delete unused search engine configs find ${engines_cfg_dir} -mindepth 1 -maxdepth 1 \ -not -name ddg \ -not -name wikipedia \ - -not -name list.json \ -exec rm -rf {} \; # Patch and remove anything that's left @@ -176,21 +161,19 @@ END \|URLClassifier|d \|url-classifier|d ' comm/mail/installer/package-manifest.in + # TODO: this could be moved into the branding package - it already processes all-thunderbird.js sed -i '\|extensions[.]getAddons[.]get[.]url| s|https://services[.]addons[.]mozilla[.]org.\+["][)][;]|https://directory.fsf.org/wiki/Icedove");|g; \|extensions[.]getAddons[.]search[.]browseURL| s|https://addons[.]mozilla[.]org.\+["][)][;]|https://directory.fsf.org/wiki/Icedove");|g; \|extensions[.]getAddons[.]search[.]url| s|https://services[.]addons[.]mozilla[.]org.\+["][)][;]|https://directory.fsf.org/wiki/Icedove");|g; \|extensions[.]webservice[.]discoverURL| s|https://services[.]addons[.]mozilla[.]org.\+["][)][;]|https://directory.fsf.org/wiki/Icedove");|g; ' comm/mail/app/profile/all-thunderbird.js - - # Load our searchplugins - # TODO: this 'searchplugins' directory no longer exists, as of v78 - # so perhaps the replacement will not be used - rm -rv comm/suite/locales/en-US/searchplugins || : - cp -av /usr/lib/mozilla/searchplugins comm/suite/locales/en-US/ } build() { cd $_pkgname-$pkgver + if [[ -n "${SOURCE_DATE_EPOCH}" ]]; then + export MOZ_BUILD_DATE=$(date --date "@${SOURCE_DATE_EPOCH}" "+%Y%m%d%H%M%S") + fi # clang-{9,10,11} -> error: unknown argument: '-fvar-tracking-assignments' CFLAGS="${CFLAGS/-fvar-tracking-assignments/}" diff --git a/libre/icedove/libre-searchengines.patch b/libre/icedove/libre-searchengines.patch deleted file mode 100644 index 3518f2d..0000000 --- a/libre/icedove/libre-searchengines.patch +++ /dev/null @@ -1,250 +0,0 @@ -diff --git a/comm/mail/components/search/extensions/list.json b/comm/mail/components/search/extensions/list.json -index e183e9b681..9b2045d2fc 100644 ---- a/comm/mail/components/search/extensions/list.json -+++ b/comm/mail/components/search/extensions/list.json -@@ -1,38 +1,16 @@ - { - "default": { -- "searchDefault": "Google", -- "searchOrder": ["Google", "Bing"], -+ "searchDefault": "duckduckgo-html", - "visibleDefaultEngines": [ - "google", "amazondotcom", "bing", "ddg", "wikipedia" - ] - }, -- "regionOverrides": { -- "CA": { -- "amazondotcom": "amazon-ca", -- "amazon-france": "amazon-ca" -- }, -- "AU": { -- "amazondotcom": "amazon-au", -- "amazon-en-GB": "amazon-au" -- }, -- "FR": { -- "amazondotcom": "amazon-france" -- }, -- "GB": { -- "amazondotcom": "amazon-en-GB" -- } -- }, - "locales": { - "en-US": { - "default": { - "visibleDefaultEngines": [ - "google", "amazondotcom", "bing", "ddg", "wikipedia" - ] -- }, -- "experimental-hidden": { -- "visibleDefaultEngines": [ -- "amazon-ca", "amazon-au", "yandex-en", "google" -- ] - } - }, - "ach": { -@@ -89,18 +67,6 @@ - "visibleDefaultEngines": [ - "yandex-by", "google", "ddg", "wikipedia-be", "wikipedia-be-tarask" - ] -- }, -- "BY": { -- "searchDefault": "Яндекс" -- }, -- "KZ": { -- "searchDefault": "Яндекс" -- }, -- "RU": { -- "searchDefault": "Яндекс" -- }, -- "TR": { -- "searchDefault": "Яндекс" - } - }, - "bg": { -@@ -168,7 +134,6 @@ - }, - "cs": { - "default": { -- "searchOrder": ["Google", "Seznam"], - "visibleDefaultEngines": [ - "google", "seznam-cz", "ddg", "heureka-cz", "mapy-cz", "wikipedia-cz" - ] -@@ -221,11 +186,6 @@ - "visibleDefaultEngines": [ - "google", "bing", "amazon-en-GB", "chambers-en-GB", "ddg", "wikipedia" - ] -- }, -- "experimental-hidden": { -- "visibleDefaultEngines": [ -- "yandex-en" -- ] - } - }, - "en-ZA": { -@@ -268,11 +228,6 @@ - "visibleDefaultEngines": [ - "google", "bing", "ddg", "mercadolibre-mx", "wikipedia-es" - ] -- }, -- "experimental-hidden": { -- "visibleDefaultEngines": [ -- "amazon-mx" -- ] - } - }, - "et": { -@@ -322,11 +277,6 @@ - "visibleDefaultEngines": [ - "google", "bing", "bolcom-fy-NL", "ddg", "marktplaats-fy-NL", "wikipedia-fy-NL" - ] -- }, -- "experimental-hidden": { -- "visibleDefaultEngines": [ -- "amazon-nl" -- ] - } - }, - "ga-IE": { -@@ -436,7 +386,6 @@ - }, - "ja-JP-macos": { - "default": { -- "searchOrder": ["Google", "Yahoo! JAPAN", "Bing", "Amazon.co.jp", "楽天市場", "ヤフオク!", "教えて!goo", "Wikipedia (ja)"], - "visibleDefaultEngines": [ - "google", "yahoo-jp", "bing", "amazon-jp", "rakuten", "yahoo-jp-auctions", "oshiete-goo", "wikipedia-ja", "ddg" - ] -@@ -444,7 +393,6 @@ - }, - "ja": { - "default": { -- "searchOrder": ["Google", "Yahoo! JAPAN", "Bing", "Amazon.co.jp", "楽天市場", "ヤフオク!", "教えて!goo", "Wikipedia (ja)"], - "visibleDefaultEngines": [ - "google", "yahoo-jp", "bing", "amazon-jp", "rakuten", "yahoo-jp-auctions", "oshiete-goo", "wikipedia-ja", "ddg" - ] -@@ -469,18 +417,6 @@ - "visibleDefaultEngines": [ - "yandex-kk", "google", "ddg", "flip", "wikipedia-kk" - ] -- }, -- "KZ": { -- "searchDefault": "Яндекс" -- }, -- "BY": { -- "searchDefault": "Яндекс" -- }, -- "RU": { -- "searchDefault": "Яндекс" -- }, -- "TR": { -- "searchDefault": "Яндекс" - } - }, - "km": { -@@ -600,11 +536,6 @@ - "visibleDefaultEngines": [ - "google", "bing", "bolcom-nl", "ddg", "marktplaats-nl", "wikipedia-nl" - ] -- }, -- "experimental-hidden": { -- "visibleDefaultEngines": [ -- "amazon-nl" -- ] - } - }, - "nn-NO": { -@@ -647,11 +578,6 @@ - "visibleDefaultEngines": [ - "google", "bing", "ddg", "mercadolivre", "wikipedia-pt" - ] -- }, -- "experimental-hidden": { -- "visibleDefaultEngines": [ -- "amazon-br" -- ] - } - }, - "pt-PT": { -@@ -680,18 +606,6 @@ - "visibleDefaultEngines": [ - "yandex-ru", "google", "ddg", "ozonru", "priceru", "wikipedia-ru", "mailru" - ] -- }, -- "RU": { -- "searchDefault": "Яндекс" -- }, -- "BY": { -- "searchDefault": "Яндекс" -- }, -- "KZ": { -- "searchDefault": "Яндекс" -- }, -- "TR": { -- "searchDefault": "Яндекс" - } - }, - "si": { -@@ -776,18 +690,6 @@ - "visibleDefaultEngines": [ - "yandex-tr", "google", "ddg", "wikipedia-tr" - ] -- }, -- "TR": { -- "searchDefault": "Yandex" -- }, -- "BY": { -- "searchDefault": "Yandex" -- }, -- "KZ": { -- "searchDefault": "Yandex" -- }, -- "RU": { -- "searchDefault": "Yandex" - } - }, - "trs": { -@@ -844,9 +746,6 @@ - "visibleDefaultEngines": [ - "baidu", "google", "bing", "ddg", "wikipedia-zh-CN", "amazondotcn" - ] -- }, -- "CN": { -- "searchDefault": "百度" - } - }, - "zh-TW": { -diff --git a/comm/mail/locales/en-US/chrome/messenger-region/region.properties b/comm/mail/locales/en-US/chrome/messenger-region/region.properties -index 8c2ebdc783..2dc0e11ab7 100644 ---- a/comm/mail/locales/en-US/chrome/messenger-region/region.properties -+++ b/comm/mail/locales/en-US/chrome/messenger-region/region.properties -@@ -3,9 +3,9 @@ - # file, You can obtain one at http://mozilla.org/MPL/2.0/. - - # Search engine order (order displayed in the search bar dropdown)s --browser.search.order.1=Bing --browser.search.order.2=Yahoo --browser.search.order.3= -+browser.search.order.1=searx -+browser.search.order.2=DuckDuckGo HTML -+browser.search.order.3=DuckDuckGo Lite - - # To make mapit buttons to disappear in the addressbook, specify empty string. For example: - # mail.addr_book.mapit_url.format= -@@ -20,14 +20,12 @@ browser.search.order.3= - # @ZI == zip code - # @CO == country - # Default map service: --mail.addr_book.mapit_url.format=https://maps.google.com/maps?q=@A1%20@A2%20@CI%20@ST%20@ZI%20@CO -+mail.addr_book.mapit_url.format=https://nominatim.openstreetmap.org/search.php?polygon=1&q=@A1%2C@A2%2C@CI%2C@ST%2C@ZI%2C@CO - # List of available map services (up to 5 can be defined here): --mail.addr_book.mapit_url.1.name=Google Maps --mail.addr_book.mapit_url.1.format=https://maps.google.com/maps?q=@A1%20@A2%20@CI%20@ST%20@ZI%20@CO --mail.addr_book.mapit_url.2.name=OpenStreetMap --mail.addr_book.mapit_url.2.format=https://nominatim.openstreetmap.org/search.php?polygon=1&q=@A1%2C@A2%2C@CI%2C@ST%2C@ZI%2C@CO -+mail.addr_book.mapit_url.1.name=OpenStreetMap -+mail.addr_book.mapit_url.1.format=https://nominatim.openstreetmap.org/search.php?polygon=1&q=@A1%2C@A2%2C@CI%2C@ST%2C@ZI%2C@CO - --mailnews.messageid_browser.url=https://groups.google.com/search?as_umsgid=%mid -+mailnews.messageid_browser.url= - - # Recognize non-standard versions of "Re:" in subjects from localized versions of MS Outlook et al. - # Specify a comma-separated list without spaces. For example: mailnews.localizedRe=AW,SV diff --git a/libre/icedove/mozconfig.cfg b/libre/icedove/mozconfig.cfg index c2a9dbb..02dff57 100644 --- a/libre/icedove/mozconfig.cfg +++ b/libre/icedove/mozconfig.cfg @@ -41,3 +41,7 @@ ac_add_options --disable-crashreporter ac_add_options --disable-updater # tests require network access. ac_add_options --disable-tests + +# System addons +ac_add_options --with-unsigned-addon-scopes=app,system +ac_add_options --allow-addon-sideload diff --git a/libre/icedove/thunderbird-78.4.3-gpgme-double-armored-fix.patch b/libre/icedove/thunderbird-78.4.3-gpgme-double-armored-fix.patch deleted file mode 100644 index ce5b41c..0000000 --- a/libre/icedove/thunderbird-78.4.3-gpgme-double-armored-fix.patch +++ /dev/null @@ -1,62 +0,0 @@ -# HG changeset patch -# User Kai Engert -# Date 1605644505 -3600 -# Tue Nov 17 21:21:45 2020 +0100 -# Node ID 8eee96dfe5184bfe9b78abb473fb5b66d408d537 -# Parent 997190de89d38dccdb6de5b1e585c2f997d6d6c8 -Bug 1675939 - Detect if output from GPGME.gpgme_op_decrypt_ext is armored. r=PatrickBrunschwig - -diff --git a/comm/mail/extensions/openpgp/content/modules/GPGME.jsm b/comm/mail/extensions/openpgp/content/modules/GPGME.jsm ---- a/comm/mail/extensions/openpgp/content/modules/GPGME.jsm -+++ b/comm/mail/extensions/openpgp/content/modules/GPGME.jsm -@@ -74,6 +74,8 @@ var GPGME = { - throw new Error("gpgme_new failed"); - } - -+ GPGMELib.gpgme_set_armor(c1, 1); -+ - result.exitCode = GPGMELib.gpgme_op_decrypt_ext( - c1, - GPGMELib.GPGME_DECRYPT_UNWRAP, -@@ -98,14 +100,35 @@ var GPGME = { - ).contents; - - // The result of decrypt(GPGME_DECRYPT_UNWRAP) is an OpenPGP message. -- // However, GPGME always returns the results as a binary encoding. -- // GPG 1.12.0 ignored gpgme_set_armor(context, 1) and -- // gpgme_data_set_encoding(data_plain, GPGME_DATA_ENCODING_ARMOR). -+ // Because old versions of GPGME (e.g. 1.12.0) may return the -+ // results as a binary encoding (despite gpgme_set_armor), -+ // we check if the result looks like an armored message. -+ // If it doesn't we apply armoring ourselves. -+ -+ let armor_head = "-----BEGIN PGP MESSAGE-----"; -+ -+ let head_of_array = ctypes.cast( -+ result_buf, -+ ctypes.char.array(armor_head.length).ptr -+ ).contents; -+ -+ let isArmored = false; - -- // TODO: Find a way to pass the binary data directly to the -- // RNP.decrypt function for efficiency. -+ try { -+ // If this is binary, which usually isn't a valid UTF-8 -+ // encoding, it will throw an error. -+ let head_of_array_string = head_of_array.readString(); -+ if (head_of_array_string == armor_head) { -+ isArmored = true; -+ } -+ } catch (ex) {} - -- result.decryptedData = enArmorCB(unwrapped, result_len.value); -+ if (isArmored) { -+ result.decryptedData = unwrapped.readString(); -+ } else { -+ result.decryptedData = enArmorCB(unwrapped, result_len.value); -+ } -+ - GPGMELib.gpgme_free(result_buf); - } - diff --git a/libre/icedove/thunderbird-78.5-rust-1.48.patch b/libre/icedove/thunderbird-78.5-rust-1.48.patch new file mode 100644 index 0000000..badbff4 --- /dev/null +++ b/libre/icedove/thunderbird-78.5-rust-1.48.patch @@ -0,0 +1,3941 @@ + +# HG changeset patch +# User Henri Sivonen +# Date 1604046593 0 +# Node ID 632353012d05c8e71314d27edca945ce9c13f4ea +# Parent 2876425c75f75f638b41e8c6093e84b817938a9a +Bug 1667736 - Update packed_simd to compile on Rust 1.48. r=glandium + +Differential Revision: https://phabricator.services.mozilla.com/D91572 + +diff --git a/.cargo/config.in b/.cargo/config.in +--- a/.cargo/config.in ++++ b/.cargo/config.in +@@ -45,7 +45,7 @@ rev = "21c26326f5f45f415c49eac4ba5bc41a2 + [source."https://github.com/hsivonen/packed_simd"] + git = "https://github.com/hsivonen/packed_simd" + replace-with = "vendored-sources" +-rev = "3541e3818fdc7c2a24f87e3459151a4ce955a67a" ++rev = "0917fe780032a6bbb23d71be545f9c1834128d75" + + [source."https://github.com/djg/cubeb-pulse-rs"] + git = "https://github.com/djg/cubeb-pulse-rs" +diff --git a/Cargo.lock b/Cargo.lock +--- a/Cargo.lock ++++ b/Cargo.lock +@@ -3573,18 +3573,18 @@ version = "0.4.0" + source = "registry+https://github.com/rust-lang/crates.io-index" + checksum = "49a4b8ea2179e6a2e27411d3bca09ca6dd630821cf6894c6c7c8467a8ee7ef13" + dependencies = [ + "stable_deref_trait", + ] + + [[package]] + name = "packed_simd" +-version = "0.3.3" +-source = "git+https://github.com/hsivonen/packed_simd?rev=3541e3818fdc7c2a24f87e3459151a4ce955a67a#3541e3818fdc7c2a24f87e3459151a4ce955a67a" ++version = "0.3.4" ++source = "git+https://github.com/hsivonen/packed_simd?rev=0917fe780032a6bbb23d71be545f9c1834128d75#0917fe780032a6bbb23d71be545f9c1834128d75" + dependencies = [ + "cfg-if", + ] + + [[package]] + name = "parity-wasm" + version = "0.41.0" + source = "registry+https://github.com/rust-lang/crates.io-index" +diff --git a/Cargo.toml b/Cargo.toml +--- a/Cargo.toml ++++ b/Cargo.toml +@@ -66,7 +66,7 @@ panic = "abort" + + [patch.crates-io] + libudev-sys = { path = "dom/webauthn/libudev-sys" } +-packed_simd = { git = "https://github.com/hsivonen/packed_simd", rev="3541e3818fdc7c2a24f87e3459151a4ce955a67a" } ++packed_simd = { git = "https://github.com/hsivonen/packed_simd", rev="0917fe780032a6bbb23d71be545f9c1834128d75" } + rlbox_lucet_sandbox = { git = "https://github.com/PLSysSec/rlbox_lucet_sandbox/", rev="d510da5999a744c563b0acd18056069d1698273f" } + nix = { git = "https://github.com/shravanrn/nix/", branch = "r0.13.1", rev="4af6c367603869a30fddb5ffb0aba2b9477ba92e" } + spirv_cross = { git = "https://github.com/kvark/spirv_cross", branch = "wgpu3", rev = "20191ad2f370afd6d247edcb9ff9da32d3bedb9c" } +diff --git a/third_party/rust/packed_simd/.cargo-checksum.json b/third_party/rust/packed_simd/.cargo-checksum.json +--- a/third_party/rust/packed_simd/.cargo-checksum.json ++++ b/third_party/rust/packed_simd/.cargo-checksum.json +@@ -1,1 +1,1 @@ +-{"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} +\ No newline at end of file ++{"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} +\ No newline at end of file +diff --git a/third_party/rust/packed_simd/.travis.yml b/third_party/rust/packed_simd/.travis.yml +--- a/third_party/rust/packed_simd/.travis.yml ++++ b/third_party/rust/packed_simd/.travis.yml +@@ -1,291 +1,222 @@ + language: rust +-sudo: false + rust: nightly ++os: linux ++dist: focal + + stages: + - tools +- - linux-tier1 +- - osx-tier1 +- - osx-tier2 +- - linux-tier2 +- - android ++ - build-test-verify # Passes full test suite, permit no regressions (unless it's rustup :/) ++ - 32bit-tier1 ++ - 64bit-tier2 ++ - 32bit-tier2 + +-matrix: +- fast_finish: true ++jobs: ++ fast_finish: true + include: + # Android: +- - env: TARGET=x86_64-linux-android NOVERIFY=1 ++ - env: TARGET=x86_64-linux-android + name: "x86_64-unknown-linux-android + SSE2" +- stage: android ++ stage: build-test-verify + - env: TARGET=arm-linux-androideabi + name: "arm-linux-androideabi" +- stage: android ++ stage: build-test-verify + - env: TARGET=arm-linux-androideabi RUSTFLAGS="-C target-feature=+v7,+neon" + name: "arm-linux-androideabi + NEON" +- stage: android +- - env: TARGET=aarch64-linux-android +- name: "aarch64-unknown-linux-android" +- stage: android +- - env: TARGET=aarch64-linux-android RUSTFLAGS="-C target-feature=+neon" +- name: "aarch64-unknown-linux-android + NEON" +- stage: android ++ stage: build-test-verify ++ - name: "aarch64-unknown-linux-android + NEON" ++ env: TARGET=aarch64-linux-android RUSTFLAGS="-C target-feature=+neon" ++ stage: build-test-verify + - env: TARGET="thumbv7neon-linux-androideabi" + name: "thumbv7neon-linux-androideabi" +- stage: android ++ stage: 32bit-tier2 + # Linux: + - env: TARGET=i586-unknown-linux-gnu + name: "i586-unknown-linux-gnu" +- stage: linux-tier2 ++ stage: 32bit-tier2 + - env: TARGET=i586-unknown-linux-gnu RUSTFLAGS="-C target-feature=+sse" + name: "i586-unknown-linux-gnu + SSE" +- stage: linux-tier2 ++ stage: 32bit-tier2 + - env: TARGET=i586-unknown-linux-gnu RUSTFLAGS="-C target-feature=+sse2" + name: "i586-unknown-linux-gnu + SSE2" +- stage: linux-tier2 ++ stage: 32bit-tier2 + - env: TARGET=i686-unknown-linux-gnu + name: "i686-unknown-linux-gnu + SSE2" +- stage: linux-tier1 ++ stage: 32bit-tier1 + - env: TARGET=i686-unknown-linux-gnu RUSTFLAGS="-C target-feature=+sse4.2" + name: "i686-unknown-linux-gnu + SSE4.2" +- stage: linux-tier1 ++ stage: 32bit-tier1 + - env: TARGET=i686-unknown-linux-gnu RUSTFLAGS="-C target-feature=+avx2" + name: "i686-unknown-linux-gnu + AVX2" +- stage: linux-tier1 +- - env: TARGET=x86_64-unknown-linux-gnu +- name: "x86_64-unknown-linux-gnu + SSE2" +- install: rustup component add rustfmt-preview +- stage: linux-tier1 ++ stage: 32bit-tier1 + - env: TARGET=x86_64-unknown-linux-gnu RUSTFLAGS="-C target-feature=+sse4.2" + name: "x86_64-unknown-linux-gnu + SSE4.2" + install: rustup component add rustfmt-preview +- stage: linux-tier1 +- - env: TARGET=x86_64-unknown-linux-gnu RUSTFLAGS="-C target-feature=+avx" +- name: "x86_64-unknown-linux-gnu + AVX" +- install: rustup component add rustfmt-preview +- stage: linux-tier1 ++ stage: build-test-verify + - env: TARGET=x86_64-unknown-linux-gnu RUSTFLAGS="-C target-feature=+avx2" + name: "x86_64-unknown-linux-gnu + AVX2" + install: rustup component add rustfmt-preview +- stage: linux-tier1 +- - env: TARGET=x86_64-unknown-linux-gnu-emulated +- name: "Intel SDE + SSE2" +- install: true +- stage: linux-tier1 +- - env: TARGET=x86_64-unknown-linux-gnu-emulated RUSTFLAGS="-C target-feature=+sse4.2" +- name: "Intel SDE + SSE4.2" +- install: true +- stage: linux-tier1 +- - env: TARGET=x86_64-unknown-linux-gnu-emulated RUSTFLAGS="-C target-feature=+avx" +- name: "Intel SDE + AVX" +- install: true +- stage: linux-tier1 +- - env: TARGET=x86_64-unknown-linux-gnu-emulated RUSTFLAGS="-C target-feature=+avx2" +- name: "Intel SDE + AVX2" +- install: true +- stage: linux-tier1 +- - env: TARGET=x86_64-unknown-linux-gnu-emulated RUSTFLAGS="-C target-feature=+avx-512f" +- name: "Intel SDE + AVX-512" +- install: true +- stage: linux-tier1 +- - env: TARGET=arm-unknown-linux-gnueabi +- name: "arm-unknown-linux-gnueabi" +- stage: linux-tier2 ++ stage: build-test-verify + - env: TARGET=arm-unknown-linux-gnueabi RUSTFLAGS="-C target-feature=+v7,+neon" + name: "arm-unknown-linux-gnueabi + NEON" +- stage: linux-tier2 ++ stage: build-test-verify + - env: TARGET=arm-unknown-linux-gnueabihf + name: "arm-unknown-linux-gnueabihf" +- stage: linux-tier2 ++ stage: build-test-verify + - env: TARGET=arm-unknown-linux-gnueabihf RUSTFLAGS="-C target-feature=+v7,+neon" + name: "arm-unknown-linux-gnueabihf + NEON" +- stage: linux-tier2 ++ stage: build-test-verify + - env: TARGET=armv7-unknown-linux-gnueabihf + name: "armv7-unknown-linux-gnueabihf" +- stage: linux-tier2 ++ stage: build-test-verify + - env: TARGET=armv7-unknown-linux-gnueabihf RUSTFLAGS="-C target-feature=+neon" + name: "armv7-unknown-linux-gnueabihf + NEON" +- stage: linux-tier2 ++ stage: build-test-verify + - env: TARGET="thumbv7neon-unknown-linux-gnueabihf" + name: "thumbv7neon-unknown-linux-gnueabihf" +- stage: linux-tier2 +- - env: TARGET=aarch64-unknown-linux-gnu +- name: "aarch64-unknown-linux-gnu" +- stage: linux-tier2 +- - env: TARGET=aarch64-unknown-linux-gnu RUSTFLAGS="-C target-feature=+neon" +- name: "aarch64-unknown-linux-gnu + NEON" +- stage: linux-tier2 ++ stage: 32bit-tier2 ++ - name: "aarch64-unknown-linux-gnu + NEON" ++ env: TARGET=aarch64-unknown-linux-gnu RUSTFLAGS="-C target-feature=+neon" ++ stage: build-test-verify + - env: TARGET=mips-unknown-linux-gnu + name: "mips-unknown-linux-gnu" +- stage: linux-tier2 ++ stage: 32bit-tier2 + - env: TARGET=mipsel-unknown-linux-musl + name: "mipsel-unknown-linux-musl" +- stage: linux-tier2 ++ stage: 32bit-tier2 + - env: TARGET=mips64-unknown-linux-gnuabi64 + name: "mips64-unknown-linux-gnuabi64" +- stage: linux-tier2 ++ stage: 64bit-tier2 + - env: TARGET=mips64el-unknown-linux-gnuabi64 + name: "mips64el-unknown-linux-gnuabi64" +- stage: linux-tier2 ++ stage: 64bit-tier2 + # FIXME: https://github.com/rust-lang-nursery/packed_simd/issues/18 + # env: TARGET=mips64el-unknown-linux-gnuabi64 RUSTFLAGS="-C target-feature=+msa -C target-cpu=mips64r6" + - env: TARGET=powerpc-unknown-linux-gnu + name: "powerpc-unknown-linux-gnu" +- stage: linux-tier2 ++ stage: 32bit-tier2 + - env: TARGET=powerpc64-unknown-linux-gnu + name: "powerpc64-unknown-linux-gnu" +- stage: linux-tier2 +- - env: TARGET=powerpc64le-unknown-linux-gnu +- name: "powerpc64le-unknown-linux-gnu" +- stage: linux-tier2 +- - env: TARGET=powerpc64le-unknown-linux-gnu RUSTFLAGS="-C target-feature=+altivec" +- name: "powerpc64le-unknown-linux-gnu + ALTIVEC" +- stage: linux-tier2 +- - env: TARGET=powerpc64le-unknown-linux-gnu RUSTFLAGS="-C target-feature=+vsx" +- name: "powerpc64le-unknown-linux-gnu + VSX" +- stage: linux-tier2 +- - env: TARGET=s390x-unknown-linux-gnu +- name: "s390x-unknown-linux-gnu" +- stage: linux-tier2 ++ stage: 64bit-tier2 ++ - name: "powerpc64le-unknown-linux-gnu" ++ env: TARGET=powerpc64le-unknown-linux-gnu ++ stage: build-test-verify ++ - name: "powerpc64le-unknown-linux-gnu + ALTIVEC" ++ env: TARGET=powerpc64le-unknown-linux-gnu RUSTFLAGS="-C target-feature=+altivec" ++ stage: build-test-verify ++ - name: "powerpc64le-unknown-linux-gnu + VSX" ++ env: TARGET=powerpc64le-unknown-linux-gnu RUSTFLAGS="-C target-feature=+vsx" ++ stage: build-test-verify ++ - name: "s390x-unknown-linux-gnu" ++ env: TARGET=s390x-unknown-linux-gnu ++ stage: 64bit-tier2 + - env: TARGET=sparc64-unknown-linux-gnu + name: "sparc64-unknown-linux-gnu" +- stage: linux-tier2 ++ stage: 64bit-tier2 + # WebAssembly: + - env: TARGET=wasm32-unknown-unknown + name: "wasm32-unknown-unknown" +- stage: osx-tier1 # For now ++ stage: 32bit-tier2 + # MacOSX: + - os: osx +- env: TARGET=i686-apple-darwin +- name: "i686-apple-darwin + SSE2" +- script: ci/run.sh +- osx_image: xcode10 +- stage: osx-tier1 +- - os: osx +- env: TARGET=i686-apple-darwin RUSTFLAGS="-C target-feature=+sse4.2" +- name: "i686-apple-darwin + SSE4.2" +- script: ci/run.sh +- osx_image: xcode10 +- stage: osx-tier1 +- # Travis-CI OSX build bots do not support AVX2: +- - os: osx +- env: TARGET=i686-apple-darwin RUSTFLAGS="-C target-feature=+avx" +- name: "i686-apple-darwin + AVX" +- script: ci/run.sh +- osx_image: xcode10 +- stage: osx-tier1 +- - os: osx +- env: TARGET=x86_64-apple-darwin +- name: "x86_64-apple-darwin + SSE2" +- install: true +- script: ci/run.sh +- osx_image: xcode10 +- stage: osx-tier1 +- - os: osx + env: TARGET=x86_64-apple-darwin RUSTFLAGS="-C target-feature=+sse4.2" + name: "x86_64-apple-darwin + SSE4.2" + install: true + script: ci/run.sh + osx_image: xcode10 +- stage: osx-tier1 ++ stage: build-test-verify + # Travis-CI OSX build bots do not support AVX2: + - os: osx + env: TARGET=x86_64-apple-darwin RUSTFLAGS="-C target-feature=+avx" + name: "x86_64-apple-darwin + AVX" + install: true + script: ci/run.sh + osx_image: xcode10 +- stage: osx-tier1 ++ stage: build-test-verify + # *BSDs: + #- env: TARGET=i686-unknown-freebsd NORUN=1 + # script: ci/run.sh + #- env: TARGET=x86_64-unknown-freebsd NORUN=1 + # script: ci/run.sh + #- env: TARGET=x86_64-unknown-netbsd NORUN=1 + # script: ci/run.sh + # Solaris: + #- env: TARGET=x86_64-sun-solaris NORUN=1 + # script: ci/run.sh + # iOS: + - os: osx +- env: TARGET=i386-apple-ios +- name: "i386-apple-ios" +- script: ci/run.sh +- osx_image: xcode9.4 +- stage: osx-tier2 +- - os: osx + env: TARGET=x86_64-apple-ios + name: "x86_64-apple-ios + SSE2" + script: ci/run.sh + osx_image: xcode9.4 +- stage: osx-tier2 +- - os: osx +- env: TARGET=armv7-apple-ios NORUN=1 +- name: "armv7-apple-ios [Build only]" +- script: ci/run.sh ++ stage: 64bit-tier2 ++ - name: "aarch64-apple-ios + NEON" ++ env: TARGET=aarch64-apple-ios RUSTFLAGS="-C target-feature=+neon" ++ os: osx + osx_image: xcode9.4 +- stage: osx-tier2 +- - os: osx +- env: TARGET=aarch64-apple-ios NORUN=1 +- name: "aarch64-apple-ios [Build only]" + script: ci/run.sh +- osx_image: xcode9.4 +- stage: osx-tier2 ++ stage: 64bit-tier2 + # BENCHMARKS: + - name: "Benchmarks - x86_64-unknown-linux-gnu" + install: TARGET=x86_64-unknown-linux-gnu ./ci/setup_benchmarks.sh +- script: PATH=$(pwd):$PATH NORUN=1 VERIFY=1 FEATURES=core_arch,ispc,sleef-sys ci/benchmark.sh ++ # FIXME: Use `core_arch,sleef-sys` features once they works again ++ script: PATH=$(pwd):$PATH NORUN=1 VERIFY=1 FEATURES=ispc ci/benchmark.sh + stage: tools + - name: "Benchmarks - x86_64-apple-darwin" + install: TARGET=x86_64-apple-darwin ./ci/setup_benchmarks.sh +- script: PATH=$(pwd):$PATH NORUN=1 VERIFY=1 FEATURES=core_arch,ispc,sleef-sys ci/benchmark.sh ++ # FIXME: Use `core_arch,sleef-sys` features once they works again ++ script: PATH=$(pwd):$PATH NORUN=1 VERIFY=1 FEATURES=ispc ci/benchmark.sh + os: osx + osx_image: xcode9.4 + stage: tools + # TOOLS: + - name: "Documentation" +- install: cargo install mdbook ++ before_install: ++ - sudo add-apt-repository -y ppa:deadsnakes/ppa ++ - sudo apt-get update -y ++ - sudo apt-get install -y python3.9 ++ install: ++ - cargo install mdbook + script: ci/dox.sh + stage: tools + - name: "rustfmt" + install: true +- before_script: rustup component add rustfmt-preview +- script: ci/all.sh check_fmt || true ++ script: | ++ if rustup component add rustfmt-preview ; then ++ ci/all.sh check_fmt || true ++ fi + stage: tools + - name: "clippy" + install: true +- before_script: rustup component add clippy-preview +- script: ci/all.sh clippy ++ script: | ++ if rustup component add clippy-preview ; then ++ ci/all.sh clippy ++ fi + stage: tools + + allow_failures: + # FIXME: ISPC cannot be found? + - name: "Benchmarks - x86_64-apple-darwin" +- # FIXME: TBD +- - env: TARGET=powerpc-unknown-linux-gnu +- - env: TARGET=powerpc64-unknown-linux-gnu +- - env: TARGET=powerpc64le-unknown-linux-gnu +- - env: TARGET=powerpc64le-unknown-linux-gnu RUSTFLAGS="-C target-feature=+altivec" +- - env: TARGET=powerpc64le-unknown-linux-gnu RUSTFLAGS="-C target-feature=+vsx" ++ # FIXME: i686 fails in inlining, apparently ++ - stage: 32bit-tier1 + #- env: TARGET=i686-unknown-freebsd NORUN=1 + #- env: TARGET=x86_64-unknown-freebsd NORUN=1 + #- env: TARGET=x86_64-unknown-netbsd NORUN=1 + #- env: TARGET=x86_64-sun-solaris NORUN=1 + + # FIXME: TBD +- - env: TARGET=arm-linux-androideabi +- - env: TARGET=arm-linux-androideabi RUSTFLAGS="-C target-feature=+v7,+neon" +- - env: TARGET=aarch64-linux-android +- - env: TARGET=aarch64-linux-android RUSTFLAGS="-C target-feature=+neon" ++ - stage: 64bit-tier2 ++ - stage: 32bit-tier2 + + # FIXME: iOS + # https://github.com/rust-lang-nursery/packed_simd/issues/26 +- - env: TARGET=i386-apple-ios + - env: TARGET=x86_64-apple-ios ++ # Is this related to the above? Mysterious test failure ++ - name: "aarch64-apple-ios + NEON" + + # FIXME: https://github.com/rust-lang-nursery/packed_simd/issues/182 + - env: TARGET=arm-unknown-linux-gnueabi RUSTFLAGS="-C target-feature=+v7,+neon" + - env: TARGET=arm-unknown-linux-gnueabihf RUSTFLAGS="-C target-feature=+v7,+neon" + - env: TARGET=armv7-unknown-linux-gnueabihf RUSTFLAGS="-C target-feature=+neon" + + # FIXME: https://github.com/rust-lang-nursery/packed_simd/issues/183 + - env: TARGET=wasm32-unknown-unknown +diff --git a/third_party/rust/packed_simd/Cargo.toml b/third_party/rust/packed_simd/Cargo.toml +--- a/third_party/rust/packed_simd/Cargo.toml ++++ b/third_party/rust/packed_simd/Cargo.toml +@@ -1,11 +1,11 @@ + [package] + name = "packed_simd" +-version = "0.3.3" ++version = "0.3.4" + authors = ["Gonzalo Brito Gadeschi "] + description = "Portable Packed SIMD vectors" + documentation = "https://docs.rs/crate/packed_simd/" + homepage = "https://github.com/rust-lang-nursery/packed_simd" + repository = "https://github.com/rust-lang-nursery/packed_simd" + keywords = ["simd", "vector", "portability"] + categories = ["hardware-support", "concurrency", "no-std", "data-structures"] + license = "MIT/Apache-2.0" +@@ -16,27 +16,27 @@ edition = "2018" + appveyor = { repository = "rust-lang-nursery/packed_simd" } + travis-ci = { repository = "rust-lang-nursery/packed_simd" } + codecov = { repository = "rust-lang-nursery/packed_simd" } + is-it-maintained-issue-resolution = { repository = "rust-lang-nursery/packed_simd" } + is-it-maintained-open-issues = { repository = "rust-lang-nursery/packed_simd" } + maintenance = { status = "experimental" } + + [dependencies] +-cfg-if = "^0.1.6" +-core_arch = { version = "^0.1.3", optional = true } ++cfg-if = "0.1.10" ++core_arch = { version = "0.1.5", optional = true } + + [features] + default = [] + into_bits = [] + libcore_neon = [] + + [dev-dependencies] + paste = "^0.1.3" +-arrayvec = { version = "^0.4", default-features = false } ++arrayvec = { version = "^0.5", default-features = false } + + [target.'cfg(target_arch = "x86_64")'.dependencies.sleef-sys] +-version = "^0.1.2" ++version = "0.1.2" + optional = true + + [target.wasm32-unknown-unknown.dev-dependencies] +-wasm-bindgen = "=0.2.19" +-wasm-bindgen-test = "=0.2.19" +\ No newline at end of file ++wasm-bindgen = "=0.2.52" ++wasm-bindgen-test = "=0.3.2" +diff --git a/third_party/rust/packed_simd/readme.md b/third_party/rust/packed_simd/README.md +rename from third_party/rust/packed_simd/readme.md +rename to third_party/rust/packed_simd/README.md +--- a/third_party/rust/packed_simd/readme.md ++++ b/third_party/rust/packed_simd/README.md +@@ -1,24 +1,22 @@ + # `Simd<[T; N]>` + + ## Implementation of [Rust RFC #2366: `std::simd`][rfc2366] + + [![Travis-CI Status]][travis] [![Appveyor Status]][appveyor] [![Latest Version]][crates.io] [![docs]][master_docs] + +-> This aims to be a 100% conforming implementation of Rust RFC 2366 for stabilization. +- +-**WARNING**: this crate only supports the most recent nightly Rust toolchain. ++**WARNING**: this crate only supports the most recent nightly Rust toolchain ++and will be superceded by [stdsimd](https://github.com/rust-lang/stdsimd). + + ## Documentation + + * [API docs (`master` branch)][master_docs] + * [Performance guide][perf_guide] +-* [API docs (`docs.rs`)][docs.rs]: **CURRENTLY DOWN** due to +- https://github.com/rust-lang-nursery/packed_simd/issues/110 ++* [API docs (`docs.rs`)][docs.rs] + * [RFC2366 `std::simd`][rfc2366]: - contains motivation, design rationale, + discussion, etc. + + ## Examples + + Most of the examples come with both a scalar and a vectorized implementation. + + * [`aobench`](https://github.com/rust-lang-nursery/packed_simd/tree/master/examples/aobench) +@@ -34,27 +32,16 @@ Most of the examples come with both a sc + + ## Cargo features + + * `into_bits` (default: disabled): enables `FromBits`/`IntoBits` trait + implementations for the vector types. These allow reinterpreting the bits of a + vector type as those of another vector type safely by just using the + `.into_bits()` method. + +-* `core_arch` (default: disabled): enable this feature to recompile `core::arch` +- for the target-features enabled. `packed_simd` includes optimizations for some +- target feature combinations that are enabled by this feature. Note, however, +- that this is an unstable dependency, that rustc might break at any time. +- +-* `sleef-sys` (default: disabled - `x86_64` only): internally uses the [SLEEF] +- short-vector math library when profitable via the [`sleef-sys`][sleef_sys] +- crate. [SLEEF] is licensed under the [Boost Software License +- v1.0][boost_license], an extremely permissive license, and can be statically +- linked without issues. +- + ## Performance + + The following [ISPC] examples are also part of `packed_simd`'s + [`examples/`](https://github.com/rust-lang-nursery/packed_simd/tree/master/examples/) + directory, where `packed_simd`+[`rayon`][rayon] are used to emulate [ISPC]'s + Single-Program-Multiple-Data (SPMD) programming model. The performance results + on different hardware is shown in the `readme.md` of each example. The following + table summarizes the performance ranges, where `+` means speed-up and `-` +@@ -70,70 +57,50 @@ slowdown: + While SPMD is not the intended use case for `packed_simd`, it is possible to + combine the library with [`rayon`][rayon] to poorly emulate [ISPC]'s SPMD programming + model in Rust. Writing performant code is not as straightforward as with + [ISPC], but with some care (e.g. see the [Performance Guide][perf_guide]) one + can easily match and often out-perform [ISPC]'s "default performance". + + ## Platform support + +-The following table describes the supported platforms: `build` shows whether the +-library compiles without issues for a given target, while `run` shows whether +-the full testsuite passes on the target. ++The following table describes the supported platforms: `build` shows whether ++the library compiles without issues for a given target, while `run` shows ++whether the test suite passes for a given target. + +-| Linux targets: | build | run | +-|-----------------------------------|-----------|---------| +-| `i586-unknown-linux-gnu` | ✓ | ✓ | +-| `i686-unknown-linux-gnu` | ✓ | ✓ | +-| `x86_64-unknown-linux-gnu` | ✓ | ✓ | +-| `arm-unknown-linux-gnueabi` | ✗ | ✗ | +-| `arm-unknown-linux-gnueabihf` | ✓ | ✓ | +-| `armv7-unknown-linux-gnueabi` | ✓ | ✓ | +-| `aarch64-unknown-linux-gnu` | ✓ | ✓ | +-| `mips-unknown-linux-gnu` | ✓ | ✓ | +-| `mipsel-unknown-linux-musl` | ✓ | ✓ | +-| `mips64-unknown-linux-gnuabi64` | ✓ | ✓ | +-| `mips64el-unknown-linux-gnuabi64` | ✓ | ✓ | +-| `powerpc-unknown-linux-gnu` | ✗ | ✗ | +-| `powerpc64-unknown-linux-gnu` | ✗ | ✗ | +-| `powerpc64le-unknown-linux-gnu` | ✗ | ✗ | +-| `s390x-unknown-linux-gnu` | ✓ | ✓* | +-| `sparc64-unknown-linux-gnu` | ✓ | ✓* | +-| `thumbv7neon-unknown-linux-gnueabihf` | ✓ | ✓ | +-| **MacOSX targets:** | **build** | **run** | +-| `x86_64-apple-darwin` | ✓ | ✓ | +-| `i686-apple-darwin` | ✓ | ✓ | +-| **Windows targets:** | **build** | **run** | +-| `x86_64-pc-windows-msvc` | ✓ | ✓ | +-| `i686-pc-windows-msvc` | ✓ | ✓ | +-| `x86_64-pc-windows-gnu` | ✗ | ✗ | +-| `i686-pc-windows-gnu` | ✗ | ✗ | +-| **WebAssembly targets:** | **build** | **run** | +-| `wasm32-unknown-unknown` | ✓ | ✓ | +-| **Android targets:** | **build** | **run** | +-| `x86_64-linux-android` | ✓ | ✓ | +-| `arm-linux-androideabi` | ✓ | ✓ | +-| `aarch64-linux-android` | ✓ | ✗ | +-| `thumbv7neon-linux-androideabi` | ✓ | ✓ | +-| **iOS targets:** | **build** | **run** | +-| `i386-apple-ios` | ✓ | ✗ | +-| `x86_64-apple-ios` | ✓ | ✗ | +-| `armv7-apple-ios` | ✓ | ✗** | +-| `aarch64-apple-ios` | ✓ | ✗** | +-| **xBSD targets:** | **build** | **run** | +-| `i686-unknown-freebsd` | ✗ | ✗** | +-| `x86_64-unknown-freebsd` | ✗ | ✗** | +-| `x86_64-unknown-netbsd` | ✗ | ✗** | +-| **Solaris targets:** | **build** | **run** | +-| `x86_64-sun-solaris` | ✗ | ✗** | ++| **Linux** | **build** | **run** | ++|---------------------------------------|-----------|---------| ++| `i586-unknown-linux-gnu` | ✓ | ✗ | ++| `i686-unknown-linux-gnu` | ✓ | ✗ | ++| `x86_64-unknown-linux-gnu` | ✓ | ✓ | ++| `arm-unknown-linux-gnueabi` | ✗ | ✗ | ++| `arm-unknown-linux-gnueabihf` | ✓ | ✓ | ++| `armv7-unknown-linux-gnueabi` | ✓ | ✓ | ++| `aarch64-unknown-linux-gnu` | ✓ | ✓ | ++| `mips-unknown-linux-gnu` | ✓ | ✗ | ++| `mipsel-unknown-linux-musl` | ✓ | ✗ | ++| `mips64-unknown-linux-gnuabi64` | ✓ | ✗ | ++| `mips64el-unknown-linux-gnuabi64` | ✓ | ✗ | ++| `powerpc-unknown-linux-gnu` | ✗ | ✗ | ++| `powerpc64-unknown-linux-gnu` | ✗ | ✗ | ++| `powerpc64le-unknown-linux-gnu` | ✓ | ✓ | ++| `s390x-unknown-linux-gnu` | ✗ | ✗ | ++| `sparc64-unknown-linux-gnu` | ✓ | ✗ | ++| `thumbv7neon-unknown-linux-gnueabihf` | ✓ | ✓ | ++| **MacOSX** | **build** | **run** | ++| `x86_64-apple-darwin` | ✓ | ✓ | ++| **Android** | **build** | **run** | ++| `x86_64-linux-android` | ✓ | ✓ | ++| `arm-linux-androideabi` | ✓ | ✓ | ++| `aarch64-linux-android` | ✓ | ✓ | ++| `thumbv7neon-linux-androideabi` | ✗ | ✗ | ++| **iOS** | **build** | **run** | ++| `x86_64-apple-ios` | ✓ | ✗ | ++| `aarch64-apple-ios` | ✓ | ✗ | + +-[*] most of the test suite passes correctly on these platform but +-there are correctness bugs open in the issue tracker. +- +-[**] it is currently not easily possible to run these platforms on CI. + + ## Machine code verification + + The + [`verify/`](https://github.com/rust-lang-nursery/packed_simd/tree/master/verify) + crate tests disassembles the portable packed vector APIs at run-time and + compares the generated machine code against the desired one to make sure that + this crate remains efficient. +@@ -157,18 +124,18 @@ Please see the [contributing instruction + + Contributions in any form (issues, pull requests, etc.) to this project + must adhere to Rust's [Code of Conduct]. + + Unless you explicitly state otherwise, any contribution intentionally submitted + for inclusion in `packed_simd` by you, as defined in the Apache-2.0 license, shall be + dual licensed as above, without any additional terms or conditions. + +-[travis]: https://travis-ci.org/rust-lang-nursery/packed_simd +-[Travis-CI Status]: https://travis-ci.org/rust-lang-nursery/packed_simd.svg?branch=master ++[travis]: https://travis-ci.com/rust-lang-nursery/packed_simd ++[Travis-CI Status]: https://travis-ci.com/rust-lang-nursery/packed_simd.svg?branch=master + [appveyor]: https://ci.appveyor.com/project/gnzlbg/packed-simd + [Appveyor Status]: https://ci.appveyor.com/api/projects/status/hd7v9dvr442hgdix?svg=true + [Latest Version]: https://img.shields.io/crates/v/packed_simd.svg + [crates.io]: https://crates.io/crates/packed_simd + [docs]: https://docs.rs/packed_simd/badge.svg + [docs.rs]: https://docs.rs/packed_simd/ + [master_docs]: https://rust-lang-nursery.github.io/packed_simd/packed_simd/ + [perf_guide]: https://rust-lang-nursery.github.io/packed_simd/perf-guide/ +diff --git a/third_party/rust/packed_simd/build.rs b/third_party/rust/packed_simd/build.rs +--- a/third_party/rust/packed_simd/build.rs ++++ b/third_party/rust/packed_simd/build.rs +@@ -1,8 +1,8 @@ + fn main() { +- println!("cargo:rustc-env=RUSTC_BOOTSTRAP=1"); ++ println!("cargo:rustc-env=RUSTC_BOOTSTRAP=1"); + let target = std::env::var("TARGET") + .expect("TARGET environment variable not defined"); + if target.contains("neon") { + println!("cargo:rustc-cfg=libcore_neon"); + } + } +diff --git a/third_party/rust/packed_simd/ci/all.sh b/third_party/rust/packed_simd/ci/all.sh +--- a/third_party/rust/packed_simd/ci/all.sh ++++ b/third_party/rust/packed_simd/ci/all.sh +@@ -16,17 +16,17 @@ cargo_check_fmt() { + cargo fmt --all -- --check + } + + cargo_fmt() { + cargo fmt --all + } + + cargo_clippy() { +- cargo clippy --all -- -D clippy::pedantic ++ cargo clippy --all -- -D clippy::perf + } + + CMD="-1" + + case $op in + clean*) + CMD=cargo_clean + ;; +diff --git a/third_party/rust/packed_simd/ci/docker/aarch64-unknown-linux-gnu/Dockerfile b/third_party/rust/packed_simd/ci/docker/aarch64-unknown-linux-gnu/Dockerfile +--- a/third_party/rust/packed_simd/ci/docker/aarch64-unknown-linux-gnu/Dockerfile ++++ b/third_party/rust/packed_simd/ci/docker/aarch64-unknown-linux-gnu/Dockerfile +@@ -1,9 +1,9 @@ +-FROM ubuntu:17.10 ++FROM ubuntu:18.04 + RUN apt-get update && apt-get install -y --no-install-recommends \ + gcc \ + ca-certificates \ + libc6-dev \ + gcc-aarch64-linux-gnu \ + libc6-dev-arm64-cross \ + qemu-user \ + make \ +diff --git a/third_party/rust/packed_simd/ci/docker/arm-unknown-linux-gnueabi/Dockerfile b/third_party/rust/packed_simd/ci/docker/arm-unknown-linux-gnueabi/Dockerfile +--- a/third_party/rust/packed_simd/ci/docker/arm-unknown-linux-gnueabi/Dockerfile ++++ b/third_party/rust/packed_simd/ci/docker/arm-unknown-linux-gnueabi/Dockerfile +@@ -1,9 +1,9 @@ +-FROM ubuntu:17.10 ++FROM ubuntu:18.04 + RUN apt-get update && apt-get install -y --no-install-recommends \ + gcc \ + ca-certificates \ + libc6-dev \ + libc6-armel-cross \ + libc6-dev-armel-cross \ + binutils-arm-linux-gnueabi \ + gcc-arm-linux-gnueabi \ +diff --git a/third_party/rust/packed_simd/ci/docker/arm-unknown-linux-gnueabihf/Dockerfile b/third_party/rust/packed_simd/ci/docker/arm-unknown-linux-gnueabihf/Dockerfile +--- a/third_party/rust/packed_simd/ci/docker/arm-unknown-linux-gnueabihf/Dockerfile ++++ b/third_party/rust/packed_simd/ci/docker/arm-unknown-linux-gnueabihf/Dockerfile +@@ -1,9 +1,9 @@ +-FROM ubuntu:17.10 ++FROM ubuntu:18.04 + RUN apt-get update && apt-get install -y --no-install-recommends \ + gcc \ + ca-certificates \ + libc6-dev \ + gcc-arm-linux-gnueabihf \ + libc6-dev-armhf-cross \ + qemu-user \ + make \ +diff --git a/third_party/rust/packed_simd/ci/docker/armv7-unknown-linux-gnueabihf/Dockerfile b/third_party/rust/packed_simd/ci/docker/armv7-unknown-linux-gnueabihf/Dockerfile +--- a/third_party/rust/packed_simd/ci/docker/armv7-unknown-linux-gnueabihf/Dockerfile ++++ b/third_party/rust/packed_simd/ci/docker/armv7-unknown-linux-gnueabihf/Dockerfile +@@ -1,9 +1,9 @@ +-FROM ubuntu:17.10 ++FROM ubuntu:18.04 + RUN apt-get update && apt-get install -y --no-install-recommends \ + gcc \ + ca-certificates \ + libc6-dev \ + gcc-arm-linux-gnueabihf \ + libc6-dev-armhf-cross \ + qemu-user \ + make \ +diff --git a/third_party/rust/packed_simd/ci/docker/i586-unknown-linux-gnu/Dockerfile b/third_party/rust/packed_simd/ci/docker/i586-unknown-linux-gnu/Dockerfile +--- a/third_party/rust/packed_simd/ci/docker/i586-unknown-linux-gnu/Dockerfile ++++ b/third_party/rust/packed_simd/ci/docker/i586-unknown-linux-gnu/Dockerfile +@@ -1,7 +1,7 @@ +-FROM ubuntu:17.10 ++FROM ubuntu:18.04 + RUN apt-get update && apt-get install -y --no-install-recommends \ + gcc-multilib \ + libc6-dev \ + file \ + make \ + ca-certificates +diff --git a/third_party/rust/packed_simd/ci/docker/i686-unknown-linux-gnu/Dockerfile b/third_party/rust/packed_simd/ci/docker/i686-unknown-linux-gnu/Dockerfile +--- a/third_party/rust/packed_simd/ci/docker/i686-unknown-linux-gnu/Dockerfile ++++ b/third_party/rust/packed_simd/ci/docker/i686-unknown-linux-gnu/Dockerfile +@@ -1,7 +1,7 @@ +-FROM ubuntu:17.10 ++FROM ubuntu:18.04 + RUN apt-get update && apt-get install -y --no-install-recommends \ + gcc-multilib \ + libc6-dev \ + file \ + make \ + ca-certificates +diff --git a/third_party/rust/packed_simd/ci/docker/mips-unknown-linux-gnu/Dockerfile b/third_party/rust/packed_simd/ci/docker/mips-unknown-linux-gnu/Dockerfile +--- a/third_party/rust/packed_simd/ci/docker/mips-unknown-linux-gnu/Dockerfile ++++ b/third_party/rust/packed_simd/ci/docker/mips-unknown-linux-gnu/Dockerfile +@@ -1,9 +1,9 @@ +-FROM ubuntu:17.10 ++FROM ubuntu:18.04 + + RUN apt-get update && apt-get install -y --no-install-recommends \ + gcc libc6-dev qemu-user ca-certificates \ + gcc-mips-linux-gnu libc6-dev-mips-cross \ + qemu-system-mips \ + qemu-user \ + make \ + file +diff --git a/third_party/rust/packed_simd/ci/docker/mips64-unknown-linux-gnuabi64/Dockerfile b/third_party/rust/packed_simd/ci/docker/mips64-unknown-linux-gnuabi64/Dockerfile +--- a/third_party/rust/packed_simd/ci/docker/mips64-unknown-linux-gnuabi64/Dockerfile ++++ b/third_party/rust/packed_simd/ci/docker/mips64-unknown-linux-gnuabi64/Dockerfile +@@ -1,9 +1,9 @@ +-FROM ubuntu:17.10 ++FROM ubuntu:18.04 + + RUN apt-get update && apt-get install -y --no-install-recommends \ + gcc libc6-dev qemu-user ca-certificates \ + gcc-mips64-linux-gnuabi64 libc6-dev-mips64-cross \ + qemu-system-mips64 qemu-user + + ENV CARGO_TARGET_MIPS64_UNKNOWN_LINUX_GNUABI64_LINKER=mips64-linux-gnuabi64-gcc \ + CARGO_TARGET_MIPS64_UNKNOWN_LINUX_GNUABI64_RUNNER="qemu-mips64 -L /usr/mips64-linux-gnuabi64" \ +diff --git a/third_party/rust/packed_simd/ci/docker/mips64el-unknown-linux-gnuabi64/Dockerfile b/third_party/rust/packed_simd/ci/docker/mips64el-unknown-linux-gnuabi64/Dockerfile +--- a/third_party/rust/packed_simd/ci/docker/mips64el-unknown-linux-gnuabi64/Dockerfile ++++ b/third_party/rust/packed_simd/ci/docker/mips64el-unknown-linux-gnuabi64/Dockerfile +@@ -1,9 +1,9 @@ +-FROM ubuntu:17.10 ++FROM ubuntu:18.04 + + RUN apt-get update && apt-get install -y --no-install-recommends \ + gcc libc6-dev qemu-user ca-certificates \ + gcc-mips64el-linux-gnuabi64 libc6-dev-mips64el-cross \ + qemu-system-mips64el + + ENV CARGO_TARGET_MIPS64EL_UNKNOWN_LINUX_GNUABI64_LINKER=mips64el-linux-gnuabi64-gcc \ + CARGO_TARGET_MIPS64EL_UNKNOWN_LINUX_GNUABI64_RUNNER="qemu-mips64el -L /usr/mips64el-linux-gnuabi64" \ +diff --git a/third_party/rust/packed_simd/ci/docker/mipsel-unknown-linux-musl/Dockerfile b/third_party/rust/packed_simd/ci/docker/mipsel-unknown-linux-musl/Dockerfile +--- a/third_party/rust/packed_simd/ci/docker/mipsel-unknown-linux-musl/Dockerfile ++++ b/third_party/rust/packed_simd/ci/docker/mipsel-unknown-linux-musl/Dockerfile +@@ -11,15 +11,15 @@ RUN apt-get update && \ + bzip2 \ + curl \ + file + + RUN mkdir /toolchain + + # Note that this originally came from: + # 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 +-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 | \ ++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 | \ + tar xjf - -C /toolchain --strip-components=2 + + ENV PATH=$PATH:/rust/bin:/toolchain/bin \ + CC_mipsel_unknown_linux_musl=mipsel-openwrt-linux-gcc \ + CARGO_TARGET_MIPSEL_UNKNOWN_LINUX_MUSL_LINKER=mipsel-openwrt-linux-gcc \ +- CARGO_TARGET_MIPSEL_UNKNOWN_LINUX_MUSL_RUNNER="qemu-mipsel -L /toolchain" +\ No newline at end of file ++ CARGO_TARGET_MIPSEL_UNKNOWN_LINUX_MUSL_RUNNER="qemu-mipsel -L /toolchain" +diff --git a/third_party/rust/packed_simd/ci/docker/powerpc-unknown-linux-gnu/Dockerfile b/third_party/rust/packed_simd/ci/docker/powerpc-unknown-linux-gnu/Dockerfile +--- a/third_party/rust/packed_simd/ci/docker/powerpc-unknown-linux-gnu/Dockerfile ++++ b/third_party/rust/packed_simd/ci/docker/powerpc-unknown-linux-gnu/Dockerfile +@@ -1,12 +1,13 @@ +-FROM ubuntu:17.10 ++FROM ubuntu:18.04 + + RUN apt-get update && apt-get install -y --no-install-recommends \ + gcc libc6-dev qemu-user ca-certificates \ + gcc-powerpc-linux-gnu libc6-dev-powerpc-cross \ + qemu-system-ppc \ + make \ + file + + ENV CARGO_TARGET_POWERPC_UNKNOWN_LINUX_GNU_LINKER=powerpc-linux-gnu-gcc \ + CARGO_TARGET_POWERPC_UNKNOWN_LINUX_GNU_RUNNER="qemu-ppc -cpu Vger -L /usr/powerpc-linux-gnu" \ ++ CC=powerpc-linux-gnu-gcc \ + OBJDUMP=powerpc-linux-gnu-objdump +diff --git a/third_party/rust/packed_simd/ci/docker/powerpc64-unknown-linux-gnu/Dockerfile b/third_party/rust/packed_simd/ci/docker/powerpc64-unknown-linux-gnu/Dockerfile +--- a/third_party/rust/packed_simd/ci/docker/powerpc64-unknown-linux-gnu/Dockerfile ++++ b/third_party/rust/packed_simd/ci/docker/powerpc64-unknown-linux-gnu/Dockerfile +@@ -1,9 +1,9 @@ +-FROM ubuntu:17.10 ++FROM ubuntu:18.04 + + RUN apt-get update && apt-get install -y --no-install-recommends \ + gcc \ + ca-certificates \ + libc6-dev \ + gcc-powerpc64-linux-gnu \ + libc6-dev-ppc64-cross \ + qemu-user \ +diff --git a/third_party/rust/packed_simd/ci/docker/powerpc64le-unknown-linux-gnu/Dockerfile b/third_party/rust/packed_simd/ci/docker/powerpc64le-unknown-linux-gnu/Dockerfile +--- a/third_party/rust/packed_simd/ci/docker/powerpc64le-unknown-linux-gnu/Dockerfile ++++ b/third_party/rust/packed_simd/ci/docker/powerpc64le-unknown-linux-gnu/Dockerfile +@@ -1,9 +1,9 @@ +-FROM ubuntu:17.10 ++FROM ubuntu:18.04 + + RUN apt-get update && apt-get install -y --no-install-recommends \ + gcc libc6-dev qemu-user ca-certificates \ + gcc-powerpc64le-linux-gnu libc6-dev-ppc64el-cross \ + qemu-system-ppc file make + + ENV CARGO_TARGET_POWERPC64LE_UNKNOWN_LINUX_GNU_LINKER=powerpc64le-linux-gnu-gcc \ + CARGO_TARGET_POWERPC64LE_UNKNOWN_LINUX_GNU_RUNNER="qemu-ppc64le -L /usr/powerpc64le-linux-gnu" \ +diff --git a/third_party/rust/packed_simd/ci/docker/thumbv7neon-unknown-linux-gnueabihf/Dockerfile b/third_party/rust/packed_simd/ci/docker/thumbv7neon-unknown-linux-gnueabihf/Dockerfile +--- a/third_party/rust/packed_simd/ci/docker/thumbv7neon-unknown-linux-gnueabihf/Dockerfile ++++ b/third_party/rust/packed_simd/ci/docker/thumbv7neon-unknown-linux-gnueabihf/Dockerfile +@@ -1,9 +1,9 @@ +-FROM ubuntu:17.10 ++FROM ubuntu:18.04 + RUN apt-get update && apt-get install -y --no-install-recommends \ + gcc \ + ca-certificates \ + libc6-dev \ + gcc-arm-linux-gnueabihf \ + libc6-dev-armhf-cross \ + qemu-user \ + make \ +diff --git a/third_party/rust/packed_simd/ci/docker/x86_64-unknown-linux-gnu/Dockerfile b/third_party/rust/packed_simd/ci/docker/x86_64-unknown-linux-gnu/Dockerfile +--- a/third_party/rust/packed_simd/ci/docker/x86_64-unknown-linux-gnu/Dockerfile ++++ b/third_party/rust/packed_simd/ci/docker/x86_64-unknown-linux-gnu/Dockerfile +@@ -1,9 +1,9 @@ +-FROM ubuntu:17.10 ++FROM ubuntu:18.04 + RUN apt-get update && apt-get install -y --no-install-recommends \ + gcc \ + libc6-dev \ + file \ + make \ + ca-certificates \ + cmake \ + libclang-dev \ +diff --git a/third_party/rust/packed_simd/ci/dox.sh b/third_party/rust/packed_simd/ci/dox.sh +--- a/third_party/rust/packed_simd/ci/dox.sh ++++ b/third_party/rust/packed_simd/ci/dox.sh +@@ -13,12 +13,15 @@ cargo doc --features=into_bits + # mdbook build perf-guide -d target/doc/perf-guide + cd perf-guide + mdbook build + cd - + cp -r perf-guide/book target/doc/perf-guide + + # If we're on travis, not a PR, and on the right branch, publish! + if [ "$TRAVIS_PULL_REQUEST" = "false" ] && [ "$TRAVIS_BRANCH" = "master" ]; then +- pip install ghp_import --install-option="--prefix=$HOME/.local" +- $HOME/.local/bin/ghp-import -n target/doc ++ python3 -vV ++ pip -vV ++ python3.9 -vV ++ pip install ghp_import --user ++ ghp-import -n target/doc + git push -qf https://${GH_PAGES}@github.com/${TRAVIS_REPO_SLUG}.git gh-pages + fi +diff --git a/third_party/rust/packed_simd/ci/run.sh b/third_party/rust/packed_simd/ci/run.sh +--- a/third_party/rust/packed_simd/ci/run.sh ++++ b/third_party/rust/packed_simd/ci/run.sh +@@ -73,19 +73,21 @@ cargo_test_impl() { + # Debug run: + if [[ "${TARGET}" != "wasm32-unknown-unknown" ]]; then + # Run wasm32-unknown-unknown in release mode only + cargo_test_impl + fi + + if [[ "${TARGET}" == "x86_64-unknown-linux-gnu" ]] || [[ "${TARGET}" == "x86_64-pc-windows-msvc" ]]; then + # use sleef on linux and windows x86_64 builds +- cargo_test_impl --release --features=into_bits,core_arch,sleef-sys ++ # FIXME: Use `core_arch,sleef-sys` features once they works again ++ cargo_test_impl --release --features=into_bits + else +- cargo_test_impl --release --features=into_bits,core_arch ++ # FIXME: Use `core_arch` feature once it works again ++ cargo_test_impl --release --features=into_bits + fi + + # Verify code generation + if [[ "${NOVERIFY}" != "1" ]]; then + cp -r verify/verify target/verify + export STDSIMD_ASSERT_INSTR_LIMIT=30 + if [[ "${TARGET}" == "i586-unknown-linux-gnu" ]]; then + export STDSIMD_ASSERT_INSTR_LIMIT=50 +diff --git a/third_party/rust/packed_simd/ci/setup_benchmarks.sh b/third_party/rust/packed_simd/ci/setup_benchmarks.sh +--- a/third_party/rust/packed_simd/ci/setup_benchmarks.sh ++++ b/third_party/rust/packed_simd/ci/setup_benchmarks.sh +@@ -1,10 +1,7 @@ + #!/usr/bin/env bash + + set -ex + + # Get latest ISPC binary for the target and put it in the path + git clone https://github.com/gnzlbg/ispc-binaries + cp ispc-binaries/ispc-${TARGET} ispc +- +-# Rust-bindgen requires RUSTFMT +-rustup component add rustfmt-preview +diff --git a/third_party/rust/packed_simd/src/api.rs b/third_party/rust/packed_simd/src/api.rs +--- a/third_party/rust/packed_simd/src/api.rs ++++ b/third_party/rust/packed_simd/src/api.rs +@@ -1,10 +1,12 @@ + //! Implements the Simd<[T; N]> APIs + ++#[macro_use] ++mod bitmask; + crate mod cast; + #[macro_use] + mod cmp; + #[macro_use] + mod default; + #[macro_use] + mod fmt; + #[macro_use] +@@ -34,17 +36,17 @@ mod swap_bytes; + #[macro_use] + mod bit_manip; + + #[cfg(feature = "into_bits")] + crate mod into_bits; + + macro_rules! impl_i { + ([$elem_ty:ident; $elem_n:expr]: $tuple_id:ident, $mask_ty:ident +- | $ielem_ty:ident | $test_tt:tt | $($elem_ids:ident),* ++ | $ielem_ty:ident, $ibitmask_ty:ident | $test_tt:tt | $($elem_ids:ident),* + | From: $($from_vec_ty:ident),* | $(#[$doc:meta])*) => { + impl_minimal_iuf!([$elem_ty; $elem_n]: $tuple_id | $ielem_ty | $test_tt + | $($elem_ids),* | $(#[$doc])*); + impl_ops_vector_arithmetic!([$elem_ty; $elem_n]: $tuple_id | $test_tt); + impl_ops_scalar_arithmetic!([$elem_ty; $elem_n]: $tuple_id | $test_tt); + impl_ops_vector_bitwise!( + [$elem_ty; $elem_n]: $tuple_id | $test_tt | (!(0 as $elem_ty), 0) + ); +@@ -88,26 +90,27 @@ macro_rules! impl_i { + [$elem_ty; $elem_n]: $tuple_id | $test_tt | (0, 1) + ); + impl_cmp_eq!([$elem_ty; $elem_n]: $tuple_id | $test_tt | (0, 1)); + impl_cmp_vertical!( + [$elem_ty; $elem_n]: $tuple_id, $mask_ty, false, (1, 0) | $test_tt + ); + impl_cmp_partial_ord!([$elem_ty; $elem_n]: $tuple_id | $test_tt); + impl_cmp_ord!([$elem_ty; $elem_n]: $tuple_id | $test_tt | (0, 1)); ++ impl_bitmask!($tuple_id | $ibitmask_ty | (-1, 0) | $test_tt); + + test_select!($elem_ty, $mask_ty, $tuple_id, (1, 2) | $test_tt); + test_cmp_partial_ord_int!([$elem_ty; $elem_n]: $tuple_id | $test_tt); + test_shuffle1_dyn!([$elem_ty; $elem_n]: $tuple_id | $test_tt); + } + } + + macro_rules! impl_u { + ([$elem_ty:ident; $elem_n:expr]: $tuple_id:ident, $mask_ty:ident +- | $ielem_ty:ident | $test_tt:tt | $($elem_ids:ident),* ++ | $ielem_ty:ident, $ibitmask_ty:ident | $test_tt:tt | $($elem_ids:ident),* + | From: $($from_vec_ty:ident),* | $(#[$doc:meta])*) => { + impl_minimal_iuf!([$elem_ty; $elem_n]: $tuple_id | $ielem_ty | $test_tt + | $($elem_ids),* | $(#[$doc])*); + impl_ops_vector_arithmetic!([$elem_ty; $elem_n]: $tuple_id | $test_tt); + impl_ops_scalar_arithmetic!([$elem_ty; $elem_n]: $tuple_id | $test_tt); + impl_ops_vector_bitwise!( + [$elem_ty; $elem_n]: $tuple_id | $test_tt | (!(0 as $elem_ty), 0) + ); +@@ -150,16 +153,18 @@ macro_rules! impl_u { + [$elem_ty; $elem_n]: $tuple_id | $test_tt | (1, 0) + ); + impl_cmp_eq!([$elem_ty; $elem_n]: $tuple_id | $test_tt | (0, 1)); + impl_cmp_vertical!( + [$elem_ty; $elem_n]: $tuple_id, $mask_ty, false, (1, 0) | $test_tt + ); + impl_cmp_partial_ord!([$elem_ty; $elem_n]: $tuple_id | $test_tt); + impl_cmp_ord!([$elem_ty; $elem_n]: $tuple_id | $test_tt | (0, 1)); ++ impl_bitmask!($tuple_id | $ibitmask_ty | ($ielem_ty::max_value(), 0) | ++ $test_tt); + + test_select!($elem_ty, $mask_ty, $tuple_id, (1, 2) | $test_tt); + test_cmp_partial_ord_int!([$elem_ty; $elem_n]: $tuple_id | $test_tt); + test_shuffle1_dyn!([$elem_ty; $elem_n]: $tuple_id | $test_tt); + } + } + + macro_rules! impl_f { +@@ -217,17 +222,18 @@ macro_rules! impl_f { + test_reduction_float_min_max!( + [$elem_ty; $elem_n]: $tuple_id | $test_tt + ); + test_shuffle1_dyn!([$elem_ty; $elem_n]: $tuple_id | $test_tt); + } + } + + macro_rules! impl_m { +- ([$elem_ty:ident; $elem_n:expr]: $tuple_id:ident | $ielem_ty:ident ++ ([$elem_ty:ident; $elem_n:expr]: $tuple_id:ident ++ | $ielem_ty:ident, $ibitmask_ty:ident + | $test_tt:tt | $($elem_ids:ident),* | From: $($from_vec_ty:ident),* + | $(#[$doc:meta])*) => { + impl_minimal_mask!( + [$elem_ty; $elem_n]: $tuple_id | $ielem_ty | $test_tt + | $($elem_ids),* | $(#[$doc])* + ); + impl_ops_vector_mask_bitwise!( + [$elem_ty; $elem_n]: $tuple_id | $test_tt | (true, false) +@@ -260,16 +266,17 @@ macro_rules! impl_m { + | $test_tt + ); + impl_select!([$elem_ty; $elem_n]: $tuple_id | $test_tt); + impl_cmp_partial_ord!([$elem_ty; $elem_n]: $tuple_id | $test_tt); + impl_cmp_ord!( + [$elem_ty; $elem_n]: $tuple_id | $test_tt | (false, true) + ); + impl_shuffle1_dyn!([$elem_ty; $elem_n]: $tuple_id | $test_tt); ++ impl_bitmask!($tuple_id | $ibitmask_ty | (true, false) | $test_tt); + + test_cmp_partial_ord_mask!([$elem_ty; $elem_n]: $tuple_id | $test_tt); + test_shuffle1_dyn_mask!([$elem_ty; $elem_n]: $tuple_id | $test_tt); + } + } + + macro_rules! impl_const_p { + ([$elem_ty:ty; $elem_n:expr]: $tuple_id:ident, $mask_ty:ident, +diff --git a/third_party/rust/packed_simd/src/api/bit_manip.rs b/third_party/rust/packed_simd/src/api/bit_manip.rs +--- a/third_party/rust/packed_simd/src/api/bit_manip.rs ++++ b/third_party/rust/packed_simd/src/api/bit_manip.rs +@@ -32,16 +32,17 @@ macro_rules! impl_bit_manip { + } + } + + test_if! { + $test_tt: + paste::item_with_macros! { + #[allow(overflowing_literals)] + pub mod [<$id _bit_manip>] { ++ #![allow(const_item_mutation)] + use super::*; + + const LANE_WIDTH: usize = mem::size_of::<$elem_ty>() * 8; + + macro_rules! test_func { + ($x:expr, $func:ident) => {{ + let mut actual = $x; + for i in 0..$id::lanes() { +diff --git a/third_party/rust/packed_simd/src/api/bitmask.rs b/third_party/rust/packed_simd/src/api/bitmask.rs +new file mode 100644 +--- /dev/null ++++ b/third_party/rust/packed_simd/src/api/bitmask.rs +@@ -0,0 +1,82 @@ ++//! Bitmask API ++ ++macro_rules! impl_bitmask { ++ ($id:ident | $ibitmask_ty:ident | ($set:expr, $clear:expr) ++ | $test_tt:tt) => { ++ impl $id { ++ /// Creates a bitmask with the MSB of each vector lane. ++ /// ++ /// If the vector has less than 8 lanes, the bits that do not ++ /// correspond to any vector lanes are cleared. ++ #[inline] ++ pub fn bitmask(self) -> $ibitmask_ty { ++ unsafe { codegen::llvm::simd_bitmask(self.0) } ++ } ++ } ++ ++ test_if! { ++ $test_tt: ++ paste::item! { ++ #[cfg(not(any( ++ // FIXME: https://github.com/rust-lang-nursery/packed_simd/issues/210 ++ all(target_arch = "mips", target_endian = "big"), ++ all(target_arch = "mips64", target_endian = "big"), ++ target_arch = "sparc64", ++ target_arch = "s390x", ++ )))] ++ pub mod [<$id _bitmask>] { ++ use super::*; ++ #[cfg_attr(not(target_arch = "wasm32"), test)] ++ #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] ++ fn bitmask() { ++ // clear all lanes ++ let vec = $id::splat($clear as _); ++ let bitmask: $ibitmask_ty = 0; ++ assert_eq!(vec.bitmask(), bitmask); ++ ++ // set even lanes ++ let mut vec = $id::splat($clear as _); ++ for i in 0..$id::lanes() { ++ if i % 2 == 0 { ++ vec = vec.replace(i, $set as _); ++ } ++ } ++ // create bitmask with even lanes set: ++ let mut bitmask: $ibitmask_ty = 0; ++ for i in 0..$id::lanes() { ++ if i % 2 == 0 { ++ bitmask |= 1 << i; ++ } ++ } ++ assert_eq!(vec.bitmask(), bitmask); ++ ++ ++ // set odd lanes ++ let mut vec = $id::splat($clear as _); ++ for i in 0..$id::lanes() { ++ if i % 2 != 0 { ++ vec = vec.replace(i, $set as _); ++ } ++ } ++ // create bitmask with odd lanes set: ++ let mut bitmask: $ibitmask_ty = 0; ++ for i in 0..$id::lanes() { ++ if i % 2 != 0 { ++ bitmask |= 1 << i; ++ } ++ } ++ assert_eq!(vec.bitmask(), bitmask); ++ ++ // set all lanes ++ let vec = $id::splat($set as _); ++ let mut bitmask: $ibitmask_ty = 0; ++ for i in 0..$id::lanes() { ++ bitmask |= 1 << i; ++ } ++ assert_eq!(vec.bitmask(), bitmask); ++ } ++ } ++ } ++ } ++ }; ++} +diff --git a/third_party/rust/packed_simd/src/api/cast/v128.rs b/third_party/rust/packed_simd/src/api/cast/v128.rs +--- a/third_party/rust/packed_simd/src/api/cast/v128.rs ++++ b/third_party/rust/packed_simd/src/api/cast/v128.rs +@@ -1,10 +1,10 @@ + //! `FromCast` and `IntoCast` implementations for portable 128-bit wide vectors +-#![rustfmt::skip] ++#[rustfmt::skip] + + use crate::*; + + impl_from_cast!( + i8x16[test_v128]: u8x16, m8x16, i16x16, u16x16, m16x16, i32x16, u32x16, f32x16, m32x16 + ); + impl_from_cast!( + u8x16[test_v128]: i8x16, m8x16, i16x16, u16x16, m16x16, i32x16, u32x16, f32x16, m32x16 +diff --git a/third_party/rust/packed_simd/src/api/cast/v16.rs b/third_party/rust/packed_simd/src/api/cast/v16.rs +--- a/third_party/rust/packed_simd/src/api/cast/v16.rs ++++ b/third_party/rust/packed_simd/src/api/cast/v16.rs +@@ -1,10 +1,10 @@ + //! `FromCast` and `IntoCast` implementations for portable 16-bit wide vectors +-#![rustfmt::skip] ++#[rustfmt::skip] + + use crate::*; + + impl_from_cast!( + i8x2[test_v16]: u8x2, m8x2, i16x2, u16x2, m16x2, i32x2, u32x2, f32x2, m32x2, + i64x2, u64x2, f64x2, m64x2, i128x2, u128x2, m128x2, isizex2, usizex2, msizex2 + ); + impl_from_cast!( +diff --git a/third_party/rust/packed_simd/src/api/cast/v256.rs b/third_party/rust/packed_simd/src/api/cast/v256.rs +--- a/third_party/rust/packed_simd/src/api/cast/v256.rs ++++ b/third_party/rust/packed_simd/src/api/cast/v256.rs +@@ -1,10 +1,10 @@ + //! `FromCast` and `IntoCast` implementations for portable 256-bit wide vectors +-#![rustfmt::skip] ++#[rustfmt::skip] + + use crate::*; + + impl_from_cast!(i8x32[test_v256]: u8x32, m8x32, i16x32, u16x32, m16x32); + impl_from_cast!(u8x32[test_v256]: i8x32, m8x32, i16x32, u16x32, m16x32); + impl_from_cast_mask!(m8x32[test_v256]: i8x32, u8x32, i16x32, u16x32, m16x32); + + impl_from_cast!( +diff --git a/third_party/rust/packed_simd/src/api/cast/v32.rs b/third_party/rust/packed_simd/src/api/cast/v32.rs +--- a/third_party/rust/packed_simd/src/api/cast/v32.rs ++++ b/third_party/rust/packed_simd/src/api/cast/v32.rs +@@ -1,10 +1,10 @@ + //! `FromCast` and `IntoCast` implementations for portable 32-bit wide vectors +-#![rustfmt::skip] ++#[rustfmt::skip] + + use crate::*; + + impl_from_cast!( + i8x4[test_v32]: u8x4, m8x4, i16x4, u16x4, m16x4, i32x4, u32x4, f32x4, m32x4, + i64x4, u64x4, f64x4, m64x4, i128x4, u128x4, m128x4, isizex4, usizex4, msizex4 + ); + impl_from_cast!( +diff --git a/third_party/rust/packed_simd/src/api/cast/v512.rs b/third_party/rust/packed_simd/src/api/cast/v512.rs +--- a/third_party/rust/packed_simd/src/api/cast/v512.rs ++++ b/third_party/rust/packed_simd/src/api/cast/v512.rs +@@ -1,10 +1,10 @@ + //! `FromCast` and `IntoCast` implementations for portable 512-bit wide vectors +-#![rustfmt::skip] ++#[rustfmt::skip] + + use crate::*; + + impl_from_cast!(i8x64[test_v512]: u8x64, m8x64); + impl_from_cast!(u8x64[test_v512]: i8x64, m8x64); + impl_from_cast_mask!(m8x64[test_v512]: i8x64, u8x64); + + impl_from_cast!(i16x32[test_v512]: i8x32, u8x32, m8x32, u16x32, m16x32); +diff --git a/third_party/rust/packed_simd/src/api/cast/v64.rs b/third_party/rust/packed_simd/src/api/cast/v64.rs +--- a/third_party/rust/packed_simd/src/api/cast/v64.rs ++++ b/third_party/rust/packed_simd/src/api/cast/v64.rs +@@ -1,10 +1,10 @@ + //! `FromCast` and `IntoCast` implementations for portable 64-bit wide vectors +-#![rustfmt::skip] ++#[rustfmt::skip] + + use crate::*; + + impl_from_cast!( + i8x8[test_v64]: u8x8, m8x8, i16x8, u16x8, m16x8, i32x8, u32x8, f32x8, m32x8, + i64x8, u64x8, f64x8, m64x8, isizex8, usizex8, msizex8 + ); + impl_from_cast!( +diff --git a/third_party/rust/packed_simd/src/api/default.rs b/third_party/rust/packed_simd/src/api/default.rs +--- a/third_party/rust/packed_simd/src/api/default.rs ++++ b/third_party/rust/packed_simd/src/api/default.rs +@@ -7,16 +7,18 @@ macro_rules! impl_default { + fn default() -> Self { + Self::splat($elem_ty::default()) + } + } + + test_if!{ + $test_tt: + paste::item! { ++ // Comparisons use integer casts within mantissa^1 range. ++ #[allow(clippy::float_cmp)] + pub mod [<$id _default>] { + use super::*; + #[cfg_attr(not(target_arch = "wasm32"), test)] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] + fn default() { + let a = $id::default(); + for i in 0..$id::lanes() { + assert_eq!(a.extract(i), $elem_ty::default()); + } +diff --git a/third_party/rust/packed_simd/src/api/from/from_array.rs b/third_party/rust/packed_simd/src/api/from/from_array.rs +--- a/third_party/rust/packed_simd/src/api/from/from_array.rs ++++ b/third_party/rust/packed_simd/src/api/from/from_array.rs +@@ -51,16 +51,18 @@ macro_rules! impl_from_array { + unsafe { U { array: self }.vec } + } + } + */ + + test_if! { + $test_tt: + paste::item! { ++ // Comparisons use integer casts within mantissa^1 range. ++ #[allow(clippy::float_cmp)] + mod [<$id _from>] { + use super::*; + #[test] + fn array() { + let vec: $id = Default::default(); + + // FIXME: Workaround for arrays with more than 32 + // elements. +diff --git a/third_party/rust/packed_simd/src/api/hash.rs b/third_party/rust/packed_simd/src/api/hash.rs +--- a/third_party/rust/packed_simd/src/api/hash.rs ++++ b/third_party/rust/packed_simd/src/api/hash.rs +@@ -31,16 +31,18 @@ macro_rules! impl_hash { + crate::mem::size_of::(), + crate::mem::size_of::<$id>() + ); + #[allow(deprecated)] + let mut a_hash = SipHasher13::new(); + let mut v_hash = a_hash.clone(); + a.hash(&mut a_hash); + ++ // Integer within mantissa^1 range. ++ #[allow(clippy::float_cmp)] + let v = $id::splat(42 as $elem_ty); + v.hash(&mut v_hash); + assert_eq!(a_hash.finish(), v_hash.finish()); + } + } + } + } + }; +diff --git a/third_party/rust/packed_simd/src/api/into_bits/arch_specific.rs b/third_party/rust/packed_simd/src/api/into_bits/arch_specific.rs +--- a/third_party/rust/packed_simd/src/api/into_bits/arch_specific.rs ++++ b/third_party/rust/packed_simd/src/api/into_bits/arch_specific.rs +@@ -1,11 +1,11 @@ + //! `FromBits` and `IntoBits` between portable vector types and the + //! architecture-specific vector types. +-#![rustfmt::skip] ++#[rustfmt::skip] + + // FIXME: MIPS FromBits/IntoBits + + #[allow(unused)] + use crate::*; + + /// This macro implements FromBits for the portable and the architecture + /// specific vector types. +@@ -79,17 +79,16 @@ macro_rules! impl_arch { + } + + //////////////////////////////////////////////////////////////////////////////// + // Implementations for the 64-bit wide vector types: + + // FIXME: 64-bit single element types + // FIXME: arm/aarch float16x4_t missing + impl_arch!( +- [x86["x86"]: __m64], [x86_64["x86_64"]: __m64], + [arm["arm"]: int8x8_t, uint8x8_t, poly8x8_t, int16x4_t, uint16x4_t, + poly16x4_t, int32x2_t, uint32x2_t, float32x2_t, int64x1_t, + uint64x1_t], + [aarch64["aarch64"]: int8x8_t, uint8x8_t, poly8x8_t, int16x4_t, uint16x4_t, + poly16x4_t, int32x2_t, uint32x2_t, float32x2_t, int64x1_t, uint64x1_t, + float64x1_t] | + from: i8x8, u8x8, m8x8, i16x4, u16x4, m16x4, i32x2, u32x2, f32x2, m32x2 | + into: i8x8, u8x8, i16x4, u16x4, i32x2, u32x2, f32x2 | +diff --git a/third_party/rust/packed_simd/src/api/into_bits/v128.rs b/third_party/rust/packed_simd/src/api/into_bits/v128.rs +--- a/third_party/rust/packed_simd/src/api/into_bits/v128.rs ++++ b/third_party/rust/packed_simd/src/api/into_bits/v128.rs +@@ -1,10 +1,10 @@ + //! `FromBits` and `IntoBits` implementations for portable 128-bit wide vectors +-#![rustfmt::skip] ++#[rustfmt::skip] + + #[allow(unused)] // wasm_bindgen_test + use crate::*; + + impl_from_bits!(i8x16[test_v128]: u8x16, m8x16, i16x8, u16x8, m16x8, i32x4, u32x4, f32x4, m32x4, i64x2, u64x2, f64x2, m64x2, i128x1, u128x1, m128x1); + impl_from_bits!(u8x16[test_v128]: i8x16, m8x16, i16x8, u16x8, m16x8, i32x4, u32x4, f32x4, m32x4, i64x2, u64x2, f64x2, m64x2, i128x1, u128x1, m128x1); + impl_from_bits!(m8x16[test_v128]: m16x8, m32x4, m64x2, m128x1); + +diff --git a/third_party/rust/packed_simd/src/api/into_bits/v16.rs b/third_party/rust/packed_simd/src/api/into_bits/v16.rs +--- a/third_party/rust/packed_simd/src/api/into_bits/v16.rs ++++ b/third_party/rust/packed_simd/src/api/into_bits/v16.rs +@@ -1,9 +1,9 @@ + //! `FromBits` and `IntoBits` implementations for portable 16-bit wide vectors +-#![rustfmt::skip] ++#[rustfmt::skip] + + #[allow(unused)] // wasm_bindgen_test + use crate::*; + + impl_from_bits!(i8x2[test_v16]: u8x2, m8x2); + impl_from_bits!(u8x2[test_v16]: i8x2, m8x2); + // note: m8x2 cannot be constructed from all i8x2 or u8x2 bit patterns +diff --git a/third_party/rust/packed_simd/src/api/into_bits/v256.rs b/third_party/rust/packed_simd/src/api/into_bits/v256.rs +--- a/third_party/rust/packed_simd/src/api/into_bits/v256.rs ++++ b/third_party/rust/packed_simd/src/api/into_bits/v256.rs +@@ -1,10 +1,10 @@ + //! `FromBits` and `IntoBits` implementations for portable 256-bit wide vectors +-#![rustfmt::skip] ++#[rustfmt::skip] + + #[allow(unused)] // wasm_bindgen_test + use crate::*; + + impl_from_bits!(i8x32[test_v256]: u8x32, m8x32, i16x16, u16x16, m16x16, i32x8, u32x8, f32x8, m32x8, i64x4, u64x4, f64x4, m64x4, i128x2, u128x2, m128x2); + impl_from_bits!(u8x32[test_v256]: i8x32, m8x32, i16x16, u16x16, m16x16, i32x8, u32x8, f32x8, m32x8, i64x4, u64x4, f64x4, m64x4, i128x2, u128x2, m128x2); + impl_from_bits!(m8x32[test_v256]: m16x16, m32x8, m64x4, m128x2); + +diff --git a/third_party/rust/packed_simd/src/api/into_bits/v32.rs b/third_party/rust/packed_simd/src/api/into_bits/v32.rs +--- a/third_party/rust/packed_simd/src/api/into_bits/v32.rs ++++ b/third_party/rust/packed_simd/src/api/into_bits/v32.rs +@@ -1,10 +1,10 @@ + //! `FromBits` and `IntoBits` implementations for portable 32-bit wide vectors +-#![rustfmt::skip] ++#[rustfmt::skip] + + #[allow(unused)] // wasm_bindgen_test + use crate::*; + + impl_from_bits!(i8x4[test_v32]: u8x4, m8x4, i16x2, u16x2, m16x2); + impl_from_bits!(u8x4[test_v32]: i8x4, m8x4, i16x2, u16x2, m16x2); + impl_from_bits!(m8x4[test_v32]: m16x2); + +diff --git a/third_party/rust/packed_simd/src/api/into_bits/v512.rs b/third_party/rust/packed_simd/src/api/into_bits/v512.rs +--- a/third_party/rust/packed_simd/src/api/into_bits/v512.rs ++++ b/third_party/rust/packed_simd/src/api/into_bits/v512.rs +@@ -1,10 +1,10 @@ + //! `FromBits` and `IntoBits` implementations for portable 512-bit wide vectors +-#![rustfmt::skip] ++#[rustfmt::skip] + + #[allow(unused)] // wasm_bindgen_test + use crate::*; + + impl_from_bits!(i8x64[test_v512]: u8x64, m8x64, i16x32, u16x32, m16x32, i32x16, u32x16, f32x16, m32x16, i64x8, u64x8, f64x8, m64x8, i128x4, u128x4, m128x4); + impl_from_bits!(u8x64[test_v512]: i8x64, m8x64, i16x32, u16x32, m16x32, i32x16, u32x16, f32x16, m32x16, i64x8, u64x8, f64x8, m64x8, i128x4, u128x4, m128x4); + impl_from_bits!(m8x64[test_v512]: m16x32, m32x16, m64x8, m128x4); + +diff --git a/third_party/rust/packed_simd/src/api/into_bits/v64.rs b/third_party/rust/packed_simd/src/api/into_bits/v64.rs +--- a/third_party/rust/packed_simd/src/api/into_bits/v64.rs ++++ b/third_party/rust/packed_simd/src/api/into_bits/v64.rs +@@ -1,10 +1,10 @@ + //! `FromBits` and `IntoBits` implementations for portable 64-bit wide vectors +-#![rustfmt::skip] ++#[rustfmt::skip] + + #[allow(unused)] // wasm_bindgen_test + use crate::*; + + impl_from_bits!(i8x8[test_v64]: u8x8, m8x8, i16x4, u16x4, m16x4, i32x2, u32x2, f32x2, m32x2); + impl_from_bits!(u8x8[test_v64]: i8x8, m8x8, i16x4, u16x4, m16x4, i32x2, u32x2, f32x2, m32x2); + impl_from_bits!(m8x8[test_v64]: m16x4, m32x2); + +diff --git a/third_party/rust/packed_simd/src/api/minimal/iuf.rs b/third_party/rust/packed_simd/src/api/minimal/iuf.rs +--- a/third_party/rust/packed_simd/src/api/minimal/iuf.rs ++++ b/third_party/rust/packed_simd/src/api/minimal/iuf.rs +@@ -48,17 +48,17 @@ macro_rules! impl_minimal_iuf { + #[inline] + pub fn extract(self, index: usize) -> $elem_ty { + assert!(index < $elem_count); + unsafe { self.extract_unchecked(index) } + } + + /// Extracts the value at `index`. + /// +- /// # Precondition ++ /// # Safety + /// + /// If `index >= Self::lanes()` the behavior is undefined. + #[inline] + pub unsafe fn extract_unchecked(self, index: usize) -> $elem_ty { + use crate::llvm::simd_extract; + let e: $ielem_ty = simd_extract(self.0, index as u32); + e as $elem_ty + } +@@ -75,17 +75,17 @@ macro_rules! impl_minimal_iuf { + ] + pub fn replace(self, index: usize, new_value: $elem_ty) -> Self { + assert!(index < $elem_count); + unsafe { self.replace_unchecked(index, new_value) } + } + + /// Returns a new vector where the value at `index` is replaced by `new_value`. + /// +- /// # Precondition ++ /// # Safety + /// + /// If `index >= Self::lanes()` the behavior is undefined. + #[inline] + #[must_use = "replace_unchecked does not modify the original value - \ + it returns a new vector with the value at `index` \ + replaced by `new_value`d" + ] + pub unsafe fn replace_unchecked( +@@ -96,16 +96,18 @@ macro_rules! impl_minimal_iuf { + use crate::llvm::simd_insert; + Simd(simd_insert(self.0, index as u32, new_value as $ielem_ty)) + } + } + + test_if!{ + $test_tt: + paste::item! { ++ // Comparisons use integer casts within mantissa^1 range. ++ #[allow(clippy::float_cmp)] + pub mod [<$id _minimal>] { + use super::*; + #[cfg_attr(not(target_arch = "wasm32"), test)] + #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] + fn minimal() { + // lanes: + assert_eq!($elem_count, $id::lanes()); + +diff --git a/third_party/rust/packed_simd/src/api/minimal/mask.rs b/third_party/rust/packed_simd/src/api/minimal/mask.rs +--- a/third_party/rust/packed_simd/src/api/minimal/mask.rs ++++ b/third_party/rust/packed_simd/src/api/minimal/mask.rs +@@ -53,16 +53,18 @@ macro_rules! impl_minimal_mask { + #[inline] + pub fn extract(self, index: usize) -> bool { + assert!(index < $elem_count); + unsafe { self.extract_unchecked(index) } + } + + /// Extracts the value at `index`. + /// ++ /// # Safety ++ /// + /// If `index >= Self::lanes()` the behavior is undefined. + #[inline] + pub unsafe fn extract_unchecked(self, index: usize) -> bool { + use crate::llvm::simd_extract; + let x: $ielem_ty = simd_extract(self.0, index as u32); + x != 0 + } + +@@ -80,19 +82,19 @@ macro_rules! impl_minimal_mask { + pub fn replace(self, index: usize, new_value: bool) -> Self { + assert!(index < $elem_count); + unsafe { self.replace_unchecked(index, new_value) } + } + + /// Returns a new vector where the value at `index` is replaced by + /// `new_value`. + /// +- /// # Panics ++ /// # Safety + /// +- /// If `index >= Self::lanes()`. ++ /// If `index >= Self::lanes()` the behavior is undefined. + #[inline] + #[must_use = "replace_unchecked does not modify the original value - \ + it returns a new vector with the value at `index` \ + replaced by `new_value`d" + ] + pub unsafe fn replace_unchecked( + self, + index: usize, +diff --git a/third_party/rust/packed_simd/src/api/minimal/ptr.rs b/third_party/rust/packed_simd/src/api/minimal/ptr.rs +--- a/third_party/rust/packed_simd/src/api/minimal/ptr.rs ++++ b/third_party/rust/packed_simd/src/api/minimal/ptr.rs +@@ -63,17 +63,17 @@ macro_rules! impl_minimal_p { + #[inline] + pub fn extract(self, index: usize) -> $elem_ty { + assert!(index < $elem_count); + unsafe { self.extract_unchecked(index) } + } + + /// Extracts the value at `index`. + /// +- /// # Precondition ++ /// # Safety + /// + /// If `index >= Self::lanes()` the behavior is undefined. + #[inline] + pub unsafe fn extract_unchecked(self, index: usize) -> $elem_ty { + use crate::llvm::simd_extract; + simd_extract(self.0, index as u32) + } + +@@ -91,17 +91,17 @@ macro_rules! impl_minimal_p { + #[allow(clippy::not_unsafe_ptr_arg_deref)] + pub fn replace(self, index: usize, new_value: $elem_ty) -> Self { + assert!(index < $elem_count); + unsafe { self.replace_unchecked(index, new_value) } + } + + /// Returns a new vector where the value at `index` is replaced by `new_value`. + /// +- /// # Precondition ++ /// # Safety + /// + /// If `index >= Self::lanes()` the behavior is undefined. + #[inline] + #[must_use = "replace_unchecked does not modify the original value - \ + it returns a new vector with the value at `index` \ + replaced by `new_value`d" + ] + pub unsafe fn replace_unchecked( +@@ -210,17 +210,17 @@ macro_rules! impl_minimal_p { + impl crate::fmt::Debug for $id { + #[allow(clippy::missing_inline_in_public_items)] + fn fmt(&self, f: &mut crate::fmt::Formatter<'_>) + -> crate::fmt::Result { + write!( + f, + "{}<{}>(", + stringify!($id), +- unsafe { crate::intrinsics::type_name::() } ++ crate::intrinsics::type_name::() + )?; + for i in 0..$elem_count { + if i > 0 { + write!(f, ", ")?; + } + self.extract(i).fmt(f)?; + } + write!(f, ")") +@@ -545,21 +545,17 @@ macro_rules! impl_minimal_p { + let values = [1_i32; $elem_count]; + + let mut vec: $id = Default::default(); + let mut array = [ + $id::::null().extract(0); $elem_count + ]; + + for i in 0..$elem_count { +- let ptr = unsafe { +- crate::mem::transmute( +- &values[i] as *const i32 +- ) +- }; ++ let ptr = &values[i] as *const i32 as *mut i32; + vec = vec.replace(i, ptr); + array[i] = ptr; + } + + // FIXME: there is no impl of From<$id> for [$elem_ty; N] + // let a0 = From::from(vec); + // assert_eq!(a0, array); + #[allow(unused_assignments)] +@@ -606,30 +602,30 @@ macro_rules! impl_minimal_p { + unsafe { + assert!(slice.len() >= $elem_count); + Self::from_slice_unaligned_unchecked(slice) + } + } + + /// Instantiates a new vector with the values of the `slice`. + /// +- /// # Precondition ++ /// # Safety + /// + /// If `slice.len() < Self::lanes()` or `&slice[0]` is not aligned + /// to an `align_of::()` boundary, the behavior is undefined. + #[inline] + pub unsafe fn from_slice_aligned_unchecked(slice: &[$elem_ty]) + -> Self { + #[allow(clippy::cast_ptr_alignment)] + *(slice.get_unchecked(0) as *const $elem_ty as *const Self) + } + + /// Instantiates a new vector with the values of the `slice`. + /// +- /// # Precondition ++ /// # Safety + /// + /// If `slice.len() < Self::lanes()` the behavior is undefined. + #[inline] + pub unsafe fn from_slice_unaligned_unchecked( + slice: &[$elem_ty], + ) -> Self { + use crate::mem::size_of; + let target_ptr = +@@ -822,33 +818,33 @@ macro_rules! impl_minimal_p { + unsafe { + assert!(slice.len() >= $elem_count); + self.write_to_slice_unaligned_unchecked(slice); + } + } + + /// Writes the values of the vector to the `slice`. + /// +- /// # Precondition ++ /// # Safety + /// + /// If `slice.len() < Self::lanes()` or `&slice[0]` is not + /// aligned to an `align_of::()` boundary, the behavior is + /// undefined. + #[inline] + pub unsafe fn write_to_slice_aligned_unchecked( + self, slice: &mut [$elem_ty], + ) { + #[allow(clippy::cast_ptr_alignment)] + *(slice.get_unchecked_mut(0) as *mut $elem_ty as *mut Self) = + self; + } + + /// Writes the values of the vector to the `slice`. + /// +- /// # Precondition ++ /// # Safety + /// + /// If `slice.len() < Self::lanes()` the behavior is undefined. + #[inline] + pub unsafe fn write_to_slice_unaligned_unchecked( + self, slice: &mut [$elem_ty], + ) { + let target_ptr = + slice.get_unchecked_mut(0) as *mut $elem_ty as *mut u8; +@@ -1020,21 +1016,17 @@ macro_rules! impl_minimal_p { + + let mut vec: $id = Default::default(); + let mut array = [ + $id::::null().extract(0); + $elem_count + ]; + + for i in 0..$elem_count { +- let ptr = unsafe { +- crate::mem::transmute( +- &values[i] as *const i32 +- ) +- }; ++ let ptr = &values[i] as *const i32 as *mut i32; + vec = vec.replace(i, ptr); + array[i] = ptr; + } + + #[allow(deprecated)] + let mut a_hash = SipHasher13::new(); + let mut v_hash = a_hash.clone(); + array.hash(&mut a_hash); +@@ -1146,17 +1138,17 @@ macro_rules! impl_minimal_p { + /// allocation. For instance, no known 64-bit platform can ever + /// serve a request for 263 bytes due to page-table limitations or + /// splitting the address space. However, some 32-bit and 16-bit + /// platforms may successfully serve a request for more than + /// `isize::MAX` bytes with things like Physical Address Extension. + /// As such, memory acquired directly from allocators or memory + /// mapped files may be too large to handle with this function. + /// +- /// Consider using wrapping_offset_from instead if these constraints ++ /// Consider using `wrapping_offset_from` instead if these constraints + /// are difficult to satisfy. The only advantage of this method is + /// that it enables more aggressive compiler optimizations. + #[inline] + pub unsafe fn offset_from(self, origin: Self) -> $isize_ty { + // FIXME: should use LLVM's `sub nsw nuw`. + self.wrapping_offset_from(origin) + } + +diff --git a/third_party/rust/packed_simd/src/api/ops/vector_float_min_max.rs b/third_party/rust/packed_simd/src/api/ops/vector_float_min_max.rs +--- a/third_party/rust/packed_simd/src/api/ops/vector_float_min_max.rs ++++ b/third_party/rust/packed_simd/src/api/ops/vector_float_min_max.rs +@@ -21,16 +21,21 @@ macro_rules! impl_ops_vector_float_min_m + pub fn max(self, x: Self) -> Self { + use crate::llvm::simd_fmax; + unsafe { Simd(simd_fmax(self.0, x.0)) } + } + } + test_if!{ + $test_tt: + paste::item! { ++ #[cfg(not(any( ++ // FIXME: https://github.com/rust-lang-nursery/packed_simd/issues/223 ++ all(target_arch = "mips", target_endian = "big"), ++ target_arch = "mips64", ++ )))] + pub mod [<$id _ops_vector_min_max>] { + use super::*; + #[cfg_attr(not(target_arch = "wasm32"), test)] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] + fn min_max() { + let n = crate::$elem_ty::NAN; + let o = $id::splat(1. as $elem_ty); + let t = $id::splat(2. as $elem_ty); + +diff --git a/third_party/rust/packed_simd/src/api/ptr/gather_scatter.rs b/third_party/rust/packed_simd/src/api/ptr/gather_scatter.rs +--- a/third_party/rust/packed_simd/src/api/ptr/gather_scatter.rs ++++ b/third_party/rust/packed_simd/src/api/ptr/gather_scatter.rs +@@ -44,19 +44,19 @@ macro_rules! impl_ptr_read { + let mut v = [0_i32; $elem_count]; + for i in 0..$elem_count { + v[i] = i as i32; + } + + let mut ptr = $id::::null(); + + for i in 0..$elem_count { +- ptr = ptr.replace(i, unsafe { +- crate::mem::transmute(&v[i] as *const i32) +- }); ++ ptr = ptr.replace(i, ++ &v[i] as *const i32 as *mut i32 ++ ); + } + + // all mask elements are true: + let mask = $mask_ty::splat(true); + let def = Simd::<[i32; $elem_count]>::splat(42_i32); + let r: Simd<[i32; $elem_count]> = unsafe { + ptr.read(mask, def) + }; +@@ -130,42 +130,18 @@ macro_rules! impl_ptr_write { + #[inline] + pub unsafe fn write( + self, mask: Simd<[M; $elem_count]>, + value: Simd<[T; $elem_count]>, + ) where + M: sealed::Mask, + [M; $elem_count]: sealed::SimdArray, + { +- // FIXME: +- // https://github.com/rust-lang-nursery/packed_simd/issues/85 +- #[cfg(not(target_arch = "mips"))] +- { +- use crate::llvm::simd_scatter; +- simd_scatter(value.0, self.0, mask.0) +- } +- #[cfg(target_arch = "mips")] +- { +- let m_ptr = +- &mask as *const Simd<[M; $elem_count]> as *const M; +- for i in 0..$elem_count { +- let m = ptr::read(m_ptr.add(i)); +- if m.test() { +- let t_ptr = &self +- as *const Simd<[*mut T; $elem_count]> +- as *mut *mut T; +- let v_ptr = &value as *const Simd<[T; $elem_count]> +- as *const T; +- ptr::write( +- ptr::read(t_ptr.add(i)), +- ptr::read(v_ptr.add(i)), +- ); +- } +- } +- } ++ use crate::llvm::simd_scatter; ++ simd_scatter(value.0, self.0, mask.0) + } + } + + test_if! { + $test_tt: + paste::item! { + mod [<$id _write>] { + use super::*; +@@ -180,17 +156,17 @@ macro_rules! impl_ptr_write { + for i in 0..$elem_count { + arr[i] = i as i32; + } + // arr = [0, 1, 2, ...] + + let mut ptr = $id::::null(); + for i in 0..$elem_count { + ptr = ptr.replace(i, unsafe { +- crate::mem::transmute(arr.as_ptr().add(i)) ++ arr.as_ptr().add(i) as *mut i32 + }); + } + // ptr = [&arr[0], &arr[1], ...] + + // write `fourty_two` to all elements of `v` + { + let backup = arr; + unsafe { +diff --git a/third_party/rust/packed_simd/src/api/reductions/float_arithmetic.rs b/third_party/rust/packed_simd/src/api/reductions/float_arithmetic.rs +--- a/third_party/rust/packed_simd/src/api/reductions/float_arithmetic.rs ++++ b/third_party/rust/packed_simd/src/api/reductions/float_arithmetic.rs +@@ -88,16 +88,18 @@ macro_rules! impl_reduction_float_arithm + fn product>(iter: I) -> $id { + iter.fold($id::splat(1.), |a, b| crate::ops::Mul::mul(a, *b)) + } + } + + test_if! { + $test_tt: + paste::item! { ++ // Comparisons use integer casts within mantissa^1 range. ++ #[allow(clippy::float_cmp)] + pub mod [<$id _reduction_float_arith>] { + use super::*; + fn alternating(x: usize) -> $id { + let mut v = $id::splat(1 as $elem_ty); + for i in 0..$id::lanes() { + if i % x == 0 { + v = v.replace(i, 2 as $elem_ty); + } +@@ -220,17 +222,17 @@ macro_rules! impl_reduction_float_arithm + } + + let mut start = crate::$elem_ty::EPSILON; + let mut scalar_reduction = 0. as $elem_ty; + + let mut v = $id::splat(0. as $elem_ty); + for i in 0..$id::lanes() { + let c = if i % 2 == 0 { 1e3 } else { -1. }; +- start *= 3.14 * c; ++ start *= ::core::$elem_ty::consts::PI * c; + scalar_reduction += start; + v = v.replace(i, start); + } + let simd_reduction = v.sum(); + + let mut a = [0. as $elem_ty; $id::lanes()]; + v.write_to_slice_unaligned(&mut a); + let tree_reduction = tree_reduce_sum(&a); +@@ -252,16 +254,17 @@ macro_rules! impl_reduction_float_arithm + scalar_reduction + ); + } + + #[cfg_attr(not(target_arch = "wasm32"), test)] + #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] + #[allow(unused, dead_code)] + fn product_roundoff() { ++ use ::core::convert::TryInto; + // Performs a tree-reduction + fn tree_reduce_product(a: &[$elem_ty]) -> $elem_ty { + assert!(!a.is_empty()); + if a.len() == 1 { + a[0] + } else if a.len() == 2 { + a[0] * a[1] + } else { +@@ -273,35 +276,37 @@ macro_rules! impl_reduction_float_arithm + } + + let mut start = crate::$elem_ty::EPSILON; + let mut scalar_reduction = 1. as $elem_ty; + + let mut v = $id::splat(0. as $elem_ty); + for i in 0..$id::lanes() { + let c = if i % 2 == 0 { 1e3 } else { -1. }; +- start *= 3.14 * c; ++ start *= ::core::$elem_ty::consts::PI * c; + scalar_reduction *= start; + v = v.replace(i, start); + } + let simd_reduction = v.product(); + + let mut a = [0. as $elem_ty; $id::lanes()]; + v.write_to_slice_unaligned(&mut a); + let tree_reduction = tree_reduce_product(&a); + +- // tolerate 1 ULP difference: ++ // FIXME: Too imprecise, even only for product(f32x8). ++ // Figure out how to narrow this down. ++ let ulp_limit = $id::lanes() / 2; + let red_bits = simd_reduction.to_bits(); + let tree_bits = tree_reduction.to_bits(); + assert!( + if red_bits > tree_bits { + red_bits - tree_bits + } else { + tree_bits - red_bits +- } < 2, ++ } < ulp_limit.try_into().unwrap(), + "vector: {:?} | simd_reduction: {:?} | \ + tree_reduction: {} | scalar_reduction: {}", + v, + simd_reduction, + tree_reduction, + scalar_reduction + ); + } +diff --git a/third_party/rust/packed_simd/src/api/reductions/min_max.rs b/third_party/rust/packed_simd/src/api/reductions/min_max.rs +--- a/third_party/rust/packed_simd/src/api/reductions/min_max.rs ++++ b/third_party/rust/packed_simd/src/api/reductions/min_max.rs +@@ -71,16 +71,18 @@ macro_rules! impl_reduction_min_max { + x = x.min(self.extract(i)); + } + x + } + } + } + test_if! {$test_tt: + paste::item! { ++ // Comparisons use integer casts within mantissa^1 range. ++ #[allow(clippy::float_cmp)] + pub mod [<$id _reduction_min_max>] { + use super::*; + #[cfg_attr(not(target_arch = "wasm32"), test)] + #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] + pub fn max_element() { + let v = $id::splat(0 as $elem_ty); + assert_eq!(v.max_element(), 0 as $elem_ty); + if $id::lanes() > 1 { +@@ -119,16 +121,18 @@ macro_rules! impl_reduction_min_max { + }; + } + + macro_rules! test_reduction_float_min_max { + ([$elem_ty:ident; $elem_count:expr]: $id:ident | $test_tt:tt) => { + test_if!{ + $test_tt: + paste::item! { ++ // Comparisons use integer casts within mantissa^1 range. ++ #[allow(clippy::float_cmp)] + pub mod [<$id _reduction_min_max_nan>] { + use super::*; + #[cfg_attr(not(target_arch = "wasm32"), test)] + #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] + fn min_element_test() { + let n = crate::$elem_ty::NAN; + + assert_eq!(n.min(-3.), -3.); +diff --git a/third_party/rust/packed_simd/src/api/slice/from_slice.rs b/third_party/rust/packed_simd/src/api/slice/from_slice.rs +--- a/third_party/rust/packed_simd/src/api/slice/from_slice.rs ++++ b/third_party/rust/packed_simd/src/api/slice/from_slice.rs +@@ -33,17 +33,17 @@ macro_rules! impl_slice_from_slice { + unsafe { + assert!(slice.len() >= $elem_count); + Self::from_slice_unaligned_unchecked(slice) + } + } + + /// Instantiates a new vector with the values of the `slice`. + /// +- /// # Precondition ++ /// # Safety + /// + /// If `slice.len() < Self::lanes()` or `&slice[0]` is not aligned + /// to an `align_of::()` boundary, the behavior is undefined. + #[inline] + pub unsafe fn from_slice_aligned_unchecked( + slice: &[$elem_ty], + ) -> Self { + debug_assert!(slice.len() >= $elem_count); +@@ -54,17 +54,17 @@ macro_rules! impl_slice_from_slice { + ); + + #[allow(clippy::cast_ptr_alignment)] + *(target_ptr as *const Self) + } + + /// Instantiates a new vector with the values of the `slice`. + /// +- /// # Precondition ++ /// # Safety + /// + /// If `slice.len() < Self::lanes()` the behavior is undefined. + #[inline] + pub unsafe fn from_slice_unaligned_unchecked( + slice: &[$elem_ty], + ) -> Self { + use crate::mem::size_of; + debug_assert!(slice.len() >= $elem_count); +@@ -79,16 +79,18 @@ macro_rules! impl_slice_from_slice { + ); + x + } + } + + test_if! { + $test_tt: + paste::item! { ++ // Comparisons use integer casts within mantissa^1 range. ++ #[allow(clippy::float_cmp)] + pub mod [<$id _slice_from_slice>] { + use super::*; + use crate::iter::Iterator; + + #[cfg_attr(not(target_arch = "wasm32"), test)] + #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] + fn from_slice_unaligned() { + let mut unaligned = [42 as $elem_ty; $id::lanes() + 1]; +diff --git a/third_party/rust/packed_simd/src/api/slice/write_to_slice.rs b/third_party/rust/packed_simd/src/api/slice/write_to_slice.rs +--- a/third_party/rust/packed_simd/src/api/slice/write_to_slice.rs ++++ b/third_party/rust/packed_simd/src/api/slice/write_to_slice.rs +@@ -34,17 +34,17 @@ macro_rules! impl_slice_write_to_slice { + unsafe { + assert!(slice.len() >= $elem_count); + self.write_to_slice_unaligned_unchecked(slice); + } + } + + /// Writes the values of the vector to the `slice`. + /// +- /// # Precondition ++ /// # Safety + /// + /// If `slice.len() < Self::lanes()` or `&slice[0]` is not + /// aligned to an `align_of::()` boundary, the behavior is + /// undefined. + #[inline] + pub unsafe fn write_to_slice_aligned_unchecked( + self, slice: &mut [$elem_ty], + ) { +@@ -59,17 +59,17 @@ macro_rules! impl_slice_write_to_slice { + #[allow(clippy::cast_ptr_alignment)] + #[allow(clippy::cast_ptr_alignment)] + #[allow(clippy::cast_ptr_alignment)] + *(target_ptr as *mut Self) = self; + } + + /// Writes the values of the vector to the `slice`. + /// +- /// # Precondition ++ /// # Safety + /// + /// If `slice.len() < Self::lanes()` the behavior is undefined. + #[inline] + pub unsafe fn write_to_slice_unaligned_unchecked( + self, slice: &mut [$elem_ty], + ) { + debug_assert!(slice.len() >= $elem_count); + let target_ptr = +@@ -81,16 +81,18 @@ macro_rules! impl_slice_write_to_slice { + crate::mem::size_of::(), + ); + } + } + + test_if! { + $test_tt: + paste::item! { ++ // Comparisons use integer casts within mantissa^1 range. ++ #[allow(clippy::float_cmp)] + pub mod [<$id _slice_write_to_slice>] { + use super::*; + use crate::iter::Iterator; + + #[cfg_attr(not(target_arch = "wasm32"), test)] + #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] + fn write_to_slice_unaligned() { + let mut unaligned = [0 as $elem_ty; $id::lanes() + 1]; +diff --git a/third_party/rust/packed_simd/src/codegen.rs b/third_party/rust/packed_simd/src/codegen.rs +--- a/third_party/rust/packed_simd/src/codegen.rs ++++ b/third_party/rust/packed_simd/src/codegen.rs +@@ -11,23 +11,26 @@ crate mod swap_bytes; + macro_rules! impl_simd_array { + ([$elem_ty:ident; $elem_count:expr]: + $tuple_id:ident | $($elem_tys:ident),*) => { + #[derive(Copy, Clone)] + #[repr(simd)] + pub struct $tuple_id($(crate $elem_tys),*); + //^^^^^^^ leaked through SimdArray + ++ impl crate::sealed::Seal for [$elem_ty; $elem_count] {} ++ + impl crate::sealed::SimdArray for [$elem_ty; $elem_count] { + type Tuple = $tuple_id; + type T = $elem_ty; + const N: usize = $elem_count; + type NT = [u32; $elem_count]; + } + ++ impl crate::sealed::Seal for $tuple_id {} + impl crate::sealed::Simd for $tuple_id { + type Element = $elem_ty; + const LANES: usize = $elem_count; + type LanesType = [u32; $elem_count]; + } + + } + } +diff --git a/third_party/rust/packed_simd/src/codegen/bit_manip.rs b/third_party/rust/packed_simd/src/codegen/bit_manip.rs +--- a/third_party/rust/packed_simd/src/codegen/bit_manip.rs ++++ b/third_party/rust/packed_simd/src/codegen/bit_manip.rs +@@ -1,10 +1,10 @@ + //! LLVM bit manipulation intrinsics. +-#![rustfmt::skip] ++#[rustfmt::skip] + + use crate::*; + + #[allow(improper_ctypes, dead_code)] + extern "C" { + #[link_name = "llvm.ctlz.v2i8"] + fn ctlz_u8x2(x: u8x2, is_zero_undef: bool) -> u8x2; + #[link_name = "llvm.ctlz.v4i8"] +diff --git a/third_party/rust/packed_simd/src/codegen/llvm.rs b/third_party/rust/packed_simd/src/codegen/llvm.rs +--- a/third_party/rust/packed_simd/src/codegen/llvm.rs ++++ b/third_party/rust/packed_simd/src/codegen/llvm.rs +@@ -5,41 +5,47 @@ use crate::sealed::Shuffle; + #[allow(unused_imports)] // FIXME: spurious warning? + use crate::sealed::Simd; + + // Shuffle intrinsics: expanded in users' crates, therefore public. + extern "platform-intrinsic" { + // FIXME: Passing this intrinsics an `idx` array with an index that is + // out-of-bounds will produce a monomorphization-time error. + // https://github.com/rust-lang-nursery/packed_simd/issues/21 ++ #[rustc_args_required_const(2)] + pub fn simd_shuffle2(x: T, y: T, idx: [u32; 2]) -> U + where + T: Simd, + ::Element: Shuffle<[u32; 2], Output = U>; + ++ #[rustc_args_required_const(2)] + pub fn simd_shuffle4(x: T, y: T, idx: [u32; 4]) -> U + where + T: Simd, + ::Element: Shuffle<[u32; 4], Output = U>; + ++ #[rustc_args_required_const(2)] + pub fn simd_shuffle8(x: T, y: T, idx: [u32; 8]) -> U + where + T: Simd, + ::Element: Shuffle<[u32; 8], Output = U>; + ++ #[rustc_args_required_const(2)] + pub fn simd_shuffle16(x: T, y: T, idx: [u32; 16]) -> U + where + T: Simd, + ::Element: Shuffle<[u32; 16], Output = U>; + ++ #[rustc_args_required_const(2)] + pub fn simd_shuffle32(x: T, y: T, idx: [u32; 32]) -> U + where + T: Simd, + ::Element: Shuffle<[u32; 32], Output = U>; + ++ #[rustc_args_required_const(2)] + pub fn simd_shuffle64(x: T, y: T, idx: [u32; 64]) -> U + where + T: Simd, + ::Element: Shuffle<[u32; 64], Output = U>; + } + + pub use self::simd_shuffle16 as __shuffle_vector16; + pub use self::simd_shuffle2 as __shuffle_vector2; +@@ -91,9 +97,11 @@ extern "platform-intrinsic" { + crate fn simd_fmin(a: T, b: T) -> T; + crate fn simd_fmax(a: T, b: T) -> T; + + crate fn simd_fsqrt(a: T) -> T; + crate fn simd_fma(a: T, b: T, c: T) -> T; + + crate fn simd_gather(value: T, pointers: P, mask: M) -> T; + crate fn simd_scatter(value: T, pointers: P, mask: M); ++ ++ crate fn simd_bitmask(value: T) -> U; + } +diff --git a/third_party/rust/packed_simd/src/codegen/reductions/mask/x86.rs b/third_party/rust/packed_simd/src/codegen/reductions/mask/x86.rs +--- a/third_party/rust/packed_simd/src/codegen/reductions/mask/x86.rs ++++ b/third_party/rust/packed_simd/src/codegen/reductions/mask/x86.rs +@@ -14,23 +14,17 @@ mod avx; + + #[cfg(target_feature = "avx2")] + #[macro_use] + mod avx2; + + /// x86 64-bit m8x8 implementation + macro_rules! x86_m8x8_impl { + ($id:ident) => { +- cfg_if! { +- if #[cfg(all(target_arch = "x86_64", target_feature = "sse"))] { +- x86_m8x8_sse_impl!($id); +- } else { +- fallback_impl!($id); +- } +- } ++ fallback_impl!($id); + }; + } + + /// x86 128-bit m8x16 implementation + macro_rules! x86_m8x16_impl { + ($id:ident) => { + cfg_if! { + if #[cfg(target_feature = "sse2")] { +diff --git a/third_party/rust/packed_simd/src/codegen/reductions/mask/x86/sse.rs b/third_party/rust/packed_simd/src/codegen/reductions/mask/x86/sse.rs +--- a/third_party/rust/packed_simd/src/codegen/reductions/mask/x86/sse.rs ++++ b/third_party/rust/packed_simd/src/codegen/reductions/mask/x86/sse.rs +@@ -29,40 +29,8 @@ macro_rules! x86_m32x4_sse_impl { + #[cfg(target_arch = "x86_64")] + use crate::arch::x86_64::_mm_movemask_ps; + + _mm_movemask_ps(crate::mem::transmute(self)) != 0 + } + } + }; + } +- +-macro_rules! x86_m8x8_sse_impl { +- ($id:ident) => { +- impl All for $id { +- #[inline] +- #[target_feature(enable = "sse")] +- unsafe fn all(self) -> bool { +- #[cfg(target_arch = "x86")] +- use crate::arch::x86::_mm_movemask_pi8; +- #[cfg(target_arch = "x86_64")] +- use crate::arch::x86_64::_mm_movemask_pi8; +- // _mm_movemask_pi8(a) creates an 8bit mask containing the most +- // significant bit of each byte of `a`. If all bits are set, +- // then all 8 lanes of the mask are true. +- _mm_movemask_pi8(crate::mem::transmute(self)) +- == u8::max_value() as i32 +- } +- } +- impl Any for $id { +- #[inline] +- #[target_feature(enable = "sse")] +- unsafe fn any(self) -> bool { +- #[cfg(target_arch = "x86")] +- use crate::arch::x86::_mm_movemask_pi8; +- #[cfg(target_arch = "x86_64")] +- use crate::arch::x86_64::_mm_movemask_pi8; +- +- _mm_movemask_pi8(crate::mem::transmute(self)) != 0 +- } +- } +- }; +-} +diff --git a/third_party/rust/packed_simd/src/codegen/shuffle.rs b/third_party/rust/packed_simd/src/codegen/shuffle.rs +--- a/third_party/rust/packed_simd/src/codegen/shuffle.rs ++++ b/third_party/rust/packed_simd/src/codegen/shuffle.rs +@@ -1,302 +1,150 @@ + //! Implementations of the `ShuffleResult` trait for the different numbers of + //! lanes and vector element types. + + use crate::masks::*; +-use crate::sealed::Shuffle; +- +-impl Shuffle<[u32; 2]> for i8 { +- type Output = crate::codegen::i8x2; +-} +-impl Shuffle<[u32; 4]> for i8 { +- type Output = crate::codegen::i8x4; +-} +-impl Shuffle<[u32; 8]> for i8 { +- type Output = crate::codegen::i8x8; +-} +-impl Shuffle<[u32; 16]> for i8 { +- type Output = crate::codegen::i8x16; +-} +-impl Shuffle<[u32; 32]> for i8 { +- type Output = crate::codegen::i8x32; +-} +-impl Shuffle<[u32; 64]> for i8 { +- type Output = crate::codegen::i8x64; +-} +- +-impl Shuffle<[u32; 2]> for u8 { +- type Output = crate::codegen::u8x2; +-} +-impl Shuffle<[u32; 4]> for u8 { +- type Output = crate::codegen::u8x4; +-} +-impl Shuffle<[u32; 8]> for u8 { +- type Output = crate::codegen::u8x8; +-} +-impl Shuffle<[u32; 16]> for u8 { +- type Output = crate::codegen::u8x16; +-} +-impl Shuffle<[u32; 32]> for u8 { +- type Output = crate::codegen::u8x32; +-} +-impl Shuffle<[u32; 64]> for u8 { +- type Output = crate::codegen::u8x64; +-} +- +-impl Shuffle<[u32; 2]> for m8 { +- type Output = crate::codegen::m8x2; +-} +-impl Shuffle<[u32; 4]> for m8 { +- type Output = crate::codegen::m8x4; +-} +-impl Shuffle<[u32; 8]> for m8 { +- type Output = crate::codegen::m8x8; +-} +-impl Shuffle<[u32; 16]> for m8 { +- type Output = crate::codegen::m8x16; +-} +-impl Shuffle<[u32; 32]> for m8 { +- type Output = crate::codegen::m8x32; +-} +-impl Shuffle<[u32; 64]> for m8 { +- type Output = crate::codegen::m8x64; +-} ++use crate::sealed::{Shuffle, Seal}; + +-impl Shuffle<[u32; 2]> for i16 { +- type Output = crate::codegen::i16x2; +-} +-impl Shuffle<[u32; 4]> for i16 { +- type Output = crate::codegen::i16x4; +-} +-impl Shuffle<[u32; 8]> for i16 { +- type Output = crate::codegen::i16x8; +-} +-impl Shuffle<[u32; 16]> for i16 { +- type Output = crate::codegen::i16x16; +-} +-impl Shuffle<[u32; 32]> for i16 { +- type Output = crate::codegen::i16x32; +-} +- +-impl Shuffle<[u32; 2]> for u16 { +- type Output = crate::codegen::u16x2; +-} +-impl Shuffle<[u32; 4]> for u16 { +- type Output = crate::codegen::u16x4; +-} +-impl Shuffle<[u32; 8]> for u16 { +- type Output = crate::codegen::u16x8; +-} +-impl Shuffle<[u32; 16]> for u16 { +- type Output = crate::codegen::u16x16; +-} +-impl Shuffle<[u32; 32]> for u16 { +- type Output = crate::codegen::u16x32; +-} +- +-impl Shuffle<[u32; 2]> for m16 { +- type Output = crate::codegen::m16x2; +-} +-impl Shuffle<[u32; 4]> for m16 { +- type Output = crate::codegen::m16x4; +-} +-impl Shuffle<[u32; 8]> for m16 { +- type Output = crate::codegen::m16x8; +-} +-impl Shuffle<[u32; 16]> for m16 { +- type Output = crate::codegen::m16x16; +-} +-impl Shuffle<[u32; 32]> for m16 { +- type Output = crate::codegen::m16x32; +-} +- +-impl Shuffle<[u32; 2]> for i32 { +- type Output = crate::codegen::i32x2; +-} +-impl Shuffle<[u32; 4]> for i32 { +- type Output = crate::codegen::i32x4; +-} +-impl Shuffle<[u32; 8]> for i32 { +- type Output = crate::codegen::i32x8; +-} +-impl Shuffle<[u32; 16]> for i32 { +- type Output = crate::codegen::i32x16; ++macro_rules! impl_shuffle { ++ ($array:ty, $base:ty, $out:ty) => { ++ impl Seal<$array> for $base {} ++ impl Shuffle<$array> for $base { ++ type Output = $out; ++ } ++ } + } + +-impl Shuffle<[u32; 2]> for u32 { +- type Output = crate::codegen::u32x2; +-} +-impl Shuffle<[u32; 4]> for u32 { +- type Output = crate::codegen::u32x4; +-} +-impl Shuffle<[u32; 8]> for u32 { +- type Output = crate::codegen::u32x8; +-} +-impl Shuffle<[u32; 16]> for u32 { +- type Output = crate::codegen::u32x16; +-} ++impl_shuffle! { [u32; 2], i8, crate::codegen::i8x2 } ++impl_shuffle! { [u32; 4], i8, crate::codegen::i8x4 } ++impl_shuffle! { [u32; 8], i8, crate::codegen::i8x8 } ++impl_shuffle! { [u32; 16], i8, crate::codegen::i8x16 } ++impl_shuffle! { [u32; 32], i8, crate::codegen::i8x32 } ++impl_shuffle! { [u32; 64], i8, crate::codegen::i8x64 } + +-impl Shuffle<[u32; 2]> for f32 { +- type Output = crate::codegen::f32x2; +-} +-impl Shuffle<[u32; 4]> for f32 { +- type Output = crate::codegen::f32x4; +-} +-impl Shuffle<[u32; 8]> for f32 { +- type Output = crate::codegen::f32x8; +-} +-impl Shuffle<[u32; 16]> for f32 { +- type Output = crate::codegen::f32x16; +-} ++impl_shuffle! { [u32; 2], u8, crate::codegen::u8x2 } ++impl_shuffle! { [u32; 4], u8, crate::codegen::u8x4 } ++impl_shuffle! { [u32; 8], u8, crate::codegen::u8x8 } ++impl_shuffle! { [u32; 16], u8, crate::codegen::u8x16 } ++impl_shuffle! { [u32; 32], u8, crate::codegen::u8x32 } ++impl_shuffle! { [u32; 64], u8, crate::codegen::u8x64 } ++ ++impl_shuffle! { [u32; 2], m8, crate::codegen::m8x2 } ++impl_shuffle! { [u32; 4], m8, crate::codegen::m8x4 } ++impl_shuffle! { [u32; 8], m8, crate::codegen::m8x8 } ++impl_shuffle! { [u32; 16], m8, crate::codegen::m8x16 } ++impl_shuffle! { [u32; 32], m8, crate::codegen::m8x32 } ++impl_shuffle! { [u32; 64], m8, crate::codegen::m8x64 } ++ ++impl_shuffle! { [u32; 2], i16, crate::codegen::i16x2 } ++impl_shuffle! { [u32; 4], i16, crate::codegen::i16x4 } ++impl_shuffle! { [u32; 8], i16, crate::codegen::i16x8 } ++impl_shuffle! { [u32; 16], i16, crate::codegen::i16x16 } ++impl_shuffle! { [u32; 32], i16, crate::codegen::i16x32 } + +-impl Shuffle<[u32; 2]> for m32 { +- type Output = crate::codegen::m32x2; +-} +-impl Shuffle<[u32; 4]> for m32 { +- type Output = crate::codegen::m32x4; +-} +-impl Shuffle<[u32; 8]> for m32 { +- type Output = crate::codegen::m32x8; +-} +-impl Shuffle<[u32; 16]> for m32 { +- type Output = crate::codegen::m32x16; +-} ++impl_shuffle! { [u32; 2], u16, crate::codegen::u16x2 } ++impl_shuffle! { [u32; 4], u16, crate::codegen::u16x4 } ++impl_shuffle! { [u32; 8], u16, crate::codegen::u16x8 } ++impl_shuffle! { [u32; 16], u16, crate::codegen::u16x16 } ++impl_shuffle! { [u32; 32], u16, crate::codegen::u16x32 } ++ ++impl_shuffle! { [u32; 2], m16, crate::codegen::m16x2 } ++impl_shuffle! { [u32; 4], m16, crate::codegen::m16x4 } ++impl_shuffle! { [u32; 8], m16, crate::codegen::m16x8 } ++impl_shuffle! { [u32; 16], m16, crate::codegen::m16x16 } + +-/* FIXME: 64-bit single element vector +-impl Shuffle<[u32; 1]> for i64 { +- type Output = crate::codegen::i64x1; +-} +-*/ +-impl Shuffle<[u32; 2]> for i64 { +- type Output = crate::codegen::i64x2; +-} +-impl Shuffle<[u32; 4]> for i64 { +- type Output = crate::codegen::i64x4; +-} +-impl Shuffle<[u32; 8]> for i64 { +- type Output = crate::codegen::i64x8; +-} ++impl_shuffle! { [u32; 2], i32, crate::codegen::i32x2 } ++impl_shuffle! { [u32; 4], i32, crate::codegen::i32x4 } ++impl_shuffle! { [u32; 8], i32, crate::codegen::i32x8 } ++impl_shuffle! { [u32; 16], i32, crate::codegen::i32x16 } ++ ++impl_shuffle! { [u32; 2], u32, crate::codegen::u32x2 } ++impl_shuffle! { [u32; 4], u32, crate::codegen::u32x4 } ++impl_shuffle! { [u32; 8], u32, crate::codegen::u32x8 } ++impl_shuffle! { [u32; 16], u32, crate::codegen::u32x16 } ++ ++impl_shuffle! { [u32; 2], f32, crate::codegen::f32x2 } ++impl_shuffle! { [u32; 4], f32, crate::codegen::f32x4 } ++impl_shuffle! { [u32; 8], f32, crate::codegen::f32x8 } ++impl_shuffle! { [u32; 16], f32, crate::codegen::f32x16 } ++ ++impl_shuffle! { [u32; 2], m32, crate::codegen::m32x2 } ++impl_shuffle! { [u32; 4], m32, crate::codegen::m32x4 } ++impl_shuffle! { [u32; 8], m32, crate::codegen::m32x8 } ++impl_shuffle! { [u32; 16], m32, crate::codegen::m32x16 } + + /* FIXME: 64-bit single element vector +-impl Shuffle<[u32; 1]> for u64 { +- type Output = crate::codegen::u64x1; +-} ++impl_shuffle! { [u32; 1], i64, crate::codegen::i64x1 } + */ +-impl Shuffle<[u32; 2]> for u64 { +- type Output = crate::codegen::u64x2; +-} +-impl Shuffle<[u32; 4]> for u64 { +- type Output = crate::codegen::u64x4; +-} +-impl Shuffle<[u32; 8]> for u64 { +- type Output = crate::codegen::u64x8; +-} ++impl_shuffle! { [u32; 2], i64, crate::codegen::i64x2 } ++impl_shuffle! { [u32; 4], i64, crate::codegen::i64x4 } ++impl_shuffle! { [u32; 8], i64, crate::codegen::i64x8 } + + /* FIXME: 64-bit single element vector +-impl Shuffle<[u32; 1]> for f64 { +- type Output = crate::codegen::f64x1; +-} ++impl_shuffle! { [u32; 1], i64, crate::codegen::i64x1 } + */ +-impl Shuffle<[u32; 2]> for f64 { +- type Output = crate::codegen::f64x2; +-} +-impl Shuffle<[u32; 4]> for f64 { +- type Output = crate::codegen::f64x4; +-} +-impl Shuffle<[u32; 8]> for f64 { +- type Output = crate::codegen::f64x8; +-} ++impl_shuffle! { [u32; 2], u64, crate::codegen::u64x2 } ++impl_shuffle! { [u32; 4], u64, crate::codegen::u64x4 } ++impl_shuffle! { [u32; 8], u64, crate::codegen::u64x8 } + + /* FIXME: 64-bit single element vector +-impl Shuffle<[u32; 1]> for m64 { +- type Output = crate::codegen::m64x1; +-} ++impl_shuffle! { [u32; 1], i64, crate::codegen::i64x1 } + */ +-impl Shuffle<[u32; 2]> for m64 { +- type Output = crate::codegen::m64x2; +-} +-impl Shuffle<[u32; 4]> for m64 { +- type Output = crate::codegen::m64x4; +-} +-impl Shuffle<[u32; 8]> for m64 { +- type Output = crate::codegen::m64x8; +-} ++impl_shuffle! { [u32; 2], f64, crate::codegen::f64x2 } ++impl_shuffle! { [u32; 4], f64, crate::codegen::f64x4 } ++impl_shuffle! { [u32; 8], f64, crate::codegen::f64x8 } ++ ++/* FIXME: 64-bit single element vector ++impl_shuffle! { [u32; 1], i64, crate::codegen::i64x1 } ++*/ ++impl_shuffle! { [u32; 2], m64, crate::codegen::m64x2 } ++impl_shuffle! { [u32; 4], m64, crate::codegen::m64x4 } ++impl_shuffle! { [u32; 8], m64, crate::codegen::m64x8 } + +-impl Shuffle<[u32; 2]> for isize { +- type Output = crate::codegen::isizex2; +-} +-impl Shuffle<[u32; 4]> for isize { +- type Output = crate::codegen::isizex4; +-} +-impl Shuffle<[u32; 8]> for isize { +- type Output = crate::codegen::isizex8; +-} ++impl_shuffle! { [u32; 2], isize, crate::codegen::isizex2 } ++impl_shuffle! { [u32; 4], isize, crate::codegen::isizex4 } ++impl_shuffle! { [u32; 8], isize, crate::codegen::isizex8 } + +-impl Shuffle<[u32; 2]> for usize { +- type Output = crate::codegen::usizex2; +-} +-impl Shuffle<[u32; 4]> for usize { +- type Output = crate::codegen::usizex4; +-} +-impl Shuffle<[u32; 8]> for usize { +- type Output = crate::codegen::usizex8; +-} ++impl_shuffle! { [u32; 2], usize, crate::codegen::usizex2 } ++impl_shuffle! { [u32; 4], usize, crate::codegen::usizex4 } ++impl_shuffle! { [u32; 8], usize, crate::codegen::usizex8 } + ++impl_shuffle! { [u32; 2], msize, crate::codegen::msizex2 } ++impl_shuffle! { [u32; 4], msize, crate::codegen::msizex4 } ++impl_shuffle! { [u32; 8], msize, crate::codegen::msizex8 } ++ ++impl Seal<[u32; 2]> for *const T {} + impl Shuffle<[u32; 2]> for *const T { + type Output = crate::codegen::cptrx2; + } ++impl Seal<[u32; 4]> for *const T {} + impl Shuffle<[u32; 4]> for *const T { + type Output = crate::codegen::cptrx4; + } ++impl Seal<[u32; 8]> for *const T {} + impl Shuffle<[u32; 8]> for *const T { + type Output = crate::codegen::cptrx8; + } + ++impl Seal<[u32; 2]> for *mut T {} + impl Shuffle<[u32; 2]> for *mut T { + type Output = crate::codegen::mptrx2; + } ++impl Seal<[u32; 4]> for *mut T {} + impl Shuffle<[u32; 4]> for *mut T { + type Output = crate::codegen::mptrx4; + } ++impl Seal<[u32; 8]> for *mut T {} + impl Shuffle<[u32; 8]> for *mut T { + type Output = crate::codegen::mptrx8; + } + +-impl Shuffle<[u32; 2]> for msize { +- type Output = crate::codegen::msizex2; +-} +-impl Shuffle<[u32; 4]> for msize { +- type Output = crate::codegen::msizex4; +-} +-impl Shuffle<[u32; 8]> for msize { +- type Output = crate::codegen::msizex8; +-} +- +-impl Shuffle<[u32; 1]> for i128 { +- type Output = crate::codegen::i128x1; +-} +-impl Shuffle<[u32; 2]> for i128 { +- type Output = crate::codegen::i128x2; +-} +-impl Shuffle<[u32; 4]> for i128 { +- type Output = crate::codegen::i128x4; +-} ++impl_shuffle! { [u32; 1], i128, crate::codegen::i128x1 } ++impl_shuffle! { [u32; 2], i128, crate::codegen::i128x2 } ++impl_shuffle! { [u32; 4], i128, crate::codegen::i128x4 } + +-impl Shuffle<[u32; 1]> for u128 { +- type Output = crate::codegen::u128x1; +-} +-impl Shuffle<[u32; 2]> for u128 { +- type Output = crate::codegen::u128x2; +-} +-impl Shuffle<[u32; 4]> for u128 { +- type Output = crate::codegen::u128x4; +-} ++impl_shuffle! { [u32; 1], u128, crate::codegen::u128x1 } ++impl_shuffle! { [u32; 2], u128, crate::codegen::u128x2 } ++impl_shuffle! { [u32; 4], u128, crate::codegen::u128x4 } + +-impl Shuffle<[u32; 1]> for m128 { +- type Output = crate::codegen::m128x1; +-} +-impl Shuffle<[u32; 2]> for m128 { +- type Output = crate::codegen::m128x2; +-} +-impl Shuffle<[u32; 4]> for m128 { +- type Output = crate::codegen::m128x4; +-} ++impl_shuffle! { [u32; 1], m128, crate::codegen::m128x1 } ++impl_shuffle! { [u32; 2], m128, crate::codegen::m128x2 } ++impl_shuffle! { [u32; 4], m128, crate::codegen::m128x4 } +diff --git a/third_party/rust/packed_simd/src/codegen/shuffle1_dyn.rs b/third_party/rust/packed_simd/src/codegen/shuffle1_dyn.rs +--- a/third_party/rust/packed_simd/src/codegen/shuffle1_dyn.rs ++++ b/third_party/rust/packed_simd/src/codegen/shuffle1_dyn.rs +@@ -23,53 +23,32 @@ macro_rules! impl_fallback { + } + } + }; + } + + macro_rules! impl_shuffle1_dyn { + (u8x8) => { + cfg_if! { +- if #[cfg(all(any(target_arch = "x86", target_arch = "x86_64"), +- target_feature = "ssse3"))] { +- impl Shuffle1Dyn for u8x8 { +- type Indices = Self; +- #[inline] +- fn shuffle1_dyn(self, indices: Self::Indices) -> Self { +- #[cfg(target_arch = "x86")] +- use crate::arch::x86::_mm_shuffle_pi8; +- #[cfg(target_arch = "x86_64")] +- use crate::arch::x86_64::_mm_shuffle_pi8; +- +- unsafe { +- crate::mem::transmute( +- _mm_shuffle_pi8( +- crate::mem::transmute(self.0), +- crate::mem::transmute(indices.0) +- ) +- ) +- } +- } +- } +- } else if #[cfg(all( ++ if #[cfg(all( + any( +- all(target_aarch = "aarch64", target_feature = "neon"), +- all(target_aarch = "arm", target_feature = "v7", ++ all(target_arch = "aarch64", target_feature = "neon"), ++ all(target_arch = "doesnotexist", target_feature = "v7", + target_feature = "neon") + ), + any(feature = "core_arch", libcore_neon) + ) + )] { + impl Shuffle1Dyn for u8x8 { + type Indices = Self; + #[inline] + fn shuffle1_dyn(self, indices: Self::Indices) -> Self { +- #[cfg(targt_arch = "aarch64")] ++ #[cfg(target_arch = "aarch64")] + use crate::arch::aarch64::vtbl1_u8; +- #[cfg(targt_arch = "arm")] ++ #[cfg(target_arch = "doesnotexist")] + use crate::arch::arm::vtbl1_u8; + + // This is safe because the binary is compiled with + // neon enabled at compile-time and can therefore only + // run on CPUs that have it enabled. + unsafe { + Simd(mem::transmute( + vtbl1_u8(mem::transmute(self.0), +@@ -101,17 +80,17 @@ macro_rules! impl_shuffle1_dyn { + unsafe { + Simd(mem::transmute( + _mm_shuffle_epi8(mem::transmute(self.0), + crate::mem::transmute(indices)) + )) + } + } + } +- } else if #[cfg(all(target_aarch = "aarch64", target_feature = "neon", ++ } else if #[cfg(all(target_arch = "aarch64", target_feature = "neon", + any(feature = "core_arch", libcore_neon)))] { + impl Shuffle1Dyn for u8x16 { + type Indices = Self; + #[inline] + fn shuffle1_dyn(self, indices: Self::Indices) -> Self { + use crate::arch::aarch64::vqtbl1q_u8; + + // This is safe because the binary is compiled with +@@ -120,17 +99,17 @@ macro_rules! impl_shuffle1_dyn { + unsafe { + Simd(mem::transmute( + vqtbl1q_u8(mem::transmute(self.0), + crate::mem::transmute(indices.0)) + )) + } + } + } +- } else if #[cfg(all(target_aarch = "arm", target_feature = "v7", ++ } else if #[cfg(all(target_arch = "doesnotexist", target_feature = "v7", + target_feature = "neon", + any(feature = "core_arch", libcore_neon)))] { + impl Shuffle1Dyn for u8x16 { + type Indices = Self; + #[inline] + fn shuffle1_dyn(self, indices: Self::Indices) -> Self { + use crate::arch::arm::vtbl2_u8; + +diff --git a/third_party/rust/packed_simd/src/codegen/vPtr.rs b/third_party/rust/packed_simd/src/codegen/vPtr.rs +--- a/third_party/rust/packed_simd/src/codegen/vPtr.rs ++++ b/third_party/rust/packed_simd/src/codegen/vPtr.rs +@@ -3,23 +3,25 @@ + macro_rules! impl_simd_ptr { + ([$ptr_ty:ty; $elem_count:expr]: $tuple_id:ident | $ty:ident + | $($tys:ty),*) => { + #[derive(Copy, Clone)] + #[repr(simd)] + pub struct $tuple_id<$ty>($(crate $tys),*); + //^^^^^^^ leaked through SimdArray + ++ impl<$ty> crate::sealed::Seal for [$ptr_ty; $elem_count] {} + impl<$ty> crate::sealed::SimdArray for [$ptr_ty; $elem_count] { + type Tuple = $tuple_id<$ptr_ty>; + type T = $ptr_ty; + const N: usize = $elem_count; + type NT = [u32; $elem_count]; + } + ++ impl<$ty> crate::sealed::Seal for $tuple_id<$ptr_ty> {} + impl<$ty> crate::sealed::Simd for $tuple_id<$ptr_ty> { + type Element = $ptr_ty; + const LANES: usize = $elem_count; + type LanesType = [u32; $elem_count]; + } + + } + } +diff --git a/third_party/rust/packed_simd/src/lib.rs b/third_party/rust/packed_simd/src/lib.rs +--- a/third_party/rust/packed_simd/src/lib.rs ++++ b/third_party/rust/packed_simd/src/lib.rs +@@ -196,40 +196,45 @@ + //! + //! * casting from an `f64` to an `f32` **rounds to nearest, ties to even**. + //! + //! Numeric casts are not very "precise": sometimes lossy, sometimes value + //! preserving, etc. + + #![feature( + repr_simd, ++ rustc_attrs, + const_fn, + platform_intrinsics, + stdsimd, + aarch64_target_feature, + arm_target_feature, + link_llvm_intrinsics, + core_intrinsics, + stmt_expr_attributes, +- align_offset, +- mmx_target_feature, + crate_visibility_modifier, + custom_inner_attributes + )] + #![allow(non_camel_case_types, non_snake_case, +- clippy::cast_possible_truncation, +- clippy::cast_lossless, +- clippy::cast_possible_wrap, +- clippy::cast_precision_loss, +- // This lint is currently broken for generic code +- // See https://github.com/rust-lang/rust-clippy/issues/3410 +- clippy::use_self ++ // FIXME: these types are unsound in C FFI already ++ // See https://github.com/rust-lang/rust/issues/53346 ++ improper_ctypes_definitions, ++ clippy::cast_possible_truncation, ++ clippy::cast_lossless, ++ clippy::cast_possible_wrap, ++ clippy::cast_precision_loss, ++ // TODO: manually add the `#[must_use]` attribute where appropriate ++ clippy::must_use_candidate, ++ // This lint is currently broken for generic code ++ // See https://github.com/rust-lang/rust-clippy/issues/3410 ++ clippy::use_self, ++ clippy::wrong_self_convention, + )] + #![cfg_attr(test, feature(hashmap_internals))] +-#![deny(warnings, rust_2018_idioms, clippy::missing_inline_in_public_items)] ++#![deny(rust_2018_idioms, clippy::missing_inline_in_public_items)] + #![no_std] + + use cfg_if::cfg_if; + + cfg_if! { + if #[cfg(feature = "core_arch")] { + #[allow(unused_imports)] + use core_arch as arch; +@@ -251,16 +256,18 @@ use core::{ + + #[macro_use] + mod testing; + #[macro_use] + mod api; + mod codegen; + mod sealed; + ++pub use crate::sealed::{Simd as SimdVector, Shuffle, SimdArray, Mask}; ++ + /// Packed SIMD vector type. + /// + /// # Examples + /// + /// ``` + /// # use packed_simd::Simd; + /// let v = Simd::<[i32; 4]>::new(0, 1, 2, 3); + /// assert_eq!(v.extract(2), 2); +@@ -271,16 +278,18 @@ pub struct Simd( + // FIXME: this type should be private, + // but it currently must be public for the + // `shuffle!` macro to work: it needs to + // access the internal `repr(simd)` type + // to call the shuffle intrinsics. + #[doc(hidden)] pub ::Tuple, + ); + ++impl sealed::Seal for Simd {} ++ + /// Wrapper over `T` implementing a lexicoraphical order via the `PartialOrd` + /// and/or `Ord` traits. + #[repr(transparent)] + #[derive(Copy, Clone, Debug)] + #[allow(clippy::missing_inline_in_public_items)] + pub struct LexicographicallyOrdered(T); + + mod masks; +diff --git a/third_party/rust/packed_simd/src/masks.rs b/third_party/rust/packed_simd/src/masks.rs +--- a/third_party/rust/packed_simd/src/masks.rs ++++ b/third_party/rust/packed_simd/src/masks.rs +@@ -1,17 +1,19 @@ + //! Mask types + + macro_rules! impl_mask_ty { + ($id:ident : $elem_ty:ident | #[$doc:meta]) => { + #[$doc] + #[derive(Copy, Clone)] + pub struct $id($elem_ty); + ++ impl crate::sealed::Seal for $id {} + impl crate::sealed::Mask for $id { ++ #[inline] + fn test(&self) -> bool { + $id::test(self) + } + } + + impl $id { + /// Instantiate a mask with `value` + #[inline] +diff --git a/third_party/rust/packed_simd/src/sealed.rs b/third_party/rust/packed_simd/src/sealed.rs +--- a/third_party/rust/packed_simd/src/sealed.rs ++++ b/third_party/rust/packed_simd/src/sealed.rs +@@ -1,41 +1,42 @@ + //! Sealed traits + ++/// A sealed trait, this is logically private to the crate ++/// and will prevent implementations from outside the crate ++pub trait Seal {} ++ + /// Trait implemented by arrays that can be SIMD types. +-#[doc(hidden)] +-pub trait SimdArray { ++pub trait SimdArray: Seal { + /// The type of the #[repr(simd)] type. + type Tuple: Copy + Clone; + /// The element type of the vector. + type T; + /// The number of elements in the array. + const N: usize; + /// The type: `[u32; Self::N]`. + type NT; + } + + /// This traits is used to constraint the arguments + /// and result type of the portable shuffles. + #[doc(hidden)] +-pub trait Shuffle { ++pub trait Shuffle: Seal { + // Lanes is a `[u32; N]` where `N` is the number of vector lanes + + /// The result type of the shuffle. + type Output; + } + + /// This trait is implemented by all SIMD vector types. +-#[doc(hidden)] +-pub trait Simd { ++pub trait Simd: Seal { + /// Element type of the SIMD vector + type Element; + /// The number of elements in the SIMD vector. + const LANES: usize; + /// The type: `[u32; Self::N]`. + type LanesType; + } + + /// This trait is implemented by all mask types +-#[doc(hidden)] +-pub trait Mask { ++pub trait Mask: Seal { + fn test(&self) -> bool; + } +diff --git a/third_party/rust/packed_simd/src/testing/utils.rs b/third_party/rust/packed_simd/src/testing/utils.rs +--- a/third_party/rust/packed_simd/src/testing/utils.rs ++++ b/third_party/rust/packed_simd/src/testing/utils.rs +@@ -1,11 +1,13 @@ + //! Testing utilities + + #![allow(dead_code)] ++// FIXME: Or don't. But it's true this is a problematic comparison. ++#![allow(clippy::neg_cmp_op_on_partial_ord)] + + use crate::{cmp::PartialOrd, fmt::Debug, LexicographicallyOrdered}; + + /// Tests PartialOrd for `a` and `b` where `a < b` is true. + pub fn test_lt( + a: LexicographicallyOrdered, b: LexicographicallyOrdered, + ) where + LexicographicallyOrdered: Debug + PartialOrd, +@@ -14,37 +16,42 @@ pub fn test_lt( + assert!(b > a, "{:?}, {:?}", a, b); + + assert!(!(a == b), "{:?}, {:?}", a, b); + assert!(a != b, "{:?}, {:?}", a, b); + + assert!(a <= b, "{:?}, {:?}", a, b); + assert!(b >= a, "{:?}, {:?}", a, b); + +- // Irreflexivity +- assert!(!(a < a), "{:?}, {:?}", a, b); +- assert!(!(b < b), "{:?}, {:?}", a, b); +- assert!(!(a > a), "{:?}, {:?}", a, b); +- assert!(!(b > b), "{:?}, {:?}", a, b); ++ // The elegance of the mathematical expression of irreflexivity is more ++ // than clippy can handle. ++ #[allow(clippy::eq_op)] ++ { ++ // Irreflexivity ++ assert!(!(a < a), "{:?}, {:?}", a, b); ++ assert!(!(b < b), "{:?}, {:?}", a, b); ++ assert!(!(a > a), "{:?}, {:?}", a, b); ++ assert!(!(b > b), "{:?}, {:?}", a, b); + +- assert!(a <= a, "{:?}, {:?}", a, b); +- assert!(b <= b, "{:?}, {:?}", a, b); ++ assert!(a <= a, "{:?}, {:?}", a, b); ++ assert!(b <= b, "{:?}, {:?}", a, b); ++ } + } + + /// Tests PartialOrd for `a` and `b` where `a <= b` is true. + pub fn test_le( + a: LexicographicallyOrdered, b: LexicographicallyOrdered, + ) where + LexicographicallyOrdered: Debug + PartialOrd, + { + assert!(a <= b, "{:?}, {:?}", a, b); + assert!(b >= a, "{:?}, {:?}", a, b); + +- assert!(a == b || a < b, "{:?}, {:?}", a, b); +- assert!(a == b || b > a, "{:?}, {:?}", a, b); ++ assert!(a <= b, "{:?}, {:?}", a, b); ++ assert!(b >= a, "{:?}, {:?}", a, b); + + if a == b { + assert!(!(a < b), "{:?}, {:?}", a, b); + assert!(!(b > a), "{:?}, {:?}", a, b); + + assert!(!(a != b), "{:?}, {:?}", a, b); + } else { + assert!(a != b, "{:?}, {:?}", a, b); +diff --git a/third_party/rust/packed_simd/src/v128.rs b/third_party/rust/packed_simd/src/v128.rs +--- a/third_party/rust/packed_simd/src/v128.rs ++++ b/third_party/rust/packed_simd/src/v128.rs +@@ -1,80 +1,80 @@ + //! 128-bit wide vector types +-#![rustfmt::skip] ++#[rustfmt::skip] + + use crate::*; + +-impl_i!([i8; 16]: i8x16, m8x16 | i8 | test_v128 | ++impl_i!([i8; 16]: i8x16, m8x16 | i8, u16 | test_v128 | + x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15 | + From: | + /// A 128-bit vector with 16 `i8` lanes. + ); +-impl_u!([u8; 16]: u8x16, m8x16 | u8 | test_v128 | ++impl_u!([u8; 16]: u8x16, m8x16 | u8, u16 | test_v128 | + x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15 | + From: | + /// A 128-bit vector with 16 `u8` lanes. + ); +-impl_m!([m8; 16]: m8x16 | i8 | test_v128 | ++impl_m!([m8; 16]: m8x16 | i8, u16 | test_v128 | + x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15 | + From: m16x16 | + /// A 128-bit vector mask with 16 `m8` lanes. + ); + +-impl_i!([i16; 8]: i16x8, m16x8 | i16 | test_v128 | x0, x1, x2, x3, x4, x5, x6, x7 | ++impl_i!([i16; 8]: i16x8, m16x8 | i16, u8 | test_v128 | x0, x1, x2, x3, x4, x5, x6, x7 | + From: i8x8, u8x8 | + /// A 128-bit vector with 8 `i16` lanes. + ); +-impl_u!([u16; 8]: u16x8, m16x8 | u16| test_v128 | x0, x1, x2, x3, x4, x5, x6, x7 | ++impl_u!([u16; 8]: u16x8, m16x8 | u16, u8 | test_v128 | x0, x1, x2, x3, x4, x5, x6, x7 | + From: u8x8 | + /// A 128-bit vector with 8 `u16` lanes. + ); +-impl_m!([m16; 8]: m16x8 | i16 | test_v128 | x0, x1, x2, x3, x4, x5, x6, x7 | ++impl_m!([m16; 8]: m16x8 | i16, u8 | test_v128 | x0, x1, x2, x3, x4, x5, x6, x7 | + From: m8x8, m32x8 | + /// A 128-bit vector mask with 8 `m16` lanes. + ); + +-impl_i!([i32; 4]: i32x4, m32x4 | i32 | test_v128 | x0, x1, x2, x3 | ++impl_i!([i32; 4]: i32x4, m32x4 | i32, u8 | test_v128 | x0, x1, x2, x3 | + From: i8x4, u8x4, i16x4, u16x4 | + /// A 128-bit vector with 4 `i32` lanes. + ); +-impl_u!([u32; 4]: u32x4, m32x4 | u32| test_v128 | x0, x1, x2, x3 | ++impl_u!([u32; 4]: u32x4, m32x4 | u32, u8 | test_v128 | x0, x1, x2, x3 | + From: u8x4, u16x4 | + /// A 128-bit vector with 4 `u32` lanes. + ); + impl_f!([f32; 4]: f32x4, m32x4 | f32 | test_v128 | x0, x1, x2, x3 | + From: i8x4, u8x4, i16x4, u16x4 | + /// A 128-bit vector with 4 `f32` lanes. + ); +-impl_m!([m32; 4]: m32x4 | i32 | test_v128 | x0, x1, x2, x3 | ++impl_m!([m32; 4]: m32x4 | i32, u8 | test_v128 | x0, x1, x2, x3 | + From: m8x4, m16x4, m64x4 | + /// A 128-bit vector mask with 4 `m32` lanes. + ); + +-impl_i!([i64; 2]: i64x2, m64x2 | i64 | test_v128 | x0, x1 | ++impl_i!([i64; 2]: i64x2, m64x2 | i64, u8 | test_v128 | x0, x1 | + From: i8x2, u8x2, i16x2, u16x2, i32x2, u32x2 | + /// A 128-bit vector with 2 `i64` lanes. + ); +-impl_u!([u64; 2]: u64x2, m64x2 | u64 | test_v128 | x0, x1 | ++impl_u!([u64; 2]: u64x2, m64x2 | u64, u8 | test_v128 | x0, x1 | + From: u8x2, u16x2, u32x2 | + /// A 128-bit vector with 2 `u64` lanes. + ); + impl_f!([f64; 2]: f64x2, m64x2 | f64 | test_v128 | x0, x1 | + From: i8x2, u8x2, i16x2, u16x2, i32x2, u32x2, f32x2 | + /// A 128-bit vector with 2 `f64` lanes. + ); +-impl_m!([m64; 2]: m64x2 | i64 | test_v128 | x0, x1 | ++impl_m!([m64; 2]: m64x2 | i64, u8 | test_v128 | x0, x1 | + From: m8x2, m16x2, m32x2, m128x2 | + /// A 128-bit vector mask with 2 `m64` lanes. + ); + +-impl_i!([i128; 1]: i128x1, m128x1 | i128 | test_v128 | x0 | ++impl_i!([i128; 1]: i128x1, m128x1 | i128, u8 | test_v128 | x0 | + From: /*i8x1, u8x1, i16x1, u16x1, i32x1, u32x1, i64x1, u64x1 */ | // FIXME: unary small vector types + /// A 128-bit vector with 1 `i128` lane. + ); +-impl_u!([u128; 1]: u128x1, m128x1 | u128 | test_v128 | x0 | ++impl_u!([u128; 1]: u128x1, m128x1 | u128, u8 | test_v128 | x0 | + From: /*u8x1, u16x1, u32x1, u64x1 */ | // FIXME: unary small vector types + /// A 128-bit vector with 1 `u128` lane. + ); +-impl_m!([m128; 1]: m128x1 | i128 | test_v128 | x0 | ++impl_m!([m128; 1]: m128x1 | i128, u8 | test_v128 | x0 | + From: /*m8x1, m16x1, m32x1, m64x1 */ | // FIXME: unary small vector types + /// A 128-bit vector mask with 1 `m128` lane. + ); +diff --git a/third_party/rust/packed_simd/src/v16.rs b/third_party/rust/packed_simd/src/v16.rs +--- a/third_party/rust/packed_simd/src/v16.rs ++++ b/third_party/rust/packed_simd/src/v16.rs +@@ -1,16 +1,16 @@ + //! 16-bit wide vector types + + use crate::*; + +-impl_i!([i8; 2]: i8x2, m8x2 | i8 | test_v16 | x0, x1 | ++impl_i!([i8; 2]: i8x2, m8x2 | i8, u8 | test_v16 | x0, x1 | + From: | + /// A 16-bit vector with 2 `i8` lanes. + ); +-impl_u!([u8; 2]: u8x2, m8x2 | u8 | test_v16 | x0, x1 | ++impl_u!([u8; 2]: u8x2, m8x2 | u8, u8 | test_v16 | x0, x1 | + From: | + /// A 16-bit vector with 2 `u8` lanes. + ); +-impl_m!([m8; 2]: m8x2 | i8 | test_v16 | x0, x1 | ++impl_m!([m8; 2]: m8x2 | i8, u8 | test_v16 | x0, x1 | + From: m16x2, m32x2, m64x2, m128x2 | + /// A 16-bit vector mask with 2 `m8` lanes. + ); +diff --git a/third_party/rust/packed_simd/src/v256.rs b/third_party/rust/packed_simd/src/v256.rs +--- a/third_party/rust/packed_simd/src/v256.rs ++++ b/third_party/rust/packed_simd/src/v256.rs +@@ -1,86 +1,86 @@ + //! 256-bit wide vector types +-#![rustfmt::skip] ++#[rustfmt::skip] + + use crate::*; + +-impl_i!([i8; 32]: i8x32, m8x32 | i8 | test_v256 | ++impl_i!([i8; 32]: i8x32, m8x32 | i8, u32 | test_v256 | + x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, + x16, x17, x18, x19, x20, x21, x22, x23, x24, x25, x26, x27, x28, x29, x30, x31 | + From: | + /// A 256-bit vector with 32 `i8` lanes. + ); +-impl_u!([u8; 32]: u8x32, m8x32 | u8 | test_v256 | ++impl_u!([u8; 32]: u8x32, m8x32 | u8, u32 | test_v256 | + x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, + x16, x17, x18, x19, x20, x21, x22, x23, x24, x25, x26, x27, x28, x29, x30, x31 | + From: | + /// A 256-bit vector with 32 `u8` lanes. + ); +-impl_m!([m8; 32]: m8x32 | i8 | test_v256 | ++impl_m!([m8; 32]: m8x32 | i8, u32 | test_v256 | + x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, + x16, x17, x18, x19, x20, x21, x22, x23, x24, x25, x26, x27, x28, x29, x30, x31 | + From: | + /// A 256-bit vector mask with 32 `m8` lanes. + ); + +-impl_i!([i16; 16]: i16x16, m16x16 | i16 | test_v256 | ++impl_i!([i16; 16]: i16x16, m16x16 | i16, u16 | test_v256 | + x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15 | + From: i8x16, u8x16 | + /// A 256-bit vector with 16 `i16` lanes. + ); +-impl_u!([u16; 16]: u16x16, m16x16 | u16 | test_v256 | ++impl_u!([u16; 16]: u16x16, m16x16 | u16, u16 | test_v256 | + x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15 | + From: u8x16 | + /// A 256-bit vector with 16 `u16` lanes. + ); +-impl_m!([m16; 16]: m16x16 | i16 | test_v256 | ++impl_m!([m16; 16]: m16x16 | i16, u16 | test_v256 | + x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15 | + From: m8x16 | + /// A 256-bit vector mask with 16 `m16` lanes. + ); + +-impl_i!([i32; 8]: i32x8, m32x8 | i32 | test_v256 | x0, x1, x2, x3, x4, x5, x6, x7 | ++impl_i!([i32; 8]: i32x8, m32x8 | i32, u8 | test_v256 | x0, x1, x2, x3, x4, x5, x6, x7 | + From: i8x8, u8x8, i16x8, u16x8 | + /// A 256-bit vector with 8 `i32` lanes. + ); +-impl_u!([u32; 8]: u32x8, m32x8 | u32 | test_v256 | x0, x1, x2, x3, x4, x5, x6, x7 | ++impl_u!([u32; 8]: u32x8, m32x8 | u32, u8 | test_v256 | x0, x1, x2, x3, x4, x5, x6, x7 | + From: u8x8, u16x8 | + /// A 256-bit vector with 8 `u32` lanes. + ); + impl_f!([f32; 8]: f32x8, m32x8 | f32 | test_v256 | x0, x1, x2, x3, x4, x5, x6, x7 | + From: i8x8, u8x8, i16x8, u16x8 | + /// A 256-bit vector with 8 `f32` lanes. + ); +-impl_m!([m32; 8]: m32x8 | i32 | test_v256 | x0, x1, x2, x3, x4, x5, x6, x7 | ++impl_m!([m32; 8]: m32x8 | i32, u8 | test_v256 | x0, x1, x2, x3, x4, x5, x6, x7 | + From: m8x8, m16x8 | + /// A 256-bit vector mask with 8 `m32` lanes. + ); + +-impl_i!([i64; 4]: i64x4, m64x4 | i64 | test_v256 | x0, x1, x2, x3 | ++impl_i!([i64; 4]: i64x4, m64x4 | i64, u8 | test_v256 | x0, x1, x2, x3 | + From: i8x4, u8x4, i16x4, u16x4, i32x4, u32x4 | + /// A 256-bit vector with 4 `i64` lanes. + ); +-impl_u!([u64; 4]: u64x4, m64x4 | u64 | test_v256 | x0, x1, x2, x3 | ++impl_u!([u64; 4]: u64x4, m64x4 | u64, u8 | test_v256 | x0, x1, x2, x3 | + From: u8x4, u16x4, u32x4 | + /// A 256-bit vector with 4 `u64` lanes. + ); + impl_f!([f64; 4]: f64x4, m64x4 | f64 | test_v256 | x0, x1, x2, x3 | + From: i8x4, u8x4, i16x4, u16x4, i32x4, u32x4, f32x4 | + /// A 256-bit vector with 4 `f64` lanes. + ); +-impl_m!([m64; 4]: m64x4 | i64 | test_v256 | x0, x1, x2, x3 | ++impl_m!([m64; 4]: m64x4 | i64, u8 | test_v256 | x0, x1, x2, x3 | + From: m8x4, m16x4, m32x4 | + /// A 256-bit vector mask with 4 `m64` lanes. + ); + +-impl_i!([i128; 2]: i128x2, m128x2 | i128 | test_v256 | x0, x1 | ++impl_i!([i128; 2]: i128x2, m128x2 | i128, u8 | test_v256 | x0, x1 | + From: i8x2, u8x2, i16x2, u16x2, i32x2, u32x2, i64x2, u64x2 | + /// A 256-bit vector with 2 `i128` lanes. + ); +-impl_u!([u128; 2]: u128x2, m128x2 | u128 | test_v256 | x0, x1 | ++impl_u!([u128; 2]: u128x2, m128x2 | u128, u8 | test_v256 | x0, x1 | + From: u8x2, u16x2, u32x2, u64x2 | + /// A 256-bit vector with 2 `u128` lanes. + ); +-impl_m!([m128; 2]: m128x2 | i128 | test_v256 | x0, x1 | ++impl_m!([m128; 2]: m128x2 | i128, u8 | test_v256 | x0, x1 | + From: m8x2, m16x2, m32x2, m64x2 | + /// A 256-bit vector mask with 2 `m128` lanes. + ); +diff --git a/third_party/rust/packed_simd/src/v32.rs b/third_party/rust/packed_simd/src/v32.rs +--- a/third_party/rust/packed_simd/src/v32.rs ++++ b/third_party/rust/packed_simd/src/v32.rs +@@ -1,29 +1,29 @@ + //! 32-bit wide vector types + + use crate::*; + +-impl_i!([i8; 4]: i8x4, m8x4 | i8 | test_v32 | x0, x1, x2, x3 | ++impl_i!([i8; 4]: i8x4, m8x4 | i8, u8 | test_v32 | x0, x1, x2, x3 | + From: | + /// A 32-bit vector with 4 `i8` lanes. + ); +-impl_u!([u8; 4]: u8x4, m8x4 | u8 | test_v32 | x0, x1, x2, x3 | ++impl_u!([u8; 4]: u8x4, m8x4 | u8, u8 | test_v32 | x0, x1, x2, x3 | + From: | + /// A 32-bit vector with 4 `u8` lanes. + ); +-impl_m!([m8; 4]: m8x4 | i8 | test_v32 | x0, x1, x2, x3 | ++impl_m!([m8; 4]: m8x4 | i8, u8 | test_v32 | x0, x1, x2, x3 | + From: m16x4, m32x4, m64x4 | + /// A 32-bit vector mask with 4 `m8` lanes. + ); + +-impl_i!([i16; 2]: i16x2, m16x2 | i16 | test_v32 | x0, x1 | ++impl_i!([i16; 2]: i16x2, m16x2 | i16, u8 | test_v32 | x0, x1 | + From: i8x2, u8x2 | + /// A 32-bit vector with 2 `i16` lanes. + ); +-impl_u!([u16; 2]: u16x2, m16x2 | u16 | test_v32 | x0, x1 | ++impl_u!([u16; 2]: u16x2, m16x2 | u16, u8 | test_v32 | x0, x1 | + From: u8x2 | + /// A 32-bit vector with 2 `u16` lanes. + ); +-impl_m!([m16; 2]: m16x2 | i16 | test_v32 | x0, x1 | ++impl_m!([m16; 2]: m16x2 | i16, u8 | test_v32 | x0, x1 | + From: m8x2, m32x2, m64x2, m128x2 | + /// A 32-bit vector mask with 2 `m16` lanes. + ); +diff --git a/third_party/rust/packed_simd/src/v512.rs b/third_party/rust/packed_simd/src/v512.rs +--- a/third_party/rust/packed_simd/src/v512.rs ++++ b/third_party/rust/packed_simd/src/v512.rs +@@ -1,99 +1,99 @@ + //! 512-bit wide vector types +-#![rustfmt::skip] ++#[rustfmt::skip] + + use crate::*; + +-impl_i!([i8; 64]: i8x64, m8x64 | i8 | test_v512 | ++impl_i!([i8; 64]: i8x64, m8x64 | i8, u64 | test_v512 | + x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, + x16, x17, x18, x19, x20, x21, x22, x23, x24, x25, x26, x27, x28, x29, x30, x31, + x32, x33, x34, x35, x36, x37, x38, x39, x40, x41, x42, x43, x44, x45, x46, x47, + x48, x49, x50, x51, x52, x53, x54, x55, x56, x57, x58, x59, x60, x61, x62, x63 | + From: | + /// A 512-bit vector with 64 `i8` lanes. + ); +-impl_u!([u8; 64]: u8x64, m8x64 | u8 | test_v512 | ++impl_u!([u8; 64]: u8x64, m8x64 | u8, u64 | test_v512 | + x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, + x16, x17, x18, x19, x20, x21, x22, x23, x24, x25, x26, x27, x28, x29, x30, x31, + x32, x33, x34, x35, x36, x37, x38, x39, x40, x41, x42, x43, x44, x45, x46, x47, + x48, x49, x50, x51, x52, x53, x54, x55, x56, x57, x58, x59, x60, x61, x62, x63 | + From: | + /// A 512-bit vector with 64 `u8` lanes. + ); +-impl_m!([m8; 64]: m8x64 | i8 | test_v512 | ++impl_m!([m8; 64]: m8x64 | i8, u64 | test_v512 | + x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, + x16, x17, x18, x19, x20, x21, x22, x23, x24, x25, x26, x27, x28, x29, x30, x31, + x32, x33, x34, x35, x36, x37, x38, x39, x40, x41, x42, x43, x44, x45, x46, x47, + x48, x49, x50, x51, x52, x53, x54, x55, x56, x57, x58, x59, x60, x61, x62, x63 | + From: | + /// A 512-bit vector mask with 64 `m8` lanes. + ); + +-impl_i!([i16; 32]: i16x32, m16x32 | i16 | test_v512 | ++impl_i!([i16; 32]: i16x32, m16x32 | i16, u32 | test_v512 | + x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, + x16, x17, x18, x19, x20, x21, x22, x23, x24, x25, x26, x27, x28, x29, x30, x31 | + From: i8x32, u8x32 | + /// A 512-bit vector with 32 `i16` lanes. + ); +-impl_u!([u16; 32]: u16x32, m16x32 | u16 | test_v512 | ++impl_u!([u16; 32]: u16x32, m16x32 | u16, u32 | test_v512 | + x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, + x16, x17, x18, x19, x20, x21, x22, x23, x24, x25, x26, x27, x28, x29, x30, x31 | + From: u8x32 | + /// A 512-bit vector with 32 `u16` lanes. + ); +-impl_m!([m16; 32]: m16x32 | i16 | test_v512 | ++impl_m!([m16; 32]: m16x32 | i16, u32 | test_v512 | + x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, + x16, x17, x18, x19, x20, x21, x22, x23, x24, x25, x26, x27, x28, x29, x30, x31 | + From: m8x32 | + /// A 512-bit vector mask with 32 `m16` lanes. + ); + +-impl_i!([i32; 16]: i32x16, m32x16 | i32 | test_v512 | ++impl_i!([i32; 16]: i32x16, m32x16 | i32, u16 | test_v512 | + x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15 | + From: i8x16, u8x16, i16x16, u16x16 | + /// A 512-bit vector with 16 `i32` lanes. + ); +-impl_u!([u32; 16]: u32x16, m32x16 | u32 | test_v512 | ++impl_u!([u32; 16]: u32x16, m32x16 | u32, u16 | test_v512 | + x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15 | + From: u8x16, u16x16 | + /// A 512-bit vector with 16 `u32` lanes. + ); + impl_f!([f32; 16]: f32x16, m32x16 | f32 | test_v512 | + x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15 | + From: i8x16, u8x16, i16x16, u16x16 | + /// A 512-bit vector with 16 `f32` lanes. + ); +-impl_m!([m32; 16]: m32x16 | i32 | test_v512 | ++impl_m!([m32; 16]: m32x16 | i32, u16 | test_v512 | + x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15 | + From: m8x16, m16x16 | + /// A 512-bit vector mask with 16 `m32` lanes. + ); + +-impl_i!([i64; 8]: i64x8, m64x8 | i64 | test_v512 | x0, x1, x2, x3, x4, x5, x6, x7 | ++impl_i!([i64; 8]: i64x8, m64x8 | i64, u8 | test_v512 | x0, x1, x2, x3, x4, x5, x6, x7 | + From: i8x8, u8x8, i16x8, u16x8, i32x8, u32x8 | + /// A 512-bit vector with 8 `i64` lanes. + ); +-impl_u!([u64; 8]: u64x8, m64x8 | u64 | test_v512 | x0, x1, x2, x3, x4, x5, x6, x7 | ++impl_u!([u64; 8]: u64x8, m64x8 | u64, u8 | test_v512 | x0, x1, x2, x3, x4, x5, x6, x7 | + From: u8x8, u16x8, u32x8 | + /// A 512-bit vector with 8 `u64` lanes. + ); + impl_f!([f64; 8]: f64x8, m64x8 | f64 | test_v512 | x0, x1, x2, x3, x4, x5, x6, x7 | + From: i8x8, u8x8, i16x8, u16x8, i32x8, u32x8, f32x8 | + /// A 512-bit vector with 8 `f64` lanes. + ); +-impl_m!([m64; 8]: m64x8 | i64 | test_v512 | x0, x1, x2, x3, x4, x5, x6, x7 | ++impl_m!([m64; 8]: m64x8 | i64, u8 | test_v512 | x0, x1, x2, x3, x4, x5, x6, x7 | + From: m8x8, m16x8, m32x8 | + /// A 512-bit vector mask with 8 `m64` lanes. + ); + +-impl_i!([i128; 4]: i128x4, m128x4 | i128 | test_v512 | x0, x1, x2, x3 | ++impl_i!([i128; 4]: i128x4, m128x4 | i128, u8 | test_v512 | x0, x1, x2, x3 | + From: i8x4, u8x4, i16x4, u16x4, i32x4, u32x4, i64x4, u64x4 | + /// A 512-bit vector with 4 `i128` lanes. + ); +-impl_u!([u128; 4]: u128x4, m128x4 | u128 | test_v512 | x0, x1, x2, x3 | ++impl_u!([u128; 4]: u128x4, m128x4 | u128, u8 | test_v512 | x0, x1, x2, x3 | + From: u8x4, u16x4, u32x4, u64x4 | + /// A 512-bit vector with 4 `u128` lanes. + ); +-impl_m!([m128; 4]: m128x4 | i128 | test_v512 | x0, x1, x2, x3 | ++impl_m!([m128; 4]: m128x4 | i128, u8 | test_v512 | x0, x1, x2, x3 | + From: m8x4, m16x4, m32x4, m64x4 | + /// A 512-bit vector mask with 4 `m128` lanes. + ); +diff --git a/third_party/rust/packed_simd/src/v64.rs b/third_party/rust/packed_simd/src/v64.rs +--- a/third_party/rust/packed_simd/src/v64.rs ++++ b/third_party/rust/packed_simd/src/v64.rs +@@ -1,66 +1,66 @@ + //! 64-bit wide vector types +-#![rustfmt::skip] ++#[rustfmt::skip] + + use super::*; + +-impl_i!([i8; 8]: i8x8, m8x8 | i8 | test_v64 | x0, x1, x2, x3, x4, x5, x6, x7 | ++impl_i!([i8; 8]: i8x8, m8x8 | i8, u8 | test_v64 | x0, x1, x2, x3, x4, x5, x6, x7 | + From: | + /// A 64-bit vector with 8 `i8` lanes. + ); +-impl_u!([u8; 8]: u8x8, m8x8 | u8 | test_v64 | x0, x1, x2, x3, x4, x5, x6, x7 | ++impl_u!([u8; 8]: u8x8, m8x8 | u8, u8 | test_v64 | x0, x1, x2, x3, x4, x5, x6, x7 | + From: | + /// A 64-bit vector with 8 `u8` lanes. + ); +-impl_m!([m8; 8]: m8x8 | i8 | test_v64 | x0, x1, x2, x3, x4, x5, x6, x7 | ++impl_m!([m8; 8]: m8x8 | i8, u8 | test_v64 | x0, x1, x2, x3, x4, x5, x6, x7 | + From: m16x8, m32x8 | + /// A 64-bit vector mask with 8 `m8` lanes. + ); + +-impl_i!([i16; 4]: i16x4, m16x4 | i16 | test_v64 | x0, x1, x2, x3 | ++impl_i!([i16; 4]: i16x4, m16x4 | i16, u8 | test_v64 | x0, x1, x2, x3 | + From: i8x4, u8x4 | + /// A 64-bit vector with 4 `i16` lanes. + ); +-impl_u!([u16; 4]: u16x4, m16x4 | u16 | test_v64 | x0, x1, x2, x3 | ++impl_u!([u16; 4]: u16x4, m16x4 | u16, u8 | test_v64 | x0, x1, x2, x3 | + From: u8x4 | + /// A 64-bit vector with 4 `u16` lanes. + ); +-impl_m!([m16; 4]: m16x4 | i16 | test_v64 | x0, x1, x2, x3 | ++impl_m!([m16; 4]: m16x4 | i16, u8 | test_v64 | x0, x1, x2, x3 | + From: m8x4, m32x4, m64x4 | + /// A 64-bit vector mask with 4 `m16` lanes. + ); + +-impl_i!([i32; 2]: i32x2, m32x2 | i32 | test_v64 | x0, x1 | ++impl_i!([i32; 2]: i32x2, m32x2 | i32, u8 | test_v64 | x0, x1 | + From: i8x2, u8x2, i16x2, u16x2 | + /// A 64-bit vector with 2 `i32` lanes. + ); +-impl_u!([u32; 2]: u32x2, m32x2 | u32 | test_v64 | x0, x1 | ++impl_u!([u32; 2]: u32x2, m32x2 | u32, u8 | test_v64 | x0, x1 | + From: u8x2, u16x2 | + /// A 64-bit vector with 2 `u32` lanes. + ); +-impl_m!([m32; 2]: m32x2 | i32 | test_v64 | x0, x1 | ++impl_m!([m32; 2]: m32x2 | i32, u8 | test_v64 | x0, x1 | + From: m8x2, m16x2, m64x2, m128x2 | + /// A 64-bit vector mask with 2 `m32` lanes. + ); + impl_f!([f32; 2]: f32x2, m32x2 | f32 | test_v64 | x0, x1 | + From: i8x2, u8x2, i16x2, u16x2 | + /// A 64-bit vector with 2 `f32` lanes. + ); + + /* +-impl_i!([i64; 1]: i64x1, m64x1 | i64 | test_v64 | x0 | ++impl_i!([i64; 1]: i64x1, m64x1 | i64, u8 | test_v64 | x0 | + From: /*i8x1, u8x1, i16x1, u16x1, i32x1, u32x1*/ | // FIXME: primitive to vector conversion + /// A 64-bit vector with 1 `i64` lanes. + ); +-impl_u!([u64; 1]: u64x1, m64x1 | u64 | test_v64 | x0 | ++impl_u!([u64; 1]: u64x1, m64x1 | u64, u8 | test_v64 | x0 | + From: /*u8x1, u16x1, u32x1*/ | // FIXME: primitive to vector conversion + /// A 64-bit vector with 1 `u64` lanes. + ); +-impl_m!([m64; 1]: m64x1 | i64 | test_v64 | x0 | ++impl_m!([m64; 1]: m64x1 | i64, u8 | test_v64 | x0 | + From: /*m8x1, m16x1, m32x1, */ m128x1 | // FIXME: unary small vector types + /// A 64-bit vector mask with 1 `m64` lanes. + ); + impl_f!([f64; 1]: f64x1, m64x1 | f64 | test_v64 | x0 | + From: /*i8x1, u8x1, i16x1, u16x1, i32x1, u32x1, f32x1*/ | // FIXME: unary small vector types + /// A 64-bit vector with 1 `f64` lanes. + ); + */ +diff --git a/third_party/rust/packed_simd/src/vPtr.rs b/third_party/rust/packed_simd/src/vPtr.rs +--- a/third_party/rust/packed_simd/src/vPtr.rs ++++ b/third_party/rust/packed_simd/src/vPtr.rs +@@ -1,10 +1,10 @@ + //! Vectors of pointers +-#![rustfmt::skip] ++#[rustfmt::skip] + + use crate::*; + + impl_const_p!( + [*const T; 2]: cptrx2, msizex2, usizex2, isizex2 | test_v128 | x0, x1 | From: | + /// A vector with 2 `*const T` lanes + ); + +diff --git a/third_party/rust/packed_simd/src/vSize.rs b/third_party/rust/packed_simd/src/vSize.rs +--- a/third_party/rust/packed_simd/src/vSize.rs ++++ b/third_party/rust/packed_simd/src/vSize.rs +@@ -1,53 +1,53 @@ + //! Vectors with pointer-sized elements + + use crate::codegen::pointer_sized_int::{isize_, usize_}; + use crate::*; + +-impl_i!([isize; 2]: isizex2, msizex2 | isize_ | test_v128 | ++impl_i!([isize; 2]: isizex2, msizex2 | isize_, u8 | test_v128 | + x0, x1| + From: | + /// A vector with 2 `isize` lanes. + ); + +-impl_u!([usize; 2]: usizex2, msizex2 | usize_ | test_v128 | ++impl_u!([usize; 2]: usizex2, msizex2 | usize_, u8 | test_v128 | + x0, x1| + From: | + /// A vector with 2 `usize` lanes. + ); +-impl_m!([msize; 2]: msizex2 | isize_ | test_v128 | ++impl_m!([msize; 2]: msizex2 | isize_, u8 | test_v128 | + x0, x1 | + From: | + /// A vector mask with 2 `msize` lanes. + ); + +-impl_i!([isize; 4]: isizex4, msizex4 | isize_ | test_v256 | ++impl_i!([isize; 4]: isizex4, msizex4 | isize_, u8 | test_v256 | + x0, x1, x2, x3 | + From: | + /// A vector with 4 `isize` lanes. + ); +-impl_u!([usize; 4]: usizex4, msizex4 | usize_ | test_v256 | ++impl_u!([usize; 4]: usizex4, msizex4 | usize_, u8 | test_v256 | + x0, x1, x2, x3| + From: | + /// A vector with 4 `usize` lanes. + ); +-impl_m!([msize; 4]: msizex4 | isize_ | test_v256 | ++impl_m!([msize; 4]: msizex4 | isize_, u8 | test_v256 | + x0, x1, x2, x3 | + From: | + /// A vector mask with 4 `msize` lanes. + ); + +-impl_i!([isize; 8]: isizex8, msizex8 | isize_ | test_v512 | ++impl_i!([isize; 8]: isizex8, msizex8 | isize_, u8 | test_v512 | + x0, x1, x2, x3, x4, x5, x6, x7 | + From: | +- /// A vector with 4 `isize` lanes. ++ /// A vector with 8 `isize` lanes. + ); +-impl_u!([usize; 8]: usizex8, msizex8 | usize_ | test_v512 | ++impl_u!([usize; 8]: usizex8, msizex8 | usize_, u8 | test_v512 | + x0, x1, x2, x3, x4, x5, x6, x7 | + From: | + /// A vector with 8 `usize` lanes. + ); +-impl_m!([msize; 8]: msizex8 | isize_ | test_v512 | ++impl_m!([msize; 8]: msizex8 | isize_, u8 | test_v512 | + x0, x1, x2, x3, x4, x5, x6, x7 | + From: | + /// A vector mask with 8 `msize` lanes. + ); +diff --git a/third_party/rust/packed_simd/tests/endianness.rs b/third_party/rust/packed_simd/tests/endianness.rs +--- a/third_party/rust/packed_simd/tests/endianness.rs ++++ b/third_party/rust/packed_simd/tests/endianness.rs +@@ -12,51 +12,51 @@ fn endian_indexing() { + assert_eq!(v.extract(1), 1); + assert_eq!(v.extract(2), 2); + assert_eq!(v.extract(3), 3); + } + + #[cfg_attr(not(target_arch = "wasm32"), test)] + #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] + fn endian_bitcasts() { +- #[cfg_attr(rustfmt, rustfmt_skip)] ++ #[rustfmt::skip] + let x = i8x16::new( + 0, 1, 2, 3, 4, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 14, 15, + ); + let t: i16x8 = unsafe { mem::transmute(x) }; + let e: i16x8 = if cfg!(target_endian = "little") { + i16x8::new(256, 770, 1284, 1798, 2312, 2826, 3340, 3854) + } else { + i16x8::new(1, 515, 1029, 1543, 2057, 2571, 3085, 3599) + }; + assert_eq!(t, e); + } + + #[cfg_attr(not(target_arch = "wasm32"), test)] + #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] + fn endian_casts() { +- #[cfg_attr(rustfmt, rustfmt_skip)] ++ #[rustfmt::skip] + let x = i8x16::new( + 0, 1, 2, 3, 4, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 14, 15, + ); + let t: i16x16 = x.into(); // simd_cast +- #[cfg_attr(rustfmt, rustfmt_skip)] ++ #[rustfmt::skip] + let e = i16x16::new( + 0, 1, 2, 3, 4, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 14, 15, + ); + assert_eq!(t, e); + } + + #[cfg_attr(not(target_arch = "wasm32"), test)] + #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] + fn endian_load_and_stores() { +- #[cfg_attr(rustfmt, rustfmt_skip)] ++ #[rustfmt::skip] + let x = i8x16::new( + 0, 1, 2, 3, 4, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 14, 15, + ); + let mut y: [i16; 8] = [0; 8]; + x.write_to_slice_unaligned(unsafe { + slice::from_raw_parts_mut(&mut y as *mut _ as *mut i8, 16) + }); +@@ -77,56 +77,61 @@ fn endian_load_and_stores() { + #[cfg_attr(not(target_arch = "wasm32"), test)] + #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] + fn endian_array_union() { + union A { + data: [f32; 4], + vec: f32x4, + } + let x: [f32; 4] = unsafe { A { vec: f32x4::new(0., 1., 2., 3.) }.data }; +- assert_eq!(x[0], 0_f32); +- assert_eq!(x[1], 1_f32); +- assert_eq!(x[2], 2_f32); +- assert_eq!(x[3], 3_f32); ++ // As all of these are integer values within the mantissa^1 range, it ++ // would be very unusual for them to actually fail to compare. ++ #[allow(clippy::float_cmp)] ++ { ++ assert_eq!(x[0], 0_f32); ++ assert_eq!(x[1], 1_f32); ++ assert_eq!(x[2], 2_f32); ++ assert_eq!(x[3], 3_f32); ++ } + let y: f32x4 = unsafe { A { data: [3., 2., 1., 0.] }.vec }; + assert_eq!(y, f32x4::new(3., 2., 1., 0.)); + + union B { + data: [i8; 16], + vec: i8x16, + } +- #[cfg_attr(rustfmt, rustfmt_skip)] ++ #[rustfmt::skip] + let x = i8x16::new( + 0, 1, 2, 3, 4, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 14, 15, + ); + let x: [i8; 16] = unsafe { B { vec: x }.data }; + +- for i in 0..16 { +- assert_eq!(x[i], i as i8); ++ for (i, v) in x.iter().enumerate() { ++ assert_eq!(i as i8, *v); + } + +- #[cfg_attr(rustfmt, rustfmt_skip)] ++ #[rustfmt::skip] + let y = [ + 15, 14, 13, 12, 11, 19, 9, 8, + 7, 6, 5, 4, 3, 2, 1, 0 + ]; +- #[cfg_attr(rustfmt, rustfmt_skip)] ++ #[rustfmt::skip] + let e = i8x16::new( + 15, 14, 13, 12, 11, 19, 9, 8, + 7, 6, 5, 4, 3, 2, 1, 0 + ); + let z = unsafe { B { data: y }.vec }; + assert_eq!(z, e); + + union C { + data: [i16; 8], + vec: i8x16, + } +- #[cfg_attr(rustfmt, rustfmt_skip)] ++ #[rustfmt::skip] + let x = i8x16::new( + 0, 1, 2, 3, 4, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 14, 15, + ); + let x: [i16; 8] = unsafe { C { vec: x }.data }; + + let e: [i16; 8] = if cfg!(target_endian = "little") { + [256, 770, 1284, 1798, 2312, 2826, 3340, 3854] +@@ -140,31 +145,36 @@ fn endian_array_union() { + #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] + fn endian_tuple_access() { + type F32x4T = (f32, f32, f32, f32); + union A { + data: F32x4T, + vec: f32x4, + } + let x: F32x4T = unsafe { A { vec: f32x4::new(0., 1., 2., 3.) }.data }; +- assert_eq!(x.0, 0_f32); +- assert_eq!(x.1, 1_f32); +- assert_eq!(x.2, 2_f32); +- assert_eq!(x.3, 3_f32); ++ // As all of these are integer values within the mantissa^1 range, it ++ // would be very unusual for them to actually fail to compare. ++ #[allow(clippy::float_cmp)] ++ { ++ assert_eq!(x.0, 0_f32); ++ assert_eq!(x.1, 1_f32); ++ assert_eq!(x.2, 2_f32); ++ assert_eq!(x.3, 3_f32); ++ } + let y: f32x4 = unsafe { A { data: (3., 2., 1., 0.) }.vec }; + assert_eq!(y, f32x4::new(3., 2., 1., 0.)); + +- #[cfg_attr(rustfmt, rustfmt_skip)] ++ #[rustfmt::skip] + type I8x16T = (i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8); + union B { + data: I8x16T, + vec: i8x16, + } + +- #[cfg_attr(rustfmt, rustfmt_skip)] ++ #[rustfmt::skip] + let x = i8x16::new( + 0, 1, 2, 3, 4, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 14, 15, + ); + let x: I8x16T = unsafe { B { vec: x }.data }; + + assert_eq!(x.0, 0); + assert_eq!(x.1, 1); +@@ -178,37 +188,37 @@ fn endian_tuple_access() { + assert_eq!(x.9, 9); + assert_eq!(x.10, 10); + assert_eq!(x.11, 11); + assert_eq!(x.12, 12); + assert_eq!(x.13, 13); + assert_eq!(x.14, 14); + assert_eq!(x.15, 15); + +- #[cfg_attr(rustfmt, rustfmt_skip)] ++ #[rustfmt::skip] + let y = ( + 15, 14, 13, 12, 11, 10, 9, 8, + 7, 6, 5, 4, 3, 2, 1, 0 + ); + let z: i8x16 = unsafe { B { data: y }.vec }; +- #[cfg_attr(rustfmt, rustfmt_skip)] ++ #[rustfmt::skip] + let e = i8x16::new( + 15, 14, 13, 12, 11, 10, 9, 8, + 7, 6, 5, 4, 3, 2, 1, 0 + ); + assert_eq!(e, z); + +- #[cfg_attr(rustfmt, rustfmt_skip)] ++ #[rustfmt::skip] + type I16x8T = (i16, i16, i16, i16, i16, i16, i16, i16); + union C { + data: I16x8T, + vec: i8x16, + } + +- #[cfg_attr(rustfmt, rustfmt_skip)] ++ #[rustfmt::skip] + let x = i8x16::new( + 0, 1, 2, 3, 4, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 14, 15, + ); + let x: I16x8T = unsafe { C { vec: x }.data }; + + let e: [i16; 8] = if cfg!(target_endian = "little") { + [256, 770, 1284, 1798, 2312, 2826, 3340, 3854] +@@ -219,28 +229,28 @@ fn endian_tuple_access() { + assert_eq!(x.1, e[1]); + assert_eq!(x.2, e[2]); + assert_eq!(x.3, e[3]); + assert_eq!(x.4, e[4]); + assert_eq!(x.5, e[5]); + assert_eq!(x.6, e[6]); + assert_eq!(x.7, e[7]); + +- #[cfg_attr(rustfmt, rustfmt_skip)] ++ #[rustfmt::skip] + #[repr(C)] + #[derive(Copy ,Clone)] + pub struct Tup(pub i8, pub i8, pub i16, pub i8, pub i8, pub i16, + pub i8, pub i8, pub i16, pub i8, pub i8, pub i16); + + union D { + data: Tup, + vec: i8x16, + } + +- #[cfg_attr(rustfmt, rustfmt_skip)] ++ #[rustfmt::skip] + let x = i8x16::new( + 0, 1, 2, 3, 4, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 14, 15, + ); + let x: Tup = unsafe { D { vec: x }.data }; + + let e: [i16; 12] = if cfg!(target_endian = "little") { + [0, 1, 770, 4, 5, 1798, 8, 9, 2826, 12, 13, 3854] + From 7299e281742782f04cbcc233d43f2dd7ce0f8e24 Mon Sep 17 00:00:00 2001 From: Andreas Grapentin Date: Nov 05 2021 20:25:45 +0000 Subject: [PATCH 32/73] libre/icedove: updated to 78.9.1 --- diff --git a/libre/icedove/PKGBUILD b/libre/icedove/PKGBUILD index 431045b..f3b15e8 100644 --- a/libre/icedove/PKGBUILD +++ b/libre/icedove/PKGBUILD @@ -22,10 +22,10 @@ _pkgname=thunderbird pkgname=icedove epoch=1 -pkgver=78.8.1 +pkgver=78.9.1 pkgrel=1 pkgrel+=.parabola1 -_brandingver=78.8 +_brandingver=78.9 _brandingrel=1 pkgdesc='Standalone mail and news reader based on Mozilla Thunderbird' url=https://wiki.parabola.nu/${pkgname} @@ -40,6 +40,9 @@ depends=( libicui18n.so libicuuc.so freetype2 libfreetype.so fontconfig libfontconfig.so glib2 libglib-2.0.so pixman libpixman-1.so gnupg ) +optdepends=( + 'libotr: OTR support for active one-to-one chats' +) makedepends=( unzip zip diffutils python python-setuptools yasm nasm mesa imake libpulse inetutils xorg-server-xvfb autoconf2.13 rust clang llvm gtk2 cbindgen nodejs @@ -59,7 +62,7 @@ source=(https://ftp.mozilla.org/pub/mozilla.org/thunderbird/releases/$pkgver/sou thunderbird-78.5-rust-1.48.patch) source+=(https://repo.parabola.nu/other/icedove/${pkgname}_$_brandingver-$_brandingrel.branding.tar.xz{,.sig}) source_armv7h=(arm-wasm-vfp.patch) -sha512sums=('5158f7663acf3d00f45b457d1c172dcc95978d6782775faa4ec3995d3a799dfce668302e2c4b963a5607add831314fac76d516e45863a1971fbd4a6b0c4bdb10' +sha512sums=('fa27a327ce10a0c16877ac02338aace257f60f69af40d12ae5bb2055f6536db9ba45995765ac0eaa1aea2fa2b353ac9dc6eb06fcdf6cb4ae6fafcd65fe5970c6' 'SKIP' 'a3c9815491d9bed0440c60f35867a5b8a2a1343521f288035fcc46e651a11b926c75a9eca2d262b43d510a7a7119709b53637f1b00ddbbee8e5b0a4b33d7b8fd' 'e21d30a8b79724eda3488ac2bf9dfeb0c7f6bf39e59c37f17574b529d33043765eb54408a55fcbf6f3afa7a58ca99124992d443cdff23ac5c9bdbff33c75f60f' @@ -67,9 +70,9 @@ sha512sums=('5158f7663acf3d00f45b457d1c172dcc95978d6782775faa4ec3995d3a799dfce66 '1eba1593ff0a9642d89e6d3e03388b1aef00437b2f6c1f0d81d250d9845b80e057c246eaeb31d8d22001abd65556a9603d1db597baf864481a5bfb7000886b29' 'e3ed2708b8354015cb3d2c81048d1ce4932d1effbe2b40efa7cf9b45c1b923b9fd708645e2f8aa0136a485a3f7ce6b396b85721aaf535a4a764fd5005fb7e222' 'bbb8b0e7b9c67372eb22e1d6b6b5758fe504ded84c40a076d4a064374a1bf34ac12d5b514b328ac9ca984d976b9e0fbde81e68a66bec915c997d6be0c0917584') -sha512sums+=('4fa203586c5ba376e66b79fe73e3f7f729458ea9c8a1dd6151de4c6cddbaea41732fbc91717e19a1e113a5298c7650530a41098bba1fc2cd32f0f4613284caf2' - 'SKIP') sha512sums_armv7h=('c25883c4860e511a99d9fbfba5b824145c0862729101721605725f609ca2a41848b741dd100eff390f57031dc5f14af3ea30133de30f75cb20197c420ae20972') +sha512sums+=('78fee952c9bc826a0a7ec262d442150177bf887349641279dafae803b9832a0dd9b8d0722cc084459077a5310eb4f6de6a8d7ffaff6741afe1359f292a373f34' + 'SKIP') validpgpkeys=(14F26682D0916CDD81E37B6D61B7B526D98F0353) # Mozilla Software Releases validpgpkeys+=(BFA8008A8265677063B11BF47171986E4B745536 # Andreas Grapentin 3954A7AB837D0EA9CFA9798925DB7D9B5A8D4B40) # bill-auger From 5b7555f7e7c78812436a01e883283a7f8a19b5a1 Mon Sep 17 00:00:00 2001 From: Andreas Grapentin Date: Nov 05 2021 20:25:45 +0000 Subject: [PATCH 33/73] nonprism/icedove: updated to 78.9.1 --- diff --git a/nonprism/icedove/PKGBUILD b/nonprism/icedove/PKGBUILD index 589618f..03bdcef 100644 --- a/nonprism/icedove/PKGBUILD +++ b/nonprism/icedove/PKGBUILD @@ -11,109 +11,98 @@ # Contributor: Isaac David # Contributor: bill-auger + # parabola changes and rationale: # - rebranded to icedove -# - added makedepends: quilt mozilla-searchplugins python2-blessings -# - added replaces, conflicts: thunderbird +# - added makedepends for branding: quilt mozilla-searchplugins imagemagick # - disabled tests, they break in an environment without network access. # - disabled geo-location # - removed nonfree search engines # - removed support for insecure chat protocols + _pkgname=thunderbird pkgname=icedove -replaces=("$_pkgname") epoch=1 -pkgver=68.9.0 +pkgver=78.9.1 pkgrel=1 pkgrel+=.parabola1.nonprism1 -_brandingver=68.6 +_brandingver=78.9 _brandingrel=1 pkgdesc='Standalone mail and news reader based on Mozilla Thunderbird' pkgdesc+=', without support for unsafe and dangerous for privacy protocols' -url="https://wiki.parabola.nu/$pkgname" +url=https://wiki.parabola.nu/${pkgname} arch=(x86_64) arch+=(i686 armv7h) license=(MPL GPL LGPL) -depends=(gtk3 libxt startup-notification mime-types dbus-glib alsa-lib - nss hunspell sqlite ttf-font) # libvpx -# TODO: depends+=(libicui18n.so libicuuc.so) -depends_armv7h=(icu=65) -depends_i686+=(libicui18n.so libicuuc.so) -depends_x86_64+=(libicui18n.so libicuuc.so) -makedepends=(unzip zip diffutils python python2 yasm nasm mesa imake libpulse inetutils xorg-server-xvfb - autoconf2.13 rust clang llvm gtk2 cbindgen nodejs) -makedepends+=(quilt mozilla-searchplugins imagemagick) -optdepends=('libcanberra: sound support') +depends=( + glibc gtk3 libgdk-3.so mime-types dbus libdbus-1.so dbus-glib alsa-lib nss + hunspell sqlite ttf-font libvpx libvpx.so zlib bzip2 botan libwebp libevent + libjpeg-turbo libffi nspr gcc-libs libx11 libxrender libxfixes libxext + libxcomposite libxdamage pango libpango-1.0.so cairo gdk-pixbuf2 icu + libicui18n.so libicuuc.so freetype2 libfreetype.so fontconfig + libfontconfig.so glib2 libglib-2.0.so pixman libpixman-1.so gnupg +) +optdepends=( + 'libotr: OTR support for active one-to-one chats' +) +makedepends=( + unzip zip diffutils python python-setuptools yasm nasm mesa imake libpulse + inetutils xorg-server-xvfb autoconf2.13 rust clang llvm gtk2 cbindgen nodejs + gawk perl findutils libotr +) +#makedepends[15]='llvm10' # FIXME: DEBUG: | rustup: error while loading shared libraries: libLLVM-10.so: cannot open shared object file: No such file or directory +# # ERROR: Command `rustup which rustc` failed with exit status 127. +makedepends+=(quilt imagemagick) +replaces=(${_pkgname}) options=(!emptydirs !makeflags) source=(https://ftp.mozilla.org/pub/mozilla.org/thunderbird/releases/$pkgver/source/thunderbird-$pkgver.source.tar.xz{,.asc} - $pkgname.desktop) -source+=(https://repo.parabola.nu/other/icedove/${pkgname}_$_brandingver-$_brandingrel.branding.tar.xz{,.sig} - libre-searchengines.patch - mozilla-1338795-regression.patch) + $pkgname.desktop + vendor-prefs.js + distribution.ini + mozconfig.cfg + configure-fix-passing-system-bzip2-ldflags.patch + thunderbird-78.5-rust-1.48.patch) +source+=(https://repo.parabola.nu/other/icedove/${pkgname}_$_brandingver-$_brandingrel.branding.tar.xz{,.sig}) source_armv7h=(arm-wasm-vfp.patch) -sha512sums=('891472c95ba6ff46061131504e89010da512a84b0e1dea0482e603fd4c87f11e099280a245c7dd9fc9320c48229c26602565c089d86f1a1f4271b29b6fc606f0' +sha512sums=('fa27a327ce10a0c16877ac02338aace257f60f69af40d12ae5bb2055f6536db9ba45995765ac0eaa1aea2fa2b353ac9dc6eb06fcdf6cb4ae6fafcd65fe5970c6' 'SKIP' 'a3c9815491d9bed0440c60f35867a5b8a2a1343521f288035fcc46e651a11b926c75a9eca2d262b43d510a7a7119709b53637f1b00ddbbee8e5b0a4b33d7b8fd' - '5784493253f9b2b231a7f18d7c3c4a4bb9aec7ac4fa801772ac223342676e388ae0c094b95d89d92c1bd38c2f19feb6f51e074d0ea20228a256b6240ecf34832' - 'SKIP' - '3f3160441aa17a50b8bf9f95a0fed8e3428864901d7368409903289f069f51fa94e24b6140bf17981b91b55df77c7c29adb870dda9f1596a77ce1a54a62cac00' - 'f4e892fc7af85877ef6cedd82313f6c0f335cb676cfb30badaa127c51aed00773212b99f1598f5709d6f481f12264463d6334bcde8e8da38ec1ea666622d28a1') + 'e21d30a8b79724eda3488ac2bf9dfeb0c7f6bf39e59c37f17574b529d33043765eb54408a55fcbf6f3afa7a58ca99124992d443cdff23ac5c9bdbff33c75f60f' + '31d46f91d9612d30d8553a19d0d309d743467e58b568a4aeea3caf6bd805ba00656561c84a1511c59bce1cf24ba323bfad2cd26a19985f1bf7dfb6d282642972' + '1eba1593ff0a9642d89e6d3e03388b1aef00437b2f6c1f0d81d250d9845b80e057c246eaeb31d8d22001abd65556a9603d1db597baf864481a5bfb7000886b29' + 'e3ed2708b8354015cb3d2c81048d1ce4932d1effbe2b40efa7cf9b45c1b923b9fd708645e2f8aa0136a485a3f7ce6b396b85721aaf535a4a764fd5005fb7e222' + 'bbb8b0e7b9c67372eb22e1d6b6b5758fe504ded84c40a076d4a064374a1bf34ac12d5b514b328ac9ca984d976b9e0fbde81e68a66bec915c997d6be0c0917584') sha512sums_armv7h=('c25883c4860e511a99d9fbfba5b824145c0862729101721605725f609ca2a41848b741dd100eff390f57031dc5f14af3ea30133de30f75cb20197c420ae20972') +sha512sums+=('78fee952c9bc826a0a7ec262d442150177bf887349641279dafae803b9832a0dd9b8d0722cc084459077a5310eb4f6de6a8d7ffaff6741afe1359f292a373f34' + 'SKIP') validpgpkeys=(14F26682D0916CDD81E37B6D61B7B526D98F0353) # Mozilla Software Releases -validpgpkeys+=(BFA8008A8265677063B11BF47171986E4B745536) # Andreas Grapentin +validpgpkeys+=(BFA8008A8265677063B11BF47171986E4B745536 # Andreas Grapentin + 3954A7AB837D0EA9CFA9798925DB7D9B5A8D4B40) # bill-auger + prepare() { cd $_pkgname-$pkgver - # see: https://labs.parabola.nu/issues/2267 - # upstream BR: https://bugzilla.mozilla.org/show_bug.cgi?id=1628296 - patch -Np1 -i "$srcdir"/mozilla-1338795-regression.patch - - cat >.mozconfig < error: unknown argument: '-fvar-tracking-assignments' CFLAGS="${CFLAGS/-fvar-tracking-assignments/}" @@ -229,52 +227,14 @@ build() { } package() { + optdepends=('libcanberra: sound support') + cd $_pkgname-$pkgver DESTDIR="$pkgdir" ./mach install - _vendorjs="$pkgdir/usr/lib/$pkgname/defaults/preferences/vendor.js" - install -Dm644 /dev/stdin "$_vendorjs" < What's new" menu entry to mozilla.debian.net -//pref("mailnews.start_page.override_url", "http://wiki.debian.org/Icedove/WhatsNew45"); -END - - _distini="$pkgdir/usr/lib/$pkgname/distribution/distribution.ini" - install -Dm644 /dev/stdin "$_distini" < +Date: Sun, 8 Nov 2020 13:26:47 +0100 +Subject: [PATCH] configure: fix passing system bzip2 ldflags + +--- + comm/third_party/openpgp.configure | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/comm/third_party/openpgp.configure b/comm/third_party/openpgp.configure +index 2f9c796..2cbc907 100644 +--- a/comm/third_party/openpgp.configure ++++ b/comm/third_party/openpgp.configure +@@ -80,7 +80,7 @@ with only_when('--enable-compile-environment'): + if bzip2_pkg: + cflags = list(bzip2_pkg.cflags) + libs = bzip2_pkg.libs +- return namespace(cflags=cflags, libs=libs, path=(value[0]), ) ++ return namespace(cflags=cflags, ldflags=libs, ) + # Fallback + return namespace( + ldflags=['-lbz2'], +-- +2.28.0 + diff --git a/nonprism/icedove/distribution.ini b/nonprism/icedove/distribution.ini new file mode 100644 index 0000000..46b3acd --- /dev/null +++ b/nonprism/icedove/distribution.ini @@ -0,0 +1,9 @@ +[Global] +id=parabola +version=1.0 +about=Icedove for Parabola GNU/Linux-libre + +[Preferences] +app.distributor=parabola +app.distributor.channel=$pkgname +app.partner.parabola=parabola diff --git a/nonprism/icedove/libre-searchengines.patch b/nonprism/icedove/libre-searchengines.patch deleted file mode 100644 index 52c3a51..0000000 --- a/nonprism/icedove/libre-searchengines.patch +++ /dev/null @@ -1,1006 +0,0 @@ -diff -rupN thunderbird-60.5.1.orig/comm/mail/locales/en-US/chrome/messenger-region/region.properties thunderbird-60.5.1/comm/mail/locales/en-US/chrome/messenger-region/region.properties ---- thunderbird-60.5.1.orig/comm/mail/locales/en-US/chrome/messenger-region/region.properties 2019-03-07 10:38:57.276013048 +0100 -+++ thunderbird-60.5.1/comm/mail/locales/en-US/chrome/messenger-region/region.properties 2019-03-07 11:29:23.255564314 +0100 -@@ -3,9 +3,9 @@ - # file, You can obtain one at http://mozilla.org/MPL/2.0/. - - # Search engine order (order displayed in the search bar dropdown)s --browser.search.order.1=Bing --browser.search.order.2=Yahoo --browser.search.order.3= -+browser.search.order.1=searx -+browser.search.order.2=DuckDuckGo HTML -+browser.search.order.3=DuckDuckGo Lite - - # To make mapit buttons to disappear in the addressbook, specify empty string. For example: - # mail.addr_book.mapit_url.format= -@@ -20,14 +20,12 @@ browser.search.order.3= - # @ZI == zip code - # @CO == country - # Default map service: --mail.addr_book.mapit_url.format=https://maps.google.com/maps?q=@A1%20@A2%20@CI%20@ST%20@ZI%20@CO -+mail.addr_book.mapit_url.format=https://nominatim.openstreetmap.org/search.php?polygon=1&q=@A1%2C@A2%2C@CI%2C@ST%2C@ZI%2C@CO - # List of available map services (up to 5 can be defined here): --mail.addr_book.mapit_url.1.name=Google Maps --mail.addr_book.mapit_url.1.format=https://maps.google.com/maps?q=@A1%20@A2%20@CI%20@ST%20@ZI%20@CO --mail.addr_book.mapit_url.2.name=OpenStreetMap --mail.addr_book.mapit_url.2.format=https://nominatim.openstreetmap.org/search.php?polygon=1&q=@A1%2C@A2%2C@CI%2C@ST%2C@ZI%2C@CO -+mail.addr_book.mapit_url.1.name=OpenStreetMap -+mail.addr_book.mapit_url.1.format=https://nominatim.openstreetmap.org/search.php?polygon=1&q=@A1%2C@A2%2C@CI%2C@ST%2C@ZI%2C@CO - --mailnews.messageid_browser.url=https://groups.google.com/search?as_umsgid=%mid -+mailnews.messageid_browser.url= - - # Recognize non-standard versions of "Re:" in subjects from localized versions of MS Outlook et al. - # Specify a comma-separated list without spaces. For example: mailnews.localizedRe=AW,SV -diff -rupN thunderbird-60.5.1.orig/comm/mail/components/search/extensions/list.json thunderbird-60.5.1/comm/mail/locales/search/list.json ---- thunderbird-60.5.1.orig/comm/mail/components/search/extensions/list.json 2019-03-07 10:38:57.272679671 +0100 -+++ thunderbird-60.5.1/comm/mail/components/search/extensions/list.json 2019-03-07 11:26:46.920196972 +0100 -@@ -1,858 +1,757 @@ - { - "default": { -- "searchDefault": "Google", -- "searchOrder": ["Google", "Bing"], -+ "searchDefault": "searx", - "visibleDefaultEngines": [ -- "google", "amazondotcom", "bing", "ddg", "twitter", "wikipedia" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - }, -- "regionOverrides": { -- "CA": { -- "amazondotcom": "amazon-ca", -- "amazon-france": "amazon-ca" -- }, -- "AU": { -- "amazondotcom": "amazon-au", -- "amazon-en-GB": "amazon-au" -- }, -- "FR": { -- "amazondotcom": "amazon-france" -- }, -- "GB": { -- "amazondotcom": "amazon-en-GB" -- } -- }, - "locales": { - "en-US": { - "default": { - "visibleDefaultEngines": [ -- "google", "amazondotcom", "bing", "ddg", "twitter", "wikipedia" -- ] -- }, -- "experimental-hidden": { -- "visibleDefaultEngines": [ -- "amazon-ca", "amazon-au", "yandex-en", "google" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "ach": { - "default": { - "visibleDefaultEngines": [ -- "google", "bing", "amazondotcom", "ddg", "twitter", "wikipedia" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "af": { - "default": { - "visibleDefaultEngines": [ -- "google", "bing", "amazondotcom", "ddg", "wikipedia-af" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "an": { - "default": { - "visibleDefaultEngines": [ -- "google", "bing", "wikipedia-an", "ddg", "twitter" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "ar": { - "default": { - "visibleDefaultEngines": [ -- "google", "bing", "amazondotcom", "ddg", "wikipedia-ar" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "as": { - "default": { - "visibleDefaultEngines": [ -- "google", "amazon-in", "ddg", "wikipedia-as" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "ast": { - "default": { - "visibleDefaultEngines": [ -- "google", "bing", "ddg", "wikipedia-ast" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "az": { - "default": { - "visibleDefaultEngines": [ -- "google", "amazondotcom", "azerdict", "bing", "ddg", "wikipedia-az", "yandex-az" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "be": { - "default": { - "visibleDefaultEngines": [ -- "yandex-by", "google", "ddg", "wikipedia-be", "wikipedia-be-tarask" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] -- }, -- "BY": { -- "searchDefault": "Яндекс" -- }, -- "KZ": { -- "searchDefault": "Яндекс" -- }, -- "RU": { -- "searchDefault": "Яндекс" -- }, -- "TR": { -- "searchDefault": "Яндекс" - } - }, - "bg": { - "default": { - "visibleDefaultEngines": [ -- "google", "amazondotcom", "ddg", "pazaruvaj", "wikipedia-bg" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "bn": { - "default": { - "visibleDefaultEngines": [ -- "google", "amazon-in", "bing", "ddg", "wikipedia-bn" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "bn-BD": { - "default": { - "visibleDefaultEngines": [ -- "google", "bing", "ddg", "wikipedia-bn" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "bn-IN": { - "default": { - "visibleDefaultEngines": [ -- "google", "amazon-in", "bing", "ddg", "wikipedia-bn" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "br": { - "default": { - "visibleDefaultEngines": [ -- "google", "amazon-france", "ddg", "freelang", "wikipedia-br" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "bs": { - "default": { - "visibleDefaultEngines": [ -- "google", "ddg", "olx", "twitter", "wikipedia-bs" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "ca": { - "default": { - "visibleDefaultEngines": [ -- "google", "bing", "diec2", "ddg", "twitter", "wikipedia-ca" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "cak": { - "default": { - "visibleDefaultEngines": [ -- "google", "bing", "amazondotcom", "ddg", "wikipedia-es" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "crh": { - "default": { - "visibleDefaultEngines": [ -- "google", "ddg", "twitter", "wikipedia-crh" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "cs": { - "default": { -- "searchOrder": ["Google", "Seznam"], - "visibleDefaultEngines": [ -- "google", "seznam-cz", "ddg", "heureka-cz", "mapy-cz", "wikipedia-cz" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "cy": { - "default": { - "visibleDefaultEngines": [ -- "google", "amazon-en-GB", "ddg", "palasprint", "wikipedia-cy" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "da": { - "default": { - "visibleDefaultEngines": [ -- "google", "bing", "amazon-en-GB", "ddg", "wikipedia-da" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "de": { - "default": { - "visibleDefaultEngines": [ -- "google", "amazon-de", "bing", "ddg", "ecosia", "leo_ende_de", "wikipedia-de" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "dsb": { - "default": { - "visibleDefaultEngines": [ -- "google", "bing", "amazon-de", "ddg", "leo_ende_de", "wikipedia-dsb" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "el": { - "default": { - "visibleDefaultEngines": [ -- "google", "amazon-en-GB", "bing", "ddg", "wikipedia-el" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "en-CA": { - "default": { - "visibleDefaultEngines": [ -- "google", "amazon-ca", "bing", "ddg", "twitter", "wikipedia" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "en-GB": { - "default": { - "visibleDefaultEngines": [ -- "google", "bing", "amazon-en-GB", "chambers-en-GB", "ddg", "twitter", "wikipedia" -- ] -- }, -- "experimental-hidden": { -- "visibleDefaultEngines": [ -- "yandex-en" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "en-ZA": { - "default": { - "visibleDefaultEngines": [ -- "google", "bing", "amazondotcom", "ddg", "twitter", "wikipedia" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "eo": { - "default": { - "visibleDefaultEngines": [ -- "google", "bing", "amazondotcom", "ddg", "wikipedia-eo" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "es-AR": { - "default": { - "visibleDefaultEngines": [ -- "google", "amazondotcom", "drae", "ddg", "mercadolibre-ar", "wikipedia-es" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "es-CL": { - "default": { - "visibleDefaultEngines": [ -- "google", "bing", "drae", "ddg", "mercadolibre-cl", "wikipedia-es" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "es-ES": { - "default": { - "visibleDefaultEngines": [ -- "google", "bing", "drae", "ddg", "twitter", "wikipedia-es" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "es-MX": { - "default": { - "visibleDefaultEngines": [ -- "google", "bing", "ddg", "mercadolibre-mx", "wikipedia-es" -- ] -- }, -- "experimental-hidden": { -- "visibleDefaultEngines": [ -- "amazon-mx" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "et": { - "default": { - "visibleDefaultEngines": [ -- "google", "neti-ee", "ddg", "osta-ee", "wikipedia-et", "eki-ee" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "eu": { - "default": { - "visibleDefaultEngines": [ -- "google", "bing", "amazon-en-GB", "ddg", "wikipedia-eu" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "fa": { - "default": { - "visibleDefaultEngines": [ -- "google", "amazondotcom", "bing", "ddg", "wikipedia-fa" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "ff": { - "default": { - "visibleDefaultEngines": [ -- "google", "bing", "amazon-france", "ddg", "wikipedia-fr" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "fi": { - "default": { - "visibleDefaultEngines": [ -- "google", "bing", "ddg", "wikipedia-fi" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "fr": { - "default": { - "visibleDefaultEngines": [ -- "google", "bing", "amazon-france", "ddg", "qwant", "wikipedia-fr" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "fy-NL": { - "default": { - "visibleDefaultEngines": [ -- "google", "bing", "bolcom-fy-NL", "ddg", "marktplaats-fy-NL", "wikipedia-fy-NL" -- ] -- }, -- "experimental-hidden": { -- "visibleDefaultEngines": [ -- "amazon-nl" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "ga-IE": { - "default": { - "visibleDefaultEngines": [ -- "google", "amazon-en-GB", "ddg", "tearma", "twitter", "wikipedia-ga-IE" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "gd": { - "default": { - "visibleDefaultEngines": [ -- "google", "amazon-en-GB", "bbc-alba", "ddg", "faclair-beag", "wikipedia-gd" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "gl": { - "default": { - "visibleDefaultEngines": [ -- "google", "amazon-en-GB", "ddg", "wikipedia-gl" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "gn": { - "default": { - "visibleDefaultEngines": [ -- "google", "bing", "amazondotcom", "ddg", "twitter", "wikipedia-gn" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "gu-IN": { - "default": { - "visibleDefaultEngines": [ -- "google", "bing", "amazon-in", "ddg", "wikipedia-gu" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "he": { - "default": { - "visibleDefaultEngines": [ -- "google", "ddg", "wikipedia-he", "morfix-dic" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "hi-IN": { - "default": { - "visibleDefaultEngines": [ -- "google", "bing", "ddg", "wikipedia-hi" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "hr": { - "default": { - "visibleDefaultEngines": [ -- "google", "amazon-en-GB", "bing", "ddg", "eudict", "twitter", "wikipedia-hr" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "hsb": { - "default": { - "visibleDefaultEngines": [ -- "google", "bing", "amazon-de", "ddg", "leo_ende_de", "wikipedia-hsb" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "hu": { - "default": { - "visibleDefaultEngines": [ -- "google", "ddg", "vatera", "wikipedia-hu" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "hy-AM": { - "default": { - "visibleDefaultEngines": [ -- "google", "amazondotcom", "ddg", "list-am", "wikipedia-hy" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "ia": { - "default": { - "visibleDefaultEngines": [ -- "google", "bing", "amazondotcom", "ddg", "twitter", "wikipedia-ia" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "id": { - "default": { - "visibleDefaultEngines": [ -- "google", "ddg", "wikipedia-id" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "is": { - "default": { - "visibleDefaultEngines": [ -- "google", "bing", "amazondotcom", "ddg", "wikipedia-is" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "it": { - "default": { - "visibleDefaultEngines": [ -- "google", "bing", "amazon-it", "ddg", "wikipedia-it" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "ja-JP-macos": { - "default": { -- "searchOrder": ["Google", "Yahoo! JAPAN", "Bing", "Amazon.co.jp", "楽天市場", "ヤフオク!", "教えて!goo", "Twitter", "Wikipedia (ja)"], - "visibleDefaultEngines": [ -- "google", "yahoo-jp", "bing", "amazon-jp", "rakuten", "yahoo-jp-auctions", "oshiete-goo", "twitter-ja", "wikipedia-ja", "ddg" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "ja": { - "default": { -- "searchOrder": ["Google", "Yahoo! JAPAN", "Bing", "Amazon.co.jp", "楽天市場", "ヤフオク!", "教えて!goo", "Twitter", "Wikipedia (ja)"], - "visibleDefaultEngines": [ -- "google", "yahoo-jp", "bing", "amazon-jp", "rakuten", "yahoo-jp-auctions", "oshiete-goo", "twitter-ja", "wikipedia-ja", "ddg" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "ka": { - "default": { - "visibleDefaultEngines": [ -- "google", "bing", "amazondotcom", "ddg", "twitter", "wikipedia-ka" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "kab": { - "default": { - "visibleDefaultEngines": [ -- "google", "bing", "ddg", "wikipedia-kab" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "kk": { - "default": { - "visibleDefaultEngines": [ -- "yandex-kk", "google", "ddg", "flip", "twitter", "wikipedia-kk" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] -- }, -- "KZ": { -- "searchDefault": "Яндекс" -- }, -- "BY": { -- "searchDefault": "Яндекс" -- }, -- "RU": { -- "searchDefault": "Яндекс" -- }, -- "TR": { -- "searchDefault": "Яндекс" - } - }, - "km": { - "default": { - "visibleDefaultEngines": [ -- "google", "bing", "amazondotcom", "ddg", "twitter", "wikipedia-km" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "kn": { - "default": { - "visibleDefaultEngines": [ -- "google", "bing", "amazon-in", "ddg", "kannadastore", "wikipedia-kn" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "ko": { - "default": { - "visibleDefaultEngines": [ -- "google", "ddg", "naver-kr", "daum-kr", "wikipedia-kr" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "lij": { - "default": { - "visibleDefaultEngines": [ -- "google", "bing", "amazon-it", "ddg", "wikipedia-lij" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "lo": { - "default": { - "visibleDefaultEngines": [ -- "google", "bing", "ddg", "wikipedia-lo", "twitter" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "lt": { - "default": { - "visibleDefaultEngines": [ -- "google", "wikipedia-lt", "bing", "amazondotcom", "ddg", "twitter" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "ltg": { - "default": { - "visibleDefaultEngines": [ -- "google", "ddg", "salidzinilv", "sslv", "wikipedia-ltg" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "lv": { - "default": { - "visibleDefaultEngines": [ -- "google", "ddg", "salidzinilv", "sslv", "wikipedia-lv" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "mai": { - "default": { - "visibleDefaultEngines": [ -- "google", "bing", "amazon-in", "ddg", "twitter", "wikipedia-hi" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "mk": { - "default": { - "visibleDefaultEngines": [ -- "google", "bing", "amazondotcom", "ddg", "wikipedia-mk" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "ml": { - "default": { - "visibleDefaultEngines": [ -- "google", "bing", "amazon-in", "ddg", "wikipedia", "wikipedia-ml" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "mr": { - "default": { - "visibleDefaultEngines": [ -- "google", "amazon-in", "ddg", "wikipedia-mr" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "ms": { - "default": { - "visibleDefaultEngines": [ -- "google", "bing", "amazondotcom", "ddg", "twitter", "wikipedia-ms" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "my": { - "default": { - "visibleDefaultEngines": [ -- "google", "bing", "amazondotcom", "ddg", "twitter", "wikipedia-my" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "nb-NO": { - "default": { - "visibleDefaultEngines": [ -- "google", "amazon-en-GB", "bing", "ddg", "gulesider-NO", "bok-NO", "qxl-NO", "wikipedia-NO" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "ne-NP": { - "default": { - "visibleDefaultEngines": [ -- "google", "bing", "ddg", "twitter", "wikipedia-ne" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "nl": { - "default": { - "visibleDefaultEngines": [ -- "google", "bing", "bolcom-nl", "ddg", "marktplaats-nl", "wikipedia-nl" -- ] -- }, -- "experimental-hidden": { -- "visibleDefaultEngines": [ -- "amazon-nl" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "nn-NO": { - "default": { - "visibleDefaultEngines": [ -- "google", "bing", "amazon-en-GB", "ddg", "gulesider-NO", "bok-NO", "qxl-NO", "wikipedia-NN" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "oc": { - "default": { - "visibleDefaultEngines": [ -- "google", "bing", "ddg", "twitter", "wikipedia-oc", "wiktionary-oc" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "or": { - "default": { - "visibleDefaultEngines": [ -- "google", "bing", "amazon-in", "ddg", "wikipedia-or" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "pa-IN": { - "default": { - "visibleDefaultEngines": [ -- "google", "bing", "amazon-in", "ddg", "wikipedia-pa" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "pl": { - "default": { - "visibleDefaultEngines": [ -- "google", "allegro-pl", "ddg", "pwn-pl", "wikipedia-pl", "wolnelektury-pl" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "pt-BR": { - "default": { - "visibleDefaultEngines": [ -- "google", "bing", "ddg", "mercadolivre", "twitter", "wikipedia-pt" -- ] -- }, -- "experimental-hidden": { -- "visibleDefaultEngines": [ -- "amazon-br" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "pt-PT": { - "default": { - "visibleDefaultEngines": [ -- "google", "amazon-en-GB", "ddg", "priberam", "wikipedia-pt" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "rm": { - "default": { - "visibleDefaultEngines": [ -- "google", "bing", "ddg", "leo_ende_de", "wikipedia-rm" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "ro": { - "default": { - "visibleDefaultEngines": [ -- "google", "bing", "amazondotcom", "ddg", "wikipedia-ro" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "ru": { - "default": { - "visibleDefaultEngines": [ -- "yandex-ru", "google", "ddg", "ozonru", "priceru", "wikipedia-ru", "mailru" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] -- }, -- "RU": { -- "searchDefault": "Яндекс" -- }, -- "BY": { -- "searchDefault": "Яндекс" -- }, -- "KZ": { -- "searchDefault": "Яндекс" -- }, -- "TR": { -- "searchDefault": "Яндекс" - } - }, - "si": { - "default": { - "visibleDefaultEngines": [ -- "google", "amazondotcom", "ddg", "wikipedia-si" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "sk": { - "default": { - "visibleDefaultEngines": [ -- "google", "azet-sk", "atlas-sk", "ddg", "wikipedia-sk", "zoznam-sk" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "sl": { - "default": { - "visibleDefaultEngines": [ -- "google", "ceneji", "ddg", "najdi-si", "odpiralni", "twitter", "wikipedia-sl" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "son": { - "default": { - "visibleDefaultEngines": [ -- "google", "bing", "amazon-france", "ddg", "wikipedia-fr" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "sq": { - "default": { - "visibleDefaultEngines": [ -- "google", "bing", "amazon-en-GB", "ddg", "wikipedia-sq" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "sr": { - "default": { - "visibleDefaultEngines": [ -- "google", "amazon-en-GB", "bing", "ddg", "wikipedia-sr", "pogodak" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "sv-SE": { - "default": { - "visibleDefaultEngines": [ -- "google", "bing", "allaannonser-sv-SE", "ddg", "prisjakt-sv-SE", "tyda-sv-SE", "wikipedia-sv-SE" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "ta": { - "default": { - "visibleDefaultEngines": [ -- "google", "amazon-in", "ddg", "wikipedia-ta" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "te": { - "default": { - "visibleDefaultEngines": [ -- "google", "amazon-in", "ddg", "wikipedia-te", "wiktionary-te" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "th": { - "default": { - "visibleDefaultEngines": [ -- "google", "amazondotcom", "bing", "ddg", "longdo", "wikipedia-th" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "tl": { - "default": { - "visibleDefaultEngines": [ -- "google", "bing", "amazondotcom", "ddg", "twitter", "wikipedia-tl" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "tr": { - "default": { - "visibleDefaultEngines": [ -- "yandex-tr", "google", "ddg", "twitter", "wikipedia-tr" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] -- }, -- "TR": { -- "searchDefault": "Yandex" -- }, -- "BY": { -- "searchDefault": "Yandex" -- }, -- "KZ": { -- "searchDefault": "Yandex" -- }, -- "RU": { -- "searchDefault": "Yandex" - } - }, - "trs": { - "default": { - "visibleDefaultEngines": [ -- "google", "bing", "amazondotcom", "ddg", "wikipedia-es" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "uk": { - "default": { - "visibleDefaultEngines": [ -- "google", "bing", "ddg", "wikipedia-uk", "hotline-ua" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "ur": { - "default": { - "visibleDefaultEngines": [ -- "google", "bing", "amazon-in", "ddg", "twitter", "wikipedia-ur" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "uz": { - "default": { - "visibleDefaultEngines": [ -- "google", "bing", "amazondotcom", "ddg", "twitter", "wikipedia-uz" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "vi": { - "default": { - "visibleDefaultEngines": [ -- "google", "coccoc", "ddg", "wikipedia-vi" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "wo": { - "default": { - "visibleDefaultEngines": [ -- "google", "bing", "amazon-france", "ddg", "twitter", "wikipedia-wo" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "xh": { - "default": { - "visibleDefaultEngines": [ -- "google", "bing", "ddg", "wikipedia" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - }, - "zh-CN": { - "default": { - "visibleDefaultEngines": [ -- "baidu", "google", "bing", "ddg", "wikipedia-zh-CN", "amazondotcn" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] -- }, -- "CN": { -- "searchDefault": "百度" - } - }, - "zh-TW": { - "default": { - "visibleDefaultEngines": [ -- "google", "ddg", "readmoo", "wikipedia-zh-TW" -+ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" - ] - } - } diff --git a/nonprism/icedove/mozconfig.cfg b/nonprism/icedove/mozconfig.cfg new file mode 100644 index 0000000..02dff57 --- /dev/null +++ b/nonprism/icedove/mozconfig.cfg @@ -0,0 +1,47 @@ +ac_add_options --enable-application=comm/mail +ac_add_options --enable-calendar + +ac_add_options --prefix=/usr +ac_add_options --enable-release +ac_add_options --enable-linker=gold +ac_add_options --enable-hardening +ac_add_options --enable-optimize +ac_add_options --enable-rust-simd +# https://bugzilla.mozilla.org/show_bug.cgi?id=1423822 +ac_add_options --disable-elf-hack + +# Branding +ac_add_options --disable-official-branding +ac_add_options --enable-update-channel=release +ac_add_options --with-distribution-id=nu.parabola +ac_add_options --with-branding=comm/mail/branding/icedove + +# System libraries +ac_add_options --with-system-zlib +ac_add_options --with-system-bz2 +ac_add_options --with-system-icu +ac_add_options --with-system-jpeg +# does not have APNG support +# ac_add_options --with-system-png +ac_add_options --with-system-libvpx +ac_add_options --with-system-nspr +ac_add_options --with-system-nss +ac_add_options --with-system-botan +ac_add_options --with-system-webp +ac_add_options --with-system-libevent +ac_add_options --with-system-ffi +ac_add_options --with-system-pixman + +# Features +ac_add_options --enable-alsa +ac_add_options --enable-openpgp +ac_add_options --enable-calendar +ac_add_options --disable-jack +ac_add_options --disable-crashreporter +ac_add_options --disable-updater +# tests require network access. +ac_add_options --disable-tests + +# System addons +ac_add_options --with-unsigned-addon-scopes=app,system +ac_add_options --allow-addon-sideload diff --git a/nonprism/icedove/mozilla-1338795-regression.patch b/nonprism/icedove/mozilla-1338795-regression.patch deleted file mode 100644 index 2c8cf21..0000000 --- a/nonprism/icedove/mozilla-1338795-regression.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- a/comm/mailnews/base/prefs/content/accountUtils.js 2020-04-04 22:28:38.105521722 +0200 -+++ b/comm/mailnews/base/prefs/content/accountUtils.js 2020-04-04 22:28:50.809027238 +0200 -@@ -488,7 +488,7 @@ function msgNewMailAccount(msgWindow, ok - let existingWindow = Services.wm.getMostRecentWindow("mail:autoconfig"); - if (existingWindow) { - existingWindow.focus(); -- } else if (AppConstants.MOZ_APP_NAME == "thunderbird") { -+ } else { - // disabling modal for the time being, see 688273 REMOVEME - window.openDialog( - "chrome://messenger/content/accountcreation/emailWizard.xul", diff --git a/nonprism/icedove/thunderbird-78.5-rust-1.48.patch b/nonprism/icedove/thunderbird-78.5-rust-1.48.patch new file mode 100644 index 0000000..badbff4 --- /dev/null +++ b/nonprism/icedove/thunderbird-78.5-rust-1.48.patch @@ -0,0 +1,3941 @@ + +# HG changeset patch +# User Henri Sivonen +# Date 1604046593 0 +# Node ID 632353012d05c8e71314d27edca945ce9c13f4ea +# Parent 2876425c75f75f638b41e8c6093e84b817938a9a +Bug 1667736 - Update packed_simd to compile on Rust 1.48. r=glandium + +Differential Revision: https://phabricator.services.mozilla.com/D91572 + +diff --git a/.cargo/config.in b/.cargo/config.in +--- a/.cargo/config.in ++++ b/.cargo/config.in +@@ -45,7 +45,7 @@ rev = "21c26326f5f45f415c49eac4ba5bc41a2 + [source."https://github.com/hsivonen/packed_simd"] + git = "https://github.com/hsivonen/packed_simd" + replace-with = "vendored-sources" +-rev = "3541e3818fdc7c2a24f87e3459151a4ce955a67a" ++rev = "0917fe780032a6bbb23d71be545f9c1834128d75" + + [source."https://github.com/djg/cubeb-pulse-rs"] + git = "https://github.com/djg/cubeb-pulse-rs" +diff --git a/Cargo.lock b/Cargo.lock +--- a/Cargo.lock ++++ b/Cargo.lock +@@ -3573,18 +3573,18 @@ version = "0.4.0" + source = "registry+https://github.com/rust-lang/crates.io-index" + checksum = "49a4b8ea2179e6a2e27411d3bca09ca6dd630821cf6894c6c7c8467a8ee7ef13" + dependencies = [ + "stable_deref_trait", + ] + + [[package]] + name = "packed_simd" +-version = "0.3.3" +-source = "git+https://github.com/hsivonen/packed_simd?rev=3541e3818fdc7c2a24f87e3459151a4ce955a67a#3541e3818fdc7c2a24f87e3459151a4ce955a67a" ++version = "0.3.4" ++source = "git+https://github.com/hsivonen/packed_simd?rev=0917fe780032a6bbb23d71be545f9c1834128d75#0917fe780032a6bbb23d71be545f9c1834128d75" + dependencies = [ + "cfg-if", + ] + + [[package]] + name = "parity-wasm" + version = "0.41.0" + source = "registry+https://github.com/rust-lang/crates.io-index" +diff --git a/Cargo.toml b/Cargo.toml +--- a/Cargo.toml ++++ b/Cargo.toml +@@ -66,7 +66,7 @@ panic = "abort" + + [patch.crates-io] + libudev-sys = { path = "dom/webauthn/libudev-sys" } +-packed_simd = { git = "https://github.com/hsivonen/packed_simd", rev="3541e3818fdc7c2a24f87e3459151a4ce955a67a" } ++packed_simd = { git = "https://github.com/hsivonen/packed_simd", rev="0917fe780032a6bbb23d71be545f9c1834128d75" } + rlbox_lucet_sandbox = { git = "https://github.com/PLSysSec/rlbox_lucet_sandbox/", rev="d510da5999a744c563b0acd18056069d1698273f" } + nix = { git = "https://github.com/shravanrn/nix/", branch = "r0.13.1", rev="4af6c367603869a30fddb5ffb0aba2b9477ba92e" } + spirv_cross = { git = "https://github.com/kvark/spirv_cross", branch = "wgpu3", rev = "20191ad2f370afd6d247edcb9ff9da32d3bedb9c" } +diff --git a/third_party/rust/packed_simd/.cargo-checksum.json b/third_party/rust/packed_simd/.cargo-checksum.json +--- a/third_party/rust/packed_simd/.cargo-checksum.json ++++ b/third_party/rust/packed_simd/.cargo-checksum.json +@@ -1,1 +1,1 @@ +-{"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} +\ No newline at end of file ++{"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} +\ No newline at end of file +diff --git a/third_party/rust/packed_simd/.travis.yml b/third_party/rust/packed_simd/.travis.yml +--- a/third_party/rust/packed_simd/.travis.yml ++++ b/third_party/rust/packed_simd/.travis.yml +@@ -1,291 +1,222 @@ + language: rust +-sudo: false + rust: nightly ++os: linux ++dist: focal + + stages: + - tools +- - linux-tier1 +- - osx-tier1 +- - osx-tier2 +- - linux-tier2 +- - android ++ - build-test-verify # Passes full test suite, permit no regressions (unless it's rustup :/) ++ - 32bit-tier1 ++ - 64bit-tier2 ++ - 32bit-tier2 + +-matrix: +- fast_finish: true ++jobs: ++ fast_finish: true + include: + # Android: +- - env: TARGET=x86_64-linux-android NOVERIFY=1 ++ - env: TARGET=x86_64-linux-android + name: "x86_64-unknown-linux-android + SSE2" +- stage: android ++ stage: build-test-verify + - env: TARGET=arm-linux-androideabi + name: "arm-linux-androideabi" +- stage: android ++ stage: build-test-verify + - env: TARGET=arm-linux-androideabi RUSTFLAGS="-C target-feature=+v7,+neon" + name: "arm-linux-androideabi + NEON" +- stage: android +- - env: TARGET=aarch64-linux-android +- name: "aarch64-unknown-linux-android" +- stage: android +- - env: TARGET=aarch64-linux-android RUSTFLAGS="-C target-feature=+neon" +- name: "aarch64-unknown-linux-android + NEON" +- stage: android ++ stage: build-test-verify ++ - name: "aarch64-unknown-linux-android + NEON" ++ env: TARGET=aarch64-linux-android RUSTFLAGS="-C target-feature=+neon" ++ stage: build-test-verify + - env: TARGET="thumbv7neon-linux-androideabi" + name: "thumbv7neon-linux-androideabi" +- stage: android ++ stage: 32bit-tier2 + # Linux: + - env: TARGET=i586-unknown-linux-gnu + name: "i586-unknown-linux-gnu" +- stage: linux-tier2 ++ stage: 32bit-tier2 + - env: TARGET=i586-unknown-linux-gnu RUSTFLAGS="-C target-feature=+sse" + name: "i586-unknown-linux-gnu + SSE" +- stage: linux-tier2 ++ stage: 32bit-tier2 + - env: TARGET=i586-unknown-linux-gnu RUSTFLAGS="-C target-feature=+sse2" + name: "i586-unknown-linux-gnu + SSE2" +- stage: linux-tier2 ++ stage: 32bit-tier2 + - env: TARGET=i686-unknown-linux-gnu + name: "i686-unknown-linux-gnu + SSE2" +- stage: linux-tier1 ++ stage: 32bit-tier1 + - env: TARGET=i686-unknown-linux-gnu RUSTFLAGS="-C target-feature=+sse4.2" + name: "i686-unknown-linux-gnu + SSE4.2" +- stage: linux-tier1 ++ stage: 32bit-tier1 + - env: TARGET=i686-unknown-linux-gnu RUSTFLAGS="-C target-feature=+avx2" + name: "i686-unknown-linux-gnu + AVX2" +- stage: linux-tier1 +- - env: TARGET=x86_64-unknown-linux-gnu +- name: "x86_64-unknown-linux-gnu + SSE2" +- install: rustup component add rustfmt-preview +- stage: linux-tier1 ++ stage: 32bit-tier1 + - env: TARGET=x86_64-unknown-linux-gnu RUSTFLAGS="-C target-feature=+sse4.2" + name: "x86_64-unknown-linux-gnu + SSE4.2" + install: rustup component add rustfmt-preview +- stage: linux-tier1 +- - env: TARGET=x86_64-unknown-linux-gnu RUSTFLAGS="-C target-feature=+avx" +- name: "x86_64-unknown-linux-gnu + AVX" +- install: rustup component add rustfmt-preview +- stage: linux-tier1 ++ stage: build-test-verify + - env: TARGET=x86_64-unknown-linux-gnu RUSTFLAGS="-C target-feature=+avx2" + name: "x86_64-unknown-linux-gnu + AVX2" + install: rustup component add rustfmt-preview +- stage: linux-tier1 +- - env: TARGET=x86_64-unknown-linux-gnu-emulated +- name: "Intel SDE + SSE2" +- install: true +- stage: linux-tier1 +- - env: TARGET=x86_64-unknown-linux-gnu-emulated RUSTFLAGS="-C target-feature=+sse4.2" +- name: "Intel SDE + SSE4.2" +- install: true +- stage: linux-tier1 +- - env: TARGET=x86_64-unknown-linux-gnu-emulated RUSTFLAGS="-C target-feature=+avx" +- name: "Intel SDE + AVX" +- install: true +- stage: linux-tier1 +- - env: TARGET=x86_64-unknown-linux-gnu-emulated RUSTFLAGS="-C target-feature=+avx2" +- name: "Intel SDE + AVX2" +- install: true +- stage: linux-tier1 +- - env: TARGET=x86_64-unknown-linux-gnu-emulated RUSTFLAGS="-C target-feature=+avx-512f" +- name: "Intel SDE + AVX-512" +- install: true +- stage: linux-tier1 +- - env: TARGET=arm-unknown-linux-gnueabi +- name: "arm-unknown-linux-gnueabi" +- stage: linux-tier2 ++ stage: build-test-verify + - env: TARGET=arm-unknown-linux-gnueabi RUSTFLAGS="-C target-feature=+v7,+neon" + name: "arm-unknown-linux-gnueabi + NEON" +- stage: linux-tier2 ++ stage: build-test-verify + - env: TARGET=arm-unknown-linux-gnueabihf + name: "arm-unknown-linux-gnueabihf" +- stage: linux-tier2 ++ stage: build-test-verify + - env: TARGET=arm-unknown-linux-gnueabihf RUSTFLAGS="-C target-feature=+v7,+neon" + name: "arm-unknown-linux-gnueabihf + NEON" +- stage: linux-tier2 ++ stage: build-test-verify + - env: TARGET=armv7-unknown-linux-gnueabihf + name: "armv7-unknown-linux-gnueabihf" +- stage: linux-tier2 ++ stage: build-test-verify + - env: TARGET=armv7-unknown-linux-gnueabihf RUSTFLAGS="-C target-feature=+neon" + name: "armv7-unknown-linux-gnueabihf + NEON" +- stage: linux-tier2 ++ stage: build-test-verify + - env: TARGET="thumbv7neon-unknown-linux-gnueabihf" + name: "thumbv7neon-unknown-linux-gnueabihf" +- stage: linux-tier2 +- - env: TARGET=aarch64-unknown-linux-gnu +- name: "aarch64-unknown-linux-gnu" +- stage: linux-tier2 +- - env: TARGET=aarch64-unknown-linux-gnu RUSTFLAGS="-C target-feature=+neon" +- name: "aarch64-unknown-linux-gnu + NEON" +- stage: linux-tier2 ++ stage: 32bit-tier2 ++ - name: "aarch64-unknown-linux-gnu + NEON" ++ env: TARGET=aarch64-unknown-linux-gnu RUSTFLAGS="-C target-feature=+neon" ++ stage: build-test-verify + - env: TARGET=mips-unknown-linux-gnu + name: "mips-unknown-linux-gnu" +- stage: linux-tier2 ++ stage: 32bit-tier2 + - env: TARGET=mipsel-unknown-linux-musl + name: "mipsel-unknown-linux-musl" +- stage: linux-tier2 ++ stage: 32bit-tier2 + - env: TARGET=mips64-unknown-linux-gnuabi64 + name: "mips64-unknown-linux-gnuabi64" +- stage: linux-tier2 ++ stage: 64bit-tier2 + - env: TARGET=mips64el-unknown-linux-gnuabi64 + name: "mips64el-unknown-linux-gnuabi64" +- stage: linux-tier2 ++ stage: 64bit-tier2 + # FIXME: https://github.com/rust-lang-nursery/packed_simd/issues/18 + # env: TARGET=mips64el-unknown-linux-gnuabi64 RUSTFLAGS="-C target-feature=+msa -C target-cpu=mips64r6" + - env: TARGET=powerpc-unknown-linux-gnu + name: "powerpc-unknown-linux-gnu" +- stage: linux-tier2 ++ stage: 32bit-tier2 + - env: TARGET=powerpc64-unknown-linux-gnu + name: "powerpc64-unknown-linux-gnu" +- stage: linux-tier2 +- - env: TARGET=powerpc64le-unknown-linux-gnu +- name: "powerpc64le-unknown-linux-gnu" +- stage: linux-tier2 +- - env: TARGET=powerpc64le-unknown-linux-gnu RUSTFLAGS="-C target-feature=+altivec" +- name: "powerpc64le-unknown-linux-gnu + ALTIVEC" +- stage: linux-tier2 +- - env: TARGET=powerpc64le-unknown-linux-gnu RUSTFLAGS="-C target-feature=+vsx" +- name: "powerpc64le-unknown-linux-gnu + VSX" +- stage: linux-tier2 +- - env: TARGET=s390x-unknown-linux-gnu +- name: "s390x-unknown-linux-gnu" +- stage: linux-tier2 ++ stage: 64bit-tier2 ++ - name: "powerpc64le-unknown-linux-gnu" ++ env: TARGET=powerpc64le-unknown-linux-gnu ++ stage: build-test-verify ++ - name: "powerpc64le-unknown-linux-gnu + ALTIVEC" ++ env: TARGET=powerpc64le-unknown-linux-gnu RUSTFLAGS="-C target-feature=+altivec" ++ stage: build-test-verify ++ - name: "powerpc64le-unknown-linux-gnu + VSX" ++ env: TARGET=powerpc64le-unknown-linux-gnu RUSTFLAGS="-C target-feature=+vsx" ++ stage: build-test-verify ++ - name: "s390x-unknown-linux-gnu" ++ env: TARGET=s390x-unknown-linux-gnu ++ stage: 64bit-tier2 + - env: TARGET=sparc64-unknown-linux-gnu + name: "sparc64-unknown-linux-gnu" +- stage: linux-tier2 ++ stage: 64bit-tier2 + # WebAssembly: + - env: TARGET=wasm32-unknown-unknown + name: "wasm32-unknown-unknown" +- stage: osx-tier1 # For now ++ stage: 32bit-tier2 + # MacOSX: + - os: osx +- env: TARGET=i686-apple-darwin +- name: "i686-apple-darwin + SSE2" +- script: ci/run.sh +- osx_image: xcode10 +- stage: osx-tier1 +- - os: osx +- env: TARGET=i686-apple-darwin RUSTFLAGS="-C target-feature=+sse4.2" +- name: "i686-apple-darwin + SSE4.2" +- script: ci/run.sh +- osx_image: xcode10 +- stage: osx-tier1 +- # Travis-CI OSX build bots do not support AVX2: +- - os: osx +- env: TARGET=i686-apple-darwin RUSTFLAGS="-C target-feature=+avx" +- name: "i686-apple-darwin + AVX" +- script: ci/run.sh +- osx_image: xcode10 +- stage: osx-tier1 +- - os: osx +- env: TARGET=x86_64-apple-darwin +- name: "x86_64-apple-darwin + SSE2" +- install: true +- script: ci/run.sh +- osx_image: xcode10 +- stage: osx-tier1 +- - os: osx + env: TARGET=x86_64-apple-darwin RUSTFLAGS="-C target-feature=+sse4.2" + name: "x86_64-apple-darwin + SSE4.2" + install: true + script: ci/run.sh + osx_image: xcode10 +- stage: osx-tier1 ++ stage: build-test-verify + # Travis-CI OSX build bots do not support AVX2: + - os: osx + env: TARGET=x86_64-apple-darwin RUSTFLAGS="-C target-feature=+avx" + name: "x86_64-apple-darwin + AVX" + install: true + script: ci/run.sh + osx_image: xcode10 +- stage: osx-tier1 ++ stage: build-test-verify + # *BSDs: + #- env: TARGET=i686-unknown-freebsd NORUN=1 + # script: ci/run.sh + #- env: TARGET=x86_64-unknown-freebsd NORUN=1 + # script: ci/run.sh + #- env: TARGET=x86_64-unknown-netbsd NORUN=1 + # script: ci/run.sh + # Solaris: + #- env: TARGET=x86_64-sun-solaris NORUN=1 + # script: ci/run.sh + # iOS: + - os: osx +- env: TARGET=i386-apple-ios +- name: "i386-apple-ios" +- script: ci/run.sh +- osx_image: xcode9.4 +- stage: osx-tier2 +- - os: osx + env: TARGET=x86_64-apple-ios + name: "x86_64-apple-ios + SSE2" + script: ci/run.sh + osx_image: xcode9.4 +- stage: osx-tier2 +- - os: osx +- env: TARGET=armv7-apple-ios NORUN=1 +- name: "armv7-apple-ios [Build only]" +- script: ci/run.sh ++ stage: 64bit-tier2 ++ - name: "aarch64-apple-ios + NEON" ++ env: TARGET=aarch64-apple-ios RUSTFLAGS="-C target-feature=+neon" ++ os: osx + osx_image: xcode9.4 +- stage: osx-tier2 +- - os: osx +- env: TARGET=aarch64-apple-ios NORUN=1 +- name: "aarch64-apple-ios [Build only]" + script: ci/run.sh +- osx_image: xcode9.4 +- stage: osx-tier2 ++ stage: 64bit-tier2 + # BENCHMARKS: + - name: "Benchmarks - x86_64-unknown-linux-gnu" + install: TARGET=x86_64-unknown-linux-gnu ./ci/setup_benchmarks.sh +- script: PATH=$(pwd):$PATH NORUN=1 VERIFY=1 FEATURES=core_arch,ispc,sleef-sys ci/benchmark.sh ++ # FIXME: Use `core_arch,sleef-sys` features once they works again ++ script: PATH=$(pwd):$PATH NORUN=1 VERIFY=1 FEATURES=ispc ci/benchmark.sh + stage: tools + - name: "Benchmarks - x86_64-apple-darwin" + install: TARGET=x86_64-apple-darwin ./ci/setup_benchmarks.sh +- script: PATH=$(pwd):$PATH NORUN=1 VERIFY=1 FEATURES=core_arch,ispc,sleef-sys ci/benchmark.sh ++ # FIXME: Use `core_arch,sleef-sys` features once they works again ++ script: PATH=$(pwd):$PATH NORUN=1 VERIFY=1 FEATURES=ispc ci/benchmark.sh + os: osx + osx_image: xcode9.4 + stage: tools + # TOOLS: + - name: "Documentation" +- install: cargo install mdbook ++ before_install: ++ - sudo add-apt-repository -y ppa:deadsnakes/ppa ++ - sudo apt-get update -y ++ - sudo apt-get install -y python3.9 ++ install: ++ - cargo install mdbook + script: ci/dox.sh + stage: tools + - name: "rustfmt" + install: true +- before_script: rustup component add rustfmt-preview +- script: ci/all.sh check_fmt || true ++ script: | ++ if rustup component add rustfmt-preview ; then ++ ci/all.sh check_fmt || true ++ fi + stage: tools + - name: "clippy" + install: true +- before_script: rustup component add clippy-preview +- script: ci/all.sh clippy ++ script: | ++ if rustup component add clippy-preview ; then ++ ci/all.sh clippy ++ fi + stage: tools + + allow_failures: + # FIXME: ISPC cannot be found? + - name: "Benchmarks - x86_64-apple-darwin" +- # FIXME: TBD +- - env: TARGET=powerpc-unknown-linux-gnu +- - env: TARGET=powerpc64-unknown-linux-gnu +- - env: TARGET=powerpc64le-unknown-linux-gnu +- - env: TARGET=powerpc64le-unknown-linux-gnu RUSTFLAGS="-C target-feature=+altivec" +- - env: TARGET=powerpc64le-unknown-linux-gnu RUSTFLAGS="-C target-feature=+vsx" ++ # FIXME: i686 fails in inlining, apparently ++ - stage: 32bit-tier1 + #- env: TARGET=i686-unknown-freebsd NORUN=1 + #- env: TARGET=x86_64-unknown-freebsd NORUN=1 + #- env: TARGET=x86_64-unknown-netbsd NORUN=1 + #- env: TARGET=x86_64-sun-solaris NORUN=1 + + # FIXME: TBD +- - env: TARGET=arm-linux-androideabi +- - env: TARGET=arm-linux-androideabi RUSTFLAGS="-C target-feature=+v7,+neon" +- - env: TARGET=aarch64-linux-android +- - env: TARGET=aarch64-linux-android RUSTFLAGS="-C target-feature=+neon" ++ - stage: 64bit-tier2 ++ - stage: 32bit-tier2 + + # FIXME: iOS + # https://github.com/rust-lang-nursery/packed_simd/issues/26 +- - env: TARGET=i386-apple-ios + - env: TARGET=x86_64-apple-ios ++ # Is this related to the above? Mysterious test failure ++ - name: "aarch64-apple-ios + NEON" + + # FIXME: https://github.com/rust-lang-nursery/packed_simd/issues/182 + - env: TARGET=arm-unknown-linux-gnueabi RUSTFLAGS="-C target-feature=+v7,+neon" + - env: TARGET=arm-unknown-linux-gnueabihf RUSTFLAGS="-C target-feature=+v7,+neon" + - env: TARGET=armv7-unknown-linux-gnueabihf RUSTFLAGS="-C target-feature=+neon" + + # FIXME: https://github.com/rust-lang-nursery/packed_simd/issues/183 + - env: TARGET=wasm32-unknown-unknown +diff --git a/third_party/rust/packed_simd/Cargo.toml b/third_party/rust/packed_simd/Cargo.toml +--- a/third_party/rust/packed_simd/Cargo.toml ++++ b/third_party/rust/packed_simd/Cargo.toml +@@ -1,11 +1,11 @@ + [package] + name = "packed_simd" +-version = "0.3.3" ++version = "0.3.4" + authors = ["Gonzalo Brito Gadeschi "] + description = "Portable Packed SIMD vectors" + documentation = "https://docs.rs/crate/packed_simd/" + homepage = "https://github.com/rust-lang-nursery/packed_simd" + repository = "https://github.com/rust-lang-nursery/packed_simd" + keywords = ["simd", "vector", "portability"] + categories = ["hardware-support", "concurrency", "no-std", "data-structures"] + license = "MIT/Apache-2.0" +@@ -16,27 +16,27 @@ edition = "2018" + appveyor = { repository = "rust-lang-nursery/packed_simd" } + travis-ci = { repository = "rust-lang-nursery/packed_simd" } + codecov = { repository = "rust-lang-nursery/packed_simd" } + is-it-maintained-issue-resolution = { repository = "rust-lang-nursery/packed_simd" } + is-it-maintained-open-issues = { repository = "rust-lang-nursery/packed_simd" } + maintenance = { status = "experimental" } + + [dependencies] +-cfg-if = "^0.1.6" +-core_arch = { version = "^0.1.3", optional = true } ++cfg-if = "0.1.10" ++core_arch = { version = "0.1.5", optional = true } + + [features] + default = [] + into_bits = [] + libcore_neon = [] + + [dev-dependencies] + paste = "^0.1.3" +-arrayvec = { version = "^0.4", default-features = false } ++arrayvec = { version = "^0.5", default-features = false } + + [target.'cfg(target_arch = "x86_64")'.dependencies.sleef-sys] +-version = "^0.1.2" ++version = "0.1.2" + optional = true + + [target.wasm32-unknown-unknown.dev-dependencies] +-wasm-bindgen = "=0.2.19" +-wasm-bindgen-test = "=0.2.19" +\ No newline at end of file ++wasm-bindgen = "=0.2.52" ++wasm-bindgen-test = "=0.3.2" +diff --git a/third_party/rust/packed_simd/readme.md b/third_party/rust/packed_simd/README.md +rename from third_party/rust/packed_simd/readme.md +rename to third_party/rust/packed_simd/README.md +--- a/third_party/rust/packed_simd/readme.md ++++ b/third_party/rust/packed_simd/README.md +@@ -1,24 +1,22 @@ + # `Simd<[T; N]>` + + ## Implementation of [Rust RFC #2366: `std::simd`][rfc2366] + + [![Travis-CI Status]][travis] [![Appveyor Status]][appveyor] [![Latest Version]][crates.io] [![docs]][master_docs] + +-> This aims to be a 100% conforming implementation of Rust RFC 2366 for stabilization. +- +-**WARNING**: this crate only supports the most recent nightly Rust toolchain. ++**WARNING**: this crate only supports the most recent nightly Rust toolchain ++and will be superceded by [stdsimd](https://github.com/rust-lang/stdsimd). + + ## Documentation + + * [API docs (`master` branch)][master_docs] + * [Performance guide][perf_guide] +-* [API docs (`docs.rs`)][docs.rs]: **CURRENTLY DOWN** due to +- https://github.com/rust-lang-nursery/packed_simd/issues/110 ++* [API docs (`docs.rs`)][docs.rs] + * [RFC2366 `std::simd`][rfc2366]: - contains motivation, design rationale, + discussion, etc. + + ## Examples + + Most of the examples come with both a scalar and a vectorized implementation. + + * [`aobench`](https://github.com/rust-lang-nursery/packed_simd/tree/master/examples/aobench) +@@ -34,27 +32,16 @@ Most of the examples come with both a sc + + ## Cargo features + + * `into_bits` (default: disabled): enables `FromBits`/`IntoBits` trait + implementations for the vector types. These allow reinterpreting the bits of a + vector type as those of another vector type safely by just using the + `.into_bits()` method. + +-* `core_arch` (default: disabled): enable this feature to recompile `core::arch` +- for the target-features enabled. `packed_simd` includes optimizations for some +- target feature combinations that are enabled by this feature. Note, however, +- that this is an unstable dependency, that rustc might break at any time. +- +-* `sleef-sys` (default: disabled - `x86_64` only): internally uses the [SLEEF] +- short-vector math library when profitable via the [`sleef-sys`][sleef_sys] +- crate. [SLEEF] is licensed under the [Boost Software License +- v1.0][boost_license], an extremely permissive license, and can be statically +- linked without issues. +- + ## Performance + + The following [ISPC] examples are also part of `packed_simd`'s + [`examples/`](https://github.com/rust-lang-nursery/packed_simd/tree/master/examples/) + directory, where `packed_simd`+[`rayon`][rayon] are used to emulate [ISPC]'s + Single-Program-Multiple-Data (SPMD) programming model. The performance results + on different hardware is shown in the `readme.md` of each example. The following + table summarizes the performance ranges, where `+` means speed-up and `-` +@@ -70,70 +57,50 @@ slowdown: + While SPMD is not the intended use case for `packed_simd`, it is possible to + combine the library with [`rayon`][rayon] to poorly emulate [ISPC]'s SPMD programming + model in Rust. Writing performant code is not as straightforward as with + [ISPC], but with some care (e.g. see the [Performance Guide][perf_guide]) one + can easily match and often out-perform [ISPC]'s "default performance". + + ## Platform support + +-The following table describes the supported platforms: `build` shows whether the +-library compiles without issues for a given target, while `run` shows whether +-the full testsuite passes on the target. ++The following table describes the supported platforms: `build` shows whether ++the library compiles without issues for a given target, while `run` shows ++whether the test suite passes for a given target. + +-| Linux targets: | build | run | +-|-----------------------------------|-----------|---------| +-| `i586-unknown-linux-gnu` | ✓ | ✓ | +-| `i686-unknown-linux-gnu` | ✓ | ✓ | +-| `x86_64-unknown-linux-gnu` | ✓ | ✓ | +-| `arm-unknown-linux-gnueabi` | ✗ | ✗ | +-| `arm-unknown-linux-gnueabihf` | ✓ | ✓ | +-| `armv7-unknown-linux-gnueabi` | ✓ | ✓ | +-| `aarch64-unknown-linux-gnu` | ✓ | ✓ | +-| `mips-unknown-linux-gnu` | ✓ | ✓ | +-| `mipsel-unknown-linux-musl` | ✓ | ✓ | +-| `mips64-unknown-linux-gnuabi64` | ✓ | ✓ | +-| `mips64el-unknown-linux-gnuabi64` | ✓ | ✓ | +-| `powerpc-unknown-linux-gnu` | ✗ | ✗ | +-| `powerpc64-unknown-linux-gnu` | ✗ | ✗ | +-| `powerpc64le-unknown-linux-gnu` | ✗ | ✗ | +-| `s390x-unknown-linux-gnu` | ✓ | ✓* | +-| `sparc64-unknown-linux-gnu` | ✓ | ✓* | +-| `thumbv7neon-unknown-linux-gnueabihf` | ✓ | ✓ | +-| **MacOSX targets:** | **build** | **run** | +-| `x86_64-apple-darwin` | ✓ | ✓ | +-| `i686-apple-darwin` | ✓ | ✓ | +-| **Windows targets:** | **build** | **run** | +-| `x86_64-pc-windows-msvc` | ✓ | ✓ | +-| `i686-pc-windows-msvc` | ✓ | ✓ | +-| `x86_64-pc-windows-gnu` | ✗ | ✗ | +-| `i686-pc-windows-gnu` | ✗ | ✗ | +-| **WebAssembly targets:** | **build** | **run** | +-| `wasm32-unknown-unknown` | ✓ | ✓ | +-| **Android targets:** | **build** | **run** | +-| `x86_64-linux-android` | ✓ | ✓ | +-| `arm-linux-androideabi` | ✓ | ✓ | +-| `aarch64-linux-android` | ✓ | ✗ | +-| `thumbv7neon-linux-androideabi` | ✓ | ✓ | +-| **iOS targets:** | **build** | **run** | +-| `i386-apple-ios` | ✓ | ✗ | +-| `x86_64-apple-ios` | ✓ | ✗ | +-| `armv7-apple-ios` | ✓ | ✗** | +-| `aarch64-apple-ios` | ✓ | ✗** | +-| **xBSD targets:** | **build** | **run** | +-| `i686-unknown-freebsd` | ✗ | ✗** | +-| `x86_64-unknown-freebsd` | ✗ | ✗** | +-| `x86_64-unknown-netbsd` | ✗ | ✗** | +-| **Solaris targets:** | **build** | **run** | +-| `x86_64-sun-solaris` | ✗ | ✗** | ++| **Linux** | **build** | **run** | ++|---------------------------------------|-----------|---------| ++| `i586-unknown-linux-gnu` | ✓ | ✗ | ++| `i686-unknown-linux-gnu` | ✓ | ✗ | ++| `x86_64-unknown-linux-gnu` | ✓ | ✓ | ++| `arm-unknown-linux-gnueabi` | ✗ | ✗ | ++| `arm-unknown-linux-gnueabihf` | ✓ | ✓ | ++| `armv7-unknown-linux-gnueabi` | ✓ | ✓ | ++| `aarch64-unknown-linux-gnu` | ✓ | ✓ | ++| `mips-unknown-linux-gnu` | ✓ | ✗ | ++| `mipsel-unknown-linux-musl` | ✓ | ✗ | ++| `mips64-unknown-linux-gnuabi64` | ✓ | ✗ | ++| `mips64el-unknown-linux-gnuabi64` | ✓ | ✗ | ++| `powerpc-unknown-linux-gnu` | ✗ | ✗ | ++| `powerpc64-unknown-linux-gnu` | ✗ | ✗ | ++| `powerpc64le-unknown-linux-gnu` | ✓ | ✓ | ++| `s390x-unknown-linux-gnu` | ✗ | ✗ | ++| `sparc64-unknown-linux-gnu` | ✓ | ✗ | ++| `thumbv7neon-unknown-linux-gnueabihf` | ✓ | ✓ | ++| **MacOSX** | **build** | **run** | ++| `x86_64-apple-darwin` | ✓ | ✓ | ++| **Android** | **build** | **run** | ++| `x86_64-linux-android` | ✓ | ✓ | ++| `arm-linux-androideabi` | ✓ | ✓ | ++| `aarch64-linux-android` | ✓ | ✓ | ++| `thumbv7neon-linux-androideabi` | ✗ | ✗ | ++| **iOS** | **build** | **run** | ++| `x86_64-apple-ios` | ✓ | ✗ | ++| `aarch64-apple-ios` | ✓ | ✗ | + +-[*] most of the test suite passes correctly on these platform but +-there are correctness bugs open in the issue tracker. +- +-[**] it is currently not easily possible to run these platforms on CI. + + ## Machine code verification + + The + [`verify/`](https://github.com/rust-lang-nursery/packed_simd/tree/master/verify) + crate tests disassembles the portable packed vector APIs at run-time and + compares the generated machine code against the desired one to make sure that + this crate remains efficient. +@@ -157,18 +124,18 @@ Please see the [contributing instruction + + Contributions in any form (issues, pull requests, etc.) to this project + must adhere to Rust's [Code of Conduct]. + + Unless you explicitly state otherwise, any contribution intentionally submitted + for inclusion in `packed_simd` by you, as defined in the Apache-2.0 license, shall be + dual licensed as above, without any additional terms or conditions. + +-[travis]: https://travis-ci.org/rust-lang-nursery/packed_simd +-[Travis-CI Status]: https://travis-ci.org/rust-lang-nursery/packed_simd.svg?branch=master ++[travis]: https://travis-ci.com/rust-lang-nursery/packed_simd ++[Travis-CI Status]: https://travis-ci.com/rust-lang-nursery/packed_simd.svg?branch=master + [appveyor]: https://ci.appveyor.com/project/gnzlbg/packed-simd + [Appveyor Status]: https://ci.appveyor.com/api/projects/status/hd7v9dvr442hgdix?svg=true + [Latest Version]: https://img.shields.io/crates/v/packed_simd.svg + [crates.io]: https://crates.io/crates/packed_simd + [docs]: https://docs.rs/packed_simd/badge.svg + [docs.rs]: https://docs.rs/packed_simd/ + [master_docs]: https://rust-lang-nursery.github.io/packed_simd/packed_simd/ + [perf_guide]: https://rust-lang-nursery.github.io/packed_simd/perf-guide/ +diff --git a/third_party/rust/packed_simd/build.rs b/third_party/rust/packed_simd/build.rs +--- a/third_party/rust/packed_simd/build.rs ++++ b/third_party/rust/packed_simd/build.rs +@@ -1,8 +1,8 @@ + fn main() { +- println!("cargo:rustc-env=RUSTC_BOOTSTRAP=1"); ++ println!("cargo:rustc-env=RUSTC_BOOTSTRAP=1"); + let target = std::env::var("TARGET") + .expect("TARGET environment variable not defined"); + if target.contains("neon") { + println!("cargo:rustc-cfg=libcore_neon"); + } + } +diff --git a/third_party/rust/packed_simd/ci/all.sh b/third_party/rust/packed_simd/ci/all.sh +--- a/third_party/rust/packed_simd/ci/all.sh ++++ b/third_party/rust/packed_simd/ci/all.sh +@@ -16,17 +16,17 @@ cargo_check_fmt() { + cargo fmt --all -- --check + } + + cargo_fmt() { + cargo fmt --all + } + + cargo_clippy() { +- cargo clippy --all -- -D clippy::pedantic ++ cargo clippy --all -- -D clippy::perf + } + + CMD="-1" + + case $op in + clean*) + CMD=cargo_clean + ;; +diff --git a/third_party/rust/packed_simd/ci/docker/aarch64-unknown-linux-gnu/Dockerfile b/third_party/rust/packed_simd/ci/docker/aarch64-unknown-linux-gnu/Dockerfile +--- a/third_party/rust/packed_simd/ci/docker/aarch64-unknown-linux-gnu/Dockerfile ++++ b/third_party/rust/packed_simd/ci/docker/aarch64-unknown-linux-gnu/Dockerfile +@@ -1,9 +1,9 @@ +-FROM ubuntu:17.10 ++FROM ubuntu:18.04 + RUN apt-get update && apt-get install -y --no-install-recommends \ + gcc \ + ca-certificates \ + libc6-dev \ + gcc-aarch64-linux-gnu \ + libc6-dev-arm64-cross \ + qemu-user \ + make \ +diff --git a/third_party/rust/packed_simd/ci/docker/arm-unknown-linux-gnueabi/Dockerfile b/third_party/rust/packed_simd/ci/docker/arm-unknown-linux-gnueabi/Dockerfile +--- a/third_party/rust/packed_simd/ci/docker/arm-unknown-linux-gnueabi/Dockerfile ++++ b/third_party/rust/packed_simd/ci/docker/arm-unknown-linux-gnueabi/Dockerfile +@@ -1,9 +1,9 @@ +-FROM ubuntu:17.10 ++FROM ubuntu:18.04 + RUN apt-get update && apt-get install -y --no-install-recommends \ + gcc \ + ca-certificates \ + libc6-dev \ + libc6-armel-cross \ + libc6-dev-armel-cross \ + binutils-arm-linux-gnueabi \ + gcc-arm-linux-gnueabi \ +diff --git a/third_party/rust/packed_simd/ci/docker/arm-unknown-linux-gnueabihf/Dockerfile b/third_party/rust/packed_simd/ci/docker/arm-unknown-linux-gnueabihf/Dockerfile +--- a/third_party/rust/packed_simd/ci/docker/arm-unknown-linux-gnueabihf/Dockerfile ++++ b/third_party/rust/packed_simd/ci/docker/arm-unknown-linux-gnueabihf/Dockerfile +@@ -1,9 +1,9 @@ +-FROM ubuntu:17.10 ++FROM ubuntu:18.04 + RUN apt-get update && apt-get install -y --no-install-recommends \ + gcc \ + ca-certificates \ + libc6-dev \ + gcc-arm-linux-gnueabihf \ + libc6-dev-armhf-cross \ + qemu-user \ + make \ +diff --git a/third_party/rust/packed_simd/ci/docker/armv7-unknown-linux-gnueabihf/Dockerfile b/third_party/rust/packed_simd/ci/docker/armv7-unknown-linux-gnueabihf/Dockerfile +--- a/third_party/rust/packed_simd/ci/docker/armv7-unknown-linux-gnueabihf/Dockerfile ++++ b/third_party/rust/packed_simd/ci/docker/armv7-unknown-linux-gnueabihf/Dockerfile +@@ -1,9 +1,9 @@ +-FROM ubuntu:17.10 ++FROM ubuntu:18.04 + RUN apt-get update && apt-get install -y --no-install-recommends \ + gcc \ + ca-certificates \ + libc6-dev \ + gcc-arm-linux-gnueabihf \ + libc6-dev-armhf-cross \ + qemu-user \ + make \ +diff --git a/third_party/rust/packed_simd/ci/docker/i586-unknown-linux-gnu/Dockerfile b/third_party/rust/packed_simd/ci/docker/i586-unknown-linux-gnu/Dockerfile +--- a/third_party/rust/packed_simd/ci/docker/i586-unknown-linux-gnu/Dockerfile ++++ b/third_party/rust/packed_simd/ci/docker/i586-unknown-linux-gnu/Dockerfile +@@ -1,7 +1,7 @@ +-FROM ubuntu:17.10 ++FROM ubuntu:18.04 + RUN apt-get update && apt-get install -y --no-install-recommends \ + gcc-multilib \ + libc6-dev \ + file \ + make \ + ca-certificates +diff --git a/third_party/rust/packed_simd/ci/docker/i686-unknown-linux-gnu/Dockerfile b/third_party/rust/packed_simd/ci/docker/i686-unknown-linux-gnu/Dockerfile +--- a/third_party/rust/packed_simd/ci/docker/i686-unknown-linux-gnu/Dockerfile ++++ b/third_party/rust/packed_simd/ci/docker/i686-unknown-linux-gnu/Dockerfile +@@ -1,7 +1,7 @@ +-FROM ubuntu:17.10 ++FROM ubuntu:18.04 + RUN apt-get update && apt-get install -y --no-install-recommends \ + gcc-multilib \ + libc6-dev \ + file \ + make \ + ca-certificates +diff --git a/third_party/rust/packed_simd/ci/docker/mips-unknown-linux-gnu/Dockerfile b/third_party/rust/packed_simd/ci/docker/mips-unknown-linux-gnu/Dockerfile +--- a/third_party/rust/packed_simd/ci/docker/mips-unknown-linux-gnu/Dockerfile ++++ b/third_party/rust/packed_simd/ci/docker/mips-unknown-linux-gnu/Dockerfile +@@ -1,9 +1,9 @@ +-FROM ubuntu:17.10 ++FROM ubuntu:18.04 + + RUN apt-get update && apt-get install -y --no-install-recommends \ + gcc libc6-dev qemu-user ca-certificates \ + gcc-mips-linux-gnu libc6-dev-mips-cross \ + qemu-system-mips \ + qemu-user \ + make \ + file +diff --git a/third_party/rust/packed_simd/ci/docker/mips64-unknown-linux-gnuabi64/Dockerfile b/third_party/rust/packed_simd/ci/docker/mips64-unknown-linux-gnuabi64/Dockerfile +--- a/third_party/rust/packed_simd/ci/docker/mips64-unknown-linux-gnuabi64/Dockerfile ++++ b/third_party/rust/packed_simd/ci/docker/mips64-unknown-linux-gnuabi64/Dockerfile +@@ -1,9 +1,9 @@ +-FROM ubuntu:17.10 ++FROM ubuntu:18.04 + + RUN apt-get update && apt-get install -y --no-install-recommends \ + gcc libc6-dev qemu-user ca-certificates \ + gcc-mips64-linux-gnuabi64 libc6-dev-mips64-cross \ + qemu-system-mips64 qemu-user + + ENV CARGO_TARGET_MIPS64_UNKNOWN_LINUX_GNUABI64_LINKER=mips64-linux-gnuabi64-gcc \ + CARGO_TARGET_MIPS64_UNKNOWN_LINUX_GNUABI64_RUNNER="qemu-mips64 -L /usr/mips64-linux-gnuabi64" \ +diff --git a/third_party/rust/packed_simd/ci/docker/mips64el-unknown-linux-gnuabi64/Dockerfile b/third_party/rust/packed_simd/ci/docker/mips64el-unknown-linux-gnuabi64/Dockerfile +--- a/third_party/rust/packed_simd/ci/docker/mips64el-unknown-linux-gnuabi64/Dockerfile ++++ b/third_party/rust/packed_simd/ci/docker/mips64el-unknown-linux-gnuabi64/Dockerfile +@@ -1,9 +1,9 @@ +-FROM ubuntu:17.10 ++FROM ubuntu:18.04 + + RUN apt-get update && apt-get install -y --no-install-recommends \ + gcc libc6-dev qemu-user ca-certificates \ + gcc-mips64el-linux-gnuabi64 libc6-dev-mips64el-cross \ + qemu-system-mips64el + + ENV CARGO_TARGET_MIPS64EL_UNKNOWN_LINUX_GNUABI64_LINKER=mips64el-linux-gnuabi64-gcc \ + CARGO_TARGET_MIPS64EL_UNKNOWN_LINUX_GNUABI64_RUNNER="qemu-mips64el -L /usr/mips64el-linux-gnuabi64" \ +diff --git a/third_party/rust/packed_simd/ci/docker/mipsel-unknown-linux-musl/Dockerfile b/third_party/rust/packed_simd/ci/docker/mipsel-unknown-linux-musl/Dockerfile +--- a/third_party/rust/packed_simd/ci/docker/mipsel-unknown-linux-musl/Dockerfile ++++ b/third_party/rust/packed_simd/ci/docker/mipsel-unknown-linux-musl/Dockerfile +@@ -11,15 +11,15 @@ RUN apt-get update && \ + bzip2 \ + curl \ + file + + RUN mkdir /toolchain + + # Note that this originally came from: + # 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 +-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 | \ ++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 | \ + tar xjf - -C /toolchain --strip-components=2 + + ENV PATH=$PATH:/rust/bin:/toolchain/bin \ + CC_mipsel_unknown_linux_musl=mipsel-openwrt-linux-gcc \ + CARGO_TARGET_MIPSEL_UNKNOWN_LINUX_MUSL_LINKER=mipsel-openwrt-linux-gcc \ +- CARGO_TARGET_MIPSEL_UNKNOWN_LINUX_MUSL_RUNNER="qemu-mipsel -L /toolchain" +\ No newline at end of file ++ CARGO_TARGET_MIPSEL_UNKNOWN_LINUX_MUSL_RUNNER="qemu-mipsel -L /toolchain" +diff --git a/third_party/rust/packed_simd/ci/docker/powerpc-unknown-linux-gnu/Dockerfile b/third_party/rust/packed_simd/ci/docker/powerpc-unknown-linux-gnu/Dockerfile +--- a/third_party/rust/packed_simd/ci/docker/powerpc-unknown-linux-gnu/Dockerfile ++++ b/third_party/rust/packed_simd/ci/docker/powerpc-unknown-linux-gnu/Dockerfile +@@ -1,12 +1,13 @@ +-FROM ubuntu:17.10 ++FROM ubuntu:18.04 + + RUN apt-get update && apt-get install -y --no-install-recommends \ + gcc libc6-dev qemu-user ca-certificates \ + gcc-powerpc-linux-gnu libc6-dev-powerpc-cross \ + qemu-system-ppc \ + make \ + file + + ENV CARGO_TARGET_POWERPC_UNKNOWN_LINUX_GNU_LINKER=powerpc-linux-gnu-gcc \ + CARGO_TARGET_POWERPC_UNKNOWN_LINUX_GNU_RUNNER="qemu-ppc -cpu Vger -L /usr/powerpc-linux-gnu" \ ++ CC=powerpc-linux-gnu-gcc \ + OBJDUMP=powerpc-linux-gnu-objdump +diff --git a/third_party/rust/packed_simd/ci/docker/powerpc64-unknown-linux-gnu/Dockerfile b/third_party/rust/packed_simd/ci/docker/powerpc64-unknown-linux-gnu/Dockerfile +--- a/third_party/rust/packed_simd/ci/docker/powerpc64-unknown-linux-gnu/Dockerfile ++++ b/third_party/rust/packed_simd/ci/docker/powerpc64-unknown-linux-gnu/Dockerfile +@@ -1,9 +1,9 @@ +-FROM ubuntu:17.10 ++FROM ubuntu:18.04 + + RUN apt-get update && apt-get install -y --no-install-recommends \ + gcc \ + ca-certificates \ + libc6-dev \ + gcc-powerpc64-linux-gnu \ + libc6-dev-ppc64-cross \ + qemu-user \ +diff --git a/third_party/rust/packed_simd/ci/docker/powerpc64le-unknown-linux-gnu/Dockerfile b/third_party/rust/packed_simd/ci/docker/powerpc64le-unknown-linux-gnu/Dockerfile +--- a/third_party/rust/packed_simd/ci/docker/powerpc64le-unknown-linux-gnu/Dockerfile ++++ b/third_party/rust/packed_simd/ci/docker/powerpc64le-unknown-linux-gnu/Dockerfile +@@ -1,9 +1,9 @@ +-FROM ubuntu:17.10 ++FROM ubuntu:18.04 + + RUN apt-get update && apt-get install -y --no-install-recommends \ + gcc libc6-dev qemu-user ca-certificates \ + gcc-powerpc64le-linux-gnu libc6-dev-ppc64el-cross \ + qemu-system-ppc file make + + ENV CARGO_TARGET_POWERPC64LE_UNKNOWN_LINUX_GNU_LINKER=powerpc64le-linux-gnu-gcc \ + CARGO_TARGET_POWERPC64LE_UNKNOWN_LINUX_GNU_RUNNER="qemu-ppc64le -L /usr/powerpc64le-linux-gnu" \ +diff --git a/third_party/rust/packed_simd/ci/docker/thumbv7neon-unknown-linux-gnueabihf/Dockerfile b/third_party/rust/packed_simd/ci/docker/thumbv7neon-unknown-linux-gnueabihf/Dockerfile +--- a/third_party/rust/packed_simd/ci/docker/thumbv7neon-unknown-linux-gnueabihf/Dockerfile ++++ b/third_party/rust/packed_simd/ci/docker/thumbv7neon-unknown-linux-gnueabihf/Dockerfile +@@ -1,9 +1,9 @@ +-FROM ubuntu:17.10 ++FROM ubuntu:18.04 + RUN apt-get update && apt-get install -y --no-install-recommends \ + gcc \ + ca-certificates \ + libc6-dev \ + gcc-arm-linux-gnueabihf \ + libc6-dev-armhf-cross \ + qemu-user \ + make \ +diff --git a/third_party/rust/packed_simd/ci/docker/x86_64-unknown-linux-gnu/Dockerfile b/third_party/rust/packed_simd/ci/docker/x86_64-unknown-linux-gnu/Dockerfile +--- a/third_party/rust/packed_simd/ci/docker/x86_64-unknown-linux-gnu/Dockerfile ++++ b/third_party/rust/packed_simd/ci/docker/x86_64-unknown-linux-gnu/Dockerfile +@@ -1,9 +1,9 @@ +-FROM ubuntu:17.10 ++FROM ubuntu:18.04 + RUN apt-get update && apt-get install -y --no-install-recommends \ + gcc \ + libc6-dev \ + file \ + make \ + ca-certificates \ + cmake \ + libclang-dev \ +diff --git a/third_party/rust/packed_simd/ci/dox.sh b/third_party/rust/packed_simd/ci/dox.sh +--- a/third_party/rust/packed_simd/ci/dox.sh ++++ b/third_party/rust/packed_simd/ci/dox.sh +@@ -13,12 +13,15 @@ cargo doc --features=into_bits + # mdbook build perf-guide -d target/doc/perf-guide + cd perf-guide + mdbook build + cd - + cp -r perf-guide/book target/doc/perf-guide + + # If we're on travis, not a PR, and on the right branch, publish! + if [ "$TRAVIS_PULL_REQUEST" = "false" ] && [ "$TRAVIS_BRANCH" = "master" ]; then +- pip install ghp_import --install-option="--prefix=$HOME/.local" +- $HOME/.local/bin/ghp-import -n target/doc ++ python3 -vV ++ pip -vV ++ python3.9 -vV ++ pip install ghp_import --user ++ ghp-import -n target/doc + git push -qf https://${GH_PAGES}@github.com/${TRAVIS_REPO_SLUG}.git gh-pages + fi +diff --git a/third_party/rust/packed_simd/ci/run.sh b/third_party/rust/packed_simd/ci/run.sh +--- a/third_party/rust/packed_simd/ci/run.sh ++++ b/third_party/rust/packed_simd/ci/run.sh +@@ -73,19 +73,21 @@ cargo_test_impl() { + # Debug run: + if [[ "${TARGET}" != "wasm32-unknown-unknown" ]]; then + # Run wasm32-unknown-unknown in release mode only + cargo_test_impl + fi + + if [[ "${TARGET}" == "x86_64-unknown-linux-gnu" ]] || [[ "${TARGET}" == "x86_64-pc-windows-msvc" ]]; then + # use sleef on linux and windows x86_64 builds +- cargo_test_impl --release --features=into_bits,core_arch,sleef-sys ++ # FIXME: Use `core_arch,sleef-sys` features once they works again ++ cargo_test_impl --release --features=into_bits + else +- cargo_test_impl --release --features=into_bits,core_arch ++ # FIXME: Use `core_arch` feature once it works again ++ cargo_test_impl --release --features=into_bits + fi + + # Verify code generation + if [[ "${NOVERIFY}" != "1" ]]; then + cp -r verify/verify target/verify + export STDSIMD_ASSERT_INSTR_LIMIT=30 + if [[ "${TARGET}" == "i586-unknown-linux-gnu" ]]; then + export STDSIMD_ASSERT_INSTR_LIMIT=50 +diff --git a/third_party/rust/packed_simd/ci/setup_benchmarks.sh b/third_party/rust/packed_simd/ci/setup_benchmarks.sh +--- a/third_party/rust/packed_simd/ci/setup_benchmarks.sh ++++ b/third_party/rust/packed_simd/ci/setup_benchmarks.sh +@@ -1,10 +1,7 @@ + #!/usr/bin/env bash + + set -ex + + # Get latest ISPC binary for the target and put it in the path + git clone https://github.com/gnzlbg/ispc-binaries + cp ispc-binaries/ispc-${TARGET} ispc +- +-# Rust-bindgen requires RUSTFMT +-rustup component add rustfmt-preview +diff --git a/third_party/rust/packed_simd/src/api.rs b/third_party/rust/packed_simd/src/api.rs +--- a/third_party/rust/packed_simd/src/api.rs ++++ b/third_party/rust/packed_simd/src/api.rs +@@ -1,10 +1,12 @@ + //! Implements the Simd<[T; N]> APIs + ++#[macro_use] ++mod bitmask; + crate mod cast; + #[macro_use] + mod cmp; + #[macro_use] + mod default; + #[macro_use] + mod fmt; + #[macro_use] +@@ -34,17 +36,17 @@ mod swap_bytes; + #[macro_use] + mod bit_manip; + + #[cfg(feature = "into_bits")] + crate mod into_bits; + + macro_rules! impl_i { + ([$elem_ty:ident; $elem_n:expr]: $tuple_id:ident, $mask_ty:ident +- | $ielem_ty:ident | $test_tt:tt | $($elem_ids:ident),* ++ | $ielem_ty:ident, $ibitmask_ty:ident | $test_tt:tt | $($elem_ids:ident),* + | From: $($from_vec_ty:ident),* | $(#[$doc:meta])*) => { + impl_minimal_iuf!([$elem_ty; $elem_n]: $tuple_id | $ielem_ty | $test_tt + | $($elem_ids),* | $(#[$doc])*); + impl_ops_vector_arithmetic!([$elem_ty; $elem_n]: $tuple_id | $test_tt); + impl_ops_scalar_arithmetic!([$elem_ty; $elem_n]: $tuple_id | $test_tt); + impl_ops_vector_bitwise!( + [$elem_ty; $elem_n]: $tuple_id | $test_tt | (!(0 as $elem_ty), 0) + ); +@@ -88,26 +90,27 @@ macro_rules! impl_i { + [$elem_ty; $elem_n]: $tuple_id | $test_tt | (0, 1) + ); + impl_cmp_eq!([$elem_ty; $elem_n]: $tuple_id | $test_tt | (0, 1)); + impl_cmp_vertical!( + [$elem_ty; $elem_n]: $tuple_id, $mask_ty, false, (1, 0) | $test_tt + ); + impl_cmp_partial_ord!([$elem_ty; $elem_n]: $tuple_id | $test_tt); + impl_cmp_ord!([$elem_ty; $elem_n]: $tuple_id | $test_tt | (0, 1)); ++ impl_bitmask!($tuple_id | $ibitmask_ty | (-1, 0) | $test_tt); + + test_select!($elem_ty, $mask_ty, $tuple_id, (1, 2) | $test_tt); + test_cmp_partial_ord_int!([$elem_ty; $elem_n]: $tuple_id | $test_tt); + test_shuffle1_dyn!([$elem_ty; $elem_n]: $tuple_id | $test_tt); + } + } + + macro_rules! impl_u { + ([$elem_ty:ident; $elem_n:expr]: $tuple_id:ident, $mask_ty:ident +- | $ielem_ty:ident | $test_tt:tt | $($elem_ids:ident),* ++ | $ielem_ty:ident, $ibitmask_ty:ident | $test_tt:tt | $($elem_ids:ident),* + | From: $($from_vec_ty:ident),* | $(#[$doc:meta])*) => { + impl_minimal_iuf!([$elem_ty; $elem_n]: $tuple_id | $ielem_ty | $test_tt + | $($elem_ids),* | $(#[$doc])*); + impl_ops_vector_arithmetic!([$elem_ty; $elem_n]: $tuple_id | $test_tt); + impl_ops_scalar_arithmetic!([$elem_ty; $elem_n]: $tuple_id | $test_tt); + impl_ops_vector_bitwise!( + [$elem_ty; $elem_n]: $tuple_id | $test_tt | (!(0 as $elem_ty), 0) + ); +@@ -150,16 +153,18 @@ macro_rules! impl_u { + [$elem_ty; $elem_n]: $tuple_id | $test_tt | (1, 0) + ); + impl_cmp_eq!([$elem_ty; $elem_n]: $tuple_id | $test_tt | (0, 1)); + impl_cmp_vertical!( + [$elem_ty; $elem_n]: $tuple_id, $mask_ty, false, (1, 0) | $test_tt + ); + impl_cmp_partial_ord!([$elem_ty; $elem_n]: $tuple_id | $test_tt); + impl_cmp_ord!([$elem_ty; $elem_n]: $tuple_id | $test_tt | (0, 1)); ++ impl_bitmask!($tuple_id | $ibitmask_ty | ($ielem_ty::max_value(), 0) | ++ $test_tt); + + test_select!($elem_ty, $mask_ty, $tuple_id, (1, 2) | $test_tt); + test_cmp_partial_ord_int!([$elem_ty; $elem_n]: $tuple_id | $test_tt); + test_shuffle1_dyn!([$elem_ty; $elem_n]: $tuple_id | $test_tt); + } + } + + macro_rules! impl_f { +@@ -217,17 +222,18 @@ macro_rules! impl_f { + test_reduction_float_min_max!( + [$elem_ty; $elem_n]: $tuple_id | $test_tt + ); + test_shuffle1_dyn!([$elem_ty; $elem_n]: $tuple_id | $test_tt); + } + } + + macro_rules! impl_m { +- ([$elem_ty:ident; $elem_n:expr]: $tuple_id:ident | $ielem_ty:ident ++ ([$elem_ty:ident; $elem_n:expr]: $tuple_id:ident ++ | $ielem_ty:ident, $ibitmask_ty:ident + | $test_tt:tt | $($elem_ids:ident),* | From: $($from_vec_ty:ident),* + | $(#[$doc:meta])*) => { + impl_minimal_mask!( + [$elem_ty; $elem_n]: $tuple_id | $ielem_ty | $test_tt + | $($elem_ids),* | $(#[$doc])* + ); + impl_ops_vector_mask_bitwise!( + [$elem_ty; $elem_n]: $tuple_id | $test_tt | (true, false) +@@ -260,16 +266,17 @@ macro_rules! impl_m { + | $test_tt + ); + impl_select!([$elem_ty; $elem_n]: $tuple_id | $test_tt); + impl_cmp_partial_ord!([$elem_ty; $elem_n]: $tuple_id | $test_tt); + impl_cmp_ord!( + [$elem_ty; $elem_n]: $tuple_id | $test_tt | (false, true) + ); + impl_shuffle1_dyn!([$elem_ty; $elem_n]: $tuple_id | $test_tt); ++ impl_bitmask!($tuple_id | $ibitmask_ty | (true, false) | $test_tt); + + test_cmp_partial_ord_mask!([$elem_ty; $elem_n]: $tuple_id | $test_tt); + test_shuffle1_dyn_mask!([$elem_ty; $elem_n]: $tuple_id | $test_tt); + } + } + + macro_rules! impl_const_p { + ([$elem_ty:ty; $elem_n:expr]: $tuple_id:ident, $mask_ty:ident, +diff --git a/third_party/rust/packed_simd/src/api/bit_manip.rs b/third_party/rust/packed_simd/src/api/bit_manip.rs +--- a/third_party/rust/packed_simd/src/api/bit_manip.rs ++++ b/third_party/rust/packed_simd/src/api/bit_manip.rs +@@ -32,16 +32,17 @@ macro_rules! impl_bit_manip { + } + } + + test_if! { + $test_tt: + paste::item_with_macros! { + #[allow(overflowing_literals)] + pub mod [<$id _bit_manip>] { ++ #![allow(const_item_mutation)] + use super::*; + + const LANE_WIDTH: usize = mem::size_of::<$elem_ty>() * 8; + + macro_rules! test_func { + ($x:expr, $func:ident) => {{ + let mut actual = $x; + for i in 0..$id::lanes() { +diff --git a/third_party/rust/packed_simd/src/api/bitmask.rs b/third_party/rust/packed_simd/src/api/bitmask.rs +new file mode 100644 +--- /dev/null ++++ b/third_party/rust/packed_simd/src/api/bitmask.rs +@@ -0,0 +1,82 @@ ++//! Bitmask API ++ ++macro_rules! impl_bitmask { ++ ($id:ident | $ibitmask_ty:ident | ($set:expr, $clear:expr) ++ | $test_tt:tt) => { ++ impl $id { ++ /// Creates a bitmask with the MSB of each vector lane. ++ /// ++ /// If the vector has less than 8 lanes, the bits that do not ++ /// correspond to any vector lanes are cleared. ++ #[inline] ++ pub fn bitmask(self) -> $ibitmask_ty { ++ unsafe { codegen::llvm::simd_bitmask(self.0) } ++ } ++ } ++ ++ test_if! { ++ $test_tt: ++ paste::item! { ++ #[cfg(not(any( ++ // FIXME: https://github.com/rust-lang-nursery/packed_simd/issues/210 ++ all(target_arch = "mips", target_endian = "big"), ++ all(target_arch = "mips64", target_endian = "big"), ++ target_arch = "sparc64", ++ target_arch = "s390x", ++ )))] ++ pub mod [<$id _bitmask>] { ++ use super::*; ++ #[cfg_attr(not(target_arch = "wasm32"), test)] ++ #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] ++ fn bitmask() { ++ // clear all lanes ++ let vec = $id::splat($clear as _); ++ let bitmask: $ibitmask_ty = 0; ++ assert_eq!(vec.bitmask(), bitmask); ++ ++ // set even lanes ++ let mut vec = $id::splat($clear as _); ++ for i in 0..$id::lanes() { ++ if i % 2 == 0 { ++ vec = vec.replace(i, $set as _); ++ } ++ } ++ // create bitmask with even lanes set: ++ let mut bitmask: $ibitmask_ty = 0; ++ for i in 0..$id::lanes() { ++ if i % 2 == 0 { ++ bitmask |= 1 << i; ++ } ++ } ++ assert_eq!(vec.bitmask(), bitmask); ++ ++ ++ // set odd lanes ++ let mut vec = $id::splat($clear as _); ++ for i in 0..$id::lanes() { ++ if i % 2 != 0 { ++ vec = vec.replace(i, $set as _); ++ } ++ } ++ // create bitmask with odd lanes set: ++ let mut bitmask: $ibitmask_ty = 0; ++ for i in 0..$id::lanes() { ++ if i % 2 != 0 { ++ bitmask |= 1 << i; ++ } ++ } ++ assert_eq!(vec.bitmask(), bitmask); ++ ++ // set all lanes ++ let vec = $id::splat($set as _); ++ let mut bitmask: $ibitmask_ty = 0; ++ for i in 0..$id::lanes() { ++ bitmask |= 1 << i; ++ } ++ assert_eq!(vec.bitmask(), bitmask); ++ } ++ } ++ } ++ } ++ }; ++} +diff --git a/third_party/rust/packed_simd/src/api/cast/v128.rs b/third_party/rust/packed_simd/src/api/cast/v128.rs +--- a/third_party/rust/packed_simd/src/api/cast/v128.rs ++++ b/third_party/rust/packed_simd/src/api/cast/v128.rs +@@ -1,10 +1,10 @@ + //! `FromCast` and `IntoCast` implementations for portable 128-bit wide vectors +-#![rustfmt::skip] ++#[rustfmt::skip] + + use crate::*; + + impl_from_cast!( + i8x16[test_v128]: u8x16, m8x16, i16x16, u16x16, m16x16, i32x16, u32x16, f32x16, m32x16 + ); + impl_from_cast!( + u8x16[test_v128]: i8x16, m8x16, i16x16, u16x16, m16x16, i32x16, u32x16, f32x16, m32x16 +diff --git a/third_party/rust/packed_simd/src/api/cast/v16.rs b/third_party/rust/packed_simd/src/api/cast/v16.rs +--- a/third_party/rust/packed_simd/src/api/cast/v16.rs ++++ b/third_party/rust/packed_simd/src/api/cast/v16.rs +@@ -1,10 +1,10 @@ + //! `FromCast` and `IntoCast` implementations for portable 16-bit wide vectors +-#![rustfmt::skip] ++#[rustfmt::skip] + + use crate::*; + + impl_from_cast!( + i8x2[test_v16]: u8x2, m8x2, i16x2, u16x2, m16x2, i32x2, u32x2, f32x2, m32x2, + i64x2, u64x2, f64x2, m64x2, i128x2, u128x2, m128x2, isizex2, usizex2, msizex2 + ); + impl_from_cast!( +diff --git a/third_party/rust/packed_simd/src/api/cast/v256.rs b/third_party/rust/packed_simd/src/api/cast/v256.rs +--- a/third_party/rust/packed_simd/src/api/cast/v256.rs ++++ b/third_party/rust/packed_simd/src/api/cast/v256.rs +@@ -1,10 +1,10 @@ + //! `FromCast` and `IntoCast` implementations for portable 256-bit wide vectors +-#![rustfmt::skip] ++#[rustfmt::skip] + + use crate::*; + + impl_from_cast!(i8x32[test_v256]: u8x32, m8x32, i16x32, u16x32, m16x32); + impl_from_cast!(u8x32[test_v256]: i8x32, m8x32, i16x32, u16x32, m16x32); + impl_from_cast_mask!(m8x32[test_v256]: i8x32, u8x32, i16x32, u16x32, m16x32); + + impl_from_cast!( +diff --git a/third_party/rust/packed_simd/src/api/cast/v32.rs b/third_party/rust/packed_simd/src/api/cast/v32.rs +--- a/third_party/rust/packed_simd/src/api/cast/v32.rs ++++ b/third_party/rust/packed_simd/src/api/cast/v32.rs +@@ -1,10 +1,10 @@ + //! `FromCast` and `IntoCast` implementations for portable 32-bit wide vectors +-#![rustfmt::skip] ++#[rustfmt::skip] + + use crate::*; + + impl_from_cast!( + i8x4[test_v32]: u8x4, m8x4, i16x4, u16x4, m16x4, i32x4, u32x4, f32x4, m32x4, + i64x4, u64x4, f64x4, m64x4, i128x4, u128x4, m128x4, isizex4, usizex4, msizex4 + ); + impl_from_cast!( +diff --git a/third_party/rust/packed_simd/src/api/cast/v512.rs b/third_party/rust/packed_simd/src/api/cast/v512.rs +--- a/third_party/rust/packed_simd/src/api/cast/v512.rs ++++ b/third_party/rust/packed_simd/src/api/cast/v512.rs +@@ -1,10 +1,10 @@ + //! `FromCast` and `IntoCast` implementations for portable 512-bit wide vectors +-#![rustfmt::skip] ++#[rustfmt::skip] + + use crate::*; + + impl_from_cast!(i8x64[test_v512]: u8x64, m8x64); + impl_from_cast!(u8x64[test_v512]: i8x64, m8x64); + impl_from_cast_mask!(m8x64[test_v512]: i8x64, u8x64); + + impl_from_cast!(i16x32[test_v512]: i8x32, u8x32, m8x32, u16x32, m16x32); +diff --git a/third_party/rust/packed_simd/src/api/cast/v64.rs b/third_party/rust/packed_simd/src/api/cast/v64.rs +--- a/third_party/rust/packed_simd/src/api/cast/v64.rs ++++ b/third_party/rust/packed_simd/src/api/cast/v64.rs +@@ -1,10 +1,10 @@ + //! `FromCast` and `IntoCast` implementations for portable 64-bit wide vectors +-#![rustfmt::skip] ++#[rustfmt::skip] + + use crate::*; + + impl_from_cast!( + i8x8[test_v64]: u8x8, m8x8, i16x8, u16x8, m16x8, i32x8, u32x8, f32x8, m32x8, + i64x8, u64x8, f64x8, m64x8, isizex8, usizex8, msizex8 + ); + impl_from_cast!( +diff --git a/third_party/rust/packed_simd/src/api/default.rs b/third_party/rust/packed_simd/src/api/default.rs +--- a/third_party/rust/packed_simd/src/api/default.rs ++++ b/third_party/rust/packed_simd/src/api/default.rs +@@ -7,16 +7,18 @@ macro_rules! impl_default { + fn default() -> Self { + Self::splat($elem_ty::default()) + } + } + + test_if!{ + $test_tt: + paste::item! { ++ // Comparisons use integer casts within mantissa^1 range. ++ #[allow(clippy::float_cmp)] + pub mod [<$id _default>] { + use super::*; + #[cfg_attr(not(target_arch = "wasm32"), test)] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] + fn default() { + let a = $id::default(); + for i in 0..$id::lanes() { + assert_eq!(a.extract(i), $elem_ty::default()); + } +diff --git a/third_party/rust/packed_simd/src/api/from/from_array.rs b/third_party/rust/packed_simd/src/api/from/from_array.rs +--- a/third_party/rust/packed_simd/src/api/from/from_array.rs ++++ b/third_party/rust/packed_simd/src/api/from/from_array.rs +@@ -51,16 +51,18 @@ macro_rules! impl_from_array { + unsafe { U { array: self }.vec } + } + } + */ + + test_if! { + $test_tt: + paste::item! { ++ // Comparisons use integer casts within mantissa^1 range. ++ #[allow(clippy::float_cmp)] + mod [<$id _from>] { + use super::*; + #[test] + fn array() { + let vec: $id = Default::default(); + + // FIXME: Workaround for arrays with more than 32 + // elements. +diff --git a/third_party/rust/packed_simd/src/api/hash.rs b/third_party/rust/packed_simd/src/api/hash.rs +--- a/third_party/rust/packed_simd/src/api/hash.rs ++++ b/third_party/rust/packed_simd/src/api/hash.rs +@@ -31,16 +31,18 @@ macro_rules! impl_hash { + crate::mem::size_of::(), + crate::mem::size_of::<$id>() + ); + #[allow(deprecated)] + let mut a_hash = SipHasher13::new(); + let mut v_hash = a_hash.clone(); + a.hash(&mut a_hash); + ++ // Integer within mantissa^1 range. ++ #[allow(clippy::float_cmp)] + let v = $id::splat(42 as $elem_ty); + v.hash(&mut v_hash); + assert_eq!(a_hash.finish(), v_hash.finish()); + } + } + } + } + }; +diff --git a/third_party/rust/packed_simd/src/api/into_bits/arch_specific.rs b/third_party/rust/packed_simd/src/api/into_bits/arch_specific.rs +--- a/third_party/rust/packed_simd/src/api/into_bits/arch_specific.rs ++++ b/third_party/rust/packed_simd/src/api/into_bits/arch_specific.rs +@@ -1,11 +1,11 @@ + //! `FromBits` and `IntoBits` between portable vector types and the + //! architecture-specific vector types. +-#![rustfmt::skip] ++#[rustfmt::skip] + + // FIXME: MIPS FromBits/IntoBits + + #[allow(unused)] + use crate::*; + + /// This macro implements FromBits for the portable and the architecture + /// specific vector types. +@@ -79,17 +79,16 @@ macro_rules! impl_arch { + } + + //////////////////////////////////////////////////////////////////////////////// + // Implementations for the 64-bit wide vector types: + + // FIXME: 64-bit single element types + // FIXME: arm/aarch float16x4_t missing + impl_arch!( +- [x86["x86"]: __m64], [x86_64["x86_64"]: __m64], + [arm["arm"]: int8x8_t, uint8x8_t, poly8x8_t, int16x4_t, uint16x4_t, + poly16x4_t, int32x2_t, uint32x2_t, float32x2_t, int64x1_t, + uint64x1_t], + [aarch64["aarch64"]: int8x8_t, uint8x8_t, poly8x8_t, int16x4_t, uint16x4_t, + poly16x4_t, int32x2_t, uint32x2_t, float32x2_t, int64x1_t, uint64x1_t, + float64x1_t] | + from: i8x8, u8x8, m8x8, i16x4, u16x4, m16x4, i32x2, u32x2, f32x2, m32x2 | + into: i8x8, u8x8, i16x4, u16x4, i32x2, u32x2, f32x2 | +diff --git a/third_party/rust/packed_simd/src/api/into_bits/v128.rs b/third_party/rust/packed_simd/src/api/into_bits/v128.rs +--- a/third_party/rust/packed_simd/src/api/into_bits/v128.rs ++++ b/third_party/rust/packed_simd/src/api/into_bits/v128.rs +@@ -1,10 +1,10 @@ + //! `FromBits` and `IntoBits` implementations for portable 128-bit wide vectors +-#![rustfmt::skip] ++#[rustfmt::skip] + + #[allow(unused)] // wasm_bindgen_test + use crate::*; + + impl_from_bits!(i8x16[test_v128]: u8x16, m8x16, i16x8, u16x8, m16x8, i32x4, u32x4, f32x4, m32x4, i64x2, u64x2, f64x2, m64x2, i128x1, u128x1, m128x1); + impl_from_bits!(u8x16[test_v128]: i8x16, m8x16, i16x8, u16x8, m16x8, i32x4, u32x4, f32x4, m32x4, i64x2, u64x2, f64x2, m64x2, i128x1, u128x1, m128x1); + impl_from_bits!(m8x16[test_v128]: m16x8, m32x4, m64x2, m128x1); + +diff --git a/third_party/rust/packed_simd/src/api/into_bits/v16.rs b/third_party/rust/packed_simd/src/api/into_bits/v16.rs +--- a/third_party/rust/packed_simd/src/api/into_bits/v16.rs ++++ b/third_party/rust/packed_simd/src/api/into_bits/v16.rs +@@ -1,9 +1,9 @@ + //! `FromBits` and `IntoBits` implementations for portable 16-bit wide vectors +-#![rustfmt::skip] ++#[rustfmt::skip] + + #[allow(unused)] // wasm_bindgen_test + use crate::*; + + impl_from_bits!(i8x2[test_v16]: u8x2, m8x2); + impl_from_bits!(u8x2[test_v16]: i8x2, m8x2); + // note: m8x2 cannot be constructed from all i8x2 or u8x2 bit patterns +diff --git a/third_party/rust/packed_simd/src/api/into_bits/v256.rs b/third_party/rust/packed_simd/src/api/into_bits/v256.rs +--- a/third_party/rust/packed_simd/src/api/into_bits/v256.rs ++++ b/third_party/rust/packed_simd/src/api/into_bits/v256.rs +@@ -1,10 +1,10 @@ + //! `FromBits` and `IntoBits` implementations for portable 256-bit wide vectors +-#![rustfmt::skip] ++#[rustfmt::skip] + + #[allow(unused)] // wasm_bindgen_test + use crate::*; + + impl_from_bits!(i8x32[test_v256]: u8x32, m8x32, i16x16, u16x16, m16x16, i32x8, u32x8, f32x8, m32x8, i64x4, u64x4, f64x4, m64x4, i128x2, u128x2, m128x2); + impl_from_bits!(u8x32[test_v256]: i8x32, m8x32, i16x16, u16x16, m16x16, i32x8, u32x8, f32x8, m32x8, i64x4, u64x4, f64x4, m64x4, i128x2, u128x2, m128x2); + impl_from_bits!(m8x32[test_v256]: m16x16, m32x8, m64x4, m128x2); + +diff --git a/third_party/rust/packed_simd/src/api/into_bits/v32.rs b/third_party/rust/packed_simd/src/api/into_bits/v32.rs +--- a/third_party/rust/packed_simd/src/api/into_bits/v32.rs ++++ b/third_party/rust/packed_simd/src/api/into_bits/v32.rs +@@ -1,10 +1,10 @@ + //! `FromBits` and `IntoBits` implementations for portable 32-bit wide vectors +-#![rustfmt::skip] ++#[rustfmt::skip] + + #[allow(unused)] // wasm_bindgen_test + use crate::*; + + impl_from_bits!(i8x4[test_v32]: u8x4, m8x4, i16x2, u16x2, m16x2); + impl_from_bits!(u8x4[test_v32]: i8x4, m8x4, i16x2, u16x2, m16x2); + impl_from_bits!(m8x4[test_v32]: m16x2); + +diff --git a/third_party/rust/packed_simd/src/api/into_bits/v512.rs b/third_party/rust/packed_simd/src/api/into_bits/v512.rs +--- a/third_party/rust/packed_simd/src/api/into_bits/v512.rs ++++ b/third_party/rust/packed_simd/src/api/into_bits/v512.rs +@@ -1,10 +1,10 @@ + //! `FromBits` and `IntoBits` implementations for portable 512-bit wide vectors +-#![rustfmt::skip] ++#[rustfmt::skip] + + #[allow(unused)] // wasm_bindgen_test + use crate::*; + + impl_from_bits!(i8x64[test_v512]: u8x64, m8x64, i16x32, u16x32, m16x32, i32x16, u32x16, f32x16, m32x16, i64x8, u64x8, f64x8, m64x8, i128x4, u128x4, m128x4); + impl_from_bits!(u8x64[test_v512]: i8x64, m8x64, i16x32, u16x32, m16x32, i32x16, u32x16, f32x16, m32x16, i64x8, u64x8, f64x8, m64x8, i128x4, u128x4, m128x4); + impl_from_bits!(m8x64[test_v512]: m16x32, m32x16, m64x8, m128x4); + +diff --git a/third_party/rust/packed_simd/src/api/into_bits/v64.rs b/third_party/rust/packed_simd/src/api/into_bits/v64.rs +--- a/third_party/rust/packed_simd/src/api/into_bits/v64.rs ++++ b/third_party/rust/packed_simd/src/api/into_bits/v64.rs +@@ -1,10 +1,10 @@ + //! `FromBits` and `IntoBits` implementations for portable 64-bit wide vectors +-#![rustfmt::skip] ++#[rustfmt::skip] + + #[allow(unused)] // wasm_bindgen_test + use crate::*; + + impl_from_bits!(i8x8[test_v64]: u8x8, m8x8, i16x4, u16x4, m16x4, i32x2, u32x2, f32x2, m32x2); + impl_from_bits!(u8x8[test_v64]: i8x8, m8x8, i16x4, u16x4, m16x4, i32x2, u32x2, f32x2, m32x2); + impl_from_bits!(m8x8[test_v64]: m16x4, m32x2); + +diff --git a/third_party/rust/packed_simd/src/api/minimal/iuf.rs b/third_party/rust/packed_simd/src/api/minimal/iuf.rs +--- a/third_party/rust/packed_simd/src/api/minimal/iuf.rs ++++ b/third_party/rust/packed_simd/src/api/minimal/iuf.rs +@@ -48,17 +48,17 @@ macro_rules! impl_minimal_iuf { + #[inline] + pub fn extract(self, index: usize) -> $elem_ty { + assert!(index < $elem_count); + unsafe { self.extract_unchecked(index) } + } + + /// Extracts the value at `index`. + /// +- /// # Precondition ++ /// # Safety + /// + /// If `index >= Self::lanes()` the behavior is undefined. + #[inline] + pub unsafe fn extract_unchecked(self, index: usize) -> $elem_ty { + use crate::llvm::simd_extract; + let e: $ielem_ty = simd_extract(self.0, index as u32); + e as $elem_ty + } +@@ -75,17 +75,17 @@ macro_rules! impl_minimal_iuf { + ] + pub fn replace(self, index: usize, new_value: $elem_ty) -> Self { + assert!(index < $elem_count); + unsafe { self.replace_unchecked(index, new_value) } + } + + /// Returns a new vector where the value at `index` is replaced by `new_value`. + /// +- /// # Precondition ++ /// # Safety + /// + /// If `index >= Self::lanes()` the behavior is undefined. + #[inline] + #[must_use = "replace_unchecked does not modify the original value - \ + it returns a new vector with the value at `index` \ + replaced by `new_value`d" + ] + pub unsafe fn replace_unchecked( +@@ -96,16 +96,18 @@ macro_rules! impl_minimal_iuf { + use crate::llvm::simd_insert; + Simd(simd_insert(self.0, index as u32, new_value as $ielem_ty)) + } + } + + test_if!{ + $test_tt: + paste::item! { ++ // Comparisons use integer casts within mantissa^1 range. ++ #[allow(clippy::float_cmp)] + pub mod [<$id _minimal>] { + use super::*; + #[cfg_attr(not(target_arch = "wasm32"), test)] + #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] + fn minimal() { + // lanes: + assert_eq!($elem_count, $id::lanes()); + +diff --git a/third_party/rust/packed_simd/src/api/minimal/mask.rs b/third_party/rust/packed_simd/src/api/minimal/mask.rs +--- a/third_party/rust/packed_simd/src/api/minimal/mask.rs ++++ b/third_party/rust/packed_simd/src/api/minimal/mask.rs +@@ -53,16 +53,18 @@ macro_rules! impl_minimal_mask { + #[inline] + pub fn extract(self, index: usize) -> bool { + assert!(index < $elem_count); + unsafe { self.extract_unchecked(index) } + } + + /// Extracts the value at `index`. + /// ++ /// # Safety ++ /// + /// If `index >= Self::lanes()` the behavior is undefined. + #[inline] + pub unsafe fn extract_unchecked(self, index: usize) -> bool { + use crate::llvm::simd_extract; + let x: $ielem_ty = simd_extract(self.0, index as u32); + x != 0 + } + +@@ -80,19 +82,19 @@ macro_rules! impl_minimal_mask { + pub fn replace(self, index: usize, new_value: bool) -> Self { + assert!(index < $elem_count); + unsafe { self.replace_unchecked(index, new_value) } + } + + /// Returns a new vector where the value at `index` is replaced by + /// `new_value`. + /// +- /// # Panics ++ /// # Safety + /// +- /// If `index >= Self::lanes()`. ++ /// If `index >= Self::lanes()` the behavior is undefined. + #[inline] + #[must_use = "replace_unchecked does not modify the original value - \ + it returns a new vector with the value at `index` \ + replaced by `new_value`d" + ] + pub unsafe fn replace_unchecked( + self, + index: usize, +diff --git a/third_party/rust/packed_simd/src/api/minimal/ptr.rs b/third_party/rust/packed_simd/src/api/minimal/ptr.rs +--- a/third_party/rust/packed_simd/src/api/minimal/ptr.rs ++++ b/third_party/rust/packed_simd/src/api/minimal/ptr.rs +@@ -63,17 +63,17 @@ macro_rules! impl_minimal_p { + #[inline] + pub fn extract(self, index: usize) -> $elem_ty { + assert!(index < $elem_count); + unsafe { self.extract_unchecked(index) } + } + + /// Extracts the value at `index`. + /// +- /// # Precondition ++ /// # Safety + /// + /// If `index >= Self::lanes()` the behavior is undefined. + #[inline] + pub unsafe fn extract_unchecked(self, index: usize) -> $elem_ty { + use crate::llvm::simd_extract; + simd_extract(self.0, index as u32) + } + +@@ -91,17 +91,17 @@ macro_rules! impl_minimal_p { + #[allow(clippy::not_unsafe_ptr_arg_deref)] + pub fn replace(self, index: usize, new_value: $elem_ty) -> Self { + assert!(index < $elem_count); + unsafe { self.replace_unchecked(index, new_value) } + } + + /// Returns a new vector where the value at `index` is replaced by `new_value`. + /// +- /// # Precondition ++ /// # Safety + /// + /// If `index >= Self::lanes()` the behavior is undefined. + #[inline] + #[must_use = "replace_unchecked does not modify the original value - \ + it returns a new vector with the value at `index` \ + replaced by `new_value`d" + ] + pub unsafe fn replace_unchecked( +@@ -210,17 +210,17 @@ macro_rules! impl_minimal_p { + impl crate::fmt::Debug for $id { + #[allow(clippy::missing_inline_in_public_items)] + fn fmt(&self, f: &mut crate::fmt::Formatter<'_>) + -> crate::fmt::Result { + write!( + f, + "{}<{}>(", + stringify!($id), +- unsafe { crate::intrinsics::type_name::() } ++ crate::intrinsics::type_name::() + )?; + for i in 0..$elem_count { + if i > 0 { + write!(f, ", ")?; + } + self.extract(i).fmt(f)?; + } + write!(f, ")") +@@ -545,21 +545,17 @@ macro_rules! impl_minimal_p { + let values = [1_i32; $elem_count]; + + let mut vec: $id = Default::default(); + let mut array = [ + $id::::null().extract(0); $elem_count + ]; + + for i in 0..$elem_count { +- let ptr = unsafe { +- crate::mem::transmute( +- &values[i] as *const i32 +- ) +- }; ++ let ptr = &values[i] as *const i32 as *mut i32; + vec = vec.replace(i, ptr); + array[i] = ptr; + } + + // FIXME: there is no impl of From<$id> for [$elem_ty; N] + // let a0 = From::from(vec); + // assert_eq!(a0, array); + #[allow(unused_assignments)] +@@ -606,30 +602,30 @@ macro_rules! impl_minimal_p { + unsafe { + assert!(slice.len() >= $elem_count); + Self::from_slice_unaligned_unchecked(slice) + } + } + + /// Instantiates a new vector with the values of the `slice`. + /// +- /// # Precondition ++ /// # Safety + /// + /// If `slice.len() < Self::lanes()` or `&slice[0]` is not aligned + /// to an `align_of::()` boundary, the behavior is undefined. + #[inline] + pub unsafe fn from_slice_aligned_unchecked(slice: &[$elem_ty]) + -> Self { + #[allow(clippy::cast_ptr_alignment)] + *(slice.get_unchecked(0) as *const $elem_ty as *const Self) + } + + /// Instantiates a new vector with the values of the `slice`. + /// +- /// # Precondition ++ /// # Safety + /// + /// If `slice.len() < Self::lanes()` the behavior is undefined. + #[inline] + pub unsafe fn from_slice_unaligned_unchecked( + slice: &[$elem_ty], + ) -> Self { + use crate::mem::size_of; + let target_ptr = +@@ -822,33 +818,33 @@ macro_rules! impl_minimal_p { + unsafe { + assert!(slice.len() >= $elem_count); + self.write_to_slice_unaligned_unchecked(slice); + } + } + + /// Writes the values of the vector to the `slice`. + /// +- /// # Precondition ++ /// # Safety + /// + /// If `slice.len() < Self::lanes()` or `&slice[0]` is not + /// aligned to an `align_of::()` boundary, the behavior is + /// undefined. + #[inline] + pub unsafe fn write_to_slice_aligned_unchecked( + self, slice: &mut [$elem_ty], + ) { + #[allow(clippy::cast_ptr_alignment)] + *(slice.get_unchecked_mut(0) as *mut $elem_ty as *mut Self) = + self; + } + + /// Writes the values of the vector to the `slice`. + /// +- /// # Precondition ++ /// # Safety + /// + /// If `slice.len() < Self::lanes()` the behavior is undefined. + #[inline] + pub unsafe fn write_to_slice_unaligned_unchecked( + self, slice: &mut [$elem_ty], + ) { + let target_ptr = + slice.get_unchecked_mut(0) as *mut $elem_ty as *mut u8; +@@ -1020,21 +1016,17 @@ macro_rules! impl_minimal_p { + + let mut vec: $id = Default::default(); + let mut array = [ + $id::::null().extract(0); + $elem_count + ]; + + for i in 0..$elem_count { +- let ptr = unsafe { +- crate::mem::transmute( +- &values[i] as *const i32 +- ) +- }; ++ let ptr = &values[i] as *const i32 as *mut i32; + vec = vec.replace(i, ptr); + array[i] = ptr; + } + + #[allow(deprecated)] + let mut a_hash = SipHasher13::new(); + let mut v_hash = a_hash.clone(); + array.hash(&mut a_hash); +@@ -1146,17 +1138,17 @@ macro_rules! impl_minimal_p { + /// allocation. For instance, no known 64-bit platform can ever + /// serve a request for 263 bytes due to page-table limitations or + /// splitting the address space. However, some 32-bit and 16-bit + /// platforms may successfully serve a request for more than + /// `isize::MAX` bytes with things like Physical Address Extension. + /// As such, memory acquired directly from allocators or memory + /// mapped files may be too large to handle with this function. + /// +- /// Consider using wrapping_offset_from instead if these constraints ++ /// Consider using `wrapping_offset_from` instead if these constraints + /// are difficult to satisfy. The only advantage of this method is + /// that it enables more aggressive compiler optimizations. + #[inline] + pub unsafe fn offset_from(self, origin: Self) -> $isize_ty { + // FIXME: should use LLVM's `sub nsw nuw`. + self.wrapping_offset_from(origin) + } + +diff --git a/third_party/rust/packed_simd/src/api/ops/vector_float_min_max.rs b/third_party/rust/packed_simd/src/api/ops/vector_float_min_max.rs +--- a/third_party/rust/packed_simd/src/api/ops/vector_float_min_max.rs ++++ b/third_party/rust/packed_simd/src/api/ops/vector_float_min_max.rs +@@ -21,16 +21,21 @@ macro_rules! impl_ops_vector_float_min_m + pub fn max(self, x: Self) -> Self { + use crate::llvm::simd_fmax; + unsafe { Simd(simd_fmax(self.0, x.0)) } + } + } + test_if!{ + $test_tt: + paste::item! { ++ #[cfg(not(any( ++ // FIXME: https://github.com/rust-lang-nursery/packed_simd/issues/223 ++ all(target_arch = "mips", target_endian = "big"), ++ target_arch = "mips64", ++ )))] + pub mod [<$id _ops_vector_min_max>] { + use super::*; + #[cfg_attr(not(target_arch = "wasm32"), test)] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] + fn min_max() { + let n = crate::$elem_ty::NAN; + let o = $id::splat(1. as $elem_ty); + let t = $id::splat(2. as $elem_ty); + +diff --git a/third_party/rust/packed_simd/src/api/ptr/gather_scatter.rs b/third_party/rust/packed_simd/src/api/ptr/gather_scatter.rs +--- a/third_party/rust/packed_simd/src/api/ptr/gather_scatter.rs ++++ b/third_party/rust/packed_simd/src/api/ptr/gather_scatter.rs +@@ -44,19 +44,19 @@ macro_rules! impl_ptr_read { + let mut v = [0_i32; $elem_count]; + for i in 0..$elem_count { + v[i] = i as i32; + } + + let mut ptr = $id::::null(); + + for i in 0..$elem_count { +- ptr = ptr.replace(i, unsafe { +- crate::mem::transmute(&v[i] as *const i32) +- }); ++ ptr = ptr.replace(i, ++ &v[i] as *const i32 as *mut i32 ++ ); + } + + // all mask elements are true: + let mask = $mask_ty::splat(true); + let def = Simd::<[i32; $elem_count]>::splat(42_i32); + let r: Simd<[i32; $elem_count]> = unsafe { + ptr.read(mask, def) + }; +@@ -130,42 +130,18 @@ macro_rules! impl_ptr_write { + #[inline] + pub unsafe fn write( + self, mask: Simd<[M; $elem_count]>, + value: Simd<[T; $elem_count]>, + ) where + M: sealed::Mask, + [M; $elem_count]: sealed::SimdArray, + { +- // FIXME: +- // https://github.com/rust-lang-nursery/packed_simd/issues/85 +- #[cfg(not(target_arch = "mips"))] +- { +- use crate::llvm::simd_scatter; +- simd_scatter(value.0, self.0, mask.0) +- } +- #[cfg(target_arch = "mips")] +- { +- let m_ptr = +- &mask as *const Simd<[M; $elem_count]> as *const M; +- for i in 0..$elem_count { +- let m = ptr::read(m_ptr.add(i)); +- if m.test() { +- let t_ptr = &self +- as *const Simd<[*mut T; $elem_count]> +- as *mut *mut T; +- let v_ptr = &value as *const Simd<[T; $elem_count]> +- as *const T; +- ptr::write( +- ptr::read(t_ptr.add(i)), +- ptr::read(v_ptr.add(i)), +- ); +- } +- } +- } ++ use crate::llvm::simd_scatter; ++ simd_scatter(value.0, self.0, mask.0) + } + } + + test_if! { + $test_tt: + paste::item! { + mod [<$id _write>] { + use super::*; +@@ -180,17 +156,17 @@ macro_rules! impl_ptr_write { + for i in 0..$elem_count { + arr[i] = i as i32; + } + // arr = [0, 1, 2, ...] + + let mut ptr = $id::::null(); + for i in 0..$elem_count { + ptr = ptr.replace(i, unsafe { +- crate::mem::transmute(arr.as_ptr().add(i)) ++ arr.as_ptr().add(i) as *mut i32 + }); + } + // ptr = [&arr[0], &arr[1], ...] + + // write `fourty_two` to all elements of `v` + { + let backup = arr; + unsafe { +diff --git a/third_party/rust/packed_simd/src/api/reductions/float_arithmetic.rs b/third_party/rust/packed_simd/src/api/reductions/float_arithmetic.rs +--- a/third_party/rust/packed_simd/src/api/reductions/float_arithmetic.rs ++++ b/third_party/rust/packed_simd/src/api/reductions/float_arithmetic.rs +@@ -88,16 +88,18 @@ macro_rules! impl_reduction_float_arithm + fn product>(iter: I) -> $id { + iter.fold($id::splat(1.), |a, b| crate::ops::Mul::mul(a, *b)) + } + } + + test_if! { + $test_tt: + paste::item! { ++ // Comparisons use integer casts within mantissa^1 range. ++ #[allow(clippy::float_cmp)] + pub mod [<$id _reduction_float_arith>] { + use super::*; + fn alternating(x: usize) -> $id { + let mut v = $id::splat(1 as $elem_ty); + for i in 0..$id::lanes() { + if i % x == 0 { + v = v.replace(i, 2 as $elem_ty); + } +@@ -220,17 +222,17 @@ macro_rules! impl_reduction_float_arithm + } + + let mut start = crate::$elem_ty::EPSILON; + let mut scalar_reduction = 0. as $elem_ty; + + let mut v = $id::splat(0. as $elem_ty); + for i in 0..$id::lanes() { + let c = if i % 2 == 0 { 1e3 } else { -1. }; +- start *= 3.14 * c; ++ start *= ::core::$elem_ty::consts::PI * c; + scalar_reduction += start; + v = v.replace(i, start); + } + let simd_reduction = v.sum(); + + let mut a = [0. as $elem_ty; $id::lanes()]; + v.write_to_slice_unaligned(&mut a); + let tree_reduction = tree_reduce_sum(&a); +@@ -252,16 +254,17 @@ macro_rules! impl_reduction_float_arithm + scalar_reduction + ); + } + + #[cfg_attr(not(target_arch = "wasm32"), test)] + #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] + #[allow(unused, dead_code)] + fn product_roundoff() { ++ use ::core::convert::TryInto; + // Performs a tree-reduction + fn tree_reduce_product(a: &[$elem_ty]) -> $elem_ty { + assert!(!a.is_empty()); + if a.len() == 1 { + a[0] + } else if a.len() == 2 { + a[0] * a[1] + } else { +@@ -273,35 +276,37 @@ macro_rules! impl_reduction_float_arithm + } + + let mut start = crate::$elem_ty::EPSILON; + let mut scalar_reduction = 1. as $elem_ty; + + let mut v = $id::splat(0. as $elem_ty); + for i in 0..$id::lanes() { + let c = if i % 2 == 0 { 1e3 } else { -1. }; +- start *= 3.14 * c; ++ start *= ::core::$elem_ty::consts::PI * c; + scalar_reduction *= start; + v = v.replace(i, start); + } + let simd_reduction = v.product(); + + let mut a = [0. as $elem_ty; $id::lanes()]; + v.write_to_slice_unaligned(&mut a); + let tree_reduction = tree_reduce_product(&a); + +- // tolerate 1 ULP difference: ++ // FIXME: Too imprecise, even only for product(f32x8). ++ // Figure out how to narrow this down. ++ let ulp_limit = $id::lanes() / 2; + let red_bits = simd_reduction.to_bits(); + let tree_bits = tree_reduction.to_bits(); + assert!( + if red_bits > tree_bits { + red_bits - tree_bits + } else { + tree_bits - red_bits +- } < 2, ++ } < ulp_limit.try_into().unwrap(), + "vector: {:?} | simd_reduction: {:?} | \ + tree_reduction: {} | scalar_reduction: {}", + v, + simd_reduction, + tree_reduction, + scalar_reduction + ); + } +diff --git a/third_party/rust/packed_simd/src/api/reductions/min_max.rs b/third_party/rust/packed_simd/src/api/reductions/min_max.rs +--- a/third_party/rust/packed_simd/src/api/reductions/min_max.rs ++++ b/third_party/rust/packed_simd/src/api/reductions/min_max.rs +@@ -71,16 +71,18 @@ macro_rules! impl_reduction_min_max { + x = x.min(self.extract(i)); + } + x + } + } + } + test_if! {$test_tt: + paste::item! { ++ // Comparisons use integer casts within mantissa^1 range. ++ #[allow(clippy::float_cmp)] + pub mod [<$id _reduction_min_max>] { + use super::*; + #[cfg_attr(not(target_arch = "wasm32"), test)] + #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] + pub fn max_element() { + let v = $id::splat(0 as $elem_ty); + assert_eq!(v.max_element(), 0 as $elem_ty); + if $id::lanes() > 1 { +@@ -119,16 +121,18 @@ macro_rules! impl_reduction_min_max { + }; + } + + macro_rules! test_reduction_float_min_max { + ([$elem_ty:ident; $elem_count:expr]: $id:ident | $test_tt:tt) => { + test_if!{ + $test_tt: + paste::item! { ++ // Comparisons use integer casts within mantissa^1 range. ++ #[allow(clippy::float_cmp)] + pub mod [<$id _reduction_min_max_nan>] { + use super::*; + #[cfg_attr(not(target_arch = "wasm32"), test)] + #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] + fn min_element_test() { + let n = crate::$elem_ty::NAN; + + assert_eq!(n.min(-3.), -3.); +diff --git a/third_party/rust/packed_simd/src/api/slice/from_slice.rs b/third_party/rust/packed_simd/src/api/slice/from_slice.rs +--- a/third_party/rust/packed_simd/src/api/slice/from_slice.rs ++++ b/third_party/rust/packed_simd/src/api/slice/from_slice.rs +@@ -33,17 +33,17 @@ macro_rules! impl_slice_from_slice { + unsafe { + assert!(slice.len() >= $elem_count); + Self::from_slice_unaligned_unchecked(slice) + } + } + + /// Instantiates a new vector with the values of the `slice`. + /// +- /// # Precondition ++ /// # Safety + /// + /// If `slice.len() < Self::lanes()` or `&slice[0]` is not aligned + /// to an `align_of::()` boundary, the behavior is undefined. + #[inline] + pub unsafe fn from_slice_aligned_unchecked( + slice: &[$elem_ty], + ) -> Self { + debug_assert!(slice.len() >= $elem_count); +@@ -54,17 +54,17 @@ macro_rules! impl_slice_from_slice { + ); + + #[allow(clippy::cast_ptr_alignment)] + *(target_ptr as *const Self) + } + + /// Instantiates a new vector with the values of the `slice`. + /// +- /// # Precondition ++ /// # Safety + /// + /// If `slice.len() < Self::lanes()` the behavior is undefined. + #[inline] + pub unsafe fn from_slice_unaligned_unchecked( + slice: &[$elem_ty], + ) -> Self { + use crate::mem::size_of; + debug_assert!(slice.len() >= $elem_count); +@@ -79,16 +79,18 @@ macro_rules! impl_slice_from_slice { + ); + x + } + } + + test_if! { + $test_tt: + paste::item! { ++ // Comparisons use integer casts within mantissa^1 range. ++ #[allow(clippy::float_cmp)] + pub mod [<$id _slice_from_slice>] { + use super::*; + use crate::iter::Iterator; + + #[cfg_attr(not(target_arch = "wasm32"), test)] + #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] + fn from_slice_unaligned() { + let mut unaligned = [42 as $elem_ty; $id::lanes() + 1]; +diff --git a/third_party/rust/packed_simd/src/api/slice/write_to_slice.rs b/third_party/rust/packed_simd/src/api/slice/write_to_slice.rs +--- a/third_party/rust/packed_simd/src/api/slice/write_to_slice.rs ++++ b/third_party/rust/packed_simd/src/api/slice/write_to_slice.rs +@@ -34,17 +34,17 @@ macro_rules! impl_slice_write_to_slice { + unsafe { + assert!(slice.len() >= $elem_count); + self.write_to_slice_unaligned_unchecked(slice); + } + } + + /// Writes the values of the vector to the `slice`. + /// +- /// # Precondition ++ /// # Safety + /// + /// If `slice.len() < Self::lanes()` or `&slice[0]` is not + /// aligned to an `align_of::()` boundary, the behavior is + /// undefined. + #[inline] + pub unsafe fn write_to_slice_aligned_unchecked( + self, slice: &mut [$elem_ty], + ) { +@@ -59,17 +59,17 @@ macro_rules! impl_slice_write_to_slice { + #[allow(clippy::cast_ptr_alignment)] + #[allow(clippy::cast_ptr_alignment)] + #[allow(clippy::cast_ptr_alignment)] + *(target_ptr as *mut Self) = self; + } + + /// Writes the values of the vector to the `slice`. + /// +- /// # Precondition ++ /// # Safety + /// + /// If `slice.len() < Self::lanes()` the behavior is undefined. + #[inline] + pub unsafe fn write_to_slice_unaligned_unchecked( + self, slice: &mut [$elem_ty], + ) { + debug_assert!(slice.len() >= $elem_count); + let target_ptr = +@@ -81,16 +81,18 @@ macro_rules! impl_slice_write_to_slice { + crate::mem::size_of::(), + ); + } + } + + test_if! { + $test_tt: + paste::item! { ++ // Comparisons use integer casts within mantissa^1 range. ++ #[allow(clippy::float_cmp)] + pub mod [<$id _slice_write_to_slice>] { + use super::*; + use crate::iter::Iterator; + + #[cfg_attr(not(target_arch = "wasm32"), test)] + #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] + fn write_to_slice_unaligned() { + let mut unaligned = [0 as $elem_ty; $id::lanes() + 1]; +diff --git a/third_party/rust/packed_simd/src/codegen.rs b/third_party/rust/packed_simd/src/codegen.rs +--- a/third_party/rust/packed_simd/src/codegen.rs ++++ b/third_party/rust/packed_simd/src/codegen.rs +@@ -11,23 +11,26 @@ crate mod swap_bytes; + macro_rules! impl_simd_array { + ([$elem_ty:ident; $elem_count:expr]: + $tuple_id:ident | $($elem_tys:ident),*) => { + #[derive(Copy, Clone)] + #[repr(simd)] + pub struct $tuple_id($(crate $elem_tys),*); + //^^^^^^^ leaked through SimdArray + ++ impl crate::sealed::Seal for [$elem_ty; $elem_count] {} ++ + impl crate::sealed::SimdArray for [$elem_ty; $elem_count] { + type Tuple = $tuple_id; + type T = $elem_ty; + const N: usize = $elem_count; + type NT = [u32; $elem_count]; + } + ++ impl crate::sealed::Seal for $tuple_id {} + impl crate::sealed::Simd for $tuple_id { + type Element = $elem_ty; + const LANES: usize = $elem_count; + type LanesType = [u32; $elem_count]; + } + + } + } +diff --git a/third_party/rust/packed_simd/src/codegen/bit_manip.rs b/third_party/rust/packed_simd/src/codegen/bit_manip.rs +--- a/third_party/rust/packed_simd/src/codegen/bit_manip.rs ++++ b/third_party/rust/packed_simd/src/codegen/bit_manip.rs +@@ -1,10 +1,10 @@ + //! LLVM bit manipulation intrinsics. +-#![rustfmt::skip] ++#[rustfmt::skip] + + use crate::*; + + #[allow(improper_ctypes, dead_code)] + extern "C" { + #[link_name = "llvm.ctlz.v2i8"] + fn ctlz_u8x2(x: u8x2, is_zero_undef: bool) -> u8x2; + #[link_name = "llvm.ctlz.v4i8"] +diff --git a/third_party/rust/packed_simd/src/codegen/llvm.rs b/third_party/rust/packed_simd/src/codegen/llvm.rs +--- a/third_party/rust/packed_simd/src/codegen/llvm.rs ++++ b/third_party/rust/packed_simd/src/codegen/llvm.rs +@@ -5,41 +5,47 @@ use crate::sealed::Shuffle; + #[allow(unused_imports)] // FIXME: spurious warning? + use crate::sealed::Simd; + + // Shuffle intrinsics: expanded in users' crates, therefore public. + extern "platform-intrinsic" { + // FIXME: Passing this intrinsics an `idx` array with an index that is + // out-of-bounds will produce a monomorphization-time error. + // https://github.com/rust-lang-nursery/packed_simd/issues/21 ++ #[rustc_args_required_const(2)] + pub fn simd_shuffle2(x: T, y: T, idx: [u32; 2]) -> U + where + T: Simd, + ::Element: Shuffle<[u32; 2], Output = U>; + ++ #[rustc_args_required_const(2)] + pub fn simd_shuffle4(x: T, y: T, idx: [u32; 4]) -> U + where + T: Simd, + ::Element: Shuffle<[u32; 4], Output = U>; + ++ #[rustc_args_required_const(2)] + pub fn simd_shuffle8(x: T, y: T, idx: [u32; 8]) -> U + where + T: Simd, + ::Element: Shuffle<[u32; 8], Output = U>; + ++ #[rustc_args_required_const(2)] + pub fn simd_shuffle16(x: T, y: T, idx: [u32; 16]) -> U + where + T: Simd, + ::Element: Shuffle<[u32; 16], Output = U>; + ++ #[rustc_args_required_const(2)] + pub fn simd_shuffle32(x: T, y: T, idx: [u32; 32]) -> U + where + T: Simd, + ::Element: Shuffle<[u32; 32], Output = U>; + ++ #[rustc_args_required_const(2)] + pub fn simd_shuffle64(x: T, y: T, idx: [u32; 64]) -> U + where + T: Simd, + ::Element: Shuffle<[u32; 64], Output = U>; + } + + pub use self::simd_shuffle16 as __shuffle_vector16; + pub use self::simd_shuffle2 as __shuffle_vector2; +@@ -91,9 +97,11 @@ extern "platform-intrinsic" { + crate fn simd_fmin(a: T, b: T) -> T; + crate fn simd_fmax(a: T, b: T) -> T; + + crate fn simd_fsqrt(a: T) -> T; + crate fn simd_fma(a: T, b: T, c: T) -> T; + + crate fn simd_gather(value: T, pointers: P, mask: M) -> T; + crate fn simd_scatter(value: T, pointers: P, mask: M); ++ ++ crate fn simd_bitmask(value: T) -> U; + } +diff --git a/third_party/rust/packed_simd/src/codegen/reductions/mask/x86.rs b/third_party/rust/packed_simd/src/codegen/reductions/mask/x86.rs +--- a/third_party/rust/packed_simd/src/codegen/reductions/mask/x86.rs ++++ b/third_party/rust/packed_simd/src/codegen/reductions/mask/x86.rs +@@ -14,23 +14,17 @@ mod avx; + + #[cfg(target_feature = "avx2")] + #[macro_use] + mod avx2; + + /// x86 64-bit m8x8 implementation + macro_rules! x86_m8x8_impl { + ($id:ident) => { +- cfg_if! { +- if #[cfg(all(target_arch = "x86_64", target_feature = "sse"))] { +- x86_m8x8_sse_impl!($id); +- } else { +- fallback_impl!($id); +- } +- } ++ fallback_impl!($id); + }; + } + + /// x86 128-bit m8x16 implementation + macro_rules! x86_m8x16_impl { + ($id:ident) => { + cfg_if! { + if #[cfg(target_feature = "sse2")] { +diff --git a/third_party/rust/packed_simd/src/codegen/reductions/mask/x86/sse.rs b/third_party/rust/packed_simd/src/codegen/reductions/mask/x86/sse.rs +--- a/third_party/rust/packed_simd/src/codegen/reductions/mask/x86/sse.rs ++++ b/third_party/rust/packed_simd/src/codegen/reductions/mask/x86/sse.rs +@@ -29,40 +29,8 @@ macro_rules! x86_m32x4_sse_impl { + #[cfg(target_arch = "x86_64")] + use crate::arch::x86_64::_mm_movemask_ps; + + _mm_movemask_ps(crate::mem::transmute(self)) != 0 + } + } + }; + } +- +-macro_rules! x86_m8x8_sse_impl { +- ($id:ident) => { +- impl All for $id { +- #[inline] +- #[target_feature(enable = "sse")] +- unsafe fn all(self) -> bool { +- #[cfg(target_arch = "x86")] +- use crate::arch::x86::_mm_movemask_pi8; +- #[cfg(target_arch = "x86_64")] +- use crate::arch::x86_64::_mm_movemask_pi8; +- // _mm_movemask_pi8(a) creates an 8bit mask containing the most +- // significant bit of each byte of `a`. If all bits are set, +- // then all 8 lanes of the mask are true. +- _mm_movemask_pi8(crate::mem::transmute(self)) +- == u8::max_value() as i32 +- } +- } +- impl Any for $id { +- #[inline] +- #[target_feature(enable = "sse")] +- unsafe fn any(self) -> bool { +- #[cfg(target_arch = "x86")] +- use crate::arch::x86::_mm_movemask_pi8; +- #[cfg(target_arch = "x86_64")] +- use crate::arch::x86_64::_mm_movemask_pi8; +- +- _mm_movemask_pi8(crate::mem::transmute(self)) != 0 +- } +- } +- }; +-} +diff --git a/third_party/rust/packed_simd/src/codegen/shuffle.rs b/third_party/rust/packed_simd/src/codegen/shuffle.rs +--- a/third_party/rust/packed_simd/src/codegen/shuffle.rs ++++ b/third_party/rust/packed_simd/src/codegen/shuffle.rs +@@ -1,302 +1,150 @@ + //! Implementations of the `ShuffleResult` trait for the different numbers of + //! lanes and vector element types. + + use crate::masks::*; +-use crate::sealed::Shuffle; +- +-impl Shuffle<[u32; 2]> for i8 { +- type Output = crate::codegen::i8x2; +-} +-impl Shuffle<[u32; 4]> for i8 { +- type Output = crate::codegen::i8x4; +-} +-impl Shuffle<[u32; 8]> for i8 { +- type Output = crate::codegen::i8x8; +-} +-impl Shuffle<[u32; 16]> for i8 { +- type Output = crate::codegen::i8x16; +-} +-impl Shuffle<[u32; 32]> for i8 { +- type Output = crate::codegen::i8x32; +-} +-impl Shuffle<[u32; 64]> for i8 { +- type Output = crate::codegen::i8x64; +-} +- +-impl Shuffle<[u32; 2]> for u8 { +- type Output = crate::codegen::u8x2; +-} +-impl Shuffle<[u32; 4]> for u8 { +- type Output = crate::codegen::u8x4; +-} +-impl Shuffle<[u32; 8]> for u8 { +- type Output = crate::codegen::u8x8; +-} +-impl Shuffle<[u32; 16]> for u8 { +- type Output = crate::codegen::u8x16; +-} +-impl Shuffle<[u32; 32]> for u8 { +- type Output = crate::codegen::u8x32; +-} +-impl Shuffle<[u32; 64]> for u8 { +- type Output = crate::codegen::u8x64; +-} +- +-impl Shuffle<[u32; 2]> for m8 { +- type Output = crate::codegen::m8x2; +-} +-impl Shuffle<[u32; 4]> for m8 { +- type Output = crate::codegen::m8x4; +-} +-impl Shuffle<[u32; 8]> for m8 { +- type Output = crate::codegen::m8x8; +-} +-impl Shuffle<[u32; 16]> for m8 { +- type Output = crate::codegen::m8x16; +-} +-impl Shuffle<[u32; 32]> for m8 { +- type Output = crate::codegen::m8x32; +-} +-impl Shuffle<[u32; 64]> for m8 { +- type Output = crate::codegen::m8x64; +-} ++use crate::sealed::{Shuffle, Seal}; + +-impl Shuffle<[u32; 2]> for i16 { +- type Output = crate::codegen::i16x2; +-} +-impl Shuffle<[u32; 4]> for i16 { +- type Output = crate::codegen::i16x4; +-} +-impl Shuffle<[u32; 8]> for i16 { +- type Output = crate::codegen::i16x8; +-} +-impl Shuffle<[u32; 16]> for i16 { +- type Output = crate::codegen::i16x16; +-} +-impl Shuffle<[u32; 32]> for i16 { +- type Output = crate::codegen::i16x32; +-} +- +-impl Shuffle<[u32; 2]> for u16 { +- type Output = crate::codegen::u16x2; +-} +-impl Shuffle<[u32; 4]> for u16 { +- type Output = crate::codegen::u16x4; +-} +-impl Shuffle<[u32; 8]> for u16 { +- type Output = crate::codegen::u16x8; +-} +-impl Shuffle<[u32; 16]> for u16 { +- type Output = crate::codegen::u16x16; +-} +-impl Shuffle<[u32; 32]> for u16 { +- type Output = crate::codegen::u16x32; +-} +- +-impl Shuffle<[u32; 2]> for m16 { +- type Output = crate::codegen::m16x2; +-} +-impl Shuffle<[u32; 4]> for m16 { +- type Output = crate::codegen::m16x4; +-} +-impl Shuffle<[u32; 8]> for m16 { +- type Output = crate::codegen::m16x8; +-} +-impl Shuffle<[u32; 16]> for m16 { +- type Output = crate::codegen::m16x16; +-} +-impl Shuffle<[u32; 32]> for m16 { +- type Output = crate::codegen::m16x32; +-} +- +-impl Shuffle<[u32; 2]> for i32 { +- type Output = crate::codegen::i32x2; +-} +-impl Shuffle<[u32; 4]> for i32 { +- type Output = crate::codegen::i32x4; +-} +-impl Shuffle<[u32; 8]> for i32 { +- type Output = crate::codegen::i32x8; +-} +-impl Shuffle<[u32; 16]> for i32 { +- type Output = crate::codegen::i32x16; ++macro_rules! impl_shuffle { ++ ($array:ty, $base:ty, $out:ty) => { ++ impl Seal<$array> for $base {} ++ impl Shuffle<$array> for $base { ++ type Output = $out; ++ } ++ } + } + +-impl Shuffle<[u32; 2]> for u32 { +- type Output = crate::codegen::u32x2; +-} +-impl Shuffle<[u32; 4]> for u32 { +- type Output = crate::codegen::u32x4; +-} +-impl Shuffle<[u32; 8]> for u32 { +- type Output = crate::codegen::u32x8; +-} +-impl Shuffle<[u32; 16]> for u32 { +- type Output = crate::codegen::u32x16; +-} ++impl_shuffle! { [u32; 2], i8, crate::codegen::i8x2 } ++impl_shuffle! { [u32; 4], i8, crate::codegen::i8x4 } ++impl_shuffle! { [u32; 8], i8, crate::codegen::i8x8 } ++impl_shuffle! { [u32; 16], i8, crate::codegen::i8x16 } ++impl_shuffle! { [u32; 32], i8, crate::codegen::i8x32 } ++impl_shuffle! { [u32; 64], i8, crate::codegen::i8x64 } + +-impl Shuffle<[u32; 2]> for f32 { +- type Output = crate::codegen::f32x2; +-} +-impl Shuffle<[u32; 4]> for f32 { +- type Output = crate::codegen::f32x4; +-} +-impl Shuffle<[u32; 8]> for f32 { +- type Output = crate::codegen::f32x8; +-} +-impl Shuffle<[u32; 16]> for f32 { +- type Output = crate::codegen::f32x16; +-} ++impl_shuffle! { [u32; 2], u8, crate::codegen::u8x2 } ++impl_shuffle! { [u32; 4], u8, crate::codegen::u8x4 } ++impl_shuffle! { [u32; 8], u8, crate::codegen::u8x8 } ++impl_shuffle! { [u32; 16], u8, crate::codegen::u8x16 } ++impl_shuffle! { [u32; 32], u8, crate::codegen::u8x32 } ++impl_shuffle! { [u32; 64], u8, crate::codegen::u8x64 } ++ ++impl_shuffle! { [u32; 2], m8, crate::codegen::m8x2 } ++impl_shuffle! { [u32; 4], m8, crate::codegen::m8x4 } ++impl_shuffle! { [u32; 8], m8, crate::codegen::m8x8 } ++impl_shuffle! { [u32; 16], m8, crate::codegen::m8x16 } ++impl_shuffle! { [u32; 32], m8, crate::codegen::m8x32 } ++impl_shuffle! { [u32; 64], m8, crate::codegen::m8x64 } ++ ++impl_shuffle! { [u32; 2], i16, crate::codegen::i16x2 } ++impl_shuffle! { [u32; 4], i16, crate::codegen::i16x4 } ++impl_shuffle! { [u32; 8], i16, crate::codegen::i16x8 } ++impl_shuffle! { [u32; 16], i16, crate::codegen::i16x16 } ++impl_shuffle! { [u32; 32], i16, crate::codegen::i16x32 } + +-impl Shuffle<[u32; 2]> for m32 { +- type Output = crate::codegen::m32x2; +-} +-impl Shuffle<[u32; 4]> for m32 { +- type Output = crate::codegen::m32x4; +-} +-impl Shuffle<[u32; 8]> for m32 { +- type Output = crate::codegen::m32x8; +-} +-impl Shuffle<[u32; 16]> for m32 { +- type Output = crate::codegen::m32x16; +-} ++impl_shuffle! { [u32; 2], u16, crate::codegen::u16x2 } ++impl_shuffle! { [u32; 4], u16, crate::codegen::u16x4 } ++impl_shuffle! { [u32; 8], u16, crate::codegen::u16x8 } ++impl_shuffle! { [u32; 16], u16, crate::codegen::u16x16 } ++impl_shuffle! { [u32; 32], u16, crate::codegen::u16x32 } ++ ++impl_shuffle! { [u32; 2], m16, crate::codegen::m16x2 } ++impl_shuffle! { [u32; 4], m16, crate::codegen::m16x4 } ++impl_shuffle! { [u32; 8], m16, crate::codegen::m16x8 } ++impl_shuffle! { [u32; 16], m16, crate::codegen::m16x16 } + +-/* FIXME: 64-bit single element vector +-impl Shuffle<[u32; 1]> for i64 { +- type Output = crate::codegen::i64x1; +-} +-*/ +-impl Shuffle<[u32; 2]> for i64 { +- type Output = crate::codegen::i64x2; +-} +-impl Shuffle<[u32; 4]> for i64 { +- type Output = crate::codegen::i64x4; +-} +-impl Shuffle<[u32; 8]> for i64 { +- type Output = crate::codegen::i64x8; +-} ++impl_shuffle! { [u32; 2], i32, crate::codegen::i32x2 } ++impl_shuffle! { [u32; 4], i32, crate::codegen::i32x4 } ++impl_shuffle! { [u32; 8], i32, crate::codegen::i32x8 } ++impl_shuffle! { [u32; 16], i32, crate::codegen::i32x16 } ++ ++impl_shuffle! { [u32; 2], u32, crate::codegen::u32x2 } ++impl_shuffle! { [u32; 4], u32, crate::codegen::u32x4 } ++impl_shuffle! { [u32; 8], u32, crate::codegen::u32x8 } ++impl_shuffle! { [u32; 16], u32, crate::codegen::u32x16 } ++ ++impl_shuffle! { [u32; 2], f32, crate::codegen::f32x2 } ++impl_shuffle! { [u32; 4], f32, crate::codegen::f32x4 } ++impl_shuffle! { [u32; 8], f32, crate::codegen::f32x8 } ++impl_shuffle! { [u32; 16], f32, crate::codegen::f32x16 } ++ ++impl_shuffle! { [u32; 2], m32, crate::codegen::m32x2 } ++impl_shuffle! { [u32; 4], m32, crate::codegen::m32x4 } ++impl_shuffle! { [u32; 8], m32, crate::codegen::m32x8 } ++impl_shuffle! { [u32; 16], m32, crate::codegen::m32x16 } + + /* FIXME: 64-bit single element vector +-impl Shuffle<[u32; 1]> for u64 { +- type Output = crate::codegen::u64x1; +-} ++impl_shuffle! { [u32; 1], i64, crate::codegen::i64x1 } + */ +-impl Shuffle<[u32; 2]> for u64 { +- type Output = crate::codegen::u64x2; +-} +-impl Shuffle<[u32; 4]> for u64 { +- type Output = crate::codegen::u64x4; +-} +-impl Shuffle<[u32; 8]> for u64 { +- type Output = crate::codegen::u64x8; +-} ++impl_shuffle! { [u32; 2], i64, crate::codegen::i64x2 } ++impl_shuffle! { [u32; 4], i64, crate::codegen::i64x4 } ++impl_shuffle! { [u32; 8], i64, crate::codegen::i64x8 } + + /* FIXME: 64-bit single element vector +-impl Shuffle<[u32; 1]> for f64 { +- type Output = crate::codegen::f64x1; +-} ++impl_shuffle! { [u32; 1], i64, crate::codegen::i64x1 } + */ +-impl Shuffle<[u32; 2]> for f64 { +- type Output = crate::codegen::f64x2; +-} +-impl Shuffle<[u32; 4]> for f64 { +- type Output = crate::codegen::f64x4; +-} +-impl Shuffle<[u32; 8]> for f64 { +- type Output = crate::codegen::f64x8; +-} ++impl_shuffle! { [u32; 2], u64, crate::codegen::u64x2 } ++impl_shuffle! { [u32; 4], u64, crate::codegen::u64x4 } ++impl_shuffle! { [u32; 8], u64, crate::codegen::u64x8 } + + /* FIXME: 64-bit single element vector +-impl Shuffle<[u32; 1]> for m64 { +- type Output = crate::codegen::m64x1; +-} ++impl_shuffle! { [u32; 1], i64, crate::codegen::i64x1 } + */ +-impl Shuffle<[u32; 2]> for m64 { +- type Output = crate::codegen::m64x2; +-} +-impl Shuffle<[u32; 4]> for m64 { +- type Output = crate::codegen::m64x4; +-} +-impl Shuffle<[u32; 8]> for m64 { +- type Output = crate::codegen::m64x8; +-} ++impl_shuffle! { [u32; 2], f64, crate::codegen::f64x2 } ++impl_shuffle! { [u32; 4], f64, crate::codegen::f64x4 } ++impl_shuffle! { [u32; 8], f64, crate::codegen::f64x8 } ++ ++/* FIXME: 64-bit single element vector ++impl_shuffle! { [u32; 1], i64, crate::codegen::i64x1 } ++*/ ++impl_shuffle! { [u32; 2], m64, crate::codegen::m64x2 } ++impl_shuffle! { [u32; 4], m64, crate::codegen::m64x4 } ++impl_shuffle! { [u32; 8], m64, crate::codegen::m64x8 } + +-impl Shuffle<[u32; 2]> for isize { +- type Output = crate::codegen::isizex2; +-} +-impl Shuffle<[u32; 4]> for isize { +- type Output = crate::codegen::isizex4; +-} +-impl Shuffle<[u32; 8]> for isize { +- type Output = crate::codegen::isizex8; +-} ++impl_shuffle! { [u32; 2], isize, crate::codegen::isizex2 } ++impl_shuffle! { [u32; 4], isize, crate::codegen::isizex4 } ++impl_shuffle! { [u32; 8], isize, crate::codegen::isizex8 } + +-impl Shuffle<[u32; 2]> for usize { +- type Output = crate::codegen::usizex2; +-} +-impl Shuffle<[u32; 4]> for usize { +- type Output = crate::codegen::usizex4; +-} +-impl Shuffle<[u32; 8]> for usize { +- type Output = crate::codegen::usizex8; +-} ++impl_shuffle! { [u32; 2], usize, crate::codegen::usizex2 } ++impl_shuffle! { [u32; 4], usize, crate::codegen::usizex4 } ++impl_shuffle! { [u32; 8], usize, crate::codegen::usizex8 } + ++impl_shuffle! { [u32; 2], msize, crate::codegen::msizex2 } ++impl_shuffle! { [u32; 4], msize, crate::codegen::msizex4 } ++impl_shuffle! { [u32; 8], msize, crate::codegen::msizex8 } ++ ++impl Seal<[u32; 2]> for *const T {} + impl Shuffle<[u32; 2]> for *const T { + type Output = crate::codegen::cptrx2; + } ++impl Seal<[u32; 4]> for *const T {} + impl Shuffle<[u32; 4]> for *const T { + type Output = crate::codegen::cptrx4; + } ++impl Seal<[u32; 8]> for *const T {} + impl Shuffle<[u32; 8]> for *const T { + type Output = crate::codegen::cptrx8; + } + ++impl Seal<[u32; 2]> for *mut T {} + impl Shuffle<[u32; 2]> for *mut T { + type Output = crate::codegen::mptrx2; + } ++impl Seal<[u32; 4]> for *mut T {} + impl Shuffle<[u32; 4]> for *mut T { + type Output = crate::codegen::mptrx4; + } ++impl Seal<[u32; 8]> for *mut T {} + impl Shuffle<[u32; 8]> for *mut T { + type Output = crate::codegen::mptrx8; + } + +-impl Shuffle<[u32; 2]> for msize { +- type Output = crate::codegen::msizex2; +-} +-impl Shuffle<[u32; 4]> for msize { +- type Output = crate::codegen::msizex4; +-} +-impl Shuffle<[u32; 8]> for msize { +- type Output = crate::codegen::msizex8; +-} +- +-impl Shuffle<[u32; 1]> for i128 { +- type Output = crate::codegen::i128x1; +-} +-impl Shuffle<[u32; 2]> for i128 { +- type Output = crate::codegen::i128x2; +-} +-impl Shuffle<[u32; 4]> for i128 { +- type Output = crate::codegen::i128x4; +-} ++impl_shuffle! { [u32; 1], i128, crate::codegen::i128x1 } ++impl_shuffle! { [u32; 2], i128, crate::codegen::i128x2 } ++impl_shuffle! { [u32; 4], i128, crate::codegen::i128x4 } + +-impl Shuffle<[u32; 1]> for u128 { +- type Output = crate::codegen::u128x1; +-} +-impl Shuffle<[u32; 2]> for u128 { +- type Output = crate::codegen::u128x2; +-} +-impl Shuffle<[u32; 4]> for u128 { +- type Output = crate::codegen::u128x4; +-} ++impl_shuffle! { [u32; 1], u128, crate::codegen::u128x1 } ++impl_shuffle! { [u32; 2], u128, crate::codegen::u128x2 } ++impl_shuffle! { [u32; 4], u128, crate::codegen::u128x4 } + +-impl Shuffle<[u32; 1]> for m128 { +- type Output = crate::codegen::m128x1; +-} +-impl Shuffle<[u32; 2]> for m128 { +- type Output = crate::codegen::m128x2; +-} +-impl Shuffle<[u32; 4]> for m128 { +- type Output = crate::codegen::m128x4; +-} ++impl_shuffle! { [u32; 1], m128, crate::codegen::m128x1 } ++impl_shuffle! { [u32; 2], m128, crate::codegen::m128x2 } ++impl_shuffle! { [u32; 4], m128, crate::codegen::m128x4 } +diff --git a/third_party/rust/packed_simd/src/codegen/shuffle1_dyn.rs b/third_party/rust/packed_simd/src/codegen/shuffle1_dyn.rs +--- a/third_party/rust/packed_simd/src/codegen/shuffle1_dyn.rs ++++ b/third_party/rust/packed_simd/src/codegen/shuffle1_dyn.rs +@@ -23,53 +23,32 @@ macro_rules! impl_fallback { + } + } + }; + } + + macro_rules! impl_shuffle1_dyn { + (u8x8) => { + cfg_if! { +- if #[cfg(all(any(target_arch = "x86", target_arch = "x86_64"), +- target_feature = "ssse3"))] { +- impl Shuffle1Dyn for u8x8 { +- type Indices = Self; +- #[inline] +- fn shuffle1_dyn(self, indices: Self::Indices) -> Self { +- #[cfg(target_arch = "x86")] +- use crate::arch::x86::_mm_shuffle_pi8; +- #[cfg(target_arch = "x86_64")] +- use crate::arch::x86_64::_mm_shuffle_pi8; +- +- unsafe { +- crate::mem::transmute( +- _mm_shuffle_pi8( +- crate::mem::transmute(self.0), +- crate::mem::transmute(indices.0) +- ) +- ) +- } +- } +- } +- } else if #[cfg(all( ++ if #[cfg(all( + any( +- all(target_aarch = "aarch64", target_feature = "neon"), +- all(target_aarch = "arm", target_feature = "v7", ++ all(target_arch = "aarch64", target_feature = "neon"), ++ all(target_arch = "doesnotexist", target_feature = "v7", + target_feature = "neon") + ), + any(feature = "core_arch", libcore_neon) + ) + )] { + impl Shuffle1Dyn for u8x8 { + type Indices = Self; + #[inline] + fn shuffle1_dyn(self, indices: Self::Indices) -> Self { +- #[cfg(targt_arch = "aarch64")] ++ #[cfg(target_arch = "aarch64")] + use crate::arch::aarch64::vtbl1_u8; +- #[cfg(targt_arch = "arm")] ++ #[cfg(target_arch = "doesnotexist")] + use crate::arch::arm::vtbl1_u8; + + // This is safe because the binary is compiled with + // neon enabled at compile-time and can therefore only + // run on CPUs that have it enabled. + unsafe { + Simd(mem::transmute( + vtbl1_u8(mem::transmute(self.0), +@@ -101,17 +80,17 @@ macro_rules! impl_shuffle1_dyn { + unsafe { + Simd(mem::transmute( + _mm_shuffle_epi8(mem::transmute(self.0), + crate::mem::transmute(indices)) + )) + } + } + } +- } else if #[cfg(all(target_aarch = "aarch64", target_feature = "neon", ++ } else if #[cfg(all(target_arch = "aarch64", target_feature = "neon", + any(feature = "core_arch", libcore_neon)))] { + impl Shuffle1Dyn for u8x16 { + type Indices = Self; + #[inline] + fn shuffle1_dyn(self, indices: Self::Indices) -> Self { + use crate::arch::aarch64::vqtbl1q_u8; + + // This is safe because the binary is compiled with +@@ -120,17 +99,17 @@ macro_rules! impl_shuffle1_dyn { + unsafe { + Simd(mem::transmute( + vqtbl1q_u8(mem::transmute(self.0), + crate::mem::transmute(indices.0)) + )) + } + } + } +- } else if #[cfg(all(target_aarch = "arm", target_feature = "v7", ++ } else if #[cfg(all(target_arch = "doesnotexist", target_feature = "v7", + target_feature = "neon", + any(feature = "core_arch", libcore_neon)))] { + impl Shuffle1Dyn for u8x16 { + type Indices = Self; + #[inline] + fn shuffle1_dyn(self, indices: Self::Indices) -> Self { + use crate::arch::arm::vtbl2_u8; + +diff --git a/third_party/rust/packed_simd/src/codegen/vPtr.rs b/third_party/rust/packed_simd/src/codegen/vPtr.rs +--- a/third_party/rust/packed_simd/src/codegen/vPtr.rs ++++ b/third_party/rust/packed_simd/src/codegen/vPtr.rs +@@ -3,23 +3,25 @@ + macro_rules! impl_simd_ptr { + ([$ptr_ty:ty; $elem_count:expr]: $tuple_id:ident | $ty:ident + | $($tys:ty),*) => { + #[derive(Copy, Clone)] + #[repr(simd)] + pub struct $tuple_id<$ty>($(crate $tys),*); + //^^^^^^^ leaked through SimdArray + ++ impl<$ty> crate::sealed::Seal for [$ptr_ty; $elem_count] {} + impl<$ty> crate::sealed::SimdArray for [$ptr_ty; $elem_count] { + type Tuple = $tuple_id<$ptr_ty>; + type T = $ptr_ty; + const N: usize = $elem_count; + type NT = [u32; $elem_count]; + } + ++ impl<$ty> crate::sealed::Seal for $tuple_id<$ptr_ty> {} + impl<$ty> crate::sealed::Simd for $tuple_id<$ptr_ty> { + type Element = $ptr_ty; + const LANES: usize = $elem_count; + type LanesType = [u32; $elem_count]; + } + + } + } +diff --git a/third_party/rust/packed_simd/src/lib.rs b/third_party/rust/packed_simd/src/lib.rs +--- a/third_party/rust/packed_simd/src/lib.rs ++++ b/third_party/rust/packed_simd/src/lib.rs +@@ -196,40 +196,45 @@ + //! + //! * casting from an `f64` to an `f32` **rounds to nearest, ties to even**. + //! + //! Numeric casts are not very "precise": sometimes lossy, sometimes value + //! preserving, etc. + + #![feature( + repr_simd, ++ rustc_attrs, + const_fn, + platform_intrinsics, + stdsimd, + aarch64_target_feature, + arm_target_feature, + link_llvm_intrinsics, + core_intrinsics, + stmt_expr_attributes, +- align_offset, +- mmx_target_feature, + crate_visibility_modifier, + custom_inner_attributes + )] + #![allow(non_camel_case_types, non_snake_case, +- clippy::cast_possible_truncation, +- clippy::cast_lossless, +- clippy::cast_possible_wrap, +- clippy::cast_precision_loss, +- // This lint is currently broken for generic code +- // See https://github.com/rust-lang/rust-clippy/issues/3410 +- clippy::use_self ++ // FIXME: these types are unsound in C FFI already ++ // See https://github.com/rust-lang/rust/issues/53346 ++ improper_ctypes_definitions, ++ clippy::cast_possible_truncation, ++ clippy::cast_lossless, ++ clippy::cast_possible_wrap, ++ clippy::cast_precision_loss, ++ // TODO: manually add the `#[must_use]` attribute where appropriate ++ clippy::must_use_candidate, ++ // This lint is currently broken for generic code ++ // See https://github.com/rust-lang/rust-clippy/issues/3410 ++ clippy::use_self, ++ clippy::wrong_self_convention, + )] + #![cfg_attr(test, feature(hashmap_internals))] +-#![deny(warnings, rust_2018_idioms, clippy::missing_inline_in_public_items)] ++#![deny(rust_2018_idioms, clippy::missing_inline_in_public_items)] + #![no_std] + + use cfg_if::cfg_if; + + cfg_if! { + if #[cfg(feature = "core_arch")] { + #[allow(unused_imports)] + use core_arch as arch; +@@ -251,16 +256,18 @@ use core::{ + + #[macro_use] + mod testing; + #[macro_use] + mod api; + mod codegen; + mod sealed; + ++pub use crate::sealed::{Simd as SimdVector, Shuffle, SimdArray, Mask}; ++ + /// Packed SIMD vector type. + /// + /// # Examples + /// + /// ``` + /// # use packed_simd::Simd; + /// let v = Simd::<[i32; 4]>::new(0, 1, 2, 3); + /// assert_eq!(v.extract(2), 2); +@@ -271,16 +278,18 @@ pub struct Simd( + // FIXME: this type should be private, + // but it currently must be public for the + // `shuffle!` macro to work: it needs to + // access the internal `repr(simd)` type + // to call the shuffle intrinsics. + #[doc(hidden)] pub ::Tuple, + ); + ++impl sealed::Seal for Simd {} ++ + /// Wrapper over `T` implementing a lexicoraphical order via the `PartialOrd` + /// and/or `Ord` traits. + #[repr(transparent)] + #[derive(Copy, Clone, Debug)] + #[allow(clippy::missing_inline_in_public_items)] + pub struct LexicographicallyOrdered(T); + + mod masks; +diff --git a/third_party/rust/packed_simd/src/masks.rs b/third_party/rust/packed_simd/src/masks.rs +--- a/third_party/rust/packed_simd/src/masks.rs ++++ b/third_party/rust/packed_simd/src/masks.rs +@@ -1,17 +1,19 @@ + //! Mask types + + macro_rules! impl_mask_ty { + ($id:ident : $elem_ty:ident | #[$doc:meta]) => { + #[$doc] + #[derive(Copy, Clone)] + pub struct $id($elem_ty); + ++ impl crate::sealed::Seal for $id {} + impl crate::sealed::Mask for $id { ++ #[inline] + fn test(&self) -> bool { + $id::test(self) + } + } + + impl $id { + /// Instantiate a mask with `value` + #[inline] +diff --git a/third_party/rust/packed_simd/src/sealed.rs b/third_party/rust/packed_simd/src/sealed.rs +--- a/third_party/rust/packed_simd/src/sealed.rs ++++ b/third_party/rust/packed_simd/src/sealed.rs +@@ -1,41 +1,42 @@ + //! Sealed traits + ++/// A sealed trait, this is logically private to the crate ++/// and will prevent implementations from outside the crate ++pub trait Seal {} ++ + /// Trait implemented by arrays that can be SIMD types. +-#[doc(hidden)] +-pub trait SimdArray { ++pub trait SimdArray: Seal { + /// The type of the #[repr(simd)] type. + type Tuple: Copy + Clone; + /// The element type of the vector. + type T; + /// The number of elements in the array. + const N: usize; + /// The type: `[u32; Self::N]`. + type NT; + } + + /// This traits is used to constraint the arguments + /// and result type of the portable shuffles. + #[doc(hidden)] +-pub trait Shuffle { ++pub trait Shuffle: Seal { + // Lanes is a `[u32; N]` where `N` is the number of vector lanes + + /// The result type of the shuffle. + type Output; + } + + /// This trait is implemented by all SIMD vector types. +-#[doc(hidden)] +-pub trait Simd { ++pub trait Simd: Seal { + /// Element type of the SIMD vector + type Element; + /// The number of elements in the SIMD vector. + const LANES: usize; + /// The type: `[u32; Self::N]`. + type LanesType; + } + + /// This trait is implemented by all mask types +-#[doc(hidden)] +-pub trait Mask { ++pub trait Mask: Seal { + fn test(&self) -> bool; + } +diff --git a/third_party/rust/packed_simd/src/testing/utils.rs b/third_party/rust/packed_simd/src/testing/utils.rs +--- a/third_party/rust/packed_simd/src/testing/utils.rs ++++ b/third_party/rust/packed_simd/src/testing/utils.rs +@@ -1,11 +1,13 @@ + //! Testing utilities + + #![allow(dead_code)] ++// FIXME: Or don't. But it's true this is a problematic comparison. ++#![allow(clippy::neg_cmp_op_on_partial_ord)] + + use crate::{cmp::PartialOrd, fmt::Debug, LexicographicallyOrdered}; + + /// Tests PartialOrd for `a` and `b` where `a < b` is true. + pub fn test_lt( + a: LexicographicallyOrdered, b: LexicographicallyOrdered, + ) where + LexicographicallyOrdered: Debug + PartialOrd, +@@ -14,37 +16,42 @@ pub fn test_lt( + assert!(b > a, "{:?}, {:?}", a, b); + + assert!(!(a == b), "{:?}, {:?}", a, b); + assert!(a != b, "{:?}, {:?}", a, b); + + assert!(a <= b, "{:?}, {:?}", a, b); + assert!(b >= a, "{:?}, {:?}", a, b); + +- // Irreflexivity +- assert!(!(a < a), "{:?}, {:?}", a, b); +- assert!(!(b < b), "{:?}, {:?}", a, b); +- assert!(!(a > a), "{:?}, {:?}", a, b); +- assert!(!(b > b), "{:?}, {:?}", a, b); ++ // The elegance of the mathematical expression of irreflexivity is more ++ // than clippy can handle. ++ #[allow(clippy::eq_op)] ++ { ++ // Irreflexivity ++ assert!(!(a < a), "{:?}, {:?}", a, b); ++ assert!(!(b < b), "{:?}, {:?}", a, b); ++ assert!(!(a > a), "{:?}, {:?}", a, b); ++ assert!(!(b > b), "{:?}, {:?}", a, b); + +- assert!(a <= a, "{:?}, {:?}", a, b); +- assert!(b <= b, "{:?}, {:?}", a, b); ++ assert!(a <= a, "{:?}, {:?}", a, b); ++ assert!(b <= b, "{:?}, {:?}", a, b); ++ } + } + + /// Tests PartialOrd for `a` and `b` where `a <= b` is true. + pub fn test_le( + a: LexicographicallyOrdered, b: LexicographicallyOrdered, + ) where + LexicographicallyOrdered: Debug + PartialOrd, + { + assert!(a <= b, "{:?}, {:?}", a, b); + assert!(b >= a, "{:?}, {:?}", a, b); + +- assert!(a == b || a < b, "{:?}, {:?}", a, b); +- assert!(a == b || b > a, "{:?}, {:?}", a, b); ++ assert!(a <= b, "{:?}, {:?}", a, b); ++ assert!(b >= a, "{:?}, {:?}", a, b); + + if a == b { + assert!(!(a < b), "{:?}, {:?}", a, b); + assert!(!(b > a), "{:?}, {:?}", a, b); + + assert!(!(a != b), "{:?}, {:?}", a, b); + } else { + assert!(a != b, "{:?}, {:?}", a, b); +diff --git a/third_party/rust/packed_simd/src/v128.rs b/third_party/rust/packed_simd/src/v128.rs +--- a/third_party/rust/packed_simd/src/v128.rs ++++ b/third_party/rust/packed_simd/src/v128.rs +@@ -1,80 +1,80 @@ + //! 128-bit wide vector types +-#![rustfmt::skip] ++#[rustfmt::skip] + + use crate::*; + +-impl_i!([i8; 16]: i8x16, m8x16 | i8 | test_v128 | ++impl_i!([i8; 16]: i8x16, m8x16 | i8, u16 | test_v128 | + x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15 | + From: | + /// A 128-bit vector with 16 `i8` lanes. + ); +-impl_u!([u8; 16]: u8x16, m8x16 | u8 | test_v128 | ++impl_u!([u8; 16]: u8x16, m8x16 | u8, u16 | test_v128 | + x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15 | + From: | + /// A 128-bit vector with 16 `u8` lanes. + ); +-impl_m!([m8; 16]: m8x16 | i8 | test_v128 | ++impl_m!([m8; 16]: m8x16 | i8, u16 | test_v128 | + x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15 | + From: m16x16 | + /// A 128-bit vector mask with 16 `m8` lanes. + ); + +-impl_i!([i16; 8]: i16x8, m16x8 | i16 | test_v128 | x0, x1, x2, x3, x4, x5, x6, x7 | ++impl_i!([i16; 8]: i16x8, m16x8 | i16, u8 | test_v128 | x0, x1, x2, x3, x4, x5, x6, x7 | + From: i8x8, u8x8 | + /// A 128-bit vector with 8 `i16` lanes. + ); +-impl_u!([u16; 8]: u16x8, m16x8 | u16| test_v128 | x0, x1, x2, x3, x4, x5, x6, x7 | ++impl_u!([u16; 8]: u16x8, m16x8 | u16, u8 | test_v128 | x0, x1, x2, x3, x4, x5, x6, x7 | + From: u8x8 | + /// A 128-bit vector with 8 `u16` lanes. + ); +-impl_m!([m16; 8]: m16x8 | i16 | test_v128 | x0, x1, x2, x3, x4, x5, x6, x7 | ++impl_m!([m16; 8]: m16x8 | i16, u8 | test_v128 | x0, x1, x2, x3, x4, x5, x6, x7 | + From: m8x8, m32x8 | + /// A 128-bit vector mask with 8 `m16` lanes. + ); + +-impl_i!([i32; 4]: i32x4, m32x4 | i32 | test_v128 | x0, x1, x2, x3 | ++impl_i!([i32; 4]: i32x4, m32x4 | i32, u8 | test_v128 | x0, x1, x2, x3 | + From: i8x4, u8x4, i16x4, u16x4 | + /// A 128-bit vector with 4 `i32` lanes. + ); +-impl_u!([u32; 4]: u32x4, m32x4 | u32| test_v128 | x0, x1, x2, x3 | ++impl_u!([u32; 4]: u32x4, m32x4 | u32, u8 | test_v128 | x0, x1, x2, x3 | + From: u8x4, u16x4 | + /// A 128-bit vector with 4 `u32` lanes. + ); + impl_f!([f32; 4]: f32x4, m32x4 | f32 | test_v128 | x0, x1, x2, x3 | + From: i8x4, u8x4, i16x4, u16x4 | + /// A 128-bit vector with 4 `f32` lanes. + ); +-impl_m!([m32; 4]: m32x4 | i32 | test_v128 | x0, x1, x2, x3 | ++impl_m!([m32; 4]: m32x4 | i32, u8 | test_v128 | x0, x1, x2, x3 | + From: m8x4, m16x4, m64x4 | + /// A 128-bit vector mask with 4 `m32` lanes. + ); + +-impl_i!([i64; 2]: i64x2, m64x2 | i64 | test_v128 | x0, x1 | ++impl_i!([i64; 2]: i64x2, m64x2 | i64, u8 | test_v128 | x0, x1 | + From: i8x2, u8x2, i16x2, u16x2, i32x2, u32x2 | + /// A 128-bit vector with 2 `i64` lanes. + ); +-impl_u!([u64; 2]: u64x2, m64x2 | u64 | test_v128 | x0, x1 | ++impl_u!([u64; 2]: u64x2, m64x2 | u64, u8 | test_v128 | x0, x1 | + From: u8x2, u16x2, u32x2 | + /// A 128-bit vector with 2 `u64` lanes. + ); + impl_f!([f64; 2]: f64x2, m64x2 | f64 | test_v128 | x0, x1 | + From: i8x2, u8x2, i16x2, u16x2, i32x2, u32x2, f32x2 | + /// A 128-bit vector with 2 `f64` lanes. + ); +-impl_m!([m64; 2]: m64x2 | i64 | test_v128 | x0, x1 | ++impl_m!([m64; 2]: m64x2 | i64, u8 | test_v128 | x0, x1 | + From: m8x2, m16x2, m32x2, m128x2 | + /// A 128-bit vector mask with 2 `m64` lanes. + ); + +-impl_i!([i128; 1]: i128x1, m128x1 | i128 | test_v128 | x0 | ++impl_i!([i128; 1]: i128x1, m128x1 | i128, u8 | test_v128 | x0 | + From: /*i8x1, u8x1, i16x1, u16x1, i32x1, u32x1, i64x1, u64x1 */ | // FIXME: unary small vector types + /// A 128-bit vector with 1 `i128` lane. + ); +-impl_u!([u128; 1]: u128x1, m128x1 | u128 | test_v128 | x0 | ++impl_u!([u128; 1]: u128x1, m128x1 | u128, u8 | test_v128 | x0 | + From: /*u8x1, u16x1, u32x1, u64x1 */ | // FIXME: unary small vector types + /// A 128-bit vector with 1 `u128` lane. + ); +-impl_m!([m128; 1]: m128x1 | i128 | test_v128 | x0 | ++impl_m!([m128; 1]: m128x1 | i128, u8 | test_v128 | x0 | + From: /*m8x1, m16x1, m32x1, m64x1 */ | // FIXME: unary small vector types + /// A 128-bit vector mask with 1 `m128` lane. + ); +diff --git a/third_party/rust/packed_simd/src/v16.rs b/third_party/rust/packed_simd/src/v16.rs +--- a/third_party/rust/packed_simd/src/v16.rs ++++ b/third_party/rust/packed_simd/src/v16.rs +@@ -1,16 +1,16 @@ + //! 16-bit wide vector types + + use crate::*; + +-impl_i!([i8; 2]: i8x2, m8x2 | i8 | test_v16 | x0, x1 | ++impl_i!([i8; 2]: i8x2, m8x2 | i8, u8 | test_v16 | x0, x1 | + From: | + /// A 16-bit vector with 2 `i8` lanes. + ); +-impl_u!([u8; 2]: u8x2, m8x2 | u8 | test_v16 | x0, x1 | ++impl_u!([u8; 2]: u8x2, m8x2 | u8, u8 | test_v16 | x0, x1 | + From: | + /// A 16-bit vector with 2 `u8` lanes. + ); +-impl_m!([m8; 2]: m8x2 | i8 | test_v16 | x0, x1 | ++impl_m!([m8; 2]: m8x2 | i8, u8 | test_v16 | x0, x1 | + From: m16x2, m32x2, m64x2, m128x2 | + /// A 16-bit vector mask with 2 `m8` lanes. + ); +diff --git a/third_party/rust/packed_simd/src/v256.rs b/third_party/rust/packed_simd/src/v256.rs +--- a/third_party/rust/packed_simd/src/v256.rs ++++ b/third_party/rust/packed_simd/src/v256.rs +@@ -1,86 +1,86 @@ + //! 256-bit wide vector types +-#![rustfmt::skip] ++#[rustfmt::skip] + + use crate::*; + +-impl_i!([i8; 32]: i8x32, m8x32 | i8 | test_v256 | ++impl_i!([i8; 32]: i8x32, m8x32 | i8, u32 | test_v256 | + x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, + x16, x17, x18, x19, x20, x21, x22, x23, x24, x25, x26, x27, x28, x29, x30, x31 | + From: | + /// A 256-bit vector with 32 `i8` lanes. + ); +-impl_u!([u8; 32]: u8x32, m8x32 | u8 | test_v256 | ++impl_u!([u8; 32]: u8x32, m8x32 | u8, u32 | test_v256 | + x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, + x16, x17, x18, x19, x20, x21, x22, x23, x24, x25, x26, x27, x28, x29, x30, x31 | + From: | + /// A 256-bit vector with 32 `u8` lanes. + ); +-impl_m!([m8; 32]: m8x32 | i8 | test_v256 | ++impl_m!([m8; 32]: m8x32 | i8, u32 | test_v256 | + x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, + x16, x17, x18, x19, x20, x21, x22, x23, x24, x25, x26, x27, x28, x29, x30, x31 | + From: | + /// A 256-bit vector mask with 32 `m8` lanes. + ); + +-impl_i!([i16; 16]: i16x16, m16x16 | i16 | test_v256 | ++impl_i!([i16; 16]: i16x16, m16x16 | i16, u16 | test_v256 | + x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15 | + From: i8x16, u8x16 | + /// A 256-bit vector with 16 `i16` lanes. + ); +-impl_u!([u16; 16]: u16x16, m16x16 | u16 | test_v256 | ++impl_u!([u16; 16]: u16x16, m16x16 | u16, u16 | test_v256 | + x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15 | + From: u8x16 | + /// A 256-bit vector with 16 `u16` lanes. + ); +-impl_m!([m16; 16]: m16x16 | i16 | test_v256 | ++impl_m!([m16; 16]: m16x16 | i16, u16 | test_v256 | + x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15 | + From: m8x16 | + /// A 256-bit vector mask with 16 `m16` lanes. + ); + +-impl_i!([i32; 8]: i32x8, m32x8 | i32 | test_v256 | x0, x1, x2, x3, x4, x5, x6, x7 | ++impl_i!([i32; 8]: i32x8, m32x8 | i32, u8 | test_v256 | x0, x1, x2, x3, x4, x5, x6, x7 | + From: i8x8, u8x8, i16x8, u16x8 | + /// A 256-bit vector with 8 `i32` lanes. + ); +-impl_u!([u32; 8]: u32x8, m32x8 | u32 | test_v256 | x0, x1, x2, x3, x4, x5, x6, x7 | ++impl_u!([u32; 8]: u32x8, m32x8 | u32, u8 | test_v256 | x0, x1, x2, x3, x4, x5, x6, x7 | + From: u8x8, u16x8 | + /// A 256-bit vector with 8 `u32` lanes. + ); + impl_f!([f32; 8]: f32x8, m32x8 | f32 | test_v256 | x0, x1, x2, x3, x4, x5, x6, x7 | + From: i8x8, u8x8, i16x8, u16x8 | + /// A 256-bit vector with 8 `f32` lanes. + ); +-impl_m!([m32; 8]: m32x8 | i32 | test_v256 | x0, x1, x2, x3, x4, x5, x6, x7 | ++impl_m!([m32; 8]: m32x8 | i32, u8 | test_v256 | x0, x1, x2, x3, x4, x5, x6, x7 | + From: m8x8, m16x8 | + /// A 256-bit vector mask with 8 `m32` lanes. + ); + +-impl_i!([i64; 4]: i64x4, m64x4 | i64 | test_v256 | x0, x1, x2, x3 | ++impl_i!([i64; 4]: i64x4, m64x4 | i64, u8 | test_v256 | x0, x1, x2, x3 | + From: i8x4, u8x4, i16x4, u16x4, i32x4, u32x4 | + /// A 256-bit vector with 4 `i64` lanes. + ); +-impl_u!([u64; 4]: u64x4, m64x4 | u64 | test_v256 | x0, x1, x2, x3 | ++impl_u!([u64; 4]: u64x4, m64x4 | u64, u8 | test_v256 | x0, x1, x2, x3 | + From: u8x4, u16x4, u32x4 | + /// A 256-bit vector with 4 `u64` lanes. + ); + impl_f!([f64; 4]: f64x4, m64x4 | f64 | test_v256 | x0, x1, x2, x3 | + From: i8x4, u8x4, i16x4, u16x4, i32x4, u32x4, f32x4 | + /// A 256-bit vector with 4 `f64` lanes. + ); +-impl_m!([m64; 4]: m64x4 | i64 | test_v256 | x0, x1, x2, x3 | ++impl_m!([m64; 4]: m64x4 | i64, u8 | test_v256 | x0, x1, x2, x3 | + From: m8x4, m16x4, m32x4 | + /// A 256-bit vector mask with 4 `m64` lanes. + ); + +-impl_i!([i128; 2]: i128x2, m128x2 | i128 | test_v256 | x0, x1 | ++impl_i!([i128; 2]: i128x2, m128x2 | i128, u8 | test_v256 | x0, x1 | + From: i8x2, u8x2, i16x2, u16x2, i32x2, u32x2, i64x2, u64x2 | + /// A 256-bit vector with 2 `i128` lanes. + ); +-impl_u!([u128; 2]: u128x2, m128x2 | u128 | test_v256 | x0, x1 | ++impl_u!([u128; 2]: u128x2, m128x2 | u128, u8 | test_v256 | x0, x1 | + From: u8x2, u16x2, u32x2, u64x2 | + /// A 256-bit vector with 2 `u128` lanes. + ); +-impl_m!([m128; 2]: m128x2 | i128 | test_v256 | x0, x1 | ++impl_m!([m128; 2]: m128x2 | i128, u8 | test_v256 | x0, x1 | + From: m8x2, m16x2, m32x2, m64x2 | + /// A 256-bit vector mask with 2 `m128` lanes. + ); +diff --git a/third_party/rust/packed_simd/src/v32.rs b/third_party/rust/packed_simd/src/v32.rs +--- a/third_party/rust/packed_simd/src/v32.rs ++++ b/third_party/rust/packed_simd/src/v32.rs +@@ -1,29 +1,29 @@ + //! 32-bit wide vector types + + use crate::*; + +-impl_i!([i8; 4]: i8x4, m8x4 | i8 | test_v32 | x0, x1, x2, x3 | ++impl_i!([i8; 4]: i8x4, m8x4 | i8, u8 | test_v32 | x0, x1, x2, x3 | + From: | + /// A 32-bit vector with 4 `i8` lanes. + ); +-impl_u!([u8; 4]: u8x4, m8x4 | u8 | test_v32 | x0, x1, x2, x3 | ++impl_u!([u8; 4]: u8x4, m8x4 | u8, u8 | test_v32 | x0, x1, x2, x3 | + From: | + /// A 32-bit vector with 4 `u8` lanes. + ); +-impl_m!([m8; 4]: m8x4 | i8 | test_v32 | x0, x1, x2, x3 | ++impl_m!([m8; 4]: m8x4 | i8, u8 | test_v32 | x0, x1, x2, x3 | + From: m16x4, m32x4, m64x4 | + /// A 32-bit vector mask with 4 `m8` lanes. + ); + +-impl_i!([i16; 2]: i16x2, m16x2 | i16 | test_v32 | x0, x1 | ++impl_i!([i16; 2]: i16x2, m16x2 | i16, u8 | test_v32 | x0, x1 | + From: i8x2, u8x2 | + /// A 32-bit vector with 2 `i16` lanes. + ); +-impl_u!([u16; 2]: u16x2, m16x2 | u16 | test_v32 | x0, x1 | ++impl_u!([u16; 2]: u16x2, m16x2 | u16, u8 | test_v32 | x0, x1 | + From: u8x2 | + /// A 32-bit vector with 2 `u16` lanes. + ); +-impl_m!([m16; 2]: m16x2 | i16 | test_v32 | x0, x1 | ++impl_m!([m16; 2]: m16x2 | i16, u8 | test_v32 | x0, x1 | + From: m8x2, m32x2, m64x2, m128x2 | + /// A 32-bit vector mask with 2 `m16` lanes. + ); +diff --git a/third_party/rust/packed_simd/src/v512.rs b/third_party/rust/packed_simd/src/v512.rs +--- a/third_party/rust/packed_simd/src/v512.rs ++++ b/third_party/rust/packed_simd/src/v512.rs +@@ -1,99 +1,99 @@ + //! 512-bit wide vector types +-#![rustfmt::skip] ++#[rustfmt::skip] + + use crate::*; + +-impl_i!([i8; 64]: i8x64, m8x64 | i8 | test_v512 | ++impl_i!([i8; 64]: i8x64, m8x64 | i8, u64 | test_v512 | + x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, + x16, x17, x18, x19, x20, x21, x22, x23, x24, x25, x26, x27, x28, x29, x30, x31, + x32, x33, x34, x35, x36, x37, x38, x39, x40, x41, x42, x43, x44, x45, x46, x47, + x48, x49, x50, x51, x52, x53, x54, x55, x56, x57, x58, x59, x60, x61, x62, x63 | + From: | + /// A 512-bit vector with 64 `i8` lanes. + ); +-impl_u!([u8; 64]: u8x64, m8x64 | u8 | test_v512 | ++impl_u!([u8; 64]: u8x64, m8x64 | u8, u64 | test_v512 | + x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, + x16, x17, x18, x19, x20, x21, x22, x23, x24, x25, x26, x27, x28, x29, x30, x31, + x32, x33, x34, x35, x36, x37, x38, x39, x40, x41, x42, x43, x44, x45, x46, x47, + x48, x49, x50, x51, x52, x53, x54, x55, x56, x57, x58, x59, x60, x61, x62, x63 | + From: | + /// A 512-bit vector with 64 `u8` lanes. + ); +-impl_m!([m8; 64]: m8x64 | i8 | test_v512 | ++impl_m!([m8; 64]: m8x64 | i8, u64 | test_v512 | + x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, + x16, x17, x18, x19, x20, x21, x22, x23, x24, x25, x26, x27, x28, x29, x30, x31, + x32, x33, x34, x35, x36, x37, x38, x39, x40, x41, x42, x43, x44, x45, x46, x47, + x48, x49, x50, x51, x52, x53, x54, x55, x56, x57, x58, x59, x60, x61, x62, x63 | + From: | + /// A 512-bit vector mask with 64 `m8` lanes. + ); + +-impl_i!([i16; 32]: i16x32, m16x32 | i16 | test_v512 | ++impl_i!([i16; 32]: i16x32, m16x32 | i16, u32 | test_v512 | + x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, + x16, x17, x18, x19, x20, x21, x22, x23, x24, x25, x26, x27, x28, x29, x30, x31 | + From: i8x32, u8x32 | + /// A 512-bit vector with 32 `i16` lanes. + ); +-impl_u!([u16; 32]: u16x32, m16x32 | u16 | test_v512 | ++impl_u!([u16; 32]: u16x32, m16x32 | u16, u32 | test_v512 | + x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, + x16, x17, x18, x19, x20, x21, x22, x23, x24, x25, x26, x27, x28, x29, x30, x31 | + From: u8x32 | + /// A 512-bit vector with 32 `u16` lanes. + ); +-impl_m!([m16; 32]: m16x32 | i16 | test_v512 | ++impl_m!([m16; 32]: m16x32 | i16, u32 | test_v512 | + x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, + x16, x17, x18, x19, x20, x21, x22, x23, x24, x25, x26, x27, x28, x29, x30, x31 | + From: m8x32 | + /// A 512-bit vector mask with 32 `m16` lanes. + ); + +-impl_i!([i32; 16]: i32x16, m32x16 | i32 | test_v512 | ++impl_i!([i32; 16]: i32x16, m32x16 | i32, u16 | test_v512 | + x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15 | + From: i8x16, u8x16, i16x16, u16x16 | + /// A 512-bit vector with 16 `i32` lanes. + ); +-impl_u!([u32; 16]: u32x16, m32x16 | u32 | test_v512 | ++impl_u!([u32; 16]: u32x16, m32x16 | u32, u16 | test_v512 | + x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15 | + From: u8x16, u16x16 | + /// A 512-bit vector with 16 `u32` lanes. + ); + impl_f!([f32; 16]: f32x16, m32x16 | f32 | test_v512 | + x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15 | + From: i8x16, u8x16, i16x16, u16x16 | + /// A 512-bit vector with 16 `f32` lanes. + ); +-impl_m!([m32; 16]: m32x16 | i32 | test_v512 | ++impl_m!([m32; 16]: m32x16 | i32, u16 | test_v512 | + x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15 | + From: m8x16, m16x16 | + /// A 512-bit vector mask with 16 `m32` lanes. + ); + +-impl_i!([i64; 8]: i64x8, m64x8 | i64 | test_v512 | x0, x1, x2, x3, x4, x5, x6, x7 | ++impl_i!([i64; 8]: i64x8, m64x8 | i64, u8 | test_v512 | x0, x1, x2, x3, x4, x5, x6, x7 | + From: i8x8, u8x8, i16x8, u16x8, i32x8, u32x8 | + /// A 512-bit vector with 8 `i64` lanes. + ); +-impl_u!([u64; 8]: u64x8, m64x8 | u64 | test_v512 | x0, x1, x2, x3, x4, x5, x6, x7 | ++impl_u!([u64; 8]: u64x8, m64x8 | u64, u8 | test_v512 | x0, x1, x2, x3, x4, x5, x6, x7 | + From: u8x8, u16x8, u32x8 | + /// A 512-bit vector with 8 `u64` lanes. + ); + impl_f!([f64; 8]: f64x8, m64x8 | f64 | test_v512 | x0, x1, x2, x3, x4, x5, x6, x7 | + From: i8x8, u8x8, i16x8, u16x8, i32x8, u32x8, f32x8 | + /// A 512-bit vector with 8 `f64` lanes. + ); +-impl_m!([m64; 8]: m64x8 | i64 | test_v512 | x0, x1, x2, x3, x4, x5, x6, x7 | ++impl_m!([m64; 8]: m64x8 | i64, u8 | test_v512 | x0, x1, x2, x3, x4, x5, x6, x7 | + From: m8x8, m16x8, m32x8 | + /// A 512-bit vector mask with 8 `m64` lanes. + ); + +-impl_i!([i128; 4]: i128x4, m128x4 | i128 | test_v512 | x0, x1, x2, x3 | ++impl_i!([i128; 4]: i128x4, m128x4 | i128, u8 | test_v512 | x0, x1, x2, x3 | + From: i8x4, u8x4, i16x4, u16x4, i32x4, u32x4, i64x4, u64x4 | + /// A 512-bit vector with 4 `i128` lanes. + ); +-impl_u!([u128; 4]: u128x4, m128x4 | u128 | test_v512 | x0, x1, x2, x3 | ++impl_u!([u128; 4]: u128x4, m128x4 | u128, u8 | test_v512 | x0, x1, x2, x3 | + From: u8x4, u16x4, u32x4, u64x4 | + /// A 512-bit vector with 4 `u128` lanes. + ); +-impl_m!([m128; 4]: m128x4 | i128 | test_v512 | x0, x1, x2, x3 | ++impl_m!([m128; 4]: m128x4 | i128, u8 | test_v512 | x0, x1, x2, x3 | + From: m8x4, m16x4, m32x4, m64x4 | + /// A 512-bit vector mask with 4 `m128` lanes. + ); +diff --git a/third_party/rust/packed_simd/src/v64.rs b/third_party/rust/packed_simd/src/v64.rs +--- a/third_party/rust/packed_simd/src/v64.rs ++++ b/third_party/rust/packed_simd/src/v64.rs +@@ -1,66 +1,66 @@ + //! 64-bit wide vector types +-#![rustfmt::skip] ++#[rustfmt::skip] + + use super::*; + +-impl_i!([i8; 8]: i8x8, m8x8 | i8 | test_v64 | x0, x1, x2, x3, x4, x5, x6, x7 | ++impl_i!([i8; 8]: i8x8, m8x8 | i8, u8 | test_v64 | x0, x1, x2, x3, x4, x5, x6, x7 | + From: | + /// A 64-bit vector with 8 `i8` lanes. + ); +-impl_u!([u8; 8]: u8x8, m8x8 | u8 | test_v64 | x0, x1, x2, x3, x4, x5, x6, x7 | ++impl_u!([u8; 8]: u8x8, m8x8 | u8, u8 | test_v64 | x0, x1, x2, x3, x4, x5, x6, x7 | + From: | + /// A 64-bit vector with 8 `u8` lanes. + ); +-impl_m!([m8; 8]: m8x8 | i8 | test_v64 | x0, x1, x2, x3, x4, x5, x6, x7 | ++impl_m!([m8; 8]: m8x8 | i8, u8 | test_v64 | x0, x1, x2, x3, x4, x5, x6, x7 | + From: m16x8, m32x8 | + /// A 64-bit vector mask with 8 `m8` lanes. + ); + +-impl_i!([i16; 4]: i16x4, m16x4 | i16 | test_v64 | x0, x1, x2, x3 | ++impl_i!([i16; 4]: i16x4, m16x4 | i16, u8 | test_v64 | x0, x1, x2, x3 | + From: i8x4, u8x4 | + /// A 64-bit vector with 4 `i16` lanes. + ); +-impl_u!([u16; 4]: u16x4, m16x4 | u16 | test_v64 | x0, x1, x2, x3 | ++impl_u!([u16; 4]: u16x4, m16x4 | u16, u8 | test_v64 | x0, x1, x2, x3 | + From: u8x4 | + /// A 64-bit vector with 4 `u16` lanes. + ); +-impl_m!([m16; 4]: m16x4 | i16 | test_v64 | x0, x1, x2, x3 | ++impl_m!([m16; 4]: m16x4 | i16, u8 | test_v64 | x0, x1, x2, x3 | + From: m8x4, m32x4, m64x4 | + /// A 64-bit vector mask with 4 `m16` lanes. + ); + +-impl_i!([i32; 2]: i32x2, m32x2 | i32 | test_v64 | x0, x1 | ++impl_i!([i32; 2]: i32x2, m32x2 | i32, u8 | test_v64 | x0, x1 | + From: i8x2, u8x2, i16x2, u16x2 | + /// A 64-bit vector with 2 `i32` lanes. + ); +-impl_u!([u32; 2]: u32x2, m32x2 | u32 | test_v64 | x0, x1 | ++impl_u!([u32; 2]: u32x2, m32x2 | u32, u8 | test_v64 | x0, x1 | + From: u8x2, u16x2 | + /// A 64-bit vector with 2 `u32` lanes. + ); +-impl_m!([m32; 2]: m32x2 | i32 | test_v64 | x0, x1 | ++impl_m!([m32; 2]: m32x2 | i32, u8 | test_v64 | x0, x1 | + From: m8x2, m16x2, m64x2, m128x2 | + /// A 64-bit vector mask with 2 `m32` lanes. + ); + impl_f!([f32; 2]: f32x2, m32x2 | f32 | test_v64 | x0, x1 | + From: i8x2, u8x2, i16x2, u16x2 | + /// A 64-bit vector with 2 `f32` lanes. + ); + + /* +-impl_i!([i64; 1]: i64x1, m64x1 | i64 | test_v64 | x0 | ++impl_i!([i64; 1]: i64x1, m64x1 | i64, u8 | test_v64 | x0 | + From: /*i8x1, u8x1, i16x1, u16x1, i32x1, u32x1*/ | // FIXME: primitive to vector conversion + /// A 64-bit vector with 1 `i64` lanes. + ); +-impl_u!([u64; 1]: u64x1, m64x1 | u64 | test_v64 | x0 | ++impl_u!([u64; 1]: u64x1, m64x1 | u64, u8 | test_v64 | x0 | + From: /*u8x1, u16x1, u32x1*/ | // FIXME: primitive to vector conversion + /// A 64-bit vector with 1 `u64` lanes. + ); +-impl_m!([m64; 1]: m64x1 | i64 | test_v64 | x0 | ++impl_m!([m64; 1]: m64x1 | i64, u8 | test_v64 | x0 | + From: /*m8x1, m16x1, m32x1, */ m128x1 | // FIXME: unary small vector types + /// A 64-bit vector mask with 1 `m64` lanes. + ); + impl_f!([f64; 1]: f64x1, m64x1 | f64 | test_v64 | x0 | + From: /*i8x1, u8x1, i16x1, u16x1, i32x1, u32x1, f32x1*/ | // FIXME: unary small vector types + /// A 64-bit vector with 1 `f64` lanes. + ); + */ +diff --git a/third_party/rust/packed_simd/src/vPtr.rs b/third_party/rust/packed_simd/src/vPtr.rs +--- a/third_party/rust/packed_simd/src/vPtr.rs ++++ b/third_party/rust/packed_simd/src/vPtr.rs +@@ -1,10 +1,10 @@ + //! Vectors of pointers +-#![rustfmt::skip] ++#[rustfmt::skip] + + use crate::*; + + impl_const_p!( + [*const T; 2]: cptrx2, msizex2, usizex2, isizex2 | test_v128 | x0, x1 | From: | + /// A vector with 2 `*const T` lanes + ); + +diff --git a/third_party/rust/packed_simd/src/vSize.rs b/third_party/rust/packed_simd/src/vSize.rs +--- a/third_party/rust/packed_simd/src/vSize.rs ++++ b/third_party/rust/packed_simd/src/vSize.rs +@@ -1,53 +1,53 @@ + //! Vectors with pointer-sized elements + + use crate::codegen::pointer_sized_int::{isize_, usize_}; + use crate::*; + +-impl_i!([isize; 2]: isizex2, msizex2 | isize_ | test_v128 | ++impl_i!([isize; 2]: isizex2, msizex2 | isize_, u8 | test_v128 | + x0, x1| + From: | + /// A vector with 2 `isize` lanes. + ); + +-impl_u!([usize; 2]: usizex2, msizex2 | usize_ | test_v128 | ++impl_u!([usize; 2]: usizex2, msizex2 | usize_, u8 | test_v128 | + x0, x1| + From: | + /// A vector with 2 `usize` lanes. + ); +-impl_m!([msize; 2]: msizex2 | isize_ | test_v128 | ++impl_m!([msize; 2]: msizex2 | isize_, u8 | test_v128 | + x0, x1 | + From: | + /// A vector mask with 2 `msize` lanes. + ); + +-impl_i!([isize; 4]: isizex4, msizex4 | isize_ | test_v256 | ++impl_i!([isize; 4]: isizex4, msizex4 | isize_, u8 | test_v256 | + x0, x1, x2, x3 | + From: | + /// A vector with 4 `isize` lanes. + ); +-impl_u!([usize; 4]: usizex4, msizex4 | usize_ | test_v256 | ++impl_u!([usize; 4]: usizex4, msizex4 | usize_, u8 | test_v256 | + x0, x1, x2, x3| + From: | + /// A vector with 4 `usize` lanes. + ); +-impl_m!([msize; 4]: msizex4 | isize_ | test_v256 | ++impl_m!([msize; 4]: msizex4 | isize_, u8 | test_v256 | + x0, x1, x2, x3 | + From: | + /// A vector mask with 4 `msize` lanes. + ); + +-impl_i!([isize; 8]: isizex8, msizex8 | isize_ | test_v512 | ++impl_i!([isize; 8]: isizex8, msizex8 | isize_, u8 | test_v512 | + x0, x1, x2, x3, x4, x5, x6, x7 | + From: | +- /// A vector with 4 `isize` lanes. ++ /// A vector with 8 `isize` lanes. + ); +-impl_u!([usize; 8]: usizex8, msizex8 | usize_ | test_v512 | ++impl_u!([usize; 8]: usizex8, msizex8 | usize_, u8 | test_v512 | + x0, x1, x2, x3, x4, x5, x6, x7 | + From: | + /// A vector with 8 `usize` lanes. + ); +-impl_m!([msize; 8]: msizex8 | isize_ | test_v512 | ++impl_m!([msize; 8]: msizex8 | isize_, u8 | test_v512 | + x0, x1, x2, x3, x4, x5, x6, x7 | + From: | + /// A vector mask with 8 `msize` lanes. + ); +diff --git a/third_party/rust/packed_simd/tests/endianness.rs b/third_party/rust/packed_simd/tests/endianness.rs +--- a/third_party/rust/packed_simd/tests/endianness.rs ++++ b/third_party/rust/packed_simd/tests/endianness.rs +@@ -12,51 +12,51 @@ fn endian_indexing() { + assert_eq!(v.extract(1), 1); + assert_eq!(v.extract(2), 2); + assert_eq!(v.extract(3), 3); + } + + #[cfg_attr(not(target_arch = "wasm32"), test)] + #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] + fn endian_bitcasts() { +- #[cfg_attr(rustfmt, rustfmt_skip)] ++ #[rustfmt::skip] + let x = i8x16::new( + 0, 1, 2, 3, 4, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 14, 15, + ); + let t: i16x8 = unsafe { mem::transmute(x) }; + let e: i16x8 = if cfg!(target_endian = "little") { + i16x8::new(256, 770, 1284, 1798, 2312, 2826, 3340, 3854) + } else { + i16x8::new(1, 515, 1029, 1543, 2057, 2571, 3085, 3599) + }; + assert_eq!(t, e); + } + + #[cfg_attr(not(target_arch = "wasm32"), test)] + #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] + fn endian_casts() { +- #[cfg_attr(rustfmt, rustfmt_skip)] ++ #[rustfmt::skip] + let x = i8x16::new( + 0, 1, 2, 3, 4, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 14, 15, + ); + let t: i16x16 = x.into(); // simd_cast +- #[cfg_attr(rustfmt, rustfmt_skip)] ++ #[rustfmt::skip] + let e = i16x16::new( + 0, 1, 2, 3, 4, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 14, 15, + ); + assert_eq!(t, e); + } + + #[cfg_attr(not(target_arch = "wasm32"), test)] + #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] + fn endian_load_and_stores() { +- #[cfg_attr(rustfmt, rustfmt_skip)] ++ #[rustfmt::skip] + let x = i8x16::new( + 0, 1, 2, 3, 4, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 14, 15, + ); + let mut y: [i16; 8] = [0; 8]; + x.write_to_slice_unaligned(unsafe { + slice::from_raw_parts_mut(&mut y as *mut _ as *mut i8, 16) + }); +@@ -77,56 +77,61 @@ fn endian_load_and_stores() { + #[cfg_attr(not(target_arch = "wasm32"), test)] + #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] + fn endian_array_union() { + union A { + data: [f32; 4], + vec: f32x4, + } + let x: [f32; 4] = unsafe { A { vec: f32x4::new(0., 1., 2., 3.) }.data }; +- assert_eq!(x[0], 0_f32); +- assert_eq!(x[1], 1_f32); +- assert_eq!(x[2], 2_f32); +- assert_eq!(x[3], 3_f32); ++ // As all of these are integer values within the mantissa^1 range, it ++ // would be very unusual for them to actually fail to compare. ++ #[allow(clippy::float_cmp)] ++ { ++ assert_eq!(x[0], 0_f32); ++ assert_eq!(x[1], 1_f32); ++ assert_eq!(x[2], 2_f32); ++ assert_eq!(x[3], 3_f32); ++ } + let y: f32x4 = unsafe { A { data: [3., 2., 1., 0.] }.vec }; + assert_eq!(y, f32x4::new(3., 2., 1., 0.)); + + union B { + data: [i8; 16], + vec: i8x16, + } +- #[cfg_attr(rustfmt, rustfmt_skip)] ++ #[rustfmt::skip] + let x = i8x16::new( + 0, 1, 2, 3, 4, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 14, 15, + ); + let x: [i8; 16] = unsafe { B { vec: x }.data }; + +- for i in 0..16 { +- assert_eq!(x[i], i as i8); ++ for (i, v) in x.iter().enumerate() { ++ assert_eq!(i as i8, *v); + } + +- #[cfg_attr(rustfmt, rustfmt_skip)] ++ #[rustfmt::skip] + let y = [ + 15, 14, 13, 12, 11, 19, 9, 8, + 7, 6, 5, 4, 3, 2, 1, 0 + ]; +- #[cfg_attr(rustfmt, rustfmt_skip)] ++ #[rustfmt::skip] + let e = i8x16::new( + 15, 14, 13, 12, 11, 19, 9, 8, + 7, 6, 5, 4, 3, 2, 1, 0 + ); + let z = unsafe { B { data: y }.vec }; + assert_eq!(z, e); + + union C { + data: [i16; 8], + vec: i8x16, + } +- #[cfg_attr(rustfmt, rustfmt_skip)] ++ #[rustfmt::skip] + let x = i8x16::new( + 0, 1, 2, 3, 4, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 14, 15, + ); + let x: [i16; 8] = unsafe { C { vec: x }.data }; + + let e: [i16; 8] = if cfg!(target_endian = "little") { + [256, 770, 1284, 1798, 2312, 2826, 3340, 3854] +@@ -140,31 +145,36 @@ fn endian_array_union() { + #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] + fn endian_tuple_access() { + type F32x4T = (f32, f32, f32, f32); + union A { + data: F32x4T, + vec: f32x4, + } + let x: F32x4T = unsafe { A { vec: f32x4::new(0., 1., 2., 3.) }.data }; +- assert_eq!(x.0, 0_f32); +- assert_eq!(x.1, 1_f32); +- assert_eq!(x.2, 2_f32); +- assert_eq!(x.3, 3_f32); ++ // As all of these are integer values within the mantissa^1 range, it ++ // would be very unusual for them to actually fail to compare. ++ #[allow(clippy::float_cmp)] ++ { ++ assert_eq!(x.0, 0_f32); ++ assert_eq!(x.1, 1_f32); ++ assert_eq!(x.2, 2_f32); ++ assert_eq!(x.3, 3_f32); ++ } + let y: f32x4 = unsafe { A { data: (3., 2., 1., 0.) }.vec }; + assert_eq!(y, f32x4::new(3., 2., 1., 0.)); + +- #[cfg_attr(rustfmt, rustfmt_skip)] ++ #[rustfmt::skip] + type I8x16T = (i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8); + union B { + data: I8x16T, + vec: i8x16, + } + +- #[cfg_attr(rustfmt, rustfmt_skip)] ++ #[rustfmt::skip] + let x = i8x16::new( + 0, 1, 2, 3, 4, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 14, 15, + ); + let x: I8x16T = unsafe { B { vec: x }.data }; + + assert_eq!(x.0, 0); + assert_eq!(x.1, 1); +@@ -178,37 +188,37 @@ fn endian_tuple_access() { + assert_eq!(x.9, 9); + assert_eq!(x.10, 10); + assert_eq!(x.11, 11); + assert_eq!(x.12, 12); + assert_eq!(x.13, 13); + assert_eq!(x.14, 14); + assert_eq!(x.15, 15); + +- #[cfg_attr(rustfmt, rustfmt_skip)] ++ #[rustfmt::skip] + let y = ( + 15, 14, 13, 12, 11, 10, 9, 8, + 7, 6, 5, 4, 3, 2, 1, 0 + ); + let z: i8x16 = unsafe { B { data: y }.vec }; +- #[cfg_attr(rustfmt, rustfmt_skip)] ++ #[rustfmt::skip] + let e = i8x16::new( + 15, 14, 13, 12, 11, 10, 9, 8, + 7, 6, 5, 4, 3, 2, 1, 0 + ); + assert_eq!(e, z); + +- #[cfg_attr(rustfmt, rustfmt_skip)] ++ #[rustfmt::skip] + type I16x8T = (i16, i16, i16, i16, i16, i16, i16, i16); + union C { + data: I16x8T, + vec: i8x16, + } + +- #[cfg_attr(rustfmt, rustfmt_skip)] ++ #[rustfmt::skip] + let x = i8x16::new( + 0, 1, 2, 3, 4, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 14, 15, + ); + let x: I16x8T = unsafe { C { vec: x }.data }; + + let e: [i16; 8] = if cfg!(target_endian = "little") { + [256, 770, 1284, 1798, 2312, 2826, 3340, 3854] +@@ -219,28 +229,28 @@ fn endian_tuple_access() { + assert_eq!(x.1, e[1]); + assert_eq!(x.2, e[2]); + assert_eq!(x.3, e[3]); + assert_eq!(x.4, e[4]); + assert_eq!(x.5, e[5]); + assert_eq!(x.6, e[6]); + assert_eq!(x.7, e[7]); + +- #[cfg_attr(rustfmt, rustfmt_skip)] ++ #[rustfmt::skip] + #[repr(C)] + #[derive(Copy ,Clone)] + pub struct Tup(pub i8, pub i8, pub i16, pub i8, pub i8, pub i16, + pub i8, pub i8, pub i16, pub i8, pub i8, pub i16); + + union D { + data: Tup, + vec: i8x16, + } + +- #[cfg_attr(rustfmt, rustfmt_skip)] ++ #[rustfmt::skip] + let x = i8x16::new( + 0, 1, 2, 3, 4, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 14, 15, + ); + let x: Tup = unsafe { D { vec: x }.data }; + + let e: [i16; 12] = if cfg!(target_endian = "little") { + [0, 1, 770, 4, 5, 1798, 8, 9, 2826, 12, 13, 3854] + diff --git a/nonprism/icedove/vendor-prefs.js b/nonprism/icedove/vendor-prefs.js new file mode 100644 index 0000000..701c33e --- /dev/null +++ b/nonprism/icedove/vendor-prefs.js @@ -0,0 +1,32 @@ +// Use LANG environment variable to choose locale +pref("intl.locale.requested", ""); + +// Use system-provided dictionaries +pref("spellchecker.dictionary_path", "/usr/share/hunspell"); + +// Disable default mailer checking +pref("mail.shell.checkDefaultMail", false); + +// Don't disable our bundled extensions in the application directory +pref("extensions.autoDisableScopes", 11); +pref("extensions.shownSelectionUI", true); + +// Disable telemetry +pref("datareporting.healthreport.uploadEnabled", false); +pref("datareporting.policy.dataSubmissionEnabled", false); +pref("toolkit.telemetry.archive.enabled", false); + +// Disable Social API for content +pref("social.remote-install.enabled", false); +pref("social.toast-notifications.enabled", false); + +// Make sure that whitelisted and directory installs are empty +pref("social.whitelist", ""); +pref("social.directories", ""); + +// Disable the GeoLocation API for content +pref("geo.enabled", false); + +// TODO: this "whats new" page should be in the branding package or abslibre +// Pointing the "Help -> What's new" menu entry to mozilla.debian.net +//pref("mailnews.start_page.override_url", "http://wiki.debian.org/Icedove/WhatsNew45"); From 165f126eea67aaed645903ee6288100f63448a48 Mon Sep 17 00:00:00 2001 From: bill-auger Date: Nov 12 2021 08:19:37 +0000 Subject: [PATCH 34/73] [mkinitcpio]: emergency [libre] package --- diff --git a/nonsystemd/mkinitcpio/PKGBUILD b/nonsystemd/mkinitcpio/PKGBUILD index 5ee11d9..d8d12a5 100644 --- a/nonsystemd/mkinitcpio/PKGBUILD +++ b/nonsystemd/mkinitcpio/PKGBUILD @@ -6,13 +6,16 @@ # parabola changes and rationale: # - replace 'systemd' dep with 'udev' -# - emergency patch (udev patch) +# - emergency patch (mkinitcpio/udev patch #3121) +# normally we keep core/mkinitcpio +# !!! REMEMBER to db-remove libre/mkinitcpio !!! +_IS_NONSYSTEMD=false pkgname=mkinitcpio pkgver=30 pkgrel=2 -pkgrel+=.nonsystemd1 +pkgrel+=$(${_IS_NONSYSTEMD} && echo '.nonsystemd1' || echo '.parabola2') pkgdesc="Modular initramfs image creation utility" arch=('any') url='https://github.com/archlinux/mkinitcpio' @@ -20,7 +23,7 @@ license=('GPL') makedepends=('asciidoc') depends=('awk' 'mkinitcpio-busybox>=1.19.4-2' 'kmod' 'util-linux>=2.23' 'libarchive' 'coreutils' 'bash' 'diffutils' 'findutils' 'grep' 'filesystem>=2011.10-1' 'zstd' 'systemd') -depends=( ${depends[*]/systemd/udev} ) +depends=( $(${_IS_NONSYSTEMD} && echo ${depends[*]/systemd/udev} || echo ${depends[*]}) ) optdepends=('gzip: Use gzip compression for the initramfs image' 'xz: Use lzma or xz compression for the initramfs image' 'bzip2: Use bzip2 compression for the initramfs image' @@ -30,16 +33,16 @@ optdepends=('gzip: Use gzip compression for the initramfs image' provides=('initramfs') backup=('etc/mkinitcpio.conf') source=("https://sources.archlinux.org/other/$pkgname/$pkgname-$pkgver.tar.gz"{,.sig}) -source+=(9000-nonsystemd.patch) +source+=( $(${_IS_NONSYSTEMD} && echo '9000-nonsystemd.patch') ) source+=(9001-udev.patch) install=mkinitcpio.install sha512sums=('ef43a8ddc01697fa43bede4eebad3271bbc89efa57ba7e4e9f321e8174ff2af74d857b308c5c0f37b42a91906c91c1b022f9a651c70d5d3e9dfc8dc441a60ee4' 'SKIP') -sha512sums+=('f1ad7792b3b42397c2645e834d4b6c6a89122060455954d1ab56a71c673c3b8a8fdbbd6d722d30195211672b9075d09ac07ce6fb5d9723f56ce540709ebe4665') +sha512sums+=( $(${_IS_NONSYSTEMD} && echo 'f1ad7792b3b42397c2645e834d4b6c6a89122060455954d1ab56a71c673c3b8a8fdbbd6d722d30195211672b9075d09ac07ce6fb5d9723f56ce540709ebe4665') ) sha512sums+=('695e70d85cf4c666b4325113f5f784b06002b0d9c626338b72bec9049a133cd5a2209d73193574da18d8ecac2fab54754cf499c18faaff5b20e2053a4d338b12') b2sums=('2001f9ac12bfa7369ad32842956cd21b2a786cd28133b6d3256e4aa77210c78ec6cac8a710ff8c2feb5a4797c1a33ce8c8c7dfabd84d7927c08bf8377e330300' 'SKIP') -b2sums+=('92e1969572e0022bd257f44314045f57db47821d99a40ea1290749967b50ead1cb11adaa9b79f4286fbf20a94173e0ba7f2d4f88208e31d7a03a8de4ea014396') +b2sums+=( $(${_IS_NONSYSTEMD} && echo '92e1969572e0022bd257f44314045f57db47821d99a40ea1290749967b50ead1cb11adaa9b79f4286fbf20a94173e0ba7f2d4f88208e31d7a03a8de4ea014396') ) b2sums+=('0f53c448b2ada7923c1dbab331a0b68a9e79f402bd7e16388a6ea2da4c7d93539405e4bd86eccdaaabcdfdbb0c01c5ca337ba226b81dd8dc91f6411c4e678c64') validpgpkeys=('ECCAC84C1BA08A6CC8E63FBBF22FB1D78A77AEAB' # Giancarlo Razzolini '86CFFCA918CF3AF47147588051E8B148A9999C34') # Evangelos Foutras @@ -47,7 +50,7 @@ validpgpkeys=('ECCAC84C1BA08A6CC8E63FBBF22FB1D78A77AEAB' # Giancarlo Razzolin prepare() { cd $pkgname-$pkgver - patch -Np1 -i ../9000-nonsystemd.patch + ${_IS_NONSYSTEMD} && patch -Np1 -i ../9000-nonsystemd.patch # https://labs.parabola.nu/issues/3121 # https://github.com/archlinux/mkinitcpio/pull/54 From 514501afde7babfffd056e1af25e970725c140a6 Mon Sep 17 00:00:00 2001 From: bill-auger Date: Nov 12 2021 08:19:47 +0000 Subject: [PATCH 35/73] [blender]: upgrade to v2.93.5 --- diff --git a/libre/blender/PKGBUILD b/libre/blender/PKGBUILD index 67dbf7a..d10280f 100644 --- a/libre/blender/PKGBUILD +++ b/libre/blender/PKGBUILD @@ -13,8 +13,8 @@ pkgname=blender -pkgver=2.93.1 -pkgrel=1 +pkgver=2.93.5 +pkgrel=7 pkgrel+=.parabola1 epoch=17 _pythonver_x86_64=3.9 @@ -31,7 +31,7 @@ depends=('libpng' 'libtiff' 'openexr' 'python' 'desktop-file-utils' 'python-requ 'shared-mime-info' 'hicolor-icon-theme' 'xdg-utils' 'glew' 'openjpeg2' 'python-numpy' 'freetype2' 'openal' 'ffmpeg' 'fftw' 'boost-libs' 'opencollada' 'alembic' 'openxr' 'openimageio' 'libsndfile' 'jack' 'opencolorio' 'openshadinglanguage' 'openimagedenoise' - 'jemalloc' 'libspnav' 'ptex' 'opensubdiv' 'openvdb' 'log4cplus' 'sdl2' 'embree') + 'jemalloc' 'libspnav' 'ptex' 'opensubdiv' 'openvdb' 'log4cplus' 'sdl2' 'embree' 'libharu') [[ "${CARCH}" != 'x86_64' ]] && depends=( ${depends[*]/openimagedenoise/} ) [[ "${CARCH}" == 'armv7h' ]] && depends=( ${depends[*]/embree/} ) makedepends=('cmake' 'boost' 'mesa' 'git' 'llvm' 'cuda' 'ninja') From 8a21673500a481ae5ae98bea165e7bf9f14c3b59 Mon Sep 17 00:00:00 2001 From: Omar Vega Ramos Date: Nov 12 2021 22:42:23 +0000 Subject: [PATCH 36/73] octopi-0.12.0-1.parabola1: updating version --- diff --git a/pcr/octopi/PKGBUILD b/pcr/octopi/PKGBUILD index 47ea287..54ce135 100644 --- a/pcr/octopi/PKGBUILD +++ b/pcr/octopi/PKGBUILD @@ -3,8 +3,8 @@ # Maintainer: Omar Vega Ramos pkgname=octopi -pkgver=0.11.0 -pkgrel=2 +pkgver=0.12.0 +pkgrel=1 pkgrel+=.parabola1 pkgdesc="A powerful Pacman frontend using Qt5 libs, without nonfree pacaur, pikaur, trizen and yay recommendation" arch=('x86_64') @@ -21,7 +21,7 @@ conflicts=('octopi-cachecleaner' 'octopi-notifier' 'octopi-repoeditor' 'octopi-git' 'octopi-kde-git') source=("octopi-${pkgver}.tar.gz::https://github.com/aarnt/octopi/archive/v${pkgver}.tar.gz" 'octopi-repoeditor.desktop') -sha256sums=('0f97626b244d51fca4a67cae208e49dd856cb61e96de6357f5827f9bedead3f4' +sha256sums=('b679a3822d3060dfe5a4fd2ba68b50b4db6d7bf0e68197ca330ee9cb66e2b0c5' '131f16745df685430db55e54ede6da66aed9b02ca00d6d873a002b2a3e1c90ef') _subdirs=(helper repoeditor cachecleaner sudo notifier) From 359e2c4e7f3637bbb58712c62c0ab1ef9225edcf Mon Sep 17 00:00:00 2001 From: Omar Vega Ramos Date: Nov 18 2021 21:44:09 +0000 Subject: [PATCH 37/73] systemd-249.6-3.parabola1: updating version --- diff --git a/libre/systemd/PKGBUILD b/libre/systemd/PKGBUILD index 85072d6..bfc8c65 100644 --- a/libre/systemd/PKGBUILD +++ b/libre/systemd/PKGBUILD @@ -11,10 +11,10 @@ pkgname+=('systemd-common' 'systemd-udev') # We split Arch's systemd-libs into systemd-$X, for the following $X: _systemd_libs=('libsystemd' 'libudev' 'nss-systemd' 'nss-myhostname' 'nss-mymachines' 'nss-resolve') pkgname+=("${_systemd_libs[@]/#/systemd-}") -_tag='f1d37a5c491d85255e9996960dc2889a15022b78' # git rev-parse v${_tag_name} -_tag_name=249.5 +_tag='620928e8026166a00d31142f0b38ba8b8e498cc4' # git rev-parse v${_tag_name} +_tag_name=249.6 pkgver="${_tag_name/-/}" -pkgrel=2 +pkgrel=3 pkgrel+=.parabola1 arch=('x86_64') arch+=('i686' 'armv7h' 'ppc64le') @@ -65,8 +65,8 @@ sha512sums=('SKIP' '10f3b477527ec263cc6465c84d94416e356435930edc9e26844a0fd4f71e87a27fa0f91ce24b43a22cacdd2ead5e760e9d607369bc537a8da8d34021302a89a1' '34541f1967536524329867f9f341f8d9250d9d771c60dc3e6a22ccb82fc01f103cfd3f9903329777591ccbecd2446622a5d6b3804fa0411482b85c70593ee8ad' 'f0d933e8c6064ed830dec54049b0a01e27be87203208f6ae982f10fb4eddc7258cb2919d594cbfb9a33e74c3510cfd682f3416ba8e804387ab87d1a217eb4b73' - 'f599e1a35cba2c4e83e37c2299fac23ae128d8f68081283e71e1729384975dee1c4b677787f31a17890aeb98c8d2fc90405a202644290708ef9c027315022b17' - 'a25b28af2e8c516c3a2eec4e64b8c7f70c21f974af4a955a4a9d45fd3e3ff0d2a98b4419fe425d47152d5acae77d64e69d8d014a7209524b75a81b0edb10bf3a' + '77582416df858e34bc05a9928ddacbe506d24946576cb7c08c7131cf2a9e059d8ff80b226684fc942bca2edf0c6d2584fa3e22939284b102b30395450784c4d3' + '8af5d7b1553be0cc193440dbb94683c2d2d777634dac4369716d75a1b2c2564551c836f3aee8220edfa5ef59122dea737bfe60c588637249bf67e15dba0534d0' '70b3f1d6aaa9cd4b6b34055a587554770c34194100b17b2ef3aaf4f16f68da0865f6b3ae443b3252d395e80efabd412b763259ffb76c902b60e23b6b522e3cc8' '6c6f579644ea2ebb6b46ee274ab15110718b0de40def8c30173ba8480b045d403f2aedd15b50ad9b96453f4ad56920d1350ff76563755bb9a80b10fa7f64f1d9' 'a50bc85061a9a16d776235099867bc1a17c17dddb74c1ecf5614c849735a9779c5e34e5ddca8ca6af4b59a40f57c08ecf219b98cab09476ddb0f110e6a35e45c' @@ -91,11 +91,8 @@ sha512sums=('SKIP' '28a5b3fc9e2c5cec9267bb96725c73ee77788514f140c0cf8df765af64bc8130dd02f4863d9128ac45d54256b2ab4f2b06d1a3f65660ce1dfba5727618cd1839') _backports=( - # coredumpctl: stop truncating information about coredump - '473627e1c9fcdf8f819ced2bb79cb7e9ff598b0c' - - # Revert "core: Check unit start rate limiting earlier" - '4fa9d8f14523982482386d398d2b2669902f2098' + # scope: count successful cgroup additions when delegating via D-Bus + 'c65417a01121301fdf7f8514ee7663d287af3a72' ) _reverts=( @@ -139,12 +136,12 @@ build() { # * Cloudflare (https://1.1.1.1/) # * Quad9 without filtering (https://www.quad9.net/) # * Google (https://developers.google.com/speed/public-dns/) - 1.1.1.1 - 9.9.9.10 - 8.8.8.8 - 2606:4700:4700::1111 - 2620:fe::10 - 2001:4860:4860::8888 + 1.1.1.1#cloudflare-dns.com + 9.9.9.10#dns.quad9.net + 8.8.8.8#dns.google + 2606:4700:4700::1111#cloudflare-dns.com + 2620:fe::10#dns.quad9.net + 2001:4860:4860::8888#dns.google ) if [ "$CARCH" = "armv7h" ]; then diff --git a/libre/systemd/initcpio-install-systemd b/libre/systemd/initcpio-install-systemd index 05ccb90..f53ffb6 100644 --- a/libre/systemd/initcpio-install-systemd +++ b/libre/systemd/initcpio-install-systemd @@ -1,5 +1,8 @@ #!/bin/bash +# This is in 'udev' and 'systemd' hook... Let's hope we have +# it in mkinitcpio soon. +# https://github.com/archlinux/mkinitcpio/pull/54 add_udev_rule() { # Add an udev rules file to the initcpio image. Dependencies on binaries # will be discovered and added. diff --git a/libre/systemd/initcpio-install-udev b/libre/systemd/initcpio-install-udev index 31d9827..713fbf4 100644 --- a/libre/systemd/initcpio-install-udev +++ b/libre/systemd/initcpio-install-udev @@ -1,18 +1,65 @@ #!/bin/bash +# This is in 'udev' and 'systemd' hook... Let's hope we have +# it in mkinitcpio soon. +# https://github.com/archlinux/mkinitcpio/pull/54 +add_udev_rule() { + # Add an udev rules file to the initcpio image. Dependencies on binaries + # will be discovered and added. + # $1: path to rules file (or name of rules file) + + local rules="$1" rule= key= value= binary= + + if [[ ${rules:0:1} != '/' ]]; then + rules=$(PATH=/usr/lib/udev/rules.d:/lib/udev/rules.d type -P "$1") + fi + if [[ -z $rules ]]; then + # complain about not found rules + return 1 + fi + + add_file "$rules" /usr/lib/udev/rules.d/"${rules##*/}" + + while IFS=, read -ra rule; do + # skip empty lines, comments + [[ -z $rule || $rule = @(+([[:space:]])|#*) ]] && continue + + for pair in "${rule[@]}"; do + IFS=' =' read -r key value <<< "$pair" + case $key in + RUN@({program}|+)|IMPORT{program}|ENV{REMOVE_CMD}) + # strip quotes + binary=${value//[\"\']/} + # just take the first word as the binary name + binary=${binary%% *} + [[ ${binary:0:1} == '$' ]] && continue + if [[ ${binary:0:1} != '/' ]]; then + binary=$(PATH=/usr/lib/udev:/lib/udev type -P "$binary") + fi + add_binary "$binary" + ;; + esac + done + done <"$rules" +} + build() { local rules tool - add_binary /usr/lib/systemd/systemd-udevd - add_binary /usr/bin/udevadm - add_binary /usr/bin/systemd-tmpfiles + map add_binary \ + '/usr/lib/systemd/systemd-udevd' \ + '/usr/bin/udevadm' \ + '/usr/bin/systemd-tmpfiles' - for rules in 50-udev-default.rules 60-persistent-storage.rules 64-btrfs.rules 80-drivers.rules; do - add_file "/usr/lib/udev/rules.d/$rules" - done - for tool in ata_id scsi_id; do - add_file "/usr/lib/udev/$tool" - done + map add_udev_rule \ + '50-udev-default.rules' \ + '60-persistent-storage.rules' \ + '64-btrfs.rules' \ + '80-drivers.rules' + + map add_file \ + '/usr/lib/udev/ata_id' \ + '/usr/lib/udev/scsi_id' add_runscript } From d544044d45ebb3a3f0c688cd640c6c354c9f3e1c Mon Sep 17 00:00:00 2001 From: bill-auger Date: Nov 21 2021 03:33:25 +0000 Subject: [PATCH 38/73] libre: Add mkinitcpio mkinitcpio-30-2.parabola2-any.src.tar.gz source code The process of packages releases makes it very easy to forget to push a package or its source code to git: - A developer can push to abslibre and forget to build the package, or that developer might want to build the package later on for various reasons. - A developer can also push the package and forget to push the corresponding git commits to abslibre. I often am in the first case, but here we are in the later case. Fortunately the process of packages releases also makes it easy to find that source code. The source code of libre/mkinitcpio can be found here: https://repo.parabola.nu/sources/parabola/mkinitcpio-30-2.parabola1-any.src.tar.gz https://repo.parabola.nu/sources/parabola/mkinitcpio-30-2.parabola1-any.src.tar.gz.sig And we can even verify its signature: $ gpg --verify mkinitcpio-30-2.parabola2-any.src.tar.gz.sig gpg: assuming signed data in 'mkinitcpio-30-2.parabola2-any.src.tar.gz' gpg: Signature made sam. 06 nov. 2021 03:42:02 CET gpg: using RSA key FBCC5AD7421197B7ABA72853908710913E8C7778 gpg: Good signature from "bill-auger " [unknown] gpg: aka "bill-auger " [unknown] gpg: aka "bill-auger " [unknown] gpg: aka "[jpeg image of size 6017]" [unknown] gpg: Note: This key has expired! Primary key fingerprint: 3954 A7AB 837D 0EA9 CFA9 7989 25DB 7D9B 5A8D 4B40 Subkey fingerprint: FBCC 5AD7 4211 97B7 ABA7 2853 9087 1091 3E8C 7778 So we can safely import the source back in abslibre. The archive has a bit more than needed for this specific situation: $ tar tf ../mkinitcpio-30-2.parabola2-any.src.tar.gz mkinitcpio/ mkinitcpio/mkinitcpio-30.tar.gz mkinitcpio/PKGBUILD mkinitcpio/.SRCINFO mkinitcpio/mkinitcpio.install mkinitcpio/mkinitcpio-30.tar.gz.sig mkinitcpio/9001-udev.patch So I only used the PKGBUILD, mkinitcpio.install and 9001-udev.patch files here as we don't commit the .SRCINFO or source tarballs to git in Parabola. Signed-off-by: Denis 'GNUtoo' Carikli --- diff --git a/libre/mkinitcpio/9001-udev.patch b/libre/mkinitcpio/9001-udev.patch new file mode 100644 index 0000000..0de1067 --- /dev/null +++ b/libre/mkinitcpio/9001-udev.patch @@ -0,0 +1,52 @@ +$ curl https://github.com/archlinux/mkinitcpio/commit/9ee1333a5f3302d7ddb004cf0909c94b4cff60ba.diff +diff --git a/functions b/functions +index 9539a60..f95fb92 100644 +--- a/functions ++++ b/functions +@@ -625,6 +625,46 @@ add_binary() { + return 0 + } + ++add_udev_rule() { ++ # Add an udev rules file to the initcpio image. Dependencies on binaries ++ # will be discovered and added. ++ # $1: path to rules file (or name of rules file) ++ ++ local rules="$1" rule= key= value= binary= ++ ++ if [[ ${rules:0:1} != '/' ]]; then ++ rules=$(PATH=/usr/lib/udev/rules.d:/lib/udev/rules.d type -P "$rules") ++ fi ++ if [[ -z $rules ]]; then ++ # complain about not found rules ++ return 1 ++ fi ++ ++ add_file "$rules" /usr/lib/udev/rules.d/"${rules##*/}" ++ ++ while IFS=, read -ra rule; do ++ # skip empty lines, comments ++ [[ -z $rule || $rule = @(+([[:space:]])|#*) ]] && continue ++ ++ for pair in "${rule[@]}"; do ++ IFS=' =' read -r key value <<< "$pair" ++ case $key in ++ RUN@({program}|+)|IMPORT{program}|ENV{REMOVE_CMD}) ++ # strip quotes ++ binary=${value//[\"\']/} ++ # just take the first word as the binary name ++ binary=${binary%% *} ++ [[ ${binary:0:1} == '$' ]] && continue ++ if [[ ${binary:0:1} != '/' ]]; then ++ binary=$(PATH=/usr/lib/udev:/lib/udev type -P "$binary") ++ fi ++ add_binary "$binary" ++ ;; ++ esac ++ done ++ done <"$rules" ++} ++ + parse_config() { + # parse key global variables set by the config file. + diff --git a/libre/mkinitcpio/PKGBUILD b/libre/mkinitcpio/PKGBUILD new file mode 100644 index 0000000..d8d12a5 --- /dev/null +++ b/libre/mkinitcpio/PKGBUILD @@ -0,0 +1,67 @@ +# Maintainer (Arch): Giancarlo Razzolini +# Maintainer (Arch): Dave Reisner +# Maintainer (Arch): Thomas Bächler +# Maintainer: David P. + + +# parabola changes and rationale: +# - replace 'systemd' dep with 'udev' +# - emergency patch (mkinitcpio/udev patch #3121) +# normally we keep core/mkinitcpio +# !!! REMEMBER to db-remove libre/mkinitcpio !!! +_IS_NONSYSTEMD=false + + +pkgname=mkinitcpio +pkgver=30 +pkgrel=2 +pkgrel+=$(${_IS_NONSYSTEMD} && echo '.nonsystemd1' || echo '.parabola2') +pkgdesc="Modular initramfs image creation utility" +arch=('any') +url='https://github.com/archlinux/mkinitcpio' +license=('GPL') +makedepends=('asciidoc') +depends=('awk' 'mkinitcpio-busybox>=1.19.4-2' 'kmod' 'util-linux>=2.23' 'libarchive' 'coreutils' + 'bash' 'diffutils' 'findutils' 'grep' 'filesystem>=2011.10-1' 'zstd' 'systemd') +depends=( $(${_IS_NONSYSTEMD} && echo ${depends[*]/systemd/udev} || echo ${depends[*]}) ) +optdepends=('gzip: Use gzip compression for the initramfs image' + 'xz: Use lzma or xz compression for the initramfs image' + 'bzip2: Use bzip2 compression for the initramfs image' + 'lzop: Use lzo compression for the initramfs image' + 'lz4: Use lz4 compression for the initramfs image' + 'mkinitcpio-nfs-utils: Support for root filesystem on NFS') +provides=('initramfs') +backup=('etc/mkinitcpio.conf') +source=("https://sources.archlinux.org/other/$pkgname/$pkgname-$pkgver.tar.gz"{,.sig}) +source+=( $(${_IS_NONSYSTEMD} && echo '9000-nonsystemd.patch') ) +source+=(9001-udev.patch) +install=mkinitcpio.install +sha512sums=('ef43a8ddc01697fa43bede4eebad3271bbc89efa57ba7e4e9f321e8174ff2af74d857b308c5c0f37b42a91906c91c1b022f9a651c70d5d3e9dfc8dc441a60ee4' + 'SKIP') +sha512sums+=( $(${_IS_NONSYSTEMD} && echo 'f1ad7792b3b42397c2645e834d4b6c6a89122060455954d1ab56a71c673c3b8a8fdbbd6d722d30195211672b9075d09ac07ce6fb5d9723f56ce540709ebe4665') ) +sha512sums+=('695e70d85cf4c666b4325113f5f784b06002b0d9c626338b72bec9049a133cd5a2209d73193574da18d8ecac2fab54754cf499c18faaff5b20e2053a4d338b12') +b2sums=('2001f9ac12bfa7369ad32842956cd21b2a786cd28133b6d3256e4aa77210c78ec6cac8a710ff8c2feb5a4797c1a33ce8c8c7dfabd84d7927c08bf8377e330300' + 'SKIP') +b2sums+=( $(${_IS_NONSYSTEMD} && echo '92e1969572e0022bd257f44314045f57db47821d99a40ea1290749967b50ead1cb11adaa9b79f4286fbf20a94173e0ba7f2d4f88208e31d7a03a8de4ea014396') ) +b2sums+=('0f53c448b2ada7923c1dbab331a0b68a9e79f402bd7e16388a6ea2da4c7d93539405e4bd86eccdaaabcdfdbb0c01c5ca337ba226b81dd8dc91f6411c4e678c64') +validpgpkeys=('ECCAC84C1BA08A6CC8E63FBBF22FB1D78A77AEAB' # Giancarlo Razzolini + '86CFFCA918CF3AF47147588051E8B148A9999C34') # Evangelos Foutras + +prepare() { + cd $pkgname-$pkgver + + ${_IS_NONSYSTEMD} && patch -Np1 -i ../9000-nonsystemd.patch + + # https://labs.parabola.nu/issues/3121 + # https://github.com/archlinux/mkinitcpio/pull/54 + # https://github.com/archlinux/mkinitcpio/commit/9ee1333a5f3302d7ddb004cf0909c94b4cff60ba.diff + patch -Np1 -i ../9001-udev.patch +} + +check() { + make -C "$pkgname-$pkgver" check +} + +package() { + make -C "$pkgname-$pkgver" DESTDIR="$pkgdir" install +} diff --git a/libre/mkinitcpio/mkinitcpio.install b/libre/mkinitcpio/mkinitcpio.install new file mode 100644 index 0000000..8571ee7 --- /dev/null +++ b/libre/mkinitcpio/mkinitcpio.install @@ -0,0 +1,15 @@ +#!/bin/sh + +post_upgrade() { + if [ "$(vercmp 0.9.0 "$2")" -eq 1 ]; then + printf '==> If your /usr is on a separate partition, you must add the "usr" hook\n' + printf ' to /etc/mkinitcpio.conf and regenerate your images before rebooting\n' + fi + + if [ "$(vercmp 0.12.0 "$2")" -eq 1 ]; then + printf '==> The "block" hook has replaced several hooks:\n' + printf ' fw, sata, pata, scsi, virtio, mmc, usb\n' + printf ' Replace any and all of these in /etc/mkinitcpio.conf with a single\n' + printf ' instance of the "block" hook\n' + fi +} From 48992f9bd4b321688ee3dd99cd2c29776a63f41e Mon Sep 17 00:00:00 2001 From: Denis 'GNUtoo' Carikli Date: Nov 21 2021 03:43:11 +0000 Subject: [PATCH 39/73] libre: mkinitcpio: bump package revision to workaround expired key Without that fix, we have the following error while installing or upgrading mkinitcpio: error: mkinitcpio: signature from "bill-auger " is unknown trust :: File /var/cache/pacman/pkg/mkinitcpio-30-2.parabola2-any.pkg.tar.zst is corrupted (invalid or corrupted package (PGP signature)). This is because the corresponding gpg key is expired: # gpg --recv-keys FBCC5AD7421197B7ABA72853908710913E8C7778 gpg: key 25DB7D9B5A8D4B40: public key "bill-auger " imported gpg: Total number processed: 1 gpg: imported: 1 # gpg --verify /var/cache/pacman/pkg/mkinitcpio-30-2.parabola2-any.pkg.tar.zst.sig gpg: assuming signed data in '/var/cache/pacman/pkg/mkinitcpio-30-2.parabola2-any.pkg.tar.zst' gpg: Signature made sam. 06 nov. 2021 03:41:54 CET gpg: using RSA key FBCC5AD7421197B7ABA72853908710913E8C7778 gpg: Good signature from "bill-auger " [expired] gpg: aka "bill-auger " [expired] gpg: aka "bill-auger " [expired] gpg: aka "[jpeg image of size 6017]" [expired] gpg: Note: This key has expired! Primary key fingerprint: 3954 A7AB 837D 0EA9 CFA9 7989 25DB 7D9B 5A8D 4B40 Subkey fingerprint: FBCC 5AD7 4211 97B7 ABA7 2853 9087 1091 3E8C 7778 Key expirations often happen when because there are conflicting best security practices with key expiration dates: for long term software releases, it's better if the key don't have too short expiration dates, especially if users can't easily update the key, but short key expirations help a lot for security and for uses cases like mail, if you loose your key, having a short expiration date will ensure that people will (shortly) stop sending you mail that you can't decrypt. In addition keeping a key always up to date can in some case be very complex. Signed-off-by: Denis 'GNUtoo' Carikli --- diff --git a/libre/mkinitcpio/PKGBUILD b/libre/mkinitcpio/PKGBUILD index d8d12a5..1a77552 100644 --- a/libre/mkinitcpio/PKGBUILD +++ b/libre/mkinitcpio/PKGBUILD @@ -14,7 +14,7 @@ _IS_NONSYSTEMD=false pkgname=mkinitcpio pkgver=30 -pkgrel=2 +pkgrel=3 pkgrel+=$(${_IS_NONSYSTEMD} && echo '.nonsystemd1' || echo '.parabola2') pkgdesc="Modular initramfs image creation utility" arch=('any') From 02c4384f1077233b0f07bbf69417603e30676b43 Mon Sep 17 00:00:00 2001 From: Denis 'GNUtoo' Carikli Date: Nov 21 2021 03:53:17 +0000 Subject: [PATCH 40/73] libre: pacman-mirrorlist: bump package revision to workaround expired key Without that fix, we have the following error while installing or upgrading mkinitcpio: error: pacman-mirrorlist: signature from "bill-auger " is unknown trust :: File /var/cache/pacman/pkg/pacman-mirrorlist-20210803-1.parabola1-any.pkg.tar.xz is corrupted (invalid or corrupted package (PGP signature)). This is because the corresponding gpg key is expired. Key expirations often happen when because there are conflicting best security practices with key expiration dates: for long term software releases, it's better if the key don't have too short expiration dates, especially if users can't easily update the key, but short key expirations help a lot for security and for uses cases like mail, if you loose your key, having a short expiration date will ensure that people will (shortly) stop sending you mail that you can't decrypt. In addition keeping a key always up to date can in some case be very complex. Signed-off-by: Denis 'GNUtoo' Carikli --- diff --git a/libre/pacman-mirrorlist/PKGBUILD b/libre/pacman-mirrorlist/PKGBUILD index ce1e992..21ea9d9 100644 --- a/libre/pacman-mirrorlist/PKGBUILD +++ b/libre/pacman-mirrorlist/PKGBUILD @@ -14,7 +14,7 @@ pkgname=pacman-mirrorlist -pkgver=20210803 +pkgver=20211121 pkgrel=1.parabola1 pkgdesc="Parabola GNU/Linux-libre mirror list for use by pacman" arch=('any') From c1d2d927da8a5ff798b478ef5f056cab6a181838 Mon Sep 17 00:00:00 2001 From: Denis 'GNUtoo' Carikli Date: Nov 21 2021 04:05:34 +0000 Subject: [PATCH 41/73] libre: asciidoc: bump package revision to workaround expired key Without that fix, we have the following error while installing or upgrading asciidoc: | > error: asciidoc: signature from "bill-auger " is unknown trust | > :: File /var/cache/pacman/pkg/asciidoc-8.6.10-2.parabola1-any.pkg.tar.xz is corrupted (invalid or corrupted package (PGP signature)). | > Do you want to delete it? [Y/n] error: failed to commit transaction (invalid or corrupted package) This is because the corresponding gpg key is expired. Key expirations often happen when because there are conflicting best security practices with key expiration dates: for long term software releases, it's better if the key don't have too short expiration dates, especially if users can't easily update the key, but short key expirations help a lot for security and for uses cases like mail, if you loose your key, having a short expiration date will ensure that people will (shortly) stop sending you mail that you can't decrypt. In addition keeping a key always up to date can in some case be very complex. Signed-off-by: Denis 'GNUtoo' Carikli --- diff --git a/libre/asciidoc/PKGBUILD b/libre/asciidoc/PKGBUILD index 9ab8712..62c8fba 100644 --- a/libre/asciidoc/PKGBUILD +++ b/libre/asciidoc/PKGBUILD @@ -10,7 +10,7 @@ pkgname=asciidoc pkgver=8.6.10 -pkgrel=2 +pkgrel=3 pkgrel+=.parabola1 pkgdesc='Text document format for short documents, articles, books and UNIX man pages.' arch=('any') From 4de3563745ac22868d3ef261a1013ccd092a1384 Mon Sep 17 00:00:00 2001 From: Denis 'GNUtoo' Carikli Date: Nov 21 2021 06:27:38 +0000 Subject: [PATCH 42/73] libre: asciidoc: sync with Arch Linux by updating to 9.1.0-1 The changes and rationale was added as well from information that comes from the bug #717 [1]. [1]https://labs.parabola.nu/issues/717 Signed-off-by: Denis 'GNUtoo' Carikli --- diff --git a/libre/asciidoc/PKGBUILD b/libre/asciidoc/PKGBUILD index 62c8fba..646f799 100644 --- a/libre/asciidoc/PKGBUILD +++ b/libre/asciidoc/PKGBUILD @@ -1,68 +1,68 @@ +# Maintainer (Arch): Eli Schwartz +# Maintainer (Arch): Levente Polyak +# Contributor (Arch): Florian Pritz # Contributor (Arch): Chris Brannon # Contributor (Arch): Geoffroy Carrier # Contributor (Arch): Dan McGee # Contributor (Arch): Jaroslaw Rosiek # Contributor (Arch): Darwin Bautista # Contributor (Arch): Daniel J Griffiths -# Maintainer (Arch): Florian Pritz # Contributor: André Silva # Contributor: Andreas Grapentin +# Contributor: Denis 'GNUtoo' Carikli + +# parabola changes and rationale: +# - Removed fop optional dependency as fop is blacklisted + pkgname=asciidoc -pkgver=8.6.10 -pkgrel=3 +pkgver=9.1.0 +pkgrel=1 pkgrel+=.parabola1 -pkgdesc='Text document format for short documents, articles, books and UNIX man pages.' +pkgdesc='Text document format for short documents, articles, books and UNIX man pages' arch=('any') -url='https://www.methods.co.nz/asciidoc/' +url='https://asciidoc.org/' license=('GPL') -depends=('python2' 'libxslt' 'docbook-xsl') -optdepends=('lilypond: music-filter' +depends=('python' 'libxslt' 'docbook-xsl') +checkdepends=('dblatex' 'graphviz' 'lilypond' 'source-highlight') +optdepends=('graphviz: graphviz-filter' + 'lilypond: music-filter' 'imagemagick: music-filter (used in conjunction with lilypond)' 'source-highlight: source-highlight-filter' 'dblatex: pdf generation' - 'lynx: text generation' - 'w3m: text generation (alternative to lynx)') -source=("${pkgname}-${pkgver}.tar.gz::https://github.com/asciidoc/asciidoc/archive/${pkgver}.tar.gz") -sha256sums=('9e52f8578d891beaef25730a92a6e723596ddbd07bfe0d2a56486fcf63a0b983') + 'w3m: text generation (alternative to lynx)' + 'lynx: text generation') +source=("https://github.com/asciidoc/asciidoc-py3/archive/${pkgver}/${pkgname}-${pkgver}.tar.gz") +sha256sums=('8a6e3ae99785d9325fba0856e04dbe532492af3cb20d49831bfd757166d46c6b') +b2sums=('dd2376a3b9ffa1d7a8016c9eb1030a9d0d3a01cde587d3179cb425a5be5ae120ea7fc1fa971cb1bb53faa2a7e93b4a1c2e8cf854e7e960c1299398a02b8aa42e') prepare() { - cd ${pkgname}-${pkgver} + cd ${pkgname}-py3-${pkgver} - # python2 fix - #for file in asciidocapi.py a2x.py asciidoc.py filters/music/music2png.py filters/latex/latex2png.py \ - #filters/code/code-filter.py filters/graphviz/graphviz2png.py; do - #sed -i 's_#!/usr/bin/env python_#!/usr/bin/env python2_' $file - #done - #sed -i -e 's_sys:python_sys:python2_g' -e 's_sys3:python_sys3:python2_g' xhtml11.conf - #sed -i 's_sys:python_sys:python2_g' xhtml11-quirks.conf - #sed -i -e 's/{python}/{python2}/g' \ - #-e 's#{language@python:py:#{language@python2:py:#' \ - #filters/source/source-highlight-filter.conf \ - #html5.conf xhtml11.conf xhtml11-quirks.conf - #sed -i -e "s#'python'#'python2'#g" filters/code/code-filter.py - sed -i -e 's#python a2x.py#python2 a2x.py#' Makefile.in + autoconf } build() { - cd ${pkgname}-${pkgver} + cd ${pkgname}-py3-${pkgver} - autoconf ./configure \ --prefix=/usr \ --sysconfdir=/etc + make manpages +} + +check() { + cd ${pkgname}-py3-${pkgver} + + make test } package() { - cd ${pkgname}-${pkgver} + cd ${pkgname}-py3-${pkgver} - make install DESTDIR=${pkgdir} - make docs DESTDIR=${pkgdir} + make install DESTDIR="${pkgdir}" + make docs DESTDIR="${pkgdir}" install -Dm644 asciidocapi.py \ - ${pkgdir}/usr/lib/python2.7/site-packages/asciidocapi.py - - # fix FS#21579 - [asciidoc] 8.6.2-2 "asciidoc" table style doesn't work (mismatched python version) - #sed -i 's/python/python2/' \ - #${pkgdir}/etc/asciidoc/asciidoc.conf + "${pkgdir}/$(python -c 'import sysconfig; print(sysconfig.get_paths()["platlib"])')"/asciidocapi.py } From ea9eca9832d9f83417de0fc26cb93130a2b47f6c Mon Sep 17 00:00:00 2001 From: Denis 'GNUtoo' Carikli Date: Nov 21 2021 06:37:17 +0000 Subject: [PATCH 43/73] libre: texlive-bin: bump package revision to workaround expired key Without that fix, we have the following error while installing or upgrading texlive-bin: error: texlive-bin: signature from "bill-auger " is unknown trust :: File /var/cache/pacman/pkg/texlive-bin-2021.58686-3.parabola8-i686.pkg.tar.xz is corrupted (invalid or corrupted package (PGP signature)). This is because the corresponding gpg key is expired: $ gpg --verify /var/cache/pacman/pkg/texlive-bin-2021.58686-3.parabola8-i686.pkg.tar.xz.sig gpg: assuming signed data in '/var/cache/pacman/pkg/texlive-bin-2021.58686-3.parabola8-i686.pkg.tar.xz' gpg: Signature made mer. 03 nov. 2021 03:02:20 CET gpg: using RSA key FBCC5AD7421197B7ABA72853908710913E8C7778 gpg: Good signature from "bill-auger " [unknown] gpg: aka "bill-auger " [unknown] gpg: aka "bill-auger " [unknown] gpg: aka "[jpeg image of size 6017]" [unknown] gpg: Note: This key has expired! Primary key fingerprint: 3954 A7AB 837D 0EA9 CFA9 7989 25DB 7D9B 5A8D 4B40 Subkey fingerprint: FBCC 5AD7 4211 97B7 ABA7 2853 9087 1091 3E8C 7778 Key expirations often happen when because there are conflicting best security practices with key expiration dates: for long term software releases, it's better if the key don't have too short expiration dates, especially if users can't easily update the key, but short key expirations help a lot for security and for uses cases like mail, if you loose your key, having a short expiration date will ensure that people will (shortly) stop sending you mail that you can't decrypt. In addition keeping a key always up to date can in some case be very complex. Signed-off-by: Denis 'GNUtoo' Carikli --- diff --git a/libre/texlive-bin/PKGBUILD b/libre/texlive-bin/PKGBUILD index 7f86e84..9c7cebd 100644 --- a/libre/texlive-bin/PKGBUILD +++ b/libre/texlive-bin/PKGBUILD @@ -16,7 +16,7 @@ pkgname=('texlive-bin' 'libsynctex') pkgver=2021.58686 -pkgrel=3 +pkgrel=4 pkgrel+=.parabola8 license=('GPL') arch=('x86_64') From f43e6f3cd444f9389d048391ead70225a5c2e2a2 Mon Sep 17 00:00:00 2001 From: Parabola automatic package builder Date: Nov 23 2021 04:31:13 +0000 Subject: [PATCH 44/73] Update libre/your-freedom --- diff --git a/libre/your-freedom/PKGBUILD b/libre/your-freedom/PKGBUILD index 43eb22f..fb1786c 100644 --- a/libre/your-freedom/PKGBUILD +++ b/libre/your-freedom/PKGBUILD @@ -4,8 +4,8 @@ pkgname=your-freedom pkgdesc="This package conflicts with every nonfree package known to date to ensure your system is free." license=('GPL3') url="https://git.parabola.nu/blacklist.git" -pkgver=20211031 -_gitver=3cc30bc2bfdaa2cdb47d3ab78d6ffd855307d50c +pkgver=20211123 +_gitver=cc37fafda2f205815f394f16b251a40a5001fb6a pkgrel=1 arch=('any') @@ -13,7 +13,7 @@ install=${pkgname}.install makedepends=(librelib) source=(blacklist-${_gitver}.txt::https://git.parabola.nu/blacklist.git/plain/blacklist.txt?id=${_gitver}) -sha512sums=('4a43619f7b19dfc2a12f0b769c097518f93d1a88159716148c0a2477df69ff6369fd8426a5ccadae8c4e9a152306f2724763a13183aca6a10f2c21292be1d1c9') +sha512sums=('e7f2cab0c0b2fbf2238acee998303b66ce82fa8e6b6acaf5559513ca0d017c97c52d254d4d6299751d4a0a4cbc7576db1eb31698b49e44dd9f7ff1857c341bad') package() { From 0451813a0d734a6d4897bf14485371fab0c0f159 Mon Sep 17 00:00:00 2001 From: bill-auger Date: Nov 23 2021 06:05:10 +0000 Subject: [PATCH 45/73] [quassel]: rebuild against latest libldap --- diff --git a/libre/quassel/0001-qtui-Set-desktop-file-name.patch b/libre/quassel/0001-qtui-Set-desktop-file-name.patch index e82bb8d..10f017e 100644 --- a/libre/quassel/0001-qtui-Set-desktop-file-name.patch +++ b/libre/quassel/0001-qtui-Set-desktop-file-name.patch @@ -1,5 +1,4 @@ -From 919ac3d7184faee0ccfa7fe65c6635a7dcf5d234 Mon Sep 17 00:00:00 2001 -Message-Id: <919ac3d7184faee0ccfa7fe65c6635a7dcf5d234.1553291431.git.jan.steffens@gmail.com> +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: "Jan Alexander Steffens (heftig)" Date: Fri, 22 Mar 2019 22:37:22 +0100 Subject: [PATCH] qtui: Set desktop file name @@ -18,7 +17,7 @@ confused. 2 files changed, 6 insertions(+) diff --git a/src/qtui/monoapplication.cpp b/src/qtui/monoapplication.cpp -index 809f1147..3f60523f 100644 +index 809f1147..457a5dce 100644 --- a/src/qtui/monoapplication.cpp +++ b/src/qtui/monoapplication.cpp @@ -32,6 +32,9 @@ MonolithicApplication::MonolithicApplication(int &argc, char **argv) @@ -26,13 +25,13 @@ index 809f1147..3f60523f 100644 { Quassel::setRunMode(Quassel::Monolithic); +#if QT_VERSION >= 0x050700 -+ QGuiApplication::setDesktopFileName(Quassel::buildInfo().applicationName + ".desktop"); ++ QGuiApplication::setDesktopFileName(Quassel::buildInfo().applicationName); +#endif } diff --git a/src/qtui/qtuiapplication.cpp b/src/qtui/qtuiapplication.cpp -index e5b0b773..989a1961 100644 +index e5b0b773..42e4bf77 100644 --- a/src/qtui/qtuiapplication.cpp +++ b/src/qtui/qtuiapplication.cpp @@ -92,6 +92,9 @@ QtUiApplication::QtUiApplication(int &argc, char **argv) @@ -40,11 +39,8 @@ index e5b0b773..989a1961 100644 QGuiApplication::setFallbackSessionManagementEnabled(false); #endif +#if QT_VERSION >= 0x050700 -+ QGuiApplication::setDesktopFileName(Quassel::buildInfo().clientApplicationName + ".desktop"); ++ QGuiApplication::setDesktopFileName(Quassel::buildInfo().clientApplicationName); +#endif } --- -2.21.0 - diff --git a/libre/quassel/0002-common-Disable-enum-type-stream-operators-for-Qt-5.1.patch b/libre/quassel/0002-common-Disable-enum-type-stream-operators-for-Qt-5.1.patch new file mode 100644 index 0000000..734501f --- /dev/null +++ b/libre/quassel/0002-common-Disable-enum-type-stream-operators-for-Qt-5.1.patch @@ -0,0 +1,35 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Manuel Nickschas +Date: Tue, 7 Jan 2020 18:34:54 +0100 +Subject: [PATCH] common: Disable enum type stream operators for Qt >= 5.14 + +Starting from version 5.14, Qt provides stream operators for enum +types, which collide with the ones we ship in types.h. Disable +Quassel's stream operators when compiling against Qt 5.14 or later. + +Add a unit test that ensures that enum serialization honors the width +of the underlying type. +--- + src/common/types.h | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/src/common/types.h b/src/common/types.h +index 467d9fb2..c4b9f364 100644 +--- a/src/common/types.h ++++ b/src/common/types.h +@@ -140,6 +140,7 @@ Q_DECLARE_METATYPE(QHostAddress) + typedef QList MsgIdList; + typedef QList BufferIdList; + ++#if QT_VERSION < QT_VERSION_CHECK(5, 14, 0) + /** + * Catch-all stream serialization operator for enum types. + * +@@ -169,6 +170,7 @@ QDataStream &operator>>(QDataStream &in, T &value) { + value = static_cast(v); + return in; + } ++#endif + + // Exceptions + diff --git a/libre/quassel/0003-Removed-mozilla-IRC-network-from-networks.ini.patch b/libre/quassel/0003-Removed-mozilla-IRC-network-from-networks.ini.patch new file mode 100644 index 0000000..7a745de --- /dev/null +++ b/libre/quassel/0003-Removed-mozilla-IRC-network-from-networks.ini.patch @@ -0,0 +1,24 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Svetlana T +Date: Sun, 8 Mar 2020 07:46:19 +1100 +Subject: [PATCH] Removed mozilla IRC network from networks.ini + +Mozilla IRC has shut down this month. Mozilla moved their chat services to matrix. I am removing it from the default preset now. +--- + data/networks.ini | 3 --- + 1 file changed, 3 deletions(-) + +diff --git a/data/networks.ini b/data/networks.ini +index 5f8fa029..73afecb3 100644 +--- a/data/networks.ini ++++ b/data/networks.ini +@@ -35,9 +35,6 @@ Servers=irc.gamesnet.net:6667 + [IRCnet] + Servers=irc.ircnet.com:6667,open.ircnet.net:6666,irc.us.ircnet.net:6665,ircnet.netvision.net.il:6666,irc.tokyo.wide.ad.jp:6666,irc.freebsd.org.tw:6666,linz.irc.at:6666,vienna.irc.at:6666,ircnet.realroot.be:6666,irc.datacomm.ch:6664,irc.felk.cvut.cz:6667,random.ircd.de:6666,irc.dotsrc.org:6666,irc.ircnet.ee:6666,irc.cs.hut.fi:6667,ircnet.club-internet.fr:6666,atw.irc.hu:6667,irc.simnet.is:6660,irc.eutelia.it:6664,irc.eutelia.it:7000,irc.tin.it:6665,irc.apollo.lv:6666,irc.apollo.lv:7000,irc.uunet.nl:6660,irc.xs4all.nl:6660,irc.snt.utwente.nl:6660,irc.ifi.uio.no:6667,irc.pvv.ntnu.no:6667,lublin.irc.pl:6666,warszawa.irc.pl:6666,irc.ludd.luth.se:6661,irc.swipnet.se:6660,irc.swipnet.se:8000,irc.arnes.si:6666,irc.link.si:6666,irc.nextra.sk:6666,ircnet.demon.co.uk:6665,ircnet.eversible.com:6665,ircnet.choopa.net:6665 + +-[Mozilla] +-Servers=irc.mozilla.org:+6697,irc.mozilla.org:6667 +- + [OFTC] + Servers=irc.oftc.net:+6697,irc.oftc.net:6667 + diff --git a/libre/quassel/0004-This-commit-changes-the-official-Quassel-IRC-channel.patch b/libre/quassel/0004-This-commit-changes-the-official-Quassel-IRC-channel.patch new file mode 100644 index 0000000..af33d51 --- /dev/null +++ b/libre/quassel/0004-This-commit-changes-the-official-Quassel-IRC-channel.patch @@ -0,0 +1,99 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: phuzion <398094+phuzion@users.noreply.github.com> +Date: Wed, 19 May 2021 18:05:36 +0000 +Subject: [PATCH] This commit changes the official Quassel IRC channel, + (#quassel) from the Freenode IRC network to the Libera IRC network in + response to recent issues which resulted in the entire volunteer staff of + Freenode stepping down. + +For more information about this situation, please read this: +https://gist.github.com/joepie91/df80d8d36cd9d1bde46ba018af497409 +--- + README.md | 6 ++---- + data/networks.ini | 7 +++++-- + src/qtui/aboutdlg.cpp | 2 +- + 3 files changed, 8 insertions(+), 7 deletions(-) + +diff --git a/README.md b/README.md +index c7b03dc2..6f54dfaa 100644 +--- a/README.md ++++ b/README.md +@@ -47,31 +47,29 @@ documentation. + + IRC is the preferred means of getting in touch with the developers. + +-The Quassel IRC Team can be contacted on **`Freenode/#quassel`** +-(or **`#quassel.de`**). If you have trouble getting Quassel to connect, +-you can use [Freenode's webchat][help-freenode]. ++The Quassel IRC Team can be contacted on **`Libera Chat/#quassel`** ++(or **`#quassel.de`**). + + We always welcome new users in our channels! + + You can learn more and reach out to us in several ways: + * [Visit our homepage][web-home] + * [Submit and browse issues on the bugtracker][dev-bugs] + * GitHub issues are not used, but [pull requests][dev-pr-new] are accepted! + * [Email the dev team - devel@quassel-irc.org][dev-email] + + Thanks for reading, + + ~ *The Quassel IRC Team* + + [web-home]: https://quassel-irc.org + [web-download]: https://quassel-irc.org/downloads + [dev-bugs]: https://bugs.quassel-irc.org + [dev-email]: mailto:devel@quassel-irc.org + [dev-pr-new]: https://github.com/quassel/quassel/pull/new/master + [docs-wiki]: https://bugs.quassel-irc.org/projects/quassel-irc/wiki + [docs-wiki-unofficial-build]: https://bugs.quassel-irc.org/projects/quassel-irc/wiki#Unofficial-builds + [docs-wiki-getstart]: https://bugs.quassel-irc.org/projects/quassel-irc/wiki#Getting-started +-[help-freenode]: https://webchat.freenode.net?channels=%23quassel + [repo-changelog]: ChangeLog + [ci-linux-badge]: https://travis-ci.org/quassel/quassel.svg?branch=master + [ci-linux-status-page]: https://travis-ci.org/quassel/quassel/branches +diff --git a/data/networks.ini b/data/networks.ini +index 73afecb3..cf16313e 100644 +--- a/data/networks.ini ++++ b/data/networks.ini +@@ -19,22 +19,25 @@ Servers=irc.efnet.info:6667,irc.efnet.org:6667,irc.inter.net.il:6667,irc.igs.ca: + Servers=irc.enterthegame.com:6667 + + [Freenode] +-Default=Yes +-DefaultChannels=#quassel + Servers=chat.freenode.net:+6697,chat.freenode.net:6667 + + [GalaxyNet] + Servers=irc.galaxynet.org:6662,irc.galaxynet.org:7000,boston.ma.us.galaxynet.org:6661 + + [GameSurge] + Servers=irc.gamesurge.net:6667,irc.eu.gamesurge.net:6667 + + [GamesNET] + Servers=irc.gamesnet.net:6667 + + [IRCnet] + Servers=irc.ircnet.com:6667,open.ircnet.net:6666,irc.us.ircnet.net:6665,ircnet.netvision.net.il:6666,irc.tokyo.wide.ad.jp:6666,irc.freebsd.org.tw:6666,linz.irc.at:6666,vienna.irc.at:6666,ircnet.realroot.be:6666,irc.datacomm.ch:6664,irc.felk.cvut.cz:6667,random.ircd.de:6666,irc.dotsrc.org:6666,irc.ircnet.ee:6666,irc.cs.hut.fi:6667,ircnet.club-internet.fr:6666,atw.irc.hu:6667,irc.simnet.is:6660,irc.eutelia.it:6664,irc.eutelia.it:7000,irc.tin.it:6665,irc.apollo.lv:6666,irc.apollo.lv:7000,irc.uunet.nl:6660,irc.xs4all.nl:6660,irc.snt.utwente.nl:6660,irc.ifi.uio.no:6667,irc.pvv.ntnu.no:6667,lublin.irc.pl:6666,warszawa.irc.pl:6666,irc.ludd.luth.se:6661,irc.swipnet.se:6660,irc.swipnet.se:8000,irc.arnes.si:6666,irc.link.si:6666,irc.nextra.sk:6666,ircnet.demon.co.uk:6665,ircnet.eversible.com:6665,ircnet.choopa.net:6665 + ++[Libera Chat] ++Default=Yes ++DefaultChannels=#quassel ++Servers=irc.libera.chat:+6697,irc.libera.chat:6667 ++ + [OFTC] + Servers=irc.oftc.net:+6697,irc.oftc.net:6667 + +diff --git a/src/qtui/aboutdlg.cpp b/src/qtui/aboutdlg.cpp +index 6b21b0f5..a6c4da25 100644 +--- a/src/qtui/aboutdlg.cpp ++++ b/src/qtui/aboutdlg.cpp +@@ -67,7 +67,7 @@ QString AboutDlg::about() const + QString res {tr("A modern, distributed IRC Client

" + "©%1 by the Quassel Project
" + "
https://quassel-irc.org
" +- "#quassel on Freenode

" ++ "#quassel on Libera Chat

" + "Quassel IRC is dual-licensed under GPLv2 and " + "GPLv3.
" + "Breeze icon theme © Uri Herrera and others, licensed under the " diff --git a/libre/quassel/9000-search-duck.patch b/libre/quassel/9000-search-duck.patch new file mode 100644 index 0000000..9fc77b7 --- /dev/null +++ b/libre/quassel/9000-search-duck.patch @@ -0,0 +1,26 @@ +diff --git a/src/qtui/chatviewsettings.h b/src/qtui/chatviewsettings.h +index 838891b..4d28926 100644 +--- a/src/qtui/chatviewsettings.h ++++ b/src/qtui/chatviewsettings.h +@@ -104,7 +104,7 @@ public: + */ + inline void enableSenderBrackets(bool enabled) { setLocalValue("ShowSenderBrackets", enabled); } + +- inline QString webSearchUrlFormatString() { return localValue("WebSearchUrlFormat", "https://www.google.com/search?q=%s").toString(); } ++ inline QString webSearchUrlFormatString() { return localValue("WebSearchUrlFormat", "https://duckduckgo.com/?q=%s").toString(); } + inline void setWebSearchUrlFormatString(const QString &format) { setLocalValue("WebSearchUrlFormat", format); } + }; + +diff --git a/src/qtui/settingspages/chatviewsettingspage.ui b/src/qtui/settingspages/chatviewsettingspage.ui +index 99f568a..7d13fff 100644 +--- a/src/qtui/settingspages/chatviewsettingspage.ui ++++ b/src/qtui/settingspages/chatviewsettingspage.ui +@@ -244,7 +244,7 @@ + WebSearchUrlFormat + + +- https://www.google.com/search?q=%s ++ https://duckduckgo.com/?q=%s + + + diff --git a/libre/quassel/PKGBUILD b/libre/quassel/PKGBUILD index 3802c99..3cccb2e 100644 --- a/libre/quassel/PKGBUILD +++ b/libre/quassel/PKGBUILD @@ -4,47 +4,58 @@ # parabola changes and rationale: # - repalce qt5-webengine with qt5-webkit (for URL previews) - +# - set duckduckgo as default search engine pkgbase=quassel pkgname=('quassel-core' 'quassel-client' - 'quassel-client-small' - 'quassel-monolithic') + 'quassel-client-qt' + 'quassel-monolithic' + 'quassel-monolithic-qt' + 'quassel-common') pkgver=0.13.1 -pkgrel=4 +pkgrel=9 pkgrel+=.parabola1 pkgdesc="Next-generation distributed IRC client" arch=('x86_64') arch+=('armv7h' 'i686') url="https://quassel-irc.org/" license=('GPL') -makedepends=('qt5-base' 'qt5-tools' 'qt5-webengine' 'qca-qt5' 'qt5-script' +makedepends=('qt5-base' 'qt5-tools' 'qt5-webengine' 'qca' 'qt5-script' 'qt5-multimedia' 'knotifyconfig' 'sonnet' 'libldap' 'cmake' 'extra-cmake-modules' 'python' 'hicolor-icon-theme') makedepends=(${makedepends[*]/qt5-webengine/qt5-webkit}) source=(https://quassel-irc.org/pub/$pkgbase-$pkgver.tar.bz2 0001-qtui-Set-desktop-file-name.patch - quassel-0.13.1-qt5.14.patch - search-duck.patch + 0002-common-Disable-enum-type-stream-operators-for-Qt-5.1.patch + 0003-Removed-mozilla-IRC-network-from-networks.ini.patch + 0004-This-commit-changes-the-official-Quassel-IRC-channel.patch $pkgbase.service $pkgbase.sysusers $pkgbase.tmpfiles $pkgbase.conf) +source+=(9000-search-duck.patch) sha256sums=('48efee9778743b1db9f44efb91d1c913104db01190c57f2ff57483c39a97e855' - '695ff3b605ea62ccfdf9ec4b9e6ffa74f3e2c0ac81402d51a74d263c47886c92' - '3d43f498df04db59a5199e0a81b8fd7ac37ef46fffb0c69ab5a17bcafb6d8c65' - '3d90a7edfa2b2e27e5f56b25f7583585efbcd35219c04a3bf138d9fe9bb9eab2' + '7a64214024dc047f35ec8af3c5d543853a5c89c0506766c69c2e1072ca8f5ec7' + 'a1f874558f31c786b2fb483454d14e74a0dfc01382e1ba58bd610a65e02f4df4' + '0f92f3a51d2e3272d71b21a563047d7fae93bc2dd6676f405a2d63a20d48521b' + 'f59d4138f5fc8c9e84b5626fcbe16eec21b22344dc6c28d784c511677de661e1' '5dbe20290f3361b9b7a74a52905137e76b656976febf2d31082a2276f9dcde7f' '3c72441a99e2668c6a8a751fa07beeb44f937576c8a1b5f615e4a55f841d93d9' '2afd4340c7713f6533e5d175a86b28fd118ecd907776c2b10925d1a4fb31cdca' 'f3031ea8217e01ba42cea14606169e3e27affa5918968ffd5a03c21ae92fe2b8') +sha256sums+=('3d90a7edfa2b2e27e5f56b25f7583585efbcd35219c04a3bf138d9fe9bb9eab2') + prepare() { cd $pkgbase-$pkgver patch -Np1 -i ../0001-qtui-Set-desktop-file-name.patch - patch -Np1 -i ../quassel-0.13.1-qt5.14.patch - patch -Np1 -i ../search-duck.patch + patch -Np1 -i ../0002-common-Disable-enum-type-stream-operators-for-Qt-5.1.patch + patch -Np1 -i ../0003-Removed-mozilla-IRC-network-from-networks.ini.patch + patch -Np1 -i ../0004-This-commit-changes-the-official-Quassel-IRC-channel.patch + + # parabola patches + patch -Np1 -i ../9000-search-duck.patch } _build() ( @@ -77,6 +88,15 @@ build() { -DWITH_WEBENGINE=OFF \ -DWITH_KDE=ON + _build monolithic-qt \ + -DWANT_CORE=OFF \ + -DWANT_QTCLIENT=OFF \ + -DWITH_WEBKIT=OFF \ + -DWITH_WEBENGINE=OFF \ + -DCMAKE_DISABLE_FIND_PACKAGE_dbusmenu-qt5=ON \ + -DCMAKE_DISABLE_FIND_PACKAGE_Qt5Multimedia=ON \ + -DCMAKE_DISABLE_FIND_PACKAGE_Phonon4Qt5=ON + _build client \ -DWANT_CORE=OFF \ -DWANT_MONO=OFF \ @@ -84,7 +104,7 @@ build() { -DWITH_WEBENGINE=OFF \ -DWITH_KDE=ON - _build client-small \ + _build client-qt \ -DWANT_CORE=OFF \ -DWANT_MONO=OFF \ -DWITH_WEBKIT=OFF \ @@ -96,7 +116,7 @@ build() { package_quassel-core() { pkgdesc="Next-generation distributed IRC client - core only" -depends=('icu' 'qca-qt5' 'qt5-script' 'libldap') +depends=('icu' 'qca' 'qt5-script' 'libldap') optdepends=('postgresql: PostgreSQL database support') backup=(etc/conf.d/quassel) @@ -116,41 +136,75 @@ backup=(etc/conf.d/quassel) } package_quassel-client() { -pkgdesc="Next-generation distributed IRC client - client only" -pkgdesc+=" (with webkit HTML rendering)" -depends=('qt5-base' 'qt5-webengine' 'qt5-multimedia' 'knotifyconfig' - 'hicolor-icon-theme') +pkgdesc="Next-generation distributed IRC client - client only, KDE version" +depends=('quassel-common' 'qt5-base' 'qt5-webengine' 'qt5-multimedia' 'knotifyconfig') +pkgdesc+=" with webkit HTML rendering" depends=(${depends[*]/qt5-webengine/qt5-webkit}) optdepends=('perl: for builtin /exec scripts') -conflicts=('quassel-monolithic' 'quassel-client-small') +conflicts=('quassel-client-qt') _install client install -Dm644 $pkgbase-$pkgver/data/quasselclient.appdata.xml "$pkgdir/usr/share/metainfo/quasselclient.appdata.xml" + + # Split quassel-common + rm -r "$pkgdir"/usr/share/{icons,knotifications5,pixmaps,quassel} } -package_quassel-client-small() { -pkgdesc="Next-generation distributed IRC client - client only, reduced deps" -depends=('qt5-base' 'qt5-svg' 'sonnet' 'hicolor-icon-theme') +package_quassel-client-qt() { +pkgdesc="Next-generation distributed IRC client - client only, Qt version with reduced deps" +depends=('quassel-common' 'qt5-base' 'qt5-svg' 'sonnet') optdepends=('perl: for builtin /exec scripts') -conflicts=('quassel-monolithic' 'quassel-client') -replaces=('quassel-remote') +conflicts=('quassel-client') +replaces=('quassel-client-small' 'quassel-remote') + + _install client-qt - _install client-small + # Split quassel-common + rm -r "$pkgdir"/usr/share/{icons,pixmaps,quassel} # Ignore package by AppStream to avoid duplicated IDs echo 'X-AppStream-Ignore=true' >> "$pkgdir/usr/share/applications/quasselclient.desktop" } package_quassel-monolithic() { -pkgdesc="Next-generation distributed IRC client - monolithic" -pkgdesc+=" (with webkit HTML rendering)" -depends=('qt5-base' 'qt5-webengine' 'qt5-multimedia' 'qt5-script' 'qca-qt5' - 'knotifyconfig' 'libldap' 'hicolor-icon-theme') +pkgdesc="Next-generation distributed IRC client - monolithic, KDE version" +depends=('quassel-common' 'qt5-base' 'qt5-webengine' 'qt5-multimedia' 'qt5-script' 'qca' + 'knotifyconfig' 'libldap') +pkgdesc+=" with webkit HTML rendering" depends=(${depends[*]/qt5-webengine/qt5-webkit}) optdepends=('perl: for builtin /exec scripts' 'postgresql: PostgreSQL database support') -conflicts=('quassel-client' 'quassel-client-small') +conflicts=('quassel-monolithic-qt') _install monolithic install -Dm644 $pkgbase-$pkgver/data/quassel.appdata.xml "$pkgdir/usr/share/metainfo/quassel.appdata.xml" + + # Split quassel-common + mkdir "$srcdir/quassel-common" + mv "$pkgdir"/usr/share/{icons,knotifications5,pixmaps,quassel} \ + "$srcdir/quassel-common/" +} + +package_quassel-monolithic-qt() { +pkgdesc="Next-generation distributed IRC client - monolithic, Qt version with reduced deps" +depends=('quassel-common' 'qca' 'qt5-base' 'qt5-svg' 'qt5-script' 'sonnet') +optdepends=('perl: for builtin /exec scripts' + 'postgresql: PostgreSQL database support') +conflicts=('quassel-monolithic') + + _install monolithic-qt + + # Split quassel-common + rm -r "$pkgdir"/usr/share/{icons,pixmaps,quassel} + + # Ignore package by AppStream to avoid duplicated IDs + echo 'X-AppStream-Ignore=true' >> "$pkgdir/usr/share/applications/quassel.desktop" +} + +package_quassel-common() { + pkgdesc="Common files for Quassel" + depends=('hicolor-icon-theme') + + install -dm755 "$pkgdir/usr/share" + mv quassel-common/* "$pkgdir/usr/share" } diff --git a/libre/quassel/quassel-0.13.1-qt5.14.patch b/libre/quassel/quassel-0.13.1-qt5.14.patch deleted file mode 100644 index f0305ea..0000000 --- a/libre/quassel/quassel-0.13.1-qt5.14.patch +++ /dev/null @@ -1,118 +0,0 @@ -commit c90702bdbc43fc542d7df6d5ec4b321912ca0035 -Author: Manuel Nickschas -Date: Tue Jan 7 18:34:54 2020 +0100 - - common: Disable enum type stream operators for Qt >= 5.14 - - Starting from version 5.14, Qt provides stream operators for enum - types, which collide with the ones we ship in types.h. Disable - Quassel's stream operators when compiling against Qt 5.14 or later. - - Add a unit test that ensures that enum serialization honors the width - of the underlying type. - -diff --git a/src/common/types.h b/src/common/types.h -index 467d9fb2..c4b9f364 100644 ---- a/src/common/types.h -+++ b/src/common/types.h -@@ -140,6 +140,7 @@ Q_DECLARE_METATYPE(QHostAddress) - typedef QList MsgIdList; - typedef QList BufferIdList; - -+#if QT_VERSION < QT_VERSION_CHECK(5, 14, 0) - /** - * Catch-all stream serialization operator for enum types. - * -@@ -169,6 +170,7 @@ QDataStream &operator>>(QDataStream &in, T &value) { - value = static_cast(v); - return in; - } -+#endif - - // Exceptions - -diff --git a/src/common/typestest.cpp b/src/common/typestest.cpp -new file mode 100644 -index 00000000..04031c29 ---- /dev/null -+++ b/src/common/typestest.cpp -@@ -0,0 +1,79 @@ -+/*************************************************************************** -+ * Copyright (C) 2005-2020 by the Quassel Project * -+ * devel@quassel-irc.org * -+ * * -+ * This program is free software; you can redistribute it and/or modify * -+ * it under the terms of the GNU General Public License as published by * -+ * the Free Software Foundation; either version 2 of the License, or * -+ * (at your option) version 3. * -+ * * -+ * This program is distributed in the hope that it will be useful, * -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of * -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * -+ * GNU General Public License for more details. * -+ * * -+ * You should have received a copy of the GNU General Public License * -+ * along with this program; if not, write to the * -+ * Free Software Foundation, Inc., * -+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * -+ ***************************************************************************/ -+ -+#include -+ -+#include -+#include -+#include -+ -+#include "testglobal.h" -+#include "types.h" -+ -+using namespace ::testing; -+ -+class EnumHolder -+{ -+ Q_GADGET -+ -+public: -+ enum class Enum16 : uint16_t {}; -+ enum class Enum32 : uint32_t {}; -+ -+ enum class EnumQt16 : uint16_t {}; -+ Q_ENUM(EnumQt16) -+ enum class EnumQt32 : uint32_t {}; -+ Q_ENUM(EnumQt32) -+}; -+ -+// Verify that enums are (de)serialized as their underlying type -+TEST(TypesTest, enumSerialization) -+{ -+ QByteArray data; -+ QDataStream out(&data, QIODevice::WriteOnly); -+ -+ // Serialize -+ out << EnumHolder::Enum16(0xabcd); -+ ASSERT_THAT(data.size(), Eq(2)); -+ out << EnumHolder::Enum32(0x123456); -+ ASSERT_THAT(data.size(), Eq(6)); -+ out << EnumHolder::EnumQt16(0x4321); -+ ASSERT_THAT(data.size(), Eq(8)); -+ out << EnumHolder::Enum32(0xfedcba); -+ ASSERT_THAT(data.size(), Eq(12)); -+ ASSERT_THAT(out.status(), Eq(QDataStream::Status::Ok)); -+ -+ // Deserialize -+ QDataStream in(data); -+ EnumHolder::Enum16 enum16; -+ EnumHolder::Enum32 enum32; -+ EnumHolder::EnumQt16 enumQt16; -+ EnumHolder::EnumQt32 enumQt32; -+ in >> enum16 >> enum32 >> enumQt16 >> enumQt32; -+ ASSERT_THAT(in.status(), Eq(QDataStream::Status::Ok)); -+ EXPECT_TRUE(in.atEnd()); -+ -+ EXPECT_THAT((int)enum16, Eq(0xabcd)); -+ EXPECT_THAT((int)enum32, Eq(0x123456)); -+ EXPECT_THAT((int)enumQt16, Eq(0x4321)); -+ EXPECT_THAT((int)enumQt32, Eq(0xfedcba)); -+} -+ -+#include "typestest.moc" diff --git a/libre/quassel/search-duck.patch b/libre/quassel/search-duck.patch deleted file mode 100644 index 9fc77b7..0000000 --- a/libre/quassel/search-duck.patch +++ /dev/null @@ -1,26 +0,0 @@ -diff --git a/src/qtui/chatviewsettings.h b/src/qtui/chatviewsettings.h -index 838891b..4d28926 100644 ---- a/src/qtui/chatviewsettings.h -+++ b/src/qtui/chatviewsettings.h -@@ -104,7 +104,7 @@ public: - */ - inline void enableSenderBrackets(bool enabled) { setLocalValue("ShowSenderBrackets", enabled); } - -- inline QString webSearchUrlFormatString() { return localValue("WebSearchUrlFormat", "https://www.google.com/search?q=%s").toString(); } -+ inline QString webSearchUrlFormatString() { return localValue("WebSearchUrlFormat", "https://duckduckgo.com/?q=%s").toString(); } - inline void setWebSearchUrlFormatString(const QString &format) { setLocalValue("WebSearchUrlFormat", format); } - }; - -diff --git a/src/qtui/settingspages/chatviewsettingspage.ui b/src/qtui/settingspages/chatviewsettingspage.ui -index 99f568a..7d13fff 100644 ---- a/src/qtui/settingspages/chatviewsettingspage.ui -+++ b/src/qtui/settingspages/chatviewsettingspage.ui -@@ -244,7 +244,7 @@ - WebSearchUrlFormat - - -- https://www.google.com/search?q=%s -+ https://duckduckgo.com/?q=%s - - - From 82c7166bb01c4adbe9b53acde423ea38422eafd9 Mon Sep 17 00:00:00 2001 From: Parabola automatic package builder Date: Nov 23 2021 13:29:06 +0000 Subject: [PATCH 46/73] Update libre/parabola-keyring --- diff --git a/libre/parabola-keyring/PKGBUILD b/libre/parabola-keyring/PKGBUILD index 1c07bc0..b0eb737 100644 --- a/libre/parabola-keyring/PKGBUILD +++ b/libre/parabola-keyring/PKGBUILD @@ -11,8 +11,8 @@ pkgname=parabola-keyring -pkgver=20210723 -_gitver=7b3eac20134e14161a810add6f6647f2a06c8ee0 +pkgver=20211123 +_gitver=f1132f2e59255580d52ce2389060166dd3f09843 pkgrel=1 pkgdesc='Parabola GNU/Linux-libre PGP keyring' arch=('any') From d9c73cb82d293c350bea9aed8a8fed39aaf03212 Mon Sep 17 00:00:00 2001 From: Parabola automatic package builder Date: Nov 24 2021 04:01:58 +0000 Subject: [PATCH 47/73] Update libre/parabola-keyring --- diff --git a/libre/parabola-keyring/PKGBUILD b/libre/parabola-keyring/PKGBUILD index b0eb737..e4dab52 100644 --- a/libre/parabola-keyring/PKGBUILD +++ b/libre/parabola-keyring/PKGBUILD @@ -11,8 +11,8 @@ pkgname=parabola-keyring -pkgver=20211123 -_gitver=f1132f2e59255580d52ce2389060166dd3f09843 +pkgver=20211124 +_gitver=314e51d2df7e70ce78065f346ed1e0de9210d53d pkgrel=1 pkgdesc='Parabola GNU/Linux-libre PGP keyring' arch=('any') From f7ad0fc8ea511eb6572de802664cbf3ede2723cf Mon Sep 17 00:00:00 2001 From: David P Date: Nov 25 2021 20:13:58 +0000 Subject: [PATCH 48/73] updpkg: libre/kdevelop 5.6.2-6.parabola1 Signed-off-by: David P --- diff --git a/libre/kdevelop/PKGBUILD b/libre/kdevelop/PKGBUILD index 5000153..7d49450 100644 --- a/libre/kdevelop/PKGBUILD +++ b/libre/kdevelop/PKGBUILD @@ -10,9 +10,9 @@ pkgname=kdevelop pkgver=5.6.2 -_clangver=12.0.1 -[[ "${CARCH}" == 'i686' ]] && _clangver=12.0.0 -pkgrel=5 +_clangver=13.0.0 +[[ "${CARCH}" == 'i686' ]] && _clangver=12.0.1 +pkgrel=6 pkgrel+=.parabola1 pkgdesc='C++ IDE using KDE technologies' pkgdesc+=', without qt5-webengine dependency' From e3abb055293407d4e203e8c0faac438cb3b8ba1c Mon Sep 17 00:00:00 2001 From: bill-auger Date: Nov 25 2021 21:34:58 +0000 Subject: [PATCH 49/73] [icu-65-compat][icu-compat-65]: rename package to 'icu-compat-65' --- diff --git a/libre/icu-compat-65/PKGBUILD b/libre/icu-compat-65/PKGBUILD new file mode 100644 index 0000000..2182060 --- /dev/null +++ b/libre/icu-compat-65/PKGBUILD @@ -0,0 +1,146 @@ +# Maintainer (arch): Andreas Radke +# Contributor: Art Gramlich +# Contributor: Denis 'GNUtoo' Carikli +# Contributor: Eli Schwartz +# Contributor: bill-auger + + +# parabola changes and rationale: +# +# Several Parabola packages depends on ICU, and the ICU soname changes often. +# This means that if we don't rebuild all the Parabola packages which depend +# on ICU, as soon as the new ArchLinux, ArchLinux32, and ArchLinuxARM ICU +# packages are synchronized into the Parabola repositories, we have a problem. +# The repo server synchronizes with the upstream repos un-attended; so this +# is a wonderful surprise each time; and we hustle frantucally to get the +# system sane again. We could watch the testing and staging repos of each +# upstream, and start re-building everything in a Parabola staging repo; +# but that could result in discarded work, if those exact versions are not the +# ones which are eventually released into [core]. +# +# At first nothing was done to fix or workaround that issue. In practice, +# once a new ICU was synchronized, many users were upgrading before the +# Parabola packages had the time to be rebuilt. For such users, it +# broke all the installed Parabola packages that were depending on the old ICU. +# This means that users had to find a way to downgrade packages manually or wait +# until developers would finally have rebuilt all the packages that were broken. +# +# Then such packages were modified to make them depend on the exact version of +# the ICU packages they were built against. This way, once the new ICU package +# was synchronized, users could not upgrade if they had packages that were not +# rebuilt yet against the new ICU package. However this workaround also prevents +# installing packages that depends on the new ICU. +# +# The correct fix would probably be to automatically build all the Packages +# instead of relying on Arch Linux Packages. Still, a staging repo would be +# required to hold the new packages, until they all can be released together sanely. +# However we don't have the code, configuration and/or infrastructure to run +# an automatic builder for all packages yet even if there is work in this +# direction. +# +# In the meantime, this version of ICU exists for Parabola packages to link against +# at runtime. In this way, Parabola packages can depend only on the "sodeps" exposed +# by ICU, which is usually provided by the upstream distribution's ICU; but may be +# this ICU, if the Parabola package has yet to be rebuilt agianst the upgraded ICU. +# +# It is inspired by the admittedly awkward hack of versioned library +# dependencies more commonly seen (e.g. in the AUR as 'icu65') on which +# proprietary binaries built against Debian's ICU will depend. It is awkward, +# in the eyes of the beholder and this elegantly scales to Parabola's needs, +# without consuming increasing resources, which is the best definition of "not +# awkward". +# +# To use it, simply add the following dependency to any package which parabola +# has built or rebuilt: +# +# depends=('libicui18n.so') +# +# or whichever shared library is reported by readelf -d /path/to/compiled/ELF/file +# and, every time the upstream distribution upgrades ICU, update this package +# as well, to ensure it always stays exactly one version behind. +# +# This works well for ICU, even for packages which link to both the older and +# newer versions of libicu*.so, since ICU uses versioned symbols as reported by +# +# nm -D --demangle --with-symbol-versions /path/to/library +# +# However, caution must be taken before implementing the same idea for other +# libraries. So the idea is to only use it for libraries that often have this +# issue. +# +# Changes: +# - remove all files other than libicu*.so.* +# - depend on icu; this is needed because if the package is installed on its +# own, ldconfig will create untracked symlinks which were supposed to be +# installed by the icu package. + + +_pkgname=icu +pkgname=icu-compat-65 +pkgver=65.1 +pkgrel=3 +pkgrel+=.parabola3 +pkgdesc="International Components for Unicode library" +pkgdesc+=" (compatibility libraries for the previous release)" +arch=(x86_64) +arch+=(armv7h i686) +url="https://icu.unicode.org" +license=('custom:icu') +depends=('gcc-libs' 'sh') +depends+=("icu>${pkgver}") # core/icu should always be ahead +conflicts=("icu<=${pkgver}") # core/icu should always be ahead +replaces+=('icu-65-compat') # this rebuild (parabola3) is simply to rename the package +conflicts+=('icu-65-compat') # this rebuild (parabola3) is simply to rename the package +makedepends=('python') +provides=(libicu{data,i18n,io,test,tu,uc}.so) +source=(https://github.com/unicode-org/icu/releases/download/release-${pkgver//./-}/${_pkgname}4c-${pkgver//./_}-src.tgz{,.asc} + icu-65.1-initialized-buffer-uloc_getKeywordValue.patch::https://github.com/unicode-org/icu/commit/fab4c3c719.patch + icu-65.1-prevent-SEGV_MAPERR-in-append.patch::https://github.com/unicode-org/icu/commit/b7d08bc04a.patch) +# https://github.com/unicode-org/icu/releases/download/release-65-1/SHASUM512.txt - no checksum file for v67 release +sha512sums=('8f1ef33e1f4abc9a8ee870331c59f01b473d6da1251a19ce403f822f3e3871096f0791855d39c8f20c612fc49cda2c62c06864aa32ddab2dbd186d2b21ce9139' + 'SKIP' + '8898fe0fa9805304cd2fc02c00ab1131861836f4d11887f82450c2378666cb03bce0c5038d3f0bdcdd1c1cdee2a00a61ef85602ed0e0c74ad2e58578b1940123' + '580283cdd95fb7b8410cb3a6c0f47a6c8e53e0fdc9c213b04cd133ba4120381533ff2aef89ddab968150754bd9ca3a536d5c592c6881e625eb8ee6de8723de1b') +validpgpkeys=('BA90283A60D67BA0DD910A893932080F4FB419E3') # "Steven R. Loomis (filfla-signing) " +validpgpkeys+=('9731166CD8E23A83BEE7C6D3ACA5DBE1FD8FABF1') # "Steven R. Loomis (ICU Project) " +validpgpkeys+=('FFA9129A180D765B7A5BEA1C9B432B27D1BA20D7') # "Fredrik Roubert " +validpgpkeys+=('E4098B78AFC94394F3F49AA903996C7C83F12F11') # "keybase.io/srl295 " +validpgpkeys+=('4569BBC09DA846FC91CBD21CE1BBA44593CF2AE0') # "Steven R. Loomis (codesign-qormi) " + + +prepare() { + cd icu + + # https://unicode-org.atlassian.net/browse/ICU-20884 + patch -Np2 -i ../icu-65.1-initialized-buffer-uloc_getKeywordValue.patch + + # https://github.com/unicode-org/icu/pull/971 + patch -Np2 -i ../icu-65.1-prevent-SEGV_MAPERR-in-append.patch +} + +build() { + cd icu/source + ./configure --prefix=/usr \ + --sysconfdir=/etc \ + --mandir=/usr/share/man \ + --sbindir=/usr/bin + make +} + +check() { + cd icu/source + make -k check +} + +package() { + cd icu/source + make -j1 DESTDIR="${pkgdir}" install + + # Install license + install -Dm644 "${srcdir}"/icu/LICENSE "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE" + + # to avoid conflicts against the preferred 'icu' package, we remove all files + # except the actual shared libraries + rm -r "${pkgdir}"/usr/{bin,include,lib/{icu,pkgconfig},share} + rm "${pkgdir}"/usr/lib/*.so +} diff --git a/libre/icu-compat-65/icu-65.1-initialized-buffer-uloc_getKeywordValue.patch b/libre/icu-compat-65/icu-65.1-initialized-buffer-uloc_getKeywordValue.patch new file mode 100644 index 0000000..475921d --- /dev/null +++ b/libre/icu-compat-65/icu-65.1-initialized-buffer-uloc_getKeywordValue.patch @@ -0,0 +1,23 @@ +From fab4c3c719977205a3f005ddfd7fffbb9c19c587 Mon Sep 17 00:00:00 2001 +From: Frank Tang +Date: Wed, 30 Oct 2019 17:45:22 -0700 +Subject: [PATCH] ICU-20884 initialized buffer uloc_getKeywordValue + +--- + icu4c/source/common/uloc.cpp | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/icu4c/source/common/uloc.cpp b/icu4c/source/common/uloc.cpp +index 6a9bfcfbff5..ea81c0ce87f 100644 +--- a/icu4c/source/common/uloc.cpp ++++ b/icu4c/source/common/uloc.cpp +@@ -766,6 +766,9 @@ uloc_getKeywordValue(const char* localeID, + char* buffer, int32_t bufferCapacity, + UErrorCode* status) + { ++ if (buffer != nullptr) { ++ buffer[0] = '\0'; ++ } + const char* startSearchHere = NULL; + const char* nextSeparator = NULL; + char keywordNameBuffer[ULOC_KEYWORD_BUFFER_LEN]; diff --git a/libre/icu-compat-65/icu-65.1-prevent-SEGV_MAPERR-in-append.patch b/libre/icu-compat-65/icu-65.1-prevent-SEGV_MAPERR-in-append.patch new file mode 100644 index 0000000..07b3db6 --- /dev/null +++ b/libre/icu-compat-65/icu-65.1-prevent-SEGV_MAPERR-in-append.patch @@ -0,0 +1,118 @@ +From b7d08bc04a4296982fcef8b6b8a354a9e4e7afca Mon Sep 17 00:00:00 2001 +From: Frank Tang +Date: Sat, 1 Feb 2020 02:39:04 +0000 +Subject: [PATCH] ICU-20958 Prevent SEGV_MAPERR in append + +See #971 +--- + icu4c/source/common/unistr.cpp | 6 ++- + icu4c/source/test/intltest/ustrtest.cpp | 62 +++++++++++++++++++++++++ + icu4c/source/test/intltest/ustrtest.h | 1 + + 3 files changed, 68 insertions(+), 1 deletion(-) + +diff --git a/icu4c/source/common/unistr.cpp b/icu4c/source/common/unistr.cpp +index 901bb3358ba..077b4d6ef20 100644 +--- a/icu4c/source/common/unistr.cpp ++++ b/icu4c/source/common/unistr.cpp +@@ -1563,7 +1563,11 @@ UnicodeString::doAppend(const UChar *srcChars, int32_t srcStart, int32_t srcLeng + } + + int32_t oldLength = length(); +- int32_t newLength = oldLength + srcLength; ++ int32_t newLength; ++ if (uprv_add32_overflow(oldLength, srcLength, &newLength)) { ++ setToBogus(); ++ return *this; ++ } + + // Check for append onto ourself + const UChar* oldArray = getArrayStart(); +diff --git a/icu4c/source/test/intltest/ustrtest.cpp b/icu4c/source/test/intltest/ustrtest.cpp +index b6515ea813c..ad38bdf53a3 100644 +--- a/icu4c/source/test/intltest/ustrtest.cpp ++++ b/icu4c/source/test/intltest/ustrtest.cpp +@@ -67,6 +67,7 @@ void UnicodeStringTest::runIndexedTest( int32_t index, UBool exec, const char* & + TESTCASE_AUTO(TestWCharPointers); + TESTCASE_AUTO(TestNullPointers); + TESTCASE_AUTO(TestUnicodeStringInsertAppendToSelf); ++ TESTCASE_AUTO(TestLargeAppend); + TESTCASE_AUTO_END; + } + +@@ -2310,3 +2311,64 @@ void UnicodeStringTest::TestUnicodeStringInsertAppendToSelf() { + str.insert(2, sub); + assertEquals("", u"abbcdcde", str); + } ++ ++void UnicodeStringTest::TestLargeAppend() { ++ if(quick) return; ++ ++ IcuTestErrorCode status(*this, "TestLargeAppend"); ++ // Make a large UnicodeString ++ int32_t len = 0xAFFFFFF; ++ UnicodeString str; ++ char16_t *buf = str.getBuffer(len); ++ // A fast way to set buffer to valid Unicode. ++ // 4E4E is a valid unicode character ++ uprv_memset(buf, 0x4e, len * 2); ++ str.releaseBuffer(len); ++ UnicodeString dest; ++ // Append it 16 times ++ // 0xAFFFFFF times 16 is 0xA4FFFFF1, ++ // which is greater than INT32_MAX, which is 0x7FFFFFFF. ++ int64_t total = 0; ++ for (int32_t i = 0; i < 16; i++) { ++ dest.append(str); ++ total += len; ++ if (total <= INT32_MAX) { ++ assertFalse("dest is not bogus", dest.isBogus()); ++ } else { ++ assertTrue("dest should be bogus", dest.isBogus()); ++ } ++ } ++ dest.remove(); ++ total = 0; ++ for (int32_t i = 0; i < 16; i++) { ++ dest.append(str); ++ total += len; ++ if (total + len <= INT32_MAX) { ++ assertFalse("dest is not bogus", dest.isBogus()); ++ } else if (total <= INT32_MAX) { ++ // Check that a string of exactly the maximum size works ++ UnicodeString str2; ++ int32_t remain = INT32_MAX - total; ++ char16_t *buf2 = str2.getBuffer(remain); ++ if (buf2 == nullptr) { ++ // if somehow memory allocation fail, return the test ++ return; ++ } ++ uprv_memset(buf2, 0x4e, remain * 2); ++ str2.releaseBuffer(remain); ++ dest.append(str2); ++ total += remain; ++ assertEquals("When a string of exactly the maximum size works", (int64_t)INT32_MAX, total); ++ assertEquals("When a string of exactly the maximum size works", INT32_MAX, dest.length()); ++ assertFalse("dest is not bogus", dest.isBogus()); ++ ++ // Check that a string size+1 goes bogus ++ str2.truncate(1); ++ dest.append(str2); ++ total++; ++ assertTrue("dest should be bogus", dest.isBogus()); ++ } else { ++ assertTrue("dest should be bogus", dest.isBogus()); ++ } ++ } ++} +diff --git a/icu4c/source/test/intltest/ustrtest.h b/icu4c/source/test/intltest/ustrtest.h +index 218befdcc68..4a356a92c7a 100644 +--- a/icu4c/source/test/intltest/ustrtest.h ++++ b/icu4c/source/test/intltest/ustrtest.h +@@ -97,6 +97,7 @@ class UnicodeStringTest: public IntlTest { + void TestWCharPointers(); + void TestNullPointers(); + void TestUnicodeStringInsertAppendToSelf(); ++ void TestLargeAppend(); + }; + + #endif From 9169e48195b9413ecc6b3bb31cfad666a547125a Mon Sep 17 00:00:00 2001 From: bill-auger Date: Nov 25 2021 21:36:37 +0000 Subject: [PATCH 50/73] [icu-compat-67]: rename to 'icu-compat-67' --- diff --git a/libre/icu-compat-67/PKGBUILD b/libre/icu-compat-67/PKGBUILD new file mode 100644 index 0000000..3daca25 --- /dev/null +++ b/libre/icu-compat-67/PKGBUILD @@ -0,0 +1,130 @@ +# Maintainer (arch): Andreas Radke +# Contributor: Art Gramlich +# Contributor: Denis 'GNUtoo' Carikli +# Contributor: Eli Schwartz +# Contributor: bill-auger + + +# parabola changes and rationale: +# +# Several Parabola packages depends on ICU, and the ICU soname changes often. +# This means that if we don't rebuild all the Parabola packages which depend +# on ICU, as soon as the new ArchLinux, ArchLinux32, and ArchLinuxARM ICU +# packages are synchronized into the Parabola repositories, we have a problem. +# The repo server synchronizes with the upstream repos un-attended; so this +# is a wonderful surprise each time; and we hustle frantucally to get the +# system sane again. We could watch the testing and staging repos of each +# upstream, and start re-building everything in a Parabola staging repo; +# but that could result in discarded work, if those exact versions are not the +# ones which are eventually released into [core]. +# +# At first nothing was done to fix or workaround that issue. In practice, +# once a new ICU was synchronized, many users were upgrading before the +# Parabola packages had the time to be rebuilt. For such users, it +# broke all the installed Parabola packages that were depending on the old ICU. +# This means that users had to find a way to downgrade packages manually or wait +# until developers would finally have rebuilt all the packages that were broken. +# +# Then such packages were modified to make them depend on the exact version of +# the ICU packages they were built against. This way, once the new ICU package +# was synchronized, users could not upgrade if they had packages that were not +# rebuilt yet against the new ICU package. However this workaround also prevents +# installing packages that depends on the new ICU. +# +# The correct fix would probably be to automatically build all the Packages +# instead of relying on Arch Linux Packages. Still, a staging repo would be +# required to hold the new packages, until they all can be released together sanely. +# However we don't have the code, configuration and/or infrastructure to run +# an automatic builder for all packages yet even if there is work in this +# direction. +# +# In the meantime, this version of ICU exists for Parabola packages to link against +# at runtime. In this way, Parabola packages can depend only on the "sodeps" exposed +# by ICU, which is usually provided by the upstream distribution's ICU; but may be +# this ICU, if the Parabola package has yet to be rebuilt agianst the upgraded ICU. +# +# It is inspired by the admittedly awkward hack of versioned library +# dependencies more commonly seen (e.g. in the AUR as 'icu65') on which +# proprietary binaries built against Debian's ICU will depend. It is awkward, +# in the eyes of the beholder and this elegantly scales to Parabola's needs, +# without consuming increasing resources, which is the best definition of "not +# awkward". +# +# To use it, simply add the following dependency to any package which parabola +# has built or rebuilt: +# +# depends=('libicui18n.so') +# +# or whichever shared library is reported by readelf -d /path/to/compiled/ELF/file +# and, every time the upstream distribution upgrades ICU, update this package +# as well, to ensure it always stays exactly one version behind. +# +# This works well for ICU, even for packages which link to both the older and +# newer versions of libicu*.so, since ICU uses versioned symbols as reported by +# +# nm -D --demangle --with-symbol-versions /path/to/library +# +# However, caution must be taken before implementing the same idea for other +# libraries. So the idea is to only use it for libraries that often have this +# issue. +# +# Changes: +# - remove all files other than libicu*.so.* +# - depend on icu; this is needed because if the package is installed on its +# own, ldconfig will create untracked symlinks which were supposed to be +# installed by the icu package. + + +_pkgname=icu +pkgname=${_pkgname}-compat-67 +pkgver=67.1 +pkgrel=1 +pkgrel+=.parabola1 +pkgdesc="International Components for Unicode library" +pkgdesc+=" (compatibility libraries for the previous release)" +arch=(x86_64) +arch+=(armv7h i686) +url="https://icu.unicode.org" +license=('custom:icu') +depends=('gcc-libs' 'sh') +depends+=("icu>${pkgver}") # core/icu should always be ahead +conflicts=("icu<=${pkgver}") # core/icu should always be ahead +makedepends=('python') +provides=(libicu{data,i18n,io,test,tu,uc}.so) +source=(https://github.com/unicode-org/icu/releases/download/release-${pkgver//./-}/${_pkgname}4c-${pkgver//./_}-src.tgz{,.asc}) +# https://github.com/unicode-org/icu/releases/download/release-65-1/SHASUM512.txt - no checksum file for v67 release +sha512sums=('4779f1ce1ca7976f6fad6768853ea8c540da54d11509e3b6cfd864a04b5f2db1c3d4b546387f91ad02fb90804525bc37d2543173f0d705d6ca11dc6f2b7640a8' + 'SKIP') +validpgpkeys=('BA90283A60D67BA0DD910A893932080F4FB419E3') # "Steven R. Loomis (filfla-signing) " +validpgpkeys+=('9731166CD8E23A83BEE7C6D3ACA5DBE1FD8FABF1') # "Steven R. Loomis (ICU Project) " +validpgpkeys+=('FFA9129A180D765B7A5BEA1C9B432B27D1BA20D7') # "Fredrik Roubert " +validpgpkeys+=('E4098B78AFC94394F3F49AA903996C7C83F12F11') # "keybase.io/srl295 " +validpgpkeys+=('4569BBC09DA846FC91CBD21CE1BBA44593CF2AE0') # "Steven R. Loomis (codesign-qormi) " + + +build() { + cd icu/source + ./configure --prefix=/usr \ + --sysconfdir=/etc \ + --mandir=/usr/share/man \ + --sbindir=/usr/bin + make +} + +check() { + cd icu/source + make -k check +} + +package() { + cd icu/source + make -j1 DESTDIR="${pkgdir}" install + + # Install license + install -Dm644 "${srcdir}"/icu/LICENSE "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE" + + # to avoid conflicts against the preferred 'icu' package, we remove all files + # except the actual shared libraries + rm -r "${pkgdir}"/usr/{bin,include,lib/{icu,pkgconfig},share} + rm "${pkgdir}"/usr/lib/*.so +} From a35e43fd72ad612428c58c7dbe61be5bf6633064 Mon Sep 17 00:00:00 2001 From: bill-auger Date: Nov 25 2021 21:36:48 +0000 Subject: [PATCH 51/73] [icu-compat]: upgrade to v69 --- diff --git a/libre/icu-compat/PKGBUILD b/libre/icu-compat/PKGBUILD index 48136c7..30cf798 100644 --- a/libre/icu-compat/PKGBUILD +++ b/libre/icu-compat/PKGBUILD @@ -1,7 +1,8 @@ -# Maintainer (Arch): Andreas Radke -# Contributor (Arch): Art Gramlich +# Maintainer (arch): Andreas Radke +# Contributor: Art Gramlich # Contributor: Denis 'GNUtoo' Carikli # Contributor: Eli Schwartz +# Contributor: bill-auger # parabola changes and rationale: @@ -74,31 +75,33 @@ # installed by the icu package. -_pkgname=icu +_pkgname=icu # 'pkgver' should always be one major version behind core/icu pkgname=${_pkgname}-compat -pkgver=67.1 # should always be one major version behind core/icu +pkgver=69.1 pkgrel=1 pkgrel+=.parabola1 pkgdesc="International Components for Unicode library" pkgdesc+=" (compatibility libraries for the previous release)" arch=(x86_64) arch+=(armv7h i686) -url="http://site.icu-project.org/home" +url="https://icu.unicode.org" license=('custom:icu') depends=('gcc-libs' 'sh') -depends+=("icu>$pkgver") # core/icu should always be one major version ahead -conflicts=("icu<=$pkgver") # core/icu should always be one major version ahead +depends+=("icu>${pkgver}") # core/icu should always be one major version ahead +conflicts=("icu<=${pkgver}") # core/icu should always be one major version ahead makedepends=('python') provides=(libicu{data,i18n,io,test,tu,uc}.so) source=(https://github.com/unicode-org/icu/releases/download/release-${pkgver//./-}/${_pkgname}4c-${pkgver//./_}-src.tgz{,.asc}) -# https://github.com/unicode-org/icu/releases/download/release-65-1/SHASUM512.txt - no checksum file for v67 release -sha512sums=('4779f1ce1ca7976f6fad6768853ea8c540da54d11509e3b6cfd864a04b5f2db1c3d4b546387f91ad02fb90804525bc37d2543173f0d705d6ca11dc6f2b7640a8' +# https://github.com/unicode-org/icu/releases/download/release-69-1/SHASUM512.txt +sha512sums=('d4aeb781715144ea6e3c6b98df5bbe0490bfa3175221a1d667f3e6851b7bd4a638fa4a37d4a921ccb31f02b5d15a6dded9464d98051964a86f7b1cde0ff0aab7' 'SKIP') validpgpkeys=('BA90283A60D67BA0DD910A893932080F4FB419E3') # "Steven R. Loomis (filfla-signing) " validpgpkeys+=('9731166CD8E23A83BEE7C6D3ACA5DBE1FD8FABF1') # "Steven R. Loomis (ICU Project) " validpgpkeys+=('FFA9129A180D765B7A5BEA1C9B432B27D1BA20D7') # "Fredrik Roubert " validpgpkeys+=('E4098B78AFC94394F3F49AA903996C7C83F12F11') # "keybase.io/srl295 " -validpgpkeys=('4569BBC09DA846FC91CBD21CE1BBA44593CF2AE0') # "Steven R. Loomis (codesign-qormi) " +validpgpkeys+=('4569BBC09DA846FC91CBD21CE1BBA44593CF2AE0') # "Steven R. Loomis (codesign-qormi) " +validpgpkeys+=('0E51E7F06EF719FBD072782A5F56E5AFA63CCD33') # "Craig Cornelius (For use with ICU releases) " + build() { cd icu/source From ebb2dfa669477de53d8c78ea4a22cdbc11436c5b Mon Sep 17 00:00:00 2001 From: Denis 'GNUtoo' Carikli Date: Nov 28 2021 09:10:04 +0000 Subject: [PATCH 52/73] libre: netpbm: update to 10.73.36 by syncing with Arch Linux According to Wikipedia: "GIF images are compressed using the Lempel–Ziv–Welch (LZW) lossless data compression technique to reduce the file size without degrading the visual quality. This compression technique was patented in 1985. Controversy over the licensing agreement between the software patent holder, Unisys, and CompuServe in 1994 spurred the development of the Portable Network Graphics (PNG) standard. By 2004 all the relevant patents had expired."[1]. So we can safely stop removing GIF related code on the basis of patents alone. [1]https://en.wikipedia.org/wiki/GIF Signed-off-by: Denis 'GNUtoo' Carikli --- diff --git a/libre/netpbm/PKGBUILD b/libre/netpbm/PKGBUILD index d794403..9bb74cb 100644 --- a/libre/netpbm/PKGBUILD +++ b/libre/netpbm/PKGBUILD @@ -1,12 +1,16 @@ # Maintainer: Omar Vega Ramos # Contributor (Hyperbola): André Silva +# Maintainer (Arch): +# parabola changes and rationale: +# - Added armv7h and i686 support +# - Removed nonfree parts pkgname=netpbm -pkgver=10.73.31 +pkgver=10.73.36 pkgrel=1 pkgrel+=.parabola1 pkgdesc="A toolkit for manipulation of graphic images" -pkgdesc+=", without nonfree parts and patent issues" +pkgdesc+=", without nonfree parts" arch=('x86_64') arch+=('i686' 'armv7h') license=('custom' 'BSD' 'GPL' 'LGPL') @@ -17,91 +21,35 @@ options=('!makeflags') # Get docs with: wget --recursive --relative -nH http://netpbm.sourceforge.net/doc/ source=(https://downloads.sourceforge.net/project/netpbm/super_stable/$pkgver/netpbm-$pkgver.tgz https://sources.archlinux.org/other/packages/netpbm/netpbm-doc-31Jan2014.tar.xz{,.sig} - netpbm-CAN-2005-2471.patch netpbm-security-code.patch netpbm-security-scripts.patch) -sha256sums=('584c95f1ccdcd66d5ca68d7d5501728ae1184cba324d713f6b2a3ca86424243b' + netpbm-CAN-2005-2471.patch netpbm-security-code.patch netpbm-security-scripts.patch + reproducible-man-gzip.patch use-source-date-epoch.patch) +sha256sums=('93b31b11b003082d5fd4037ae5c768b91ea7330b10247a25086c10b5dd71e445' '74bcf840ee643c6917330c382484010cb99c004a3fcf05391bebcac63815acb3' 'SKIP' '991aba7897e0710687369b4e2edfba1397ecd77d62578eac496afbc47b5ca970' - '2eaa0f842d90bb3dcbc66273d58ec9117b97029da231b141159e580e65b98eb0' - '2c397588d9cba2c40dee55c07713d5e77e0e04245db939fdc1962d7de4cf4a33') + '83d75a80ce999d8b69572e54f04c4d220c60b0d09f9e52d3236264535c3bf216' + '2c397588d9cba2c40dee55c07713d5e77e0e04245db939fdc1962d7de4cf4a33' + '8e3efdb4fcbfdc8e9a5c8e9663c7d6b9ecef3a2379ce38d2acc5669c339f6814' + '68055341833f482c6910a56c2fdfe046978a1a92fd8442a2a9209c82ce3e4d13') validpgpkeys=('5357F3B111688D88C1D88119FCF2CB179205AC90') -prepare() { - cd $pkgname-$pkgver - - # Removing hpcdtoppm/pcdindex (non comercial) - rm -rv converter/ppm/hpcdtoppm - - # Removing ppmtogif/giftopnm (patent restriction) - rm -v converter/other/giftopnm.c converter/ppm/ppmtogif.c - rm -v test/gif-quant-roundtrip.test test/gif-roundtrip.test test/all-in-place.ok - - # Removing programs without license information - rm -v other/pamchannel.c test/pamchannel.ok - rm -v converter/other/pamtopnm.c - rm -v converter/pbm/pbmto4425.c - rm -v converter/pbm/pbmtoln03.c - rm -v converter/pbm/pbmtolps.c - rm -v converter/pbm/pbmtopk.c - rm -v converter/pbm/pktopbm.c - rm -v converter/ppm/ppmtopjxl.c - rm -v converter/pgm/spottopgm.c - - rm -v test/avs-roundtrip.test test/facesaver-roundtrip.test test/ilbm-roundtrip.test test/pamchannel.test \ - test/pamditherbw.test test/pamenlarge.test test/pamfile.test test/pfm-roundtrip.test \ - test/pgmtoppm.test test/pict-roundtrip.test test/pnminvert.test test/pnmremap1.test \ - test/pnmremap2.test test/pnmtopnm-plain.test test/pnm-pam-roundtrip.test test/pnm-plain-roundtrip.test \ - test/ps-alt-roundtrip.test test/ps-roundtrip.test test/sbig-roundtrip.test test/st4-roundtrip.test \ - test/targa-roundtrip.test test/utahrle-roundtrip.test test/winicon-roundtrip.test test/xwd-roundtrip.test - - # Removing references about hpcdtoppm/pcdindex (non comercial) - sed -i 's/hpcdtoppm//g' converter/ppm/Makefile - sed -i 's/hpcdtoppm\.1//g' buildtools/manpage.mk - sed -i 's/pcdindex\.1//g' buildtools/manpage.mk - - # Removing references about ppmtogif/giftopnm (patent restriction) - sed -i 's/ppmtogif//g' converter/ppm/Makefile test/all-in-place.test - sed -i 's/ppmtogif\.1//g' buildtools/manpage.mk - sed -i 's/giftopnm//g' converter/other/Makefile test/all-in-place.test - sed -i 's/giftopnm\.1//g' buildtools/manpage.mk - sed -i '/giftopnm/d' converter/other/pnmtopalm/README - - # Removing references about programs without license information - sed -i 's/pamchannel//g' other/Makefile test/all-in-place.test - sed -i 's/pamchannel\.1//g' buildtools/manpage.mk - sed -i 's/pamchannel\.test//g' test/Test-Order - - sed -i 's/pamtopnm//g' converter/other/Makefile test/all-in-place.test - sed -i 's/pamtopnm\.1//g' buildtools/manpage.mk - sed -i '/pnmtopnm/d' netpbm.c +remove_program() { + file="$1" + progname="$(basename ${file} | sed 's/\.c$//')" - sed -i 's/pbmto4425//g' converter/pbm/Makefile test/all-in-place.test - sed -i 's/pbmto4425\.1//g' buildtools/manpage.mk - - sed -i 's/pbmtoln03//g' converter/pbm/Makefile test/all-in-place.test - sed -i 's/pbmtoln03\.1//g' buildtools/manpage.mk - - sed -i 's/pbmtolps//g' converter/pbm/Makefile test/all-in-place.test - sed -i 's/pbmtolps\.1//g' buildtools/manpage.mk - - sed -i 's/pbmtopk//g' converter/pbm/Makefile test/all-in-place.test - sed -i 's/pbmtopk\.1//g' buildtools/manpage.mk - - sed -i 's/pktopbm//g' converter/pbm/Makefile test/all-in-place.test - sed -i 's/pktopbm\.1//g' buildtools/manpage.mk - - sed -i 's/ppmtopjxl//g' converter/ppm/Makefile test/all-in-place.test - sed -i 's/ppmtopjxl\.1//g' buildtools/manpage.mk - - sed -i 's/spottopgm//g' converter/pgm/Makefile test/all-in-place.test - sed -i 's/spottopgm\.1//g' buildtools/manpage.mk + rm -v "${file}" + sed -i "s/${progname}//g" "$(dirname ${file})/Makefile" + sed -i "s/${progname}\.1//g" buildtools/manpage.mk +} - #Removing references about nonfree licenses part - sed -i '338,383d' doc/copyright_summary +prepare() { + cd $pkgname-$pkgver patch -p1 < ../netpbm-CAN-2005-2471.patch patch -p1 < ../netpbm-security-code.patch patch -p1 < ../netpbm-security-scripts.patch + patch -p1 < ../reproducible-man-gzip.patch + patch -p1 < ../use-source-date-epoch.patch sed -i 's|#!/usr/bin/python|#!/usr/bin/python2|' buildtools/makeman sed -i 's|@python|@python2|' buildtools/manpage.mk @@ -118,6 +66,49 @@ prepare() { sed -i 's|misc|share/netpbm|' common.mk sed -i 's|/link|/lib|' lib/Makefile sed -i 's|install.manwebmain install.manweb install.man|install.man|' GNUmakefile + + # Remove the converter/ppm/hpcdtoppm directory: + # - hpcdtoppm: as hpcdtoppm is not even redistributable, this hpcdtoppm only + # prints a message to steer users toward downloading "the real hpcdtoppm" + # which is nonfree + # - pcdovtoppm: no license information + rm -rv converter/ppm/hpcdtoppm + sed '/\.\/converter\/ppm\/hpcdtoppm \\/d' -i GNUmakefile + sed 's/hpcdtoppm//g' -i converter/ppm/Makefile + + # Removing programs without license information + remove_program converter/other/pamtopnm.c + remove_program converter/pbm/pbmto4425.c + remove_program converter/pbm/pbmtoln03.c + remove_program converter/pbm/pbmtolps.c + remove_program converter/pbm/pbmtopk.c + remove_program converter/pbm/pktopbm.c + remove_program converter/pgm/spottopgm.c + remove_program converter/ppm/ppmtogif.c + remove_program converter/ppm/ppmtopjxl.c + remove_program other/pamchannel.c + + # Tests have no license information + rm -v -rf test/ + # Remove test from "SUPPORT_SUBDIRS = urt icon buildtools test" + awk '{ + if ($1 != "SUPPORT_SUBDIRS") { + print $0 + } else { + for (i=1;i<=NF;i++) { + if($i != "test") { + printf $i " " + } + } + } + }' GNUmakefile > GNUmakefile.1 + mv -f GNUmakefile.1 GNUmakefile + + sed -i '/pnmtopnm/d' netpbm.c + + #Removing references about nonfree licenses part + sed -i '338,383d' doc/copyright_summary + } build() { diff --git a/libre/netpbm/netpbm-security-code.patch b/libre/netpbm/netpbm-security-code.patch index 18f7bd7..8674eb7 100644 --- a/libre/netpbm/netpbm-security-code.patch +++ b/libre/netpbm/netpbm-security-code.patch @@ -240,6 +240,27 @@ index 9f7004a..60e8477 100644 *colsP = (((int)head.h_wide - ' ') << 6) + ((int)head.l_wide - ' '); *rowsP = (((int)head.h_high - ' ') << 6) + ((int) head.l_high - ' '); *padrightP = ( ( *colsP + pad - 1 ) / pad ) * pad - *colsP; +diff --git a/converter/pbm/pbmto4425.c b/converter/pbm/pbmto4425.c +index 1d97ac6..c4c8cbb 100644 +--- a/converter/pbm/pbmto4425.c ++++ b/converter/pbm/pbmto4425.c +@@ -2,6 +2,7 @@ + + #include "nstring.h" + #include "pbm.h" ++#include + + static char bit_table[2][3] = { + {1, 4, 0x10}, +@@ -160,7 +161,7 @@ main(int argc, char * argv[]) { + xres = vmap_width * 2; + yres = vmap_height * 3; + +- vmap = malloc(vmap_width * vmap_height * sizeof(char)); ++ vmap = malloc3(vmap_width, vmap_height, sizeof(char)); + if(vmap == NULL) + { + pm_error( "Cannot allocate memory" ); diff --git a/converter/pbm/pbmtogem.c b/converter/pbm/pbmtogem.c index 9eab041..13b0257 100644 --- a/converter/pbm/pbmtogem.c @@ -337,6 +358,18 @@ index 14c6b85..362b70e 100644 putinit(xbmVersion); +diff --git a/converter/pbm/pktopbm.c b/converter/pbm/pktopbm.c +index 712f339..b6fcb02 100644 +--- a/converter/pbm/pktopbm.c ++++ b/converter/pbm/pktopbm.c +@@ -280,6 +280,7 @@ main(int argc, char *argv[]) { + if (flagbyte == 7) { /* long form preamble */ + integer packetlength = get32() ; /* character packet length */ + car = get32() ; /* character number */ ++ overflow_add(packetlength, pktopbm_pkloc); + endofpacket = packetlength + pktopbm_pkloc; + /* calculate end of packet */ + if ((car >= MAXPKCHAR) || !filename[car]) { diff --git a/converter/pbm/thinkjettopbm.l b/converter/pbm/thinkjettopbm.l index 5de4f2b..7f31de5 100644 --- a/converter/pbm/thinkjettopbm.l @@ -674,6 +707,43 @@ index d116773..fc84cac 100644 obuf = (unsigned char *) pm_allocrow(cols, sizeof(unsigned char)); cbuf = (unsigned char *) pm_allocrow(cols * 2, sizeof(unsigned char)); +diff --git a/converter/ppm/ppmtopjxl.c b/converter/ppm/ppmtopjxl.c +index ddf4963..b2c7e8e 100644 +--- a/converter/ppm/ppmtopjxl.c ++++ b/converter/ppm/ppmtopjxl.c +@@ -306,6 +306,9 @@ main(int argc, const char * argv[]) { + if (maxval > PCL_MAXVAL) + pm_error("color range too large; reduce with ppmcscale"); + ++ if (cols < 0 || rows < 0) ++ pm_error("negative size is not possible"); ++ + /* Figure out the colormap. */ + pm_message("Computing colormap..."); + chv = ppm_computecolorhist(pixels, cols, rows, MAXCOLORS, &colors); +@@ -325,6 +328,8 @@ main(int argc, const char * argv[]) { + case 0: /* direct mode (no palette) */ + bpp = bitsperpixel(maxval); /* bits per pixel */ + bpg = bpp; bpb = bpp; ++ overflow2(bpp, 3); ++ overflow_add(bpp*3, 7); + bpp = (bpp*3+7)>>3; /* bytes per pixel now */ + bpr = (bpp<<3)-bpg-bpb; + bpp *= cols; /* bytes per row now */ +@@ -334,9 +339,13 @@ main(int argc, const char * argv[]) { + case 3: case 7: pclindex++; + default: + bpp = 8/pclindex; ++ overflow_add(cols, bpp); ++ if(bpp == 0) ++ pm_error("assert: no bpp"); + bpp = (cols+bpp-1)/bpp; /* bytes per row */ + } + } ++ overflow2(bpp,2); + inrow = (char *)malloc((unsigned)bpp); + outrow = (char *)malloc((unsigned)bpp*2); + runcnt = (signed char *)malloc((unsigned)bpp); diff --git a/converter/ppm/ppmtowinicon.c b/converter/ppm/ppmtowinicon.c index c673798..af2b445 100644 --- a/converter/ppm/ppmtowinicon.c @@ -773,30 +843,6 @@ diff --git a/converter/ppm/ximtoppm.c b/converter/ppm/ximtoppm.c index ce5e639..a39b689 100644 --- a/converter/ppm/ximtoppm.c +++ b/converter/ppm/ximtoppm.c -@@ -117,6 +117,7 @@ ReadXimHeader(FILE * const in_fp, - header->bits_channel = atoi(a_head.bits_per_channel); - header->alpha_flag = atoi(a_head.alpha_channel); - if (strlen(a_head.author)) { -+ overflow_add(strlen(a_head.author),1); - if (!(header->author = calloc((unsigned int)strlen(a_head.author)+1, - 1))) { - pm_message("ReadXimHeader: can't calloc author string" ); -@@ -126,6 +127,7 @@ ReadXimHeader(FILE * const in_fp, - strncpy(header->author, a_head.author, strlen(a_head.author)); - } - if (strlen(a_head.date)) { -+ overflow_add(strlen(a_head.date),1); - if (!(header->date =calloc((unsigned int)strlen(a_head.date)+1,1))){ - pm_message("ReadXimHeader: can't calloc date string" ); - return(0); -@@ -134,6 +136,7 @@ ReadXimHeader(FILE * const in_fp, - strncpy(header->date, a_head.date, strlen(a_head.date)); - } - if (strlen(a_head.program)) { -+ overflow_add(strlen(a_head.program),1); - if (!(header->program = calloc( - (unsigned int)strlen(a_head.program) + 1, 1))) { - pm_message("ReadXimHeader: can't calloc program string" ); @@ -160,6 +163,7 @@ ReadXimHeader(FILE * const in_fp, if (header->nchannels == 3 && header->bits_channel == 8) header->ncolors = 0; From e609d068150eebe1dcc8973b06e0ebdbe1ef494f Mon Sep 17 00:00:00 2001 From: Denis 'GNUtoo' Carikli Date: Nov 28 2021 09:15:03 +0000 Subject: [PATCH 53/73] libre: netpbm: Add forgetten patches from Arch Linux Signed-off-by: Denis 'GNUtoo' Carikli --- diff --git a/libre/netpbm/reproducible-man-gzip.patch b/libre/netpbm/reproducible-man-gzip.patch new file mode 100644 index 0000000..f6f4f0d --- /dev/null +++ b/libre/netpbm/reproducible-man-gzip.patch @@ -0,0 +1,16 @@ +diff -aur netpbm-10.73.31.old/buildtools/manpage.mk netpbm-10.73.31/buildtools/manpage.mk +--- netpbm-10.73.31.old/buildtools/manpage.mk 2020-05-28 18:41:20.400790506 +0200 ++++ netpbm-10.73.31/buildtools/manpage.mk 2020-05-28 18:50:50.444143414 +0200 +@@ -388,9 +388,9 @@ + # This will install the generated man pages + installman: + set -x +- for f in netpbm.1 $(MAN1); do if [ -f $$f ]; then gzip <$$f >$(MANDIR)/man1/$$f.gz; fi; done +- for f in $(MAN3); do if [ -f $$f ]; then gzip <$$f >$(MANDIR)/man3/$$f.gz; fi; done +- for f in $(MAN5); do if [ -f $$f ]; then gzip <$$f >$(MANDIR)/man5/$$f.gz; fi; done ++ for f in netpbm.1 $(MAN1); do if [ -f $$f ]; then gzip -n <$$f >$(MANDIR)/man1/$$f.gz; fi; done ++ for f in $(MAN3); do if [ -f $$f ]; then gzip -n <$$f >$(MANDIR)/man3/$$f.gz; fi; done ++ for f in $(MAN5); do if [ -f $$f ]; then gzip -n <$$f >$(MANDIR)/man5/$$f.gz; fi; done + + # This will uninstall them + uninstallman: diff --git a/libre/netpbm/use-source-date-epoch.patch b/libre/netpbm/use-source-date-epoch.patch new file mode 100644 index 0000000..496935f --- /dev/null +++ b/libre/netpbm/use-source-date-epoch.patch @@ -0,0 +1,13 @@ +Only in netpbm-10.73.31/buildtools/: depend.mk +diff -aur netpbm-10.73.31.old/buildtools/stamp-date netpbm-10.73.31/buildtools/stamp-date +--- netpbm-10.73.31.old/buildtools/stamp-date 2020-05-30 17:34:29.833395465 +0200 ++++ netpbm-10.73.31/buildtools/stamp-date 2020-05-30 17:48:52.910091897 +0200 +@@ -9,7 +9,7 @@ + # documentation. This software is provided "as is" without express or + # implied warranty. + # +-DATE=$(date) ++DATE="$(date --date="@${SOURCE_DATE_EPOCH:-$(date +%s)}")" + LOGNAME_OR_UNKNOWN=${LOGNAME:-UNKNOWN} + USER=${USER:-$LOGNAME_OR_UNKNOWN} + if [ "$USER" = "UNKNOWN" ]; then From c05bf063fc4c93b657cd92339c01001c392e113e Mon Sep 17 00:00:00 2001 From: Parabola automatic package builder Date: Nov 28 2021 15:02:57 +0000 Subject: [PATCH 54/73] Update libre/parabola-keyring --- diff --git a/libre/parabola-keyring/PKGBUILD b/libre/parabola-keyring/PKGBUILD index e4dab52..a170703 100644 --- a/libre/parabola-keyring/PKGBUILD +++ b/libre/parabola-keyring/PKGBUILD @@ -11,8 +11,8 @@ pkgname=parabola-keyring -pkgver=20211124 -_gitver=314e51d2df7e70ce78065f346ed1e0de9210d53d +pkgver=20211128 +_gitver=7bd8d6478b3e0ff4ff8bc31c3f6aef7b10f8553c pkgrel=1 pkgdesc='Parabola GNU/Linux-libre PGP keyring' arch=('any') From 24077c93f711c4756ef1fc1acda11078e51446aa Mon Sep 17 00:00:00 2001 From: David P Date: Nov 30 2021 00:45:15 +0000 Subject: [PATCH 55/73] updpkg: nonsystemd/pulseaudio 15.0-1.nonsystemd1 Signed-off-by: David P --- diff --git a/nonsystemd/pulseaudio/PKGBUILD b/nonsystemd/pulseaudio/PKGBUILD index 2a96d30..1d92385 100644 --- a/nonsystemd/pulseaudio/PKGBUILD +++ b/nonsystemd/pulseaudio/PKGBUILD @@ -1,11 +1,11 @@ # Maintainer: David P. -# Maintainer (Arch): Jan Alexander Steffens (heftig) +# Maintainer: Jan Alexander Steffens (heftig) pkgbase=pulseaudio pkgname=(pulseaudio libpulse pulseaudio-{zeroconf,lirc,jack,bluetooth,equalizer,rtp}) pkgdesc="A featureful, general-purpose sound server" -pkgver=14.2 -pkgrel=2 +pkgver=15.0 +pkgrel=1 pkgrel+=.nonsystemd1 arch=(x86_64) arch+=(i686 armv7h) @@ -14,12 +14,10 @@ license=(GPL) makedepends=(libasyncns libcap attr libxtst libsm libsndfile rtkit libsoxr speexdsp tdb elogind dbus avahi bluez bluez-libs jack2 sbc lirc openssl fftw orc gtk3 webrtc-audio-processing check git meson - xmltoman) -_commit=6a487c5244563f49a025088de3510c80824fc99e # tags/v14.2^0 -source=("git+https://gitlab.freedesktop.org/pulseaudio/pulseaudio.git#commit=$_commit" - "meson-elogind-support.patch") -sha256sums=('SKIP' - 'fea0e09a9f026bc3c9160b53018b8e1dd1f3493c60f68405a758de7d3cb592cf') + xmltoman valgrind doxygen) +_commit=6329a2498eb038f8a9537888280a62b00a93f68e # tags/v15.0^0 +source=("git+https://gitlab.freedesktop.org/pulseaudio/pulseaudio.git#commit=$_commit") +sha256sums=('SKIP') pkgver() { cd pulseaudio @@ -30,18 +28,22 @@ prepare() { cd pulseaudio # Freeze version before patching - patch -Np 1 -i ../meson-elogind-support.patch ./git-version-gen doesnt-exist >.tarball-version } build() { - arch-meson pulseaudio build \ - -D pulsedsp-location='/usr/\$LIB/pulseaudio' \ - -D stream-restore-clear-old-devices=true \ - -D udevrulesdir=/usr/lib/udev/rules.d \ - -D systemd=disabled \ + local meson_options=( + -D stream-restore-clear-old-devices=true + -D pulsedsp-location='/usr/\$LIB/pulseaudio' + -D udevrulesdir=/usr/lib/udev/rules.d + -D bluez5-gstreamer=disabled + -D tcpwrap=disabled + -D systemd=disabled -D elogind=enabled - meson compile -C build + ) + + arch-meson pulseaudio build "${meson_options[@]}" + meson compile -C build } check() { @@ -78,7 +80,7 @@ package_pulseaudio() { done pulsever=${pulsever%%-*} - DESTDIR="$pkgdir" meson install -C build + meson install -C build --destdir "$pkgdir" cd "$pkgdir" @@ -106,7 +108,10 @@ package_pulseaudio() { _pick libpulse usr/include _pick libpulse usr/share/man/man1/pa{cat,ctl,dsp,mon,play,rec,record}.1 _pick libpulse usr/share/man/man5/pulse-client.conf.5 + _pick libpulse usr/share/bash-completion/completions/pa{cat,ctl,dsp,play,rec,record} + _pick libpulse usr/share/bash-completion/completions/pulseaudio _pick libpulse usr/share/vala + _pick libpulse usr/share/zsh local moddir=usr/lib/pulse-$pulsever/modules @@ -133,7 +138,7 @@ package_pulseaudio() { package_libpulse() { pkgdesc="$pkgdesc (client library)" - depends=(dbus libasyncns libcap libxcb libsm libsndfile elogind) + depends=(dbus libasyncns libcap libxcb libsm libsndfile libelogind) optdepends=('glib2: mainloop integration') provides=(libpulse{,-simple,-mainloop-glib}.so) license=(LGPL) diff --git a/nonsystemd/pulseaudio/meson-elogind-support.patch b/nonsystemd/pulseaudio/meson-elogind-support.patch deleted file mode 100644 index 9d18e4a..0000000 --- a/nonsystemd/pulseaudio/meson-elogind-support.patch +++ /dev/null @@ -1,42 +0,0 @@ - meson.build | 6 ++++++ - meson_options.txt | 3 +++ - 2 files changed, 9 insertions(+) - -diff --git a/meson.build b/meson.build -index 842d5f5b5..1daa3b067 100644 ---- a/meson.build -+++ b/meson.build -@@ -484,6 +484,11 @@ if systemd_dep.found() and systemduserunitdir == '' - systemduserunitdir = systemd_dep.get_pkgconfig_variable('systemduserunitdir') - endif - -+libelogind_dep = dependency('libelogind', required : get_option('elogind')) -+if libelogind_dep.found() -+ cdata.set('HAVE_SYSTEMD_LOGIN', 1) -+endif -+ - x11_dep = dependency('x11-xcb', required : get_option('x11')) - if x11_dep.found() - xcb_dep = dependency('xcb', required : true, version : '>= 1.6') -@@ -701,6 +706,7 @@ summary = [ - 'Enable udev: @0@'.format(udev_dep.found()), - ' Enable HAL->udev compat: @0@'.format(get_option('hal-compat')), - 'Enable systemd: @0@'.format(libsystemd_dep.found()), -+ 'Enable elogind: @0@'.format(libelogind_dep.found()), - # 'Enable TCP Wrappers: @0@'.format(${ENABLE_TCPWRAP}), - 'Enable libsamplerate: @0@'.format(samplerate_dep.found()), - 'Enable IPv6: @0@'.format(get_option('ipv6')), -diff --git a/meson_options.txt b/meson_options.txt -index e54caf5cf..5fbb513c0 100644 ---- a/meson_options.txt -+++ b/meson_options.txt -@@ -126,6 +126,9 @@ option('udev', - option('x11', - type : 'feature', value : 'auto', - description : 'Optional X11 support') -+option('elogind', -+ type : 'feature', value : 'auto', -+ description : 'Optional elogind support') - - # Echo cancellation - From ebcba7f9e5b7e14c63fd0be4a8345352e711da0c Mon Sep 17 00:00:00 2001 From: David P Date: Nov 30 2021 01:31:34 +0000 Subject: [PATCH 56/73] re-add nonsystemd/pipewire Please, do not delete it. The Arch version runs systemctl un post-install script and this build is optimized for non-systemd systems Signed-off-by: David P --- diff --git a/nonsystemd/pipewire/PKGBUILD b/nonsystemd/pipewire/PKGBUILD new file mode 100644 index 0000000..f48fff2 --- /dev/null +++ b/nonsystemd/pipewire/PKGBUILD @@ -0,0 +1,198 @@ +# Maintainer: David P. +# Maintainer: Jan Alexander Steffens (heftig) +# Contributor: Jan de Groot + +pkgbase=pipewire +pkgname=(pipewire alsa-card-profiles pipewire-docs pipewire-alsa pipewire-jack + pipewire-pulse gst-plugin-pipewire pipewire-zeroconf pipewire-v4l2) +pkgver=0.3.40 +pkgrel=1 +pkgrel+=.nonsystemd1 +epoch=1 +pkgdesc="Low-latency audio/video router and processor" +url="https://pipewire.org" +license=(MIT) +arch=(x86_64) +arch+=(i686 armv7h) +makedepends=(git meson doxygen graphviz python-docutils valgrind libpulse + alsa-lib libusb gst-plugins-base rtkit dbus sdl2 ncurses libsndfile + bluez-libs sbc libldac libfreeaptx libfdk-aac avahi + webrtc-audio-processing) +checkdepends=(desktop-file-utils) +_commit=7afd80052b7c49754a13c9ab49c368f95b60e0a7 # tags/0.3.40 +source=("git+https://gitlab.freedesktop.org/pipewire/pipewire.git#commit=$_commit") +sha256sums=('SKIP') + +pkgver() { + cd pipewire + git describe --tags | sed 's/-/+/g' +} + +prepare() { + cd pipewire +} + +build() { + local meson_options=( + -D docs=enabled + -D jack=disabled + -D libcamera=disabled + -D udevrulesdir=/usr/lib/udev/rules.d + -D systemd=disabled + -D roc=disabled + -D session-managers=[] + ) + + arch-meson pipewire build "${meson_options[@]}" + meson compile -C build +} + +check() { + meson test -C build --print-errorlogs +} + +_pick() { + local p="$1" f d; shift + for f; do + d="$srcdir/$p/${f#$pkgdir/}" + mkdir -p "$(dirname "$d")" + mv "$f" "$d" + rmdir -p --ignore-fail-on-non-empty "$(dirname "$f")" + done +} + +_ver=${pkgver:0:3} + +package_pipewire() { + license+=(LGPL) # libspa-alsa + depends=(rtkit alsa-card-profiles libdbus-1.so libncursesw.so libsndfile.so + libudev.so libusb-1.0.so libasound.so libbluetooth.so + libsbc.so libldacBT_enc.so libfreeaptx.so libfdk-aac.so + libwebrtc_audio_processing.so) + optdepends=('pipewire-docs: Documentation' + 'pipewire-session-manager: Session manager' + 'pipewire-alsa: ALSA configuration' + 'pipewire-jack: JACK support' + 'pipewire-pulse: PulseAudio replacement' + 'gst-plugin-pipewire: GStreamer plugin' + 'pipewire-zeroconf: Zeroconf support' + 'pipewire-v4l2: V4L2 interceptor') + provides=(libpipewire-$_ver.so) + + meson install -C build --destdir "$pkgdir" + + ( cd "$pkgdir" + + _pick acp usr/lib/udev + _pick acp usr/share/alsa-card-profile + + _pick docs usr/share/doc + + _pick jack usr/bin/pw-jack usr/lib/pipewire-$_ver/jack + _pick jack usr/share/man/man1/pw-jack.1 + _pick jack usr/share/pipewire/jack.conf + + _pick pulse usr/bin/pipewire-pulse + _pick pulse usr/lib/pipewire-$_ver/libpipewire-module-protocol-pulse.so + _pick pulse usr/lib/pipewire-$_ver/libpipewire-module-pulse-tunnel.so + + _pick gst usr/lib/gstreamer-1.0 + + _pick zeroconf usr/lib/pipewire-$_ver/libpipewire-module-zeroconf-discover.so + + _pick v4l2 usr/bin/pw-v4l2 usr/lib/pipewire-$_ver/v4l2 + ) + + mkdir -p "$pkgdir/etc/alsa/conf.d" + ln -st "$pkgdir/etc/alsa/conf.d" \ + /usr/share/alsa/alsa.conf.d/50-pipewire.conf + + install -Dt "$pkgdir/usr/share/licenses/$pkgname" -m644 pipewire/COPYING +} + +package_alsa-card-profiles() { + pkgdesc+=" - ALSA card profiles" + license=(LGPL) + + mv acp/* "$pkgdir" +} + +package_pipewire-docs() { + pkgdesc+=" - documentation" + + mv docs/* "$pkgdir" + + install -Dt "$pkgdir/usr/share/licenses/$pkgname" -m644 pipewire/COPYING +} + +package_pipewire-alsa() { + pkgdesc+=" - ALSA configuration" + depends=(pipewire-session-manager) + provides=(pulseaudio-alsa) + + mkdir -p "$pkgdir/etc/alsa/conf.d" + ln -st "$pkgdir/etc/alsa/conf.d" \ + /usr/share/alsa/alsa.conf.d/99-pipewire-default.conf + + install -Dm644 /dev/null \ + "$pkgdir/usr/share/pipewire/media-session.d/with-alsa" + + install -Dt "$pkgdir/usr/share/licenses/$pkgname" -m644 pipewire/COPYING +} + +package_pipewire-jack() { + pkgdesc+=" - JACK support" + license+=(GPL2) # libjackserver + depends=(pipewire-session-manager libpipewire-$_ver.so) + + mv jack/* "$pkgdir" + + install -Dm644 /dev/null \ + "$pkgdir/usr/share/pipewire/media-session.d/with-jack" + + install -Dt "$pkgdir/usr/share/licenses/$pkgname" -m644 pipewire/COPYING +} + +package_pipewire-pulse() { + pkgdesc+=" - PulseAudio replacement" + depends=(pipewire-session-manager libpipewire-$_ver.so libpulse.so + libavahi-{client,common}.so) + provides=(pulseaudio pulseaudio-bluetooth) + conflicts=(pulseaudio pulseaudio-bluetooth) + + mv pulse/* "$pkgdir" + + install -Dm644 /dev/null \ + "$pkgdir/usr/share/pipewire/media-session.d/with-pulseaudio" + + install -Dt "$pkgdir/usr/share/licenses/$pkgname" -m644 pipewire/COPYING +} + +package_gst-plugin-pipewire() { + pkgdesc="Multimedia graph framework - pipewire plugin" + depends=(pipewire-session-manager libpipewire-$_ver.so gst-plugins-base-libs) + + mv gst/* "$pkgdir" + + install -Dt "$pkgdir/usr/share/licenses/$pkgname" -m644 pipewire/COPYING +} + +package_pipewire-zeroconf() { + pkgdesc+=" - Zeroconf support" + depends=(pipewire libpipewire-$_ver.so libavahi-{client,common}.so) + + mv zeroconf/* "$pkgdir" + + install -Dt "$pkgdir/usr/share/licenses/$pkgname" -m644 pipewire/COPYING +} + +package_pipewire-v4l2() { + pkgdesc+=" - V4L2 interceptor" + depends=(pipewire-session-manager libpipewire-$_ver.so) + + mv v4l2/* "$pkgdir" + + install -Dt "$pkgdir/usr/share/licenses/$pkgname" -m644 pipewire/COPYING +} + +# vim:set sw=2 et: From f9c7298ade2cb6168a564635783124176423b30f Mon Sep 17 00:00:00 2001 From: bill-auger Date: Nov 30 2021 16:10:22 +0000 Subject: [PATCH 57/73] [libre-testing/icedove]: add package --- diff --git a/libre-testing/icedove/PKGBUILD b/libre-testing/icedove/PKGBUILD new file mode 100644 index 0000000..f3b15e8 --- /dev/null +++ b/libre-testing/icedove/PKGBUILD @@ -0,0 +1,235 @@ +# Maintainer (arch): Levente Polyak +# Contributor: Jan Alexander Steffens (heftig) +# Contributor: Ionut Biru +# Contributor: Alexander Baldeck +# Contributor: Dale Blount +# Contributor: Anders Bostrom +# Maintainer: Andreas Grapentin +# Contributor: André Silva +# Contributor: Márcio Silva +# Contributor: Luke R. +# Contributor: Isaac David +# Contributor: bill-auger + + +# parabola changes and rationale: +# - rebranded to icedove +# - added makedepends for branding: quilt mozilla-searchplugins imagemagick +# - disabled tests, they break in an environment without network access. +# - disabled geo-location + + +_pkgname=thunderbird +pkgname=icedove +epoch=1 +pkgver=78.9.1 +pkgrel=1 +pkgrel+=.parabola1 +_brandingver=78.9 +_brandingrel=1 +pkgdesc='Standalone mail and news reader based on Mozilla Thunderbird' +url=https://wiki.parabola.nu/${pkgname} +arch=(x86_64) +arch+=(i686 armv7h) +license=(MPL GPL LGPL) +depends=( + glibc gtk3 libgdk-3.so mime-types dbus libdbus-1.so dbus-glib alsa-lib nss + hunspell sqlite ttf-font libvpx libvpx.so zlib bzip2 botan libwebp libevent + libjpeg-turbo libffi nspr gcc-libs libx11 libxrender libxfixes libxext + libxcomposite libxdamage pango libpango-1.0.so cairo gdk-pixbuf2 icu + libicui18n.so libicuuc.so freetype2 libfreetype.so fontconfig + libfontconfig.so glib2 libglib-2.0.so pixman libpixman-1.so gnupg +) +optdepends=( + 'libotr: OTR support for active one-to-one chats' +) +makedepends=( + unzip zip diffutils python python-setuptools yasm nasm mesa imake libpulse + inetutils xorg-server-xvfb autoconf2.13 rust clang llvm gtk2 cbindgen nodejs + gawk perl findutils libotr +) +#makedepends[15]='llvm10' # FIXME: DEBUG: | rustup: error while loading shared libraries: libLLVM-10.so: cannot open shared object file: No such file or directory +# # ERROR: Command `rustup which rustc` failed with exit status 127. +makedepends+=(quilt imagemagick) +replaces=(${_pkgname}) +options=(!emptydirs !makeflags) +source=(https://ftp.mozilla.org/pub/mozilla.org/thunderbird/releases/$pkgver/source/thunderbird-$pkgver.source.tar.xz{,.asc} + $pkgname.desktop + vendor-prefs.js + distribution.ini + mozconfig.cfg + configure-fix-passing-system-bzip2-ldflags.patch + thunderbird-78.5-rust-1.48.patch) +source+=(https://repo.parabola.nu/other/icedove/${pkgname}_$_brandingver-$_brandingrel.branding.tar.xz{,.sig}) +source_armv7h=(arm-wasm-vfp.patch) +sha512sums=('fa27a327ce10a0c16877ac02338aace257f60f69af40d12ae5bb2055f6536db9ba45995765ac0eaa1aea2fa2b353ac9dc6eb06fcdf6cb4ae6fafcd65fe5970c6' + 'SKIP' + 'a3c9815491d9bed0440c60f35867a5b8a2a1343521f288035fcc46e651a11b926c75a9eca2d262b43d510a7a7119709b53637f1b00ddbbee8e5b0a4b33d7b8fd' + 'e21d30a8b79724eda3488ac2bf9dfeb0c7f6bf39e59c37f17574b529d33043765eb54408a55fcbf6f3afa7a58ca99124992d443cdff23ac5c9bdbff33c75f60f' + '31d46f91d9612d30d8553a19d0d309d743467e58b568a4aeea3caf6bd805ba00656561c84a1511c59bce1cf24ba323bfad2cd26a19985f1bf7dfb6d282642972' + '1eba1593ff0a9642d89e6d3e03388b1aef00437b2f6c1f0d81d250d9845b80e057c246eaeb31d8d22001abd65556a9603d1db597baf864481a5bfb7000886b29' + 'e3ed2708b8354015cb3d2c81048d1ce4932d1effbe2b40efa7cf9b45c1b923b9fd708645e2f8aa0136a485a3f7ce6b396b85721aaf535a4a764fd5005fb7e222' + 'bbb8b0e7b9c67372eb22e1d6b6b5758fe504ded84c40a076d4a064374a1bf34ac12d5b514b328ac9ca984d976b9e0fbde81e68a66bec915c997d6be0c0917584') +sha512sums_armv7h=('c25883c4860e511a99d9fbfba5b824145c0862729101721605725f609ca2a41848b741dd100eff390f57031dc5f14af3ea30133de30f75cb20197c420ae20972') +sha512sums+=('78fee952c9bc826a0a7ec262d442150177bf887349641279dafae803b9832a0dd9b8d0722cc084459077a5310eb4f6de6a8d7ffaff6741afe1359f292a373f34' + 'SKIP') +validpgpkeys=(14F26682D0916CDD81E37B6D61B7B526D98F0353) # Mozilla Software Releases +validpgpkeys+=(BFA8008A8265677063B11BF47171986E4B745536 # Andreas Grapentin + 3954A7AB837D0EA9CFA9798925DB7D9B5A8D4B40) # bill-auger + + +prepare() { + cd $_pkgname-$pkgver + + echo "${noextract[@]}" + + local src + for src in "${source[@]}"; do + src="${src%%::*}" + src="${src##*/}" + [[ $src = *.patch ]] || continue + [[ $src = arm-wasm-vfp.patch ]] && continue # defer parabola patches + + echo "Applying patch $src..." + patch -Np1 < "../$src" + done + + cp ../mozconfig.cfg .mozconfig + sed "s|@PWD@|${PWD@Q}|g" -i .mozconfig + + case "${CARCH}" in + armv*) + patch -Np1 -i "${srcdir}"/arm-wasm-vfp.patch + + sed -i '/--enable-linker=gold/d' .mozconfig + sed -i '/--enable-hardening/d' .mozconfig + sed -i '/--enable-optimize/d' .mozconfig + + export MOZ_DEBUG_FLAGS=" " + export CFLAGS+=" -g0" + export CXXFLAGS+=" -g0" + export LDFLAGS+=" -Wl,--no-keep-memory -Wl,--reduce-memory-overheads" + export RUSTFLAGS="-Cdebuginfo=0" + + cat >> .mozconfig < error: unknown argument: '-fvar-tracking-assignments' + CFLAGS="${CFLAGS/-fvar-tracking-assignments/}" + CXXFLAGS="${CXXFLAGS/-fvar-tracking-assignments/}" + + case "${CARCH}" in + armv*) + export LDFLAGS+=" -Wl,--no-keep-memory -Wl,--reduce-memory-overheads" + sed -i "s/\(cargo_rustc_flags += -C lto\)/#\1/" config/rules.mk + sed -i "s/debug_info = '2'/debug_info = '1'/" build/moz.configure/toolchain.configure + export MOZ_MAKE_FLAGS=-j1 + ;; + i686) + sed -i "s/\(cargo_rustc_flags += -C lto\)/#\1/" config/rules.mk + sed -i "s/debug_info = '2'/debug_info = '1'/" build/moz.configure/toolchain.configure + export MOZ_MAKE_FLAGS=-j1 + ;; + esac + + ./mach configure + ./mach build + ./mach buildsymbols +} + +package() { + optdepends=('libcanberra: sound support') + + cd $_pkgname-$pkgver + DESTDIR="$pkgdir" ./mach install + + install -Dm 644 ../vendor-prefs.js -t "$pkgdir/usr/lib/$pkgname/defaults/pref" + install -Dm 644 ../distribution.ini -t "$pkgdir/usr/lib/$pkgname/distribution" + install -Dm 644 ../$pkgname.desktop -t "$pkgdir/usr/share/applications" + + for i in 16 22 24 32 48 64 128 256; do + install -Dm644 comm/mail/branding/$pkgname/default${i}.png \ + "$pkgdir/usr/share/icons/hicolor/${i}x${i}/apps/$pkgname.png" + done + install -Dm644 comm/mail/branding/$pkgname/${pkgname}_icon.svg \ + "$pkgdir/usr/share/icons/hicolor/symbolic/apps/$pkgname-symbolic.svg" + + # Use system-provided dictionaries + ln -Ts /usr/share/hunspell "$pkgdir/usr/lib/$pkgname/dictionaries" + ln -Ts /usr/share/hyphen "$pkgdir/usr/lib/$pkgname/hyphenation" + + # Install a wrapper to avoid confusion about binary path + install -Dm755 /dev/stdin "$pkgdir/usr/bin/$pkgname" < +Date: Sun, 8 Nov 2020 13:26:47 +0100 +Subject: [PATCH] configure: fix passing system bzip2 ldflags + +--- + comm/third_party/openpgp.configure | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/comm/third_party/openpgp.configure b/comm/third_party/openpgp.configure +index 2f9c796..2cbc907 100644 +--- a/comm/third_party/openpgp.configure ++++ b/comm/third_party/openpgp.configure +@@ -80,7 +80,7 @@ with only_when('--enable-compile-environment'): + if bzip2_pkg: + cflags = list(bzip2_pkg.cflags) + libs = bzip2_pkg.libs +- return namespace(cflags=cflags, libs=libs, path=(value[0]), ) ++ return namespace(cflags=cflags, ldflags=libs, ) + # Fallback + return namespace( + ldflags=['-lbz2'], +-- +2.28.0 + diff --git a/libre-testing/icedove/distribution.ini b/libre-testing/icedove/distribution.ini new file mode 100644 index 0000000..46b3acd --- /dev/null +++ b/libre-testing/icedove/distribution.ini @@ -0,0 +1,9 @@ +[Global] +id=parabola +version=1.0 +about=Icedove for Parabola GNU/Linux-libre + +[Preferences] +app.distributor=parabola +app.distributor.channel=$pkgname +app.partner.parabola=parabola diff --git a/libre-testing/icedove/icedove.desktop b/libre-testing/icedove/icedove.desktop new file mode 100644 index 0000000..df35029 --- /dev/null +++ b/libre-testing/icedove/icedove.desktop @@ -0,0 +1,173 @@ +[Desktop Entry] +Name=Icedove +Comment=Send and receive mail with Icedove +Comment[ast]=Lleer y escribir corréu electrónicu +Comment[ca]=Llegiu i escriviu correu +Comment[cs]=Čtení a psaní pošty +Comment[da]=Skriv/læs e-post/nyhedsgruppe med Icedove +Comment[de]=E-Mails und Nachrichten mit Icedove lesen und schreiben +Comment[el]=Διαβάστε και γράψτε γράμματα με το Icedove +Comment[es]=Lea y escriba correos y noticias con Icedove +Comment[fi]=Lue ja kirjoita sähköposteja +Comment[fr]=Lire et écrire des courriels +Comment[gl]=Lea e escriba correo electrónico +Comment[he]=קריאה/כתיבה של דוא״ל/חדשות באמצעות Icedove +Comment[hr]=Čitajte/šaljite e-poštu s Icedove +Comment[hu]=Levelek írása és olvasása a Icedove +Comment[it]=Per leggere e scrivere email +Comment[ja]=メールの読み書き +Comment[ko]=Icedove 메일/뉴스 읽기 및 쓰기 클라이언트 +Comment[nl]=E-mail/nieuws lezen en schrijven met Icedove +Comment[pl]=Czytanie i wysyłanie e-maili +Comment[pt_BR]=Leia e escreva suas mensagens +Comment[ru]=Читайте и пишите письма +Comment[sk]=Čítajte a píšte poštu pomocou programu Icedove +Comment[sv]=Läs och skriv e-post +Comment[ug]=ئېلخەت ۋە خەۋەرلەرنى Icedove دا كۆرۈش ۋە يېزىش +Comment[uk]=Читання та написання листів +Comment[vi]=Đọc và soạn thư điện tử +Comment[zh_CN]=阅读邮件或新闻 +Comment[zh_TW]=以 Icedove 讀寫郵件或新聞 +GenericName=Mail Client +GenericName[ast]=Client de correu +GenericName[ca]=Client de correu +GenericName[cs]=Poštovní klient +GenericName[da]=E-postklient +GenericName[de]=E-Mail-Anwendung +GenericName[el]=Λογισμικό αλληλογραφίας +GenericName[es]=Cliente de correo +GenericName[fi]=Sähköpostiohjelma +GenericName[fr]=Client de messagerie +GenericName[gl]=Cliente de correo electrónico +GenericName[he]=לקוח דוא״ל +GenericName[hr]=Klijent e-pošte +GenericName[hu]=Levelezőkliens +GenericName[it]=Client email +GenericName[ja]=電子メールクライアント +GenericName[ko]=메일 클라이언트 +GenericName[nl]=E-mailprogramma +GenericName[pl]=Klient poczty +GenericName[pt_BR]=Cliente de E-mail +GenericName[ru]=Почтовый клиент +GenericName[sk]=Poštový klient +GenericName[ug]=ئېلخەت دېتالى +GenericName[uk]=Поштова програма +GenericName[vi]=Phần mềm khách quản lý thư điện tử +GenericName[zh_CN]=邮件新闻客户端 +GenericName[zh_TW]=郵件用戶端 +Exec=/usr/lib/icedove/icedove %u +Terminal=false +Type=Application +Icon=icedove +Categories=Network;Email; +MimeType=message/rfc822;x-scheme-handler/mailto;application/x-xpinstall; +StartupNotify=true +Actions=ComposeMessage;OpenAddressBook; + +[Desktop Action ComposeMessage] +Name=Write new message +Name[ar]=اكتب رسالة جديدة +Name[ast]=Redactar mensaxe nuevu +Name[be]=Напісаць новы ліст +Name[bg]=Съставяне на ново съобщение +Name[br]=Skrivañ ur gemennadenn nevez +Name[ca]=Escriu un missatge nou +Name[cs]=Napsat novou zprávu +Name[da]=Skriv en ny meddelelse +Name[de]=Neue Nachricht verfassen +Name[el]=Σύνταξη νέου μηνύματος +Name[es_AR]=Escribir un nuevo mensaje +Name[es_ES]=Redactar nuevo mensaje +Name[et]=Kirjuta uus kiri +Name[eu]=Idatzi mezu berria +Name[fi]=Kirjoita uusi viesti +Name[fr]=Rédiger un nouveau message +Name[fy_NL]=Skriuw in nij berjocht +Name[ga_IE]=Scríobh teachtaireacht nua +Name[gd]=Sgrìobh teachdaireachd ùr +Name[gl]=Escribir unha nova mensaxe +Name[he]=כתיבת הודעה חדשה +Name[hr]=Piši novu poruku +Name[hu]=Új üzenet írása +Name[hy_AM]=Գրել նոր նամակ +Name[is]=SKrifa nýjan póst +Name[it]=Scrivi nuovo messaggio +Name[ja]=新しいメッセージを作成する +Name[ko]=새 메시지 작성 +Name[lt]=Rašyti naują laišką +Name[nb_NO]=Skriv ny melding +Name[nl]=Nieuw bericht aanmaken +Name[nn_NO]=Skriv ny melding +Name[pl]=Nowa wiadomość +Name[pt_BR]=Nova mensagem +Name[pt_PT]=Escrever nova mensagem +Name[rm]=Scriver in nov messadi +Name[ro]=Scrie un mesaj nou +Name[ru]=Создать новое сообщение +Name[si]=නව ලිපියක් ලියන්න +Name[sk]=Nová e-mailová správa +Name[sl]=Sestavi novo sporočilo +Name[sq]=Shkruani mesazh të ri +Name[sr]=Писање нове поруке +Name[sv_SE]=Skriv ett nytt meddelande +Name[ta_LK]=புதிய செய்தியை எழுதுக +Name[tr]=Yeni ileti yaz +Name[uk]=Написати нового листа +Name[vi]=Viết thư mới +Name[zh_CN]=编写新消息 +Name[zh_TW]=寫一封新訊息 +Exec=/usr/lib/icedove/icedove -compose + +[Desktop Action OpenAddressBook] +Name=Open address book +Name[ar]=افتح دفتر العناوين +Name[ast]=Abrir llibreta de direiciones +Name[be]=Адкрыць адрасную кнігу +Name[bg]=Отваряне на адресник +Name[br]=Digeriñ ur c'harned chomlec'hioù +Name[ca]=Obre la llibreta d'adreces +Name[cs]=Otevřít Adresář +Name[da]=Åbn adressebog +Name[de]=Adressbuch öffnen +Name[el]=Άνοιγμα ευρετηρίου διευθύνσεων +Name[es_AR]=Abrir libreta de direcciones +Name[es_ES]=Abrir libreta de direcciones +Name[et]=Ava aadressiraamat +Name[eu]=Ireki helbide-liburua +Name[fi]=Avaa osoitekirja +Name[fr]=Ouvrir un carnet d'adresses +Name[fy_NL]=Iepenje adresboek +Name[ga_IE]=Oscail leabhar seoltaí +Name[gd]=Fosgail leabhar-sheòlaidhean +Name[gl]=Abrir a axenda de enderezos +Name[he]=פתיחת ספר כתובות +Name[hr]=Otvori adresar +Name[hu]=Címjegyzék megnyitása +Name[hy_AM]=Բացել Հասցեագիրքը +Name[is]=Opna nafnaskrá +Name[it]=Apri rubrica +Name[ja]=アドレス帳を開く +Name[ko]=주소록 열기 +Name[lt]=Atverti adresų knygą +Name[nb_NO]=Åpne adressebok +Name[nl]=Adresboek openen +Name[nn_NO]=Opne adressebok +Name[pl]=Książka adresowa +Name[pt_BR]=Catálogo de endereços +Name[pt_PT]=Abrir livro de endereços +Name[rm]=Avrir il cudeschet d'adressas +Name[ro]=Deschide agenda de contacte +Name[ru]=Открыть адресную книгу +Name[si]=ලිපින පොත විවෘත කරන්න +Name[sk]=Otvoriť adresár +Name[sl]=Odpri adressar +Name[sq]=Hapni libër adresash +Name[sr]=Отвори адресар +Name[sv_SE]=Öppna adressboken +Name[ta_LK]=முகவரி பத்தகத்தை திறக்க +Name[tr]=Adres defterini aç +Name[uk]=Відкрити адресну книгу +Name[vi]=Mở sổ địa chỉ +Name[zh_CN]=打开通讯录 +Name[zh_TW]=開啟通訊錄 +Exec=/usr/lib/icedove/icedove -addressbook diff --git a/libre-testing/icedove/mozconfig.cfg b/libre-testing/icedove/mozconfig.cfg new file mode 100644 index 0000000..02dff57 --- /dev/null +++ b/libre-testing/icedove/mozconfig.cfg @@ -0,0 +1,47 @@ +ac_add_options --enable-application=comm/mail +ac_add_options --enable-calendar + +ac_add_options --prefix=/usr +ac_add_options --enable-release +ac_add_options --enable-linker=gold +ac_add_options --enable-hardening +ac_add_options --enable-optimize +ac_add_options --enable-rust-simd +# https://bugzilla.mozilla.org/show_bug.cgi?id=1423822 +ac_add_options --disable-elf-hack + +# Branding +ac_add_options --disable-official-branding +ac_add_options --enable-update-channel=release +ac_add_options --with-distribution-id=nu.parabola +ac_add_options --with-branding=comm/mail/branding/icedove + +# System libraries +ac_add_options --with-system-zlib +ac_add_options --with-system-bz2 +ac_add_options --with-system-icu +ac_add_options --with-system-jpeg +# does not have APNG support +# ac_add_options --with-system-png +ac_add_options --with-system-libvpx +ac_add_options --with-system-nspr +ac_add_options --with-system-nss +ac_add_options --with-system-botan +ac_add_options --with-system-webp +ac_add_options --with-system-libevent +ac_add_options --with-system-ffi +ac_add_options --with-system-pixman + +# Features +ac_add_options --enable-alsa +ac_add_options --enable-openpgp +ac_add_options --enable-calendar +ac_add_options --disable-jack +ac_add_options --disable-crashreporter +ac_add_options --disable-updater +# tests require network access. +ac_add_options --disable-tests + +# System addons +ac_add_options --with-unsigned-addon-scopes=app,system +ac_add_options --allow-addon-sideload diff --git a/libre-testing/icedove/thunderbird-78.5-rust-1.48.patch b/libre-testing/icedove/thunderbird-78.5-rust-1.48.patch new file mode 100644 index 0000000..badbff4 --- /dev/null +++ b/libre-testing/icedove/thunderbird-78.5-rust-1.48.patch @@ -0,0 +1,3941 @@ + +# HG changeset patch +# User Henri Sivonen +# Date 1604046593 0 +# Node ID 632353012d05c8e71314d27edca945ce9c13f4ea +# Parent 2876425c75f75f638b41e8c6093e84b817938a9a +Bug 1667736 - Update packed_simd to compile on Rust 1.48. r=glandium + +Differential Revision: https://phabricator.services.mozilla.com/D91572 + +diff --git a/.cargo/config.in b/.cargo/config.in +--- a/.cargo/config.in ++++ b/.cargo/config.in +@@ -45,7 +45,7 @@ rev = "21c26326f5f45f415c49eac4ba5bc41a2 + [source."https://github.com/hsivonen/packed_simd"] + git = "https://github.com/hsivonen/packed_simd" + replace-with = "vendored-sources" +-rev = "3541e3818fdc7c2a24f87e3459151a4ce955a67a" ++rev = "0917fe780032a6bbb23d71be545f9c1834128d75" + + [source."https://github.com/djg/cubeb-pulse-rs"] + git = "https://github.com/djg/cubeb-pulse-rs" +diff --git a/Cargo.lock b/Cargo.lock +--- a/Cargo.lock ++++ b/Cargo.lock +@@ -3573,18 +3573,18 @@ version = "0.4.0" + source = "registry+https://github.com/rust-lang/crates.io-index" + checksum = "49a4b8ea2179e6a2e27411d3bca09ca6dd630821cf6894c6c7c8467a8ee7ef13" + dependencies = [ + "stable_deref_trait", + ] + + [[package]] + name = "packed_simd" +-version = "0.3.3" +-source = "git+https://github.com/hsivonen/packed_simd?rev=3541e3818fdc7c2a24f87e3459151a4ce955a67a#3541e3818fdc7c2a24f87e3459151a4ce955a67a" ++version = "0.3.4" ++source = "git+https://github.com/hsivonen/packed_simd?rev=0917fe780032a6bbb23d71be545f9c1834128d75#0917fe780032a6bbb23d71be545f9c1834128d75" + dependencies = [ + "cfg-if", + ] + + [[package]] + name = "parity-wasm" + version = "0.41.0" + source = "registry+https://github.com/rust-lang/crates.io-index" +diff --git a/Cargo.toml b/Cargo.toml +--- a/Cargo.toml ++++ b/Cargo.toml +@@ -66,7 +66,7 @@ panic = "abort" + + [patch.crates-io] + libudev-sys = { path = "dom/webauthn/libudev-sys" } +-packed_simd = { git = "https://github.com/hsivonen/packed_simd", rev="3541e3818fdc7c2a24f87e3459151a4ce955a67a" } ++packed_simd = { git = "https://github.com/hsivonen/packed_simd", rev="0917fe780032a6bbb23d71be545f9c1834128d75" } + rlbox_lucet_sandbox = { git = "https://github.com/PLSysSec/rlbox_lucet_sandbox/", rev="d510da5999a744c563b0acd18056069d1698273f" } + nix = { git = "https://github.com/shravanrn/nix/", branch = "r0.13.1", rev="4af6c367603869a30fddb5ffb0aba2b9477ba92e" } + spirv_cross = { git = "https://github.com/kvark/spirv_cross", branch = "wgpu3", rev = "20191ad2f370afd6d247edcb9ff9da32d3bedb9c" } +diff --git a/third_party/rust/packed_simd/.cargo-checksum.json b/third_party/rust/packed_simd/.cargo-checksum.json +--- a/third_party/rust/packed_simd/.cargo-checksum.json ++++ b/third_party/rust/packed_simd/.cargo-checksum.json +@@ -1,1 +1,1 @@ +-{"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} +\ No newline at end of file ++{"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} +\ No newline at end of file +diff --git a/third_party/rust/packed_simd/.travis.yml b/third_party/rust/packed_simd/.travis.yml +--- a/third_party/rust/packed_simd/.travis.yml ++++ b/third_party/rust/packed_simd/.travis.yml +@@ -1,291 +1,222 @@ + language: rust +-sudo: false + rust: nightly ++os: linux ++dist: focal + + stages: + - tools +- - linux-tier1 +- - osx-tier1 +- - osx-tier2 +- - linux-tier2 +- - android ++ - build-test-verify # Passes full test suite, permit no regressions (unless it's rustup :/) ++ - 32bit-tier1 ++ - 64bit-tier2 ++ - 32bit-tier2 + +-matrix: +- fast_finish: true ++jobs: ++ fast_finish: true + include: + # Android: +- - env: TARGET=x86_64-linux-android NOVERIFY=1 ++ - env: TARGET=x86_64-linux-android + name: "x86_64-unknown-linux-android + SSE2" +- stage: android ++ stage: build-test-verify + - env: TARGET=arm-linux-androideabi + name: "arm-linux-androideabi" +- stage: android ++ stage: build-test-verify + - env: TARGET=arm-linux-androideabi RUSTFLAGS="-C target-feature=+v7,+neon" + name: "arm-linux-androideabi + NEON" +- stage: android +- - env: TARGET=aarch64-linux-android +- name: "aarch64-unknown-linux-android" +- stage: android +- - env: TARGET=aarch64-linux-android RUSTFLAGS="-C target-feature=+neon" +- name: "aarch64-unknown-linux-android + NEON" +- stage: android ++ stage: build-test-verify ++ - name: "aarch64-unknown-linux-android + NEON" ++ env: TARGET=aarch64-linux-android RUSTFLAGS="-C target-feature=+neon" ++ stage: build-test-verify + - env: TARGET="thumbv7neon-linux-androideabi" + name: "thumbv7neon-linux-androideabi" +- stage: android ++ stage: 32bit-tier2 + # Linux: + - env: TARGET=i586-unknown-linux-gnu + name: "i586-unknown-linux-gnu" +- stage: linux-tier2 ++ stage: 32bit-tier2 + - env: TARGET=i586-unknown-linux-gnu RUSTFLAGS="-C target-feature=+sse" + name: "i586-unknown-linux-gnu + SSE" +- stage: linux-tier2 ++ stage: 32bit-tier2 + - env: TARGET=i586-unknown-linux-gnu RUSTFLAGS="-C target-feature=+sse2" + name: "i586-unknown-linux-gnu + SSE2" +- stage: linux-tier2 ++ stage: 32bit-tier2 + - env: TARGET=i686-unknown-linux-gnu + name: "i686-unknown-linux-gnu + SSE2" +- stage: linux-tier1 ++ stage: 32bit-tier1 + - env: TARGET=i686-unknown-linux-gnu RUSTFLAGS="-C target-feature=+sse4.2" + name: "i686-unknown-linux-gnu + SSE4.2" +- stage: linux-tier1 ++ stage: 32bit-tier1 + - env: TARGET=i686-unknown-linux-gnu RUSTFLAGS="-C target-feature=+avx2" + name: "i686-unknown-linux-gnu + AVX2" +- stage: linux-tier1 +- - env: TARGET=x86_64-unknown-linux-gnu +- name: "x86_64-unknown-linux-gnu + SSE2" +- install: rustup component add rustfmt-preview +- stage: linux-tier1 ++ stage: 32bit-tier1 + - env: TARGET=x86_64-unknown-linux-gnu RUSTFLAGS="-C target-feature=+sse4.2" + name: "x86_64-unknown-linux-gnu + SSE4.2" + install: rustup component add rustfmt-preview +- stage: linux-tier1 +- - env: TARGET=x86_64-unknown-linux-gnu RUSTFLAGS="-C target-feature=+avx" +- name: "x86_64-unknown-linux-gnu + AVX" +- install: rustup component add rustfmt-preview +- stage: linux-tier1 ++ stage: build-test-verify + - env: TARGET=x86_64-unknown-linux-gnu RUSTFLAGS="-C target-feature=+avx2" + name: "x86_64-unknown-linux-gnu + AVX2" + install: rustup component add rustfmt-preview +- stage: linux-tier1 +- - env: TARGET=x86_64-unknown-linux-gnu-emulated +- name: "Intel SDE + SSE2" +- install: true +- stage: linux-tier1 +- - env: TARGET=x86_64-unknown-linux-gnu-emulated RUSTFLAGS="-C target-feature=+sse4.2" +- name: "Intel SDE + SSE4.2" +- install: true +- stage: linux-tier1 +- - env: TARGET=x86_64-unknown-linux-gnu-emulated RUSTFLAGS="-C target-feature=+avx" +- name: "Intel SDE + AVX" +- install: true +- stage: linux-tier1 +- - env: TARGET=x86_64-unknown-linux-gnu-emulated RUSTFLAGS="-C target-feature=+avx2" +- name: "Intel SDE + AVX2" +- install: true +- stage: linux-tier1 +- - env: TARGET=x86_64-unknown-linux-gnu-emulated RUSTFLAGS="-C target-feature=+avx-512f" +- name: "Intel SDE + AVX-512" +- install: true +- stage: linux-tier1 +- - env: TARGET=arm-unknown-linux-gnueabi +- name: "arm-unknown-linux-gnueabi" +- stage: linux-tier2 ++ stage: build-test-verify + - env: TARGET=arm-unknown-linux-gnueabi RUSTFLAGS="-C target-feature=+v7,+neon" + name: "arm-unknown-linux-gnueabi + NEON" +- stage: linux-tier2 ++ stage: build-test-verify + - env: TARGET=arm-unknown-linux-gnueabihf + name: "arm-unknown-linux-gnueabihf" +- stage: linux-tier2 ++ stage: build-test-verify + - env: TARGET=arm-unknown-linux-gnueabihf RUSTFLAGS="-C target-feature=+v7,+neon" + name: "arm-unknown-linux-gnueabihf + NEON" +- stage: linux-tier2 ++ stage: build-test-verify + - env: TARGET=armv7-unknown-linux-gnueabihf + name: "armv7-unknown-linux-gnueabihf" +- stage: linux-tier2 ++ stage: build-test-verify + - env: TARGET=armv7-unknown-linux-gnueabihf RUSTFLAGS="-C target-feature=+neon" + name: "armv7-unknown-linux-gnueabihf + NEON" +- stage: linux-tier2 ++ stage: build-test-verify + - env: TARGET="thumbv7neon-unknown-linux-gnueabihf" + name: "thumbv7neon-unknown-linux-gnueabihf" +- stage: linux-tier2 +- - env: TARGET=aarch64-unknown-linux-gnu +- name: "aarch64-unknown-linux-gnu" +- stage: linux-tier2 +- - env: TARGET=aarch64-unknown-linux-gnu RUSTFLAGS="-C target-feature=+neon" +- name: "aarch64-unknown-linux-gnu + NEON" +- stage: linux-tier2 ++ stage: 32bit-tier2 ++ - name: "aarch64-unknown-linux-gnu + NEON" ++ env: TARGET=aarch64-unknown-linux-gnu RUSTFLAGS="-C target-feature=+neon" ++ stage: build-test-verify + - env: TARGET=mips-unknown-linux-gnu + name: "mips-unknown-linux-gnu" +- stage: linux-tier2 ++ stage: 32bit-tier2 + - env: TARGET=mipsel-unknown-linux-musl + name: "mipsel-unknown-linux-musl" +- stage: linux-tier2 ++ stage: 32bit-tier2 + - env: TARGET=mips64-unknown-linux-gnuabi64 + name: "mips64-unknown-linux-gnuabi64" +- stage: linux-tier2 ++ stage: 64bit-tier2 + - env: TARGET=mips64el-unknown-linux-gnuabi64 + name: "mips64el-unknown-linux-gnuabi64" +- stage: linux-tier2 ++ stage: 64bit-tier2 + # FIXME: https://github.com/rust-lang-nursery/packed_simd/issues/18 + # env: TARGET=mips64el-unknown-linux-gnuabi64 RUSTFLAGS="-C target-feature=+msa -C target-cpu=mips64r6" + - env: TARGET=powerpc-unknown-linux-gnu + name: "powerpc-unknown-linux-gnu" +- stage: linux-tier2 ++ stage: 32bit-tier2 + - env: TARGET=powerpc64-unknown-linux-gnu + name: "powerpc64-unknown-linux-gnu" +- stage: linux-tier2 +- - env: TARGET=powerpc64le-unknown-linux-gnu +- name: "powerpc64le-unknown-linux-gnu" +- stage: linux-tier2 +- - env: TARGET=powerpc64le-unknown-linux-gnu RUSTFLAGS="-C target-feature=+altivec" +- name: "powerpc64le-unknown-linux-gnu + ALTIVEC" +- stage: linux-tier2 +- - env: TARGET=powerpc64le-unknown-linux-gnu RUSTFLAGS="-C target-feature=+vsx" +- name: "powerpc64le-unknown-linux-gnu + VSX" +- stage: linux-tier2 +- - env: TARGET=s390x-unknown-linux-gnu +- name: "s390x-unknown-linux-gnu" +- stage: linux-tier2 ++ stage: 64bit-tier2 ++ - name: "powerpc64le-unknown-linux-gnu" ++ env: TARGET=powerpc64le-unknown-linux-gnu ++ stage: build-test-verify ++ - name: "powerpc64le-unknown-linux-gnu + ALTIVEC" ++ env: TARGET=powerpc64le-unknown-linux-gnu RUSTFLAGS="-C target-feature=+altivec" ++ stage: build-test-verify ++ - name: "powerpc64le-unknown-linux-gnu + VSX" ++ env: TARGET=powerpc64le-unknown-linux-gnu RUSTFLAGS="-C target-feature=+vsx" ++ stage: build-test-verify ++ - name: "s390x-unknown-linux-gnu" ++ env: TARGET=s390x-unknown-linux-gnu ++ stage: 64bit-tier2 + - env: TARGET=sparc64-unknown-linux-gnu + name: "sparc64-unknown-linux-gnu" +- stage: linux-tier2 ++ stage: 64bit-tier2 + # WebAssembly: + - env: TARGET=wasm32-unknown-unknown + name: "wasm32-unknown-unknown" +- stage: osx-tier1 # For now ++ stage: 32bit-tier2 + # MacOSX: + - os: osx +- env: TARGET=i686-apple-darwin +- name: "i686-apple-darwin + SSE2" +- script: ci/run.sh +- osx_image: xcode10 +- stage: osx-tier1 +- - os: osx +- env: TARGET=i686-apple-darwin RUSTFLAGS="-C target-feature=+sse4.2" +- name: "i686-apple-darwin + SSE4.2" +- script: ci/run.sh +- osx_image: xcode10 +- stage: osx-tier1 +- # Travis-CI OSX build bots do not support AVX2: +- - os: osx +- env: TARGET=i686-apple-darwin RUSTFLAGS="-C target-feature=+avx" +- name: "i686-apple-darwin + AVX" +- script: ci/run.sh +- osx_image: xcode10 +- stage: osx-tier1 +- - os: osx +- env: TARGET=x86_64-apple-darwin +- name: "x86_64-apple-darwin + SSE2" +- install: true +- script: ci/run.sh +- osx_image: xcode10 +- stage: osx-tier1 +- - os: osx + env: TARGET=x86_64-apple-darwin RUSTFLAGS="-C target-feature=+sse4.2" + name: "x86_64-apple-darwin + SSE4.2" + install: true + script: ci/run.sh + osx_image: xcode10 +- stage: osx-tier1 ++ stage: build-test-verify + # Travis-CI OSX build bots do not support AVX2: + - os: osx + env: TARGET=x86_64-apple-darwin RUSTFLAGS="-C target-feature=+avx" + name: "x86_64-apple-darwin + AVX" + install: true + script: ci/run.sh + osx_image: xcode10 +- stage: osx-tier1 ++ stage: build-test-verify + # *BSDs: + #- env: TARGET=i686-unknown-freebsd NORUN=1 + # script: ci/run.sh + #- env: TARGET=x86_64-unknown-freebsd NORUN=1 + # script: ci/run.sh + #- env: TARGET=x86_64-unknown-netbsd NORUN=1 + # script: ci/run.sh + # Solaris: + #- env: TARGET=x86_64-sun-solaris NORUN=1 + # script: ci/run.sh + # iOS: + - os: osx +- env: TARGET=i386-apple-ios +- name: "i386-apple-ios" +- script: ci/run.sh +- osx_image: xcode9.4 +- stage: osx-tier2 +- - os: osx + env: TARGET=x86_64-apple-ios + name: "x86_64-apple-ios + SSE2" + script: ci/run.sh + osx_image: xcode9.4 +- stage: osx-tier2 +- - os: osx +- env: TARGET=armv7-apple-ios NORUN=1 +- name: "armv7-apple-ios [Build only]" +- script: ci/run.sh ++ stage: 64bit-tier2 ++ - name: "aarch64-apple-ios + NEON" ++ env: TARGET=aarch64-apple-ios RUSTFLAGS="-C target-feature=+neon" ++ os: osx + osx_image: xcode9.4 +- stage: osx-tier2 +- - os: osx +- env: TARGET=aarch64-apple-ios NORUN=1 +- name: "aarch64-apple-ios [Build only]" + script: ci/run.sh +- osx_image: xcode9.4 +- stage: osx-tier2 ++ stage: 64bit-tier2 + # BENCHMARKS: + - name: "Benchmarks - x86_64-unknown-linux-gnu" + install: TARGET=x86_64-unknown-linux-gnu ./ci/setup_benchmarks.sh +- script: PATH=$(pwd):$PATH NORUN=1 VERIFY=1 FEATURES=core_arch,ispc,sleef-sys ci/benchmark.sh ++ # FIXME: Use `core_arch,sleef-sys` features once they works again ++ script: PATH=$(pwd):$PATH NORUN=1 VERIFY=1 FEATURES=ispc ci/benchmark.sh + stage: tools + - name: "Benchmarks - x86_64-apple-darwin" + install: TARGET=x86_64-apple-darwin ./ci/setup_benchmarks.sh +- script: PATH=$(pwd):$PATH NORUN=1 VERIFY=1 FEATURES=core_arch,ispc,sleef-sys ci/benchmark.sh ++ # FIXME: Use `core_arch,sleef-sys` features once they works again ++ script: PATH=$(pwd):$PATH NORUN=1 VERIFY=1 FEATURES=ispc ci/benchmark.sh + os: osx + osx_image: xcode9.4 + stage: tools + # TOOLS: + - name: "Documentation" +- install: cargo install mdbook ++ before_install: ++ - sudo add-apt-repository -y ppa:deadsnakes/ppa ++ - sudo apt-get update -y ++ - sudo apt-get install -y python3.9 ++ install: ++ - cargo install mdbook + script: ci/dox.sh + stage: tools + - name: "rustfmt" + install: true +- before_script: rustup component add rustfmt-preview +- script: ci/all.sh check_fmt || true ++ script: | ++ if rustup component add rustfmt-preview ; then ++ ci/all.sh check_fmt || true ++ fi + stage: tools + - name: "clippy" + install: true +- before_script: rustup component add clippy-preview +- script: ci/all.sh clippy ++ script: | ++ if rustup component add clippy-preview ; then ++ ci/all.sh clippy ++ fi + stage: tools + + allow_failures: + # FIXME: ISPC cannot be found? + - name: "Benchmarks - x86_64-apple-darwin" +- # FIXME: TBD +- - env: TARGET=powerpc-unknown-linux-gnu +- - env: TARGET=powerpc64-unknown-linux-gnu +- - env: TARGET=powerpc64le-unknown-linux-gnu +- - env: TARGET=powerpc64le-unknown-linux-gnu RUSTFLAGS="-C target-feature=+altivec" +- - env: TARGET=powerpc64le-unknown-linux-gnu RUSTFLAGS="-C target-feature=+vsx" ++ # FIXME: i686 fails in inlining, apparently ++ - stage: 32bit-tier1 + #- env: TARGET=i686-unknown-freebsd NORUN=1 + #- env: TARGET=x86_64-unknown-freebsd NORUN=1 + #- env: TARGET=x86_64-unknown-netbsd NORUN=1 + #- env: TARGET=x86_64-sun-solaris NORUN=1 + + # FIXME: TBD +- - env: TARGET=arm-linux-androideabi +- - env: TARGET=arm-linux-androideabi RUSTFLAGS="-C target-feature=+v7,+neon" +- - env: TARGET=aarch64-linux-android +- - env: TARGET=aarch64-linux-android RUSTFLAGS="-C target-feature=+neon" ++ - stage: 64bit-tier2 ++ - stage: 32bit-tier2 + + # FIXME: iOS + # https://github.com/rust-lang-nursery/packed_simd/issues/26 +- - env: TARGET=i386-apple-ios + - env: TARGET=x86_64-apple-ios ++ # Is this related to the above? Mysterious test failure ++ - name: "aarch64-apple-ios + NEON" + + # FIXME: https://github.com/rust-lang-nursery/packed_simd/issues/182 + - env: TARGET=arm-unknown-linux-gnueabi RUSTFLAGS="-C target-feature=+v7,+neon" + - env: TARGET=arm-unknown-linux-gnueabihf RUSTFLAGS="-C target-feature=+v7,+neon" + - env: TARGET=armv7-unknown-linux-gnueabihf RUSTFLAGS="-C target-feature=+neon" + + # FIXME: https://github.com/rust-lang-nursery/packed_simd/issues/183 + - env: TARGET=wasm32-unknown-unknown +diff --git a/third_party/rust/packed_simd/Cargo.toml b/third_party/rust/packed_simd/Cargo.toml +--- a/third_party/rust/packed_simd/Cargo.toml ++++ b/third_party/rust/packed_simd/Cargo.toml +@@ -1,11 +1,11 @@ + [package] + name = "packed_simd" +-version = "0.3.3" ++version = "0.3.4" + authors = ["Gonzalo Brito Gadeschi "] + description = "Portable Packed SIMD vectors" + documentation = "https://docs.rs/crate/packed_simd/" + homepage = "https://github.com/rust-lang-nursery/packed_simd" + repository = "https://github.com/rust-lang-nursery/packed_simd" + keywords = ["simd", "vector", "portability"] + categories = ["hardware-support", "concurrency", "no-std", "data-structures"] + license = "MIT/Apache-2.0" +@@ -16,27 +16,27 @@ edition = "2018" + appveyor = { repository = "rust-lang-nursery/packed_simd" } + travis-ci = { repository = "rust-lang-nursery/packed_simd" } + codecov = { repository = "rust-lang-nursery/packed_simd" } + is-it-maintained-issue-resolution = { repository = "rust-lang-nursery/packed_simd" } + is-it-maintained-open-issues = { repository = "rust-lang-nursery/packed_simd" } + maintenance = { status = "experimental" } + + [dependencies] +-cfg-if = "^0.1.6" +-core_arch = { version = "^0.1.3", optional = true } ++cfg-if = "0.1.10" ++core_arch = { version = "0.1.5", optional = true } + + [features] + default = [] + into_bits = [] + libcore_neon = [] + + [dev-dependencies] + paste = "^0.1.3" +-arrayvec = { version = "^0.4", default-features = false } ++arrayvec = { version = "^0.5", default-features = false } + + [target.'cfg(target_arch = "x86_64")'.dependencies.sleef-sys] +-version = "^0.1.2" ++version = "0.1.2" + optional = true + + [target.wasm32-unknown-unknown.dev-dependencies] +-wasm-bindgen = "=0.2.19" +-wasm-bindgen-test = "=0.2.19" +\ No newline at end of file ++wasm-bindgen = "=0.2.52" ++wasm-bindgen-test = "=0.3.2" +diff --git a/third_party/rust/packed_simd/readme.md b/third_party/rust/packed_simd/README.md +rename from third_party/rust/packed_simd/readme.md +rename to third_party/rust/packed_simd/README.md +--- a/third_party/rust/packed_simd/readme.md ++++ b/third_party/rust/packed_simd/README.md +@@ -1,24 +1,22 @@ + # `Simd<[T; N]>` + + ## Implementation of [Rust RFC #2366: `std::simd`][rfc2366] + + [![Travis-CI Status]][travis] [![Appveyor Status]][appveyor] [![Latest Version]][crates.io] [![docs]][master_docs] + +-> This aims to be a 100% conforming implementation of Rust RFC 2366 for stabilization. +- +-**WARNING**: this crate only supports the most recent nightly Rust toolchain. ++**WARNING**: this crate only supports the most recent nightly Rust toolchain ++and will be superceded by [stdsimd](https://github.com/rust-lang/stdsimd). + + ## Documentation + + * [API docs (`master` branch)][master_docs] + * [Performance guide][perf_guide] +-* [API docs (`docs.rs`)][docs.rs]: **CURRENTLY DOWN** due to +- https://github.com/rust-lang-nursery/packed_simd/issues/110 ++* [API docs (`docs.rs`)][docs.rs] + * [RFC2366 `std::simd`][rfc2366]: - contains motivation, design rationale, + discussion, etc. + + ## Examples + + Most of the examples come with both a scalar and a vectorized implementation. + + * [`aobench`](https://github.com/rust-lang-nursery/packed_simd/tree/master/examples/aobench) +@@ -34,27 +32,16 @@ Most of the examples come with both a sc + + ## Cargo features + + * `into_bits` (default: disabled): enables `FromBits`/`IntoBits` trait + implementations for the vector types. These allow reinterpreting the bits of a + vector type as those of another vector type safely by just using the + `.into_bits()` method. + +-* `core_arch` (default: disabled): enable this feature to recompile `core::arch` +- for the target-features enabled. `packed_simd` includes optimizations for some +- target feature combinations that are enabled by this feature. Note, however, +- that this is an unstable dependency, that rustc might break at any time. +- +-* `sleef-sys` (default: disabled - `x86_64` only): internally uses the [SLEEF] +- short-vector math library when profitable via the [`sleef-sys`][sleef_sys] +- crate. [SLEEF] is licensed under the [Boost Software License +- v1.0][boost_license], an extremely permissive license, and can be statically +- linked without issues. +- + ## Performance + + The following [ISPC] examples are also part of `packed_simd`'s + [`examples/`](https://github.com/rust-lang-nursery/packed_simd/tree/master/examples/) + directory, where `packed_simd`+[`rayon`][rayon] are used to emulate [ISPC]'s + Single-Program-Multiple-Data (SPMD) programming model. The performance results + on different hardware is shown in the `readme.md` of each example. The following + table summarizes the performance ranges, where `+` means speed-up and `-` +@@ -70,70 +57,50 @@ slowdown: + While SPMD is not the intended use case for `packed_simd`, it is possible to + combine the library with [`rayon`][rayon] to poorly emulate [ISPC]'s SPMD programming + model in Rust. Writing performant code is not as straightforward as with + [ISPC], but with some care (e.g. see the [Performance Guide][perf_guide]) one + can easily match and often out-perform [ISPC]'s "default performance". + + ## Platform support + +-The following table describes the supported platforms: `build` shows whether the +-library compiles without issues for a given target, while `run` shows whether +-the full testsuite passes on the target. ++The following table describes the supported platforms: `build` shows whether ++the library compiles without issues for a given target, while `run` shows ++whether the test suite passes for a given target. + +-| Linux targets: | build | run | +-|-----------------------------------|-----------|---------| +-| `i586-unknown-linux-gnu` | ✓ | ✓ | +-| `i686-unknown-linux-gnu` | ✓ | ✓ | +-| `x86_64-unknown-linux-gnu` | ✓ | ✓ | +-| `arm-unknown-linux-gnueabi` | ✗ | ✗ | +-| `arm-unknown-linux-gnueabihf` | ✓ | ✓ | +-| `armv7-unknown-linux-gnueabi` | ✓ | ✓ | +-| `aarch64-unknown-linux-gnu` | ✓ | ✓ | +-| `mips-unknown-linux-gnu` | ✓ | ✓ | +-| `mipsel-unknown-linux-musl` | ✓ | ✓ | +-| `mips64-unknown-linux-gnuabi64` | ✓ | ✓ | +-| `mips64el-unknown-linux-gnuabi64` | ✓ | ✓ | +-| `powerpc-unknown-linux-gnu` | ✗ | ✗ | +-| `powerpc64-unknown-linux-gnu` | ✗ | ✗ | +-| `powerpc64le-unknown-linux-gnu` | ✗ | ✗ | +-| `s390x-unknown-linux-gnu` | ✓ | ✓* | +-| `sparc64-unknown-linux-gnu` | ✓ | ✓* | +-| `thumbv7neon-unknown-linux-gnueabihf` | ✓ | ✓ | +-| **MacOSX targets:** | **build** | **run** | +-| `x86_64-apple-darwin` | ✓ | ✓ | +-| `i686-apple-darwin` | ✓ | ✓ | +-| **Windows targets:** | **build** | **run** | +-| `x86_64-pc-windows-msvc` | ✓ | ✓ | +-| `i686-pc-windows-msvc` | ✓ | ✓ | +-| `x86_64-pc-windows-gnu` | ✗ | ✗ | +-| `i686-pc-windows-gnu` | ✗ | ✗ | +-| **WebAssembly targets:** | **build** | **run** | +-| `wasm32-unknown-unknown` | ✓ | ✓ | +-| **Android targets:** | **build** | **run** | +-| `x86_64-linux-android` | ✓ | ✓ | +-| `arm-linux-androideabi` | ✓ | ✓ | +-| `aarch64-linux-android` | ✓ | ✗ | +-| `thumbv7neon-linux-androideabi` | ✓ | ✓ | +-| **iOS targets:** | **build** | **run** | +-| `i386-apple-ios` | ✓ | ✗ | +-| `x86_64-apple-ios` | ✓ | ✗ | +-| `armv7-apple-ios` | ✓ | ✗** | +-| `aarch64-apple-ios` | ✓ | ✗** | +-| **xBSD targets:** | **build** | **run** | +-| `i686-unknown-freebsd` | ✗ | ✗** | +-| `x86_64-unknown-freebsd` | ✗ | ✗** | +-| `x86_64-unknown-netbsd` | ✗ | ✗** | +-| **Solaris targets:** | **build** | **run** | +-| `x86_64-sun-solaris` | ✗ | ✗** | ++| **Linux** | **build** | **run** | ++|---------------------------------------|-----------|---------| ++| `i586-unknown-linux-gnu` | ✓ | ✗ | ++| `i686-unknown-linux-gnu` | ✓ | ✗ | ++| `x86_64-unknown-linux-gnu` | ✓ | ✓ | ++| `arm-unknown-linux-gnueabi` | ✗ | ✗ | ++| `arm-unknown-linux-gnueabihf` | ✓ | ✓ | ++| `armv7-unknown-linux-gnueabi` | ✓ | ✓ | ++| `aarch64-unknown-linux-gnu` | ✓ | ✓ | ++| `mips-unknown-linux-gnu` | ✓ | ✗ | ++| `mipsel-unknown-linux-musl` | ✓ | ✗ | ++| `mips64-unknown-linux-gnuabi64` | ✓ | ✗ | ++| `mips64el-unknown-linux-gnuabi64` | ✓ | ✗ | ++| `powerpc-unknown-linux-gnu` | ✗ | ✗ | ++| `powerpc64-unknown-linux-gnu` | ✗ | ✗ | ++| `powerpc64le-unknown-linux-gnu` | ✓ | ✓ | ++| `s390x-unknown-linux-gnu` | ✗ | ✗ | ++| `sparc64-unknown-linux-gnu` | ✓ | ✗ | ++| `thumbv7neon-unknown-linux-gnueabihf` | ✓ | ✓ | ++| **MacOSX** | **build** | **run** | ++| `x86_64-apple-darwin` | ✓ | ✓ | ++| **Android** | **build** | **run** | ++| `x86_64-linux-android` | ✓ | ✓ | ++| `arm-linux-androideabi` | ✓ | ✓ | ++| `aarch64-linux-android` | ✓ | ✓ | ++| `thumbv7neon-linux-androideabi` | ✗ | ✗ | ++| **iOS** | **build** | **run** | ++| `x86_64-apple-ios` | ✓ | ✗ | ++| `aarch64-apple-ios` | ✓ | ✗ | + +-[*] most of the test suite passes correctly on these platform but +-there are correctness bugs open in the issue tracker. +- +-[**] it is currently not easily possible to run these platforms on CI. + + ## Machine code verification + + The + [`verify/`](https://github.com/rust-lang-nursery/packed_simd/tree/master/verify) + crate tests disassembles the portable packed vector APIs at run-time and + compares the generated machine code against the desired one to make sure that + this crate remains efficient. +@@ -157,18 +124,18 @@ Please see the [contributing instruction + + Contributions in any form (issues, pull requests, etc.) to this project + must adhere to Rust's [Code of Conduct]. + + Unless you explicitly state otherwise, any contribution intentionally submitted + for inclusion in `packed_simd` by you, as defined in the Apache-2.0 license, shall be + dual licensed as above, without any additional terms or conditions. + +-[travis]: https://travis-ci.org/rust-lang-nursery/packed_simd +-[Travis-CI Status]: https://travis-ci.org/rust-lang-nursery/packed_simd.svg?branch=master ++[travis]: https://travis-ci.com/rust-lang-nursery/packed_simd ++[Travis-CI Status]: https://travis-ci.com/rust-lang-nursery/packed_simd.svg?branch=master + [appveyor]: https://ci.appveyor.com/project/gnzlbg/packed-simd + [Appveyor Status]: https://ci.appveyor.com/api/projects/status/hd7v9dvr442hgdix?svg=true + [Latest Version]: https://img.shields.io/crates/v/packed_simd.svg + [crates.io]: https://crates.io/crates/packed_simd + [docs]: https://docs.rs/packed_simd/badge.svg + [docs.rs]: https://docs.rs/packed_simd/ + [master_docs]: https://rust-lang-nursery.github.io/packed_simd/packed_simd/ + [perf_guide]: https://rust-lang-nursery.github.io/packed_simd/perf-guide/ +diff --git a/third_party/rust/packed_simd/build.rs b/third_party/rust/packed_simd/build.rs +--- a/third_party/rust/packed_simd/build.rs ++++ b/third_party/rust/packed_simd/build.rs +@@ -1,8 +1,8 @@ + fn main() { +- println!("cargo:rustc-env=RUSTC_BOOTSTRAP=1"); ++ println!("cargo:rustc-env=RUSTC_BOOTSTRAP=1"); + let target = std::env::var("TARGET") + .expect("TARGET environment variable not defined"); + if target.contains("neon") { + println!("cargo:rustc-cfg=libcore_neon"); + } + } +diff --git a/third_party/rust/packed_simd/ci/all.sh b/third_party/rust/packed_simd/ci/all.sh +--- a/third_party/rust/packed_simd/ci/all.sh ++++ b/third_party/rust/packed_simd/ci/all.sh +@@ -16,17 +16,17 @@ cargo_check_fmt() { + cargo fmt --all -- --check + } + + cargo_fmt() { + cargo fmt --all + } + + cargo_clippy() { +- cargo clippy --all -- -D clippy::pedantic ++ cargo clippy --all -- -D clippy::perf + } + + CMD="-1" + + case $op in + clean*) + CMD=cargo_clean + ;; +diff --git a/third_party/rust/packed_simd/ci/docker/aarch64-unknown-linux-gnu/Dockerfile b/third_party/rust/packed_simd/ci/docker/aarch64-unknown-linux-gnu/Dockerfile +--- a/third_party/rust/packed_simd/ci/docker/aarch64-unknown-linux-gnu/Dockerfile ++++ b/third_party/rust/packed_simd/ci/docker/aarch64-unknown-linux-gnu/Dockerfile +@@ -1,9 +1,9 @@ +-FROM ubuntu:17.10 ++FROM ubuntu:18.04 + RUN apt-get update && apt-get install -y --no-install-recommends \ + gcc \ + ca-certificates \ + libc6-dev \ + gcc-aarch64-linux-gnu \ + libc6-dev-arm64-cross \ + qemu-user \ + make \ +diff --git a/third_party/rust/packed_simd/ci/docker/arm-unknown-linux-gnueabi/Dockerfile b/third_party/rust/packed_simd/ci/docker/arm-unknown-linux-gnueabi/Dockerfile +--- a/third_party/rust/packed_simd/ci/docker/arm-unknown-linux-gnueabi/Dockerfile ++++ b/third_party/rust/packed_simd/ci/docker/arm-unknown-linux-gnueabi/Dockerfile +@@ -1,9 +1,9 @@ +-FROM ubuntu:17.10 ++FROM ubuntu:18.04 + RUN apt-get update && apt-get install -y --no-install-recommends \ + gcc \ + ca-certificates \ + libc6-dev \ + libc6-armel-cross \ + libc6-dev-armel-cross \ + binutils-arm-linux-gnueabi \ + gcc-arm-linux-gnueabi \ +diff --git a/third_party/rust/packed_simd/ci/docker/arm-unknown-linux-gnueabihf/Dockerfile b/third_party/rust/packed_simd/ci/docker/arm-unknown-linux-gnueabihf/Dockerfile +--- a/third_party/rust/packed_simd/ci/docker/arm-unknown-linux-gnueabihf/Dockerfile ++++ b/third_party/rust/packed_simd/ci/docker/arm-unknown-linux-gnueabihf/Dockerfile +@@ -1,9 +1,9 @@ +-FROM ubuntu:17.10 ++FROM ubuntu:18.04 + RUN apt-get update && apt-get install -y --no-install-recommends \ + gcc \ + ca-certificates \ + libc6-dev \ + gcc-arm-linux-gnueabihf \ + libc6-dev-armhf-cross \ + qemu-user \ + make \ +diff --git a/third_party/rust/packed_simd/ci/docker/armv7-unknown-linux-gnueabihf/Dockerfile b/third_party/rust/packed_simd/ci/docker/armv7-unknown-linux-gnueabihf/Dockerfile +--- a/third_party/rust/packed_simd/ci/docker/armv7-unknown-linux-gnueabihf/Dockerfile ++++ b/third_party/rust/packed_simd/ci/docker/armv7-unknown-linux-gnueabihf/Dockerfile +@@ -1,9 +1,9 @@ +-FROM ubuntu:17.10 ++FROM ubuntu:18.04 + RUN apt-get update && apt-get install -y --no-install-recommends \ + gcc \ + ca-certificates \ + libc6-dev \ + gcc-arm-linux-gnueabihf \ + libc6-dev-armhf-cross \ + qemu-user \ + make \ +diff --git a/third_party/rust/packed_simd/ci/docker/i586-unknown-linux-gnu/Dockerfile b/third_party/rust/packed_simd/ci/docker/i586-unknown-linux-gnu/Dockerfile +--- a/third_party/rust/packed_simd/ci/docker/i586-unknown-linux-gnu/Dockerfile ++++ b/third_party/rust/packed_simd/ci/docker/i586-unknown-linux-gnu/Dockerfile +@@ -1,7 +1,7 @@ +-FROM ubuntu:17.10 ++FROM ubuntu:18.04 + RUN apt-get update && apt-get install -y --no-install-recommends \ + gcc-multilib \ + libc6-dev \ + file \ + make \ + ca-certificates +diff --git a/third_party/rust/packed_simd/ci/docker/i686-unknown-linux-gnu/Dockerfile b/third_party/rust/packed_simd/ci/docker/i686-unknown-linux-gnu/Dockerfile +--- a/third_party/rust/packed_simd/ci/docker/i686-unknown-linux-gnu/Dockerfile ++++ b/third_party/rust/packed_simd/ci/docker/i686-unknown-linux-gnu/Dockerfile +@@ -1,7 +1,7 @@ +-FROM ubuntu:17.10 ++FROM ubuntu:18.04 + RUN apt-get update && apt-get install -y --no-install-recommends \ + gcc-multilib \ + libc6-dev \ + file \ + make \ + ca-certificates +diff --git a/third_party/rust/packed_simd/ci/docker/mips-unknown-linux-gnu/Dockerfile b/third_party/rust/packed_simd/ci/docker/mips-unknown-linux-gnu/Dockerfile +--- a/third_party/rust/packed_simd/ci/docker/mips-unknown-linux-gnu/Dockerfile ++++ b/third_party/rust/packed_simd/ci/docker/mips-unknown-linux-gnu/Dockerfile +@@ -1,9 +1,9 @@ +-FROM ubuntu:17.10 ++FROM ubuntu:18.04 + + RUN apt-get update && apt-get install -y --no-install-recommends \ + gcc libc6-dev qemu-user ca-certificates \ + gcc-mips-linux-gnu libc6-dev-mips-cross \ + qemu-system-mips \ + qemu-user \ + make \ + file +diff --git a/third_party/rust/packed_simd/ci/docker/mips64-unknown-linux-gnuabi64/Dockerfile b/third_party/rust/packed_simd/ci/docker/mips64-unknown-linux-gnuabi64/Dockerfile +--- a/third_party/rust/packed_simd/ci/docker/mips64-unknown-linux-gnuabi64/Dockerfile ++++ b/third_party/rust/packed_simd/ci/docker/mips64-unknown-linux-gnuabi64/Dockerfile +@@ -1,9 +1,9 @@ +-FROM ubuntu:17.10 ++FROM ubuntu:18.04 + + RUN apt-get update && apt-get install -y --no-install-recommends \ + gcc libc6-dev qemu-user ca-certificates \ + gcc-mips64-linux-gnuabi64 libc6-dev-mips64-cross \ + qemu-system-mips64 qemu-user + + ENV CARGO_TARGET_MIPS64_UNKNOWN_LINUX_GNUABI64_LINKER=mips64-linux-gnuabi64-gcc \ + CARGO_TARGET_MIPS64_UNKNOWN_LINUX_GNUABI64_RUNNER="qemu-mips64 -L /usr/mips64-linux-gnuabi64" \ +diff --git a/third_party/rust/packed_simd/ci/docker/mips64el-unknown-linux-gnuabi64/Dockerfile b/third_party/rust/packed_simd/ci/docker/mips64el-unknown-linux-gnuabi64/Dockerfile +--- a/third_party/rust/packed_simd/ci/docker/mips64el-unknown-linux-gnuabi64/Dockerfile ++++ b/third_party/rust/packed_simd/ci/docker/mips64el-unknown-linux-gnuabi64/Dockerfile +@@ -1,9 +1,9 @@ +-FROM ubuntu:17.10 ++FROM ubuntu:18.04 + + RUN apt-get update && apt-get install -y --no-install-recommends \ + gcc libc6-dev qemu-user ca-certificates \ + gcc-mips64el-linux-gnuabi64 libc6-dev-mips64el-cross \ + qemu-system-mips64el + + ENV CARGO_TARGET_MIPS64EL_UNKNOWN_LINUX_GNUABI64_LINKER=mips64el-linux-gnuabi64-gcc \ + CARGO_TARGET_MIPS64EL_UNKNOWN_LINUX_GNUABI64_RUNNER="qemu-mips64el -L /usr/mips64el-linux-gnuabi64" \ +diff --git a/third_party/rust/packed_simd/ci/docker/mipsel-unknown-linux-musl/Dockerfile b/third_party/rust/packed_simd/ci/docker/mipsel-unknown-linux-musl/Dockerfile +--- a/third_party/rust/packed_simd/ci/docker/mipsel-unknown-linux-musl/Dockerfile ++++ b/third_party/rust/packed_simd/ci/docker/mipsel-unknown-linux-musl/Dockerfile +@@ -11,15 +11,15 @@ RUN apt-get update && \ + bzip2 \ + curl \ + file + + RUN mkdir /toolchain + + # Note that this originally came from: + # 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 +-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 | \ ++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 | \ + tar xjf - -C /toolchain --strip-components=2 + + ENV PATH=$PATH:/rust/bin:/toolchain/bin \ + CC_mipsel_unknown_linux_musl=mipsel-openwrt-linux-gcc \ + CARGO_TARGET_MIPSEL_UNKNOWN_LINUX_MUSL_LINKER=mipsel-openwrt-linux-gcc \ +- CARGO_TARGET_MIPSEL_UNKNOWN_LINUX_MUSL_RUNNER="qemu-mipsel -L /toolchain" +\ No newline at end of file ++ CARGO_TARGET_MIPSEL_UNKNOWN_LINUX_MUSL_RUNNER="qemu-mipsel -L /toolchain" +diff --git a/third_party/rust/packed_simd/ci/docker/powerpc-unknown-linux-gnu/Dockerfile b/third_party/rust/packed_simd/ci/docker/powerpc-unknown-linux-gnu/Dockerfile +--- a/third_party/rust/packed_simd/ci/docker/powerpc-unknown-linux-gnu/Dockerfile ++++ b/third_party/rust/packed_simd/ci/docker/powerpc-unknown-linux-gnu/Dockerfile +@@ -1,12 +1,13 @@ +-FROM ubuntu:17.10 ++FROM ubuntu:18.04 + + RUN apt-get update && apt-get install -y --no-install-recommends \ + gcc libc6-dev qemu-user ca-certificates \ + gcc-powerpc-linux-gnu libc6-dev-powerpc-cross \ + qemu-system-ppc \ + make \ + file + + ENV CARGO_TARGET_POWERPC_UNKNOWN_LINUX_GNU_LINKER=powerpc-linux-gnu-gcc \ + CARGO_TARGET_POWERPC_UNKNOWN_LINUX_GNU_RUNNER="qemu-ppc -cpu Vger -L /usr/powerpc-linux-gnu" \ ++ CC=powerpc-linux-gnu-gcc \ + OBJDUMP=powerpc-linux-gnu-objdump +diff --git a/third_party/rust/packed_simd/ci/docker/powerpc64-unknown-linux-gnu/Dockerfile b/third_party/rust/packed_simd/ci/docker/powerpc64-unknown-linux-gnu/Dockerfile +--- a/third_party/rust/packed_simd/ci/docker/powerpc64-unknown-linux-gnu/Dockerfile ++++ b/third_party/rust/packed_simd/ci/docker/powerpc64-unknown-linux-gnu/Dockerfile +@@ -1,9 +1,9 @@ +-FROM ubuntu:17.10 ++FROM ubuntu:18.04 + + RUN apt-get update && apt-get install -y --no-install-recommends \ + gcc \ + ca-certificates \ + libc6-dev \ + gcc-powerpc64-linux-gnu \ + libc6-dev-ppc64-cross \ + qemu-user \ +diff --git a/third_party/rust/packed_simd/ci/docker/powerpc64le-unknown-linux-gnu/Dockerfile b/third_party/rust/packed_simd/ci/docker/powerpc64le-unknown-linux-gnu/Dockerfile +--- a/third_party/rust/packed_simd/ci/docker/powerpc64le-unknown-linux-gnu/Dockerfile ++++ b/third_party/rust/packed_simd/ci/docker/powerpc64le-unknown-linux-gnu/Dockerfile +@@ -1,9 +1,9 @@ +-FROM ubuntu:17.10 ++FROM ubuntu:18.04 + + RUN apt-get update && apt-get install -y --no-install-recommends \ + gcc libc6-dev qemu-user ca-certificates \ + gcc-powerpc64le-linux-gnu libc6-dev-ppc64el-cross \ + qemu-system-ppc file make + + ENV CARGO_TARGET_POWERPC64LE_UNKNOWN_LINUX_GNU_LINKER=powerpc64le-linux-gnu-gcc \ + CARGO_TARGET_POWERPC64LE_UNKNOWN_LINUX_GNU_RUNNER="qemu-ppc64le -L /usr/powerpc64le-linux-gnu" \ +diff --git a/third_party/rust/packed_simd/ci/docker/thumbv7neon-unknown-linux-gnueabihf/Dockerfile b/third_party/rust/packed_simd/ci/docker/thumbv7neon-unknown-linux-gnueabihf/Dockerfile +--- a/third_party/rust/packed_simd/ci/docker/thumbv7neon-unknown-linux-gnueabihf/Dockerfile ++++ b/third_party/rust/packed_simd/ci/docker/thumbv7neon-unknown-linux-gnueabihf/Dockerfile +@@ -1,9 +1,9 @@ +-FROM ubuntu:17.10 ++FROM ubuntu:18.04 + RUN apt-get update && apt-get install -y --no-install-recommends \ + gcc \ + ca-certificates \ + libc6-dev \ + gcc-arm-linux-gnueabihf \ + libc6-dev-armhf-cross \ + qemu-user \ + make \ +diff --git a/third_party/rust/packed_simd/ci/docker/x86_64-unknown-linux-gnu/Dockerfile b/third_party/rust/packed_simd/ci/docker/x86_64-unknown-linux-gnu/Dockerfile +--- a/third_party/rust/packed_simd/ci/docker/x86_64-unknown-linux-gnu/Dockerfile ++++ b/third_party/rust/packed_simd/ci/docker/x86_64-unknown-linux-gnu/Dockerfile +@@ -1,9 +1,9 @@ +-FROM ubuntu:17.10 ++FROM ubuntu:18.04 + RUN apt-get update && apt-get install -y --no-install-recommends \ + gcc \ + libc6-dev \ + file \ + make \ + ca-certificates \ + cmake \ + libclang-dev \ +diff --git a/third_party/rust/packed_simd/ci/dox.sh b/third_party/rust/packed_simd/ci/dox.sh +--- a/third_party/rust/packed_simd/ci/dox.sh ++++ b/third_party/rust/packed_simd/ci/dox.sh +@@ -13,12 +13,15 @@ cargo doc --features=into_bits + # mdbook build perf-guide -d target/doc/perf-guide + cd perf-guide + mdbook build + cd - + cp -r perf-guide/book target/doc/perf-guide + + # If we're on travis, not a PR, and on the right branch, publish! + if [ "$TRAVIS_PULL_REQUEST" = "false" ] && [ "$TRAVIS_BRANCH" = "master" ]; then +- pip install ghp_import --install-option="--prefix=$HOME/.local" +- $HOME/.local/bin/ghp-import -n target/doc ++ python3 -vV ++ pip -vV ++ python3.9 -vV ++ pip install ghp_import --user ++ ghp-import -n target/doc + git push -qf https://${GH_PAGES}@github.com/${TRAVIS_REPO_SLUG}.git gh-pages + fi +diff --git a/third_party/rust/packed_simd/ci/run.sh b/third_party/rust/packed_simd/ci/run.sh +--- a/third_party/rust/packed_simd/ci/run.sh ++++ b/third_party/rust/packed_simd/ci/run.sh +@@ -73,19 +73,21 @@ cargo_test_impl() { + # Debug run: + if [[ "${TARGET}" != "wasm32-unknown-unknown" ]]; then + # Run wasm32-unknown-unknown in release mode only + cargo_test_impl + fi + + if [[ "${TARGET}" == "x86_64-unknown-linux-gnu" ]] || [[ "${TARGET}" == "x86_64-pc-windows-msvc" ]]; then + # use sleef on linux and windows x86_64 builds +- cargo_test_impl --release --features=into_bits,core_arch,sleef-sys ++ # FIXME: Use `core_arch,sleef-sys` features once they works again ++ cargo_test_impl --release --features=into_bits + else +- cargo_test_impl --release --features=into_bits,core_arch ++ # FIXME: Use `core_arch` feature once it works again ++ cargo_test_impl --release --features=into_bits + fi + + # Verify code generation + if [[ "${NOVERIFY}" != "1" ]]; then + cp -r verify/verify target/verify + export STDSIMD_ASSERT_INSTR_LIMIT=30 + if [[ "${TARGET}" == "i586-unknown-linux-gnu" ]]; then + export STDSIMD_ASSERT_INSTR_LIMIT=50 +diff --git a/third_party/rust/packed_simd/ci/setup_benchmarks.sh b/third_party/rust/packed_simd/ci/setup_benchmarks.sh +--- a/third_party/rust/packed_simd/ci/setup_benchmarks.sh ++++ b/third_party/rust/packed_simd/ci/setup_benchmarks.sh +@@ -1,10 +1,7 @@ + #!/usr/bin/env bash + + set -ex + + # Get latest ISPC binary for the target and put it in the path + git clone https://github.com/gnzlbg/ispc-binaries + cp ispc-binaries/ispc-${TARGET} ispc +- +-# Rust-bindgen requires RUSTFMT +-rustup component add rustfmt-preview +diff --git a/third_party/rust/packed_simd/src/api.rs b/third_party/rust/packed_simd/src/api.rs +--- a/third_party/rust/packed_simd/src/api.rs ++++ b/third_party/rust/packed_simd/src/api.rs +@@ -1,10 +1,12 @@ + //! Implements the Simd<[T; N]> APIs + ++#[macro_use] ++mod bitmask; + crate mod cast; + #[macro_use] + mod cmp; + #[macro_use] + mod default; + #[macro_use] + mod fmt; + #[macro_use] +@@ -34,17 +36,17 @@ mod swap_bytes; + #[macro_use] + mod bit_manip; + + #[cfg(feature = "into_bits")] + crate mod into_bits; + + macro_rules! impl_i { + ([$elem_ty:ident; $elem_n:expr]: $tuple_id:ident, $mask_ty:ident +- | $ielem_ty:ident | $test_tt:tt | $($elem_ids:ident),* ++ | $ielem_ty:ident, $ibitmask_ty:ident | $test_tt:tt | $($elem_ids:ident),* + | From: $($from_vec_ty:ident),* | $(#[$doc:meta])*) => { + impl_minimal_iuf!([$elem_ty; $elem_n]: $tuple_id | $ielem_ty | $test_tt + | $($elem_ids),* | $(#[$doc])*); + impl_ops_vector_arithmetic!([$elem_ty; $elem_n]: $tuple_id | $test_tt); + impl_ops_scalar_arithmetic!([$elem_ty; $elem_n]: $tuple_id | $test_tt); + impl_ops_vector_bitwise!( + [$elem_ty; $elem_n]: $tuple_id | $test_tt | (!(0 as $elem_ty), 0) + ); +@@ -88,26 +90,27 @@ macro_rules! impl_i { + [$elem_ty; $elem_n]: $tuple_id | $test_tt | (0, 1) + ); + impl_cmp_eq!([$elem_ty; $elem_n]: $tuple_id | $test_tt | (0, 1)); + impl_cmp_vertical!( + [$elem_ty; $elem_n]: $tuple_id, $mask_ty, false, (1, 0) | $test_tt + ); + impl_cmp_partial_ord!([$elem_ty; $elem_n]: $tuple_id | $test_tt); + impl_cmp_ord!([$elem_ty; $elem_n]: $tuple_id | $test_tt | (0, 1)); ++ impl_bitmask!($tuple_id | $ibitmask_ty | (-1, 0) | $test_tt); + + test_select!($elem_ty, $mask_ty, $tuple_id, (1, 2) | $test_tt); + test_cmp_partial_ord_int!([$elem_ty; $elem_n]: $tuple_id | $test_tt); + test_shuffle1_dyn!([$elem_ty; $elem_n]: $tuple_id | $test_tt); + } + } + + macro_rules! impl_u { + ([$elem_ty:ident; $elem_n:expr]: $tuple_id:ident, $mask_ty:ident +- | $ielem_ty:ident | $test_tt:tt | $($elem_ids:ident),* ++ | $ielem_ty:ident, $ibitmask_ty:ident | $test_tt:tt | $($elem_ids:ident),* + | From: $($from_vec_ty:ident),* | $(#[$doc:meta])*) => { + impl_minimal_iuf!([$elem_ty; $elem_n]: $tuple_id | $ielem_ty | $test_tt + | $($elem_ids),* | $(#[$doc])*); + impl_ops_vector_arithmetic!([$elem_ty; $elem_n]: $tuple_id | $test_tt); + impl_ops_scalar_arithmetic!([$elem_ty; $elem_n]: $tuple_id | $test_tt); + impl_ops_vector_bitwise!( + [$elem_ty; $elem_n]: $tuple_id | $test_tt | (!(0 as $elem_ty), 0) + ); +@@ -150,16 +153,18 @@ macro_rules! impl_u { + [$elem_ty; $elem_n]: $tuple_id | $test_tt | (1, 0) + ); + impl_cmp_eq!([$elem_ty; $elem_n]: $tuple_id | $test_tt | (0, 1)); + impl_cmp_vertical!( + [$elem_ty; $elem_n]: $tuple_id, $mask_ty, false, (1, 0) | $test_tt + ); + impl_cmp_partial_ord!([$elem_ty; $elem_n]: $tuple_id | $test_tt); + impl_cmp_ord!([$elem_ty; $elem_n]: $tuple_id | $test_tt | (0, 1)); ++ impl_bitmask!($tuple_id | $ibitmask_ty | ($ielem_ty::max_value(), 0) | ++ $test_tt); + + test_select!($elem_ty, $mask_ty, $tuple_id, (1, 2) | $test_tt); + test_cmp_partial_ord_int!([$elem_ty; $elem_n]: $tuple_id | $test_tt); + test_shuffle1_dyn!([$elem_ty; $elem_n]: $tuple_id | $test_tt); + } + } + + macro_rules! impl_f { +@@ -217,17 +222,18 @@ macro_rules! impl_f { + test_reduction_float_min_max!( + [$elem_ty; $elem_n]: $tuple_id | $test_tt + ); + test_shuffle1_dyn!([$elem_ty; $elem_n]: $tuple_id | $test_tt); + } + } + + macro_rules! impl_m { +- ([$elem_ty:ident; $elem_n:expr]: $tuple_id:ident | $ielem_ty:ident ++ ([$elem_ty:ident; $elem_n:expr]: $tuple_id:ident ++ | $ielem_ty:ident, $ibitmask_ty:ident + | $test_tt:tt | $($elem_ids:ident),* | From: $($from_vec_ty:ident),* + | $(#[$doc:meta])*) => { + impl_minimal_mask!( + [$elem_ty; $elem_n]: $tuple_id | $ielem_ty | $test_tt + | $($elem_ids),* | $(#[$doc])* + ); + impl_ops_vector_mask_bitwise!( + [$elem_ty; $elem_n]: $tuple_id | $test_tt | (true, false) +@@ -260,16 +266,17 @@ macro_rules! impl_m { + | $test_tt + ); + impl_select!([$elem_ty; $elem_n]: $tuple_id | $test_tt); + impl_cmp_partial_ord!([$elem_ty; $elem_n]: $tuple_id | $test_tt); + impl_cmp_ord!( + [$elem_ty; $elem_n]: $tuple_id | $test_tt | (false, true) + ); + impl_shuffle1_dyn!([$elem_ty; $elem_n]: $tuple_id | $test_tt); ++ impl_bitmask!($tuple_id | $ibitmask_ty | (true, false) | $test_tt); + + test_cmp_partial_ord_mask!([$elem_ty; $elem_n]: $tuple_id | $test_tt); + test_shuffle1_dyn_mask!([$elem_ty; $elem_n]: $tuple_id | $test_tt); + } + } + + macro_rules! impl_const_p { + ([$elem_ty:ty; $elem_n:expr]: $tuple_id:ident, $mask_ty:ident, +diff --git a/third_party/rust/packed_simd/src/api/bit_manip.rs b/third_party/rust/packed_simd/src/api/bit_manip.rs +--- a/third_party/rust/packed_simd/src/api/bit_manip.rs ++++ b/third_party/rust/packed_simd/src/api/bit_manip.rs +@@ -32,16 +32,17 @@ macro_rules! impl_bit_manip { + } + } + + test_if! { + $test_tt: + paste::item_with_macros! { + #[allow(overflowing_literals)] + pub mod [<$id _bit_manip>] { ++ #![allow(const_item_mutation)] + use super::*; + + const LANE_WIDTH: usize = mem::size_of::<$elem_ty>() * 8; + + macro_rules! test_func { + ($x:expr, $func:ident) => {{ + let mut actual = $x; + for i in 0..$id::lanes() { +diff --git a/third_party/rust/packed_simd/src/api/bitmask.rs b/third_party/rust/packed_simd/src/api/bitmask.rs +new file mode 100644 +--- /dev/null ++++ b/third_party/rust/packed_simd/src/api/bitmask.rs +@@ -0,0 +1,82 @@ ++//! Bitmask API ++ ++macro_rules! impl_bitmask { ++ ($id:ident | $ibitmask_ty:ident | ($set:expr, $clear:expr) ++ | $test_tt:tt) => { ++ impl $id { ++ /// Creates a bitmask with the MSB of each vector lane. ++ /// ++ /// If the vector has less than 8 lanes, the bits that do not ++ /// correspond to any vector lanes are cleared. ++ #[inline] ++ pub fn bitmask(self) -> $ibitmask_ty { ++ unsafe { codegen::llvm::simd_bitmask(self.0) } ++ } ++ } ++ ++ test_if! { ++ $test_tt: ++ paste::item! { ++ #[cfg(not(any( ++ // FIXME: https://github.com/rust-lang-nursery/packed_simd/issues/210 ++ all(target_arch = "mips", target_endian = "big"), ++ all(target_arch = "mips64", target_endian = "big"), ++ target_arch = "sparc64", ++ target_arch = "s390x", ++ )))] ++ pub mod [<$id _bitmask>] { ++ use super::*; ++ #[cfg_attr(not(target_arch = "wasm32"), test)] ++ #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] ++ fn bitmask() { ++ // clear all lanes ++ let vec = $id::splat($clear as _); ++ let bitmask: $ibitmask_ty = 0; ++ assert_eq!(vec.bitmask(), bitmask); ++ ++ // set even lanes ++ let mut vec = $id::splat($clear as _); ++ for i in 0..$id::lanes() { ++ if i % 2 == 0 { ++ vec = vec.replace(i, $set as _); ++ } ++ } ++ // create bitmask with even lanes set: ++ let mut bitmask: $ibitmask_ty = 0; ++ for i in 0..$id::lanes() { ++ if i % 2 == 0 { ++ bitmask |= 1 << i; ++ } ++ } ++ assert_eq!(vec.bitmask(), bitmask); ++ ++ ++ // set odd lanes ++ let mut vec = $id::splat($clear as _); ++ for i in 0..$id::lanes() { ++ if i % 2 != 0 { ++ vec = vec.replace(i, $set as _); ++ } ++ } ++ // create bitmask with odd lanes set: ++ let mut bitmask: $ibitmask_ty = 0; ++ for i in 0..$id::lanes() { ++ if i % 2 != 0 { ++ bitmask |= 1 << i; ++ } ++ } ++ assert_eq!(vec.bitmask(), bitmask); ++ ++ // set all lanes ++ let vec = $id::splat($set as _); ++ let mut bitmask: $ibitmask_ty = 0; ++ for i in 0..$id::lanes() { ++ bitmask |= 1 << i; ++ } ++ assert_eq!(vec.bitmask(), bitmask); ++ } ++ } ++ } ++ } ++ }; ++} +diff --git a/third_party/rust/packed_simd/src/api/cast/v128.rs b/third_party/rust/packed_simd/src/api/cast/v128.rs +--- a/third_party/rust/packed_simd/src/api/cast/v128.rs ++++ b/third_party/rust/packed_simd/src/api/cast/v128.rs +@@ -1,10 +1,10 @@ + //! `FromCast` and `IntoCast` implementations for portable 128-bit wide vectors +-#![rustfmt::skip] ++#[rustfmt::skip] + + use crate::*; + + impl_from_cast!( + i8x16[test_v128]: u8x16, m8x16, i16x16, u16x16, m16x16, i32x16, u32x16, f32x16, m32x16 + ); + impl_from_cast!( + u8x16[test_v128]: i8x16, m8x16, i16x16, u16x16, m16x16, i32x16, u32x16, f32x16, m32x16 +diff --git a/third_party/rust/packed_simd/src/api/cast/v16.rs b/third_party/rust/packed_simd/src/api/cast/v16.rs +--- a/third_party/rust/packed_simd/src/api/cast/v16.rs ++++ b/third_party/rust/packed_simd/src/api/cast/v16.rs +@@ -1,10 +1,10 @@ + //! `FromCast` and `IntoCast` implementations for portable 16-bit wide vectors +-#![rustfmt::skip] ++#[rustfmt::skip] + + use crate::*; + + impl_from_cast!( + i8x2[test_v16]: u8x2, m8x2, i16x2, u16x2, m16x2, i32x2, u32x2, f32x2, m32x2, + i64x2, u64x2, f64x2, m64x2, i128x2, u128x2, m128x2, isizex2, usizex2, msizex2 + ); + impl_from_cast!( +diff --git a/third_party/rust/packed_simd/src/api/cast/v256.rs b/third_party/rust/packed_simd/src/api/cast/v256.rs +--- a/third_party/rust/packed_simd/src/api/cast/v256.rs ++++ b/third_party/rust/packed_simd/src/api/cast/v256.rs +@@ -1,10 +1,10 @@ + //! `FromCast` and `IntoCast` implementations for portable 256-bit wide vectors +-#![rustfmt::skip] ++#[rustfmt::skip] + + use crate::*; + + impl_from_cast!(i8x32[test_v256]: u8x32, m8x32, i16x32, u16x32, m16x32); + impl_from_cast!(u8x32[test_v256]: i8x32, m8x32, i16x32, u16x32, m16x32); + impl_from_cast_mask!(m8x32[test_v256]: i8x32, u8x32, i16x32, u16x32, m16x32); + + impl_from_cast!( +diff --git a/third_party/rust/packed_simd/src/api/cast/v32.rs b/third_party/rust/packed_simd/src/api/cast/v32.rs +--- a/third_party/rust/packed_simd/src/api/cast/v32.rs ++++ b/third_party/rust/packed_simd/src/api/cast/v32.rs +@@ -1,10 +1,10 @@ + //! `FromCast` and `IntoCast` implementations for portable 32-bit wide vectors +-#![rustfmt::skip] ++#[rustfmt::skip] + + use crate::*; + + impl_from_cast!( + i8x4[test_v32]: u8x4, m8x4, i16x4, u16x4, m16x4, i32x4, u32x4, f32x4, m32x4, + i64x4, u64x4, f64x4, m64x4, i128x4, u128x4, m128x4, isizex4, usizex4, msizex4 + ); + impl_from_cast!( +diff --git a/third_party/rust/packed_simd/src/api/cast/v512.rs b/third_party/rust/packed_simd/src/api/cast/v512.rs +--- a/third_party/rust/packed_simd/src/api/cast/v512.rs ++++ b/third_party/rust/packed_simd/src/api/cast/v512.rs +@@ -1,10 +1,10 @@ + //! `FromCast` and `IntoCast` implementations for portable 512-bit wide vectors +-#![rustfmt::skip] ++#[rustfmt::skip] + + use crate::*; + + impl_from_cast!(i8x64[test_v512]: u8x64, m8x64); + impl_from_cast!(u8x64[test_v512]: i8x64, m8x64); + impl_from_cast_mask!(m8x64[test_v512]: i8x64, u8x64); + + impl_from_cast!(i16x32[test_v512]: i8x32, u8x32, m8x32, u16x32, m16x32); +diff --git a/third_party/rust/packed_simd/src/api/cast/v64.rs b/third_party/rust/packed_simd/src/api/cast/v64.rs +--- a/third_party/rust/packed_simd/src/api/cast/v64.rs ++++ b/third_party/rust/packed_simd/src/api/cast/v64.rs +@@ -1,10 +1,10 @@ + //! `FromCast` and `IntoCast` implementations for portable 64-bit wide vectors +-#![rustfmt::skip] ++#[rustfmt::skip] + + use crate::*; + + impl_from_cast!( + i8x8[test_v64]: u8x8, m8x8, i16x8, u16x8, m16x8, i32x8, u32x8, f32x8, m32x8, + i64x8, u64x8, f64x8, m64x8, isizex8, usizex8, msizex8 + ); + impl_from_cast!( +diff --git a/third_party/rust/packed_simd/src/api/default.rs b/third_party/rust/packed_simd/src/api/default.rs +--- a/third_party/rust/packed_simd/src/api/default.rs ++++ b/third_party/rust/packed_simd/src/api/default.rs +@@ -7,16 +7,18 @@ macro_rules! impl_default { + fn default() -> Self { + Self::splat($elem_ty::default()) + } + } + + test_if!{ + $test_tt: + paste::item! { ++ // Comparisons use integer casts within mantissa^1 range. ++ #[allow(clippy::float_cmp)] + pub mod [<$id _default>] { + use super::*; + #[cfg_attr(not(target_arch = "wasm32"), test)] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] + fn default() { + let a = $id::default(); + for i in 0..$id::lanes() { + assert_eq!(a.extract(i), $elem_ty::default()); + } +diff --git a/third_party/rust/packed_simd/src/api/from/from_array.rs b/third_party/rust/packed_simd/src/api/from/from_array.rs +--- a/third_party/rust/packed_simd/src/api/from/from_array.rs ++++ b/third_party/rust/packed_simd/src/api/from/from_array.rs +@@ -51,16 +51,18 @@ macro_rules! impl_from_array { + unsafe { U { array: self }.vec } + } + } + */ + + test_if! { + $test_tt: + paste::item! { ++ // Comparisons use integer casts within mantissa^1 range. ++ #[allow(clippy::float_cmp)] + mod [<$id _from>] { + use super::*; + #[test] + fn array() { + let vec: $id = Default::default(); + + // FIXME: Workaround for arrays with more than 32 + // elements. +diff --git a/third_party/rust/packed_simd/src/api/hash.rs b/third_party/rust/packed_simd/src/api/hash.rs +--- a/third_party/rust/packed_simd/src/api/hash.rs ++++ b/third_party/rust/packed_simd/src/api/hash.rs +@@ -31,16 +31,18 @@ macro_rules! impl_hash { + crate::mem::size_of::(), + crate::mem::size_of::<$id>() + ); + #[allow(deprecated)] + let mut a_hash = SipHasher13::new(); + let mut v_hash = a_hash.clone(); + a.hash(&mut a_hash); + ++ // Integer within mantissa^1 range. ++ #[allow(clippy::float_cmp)] + let v = $id::splat(42 as $elem_ty); + v.hash(&mut v_hash); + assert_eq!(a_hash.finish(), v_hash.finish()); + } + } + } + } + }; +diff --git a/third_party/rust/packed_simd/src/api/into_bits/arch_specific.rs b/third_party/rust/packed_simd/src/api/into_bits/arch_specific.rs +--- a/third_party/rust/packed_simd/src/api/into_bits/arch_specific.rs ++++ b/third_party/rust/packed_simd/src/api/into_bits/arch_specific.rs +@@ -1,11 +1,11 @@ + //! `FromBits` and `IntoBits` between portable vector types and the + //! architecture-specific vector types. +-#![rustfmt::skip] ++#[rustfmt::skip] + + // FIXME: MIPS FromBits/IntoBits + + #[allow(unused)] + use crate::*; + + /// This macro implements FromBits for the portable and the architecture + /// specific vector types. +@@ -79,17 +79,16 @@ macro_rules! impl_arch { + } + + //////////////////////////////////////////////////////////////////////////////// + // Implementations for the 64-bit wide vector types: + + // FIXME: 64-bit single element types + // FIXME: arm/aarch float16x4_t missing + impl_arch!( +- [x86["x86"]: __m64], [x86_64["x86_64"]: __m64], + [arm["arm"]: int8x8_t, uint8x8_t, poly8x8_t, int16x4_t, uint16x4_t, + poly16x4_t, int32x2_t, uint32x2_t, float32x2_t, int64x1_t, + uint64x1_t], + [aarch64["aarch64"]: int8x8_t, uint8x8_t, poly8x8_t, int16x4_t, uint16x4_t, + poly16x4_t, int32x2_t, uint32x2_t, float32x2_t, int64x1_t, uint64x1_t, + float64x1_t] | + from: i8x8, u8x8, m8x8, i16x4, u16x4, m16x4, i32x2, u32x2, f32x2, m32x2 | + into: i8x8, u8x8, i16x4, u16x4, i32x2, u32x2, f32x2 | +diff --git a/third_party/rust/packed_simd/src/api/into_bits/v128.rs b/third_party/rust/packed_simd/src/api/into_bits/v128.rs +--- a/third_party/rust/packed_simd/src/api/into_bits/v128.rs ++++ b/third_party/rust/packed_simd/src/api/into_bits/v128.rs +@@ -1,10 +1,10 @@ + //! `FromBits` and `IntoBits` implementations for portable 128-bit wide vectors +-#![rustfmt::skip] ++#[rustfmt::skip] + + #[allow(unused)] // wasm_bindgen_test + use crate::*; + + impl_from_bits!(i8x16[test_v128]: u8x16, m8x16, i16x8, u16x8, m16x8, i32x4, u32x4, f32x4, m32x4, i64x2, u64x2, f64x2, m64x2, i128x1, u128x1, m128x1); + impl_from_bits!(u8x16[test_v128]: i8x16, m8x16, i16x8, u16x8, m16x8, i32x4, u32x4, f32x4, m32x4, i64x2, u64x2, f64x2, m64x2, i128x1, u128x1, m128x1); + impl_from_bits!(m8x16[test_v128]: m16x8, m32x4, m64x2, m128x1); + +diff --git a/third_party/rust/packed_simd/src/api/into_bits/v16.rs b/third_party/rust/packed_simd/src/api/into_bits/v16.rs +--- a/third_party/rust/packed_simd/src/api/into_bits/v16.rs ++++ b/third_party/rust/packed_simd/src/api/into_bits/v16.rs +@@ -1,9 +1,9 @@ + //! `FromBits` and `IntoBits` implementations for portable 16-bit wide vectors +-#![rustfmt::skip] ++#[rustfmt::skip] + + #[allow(unused)] // wasm_bindgen_test + use crate::*; + + impl_from_bits!(i8x2[test_v16]: u8x2, m8x2); + impl_from_bits!(u8x2[test_v16]: i8x2, m8x2); + // note: m8x2 cannot be constructed from all i8x2 or u8x2 bit patterns +diff --git a/third_party/rust/packed_simd/src/api/into_bits/v256.rs b/third_party/rust/packed_simd/src/api/into_bits/v256.rs +--- a/third_party/rust/packed_simd/src/api/into_bits/v256.rs ++++ b/third_party/rust/packed_simd/src/api/into_bits/v256.rs +@@ -1,10 +1,10 @@ + //! `FromBits` and `IntoBits` implementations for portable 256-bit wide vectors +-#![rustfmt::skip] ++#[rustfmt::skip] + + #[allow(unused)] // wasm_bindgen_test + use crate::*; + + impl_from_bits!(i8x32[test_v256]: u8x32, m8x32, i16x16, u16x16, m16x16, i32x8, u32x8, f32x8, m32x8, i64x4, u64x4, f64x4, m64x4, i128x2, u128x2, m128x2); + impl_from_bits!(u8x32[test_v256]: i8x32, m8x32, i16x16, u16x16, m16x16, i32x8, u32x8, f32x8, m32x8, i64x4, u64x4, f64x4, m64x4, i128x2, u128x2, m128x2); + impl_from_bits!(m8x32[test_v256]: m16x16, m32x8, m64x4, m128x2); + +diff --git a/third_party/rust/packed_simd/src/api/into_bits/v32.rs b/third_party/rust/packed_simd/src/api/into_bits/v32.rs +--- a/third_party/rust/packed_simd/src/api/into_bits/v32.rs ++++ b/third_party/rust/packed_simd/src/api/into_bits/v32.rs +@@ -1,10 +1,10 @@ + //! `FromBits` and `IntoBits` implementations for portable 32-bit wide vectors +-#![rustfmt::skip] ++#[rustfmt::skip] + + #[allow(unused)] // wasm_bindgen_test + use crate::*; + + impl_from_bits!(i8x4[test_v32]: u8x4, m8x4, i16x2, u16x2, m16x2); + impl_from_bits!(u8x4[test_v32]: i8x4, m8x4, i16x2, u16x2, m16x2); + impl_from_bits!(m8x4[test_v32]: m16x2); + +diff --git a/third_party/rust/packed_simd/src/api/into_bits/v512.rs b/third_party/rust/packed_simd/src/api/into_bits/v512.rs +--- a/third_party/rust/packed_simd/src/api/into_bits/v512.rs ++++ b/third_party/rust/packed_simd/src/api/into_bits/v512.rs +@@ -1,10 +1,10 @@ + //! `FromBits` and `IntoBits` implementations for portable 512-bit wide vectors +-#![rustfmt::skip] ++#[rustfmt::skip] + + #[allow(unused)] // wasm_bindgen_test + use crate::*; + + impl_from_bits!(i8x64[test_v512]: u8x64, m8x64, i16x32, u16x32, m16x32, i32x16, u32x16, f32x16, m32x16, i64x8, u64x8, f64x8, m64x8, i128x4, u128x4, m128x4); + impl_from_bits!(u8x64[test_v512]: i8x64, m8x64, i16x32, u16x32, m16x32, i32x16, u32x16, f32x16, m32x16, i64x8, u64x8, f64x8, m64x8, i128x4, u128x4, m128x4); + impl_from_bits!(m8x64[test_v512]: m16x32, m32x16, m64x8, m128x4); + +diff --git a/third_party/rust/packed_simd/src/api/into_bits/v64.rs b/third_party/rust/packed_simd/src/api/into_bits/v64.rs +--- a/third_party/rust/packed_simd/src/api/into_bits/v64.rs ++++ b/third_party/rust/packed_simd/src/api/into_bits/v64.rs +@@ -1,10 +1,10 @@ + //! `FromBits` and `IntoBits` implementations for portable 64-bit wide vectors +-#![rustfmt::skip] ++#[rustfmt::skip] + + #[allow(unused)] // wasm_bindgen_test + use crate::*; + + impl_from_bits!(i8x8[test_v64]: u8x8, m8x8, i16x4, u16x4, m16x4, i32x2, u32x2, f32x2, m32x2); + impl_from_bits!(u8x8[test_v64]: i8x8, m8x8, i16x4, u16x4, m16x4, i32x2, u32x2, f32x2, m32x2); + impl_from_bits!(m8x8[test_v64]: m16x4, m32x2); + +diff --git a/third_party/rust/packed_simd/src/api/minimal/iuf.rs b/third_party/rust/packed_simd/src/api/minimal/iuf.rs +--- a/third_party/rust/packed_simd/src/api/minimal/iuf.rs ++++ b/third_party/rust/packed_simd/src/api/minimal/iuf.rs +@@ -48,17 +48,17 @@ macro_rules! impl_minimal_iuf { + #[inline] + pub fn extract(self, index: usize) -> $elem_ty { + assert!(index < $elem_count); + unsafe { self.extract_unchecked(index) } + } + + /// Extracts the value at `index`. + /// +- /// # Precondition ++ /// # Safety + /// + /// If `index >= Self::lanes()` the behavior is undefined. + #[inline] + pub unsafe fn extract_unchecked(self, index: usize) -> $elem_ty { + use crate::llvm::simd_extract; + let e: $ielem_ty = simd_extract(self.0, index as u32); + e as $elem_ty + } +@@ -75,17 +75,17 @@ macro_rules! impl_minimal_iuf { + ] + pub fn replace(self, index: usize, new_value: $elem_ty) -> Self { + assert!(index < $elem_count); + unsafe { self.replace_unchecked(index, new_value) } + } + + /// Returns a new vector where the value at `index` is replaced by `new_value`. + /// +- /// # Precondition ++ /// # Safety + /// + /// If `index >= Self::lanes()` the behavior is undefined. + #[inline] + #[must_use = "replace_unchecked does not modify the original value - \ + it returns a new vector with the value at `index` \ + replaced by `new_value`d" + ] + pub unsafe fn replace_unchecked( +@@ -96,16 +96,18 @@ macro_rules! impl_minimal_iuf { + use crate::llvm::simd_insert; + Simd(simd_insert(self.0, index as u32, new_value as $ielem_ty)) + } + } + + test_if!{ + $test_tt: + paste::item! { ++ // Comparisons use integer casts within mantissa^1 range. ++ #[allow(clippy::float_cmp)] + pub mod [<$id _minimal>] { + use super::*; + #[cfg_attr(not(target_arch = "wasm32"), test)] + #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] + fn minimal() { + // lanes: + assert_eq!($elem_count, $id::lanes()); + +diff --git a/third_party/rust/packed_simd/src/api/minimal/mask.rs b/third_party/rust/packed_simd/src/api/minimal/mask.rs +--- a/third_party/rust/packed_simd/src/api/minimal/mask.rs ++++ b/third_party/rust/packed_simd/src/api/minimal/mask.rs +@@ -53,16 +53,18 @@ macro_rules! impl_minimal_mask { + #[inline] + pub fn extract(self, index: usize) -> bool { + assert!(index < $elem_count); + unsafe { self.extract_unchecked(index) } + } + + /// Extracts the value at `index`. + /// ++ /// # Safety ++ /// + /// If `index >= Self::lanes()` the behavior is undefined. + #[inline] + pub unsafe fn extract_unchecked(self, index: usize) -> bool { + use crate::llvm::simd_extract; + let x: $ielem_ty = simd_extract(self.0, index as u32); + x != 0 + } + +@@ -80,19 +82,19 @@ macro_rules! impl_minimal_mask { + pub fn replace(self, index: usize, new_value: bool) -> Self { + assert!(index < $elem_count); + unsafe { self.replace_unchecked(index, new_value) } + } + + /// Returns a new vector where the value at `index` is replaced by + /// `new_value`. + /// +- /// # Panics ++ /// # Safety + /// +- /// If `index >= Self::lanes()`. ++ /// If `index >= Self::lanes()` the behavior is undefined. + #[inline] + #[must_use = "replace_unchecked does not modify the original value - \ + it returns a new vector with the value at `index` \ + replaced by `new_value`d" + ] + pub unsafe fn replace_unchecked( + self, + index: usize, +diff --git a/third_party/rust/packed_simd/src/api/minimal/ptr.rs b/third_party/rust/packed_simd/src/api/minimal/ptr.rs +--- a/third_party/rust/packed_simd/src/api/minimal/ptr.rs ++++ b/third_party/rust/packed_simd/src/api/minimal/ptr.rs +@@ -63,17 +63,17 @@ macro_rules! impl_minimal_p { + #[inline] + pub fn extract(self, index: usize) -> $elem_ty { + assert!(index < $elem_count); + unsafe { self.extract_unchecked(index) } + } + + /// Extracts the value at `index`. + /// +- /// # Precondition ++ /// # Safety + /// + /// If `index >= Self::lanes()` the behavior is undefined. + #[inline] + pub unsafe fn extract_unchecked(self, index: usize) -> $elem_ty { + use crate::llvm::simd_extract; + simd_extract(self.0, index as u32) + } + +@@ -91,17 +91,17 @@ macro_rules! impl_minimal_p { + #[allow(clippy::not_unsafe_ptr_arg_deref)] + pub fn replace(self, index: usize, new_value: $elem_ty) -> Self { + assert!(index < $elem_count); + unsafe { self.replace_unchecked(index, new_value) } + } + + /// Returns a new vector where the value at `index` is replaced by `new_value`. + /// +- /// # Precondition ++ /// # Safety + /// + /// If `index >= Self::lanes()` the behavior is undefined. + #[inline] + #[must_use = "replace_unchecked does not modify the original value - \ + it returns a new vector with the value at `index` \ + replaced by `new_value`d" + ] + pub unsafe fn replace_unchecked( +@@ -210,17 +210,17 @@ macro_rules! impl_minimal_p { + impl crate::fmt::Debug for $id { + #[allow(clippy::missing_inline_in_public_items)] + fn fmt(&self, f: &mut crate::fmt::Formatter<'_>) + -> crate::fmt::Result { + write!( + f, + "{}<{}>(", + stringify!($id), +- unsafe { crate::intrinsics::type_name::() } ++ crate::intrinsics::type_name::() + )?; + for i in 0..$elem_count { + if i > 0 { + write!(f, ", ")?; + } + self.extract(i).fmt(f)?; + } + write!(f, ")") +@@ -545,21 +545,17 @@ macro_rules! impl_minimal_p { + let values = [1_i32; $elem_count]; + + let mut vec: $id = Default::default(); + let mut array = [ + $id::::null().extract(0); $elem_count + ]; + + for i in 0..$elem_count { +- let ptr = unsafe { +- crate::mem::transmute( +- &values[i] as *const i32 +- ) +- }; ++ let ptr = &values[i] as *const i32 as *mut i32; + vec = vec.replace(i, ptr); + array[i] = ptr; + } + + // FIXME: there is no impl of From<$id> for [$elem_ty; N] + // let a0 = From::from(vec); + // assert_eq!(a0, array); + #[allow(unused_assignments)] +@@ -606,30 +602,30 @@ macro_rules! impl_minimal_p { + unsafe { + assert!(slice.len() >= $elem_count); + Self::from_slice_unaligned_unchecked(slice) + } + } + + /// Instantiates a new vector with the values of the `slice`. + /// +- /// # Precondition ++ /// # Safety + /// + /// If `slice.len() < Self::lanes()` or `&slice[0]` is not aligned + /// to an `align_of::()` boundary, the behavior is undefined. + #[inline] + pub unsafe fn from_slice_aligned_unchecked(slice: &[$elem_ty]) + -> Self { + #[allow(clippy::cast_ptr_alignment)] + *(slice.get_unchecked(0) as *const $elem_ty as *const Self) + } + + /// Instantiates a new vector with the values of the `slice`. + /// +- /// # Precondition ++ /// # Safety + /// + /// If `slice.len() < Self::lanes()` the behavior is undefined. + #[inline] + pub unsafe fn from_slice_unaligned_unchecked( + slice: &[$elem_ty], + ) -> Self { + use crate::mem::size_of; + let target_ptr = +@@ -822,33 +818,33 @@ macro_rules! impl_minimal_p { + unsafe { + assert!(slice.len() >= $elem_count); + self.write_to_slice_unaligned_unchecked(slice); + } + } + + /// Writes the values of the vector to the `slice`. + /// +- /// # Precondition ++ /// # Safety + /// + /// If `slice.len() < Self::lanes()` or `&slice[0]` is not + /// aligned to an `align_of::()` boundary, the behavior is + /// undefined. + #[inline] + pub unsafe fn write_to_slice_aligned_unchecked( + self, slice: &mut [$elem_ty], + ) { + #[allow(clippy::cast_ptr_alignment)] + *(slice.get_unchecked_mut(0) as *mut $elem_ty as *mut Self) = + self; + } + + /// Writes the values of the vector to the `slice`. + /// +- /// # Precondition ++ /// # Safety + /// + /// If `slice.len() < Self::lanes()` the behavior is undefined. + #[inline] + pub unsafe fn write_to_slice_unaligned_unchecked( + self, slice: &mut [$elem_ty], + ) { + let target_ptr = + slice.get_unchecked_mut(0) as *mut $elem_ty as *mut u8; +@@ -1020,21 +1016,17 @@ macro_rules! impl_minimal_p { + + let mut vec: $id = Default::default(); + let mut array = [ + $id::::null().extract(0); + $elem_count + ]; + + for i in 0..$elem_count { +- let ptr = unsafe { +- crate::mem::transmute( +- &values[i] as *const i32 +- ) +- }; ++ let ptr = &values[i] as *const i32 as *mut i32; + vec = vec.replace(i, ptr); + array[i] = ptr; + } + + #[allow(deprecated)] + let mut a_hash = SipHasher13::new(); + let mut v_hash = a_hash.clone(); + array.hash(&mut a_hash); +@@ -1146,17 +1138,17 @@ macro_rules! impl_minimal_p { + /// allocation. For instance, no known 64-bit platform can ever + /// serve a request for 263 bytes due to page-table limitations or + /// splitting the address space. However, some 32-bit and 16-bit + /// platforms may successfully serve a request for more than + /// `isize::MAX` bytes with things like Physical Address Extension. + /// As such, memory acquired directly from allocators or memory + /// mapped files may be too large to handle with this function. + /// +- /// Consider using wrapping_offset_from instead if these constraints ++ /// Consider using `wrapping_offset_from` instead if these constraints + /// are difficult to satisfy. The only advantage of this method is + /// that it enables more aggressive compiler optimizations. + #[inline] + pub unsafe fn offset_from(self, origin: Self) -> $isize_ty { + // FIXME: should use LLVM's `sub nsw nuw`. + self.wrapping_offset_from(origin) + } + +diff --git a/third_party/rust/packed_simd/src/api/ops/vector_float_min_max.rs b/third_party/rust/packed_simd/src/api/ops/vector_float_min_max.rs +--- a/third_party/rust/packed_simd/src/api/ops/vector_float_min_max.rs ++++ b/third_party/rust/packed_simd/src/api/ops/vector_float_min_max.rs +@@ -21,16 +21,21 @@ macro_rules! impl_ops_vector_float_min_m + pub fn max(self, x: Self) -> Self { + use crate::llvm::simd_fmax; + unsafe { Simd(simd_fmax(self.0, x.0)) } + } + } + test_if!{ + $test_tt: + paste::item! { ++ #[cfg(not(any( ++ // FIXME: https://github.com/rust-lang-nursery/packed_simd/issues/223 ++ all(target_arch = "mips", target_endian = "big"), ++ target_arch = "mips64", ++ )))] + pub mod [<$id _ops_vector_min_max>] { + use super::*; + #[cfg_attr(not(target_arch = "wasm32"), test)] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] + fn min_max() { + let n = crate::$elem_ty::NAN; + let o = $id::splat(1. as $elem_ty); + let t = $id::splat(2. as $elem_ty); + +diff --git a/third_party/rust/packed_simd/src/api/ptr/gather_scatter.rs b/third_party/rust/packed_simd/src/api/ptr/gather_scatter.rs +--- a/third_party/rust/packed_simd/src/api/ptr/gather_scatter.rs ++++ b/third_party/rust/packed_simd/src/api/ptr/gather_scatter.rs +@@ -44,19 +44,19 @@ macro_rules! impl_ptr_read { + let mut v = [0_i32; $elem_count]; + for i in 0..$elem_count { + v[i] = i as i32; + } + + let mut ptr = $id::::null(); + + for i in 0..$elem_count { +- ptr = ptr.replace(i, unsafe { +- crate::mem::transmute(&v[i] as *const i32) +- }); ++ ptr = ptr.replace(i, ++ &v[i] as *const i32 as *mut i32 ++ ); + } + + // all mask elements are true: + let mask = $mask_ty::splat(true); + let def = Simd::<[i32; $elem_count]>::splat(42_i32); + let r: Simd<[i32; $elem_count]> = unsafe { + ptr.read(mask, def) + }; +@@ -130,42 +130,18 @@ macro_rules! impl_ptr_write { + #[inline] + pub unsafe fn write( + self, mask: Simd<[M; $elem_count]>, + value: Simd<[T; $elem_count]>, + ) where + M: sealed::Mask, + [M; $elem_count]: sealed::SimdArray, + { +- // FIXME: +- // https://github.com/rust-lang-nursery/packed_simd/issues/85 +- #[cfg(not(target_arch = "mips"))] +- { +- use crate::llvm::simd_scatter; +- simd_scatter(value.0, self.0, mask.0) +- } +- #[cfg(target_arch = "mips")] +- { +- let m_ptr = +- &mask as *const Simd<[M; $elem_count]> as *const M; +- for i in 0..$elem_count { +- let m = ptr::read(m_ptr.add(i)); +- if m.test() { +- let t_ptr = &self +- as *const Simd<[*mut T; $elem_count]> +- as *mut *mut T; +- let v_ptr = &value as *const Simd<[T; $elem_count]> +- as *const T; +- ptr::write( +- ptr::read(t_ptr.add(i)), +- ptr::read(v_ptr.add(i)), +- ); +- } +- } +- } ++ use crate::llvm::simd_scatter; ++ simd_scatter(value.0, self.0, mask.0) + } + } + + test_if! { + $test_tt: + paste::item! { + mod [<$id _write>] { + use super::*; +@@ -180,17 +156,17 @@ macro_rules! impl_ptr_write { + for i in 0..$elem_count { + arr[i] = i as i32; + } + // arr = [0, 1, 2, ...] + + let mut ptr = $id::::null(); + for i in 0..$elem_count { + ptr = ptr.replace(i, unsafe { +- crate::mem::transmute(arr.as_ptr().add(i)) ++ arr.as_ptr().add(i) as *mut i32 + }); + } + // ptr = [&arr[0], &arr[1], ...] + + // write `fourty_two` to all elements of `v` + { + let backup = arr; + unsafe { +diff --git a/third_party/rust/packed_simd/src/api/reductions/float_arithmetic.rs b/third_party/rust/packed_simd/src/api/reductions/float_arithmetic.rs +--- a/third_party/rust/packed_simd/src/api/reductions/float_arithmetic.rs ++++ b/third_party/rust/packed_simd/src/api/reductions/float_arithmetic.rs +@@ -88,16 +88,18 @@ macro_rules! impl_reduction_float_arithm + fn product>(iter: I) -> $id { + iter.fold($id::splat(1.), |a, b| crate::ops::Mul::mul(a, *b)) + } + } + + test_if! { + $test_tt: + paste::item! { ++ // Comparisons use integer casts within mantissa^1 range. ++ #[allow(clippy::float_cmp)] + pub mod [<$id _reduction_float_arith>] { + use super::*; + fn alternating(x: usize) -> $id { + let mut v = $id::splat(1 as $elem_ty); + for i in 0..$id::lanes() { + if i % x == 0 { + v = v.replace(i, 2 as $elem_ty); + } +@@ -220,17 +222,17 @@ macro_rules! impl_reduction_float_arithm + } + + let mut start = crate::$elem_ty::EPSILON; + let mut scalar_reduction = 0. as $elem_ty; + + let mut v = $id::splat(0. as $elem_ty); + for i in 0..$id::lanes() { + let c = if i % 2 == 0 { 1e3 } else { -1. }; +- start *= 3.14 * c; ++ start *= ::core::$elem_ty::consts::PI * c; + scalar_reduction += start; + v = v.replace(i, start); + } + let simd_reduction = v.sum(); + + let mut a = [0. as $elem_ty; $id::lanes()]; + v.write_to_slice_unaligned(&mut a); + let tree_reduction = tree_reduce_sum(&a); +@@ -252,16 +254,17 @@ macro_rules! impl_reduction_float_arithm + scalar_reduction + ); + } + + #[cfg_attr(not(target_arch = "wasm32"), test)] + #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] + #[allow(unused, dead_code)] + fn product_roundoff() { ++ use ::core::convert::TryInto; + // Performs a tree-reduction + fn tree_reduce_product(a: &[$elem_ty]) -> $elem_ty { + assert!(!a.is_empty()); + if a.len() == 1 { + a[0] + } else if a.len() == 2 { + a[0] * a[1] + } else { +@@ -273,35 +276,37 @@ macro_rules! impl_reduction_float_arithm + } + + let mut start = crate::$elem_ty::EPSILON; + let mut scalar_reduction = 1. as $elem_ty; + + let mut v = $id::splat(0. as $elem_ty); + for i in 0..$id::lanes() { + let c = if i % 2 == 0 { 1e3 } else { -1. }; +- start *= 3.14 * c; ++ start *= ::core::$elem_ty::consts::PI * c; + scalar_reduction *= start; + v = v.replace(i, start); + } + let simd_reduction = v.product(); + + let mut a = [0. as $elem_ty; $id::lanes()]; + v.write_to_slice_unaligned(&mut a); + let tree_reduction = tree_reduce_product(&a); + +- // tolerate 1 ULP difference: ++ // FIXME: Too imprecise, even only for product(f32x8). ++ // Figure out how to narrow this down. ++ let ulp_limit = $id::lanes() / 2; + let red_bits = simd_reduction.to_bits(); + let tree_bits = tree_reduction.to_bits(); + assert!( + if red_bits > tree_bits { + red_bits - tree_bits + } else { + tree_bits - red_bits +- } < 2, ++ } < ulp_limit.try_into().unwrap(), + "vector: {:?} | simd_reduction: {:?} | \ + tree_reduction: {} | scalar_reduction: {}", + v, + simd_reduction, + tree_reduction, + scalar_reduction + ); + } +diff --git a/third_party/rust/packed_simd/src/api/reductions/min_max.rs b/third_party/rust/packed_simd/src/api/reductions/min_max.rs +--- a/third_party/rust/packed_simd/src/api/reductions/min_max.rs ++++ b/third_party/rust/packed_simd/src/api/reductions/min_max.rs +@@ -71,16 +71,18 @@ macro_rules! impl_reduction_min_max { + x = x.min(self.extract(i)); + } + x + } + } + } + test_if! {$test_tt: + paste::item! { ++ // Comparisons use integer casts within mantissa^1 range. ++ #[allow(clippy::float_cmp)] + pub mod [<$id _reduction_min_max>] { + use super::*; + #[cfg_attr(not(target_arch = "wasm32"), test)] + #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] + pub fn max_element() { + let v = $id::splat(0 as $elem_ty); + assert_eq!(v.max_element(), 0 as $elem_ty); + if $id::lanes() > 1 { +@@ -119,16 +121,18 @@ macro_rules! impl_reduction_min_max { + }; + } + + macro_rules! test_reduction_float_min_max { + ([$elem_ty:ident; $elem_count:expr]: $id:ident | $test_tt:tt) => { + test_if!{ + $test_tt: + paste::item! { ++ // Comparisons use integer casts within mantissa^1 range. ++ #[allow(clippy::float_cmp)] + pub mod [<$id _reduction_min_max_nan>] { + use super::*; + #[cfg_attr(not(target_arch = "wasm32"), test)] + #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] + fn min_element_test() { + let n = crate::$elem_ty::NAN; + + assert_eq!(n.min(-3.), -3.); +diff --git a/third_party/rust/packed_simd/src/api/slice/from_slice.rs b/third_party/rust/packed_simd/src/api/slice/from_slice.rs +--- a/third_party/rust/packed_simd/src/api/slice/from_slice.rs ++++ b/third_party/rust/packed_simd/src/api/slice/from_slice.rs +@@ -33,17 +33,17 @@ macro_rules! impl_slice_from_slice { + unsafe { + assert!(slice.len() >= $elem_count); + Self::from_slice_unaligned_unchecked(slice) + } + } + + /// Instantiates a new vector with the values of the `slice`. + /// +- /// # Precondition ++ /// # Safety + /// + /// If `slice.len() < Self::lanes()` or `&slice[0]` is not aligned + /// to an `align_of::()` boundary, the behavior is undefined. + #[inline] + pub unsafe fn from_slice_aligned_unchecked( + slice: &[$elem_ty], + ) -> Self { + debug_assert!(slice.len() >= $elem_count); +@@ -54,17 +54,17 @@ macro_rules! impl_slice_from_slice { + ); + + #[allow(clippy::cast_ptr_alignment)] + *(target_ptr as *const Self) + } + + /// Instantiates a new vector with the values of the `slice`. + /// +- /// # Precondition ++ /// # Safety + /// + /// If `slice.len() < Self::lanes()` the behavior is undefined. + #[inline] + pub unsafe fn from_slice_unaligned_unchecked( + slice: &[$elem_ty], + ) -> Self { + use crate::mem::size_of; + debug_assert!(slice.len() >= $elem_count); +@@ -79,16 +79,18 @@ macro_rules! impl_slice_from_slice { + ); + x + } + } + + test_if! { + $test_tt: + paste::item! { ++ // Comparisons use integer casts within mantissa^1 range. ++ #[allow(clippy::float_cmp)] + pub mod [<$id _slice_from_slice>] { + use super::*; + use crate::iter::Iterator; + + #[cfg_attr(not(target_arch = "wasm32"), test)] + #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] + fn from_slice_unaligned() { + let mut unaligned = [42 as $elem_ty; $id::lanes() + 1]; +diff --git a/third_party/rust/packed_simd/src/api/slice/write_to_slice.rs b/third_party/rust/packed_simd/src/api/slice/write_to_slice.rs +--- a/third_party/rust/packed_simd/src/api/slice/write_to_slice.rs ++++ b/third_party/rust/packed_simd/src/api/slice/write_to_slice.rs +@@ -34,17 +34,17 @@ macro_rules! impl_slice_write_to_slice { + unsafe { + assert!(slice.len() >= $elem_count); + self.write_to_slice_unaligned_unchecked(slice); + } + } + + /// Writes the values of the vector to the `slice`. + /// +- /// # Precondition ++ /// # Safety + /// + /// If `slice.len() < Self::lanes()` or `&slice[0]` is not + /// aligned to an `align_of::()` boundary, the behavior is + /// undefined. + #[inline] + pub unsafe fn write_to_slice_aligned_unchecked( + self, slice: &mut [$elem_ty], + ) { +@@ -59,17 +59,17 @@ macro_rules! impl_slice_write_to_slice { + #[allow(clippy::cast_ptr_alignment)] + #[allow(clippy::cast_ptr_alignment)] + #[allow(clippy::cast_ptr_alignment)] + *(target_ptr as *mut Self) = self; + } + + /// Writes the values of the vector to the `slice`. + /// +- /// # Precondition ++ /// # Safety + /// + /// If `slice.len() < Self::lanes()` the behavior is undefined. + #[inline] + pub unsafe fn write_to_slice_unaligned_unchecked( + self, slice: &mut [$elem_ty], + ) { + debug_assert!(slice.len() >= $elem_count); + let target_ptr = +@@ -81,16 +81,18 @@ macro_rules! impl_slice_write_to_slice { + crate::mem::size_of::(), + ); + } + } + + test_if! { + $test_tt: + paste::item! { ++ // Comparisons use integer casts within mantissa^1 range. ++ #[allow(clippy::float_cmp)] + pub mod [<$id _slice_write_to_slice>] { + use super::*; + use crate::iter::Iterator; + + #[cfg_attr(not(target_arch = "wasm32"), test)] + #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] + fn write_to_slice_unaligned() { + let mut unaligned = [0 as $elem_ty; $id::lanes() + 1]; +diff --git a/third_party/rust/packed_simd/src/codegen.rs b/third_party/rust/packed_simd/src/codegen.rs +--- a/third_party/rust/packed_simd/src/codegen.rs ++++ b/third_party/rust/packed_simd/src/codegen.rs +@@ -11,23 +11,26 @@ crate mod swap_bytes; + macro_rules! impl_simd_array { + ([$elem_ty:ident; $elem_count:expr]: + $tuple_id:ident | $($elem_tys:ident),*) => { + #[derive(Copy, Clone)] + #[repr(simd)] + pub struct $tuple_id($(crate $elem_tys),*); + //^^^^^^^ leaked through SimdArray + ++ impl crate::sealed::Seal for [$elem_ty; $elem_count] {} ++ + impl crate::sealed::SimdArray for [$elem_ty; $elem_count] { + type Tuple = $tuple_id; + type T = $elem_ty; + const N: usize = $elem_count; + type NT = [u32; $elem_count]; + } + ++ impl crate::sealed::Seal for $tuple_id {} + impl crate::sealed::Simd for $tuple_id { + type Element = $elem_ty; + const LANES: usize = $elem_count; + type LanesType = [u32; $elem_count]; + } + + } + } +diff --git a/third_party/rust/packed_simd/src/codegen/bit_manip.rs b/third_party/rust/packed_simd/src/codegen/bit_manip.rs +--- a/third_party/rust/packed_simd/src/codegen/bit_manip.rs ++++ b/third_party/rust/packed_simd/src/codegen/bit_manip.rs +@@ -1,10 +1,10 @@ + //! LLVM bit manipulation intrinsics. +-#![rustfmt::skip] ++#[rustfmt::skip] + + use crate::*; + + #[allow(improper_ctypes, dead_code)] + extern "C" { + #[link_name = "llvm.ctlz.v2i8"] + fn ctlz_u8x2(x: u8x2, is_zero_undef: bool) -> u8x2; + #[link_name = "llvm.ctlz.v4i8"] +diff --git a/third_party/rust/packed_simd/src/codegen/llvm.rs b/third_party/rust/packed_simd/src/codegen/llvm.rs +--- a/third_party/rust/packed_simd/src/codegen/llvm.rs ++++ b/third_party/rust/packed_simd/src/codegen/llvm.rs +@@ -5,41 +5,47 @@ use crate::sealed::Shuffle; + #[allow(unused_imports)] // FIXME: spurious warning? + use crate::sealed::Simd; + + // Shuffle intrinsics: expanded in users' crates, therefore public. + extern "platform-intrinsic" { + // FIXME: Passing this intrinsics an `idx` array with an index that is + // out-of-bounds will produce a monomorphization-time error. + // https://github.com/rust-lang-nursery/packed_simd/issues/21 ++ #[rustc_args_required_const(2)] + pub fn simd_shuffle2(x: T, y: T, idx: [u32; 2]) -> U + where + T: Simd, + ::Element: Shuffle<[u32; 2], Output = U>; + ++ #[rustc_args_required_const(2)] + pub fn simd_shuffle4(x: T, y: T, idx: [u32; 4]) -> U + where + T: Simd, + ::Element: Shuffle<[u32; 4], Output = U>; + ++ #[rustc_args_required_const(2)] + pub fn simd_shuffle8(x: T, y: T, idx: [u32; 8]) -> U + where + T: Simd, + ::Element: Shuffle<[u32; 8], Output = U>; + ++ #[rustc_args_required_const(2)] + pub fn simd_shuffle16(x: T, y: T, idx: [u32; 16]) -> U + where + T: Simd, + ::Element: Shuffle<[u32; 16], Output = U>; + ++ #[rustc_args_required_const(2)] + pub fn simd_shuffle32(x: T, y: T, idx: [u32; 32]) -> U + where + T: Simd, + ::Element: Shuffle<[u32; 32], Output = U>; + ++ #[rustc_args_required_const(2)] + pub fn simd_shuffle64(x: T, y: T, idx: [u32; 64]) -> U + where + T: Simd, + ::Element: Shuffle<[u32; 64], Output = U>; + } + + pub use self::simd_shuffle16 as __shuffle_vector16; + pub use self::simd_shuffle2 as __shuffle_vector2; +@@ -91,9 +97,11 @@ extern "platform-intrinsic" { + crate fn simd_fmin(a: T, b: T) -> T; + crate fn simd_fmax(a: T, b: T) -> T; + + crate fn simd_fsqrt(a: T) -> T; + crate fn simd_fma(a: T, b: T, c: T) -> T; + + crate fn simd_gather(value: T, pointers: P, mask: M) -> T; + crate fn simd_scatter(value: T, pointers: P, mask: M); ++ ++ crate fn simd_bitmask(value: T) -> U; + } +diff --git a/third_party/rust/packed_simd/src/codegen/reductions/mask/x86.rs b/third_party/rust/packed_simd/src/codegen/reductions/mask/x86.rs +--- a/third_party/rust/packed_simd/src/codegen/reductions/mask/x86.rs ++++ b/third_party/rust/packed_simd/src/codegen/reductions/mask/x86.rs +@@ -14,23 +14,17 @@ mod avx; + + #[cfg(target_feature = "avx2")] + #[macro_use] + mod avx2; + + /// x86 64-bit m8x8 implementation + macro_rules! x86_m8x8_impl { + ($id:ident) => { +- cfg_if! { +- if #[cfg(all(target_arch = "x86_64", target_feature = "sse"))] { +- x86_m8x8_sse_impl!($id); +- } else { +- fallback_impl!($id); +- } +- } ++ fallback_impl!($id); + }; + } + + /// x86 128-bit m8x16 implementation + macro_rules! x86_m8x16_impl { + ($id:ident) => { + cfg_if! { + if #[cfg(target_feature = "sse2")] { +diff --git a/third_party/rust/packed_simd/src/codegen/reductions/mask/x86/sse.rs b/third_party/rust/packed_simd/src/codegen/reductions/mask/x86/sse.rs +--- a/third_party/rust/packed_simd/src/codegen/reductions/mask/x86/sse.rs ++++ b/third_party/rust/packed_simd/src/codegen/reductions/mask/x86/sse.rs +@@ -29,40 +29,8 @@ macro_rules! x86_m32x4_sse_impl { + #[cfg(target_arch = "x86_64")] + use crate::arch::x86_64::_mm_movemask_ps; + + _mm_movemask_ps(crate::mem::transmute(self)) != 0 + } + } + }; + } +- +-macro_rules! x86_m8x8_sse_impl { +- ($id:ident) => { +- impl All for $id { +- #[inline] +- #[target_feature(enable = "sse")] +- unsafe fn all(self) -> bool { +- #[cfg(target_arch = "x86")] +- use crate::arch::x86::_mm_movemask_pi8; +- #[cfg(target_arch = "x86_64")] +- use crate::arch::x86_64::_mm_movemask_pi8; +- // _mm_movemask_pi8(a) creates an 8bit mask containing the most +- // significant bit of each byte of `a`. If all bits are set, +- // then all 8 lanes of the mask are true. +- _mm_movemask_pi8(crate::mem::transmute(self)) +- == u8::max_value() as i32 +- } +- } +- impl Any for $id { +- #[inline] +- #[target_feature(enable = "sse")] +- unsafe fn any(self) -> bool { +- #[cfg(target_arch = "x86")] +- use crate::arch::x86::_mm_movemask_pi8; +- #[cfg(target_arch = "x86_64")] +- use crate::arch::x86_64::_mm_movemask_pi8; +- +- _mm_movemask_pi8(crate::mem::transmute(self)) != 0 +- } +- } +- }; +-} +diff --git a/third_party/rust/packed_simd/src/codegen/shuffle.rs b/third_party/rust/packed_simd/src/codegen/shuffle.rs +--- a/third_party/rust/packed_simd/src/codegen/shuffle.rs ++++ b/third_party/rust/packed_simd/src/codegen/shuffle.rs +@@ -1,302 +1,150 @@ + //! Implementations of the `ShuffleResult` trait for the different numbers of + //! lanes and vector element types. + + use crate::masks::*; +-use crate::sealed::Shuffle; +- +-impl Shuffle<[u32; 2]> for i8 { +- type Output = crate::codegen::i8x2; +-} +-impl Shuffle<[u32; 4]> for i8 { +- type Output = crate::codegen::i8x4; +-} +-impl Shuffle<[u32; 8]> for i8 { +- type Output = crate::codegen::i8x8; +-} +-impl Shuffle<[u32; 16]> for i8 { +- type Output = crate::codegen::i8x16; +-} +-impl Shuffle<[u32; 32]> for i8 { +- type Output = crate::codegen::i8x32; +-} +-impl Shuffle<[u32; 64]> for i8 { +- type Output = crate::codegen::i8x64; +-} +- +-impl Shuffle<[u32; 2]> for u8 { +- type Output = crate::codegen::u8x2; +-} +-impl Shuffle<[u32; 4]> for u8 { +- type Output = crate::codegen::u8x4; +-} +-impl Shuffle<[u32; 8]> for u8 { +- type Output = crate::codegen::u8x8; +-} +-impl Shuffle<[u32; 16]> for u8 { +- type Output = crate::codegen::u8x16; +-} +-impl Shuffle<[u32; 32]> for u8 { +- type Output = crate::codegen::u8x32; +-} +-impl Shuffle<[u32; 64]> for u8 { +- type Output = crate::codegen::u8x64; +-} +- +-impl Shuffle<[u32; 2]> for m8 { +- type Output = crate::codegen::m8x2; +-} +-impl Shuffle<[u32; 4]> for m8 { +- type Output = crate::codegen::m8x4; +-} +-impl Shuffle<[u32; 8]> for m8 { +- type Output = crate::codegen::m8x8; +-} +-impl Shuffle<[u32; 16]> for m8 { +- type Output = crate::codegen::m8x16; +-} +-impl Shuffle<[u32; 32]> for m8 { +- type Output = crate::codegen::m8x32; +-} +-impl Shuffle<[u32; 64]> for m8 { +- type Output = crate::codegen::m8x64; +-} ++use crate::sealed::{Shuffle, Seal}; + +-impl Shuffle<[u32; 2]> for i16 { +- type Output = crate::codegen::i16x2; +-} +-impl Shuffle<[u32; 4]> for i16 { +- type Output = crate::codegen::i16x4; +-} +-impl Shuffle<[u32; 8]> for i16 { +- type Output = crate::codegen::i16x8; +-} +-impl Shuffle<[u32; 16]> for i16 { +- type Output = crate::codegen::i16x16; +-} +-impl Shuffle<[u32; 32]> for i16 { +- type Output = crate::codegen::i16x32; +-} +- +-impl Shuffle<[u32; 2]> for u16 { +- type Output = crate::codegen::u16x2; +-} +-impl Shuffle<[u32; 4]> for u16 { +- type Output = crate::codegen::u16x4; +-} +-impl Shuffle<[u32; 8]> for u16 { +- type Output = crate::codegen::u16x8; +-} +-impl Shuffle<[u32; 16]> for u16 { +- type Output = crate::codegen::u16x16; +-} +-impl Shuffle<[u32; 32]> for u16 { +- type Output = crate::codegen::u16x32; +-} +- +-impl Shuffle<[u32; 2]> for m16 { +- type Output = crate::codegen::m16x2; +-} +-impl Shuffle<[u32; 4]> for m16 { +- type Output = crate::codegen::m16x4; +-} +-impl Shuffle<[u32; 8]> for m16 { +- type Output = crate::codegen::m16x8; +-} +-impl Shuffle<[u32; 16]> for m16 { +- type Output = crate::codegen::m16x16; +-} +-impl Shuffle<[u32; 32]> for m16 { +- type Output = crate::codegen::m16x32; +-} +- +-impl Shuffle<[u32; 2]> for i32 { +- type Output = crate::codegen::i32x2; +-} +-impl Shuffle<[u32; 4]> for i32 { +- type Output = crate::codegen::i32x4; +-} +-impl Shuffle<[u32; 8]> for i32 { +- type Output = crate::codegen::i32x8; +-} +-impl Shuffle<[u32; 16]> for i32 { +- type Output = crate::codegen::i32x16; ++macro_rules! impl_shuffle { ++ ($array:ty, $base:ty, $out:ty) => { ++ impl Seal<$array> for $base {} ++ impl Shuffle<$array> for $base { ++ type Output = $out; ++ } ++ } + } + +-impl Shuffle<[u32; 2]> for u32 { +- type Output = crate::codegen::u32x2; +-} +-impl Shuffle<[u32; 4]> for u32 { +- type Output = crate::codegen::u32x4; +-} +-impl Shuffle<[u32; 8]> for u32 { +- type Output = crate::codegen::u32x8; +-} +-impl Shuffle<[u32; 16]> for u32 { +- type Output = crate::codegen::u32x16; +-} ++impl_shuffle! { [u32; 2], i8, crate::codegen::i8x2 } ++impl_shuffle! { [u32; 4], i8, crate::codegen::i8x4 } ++impl_shuffle! { [u32; 8], i8, crate::codegen::i8x8 } ++impl_shuffle! { [u32; 16], i8, crate::codegen::i8x16 } ++impl_shuffle! { [u32; 32], i8, crate::codegen::i8x32 } ++impl_shuffle! { [u32; 64], i8, crate::codegen::i8x64 } + +-impl Shuffle<[u32; 2]> for f32 { +- type Output = crate::codegen::f32x2; +-} +-impl Shuffle<[u32; 4]> for f32 { +- type Output = crate::codegen::f32x4; +-} +-impl Shuffle<[u32; 8]> for f32 { +- type Output = crate::codegen::f32x8; +-} +-impl Shuffle<[u32; 16]> for f32 { +- type Output = crate::codegen::f32x16; +-} ++impl_shuffle! { [u32; 2], u8, crate::codegen::u8x2 } ++impl_shuffle! { [u32; 4], u8, crate::codegen::u8x4 } ++impl_shuffle! { [u32; 8], u8, crate::codegen::u8x8 } ++impl_shuffle! { [u32; 16], u8, crate::codegen::u8x16 } ++impl_shuffle! { [u32; 32], u8, crate::codegen::u8x32 } ++impl_shuffle! { [u32; 64], u8, crate::codegen::u8x64 } ++ ++impl_shuffle! { [u32; 2], m8, crate::codegen::m8x2 } ++impl_shuffle! { [u32; 4], m8, crate::codegen::m8x4 } ++impl_shuffle! { [u32; 8], m8, crate::codegen::m8x8 } ++impl_shuffle! { [u32; 16], m8, crate::codegen::m8x16 } ++impl_shuffle! { [u32; 32], m8, crate::codegen::m8x32 } ++impl_shuffle! { [u32; 64], m8, crate::codegen::m8x64 } ++ ++impl_shuffle! { [u32; 2], i16, crate::codegen::i16x2 } ++impl_shuffle! { [u32; 4], i16, crate::codegen::i16x4 } ++impl_shuffle! { [u32; 8], i16, crate::codegen::i16x8 } ++impl_shuffle! { [u32; 16], i16, crate::codegen::i16x16 } ++impl_shuffle! { [u32; 32], i16, crate::codegen::i16x32 } + +-impl Shuffle<[u32; 2]> for m32 { +- type Output = crate::codegen::m32x2; +-} +-impl Shuffle<[u32; 4]> for m32 { +- type Output = crate::codegen::m32x4; +-} +-impl Shuffle<[u32; 8]> for m32 { +- type Output = crate::codegen::m32x8; +-} +-impl Shuffle<[u32; 16]> for m32 { +- type Output = crate::codegen::m32x16; +-} ++impl_shuffle! { [u32; 2], u16, crate::codegen::u16x2 } ++impl_shuffle! { [u32; 4], u16, crate::codegen::u16x4 } ++impl_shuffle! { [u32; 8], u16, crate::codegen::u16x8 } ++impl_shuffle! { [u32; 16], u16, crate::codegen::u16x16 } ++impl_shuffle! { [u32; 32], u16, crate::codegen::u16x32 } ++ ++impl_shuffle! { [u32; 2], m16, crate::codegen::m16x2 } ++impl_shuffle! { [u32; 4], m16, crate::codegen::m16x4 } ++impl_shuffle! { [u32; 8], m16, crate::codegen::m16x8 } ++impl_shuffle! { [u32; 16], m16, crate::codegen::m16x16 } + +-/* FIXME: 64-bit single element vector +-impl Shuffle<[u32; 1]> for i64 { +- type Output = crate::codegen::i64x1; +-} +-*/ +-impl Shuffle<[u32; 2]> for i64 { +- type Output = crate::codegen::i64x2; +-} +-impl Shuffle<[u32; 4]> for i64 { +- type Output = crate::codegen::i64x4; +-} +-impl Shuffle<[u32; 8]> for i64 { +- type Output = crate::codegen::i64x8; +-} ++impl_shuffle! { [u32; 2], i32, crate::codegen::i32x2 } ++impl_shuffle! { [u32; 4], i32, crate::codegen::i32x4 } ++impl_shuffle! { [u32; 8], i32, crate::codegen::i32x8 } ++impl_shuffle! { [u32; 16], i32, crate::codegen::i32x16 } ++ ++impl_shuffle! { [u32; 2], u32, crate::codegen::u32x2 } ++impl_shuffle! { [u32; 4], u32, crate::codegen::u32x4 } ++impl_shuffle! { [u32; 8], u32, crate::codegen::u32x8 } ++impl_shuffle! { [u32; 16], u32, crate::codegen::u32x16 } ++ ++impl_shuffle! { [u32; 2], f32, crate::codegen::f32x2 } ++impl_shuffle! { [u32; 4], f32, crate::codegen::f32x4 } ++impl_shuffle! { [u32; 8], f32, crate::codegen::f32x8 } ++impl_shuffle! { [u32; 16], f32, crate::codegen::f32x16 } ++ ++impl_shuffle! { [u32; 2], m32, crate::codegen::m32x2 } ++impl_shuffle! { [u32; 4], m32, crate::codegen::m32x4 } ++impl_shuffle! { [u32; 8], m32, crate::codegen::m32x8 } ++impl_shuffle! { [u32; 16], m32, crate::codegen::m32x16 } + + /* FIXME: 64-bit single element vector +-impl Shuffle<[u32; 1]> for u64 { +- type Output = crate::codegen::u64x1; +-} ++impl_shuffle! { [u32; 1], i64, crate::codegen::i64x1 } + */ +-impl Shuffle<[u32; 2]> for u64 { +- type Output = crate::codegen::u64x2; +-} +-impl Shuffle<[u32; 4]> for u64 { +- type Output = crate::codegen::u64x4; +-} +-impl Shuffle<[u32; 8]> for u64 { +- type Output = crate::codegen::u64x8; +-} ++impl_shuffle! { [u32; 2], i64, crate::codegen::i64x2 } ++impl_shuffle! { [u32; 4], i64, crate::codegen::i64x4 } ++impl_shuffle! { [u32; 8], i64, crate::codegen::i64x8 } + + /* FIXME: 64-bit single element vector +-impl Shuffle<[u32; 1]> for f64 { +- type Output = crate::codegen::f64x1; +-} ++impl_shuffle! { [u32; 1], i64, crate::codegen::i64x1 } + */ +-impl Shuffle<[u32; 2]> for f64 { +- type Output = crate::codegen::f64x2; +-} +-impl Shuffle<[u32; 4]> for f64 { +- type Output = crate::codegen::f64x4; +-} +-impl Shuffle<[u32; 8]> for f64 { +- type Output = crate::codegen::f64x8; +-} ++impl_shuffle! { [u32; 2], u64, crate::codegen::u64x2 } ++impl_shuffle! { [u32; 4], u64, crate::codegen::u64x4 } ++impl_shuffle! { [u32; 8], u64, crate::codegen::u64x8 } + + /* FIXME: 64-bit single element vector +-impl Shuffle<[u32; 1]> for m64 { +- type Output = crate::codegen::m64x1; +-} ++impl_shuffle! { [u32; 1], i64, crate::codegen::i64x1 } + */ +-impl Shuffle<[u32; 2]> for m64 { +- type Output = crate::codegen::m64x2; +-} +-impl Shuffle<[u32; 4]> for m64 { +- type Output = crate::codegen::m64x4; +-} +-impl Shuffle<[u32; 8]> for m64 { +- type Output = crate::codegen::m64x8; +-} ++impl_shuffle! { [u32; 2], f64, crate::codegen::f64x2 } ++impl_shuffle! { [u32; 4], f64, crate::codegen::f64x4 } ++impl_shuffle! { [u32; 8], f64, crate::codegen::f64x8 } ++ ++/* FIXME: 64-bit single element vector ++impl_shuffle! { [u32; 1], i64, crate::codegen::i64x1 } ++*/ ++impl_shuffle! { [u32; 2], m64, crate::codegen::m64x2 } ++impl_shuffle! { [u32; 4], m64, crate::codegen::m64x4 } ++impl_shuffle! { [u32; 8], m64, crate::codegen::m64x8 } + +-impl Shuffle<[u32; 2]> for isize { +- type Output = crate::codegen::isizex2; +-} +-impl Shuffle<[u32; 4]> for isize { +- type Output = crate::codegen::isizex4; +-} +-impl Shuffle<[u32; 8]> for isize { +- type Output = crate::codegen::isizex8; +-} ++impl_shuffle! { [u32; 2], isize, crate::codegen::isizex2 } ++impl_shuffle! { [u32; 4], isize, crate::codegen::isizex4 } ++impl_shuffle! { [u32; 8], isize, crate::codegen::isizex8 } + +-impl Shuffle<[u32; 2]> for usize { +- type Output = crate::codegen::usizex2; +-} +-impl Shuffle<[u32; 4]> for usize { +- type Output = crate::codegen::usizex4; +-} +-impl Shuffle<[u32; 8]> for usize { +- type Output = crate::codegen::usizex8; +-} ++impl_shuffle! { [u32; 2], usize, crate::codegen::usizex2 } ++impl_shuffle! { [u32; 4], usize, crate::codegen::usizex4 } ++impl_shuffle! { [u32; 8], usize, crate::codegen::usizex8 } + ++impl_shuffle! { [u32; 2], msize, crate::codegen::msizex2 } ++impl_shuffle! { [u32; 4], msize, crate::codegen::msizex4 } ++impl_shuffle! { [u32; 8], msize, crate::codegen::msizex8 } ++ ++impl Seal<[u32; 2]> for *const T {} + impl Shuffle<[u32; 2]> for *const T { + type Output = crate::codegen::cptrx2; + } ++impl Seal<[u32; 4]> for *const T {} + impl Shuffle<[u32; 4]> for *const T { + type Output = crate::codegen::cptrx4; + } ++impl Seal<[u32; 8]> for *const T {} + impl Shuffle<[u32; 8]> for *const T { + type Output = crate::codegen::cptrx8; + } + ++impl Seal<[u32; 2]> for *mut T {} + impl Shuffle<[u32; 2]> for *mut T { + type Output = crate::codegen::mptrx2; + } ++impl Seal<[u32; 4]> for *mut T {} + impl Shuffle<[u32; 4]> for *mut T { + type Output = crate::codegen::mptrx4; + } ++impl Seal<[u32; 8]> for *mut T {} + impl Shuffle<[u32; 8]> for *mut T { + type Output = crate::codegen::mptrx8; + } + +-impl Shuffle<[u32; 2]> for msize { +- type Output = crate::codegen::msizex2; +-} +-impl Shuffle<[u32; 4]> for msize { +- type Output = crate::codegen::msizex4; +-} +-impl Shuffle<[u32; 8]> for msize { +- type Output = crate::codegen::msizex8; +-} +- +-impl Shuffle<[u32; 1]> for i128 { +- type Output = crate::codegen::i128x1; +-} +-impl Shuffle<[u32; 2]> for i128 { +- type Output = crate::codegen::i128x2; +-} +-impl Shuffle<[u32; 4]> for i128 { +- type Output = crate::codegen::i128x4; +-} ++impl_shuffle! { [u32; 1], i128, crate::codegen::i128x1 } ++impl_shuffle! { [u32; 2], i128, crate::codegen::i128x2 } ++impl_shuffle! { [u32; 4], i128, crate::codegen::i128x4 } + +-impl Shuffle<[u32; 1]> for u128 { +- type Output = crate::codegen::u128x1; +-} +-impl Shuffle<[u32; 2]> for u128 { +- type Output = crate::codegen::u128x2; +-} +-impl Shuffle<[u32; 4]> for u128 { +- type Output = crate::codegen::u128x4; +-} ++impl_shuffle! { [u32; 1], u128, crate::codegen::u128x1 } ++impl_shuffle! { [u32; 2], u128, crate::codegen::u128x2 } ++impl_shuffle! { [u32; 4], u128, crate::codegen::u128x4 } + +-impl Shuffle<[u32; 1]> for m128 { +- type Output = crate::codegen::m128x1; +-} +-impl Shuffle<[u32; 2]> for m128 { +- type Output = crate::codegen::m128x2; +-} +-impl Shuffle<[u32; 4]> for m128 { +- type Output = crate::codegen::m128x4; +-} ++impl_shuffle! { [u32; 1], m128, crate::codegen::m128x1 } ++impl_shuffle! { [u32; 2], m128, crate::codegen::m128x2 } ++impl_shuffle! { [u32; 4], m128, crate::codegen::m128x4 } +diff --git a/third_party/rust/packed_simd/src/codegen/shuffle1_dyn.rs b/third_party/rust/packed_simd/src/codegen/shuffle1_dyn.rs +--- a/third_party/rust/packed_simd/src/codegen/shuffle1_dyn.rs ++++ b/third_party/rust/packed_simd/src/codegen/shuffle1_dyn.rs +@@ -23,53 +23,32 @@ macro_rules! impl_fallback { + } + } + }; + } + + macro_rules! impl_shuffle1_dyn { + (u8x8) => { + cfg_if! { +- if #[cfg(all(any(target_arch = "x86", target_arch = "x86_64"), +- target_feature = "ssse3"))] { +- impl Shuffle1Dyn for u8x8 { +- type Indices = Self; +- #[inline] +- fn shuffle1_dyn(self, indices: Self::Indices) -> Self { +- #[cfg(target_arch = "x86")] +- use crate::arch::x86::_mm_shuffle_pi8; +- #[cfg(target_arch = "x86_64")] +- use crate::arch::x86_64::_mm_shuffle_pi8; +- +- unsafe { +- crate::mem::transmute( +- _mm_shuffle_pi8( +- crate::mem::transmute(self.0), +- crate::mem::transmute(indices.0) +- ) +- ) +- } +- } +- } +- } else if #[cfg(all( ++ if #[cfg(all( + any( +- all(target_aarch = "aarch64", target_feature = "neon"), +- all(target_aarch = "arm", target_feature = "v7", ++ all(target_arch = "aarch64", target_feature = "neon"), ++ all(target_arch = "doesnotexist", target_feature = "v7", + target_feature = "neon") + ), + any(feature = "core_arch", libcore_neon) + ) + )] { + impl Shuffle1Dyn for u8x8 { + type Indices = Self; + #[inline] + fn shuffle1_dyn(self, indices: Self::Indices) -> Self { +- #[cfg(targt_arch = "aarch64")] ++ #[cfg(target_arch = "aarch64")] + use crate::arch::aarch64::vtbl1_u8; +- #[cfg(targt_arch = "arm")] ++ #[cfg(target_arch = "doesnotexist")] + use crate::arch::arm::vtbl1_u8; + + // This is safe because the binary is compiled with + // neon enabled at compile-time and can therefore only + // run on CPUs that have it enabled. + unsafe { + Simd(mem::transmute( + vtbl1_u8(mem::transmute(self.0), +@@ -101,17 +80,17 @@ macro_rules! impl_shuffle1_dyn { + unsafe { + Simd(mem::transmute( + _mm_shuffle_epi8(mem::transmute(self.0), + crate::mem::transmute(indices)) + )) + } + } + } +- } else if #[cfg(all(target_aarch = "aarch64", target_feature = "neon", ++ } else if #[cfg(all(target_arch = "aarch64", target_feature = "neon", + any(feature = "core_arch", libcore_neon)))] { + impl Shuffle1Dyn for u8x16 { + type Indices = Self; + #[inline] + fn shuffle1_dyn(self, indices: Self::Indices) -> Self { + use crate::arch::aarch64::vqtbl1q_u8; + + // This is safe because the binary is compiled with +@@ -120,17 +99,17 @@ macro_rules! impl_shuffle1_dyn { + unsafe { + Simd(mem::transmute( + vqtbl1q_u8(mem::transmute(self.0), + crate::mem::transmute(indices.0)) + )) + } + } + } +- } else if #[cfg(all(target_aarch = "arm", target_feature = "v7", ++ } else if #[cfg(all(target_arch = "doesnotexist", target_feature = "v7", + target_feature = "neon", + any(feature = "core_arch", libcore_neon)))] { + impl Shuffle1Dyn for u8x16 { + type Indices = Self; + #[inline] + fn shuffle1_dyn(self, indices: Self::Indices) -> Self { + use crate::arch::arm::vtbl2_u8; + +diff --git a/third_party/rust/packed_simd/src/codegen/vPtr.rs b/third_party/rust/packed_simd/src/codegen/vPtr.rs +--- a/third_party/rust/packed_simd/src/codegen/vPtr.rs ++++ b/third_party/rust/packed_simd/src/codegen/vPtr.rs +@@ -3,23 +3,25 @@ + macro_rules! impl_simd_ptr { + ([$ptr_ty:ty; $elem_count:expr]: $tuple_id:ident | $ty:ident + | $($tys:ty),*) => { + #[derive(Copy, Clone)] + #[repr(simd)] + pub struct $tuple_id<$ty>($(crate $tys),*); + //^^^^^^^ leaked through SimdArray + ++ impl<$ty> crate::sealed::Seal for [$ptr_ty; $elem_count] {} + impl<$ty> crate::sealed::SimdArray for [$ptr_ty; $elem_count] { + type Tuple = $tuple_id<$ptr_ty>; + type T = $ptr_ty; + const N: usize = $elem_count; + type NT = [u32; $elem_count]; + } + ++ impl<$ty> crate::sealed::Seal for $tuple_id<$ptr_ty> {} + impl<$ty> crate::sealed::Simd for $tuple_id<$ptr_ty> { + type Element = $ptr_ty; + const LANES: usize = $elem_count; + type LanesType = [u32; $elem_count]; + } + + } + } +diff --git a/third_party/rust/packed_simd/src/lib.rs b/third_party/rust/packed_simd/src/lib.rs +--- a/third_party/rust/packed_simd/src/lib.rs ++++ b/third_party/rust/packed_simd/src/lib.rs +@@ -196,40 +196,45 @@ + //! + //! * casting from an `f64` to an `f32` **rounds to nearest, ties to even**. + //! + //! Numeric casts are not very "precise": sometimes lossy, sometimes value + //! preserving, etc. + + #![feature( + repr_simd, ++ rustc_attrs, + const_fn, + platform_intrinsics, + stdsimd, + aarch64_target_feature, + arm_target_feature, + link_llvm_intrinsics, + core_intrinsics, + stmt_expr_attributes, +- align_offset, +- mmx_target_feature, + crate_visibility_modifier, + custom_inner_attributes + )] + #![allow(non_camel_case_types, non_snake_case, +- clippy::cast_possible_truncation, +- clippy::cast_lossless, +- clippy::cast_possible_wrap, +- clippy::cast_precision_loss, +- // This lint is currently broken for generic code +- // See https://github.com/rust-lang/rust-clippy/issues/3410 +- clippy::use_self ++ // FIXME: these types are unsound in C FFI already ++ // See https://github.com/rust-lang/rust/issues/53346 ++ improper_ctypes_definitions, ++ clippy::cast_possible_truncation, ++ clippy::cast_lossless, ++ clippy::cast_possible_wrap, ++ clippy::cast_precision_loss, ++ // TODO: manually add the `#[must_use]` attribute where appropriate ++ clippy::must_use_candidate, ++ // This lint is currently broken for generic code ++ // See https://github.com/rust-lang/rust-clippy/issues/3410 ++ clippy::use_self, ++ clippy::wrong_self_convention, + )] + #![cfg_attr(test, feature(hashmap_internals))] +-#![deny(warnings, rust_2018_idioms, clippy::missing_inline_in_public_items)] ++#![deny(rust_2018_idioms, clippy::missing_inline_in_public_items)] + #![no_std] + + use cfg_if::cfg_if; + + cfg_if! { + if #[cfg(feature = "core_arch")] { + #[allow(unused_imports)] + use core_arch as arch; +@@ -251,16 +256,18 @@ use core::{ + + #[macro_use] + mod testing; + #[macro_use] + mod api; + mod codegen; + mod sealed; + ++pub use crate::sealed::{Simd as SimdVector, Shuffle, SimdArray, Mask}; ++ + /// Packed SIMD vector type. + /// + /// # Examples + /// + /// ``` + /// # use packed_simd::Simd; + /// let v = Simd::<[i32; 4]>::new(0, 1, 2, 3); + /// assert_eq!(v.extract(2), 2); +@@ -271,16 +278,18 @@ pub struct Simd( + // FIXME: this type should be private, + // but it currently must be public for the + // `shuffle!` macro to work: it needs to + // access the internal `repr(simd)` type + // to call the shuffle intrinsics. + #[doc(hidden)] pub ::Tuple, + ); + ++impl sealed::Seal for Simd {} ++ + /// Wrapper over `T` implementing a lexicoraphical order via the `PartialOrd` + /// and/or `Ord` traits. + #[repr(transparent)] + #[derive(Copy, Clone, Debug)] + #[allow(clippy::missing_inline_in_public_items)] + pub struct LexicographicallyOrdered(T); + + mod masks; +diff --git a/third_party/rust/packed_simd/src/masks.rs b/third_party/rust/packed_simd/src/masks.rs +--- a/third_party/rust/packed_simd/src/masks.rs ++++ b/third_party/rust/packed_simd/src/masks.rs +@@ -1,17 +1,19 @@ + //! Mask types + + macro_rules! impl_mask_ty { + ($id:ident : $elem_ty:ident | #[$doc:meta]) => { + #[$doc] + #[derive(Copy, Clone)] + pub struct $id($elem_ty); + ++ impl crate::sealed::Seal for $id {} + impl crate::sealed::Mask for $id { ++ #[inline] + fn test(&self) -> bool { + $id::test(self) + } + } + + impl $id { + /// Instantiate a mask with `value` + #[inline] +diff --git a/third_party/rust/packed_simd/src/sealed.rs b/third_party/rust/packed_simd/src/sealed.rs +--- a/third_party/rust/packed_simd/src/sealed.rs ++++ b/third_party/rust/packed_simd/src/sealed.rs +@@ -1,41 +1,42 @@ + //! Sealed traits + ++/// A sealed trait, this is logically private to the crate ++/// and will prevent implementations from outside the crate ++pub trait Seal {} ++ + /// Trait implemented by arrays that can be SIMD types. +-#[doc(hidden)] +-pub trait SimdArray { ++pub trait SimdArray: Seal { + /// The type of the #[repr(simd)] type. + type Tuple: Copy + Clone; + /// The element type of the vector. + type T; + /// The number of elements in the array. + const N: usize; + /// The type: `[u32; Self::N]`. + type NT; + } + + /// This traits is used to constraint the arguments + /// and result type of the portable shuffles. + #[doc(hidden)] +-pub trait Shuffle { ++pub trait Shuffle: Seal { + // Lanes is a `[u32; N]` where `N` is the number of vector lanes + + /// The result type of the shuffle. + type Output; + } + + /// This trait is implemented by all SIMD vector types. +-#[doc(hidden)] +-pub trait Simd { ++pub trait Simd: Seal { + /// Element type of the SIMD vector + type Element; + /// The number of elements in the SIMD vector. + const LANES: usize; + /// The type: `[u32; Self::N]`. + type LanesType; + } + + /// This trait is implemented by all mask types +-#[doc(hidden)] +-pub trait Mask { ++pub trait Mask: Seal { + fn test(&self) -> bool; + } +diff --git a/third_party/rust/packed_simd/src/testing/utils.rs b/third_party/rust/packed_simd/src/testing/utils.rs +--- a/third_party/rust/packed_simd/src/testing/utils.rs ++++ b/third_party/rust/packed_simd/src/testing/utils.rs +@@ -1,11 +1,13 @@ + //! Testing utilities + + #![allow(dead_code)] ++// FIXME: Or don't. But it's true this is a problematic comparison. ++#![allow(clippy::neg_cmp_op_on_partial_ord)] + + use crate::{cmp::PartialOrd, fmt::Debug, LexicographicallyOrdered}; + + /// Tests PartialOrd for `a` and `b` where `a < b` is true. + pub fn test_lt( + a: LexicographicallyOrdered, b: LexicographicallyOrdered, + ) where + LexicographicallyOrdered: Debug + PartialOrd, +@@ -14,37 +16,42 @@ pub fn test_lt( + assert!(b > a, "{:?}, {:?}", a, b); + + assert!(!(a == b), "{:?}, {:?}", a, b); + assert!(a != b, "{:?}, {:?}", a, b); + + assert!(a <= b, "{:?}, {:?}", a, b); + assert!(b >= a, "{:?}, {:?}", a, b); + +- // Irreflexivity +- assert!(!(a < a), "{:?}, {:?}", a, b); +- assert!(!(b < b), "{:?}, {:?}", a, b); +- assert!(!(a > a), "{:?}, {:?}", a, b); +- assert!(!(b > b), "{:?}, {:?}", a, b); ++ // The elegance of the mathematical expression of irreflexivity is more ++ // than clippy can handle. ++ #[allow(clippy::eq_op)] ++ { ++ // Irreflexivity ++ assert!(!(a < a), "{:?}, {:?}", a, b); ++ assert!(!(b < b), "{:?}, {:?}", a, b); ++ assert!(!(a > a), "{:?}, {:?}", a, b); ++ assert!(!(b > b), "{:?}, {:?}", a, b); + +- assert!(a <= a, "{:?}, {:?}", a, b); +- assert!(b <= b, "{:?}, {:?}", a, b); ++ assert!(a <= a, "{:?}, {:?}", a, b); ++ assert!(b <= b, "{:?}, {:?}", a, b); ++ } + } + + /// Tests PartialOrd for `a` and `b` where `a <= b` is true. + pub fn test_le( + a: LexicographicallyOrdered, b: LexicographicallyOrdered, + ) where + LexicographicallyOrdered: Debug + PartialOrd, + { + assert!(a <= b, "{:?}, {:?}", a, b); + assert!(b >= a, "{:?}, {:?}", a, b); + +- assert!(a == b || a < b, "{:?}, {:?}", a, b); +- assert!(a == b || b > a, "{:?}, {:?}", a, b); ++ assert!(a <= b, "{:?}, {:?}", a, b); ++ assert!(b >= a, "{:?}, {:?}", a, b); + + if a == b { + assert!(!(a < b), "{:?}, {:?}", a, b); + assert!(!(b > a), "{:?}, {:?}", a, b); + + assert!(!(a != b), "{:?}, {:?}", a, b); + } else { + assert!(a != b, "{:?}, {:?}", a, b); +diff --git a/third_party/rust/packed_simd/src/v128.rs b/third_party/rust/packed_simd/src/v128.rs +--- a/third_party/rust/packed_simd/src/v128.rs ++++ b/third_party/rust/packed_simd/src/v128.rs +@@ -1,80 +1,80 @@ + //! 128-bit wide vector types +-#![rustfmt::skip] ++#[rustfmt::skip] + + use crate::*; + +-impl_i!([i8; 16]: i8x16, m8x16 | i8 | test_v128 | ++impl_i!([i8; 16]: i8x16, m8x16 | i8, u16 | test_v128 | + x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15 | + From: | + /// A 128-bit vector with 16 `i8` lanes. + ); +-impl_u!([u8; 16]: u8x16, m8x16 | u8 | test_v128 | ++impl_u!([u8; 16]: u8x16, m8x16 | u8, u16 | test_v128 | + x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15 | + From: | + /// A 128-bit vector with 16 `u8` lanes. + ); +-impl_m!([m8; 16]: m8x16 | i8 | test_v128 | ++impl_m!([m8; 16]: m8x16 | i8, u16 | test_v128 | + x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15 | + From: m16x16 | + /// A 128-bit vector mask with 16 `m8` lanes. + ); + +-impl_i!([i16; 8]: i16x8, m16x8 | i16 | test_v128 | x0, x1, x2, x3, x4, x5, x6, x7 | ++impl_i!([i16; 8]: i16x8, m16x8 | i16, u8 | test_v128 | x0, x1, x2, x3, x4, x5, x6, x7 | + From: i8x8, u8x8 | + /// A 128-bit vector with 8 `i16` lanes. + ); +-impl_u!([u16; 8]: u16x8, m16x8 | u16| test_v128 | x0, x1, x2, x3, x4, x5, x6, x7 | ++impl_u!([u16; 8]: u16x8, m16x8 | u16, u8 | test_v128 | x0, x1, x2, x3, x4, x5, x6, x7 | + From: u8x8 | + /// A 128-bit vector with 8 `u16` lanes. + ); +-impl_m!([m16; 8]: m16x8 | i16 | test_v128 | x0, x1, x2, x3, x4, x5, x6, x7 | ++impl_m!([m16; 8]: m16x8 | i16, u8 | test_v128 | x0, x1, x2, x3, x4, x5, x6, x7 | + From: m8x8, m32x8 | + /// A 128-bit vector mask with 8 `m16` lanes. + ); + +-impl_i!([i32; 4]: i32x4, m32x4 | i32 | test_v128 | x0, x1, x2, x3 | ++impl_i!([i32; 4]: i32x4, m32x4 | i32, u8 | test_v128 | x0, x1, x2, x3 | + From: i8x4, u8x4, i16x4, u16x4 | + /// A 128-bit vector with 4 `i32` lanes. + ); +-impl_u!([u32; 4]: u32x4, m32x4 | u32| test_v128 | x0, x1, x2, x3 | ++impl_u!([u32; 4]: u32x4, m32x4 | u32, u8 | test_v128 | x0, x1, x2, x3 | + From: u8x4, u16x4 | + /// A 128-bit vector with 4 `u32` lanes. + ); + impl_f!([f32; 4]: f32x4, m32x4 | f32 | test_v128 | x0, x1, x2, x3 | + From: i8x4, u8x4, i16x4, u16x4 | + /// A 128-bit vector with 4 `f32` lanes. + ); +-impl_m!([m32; 4]: m32x4 | i32 | test_v128 | x0, x1, x2, x3 | ++impl_m!([m32; 4]: m32x4 | i32, u8 | test_v128 | x0, x1, x2, x3 | + From: m8x4, m16x4, m64x4 | + /// A 128-bit vector mask with 4 `m32` lanes. + ); + +-impl_i!([i64; 2]: i64x2, m64x2 | i64 | test_v128 | x0, x1 | ++impl_i!([i64; 2]: i64x2, m64x2 | i64, u8 | test_v128 | x0, x1 | + From: i8x2, u8x2, i16x2, u16x2, i32x2, u32x2 | + /// A 128-bit vector with 2 `i64` lanes. + ); +-impl_u!([u64; 2]: u64x2, m64x2 | u64 | test_v128 | x0, x1 | ++impl_u!([u64; 2]: u64x2, m64x2 | u64, u8 | test_v128 | x0, x1 | + From: u8x2, u16x2, u32x2 | + /// A 128-bit vector with 2 `u64` lanes. + ); + impl_f!([f64; 2]: f64x2, m64x2 | f64 | test_v128 | x0, x1 | + From: i8x2, u8x2, i16x2, u16x2, i32x2, u32x2, f32x2 | + /// A 128-bit vector with 2 `f64` lanes. + ); +-impl_m!([m64; 2]: m64x2 | i64 | test_v128 | x0, x1 | ++impl_m!([m64; 2]: m64x2 | i64, u8 | test_v128 | x0, x1 | + From: m8x2, m16x2, m32x2, m128x2 | + /// A 128-bit vector mask with 2 `m64` lanes. + ); + +-impl_i!([i128; 1]: i128x1, m128x1 | i128 | test_v128 | x0 | ++impl_i!([i128; 1]: i128x1, m128x1 | i128, u8 | test_v128 | x0 | + From: /*i8x1, u8x1, i16x1, u16x1, i32x1, u32x1, i64x1, u64x1 */ | // FIXME: unary small vector types + /// A 128-bit vector with 1 `i128` lane. + ); +-impl_u!([u128; 1]: u128x1, m128x1 | u128 | test_v128 | x0 | ++impl_u!([u128; 1]: u128x1, m128x1 | u128, u8 | test_v128 | x0 | + From: /*u8x1, u16x1, u32x1, u64x1 */ | // FIXME: unary small vector types + /// A 128-bit vector with 1 `u128` lane. + ); +-impl_m!([m128; 1]: m128x1 | i128 | test_v128 | x0 | ++impl_m!([m128; 1]: m128x1 | i128, u8 | test_v128 | x0 | + From: /*m8x1, m16x1, m32x1, m64x1 */ | // FIXME: unary small vector types + /// A 128-bit vector mask with 1 `m128` lane. + ); +diff --git a/third_party/rust/packed_simd/src/v16.rs b/third_party/rust/packed_simd/src/v16.rs +--- a/third_party/rust/packed_simd/src/v16.rs ++++ b/third_party/rust/packed_simd/src/v16.rs +@@ -1,16 +1,16 @@ + //! 16-bit wide vector types + + use crate::*; + +-impl_i!([i8; 2]: i8x2, m8x2 | i8 | test_v16 | x0, x1 | ++impl_i!([i8; 2]: i8x2, m8x2 | i8, u8 | test_v16 | x0, x1 | + From: | + /// A 16-bit vector with 2 `i8` lanes. + ); +-impl_u!([u8; 2]: u8x2, m8x2 | u8 | test_v16 | x0, x1 | ++impl_u!([u8; 2]: u8x2, m8x2 | u8, u8 | test_v16 | x0, x1 | + From: | + /// A 16-bit vector with 2 `u8` lanes. + ); +-impl_m!([m8; 2]: m8x2 | i8 | test_v16 | x0, x1 | ++impl_m!([m8; 2]: m8x2 | i8, u8 | test_v16 | x0, x1 | + From: m16x2, m32x2, m64x2, m128x2 | + /// A 16-bit vector mask with 2 `m8` lanes. + ); +diff --git a/third_party/rust/packed_simd/src/v256.rs b/third_party/rust/packed_simd/src/v256.rs +--- a/third_party/rust/packed_simd/src/v256.rs ++++ b/third_party/rust/packed_simd/src/v256.rs +@@ -1,86 +1,86 @@ + //! 256-bit wide vector types +-#![rustfmt::skip] ++#[rustfmt::skip] + + use crate::*; + +-impl_i!([i8; 32]: i8x32, m8x32 | i8 | test_v256 | ++impl_i!([i8; 32]: i8x32, m8x32 | i8, u32 | test_v256 | + x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, + x16, x17, x18, x19, x20, x21, x22, x23, x24, x25, x26, x27, x28, x29, x30, x31 | + From: | + /// A 256-bit vector with 32 `i8` lanes. + ); +-impl_u!([u8; 32]: u8x32, m8x32 | u8 | test_v256 | ++impl_u!([u8; 32]: u8x32, m8x32 | u8, u32 | test_v256 | + x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, + x16, x17, x18, x19, x20, x21, x22, x23, x24, x25, x26, x27, x28, x29, x30, x31 | + From: | + /// A 256-bit vector with 32 `u8` lanes. + ); +-impl_m!([m8; 32]: m8x32 | i8 | test_v256 | ++impl_m!([m8; 32]: m8x32 | i8, u32 | test_v256 | + x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, + x16, x17, x18, x19, x20, x21, x22, x23, x24, x25, x26, x27, x28, x29, x30, x31 | + From: | + /// A 256-bit vector mask with 32 `m8` lanes. + ); + +-impl_i!([i16; 16]: i16x16, m16x16 | i16 | test_v256 | ++impl_i!([i16; 16]: i16x16, m16x16 | i16, u16 | test_v256 | + x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15 | + From: i8x16, u8x16 | + /// A 256-bit vector with 16 `i16` lanes. + ); +-impl_u!([u16; 16]: u16x16, m16x16 | u16 | test_v256 | ++impl_u!([u16; 16]: u16x16, m16x16 | u16, u16 | test_v256 | + x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15 | + From: u8x16 | + /// A 256-bit vector with 16 `u16` lanes. + ); +-impl_m!([m16; 16]: m16x16 | i16 | test_v256 | ++impl_m!([m16; 16]: m16x16 | i16, u16 | test_v256 | + x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15 | + From: m8x16 | + /// A 256-bit vector mask with 16 `m16` lanes. + ); + +-impl_i!([i32; 8]: i32x8, m32x8 | i32 | test_v256 | x0, x1, x2, x3, x4, x5, x6, x7 | ++impl_i!([i32; 8]: i32x8, m32x8 | i32, u8 | test_v256 | x0, x1, x2, x3, x4, x5, x6, x7 | + From: i8x8, u8x8, i16x8, u16x8 | + /// A 256-bit vector with 8 `i32` lanes. + ); +-impl_u!([u32; 8]: u32x8, m32x8 | u32 | test_v256 | x0, x1, x2, x3, x4, x5, x6, x7 | ++impl_u!([u32; 8]: u32x8, m32x8 | u32, u8 | test_v256 | x0, x1, x2, x3, x4, x5, x6, x7 | + From: u8x8, u16x8 | + /// A 256-bit vector with 8 `u32` lanes. + ); + impl_f!([f32; 8]: f32x8, m32x8 | f32 | test_v256 | x0, x1, x2, x3, x4, x5, x6, x7 | + From: i8x8, u8x8, i16x8, u16x8 | + /// A 256-bit vector with 8 `f32` lanes. + ); +-impl_m!([m32; 8]: m32x8 | i32 | test_v256 | x0, x1, x2, x3, x4, x5, x6, x7 | ++impl_m!([m32; 8]: m32x8 | i32, u8 | test_v256 | x0, x1, x2, x3, x4, x5, x6, x7 | + From: m8x8, m16x8 | + /// A 256-bit vector mask with 8 `m32` lanes. + ); + +-impl_i!([i64; 4]: i64x4, m64x4 | i64 | test_v256 | x0, x1, x2, x3 | ++impl_i!([i64; 4]: i64x4, m64x4 | i64, u8 | test_v256 | x0, x1, x2, x3 | + From: i8x4, u8x4, i16x4, u16x4, i32x4, u32x4 | + /// A 256-bit vector with 4 `i64` lanes. + ); +-impl_u!([u64; 4]: u64x4, m64x4 | u64 | test_v256 | x0, x1, x2, x3 | ++impl_u!([u64; 4]: u64x4, m64x4 | u64, u8 | test_v256 | x0, x1, x2, x3 | + From: u8x4, u16x4, u32x4 | + /// A 256-bit vector with 4 `u64` lanes. + ); + impl_f!([f64; 4]: f64x4, m64x4 | f64 | test_v256 | x0, x1, x2, x3 | + From: i8x4, u8x4, i16x4, u16x4, i32x4, u32x4, f32x4 | + /// A 256-bit vector with 4 `f64` lanes. + ); +-impl_m!([m64; 4]: m64x4 | i64 | test_v256 | x0, x1, x2, x3 | ++impl_m!([m64; 4]: m64x4 | i64, u8 | test_v256 | x0, x1, x2, x3 | + From: m8x4, m16x4, m32x4 | + /// A 256-bit vector mask with 4 `m64` lanes. + ); + +-impl_i!([i128; 2]: i128x2, m128x2 | i128 | test_v256 | x0, x1 | ++impl_i!([i128; 2]: i128x2, m128x2 | i128, u8 | test_v256 | x0, x1 | + From: i8x2, u8x2, i16x2, u16x2, i32x2, u32x2, i64x2, u64x2 | + /// A 256-bit vector with 2 `i128` lanes. + ); +-impl_u!([u128; 2]: u128x2, m128x2 | u128 | test_v256 | x0, x1 | ++impl_u!([u128; 2]: u128x2, m128x2 | u128, u8 | test_v256 | x0, x1 | + From: u8x2, u16x2, u32x2, u64x2 | + /// A 256-bit vector with 2 `u128` lanes. + ); +-impl_m!([m128; 2]: m128x2 | i128 | test_v256 | x0, x1 | ++impl_m!([m128; 2]: m128x2 | i128, u8 | test_v256 | x0, x1 | + From: m8x2, m16x2, m32x2, m64x2 | + /// A 256-bit vector mask with 2 `m128` lanes. + ); +diff --git a/third_party/rust/packed_simd/src/v32.rs b/third_party/rust/packed_simd/src/v32.rs +--- a/third_party/rust/packed_simd/src/v32.rs ++++ b/third_party/rust/packed_simd/src/v32.rs +@@ -1,29 +1,29 @@ + //! 32-bit wide vector types + + use crate::*; + +-impl_i!([i8; 4]: i8x4, m8x4 | i8 | test_v32 | x0, x1, x2, x3 | ++impl_i!([i8; 4]: i8x4, m8x4 | i8, u8 | test_v32 | x0, x1, x2, x3 | + From: | + /// A 32-bit vector with 4 `i8` lanes. + ); +-impl_u!([u8; 4]: u8x4, m8x4 | u8 | test_v32 | x0, x1, x2, x3 | ++impl_u!([u8; 4]: u8x4, m8x4 | u8, u8 | test_v32 | x0, x1, x2, x3 | + From: | + /// A 32-bit vector with 4 `u8` lanes. + ); +-impl_m!([m8; 4]: m8x4 | i8 | test_v32 | x0, x1, x2, x3 | ++impl_m!([m8; 4]: m8x4 | i8, u8 | test_v32 | x0, x1, x2, x3 | + From: m16x4, m32x4, m64x4 | + /// A 32-bit vector mask with 4 `m8` lanes. + ); + +-impl_i!([i16; 2]: i16x2, m16x2 | i16 | test_v32 | x0, x1 | ++impl_i!([i16; 2]: i16x2, m16x2 | i16, u8 | test_v32 | x0, x1 | + From: i8x2, u8x2 | + /// A 32-bit vector with 2 `i16` lanes. + ); +-impl_u!([u16; 2]: u16x2, m16x2 | u16 | test_v32 | x0, x1 | ++impl_u!([u16; 2]: u16x2, m16x2 | u16, u8 | test_v32 | x0, x1 | + From: u8x2 | + /// A 32-bit vector with 2 `u16` lanes. + ); +-impl_m!([m16; 2]: m16x2 | i16 | test_v32 | x0, x1 | ++impl_m!([m16; 2]: m16x2 | i16, u8 | test_v32 | x0, x1 | + From: m8x2, m32x2, m64x2, m128x2 | + /// A 32-bit vector mask with 2 `m16` lanes. + ); +diff --git a/third_party/rust/packed_simd/src/v512.rs b/third_party/rust/packed_simd/src/v512.rs +--- a/third_party/rust/packed_simd/src/v512.rs ++++ b/third_party/rust/packed_simd/src/v512.rs +@@ -1,99 +1,99 @@ + //! 512-bit wide vector types +-#![rustfmt::skip] ++#[rustfmt::skip] + + use crate::*; + +-impl_i!([i8; 64]: i8x64, m8x64 | i8 | test_v512 | ++impl_i!([i8; 64]: i8x64, m8x64 | i8, u64 | test_v512 | + x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, + x16, x17, x18, x19, x20, x21, x22, x23, x24, x25, x26, x27, x28, x29, x30, x31, + x32, x33, x34, x35, x36, x37, x38, x39, x40, x41, x42, x43, x44, x45, x46, x47, + x48, x49, x50, x51, x52, x53, x54, x55, x56, x57, x58, x59, x60, x61, x62, x63 | + From: | + /// A 512-bit vector with 64 `i8` lanes. + ); +-impl_u!([u8; 64]: u8x64, m8x64 | u8 | test_v512 | ++impl_u!([u8; 64]: u8x64, m8x64 | u8, u64 | test_v512 | + x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, + x16, x17, x18, x19, x20, x21, x22, x23, x24, x25, x26, x27, x28, x29, x30, x31, + x32, x33, x34, x35, x36, x37, x38, x39, x40, x41, x42, x43, x44, x45, x46, x47, + x48, x49, x50, x51, x52, x53, x54, x55, x56, x57, x58, x59, x60, x61, x62, x63 | + From: | + /// A 512-bit vector with 64 `u8` lanes. + ); +-impl_m!([m8; 64]: m8x64 | i8 | test_v512 | ++impl_m!([m8; 64]: m8x64 | i8, u64 | test_v512 | + x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, + x16, x17, x18, x19, x20, x21, x22, x23, x24, x25, x26, x27, x28, x29, x30, x31, + x32, x33, x34, x35, x36, x37, x38, x39, x40, x41, x42, x43, x44, x45, x46, x47, + x48, x49, x50, x51, x52, x53, x54, x55, x56, x57, x58, x59, x60, x61, x62, x63 | + From: | + /// A 512-bit vector mask with 64 `m8` lanes. + ); + +-impl_i!([i16; 32]: i16x32, m16x32 | i16 | test_v512 | ++impl_i!([i16; 32]: i16x32, m16x32 | i16, u32 | test_v512 | + x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, + x16, x17, x18, x19, x20, x21, x22, x23, x24, x25, x26, x27, x28, x29, x30, x31 | + From: i8x32, u8x32 | + /// A 512-bit vector with 32 `i16` lanes. + ); +-impl_u!([u16; 32]: u16x32, m16x32 | u16 | test_v512 | ++impl_u!([u16; 32]: u16x32, m16x32 | u16, u32 | test_v512 | + x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, + x16, x17, x18, x19, x20, x21, x22, x23, x24, x25, x26, x27, x28, x29, x30, x31 | + From: u8x32 | + /// A 512-bit vector with 32 `u16` lanes. + ); +-impl_m!([m16; 32]: m16x32 | i16 | test_v512 | ++impl_m!([m16; 32]: m16x32 | i16, u32 | test_v512 | + x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, + x16, x17, x18, x19, x20, x21, x22, x23, x24, x25, x26, x27, x28, x29, x30, x31 | + From: m8x32 | + /// A 512-bit vector mask with 32 `m16` lanes. + ); + +-impl_i!([i32; 16]: i32x16, m32x16 | i32 | test_v512 | ++impl_i!([i32; 16]: i32x16, m32x16 | i32, u16 | test_v512 | + x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15 | + From: i8x16, u8x16, i16x16, u16x16 | + /// A 512-bit vector with 16 `i32` lanes. + ); +-impl_u!([u32; 16]: u32x16, m32x16 | u32 | test_v512 | ++impl_u!([u32; 16]: u32x16, m32x16 | u32, u16 | test_v512 | + x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15 | + From: u8x16, u16x16 | + /// A 512-bit vector with 16 `u32` lanes. + ); + impl_f!([f32; 16]: f32x16, m32x16 | f32 | test_v512 | + x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15 | + From: i8x16, u8x16, i16x16, u16x16 | + /// A 512-bit vector with 16 `f32` lanes. + ); +-impl_m!([m32; 16]: m32x16 | i32 | test_v512 | ++impl_m!([m32; 16]: m32x16 | i32, u16 | test_v512 | + x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15 | + From: m8x16, m16x16 | + /// A 512-bit vector mask with 16 `m32` lanes. + ); + +-impl_i!([i64; 8]: i64x8, m64x8 | i64 | test_v512 | x0, x1, x2, x3, x4, x5, x6, x7 | ++impl_i!([i64; 8]: i64x8, m64x8 | i64, u8 | test_v512 | x0, x1, x2, x3, x4, x5, x6, x7 | + From: i8x8, u8x8, i16x8, u16x8, i32x8, u32x8 | + /// A 512-bit vector with 8 `i64` lanes. + ); +-impl_u!([u64; 8]: u64x8, m64x8 | u64 | test_v512 | x0, x1, x2, x3, x4, x5, x6, x7 | ++impl_u!([u64; 8]: u64x8, m64x8 | u64, u8 | test_v512 | x0, x1, x2, x3, x4, x5, x6, x7 | + From: u8x8, u16x8, u32x8 | + /// A 512-bit vector with 8 `u64` lanes. + ); + impl_f!([f64; 8]: f64x8, m64x8 | f64 | test_v512 | x0, x1, x2, x3, x4, x5, x6, x7 | + From: i8x8, u8x8, i16x8, u16x8, i32x8, u32x8, f32x8 | + /// A 512-bit vector with 8 `f64` lanes. + ); +-impl_m!([m64; 8]: m64x8 | i64 | test_v512 | x0, x1, x2, x3, x4, x5, x6, x7 | ++impl_m!([m64; 8]: m64x8 | i64, u8 | test_v512 | x0, x1, x2, x3, x4, x5, x6, x7 | + From: m8x8, m16x8, m32x8 | + /// A 512-bit vector mask with 8 `m64` lanes. + ); + +-impl_i!([i128; 4]: i128x4, m128x4 | i128 | test_v512 | x0, x1, x2, x3 | ++impl_i!([i128; 4]: i128x4, m128x4 | i128, u8 | test_v512 | x0, x1, x2, x3 | + From: i8x4, u8x4, i16x4, u16x4, i32x4, u32x4, i64x4, u64x4 | + /// A 512-bit vector with 4 `i128` lanes. + ); +-impl_u!([u128; 4]: u128x4, m128x4 | u128 | test_v512 | x0, x1, x2, x3 | ++impl_u!([u128; 4]: u128x4, m128x4 | u128, u8 | test_v512 | x0, x1, x2, x3 | + From: u8x4, u16x4, u32x4, u64x4 | + /// A 512-bit vector with 4 `u128` lanes. + ); +-impl_m!([m128; 4]: m128x4 | i128 | test_v512 | x0, x1, x2, x3 | ++impl_m!([m128; 4]: m128x4 | i128, u8 | test_v512 | x0, x1, x2, x3 | + From: m8x4, m16x4, m32x4, m64x4 | + /// A 512-bit vector mask with 4 `m128` lanes. + ); +diff --git a/third_party/rust/packed_simd/src/v64.rs b/third_party/rust/packed_simd/src/v64.rs +--- a/third_party/rust/packed_simd/src/v64.rs ++++ b/third_party/rust/packed_simd/src/v64.rs +@@ -1,66 +1,66 @@ + //! 64-bit wide vector types +-#![rustfmt::skip] ++#[rustfmt::skip] + + use super::*; + +-impl_i!([i8; 8]: i8x8, m8x8 | i8 | test_v64 | x0, x1, x2, x3, x4, x5, x6, x7 | ++impl_i!([i8; 8]: i8x8, m8x8 | i8, u8 | test_v64 | x0, x1, x2, x3, x4, x5, x6, x7 | + From: | + /// A 64-bit vector with 8 `i8` lanes. + ); +-impl_u!([u8; 8]: u8x8, m8x8 | u8 | test_v64 | x0, x1, x2, x3, x4, x5, x6, x7 | ++impl_u!([u8; 8]: u8x8, m8x8 | u8, u8 | test_v64 | x0, x1, x2, x3, x4, x5, x6, x7 | + From: | + /// A 64-bit vector with 8 `u8` lanes. + ); +-impl_m!([m8; 8]: m8x8 | i8 | test_v64 | x0, x1, x2, x3, x4, x5, x6, x7 | ++impl_m!([m8; 8]: m8x8 | i8, u8 | test_v64 | x0, x1, x2, x3, x4, x5, x6, x7 | + From: m16x8, m32x8 | + /// A 64-bit vector mask with 8 `m8` lanes. + ); + +-impl_i!([i16; 4]: i16x4, m16x4 | i16 | test_v64 | x0, x1, x2, x3 | ++impl_i!([i16; 4]: i16x4, m16x4 | i16, u8 | test_v64 | x0, x1, x2, x3 | + From: i8x4, u8x4 | + /// A 64-bit vector with 4 `i16` lanes. + ); +-impl_u!([u16; 4]: u16x4, m16x4 | u16 | test_v64 | x0, x1, x2, x3 | ++impl_u!([u16; 4]: u16x4, m16x4 | u16, u8 | test_v64 | x0, x1, x2, x3 | + From: u8x4 | + /// A 64-bit vector with 4 `u16` lanes. + ); +-impl_m!([m16; 4]: m16x4 | i16 | test_v64 | x0, x1, x2, x3 | ++impl_m!([m16; 4]: m16x4 | i16, u8 | test_v64 | x0, x1, x2, x3 | + From: m8x4, m32x4, m64x4 | + /// A 64-bit vector mask with 4 `m16` lanes. + ); + +-impl_i!([i32; 2]: i32x2, m32x2 | i32 | test_v64 | x0, x1 | ++impl_i!([i32; 2]: i32x2, m32x2 | i32, u8 | test_v64 | x0, x1 | + From: i8x2, u8x2, i16x2, u16x2 | + /// A 64-bit vector with 2 `i32` lanes. + ); +-impl_u!([u32; 2]: u32x2, m32x2 | u32 | test_v64 | x0, x1 | ++impl_u!([u32; 2]: u32x2, m32x2 | u32, u8 | test_v64 | x0, x1 | + From: u8x2, u16x2 | + /// A 64-bit vector with 2 `u32` lanes. + ); +-impl_m!([m32; 2]: m32x2 | i32 | test_v64 | x0, x1 | ++impl_m!([m32; 2]: m32x2 | i32, u8 | test_v64 | x0, x1 | + From: m8x2, m16x2, m64x2, m128x2 | + /// A 64-bit vector mask with 2 `m32` lanes. + ); + impl_f!([f32; 2]: f32x2, m32x2 | f32 | test_v64 | x0, x1 | + From: i8x2, u8x2, i16x2, u16x2 | + /// A 64-bit vector with 2 `f32` lanes. + ); + + /* +-impl_i!([i64; 1]: i64x1, m64x1 | i64 | test_v64 | x0 | ++impl_i!([i64; 1]: i64x1, m64x1 | i64, u8 | test_v64 | x0 | + From: /*i8x1, u8x1, i16x1, u16x1, i32x1, u32x1*/ | // FIXME: primitive to vector conversion + /// A 64-bit vector with 1 `i64` lanes. + ); +-impl_u!([u64; 1]: u64x1, m64x1 | u64 | test_v64 | x0 | ++impl_u!([u64; 1]: u64x1, m64x1 | u64, u8 | test_v64 | x0 | + From: /*u8x1, u16x1, u32x1*/ | // FIXME: primitive to vector conversion + /// A 64-bit vector with 1 `u64` lanes. + ); +-impl_m!([m64; 1]: m64x1 | i64 | test_v64 | x0 | ++impl_m!([m64; 1]: m64x1 | i64, u8 | test_v64 | x0 | + From: /*m8x1, m16x1, m32x1, */ m128x1 | // FIXME: unary small vector types + /// A 64-bit vector mask with 1 `m64` lanes. + ); + impl_f!([f64; 1]: f64x1, m64x1 | f64 | test_v64 | x0 | + From: /*i8x1, u8x1, i16x1, u16x1, i32x1, u32x1, f32x1*/ | // FIXME: unary small vector types + /// A 64-bit vector with 1 `f64` lanes. + ); + */ +diff --git a/third_party/rust/packed_simd/src/vPtr.rs b/third_party/rust/packed_simd/src/vPtr.rs +--- a/third_party/rust/packed_simd/src/vPtr.rs ++++ b/third_party/rust/packed_simd/src/vPtr.rs +@@ -1,10 +1,10 @@ + //! Vectors of pointers +-#![rustfmt::skip] ++#[rustfmt::skip] + + use crate::*; + + impl_const_p!( + [*const T; 2]: cptrx2, msizex2, usizex2, isizex2 | test_v128 | x0, x1 | From: | + /// A vector with 2 `*const T` lanes + ); + +diff --git a/third_party/rust/packed_simd/src/vSize.rs b/third_party/rust/packed_simd/src/vSize.rs +--- a/third_party/rust/packed_simd/src/vSize.rs ++++ b/third_party/rust/packed_simd/src/vSize.rs +@@ -1,53 +1,53 @@ + //! Vectors with pointer-sized elements + + use crate::codegen::pointer_sized_int::{isize_, usize_}; + use crate::*; + +-impl_i!([isize; 2]: isizex2, msizex2 | isize_ | test_v128 | ++impl_i!([isize; 2]: isizex2, msizex2 | isize_, u8 | test_v128 | + x0, x1| + From: | + /// A vector with 2 `isize` lanes. + ); + +-impl_u!([usize; 2]: usizex2, msizex2 | usize_ | test_v128 | ++impl_u!([usize; 2]: usizex2, msizex2 | usize_, u8 | test_v128 | + x0, x1| + From: | + /// A vector with 2 `usize` lanes. + ); +-impl_m!([msize; 2]: msizex2 | isize_ | test_v128 | ++impl_m!([msize; 2]: msizex2 | isize_, u8 | test_v128 | + x0, x1 | + From: | + /// A vector mask with 2 `msize` lanes. + ); + +-impl_i!([isize; 4]: isizex4, msizex4 | isize_ | test_v256 | ++impl_i!([isize; 4]: isizex4, msizex4 | isize_, u8 | test_v256 | + x0, x1, x2, x3 | + From: | + /// A vector with 4 `isize` lanes. + ); +-impl_u!([usize; 4]: usizex4, msizex4 | usize_ | test_v256 | ++impl_u!([usize; 4]: usizex4, msizex4 | usize_, u8 | test_v256 | + x0, x1, x2, x3| + From: | + /// A vector with 4 `usize` lanes. + ); +-impl_m!([msize; 4]: msizex4 | isize_ | test_v256 | ++impl_m!([msize; 4]: msizex4 | isize_, u8 | test_v256 | + x0, x1, x2, x3 | + From: | + /// A vector mask with 4 `msize` lanes. + ); + +-impl_i!([isize; 8]: isizex8, msizex8 | isize_ | test_v512 | ++impl_i!([isize; 8]: isizex8, msizex8 | isize_, u8 | test_v512 | + x0, x1, x2, x3, x4, x5, x6, x7 | + From: | +- /// A vector with 4 `isize` lanes. ++ /// A vector with 8 `isize` lanes. + ); +-impl_u!([usize; 8]: usizex8, msizex8 | usize_ | test_v512 | ++impl_u!([usize; 8]: usizex8, msizex8 | usize_, u8 | test_v512 | + x0, x1, x2, x3, x4, x5, x6, x7 | + From: | + /// A vector with 8 `usize` lanes. + ); +-impl_m!([msize; 8]: msizex8 | isize_ | test_v512 | ++impl_m!([msize; 8]: msizex8 | isize_, u8 | test_v512 | + x0, x1, x2, x3, x4, x5, x6, x7 | + From: | + /// A vector mask with 8 `msize` lanes. + ); +diff --git a/third_party/rust/packed_simd/tests/endianness.rs b/third_party/rust/packed_simd/tests/endianness.rs +--- a/third_party/rust/packed_simd/tests/endianness.rs ++++ b/third_party/rust/packed_simd/tests/endianness.rs +@@ -12,51 +12,51 @@ fn endian_indexing() { + assert_eq!(v.extract(1), 1); + assert_eq!(v.extract(2), 2); + assert_eq!(v.extract(3), 3); + } + + #[cfg_attr(not(target_arch = "wasm32"), test)] + #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] + fn endian_bitcasts() { +- #[cfg_attr(rustfmt, rustfmt_skip)] ++ #[rustfmt::skip] + let x = i8x16::new( + 0, 1, 2, 3, 4, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 14, 15, + ); + let t: i16x8 = unsafe { mem::transmute(x) }; + let e: i16x8 = if cfg!(target_endian = "little") { + i16x8::new(256, 770, 1284, 1798, 2312, 2826, 3340, 3854) + } else { + i16x8::new(1, 515, 1029, 1543, 2057, 2571, 3085, 3599) + }; + assert_eq!(t, e); + } + + #[cfg_attr(not(target_arch = "wasm32"), test)] + #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] + fn endian_casts() { +- #[cfg_attr(rustfmt, rustfmt_skip)] ++ #[rustfmt::skip] + let x = i8x16::new( + 0, 1, 2, 3, 4, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 14, 15, + ); + let t: i16x16 = x.into(); // simd_cast +- #[cfg_attr(rustfmt, rustfmt_skip)] ++ #[rustfmt::skip] + let e = i16x16::new( + 0, 1, 2, 3, 4, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 14, 15, + ); + assert_eq!(t, e); + } + + #[cfg_attr(not(target_arch = "wasm32"), test)] + #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] + fn endian_load_and_stores() { +- #[cfg_attr(rustfmt, rustfmt_skip)] ++ #[rustfmt::skip] + let x = i8x16::new( + 0, 1, 2, 3, 4, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 14, 15, + ); + let mut y: [i16; 8] = [0; 8]; + x.write_to_slice_unaligned(unsafe { + slice::from_raw_parts_mut(&mut y as *mut _ as *mut i8, 16) + }); +@@ -77,56 +77,61 @@ fn endian_load_and_stores() { + #[cfg_attr(not(target_arch = "wasm32"), test)] + #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] + fn endian_array_union() { + union A { + data: [f32; 4], + vec: f32x4, + } + let x: [f32; 4] = unsafe { A { vec: f32x4::new(0., 1., 2., 3.) }.data }; +- assert_eq!(x[0], 0_f32); +- assert_eq!(x[1], 1_f32); +- assert_eq!(x[2], 2_f32); +- assert_eq!(x[3], 3_f32); ++ // As all of these are integer values within the mantissa^1 range, it ++ // would be very unusual for them to actually fail to compare. ++ #[allow(clippy::float_cmp)] ++ { ++ assert_eq!(x[0], 0_f32); ++ assert_eq!(x[1], 1_f32); ++ assert_eq!(x[2], 2_f32); ++ assert_eq!(x[3], 3_f32); ++ } + let y: f32x4 = unsafe { A { data: [3., 2., 1., 0.] }.vec }; + assert_eq!(y, f32x4::new(3., 2., 1., 0.)); + + union B { + data: [i8; 16], + vec: i8x16, + } +- #[cfg_attr(rustfmt, rustfmt_skip)] ++ #[rustfmt::skip] + let x = i8x16::new( + 0, 1, 2, 3, 4, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 14, 15, + ); + let x: [i8; 16] = unsafe { B { vec: x }.data }; + +- for i in 0..16 { +- assert_eq!(x[i], i as i8); ++ for (i, v) in x.iter().enumerate() { ++ assert_eq!(i as i8, *v); + } + +- #[cfg_attr(rustfmt, rustfmt_skip)] ++ #[rustfmt::skip] + let y = [ + 15, 14, 13, 12, 11, 19, 9, 8, + 7, 6, 5, 4, 3, 2, 1, 0 + ]; +- #[cfg_attr(rustfmt, rustfmt_skip)] ++ #[rustfmt::skip] + let e = i8x16::new( + 15, 14, 13, 12, 11, 19, 9, 8, + 7, 6, 5, 4, 3, 2, 1, 0 + ); + let z = unsafe { B { data: y }.vec }; + assert_eq!(z, e); + + union C { + data: [i16; 8], + vec: i8x16, + } +- #[cfg_attr(rustfmt, rustfmt_skip)] ++ #[rustfmt::skip] + let x = i8x16::new( + 0, 1, 2, 3, 4, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 14, 15, + ); + let x: [i16; 8] = unsafe { C { vec: x }.data }; + + let e: [i16; 8] = if cfg!(target_endian = "little") { + [256, 770, 1284, 1798, 2312, 2826, 3340, 3854] +@@ -140,31 +145,36 @@ fn endian_array_union() { + #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] + fn endian_tuple_access() { + type F32x4T = (f32, f32, f32, f32); + union A { + data: F32x4T, + vec: f32x4, + } + let x: F32x4T = unsafe { A { vec: f32x4::new(0., 1., 2., 3.) }.data }; +- assert_eq!(x.0, 0_f32); +- assert_eq!(x.1, 1_f32); +- assert_eq!(x.2, 2_f32); +- assert_eq!(x.3, 3_f32); ++ // As all of these are integer values within the mantissa^1 range, it ++ // would be very unusual for them to actually fail to compare. ++ #[allow(clippy::float_cmp)] ++ { ++ assert_eq!(x.0, 0_f32); ++ assert_eq!(x.1, 1_f32); ++ assert_eq!(x.2, 2_f32); ++ assert_eq!(x.3, 3_f32); ++ } + let y: f32x4 = unsafe { A { data: (3., 2., 1., 0.) }.vec }; + assert_eq!(y, f32x4::new(3., 2., 1., 0.)); + +- #[cfg_attr(rustfmt, rustfmt_skip)] ++ #[rustfmt::skip] + type I8x16T = (i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8); + union B { + data: I8x16T, + vec: i8x16, + } + +- #[cfg_attr(rustfmt, rustfmt_skip)] ++ #[rustfmt::skip] + let x = i8x16::new( + 0, 1, 2, 3, 4, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 14, 15, + ); + let x: I8x16T = unsafe { B { vec: x }.data }; + + assert_eq!(x.0, 0); + assert_eq!(x.1, 1); +@@ -178,37 +188,37 @@ fn endian_tuple_access() { + assert_eq!(x.9, 9); + assert_eq!(x.10, 10); + assert_eq!(x.11, 11); + assert_eq!(x.12, 12); + assert_eq!(x.13, 13); + assert_eq!(x.14, 14); + assert_eq!(x.15, 15); + +- #[cfg_attr(rustfmt, rustfmt_skip)] ++ #[rustfmt::skip] + let y = ( + 15, 14, 13, 12, 11, 10, 9, 8, + 7, 6, 5, 4, 3, 2, 1, 0 + ); + let z: i8x16 = unsafe { B { data: y }.vec }; +- #[cfg_attr(rustfmt, rustfmt_skip)] ++ #[rustfmt::skip] + let e = i8x16::new( + 15, 14, 13, 12, 11, 10, 9, 8, + 7, 6, 5, 4, 3, 2, 1, 0 + ); + assert_eq!(e, z); + +- #[cfg_attr(rustfmt, rustfmt_skip)] ++ #[rustfmt::skip] + type I16x8T = (i16, i16, i16, i16, i16, i16, i16, i16); + union C { + data: I16x8T, + vec: i8x16, + } + +- #[cfg_attr(rustfmt, rustfmt_skip)] ++ #[rustfmt::skip] + let x = i8x16::new( + 0, 1, 2, 3, 4, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 14, 15, + ); + let x: I16x8T = unsafe { C { vec: x }.data }; + + let e: [i16; 8] = if cfg!(target_endian = "little") { + [256, 770, 1284, 1798, 2312, 2826, 3340, 3854] +@@ -219,28 +229,28 @@ fn endian_tuple_access() { + assert_eq!(x.1, e[1]); + assert_eq!(x.2, e[2]); + assert_eq!(x.3, e[3]); + assert_eq!(x.4, e[4]); + assert_eq!(x.5, e[5]); + assert_eq!(x.6, e[6]); + assert_eq!(x.7, e[7]); + +- #[cfg_attr(rustfmt, rustfmt_skip)] ++ #[rustfmt::skip] + #[repr(C)] + #[derive(Copy ,Clone)] + pub struct Tup(pub i8, pub i8, pub i16, pub i8, pub i8, pub i16, + pub i8, pub i8, pub i16, pub i8, pub i8, pub i16); + + union D { + data: Tup, + vec: i8x16, + } + +- #[cfg_attr(rustfmt, rustfmt_skip)] ++ #[rustfmt::skip] + let x = i8x16::new( + 0, 1, 2, 3, 4, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 14, 15, + ); + let x: Tup = unsafe { D { vec: x }.data }; + + let e: [i16; 12] = if cfg!(target_endian = "little") { + [0, 1, 770, 4, 5, 1798, 8, 9, 2826, 12, 13, 3854] + diff --git a/libre-testing/icedove/vendor-prefs.js b/libre-testing/icedove/vendor-prefs.js new file mode 100644 index 0000000..701c33e --- /dev/null +++ b/libre-testing/icedove/vendor-prefs.js @@ -0,0 +1,32 @@ +// Use LANG environment variable to choose locale +pref("intl.locale.requested", ""); + +// Use system-provided dictionaries +pref("spellchecker.dictionary_path", "/usr/share/hunspell"); + +// Disable default mailer checking +pref("mail.shell.checkDefaultMail", false); + +// Don't disable our bundled extensions in the application directory +pref("extensions.autoDisableScopes", 11); +pref("extensions.shownSelectionUI", true); + +// Disable telemetry +pref("datareporting.healthreport.uploadEnabled", false); +pref("datareporting.policy.dataSubmissionEnabled", false); +pref("toolkit.telemetry.archive.enabled", false); + +// Disable Social API for content +pref("social.remote-install.enabled", false); +pref("social.toast-notifications.enabled", false); + +// Make sure that whitelisted and directory installs are empty +pref("social.whitelist", ""); +pref("social.directories", ""); + +// Disable the GeoLocation API for content +pref("geo.enabled", false); + +// TODO: this "whats new" page should be in the branding package or abslibre +// Pointing the "Help -> What's new" menu entry to mozilla.debian.net +//pref("mailnews.start_page.override_url", "http://wiki.debian.org/Icedove/WhatsNew45"); diff --git a/libre/icedove/PKGBUILD b/libre/icedove/PKGBUILD index f3b15e8..f5d3090 100644 --- a/libre/icedove/PKGBUILD +++ b/libre/icedove/PKGBUILD @@ -21,85 +21,94 @@ _pkgname=thunderbird pkgname=icedove +replaces=("$_pkgname") epoch=1 -pkgver=78.9.1 +pkgver=68.9.0 pkgrel=1 pkgrel+=.parabola1 -_brandingver=78.9 +_brandingver=68.6 _brandingrel=1 pkgdesc='Standalone mail and news reader based on Mozilla Thunderbird' -url=https://wiki.parabola.nu/${pkgname} +url="https://wiki.parabola.nu/$pkgname" arch=(x86_64) arch+=(i686 armv7h) license=(MPL GPL LGPL) -depends=( - glibc gtk3 libgdk-3.so mime-types dbus libdbus-1.so dbus-glib alsa-lib nss - hunspell sqlite ttf-font libvpx libvpx.so zlib bzip2 botan libwebp libevent - libjpeg-turbo libffi nspr gcc-libs libx11 libxrender libxfixes libxext - libxcomposite libxdamage pango libpango-1.0.so cairo gdk-pixbuf2 icu - libicui18n.so libicuuc.so freetype2 libfreetype.so fontconfig - libfontconfig.so glib2 libglib-2.0.so pixman libpixman-1.so gnupg -) -optdepends=( - 'libotr: OTR support for active one-to-one chats' -) -makedepends=( - unzip zip diffutils python python-setuptools yasm nasm mesa imake libpulse - inetutils xorg-server-xvfb autoconf2.13 rust clang llvm gtk2 cbindgen nodejs - gawk perl findutils libotr -) -#makedepends[15]='llvm10' # FIXME: DEBUG: | rustup: error while loading shared libraries: libLLVM-10.so: cannot open shared object file: No such file or directory -# # ERROR: Command `rustup which rustc` failed with exit status 127. -makedepends+=(quilt imagemagick) -replaces=(${_pkgname}) +depends=(gtk3 libxt startup-notification mime-types dbus-glib alsa-lib + nss hunspell sqlite ttf-font) # libvpx +depends+=(libicui18n.so libicuuc.so) +makedepends=(unzip zip diffutils python python2 yasm nasm mesa imake libpulse inetutils xorg-server-xvfb + autoconf2.13 rust clang llvm gtk2 cbindgen nodejs) +makedepends+=(quilt mozilla-searchplugins imagemagick) +optdepends=('libcanberra: sound support') options=(!emptydirs !makeflags) source=(https://ftp.mozilla.org/pub/mozilla.org/thunderbird/releases/$pkgver/source/thunderbird-$pkgver.source.tar.xz{,.asc} - $pkgname.desktop - vendor-prefs.js - distribution.ini - mozconfig.cfg - configure-fix-passing-system-bzip2-ldflags.patch - thunderbird-78.5-rust-1.48.patch) -source+=(https://repo.parabola.nu/other/icedove/${pkgname}_$_brandingver-$_brandingrel.branding.tar.xz{,.sig}) + $pkgname.desktop) +source+=(https://repo.parabola.nu/other/icedove/${pkgname}_$_brandingver-$_brandingrel.branding.tar.xz{,.sig} + libre-searchengines.patch + mozilla-1338795-regression.patch) source_armv7h=(arm-wasm-vfp.patch) -sha512sums=('fa27a327ce10a0c16877ac02338aace257f60f69af40d12ae5bb2055f6536db9ba45995765ac0eaa1aea2fa2b353ac9dc6eb06fcdf6cb4ae6fafcd65fe5970c6' +sha512sums=('891472c95ba6ff46061131504e89010da512a84b0e1dea0482e603fd4c87f11e099280a245c7dd9fc9320c48229c26602565c089d86f1a1f4271b29b6fc606f0' 'SKIP' 'a3c9815491d9bed0440c60f35867a5b8a2a1343521f288035fcc46e651a11b926c75a9eca2d262b43d510a7a7119709b53637f1b00ddbbee8e5b0a4b33d7b8fd' - 'e21d30a8b79724eda3488ac2bf9dfeb0c7f6bf39e59c37f17574b529d33043765eb54408a55fcbf6f3afa7a58ca99124992d443cdff23ac5c9bdbff33c75f60f' - '31d46f91d9612d30d8553a19d0d309d743467e58b568a4aeea3caf6bd805ba00656561c84a1511c59bce1cf24ba323bfad2cd26a19985f1bf7dfb6d282642972' - '1eba1593ff0a9642d89e6d3e03388b1aef00437b2f6c1f0d81d250d9845b80e057c246eaeb31d8d22001abd65556a9603d1db597baf864481a5bfb7000886b29' - 'e3ed2708b8354015cb3d2c81048d1ce4932d1effbe2b40efa7cf9b45c1b923b9fd708645e2f8aa0136a485a3f7ce6b396b85721aaf535a4a764fd5005fb7e222' - 'bbb8b0e7b9c67372eb22e1d6b6b5758fe504ded84c40a076d4a064374a1bf34ac12d5b514b328ac9ca984d976b9e0fbde81e68a66bec915c997d6be0c0917584') + '5784493253f9b2b231a7f18d7c3c4a4bb9aec7ac4fa801772ac223342676e388ae0c094b95d89d92c1bd38c2f19feb6f51e074d0ea20228a256b6240ecf34832' + 'SKIP' + '3f3160441aa17a50b8bf9f95a0fed8e3428864901d7368409903289f069f51fa94e24b6140bf17981b91b55df77c7c29adb870dda9f1596a77ce1a54a62cac00' + 'f4e892fc7af85877ef6cedd82313f6c0f335cb676cfb30badaa127c51aed00773212b99f1598f5709d6f481f12264463d6334bcde8e8da38ec1ea666622d28a1') sha512sums_armv7h=('c25883c4860e511a99d9fbfba5b824145c0862729101721605725f609ca2a41848b741dd100eff390f57031dc5f14af3ea30133de30f75cb20197c420ae20972') -sha512sums+=('78fee952c9bc826a0a7ec262d442150177bf887349641279dafae803b9832a0dd9b8d0722cc084459077a5310eb4f6de6a8d7ffaff6741afe1359f292a373f34' - 'SKIP') validpgpkeys=(14F26682D0916CDD81E37B6D61B7B526D98F0353) # Mozilla Software Releases -validpgpkeys+=(BFA8008A8265677063B11BF47171986E4B745536 # Andreas Grapentin - 3954A7AB837D0EA9CFA9798925DB7D9B5A8D4B40) # bill-auger - +validpgpkeys+=(BFA8008A8265677063B11BF47171986E4B745536) # Andreas Grapentin prepare() { cd $_pkgname-$pkgver - echo "${noextract[@]}" + # see: https://labs.parabola.nu/issues/2267 + # upstream BR: https://bugzilla.mozilla.org/show_bug.cgi?id=1628296 + patch -Np1 -i "$srcdir"/mozilla-1338795-regression.patch - local src - for src in "${source[@]}"; do - src="${src%%::*}" - src="${src##*/}" - [[ $src = *.patch ]] || continue - [[ $src = arm-wasm-vfp.patch ]] && continue # defer parabola patches + cat >.mozconfig < error: unknown argument: '-fvar-tracking-assignments' CFLAGS="${CFLAGS/-fvar-tracking-assignments/}" @@ -202,14 +202,52 @@ build() { } package() { - optdepends=('libcanberra: sound support') - cd $_pkgname-$pkgver DESTDIR="$pkgdir" ./mach install - install -Dm 644 ../vendor-prefs.js -t "$pkgdir/usr/lib/$pkgname/defaults/pref" - install -Dm 644 ../distribution.ini -t "$pkgdir/usr/lib/$pkgname/distribution" - install -Dm 644 ../$pkgname.desktop -t "$pkgdir/usr/share/applications" + _vendorjs="$pkgdir/usr/lib/$pkgname/defaults/preferences/vendor.js" + install -Dm644 /dev/stdin "$_vendorjs" < What's new" menu entry to mozilla.debian.net +//pref("mailnews.start_page.override_url", "http://wiki.debian.org/Icedove/WhatsNew45"); +END + + _distini="$pkgdir/usr/lib/$pkgname/distribution/distribution.ini" + install -Dm644 /dev/stdin "$_distini" < -Date: Sun, 8 Nov 2020 13:26:47 +0100 -Subject: [PATCH] configure: fix passing system bzip2 ldflags - ---- - comm/third_party/openpgp.configure | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/comm/third_party/openpgp.configure b/comm/third_party/openpgp.configure -index 2f9c796..2cbc907 100644 ---- a/comm/third_party/openpgp.configure -+++ b/comm/third_party/openpgp.configure -@@ -80,7 +80,7 @@ with only_when('--enable-compile-environment'): - if bzip2_pkg: - cflags = list(bzip2_pkg.cflags) - libs = bzip2_pkg.libs -- return namespace(cflags=cflags, libs=libs, path=(value[0]), ) -+ return namespace(cflags=cflags, ldflags=libs, ) - # Fallback - return namespace( - ldflags=['-lbz2'], --- -2.28.0 - diff --git a/libre/icedove/distribution.ini b/libre/icedove/distribution.ini deleted file mode 100644 index 46b3acd..0000000 --- a/libre/icedove/distribution.ini +++ /dev/null @@ -1,9 +0,0 @@ -[Global] -id=parabola -version=1.0 -about=Icedove for Parabola GNU/Linux-libre - -[Preferences] -app.distributor=parabola -app.distributor.channel=$pkgname -app.partner.parabola=parabola diff --git a/libre/icedove/libre-searchengines.patch b/libre/icedove/libre-searchengines.patch new file mode 100644 index 0000000..52c3a51 --- /dev/null +++ b/libre/icedove/libre-searchengines.patch @@ -0,0 +1,1006 @@ +diff -rupN thunderbird-60.5.1.orig/comm/mail/locales/en-US/chrome/messenger-region/region.properties thunderbird-60.5.1/comm/mail/locales/en-US/chrome/messenger-region/region.properties +--- thunderbird-60.5.1.orig/comm/mail/locales/en-US/chrome/messenger-region/region.properties 2019-03-07 10:38:57.276013048 +0100 ++++ thunderbird-60.5.1/comm/mail/locales/en-US/chrome/messenger-region/region.properties 2019-03-07 11:29:23.255564314 +0100 +@@ -3,9 +3,9 @@ + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + + # Search engine order (order displayed in the search bar dropdown)s +-browser.search.order.1=Bing +-browser.search.order.2=Yahoo +-browser.search.order.3= ++browser.search.order.1=searx ++browser.search.order.2=DuckDuckGo HTML ++browser.search.order.3=DuckDuckGo Lite + + # To make mapit buttons to disappear in the addressbook, specify empty string. For example: + # mail.addr_book.mapit_url.format= +@@ -20,14 +20,12 @@ browser.search.order.3= + # @ZI == zip code + # @CO == country + # Default map service: +-mail.addr_book.mapit_url.format=https://maps.google.com/maps?q=@A1%20@A2%20@CI%20@ST%20@ZI%20@CO ++mail.addr_book.mapit_url.format=https://nominatim.openstreetmap.org/search.php?polygon=1&q=@A1%2C@A2%2C@CI%2C@ST%2C@ZI%2C@CO + # List of available map services (up to 5 can be defined here): +-mail.addr_book.mapit_url.1.name=Google Maps +-mail.addr_book.mapit_url.1.format=https://maps.google.com/maps?q=@A1%20@A2%20@CI%20@ST%20@ZI%20@CO +-mail.addr_book.mapit_url.2.name=OpenStreetMap +-mail.addr_book.mapit_url.2.format=https://nominatim.openstreetmap.org/search.php?polygon=1&q=@A1%2C@A2%2C@CI%2C@ST%2C@ZI%2C@CO ++mail.addr_book.mapit_url.1.name=OpenStreetMap ++mail.addr_book.mapit_url.1.format=https://nominatim.openstreetmap.org/search.php?polygon=1&q=@A1%2C@A2%2C@CI%2C@ST%2C@ZI%2C@CO + +-mailnews.messageid_browser.url=https://groups.google.com/search?as_umsgid=%mid ++mailnews.messageid_browser.url= + + # Recognize non-standard versions of "Re:" in subjects from localized versions of MS Outlook et al. + # Specify a comma-separated list without spaces. For example: mailnews.localizedRe=AW,SV +diff -rupN thunderbird-60.5.1.orig/comm/mail/components/search/extensions/list.json thunderbird-60.5.1/comm/mail/locales/search/list.json +--- thunderbird-60.5.1.orig/comm/mail/components/search/extensions/list.json 2019-03-07 10:38:57.272679671 +0100 ++++ thunderbird-60.5.1/comm/mail/components/search/extensions/list.json 2019-03-07 11:26:46.920196972 +0100 +@@ -1,858 +1,757 @@ + { + "default": { +- "searchDefault": "Google", +- "searchOrder": ["Google", "Bing"], ++ "searchDefault": "searx", + "visibleDefaultEngines": [ +- "google", "amazondotcom", "bing", "ddg", "twitter", "wikipedia" ++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + ] + }, +- "regionOverrides": { +- "CA": { +- "amazondotcom": "amazon-ca", +- "amazon-france": "amazon-ca" +- }, +- "AU": { +- "amazondotcom": "amazon-au", +- "amazon-en-GB": "amazon-au" +- }, +- "FR": { +- "amazondotcom": "amazon-france" +- }, +- "GB": { +- "amazondotcom": "amazon-en-GB" +- } +- }, + "locales": { + "en-US": { + "default": { + "visibleDefaultEngines": [ +- "google", "amazondotcom", "bing", "ddg", "twitter", "wikipedia" +- ] +- }, +- "experimental-hidden": { +- "visibleDefaultEngines": [ +- "amazon-ca", "amazon-au", "yandex-en", "google" ++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + ] + } + }, + "ach": { + "default": { + "visibleDefaultEngines": [ +- "google", "bing", "amazondotcom", "ddg", "twitter", "wikipedia" ++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + ] + } + }, + "af": { + "default": { + "visibleDefaultEngines": [ +- "google", "bing", "amazondotcom", "ddg", "wikipedia-af" ++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + ] + } + }, + "an": { + "default": { + "visibleDefaultEngines": [ +- "google", "bing", "wikipedia-an", "ddg", "twitter" ++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + ] + } + }, + "ar": { + "default": { + "visibleDefaultEngines": [ +- "google", "bing", "amazondotcom", "ddg", "wikipedia-ar" ++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + ] + } + }, + "as": { + "default": { + "visibleDefaultEngines": [ +- "google", "amazon-in", "ddg", "wikipedia-as" ++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + ] + } + }, + "ast": { + "default": { + "visibleDefaultEngines": [ +- "google", "bing", "ddg", "wikipedia-ast" ++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + ] + } + }, + "az": { + "default": { + "visibleDefaultEngines": [ +- "google", "amazondotcom", "azerdict", "bing", "ddg", "wikipedia-az", "yandex-az" ++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + ] + } + }, + "be": { + "default": { + "visibleDefaultEngines": [ +- "yandex-by", "google", "ddg", "wikipedia-be", "wikipedia-be-tarask" ++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + ] +- }, +- "BY": { +- "searchDefault": "Яндекс" +- }, +- "KZ": { +- "searchDefault": "Яндекс" +- }, +- "RU": { +- "searchDefault": "Яндекс" +- }, +- "TR": { +- "searchDefault": "Яндекс" + } + }, + "bg": { + "default": { + "visibleDefaultEngines": [ +- "google", "amazondotcom", "ddg", "pazaruvaj", "wikipedia-bg" ++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + ] + } + }, + "bn": { + "default": { + "visibleDefaultEngines": [ +- "google", "amazon-in", "bing", "ddg", "wikipedia-bn" ++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + ] + } + }, + "bn-BD": { + "default": { + "visibleDefaultEngines": [ +- "google", "bing", "ddg", "wikipedia-bn" ++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + ] + } + }, + "bn-IN": { + "default": { + "visibleDefaultEngines": [ +- "google", "amazon-in", "bing", "ddg", "wikipedia-bn" ++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + ] + } + }, + "br": { + "default": { + "visibleDefaultEngines": [ +- "google", "amazon-france", "ddg", "freelang", "wikipedia-br" ++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + ] + } + }, + "bs": { + "default": { + "visibleDefaultEngines": [ +- "google", "ddg", "olx", "twitter", "wikipedia-bs" ++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + ] + } + }, + "ca": { + "default": { + "visibleDefaultEngines": [ +- "google", "bing", "diec2", "ddg", "twitter", "wikipedia-ca" ++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + ] + } + }, + "cak": { + "default": { + "visibleDefaultEngines": [ +- "google", "bing", "amazondotcom", "ddg", "wikipedia-es" ++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + ] + } + }, + "crh": { + "default": { + "visibleDefaultEngines": [ +- "google", "ddg", "twitter", "wikipedia-crh" ++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + ] + } + }, + "cs": { + "default": { +- "searchOrder": ["Google", "Seznam"], + "visibleDefaultEngines": [ +- "google", "seznam-cz", "ddg", "heureka-cz", "mapy-cz", "wikipedia-cz" ++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + ] + } + }, + "cy": { + "default": { + "visibleDefaultEngines": [ +- "google", "amazon-en-GB", "ddg", "palasprint", "wikipedia-cy" ++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + ] + } + }, + "da": { + "default": { + "visibleDefaultEngines": [ +- "google", "bing", "amazon-en-GB", "ddg", "wikipedia-da" ++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + ] + } + }, + "de": { + "default": { + "visibleDefaultEngines": [ +- "google", "amazon-de", "bing", "ddg", "ecosia", "leo_ende_de", "wikipedia-de" ++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + ] + } + }, + "dsb": { + "default": { + "visibleDefaultEngines": [ +- "google", "bing", "amazon-de", "ddg", "leo_ende_de", "wikipedia-dsb" ++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + ] + } + }, + "el": { + "default": { + "visibleDefaultEngines": [ +- "google", "amazon-en-GB", "bing", "ddg", "wikipedia-el" ++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + ] + } + }, + "en-CA": { + "default": { + "visibleDefaultEngines": [ +- "google", "amazon-ca", "bing", "ddg", "twitter", "wikipedia" ++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + ] + } + }, + "en-GB": { + "default": { + "visibleDefaultEngines": [ +- "google", "bing", "amazon-en-GB", "chambers-en-GB", "ddg", "twitter", "wikipedia" +- ] +- }, +- "experimental-hidden": { +- "visibleDefaultEngines": [ +- "yandex-en" ++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + ] + } + }, + "en-ZA": { + "default": { + "visibleDefaultEngines": [ +- "google", "bing", "amazondotcom", "ddg", "twitter", "wikipedia" ++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + ] + } + }, + "eo": { + "default": { + "visibleDefaultEngines": [ +- "google", "bing", "amazondotcom", "ddg", "wikipedia-eo" ++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + ] + } + }, + "es-AR": { + "default": { + "visibleDefaultEngines": [ +- "google", "amazondotcom", "drae", "ddg", "mercadolibre-ar", "wikipedia-es" ++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + ] + } + }, + "es-CL": { + "default": { + "visibleDefaultEngines": [ +- "google", "bing", "drae", "ddg", "mercadolibre-cl", "wikipedia-es" ++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + ] + } + }, + "es-ES": { + "default": { + "visibleDefaultEngines": [ +- "google", "bing", "drae", "ddg", "twitter", "wikipedia-es" ++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + ] + } + }, + "es-MX": { + "default": { + "visibleDefaultEngines": [ +- "google", "bing", "ddg", "mercadolibre-mx", "wikipedia-es" +- ] +- }, +- "experimental-hidden": { +- "visibleDefaultEngines": [ +- "amazon-mx" ++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + ] + } + }, + "et": { + "default": { + "visibleDefaultEngines": [ +- "google", "neti-ee", "ddg", "osta-ee", "wikipedia-et", "eki-ee" ++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + ] + } + }, + "eu": { + "default": { + "visibleDefaultEngines": [ +- "google", "bing", "amazon-en-GB", "ddg", "wikipedia-eu" ++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + ] + } + }, + "fa": { + "default": { + "visibleDefaultEngines": [ +- "google", "amazondotcom", "bing", "ddg", "wikipedia-fa" ++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + ] + } + }, + "ff": { + "default": { + "visibleDefaultEngines": [ +- "google", "bing", "amazon-france", "ddg", "wikipedia-fr" ++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + ] + } + }, + "fi": { + "default": { + "visibleDefaultEngines": [ +- "google", "bing", "ddg", "wikipedia-fi" ++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + ] + } + }, + "fr": { + "default": { + "visibleDefaultEngines": [ +- "google", "bing", "amazon-france", "ddg", "qwant", "wikipedia-fr" ++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + ] + } + }, + "fy-NL": { + "default": { + "visibleDefaultEngines": [ +- "google", "bing", "bolcom-fy-NL", "ddg", "marktplaats-fy-NL", "wikipedia-fy-NL" +- ] +- }, +- "experimental-hidden": { +- "visibleDefaultEngines": [ +- "amazon-nl" ++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + ] + } + }, + "ga-IE": { + "default": { + "visibleDefaultEngines": [ +- "google", "amazon-en-GB", "ddg", "tearma", "twitter", "wikipedia-ga-IE" ++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + ] + } + }, + "gd": { + "default": { + "visibleDefaultEngines": [ +- "google", "amazon-en-GB", "bbc-alba", "ddg", "faclair-beag", "wikipedia-gd" ++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + ] + } + }, + "gl": { + "default": { + "visibleDefaultEngines": [ +- "google", "amazon-en-GB", "ddg", "wikipedia-gl" ++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + ] + } + }, + "gn": { + "default": { + "visibleDefaultEngines": [ +- "google", "bing", "amazondotcom", "ddg", "twitter", "wikipedia-gn" ++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + ] + } + }, + "gu-IN": { + "default": { + "visibleDefaultEngines": [ +- "google", "bing", "amazon-in", "ddg", "wikipedia-gu" ++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + ] + } + }, + "he": { + "default": { + "visibleDefaultEngines": [ +- "google", "ddg", "wikipedia-he", "morfix-dic" ++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + ] + } + }, + "hi-IN": { + "default": { + "visibleDefaultEngines": [ +- "google", "bing", "ddg", "wikipedia-hi" ++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + ] + } + }, + "hr": { + "default": { + "visibleDefaultEngines": [ +- "google", "amazon-en-GB", "bing", "ddg", "eudict", "twitter", "wikipedia-hr" ++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + ] + } + }, + "hsb": { + "default": { + "visibleDefaultEngines": [ +- "google", "bing", "amazon-de", "ddg", "leo_ende_de", "wikipedia-hsb" ++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + ] + } + }, + "hu": { + "default": { + "visibleDefaultEngines": [ +- "google", "ddg", "vatera", "wikipedia-hu" ++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + ] + } + }, + "hy-AM": { + "default": { + "visibleDefaultEngines": [ +- "google", "amazondotcom", "ddg", "list-am", "wikipedia-hy" ++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + ] + } + }, + "ia": { + "default": { + "visibleDefaultEngines": [ +- "google", "bing", "amazondotcom", "ddg", "twitter", "wikipedia-ia" ++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + ] + } + }, + "id": { + "default": { + "visibleDefaultEngines": [ +- "google", "ddg", "wikipedia-id" ++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + ] + } + }, + "is": { + "default": { + "visibleDefaultEngines": [ +- "google", "bing", "amazondotcom", "ddg", "wikipedia-is" ++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + ] + } + }, + "it": { + "default": { + "visibleDefaultEngines": [ +- "google", "bing", "amazon-it", "ddg", "wikipedia-it" ++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + ] + } + }, + "ja-JP-macos": { + "default": { +- "searchOrder": ["Google", "Yahoo! JAPAN", "Bing", "Amazon.co.jp", "楽天市場", "ヤフオク!", "教えて!goo", "Twitter", "Wikipedia (ja)"], + "visibleDefaultEngines": [ +- "google", "yahoo-jp", "bing", "amazon-jp", "rakuten", "yahoo-jp-auctions", "oshiete-goo", "twitter-ja", "wikipedia-ja", "ddg" ++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + ] + } + }, + "ja": { + "default": { +- "searchOrder": ["Google", "Yahoo! JAPAN", "Bing", "Amazon.co.jp", "楽天市場", "ヤフオク!", "教えて!goo", "Twitter", "Wikipedia (ja)"], + "visibleDefaultEngines": [ +- "google", "yahoo-jp", "bing", "amazon-jp", "rakuten", "yahoo-jp-auctions", "oshiete-goo", "twitter-ja", "wikipedia-ja", "ddg" ++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + ] + } + }, + "ka": { + "default": { + "visibleDefaultEngines": [ +- "google", "bing", "amazondotcom", "ddg", "twitter", "wikipedia-ka" ++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + ] + } + }, + "kab": { + "default": { + "visibleDefaultEngines": [ +- "google", "bing", "ddg", "wikipedia-kab" ++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + ] + } + }, + "kk": { + "default": { + "visibleDefaultEngines": [ +- "yandex-kk", "google", "ddg", "flip", "twitter", "wikipedia-kk" ++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + ] +- }, +- "KZ": { +- "searchDefault": "Яндекс" +- }, +- "BY": { +- "searchDefault": "Яндекс" +- }, +- "RU": { +- "searchDefault": "Яндекс" +- }, +- "TR": { +- "searchDefault": "Яндекс" + } + }, + "km": { + "default": { + "visibleDefaultEngines": [ +- "google", "bing", "amazondotcom", "ddg", "twitter", "wikipedia-km" ++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + ] + } + }, + "kn": { + "default": { + "visibleDefaultEngines": [ +- "google", "bing", "amazon-in", "ddg", "kannadastore", "wikipedia-kn" ++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + ] + } + }, + "ko": { + "default": { + "visibleDefaultEngines": [ +- "google", "ddg", "naver-kr", "daum-kr", "wikipedia-kr" ++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + ] + } + }, + "lij": { + "default": { + "visibleDefaultEngines": [ +- "google", "bing", "amazon-it", "ddg", "wikipedia-lij" ++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + ] + } + }, + "lo": { + "default": { + "visibleDefaultEngines": [ +- "google", "bing", "ddg", "wikipedia-lo", "twitter" ++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + ] + } + }, + "lt": { + "default": { + "visibleDefaultEngines": [ +- "google", "wikipedia-lt", "bing", "amazondotcom", "ddg", "twitter" ++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + ] + } + }, + "ltg": { + "default": { + "visibleDefaultEngines": [ +- "google", "ddg", "salidzinilv", "sslv", "wikipedia-ltg" ++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + ] + } + }, + "lv": { + "default": { + "visibleDefaultEngines": [ +- "google", "ddg", "salidzinilv", "sslv", "wikipedia-lv" ++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + ] + } + }, + "mai": { + "default": { + "visibleDefaultEngines": [ +- "google", "bing", "amazon-in", "ddg", "twitter", "wikipedia-hi" ++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + ] + } + }, + "mk": { + "default": { + "visibleDefaultEngines": [ +- "google", "bing", "amazondotcom", "ddg", "wikipedia-mk" ++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + ] + } + }, + "ml": { + "default": { + "visibleDefaultEngines": [ +- "google", "bing", "amazon-in", "ddg", "wikipedia", "wikipedia-ml" ++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + ] + } + }, + "mr": { + "default": { + "visibleDefaultEngines": [ +- "google", "amazon-in", "ddg", "wikipedia-mr" ++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + ] + } + }, + "ms": { + "default": { + "visibleDefaultEngines": [ +- "google", "bing", "amazondotcom", "ddg", "twitter", "wikipedia-ms" ++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + ] + } + }, + "my": { + "default": { + "visibleDefaultEngines": [ +- "google", "bing", "amazondotcom", "ddg", "twitter", "wikipedia-my" ++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + ] + } + }, + "nb-NO": { + "default": { + "visibleDefaultEngines": [ +- "google", "amazon-en-GB", "bing", "ddg", "gulesider-NO", "bok-NO", "qxl-NO", "wikipedia-NO" ++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + ] + } + }, + "ne-NP": { + "default": { + "visibleDefaultEngines": [ +- "google", "bing", "ddg", "twitter", "wikipedia-ne" ++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + ] + } + }, + "nl": { + "default": { + "visibleDefaultEngines": [ +- "google", "bing", "bolcom-nl", "ddg", "marktplaats-nl", "wikipedia-nl" +- ] +- }, +- "experimental-hidden": { +- "visibleDefaultEngines": [ +- "amazon-nl" ++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + ] + } + }, + "nn-NO": { + "default": { + "visibleDefaultEngines": [ +- "google", "bing", "amazon-en-GB", "ddg", "gulesider-NO", "bok-NO", "qxl-NO", "wikipedia-NN" ++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + ] + } + }, + "oc": { + "default": { + "visibleDefaultEngines": [ +- "google", "bing", "ddg", "twitter", "wikipedia-oc", "wiktionary-oc" ++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + ] + } + }, + "or": { + "default": { + "visibleDefaultEngines": [ +- "google", "bing", "amazon-in", "ddg", "wikipedia-or" ++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + ] + } + }, + "pa-IN": { + "default": { + "visibleDefaultEngines": [ +- "google", "bing", "amazon-in", "ddg", "wikipedia-pa" ++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + ] + } + }, + "pl": { + "default": { + "visibleDefaultEngines": [ +- "google", "allegro-pl", "ddg", "pwn-pl", "wikipedia-pl", "wolnelektury-pl" ++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + ] + } + }, + "pt-BR": { + "default": { + "visibleDefaultEngines": [ +- "google", "bing", "ddg", "mercadolivre", "twitter", "wikipedia-pt" +- ] +- }, +- "experimental-hidden": { +- "visibleDefaultEngines": [ +- "amazon-br" ++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + ] + } + }, + "pt-PT": { + "default": { + "visibleDefaultEngines": [ +- "google", "amazon-en-GB", "ddg", "priberam", "wikipedia-pt" ++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + ] + } + }, + "rm": { + "default": { + "visibleDefaultEngines": [ +- "google", "bing", "ddg", "leo_ende_de", "wikipedia-rm" ++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + ] + } + }, + "ro": { + "default": { + "visibleDefaultEngines": [ +- "google", "bing", "amazondotcom", "ddg", "wikipedia-ro" ++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + ] + } + }, + "ru": { + "default": { + "visibleDefaultEngines": [ +- "yandex-ru", "google", "ddg", "ozonru", "priceru", "wikipedia-ru", "mailru" ++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + ] +- }, +- "RU": { +- "searchDefault": "Яндекс" +- }, +- "BY": { +- "searchDefault": "Яндекс" +- }, +- "KZ": { +- "searchDefault": "Яндекс" +- }, +- "TR": { +- "searchDefault": "Яндекс" + } + }, + "si": { + "default": { + "visibleDefaultEngines": [ +- "google", "amazondotcom", "ddg", "wikipedia-si" ++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + ] + } + }, + "sk": { + "default": { + "visibleDefaultEngines": [ +- "google", "azet-sk", "atlas-sk", "ddg", "wikipedia-sk", "zoznam-sk" ++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + ] + } + }, + "sl": { + "default": { + "visibleDefaultEngines": [ +- "google", "ceneji", "ddg", "najdi-si", "odpiralni", "twitter", "wikipedia-sl" ++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + ] + } + }, + "son": { + "default": { + "visibleDefaultEngines": [ +- "google", "bing", "amazon-france", "ddg", "wikipedia-fr" ++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + ] + } + }, + "sq": { + "default": { + "visibleDefaultEngines": [ +- "google", "bing", "amazon-en-GB", "ddg", "wikipedia-sq" ++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + ] + } + }, + "sr": { + "default": { + "visibleDefaultEngines": [ +- "google", "amazon-en-GB", "bing", "ddg", "wikipedia-sr", "pogodak" ++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + ] + } + }, + "sv-SE": { + "default": { + "visibleDefaultEngines": [ +- "google", "bing", "allaannonser-sv-SE", "ddg", "prisjakt-sv-SE", "tyda-sv-SE", "wikipedia-sv-SE" ++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + ] + } + }, + "ta": { + "default": { + "visibleDefaultEngines": [ +- "google", "amazon-in", "ddg", "wikipedia-ta" ++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + ] + } + }, + "te": { + "default": { + "visibleDefaultEngines": [ +- "google", "amazon-in", "ddg", "wikipedia-te", "wiktionary-te" ++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + ] + } + }, + "th": { + "default": { + "visibleDefaultEngines": [ +- "google", "amazondotcom", "bing", "ddg", "longdo", "wikipedia-th" ++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + ] + } + }, + "tl": { + "default": { + "visibleDefaultEngines": [ +- "google", "bing", "amazondotcom", "ddg", "twitter", "wikipedia-tl" ++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + ] + } + }, + "tr": { + "default": { + "visibleDefaultEngines": [ +- "yandex-tr", "google", "ddg", "twitter", "wikipedia-tr" ++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + ] +- }, +- "TR": { +- "searchDefault": "Yandex" +- }, +- "BY": { +- "searchDefault": "Yandex" +- }, +- "KZ": { +- "searchDefault": "Yandex" +- }, +- "RU": { +- "searchDefault": "Yandex" + } + }, + "trs": { + "default": { + "visibleDefaultEngines": [ +- "google", "bing", "amazondotcom", "ddg", "wikipedia-es" ++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + ] + } + }, + "uk": { + "default": { + "visibleDefaultEngines": [ +- "google", "bing", "ddg", "wikipedia-uk", "hotline-ua" ++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + ] + } + }, + "ur": { + "default": { + "visibleDefaultEngines": [ +- "google", "bing", "amazon-in", "ddg", "twitter", "wikipedia-ur" ++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + ] + } + }, + "uz": { + "default": { + "visibleDefaultEngines": [ +- "google", "bing", "amazondotcom", "ddg", "twitter", "wikipedia-uz" ++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + ] + } + }, + "vi": { + "default": { + "visibleDefaultEngines": [ +- "google", "coccoc", "ddg", "wikipedia-vi" ++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + ] + } + }, + "wo": { + "default": { + "visibleDefaultEngines": [ +- "google", "bing", "amazon-france", "ddg", "twitter", "wikipedia-wo" ++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + ] + } + }, + "xh": { + "default": { + "visibleDefaultEngines": [ +- "google", "bing", "ddg", "wikipedia" ++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + ] + } + }, + "zh-CN": { + "default": { + "visibleDefaultEngines": [ +- "baidu", "google", "bing", "ddg", "wikipedia-zh-CN", "amazondotcn" ++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + ] +- }, +- "CN": { +- "searchDefault": "百度" + } + }, + "zh-TW": { + "default": { + "visibleDefaultEngines": [ +- "google", "ddg", "readmoo", "wikipedia-zh-TW" ++ "duckduckgo-html", "duckduckgo-lite", "internet-archive", "parabola-packages", "parabola-wiki-en", "searx", "seeks", "wikipedia-en", "yacy" + ] + } + } diff --git a/libre/icedove/mozconfig.cfg b/libre/icedove/mozconfig.cfg deleted file mode 100644 index 02dff57..0000000 --- a/libre/icedove/mozconfig.cfg +++ /dev/null @@ -1,47 +0,0 @@ -ac_add_options --enable-application=comm/mail -ac_add_options --enable-calendar - -ac_add_options --prefix=/usr -ac_add_options --enable-release -ac_add_options --enable-linker=gold -ac_add_options --enable-hardening -ac_add_options --enable-optimize -ac_add_options --enable-rust-simd -# https://bugzilla.mozilla.org/show_bug.cgi?id=1423822 -ac_add_options --disable-elf-hack - -# Branding -ac_add_options --disable-official-branding -ac_add_options --enable-update-channel=release -ac_add_options --with-distribution-id=nu.parabola -ac_add_options --with-branding=comm/mail/branding/icedove - -# System libraries -ac_add_options --with-system-zlib -ac_add_options --with-system-bz2 -ac_add_options --with-system-icu -ac_add_options --with-system-jpeg -# does not have APNG support -# ac_add_options --with-system-png -ac_add_options --with-system-libvpx -ac_add_options --with-system-nspr -ac_add_options --with-system-nss -ac_add_options --with-system-botan -ac_add_options --with-system-webp -ac_add_options --with-system-libevent -ac_add_options --with-system-ffi -ac_add_options --with-system-pixman - -# Features -ac_add_options --enable-alsa -ac_add_options --enable-openpgp -ac_add_options --enable-calendar -ac_add_options --disable-jack -ac_add_options --disable-crashreporter -ac_add_options --disable-updater -# tests require network access. -ac_add_options --disable-tests - -# System addons -ac_add_options --with-unsigned-addon-scopes=app,system -ac_add_options --allow-addon-sideload diff --git a/libre/icedove/mozilla-1338795-regression.patch b/libre/icedove/mozilla-1338795-regression.patch new file mode 100644 index 0000000..2c8cf21 --- /dev/null +++ b/libre/icedove/mozilla-1338795-regression.patch @@ -0,0 +1,11 @@ +--- a/comm/mailnews/base/prefs/content/accountUtils.js 2020-04-04 22:28:38.105521722 +0200 ++++ b/comm/mailnews/base/prefs/content/accountUtils.js 2020-04-04 22:28:50.809027238 +0200 +@@ -488,7 +488,7 @@ function msgNewMailAccount(msgWindow, ok + let existingWindow = Services.wm.getMostRecentWindow("mail:autoconfig"); + if (existingWindow) { + existingWindow.focus(); +- } else if (AppConstants.MOZ_APP_NAME == "thunderbird") { ++ } else { + // disabling modal for the time being, see 688273 REMOVEME + window.openDialog( + "chrome://messenger/content/accountcreation/emailWizard.xul", diff --git a/libre/icedove/thunderbird-78.5-rust-1.48.patch b/libre/icedove/thunderbird-78.5-rust-1.48.patch deleted file mode 100644 index badbff4..0000000 --- a/libre/icedove/thunderbird-78.5-rust-1.48.patch +++ /dev/null @@ -1,3941 +0,0 @@ - -# HG changeset patch -# User Henri Sivonen -# Date 1604046593 0 -# Node ID 632353012d05c8e71314d27edca945ce9c13f4ea -# Parent 2876425c75f75f638b41e8c6093e84b817938a9a -Bug 1667736 - Update packed_simd to compile on Rust 1.48. r=glandium - -Differential Revision: https://phabricator.services.mozilla.com/D91572 - -diff --git a/.cargo/config.in b/.cargo/config.in ---- a/.cargo/config.in -+++ b/.cargo/config.in -@@ -45,7 +45,7 @@ rev = "21c26326f5f45f415c49eac4ba5bc41a2 - [source."https://github.com/hsivonen/packed_simd"] - git = "https://github.com/hsivonen/packed_simd" - replace-with = "vendored-sources" --rev = "3541e3818fdc7c2a24f87e3459151a4ce955a67a" -+rev = "0917fe780032a6bbb23d71be545f9c1834128d75" - - [source."https://github.com/djg/cubeb-pulse-rs"] - git = "https://github.com/djg/cubeb-pulse-rs" -diff --git a/Cargo.lock b/Cargo.lock ---- a/Cargo.lock -+++ b/Cargo.lock -@@ -3573,18 +3573,18 @@ version = "0.4.0" - source = "registry+https://github.com/rust-lang/crates.io-index" - checksum = "49a4b8ea2179e6a2e27411d3bca09ca6dd630821cf6894c6c7c8467a8ee7ef13" - dependencies = [ - "stable_deref_trait", - ] - - [[package]] - name = "packed_simd" --version = "0.3.3" --source = "git+https://github.com/hsivonen/packed_simd?rev=3541e3818fdc7c2a24f87e3459151a4ce955a67a#3541e3818fdc7c2a24f87e3459151a4ce955a67a" -+version = "0.3.4" -+source = "git+https://github.com/hsivonen/packed_simd?rev=0917fe780032a6bbb23d71be545f9c1834128d75#0917fe780032a6bbb23d71be545f9c1834128d75" - dependencies = [ - "cfg-if", - ] - - [[package]] - name = "parity-wasm" - version = "0.41.0" - source = "registry+https://github.com/rust-lang/crates.io-index" -diff --git a/Cargo.toml b/Cargo.toml ---- a/Cargo.toml -+++ b/Cargo.toml -@@ -66,7 +66,7 @@ panic = "abort" - - [patch.crates-io] - libudev-sys = { path = "dom/webauthn/libudev-sys" } --packed_simd = { git = "https://github.com/hsivonen/packed_simd", rev="3541e3818fdc7c2a24f87e3459151a4ce955a67a" } -+packed_simd = { git = "https://github.com/hsivonen/packed_simd", rev="0917fe780032a6bbb23d71be545f9c1834128d75" } - rlbox_lucet_sandbox = { git = "https://github.com/PLSysSec/rlbox_lucet_sandbox/", rev="d510da5999a744c563b0acd18056069d1698273f" } - nix = { git = "https://github.com/shravanrn/nix/", branch = "r0.13.1", rev="4af6c367603869a30fddb5ffb0aba2b9477ba92e" } - spirv_cross = { git = "https://github.com/kvark/spirv_cross", branch = "wgpu3", rev = "20191ad2f370afd6d247edcb9ff9da32d3bedb9c" } -diff --git a/third_party/rust/packed_simd/.cargo-checksum.json b/third_party/rust/packed_simd/.cargo-checksum.json ---- a/third_party/rust/packed_simd/.cargo-checksum.json -+++ b/third_party/rust/packed_simd/.cargo-checksum.json -@@ -1,1 +1,1 @@ --{"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} -\ No newline at end of file -+{"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} -\ No newline at end of file -diff --git a/third_party/rust/packed_simd/.travis.yml b/third_party/rust/packed_simd/.travis.yml ---- a/third_party/rust/packed_simd/.travis.yml -+++ b/third_party/rust/packed_simd/.travis.yml -@@ -1,291 +1,222 @@ - language: rust --sudo: false - rust: nightly -+os: linux -+dist: focal - - stages: - - tools -- - linux-tier1 -- - osx-tier1 -- - osx-tier2 -- - linux-tier2 -- - android -+ - build-test-verify # Passes full test suite, permit no regressions (unless it's rustup :/) -+ - 32bit-tier1 -+ - 64bit-tier2 -+ - 32bit-tier2 - --matrix: -- fast_finish: true -+jobs: -+ fast_finish: true - include: - # Android: -- - env: TARGET=x86_64-linux-android NOVERIFY=1 -+ - env: TARGET=x86_64-linux-android - name: "x86_64-unknown-linux-android + SSE2" -- stage: android -+ stage: build-test-verify - - env: TARGET=arm-linux-androideabi - name: "arm-linux-androideabi" -- stage: android -+ stage: build-test-verify - - env: TARGET=arm-linux-androideabi RUSTFLAGS="-C target-feature=+v7,+neon" - name: "arm-linux-androideabi + NEON" -- stage: android -- - env: TARGET=aarch64-linux-android -- name: "aarch64-unknown-linux-android" -- stage: android -- - env: TARGET=aarch64-linux-android RUSTFLAGS="-C target-feature=+neon" -- name: "aarch64-unknown-linux-android + NEON" -- stage: android -+ stage: build-test-verify -+ - name: "aarch64-unknown-linux-android + NEON" -+ env: TARGET=aarch64-linux-android RUSTFLAGS="-C target-feature=+neon" -+ stage: build-test-verify - - env: TARGET="thumbv7neon-linux-androideabi" - name: "thumbv7neon-linux-androideabi" -- stage: android -+ stage: 32bit-tier2 - # Linux: - - env: TARGET=i586-unknown-linux-gnu - name: "i586-unknown-linux-gnu" -- stage: linux-tier2 -+ stage: 32bit-tier2 - - env: TARGET=i586-unknown-linux-gnu RUSTFLAGS="-C target-feature=+sse" - name: "i586-unknown-linux-gnu + SSE" -- stage: linux-tier2 -+ stage: 32bit-tier2 - - env: TARGET=i586-unknown-linux-gnu RUSTFLAGS="-C target-feature=+sse2" - name: "i586-unknown-linux-gnu + SSE2" -- stage: linux-tier2 -+ stage: 32bit-tier2 - - env: TARGET=i686-unknown-linux-gnu - name: "i686-unknown-linux-gnu + SSE2" -- stage: linux-tier1 -+ stage: 32bit-tier1 - - env: TARGET=i686-unknown-linux-gnu RUSTFLAGS="-C target-feature=+sse4.2" - name: "i686-unknown-linux-gnu + SSE4.2" -- stage: linux-tier1 -+ stage: 32bit-tier1 - - env: TARGET=i686-unknown-linux-gnu RUSTFLAGS="-C target-feature=+avx2" - name: "i686-unknown-linux-gnu + AVX2" -- stage: linux-tier1 -- - env: TARGET=x86_64-unknown-linux-gnu -- name: "x86_64-unknown-linux-gnu + SSE2" -- install: rustup component add rustfmt-preview -- stage: linux-tier1 -+ stage: 32bit-tier1 - - env: TARGET=x86_64-unknown-linux-gnu RUSTFLAGS="-C target-feature=+sse4.2" - name: "x86_64-unknown-linux-gnu + SSE4.2" - install: rustup component add rustfmt-preview -- stage: linux-tier1 -- - env: TARGET=x86_64-unknown-linux-gnu RUSTFLAGS="-C target-feature=+avx" -- name: "x86_64-unknown-linux-gnu + AVX" -- install: rustup component add rustfmt-preview -- stage: linux-tier1 -+ stage: build-test-verify - - env: TARGET=x86_64-unknown-linux-gnu RUSTFLAGS="-C target-feature=+avx2" - name: "x86_64-unknown-linux-gnu + AVX2" - install: rustup component add rustfmt-preview -- stage: linux-tier1 -- - env: TARGET=x86_64-unknown-linux-gnu-emulated -- name: "Intel SDE + SSE2" -- install: true -- stage: linux-tier1 -- - env: TARGET=x86_64-unknown-linux-gnu-emulated RUSTFLAGS="-C target-feature=+sse4.2" -- name: "Intel SDE + SSE4.2" -- install: true -- stage: linux-tier1 -- - env: TARGET=x86_64-unknown-linux-gnu-emulated RUSTFLAGS="-C target-feature=+avx" -- name: "Intel SDE + AVX" -- install: true -- stage: linux-tier1 -- - env: TARGET=x86_64-unknown-linux-gnu-emulated RUSTFLAGS="-C target-feature=+avx2" -- name: "Intel SDE + AVX2" -- install: true -- stage: linux-tier1 -- - env: TARGET=x86_64-unknown-linux-gnu-emulated RUSTFLAGS="-C target-feature=+avx-512f" -- name: "Intel SDE + AVX-512" -- install: true -- stage: linux-tier1 -- - env: TARGET=arm-unknown-linux-gnueabi -- name: "arm-unknown-linux-gnueabi" -- stage: linux-tier2 -+ stage: build-test-verify - - env: TARGET=arm-unknown-linux-gnueabi RUSTFLAGS="-C target-feature=+v7,+neon" - name: "arm-unknown-linux-gnueabi + NEON" -- stage: linux-tier2 -+ stage: build-test-verify - - env: TARGET=arm-unknown-linux-gnueabihf - name: "arm-unknown-linux-gnueabihf" -- stage: linux-tier2 -+ stage: build-test-verify - - env: TARGET=arm-unknown-linux-gnueabihf RUSTFLAGS="-C target-feature=+v7,+neon" - name: "arm-unknown-linux-gnueabihf + NEON" -- stage: linux-tier2 -+ stage: build-test-verify - - env: TARGET=armv7-unknown-linux-gnueabihf - name: "armv7-unknown-linux-gnueabihf" -- stage: linux-tier2 -+ stage: build-test-verify - - env: TARGET=armv7-unknown-linux-gnueabihf RUSTFLAGS="-C target-feature=+neon" - name: "armv7-unknown-linux-gnueabihf + NEON" -- stage: linux-tier2 -+ stage: build-test-verify - - env: TARGET="thumbv7neon-unknown-linux-gnueabihf" - name: "thumbv7neon-unknown-linux-gnueabihf" -- stage: linux-tier2 -- - env: TARGET=aarch64-unknown-linux-gnu -- name: "aarch64-unknown-linux-gnu" -- stage: linux-tier2 -- - env: TARGET=aarch64-unknown-linux-gnu RUSTFLAGS="-C target-feature=+neon" -- name: "aarch64-unknown-linux-gnu + NEON" -- stage: linux-tier2 -+ stage: 32bit-tier2 -+ - name: "aarch64-unknown-linux-gnu + NEON" -+ env: TARGET=aarch64-unknown-linux-gnu RUSTFLAGS="-C target-feature=+neon" -+ stage: build-test-verify - - env: TARGET=mips-unknown-linux-gnu - name: "mips-unknown-linux-gnu" -- stage: linux-tier2 -+ stage: 32bit-tier2 - - env: TARGET=mipsel-unknown-linux-musl - name: "mipsel-unknown-linux-musl" -- stage: linux-tier2 -+ stage: 32bit-tier2 - - env: TARGET=mips64-unknown-linux-gnuabi64 - name: "mips64-unknown-linux-gnuabi64" -- stage: linux-tier2 -+ stage: 64bit-tier2 - - env: TARGET=mips64el-unknown-linux-gnuabi64 - name: "mips64el-unknown-linux-gnuabi64" -- stage: linux-tier2 -+ stage: 64bit-tier2 - # FIXME: https://github.com/rust-lang-nursery/packed_simd/issues/18 - # env: TARGET=mips64el-unknown-linux-gnuabi64 RUSTFLAGS="-C target-feature=+msa -C target-cpu=mips64r6" - - env: TARGET=powerpc-unknown-linux-gnu - name: "powerpc-unknown-linux-gnu" -- stage: linux-tier2 -+ stage: 32bit-tier2 - - env: TARGET=powerpc64-unknown-linux-gnu - name: "powerpc64-unknown-linux-gnu" -- stage: linux-tier2 -- - env: TARGET=powerpc64le-unknown-linux-gnu -- name: "powerpc64le-unknown-linux-gnu" -- stage: linux-tier2 -- - env: TARGET=powerpc64le-unknown-linux-gnu RUSTFLAGS="-C target-feature=+altivec" -- name: "powerpc64le-unknown-linux-gnu + ALTIVEC" -- stage: linux-tier2 -- - env: TARGET=powerpc64le-unknown-linux-gnu RUSTFLAGS="-C target-feature=+vsx" -- name: "powerpc64le-unknown-linux-gnu + VSX" -- stage: linux-tier2 -- - env: TARGET=s390x-unknown-linux-gnu -- name: "s390x-unknown-linux-gnu" -- stage: linux-tier2 -+ stage: 64bit-tier2 -+ - name: "powerpc64le-unknown-linux-gnu" -+ env: TARGET=powerpc64le-unknown-linux-gnu -+ stage: build-test-verify -+ - name: "powerpc64le-unknown-linux-gnu + ALTIVEC" -+ env: TARGET=powerpc64le-unknown-linux-gnu RUSTFLAGS="-C target-feature=+altivec" -+ stage: build-test-verify -+ - name: "powerpc64le-unknown-linux-gnu + VSX" -+ env: TARGET=powerpc64le-unknown-linux-gnu RUSTFLAGS="-C target-feature=+vsx" -+ stage: build-test-verify -+ - name: "s390x-unknown-linux-gnu" -+ env: TARGET=s390x-unknown-linux-gnu -+ stage: 64bit-tier2 - - env: TARGET=sparc64-unknown-linux-gnu - name: "sparc64-unknown-linux-gnu" -- stage: linux-tier2 -+ stage: 64bit-tier2 - # WebAssembly: - - env: TARGET=wasm32-unknown-unknown - name: "wasm32-unknown-unknown" -- stage: osx-tier1 # For now -+ stage: 32bit-tier2 - # MacOSX: - - os: osx -- env: TARGET=i686-apple-darwin -- name: "i686-apple-darwin + SSE2" -- script: ci/run.sh -- osx_image: xcode10 -- stage: osx-tier1 -- - os: osx -- env: TARGET=i686-apple-darwin RUSTFLAGS="-C target-feature=+sse4.2" -- name: "i686-apple-darwin + SSE4.2" -- script: ci/run.sh -- osx_image: xcode10 -- stage: osx-tier1 -- # Travis-CI OSX build bots do not support AVX2: -- - os: osx -- env: TARGET=i686-apple-darwin RUSTFLAGS="-C target-feature=+avx" -- name: "i686-apple-darwin + AVX" -- script: ci/run.sh -- osx_image: xcode10 -- stage: osx-tier1 -- - os: osx -- env: TARGET=x86_64-apple-darwin -- name: "x86_64-apple-darwin + SSE2" -- install: true -- script: ci/run.sh -- osx_image: xcode10 -- stage: osx-tier1 -- - os: osx - env: TARGET=x86_64-apple-darwin RUSTFLAGS="-C target-feature=+sse4.2" - name: "x86_64-apple-darwin + SSE4.2" - install: true - script: ci/run.sh - osx_image: xcode10 -- stage: osx-tier1 -+ stage: build-test-verify - # Travis-CI OSX build bots do not support AVX2: - - os: osx - env: TARGET=x86_64-apple-darwin RUSTFLAGS="-C target-feature=+avx" - name: "x86_64-apple-darwin + AVX" - install: true - script: ci/run.sh - osx_image: xcode10 -- stage: osx-tier1 -+ stage: build-test-verify - # *BSDs: - #- env: TARGET=i686-unknown-freebsd NORUN=1 - # script: ci/run.sh - #- env: TARGET=x86_64-unknown-freebsd NORUN=1 - # script: ci/run.sh - #- env: TARGET=x86_64-unknown-netbsd NORUN=1 - # script: ci/run.sh - # Solaris: - #- env: TARGET=x86_64-sun-solaris NORUN=1 - # script: ci/run.sh - # iOS: - - os: osx -- env: TARGET=i386-apple-ios -- name: "i386-apple-ios" -- script: ci/run.sh -- osx_image: xcode9.4 -- stage: osx-tier2 -- - os: osx - env: TARGET=x86_64-apple-ios - name: "x86_64-apple-ios + SSE2" - script: ci/run.sh - osx_image: xcode9.4 -- stage: osx-tier2 -- - os: osx -- env: TARGET=armv7-apple-ios NORUN=1 -- name: "armv7-apple-ios [Build only]" -- script: ci/run.sh -+ stage: 64bit-tier2 -+ - name: "aarch64-apple-ios + NEON" -+ env: TARGET=aarch64-apple-ios RUSTFLAGS="-C target-feature=+neon" -+ os: osx - osx_image: xcode9.4 -- stage: osx-tier2 -- - os: osx -- env: TARGET=aarch64-apple-ios NORUN=1 -- name: "aarch64-apple-ios [Build only]" - script: ci/run.sh -- osx_image: xcode9.4 -- stage: osx-tier2 -+ stage: 64bit-tier2 - # BENCHMARKS: - - name: "Benchmarks - x86_64-unknown-linux-gnu" - install: TARGET=x86_64-unknown-linux-gnu ./ci/setup_benchmarks.sh -- script: PATH=$(pwd):$PATH NORUN=1 VERIFY=1 FEATURES=core_arch,ispc,sleef-sys ci/benchmark.sh -+ # FIXME: Use `core_arch,sleef-sys` features once they works again -+ script: PATH=$(pwd):$PATH NORUN=1 VERIFY=1 FEATURES=ispc ci/benchmark.sh - stage: tools - - name: "Benchmarks - x86_64-apple-darwin" - install: TARGET=x86_64-apple-darwin ./ci/setup_benchmarks.sh -- script: PATH=$(pwd):$PATH NORUN=1 VERIFY=1 FEATURES=core_arch,ispc,sleef-sys ci/benchmark.sh -+ # FIXME: Use `core_arch,sleef-sys` features once they works again -+ script: PATH=$(pwd):$PATH NORUN=1 VERIFY=1 FEATURES=ispc ci/benchmark.sh - os: osx - osx_image: xcode9.4 - stage: tools - # TOOLS: - - name: "Documentation" -- install: cargo install mdbook -+ before_install: -+ - sudo add-apt-repository -y ppa:deadsnakes/ppa -+ - sudo apt-get update -y -+ - sudo apt-get install -y python3.9 -+ install: -+ - cargo install mdbook - script: ci/dox.sh - stage: tools - - name: "rustfmt" - install: true -- before_script: rustup component add rustfmt-preview -- script: ci/all.sh check_fmt || true -+ script: | -+ if rustup component add rustfmt-preview ; then -+ ci/all.sh check_fmt || true -+ fi - stage: tools - - name: "clippy" - install: true -- before_script: rustup component add clippy-preview -- script: ci/all.sh clippy -+ script: | -+ if rustup component add clippy-preview ; then -+ ci/all.sh clippy -+ fi - stage: tools - - allow_failures: - # FIXME: ISPC cannot be found? - - name: "Benchmarks - x86_64-apple-darwin" -- # FIXME: TBD -- - env: TARGET=powerpc-unknown-linux-gnu -- - env: TARGET=powerpc64-unknown-linux-gnu -- - env: TARGET=powerpc64le-unknown-linux-gnu -- - env: TARGET=powerpc64le-unknown-linux-gnu RUSTFLAGS="-C target-feature=+altivec" -- - env: TARGET=powerpc64le-unknown-linux-gnu RUSTFLAGS="-C target-feature=+vsx" -+ # FIXME: i686 fails in inlining, apparently -+ - stage: 32bit-tier1 - #- env: TARGET=i686-unknown-freebsd NORUN=1 - #- env: TARGET=x86_64-unknown-freebsd NORUN=1 - #- env: TARGET=x86_64-unknown-netbsd NORUN=1 - #- env: TARGET=x86_64-sun-solaris NORUN=1 - - # FIXME: TBD -- - env: TARGET=arm-linux-androideabi -- - env: TARGET=arm-linux-androideabi RUSTFLAGS="-C target-feature=+v7,+neon" -- - env: TARGET=aarch64-linux-android -- - env: TARGET=aarch64-linux-android RUSTFLAGS="-C target-feature=+neon" -+ - stage: 64bit-tier2 -+ - stage: 32bit-tier2 - - # FIXME: iOS - # https://github.com/rust-lang-nursery/packed_simd/issues/26 -- - env: TARGET=i386-apple-ios - - env: TARGET=x86_64-apple-ios -+ # Is this related to the above? Mysterious test failure -+ - name: "aarch64-apple-ios + NEON" - - # FIXME: https://github.com/rust-lang-nursery/packed_simd/issues/182 - - env: TARGET=arm-unknown-linux-gnueabi RUSTFLAGS="-C target-feature=+v7,+neon" - - env: TARGET=arm-unknown-linux-gnueabihf RUSTFLAGS="-C target-feature=+v7,+neon" - - env: TARGET=armv7-unknown-linux-gnueabihf RUSTFLAGS="-C target-feature=+neon" - - # FIXME: https://github.com/rust-lang-nursery/packed_simd/issues/183 - - env: TARGET=wasm32-unknown-unknown -diff --git a/third_party/rust/packed_simd/Cargo.toml b/third_party/rust/packed_simd/Cargo.toml ---- a/third_party/rust/packed_simd/Cargo.toml -+++ b/third_party/rust/packed_simd/Cargo.toml -@@ -1,11 +1,11 @@ - [package] - name = "packed_simd" --version = "0.3.3" -+version = "0.3.4" - authors = ["Gonzalo Brito Gadeschi "] - description = "Portable Packed SIMD vectors" - documentation = "https://docs.rs/crate/packed_simd/" - homepage = "https://github.com/rust-lang-nursery/packed_simd" - repository = "https://github.com/rust-lang-nursery/packed_simd" - keywords = ["simd", "vector", "portability"] - categories = ["hardware-support", "concurrency", "no-std", "data-structures"] - license = "MIT/Apache-2.0" -@@ -16,27 +16,27 @@ edition = "2018" - appveyor = { repository = "rust-lang-nursery/packed_simd" } - travis-ci = { repository = "rust-lang-nursery/packed_simd" } - codecov = { repository = "rust-lang-nursery/packed_simd" } - is-it-maintained-issue-resolution = { repository = "rust-lang-nursery/packed_simd" } - is-it-maintained-open-issues = { repository = "rust-lang-nursery/packed_simd" } - maintenance = { status = "experimental" } - - [dependencies] --cfg-if = "^0.1.6" --core_arch = { version = "^0.1.3", optional = true } -+cfg-if = "0.1.10" -+core_arch = { version = "0.1.5", optional = true } - - [features] - default = [] - into_bits = [] - libcore_neon = [] - - [dev-dependencies] - paste = "^0.1.3" --arrayvec = { version = "^0.4", default-features = false } -+arrayvec = { version = "^0.5", default-features = false } - - [target.'cfg(target_arch = "x86_64")'.dependencies.sleef-sys] --version = "^0.1.2" -+version = "0.1.2" - optional = true - - [target.wasm32-unknown-unknown.dev-dependencies] --wasm-bindgen = "=0.2.19" --wasm-bindgen-test = "=0.2.19" -\ No newline at end of file -+wasm-bindgen = "=0.2.52" -+wasm-bindgen-test = "=0.3.2" -diff --git a/third_party/rust/packed_simd/readme.md b/third_party/rust/packed_simd/README.md -rename from third_party/rust/packed_simd/readme.md -rename to third_party/rust/packed_simd/README.md ---- a/third_party/rust/packed_simd/readme.md -+++ b/third_party/rust/packed_simd/README.md -@@ -1,24 +1,22 @@ - # `Simd<[T; N]>` - - ## Implementation of [Rust RFC #2366: `std::simd`][rfc2366] - - [![Travis-CI Status]][travis] [![Appveyor Status]][appveyor] [![Latest Version]][crates.io] [![docs]][master_docs] - --> This aims to be a 100% conforming implementation of Rust RFC 2366 for stabilization. -- --**WARNING**: this crate only supports the most recent nightly Rust toolchain. -+**WARNING**: this crate only supports the most recent nightly Rust toolchain -+and will be superceded by [stdsimd](https://github.com/rust-lang/stdsimd). - - ## Documentation - - * [API docs (`master` branch)][master_docs] - * [Performance guide][perf_guide] --* [API docs (`docs.rs`)][docs.rs]: **CURRENTLY DOWN** due to -- https://github.com/rust-lang-nursery/packed_simd/issues/110 -+* [API docs (`docs.rs`)][docs.rs] - * [RFC2366 `std::simd`][rfc2366]: - contains motivation, design rationale, - discussion, etc. - - ## Examples - - Most of the examples come with both a scalar and a vectorized implementation. - - * [`aobench`](https://github.com/rust-lang-nursery/packed_simd/tree/master/examples/aobench) -@@ -34,27 +32,16 @@ Most of the examples come with both a sc - - ## Cargo features - - * `into_bits` (default: disabled): enables `FromBits`/`IntoBits` trait - implementations for the vector types. These allow reinterpreting the bits of a - vector type as those of another vector type safely by just using the - `.into_bits()` method. - --* `core_arch` (default: disabled): enable this feature to recompile `core::arch` -- for the target-features enabled. `packed_simd` includes optimizations for some -- target feature combinations that are enabled by this feature. Note, however, -- that this is an unstable dependency, that rustc might break at any time. -- --* `sleef-sys` (default: disabled - `x86_64` only): internally uses the [SLEEF] -- short-vector math library when profitable via the [`sleef-sys`][sleef_sys] -- crate. [SLEEF] is licensed under the [Boost Software License -- v1.0][boost_license], an extremely permissive license, and can be statically -- linked without issues. -- - ## Performance - - The following [ISPC] examples are also part of `packed_simd`'s - [`examples/`](https://github.com/rust-lang-nursery/packed_simd/tree/master/examples/) - directory, where `packed_simd`+[`rayon`][rayon] are used to emulate [ISPC]'s - Single-Program-Multiple-Data (SPMD) programming model. The performance results - on different hardware is shown in the `readme.md` of each example. The following - table summarizes the performance ranges, where `+` means speed-up and `-` -@@ -70,70 +57,50 @@ slowdown: - While SPMD is not the intended use case for `packed_simd`, it is possible to - combine the library with [`rayon`][rayon] to poorly emulate [ISPC]'s SPMD programming - model in Rust. Writing performant code is not as straightforward as with - [ISPC], but with some care (e.g. see the [Performance Guide][perf_guide]) one - can easily match and often out-perform [ISPC]'s "default performance". - - ## Platform support - --The following table describes the supported platforms: `build` shows whether the --library compiles without issues for a given target, while `run` shows whether --the full testsuite passes on the target. -+The following table describes the supported platforms: `build` shows whether -+the library compiles without issues for a given target, while `run` shows -+whether the test suite passes for a given target. - --| Linux targets: | build | run | --|-----------------------------------|-----------|---------| --| `i586-unknown-linux-gnu` | ✓ | ✓ | --| `i686-unknown-linux-gnu` | ✓ | ✓ | --| `x86_64-unknown-linux-gnu` | ✓ | ✓ | --| `arm-unknown-linux-gnueabi` | ✗ | ✗ | --| `arm-unknown-linux-gnueabihf` | ✓ | ✓ | --| `armv7-unknown-linux-gnueabi` | ✓ | ✓ | --| `aarch64-unknown-linux-gnu` | ✓ | ✓ | --| `mips-unknown-linux-gnu` | ✓ | ✓ | --| `mipsel-unknown-linux-musl` | ✓ | ✓ | --| `mips64-unknown-linux-gnuabi64` | ✓ | ✓ | --| `mips64el-unknown-linux-gnuabi64` | ✓ | ✓ | --| `powerpc-unknown-linux-gnu` | ✗ | ✗ | --| `powerpc64-unknown-linux-gnu` | ✗ | ✗ | --| `powerpc64le-unknown-linux-gnu` | ✗ | ✗ | --| `s390x-unknown-linux-gnu` | ✓ | ✓* | --| `sparc64-unknown-linux-gnu` | ✓ | ✓* | --| `thumbv7neon-unknown-linux-gnueabihf` | ✓ | ✓ | --| **MacOSX targets:** | **build** | **run** | --| `x86_64-apple-darwin` | ✓ | ✓ | --| `i686-apple-darwin` | ✓ | ✓ | --| **Windows targets:** | **build** | **run** | --| `x86_64-pc-windows-msvc` | ✓ | ✓ | --| `i686-pc-windows-msvc` | ✓ | ✓ | --| `x86_64-pc-windows-gnu` | ✗ | ✗ | --| `i686-pc-windows-gnu` | ✗ | ✗ | --| **WebAssembly targets:** | **build** | **run** | --| `wasm32-unknown-unknown` | ✓ | ✓ | --| **Android targets:** | **build** | **run** | --| `x86_64-linux-android` | ✓ | ✓ | --| `arm-linux-androideabi` | ✓ | ✓ | --| `aarch64-linux-android` | ✓ | ✗ | --| `thumbv7neon-linux-androideabi` | ✓ | ✓ | --| **iOS targets:** | **build** | **run** | --| `i386-apple-ios` | ✓ | ✗ | --| `x86_64-apple-ios` | ✓ | ✗ | --| `armv7-apple-ios` | ✓ | ✗** | --| `aarch64-apple-ios` | ✓ | ✗** | --| **xBSD targets:** | **build** | **run** | --| `i686-unknown-freebsd` | ✗ | ✗** | --| `x86_64-unknown-freebsd` | ✗ | ✗** | --| `x86_64-unknown-netbsd` | ✗ | ✗** | --| **Solaris targets:** | **build** | **run** | --| `x86_64-sun-solaris` | ✗ | ✗** | -+| **Linux** | **build** | **run** | -+|---------------------------------------|-----------|---------| -+| `i586-unknown-linux-gnu` | ✓ | ✗ | -+| `i686-unknown-linux-gnu` | ✓ | ✗ | -+| `x86_64-unknown-linux-gnu` | ✓ | ✓ | -+| `arm-unknown-linux-gnueabi` | ✗ | ✗ | -+| `arm-unknown-linux-gnueabihf` | ✓ | ✓ | -+| `armv7-unknown-linux-gnueabi` | ✓ | ✓ | -+| `aarch64-unknown-linux-gnu` | ✓ | ✓ | -+| `mips-unknown-linux-gnu` | ✓ | ✗ | -+| `mipsel-unknown-linux-musl` | ✓ | ✗ | -+| `mips64-unknown-linux-gnuabi64` | ✓ | ✗ | -+| `mips64el-unknown-linux-gnuabi64` | ✓ | ✗ | -+| `powerpc-unknown-linux-gnu` | ✗ | ✗ | -+| `powerpc64-unknown-linux-gnu` | ✗ | ✗ | -+| `powerpc64le-unknown-linux-gnu` | ✓ | ✓ | -+| `s390x-unknown-linux-gnu` | ✗ | ✗ | -+| `sparc64-unknown-linux-gnu` | ✓ | ✗ | -+| `thumbv7neon-unknown-linux-gnueabihf` | ✓ | ✓ | -+| **MacOSX** | **build** | **run** | -+| `x86_64-apple-darwin` | ✓ | ✓ | -+| **Android** | **build** | **run** | -+| `x86_64-linux-android` | ✓ | ✓ | -+| `arm-linux-androideabi` | ✓ | ✓ | -+| `aarch64-linux-android` | ✓ | ✓ | -+| `thumbv7neon-linux-androideabi` | ✗ | ✗ | -+| **iOS** | **build** | **run** | -+| `x86_64-apple-ios` | ✓ | ✗ | -+| `aarch64-apple-ios` | ✓ | ✗ | - --[*] most of the test suite passes correctly on these platform but --there are correctness bugs open in the issue tracker. -- --[**] it is currently not easily possible to run these platforms on CI. - - ## Machine code verification - - The - [`verify/`](https://github.com/rust-lang-nursery/packed_simd/tree/master/verify) - crate tests disassembles the portable packed vector APIs at run-time and - compares the generated machine code against the desired one to make sure that - this crate remains efficient. -@@ -157,18 +124,18 @@ Please see the [contributing instruction - - Contributions in any form (issues, pull requests, etc.) to this project - must adhere to Rust's [Code of Conduct]. - - Unless you explicitly state otherwise, any contribution intentionally submitted - for inclusion in `packed_simd` by you, as defined in the Apache-2.0 license, shall be - dual licensed as above, without any additional terms or conditions. - --[travis]: https://travis-ci.org/rust-lang-nursery/packed_simd --[Travis-CI Status]: https://travis-ci.org/rust-lang-nursery/packed_simd.svg?branch=master -+[travis]: https://travis-ci.com/rust-lang-nursery/packed_simd -+[Travis-CI Status]: https://travis-ci.com/rust-lang-nursery/packed_simd.svg?branch=master - [appveyor]: https://ci.appveyor.com/project/gnzlbg/packed-simd - [Appveyor Status]: https://ci.appveyor.com/api/projects/status/hd7v9dvr442hgdix?svg=true - [Latest Version]: https://img.shields.io/crates/v/packed_simd.svg - [crates.io]: https://crates.io/crates/packed_simd - [docs]: https://docs.rs/packed_simd/badge.svg - [docs.rs]: https://docs.rs/packed_simd/ - [master_docs]: https://rust-lang-nursery.github.io/packed_simd/packed_simd/ - [perf_guide]: https://rust-lang-nursery.github.io/packed_simd/perf-guide/ -diff --git a/third_party/rust/packed_simd/build.rs b/third_party/rust/packed_simd/build.rs ---- a/third_party/rust/packed_simd/build.rs -+++ b/third_party/rust/packed_simd/build.rs -@@ -1,8 +1,8 @@ - fn main() { -- println!("cargo:rustc-env=RUSTC_BOOTSTRAP=1"); -+ println!("cargo:rustc-env=RUSTC_BOOTSTRAP=1"); - let target = std::env::var("TARGET") - .expect("TARGET environment variable not defined"); - if target.contains("neon") { - println!("cargo:rustc-cfg=libcore_neon"); - } - } -diff --git a/third_party/rust/packed_simd/ci/all.sh b/third_party/rust/packed_simd/ci/all.sh ---- a/third_party/rust/packed_simd/ci/all.sh -+++ b/third_party/rust/packed_simd/ci/all.sh -@@ -16,17 +16,17 @@ cargo_check_fmt() { - cargo fmt --all -- --check - } - - cargo_fmt() { - cargo fmt --all - } - - cargo_clippy() { -- cargo clippy --all -- -D clippy::pedantic -+ cargo clippy --all -- -D clippy::perf - } - - CMD="-1" - - case $op in - clean*) - CMD=cargo_clean - ;; -diff --git a/third_party/rust/packed_simd/ci/docker/aarch64-unknown-linux-gnu/Dockerfile b/third_party/rust/packed_simd/ci/docker/aarch64-unknown-linux-gnu/Dockerfile ---- a/third_party/rust/packed_simd/ci/docker/aarch64-unknown-linux-gnu/Dockerfile -+++ b/third_party/rust/packed_simd/ci/docker/aarch64-unknown-linux-gnu/Dockerfile -@@ -1,9 +1,9 @@ --FROM ubuntu:17.10 -+FROM ubuntu:18.04 - RUN apt-get update && apt-get install -y --no-install-recommends \ - gcc \ - ca-certificates \ - libc6-dev \ - gcc-aarch64-linux-gnu \ - libc6-dev-arm64-cross \ - qemu-user \ - make \ -diff --git a/third_party/rust/packed_simd/ci/docker/arm-unknown-linux-gnueabi/Dockerfile b/third_party/rust/packed_simd/ci/docker/arm-unknown-linux-gnueabi/Dockerfile ---- a/third_party/rust/packed_simd/ci/docker/arm-unknown-linux-gnueabi/Dockerfile -+++ b/third_party/rust/packed_simd/ci/docker/arm-unknown-linux-gnueabi/Dockerfile -@@ -1,9 +1,9 @@ --FROM ubuntu:17.10 -+FROM ubuntu:18.04 - RUN apt-get update && apt-get install -y --no-install-recommends \ - gcc \ - ca-certificates \ - libc6-dev \ - libc6-armel-cross \ - libc6-dev-armel-cross \ - binutils-arm-linux-gnueabi \ - gcc-arm-linux-gnueabi \ -diff --git a/third_party/rust/packed_simd/ci/docker/arm-unknown-linux-gnueabihf/Dockerfile b/third_party/rust/packed_simd/ci/docker/arm-unknown-linux-gnueabihf/Dockerfile ---- a/third_party/rust/packed_simd/ci/docker/arm-unknown-linux-gnueabihf/Dockerfile -+++ b/third_party/rust/packed_simd/ci/docker/arm-unknown-linux-gnueabihf/Dockerfile -@@ -1,9 +1,9 @@ --FROM ubuntu:17.10 -+FROM ubuntu:18.04 - RUN apt-get update && apt-get install -y --no-install-recommends \ - gcc \ - ca-certificates \ - libc6-dev \ - gcc-arm-linux-gnueabihf \ - libc6-dev-armhf-cross \ - qemu-user \ - make \ -diff --git a/third_party/rust/packed_simd/ci/docker/armv7-unknown-linux-gnueabihf/Dockerfile b/third_party/rust/packed_simd/ci/docker/armv7-unknown-linux-gnueabihf/Dockerfile ---- a/third_party/rust/packed_simd/ci/docker/armv7-unknown-linux-gnueabihf/Dockerfile -+++ b/third_party/rust/packed_simd/ci/docker/armv7-unknown-linux-gnueabihf/Dockerfile -@@ -1,9 +1,9 @@ --FROM ubuntu:17.10 -+FROM ubuntu:18.04 - RUN apt-get update && apt-get install -y --no-install-recommends \ - gcc \ - ca-certificates \ - libc6-dev \ - gcc-arm-linux-gnueabihf \ - libc6-dev-armhf-cross \ - qemu-user \ - make \ -diff --git a/third_party/rust/packed_simd/ci/docker/i586-unknown-linux-gnu/Dockerfile b/third_party/rust/packed_simd/ci/docker/i586-unknown-linux-gnu/Dockerfile ---- a/third_party/rust/packed_simd/ci/docker/i586-unknown-linux-gnu/Dockerfile -+++ b/third_party/rust/packed_simd/ci/docker/i586-unknown-linux-gnu/Dockerfile -@@ -1,7 +1,7 @@ --FROM ubuntu:17.10 -+FROM ubuntu:18.04 - RUN apt-get update && apt-get install -y --no-install-recommends \ - gcc-multilib \ - libc6-dev \ - file \ - make \ - ca-certificates -diff --git a/third_party/rust/packed_simd/ci/docker/i686-unknown-linux-gnu/Dockerfile b/third_party/rust/packed_simd/ci/docker/i686-unknown-linux-gnu/Dockerfile ---- a/third_party/rust/packed_simd/ci/docker/i686-unknown-linux-gnu/Dockerfile -+++ b/third_party/rust/packed_simd/ci/docker/i686-unknown-linux-gnu/Dockerfile -@@ -1,7 +1,7 @@ --FROM ubuntu:17.10 -+FROM ubuntu:18.04 - RUN apt-get update && apt-get install -y --no-install-recommends \ - gcc-multilib \ - libc6-dev \ - file \ - make \ - ca-certificates -diff --git a/third_party/rust/packed_simd/ci/docker/mips-unknown-linux-gnu/Dockerfile b/third_party/rust/packed_simd/ci/docker/mips-unknown-linux-gnu/Dockerfile ---- a/third_party/rust/packed_simd/ci/docker/mips-unknown-linux-gnu/Dockerfile -+++ b/third_party/rust/packed_simd/ci/docker/mips-unknown-linux-gnu/Dockerfile -@@ -1,9 +1,9 @@ --FROM ubuntu:17.10 -+FROM ubuntu:18.04 - - RUN apt-get update && apt-get install -y --no-install-recommends \ - gcc libc6-dev qemu-user ca-certificates \ - gcc-mips-linux-gnu libc6-dev-mips-cross \ - qemu-system-mips \ - qemu-user \ - make \ - file -diff --git a/third_party/rust/packed_simd/ci/docker/mips64-unknown-linux-gnuabi64/Dockerfile b/third_party/rust/packed_simd/ci/docker/mips64-unknown-linux-gnuabi64/Dockerfile ---- a/third_party/rust/packed_simd/ci/docker/mips64-unknown-linux-gnuabi64/Dockerfile -+++ b/third_party/rust/packed_simd/ci/docker/mips64-unknown-linux-gnuabi64/Dockerfile -@@ -1,9 +1,9 @@ --FROM ubuntu:17.10 -+FROM ubuntu:18.04 - - RUN apt-get update && apt-get install -y --no-install-recommends \ - gcc libc6-dev qemu-user ca-certificates \ - gcc-mips64-linux-gnuabi64 libc6-dev-mips64-cross \ - qemu-system-mips64 qemu-user - - ENV CARGO_TARGET_MIPS64_UNKNOWN_LINUX_GNUABI64_LINKER=mips64-linux-gnuabi64-gcc \ - CARGO_TARGET_MIPS64_UNKNOWN_LINUX_GNUABI64_RUNNER="qemu-mips64 -L /usr/mips64-linux-gnuabi64" \ -diff --git a/third_party/rust/packed_simd/ci/docker/mips64el-unknown-linux-gnuabi64/Dockerfile b/third_party/rust/packed_simd/ci/docker/mips64el-unknown-linux-gnuabi64/Dockerfile ---- a/third_party/rust/packed_simd/ci/docker/mips64el-unknown-linux-gnuabi64/Dockerfile -+++ b/third_party/rust/packed_simd/ci/docker/mips64el-unknown-linux-gnuabi64/Dockerfile -@@ -1,9 +1,9 @@ --FROM ubuntu:17.10 -+FROM ubuntu:18.04 - - RUN apt-get update && apt-get install -y --no-install-recommends \ - gcc libc6-dev qemu-user ca-certificates \ - gcc-mips64el-linux-gnuabi64 libc6-dev-mips64el-cross \ - qemu-system-mips64el - - ENV CARGO_TARGET_MIPS64EL_UNKNOWN_LINUX_GNUABI64_LINKER=mips64el-linux-gnuabi64-gcc \ - CARGO_TARGET_MIPS64EL_UNKNOWN_LINUX_GNUABI64_RUNNER="qemu-mips64el -L /usr/mips64el-linux-gnuabi64" \ -diff --git a/third_party/rust/packed_simd/ci/docker/mipsel-unknown-linux-musl/Dockerfile b/third_party/rust/packed_simd/ci/docker/mipsel-unknown-linux-musl/Dockerfile ---- a/third_party/rust/packed_simd/ci/docker/mipsel-unknown-linux-musl/Dockerfile -+++ b/third_party/rust/packed_simd/ci/docker/mipsel-unknown-linux-musl/Dockerfile -@@ -11,15 +11,15 @@ RUN apt-get update && \ - bzip2 \ - curl \ - file - - RUN mkdir /toolchain - - # Note that this originally came from: - # 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 --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 | \ -+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 | \ - tar xjf - -C /toolchain --strip-components=2 - - ENV PATH=$PATH:/rust/bin:/toolchain/bin \ - CC_mipsel_unknown_linux_musl=mipsel-openwrt-linux-gcc \ - CARGO_TARGET_MIPSEL_UNKNOWN_LINUX_MUSL_LINKER=mipsel-openwrt-linux-gcc \ -- CARGO_TARGET_MIPSEL_UNKNOWN_LINUX_MUSL_RUNNER="qemu-mipsel -L /toolchain" -\ No newline at end of file -+ CARGO_TARGET_MIPSEL_UNKNOWN_LINUX_MUSL_RUNNER="qemu-mipsel -L /toolchain" -diff --git a/third_party/rust/packed_simd/ci/docker/powerpc-unknown-linux-gnu/Dockerfile b/third_party/rust/packed_simd/ci/docker/powerpc-unknown-linux-gnu/Dockerfile ---- a/third_party/rust/packed_simd/ci/docker/powerpc-unknown-linux-gnu/Dockerfile -+++ b/third_party/rust/packed_simd/ci/docker/powerpc-unknown-linux-gnu/Dockerfile -@@ -1,12 +1,13 @@ --FROM ubuntu:17.10 -+FROM ubuntu:18.04 - - RUN apt-get update && apt-get install -y --no-install-recommends \ - gcc libc6-dev qemu-user ca-certificates \ - gcc-powerpc-linux-gnu libc6-dev-powerpc-cross \ - qemu-system-ppc \ - make \ - file - - ENV CARGO_TARGET_POWERPC_UNKNOWN_LINUX_GNU_LINKER=powerpc-linux-gnu-gcc \ - CARGO_TARGET_POWERPC_UNKNOWN_LINUX_GNU_RUNNER="qemu-ppc -cpu Vger -L /usr/powerpc-linux-gnu" \ -+ CC=powerpc-linux-gnu-gcc \ - OBJDUMP=powerpc-linux-gnu-objdump -diff --git a/third_party/rust/packed_simd/ci/docker/powerpc64-unknown-linux-gnu/Dockerfile b/third_party/rust/packed_simd/ci/docker/powerpc64-unknown-linux-gnu/Dockerfile ---- a/third_party/rust/packed_simd/ci/docker/powerpc64-unknown-linux-gnu/Dockerfile -+++ b/third_party/rust/packed_simd/ci/docker/powerpc64-unknown-linux-gnu/Dockerfile -@@ -1,9 +1,9 @@ --FROM ubuntu:17.10 -+FROM ubuntu:18.04 - - RUN apt-get update && apt-get install -y --no-install-recommends \ - gcc \ - ca-certificates \ - libc6-dev \ - gcc-powerpc64-linux-gnu \ - libc6-dev-ppc64-cross \ - qemu-user \ -diff --git a/third_party/rust/packed_simd/ci/docker/powerpc64le-unknown-linux-gnu/Dockerfile b/third_party/rust/packed_simd/ci/docker/powerpc64le-unknown-linux-gnu/Dockerfile ---- a/third_party/rust/packed_simd/ci/docker/powerpc64le-unknown-linux-gnu/Dockerfile -+++ b/third_party/rust/packed_simd/ci/docker/powerpc64le-unknown-linux-gnu/Dockerfile -@@ -1,9 +1,9 @@ --FROM ubuntu:17.10 -+FROM ubuntu:18.04 - - RUN apt-get update && apt-get install -y --no-install-recommends \ - gcc libc6-dev qemu-user ca-certificates \ - gcc-powerpc64le-linux-gnu libc6-dev-ppc64el-cross \ - qemu-system-ppc file make - - ENV CARGO_TARGET_POWERPC64LE_UNKNOWN_LINUX_GNU_LINKER=powerpc64le-linux-gnu-gcc \ - CARGO_TARGET_POWERPC64LE_UNKNOWN_LINUX_GNU_RUNNER="qemu-ppc64le -L /usr/powerpc64le-linux-gnu" \ -diff --git a/third_party/rust/packed_simd/ci/docker/thumbv7neon-unknown-linux-gnueabihf/Dockerfile b/third_party/rust/packed_simd/ci/docker/thumbv7neon-unknown-linux-gnueabihf/Dockerfile ---- a/third_party/rust/packed_simd/ci/docker/thumbv7neon-unknown-linux-gnueabihf/Dockerfile -+++ b/third_party/rust/packed_simd/ci/docker/thumbv7neon-unknown-linux-gnueabihf/Dockerfile -@@ -1,9 +1,9 @@ --FROM ubuntu:17.10 -+FROM ubuntu:18.04 - RUN apt-get update && apt-get install -y --no-install-recommends \ - gcc \ - ca-certificates \ - libc6-dev \ - gcc-arm-linux-gnueabihf \ - libc6-dev-armhf-cross \ - qemu-user \ - make \ -diff --git a/third_party/rust/packed_simd/ci/docker/x86_64-unknown-linux-gnu/Dockerfile b/third_party/rust/packed_simd/ci/docker/x86_64-unknown-linux-gnu/Dockerfile ---- a/third_party/rust/packed_simd/ci/docker/x86_64-unknown-linux-gnu/Dockerfile -+++ b/third_party/rust/packed_simd/ci/docker/x86_64-unknown-linux-gnu/Dockerfile -@@ -1,9 +1,9 @@ --FROM ubuntu:17.10 -+FROM ubuntu:18.04 - RUN apt-get update && apt-get install -y --no-install-recommends \ - gcc \ - libc6-dev \ - file \ - make \ - ca-certificates \ - cmake \ - libclang-dev \ -diff --git a/third_party/rust/packed_simd/ci/dox.sh b/third_party/rust/packed_simd/ci/dox.sh ---- a/third_party/rust/packed_simd/ci/dox.sh -+++ b/third_party/rust/packed_simd/ci/dox.sh -@@ -13,12 +13,15 @@ cargo doc --features=into_bits - # mdbook build perf-guide -d target/doc/perf-guide - cd perf-guide - mdbook build - cd - - cp -r perf-guide/book target/doc/perf-guide - - # If we're on travis, not a PR, and on the right branch, publish! - if [ "$TRAVIS_PULL_REQUEST" = "false" ] && [ "$TRAVIS_BRANCH" = "master" ]; then -- pip install ghp_import --install-option="--prefix=$HOME/.local" -- $HOME/.local/bin/ghp-import -n target/doc -+ python3 -vV -+ pip -vV -+ python3.9 -vV -+ pip install ghp_import --user -+ ghp-import -n target/doc - git push -qf https://${GH_PAGES}@github.com/${TRAVIS_REPO_SLUG}.git gh-pages - fi -diff --git a/third_party/rust/packed_simd/ci/run.sh b/third_party/rust/packed_simd/ci/run.sh ---- a/third_party/rust/packed_simd/ci/run.sh -+++ b/third_party/rust/packed_simd/ci/run.sh -@@ -73,19 +73,21 @@ cargo_test_impl() { - # Debug run: - if [[ "${TARGET}" != "wasm32-unknown-unknown" ]]; then - # Run wasm32-unknown-unknown in release mode only - cargo_test_impl - fi - - if [[ "${TARGET}" == "x86_64-unknown-linux-gnu" ]] || [[ "${TARGET}" == "x86_64-pc-windows-msvc" ]]; then - # use sleef on linux and windows x86_64 builds -- cargo_test_impl --release --features=into_bits,core_arch,sleef-sys -+ # FIXME: Use `core_arch,sleef-sys` features once they works again -+ cargo_test_impl --release --features=into_bits - else -- cargo_test_impl --release --features=into_bits,core_arch -+ # FIXME: Use `core_arch` feature once it works again -+ cargo_test_impl --release --features=into_bits - fi - - # Verify code generation - if [[ "${NOVERIFY}" != "1" ]]; then - cp -r verify/verify target/verify - export STDSIMD_ASSERT_INSTR_LIMIT=30 - if [[ "${TARGET}" == "i586-unknown-linux-gnu" ]]; then - export STDSIMD_ASSERT_INSTR_LIMIT=50 -diff --git a/third_party/rust/packed_simd/ci/setup_benchmarks.sh b/third_party/rust/packed_simd/ci/setup_benchmarks.sh ---- a/third_party/rust/packed_simd/ci/setup_benchmarks.sh -+++ b/third_party/rust/packed_simd/ci/setup_benchmarks.sh -@@ -1,10 +1,7 @@ - #!/usr/bin/env bash - - set -ex - - # Get latest ISPC binary for the target and put it in the path - git clone https://github.com/gnzlbg/ispc-binaries - cp ispc-binaries/ispc-${TARGET} ispc -- --# Rust-bindgen requires RUSTFMT --rustup component add rustfmt-preview -diff --git a/third_party/rust/packed_simd/src/api.rs b/third_party/rust/packed_simd/src/api.rs ---- a/third_party/rust/packed_simd/src/api.rs -+++ b/third_party/rust/packed_simd/src/api.rs -@@ -1,10 +1,12 @@ - //! Implements the Simd<[T; N]> APIs - -+#[macro_use] -+mod bitmask; - crate mod cast; - #[macro_use] - mod cmp; - #[macro_use] - mod default; - #[macro_use] - mod fmt; - #[macro_use] -@@ -34,17 +36,17 @@ mod swap_bytes; - #[macro_use] - mod bit_manip; - - #[cfg(feature = "into_bits")] - crate mod into_bits; - - macro_rules! impl_i { - ([$elem_ty:ident; $elem_n:expr]: $tuple_id:ident, $mask_ty:ident -- | $ielem_ty:ident | $test_tt:tt | $($elem_ids:ident),* -+ | $ielem_ty:ident, $ibitmask_ty:ident | $test_tt:tt | $($elem_ids:ident),* - | From: $($from_vec_ty:ident),* | $(#[$doc:meta])*) => { - impl_minimal_iuf!([$elem_ty; $elem_n]: $tuple_id | $ielem_ty | $test_tt - | $($elem_ids),* | $(#[$doc])*); - impl_ops_vector_arithmetic!([$elem_ty; $elem_n]: $tuple_id | $test_tt); - impl_ops_scalar_arithmetic!([$elem_ty; $elem_n]: $tuple_id | $test_tt); - impl_ops_vector_bitwise!( - [$elem_ty; $elem_n]: $tuple_id | $test_tt | (!(0 as $elem_ty), 0) - ); -@@ -88,26 +90,27 @@ macro_rules! impl_i { - [$elem_ty; $elem_n]: $tuple_id | $test_tt | (0, 1) - ); - impl_cmp_eq!([$elem_ty; $elem_n]: $tuple_id | $test_tt | (0, 1)); - impl_cmp_vertical!( - [$elem_ty; $elem_n]: $tuple_id, $mask_ty, false, (1, 0) | $test_tt - ); - impl_cmp_partial_ord!([$elem_ty; $elem_n]: $tuple_id | $test_tt); - impl_cmp_ord!([$elem_ty; $elem_n]: $tuple_id | $test_tt | (0, 1)); -+ impl_bitmask!($tuple_id | $ibitmask_ty | (-1, 0) | $test_tt); - - test_select!($elem_ty, $mask_ty, $tuple_id, (1, 2) | $test_tt); - test_cmp_partial_ord_int!([$elem_ty; $elem_n]: $tuple_id | $test_tt); - test_shuffle1_dyn!([$elem_ty; $elem_n]: $tuple_id | $test_tt); - } - } - - macro_rules! impl_u { - ([$elem_ty:ident; $elem_n:expr]: $tuple_id:ident, $mask_ty:ident -- | $ielem_ty:ident | $test_tt:tt | $($elem_ids:ident),* -+ | $ielem_ty:ident, $ibitmask_ty:ident | $test_tt:tt | $($elem_ids:ident),* - | From: $($from_vec_ty:ident),* | $(#[$doc:meta])*) => { - impl_minimal_iuf!([$elem_ty; $elem_n]: $tuple_id | $ielem_ty | $test_tt - | $($elem_ids),* | $(#[$doc])*); - impl_ops_vector_arithmetic!([$elem_ty; $elem_n]: $tuple_id | $test_tt); - impl_ops_scalar_arithmetic!([$elem_ty; $elem_n]: $tuple_id | $test_tt); - impl_ops_vector_bitwise!( - [$elem_ty; $elem_n]: $tuple_id | $test_tt | (!(0 as $elem_ty), 0) - ); -@@ -150,16 +153,18 @@ macro_rules! impl_u { - [$elem_ty; $elem_n]: $tuple_id | $test_tt | (1, 0) - ); - impl_cmp_eq!([$elem_ty; $elem_n]: $tuple_id | $test_tt | (0, 1)); - impl_cmp_vertical!( - [$elem_ty; $elem_n]: $tuple_id, $mask_ty, false, (1, 0) | $test_tt - ); - impl_cmp_partial_ord!([$elem_ty; $elem_n]: $tuple_id | $test_tt); - impl_cmp_ord!([$elem_ty; $elem_n]: $tuple_id | $test_tt | (0, 1)); -+ impl_bitmask!($tuple_id | $ibitmask_ty | ($ielem_ty::max_value(), 0) | -+ $test_tt); - - test_select!($elem_ty, $mask_ty, $tuple_id, (1, 2) | $test_tt); - test_cmp_partial_ord_int!([$elem_ty; $elem_n]: $tuple_id | $test_tt); - test_shuffle1_dyn!([$elem_ty; $elem_n]: $tuple_id | $test_tt); - } - } - - macro_rules! impl_f { -@@ -217,17 +222,18 @@ macro_rules! impl_f { - test_reduction_float_min_max!( - [$elem_ty; $elem_n]: $tuple_id | $test_tt - ); - test_shuffle1_dyn!([$elem_ty; $elem_n]: $tuple_id | $test_tt); - } - } - - macro_rules! impl_m { -- ([$elem_ty:ident; $elem_n:expr]: $tuple_id:ident | $ielem_ty:ident -+ ([$elem_ty:ident; $elem_n:expr]: $tuple_id:ident -+ | $ielem_ty:ident, $ibitmask_ty:ident - | $test_tt:tt | $($elem_ids:ident),* | From: $($from_vec_ty:ident),* - | $(#[$doc:meta])*) => { - impl_minimal_mask!( - [$elem_ty; $elem_n]: $tuple_id | $ielem_ty | $test_tt - | $($elem_ids),* | $(#[$doc])* - ); - impl_ops_vector_mask_bitwise!( - [$elem_ty; $elem_n]: $tuple_id | $test_tt | (true, false) -@@ -260,16 +266,17 @@ macro_rules! impl_m { - | $test_tt - ); - impl_select!([$elem_ty; $elem_n]: $tuple_id | $test_tt); - impl_cmp_partial_ord!([$elem_ty; $elem_n]: $tuple_id | $test_tt); - impl_cmp_ord!( - [$elem_ty; $elem_n]: $tuple_id | $test_tt | (false, true) - ); - impl_shuffle1_dyn!([$elem_ty; $elem_n]: $tuple_id | $test_tt); -+ impl_bitmask!($tuple_id | $ibitmask_ty | (true, false) | $test_tt); - - test_cmp_partial_ord_mask!([$elem_ty; $elem_n]: $tuple_id | $test_tt); - test_shuffle1_dyn_mask!([$elem_ty; $elem_n]: $tuple_id | $test_tt); - } - } - - macro_rules! impl_const_p { - ([$elem_ty:ty; $elem_n:expr]: $tuple_id:ident, $mask_ty:ident, -diff --git a/third_party/rust/packed_simd/src/api/bit_manip.rs b/third_party/rust/packed_simd/src/api/bit_manip.rs ---- a/third_party/rust/packed_simd/src/api/bit_manip.rs -+++ b/third_party/rust/packed_simd/src/api/bit_manip.rs -@@ -32,16 +32,17 @@ macro_rules! impl_bit_manip { - } - } - - test_if! { - $test_tt: - paste::item_with_macros! { - #[allow(overflowing_literals)] - pub mod [<$id _bit_manip>] { -+ #![allow(const_item_mutation)] - use super::*; - - const LANE_WIDTH: usize = mem::size_of::<$elem_ty>() * 8; - - macro_rules! test_func { - ($x:expr, $func:ident) => {{ - let mut actual = $x; - for i in 0..$id::lanes() { -diff --git a/third_party/rust/packed_simd/src/api/bitmask.rs b/third_party/rust/packed_simd/src/api/bitmask.rs -new file mode 100644 ---- /dev/null -+++ b/third_party/rust/packed_simd/src/api/bitmask.rs -@@ -0,0 +1,82 @@ -+//! Bitmask API -+ -+macro_rules! impl_bitmask { -+ ($id:ident | $ibitmask_ty:ident | ($set:expr, $clear:expr) -+ | $test_tt:tt) => { -+ impl $id { -+ /// Creates a bitmask with the MSB of each vector lane. -+ /// -+ /// If the vector has less than 8 lanes, the bits that do not -+ /// correspond to any vector lanes are cleared. -+ #[inline] -+ pub fn bitmask(self) -> $ibitmask_ty { -+ unsafe { codegen::llvm::simd_bitmask(self.0) } -+ } -+ } -+ -+ test_if! { -+ $test_tt: -+ paste::item! { -+ #[cfg(not(any( -+ // FIXME: https://github.com/rust-lang-nursery/packed_simd/issues/210 -+ all(target_arch = "mips", target_endian = "big"), -+ all(target_arch = "mips64", target_endian = "big"), -+ target_arch = "sparc64", -+ target_arch = "s390x", -+ )))] -+ pub mod [<$id _bitmask>] { -+ use super::*; -+ #[cfg_attr(not(target_arch = "wasm32"), test)] -+ #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] -+ fn bitmask() { -+ // clear all lanes -+ let vec = $id::splat($clear as _); -+ let bitmask: $ibitmask_ty = 0; -+ assert_eq!(vec.bitmask(), bitmask); -+ -+ // set even lanes -+ let mut vec = $id::splat($clear as _); -+ for i in 0..$id::lanes() { -+ if i % 2 == 0 { -+ vec = vec.replace(i, $set as _); -+ } -+ } -+ // create bitmask with even lanes set: -+ let mut bitmask: $ibitmask_ty = 0; -+ for i in 0..$id::lanes() { -+ if i % 2 == 0 { -+ bitmask |= 1 << i; -+ } -+ } -+ assert_eq!(vec.bitmask(), bitmask); -+ -+ -+ // set odd lanes -+ let mut vec = $id::splat($clear as _); -+ for i in 0..$id::lanes() { -+ if i % 2 != 0 { -+ vec = vec.replace(i, $set as _); -+ } -+ } -+ // create bitmask with odd lanes set: -+ let mut bitmask: $ibitmask_ty = 0; -+ for i in 0..$id::lanes() { -+ if i % 2 != 0 { -+ bitmask |= 1 << i; -+ } -+ } -+ assert_eq!(vec.bitmask(), bitmask); -+ -+ // set all lanes -+ let vec = $id::splat($set as _); -+ let mut bitmask: $ibitmask_ty = 0; -+ for i in 0..$id::lanes() { -+ bitmask |= 1 << i; -+ } -+ assert_eq!(vec.bitmask(), bitmask); -+ } -+ } -+ } -+ } -+ }; -+} -diff --git a/third_party/rust/packed_simd/src/api/cast/v128.rs b/third_party/rust/packed_simd/src/api/cast/v128.rs ---- a/third_party/rust/packed_simd/src/api/cast/v128.rs -+++ b/third_party/rust/packed_simd/src/api/cast/v128.rs -@@ -1,10 +1,10 @@ - //! `FromCast` and `IntoCast` implementations for portable 128-bit wide vectors --#![rustfmt::skip] -+#[rustfmt::skip] - - use crate::*; - - impl_from_cast!( - i8x16[test_v128]: u8x16, m8x16, i16x16, u16x16, m16x16, i32x16, u32x16, f32x16, m32x16 - ); - impl_from_cast!( - u8x16[test_v128]: i8x16, m8x16, i16x16, u16x16, m16x16, i32x16, u32x16, f32x16, m32x16 -diff --git a/third_party/rust/packed_simd/src/api/cast/v16.rs b/third_party/rust/packed_simd/src/api/cast/v16.rs ---- a/third_party/rust/packed_simd/src/api/cast/v16.rs -+++ b/third_party/rust/packed_simd/src/api/cast/v16.rs -@@ -1,10 +1,10 @@ - //! `FromCast` and `IntoCast` implementations for portable 16-bit wide vectors --#![rustfmt::skip] -+#[rustfmt::skip] - - use crate::*; - - impl_from_cast!( - i8x2[test_v16]: u8x2, m8x2, i16x2, u16x2, m16x2, i32x2, u32x2, f32x2, m32x2, - i64x2, u64x2, f64x2, m64x2, i128x2, u128x2, m128x2, isizex2, usizex2, msizex2 - ); - impl_from_cast!( -diff --git a/third_party/rust/packed_simd/src/api/cast/v256.rs b/third_party/rust/packed_simd/src/api/cast/v256.rs ---- a/third_party/rust/packed_simd/src/api/cast/v256.rs -+++ b/third_party/rust/packed_simd/src/api/cast/v256.rs -@@ -1,10 +1,10 @@ - //! `FromCast` and `IntoCast` implementations for portable 256-bit wide vectors --#![rustfmt::skip] -+#[rustfmt::skip] - - use crate::*; - - impl_from_cast!(i8x32[test_v256]: u8x32, m8x32, i16x32, u16x32, m16x32); - impl_from_cast!(u8x32[test_v256]: i8x32, m8x32, i16x32, u16x32, m16x32); - impl_from_cast_mask!(m8x32[test_v256]: i8x32, u8x32, i16x32, u16x32, m16x32); - - impl_from_cast!( -diff --git a/third_party/rust/packed_simd/src/api/cast/v32.rs b/third_party/rust/packed_simd/src/api/cast/v32.rs ---- a/third_party/rust/packed_simd/src/api/cast/v32.rs -+++ b/third_party/rust/packed_simd/src/api/cast/v32.rs -@@ -1,10 +1,10 @@ - //! `FromCast` and `IntoCast` implementations for portable 32-bit wide vectors --#![rustfmt::skip] -+#[rustfmt::skip] - - use crate::*; - - impl_from_cast!( - i8x4[test_v32]: u8x4, m8x4, i16x4, u16x4, m16x4, i32x4, u32x4, f32x4, m32x4, - i64x4, u64x4, f64x4, m64x4, i128x4, u128x4, m128x4, isizex4, usizex4, msizex4 - ); - impl_from_cast!( -diff --git a/third_party/rust/packed_simd/src/api/cast/v512.rs b/third_party/rust/packed_simd/src/api/cast/v512.rs ---- a/third_party/rust/packed_simd/src/api/cast/v512.rs -+++ b/third_party/rust/packed_simd/src/api/cast/v512.rs -@@ -1,10 +1,10 @@ - //! `FromCast` and `IntoCast` implementations for portable 512-bit wide vectors --#![rustfmt::skip] -+#[rustfmt::skip] - - use crate::*; - - impl_from_cast!(i8x64[test_v512]: u8x64, m8x64); - impl_from_cast!(u8x64[test_v512]: i8x64, m8x64); - impl_from_cast_mask!(m8x64[test_v512]: i8x64, u8x64); - - impl_from_cast!(i16x32[test_v512]: i8x32, u8x32, m8x32, u16x32, m16x32); -diff --git a/third_party/rust/packed_simd/src/api/cast/v64.rs b/third_party/rust/packed_simd/src/api/cast/v64.rs ---- a/third_party/rust/packed_simd/src/api/cast/v64.rs -+++ b/third_party/rust/packed_simd/src/api/cast/v64.rs -@@ -1,10 +1,10 @@ - //! `FromCast` and `IntoCast` implementations for portable 64-bit wide vectors --#![rustfmt::skip] -+#[rustfmt::skip] - - use crate::*; - - impl_from_cast!( - i8x8[test_v64]: u8x8, m8x8, i16x8, u16x8, m16x8, i32x8, u32x8, f32x8, m32x8, - i64x8, u64x8, f64x8, m64x8, isizex8, usizex8, msizex8 - ); - impl_from_cast!( -diff --git a/third_party/rust/packed_simd/src/api/default.rs b/third_party/rust/packed_simd/src/api/default.rs ---- a/third_party/rust/packed_simd/src/api/default.rs -+++ b/third_party/rust/packed_simd/src/api/default.rs -@@ -7,16 +7,18 @@ macro_rules! impl_default { - fn default() -> Self { - Self::splat($elem_ty::default()) - } - } - - test_if!{ - $test_tt: - paste::item! { -+ // Comparisons use integer casts within mantissa^1 range. -+ #[allow(clippy::float_cmp)] - pub mod [<$id _default>] { - use super::*; - #[cfg_attr(not(target_arch = "wasm32"), test)] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] - fn default() { - let a = $id::default(); - for i in 0..$id::lanes() { - assert_eq!(a.extract(i), $elem_ty::default()); - } -diff --git a/third_party/rust/packed_simd/src/api/from/from_array.rs b/third_party/rust/packed_simd/src/api/from/from_array.rs ---- a/third_party/rust/packed_simd/src/api/from/from_array.rs -+++ b/third_party/rust/packed_simd/src/api/from/from_array.rs -@@ -51,16 +51,18 @@ macro_rules! impl_from_array { - unsafe { U { array: self }.vec } - } - } - */ - - test_if! { - $test_tt: - paste::item! { -+ // Comparisons use integer casts within mantissa^1 range. -+ #[allow(clippy::float_cmp)] - mod [<$id _from>] { - use super::*; - #[test] - fn array() { - let vec: $id = Default::default(); - - // FIXME: Workaround for arrays with more than 32 - // elements. -diff --git a/third_party/rust/packed_simd/src/api/hash.rs b/third_party/rust/packed_simd/src/api/hash.rs ---- a/third_party/rust/packed_simd/src/api/hash.rs -+++ b/third_party/rust/packed_simd/src/api/hash.rs -@@ -31,16 +31,18 @@ macro_rules! impl_hash { - crate::mem::size_of::(), - crate::mem::size_of::<$id>() - ); - #[allow(deprecated)] - let mut a_hash = SipHasher13::new(); - let mut v_hash = a_hash.clone(); - a.hash(&mut a_hash); - -+ // Integer within mantissa^1 range. -+ #[allow(clippy::float_cmp)] - let v = $id::splat(42 as $elem_ty); - v.hash(&mut v_hash); - assert_eq!(a_hash.finish(), v_hash.finish()); - } - } - } - } - }; -diff --git a/third_party/rust/packed_simd/src/api/into_bits/arch_specific.rs b/third_party/rust/packed_simd/src/api/into_bits/arch_specific.rs ---- a/third_party/rust/packed_simd/src/api/into_bits/arch_specific.rs -+++ b/third_party/rust/packed_simd/src/api/into_bits/arch_specific.rs -@@ -1,11 +1,11 @@ - //! `FromBits` and `IntoBits` between portable vector types and the - //! architecture-specific vector types. --#![rustfmt::skip] -+#[rustfmt::skip] - - // FIXME: MIPS FromBits/IntoBits - - #[allow(unused)] - use crate::*; - - /// This macro implements FromBits for the portable and the architecture - /// specific vector types. -@@ -79,17 +79,16 @@ macro_rules! impl_arch { - } - - //////////////////////////////////////////////////////////////////////////////// - // Implementations for the 64-bit wide vector types: - - // FIXME: 64-bit single element types - // FIXME: arm/aarch float16x4_t missing - impl_arch!( -- [x86["x86"]: __m64], [x86_64["x86_64"]: __m64], - [arm["arm"]: int8x8_t, uint8x8_t, poly8x8_t, int16x4_t, uint16x4_t, - poly16x4_t, int32x2_t, uint32x2_t, float32x2_t, int64x1_t, - uint64x1_t], - [aarch64["aarch64"]: int8x8_t, uint8x8_t, poly8x8_t, int16x4_t, uint16x4_t, - poly16x4_t, int32x2_t, uint32x2_t, float32x2_t, int64x1_t, uint64x1_t, - float64x1_t] | - from: i8x8, u8x8, m8x8, i16x4, u16x4, m16x4, i32x2, u32x2, f32x2, m32x2 | - into: i8x8, u8x8, i16x4, u16x4, i32x2, u32x2, f32x2 | -diff --git a/third_party/rust/packed_simd/src/api/into_bits/v128.rs b/third_party/rust/packed_simd/src/api/into_bits/v128.rs ---- a/third_party/rust/packed_simd/src/api/into_bits/v128.rs -+++ b/third_party/rust/packed_simd/src/api/into_bits/v128.rs -@@ -1,10 +1,10 @@ - //! `FromBits` and `IntoBits` implementations for portable 128-bit wide vectors --#![rustfmt::skip] -+#[rustfmt::skip] - - #[allow(unused)] // wasm_bindgen_test - use crate::*; - - impl_from_bits!(i8x16[test_v128]: u8x16, m8x16, i16x8, u16x8, m16x8, i32x4, u32x4, f32x4, m32x4, i64x2, u64x2, f64x2, m64x2, i128x1, u128x1, m128x1); - impl_from_bits!(u8x16[test_v128]: i8x16, m8x16, i16x8, u16x8, m16x8, i32x4, u32x4, f32x4, m32x4, i64x2, u64x2, f64x2, m64x2, i128x1, u128x1, m128x1); - impl_from_bits!(m8x16[test_v128]: m16x8, m32x4, m64x2, m128x1); - -diff --git a/third_party/rust/packed_simd/src/api/into_bits/v16.rs b/third_party/rust/packed_simd/src/api/into_bits/v16.rs ---- a/third_party/rust/packed_simd/src/api/into_bits/v16.rs -+++ b/third_party/rust/packed_simd/src/api/into_bits/v16.rs -@@ -1,9 +1,9 @@ - //! `FromBits` and `IntoBits` implementations for portable 16-bit wide vectors --#![rustfmt::skip] -+#[rustfmt::skip] - - #[allow(unused)] // wasm_bindgen_test - use crate::*; - - impl_from_bits!(i8x2[test_v16]: u8x2, m8x2); - impl_from_bits!(u8x2[test_v16]: i8x2, m8x2); - // note: m8x2 cannot be constructed from all i8x2 or u8x2 bit patterns -diff --git a/third_party/rust/packed_simd/src/api/into_bits/v256.rs b/third_party/rust/packed_simd/src/api/into_bits/v256.rs ---- a/third_party/rust/packed_simd/src/api/into_bits/v256.rs -+++ b/third_party/rust/packed_simd/src/api/into_bits/v256.rs -@@ -1,10 +1,10 @@ - //! `FromBits` and `IntoBits` implementations for portable 256-bit wide vectors --#![rustfmt::skip] -+#[rustfmt::skip] - - #[allow(unused)] // wasm_bindgen_test - use crate::*; - - impl_from_bits!(i8x32[test_v256]: u8x32, m8x32, i16x16, u16x16, m16x16, i32x8, u32x8, f32x8, m32x8, i64x4, u64x4, f64x4, m64x4, i128x2, u128x2, m128x2); - impl_from_bits!(u8x32[test_v256]: i8x32, m8x32, i16x16, u16x16, m16x16, i32x8, u32x8, f32x8, m32x8, i64x4, u64x4, f64x4, m64x4, i128x2, u128x2, m128x2); - impl_from_bits!(m8x32[test_v256]: m16x16, m32x8, m64x4, m128x2); - -diff --git a/third_party/rust/packed_simd/src/api/into_bits/v32.rs b/third_party/rust/packed_simd/src/api/into_bits/v32.rs ---- a/third_party/rust/packed_simd/src/api/into_bits/v32.rs -+++ b/third_party/rust/packed_simd/src/api/into_bits/v32.rs -@@ -1,10 +1,10 @@ - //! `FromBits` and `IntoBits` implementations for portable 32-bit wide vectors --#![rustfmt::skip] -+#[rustfmt::skip] - - #[allow(unused)] // wasm_bindgen_test - use crate::*; - - impl_from_bits!(i8x4[test_v32]: u8x4, m8x4, i16x2, u16x2, m16x2); - impl_from_bits!(u8x4[test_v32]: i8x4, m8x4, i16x2, u16x2, m16x2); - impl_from_bits!(m8x4[test_v32]: m16x2); - -diff --git a/third_party/rust/packed_simd/src/api/into_bits/v512.rs b/third_party/rust/packed_simd/src/api/into_bits/v512.rs ---- a/third_party/rust/packed_simd/src/api/into_bits/v512.rs -+++ b/third_party/rust/packed_simd/src/api/into_bits/v512.rs -@@ -1,10 +1,10 @@ - //! `FromBits` and `IntoBits` implementations for portable 512-bit wide vectors --#![rustfmt::skip] -+#[rustfmt::skip] - - #[allow(unused)] // wasm_bindgen_test - use crate::*; - - impl_from_bits!(i8x64[test_v512]: u8x64, m8x64, i16x32, u16x32, m16x32, i32x16, u32x16, f32x16, m32x16, i64x8, u64x8, f64x8, m64x8, i128x4, u128x4, m128x4); - impl_from_bits!(u8x64[test_v512]: i8x64, m8x64, i16x32, u16x32, m16x32, i32x16, u32x16, f32x16, m32x16, i64x8, u64x8, f64x8, m64x8, i128x4, u128x4, m128x4); - impl_from_bits!(m8x64[test_v512]: m16x32, m32x16, m64x8, m128x4); - -diff --git a/third_party/rust/packed_simd/src/api/into_bits/v64.rs b/third_party/rust/packed_simd/src/api/into_bits/v64.rs ---- a/third_party/rust/packed_simd/src/api/into_bits/v64.rs -+++ b/third_party/rust/packed_simd/src/api/into_bits/v64.rs -@@ -1,10 +1,10 @@ - //! `FromBits` and `IntoBits` implementations for portable 64-bit wide vectors --#![rustfmt::skip] -+#[rustfmt::skip] - - #[allow(unused)] // wasm_bindgen_test - use crate::*; - - impl_from_bits!(i8x8[test_v64]: u8x8, m8x8, i16x4, u16x4, m16x4, i32x2, u32x2, f32x2, m32x2); - impl_from_bits!(u8x8[test_v64]: i8x8, m8x8, i16x4, u16x4, m16x4, i32x2, u32x2, f32x2, m32x2); - impl_from_bits!(m8x8[test_v64]: m16x4, m32x2); - -diff --git a/third_party/rust/packed_simd/src/api/minimal/iuf.rs b/third_party/rust/packed_simd/src/api/minimal/iuf.rs ---- a/third_party/rust/packed_simd/src/api/minimal/iuf.rs -+++ b/third_party/rust/packed_simd/src/api/minimal/iuf.rs -@@ -48,17 +48,17 @@ macro_rules! impl_minimal_iuf { - #[inline] - pub fn extract(self, index: usize) -> $elem_ty { - assert!(index < $elem_count); - unsafe { self.extract_unchecked(index) } - } - - /// Extracts the value at `index`. - /// -- /// # Precondition -+ /// # Safety - /// - /// If `index >= Self::lanes()` the behavior is undefined. - #[inline] - pub unsafe fn extract_unchecked(self, index: usize) -> $elem_ty { - use crate::llvm::simd_extract; - let e: $ielem_ty = simd_extract(self.0, index as u32); - e as $elem_ty - } -@@ -75,17 +75,17 @@ macro_rules! impl_minimal_iuf { - ] - pub fn replace(self, index: usize, new_value: $elem_ty) -> Self { - assert!(index < $elem_count); - unsafe { self.replace_unchecked(index, new_value) } - } - - /// Returns a new vector where the value at `index` is replaced by `new_value`. - /// -- /// # Precondition -+ /// # Safety - /// - /// If `index >= Self::lanes()` the behavior is undefined. - #[inline] - #[must_use = "replace_unchecked does not modify the original value - \ - it returns a new vector with the value at `index` \ - replaced by `new_value`d" - ] - pub unsafe fn replace_unchecked( -@@ -96,16 +96,18 @@ macro_rules! impl_minimal_iuf { - use crate::llvm::simd_insert; - Simd(simd_insert(self.0, index as u32, new_value as $ielem_ty)) - } - } - - test_if!{ - $test_tt: - paste::item! { -+ // Comparisons use integer casts within mantissa^1 range. -+ #[allow(clippy::float_cmp)] - pub mod [<$id _minimal>] { - use super::*; - #[cfg_attr(not(target_arch = "wasm32"), test)] - #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] - fn minimal() { - // lanes: - assert_eq!($elem_count, $id::lanes()); - -diff --git a/third_party/rust/packed_simd/src/api/minimal/mask.rs b/third_party/rust/packed_simd/src/api/minimal/mask.rs ---- a/third_party/rust/packed_simd/src/api/minimal/mask.rs -+++ b/third_party/rust/packed_simd/src/api/minimal/mask.rs -@@ -53,16 +53,18 @@ macro_rules! impl_minimal_mask { - #[inline] - pub fn extract(self, index: usize) -> bool { - assert!(index < $elem_count); - unsafe { self.extract_unchecked(index) } - } - - /// Extracts the value at `index`. - /// -+ /// # Safety -+ /// - /// If `index >= Self::lanes()` the behavior is undefined. - #[inline] - pub unsafe fn extract_unchecked(self, index: usize) -> bool { - use crate::llvm::simd_extract; - let x: $ielem_ty = simd_extract(self.0, index as u32); - x != 0 - } - -@@ -80,19 +82,19 @@ macro_rules! impl_minimal_mask { - pub fn replace(self, index: usize, new_value: bool) -> Self { - assert!(index < $elem_count); - unsafe { self.replace_unchecked(index, new_value) } - } - - /// Returns a new vector where the value at `index` is replaced by - /// `new_value`. - /// -- /// # Panics -+ /// # Safety - /// -- /// If `index >= Self::lanes()`. -+ /// If `index >= Self::lanes()` the behavior is undefined. - #[inline] - #[must_use = "replace_unchecked does not modify the original value - \ - it returns a new vector with the value at `index` \ - replaced by `new_value`d" - ] - pub unsafe fn replace_unchecked( - self, - index: usize, -diff --git a/third_party/rust/packed_simd/src/api/minimal/ptr.rs b/third_party/rust/packed_simd/src/api/minimal/ptr.rs ---- a/third_party/rust/packed_simd/src/api/minimal/ptr.rs -+++ b/third_party/rust/packed_simd/src/api/minimal/ptr.rs -@@ -63,17 +63,17 @@ macro_rules! impl_minimal_p { - #[inline] - pub fn extract(self, index: usize) -> $elem_ty { - assert!(index < $elem_count); - unsafe { self.extract_unchecked(index) } - } - - /// Extracts the value at `index`. - /// -- /// # Precondition -+ /// # Safety - /// - /// If `index >= Self::lanes()` the behavior is undefined. - #[inline] - pub unsafe fn extract_unchecked(self, index: usize) -> $elem_ty { - use crate::llvm::simd_extract; - simd_extract(self.0, index as u32) - } - -@@ -91,17 +91,17 @@ macro_rules! impl_minimal_p { - #[allow(clippy::not_unsafe_ptr_arg_deref)] - pub fn replace(self, index: usize, new_value: $elem_ty) -> Self { - assert!(index < $elem_count); - unsafe { self.replace_unchecked(index, new_value) } - } - - /// Returns a new vector where the value at `index` is replaced by `new_value`. - /// -- /// # Precondition -+ /// # Safety - /// - /// If `index >= Self::lanes()` the behavior is undefined. - #[inline] - #[must_use = "replace_unchecked does not modify the original value - \ - it returns a new vector with the value at `index` \ - replaced by `new_value`d" - ] - pub unsafe fn replace_unchecked( -@@ -210,17 +210,17 @@ macro_rules! impl_minimal_p { - impl crate::fmt::Debug for $id { - #[allow(clippy::missing_inline_in_public_items)] - fn fmt(&self, f: &mut crate::fmt::Formatter<'_>) - -> crate::fmt::Result { - write!( - f, - "{}<{}>(", - stringify!($id), -- unsafe { crate::intrinsics::type_name::() } -+ crate::intrinsics::type_name::() - )?; - for i in 0..$elem_count { - if i > 0 { - write!(f, ", ")?; - } - self.extract(i).fmt(f)?; - } - write!(f, ")") -@@ -545,21 +545,17 @@ macro_rules! impl_minimal_p { - let values = [1_i32; $elem_count]; - - let mut vec: $id = Default::default(); - let mut array = [ - $id::::null().extract(0); $elem_count - ]; - - for i in 0..$elem_count { -- let ptr = unsafe { -- crate::mem::transmute( -- &values[i] as *const i32 -- ) -- }; -+ let ptr = &values[i] as *const i32 as *mut i32; - vec = vec.replace(i, ptr); - array[i] = ptr; - } - - // FIXME: there is no impl of From<$id> for [$elem_ty; N] - // let a0 = From::from(vec); - // assert_eq!(a0, array); - #[allow(unused_assignments)] -@@ -606,30 +602,30 @@ macro_rules! impl_minimal_p { - unsafe { - assert!(slice.len() >= $elem_count); - Self::from_slice_unaligned_unchecked(slice) - } - } - - /// Instantiates a new vector with the values of the `slice`. - /// -- /// # Precondition -+ /// # Safety - /// - /// If `slice.len() < Self::lanes()` or `&slice[0]` is not aligned - /// to an `align_of::()` boundary, the behavior is undefined. - #[inline] - pub unsafe fn from_slice_aligned_unchecked(slice: &[$elem_ty]) - -> Self { - #[allow(clippy::cast_ptr_alignment)] - *(slice.get_unchecked(0) as *const $elem_ty as *const Self) - } - - /// Instantiates a new vector with the values of the `slice`. - /// -- /// # Precondition -+ /// # Safety - /// - /// If `slice.len() < Self::lanes()` the behavior is undefined. - #[inline] - pub unsafe fn from_slice_unaligned_unchecked( - slice: &[$elem_ty], - ) -> Self { - use crate::mem::size_of; - let target_ptr = -@@ -822,33 +818,33 @@ macro_rules! impl_minimal_p { - unsafe { - assert!(slice.len() >= $elem_count); - self.write_to_slice_unaligned_unchecked(slice); - } - } - - /// Writes the values of the vector to the `slice`. - /// -- /// # Precondition -+ /// # Safety - /// - /// If `slice.len() < Self::lanes()` or `&slice[0]` is not - /// aligned to an `align_of::()` boundary, the behavior is - /// undefined. - #[inline] - pub unsafe fn write_to_slice_aligned_unchecked( - self, slice: &mut [$elem_ty], - ) { - #[allow(clippy::cast_ptr_alignment)] - *(slice.get_unchecked_mut(0) as *mut $elem_ty as *mut Self) = - self; - } - - /// Writes the values of the vector to the `slice`. - /// -- /// # Precondition -+ /// # Safety - /// - /// If `slice.len() < Self::lanes()` the behavior is undefined. - #[inline] - pub unsafe fn write_to_slice_unaligned_unchecked( - self, slice: &mut [$elem_ty], - ) { - let target_ptr = - slice.get_unchecked_mut(0) as *mut $elem_ty as *mut u8; -@@ -1020,21 +1016,17 @@ macro_rules! impl_minimal_p { - - let mut vec: $id = Default::default(); - let mut array = [ - $id::::null().extract(0); - $elem_count - ]; - - for i in 0..$elem_count { -- let ptr = unsafe { -- crate::mem::transmute( -- &values[i] as *const i32 -- ) -- }; -+ let ptr = &values[i] as *const i32 as *mut i32; - vec = vec.replace(i, ptr); - array[i] = ptr; - } - - #[allow(deprecated)] - let mut a_hash = SipHasher13::new(); - let mut v_hash = a_hash.clone(); - array.hash(&mut a_hash); -@@ -1146,17 +1138,17 @@ macro_rules! impl_minimal_p { - /// allocation. For instance, no known 64-bit platform can ever - /// serve a request for 263 bytes due to page-table limitations or - /// splitting the address space. However, some 32-bit and 16-bit - /// platforms may successfully serve a request for more than - /// `isize::MAX` bytes with things like Physical Address Extension. - /// As such, memory acquired directly from allocators or memory - /// mapped files may be too large to handle with this function. - /// -- /// Consider using wrapping_offset_from instead if these constraints -+ /// Consider using `wrapping_offset_from` instead if these constraints - /// are difficult to satisfy. The only advantage of this method is - /// that it enables more aggressive compiler optimizations. - #[inline] - pub unsafe fn offset_from(self, origin: Self) -> $isize_ty { - // FIXME: should use LLVM's `sub nsw nuw`. - self.wrapping_offset_from(origin) - } - -diff --git a/third_party/rust/packed_simd/src/api/ops/vector_float_min_max.rs b/third_party/rust/packed_simd/src/api/ops/vector_float_min_max.rs ---- a/third_party/rust/packed_simd/src/api/ops/vector_float_min_max.rs -+++ b/third_party/rust/packed_simd/src/api/ops/vector_float_min_max.rs -@@ -21,16 +21,21 @@ macro_rules! impl_ops_vector_float_min_m - pub fn max(self, x: Self) -> Self { - use crate::llvm::simd_fmax; - unsafe { Simd(simd_fmax(self.0, x.0)) } - } - } - test_if!{ - $test_tt: - paste::item! { -+ #[cfg(not(any( -+ // FIXME: https://github.com/rust-lang-nursery/packed_simd/issues/223 -+ all(target_arch = "mips", target_endian = "big"), -+ target_arch = "mips64", -+ )))] - pub mod [<$id _ops_vector_min_max>] { - use super::*; - #[cfg_attr(not(target_arch = "wasm32"), test)] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] - fn min_max() { - let n = crate::$elem_ty::NAN; - let o = $id::splat(1. as $elem_ty); - let t = $id::splat(2. as $elem_ty); - -diff --git a/third_party/rust/packed_simd/src/api/ptr/gather_scatter.rs b/third_party/rust/packed_simd/src/api/ptr/gather_scatter.rs ---- a/third_party/rust/packed_simd/src/api/ptr/gather_scatter.rs -+++ b/third_party/rust/packed_simd/src/api/ptr/gather_scatter.rs -@@ -44,19 +44,19 @@ macro_rules! impl_ptr_read { - let mut v = [0_i32; $elem_count]; - for i in 0..$elem_count { - v[i] = i as i32; - } - - let mut ptr = $id::::null(); - - for i in 0..$elem_count { -- ptr = ptr.replace(i, unsafe { -- crate::mem::transmute(&v[i] as *const i32) -- }); -+ ptr = ptr.replace(i, -+ &v[i] as *const i32 as *mut i32 -+ ); - } - - // all mask elements are true: - let mask = $mask_ty::splat(true); - let def = Simd::<[i32; $elem_count]>::splat(42_i32); - let r: Simd<[i32; $elem_count]> = unsafe { - ptr.read(mask, def) - }; -@@ -130,42 +130,18 @@ macro_rules! impl_ptr_write { - #[inline] - pub unsafe fn write( - self, mask: Simd<[M; $elem_count]>, - value: Simd<[T; $elem_count]>, - ) where - M: sealed::Mask, - [M; $elem_count]: sealed::SimdArray, - { -- // FIXME: -- // https://github.com/rust-lang-nursery/packed_simd/issues/85 -- #[cfg(not(target_arch = "mips"))] -- { -- use crate::llvm::simd_scatter; -- simd_scatter(value.0, self.0, mask.0) -- } -- #[cfg(target_arch = "mips")] -- { -- let m_ptr = -- &mask as *const Simd<[M; $elem_count]> as *const M; -- for i in 0..$elem_count { -- let m = ptr::read(m_ptr.add(i)); -- if m.test() { -- let t_ptr = &self -- as *const Simd<[*mut T; $elem_count]> -- as *mut *mut T; -- let v_ptr = &value as *const Simd<[T; $elem_count]> -- as *const T; -- ptr::write( -- ptr::read(t_ptr.add(i)), -- ptr::read(v_ptr.add(i)), -- ); -- } -- } -- } -+ use crate::llvm::simd_scatter; -+ simd_scatter(value.0, self.0, mask.0) - } - } - - test_if! { - $test_tt: - paste::item! { - mod [<$id _write>] { - use super::*; -@@ -180,17 +156,17 @@ macro_rules! impl_ptr_write { - for i in 0..$elem_count { - arr[i] = i as i32; - } - // arr = [0, 1, 2, ...] - - let mut ptr = $id::::null(); - for i in 0..$elem_count { - ptr = ptr.replace(i, unsafe { -- crate::mem::transmute(arr.as_ptr().add(i)) -+ arr.as_ptr().add(i) as *mut i32 - }); - } - // ptr = [&arr[0], &arr[1], ...] - - // write `fourty_two` to all elements of `v` - { - let backup = arr; - unsafe { -diff --git a/third_party/rust/packed_simd/src/api/reductions/float_arithmetic.rs b/third_party/rust/packed_simd/src/api/reductions/float_arithmetic.rs ---- a/third_party/rust/packed_simd/src/api/reductions/float_arithmetic.rs -+++ b/third_party/rust/packed_simd/src/api/reductions/float_arithmetic.rs -@@ -88,16 +88,18 @@ macro_rules! impl_reduction_float_arithm - fn product>(iter: I) -> $id { - iter.fold($id::splat(1.), |a, b| crate::ops::Mul::mul(a, *b)) - } - } - - test_if! { - $test_tt: - paste::item! { -+ // Comparisons use integer casts within mantissa^1 range. -+ #[allow(clippy::float_cmp)] - pub mod [<$id _reduction_float_arith>] { - use super::*; - fn alternating(x: usize) -> $id { - let mut v = $id::splat(1 as $elem_ty); - for i in 0..$id::lanes() { - if i % x == 0 { - v = v.replace(i, 2 as $elem_ty); - } -@@ -220,17 +222,17 @@ macro_rules! impl_reduction_float_arithm - } - - let mut start = crate::$elem_ty::EPSILON; - let mut scalar_reduction = 0. as $elem_ty; - - let mut v = $id::splat(0. as $elem_ty); - for i in 0..$id::lanes() { - let c = if i % 2 == 0 { 1e3 } else { -1. }; -- start *= 3.14 * c; -+ start *= ::core::$elem_ty::consts::PI * c; - scalar_reduction += start; - v = v.replace(i, start); - } - let simd_reduction = v.sum(); - - let mut a = [0. as $elem_ty; $id::lanes()]; - v.write_to_slice_unaligned(&mut a); - let tree_reduction = tree_reduce_sum(&a); -@@ -252,16 +254,17 @@ macro_rules! impl_reduction_float_arithm - scalar_reduction - ); - } - - #[cfg_attr(not(target_arch = "wasm32"), test)] - #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] - #[allow(unused, dead_code)] - fn product_roundoff() { -+ use ::core::convert::TryInto; - // Performs a tree-reduction - fn tree_reduce_product(a: &[$elem_ty]) -> $elem_ty { - assert!(!a.is_empty()); - if a.len() == 1 { - a[0] - } else if a.len() == 2 { - a[0] * a[1] - } else { -@@ -273,35 +276,37 @@ macro_rules! impl_reduction_float_arithm - } - - let mut start = crate::$elem_ty::EPSILON; - let mut scalar_reduction = 1. as $elem_ty; - - let mut v = $id::splat(0. as $elem_ty); - for i in 0..$id::lanes() { - let c = if i % 2 == 0 { 1e3 } else { -1. }; -- start *= 3.14 * c; -+ start *= ::core::$elem_ty::consts::PI * c; - scalar_reduction *= start; - v = v.replace(i, start); - } - let simd_reduction = v.product(); - - let mut a = [0. as $elem_ty; $id::lanes()]; - v.write_to_slice_unaligned(&mut a); - let tree_reduction = tree_reduce_product(&a); - -- // tolerate 1 ULP difference: -+ // FIXME: Too imprecise, even only for product(f32x8). -+ // Figure out how to narrow this down. -+ let ulp_limit = $id::lanes() / 2; - let red_bits = simd_reduction.to_bits(); - let tree_bits = tree_reduction.to_bits(); - assert!( - if red_bits > tree_bits { - red_bits - tree_bits - } else { - tree_bits - red_bits -- } < 2, -+ } < ulp_limit.try_into().unwrap(), - "vector: {:?} | simd_reduction: {:?} | \ - tree_reduction: {} | scalar_reduction: {}", - v, - simd_reduction, - tree_reduction, - scalar_reduction - ); - } -diff --git a/third_party/rust/packed_simd/src/api/reductions/min_max.rs b/third_party/rust/packed_simd/src/api/reductions/min_max.rs ---- a/third_party/rust/packed_simd/src/api/reductions/min_max.rs -+++ b/third_party/rust/packed_simd/src/api/reductions/min_max.rs -@@ -71,16 +71,18 @@ macro_rules! impl_reduction_min_max { - x = x.min(self.extract(i)); - } - x - } - } - } - test_if! {$test_tt: - paste::item! { -+ // Comparisons use integer casts within mantissa^1 range. -+ #[allow(clippy::float_cmp)] - pub mod [<$id _reduction_min_max>] { - use super::*; - #[cfg_attr(not(target_arch = "wasm32"), test)] - #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] - pub fn max_element() { - let v = $id::splat(0 as $elem_ty); - assert_eq!(v.max_element(), 0 as $elem_ty); - if $id::lanes() > 1 { -@@ -119,16 +121,18 @@ macro_rules! impl_reduction_min_max { - }; - } - - macro_rules! test_reduction_float_min_max { - ([$elem_ty:ident; $elem_count:expr]: $id:ident | $test_tt:tt) => { - test_if!{ - $test_tt: - paste::item! { -+ // Comparisons use integer casts within mantissa^1 range. -+ #[allow(clippy::float_cmp)] - pub mod [<$id _reduction_min_max_nan>] { - use super::*; - #[cfg_attr(not(target_arch = "wasm32"), test)] - #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] - fn min_element_test() { - let n = crate::$elem_ty::NAN; - - assert_eq!(n.min(-3.), -3.); -diff --git a/third_party/rust/packed_simd/src/api/slice/from_slice.rs b/third_party/rust/packed_simd/src/api/slice/from_slice.rs ---- a/third_party/rust/packed_simd/src/api/slice/from_slice.rs -+++ b/third_party/rust/packed_simd/src/api/slice/from_slice.rs -@@ -33,17 +33,17 @@ macro_rules! impl_slice_from_slice { - unsafe { - assert!(slice.len() >= $elem_count); - Self::from_slice_unaligned_unchecked(slice) - } - } - - /// Instantiates a new vector with the values of the `slice`. - /// -- /// # Precondition -+ /// # Safety - /// - /// If `slice.len() < Self::lanes()` or `&slice[0]` is not aligned - /// to an `align_of::()` boundary, the behavior is undefined. - #[inline] - pub unsafe fn from_slice_aligned_unchecked( - slice: &[$elem_ty], - ) -> Self { - debug_assert!(slice.len() >= $elem_count); -@@ -54,17 +54,17 @@ macro_rules! impl_slice_from_slice { - ); - - #[allow(clippy::cast_ptr_alignment)] - *(target_ptr as *const Self) - } - - /// Instantiates a new vector with the values of the `slice`. - /// -- /// # Precondition -+ /// # Safety - /// - /// If `slice.len() < Self::lanes()` the behavior is undefined. - #[inline] - pub unsafe fn from_slice_unaligned_unchecked( - slice: &[$elem_ty], - ) -> Self { - use crate::mem::size_of; - debug_assert!(slice.len() >= $elem_count); -@@ -79,16 +79,18 @@ macro_rules! impl_slice_from_slice { - ); - x - } - } - - test_if! { - $test_tt: - paste::item! { -+ // Comparisons use integer casts within mantissa^1 range. -+ #[allow(clippy::float_cmp)] - pub mod [<$id _slice_from_slice>] { - use super::*; - use crate::iter::Iterator; - - #[cfg_attr(not(target_arch = "wasm32"), test)] - #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] - fn from_slice_unaligned() { - let mut unaligned = [42 as $elem_ty; $id::lanes() + 1]; -diff --git a/third_party/rust/packed_simd/src/api/slice/write_to_slice.rs b/third_party/rust/packed_simd/src/api/slice/write_to_slice.rs ---- a/third_party/rust/packed_simd/src/api/slice/write_to_slice.rs -+++ b/third_party/rust/packed_simd/src/api/slice/write_to_slice.rs -@@ -34,17 +34,17 @@ macro_rules! impl_slice_write_to_slice { - unsafe { - assert!(slice.len() >= $elem_count); - self.write_to_slice_unaligned_unchecked(slice); - } - } - - /// Writes the values of the vector to the `slice`. - /// -- /// # Precondition -+ /// # Safety - /// - /// If `slice.len() < Self::lanes()` or `&slice[0]` is not - /// aligned to an `align_of::()` boundary, the behavior is - /// undefined. - #[inline] - pub unsafe fn write_to_slice_aligned_unchecked( - self, slice: &mut [$elem_ty], - ) { -@@ -59,17 +59,17 @@ macro_rules! impl_slice_write_to_slice { - #[allow(clippy::cast_ptr_alignment)] - #[allow(clippy::cast_ptr_alignment)] - #[allow(clippy::cast_ptr_alignment)] - *(target_ptr as *mut Self) = self; - } - - /// Writes the values of the vector to the `slice`. - /// -- /// # Precondition -+ /// # Safety - /// - /// If `slice.len() < Self::lanes()` the behavior is undefined. - #[inline] - pub unsafe fn write_to_slice_unaligned_unchecked( - self, slice: &mut [$elem_ty], - ) { - debug_assert!(slice.len() >= $elem_count); - let target_ptr = -@@ -81,16 +81,18 @@ macro_rules! impl_slice_write_to_slice { - crate::mem::size_of::(), - ); - } - } - - test_if! { - $test_tt: - paste::item! { -+ // Comparisons use integer casts within mantissa^1 range. -+ #[allow(clippy::float_cmp)] - pub mod [<$id _slice_write_to_slice>] { - use super::*; - use crate::iter::Iterator; - - #[cfg_attr(not(target_arch = "wasm32"), test)] - #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] - fn write_to_slice_unaligned() { - let mut unaligned = [0 as $elem_ty; $id::lanes() + 1]; -diff --git a/third_party/rust/packed_simd/src/codegen.rs b/third_party/rust/packed_simd/src/codegen.rs ---- a/third_party/rust/packed_simd/src/codegen.rs -+++ b/third_party/rust/packed_simd/src/codegen.rs -@@ -11,23 +11,26 @@ crate mod swap_bytes; - macro_rules! impl_simd_array { - ([$elem_ty:ident; $elem_count:expr]: - $tuple_id:ident | $($elem_tys:ident),*) => { - #[derive(Copy, Clone)] - #[repr(simd)] - pub struct $tuple_id($(crate $elem_tys),*); - //^^^^^^^ leaked through SimdArray - -+ impl crate::sealed::Seal for [$elem_ty; $elem_count] {} -+ - impl crate::sealed::SimdArray for [$elem_ty; $elem_count] { - type Tuple = $tuple_id; - type T = $elem_ty; - const N: usize = $elem_count; - type NT = [u32; $elem_count]; - } - -+ impl crate::sealed::Seal for $tuple_id {} - impl crate::sealed::Simd for $tuple_id { - type Element = $elem_ty; - const LANES: usize = $elem_count; - type LanesType = [u32; $elem_count]; - } - - } - } -diff --git a/third_party/rust/packed_simd/src/codegen/bit_manip.rs b/third_party/rust/packed_simd/src/codegen/bit_manip.rs ---- a/third_party/rust/packed_simd/src/codegen/bit_manip.rs -+++ b/third_party/rust/packed_simd/src/codegen/bit_manip.rs -@@ -1,10 +1,10 @@ - //! LLVM bit manipulation intrinsics. --#![rustfmt::skip] -+#[rustfmt::skip] - - use crate::*; - - #[allow(improper_ctypes, dead_code)] - extern "C" { - #[link_name = "llvm.ctlz.v2i8"] - fn ctlz_u8x2(x: u8x2, is_zero_undef: bool) -> u8x2; - #[link_name = "llvm.ctlz.v4i8"] -diff --git a/third_party/rust/packed_simd/src/codegen/llvm.rs b/third_party/rust/packed_simd/src/codegen/llvm.rs ---- a/third_party/rust/packed_simd/src/codegen/llvm.rs -+++ b/third_party/rust/packed_simd/src/codegen/llvm.rs -@@ -5,41 +5,47 @@ use crate::sealed::Shuffle; - #[allow(unused_imports)] // FIXME: spurious warning? - use crate::sealed::Simd; - - // Shuffle intrinsics: expanded in users' crates, therefore public. - extern "platform-intrinsic" { - // FIXME: Passing this intrinsics an `idx` array with an index that is - // out-of-bounds will produce a monomorphization-time error. - // https://github.com/rust-lang-nursery/packed_simd/issues/21 -+ #[rustc_args_required_const(2)] - pub fn simd_shuffle2(x: T, y: T, idx: [u32; 2]) -> U - where - T: Simd, - ::Element: Shuffle<[u32; 2], Output = U>; - -+ #[rustc_args_required_const(2)] - pub fn simd_shuffle4(x: T, y: T, idx: [u32; 4]) -> U - where - T: Simd, - ::Element: Shuffle<[u32; 4], Output = U>; - -+ #[rustc_args_required_const(2)] - pub fn simd_shuffle8(x: T, y: T, idx: [u32; 8]) -> U - where - T: Simd, - ::Element: Shuffle<[u32; 8], Output = U>; - -+ #[rustc_args_required_const(2)] - pub fn simd_shuffle16(x: T, y: T, idx: [u32; 16]) -> U - where - T: Simd, - ::Element: Shuffle<[u32; 16], Output = U>; - -+ #[rustc_args_required_const(2)] - pub fn simd_shuffle32(x: T, y: T, idx: [u32; 32]) -> U - where - T: Simd, - ::Element: Shuffle<[u32; 32], Output = U>; - -+ #[rustc_args_required_const(2)] - pub fn simd_shuffle64(x: T, y: T, idx: [u32; 64]) -> U - where - T: Simd, - ::Element: Shuffle<[u32; 64], Output = U>; - } - - pub use self::simd_shuffle16 as __shuffle_vector16; - pub use self::simd_shuffle2 as __shuffle_vector2; -@@ -91,9 +97,11 @@ extern "platform-intrinsic" { - crate fn simd_fmin(a: T, b: T) -> T; - crate fn simd_fmax(a: T, b: T) -> T; - - crate fn simd_fsqrt(a: T) -> T; - crate fn simd_fma(a: T, b: T, c: T) -> T; - - crate fn simd_gather(value: T, pointers: P, mask: M) -> T; - crate fn simd_scatter(value: T, pointers: P, mask: M); -+ -+ crate fn simd_bitmask(value: T) -> U; - } -diff --git a/third_party/rust/packed_simd/src/codegen/reductions/mask/x86.rs b/third_party/rust/packed_simd/src/codegen/reductions/mask/x86.rs ---- a/third_party/rust/packed_simd/src/codegen/reductions/mask/x86.rs -+++ b/third_party/rust/packed_simd/src/codegen/reductions/mask/x86.rs -@@ -14,23 +14,17 @@ mod avx; - - #[cfg(target_feature = "avx2")] - #[macro_use] - mod avx2; - - /// x86 64-bit m8x8 implementation - macro_rules! x86_m8x8_impl { - ($id:ident) => { -- cfg_if! { -- if #[cfg(all(target_arch = "x86_64", target_feature = "sse"))] { -- x86_m8x8_sse_impl!($id); -- } else { -- fallback_impl!($id); -- } -- } -+ fallback_impl!($id); - }; - } - - /// x86 128-bit m8x16 implementation - macro_rules! x86_m8x16_impl { - ($id:ident) => { - cfg_if! { - if #[cfg(target_feature = "sse2")] { -diff --git a/third_party/rust/packed_simd/src/codegen/reductions/mask/x86/sse.rs b/third_party/rust/packed_simd/src/codegen/reductions/mask/x86/sse.rs ---- a/third_party/rust/packed_simd/src/codegen/reductions/mask/x86/sse.rs -+++ b/third_party/rust/packed_simd/src/codegen/reductions/mask/x86/sse.rs -@@ -29,40 +29,8 @@ macro_rules! x86_m32x4_sse_impl { - #[cfg(target_arch = "x86_64")] - use crate::arch::x86_64::_mm_movemask_ps; - - _mm_movemask_ps(crate::mem::transmute(self)) != 0 - } - } - }; - } -- --macro_rules! x86_m8x8_sse_impl { -- ($id:ident) => { -- impl All for $id { -- #[inline] -- #[target_feature(enable = "sse")] -- unsafe fn all(self) -> bool { -- #[cfg(target_arch = "x86")] -- use crate::arch::x86::_mm_movemask_pi8; -- #[cfg(target_arch = "x86_64")] -- use crate::arch::x86_64::_mm_movemask_pi8; -- // _mm_movemask_pi8(a) creates an 8bit mask containing the most -- // significant bit of each byte of `a`. If all bits are set, -- // then all 8 lanes of the mask are true. -- _mm_movemask_pi8(crate::mem::transmute(self)) -- == u8::max_value() as i32 -- } -- } -- impl Any for $id { -- #[inline] -- #[target_feature(enable = "sse")] -- unsafe fn any(self) -> bool { -- #[cfg(target_arch = "x86")] -- use crate::arch::x86::_mm_movemask_pi8; -- #[cfg(target_arch = "x86_64")] -- use crate::arch::x86_64::_mm_movemask_pi8; -- -- _mm_movemask_pi8(crate::mem::transmute(self)) != 0 -- } -- } -- }; --} -diff --git a/third_party/rust/packed_simd/src/codegen/shuffle.rs b/third_party/rust/packed_simd/src/codegen/shuffle.rs ---- a/third_party/rust/packed_simd/src/codegen/shuffle.rs -+++ b/third_party/rust/packed_simd/src/codegen/shuffle.rs -@@ -1,302 +1,150 @@ - //! Implementations of the `ShuffleResult` trait for the different numbers of - //! lanes and vector element types. - - use crate::masks::*; --use crate::sealed::Shuffle; -- --impl Shuffle<[u32; 2]> for i8 { -- type Output = crate::codegen::i8x2; --} --impl Shuffle<[u32; 4]> for i8 { -- type Output = crate::codegen::i8x4; --} --impl Shuffle<[u32; 8]> for i8 { -- type Output = crate::codegen::i8x8; --} --impl Shuffle<[u32; 16]> for i8 { -- type Output = crate::codegen::i8x16; --} --impl Shuffle<[u32; 32]> for i8 { -- type Output = crate::codegen::i8x32; --} --impl Shuffle<[u32; 64]> for i8 { -- type Output = crate::codegen::i8x64; --} -- --impl Shuffle<[u32; 2]> for u8 { -- type Output = crate::codegen::u8x2; --} --impl Shuffle<[u32; 4]> for u8 { -- type Output = crate::codegen::u8x4; --} --impl Shuffle<[u32; 8]> for u8 { -- type Output = crate::codegen::u8x8; --} --impl Shuffle<[u32; 16]> for u8 { -- type Output = crate::codegen::u8x16; --} --impl Shuffle<[u32; 32]> for u8 { -- type Output = crate::codegen::u8x32; --} --impl Shuffle<[u32; 64]> for u8 { -- type Output = crate::codegen::u8x64; --} -- --impl Shuffle<[u32; 2]> for m8 { -- type Output = crate::codegen::m8x2; --} --impl Shuffle<[u32; 4]> for m8 { -- type Output = crate::codegen::m8x4; --} --impl Shuffle<[u32; 8]> for m8 { -- type Output = crate::codegen::m8x8; --} --impl Shuffle<[u32; 16]> for m8 { -- type Output = crate::codegen::m8x16; --} --impl Shuffle<[u32; 32]> for m8 { -- type Output = crate::codegen::m8x32; --} --impl Shuffle<[u32; 64]> for m8 { -- type Output = crate::codegen::m8x64; --} -+use crate::sealed::{Shuffle, Seal}; - --impl Shuffle<[u32; 2]> for i16 { -- type Output = crate::codegen::i16x2; --} --impl Shuffle<[u32; 4]> for i16 { -- type Output = crate::codegen::i16x4; --} --impl Shuffle<[u32; 8]> for i16 { -- type Output = crate::codegen::i16x8; --} --impl Shuffle<[u32; 16]> for i16 { -- type Output = crate::codegen::i16x16; --} --impl Shuffle<[u32; 32]> for i16 { -- type Output = crate::codegen::i16x32; --} -- --impl Shuffle<[u32; 2]> for u16 { -- type Output = crate::codegen::u16x2; --} --impl Shuffle<[u32; 4]> for u16 { -- type Output = crate::codegen::u16x4; --} --impl Shuffle<[u32; 8]> for u16 { -- type Output = crate::codegen::u16x8; --} --impl Shuffle<[u32; 16]> for u16 { -- type Output = crate::codegen::u16x16; --} --impl Shuffle<[u32; 32]> for u16 { -- type Output = crate::codegen::u16x32; --} -- --impl Shuffle<[u32; 2]> for m16 { -- type Output = crate::codegen::m16x2; --} --impl Shuffle<[u32; 4]> for m16 { -- type Output = crate::codegen::m16x4; --} --impl Shuffle<[u32; 8]> for m16 { -- type Output = crate::codegen::m16x8; --} --impl Shuffle<[u32; 16]> for m16 { -- type Output = crate::codegen::m16x16; --} --impl Shuffle<[u32; 32]> for m16 { -- type Output = crate::codegen::m16x32; --} -- --impl Shuffle<[u32; 2]> for i32 { -- type Output = crate::codegen::i32x2; --} --impl Shuffle<[u32; 4]> for i32 { -- type Output = crate::codegen::i32x4; --} --impl Shuffle<[u32; 8]> for i32 { -- type Output = crate::codegen::i32x8; --} --impl Shuffle<[u32; 16]> for i32 { -- type Output = crate::codegen::i32x16; -+macro_rules! impl_shuffle { -+ ($array:ty, $base:ty, $out:ty) => { -+ impl Seal<$array> for $base {} -+ impl Shuffle<$array> for $base { -+ type Output = $out; -+ } -+ } - } - --impl Shuffle<[u32; 2]> for u32 { -- type Output = crate::codegen::u32x2; --} --impl Shuffle<[u32; 4]> for u32 { -- type Output = crate::codegen::u32x4; --} --impl Shuffle<[u32; 8]> for u32 { -- type Output = crate::codegen::u32x8; --} --impl Shuffle<[u32; 16]> for u32 { -- type Output = crate::codegen::u32x16; --} -+impl_shuffle! { [u32; 2], i8, crate::codegen::i8x2 } -+impl_shuffle! { [u32; 4], i8, crate::codegen::i8x4 } -+impl_shuffle! { [u32; 8], i8, crate::codegen::i8x8 } -+impl_shuffle! { [u32; 16], i8, crate::codegen::i8x16 } -+impl_shuffle! { [u32; 32], i8, crate::codegen::i8x32 } -+impl_shuffle! { [u32; 64], i8, crate::codegen::i8x64 } - --impl Shuffle<[u32; 2]> for f32 { -- type Output = crate::codegen::f32x2; --} --impl Shuffle<[u32; 4]> for f32 { -- type Output = crate::codegen::f32x4; --} --impl Shuffle<[u32; 8]> for f32 { -- type Output = crate::codegen::f32x8; --} --impl Shuffle<[u32; 16]> for f32 { -- type Output = crate::codegen::f32x16; --} -+impl_shuffle! { [u32; 2], u8, crate::codegen::u8x2 } -+impl_shuffle! { [u32; 4], u8, crate::codegen::u8x4 } -+impl_shuffle! { [u32; 8], u8, crate::codegen::u8x8 } -+impl_shuffle! { [u32; 16], u8, crate::codegen::u8x16 } -+impl_shuffle! { [u32; 32], u8, crate::codegen::u8x32 } -+impl_shuffle! { [u32; 64], u8, crate::codegen::u8x64 } -+ -+impl_shuffle! { [u32; 2], m8, crate::codegen::m8x2 } -+impl_shuffle! { [u32; 4], m8, crate::codegen::m8x4 } -+impl_shuffle! { [u32; 8], m8, crate::codegen::m8x8 } -+impl_shuffle! { [u32; 16], m8, crate::codegen::m8x16 } -+impl_shuffle! { [u32; 32], m8, crate::codegen::m8x32 } -+impl_shuffle! { [u32; 64], m8, crate::codegen::m8x64 } -+ -+impl_shuffle! { [u32; 2], i16, crate::codegen::i16x2 } -+impl_shuffle! { [u32; 4], i16, crate::codegen::i16x4 } -+impl_shuffle! { [u32; 8], i16, crate::codegen::i16x8 } -+impl_shuffle! { [u32; 16], i16, crate::codegen::i16x16 } -+impl_shuffle! { [u32; 32], i16, crate::codegen::i16x32 } - --impl Shuffle<[u32; 2]> for m32 { -- type Output = crate::codegen::m32x2; --} --impl Shuffle<[u32; 4]> for m32 { -- type Output = crate::codegen::m32x4; --} --impl Shuffle<[u32; 8]> for m32 { -- type Output = crate::codegen::m32x8; --} --impl Shuffle<[u32; 16]> for m32 { -- type Output = crate::codegen::m32x16; --} -+impl_shuffle! { [u32; 2], u16, crate::codegen::u16x2 } -+impl_shuffle! { [u32; 4], u16, crate::codegen::u16x4 } -+impl_shuffle! { [u32; 8], u16, crate::codegen::u16x8 } -+impl_shuffle! { [u32; 16], u16, crate::codegen::u16x16 } -+impl_shuffle! { [u32; 32], u16, crate::codegen::u16x32 } -+ -+impl_shuffle! { [u32; 2], m16, crate::codegen::m16x2 } -+impl_shuffle! { [u32; 4], m16, crate::codegen::m16x4 } -+impl_shuffle! { [u32; 8], m16, crate::codegen::m16x8 } -+impl_shuffle! { [u32; 16], m16, crate::codegen::m16x16 } - --/* FIXME: 64-bit single element vector --impl Shuffle<[u32; 1]> for i64 { -- type Output = crate::codegen::i64x1; --} --*/ --impl Shuffle<[u32; 2]> for i64 { -- type Output = crate::codegen::i64x2; --} --impl Shuffle<[u32; 4]> for i64 { -- type Output = crate::codegen::i64x4; --} --impl Shuffle<[u32; 8]> for i64 { -- type Output = crate::codegen::i64x8; --} -+impl_shuffle! { [u32; 2], i32, crate::codegen::i32x2 } -+impl_shuffle! { [u32; 4], i32, crate::codegen::i32x4 } -+impl_shuffle! { [u32; 8], i32, crate::codegen::i32x8 } -+impl_shuffle! { [u32; 16], i32, crate::codegen::i32x16 } -+ -+impl_shuffle! { [u32; 2], u32, crate::codegen::u32x2 } -+impl_shuffle! { [u32; 4], u32, crate::codegen::u32x4 } -+impl_shuffle! { [u32; 8], u32, crate::codegen::u32x8 } -+impl_shuffle! { [u32; 16], u32, crate::codegen::u32x16 } -+ -+impl_shuffle! { [u32; 2], f32, crate::codegen::f32x2 } -+impl_shuffle! { [u32; 4], f32, crate::codegen::f32x4 } -+impl_shuffle! { [u32; 8], f32, crate::codegen::f32x8 } -+impl_shuffle! { [u32; 16], f32, crate::codegen::f32x16 } -+ -+impl_shuffle! { [u32; 2], m32, crate::codegen::m32x2 } -+impl_shuffle! { [u32; 4], m32, crate::codegen::m32x4 } -+impl_shuffle! { [u32; 8], m32, crate::codegen::m32x8 } -+impl_shuffle! { [u32; 16], m32, crate::codegen::m32x16 } - - /* FIXME: 64-bit single element vector --impl Shuffle<[u32; 1]> for u64 { -- type Output = crate::codegen::u64x1; --} -+impl_shuffle! { [u32; 1], i64, crate::codegen::i64x1 } - */ --impl Shuffle<[u32; 2]> for u64 { -- type Output = crate::codegen::u64x2; --} --impl Shuffle<[u32; 4]> for u64 { -- type Output = crate::codegen::u64x4; --} --impl Shuffle<[u32; 8]> for u64 { -- type Output = crate::codegen::u64x8; --} -+impl_shuffle! { [u32; 2], i64, crate::codegen::i64x2 } -+impl_shuffle! { [u32; 4], i64, crate::codegen::i64x4 } -+impl_shuffle! { [u32; 8], i64, crate::codegen::i64x8 } - - /* FIXME: 64-bit single element vector --impl Shuffle<[u32; 1]> for f64 { -- type Output = crate::codegen::f64x1; --} -+impl_shuffle! { [u32; 1], i64, crate::codegen::i64x1 } - */ --impl Shuffle<[u32; 2]> for f64 { -- type Output = crate::codegen::f64x2; --} --impl Shuffle<[u32; 4]> for f64 { -- type Output = crate::codegen::f64x4; --} --impl Shuffle<[u32; 8]> for f64 { -- type Output = crate::codegen::f64x8; --} -+impl_shuffle! { [u32; 2], u64, crate::codegen::u64x2 } -+impl_shuffle! { [u32; 4], u64, crate::codegen::u64x4 } -+impl_shuffle! { [u32; 8], u64, crate::codegen::u64x8 } - - /* FIXME: 64-bit single element vector --impl Shuffle<[u32; 1]> for m64 { -- type Output = crate::codegen::m64x1; --} -+impl_shuffle! { [u32; 1], i64, crate::codegen::i64x1 } - */ --impl Shuffle<[u32; 2]> for m64 { -- type Output = crate::codegen::m64x2; --} --impl Shuffle<[u32; 4]> for m64 { -- type Output = crate::codegen::m64x4; --} --impl Shuffle<[u32; 8]> for m64 { -- type Output = crate::codegen::m64x8; --} -+impl_shuffle! { [u32; 2], f64, crate::codegen::f64x2 } -+impl_shuffle! { [u32; 4], f64, crate::codegen::f64x4 } -+impl_shuffle! { [u32; 8], f64, crate::codegen::f64x8 } -+ -+/* FIXME: 64-bit single element vector -+impl_shuffle! { [u32; 1], i64, crate::codegen::i64x1 } -+*/ -+impl_shuffle! { [u32; 2], m64, crate::codegen::m64x2 } -+impl_shuffle! { [u32; 4], m64, crate::codegen::m64x4 } -+impl_shuffle! { [u32; 8], m64, crate::codegen::m64x8 } - --impl Shuffle<[u32; 2]> for isize { -- type Output = crate::codegen::isizex2; --} --impl Shuffle<[u32; 4]> for isize { -- type Output = crate::codegen::isizex4; --} --impl Shuffle<[u32; 8]> for isize { -- type Output = crate::codegen::isizex8; --} -+impl_shuffle! { [u32; 2], isize, crate::codegen::isizex2 } -+impl_shuffle! { [u32; 4], isize, crate::codegen::isizex4 } -+impl_shuffle! { [u32; 8], isize, crate::codegen::isizex8 } - --impl Shuffle<[u32; 2]> for usize { -- type Output = crate::codegen::usizex2; --} --impl Shuffle<[u32; 4]> for usize { -- type Output = crate::codegen::usizex4; --} --impl Shuffle<[u32; 8]> for usize { -- type Output = crate::codegen::usizex8; --} -+impl_shuffle! { [u32; 2], usize, crate::codegen::usizex2 } -+impl_shuffle! { [u32; 4], usize, crate::codegen::usizex4 } -+impl_shuffle! { [u32; 8], usize, crate::codegen::usizex8 } - -+impl_shuffle! { [u32; 2], msize, crate::codegen::msizex2 } -+impl_shuffle! { [u32; 4], msize, crate::codegen::msizex4 } -+impl_shuffle! { [u32; 8], msize, crate::codegen::msizex8 } -+ -+impl Seal<[u32; 2]> for *const T {} - impl Shuffle<[u32; 2]> for *const T { - type Output = crate::codegen::cptrx2; - } -+impl Seal<[u32; 4]> for *const T {} - impl Shuffle<[u32; 4]> for *const T { - type Output = crate::codegen::cptrx4; - } -+impl Seal<[u32; 8]> for *const T {} - impl Shuffle<[u32; 8]> for *const T { - type Output = crate::codegen::cptrx8; - } - -+impl Seal<[u32; 2]> for *mut T {} - impl Shuffle<[u32; 2]> for *mut T { - type Output = crate::codegen::mptrx2; - } -+impl Seal<[u32; 4]> for *mut T {} - impl Shuffle<[u32; 4]> for *mut T { - type Output = crate::codegen::mptrx4; - } -+impl Seal<[u32; 8]> for *mut T {} - impl Shuffle<[u32; 8]> for *mut T { - type Output = crate::codegen::mptrx8; - } - --impl Shuffle<[u32; 2]> for msize { -- type Output = crate::codegen::msizex2; --} --impl Shuffle<[u32; 4]> for msize { -- type Output = crate::codegen::msizex4; --} --impl Shuffle<[u32; 8]> for msize { -- type Output = crate::codegen::msizex8; --} -- --impl Shuffle<[u32; 1]> for i128 { -- type Output = crate::codegen::i128x1; --} --impl Shuffle<[u32; 2]> for i128 { -- type Output = crate::codegen::i128x2; --} --impl Shuffle<[u32; 4]> for i128 { -- type Output = crate::codegen::i128x4; --} -+impl_shuffle! { [u32; 1], i128, crate::codegen::i128x1 } -+impl_shuffle! { [u32; 2], i128, crate::codegen::i128x2 } -+impl_shuffle! { [u32; 4], i128, crate::codegen::i128x4 } - --impl Shuffle<[u32; 1]> for u128 { -- type Output = crate::codegen::u128x1; --} --impl Shuffle<[u32; 2]> for u128 { -- type Output = crate::codegen::u128x2; --} --impl Shuffle<[u32; 4]> for u128 { -- type Output = crate::codegen::u128x4; --} -+impl_shuffle! { [u32; 1], u128, crate::codegen::u128x1 } -+impl_shuffle! { [u32; 2], u128, crate::codegen::u128x2 } -+impl_shuffle! { [u32; 4], u128, crate::codegen::u128x4 } - --impl Shuffle<[u32; 1]> for m128 { -- type Output = crate::codegen::m128x1; --} --impl Shuffle<[u32; 2]> for m128 { -- type Output = crate::codegen::m128x2; --} --impl Shuffle<[u32; 4]> for m128 { -- type Output = crate::codegen::m128x4; --} -+impl_shuffle! { [u32; 1], m128, crate::codegen::m128x1 } -+impl_shuffle! { [u32; 2], m128, crate::codegen::m128x2 } -+impl_shuffle! { [u32; 4], m128, crate::codegen::m128x4 } -diff --git a/third_party/rust/packed_simd/src/codegen/shuffle1_dyn.rs b/third_party/rust/packed_simd/src/codegen/shuffle1_dyn.rs ---- a/third_party/rust/packed_simd/src/codegen/shuffle1_dyn.rs -+++ b/third_party/rust/packed_simd/src/codegen/shuffle1_dyn.rs -@@ -23,53 +23,32 @@ macro_rules! impl_fallback { - } - } - }; - } - - macro_rules! impl_shuffle1_dyn { - (u8x8) => { - cfg_if! { -- if #[cfg(all(any(target_arch = "x86", target_arch = "x86_64"), -- target_feature = "ssse3"))] { -- impl Shuffle1Dyn for u8x8 { -- type Indices = Self; -- #[inline] -- fn shuffle1_dyn(self, indices: Self::Indices) -> Self { -- #[cfg(target_arch = "x86")] -- use crate::arch::x86::_mm_shuffle_pi8; -- #[cfg(target_arch = "x86_64")] -- use crate::arch::x86_64::_mm_shuffle_pi8; -- -- unsafe { -- crate::mem::transmute( -- _mm_shuffle_pi8( -- crate::mem::transmute(self.0), -- crate::mem::transmute(indices.0) -- ) -- ) -- } -- } -- } -- } else if #[cfg(all( -+ if #[cfg(all( - any( -- all(target_aarch = "aarch64", target_feature = "neon"), -- all(target_aarch = "arm", target_feature = "v7", -+ all(target_arch = "aarch64", target_feature = "neon"), -+ all(target_arch = "doesnotexist", target_feature = "v7", - target_feature = "neon") - ), - any(feature = "core_arch", libcore_neon) - ) - )] { - impl Shuffle1Dyn for u8x8 { - type Indices = Self; - #[inline] - fn shuffle1_dyn(self, indices: Self::Indices) -> Self { -- #[cfg(targt_arch = "aarch64")] -+ #[cfg(target_arch = "aarch64")] - use crate::arch::aarch64::vtbl1_u8; -- #[cfg(targt_arch = "arm")] -+ #[cfg(target_arch = "doesnotexist")] - use crate::arch::arm::vtbl1_u8; - - // This is safe because the binary is compiled with - // neon enabled at compile-time and can therefore only - // run on CPUs that have it enabled. - unsafe { - Simd(mem::transmute( - vtbl1_u8(mem::transmute(self.0), -@@ -101,17 +80,17 @@ macro_rules! impl_shuffle1_dyn { - unsafe { - Simd(mem::transmute( - _mm_shuffle_epi8(mem::transmute(self.0), - crate::mem::transmute(indices)) - )) - } - } - } -- } else if #[cfg(all(target_aarch = "aarch64", target_feature = "neon", -+ } else if #[cfg(all(target_arch = "aarch64", target_feature = "neon", - any(feature = "core_arch", libcore_neon)))] { - impl Shuffle1Dyn for u8x16 { - type Indices = Self; - #[inline] - fn shuffle1_dyn(self, indices: Self::Indices) -> Self { - use crate::arch::aarch64::vqtbl1q_u8; - - // This is safe because the binary is compiled with -@@ -120,17 +99,17 @@ macro_rules! impl_shuffle1_dyn { - unsafe { - Simd(mem::transmute( - vqtbl1q_u8(mem::transmute(self.0), - crate::mem::transmute(indices.0)) - )) - } - } - } -- } else if #[cfg(all(target_aarch = "arm", target_feature = "v7", -+ } else if #[cfg(all(target_arch = "doesnotexist", target_feature = "v7", - target_feature = "neon", - any(feature = "core_arch", libcore_neon)))] { - impl Shuffle1Dyn for u8x16 { - type Indices = Self; - #[inline] - fn shuffle1_dyn(self, indices: Self::Indices) -> Self { - use crate::arch::arm::vtbl2_u8; - -diff --git a/third_party/rust/packed_simd/src/codegen/vPtr.rs b/third_party/rust/packed_simd/src/codegen/vPtr.rs ---- a/third_party/rust/packed_simd/src/codegen/vPtr.rs -+++ b/third_party/rust/packed_simd/src/codegen/vPtr.rs -@@ -3,23 +3,25 @@ - macro_rules! impl_simd_ptr { - ([$ptr_ty:ty; $elem_count:expr]: $tuple_id:ident | $ty:ident - | $($tys:ty),*) => { - #[derive(Copy, Clone)] - #[repr(simd)] - pub struct $tuple_id<$ty>($(crate $tys),*); - //^^^^^^^ leaked through SimdArray - -+ impl<$ty> crate::sealed::Seal for [$ptr_ty; $elem_count] {} - impl<$ty> crate::sealed::SimdArray for [$ptr_ty; $elem_count] { - type Tuple = $tuple_id<$ptr_ty>; - type T = $ptr_ty; - const N: usize = $elem_count; - type NT = [u32; $elem_count]; - } - -+ impl<$ty> crate::sealed::Seal for $tuple_id<$ptr_ty> {} - impl<$ty> crate::sealed::Simd for $tuple_id<$ptr_ty> { - type Element = $ptr_ty; - const LANES: usize = $elem_count; - type LanesType = [u32; $elem_count]; - } - - } - } -diff --git a/third_party/rust/packed_simd/src/lib.rs b/third_party/rust/packed_simd/src/lib.rs ---- a/third_party/rust/packed_simd/src/lib.rs -+++ b/third_party/rust/packed_simd/src/lib.rs -@@ -196,40 +196,45 @@ - //! - //! * casting from an `f64` to an `f32` **rounds to nearest, ties to even**. - //! - //! Numeric casts are not very "precise": sometimes lossy, sometimes value - //! preserving, etc. - - #![feature( - repr_simd, -+ rustc_attrs, - const_fn, - platform_intrinsics, - stdsimd, - aarch64_target_feature, - arm_target_feature, - link_llvm_intrinsics, - core_intrinsics, - stmt_expr_attributes, -- align_offset, -- mmx_target_feature, - crate_visibility_modifier, - custom_inner_attributes - )] - #![allow(non_camel_case_types, non_snake_case, -- clippy::cast_possible_truncation, -- clippy::cast_lossless, -- clippy::cast_possible_wrap, -- clippy::cast_precision_loss, -- // This lint is currently broken for generic code -- // See https://github.com/rust-lang/rust-clippy/issues/3410 -- clippy::use_self -+ // FIXME: these types are unsound in C FFI already -+ // See https://github.com/rust-lang/rust/issues/53346 -+ improper_ctypes_definitions, -+ clippy::cast_possible_truncation, -+ clippy::cast_lossless, -+ clippy::cast_possible_wrap, -+ clippy::cast_precision_loss, -+ // TODO: manually add the `#[must_use]` attribute where appropriate -+ clippy::must_use_candidate, -+ // This lint is currently broken for generic code -+ // See https://github.com/rust-lang/rust-clippy/issues/3410 -+ clippy::use_self, -+ clippy::wrong_self_convention, - )] - #![cfg_attr(test, feature(hashmap_internals))] --#![deny(warnings, rust_2018_idioms, clippy::missing_inline_in_public_items)] -+#![deny(rust_2018_idioms, clippy::missing_inline_in_public_items)] - #![no_std] - - use cfg_if::cfg_if; - - cfg_if! { - if #[cfg(feature = "core_arch")] { - #[allow(unused_imports)] - use core_arch as arch; -@@ -251,16 +256,18 @@ use core::{ - - #[macro_use] - mod testing; - #[macro_use] - mod api; - mod codegen; - mod sealed; - -+pub use crate::sealed::{Simd as SimdVector, Shuffle, SimdArray, Mask}; -+ - /// Packed SIMD vector type. - /// - /// # Examples - /// - /// ``` - /// # use packed_simd::Simd; - /// let v = Simd::<[i32; 4]>::new(0, 1, 2, 3); - /// assert_eq!(v.extract(2), 2); -@@ -271,16 +278,18 @@ pub struct Simd( - // FIXME: this type should be private, - // but it currently must be public for the - // `shuffle!` macro to work: it needs to - // access the internal `repr(simd)` type - // to call the shuffle intrinsics. - #[doc(hidden)] pub ::Tuple, - ); - -+impl sealed::Seal for Simd {} -+ - /// Wrapper over `T` implementing a lexicoraphical order via the `PartialOrd` - /// and/or `Ord` traits. - #[repr(transparent)] - #[derive(Copy, Clone, Debug)] - #[allow(clippy::missing_inline_in_public_items)] - pub struct LexicographicallyOrdered(T); - - mod masks; -diff --git a/third_party/rust/packed_simd/src/masks.rs b/third_party/rust/packed_simd/src/masks.rs ---- a/third_party/rust/packed_simd/src/masks.rs -+++ b/third_party/rust/packed_simd/src/masks.rs -@@ -1,17 +1,19 @@ - //! Mask types - - macro_rules! impl_mask_ty { - ($id:ident : $elem_ty:ident | #[$doc:meta]) => { - #[$doc] - #[derive(Copy, Clone)] - pub struct $id($elem_ty); - -+ impl crate::sealed::Seal for $id {} - impl crate::sealed::Mask for $id { -+ #[inline] - fn test(&self) -> bool { - $id::test(self) - } - } - - impl $id { - /// Instantiate a mask with `value` - #[inline] -diff --git a/third_party/rust/packed_simd/src/sealed.rs b/third_party/rust/packed_simd/src/sealed.rs ---- a/third_party/rust/packed_simd/src/sealed.rs -+++ b/third_party/rust/packed_simd/src/sealed.rs -@@ -1,41 +1,42 @@ - //! Sealed traits - -+/// A sealed trait, this is logically private to the crate -+/// and will prevent implementations from outside the crate -+pub trait Seal {} -+ - /// Trait implemented by arrays that can be SIMD types. --#[doc(hidden)] --pub trait SimdArray { -+pub trait SimdArray: Seal { - /// The type of the #[repr(simd)] type. - type Tuple: Copy + Clone; - /// The element type of the vector. - type T; - /// The number of elements in the array. - const N: usize; - /// The type: `[u32; Self::N]`. - type NT; - } - - /// This traits is used to constraint the arguments - /// and result type of the portable shuffles. - #[doc(hidden)] --pub trait Shuffle { -+pub trait Shuffle: Seal { - // Lanes is a `[u32; N]` where `N` is the number of vector lanes - - /// The result type of the shuffle. - type Output; - } - - /// This trait is implemented by all SIMD vector types. --#[doc(hidden)] --pub trait Simd { -+pub trait Simd: Seal { - /// Element type of the SIMD vector - type Element; - /// The number of elements in the SIMD vector. - const LANES: usize; - /// The type: `[u32; Self::N]`. - type LanesType; - } - - /// This trait is implemented by all mask types --#[doc(hidden)] --pub trait Mask { -+pub trait Mask: Seal { - fn test(&self) -> bool; - } -diff --git a/third_party/rust/packed_simd/src/testing/utils.rs b/third_party/rust/packed_simd/src/testing/utils.rs ---- a/third_party/rust/packed_simd/src/testing/utils.rs -+++ b/third_party/rust/packed_simd/src/testing/utils.rs -@@ -1,11 +1,13 @@ - //! Testing utilities - - #![allow(dead_code)] -+// FIXME: Or don't. But it's true this is a problematic comparison. -+#![allow(clippy::neg_cmp_op_on_partial_ord)] - - use crate::{cmp::PartialOrd, fmt::Debug, LexicographicallyOrdered}; - - /// Tests PartialOrd for `a` and `b` where `a < b` is true. - pub fn test_lt( - a: LexicographicallyOrdered, b: LexicographicallyOrdered, - ) where - LexicographicallyOrdered: Debug + PartialOrd, -@@ -14,37 +16,42 @@ pub fn test_lt( - assert!(b > a, "{:?}, {:?}", a, b); - - assert!(!(a == b), "{:?}, {:?}", a, b); - assert!(a != b, "{:?}, {:?}", a, b); - - assert!(a <= b, "{:?}, {:?}", a, b); - assert!(b >= a, "{:?}, {:?}", a, b); - -- // Irreflexivity -- assert!(!(a < a), "{:?}, {:?}", a, b); -- assert!(!(b < b), "{:?}, {:?}", a, b); -- assert!(!(a > a), "{:?}, {:?}", a, b); -- assert!(!(b > b), "{:?}, {:?}", a, b); -+ // The elegance of the mathematical expression of irreflexivity is more -+ // than clippy can handle. -+ #[allow(clippy::eq_op)] -+ { -+ // Irreflexivity -+ assert!(!(a < a), "{:?}, {:?}", a, b); -+ assert!(!(b < b), "{:?}, {:?}", a, b); -+ assert!(!(a > a), "{:?}, {:?}", a, b); -+ assert!(!(b > b), "{:?}, {:?}", a, b); - -- assert!(a <= a, "{:?}, {:?}", a, b); -- assert!(b <= b, "{:?}, {:?}", a, b); -+ assert!(a <= a, "{:?}, {:?}", a, b); -+ assert!(b <= b, "{:?}, {:?}", a, b); -+ } - } - - /// Tests PartialOrd for `a` and `b` where `a <= b` is true. - pub fn test_le( - a: LexicographicallyOrdered, b: LexicographicallyOrdered, - ) where - LexicographicallyOrdered: Debug + PartialOrd, - { - assert!(a <= b, "{:?}, {:?}", a, b); - assert!(b >= a, "{:?}, {:?}", a, b); - -- assert!(a == b || a < b, "{:?}, {:?}", a, b); -- assert!(a == b || b > a, "{:?}, {:?}", a, b); -+ assert!(a <= b, "{:?}, {:?}", a, b); -+ assert!(b >= a, "{:?}, {:?}", a, b); - - if a == b { - assert!(!(a < b), "{:?}, {:?}", a, b); - assert!(!(b > a), "{:?}, {:?}", a, b); - - assert!(!(a != b), "{:?}, {:?}", a, b); - } else { - assert!(a != b, "{:?}, {:?}", a, b); -diff --git a/third_party/rust/packed_simd/src/v128.rs b/third_party/rust/packed_simd/src/v128.rs ---- a/third_party/rust/packed_simd/src/v128.rs -+++ b/third_party/rust/packed_simd/src/v128.rs -@@ -1,80 +1,80 @@ - //! 128-bit wide vector types --#![rustfmt::skip] -+#[rustfmt::skip] - - use crate::*; - --impl_i!([i8; 16]: i8x16, m8x16 | i8 | test_v128 | -+impl_i!([i8; 16]: i8x16, m8x16 | i8, u16 | test_v128 | - x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15 | - From: | - /// A 128-bit vector with 16 `i8` lanes. - ); --impl_u!([u8; 16]: u8x16, m8x16 | u8 | test_v128 | -+impl_u!([u8; 16]: u8x16, m8x16 | u8, u16 | test_v128 | - x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15 | - From: | - /// A 128-bit vector with 16 `u8` lanes. - ); --impl_m!([m8; 16]: m8x16 | i8 | test_v128 | -+impl_m!([m8; 16]: m8x16 | i8, u16 | test_v128 | - x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15 | - From: m16x16 | - /// A 128-bit vector mask with 16 `m8` lanes. - ); - --impl_i!([i16; 8]: i16x8, m16x8 | i16 | test_v128 | x0, x1, x2, x3, x4, x5, x6, x7 | -+impl_i!([i16; 8]: i16x8, m16x8 | i16, u8 | test_v128 | x0, x1, x2, x3, x4, x5, x6, x7 | - From: i8x8, u8x8 | - /// A 128-bit vector with 8 `i16` lanes. - ); --impl_u!([u16; 8]: u16x8, m16x8 | u16| test_v128 | x0, x1, x2, x3, x4, x5, x6, x7 | -+impl_u!([u16; 8]: u16x8, m16x8 | u16, u8 | test_v128 | x0, x1, x2, x3, x4, x5, x6, x7 | - From: u8x8 | - /// A 128-bit vector with 8 `u16` lanes. - ); --impl_m!([m16; 8]: m16x8 | i16 | test_v128 | x0, x1, x2, x3, x4, x5, x6, x7 | -+impl_m!([m16; 8]: m16x8 | i16, u8 | test_v128 | x0, x1, x2, x3, x4, x5, x6, x7 | - From: m8x8, m32x8 | - /// A 128-bit vector mask with 8 `m16` lanes. - ); - --impl_i!([i32; 4]: i32x4, m32x4 | i32 | test_v128 | x0, x1, x2, x3 | -+impl_i!([i32; 4]: i32x4, m32x4 | i32, u8 | test_v128 | x0, x1, x2, x3 | - From: i8x4, u8x4, i16x4, u16x4 | - /// A 128-bit vector with 4 `i32` lanes. - ); --impl_u!([u32; 4]: u32x4, m32x4 | u32| test_v128 | x0, x1, x2, x3 | -+impl_u!([u32; 4]: u32x4, m32x4 | u32, u8 | test_v128 | x0, x1, x2, x3 | - From: u8x4, u16x4 | - /// A 128-bit vector with 4 `u32` lanes. - ); - impl_f!([f32; 4]: f32x4, m32x4 | f32 | test_v128 | x0, x1, x2, x3 | - From: i8x4, u8x4, i16x4, u16x4 | - /// A 128-bit vector with 4 `f32` lanes. - ); --impl_m!([m32; 4]: m32x4 | i32 | test_v128 | x0, x1, x2, x3 | -+impl_m!([m32; 4]: m32x4 | i32, u8 | test_v128 | x0, x1, x2, x3 | - From: m8x4, m16x4, m64x4 | - /// A 128-bit vector mask with 4 `m32` lanes. - ); - --impl_i!([i64; 2]: i64x2, m64x2 | i64 | test_v128 | x0, x1 | -+impl_i!([i64; 2]: i64x2, m64x2 | i64, u8 | test_v128 | x0, x1 | - From: i8x2, u8x2, i16x2, u16x2, i32x2, u32x2 | - /// A 128-bit vector with 2 `i64` lanes. - ); --impl_u!([u64; 2]: u64x2, m64x2 | u64 | test_v128 | x0, x1 | -+impl_u!([u64; 2]: u64x2, m64x2 | u64, u8 | test_v128 | x0, x1 | - From: u8x2, u16x2, u32x2 | - /// A 128-bit vector with 2 `u64` lanes. - ); - impl_f!([f64; 2]: f64x2, m64x2 | f64 | test_v128 | x0, x1 | - From: i8x2, u8x2, i16x2, u16x2, i32x2, u32x2, f32x2 | - /// A 128-bit vector with 2 `f64` lanes. - ); --impl_m!([m64; 2]: m64x2 | i64 | test_v128 | x0, x1 | -+impl_m!([m64; 2]: m64x2 | i64, u8 | test_v128 | x0, x1 | - From: m8x2, m16x2, m32x2, m128x2 | - /// A 128-bit vector mask with 2 `m64` lanes. - ); - --impl_i!([i128; 1]: i128x1, m128x1 | i128 | test_v128 | x0 | -+impl_i!([i128; 1]: i128x1, m128x1 | i128, u8 | test_v128 | x0 | - From: /*i8x1, u8x1, i16x1, u16x1, i32x1, u32x1, i64x1, u64x1 */ | // FIXME: unary small vector types - /// A 128-bit vector with 1 `i128` lane. - ); --impl_u!([u128; 1]: u128x1, m128x1 | u128 | test_v128 | x0 | -+impl_u!([u128; 1]: u128x1, m128x1 | u128, u8 | test_v128 | x0 | - From: /*u8x1, u16x1, u32x1, u64x1 */ | // FIXME: unary small vector types - /// A 128-bit vector with 1 `u128` lane. - ); --impl_m!([m128; 1]: m128x1 | i128 | test_v128 | x0 | -+impl_m!([m128; 1]: m128x1 | i128, u8 | test_v128 | x0 | - From: /*m8x1, m16x1, m32x1, m64x1 */ | // FIXME: unary small vector types - /// A 128-bit vector mask with 1 `m128` lane. - ); -diff --git a/third_party/rust/packed_simd/src/v16.rs b/third_party/rust/packed_simd/src/v16.rs ---- a/third_party/rust/packed_simd/src/v16.rs -+++ b/third_party/rust/packed_simd/src/v16.rs -@@ -1,16 +1,16 @@ - //! 16-bit wide vector types - - use crate::*; - --impl_i!([i8; 2]: i8x2, m8x2 | i8 | test_v16 | x0, x1 | -+impl_i!([i8; 2]: i8x2, m8x2 | i8, u8 | test_v16 | x0, x1 | - From: | - /// A 16-bit vector with 2 `i8` lanes. - ); --impl_u!([u8; 2]: u8x2, m8x2 | u8 | test_v16 | x0, x1 | -+impl_u!([u8; 2]: u8x2, m8x2 | u8, u8 | test_v16 | x0, x1 | - From: | - /// A 16-bit vector with 2 `u8` lanes. - ); --impl_m!([m8; 2]: m8x2 | i8 | test_v16 | x0, x1 | -+impl_m!([m8; 2]: m8x2 | i8, u8 | test_v16 | x0, x1 | - From: m16x2, m32x2, m64x2, m128x2 | - /// A 16-bit vector mask with 2 `m8` lanes. - ); -diff --git a/third_party/rust/packed_simd/src/v256.rs b/third_party/rust/packed_simd/src/v256.rs ---- a/third_party/rust/packed_simd/src/v256.rs -+++ b/third_party/rust/packed_simd/src/v256.rs -@@ -1,86 +1,86 @@ - //! 256-bit wide vector types --#![rustfmt::skip] -+#[rustfmt::skip] - - use crate::*; - --impl_i!([i8; 32]: i8x32, m8x32 | i8 | test_v256 | -+impl_i!([i8; 32]: i8x32, m8x32 | i8, u32 | test_v256 | - x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, - x16, x17, x18, x19, x20, x21, x22, x23, x24, x25, x26, x27, x28, x29, x30, x31 | - From: | - /// A 256-bit vector with 32 `i8` lanes. - ); --impl_u!([u8; 32]: u8x32, m8x32 | u8 | test_v256 | -+impl_u!([u8; 32]: u8x32, m8x32 | u8, u32 | test_v256 | - x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, - x16, x17, x18, x19, x20, x21, x22, x23, x24, x25, x26, x27, x28, x29, x30, x31 | - From: | - /// A 256-bit vector with 32 `u8` lanes. - ); --impl_m!([m8; 32]: m8x32 | i8 | test_v256 | -+impl_m!([m8; 32]: m8x32 | i8, u32 | test_v256 | - x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, - x16, x17, x18, x19, x20, x21, x22, x23, x24, x25, x26, x27, x28, x29, x30, x31 | - From: | - /// A 256-bit vector mask with 32 `m8` lanes. - ); - --impl_i!([i16; 16]: i16x16, m16x16 | i16 | test_v256 | -+impl_i!([i16; 16]: i16x16, m16x16 | i16, u16 | test_v256 | - x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15 | - From: i8x16, u8x16 | - /// A 256-bit vector with 16 `i16` lanes. - ); --impl_u!([u16; 16]: u16x16, m16x16 | u16 | test_v256 | -+impl_u!([u16; 16]: u16x16, m16x16 | u16, u16 | test_v256 | - x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15 | - From: u8x16 | - /// A 256-bit vector with 16 `u16` lanes. - ); --impl_m!([m16; 16]: m16x16 | i16 | test_v256 | -+impl_m!([m16; 16]: m16x16 | i16, u16 | test_v256 | - x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15 | - From: m8x16 | - /// A 256-bit vector mask with 16 `m16` lanes. - ); - --impl_i!([i32; 8]: i32x8, m32x8 | i32 | test_v256 | x0, x1, x2, x3, x4, x5, x6, x7 | -+impl_i!([i32; 8]: i32x8, m32x8 | i32, u8 | test_v256 | x0, x1, x2, x3, x4, x5, x6, x7 | - From: i8x8, u8x8, i16x8, u16x8 | - /// A 256-bit vector with 8 `i32` lanes. - ); --impl_u!([u32; 8]: u32x8, m32x8 | u32 | test_v256 | x0, x1, x2, x3, x4, x5, x6, x7 | -+impl_u!([u32; 8]: u32x8, m32x8 | u32, u8 | test_v256 | x0, x1, x2, x3, x4, x5, x6, x7 | - From: u8x8, u16x8 | - /// A 256-bit vector with 8 `u32` lanes. - ); - impl_f!([f32; 8]: f32x8, m32x8 | f32 | test_v256 | x0, x1, x2, x3, x4, x5, x6, x7 | - From: i8x8, u8x8, i16x8, u16x8 | - /// A 256-bit vector with 8 `f32` lanes. - ); --impl_m!([m32; 8]: m32x8 | i32 | test_v256 | x0, x1, x2, x3, x4, x5, x6, x7 | -+impl_m!([m32; 8]: m32x8 | i32, u8 | test_v256 | x0, x1, x2, x3, x4, x5, x6, x7 | - From: m8x8, m16x8 | - /// A 256-bit vector mask with 8 `m32` lanes. - ); - --impl_i!([i64; 4]: i64x4, m64x4 | i64 | test_v256 | x0, x1, x2, x3 | -+impl_i!([i64; 4]: i64x4, m64x4 | i64, u8 | test_v256 | x0, x1, x2, x3 | - From: i8x4, u8x4, i16x4, u16x4, i32x4, u32x4 | - /// A 256-bit vector with 4 `i64` lanes. - ); --impl_u!([u64; 4]: u64x4, m64x4 | u64 | test_v256 | x0, x1, x2, x3 | -+impl_u!([u64; 4]: u64x4, m64x4 | u64, u8 | test_v256 | x0, x1, x2, x3 | - From: u8x4, u16x4, u32x4 | - /// A 256-bit vector with 4 `u64` lanes. - ); - impl_f!([f64; 4]: f64x4, m64x4 | f64 | test_v256 | x0, x1, x2, x3 | - From: i8x4, u8x4, i16x4, u16x4, i32x4, u32x4, f32x4 | - /// A 256-bit vector with 4 `f64` lanes. - ); --impl_m!([m64; 4]: m64x4 | i64 | test_v256 | x0, x1, x2, x3 | -+impl_m!([m64; 4]: m64x4 | i64, u8 | test_v256 | x0, x1, x2, x3 | - From: m8x4, m16x4, m32x4 | - /// A 256-bit vector mask with 4 `m64` lanes. - ); - --impl_i!([i128; 2]: i128x2, m128x2 | i128 | test_v256 | x0, x1 | -+impl_i!([i128; 2]: i128x2, m128x2 | i128, u8 | test_v256 | x0, x1 | - From: i8x2, u8x2, i16x2, u16x2, i32x2, u32x2, i64x2, u64x2 | - /// A 256-bit vector with 2 `i128` lanes. - ); --impl_u!([u128; 2]: u128x2, m128x2 | u128 | test_v256 | x0, x1 | -+impl_u!([u128; 2]: u128x2, m128x2 | u128, u8 | test_v256 | x0, x1 | - From: u8x2, u16x2, u32x2, u64x2 | - /// A 256-bit vector with 2 `u128` lanes. - ); --impl_m!([m128; 2]: m128x2 | i128 | test_v256 | x0, x1 | -+impl_m!([m128; 2]: m128x2 | i128, u8 | test_v256 | x0, x1 | - From: m8x2, m16x2, m32x2, m64x2 | - /// A 256-bit vector mask with 2 `m128` lanes. - ); -diff --git a/third_party/rust/packed_simd/src/v32.rs b/third_party/rust/packed_simd/src/v32.rs ---- a/third_party/rust/packed_simd/src/v32.rs -+++ b/third_party/rust/packed_simd/src/v32.rs -@@ -1,29 +1,29 @@ - //! 32-bit wide vector types - - use crate::*; - --impl_i!([i8; 4]: i8x4, m8x4 | i8 | test_v32 | x0, x1, x2, x3 | -+impl_i!([i8; 4]: i8x4, m8x4 | i8, u8 | test_v32 | x0, x1, x2, x3 | - From: | - /// A 32-bit vector with 4 `i8` lanes. - ); --impl_u!([u8; 4]: u8x4, m8x4 | u8 | test_v32 | x0, x1, x2, x3 | -+impl_u!([u8; 4]: u8x4, m8x4 | u8, u8 | test_v32 | x0, x1, x2, x3 | - From: | - /// A 32-bit vector with 4 `u8` lanes. - ); --impl_m!([m8; 4]: m8x4 | i8 | test_v32 | x0, x1, x2, x3 | -+impl_m!([m8; 4]: m8x4 | i8, u8 | test_v32 | x0, x1, x2, x3 | - From: m16x4, m32x4, m64x4 | - /// A 32-bit vector mask with 4 `m8` lanes. - ); - --impl_i!([i16; 2]: i16x2, m16x2 | i16 | test_v32 | x0, x1 | -+impl_i!([i16; 2]: i16x2, m16x2 | i16, u8 | test_v32 | x0, x1 | - From: i8x2, u8x2 | - /// A 32-bit vector with 2 `i16` lanes. - ); --impl_u!([u16; 2]: u16x2, m16x2 | u16 | test_v32 | x0, x1 | -+impl_u!([u16; 2]: u16x2, m16x2 | u16, u8 | test_v32 | x0, x1 | - From: u8x2 | - /// A 32-bit vector with 2 `u16` lanes. - ); --impl_m!([m16; 2]: m16x2 | i16 | test_v32 | x0, x1 | -+impl_m!([m16; 2]: m16x2 | i16, u8 | test_v32 | x0, x1 | - From: m8x2, m32x2, m64x2, m128x2 | - /// A 32-bit vector mask with 2 `m16` lanes. - ); -diff --git a/third_party/rust/packed_simd/src/v512.rs b/third_party/rust/packed_simd/src/v512.rs ---- a/third_party/rust/packed_simd/src/v512.rs -+++ b/third_party/rust/packed_simd/src/v512.rs -@@ -1,99 +1,99 @@ - //! 512-bit wide vector types --#![rustfmt::skip] -+#[rustfmt::skip] - - use crate::*; - --impl_i!([i8; 64]: i8x64, m8x64 | i8 | test_v512 | -+impl_i!([i8; 64]: i8x64, m8x64 | i8, u64 | test_v512 | - x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, - x16, x17, x18, x19, x20, x21, x22, x23, x24, x25, x26, x27, x28, x29, x30, x31, - x32, x33, x34, x35, x36, x37, x38, x39, x40, x41, x42, x43, x44, x45, x46, x47, - x48, x49, x50, x51, x52, x53, x54, x55, x56, x57, x58, x59, x60, x61, x62, x63 | - From: | - /// A 512-bit vector with 64 `i8` lanes. - ); --impl_u!([u8; 64]: u8x64, m8x64 | u8 | test_v512 | -+impl_u!([u8; 64]: u8x64, m8x64 | u8, u64 | test_v512 | - x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, - x16, x17, x18, x19, x20, x21, x22, x23, x24, x25, x26, x27, x28, x29, x30, x31, - x32, x33, x34, x35, x36, x37, x38, x39, x40, x41, x42, x43, x44, x45, x46, x47, - x48, x49, x50, x51, x52, x53, x54, x55, x56, x57, x58, x59, x60, x61, x62, x63 | - From: | - /// A 512-bit vector with 64 `u8` lanes. - ); --impl_m!([m8; 64]: m8x64 | i8 | test_v512 | -+impl_m!([m8; 64]: m8x64 | i8, u64 | test_v512 | - x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, - x16, x17, x18, x19, x20, x21, x22, x23, x24, x25, x26, x27, x28, x29, x30, x31, - x32, x33, x34, x35, x36, x37, x38, x39, x40, x41, x42, x43, x44, x45, x46, x47, - x48, x49, x50, x51, x52, x53, x54, x55, x56, x57, x58, x59, x60, x61, x62, x63 | - From: | - /// A 512-bit vector mask with 64 `m8` lanes. - ); - --impl_i!([i16; 32]: i16x32, m16x32 | i16 | test_v512 | -+impl_i!([i16; 32]: i16x32, m16x32 | i16, u32 | test_v512 | - x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, - x16, x17, x18, x19, x20, x21, x22, x23, x24, x25, x26, x27, x28, x29, x30, x31 | - From: i8x32, u8x32 | - /// A 512-bit vector with 32 `i16` lanes. - ); --impl_u!([u16; 32]: u16x32, m16x32 | u16 | test_v512 | -+impl_u!([u16; 32]: u16x32, m16x32 | u16, u32 | test_v512 | - x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, - x16, x17, x18, x19, x20, x21, x22, x23, x24, x25, x26, x27, x28, x29, x30, x31 | - From: u8x32 | - /// A 512-bit vector with 32 `u16` lanes. - ); --impl_m!([m16; 32]: m16x32 | i16 | test_v512 | -+impl_m!([m16; 32]: m16x32 | i16, u32 | test_v512 | - x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, - x16, x17, x18, x19, x20, x21, x22, x23, x24, x25, x26, x27, x28, x29, x30, x31 | - From: m8x32 | - /// A 512-bit vector mask with 32 `m16` lanes. - ); - --impl_i!([i32; 16]: i32x16, m32x16 | i32 | test_v512 | -+impl_i!([i32; 16]: i32x16, m32x16 | i32, u16 | test_v512 | - x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15 | - From: i8x16, u8x16, i16x16, u16x16 | - /// A 512-bit vector with 16 `i32` lanes. - ); --impl_u!([u32; 16]: u32x16, m32x16 | u32 | test_v512 | -+impl_u!([u32; 16]: u32x16, m32x16 | u32, u16 | test_v512 | - x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15 | - From: u8x16, u16x16 | - /// A 512-bit vector with 16 `u32` lanes. - ); - impl_f!([f32; 16]: f32x16, m32x16 | f32 | test_v512 | - x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15 | - From: i8x16, u8x16, i16x16, u16x16 | - /// A 512-bit vector with 16 `f32` lanes. - ); --impl_m!([m32; 16]: m32x16 | i32 | test_v512 | -+impl_m!([m32; 16]: m32x16 | i32, u16 | test_v512 | - x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15 | - From: m8x16, m16x16 | - /// A 512-bit vector mask with 16 `m32` lanes. - ); - --impl_i!([i64; 8]: i64x8, m64x8 | i64 | test_v512 | x0, x1, x2, x3, x4, x5, x6, x7 | -+impl_i!([i64; 8]: i64x8, m64x8 | i64, u8 | test_v512 | x0, x1, x2, x3, x4, x5, x6, x7 | - From: i8x8, u8x8, i16x8, u16x8, i32x8, u32x8 | - /// A 512-bit vector with 8 `i64` lanes. - ); --impl_u!([u64; 8]: u64x8, m64x8 | u64 | test_v512 | x0, x1, x2, x3, x4, x5, x6, x7 | -+impl_u!([u64; 8]: u64x8, m64x8 | u64, u8 | test_v512 | x0, x1, x2, x3, x4, x5, x6, x7 | - From: u8x8, u16x8, u32x8 | - /// A 512-bit vector with 8 `u64` lanes. - ); - impl_f!([f64; 8]: f64x8, m64x8 | f64 | test_v512 | x0, x1, x2, x3, x4, x5, x6, x7 | - From: i8x8, u8x8, i16x8, u16x8, i32x8, u32x8, f32x8 | - /// A 512-bit vector with 8 `f64` lanes. - ); --impl_m!([m64; 8]: m64x8 | i64 | test_v512 | x0, x1, x2, x3, x4, x5, x6, x7 | -+impl_m!([m64; 8]: m64x8 | i64, u8 | test_v512 | x0, x1, x2, x3, x4, x5, x6, x7 | - From: m8x8, m16x8, m32x8 | - /// A 512-bit vector mask with 8 `m64` lanes. - ); - --impl_i!([i128; 4]: i128x4, m128x4 | i128 | test_v512 | x0, x1, x2, x3 | -+impl_i!([i128; 4]: i128x4, m128x4 | i128, u8 | test_v512 | x0, x1, x2, x3 | - From: i8x4, u8x4, i16x4, u16x4, i32x4, u32x4, i64x4, u64x4 | - /// A 512-bit vector with 4 `i128` lanes. - ); --impl_u!([u128; 4]: u128x4, m128x4 | u128 | test_v512 | x0, x1, x2, x3 | -+impl_u!([u128; 4]: u128x4, m128x4 | u128, u8 | test_v512 | x0, x1, x2, x3 | - From: u8x4, u16x4, u32x4, u64x4 | - /// A 512-bit vector with 4 `u128` lanes. - ); --impl_m!([m128; 4]: m128x4 | i128 | test_v512 | x0, x1, x2, x3 | -+impl_m!([m128; 4]: m128x4 | i128, u8 | test_v512 | x0, x1, x2, x3 | - From: m8x4, m16x4, m32x4, m64x4 | - /// A 512-bit vector mask with 4 `m128` lanes. - ); -diff --git a/third_party/rust/packed_simd/src/v64.rs b/third_party/rust/packed_simd/src/v64.rs ---- a/third_party/rust/packed_simd/src/v64.rs -+++ b/third_party/rust/packed_simd/src/v64.rs -@@ -1,66 +1,66 @@ - //! 64-bit wide vector types --#![rustfmt::skip] -+#[rustfmt::skip] - - use super::*; - --impl_i!([i8; 8]: i8x8, m8x8 | i8 | test_v64 | x0, x1, x2, x3, x4, x5, x6, x7 | -+impl_i!([i8; 8]: i8x8, m8x8 | i8, u8 | test_v64 | x0, x1, x2, x3, x4, x5, x6, x7 | - From: | - /// A 64-bit vector with 8 `i8` lanes. - ); --impl_u!([u8; 8]: u8x8, m8x8 | u8 | test_v64 | x0, x1, x2, x3, x4, x5, x6, x7 | -+impl_u!([u8; 8]: u8x8, m8x8 | u8, u8 | test_v64 | x0, x1, x2, x3, x4, x5, x6, x7 | - From: | - /// A 64-bit vector with 8 `u8` lanes. - ); --impl_m!([m8; 8]: m8x8 | i8 | test_v64 | x0, x1, x2, x3, x4, x5, x6, x7 | -+impl_m!([m8; 8]: m8x8 | i8, u8 | test_v64 | x0, x1, x2, x3, x4, x5, x6, x7 | - From: m16x8, m32x8 | - /// A 64-bit vector mask with 8 `m8` lanes. - ); - --impl_i!([i16; 4]: i16x4, m16x4 | i16 | test_v64 | x0, x1, x2, x3 | -+impl_i!([i16; 4]: i16x4, m16x4 | i16, u8 | test_v64 | x0, x1, x2, x3 | - From: i8x4, u8x4 | - /// A 64-bit vector with 4 `i16` lanes. - ); --impl_u!([u16; 4]: u16x4, m16x4 | u16 | test_v64 | x0, x1, x2, x3 | -+impl_u!([u16; 4]: u16x4, m16x4 | u16, u8 | test_v64 | x0, x1, x2, x3 | - From: u8x4 | - /// A 64-bit vector with 4 `u16` lanes. - ); --impl_m!([m16; 4]: m16x4 | i16 | test_v64 | x0, x1, x2, x3 | -+impl_m!([m16; 4]: m16x4 | i16, u8 | test_v64 | x0, x1, x2, x3 | - From: m8x4, m32x4, m64x4 | - /// A 64-bit vector mask with 4 `m16` lanes. - ); - --impl_i!([i32; 2]: i32x2, m32x2 | i32 | test_v64 | x0, x1 | -+impl_i!([i32; 2]: i32x2, m32x2 | i32, u8 | test_v64 | x0, x1 | - From: i8x2, u8x2, i16x2, u16x2 | - /// A 64-bit vector with 2 `i32` lanes. - ); --impl_u!([u32; 2]: u32x2, m32x2 | u32 | test_v64 | x0, x1 | -+impl_u!([u32; 2]: u32x2, m32x2 | u32, u8 | test_v64 | x0, x1 | - From: u8x2, u16x2 | - /// A 64-bit vector with 2 `u32` lanes. - ); --impl_m!([m32; 2]: m32x2 | i32 | test_v64 | x0, x1 | -+impl_m!([m32; 2]: m32x2 | i32, u8 | test_v64 | x0, x1 | - From: m8x2, m16x2, m64x2, m128x2 | - /// A 64-bit vector mask with 2 `m32` lanes. - ); - impl_f!([f32; 2]: f32x2, m32x2 | f32 | test_v64 | x0, x1 | - From: i8x2, u8x2, i16x2, u16x2 | - /// A 64-bit vector with 2 `f32` lanes. - ); - - /* --impl_i!([i64; 1]: i64x1, m64x1 | i64 | test_v64 | x0 | -+impl_i!([i64; 1]: i64x1, m64x1 | i64, u8 | test_v64 | x0 | - From: /*i8x1, u8x1, i16x1, u16x1, i32x1, u32x1*/ | // FIXME: primitive to vector conversion - /// A 64-bit vector with 1 `i64` lanes. - ); --impl_u!([u64; 1]: u64x1, m64x1 | u64 | test_v64 | x0 | -+impl_u!([u64; 1]: u64x1, m64x1 | u64, u8 | test_v64 | x0 | - From: /*u8x1, u16x1, u32x1*/ | // FIXME: primitive to vector conversion - /// A 64-bit vector with 1 `u64` lanes. - ); --impl_m!([m64; 1]: m64x1 | i64 | test_v64 | x0 | -+impl_m!([m64; 1]: m64x1 | i64, u8 | test_v64 | x0 | - From: /*m8x1, m16x1, m32x1, */ m128x1 | // FIXME: unary small vector types - /// A 64-bit vector mask with 1 `m64` lanes. - ); - impl_f!([f64; 1]: f64x1, m64x1 | f64 | test_v64 | x0 | - From: /*i8x1, u8x1, i16x1, u16x1, i32x1, u32x1, f32x1*/ | // FIXME: unary small vector types - /// A 64-bit vector with 1 `f64` lanes. - ); - */ -diff --git a/third_party/rust/packed_simd/src/vPtr.rs b/third_party/rust/packed_simd/src/vPtr.rs ---- a/third_party/rust/packed_simd/src/vPtr.rs -+++ b/third_party/rust/packed_simd/src/vPtr.rs -@@ -1,10 +1,10 @@ - //! Vectors of pointers --#![rustfmt::skip] -+#[rustfmt::skip] - - use crate::*; - - impl_const_p!( - [*const T; 2]: cptrx2, msizex2, usizex2, isizex2 | test_v128 | x0, x1 | From: | - /// A vector with 2 `*const T` lanes - ); - -diff --git a/third_party/rust/packed_simd/src/vSize.rs b/third_party/rust/packed_simd/src/vSize.rs ---- a/third_party/rust/packed_simd/src/vSize.rs -+++ b/third_party/rust/packed_simd/src/vSize.rs -@@ -1,53 +1,53 @@ - //! Vectors with pointer-sized elements - - use crate::codegen::pointer_sized_int::{isize_, usize_}; - use crate::*; - --impl_i!([isize; 2]: isizex2, msizex2 | isize_ | test_v128 | -+impl_i!([isize; 2]: isizex2, msizex2 | isize_, u8 | test_v128 | - x0, x1| - From: | - /// A vector with 2 `isize` lanes. - ); - --impl_u!([usize; 2]: usizex2, msizex2 | usize_ | test_v128 | -+impl_u!([usize; 2]: usizex2, msizex2 | usize_, u8 | test_v128 | - x0, x1| - From: | - /// A vector with 2 `usize` lanes. - ); --impl_m!([msize; 2]: msizex2 | isize_ | test_v128 | -+impl_m!([msize; 2]: msizex2 | isize_, u8 | test_v128 | - x0, x1 | - From: | - /// A vector mask with 2 `msize` lanes. - ); - --impl_i!([isize; 4]: isizex4, msizex4 | isize_ | test_v256 | -+impl_i!([isize; 4]: isizex4, msizex4 | isize_, u8 | test_v256 | - x0, x1, x2, x3 | - From: | - /// A vector with 4 `isize` lanes. - ); --impl_u!([usize; 4]: usizex4, msizex4 | usize_ | test_v256 | -+impl_u!([usize; 4]: usizex4, msizex4 | usize_, u8 | test_v256 | - x0, x1, x2, x3| - From: | - /// A vector with 4 `usize` lanes. - ); --impl_m!([msize; 4]: msizex4 | isize_ | test_v256 | -+impl_m!([msize; 4]: msizex4 | isize_, u8 | test_v256 | - x0, x1, x2, x3 | - From: | - /// A vector mask with 4 `msize` lanes. - ); - --impl_i!([isize; 8]: isizex8, msizex8 | isize_ | test_v512 | -+impl_i!([isize; 8]: isizex8, msizex8 | isize_, u8 | test_v512 | - x0, x1, x2, x3, x4, x5, x6, x7 | - From: | -- /// A vector with 4 `isize` lanes. -+ /// A vector with 8 `isize` lanes. - ); --impl_u!([usize; 8]: usizex8, msizex8 | usize_ | test_v512 | -+impl_u!([usize; 8]: usizex8, msizex8 | usize_, u8 | test_v512 | - x0, x1, x2, x3, x4, x5, x6, x7 | - From: | - /// A vector with 8 `usize` lanes. - ); --impl_m!([msize; 8]: msizex8 | isize_ | test_v512 | -+impl_m!([msize; 8]: msizex8 | isize_, u8 | test_v512 | - x0, x1, x2, x3, x4, x5, x6, x7 | - From: | - /// A vector mask with 8 `msize` lanes. - ); -diff --git a/third_party/rust/packed_simd/tests/endianness.rs b/third_party/rust/packed_simd/tests/endianness.rs ---- a/third_party/rust/packed_simd/tests/endianness.rs -+++ b/third_party/rust/packed_simd/tests/endianness.rs -@@ -12,51 +12,51 @@ fn endian_indexing() { - assert_eq!(v.extract(1), 1); - assert_eq!(v.extract(2), 2); - assert_eq!(v.extract(3), 3); - } - - #[cfg_attr(not(target_arch = "wasm32"), test)] - #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] - fn endian_bitcasts() { -- #[cfg_attr(rustfmt, rustfmt_skip)] -+ #[rustfmt::skip] - let x = i8x16::new( - 0, 1, 2, 3, 4, 5, 6, 7, - 8, 9, 10, 11, 12, 13, 14, 15, - ); - let t: i16x8 = unsafe { mem::transmute(x) }; - let e: i16x8 = if cfg!(target_endian = "little") { - i16x8::new(256, 770, 1284, 1798, 2312, 2826, 3340, 3854) - } else { - i16x8::new(1, 515, 1029, 1543, 2057, 2571, 3085, 3599) - }; - assert_eq!(t, e); - } - - #[cfg_attr(not(target_arch = "wasm32"), test)] - #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] - fn endian_casts() { -- #[cfg_attr(rustfmt, rustfmt_skip)] -+ #[rustfmt::skip] - let x = i8x16::new( - 0, 1, 2, 3, 4, 5, 6, 7, - 8, 9, 10, 11, 12, 13, 14, 15, - ); - let t: i16x16 = x.into(); // simd_cast -- #[cfg_attr(rustfmt, rustfmt_skip)] -+ #[rustfmt::skip] - let e = i16x16::new( - 0, 1, 2, 3, 4, 5, 6, 7, - 8, 9, 10, 11, 12, 13, 14, 15, - ); - assert_eq!(t, e); - } - - #[cfg_attr(not(target_arch = "wasm32"), test)] - #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] - fn endian_load_and_stores() { -- #[cfg_attr(rustfmt, rustfmt_skip)] -+ #[rustfmt::skip] - let x = i8x16::new( - 0, 1, 2, 3, 4, 5, 6, 7, - 8, 9, 10, 11, 12, 13, 14, 15, - ); - let mut y: [i16; 8] = [0; 8]; - x.write_to_slice_unaligned(unsafe { - slice::from_raw_parts_mut(&mut y as *mut _ as *mut i8, 16) - }); -@@ -77,56 +77,61 @@ fn endian_load_and_stores() { - #[cfg_attr(not(target_arch = "wasm32"), test)] - #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] - fn endian_array_union() { - union A { - data: [f32; 4], - vec: f32x4, - } - let x: [f32; 4] = unsafe { A { vec: f32x4::new(0., 1., 2., 3.) }.data }; -- assert_eq!(x[0], 0_f32); -- assert_eq!(x[1], 1_f32); -- assert_eq!(x[2], 2_f32); -- assert_eq!(x[3], 3_f32); -+ // As all of these are integer values within the mantissa^1 range, it -+ // would be very unusual for them to actually fail to compare. -+ #[allow(clippy::float_cmp)] -+ { -+ assert_eq!(x[0], 0_f32); -+ assert_eq!(x[1], 1_f32); -+ assert_eq!(x[2], 2_f32); -+ assert_eq!(x[3], 3_f32); -+ } - let y: f32x4 = unsafe { A { data: [3., 2., 1., 0.] }.vec }; - assert_eq!(y, f32x4::new(3., 2., 1., 0.)); - - union B { - data: [i8; 16], - vec: i8x16, - } -- #[cfg_attr(rustfmt, rustfmt_skip)] -+ #[rustfmt::skip] - let x = i8x16::new( - 0, 1, 2, 3, 4, 5, 6, 7, - 8, 9, 10, 11, 12, 13, 14, 15, - ); - let x: [i8; 16] = unsafe { B { vec: x }.data }; - -- for i in 0..16 { -- assert_eq!(x[i], i as i8); -+ for (i, v) in x.iter().enumerate() { -+ assert_eq!(i as i8, *v); - } - -- #[cfg_attr(rustfmt, rustfmt_skip)] -+ #[rustfmt::skip] - let y = [ - 15, 14, 13, 12, 11, 19, 9, 8, - 7, 6, 5, 4, 3, 2, 1, 0 - ]; -- #[cfg_attr(rustfmt, rustfmt_skip)] -+ #[rustfmt::skip] - let e = i8x16::new( - 15, 14, 13, 12, 11, 19, 9, 8, - 7, 6, 5, 4, 3, 2, 1, 0 - ); - let z = unsafe { B { data: y }.vec }; - assert_eq!(z, e); - - union C { - data: [i16; 8], - vec: i8x16, - } -- #[cfg_attr(rustfmt, rustfmt_skip)] -+ #[rustfmt::skip] - let x = i8x16::new( - 0, 1, 2, 3, 4, 5, 6, 7, - 8, 9, 10, 11, 12, 13, 14, 15, - ); - let x: [i16; 8] = unsafe { C { vec: x }.data }; - - let e: [i16; 8] = if cfg!(target_endian = "little") { - [256, 770, 1284, 1798, 2312, 2826, 3340, 3854] -@@ -140,31 +145,36 @@ fn endian_array_union() { - #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] - fn endian_tuple_access() { - type F32x4T = (f32, f32, f32, f32); - union A { - data: F32x4T, - vec: f32x4, - } - let x: F32x4T = unsafe { A { vec: f32x4::new(0., 1., 2., 3.) }.data }; -- assert_eq!(x.0, 0_f32); -- assert_eq!(x.1, 1_f32); -- assert_eq!(x.2, 2_f32); -- assert_eq!(x.3, 3_f32); -+ // As all of these are integer values within the mantissa^1 range, it -+ // would be very unusual for them to actually fail to compare. -+ #[allow(clippy::float_cmp)] -+ { -+ assert_eq!(x.0, 0_f32); -+ assert_eq!(x.1, 1_f32); -+ assert_eq!(x.2, 2_f32); -+ assert_eq!(x.3, 3_f32); -+ } - let y: f32x4 = unsafe { A { data: (3., 2., 1., 0.) }.vec }; - assert_eq!(y, f32x4::new(3., 2., 1., 0.)); - -- #[cfg_attr(rustfmt, rustfmt_skip)] -+ #[rustfmt::skip] - type I8x16T = (i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8); - union B { - data: I8x16T, - vec: i8x16, - } - -- #[cfg_attr(rustfmt, rustfmt_skip)] -+ #[rustfmt::skip] - let x = i8x16::new( - 0, 1, 2, 3, 4, 5, 6, 7, - 8, 9, 10, 11, 12, 13, 14, 15, - ); - let x: I8x16T = unsafe { B { vec: x }.data }; - - assert_eq!(x.0, 0); - assert_eq!(x.1, 1); -@@ -178,37 +188,37 @@ fn endian_tuple_access() { - assert_eq!(x.9, 9); - assert_eq!(x.10, 10); - assert_eq!(x.11, 11); - assert_eq!(x.12, 12); - assert_eq!(x.13, 13); - assert_eq!(x.14, 14); - assert_eq!(x.15, 15); - -- #[cfg_attr(rustfmt, rustfmt_skip)] -+ #[rustfmt::skip] - let y = ( - 15, 14, 13, 12, 11, 10, 9, 8, - 7, 6, 5, 4, 3, 2, 1, 0 - ); - let z: i8x16 = unsafe { B { data: y }.vec }; -- #[cfg_attr(rustfmt, rustfmt_skip)] -+ #[rustfmt::skip] - let e = i8x16::new( - 15, 14, 13, 12, 11, 10, 9, 8, - 7, 6, 5, 4, 3, 2, 1, 0 - ); - assert_eq!(e, z); - -- #[cfg_attr(rustfmt, rustfmt_skip)] -+ #[rustfmt::skip] - type I16x8T = (i16, i16, i16, i16, i16, i16, i16, i16); - union C { - data: I16x8T, - vec: i8x16, - } - -- #[cfg_attr(rustfmt, rustfmt_skip)] -+ #[rustfmt::skip] - let x = i8x16::new( - 0, 1, 2, 3, 4, 5, 6, 7, - 8, 9, 10, 11, 12, 13, 14, 15, - ); - let x: I16x8T = unsafe { C { vec: x }.data }; - - let e: [i16; 8] = if cfg!(target_endian = "little") { - [256, 770, 1284, 1798, 2312, 2826, 3340, 3854] -@@ -219,28 +229,28 @@ fn endian_tuple_access() { - assert_eq!(x.1, e[1]); - assert_eq!(x.2, e[2]); - assert_eq!(x.3, e[3]); - assert_eq!(x.4, e[4]); - assert_eq!(x.5, e[5]); - assert_eq!(x.6, e[6]); - assert_eq!(x.7, e[7]); - -- #[cfg_attr(rustfmt, rustfmt_skip)] -+ #[rustfmt::skip] - #[repr(C)] - #[derive(Copy ,Clone)] - pub struct Tup(pub i8, pub i8, pub i16, pub i8, pub i8, pub i16, - pub i8, pub i8, pub i16, pub i8, pub i8, pub i16); - - union D { - data: Tup, - vec: i8x16, - } - -- #[cfg_attr(rustfmt, rustfmt_skip)] -+ #[rustfmt::skip] - let x = i8x16::new( - 0, 1, 2, 3, 4, 5, 6, 7, - 8, 9, 10, 11, 12, 13, 14, 15, - ); - let x: Tup = unsafe { D { vec: x }.data }; - - let e: [i16; 12] = if cfg!(target_endian = "little") { - [0, 1, 770, 4, 5, 1798, 8, 9, 2826, 12, 13, 3854] - diff --git a/libre/icedove/vendor-prefs.js b/libre/icedove/vendor-prefs.js deleted file mode 100644 index 701c33e..0000000 --- a/libre/icedove/vendor-prefs.js +++ /dev/null @@ -1,32 +0,0 @@ -// Use LANG environment variable to choose locale -pref("intl.locale.requested", ""); - -// Use system-provided dictionaries -pref("spellchecker.dictionary_path", "/usr/share/hunspell"); - -// Disable default mailer checking -pref("mail.shell.checkDefaultMail", false); - -// Don't disable our bundled extensions in the application directory -pref("extensions.autoDisableScopes", 11); -pref("extensions.shownSelectionUI", true); - -// Disable telemetry -pref("datareporting.healthreport.uploadEnabled", false); -pref("datareporting.policy.dataSubmissionEnabled", false); -pref("toolkit.telemetry.archive.enabled", false); - -// Disable Social API for content -pref("social.remote-install.enabled", false); -pref("social.toast-notifications.enabled", false); - -// Make sure that whitelisted and directory installs are empty -pref("social.whitelist", ""); -pref("social.directories", ""); - -// Disable the GeoLocation API for content -pref("geo.enabled", false); - -// TODO: this "whats new" page should be in the branding package or abslibre -// Pointing the "Help -> What's new" menu entry to mozilla.debian.net -//pref("mailnews.start_page.override_url", "http://wiki.debian.org/Icedove/WhatsNew45"); From 5d2e369672f181df3e3c227d42f17fccfc79e265 Mon Sep 17 00:00:00 2001 From: bill-auger Date: Nov 30 2021 16:17:26 +0000 Subject: [PATCH 58/73] [blender]: tweak for 32bit targets --- diff --git a/libre/blender/PKGBUILD b/libre/blender/PKGBUILD index d10280f..01eba1c 100644 --- a/libre/blender/PKGBUILD +++ b/libre/blender/PKGBUILD @@ -33,6 +33,7 @@ depends=('libpng' 'libtiff' 'openexr' 'python' 'desktop-file-utils' 'python-requ 'openimageio' 'libsndfile' 'jack' 'opencolorio' 'openshadinglanguage' 'openimagedenoise' 'jemalloc' 'libspnav' 'ptex' 'opensubdiv' 'openvdb' 'log4cplus' 'sdl2' 'embree' 'libharu') [[ "${CARCH}" != 'x86_64' ]] && depends=( ${depends[*]/openimagedenoise/} ) +[[ "${CARCH}" != 'x86_64' ]] && depends=( ${depends[*]/libharu/} ) [[ "${CARCH}" == 'armv7h' ]] && depends=( ${depends[*]/embree/} ) makedepends=('cmake' 'boost' 'mesa' 'git' 'llvm' 'cuda' 'ninja') makedepends=( ${makedepends[*]/cuda/} ) From 4d699352b10e42f9d60b0442023eb58006d3b49a Mon Sep 17 00:00:00 2001 From: bill-auger Date: Nov 30 2021 16:17:26 +0000 Subject: [PATCH 59/73] housekeeping --- diff --git a/libre/pacman/PKGBUILD b/libre/pacman/PKGBUILD index 649e0b8..510f07f 100644 --- a/libre/pacman/PKGBUILD +++ b/libre/pacman/PKGBUILD @@ -1,10 +1,11 @@ -# Maintainer (Arch): -# Contributor (Hyperbola): André Silva -# Contributor (Hyperbola): Márcio Silva +# Maintainer (arch): +# Contributor: André Silva +# Contributor: Márcio Silva # Maintainer: Luke Shumaker # Contributor: Omar Vega Ramos # Contributor: Nicolás Reynolds # Contributor: Daniel Milewski +# Contributor: bill-auger pkgname=pacman pkgver=6.0.0 From 99aa027df116cd1fe7b6e167141bd1a0025b9b74 Mon Sep 17 00:00:00 2001 From: bill-auger Date: Nov 30 2021 16:17:26 +0000 Subject: [PATCH 60/73] [pacman]: minimize per-arch keyring depends --- diff --git a/libre/pacman/PKGBUILD b/libre/pacman/PKGBUILD index 510f07f..cf8f314 100644 --- a/libre/pacman/PKGBUILD +++ b/libre/pacman/PKGBUILD @@ -19,7 +19,9 @@ license=('GPL') groups=('base-devel') depends=('bash' 'glibc' 'libarchive' 'curl' 'gpgme' 'pacman-mirrorlist' 'archlinux-keyring') -depends+=('parabola-keyring' 'archlinuxarm-keyring' 'archlinux32-keyring') +_upstream_keyring=$(case ${CARCH} in armv7h) echo 'archlinuxarm-keyring' ;; \ + i686 ) echo 'archlinux32-keyring' ;; esac) +depends+=('parabola-keyring' ${_upstream_keyring} ) makedepends=('meson' 'asciidoc' 'doxygen') checkdepends=('python' 'fakechroot') optdepends=('perl-locale-gettext: translation support in makepkg-template') From bfbc4a14e00fd27dd51222f3f9084aa41acee03f Mon Sep 17 00:00:00 2001 From: Parabola automatic package builder Date: Nov 30 2021 17:13:44 +0000 Subject: [PATCH 61/73] Update libre/your-freedom --- diff --git a/libre/your-freedom/PKGBUILD b/libre/your-freedom/PKGBUILD index fb1786c..3edd961 100644 --- a/libre/your-freedom/PKGBUILD +++ b/libre/your-freedom/PKGBUILD @@ -4,8 +4,8 @@ pkgname=your-freedom pkgdesc="This package conflicts with every nonfree package known to date to ensure your system is free." license=('GPL3') url="https://git.parabola.nu/blacklist.git" -pkgver=20211123 -_gitver=cc37fafda2f205815f394f16b251a40a5001fb6a +pkgver=20211130 +_gitver=8a5b9bad756be05b302c5ef9a45a0e6649eedbb2 pkgrel=1 arch=('any') @@ -13,7 +13,7 @@ install=${pkgname}.install makedepends=(librelib) source=(blacklist-${_gitver}.txt::https://git.parabola.nu/blacklist.git/plain/blacklist.txt?id=${_gitver}) -sha512sums=('e7f2cab0c0b2fbf2238acee998303b66ce82fa8e6b6acaf5559513ca0d017c97c52d254d4d6299751d4a0a4cbc7576db1eb31698b49e44dd9f7ff1857c341bad') +sha512sums=('b675a18fa92c908fddbb75eea4ed09e4e4f1f65578e03999e95ca917e45b01f648e0b95d1a3a9cea5ad8e96704f6fac3de11a8fa1e9f535761dd0c5d7d89c09d') package() { From 98fe851657294cde2959867753622cbd7937ac9a Mon Sep 17 00:00:00 2001 From: Parabola automatic package builder Date: Nov 30 2021 17:14:53 +0000 Subject: [PATCH 62/73] Update nonprism/your-privacy --- diff --git a/nonprism/your-privacy/PKGBUILD b/nonprism/your-privacy/PKGBUILD index 71a685a..670b618 100644 --- a/nonprism/your-privacy/PKGBUILD +++ b/nonprism/your-privacy/PKGBUILD @@ -4,8 +4,8 @@ pkgname=your-privacy pkgdesc="This package will remove support for protocols and services known to endanger privacy." license=('GPL3') url="https://git.parabola.nu/blacklist.git" -pkgver=20210928 -_gitver=7d2e711096135e4f5c160fc739e23fd1ec7a3c07 +pkgver=20211130 +_gitver=ab32447a5a47a2a5ec5a3fa6043dc6b9024e3674 pkgrel=1 arch=('any') @@ -13,7 +13,7 @@ install=${pkgname}.install makedepends=(librelib) source=(blacklist-${_gitver}.txt::https://git.parabola.nu/blacklist.git/plain/${pkgname}-blacklist.txt?id=${_gitver}) -sha512sums=('746be9d938a565a99dc3a2a273b580e0c7c2026a14f727bb09a996eacfbb40ce25ca62db58caa462f5546c60dd7be6b5f87cd65e2ab3fd843d4662a77f3ce827') +sha512sums=('9ab837a9ca351bb844ecdfc147d69ec1f0d1971fbe12ceeed3b837fc59c54b10d2476901e60f677b0f53166a805b493b0a8bcd638e9e6638012dd454c7930cf8') package() { cd "$srcdir" From 6ccbb9fada87a5a9cf07c8e8542049f167696239 Mon Sep 17 00:00:00 2001 From: Freemor Date: Dec 02 2021 14:10:21 +0000 Subject: [PATCH 63/73] Update [pcr/12p] to 1.6.1 --- diff --git a/pcr/i2p/PKGBUILD b/pcr/i2p/PKGBUILD index 0362dad..6084bdf 100644 --- a/pcr/i2p/PKGBUILD +++ b/pcr/i2p/PKGBUILD @@ -6,7 +6,7 @@ #export LG2=en pkgname=i2p -pkgver=1.5.0 +pkgver=1.6.1 pkgrel=1 pkgdesc="A distributed anonymous network" url="https://geti2p.net" @@ -24,14 +24,15 @@ options=(!strip) # https://geti2p.net/_static/zzz.key.asc validpgpkeys=('2D3D2D03910C6504C1210C65EE60C0C8EE7256A8') -_url="https://download.i2p2.de/releases/${pkgver}" +_url="https://files.i2p-projekt.de/${pkgver}" +#_url="https://download.i2p2.de/releases/${pkgver}" #_url="https://launchpad.net/i2p/trunk/${pkgver}/+download" source=("${_url}/i2psource_${pkgver}.tar.bz2"{,.sig} 'i2prouter.service' 'i2p.tmpfiles' 'wrapper.config' 'router.config' 'i2prouter.bash' 'i2prouter.sh' ) -sha256sums=('26e5f4d95b1a0766870f97b30e57c9a8e98690279c3bf09198e30effabecc450' +sha256sums=('719606c4cb510de4fe74f24bbfa53911a70531821fc1ee79a29e3d96eaa16733' 'SKIP' '644b771ec7f5db3efab3206bf1f896566cdb00d410a54608fda85bdb4c2ad876' 'fc30dd32f48fe1c93bf36c8297ca48203a1479e4e221ebe62c57cf3c3c0347d3' From 8b2a3caa9e71f31e0e1730625e359b503d893a5a Mon Sep 17 00:00:00 2001 From: bill-auger Date: Dec 02 2021 20:24:03 +0000 Subject: [PATCH 64/73] [claws-mail]: upgrade to v4.0.0 --- diff --git a/nonprism/claws-mail/0001_move_OAuth2_to_last_place_in_auto_auth_selection.diff b/nonprism/claws-mail/0001_move_OAuth2_to_last_place_in_auto_auth_selection.diff new file mode 100644 index 0000000..4725368 --- /dev/null +++ b/nonprism/claws-mail/0001_move_OAuth2_to_last_place_in_auto_auth_selection.diff @@ -0,0 +1,43 @@ +From: paul +Date: Mon, 12 Jul 2021 09:08:33 +0000 (+0100) +Subject: move OAuth2 to last place in auto auth selection +X-Git-Url: http://git.claws-mail.org/?p=claws.git;a=commitdiff_plain;h=9c2585c58b49815a0eab8d683f0a94f75cbbe64e;hp=fae6b35be779b37270e76ef319128e3bb5251e51 + +move OAuth2 to last place in auto auth selection + +IMAP: when using 'automatic' auth type, if the server offers LOGIN, GSSAPI or plaintext in addition to OAUTH2, yet OAUTH2 is unconfigured, authentication will fail. This broke previously working config +--- + +diff --git a/src/imap.c b/src/imap.c +index c486c471a..b72ceea76 100644 +--- a/src/imap.c ++++ b/src/imap.c +@@ -951,14 +951,14 @@ static gint imap_auth(IMAPSession *session, const gchar *user, const gchar *pass + ok = imap_cmd_login(session, user, pass, "SCRAM-SHA-1"); + if (ok == MAILIMAP_ERROR_LOGIN && imap_has_capability(session, "PLAIN")) + ok = imap_cmd_login(session, user, pass, "PLAIN"); +- if (ok == MAILIMAP_ERROR_LOGIN && imap_has_capability(session, "XOAUTH2")) +- ok = imap_cmd_login(session, user, pass, "XOAUTH2"); + if (ok == MAILIMAP_ERROR_LOGIN && imap_has_capability(session, "LOGIN")) + ok = imap_cmd_login(session, user, pass, "LOGIN"); + if (ok == MAILIMAP_ERROR_LOGIN && imap_has_capability(session, "GSSAPI")) + ok = imap_cmd_login(session, user, pass, "GSSAPI"); + if (ok == MAILIMAP_ERROR_LOGIN) /* we always try plaintext login before giving up */ + ok = imap_cmd_login(session, user, pass, "plaintext"); ++ if (ok == MAILIMAP_ERROR_LOGIN && imap_has_capability(session, "XOAUTH2")) ++ ok = imap_cmd_login(session, user, pass, "XOAUTH2"); + } + + if (ok == MAILIMAP_NO_ERROR) +@@ -994,6 +994,11 @@ static gint imap_auth(IMAPSession *session, const gchar *user, const gchar *pass + "LOGIN SASL plugin is installed."); + } + ++ if (type == IMAP_AUTH_OAUTH2) { ++ ext_info = _("\n\nOAuth2 error. Check and correct your OAuth2 " ++ "account preferences."); ++ } ++ + if (time(NULL) - last_login_err > 10) { + if (!prefs_common.no_recv_err_panel) { + alertpanel_error_log(_("Connection to %s failed: " diff --git a/nonprism/claws-mail/0002_Fancy_crashes_when_opening_an_email.diff b/nonprism/claws-mail/0002_Fancy_crashes_when_opening_an_email.diff new file mode 100644 index 0000000..a12c86a --- /dev/null +++ b/nonprism/claws-mail/0002_Fancy_crashes_when_opening_an_email.diff @@ -0,0 +1,23 @@ +From: paul +Date: Mon, 12 Jul 2021 09:20:21 +0000 (+0100) +Subject: fix bug 4496 'Fancy crashes when opening an email' +X-Git-Url: http://git.claws-mail.org/?p=claws.git;a=commitdiff_plain;h=f459d1c27426a10af90f8ef73aef78ec846ebffb;hp=9c2585c58b49815a0eab8d683f0a94f75cbbe64e + +fix bug 4496 'Fancy crashes when opening an email' + +Patch by Jonathan Boeing +--- + +diff --git a/src/plugins/fancy/fancy_viewer.c b/src/plugins/fancy/fancy_viewer.c +index 6ff5f1244..d57d33aa7 100644 +--- a/src/plugins/fancy/fancy_viewer.c ++++ b/src/plugins/fancy/fancy_viewer.c +@@ -96,7 +96,7 @@ static void fancy_apply_prefs(FancyViewer *viewer) + #endif + NULL); + if (fancy_prefs.stylesheet == NULL || strlen(fancy_prefs.stylesheet) == 0) { +- gchar **msg_font_params = g_strsplit(prefs_common.textfont, " ", 0); ++ gchar **msg_font_params = g_strsplit(prefs_common_get_prefs()->textfont, " ", 0); + guint params_len = g_strv_length(msg_font_params); + + if (params_len > 0) { diff --git a/nonprism/claws-mail/PKGBUILD b/nonprism/claws-mail/PKGBUILD index 0a6a3fd..5e237b8 100644 --- a/nonprism/claws-mail/PKGBUILD +++ b/nonprism/claws-mail/PKGBUILD @@ -5,20 +5,21 @@ # parabola changes and rationale: -# - removed libgdata support (--help) +# - removed 'libgdata' support (--help) and optdepends +# - FIXME: added 'webkit2gtk' dep; but the arch PKGBUILD does not require it pkgname=claws-mail -pkgver=3.17.8 -pkgrel=1 -pkgrel+=.nonprism1 -pkgdesc="A GTK+ based e-mail client." -pkgdesc="${pkgdesc//./}, without libgdata support" +pkgver=4.0.0 +pkgrel=3 +pkgrel+=.nonprism2 +pkgdesc="A GTK+ based e-mail client" +pkgdesc+=", without libgdata support" arch=('x86_64') arch+=('armv7h' 'i686') license=('GPL3') url="https://www.claws-mail.org" -depends=('gtk2' 'gnutls' 'startup-notification' 'enchant' 'gpgme' +depends=('gtk3' 'gnutls' 'startup-notification' 'enchant' 'gpgme' 'libetpan' 'compface' 'libsm' 'dbus-glib') makedepends=('spamassassin' 'bogofilter' 'networkmanager' 'valgrind' # dependencies for plugins @@ -27,6 +28,7 @@ makedepends=('spamassassin' 'bogofilter' 'networkmanager' 'valgrind' # deps to build the docs 'docbook-utils' 'texlive-formatsextra') makedepends=(${makedepends[@]/libgdata/}) +makedepends+=('webkit2gtk') # FIXME: optdepends=('python: needed for some tools' 'perl: needed for some tools and perl plugin' 'spamassassin: adds support for spamfiltering' @@ -34,23 +36,37 @@ optdepends=('python: needed for some tools' 'libnotify: for notification plugin' 'libcanberra: for notification plugin' 'dbus: for notification plugin' - 'libxml2: for gtkhtml2_viewer and rssyl plugins' - 'curl: for gtkhtml2_viewer, vcalendar, rssyl and spamreport plugins' + 'libxml2: for rssyl plugins' + 'curl: for vcalendar, rssyl and spamreport plugins' 'libarchive: for archive plugin and various other plugins' 'libytnef: for tnef_parse plugin' 'poppler-glib: for pdf viewer plugin' 'ghostscript: for pdf viewer plugin' 'libical: for vcalendar plugin' - 'dillo: for html viewer plugin' + 'dillo: for dillo html viewer plugin' + 'webkit2gtk: for fancy webkit html viewer plugin' 'gumbo-parser: for litehtml plugin') provides=('claws') +install=$pkgname.install source=(https://www.claws-mail.org/download.php?file=releases/claws-mail-$pkgver.tar.xz{,.asc} + 0001_move_OAuth2_to_last_place_in_auto_auth_selection.diff + 0002_Fancy_crashes_when_opening_an_email.diff bash_completion) -sha256sums=('cdb7b2814995d6f4a9c3b1f0bc1467ed5c3cf2a5e0da1730aaa25a8accafddaf' +sha256sums=('4af2bd26a5d91eacb2a9c09f67a6a46c2222b40817c1f525dc050bdc7b0ee475' 'SKIP' + 'ffd5dfe8929a86667218512095a794263a2ae56fae4add83d3ad987f94e7f786' + 'f56256a9535958063b966ab52abdf787422ff71ed2a5c41b3d9fea8716defe85' '3f6c248b8658cd7a62186bff572cce2525712a498f363cbbda1ed459021c28cb') validpgpkeys=('8B3B297A03468356692F8D592CD716D654D6BBD4') # Paul + +prepare() { + cd "${pkgname}"-${pkgver} + # upstream fixes + patch -Np1 -i ../0001_move_OAuth2_to_last_place_in_auto_auth_selection.diff + patch -Np1 -i ../0002_Fancy_crashes_when_opening_an_email.diff +} + build() { cd "${pkgname}"-${pkgver} ./configure --prefix=/usr --disable-static \ @@ -61,7 +77,9 @@ build() { --disable-gdata-plugin \ --enable-pgpmime-plugin \ --enable-spamassassin-plugin \ - --enable-bogofilter-plugin + --enable-bogofilter-plugin \ + --enable-fancy-plugin \ + --enable-manual sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool make } diff --git a/nonprism/claws-mail/claws-mail.install b/nonprism/claws-mail/claws-mail.install new file mode 100644 index 0000000..ecdcf28 --- /dev/null +++ b/nonprism/claws-mail/claws-mail.install @@ -0,0 +1,10 @@ +post_upgrade() { + if [ "`vercmp $2 4.0.0`" -lt 0 ]; then + +cat << _EOF + >>> If you are upgrading from the GTK+ 2 version to the GTK+ 3 version + >>> of Claws Mail, you will need to reload any plugins that you want to use. +_EOF + + fi +} From dbbc93e96ac69e1cc5c011c3898976619975d715 Mon Sep 17 00:00:00 2001 From: bill-auger Date: Dec 02 2021 20:25:10 +0000 Subject: [PATCH 65/73] [gmnisrv]: add pkg for review and testing (not yet accepted) --- diff --git a/pcr-testing/gmnisrv/PKGBUILD b/pcr-testing/gmnisrv/PKGBUILD new file mode 100644 index 0000000..e43ebd5 --- /dev/null +++ b/pcr-testing/gmnisrv/PKGBUILD @@ -0,0 +1,41 @@ +# Maintainer (aur): Lex Black + +pkgname=gmnisrv +pkgver=1.0 +pkgrel=1 +pkgdesc="simple Gemini protocol server" +url="https://git.sr.ht/~sircmpwn/gmnisrv" +arch=(x86_64) +arch+=(armv7h i686) +license=("GPL3") +depends=("openssl" "mailcap") +makedepends=("scdoc") +source=(${pkgname}-${pkgver}.tar.gz::https://git.sr.ht/~sircmpwn/${pkgname}/archive/${pkgver}.tar.gz + ${pkgname}.service) +b2sums=('977e93d8826f5aab5fe00f1fa6fb39ca317caf8439116b5dd8f2ab7b811d6a4f650e94e25d7b24a7f22c33956effbe904fcb5bd3bdcd59ddec6caaff60ac6cd4' + '7a33cf875f7012d8dedd3f9fc41ef9bc5022c85cfc7dd79b254f8fc25eef164335802d67acc426124ab61922de8882945941951dae4eb7be4a57fe4efb08f3dd') + + +build() { + cd "${pkgname}-${pkgver}" + + mkdir build + cd build + ../configure --prefix=/usr + make PREFIX="/usr" +} + +package() { + cd "${pkgname}-${pkgver}/build" + + make PREFIX="/usr" DESTDIR="$pkgdir" install + + # Move conf file into etc + mkdir "${pkgdir}/etc" + mv "${pkgdir}/usr/share/gmnisrv/gmnisrv.ini" "${pkgdir}/etc" + rmdir "${pkgdir}/usr/share/gmnisrv" + + # Copy systemd service + mkdir -p "${pkgdir}/usr/lib/systemd/system" + cp "${srcdir}/gmnisrv.service" "${pkgdir}/usr/lib/systemd/system" +} diff --git a/pcr-testing/gmnisrv/gmnisrv.service b/pcr-testing/gmnisrv/gmnisrv.service new file mode 100644 index 0000000..b4c24bc --- /dev/null +++ b/pcr-testing/gmnisrv/gmnisrv.service @@ -0,0 +1,10 @@ +[Unit] +Description=Gemini Server +After=network.target + +[Service] +Type=simple +ExecStart=/usr/bin/gmnisrv + +[Install] +WantedBy=multi-user.target From 88a49474ef6aa7cbb8b453ef75572898ccdf13e4 Mon Sep 17 00:00:00 2001 From: bill-auger Date: Dec 05 2021 12:16:05 +0000 Subject: [PATCH 66/73] [quassel]: pin to current 'icu' sodeps --- diff --git a/libre/quassel/PKGBUILD b/libre/quassel/PKGBUILD index 3cccb2e..013ca72 100644 --- a/libre/quassel/PKGBUILD +++ b/libre/quassel/PKGBUILD @@ -2,10 +2,12 @@ # Contributor: Vesa Kaihlavirta # Maintainer: bill-auger + # parabola changes and rationale: # - repalce qt5-webengine with qt5-webkit (for URL previews) # - set duckduckgo as default search engine + pkgbase=quassel pkgname=('quassel-core' 'quassel-client' @@ -117,6 +119,7 @@ build() { package_quassel-core() { pkgdesc="Next-generation distributed IRC client - core only" depends=('icu' 'qca' 'qt5-script' 'libldap') +depends+=(libicuuc.so libicudata.so) # via 'qt5-base' -> libQt5Core.so.N -> libicuuc.so.M -> libicudata.so.M optdepends=('postgresql: PostgreSQL database support') backup=(etc/conf.d/quassel) From 77324f61093de92efba9ca35499c3516fe2c9ac2 Mon Sep 17 00:00:00 2001 From: bill-auger Date: Dec 05 2021 12:16:28 +0000 Subject: [PATCH 67/73] [qtcreator]: upgrade to v5.0.3 --- diff --git a/libre/qtcreator/PKGBUILD b/libre/qtcreator/PKGBUILD index 265c660..9b86bd0 100644 --- a/libre/qtcreator/PKGBUILD +++ b/libre/qtcreator/PKGBUILD @@ -1,33 +1,38 @@ -# Maintainer (Arch): Antonio Rojas -# Contributor (Arch): Sven-Hendrik Haase # Contributor (Arch): Imanol Celaya -# Contributor (Arch): Lukas Jirkovsky -# Contributor (Arch): Dan Vratil -# Contributor (Arch): thotypous -# Contributor (Arch): delor +# Maintainer (arch): Antonio Rojas +# Contributor: Sven-Hendrik Haase +# Contributor: Imanol Celaya +# Contributor: Lukas Jirkovsky +# Contributor: Dan Vratil +# Contributor: thotypous +# Contributor: delor # Maintainer: bill-auger # Contributor: André Silva # Contributor: Theo von Arx # parabola changes and rationale: -# - removed support for qt5-webengine +# - removed support for qt5-webengine (help GUI is unavailable) pkgname=qtcreator -pkgver=4.14.0 -_clangver=11.0.1 -pkgrel=4 +pkgver=5.0.3 +_clangver=13.0.0 +[[ "${CARCH}" == 'i686' ]] && _clangver=12.0.1 +pkgrel=2 pkgrel+=.parabola1 pkgdesc='Lightweight, cross-platform integrated development environment' -pkgdesc+=', without nonfree qt5-webengine help viewer' +pkgdesc+=', without non-free qt5-webengine help viewer' arch=(x86_64) -arch+=(i686 armv7h) +arch+=(armv7h i686) url='https://www.qt.io' -license=(LGPL) -depends=(qt5-tools qt5-quickcontrols qt5-quickcontrols2 qt5-webengine qt5-svg qt5-quick3d qt5-serialport - clang=$_clangver clazy syntax-highlighting yaml-cpp) +license=(GPL3) +# Note: built against Qt5 because of https://bugreports.qt.io/browse/QTCREATORBUG-26134 +depends=(qt5-tools qt5-quickcontrols2 qt5-svg qt5-quick3d qt5-webengine qt5-serialport syntax-highlighting # qt6-shadertools qt6-5compat + clang=$_clangver clazy yaml-cpp) depends=( $( sed -E 's/(qt5-webengine|yaml-cpp)//g' <<<${depends[@]} ) ) makedepends=(cmake llvm python) +makedepends_i686=(icu-compat) +# makedepends_i686=(icu69) options=(docs) optdepends=('qt5-doc: integrated Qt documentation' 'qt5-examples: welcome page examples' @@ -40,34 +45,28 @@ optdepends=('qt5-doc: integrated Qt documentation' 'mercurial: mercurial support' 'bzr: bazaar support' 'valgrind: analyze support' - 'perf: performer analyzer') -source=("https://download.qt.io/official_releases/qtcreator/${pkgver%.*}/$pkgver/qt-creator-opensource-src-$pkgver.tar.xz" - qtcreator-fix-clang-paths.patch) -sha256sums=('d240109351e96446ff149cbd56341ec02ba37bfa50462a85e4d02dfe6b21201e' - 'eaaa001d3b2705ca2bdfafca5ffce7919baed8726c50113ae03e1d97da5b8c8d') - -prepare() { - cd qt-creator-opensource-src-$pkgver - -# use system qbs - rm -r src/shared/qbs -# Fix linking to clang - sed -e 's|clangFormat|clang-cpp|' -i src/plugins/clangformat/CMakeLists.txt -# Fix libexec path - sed -e 's|libexec/qtcreator|lib/qtcreator|' -i cmake/QtCreatorAPIInternal.cmake -# Fix clang include path - patch -p1 -i ../qtcreator-fix-clang-paths.patch -} + 'perf: performer analyzer' + 'mlocate: locator filter') +source=(https://download.qt.io/official_releases/qtcreator/${pkgver%.*}/$pkgver/qt-creator-opensource-src-$pkgver.tar.xz) +sha256sums=('7fd3b14310bcecee6b134f8cb7f4c0ed2385d7f4cecd48d756c5c1fd650ce2eb') build() { cmake -B build -S qt-creator-opensource-src-$pkgver \ -DCMAKE_INSTALL_PREFIX=/usr \ - -DWITH_DOCS=ON + -DCMAKE_INSTALL_LIBEXECDIR=lib \ + -DWITH_DOCS=ON \ + -DBUILD_DEVELOPER_DOCS=ON \ + -DBUILD_QBS=OFF \ + -DQTC_CLANG_BUILDMODE_MATCH=ON \ + -DBUILD_HELVIEWERBACKEND_QTWEBENGINE=ON cmake --build build + cmake --build build --target docs } package() { DESTDIR="$pkgdir" cmake --install build +# Install docs + cp -r build/share/doc "$pkgdir"/usr/share install -Dm644 qt-creator-opensource-src-$pkgver/LICENSE.GPL3-EXCEPT "$pkgdir"/usr/share/licenses/qtcreator/LICENSE.GPL3-EXCEPT } diff --git a/libre/qtcreator/qtcreator-fix-clang-paths.patch b/libre/qtcreator/qtcreator-fix-clang-paths.patch deleted file mode 100644 index 84a0a43..0000000 --- a/libre/qtcreator/qtcreator-fix-clang-paths.patch +++ /dev/null @@ -1,15 +0,0 @@ -diff --git a/src/libs/clangsupport/CMakeLists.txt b/src/libs/clangsupport/CMakeLists.txt -index dcaa464710..01cf7580b7 100644 ---- a/src/libs/clangsupport/CMakeLists.txt -+++ b/src/libs/clangsupport/CMakeLists.txt -@@ -5,8 +5,8 @@ add_qtc_library(ClangSupport - PUBLIC_DEPENDS Utils Sqlite Qt5::Core Qt5::Network - PUBLIC_DEFINES - CLANG_VERSION="${CLANG_VERSION}" -- CLANG_INCLUDE_DIR="${IDE_LIBEXEC_PATH}/clang/lib/clang/${CLANG_VERSION}/include" -- CLANG_BINDIR="${IDE_LIBEXEC_PATH}/clang/bin" -+ CLANG_INCLUDE_DIR="/usr/lib/clang/${CLANG_VERSION}/include" -+ CLANG_BINDIR="/usr/bin" - DEFINES CLANGSUPPORT_BUILD_LIB - PUBLIC_INCLUDES - "${CMAKE_CURRENT_LIST_DIR}" From 01c50ca0349c3a48da9ff931360a793af6af178c Mon Sep 17 00:00:00 2001 From: bill-auger Date: Dec 05 2021 12:16:31 +0000 Subject: [PATCH 68/73] [qtcreator]: upgrade to v6.0.0 --- diff --git a/libre/qtcreator/PKGBUILD b/libre/qtcreator/PKGBUILD index 9b86bd0..4e1520a 100644 --- a/libre/qtcreator/PKGBUILD +++ b/libre/qtcreator/PKGBUILD @@ -11,14 +11,15 @@ # parabola changes and rationale: -# - removed support for qt5-webengine (help GUI is unavailable) +# - removed support for qt5-webengine (help GUI is unavailable) +# - disable 'googletest' tests - requires internet access - libretools does not allow that pkgname=qtcreator -pkgver=5.0.3 +pkgver=6.0.0 _clangver=13.0.0 [[ "${CARCH}" == 'i686' ]] && _clangver=12.0.1 -pkgrel=2 +pkgrel=1 pkgrel+=.parabola1 pkgdesc='Lightweight, cross-platform integrated development environment' pkgdesc+=', without non-free qt5-webengine help viewer' @@ -26,20 +27,18 @@ arch=(x86_64) arch+=(armv7h i686) url='https://www.qt.io' license=(GPL3) -# Note: built against Qt5 because of https://bugreports.qt.io/browse/QTCREATORBUG-26134 -depends=(qt5-tools qt5-quickcontrols2 qt5-svg qt5-quick3d qt5-webengine qt5-serialport syntax-highlighting # qt6-shadertools qt6-5compat - clang=$_clangver clazy yaml-cpp) +depends=(qt6-tools qt6-svg qt6-quick3d qt6-webengine qt6-serialport qt6-shadertools qt6-5compat + clang=$_clangver clazy yaml-cpp) # syntax-highlighting depends=( $( sed -E 's/(qt5-webengine|yaml-cpp)//g' <<<${depends[@]} ) ) makedepends=(cmake llvm python) makedepends_i686=(icu-compat) # makedepends_i686=(icu69) options=(docs) -optdepends=('qt5-doc: integrated Qt documentation' - 'qt5-examples: welcome page examples' - 'qt5-translations: for other languages' +optdepends=('qt6-doc: integrated Qt documentation' + 'qt6-examples: welcome page examples' + 'qt6-translations: for other languages' 'gdb: debugger' 'cmake: cmake project support' - 'qbs: QBS project support' 'x11-ssh-askpass: ssh support' 'git: git support' 'mercurial: mercurial support' @@ -48,7 +47,10 @@ optdepends=('qt5-doc: integrated Qt documentation' 'perf: performer analyzer' 'mlocate: locator filter') source=(https://download.qt.io/official_releases/qtcreator/${pkgver%.*}/$pkgver/qt-creator-opensource-src-$pkgver.tar.xz) -sha256sums=('7fd3b14310bcecee6b134f8cb7f4c0ed2385d7f4cecd48d756c5c1fd650ce2eb') +sha256sums=('6beb7802f6ab339f0ea947530e6902245057ec161b2b6d2ed9053e1bee1be0bf') + +_enable_tests=OFF # 'OFF' or 'ON' - 'ON' requires internet access + build() { cmake -B build -S qt-creator-opensource-src-$pkgver \ @@ -57,15 +59,19 @@ build() { -DWITH_DOCS=ON \ -DBUILD_DEVELOPER_DOCS=ON \ -DBUILD_QBS=OFF \ - -DQTC_CLANG_BUILDMODE_MATCH=ON \ - -DBUILD_HELVIEWERBACKEND_QTWEBENGINE=ON + -DBUILD_TESTING=$_enable_tests \ + -DBUILD_HELPVIEWERBACKEND_QTWEBENGINE=OFF \ + -Wno-dev \ + -DQTC_CLANG_BUILDMODE_MATCH=ON + cmake --build build cmake --build build --target docs } package() { DESTDIR="$pkgdir" cmake --install build -# Install docs + + # Install docs cp -r build/share/doc "$pkgdir"/usr/share install -Dm644 qt-creator-opensource-src-$pkgver/LICENSE.GPL3-EXCEPT "$pkgdir"/usr/share/licenses/qtcreator/LICENSE.GPL3-EXCEPT From 5f0866b9ddd2481abab4db78ba2a7868ded43843 Mon Sep 17 00:00:00 2001 From: bill-auger Date: Dec 05 2021 19:51:38 +0000 Subject: [PATCH 69/73] [qtcreator]: tweak for i686 --- diff --git a/libre/qtcreator/PKGBUILD b/libre/qtcreator/PKGBUILD index 4e1520a..eff9c48 100644 --- a/libre/qtcreator/PKGBUILD +++ b/libre/qtcreator/PKGBUILD @@ -30,9 +30,8 @@ license=(GPL3) depends=(qt6-tools qt6-svg qt6-quick3d qt6-webengine qt6-serialport qt6-shadertools qt6-5compat clang=$_clangver clazy yaml-cpp) # syntax-highlighting depends=( $( sed -E 's/(qt5-webengine|yaml-cpp)//g' <<<${depends[@]} ) ) +depends_i686=(icu-compat) # this build requires v69 on i686 makedepends=(cmake llvm python) -makedepends_i686=(icu-compat) -# makedepends_i686=(icu69) options=(docs) optdepends=('qt6-doc: integrated Qt documentation' 'qt6-examples: welcome page examples' @@ -61,7 +60,6 @@ build() { -DBUILD_QBS=OFF \ -DBUILD_TESTING=$_enable_tests \ -DBUILD_HELPVIEWERBACKEND_QTWEBENGINE=OFF \ - -Wno-dev \ -DQTC_CLANG_BUILDMODE_MATCH=ON cmake --build build From bd02a906d7bad33c9acf82bf8b64041d2fc03fff Mon Sep 17 00:00:00 2001 From: Parabola automatic package builder Date: Dec 08 2021 00:08:34 +0000 Subject: [PATCH 70/73] Update libre/your-freedom --- diff --git a/libre/your-freedom/PKGBUILD b/libre/your-freedom/PKGBUILD index 3edd961..b444651 100644 --- a/libre/your-freedom/PKGBUILD +++ b/libre/your-freedom/PKGBUILD @@ -4,8 +4,8 @@ pkgname=your-freedom pkgdesc="This package conflicts with every nonfree package known to date to ensure your system is free." license=('GPL3') url="https://git.parabola.nu/blacklist.git" -pkgver=20211130 -_gitver=8a5b9bad756be05b302c5ef9a45a0e6649eedbb2 +pkgver=20211208 +_gitver=bc1db1e804e0301c18b6cb465a50b320c8947cb6 pkgrel=1 arch=('any') @@ -13,7 +13,7 @@ install=${pkgname}.install makedepends=(librelib) source=(blacklist-${_gitver}.txt::https://git.parabola.nu/blacklist.git/plain/blacklist.txt?id=${_gitver}) -sha512sums=('b675a18fa92c908fddbb75eea4ed09e4e4f1f65578e03999e95ca917e45b01f648e0b95d1a3a9cea5ad8e96704f6fac3de11a8fa1e9f535761dd0c5d7d89c09d') +sha512sums=('a890981f05db24426be853e185d453a8ad629a5aa68c656e6dc48439bb514eda0c311691164769bd789b11cb020712cd63acef743fdf6fc0587892b76a50d382') package() { From 91e70f64c770f3a1a0d988ddee693303fec80d8b Mon Sep 17 00:00:00 2001 From: bill-auger Date: Dec 08 2021 00:15:34 +0000 Subject: [PATCH 71/73] [rz-cutter]: add pkg --- diff --git a/libre/rz-cutter/PKGBUILD b/libre/rz-cutter/PKGBUILD new file mode 100644 index 0000000..a15377d --- /dev/null +++ b/libre/rz-cutter/PKGBUILD @@ -0,0 +1,60 @@ +# Maintainer (arch): Levente Polyak +# Maintainer (arch): Santiago Torres-Arias +# Contributor: Aaron McDaniel (mcd1992) <'aur' at the domain 'fgthou.se'> +# Maintainer: bill-auger + +pkgname=rz-cutter +_gitcommit=6dab092b515024ba769e81554c91c0d8b9883264 +pkgver=2.0.3 +pkgrel=2 +pkgrel+=.parabola1 +pkgdesc='Qt and C++ GUI for rizin reverse engineering framework' +url='https://github.com/rizinorg/cutter' +arch=('x86_64') +arch+=('armv7h' 'i686') +license=('GPL3') +depends=('rizin' 'capstone' 'qt5-base' 'qt5-svg' 'qt5-webengine' 'icu' 'python' 'jupyter' + 'pyside2' 'python-shiboken2' 'graphviz' 'gcc-libs' 'syntax-highlighting') +depends=( ${depends[@]/qt5-webengine/} ) +makedepends=('git' 'cmake' 'ninja' 'shiboken2' 'qt5-tools') +optdepends=('rz-ghidra: ghidra decompiler plugin') +source=("git+https://github.com/rizinorg/cutter#commit=${_gitcommit}" + "git+https://github.com/rizinorg/cutter-translations") +sha512sums=('SKIP' + 'SKIP') +b2sums=('SKIP' + 'SKIP') + +pkgver() { + cd cutter + git describe --tags --match 'v*' | sed 's/^v//;s/\([^-]*-g\)/r\1/;s/-/./g' +} + +prepare() { + cd cutter + git config 'submodule.src/translations.url' "${srcdir}/cutter-translations" + git submodule update --init src/translations +} + +build() { + cd cutter + cmake -B build \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_BUILD_TYPE=None \ + -DCUTTER_ENABLE_PYTHON=ON \ + -DCUTTER_ENABLE_PYTHON_BINDINGS=ON \ + -DCUTTER_USE_BUNDLED_RIZIN=OFF \ + -DCUTTER_USE_ADDITIONAL_RIZIN_PATHS=OFF \ + -DCUTTER_ENABLE_CRASH_REPORTS=OFF \ + -DCUTTER_ENABLE_GRAPHVIZ=ON \ + -Wno-dev \ + -G Ninja + ninja -C build +} + +package() { + cd cutter + DESTDIR="${pkgdir}" ninja -C build install + install -d "${pkgdir}/usr/share/doc/${pkgname}" + cp -a docs/* "${pkgdir}/usr/share/doc/${pkgname}" +} From 1b897a52de8288f129a9cfe9e571b999a3fe1d5c Mon Sep 17 00:00:00 2001 From: grizzlyuser Date: Dec 08 2021 00:47:57 +0000 Subject: [PATCH 72/73] libre/iceweasel: update to 94.0 from upstreams --- diff --git a/libre/iceweasel/0001-Use-remoting-name-for-GDK-application-names.patch b/libre/iceweasel/0001-Use-remoting-name-for-GDK-application-names.patch index c1feb3f..86dddab 100644 --- a/libre/iceweasel/0001-Use-remoting-name-for-GDK-application-names.patch +++ b/libre/iceweasel/0001-Use-remoting-name-for-GDK-application-names.patch @@ -9,10 +9,10 @@ Subject: [PATCH] Use remoting name for GDK application names 2 files changed, 6 insertions(+), 12 deletions(-) diff --git a/toolkit/xre/nsAppRunner.cpp b/toolkit/xre/nsAppRunner.cpp -index bb14d84338334..f5c0222987fb0 100644 +index 332f340179d3..840ad794f606 100644 --- a/toolkit/xre/nsAppRunner.cpp +++ b/toolkit/xre/nsAppRunner.cpp -@@ -4299,11 +4299,7 @@ int XREMain::XRE_mainStartup(bool* aExitFlag) { +@@ -4285,11 +4285,7 @@ int XREMain::XRE_mainStartup(bool* aExitFlag) { // consistently. // Set program name to the one defined in application.ini. @@ -26,7 +26,7 @@ index bb14d84338334..f5c0222987fb0 100644 // Initialize GTK here for splash. diff --git a/widget/gtk/nsAppShell.cpp b/widget/gtk/nsAppShell.cpp -index 60de473de07ab..004c066575c17 100644 +index 60de473de07a..004c066575c1 100644 --- a/widget/gtk/nsAppShell.cpp +++ b/widget/gtk/nsAppShell.cpp @@ -24,6 +24,8 @@ diff --git a/libre/iceweasel/9001-FSDG-always-sync-remote-settings-with-local-dump.patch b/libre/iceweasel/9001-FSDG-always-sync-remote-settings-with-local-dump.patch index 9fcaef7..d4e4ef5 100644 --- a/libre/iceweasel/9001-FSDG-always-sync-remote-settings-with-local-dump.patch +++ b/libre/iceweasel/9001-FSDG-always-sync-remote-settings-with-local-dump.patch @@ -370,9 +370,9 @@ index 3cc9436f61..3742da5667 100644 "blocklists", "main", + "monitor", - "pinning", "security-state", ] + -- 2.31.1 @@ -538,7 +538,7 @@ index 80dd563e11..1025ab33a2 100644 - signature: { x5u, signature }, + json_dump_metadata: { hash, size }, } = metadata; -- const certChain = await (await fetch(x5u)).text(); +- const certChain = await (await Utils.fetch(x5u)).text(); // Merge remote records with local ones and serialize as canonical JSON. const serialized = await RemoteSettingsWorker.canonicalStringify( records, @@ -639,7 +639,7 @@ index 1025ab33a2..1cebf2bc29 100644 IDBHelpers: "resource://services-settings/IDBHelpers.jsm", KintoHttpClient: "resource://services-common/kinto-http-client.js", @@ -30,6 +31,7 @@ XPCOMUtils.defineLazyModuleGetters(this, { - XPCOMUtils.defineLazyGlobalGetters(this, ["fetch"]); + }); const TELEMETRY_COMPONENT = "remotesettings"; +const DEFERRED_SYNC_DELAY_MILLISECONDS = 1000; diff --git a/libre/iceweasel/PKGBUILD b/libre/iceweasel/PKGBUILD index 96b248a..9b612fe 100644 --- a/libre/iceweasel/PKGBUILD +++ b/libre/iceweasel/PKGBUILD @@ -47,7 +47,7 @@ pkgname=iceweasel epoch=1 -pkgver=93.0 +pkgver=94.0 pkgrel=1 pkgrel+=.parabola1 _brandingver=93.0-1 @@ -82,13 +82,13 @@ source+=(https://repo.parabola.nu/other/iceweasel/${pkgname}_${_brandingver}.bra source_armv7h=(build-arm-libopus.patch) source_i686=('avoid-libxul-OOM-python-check.patch' 'rust-static-disable-network-test-on-static-libraries.patch') -sha256sums=('a78f080f5849bc284b84299f3540934a12e961a7ea368b592ae6576ea1f97102' +sha256sums=('b7bb8c5fcc74a74e9d2b55d1e9415b891305fe86520fb854cec25024d7e5de67' 'SKIP' - 'bb9769a8fe720abea2bba5b895c70c4fba0d44bb553399d83350268edf85cdeb' + '51cca2cab0fa9798f96b81ed24c238b2a7c98524f589ec500224bac9797b66fb' '9cdc2602661717712092d28bb494e5b48e518cb930898aca85eaf21f91f7ef58') sha256sums+=('2b2dcb5f15dba7f4ce8bc19de260dbc75219a93b107931bb0f6aff705c579fe5' 'SKIP' - '362d38ac2d99da2eec85bb5723239e7044e302503956488d0df31132409b993d' + 'a4e3c3869085cb282cb5a0fcb64e816c0415f25d4792a62c4f1d599d3111b23c' 'afeaeb6e9a6af901b57e25d85014e5c792efe4ff9dabb58663377f487b9d2887' '39e3a5e1ad137e21f842a44d7e3bd24050292d2b41fe59b4e7c7dfed52a195dd' '9386f1c50506cd20ab6d212335d5e4417faeb2aea371dd46f2d107d171e80b83' @@ -201,7 +201,7 @@ ac_add_options --disable-elf-hack # https://bugzilla.redhat.com/show_bug.cgi?id=1641623 ac_add_options --disable-av1 ac_add_options --enable-optimize="-g0 -O2" -mk_add_options MOZ_MAKE_FLAGS='-j2' +mk_add_options MOZ_MAKE_FLAGS='-j1' END # mozbuild.configure.options.InvalidOptionError: --disable-eme is not available in this configuration From 26ded74fe18f9b3ffd5d30c06e0b3eca06cbce41 Mon Sep 17 00:00:00 2001 From: grizzlyuser Date: Dec 08 2021 21:33:19 +0000 Subject: [PATCH 73/73] libre/iceweasel: Bump to 95.0 with upstream changes --- diff --git a/libre/iceweasel/0001-Use-remoting-name-for-GDK-application-names.patch b/libre/iceweasel/0001-Use-remoting-name-for-GDK-application-names.patch index 86dddab..206ec0a 100644 --- a/libre/iceweasel/0001-Use-remoting-name-for-GDK-application-names.patch +++ b/libre/iceweasel/0001-Use-remoting-name-for-GDK-application-names.patch @@ -9,10 +9,10 @@ Subject: [PATCH] Use remoting name for GDK application names 2 files changed, 6 insertions(+), 12 deletions(-) diff --git a/toolkit/xre/nsAppRunner.cpp b/toolkit/xre/nsAppRunner.cpp -index 332f340179d3..840ad794f606 100644 +index 60ea6966cccf..ae862aba01b3 100644 --- a/toolkit/xre/nsAppRunner.cpp +++ b/toolkit/xre/nsAppRunner.cpp -@@ -4285,11 +4285,7 @@ int XREMain::XRE_mainStartup(bool* aExitFlag) { +@@ -4299,11 +4299,7 @@ int XREMain::XRE_mainStartup(bool* aExitFlag) { // consistently. // Set program name to the one defined in application.ini. @@ -26,11 +26,11 @@ index 332f340179d3..840ad794f606 100644 // Initialize GTK here for splash. diff --git a/widget/gtk/nsAppShell.cpp b/widget/gtk/nsAppShell.cpp -index 60de473de07a..004c066575c1 100644 +index 7090bd2ef350..76bda087be72 100644 --- a/widget/gtk/nsAppShell.cpp +++ b/widget/gtk/nsAppShell.cpp -@@ -24,6 +24,8 @@ - # include "WakeLockListener.h" +@@ -27,6 +27,8 @@ + # include "nsIObserverService.h" #endif #include "gfxPlatform.h" +#include "nsAppRunner.h" @@ -38,7 +38,7 @@ index 60de473de07a..004c066575c1 100644 #include "ScreenHelperGTK.h" #include "HeadlessScreenHelper.h" #include "mozilla/widget/ScreenManager.h" -@@ -152,13 +154,9 @@ nsresult nsAppShell::Init() { +@@ -256,13 +258,9 @@ nsresult nsAppShell::Init() { // See https://bugzilla.gnome.org/show_bug.cgi?id=747634 // // Only bother doing this for the parent process, since it's the one diff --git a/libre/iceweasel/PKGBUILD b/libre/iceweasel/PKGBUILD index 9b612fe..dc7c480 100644 --- a/libre/iceweasel/PKGBUILD +++ b/libre/iceweasel/PKGBUILD @@ -47,10 +47,10 @@ pkgname=iceweasel epoch=1 -pkgver=94.0 +pkgver=95.0 pkgrel=1 pkgrel+=.parabola1 -_brandingver=93.0-1 +_brandingver=95.0-1 pkgdesc="Standalone web browser derived from Mozilla Firefox" arch=(x86_64) arch+=(i686 armv7h) @@ -61,7 +61,8 @@ makedepends=(unzip zip diffutils yasm mesa imake inetutils xorg-server-xvfb autoconf2.13 rust clang llvm jack nodejs cbindgen nasm python-setuptools python-psutil python-zstandard lld dump_syms) makedepends+=(quilt libxslt imagemagick git jq python-jsonschema) -makedepends_i686=(gcc10) +makedepends_x86_64=(wasi-compiler-rt wasi-libc wasi-libc++ wasi-libc++abi) +makedepends_i686=(wasi-compiler-rt wasi-libc wasi-libc++ wasi-libc++abi gcc10) optdepends=('networkmanager: Location detection via available WiFi networks' 'libnotify: Notification integration' 'pulseaudio: Audio support' @@ -82,9 +83,9 @@ source+=(https://repo.parabola.nu/other/iceweasel/${pkgname}_${_brandingver}.bra source_armv7h=(build-arm-libopus.patch) source_i686=('avoid-libxul-OOM-python-check.patch' 'rust-static-disable-network-test-on-static-libraries.patch') -sha256sums=('b7bb8c5fcc74a74e9d2b55d1e9415b891305fe86520fb854cec25024d7e5de67' +sha256sums=('7fa3e43f6ec710b2ebba0e99db713a56d13d85f1f23c4a1399bb594fd74864de' 'SKIP' - '51cca2cab0fa9798f96b81ed24c238b2a7c98524f589ec500224bac9797b66fb' + 'a7a5ea4680c0a4c6eb5a5f99970008f5ad3e2f29f0d6d050aa651bce8c713718' '9cdc2602661717712092d28bb494e5b48e518cb930898aca85eaf21f91f7ef58') sha256sums+=('2b2dcb5f15dba7f4ce8bc19de260dbc75219a93b107931bb0f6aff705c579fe5' 'SKIP' @@ -156,6 +157,7 @@ ac_add_options --enable-rust-simd ac_add_options --enable-linker=lld ac_add_options --disable-elf-hack ac_add_options --disable-bootstrap +ac_add_options --with-wasi-sysroot=/usr/share/wasi-sysroot # Branding ac_add_options --disable-official-branding @@ -191,6 +193,7 @@ END /--enable-hardening/d /--enable-optimize/d /--enable-rust-simd/d + s|--with-wasi-sysroot=/usr/share/wasi-sysroot|--without-wasm-sandboxed-libraries| ' ../mozconfig cat >>../mozconfig <