[packages/firefox] up to 112.0

atler atler at pld-linux.org
Tue Apr 11 16:57:14 CEST 2023


commit 67998646b0945a077b22f220e89a5ff1706dba7d
Author: Jan Palus <atler at pld-linux.org>
Date:   Tue Apr 11 16:48:34 2023 +0200

    up to 112.0

 firefox.spec | 204 ++++++++--------
 xsimd.patch  | 758 -----------------------------------------------------------
 2 files changed, 101 insertions(+), 861 deletions(-)
---
diff --git a/firefox.spec b/firefox.spec
index a805d62..bb552b5 100644
--- a/firefox.spec
+++ b/firefox.spec
@@ -44,219 +44,218 @@ curl -s $U | sed -ne 's,.*href="\([^"]\+\)/".*,'"$U"'xpi/\1.xpi,p'
 %endif
 
 %define		nspr_ver	4.32
-%define		nss_ver		3.88
+%define		nss_ver		3.89
 
 Summary:	Firefox web browser
 Summary(hu.UTF-8):	Firefox web böngésző
 Summary(pl.UTF-8):	Firefox - przeglądarka WWW
 Name:		firefox
-Version:	111.0.1
+Version:	112.0
 Release:	1
 License:	MPL v2.0
 Group:		X11/Applications/Networking
 Source0:	https://releases.mozilla.org/pub/firefox/releases/%{version}/source/firefox-%{version}.source.tar.xz
-# Source0-md5:	4c259560dfb941e087c1184af4612331
+# Source0-md5:	b9ee4f7f5fbac81a5373a0c8b626879e
 Source3:	%{name}.desktop
 Source4:	%{name}.sh
 Source5:	vendor.js
 Source6:	vendor-ac.js
 Source100:	https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/ach.xpi
-# Source100-md5:	2dd8d06418afcca121fb2e00677044c6
+# Source100-md5:	e11acec459dcb0394d4c65e644d1f2d1
 Source101:	https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/af.xpi
-# Source101-md5:	b16f4fed3bd0d030252d85c77e84a125
+# Source101-md5:	1655ba7a292191d7ca3677fc6e398878
 Source102:	https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/an.xpi
-# Source102-md5:	001ec8775e2dd6980e9976086d47a496
+# Source102-md5:	ceae5d967e2ccba668d4566c27d05ade
 Source103:	https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/ar.xpi
-# Source103-md5:	a93f5a37112b111e642279f6bb3e7a48
+# Source103-md5:	fe82e8de0ea83ffa20bb74ab1cc8eb34
 Source104:	https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/ast.xpi
-# Source104-md5:	7b57129c8511ab6a212e7cc576571586
+# Source104-md5:	cda16f0560aef07990c3a5d556e64eb3
 Source105:	https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/az.xpi
-# Source105-md5:	106b9d95b88dddbd976882f3f1b4fab3
+# Source105-md5:	f5b665b600367cc070da4fc3c82df49e
 Source106:	https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/be.xpi
-# Source106-md5:	ab01d42e9cfdff1e35cbcfe609facd81
+# Source106-md5:	0000de7983c262de8ec0d86be3a46861
 Source107:	https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/bg.xpi
-# Source107-md5:	48b13688ea02deb0cc96cd2715f7968e
+# Source107-md5:	ce8090f8b1a66c517e01f41e2e5c0ea6
 Source108:	https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/bn.xpi
-# Source108-md5:	565aca53b4e451c6aca4e3e2aafaae4d
+# Source108-md5:	40667123adb6e4da56f66d4d51b85b4e
 Source109:	https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/br.xpi
-# Source109-md5:	b8616a751115abff9e2955da618506c1
+# Source109-md5:	6412549286b2b895be11a03eb48d3fae
 Source110:	https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/bs.xpi
-# Source110-md5:	f41dd1851018ed00b76a645c45e10abf
+# Source110-md5:	0d5d0e41a638da24359cf764e301788e
 Source111:	https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/ca.xpi
-# Source111-md5:	4ee40a61b723c85fcf3ca4bfefa9c352
+# Source111-md5:	a01aedf9af0738f82be4b351a020e3f8
 Source112:	https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/ca-valencia.xpi
-# Source112-md5:	39ea39b8ab21f12fe672a4111f3699e0
+# Source112-md5:	43aa58469cc1ad67d6689fba0201fa0d
 Source113:	https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/cak.xpi
-# Source113-md5:	daf6f57513881f150768f4010efdf9ff
+# Source113-md5:	d790048cc62882e717c11fc182328104
 Source114:	https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/cs.xpi
-# Source114-md5:	3709980781daef450fa1d73075ef9570
+# Source114-md5:	f05dfc8d7eefc5448d395cb43cb6db3e
 Source115:	https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/cy.xpi
-# Source115-md5:	2d3fb752f2a9b78202001c6286920a27
+# Source115-md5:	2d02db89f572ce3b457b1a2a7c1e517f
 Source116:	https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/da.xpi
-# Source116-md5:	60d8f798c7978e425a0b45641ca40c23
+# Source116-md5:	7a9771f7393ce7edeab363af8ddc46e7
 Source117:	https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/de.xpi
-# Source117-md5:	658fc359125d9dab7ef059a6de94c5ae
+# Source117-md5:	fc12b570fbd78f387feb6f5b192e9db9
 Source118:	https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/dsb.xpi
-# Source118-md5:	e7c0867d2b619694d8076d1befc78b4a
+# Source118-md5:	fedd83a72f98c6dfc183a09f5dff0d25
 Source119:	https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/el.xpi
-# Source119-md5:	c045e5402aa56841ec7d8c3c115f5695
+# Source119-md5:	9c8c5255448fcc200b307efb7991944d
 Source120:	https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/en-CA.xpi
-# Source120-md5:	99c43e68d0ab72814dc1e5dd8089d291
+# Source120-md5:	43ce9eb5e8af2d71ce314a232769bb59
 Source121:	https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/en-GB.xpi
-# Source121-md5:	182f0f4ac816d7fedcba7db689ed2480
+# Source121-md5:	a7093acf8751a15b6f0b4375c145da6c
 Source122:	https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/en-US.xpi
-# Source122-md5:	44b0f6d4c651bfe01e5079d8c9b7adbb
+# Source122-md5:	4db0a1e6e56e4caa4d55591eecb47ed7
 Source123:	https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/eo.xpi
-# Source123-md5:	276edc337ab715576fae4fb43364dd1c
+# Source123-md5:	6828a8ff59bcffb40f1ba28ad55cb264
 Source124:	https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/es-AR.xpi
-# Source124-md5:	f5c330de01ab13915d3f4aa9669fd71e
+# Source124-md5:	b76e6d38a6bc5c694574593419506fd9
 Source125:	https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/es-CL.xpi
-# Source125-md5:	a88601a7874db082d7a2fef6ed5be22c
+# Source125-md5:	03b59f88976c9fb7f58895edd52ee118
 Source126:	https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/es-ES.xpi
-# Source126-md5:	04339dc8ae3d2cc276b1d369666d0656
+# Source126-md5:	2ac02aba2f65e51e82575ec03a0a4bee
 Source127:	https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/es-MX.xpi
-# Source127-md5:	d9035d33f3c93defe29dc8f785058caf
+# Source127-md5:	cf947ced8cb533832d5495a2b1630f4f
 Source128:	https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/et.xpi
-# Source128-md5:	ae17009cf373bde914e3c8e35f457489
+# Source128-md5:	f1d0a95e5df960a169b9b36c119af534
 Source129:	https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/eu.xpi
-# Source129-md5:	8b7d3f29e9fcf994b33de955bb50e022
+# Source129-md5:	46f51a4f388692c6e58c049a9cdd2314
 Source130:	https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/fa.xpi
-# Source130-md5:	aa4397e1a0a01ab47a6f02cb02113ce9
+# Source130-md5:	50e58d6dfed2143694d6b0112c2267e1
 Source131:	https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/ff.xpi
-# Source131-md5:	a860234dd5026856f538b28ee10178dd
+# Source131-md5:	5cd29a76efb15532a535955411182782
 Source132:	https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/fi.xpi
-# Source132-md5:	96defec808bfc71f1d6b8c3695683e74
+# Source132-md5:	ac7ff71859ba376bf849225d8f0921fc
 Source133:	https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/fr.xpi
-# Source133-md5:	65b4b5ba25eaa0111c7c1dbed2ae013e
+# Source133-md5:	d86f120b15c4230e69e18278cfbff86f
 Source134:	https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/fy-NL.xpi
-# Source134-md5:	688519fb3e473343b501c387685111e3
+# Source134-md5:	01ac402eb218312f83c3118e4b2c22c1
 Source135:	https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/ga-IE.xpi
-# Source135-md5:	3bf0fc33edd7c2e1cd69c2e4ae9a5ed0
+# Source135-md5:	f8ced1f365fe10c0fabb85505166a233
 Source136:	https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/gd.xpi
-# Source136-md5:	86ea45a7c46a1beb2688380a8263bcba
+# Source136-md5:	c958561223ab414c50ef5ba54f1ef8ca
 Source137:	https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/gl.xpi
-# Source137-md5:	c731877e4d03e00e4adc1d9724ca9b04
+# Source137-md5:	67ae082fa69d19f0fd2f52e9ce0612b6
 Source138:	https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/gn.xpi
-# Source138-md5:	4ef5119c45c00b4565d8339876d1ef68
+# Source138-md5:	bbbc3a03b56098146301d32a9c2bf212
 Source139:	https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/gu-IN.xpi
-# Source139-md5:	b89446b5a80089ccc61a5720167c171e
+# Source139-md5:	8a981b3d64550679d90de92f73ec6b8b
 Source140:	https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/he.xpi
-# Source140-md5:	dff09b71647ee523d51af5250a027027
+# Source140-md5:	2fc221d9966c45254050092eed60ff61
 Source141:	https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/hi-IN.xpi
-# Source141-md5:	60cf8e12815b607a083d3b9ba32713cd
+# Source141-md5:	06522cd68d51ea97e21834d24fd6be69
 Source142:	https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/hr.xpi
-# Source142-md5:	e4cf0689e93865b1e40fd61ea4b2c832
+# Source142-md5:	adb3a7ac9b3dc864cfda782896057bfe
 Source143:	https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/hsb.xpi
-# Source143-md5:	0bb4f1245c6b39f150247ac1f4c307fe
+# Source143-md5:	46a98a1d4c4f05fd22a62c7784e59715
 Source144:	https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/hu.xpi
-# Source144-md5:	72e07668f0335101fc22e5937ee14764
+# Source144-md5:	056ac9f75613baaddc72f0ef55128973
 Source145:	https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/hy-AM.xpi
-# Source145-md5:	e24f9034223d31aea049a0248a281686
+# Source145-md5:	05492e447094c6fa6be5a2a8d790d398
 Source146:	https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/ia.xpi
-# Source146-md5:	eb9b2f9fc29b2fbaca8ea84409ad4314
+# Source146-md5:	fab55ebb585d2e47e15a4793a01aebd3
 Source147:	https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/id.xpi
-# Source147-md5:	ad3c85186981ae62368ac7058955c086
+# Source147-md5:	4e9d6a1011fd527b76afceecd53587fb
 Source148:	https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/is.xpi
-# Source148-md5:	c7dc4eaedba6cd977cacf7fb258fff8a
+# Source148-md5:	46f603fb407e602d7145e077810e3c3a
 Source149:	https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/it.xpi
-# Source149-md5:	51fa31470c81cd7f702c99509a7fa4bc
+# Source149-md5:	e2a141f367b6d485573e8bb8d3b4ccac
 Source150:	https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/ja.xpi
-# Source150-md5:	24702148fc4722c17aef502d0ebec933
+# Source150-md5:	d37922b206ea33fd93af031ead884d05
 Source151:	https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/ka.xpi
-# Source151-md5:	d6ff2d79545d308d89981da372dc4763
+# Source151-md5:	0abaea505f80fb5367be57eeb1fd4228
 Source152:	https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/kab.xpi
-# Source152-md5:	1960dc8de6f1555b5ae698d7ffb66df0
+# Source152-md5:	0b5af9bbe18f86cd879ed45e7924632f
 Source153:	https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/kk.xpi
-# Source153-md5:	394e4f3b69496bfd991ea8cac1057ae0
+# Source153-md5:	3649ad93f64eb028f254eb67a511f0ae
 Source154:	https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/km.xpi
-# Source154-md5:	96da1964c1c36c59e827bde4611fa832
+# Source154-md5:	6325a3d8dd21fe499cae732b480928ab
 Source155:	https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/kn.xpi
-# Source155-md5:	fd81c472a16d9aef60d0bd36785a0560
+# Source155-md5:	0d27ed2d12c9eecc5e71630733bca3a5
 Source156:	https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/ko.xpi
-# Source156-md5:	c30910468bdd70630bbe38b57ff93b26
+# Source156-md5:	f8e38eef7a4ec2b7c3ee555c06eb6796
 Source157:	https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/lij.xpi
-# Source157-md5:	207fdf517e09639f2d3424204a26e0d9
+# Source157-md5:	68e8783b0235b1b9f116a8de0f5cf413
 Source158:	https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/lt.xpi
-# Source158-md5:	2137128729c5f8e54d073b54328b90cc
+# Source158-md5:	3f5393d4ac407772a457170cbd54d85f
 Source159:	https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/lv.xpi
-# Source159-md5:	72c019c277bbbf8057b16aefc4f6945c
+# Source159-md5:	3339df8b9d95436c4a2fd39a14fd7c41
 Source160:	https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/mk.xpi
-# Source160-md5:	85b2c92dffecdc7cfef78bdfdb5767d4
+# Source160-md5:	f2e9afb42ebff42cdf2ca24657b576b6
 Source161:	https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/mr.xpi
-# Source161-md5:	ed937a99f50dbfe35ceee7123c03a195
+# Source161-md5:	179583da518153341feb1746ad6e7f1b
 Source162:	https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/ms.xpi
-# Source162-md5:	d3692abcb51dac5f2d6b86616206313c
+# Source162-md5:	18adc97dacc92bacb12506a754d52bd6
 Source163:	https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/my.xpi
-# Source163-md5:	9cae19ebb06c14a675a7af14b6fe3a79
+# Source163-md5:	13076aebf58ba7bd08afa2b6e869b579
 Source164:	https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/nb-NO.xpi
-# Source164-md5:	0995dbd860895d859e64be80da739c35
+# Source164-md5:	4da88b403e80705970e9c5038171812b
 Source165:	https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/ne-NP.xpi
-# Source165-md5:	a9f1194cacb6362ba61758a54356fe87
+# Source165-md5:	8357966b118d146eef0a7015e17e0264
 Source166:	https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/nl.xpi
-# Source166-md5:	30f135fab3c91fd9b103d81cca2a5076
+# Source166-md5:	f72872f93b726256ba5290c9b0e6b5b3
 Source167:	https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/nn-NO.xpi
-# Source167-md5:	932eff4734bd0e0a39deedd1e370a758
+# Source167-md5:	0946d6e2b1fcd49616fb3c4ef153b450
 Source168:	https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/oc.xpi
-# Source168-md5:	adb3793c23e1e2c7a5308dd63bb2cf3b
+# Source168-md5:	0db030bcf3bfaf150b523f9bfec9d59a
 Source169:	https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/pa-IN.xpi
-# Source169-md5:	450e31e14487d149a987a0a9d440cf78
+# Source169-md5:	10b0c74ae913e4d14ff0b8adcc5e0fe4
 Source170:	https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/pl.xpi
-# Source170-md5:	32e539ecc6167a5dc9963e6255a45dd6
+# Source170-md5:	f392f7fbc3b033362e0bb19868f79cad
 Source171:	https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/pt-BR.xpi
-# Source171-md5:	729b705b41534cc1eb5c27c9b9f77795
+# Source171-md5:	b92b0625c11ad7fc9f20c68dee699693
 Source172:	https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/pt-PT.xpi
-# Source172-md5:	fec742e1d1025e95e163f14d3aa8c425
+# Source172-md5:	c103cb31d4dd4871f199129391a316f4
 Source173:	https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/rm.xpi
-# Source173-md5:	6ecec58827deccab7e66f090a7d5cd88
+# Source173-md5:	0a8386120f9b7966195db26b798cc55a
 Source174:	https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/ro.xpi
-# Source174-md5:	a4cc76d74c45380e11f60ac5265964b5
+# Source174-md5:	b3becd2c793d94ad8933f47cb0a3598c
 Source175:	https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/ru.xpi
-# Source175-md5:	91de7fb9dcad4ecf67eca5e908d9d847
+# Source175-md5:	369af2925fb41125664560a784e60a9b
 Source176:	https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/sco.xpi
-# Source176-md5:	f154e3eaf90b7b8fa745fff9fc0c184d
+# Source176-md5:	854eab70ec39ea126102929eb259093b
 Source177:	https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/si.xpi
-# Source177-md5:	cc7d42995cd03aaa22fe62ce82feabc4
+# Source177-md5:	4ceb9d19f849a8311d4140ce161dcbe2
 Source178:	https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/sk.xpi
-# Source178-md5:	5a2d3cf0b2b1f504bc55c1658ca6952b
+# Source178-md5:	52331932e3960afd5e02a0894930835c
 Source179:	https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/sl.xpi
-# Source179-md5:	956b2123f77ca6c68eb1128511a30758
+# Source179-md5:	471012e70789f21e198af057ba44fde1
 Source180:	https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/son.xpi
-# Source180-md5:	4e4390de5a898b21d90aab5842723369
+# Source180-md5:	79421feeda53bd61a1c68295b5e46bcd
 Source181:	https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/sq.xpi
-# Source181-md5:	0150cb13cdf265d487343a1c2ccd8779
+# Source181-md5:	ec04127c13555a907b4ef34d11ed6a5b
 Source182:	https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/sr.xpi
-# Source182-md5:	f5d8145f50c1cedaf8b297915f4f8527
+# Source182-md5:	0d011755f21e5a2014534fc487c6975f
 Source183:	https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/sv-SE.xpi
-# Source183-md5:	7a2a607bc28e536bdbe4f34df54655a4
+# Source183-md5:	76a851263333ee00ff2d9d6f6380c2ab
 Source184:	https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/szl.xpi
-# Source184-md5:	b7d1b3024c648101ff3fa1366faac6dc
+# Source184-md5:	e2d240345f5f54d1c88a5378bf48c4a7
 Source185:	https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/ta.xpi
-# Source185-md5:	f794cc0d802cd4c6f44dfe98fd8b5c07
+# Source185-md5:	d3e272d2936bdde72013c9700c434be3
 Source186:	https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/te.xpi
-# Source186-md5:	742e84e24834e8c782569fcc8d3be582
+# Source186-md5:	404a6c6bcac9ea91b1f6b15a582fba98
 Source187:	https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/th.xpi
-# Source187-md5:	7ded58c813a729803c63f6d906ea26af
+# Source187-md5:	ab4949afe6118482de1327720fffaefa
 Source188:	https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/tl.xpi
-# Source188-md5:	bad9b4ed7c951dbc67e73636ff8103ac
+# Source188-md5:	d65466b2a03bcb3a786838c737a26f27
 Source189:	https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/tr.xpi
-# Source189-md5:	d621ddd301128a70ebd0be55e9b83da9
+# Source189-md5:	5cf381263bee5568d6d6b62dc0e22654
 Source190:	https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/trs.xpi
-# Source190-md5:	ae5b83350e9e1eb0f85da58d7d1f6d11
+# Source190-md5:	2938985fe8c4e2d13a4e69a18bfd0026
 Source191:	https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/uk.xpi
-# Source191-md5:	7a2b97a22ec27fc20fc535e58ed8ca2c
+# Source191-md5:	5a3aa490634556ebcad2d02ec85d80cf
 Source192:	https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/ur.xpi
-# Source192-md5:	bde3b14f0d0b3e7578e72cb83c5a497a
+# Source192-md5:	e7beccc0e0bb2adff7a4348e914cfbde
 Source193:	https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/uz.xpi
-# Source193-md5:	0e0c950ee7c00366c68c9194c6fa6fd5
+# Source193-md5:	2712c078505d7a4db3849d9e53569573
 Source194:	https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/vi.xpi
-# Source194-md5:	1d3f9ec4f5ba141921ede4edd303a287
+# Source194-md5:	37ee7e7bdbf91cf5dddc8b4db22ebd9c
 Source195:	https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/xh.xpi
-# Source195-md5:	f10d7e4d24b43c71306a7a7fd32d48f3
+# Source195-md5:	6eec637759d9849085e200f68f366ba1
 Source196:	https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/zh-CN.xpi
-# Source196-md5:	47710327552a624a9f23177b7ef70b64
+# Source196-md5:	7bbc162baf78eb53864380683d293c2a
 Source197:	https://releases.mozilla.org/pub/firefox/releases/%{version}/linux-i686/xpi/zh-TW.xpi
-# Source197-md5:	08ea52145fb9fb1527dee0703adcfd65
-Patch0:		xsimd.patch
+# Source197-md5:	090eb48f7a6045f8f6e6cc800cc7982f
 Patch4:		%{name}-prefs.patch
 Patch5:		%{name}-pld-bookmarks.patch
 Patch6:		%{name}-no-subshell.patch
@@ -2119,7 +2118,6 @@ unpack() {
 %define __unzip unpack
 %setup -q %(seq -f '-a %g' 100 197 | xargs)
 
-%patch0 -p1
 %patch4 -p1
 %patch5 -p1
 %patch6 -p2
diff --git a/xsimd.patch b/xsimd.patch
deleted file mode 100644
index 0141b89..0000000
--- a/xsimd.patch
+++ /dev/null
@@ -1,758 +0,0 @@
-diff --git a/dom/media/webaudio/AudioNodeEngineGeneric.h b/dom/media/webaudio/AudioNodeEngineGeneric.h
---- a/dom/media/webaudio/AudioNodeEngineGeneric.h
-+++ b/dom/media/webaudio/AudioNodeEngineGeneric.h
-@@ -203,14 +203,14 @@
-     MOZ_ASSERT((aSize % xsimd::batch<float, Arch>::size == 0),
-                "requires tail processing");
- 
-     MOZ_UNROLL(2)
-     for (unsigned i = 0; i < aSize * 2;
--         i += 2 * xsimd::batch<std::complex<float>>::size) {
--      auto in1 = xsimd::batch<std::complex<float>>::load_aligned(
-+         i += 2 * xsimd::batch<std::complex<float>, Arch>::size) {
-+      auto in1 = xsimd::batch<std::complex<float>, Arch>::load_aligned(
-           reinterpret_cast<const std::complex<float>*>(&aInput[i]));
--      auto in2 = xsimd::batch<std::complex<float>>::load_aligned(
-+      auto in2 = xsimd::batch<std::complex<float>, Arch>::load_aligned(
-           reinterpret_cast<const std::complex<float>*>(&aScale[i]));
-       auto out = in1 * in2;
-       out.store_aligned(reinterpret_cast<std::complex<float>*>(&aOutput[i]));
-     }
-   };
-
-diff --git a/dom/media/webaudio/AudioNodeEngineGeneric.h b/dom/media/webaudio/AudioNodeEngineGeneric.h
---- a/dom/media/webaudio/AudioNodeEngineGeneric.h
-+++ b/dom/media/webaudio/AudioNodeEngineGeneric.h
-@@ -5,331 +5,54 @@
- 
- #ifndef MOZILLA_AUDIONODEENGINEGENERIC_H_
- #define MOZILLA_AUDIONODEENGINEGENERIC_H_
- 
- #include "AudioNodeEngine.h"
--#include "AlignmentUtils.h"
- 
- #include "xsimd/xsimd.hpp"
- 
--#if defined(__GNUC__) && __GNUC__ > 7
--#  define MOZ_PRAGMA(tokens) _Pragma(#tokens)
--#  define MOZ_UNROLL(factor) MOZ_PRAGMA(GCC unroll factor)
--#elif defined(__INTEL_COMPILER) || (defined(__clang__) && __clang_major__ > 3)
--#  define MOZ_PRAGMA(tokens) _Pragma(#tokens)
--#  define MOZ_UNROLL(factor) MOZ_PRAGMA(unroll factor)
--#else
--#  define MOZ_UNROLL(_)
--#endif
--
- namespace mozilla {
- 
- template <class Arch>
--static bool is_aligned(const void* ptr) {
--  return (reinterpret_cast<uintptr_t>(ptr) &
--          ~(static_cast<uintptr_t>(Arch::alignment()) - 1)) ==
--         reinterpret_cast<uintptr_t>(ptr);
--};
--
--template <class Arch>
- struct Engine {
-   static void AudioBufferAddWithScale(const float* aInput, float aScale,
--                                      float* aOutput, uint32_t aSize) {
--    if constexpr (Arch::requires_alignment()) {
--      if (aScale == 1.0f) {
--        while (!is_aligned<Arch>(aInput) || !is_aligned<Arch>(aOutput)) {
--          if (!aSize) return;
--          *aOutput += *aInput;
--          ++aOutput;
--          ++aInput;
--          --aSize;
--        }
--      } else {
--        while (!is_aligned<Arch>(aInput) || !is_aligned<Arch>(aOutput)) {
--          if (!aSize) return;
--          *aOutput += *aInput * aScale;
--          ++aOutput;
--          ++aInput;
--          --aSize;
--        }
--      }
--    }
--    MOZ_ASSERT(is_aligned<Arch>(aInput), "aInput is aligned");
--    MOZ_ASSERT(is_aligned<Arch>(aOutput), "aOutput is aligned");
--
--    xsimd::batch<float, Arch> vgain(aScale);
--
--    uint32_t aVSize = aSize & ~(xsimd::batch<float, Arch>::size - 1);
--    MOZ_UNROLL(4)
--    for (unsigned i = 0; i < aVSize; i += xsimd::batch<float, Arch>::size) {
--      auto vin1 = xsimd::batch<float, Arch>::load_aligned(&aInput[i]);
--      auto vin2 = xsimd::batch<float, Arch>::load_aligned(&aOutput[i]);
--      auto vout = xsimd::fma(vin1, vgain, vin2);
--      vout.store_aligned(&aOutput[i]);
--    }
--
--    for (unsigned i = aVSize; i < aSize; ++i) {
--      aOutput[i] += aInput[i] * aScale;
--    }
--  };
-+                                      float* aOutput, uint32_t aSize);
- 
-   static void AudioBlockCopyChannelWithScale(const float* aInput, float aScale,
--                                             float* aOutput) {
--    MOZ_ASSERT(is_aligned<Arch>(aInput), "aInput is aligned");
--    MOZ_ASSERT(is_aligned<Arch>(aOutput), "aOutput is aligned");
--
--    MOZ_ASSERT((WEBAUDIO_BLOCK_SIZE % xsimd::batch<float, Arch>::size == 0),
--               "requires tail processing");
--
--    xsimd::batch<float, Arch> vgain = (aScale);
--
--    MOZ_UNROLL(4)
--    for (unsigned i = 0; i < WEBAUDIO_BLOCK_SIZE;
--         i += xsimd::batch<float, Arch>::size) {
--      auto vin = xsimd::batch<float, Arch>::load_aligned(&aInput[i]);
--      auto vout = vin * vgain;
--      vout.store_aligned(&aOutput[i]);
--    }
--  };
-+                                             float* aOutput);
- 
-   static void AudioBlockCopyChannelWithScale(
-       const float aInput[WEBAUDIO_BLOCK_SIZE],
-       const float aScale[WEBAUDIO_BLOCK_SIZE],
--      float aOutput[WEBAUDIO_BLOCK_SIZE]) {
--    MOZ_ASSERT(is_aligned<Arch>(aInput), "aInput is aligned");
--    MOZ_ASSERT(is_aligned<Arch>(aOutput), "aOutput is aligned");
--    MOZ_ASSERT(is_aligned<Arch>(aScale), "aScale is aligned");
--
--    MOZ_ASSERT((WEBAUDIO_BLOCK_SIZE % xsimd::batch<float, Arch>::size == 0),
--               "requires tail processing");
--
--    MOZ_UNROLL(4)
--    for (unsigned i = 0; i < WEBAUDIO_BLOCK_SIZE;
--         i += xsimd::batch<float, Arch>::size) {
--      auto vscaled = xsimd::batch<float, Arch>::load_aligned(&aScale[i]);
--      auto vin = xsimd::batch<float, Arch>::load_aligned(&aInput[i]);
--      auto vout = vin * vscaled;
--      vout.store_aligned(&aOutput[i]);
--    }
--  };
-+      float aOutput[WEBAUDIO_BLOCK_SIZE]);
- 
-   static void AudioBufferInPlaceScale(float* aBlock, float aScale,
--                                      uint32_t aSize) {
--    MOZ_ASSERT(is_aligned<Arch>(aBlock), "aBlock is aligned");
--
--    xsimd::batch<float, Arch> vgain(aScale);
--
--    uint32_t aVSize = aSize & ~(xsimd::batch<float, Arch>::size - 1);
--    MOZ_UNROLL(4)
--    for (unsigned i = 0; i < aVSize; i += xsimd::batch<float, Arch>::size) {
--      auto vin = xsimd::batch<float, Arch>::load_aligned(&aBlock[i]);
--      auto vout = vin * vgain;
--      vout.store_aligned(&aBlock[i]);
--    }
--    for (unsigned i = aVSize; i < aSize; ++i) aBlock[i] *= aScale;
--  };
-+                                      uint32_t aSize);
- 
-   static void AudioBufferInPlaceScale(float* aBlock, float* aScale,
--                                      uint32_t aSize) {
--    MOZ_ASSERT(is_aligned<Arch>(aBlock), "aBlock is aligned");
--    MOZ_ASSERT(is_aligned<Arch>(aScale), "aScale is aligned");
--
--    uint32_t aVSize = aSize & ~(xsimd::batch<float, Arch>::size - 1);
--    MOZ_UNROLL(4)
--    for (unsigned i = 0; i < aVSize; i += xsimd::batch<float, Arch>::size) {
--      auto vin = xsimd::batch<float, Arch>::load_aligned(&aBlock[i]);
--      auto vgain = xsimd::batch<float, Arch>::load_aligned(&aScale[i]);
--      auto vout = vin * vgain;
--      vout.store_aligned(&aBlock[i]);
--    }
--    for (uint32_t i = aVSize; i < aSize; ++i) {
--      *aBlock++ *= *aScale++;
--    }
--  };
-+                                      uint32_t aSize);
- 
-   static void AudioBlockPanStereoToStereo(
-       const float aInputL[WEBAUDIO_BLOCK_SIZE],
-       const float aInputR[WEBAUDIO_BLOCK_SIZE], float aGainL, float aGainR,
-       bool aIsOnTheLeft, float aOutputL[WEBAUDIO_BLOCK_SIZE],
--      float aOutputR[WEBAUDIO_BLOCK_SIZE]) {
--    MOZ_ASSERT(is_aligned<Arch>(aInputL), "aInputL is aligned");
--    MOZ_ASSERT(is_aligned<Arch>(aInputR), "aInputR is aligned");
--    MOZ_ASSERT(is_aligned<Arch>(aOutputL), "aOutputL is aligned");
--    MOZ_ASSERT(is_aligned<Arch>(aOutputR), "aOutputR is aligned");
--
--    MOZ_ASSERT((WEBAUDIO_BLOCK_SIZE % xsimd::batch<float, Arch>::size == 0),
--               "requires tail processing");
--
--    xsimd::batch<float, Arch> vgainl(aGainL);
--    xsimd::batch<float, Arch> vgainr(aGainR);
--
--    if (aIsOnTheLeft) {
--      MOZ_UNROLL(2)
--      for (unsigned i = 0; i < WEBAUDIO_BLOCK_SIZE;
--           i += xsimd::batch<float, Arch>::size) {
--        auto vinl = xsimd::batch<float, Arch>::load_aligned(&aInputL[i]);
--        auto vinr = xsimd::batch<float, Arch>::load_aligned(&aInputR[i]);
--
--        /* left channel : aOutputL  = aInputL + aInputR * gainL */
--        auto vout = xsimd::fma(vinr, vgainl, vinl);
--        vout.store_aligned(&aOutputL[i]);
--
--        /* right channel : aOutputR = aInputR * gainR */
--        auto vscaled = vinr * vgainr;
--        vscaled.store_aligned(&aOutputR[i]);
--      }
--    } else {
--      MOZ_UNROLL(2)
--      for (unsigned i = 0; i < WEBAUDIO_BLOCK_SIZE;
--           i += xsimd::batch<float, Arch>::size) {
--        auto vinl = xsimd::batch<float, Arch>::load_aligned(&aInputL[i]);
--        auto vinr = xsimd::batch<float, Arch>::load_aligned(&aInputR[i]);
--
--        /* left channel : aInputL * gainL */
--        auto vscaled = vinl * vgainl;
--        vscaled.store_aligned(&aOutputL[i]);
--
--        /* right channel: aOutputR = aInputR + aInputL * gainR */
--        auto vout = xsimd::fma(vinl, vgainr, vinr);
--        vout.store_aligned(&aOutputR[i]);
--      }
--    }
--  };
-+      float aOutputR[WEBAUDIO_BLOCK_SIZE]);
- 
-   static void BufferComplexMultiply(const float* aInput, const float* aScale,
--                                    float* aOutput, uint32_t aSize) {
--    MOZ_ASSERT(is_aligned<Arch>(aInput), "aInput is aligned");
--    MOZ_ASSERT(is_aligned<Arch>(aOutput), "aOutput is aligned");
--    MOZ_ASSERT(is_aligned<Arch>(aScale), "aScale is aligned");
--    MOZ_ASSERT((aSize % xsimd::batch<float, Arch>::size == 0),
--               "requires tail processing");
--
--    MOZ_UNROLL(2)
--    for (unsigned i = 0; i < aSize * 2;
--         i += 2 * xsimd::batch<std::complex<float>, Arch>::size) {
--      auto in1 = xsimd::batch<std::complex<float>, Arch>::load_aligned(
--          reinterpret_cast<const std::complex<float>*>(&aInput[i]));
--      auto in2 = xsimd::batch<std::complex<float>, Arch>::load_aligned(
--          reinterpret_cast<const std::complex<float>*>(&aScale[i]));
--      auto out = in1 * in2;
--      out.store_aligned(reinterpret_cast<std::complex<float>*>(&aOutput[i]));
--    }
--  };
--
--  static float AudioBufferSumOfSquares(const float* aInput, uint32_t aLength) {
--    float sum = 0.f;
--
--    if constexpr (Arch::requires_alignment()) {
--      while (!is_aligned<Arch>(aInput)) {
--        if (!aLength) {
--          return sum;
--        }
--        sum += *aInput * *aInput;
--        ++aInput;
--        --aLength;
--      }
--    }
--
--    MOZ_ASSERT(is_aligned<Arch>(aInput), "aInput is aligned");
--
--    constexpr uint32_t unroll_factor = 4;
--    xsimd::batch<float, Arch> accs[unroll_factor] = {0.f, 0.f, 0.f, 0.f};
--
--    uint32_t vLength =
--        aLength & ~(unroll_factor * xsimd::batch<float, Arch>::size - 1);
-+                                    float* aOutput, uint32_t aSize);
- 
--    for (uint32_t i = 0; i < vLength;
--         i += unroll_factor * xsimd::batch<float, Arch>::size) {
--      MOZ_UNROLL(4)
--      for (uint32_t j = 0; j < unroll_factor; ++j) {
--        auto in = xsimd::batch<float, Arch>::load_aligned(
--            &aInput[i + xsimd::batch<float, Arch>::size * j]);
--        accs[j] = xsimd::fma(in, in, accs[j]);
--      }
--    }
--
--    sum += reduce_add((accs[0] + accs[1]) + (accs[2] + accs[3]));
--    for (uint32_t i = vLength; i < aLength; ++i) sum += aInput[i] * aInput[i];
--    return sum;
--  };
-+  static float AudioBufferSumOfSquares(const float* aInput, uint32_t aLength);
- 
--  static void NaNToZeroInPlace(float* aSamples, size_t aCount) {
--    if constexpr (Arch::requires_alignment()) {
--      while (!is_aligned<Arch>(aSamples)) {
--        if (!aCount) {
--          return;
--        }
--        if (*aSamples != *aSamples) {
--          *aSamples = 0.0;
--        }
--        ++aSamples;
--        --aCount;
--      }
--    }
--
--    MOZ_ASSERT(is_aligned<Arch>(aSamples), "aSamples is aligned");
--
--    uint32_t vCount = aCount & ~(xsimd::batch<float, Arch>::size - 1);
--
--    MOZ_UNROLL(4)
--    for (uint32_t i = 0; i < vCount; i += xsimd::batch<float, Arch>::size) {
--      auto vin = xsimd::batch<float, Arch>::load_aligned(&aSamples[i]);
--      auto vout =
--          xsimd::select(xsimd::isnan(vin), xsimd::batch<float, Arch>(0.f), vin);
--      vout.store_aligned(&aSamples[i]);
--    }
--
--    for (uint32_t i = vCount; i < aCount; i++) {
--      if (aSamples[i] != aSamples[i]) {
--        aSamples[i] = 0.0;
--      }
--    }
--  };
-+  static void NaNToZeroInPlace(float* aSamples, size_t aCount);
- 
-   static void AudioBlockPanStereoToStereo(
-       const float aInputL[WEBAUDIO_BLOCK_SIZE],
-       const float aInputR[WEBAUDIO_BLOCK_SIZE],
-       const float aGainL[WEBAUDIO_BLOCK_SIZE],
-       const float aGainR[WEBAUDIO_BLOCK_SIZE],
-       const bool aIsOnTheLeft[WEBAUDIO_BLOCK_SIZE],
--      float aOutputL[WEBAUDIO_BLOCK_SIZE],
--      float aOutputR[WEBAUDIO_BLOCK_SIZE]) {
--    MOZ_ASSERT(is_aligned<Arch>(aInputL), "aInputL is aligned");
--    MOZ_ASSERT(is_aligned<Arch>(aInputR), "aInputR is aligned");
--    MOZ_ASSERT(is_aligned<Arch>(aGainL), "aGainL is aligned");
--    MOZ_ASSERT(is_aligned<Arch>(aGainR), "aGainR is aligned");
--    MOZ_ASSERT(is_aligned<Arch>(aIsOnTheLeft), "aIsOnTheLeft is aligned");
--    MOZ_ASSERT(is_aligned<Arch>(aOutputL), "aOutputL is aligned");
--    MOZ_ASSERT(is_aligned<Arch>(aOutputR), "aOutputR is aligned");
--
--    MOZ_ASSERT((WEBAUDIO_BLOCK_SIZE % xsimd::batch<float, Arch>::size == 0),
--               "requires tail processing");
--
--    MOZ_UNROLL(2)
--    for (uint32_t i = 0; i < WEBAUDIO_BLOCK_SIZE;
--         i += xsimd::batch<float, Arch>::size) {
--      auto mask =
--          xsimd::batch_bool<float, Arch>::load_aligned(&aIsOnTheLeft[i]);
--
--      auto inputL = xsimd::batch<float, Arch>::load_aligned(&aInputL[i]);
--      auto inputR = xsimd::batch<float, Arch>::load_aligned(&aInputR[i]);
--      auto gainL = xsimd::batch<float, Arch>::load_aligned(&aGainL[i]);
--      auto gainR = xsimd::batch<float, Arch>::load_aligned(&aGainR[i]);
--
--      auto outL_true = xsimd::fma(inputR, gainL, inputL);
--      auto outR_true = inputR * gainR;
--
--      auto outL_false = inputL * gainL;
--      auto outR_false = xsimd::fma(inputL, gainR, inputR);
--
--      auto outL = xsimd::select(mask, outL_true, outL_false);
--      auto outR = xsimd::select(mask, outR_true, outR_false);
--
--      outL.store_aligned(&aOutputL[i]);
--      outR.store_aligned(&aOutputR[i]);
--    }
--  }
-+      float aOutputL[WEBAUDIO_BLOCK_SIZE], float aOutputR[WEBAUDIO_BLOCK_SIZE]);
- };
- 
- }  // namespace mozilla
- 
- #endif
-diff --git a/dom/media/webaudio/AudioNodeEngineGenericImpl.h b/dom/media/webaudio/AudioNodeEngineGenericImpl.h
-new file mode 100644
---- /dev/null
-+++ b/dom/media/webaudio/AudioNodeEngineGenericImpl.h
-@@ -0,0 +1,341 @@
-+/* -*- mode: c++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-+/* this source code form is subject to the terms of the mozilla public
-+ * license, v. 2.0. if a copy of the mpl was not distributed with this file,
-+ * You can obtain one at http://mozilla.org/MPL/2.0/. */
-+
-+#ifndef MOZILLA_AUDIONODEENGINEGENERICIMPL_H_
-+#define MOZILLA_AUDIONODEENGINEGENERICIMPL_H_
-+
-+#include "AudioNodeEngineGeneric.h"
-+#include "AlignmentUtils.h"
-+
-+#if defined(__GNUC__) && __GNUC__ > 7
-+#  define MOZ_PRAGMA(tokens) _Pragma(#tokens)
-+#  define MOZ_UNROLL(factor) MOZ_PRAGMA(GCC unroll factor)
-+#elif defined(__INTEL_COMPILER) || (defined(__clang__) && __clang_major__ > 3)
-+#  define MOZ_PRAGMA(tokens) _Pragma(#tokens)
-+#  define MOZ_UNROLL(factor) MOZ_PRAGMA(unroll factor)
-+#else
-+#  define MOZ_UNROLL(_)
-+#endif
-+
-+namespace mozilla {
-+
-+template <class Arch>
-+static bool is_aligned(const void* ptr) {
-+  return (reinterpret_cast<uintptr_t>(ptr) &
-+          ~(static_cast<uintptr_t>(Arch::alignment()) - 1)) ==
-+         reinterpret_cast<uintptr_t>(ptr);
-+};
-+
-+template <class Arch>
-+void Engine<Arch>::AudioBufferAddWithScale(const float* aInput, float aScale,
-+                                           float* aOutput, uint32_t aSize) {
-+  if constexpr (Arch::requires_alignment()) {
-+    if (aScale == 1.0f) {
-+      while (!is_aligned<Arch>(aInput) || !is_aligned<Arch>(aOutput)) {
-+        if (!aSize) return;
-+        *aOutput += *aInput;
-+        ++aOutput;
-+        ++aInput;
-+        --aSize;
-+      }
-+    } else {
-+      while (!is_aligned<Arch>(aInput) || !is_aligned<Arch>(aOutput)) {
-+        if (!aSize) return;
-+        *aOutput += *aInput * aScale;
-+        ++aOutput;
-+        ++aInput;
-+        --aSize;
-+      }
-+    }
-+  }
-+  MOZ_ASSERT(is_aligned<Arch>(aInput), "aInput is aligned");
-+  MOZ_ASSERT(is_aligned<Arch>(aOutput), "aOutput is aligned");
-+
-+  xsimd::batch<float, Arch> vgain(aScale);
-+
-+  uint32_t aVSize = aSize & ~(xsimd::batch<float, Arch>::size - 1);
-+  MOZ_UNROLL(4)
-+  for (unsigned i = 0; i < aVSize; i += xsimd::batch<float, Arch>::size) {
-+    auto vin1 = xsimd::batch<float, Arch>::load_aligned(&aInput[i]);
-+    auto vin2 = xsimd::batch<float, Arch>::load_aligned(&aOutput[i]);
-+    auto vout = xsimd::fma(vin1, vgain, vin2);
-+    vout.store_aligned(&aOutput[i]);
-+  }
-+
-+  for (unsigned i = aVSize; i < aSize; ++i) {
-+    aOutput[i] += aInput[i] * aScale;
-+  }
-+}
-+
-+template <class Arch>
-+void Engine<Arch>::AudioBlockCopyChannelWithScale(const float* aInput,
-+                                                  float aScale,
-+                                                  float* aOutput) {
-+  MOZ_ASSERT(is_aligned<Arch>(aInput), "aInput is aligned");
-+  MOZ_ASSERT(is_aligned<Arch>(aOutput), "aOutput is aligned");
-+
-+  MOZ_ASSERT((WEBAUDIO_BLOCK_SIZE % xsimd::batch<float, Arch>::size == 0),
-+             "requires tail processing");
-+
-+  xsimd::batch<float, Arch> vgain = (aScale);
-+
-+  MOZ_UNROLL(4)
-+  for (unsigned i = 0; i < WEBAUDIO_BLOCK_SIZE;
-+       i += xsimd::batch<float, Arch>::size) {
-+    auto vin = xsimd::batch<float, Arch>::load_aligned(&aInput[i]);
-+    auto vout = vin * vgain;
-+    vout.store_aligned(&aOutput[i]);
-+  }
-+};
-+
-+template <class Arch>
-+void Engine<Arch>::AudioBlockCopyChannelWithScale(
-+    const float aInput[WEBAUDIO_BLOCK_SIZE],
-+    const float aScale[WEBAUDIO_BLOCK_SIZE],
-+    float aOutput[WEBAUDIO_BLOCK_SIZE]) {
-+  MOZ_ASSERT(is_aligned<Arch>(aInput), "aInput is aligned");
-+  MOZ_ASSERT(is_aligned<Arch>(aOutput), "aOutput is aligned");
-+  MOZ_ASSERT(is_aligned<Arch>(aScale), "aScale is aligned");
-+
-+  MOZ_ASSERT((WEBAUDIO_BLOCK_SIZE % xsimd::batch<float, Arch>::size == 0),
-+             "requires tail processing");
-+
-+  MOZ_UNROLL(4)
-+  for (unsigned i = 0; i < WEBAUDIO_BLOCK_SIZE;
-+       i += xsimd::batch<float, Arch>::size) {
-+    auto vscaled = xsimd::batch<float, Arch>::load_aligned(&aScale[i]);
-+    auto vin = xsimd::batch<float, Arch>::load_aligned(&aInput[i]);
-+    auto vout = vin * vscaled;
-+    vout.store_aligned(&aOutput[i]);
-+  }
-+};
-+
-+template <class Arch>
-+void Engine<Arch>::AudioBufferInPlaceScale(float* aBlock, float aScale,
-+                                           uint32_t aSize) {
-+  MOZ_ASSERT(is_aligned<Arch>(aBlock), "aBlock is aligned");
-+
-+  xsimd::batch<float, Arch> vgain(aScale);
-+
-+  uint32_t aVSize = aSize & ~(xsimd::batch<float, Arch>::size - 1);
-+  MOZ_UNROLL(4)
-+  for (unsigned i = 0; i < aVSize; i += xsimd::batch<float, Arch>::size) {
-+    auto vin = xsimd::batch<float, Arch>::load_aligned(&aBlock[i]);
-+    auto vout = vin * vgain;
-+    vout.store_aligned(&aBlock[i]);
-+  }
-+  for (unsigned i = aVSize; i < aSize; ++i) aBlock[i] *= aScale;
-+};
-+
-+template <class Arch>
-+void Engine<Arch>::AudioBufferInPlaceScale(float* aBlock, float* aScale,
-+                                           uint32_t aSize) {
-+  MOZ_ASSERT(is_aligned<Arch>(aBlock), "aBlock is aligned");
-+  MOZ_ASSERT(is_aligned<Arch>(aScale), "aScale is aligned");
-+
-+  uint32_t aVSize = aSize & ~(xsimd::batch<float, Arch>::size - 1);
-+  MOZ_UNROLL(4)
-+  for (unsigned i = 0; i < aVSize; i += xsimd::batch<float, Arch>::size) {
-+    auto vin = xsimd::batch<float, Arch>::load_aligned(&aBlock[i]);
-+    auto vgain = xsimd::batch<float, Arch>::load_aligned(&aScale[i]);
-+    auto vout = vin * vgain;
-+    vout.store_aligned(&aBlock[i]);
-+  }
-+  for (uint32_t i = aVSize; i < aSize; ++i) {
-+    *aBlock++ *= *aScale++;
-+  }
-+};
-+
-+template <class Arch>
-+void Engine<Arch>::AudioBlockPanStereoToStereo(
-+    const float aInputL[WEBAUDIO_BLOCK_SIZE],
-+    const float aInputR[WEBAUDIO_BLOCK_SIZE], float aGainL, float aGainR,
-+    bool aIsOnTheLeft, float aOutputL[WEBAUDIO_BLOCK_SIZE],
-+    float aOutputR[WEBAUDIO_BLOCK_SIZE]) {
-+  MOZ_ASSERT(is_aligned<Arch>(aInputL), "aInputL is aligned");
-+  MOZ_ASSERT(is_aligned<Arch>(aInputR), "aInputR is aligned");
-+  MOZ_ASSERT(is_aligned<Arch>(aOutputL), "aOutputL is aligned");
-+  MOZ_ASSERT(is_aligned<Arch>(aOutputR), "aOutputR is aligned");
-+
-+  MOZ_ASSERT((WEBAUDIO_BLOCK_SIZE % xsimd::batch<float, Arch>::size == 0),
-+             "requires tail processing");
-+
-+  xsimd::batch<float, Arch> vgainl(aGainL);
-+  xsimd::batch<float, Arch> vgainr(aGainR);
-+
-+  if (aIsOnTheLeft) {
-+    MOZ_UNROLL(2)
-+    for (unsigned i = 0; i < WEBAUDIO_BLOCK_SIZE;
-+         i += xsimd::batch<float, Arch>::size) {
-+      auto vinl = xsimd::batch<float, Arch>::load_aligned(&aInputL[i]);
-+      auto vinr = xsimd::batch<float, Arch>::load_aligned(&aInputR[i]);
-+
-+      /* left channel : aOutputL  = aInputL + aInputR * gainL */
-+      auto vout = xsimd::fma(vinr, vgainl, vinl);
-+      vout.store_aligned(&aOutputL[i]);
-+
-+      /* right channel : aOutputR = aInputR * gainR */
-+      auto vscaled = vinr * vgainr;
-+      vscaled.store_aligned(&aOutputR[i]);
-+    }
-+  } else {
-+    MOZ_UNROLL(2)
-+    for (unsigned i = 0; i < WEBAUDIO_BLOCK_SIZE;
-+         i += xsimd::batch<float, Arch>::size) {
-+      auto vinl = xsimd::batch<float, Arch>::load_aligned(&aInputL[i]);
-+      auto vinr = xsimd::batch<float, Arch>::load_aligned(&aInputR[i]);
-+
-+      /* left channel : aInputL * gainL */
-+      auto vscaled = vinl * vgainl;
-+      vscaled.store_aligned(&aOutputL[i]);
-+
-+      /* right channel: aOutputR = aInputR + aInputL * gainR */
-+      auto vout = xsimd::fma(vinl, vgainr, vinr);
-+      vout.store_aligned(&aOutputR[i]);
-+    }
-+  }
-+};
-+
-+template <class Arch>
-+void Engine<Arch>::BufferComplexMultiply(const float* aInput,
-+                                         const float* aScale, float* aOutput,
-+                                         uint32_t aSize) {
-+  MOZ_ASSERT(is_aligned<Arch>(aInput), "aInput is aligned");
-+  MOZ_ASSERT(is_aligned<Arch>(aOutput), "aOutput is aligned");
-+  MOZ_ASSERT(is_aligned<Arch>(aScale), "aScale is aligned");
-+  MOZ_ASSERT((aSize % xsimd::batch<float, Arch>::size == 0),
-+             "requires tail processing");
-+
-+  MOZ_UNROLL(2)
-+  for (unsigned i = 0; i < aSize * 2;
-+       i += 2 * xsimd::batch<std::complex<float>, Arch>::size) {
-+    auto in1 = xsimd::batch<std::complex<float>, Arch>::load_aligned(
-+        reinterpret_cast<const std::complex<float>*>(&aInput[i]));
-+    auto in2 = xsimd::batch<std::complex<float>, Arch>::load_aligned(
-+        reinterpret_cast<const std::complex<float>*>(&aScale[i]));
-+    auto out = in1 * in2;
-+    out.store_aligned(reinterpret_cast<std::complex<float>*>(&aOutput[i]));
-+  }
-+};
-+
-+template <class Arch>
-+float Engine<Arch>::AudioBufferSumOfSquares(const float* aInput,
-+                                            uint32_t aLength) {
-+  float sum = 0.f;
-+
-+  if constexpr (Arch::requires_alignment()) {
-+    while (!is_aligned<Arch>(aInput)) {
-+      if (!aLength) {
-+        return sum;
-+      }
-+      sum += *aInput * *aInput;
-+      ++aInput;
-+      --aLength;
-+    }
-+  }
-+
-+  MOZ_ASSERT(is_aligned<Arch>(aInput), "aInput is aligned");
-+
-+  constexpr uint32_t unroll_factor = 4;
-+  xsimd::batch<float, Arch> accs[unroll_factor] = {0.f, 0.f, 0.f, 0.f};
-+
-+  uint32_t vLength =
-+      aLength & ~(unroll_factor * xsimd::batch<float, Arch>::size - 1);
-+
-+  for (uint32_t i = 0; i < vLength;
-+       i += unroll_factor * xsimd::batch<float, Arch>::size) {
-+    MOZ_UNROLL(4)
-+    for (uint32_t j = 0; j < unroll_factor; ++j) {
-+      auto in = xsimd::batch<float, Arch>::load_aligned(
-+          &aInput[i + xsimd::batch<float, Arch>::size * j]);
-+      accs[j] = xsimd::fma(in, in, accs[j]);
-+    }
-+  }
-+
-+  sum += reduce_add((accs[0] + accs[1]) + (accs[2] + accs[3]));
-+  for (uint32_t i = vLength; i < aLength; ++i) sum += aInput[i] * aInput[i];
-+  return sum;
-+};
-+
-+template <class Arch>
-+void Engine<Arch>::NaNToZeroInPlace(float* aSamples, size_t aCount) {
-+  if constexpr (Arch::requires_alignment()) {
-+    while (!is_aligned<Arch>(aSamples)) {
-+      if (!aCount) {
-+        return;
-+      }
-+      if (*aSamples != *aSamples) {
-+        *aSamples = 0.0;
-+      }
-+      ++aSamples;
-+      --aCount;
-+    }
-+  }
-+
-+  MOZ_ASSERT(is_aligned<Arch>(aSamples), "aSamples is aligned");
-+
-+  uint32_t vCount = aCount & ~(xsimd::batch<float, Arch>::size - 1);
-+
-+  MOZ_UNROLL(4)
-+  for (uint32_t i = 0; i < vCount; i += xsimd::batch<float, Arch>::size) {
-+    auto vin = xsimd::batch<float, Arch>::load_aligned(&aSamples[i]);
-+    auto vout =
-+        xsimd::select(xsimd::isnan(vin), xsimd::batch<float, Arch>(0.f), vin);
-+    vout.store_aligned(&aSamples[i]);
-+  }
-+
-+  for (uint32_t i = vCount; i < aCount; i++) {
-+    if (aSamples[i] != aSamples[i]) {
-+      aSamples[i] = 0.0;
-+    }
-+  }
-+};
-+
-+template <class Arch>
-+void Engine<Arch>::AudioBlockPanStereoToStereo(
-+    const float aInputL[WEBAUDIO_BLOCK_SIZE],
-+    const float aInputR[WEBAUDIO_BLOCK_SIZE],
-+    const float aGainL[WEBAUDIO_BLOCK_SIZE],
-+    const float aGainR[WEBAUDIO_BLOCK_SIZE],
-+    const bool aIsOnTheLeft[WEBAUDIO_BLOCK_SIZE],
-+    float aOutputL[WEBAUDIO_BLOCK_SIZE], float aOutputR[WEBAUDIO_BLOCK_SIZE]) {
-+  MOZ_ASSERT(is_aligned<Arch>(aInputL), "aInputL is aligned");
-+  MOZ_ASSERT(is_aligned<Arch>(aInputR), "aInputR is aligned");
-+  MOZ_ASSERT(is_aligned<Arch>(aGainL), "aGainL is aligned");
-+  MOZ_ASSERT(is_aligned<Arch>(aGainR), "aGainR is aligned");
-+  MOZ_ASSERT(is_aligned<Arch>(aIsOnTheLeft), "aIsOnTheLeft is aligned");
-+  MOZ_ASSERT(is_aligned<Arch>(aOutputL), "aOutputL is aligned");
-+  MOZ_ASSERT(is_aligned<Arch>(aOutputR), "aOutputR is aligned");
-+
-+  MOZ_ASSERT((WEBAUDIO_BLOCK_SIZE % xsimd::batch<float, Arch>::size == 0),
-+             "requires tail processing");
-+
-+  MOZ_UNROLL(2)
-+  for (uint32_t i = 0; i < WEBAUDIO_BLOCK_SIZE;
-+       i += xsimd::batch<float, Arch>::size) {
-+    auto mask = xsimd::batch_bool<float, Arch>::load_aligned(&aIsOnTheLeft[i]);
-+
-+    auto inputL = xsimd::batch<float, Arch>::load_aligned(&aInputL[i]);
-+    auto inputR = xsimd::batch<float, Arch>::load_aligned(&aInputR[i]);
-+    auto gainL = xsimd::batch<float, Arch>::load_aligned(&aGainL[i]);
-+    auto gainR = xsimd::batch<float, Arch>::load_aligned(&aGainR[i]);
-+
-+    auto outL_true = xsimd::fma(inputR, gainL, inputL);
-+    auto outR_true = inputR * gainR;
-+
-+    auto outL_false = inputL * gainL;
-+    auto outR_false = xsimd::fma(inputL, gainR, inputR);
-+
-+    auto outL = xsimd::select(mask, outL_true, outL_false);
-+    auto outR = xsimd::select(mask, outR_true, outR_false);
-+
-+    outL.store_aligned(&aOutputL[i]);
-+    outR.store_aligned(&aOutputR[i]);
-+  }
-+}
-+
-+}  // namespace mozilla
-+
-+#endif
-diff --git a/dom/media/webaudio/AudioNodeEngineNEON.cpp b/dom/media/webaudio/AudioNodeEngineNEON.cpp
---- a/dom/media/webaudio/AudioNodeEngineNEON.cpp
-+++ b/dom/media/webaudio/AudioNodeEngineNEON.cpp
-@@ -1,9 +1,9 @@
- /* -*- mode: c++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
- /* this source code form is subject to the terms of the mozilla public
-  * license, v. 2.0. if a copy of the mpl was not distributed with this file,
-  * You can obtain one at http://mozilla.org/MPL/2.0/. */
- 
--#include "AudioNodeEngineGeneric.h"
-+#include "AudioNodeEngineGenericImpl.h"
- namespace mozilla {
- template struct Engine<xsimd::neon>;
- }  // namespace mozilla
-diff --git a/dom/media/webaudio/AudioNodeEngineSSE2.cpp b/dom/media/webaudio/AudioNodeEngineSSE2.cpp
---- a/dom/media/webaudio/AudioNodeEngineSSE2.cpp
-+++ b/dom/media/webaudio/AudioNodeEngineSSE2.cpp
-@@ -1,10 +1,10 @@
- /* -*- mode: c++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
- /* this source code form is subject to the terms of the mozilla public
-  * license, v. 2.0. if a copy of the mpl was not distributed with this file,
-  * You can obtain one at http://mozilla.org/MPL/2.0/. */
- 
--#include "AudioNodeEngineGeneric.h"
-+#include "AudioNodeEngineGenericImpl.h"
- 
- namespace mozilla {
- template struct Engine<xsimd::sse2>;
- }  // namespace mozilla
-diff --git a/dom/media/webaudio/AudioNodeEngineSSE4_2_FMA3.cpp b/dom/media/webaudio/AudioNodeEngineSSE4_2_FMA3.cpp
---- a/dom/media/webaudio/AudioNodeEngineSSE4_2_FMA3.cpp
-+++ b/dom/media/webaudio/AudioNodeEngineSSE4_2_FMA3.cpp
-@@ -1,10 +1,10 @@
- /* -*- mode: c++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
- /* this source code form is subject to the terms of the mozilla public
-  * license, v. 2.0. if a copy of the mpl was not distributed with this file,
-  * You can obtain one at http://mozilla.org/MPL/2.0/. */
- 
--#include "AudioNodeEngineGeneric.h"
-+#include "AudioNodeEngineGenericImpl.h"
- 
- namespace mozilla {
- template struct Engine<xsimd::fma3<xsimd::sse4_2>>;
- }  // namespace mozilla
-
================================================================

---- gitweb:

http://git.pld-linux.org/gitweb.cgi/packages/firefox.git/commitdiff/2f4de49aae545cf260bb56ca6ee93e5608d32d19



More information about the pld-cvs-commit mailing list