commit 1bd1fcb3e7ee80230a9f2f885126c228df4d097f
Author: Kevin Kofler <kevin.kofler(a)chello.at>
Date: Sat Dec 10 04:16:33 2016 +0100
Initial import for F24 and F23
.gitignore | 1 +
qt5-qtwebengine-freeworld.spec | 517 +++
...pensource-src-5.6.0-beta-fix-extractcflag.patch | 12 +
...ngine-opensource-src-5.6.0-beta-no-format.patch | 30 +
...bengine-opensource-src-5.6.0-beta-no-neon.patch | 15 +
...-opensource-src-5.6.0-beta-system-icu-utf.patch | 381 ++
...nsource-src-5.6.0-beta-system-nspr-prtime.patch | 49 +
...engine-opensource-src-5.6.0-no-icudtl-dat.patch | 28 +
qtwebengine-opensource-src-5.6.1-linux-pri.patch | 29 +
qtwebengine-opensource-src-5.6.1-no-sse2.patch | 4896 ++++++++++++++++++++
sources | 1 +
11 files changed, 5959 insertions(+)
---
diff --git a/.gitignore b/.gitignore
index e69de29..c37fb48 100644
--- a/.gitignore
+++ b/.gitignore
@@ -0,0 +1 @@
+/qtwebengine-opensource-src-5.6.2.tar.xz
diff --git a/qt5-qtwebengine-freeworld.spec b/qt5-qtwebengine-freeworld.spec
new file mode 100644
index 0000000..777cd7e
--- /dev/null
+++ b/qt5-qtwebengine-freeworld.spec
@@ -0,0 +1,517 @@
+%global qt_module qtwebengine
+
+%global _hardened_build 1
+
+%if 0%{?fedora} > 22
+# need libvpx >= 1.4.0
+%global use_system_libvpx 1
+%endif
+%if 0%{?fedora} || 0%{?rhel} > 6
+# need libwebp >= 0.4.3
+%global use_system_libwebp 1
+%endif
+%if 0%{?use_system_libvpx} && 0%{?use_system_libwebp}
+# only supported when using also libvpx and libwebp from the system
+# (see configure.prf)
+%global use_system_ffmpeg 1
+%endif
+
+# exclude plugins (all architectures) and libv8.so (i686, it's static everywhere
+# else)
+%global __provides_exclude ^lib.*plugin\\.so.*|libv8\\.so$
+# exclude libv8.so (i686, it's static everywhere else)
+%global __requires_exclude ^libv8\\.so$
+
+Summary: Qt5 - QtWebEngine components (freeworld version)
+Name: qt5-qtwebengine-freeworld
+Version: 5.6.2
+Release: 2%{?dist}
+
+%global major_minor %(echo %{version} | cut -d. -f-2)
+%global major %(echo %{version} | cut -d. -f1)
+
+# See LICENSE.GPL LICENSE.LGPL LGPL_EXCEPTION.txt, for details
+# See also
http://qt-project.org/doc/qt-5.0/qtdoc/licensing.html
+# The other licenses are from Chromium and the code it bundles
+License: (LGPLv2 with exceptions or GPLv3 with exceptions) and BSD and LGPLv2+ and ASL
2.0 and IJG and MIT and GPLv2+ and ISC and OpenSSL and (MPLv1.1 or GPLv2 or LGPLv2)
+URL:
http://www.qt.io
+Source0:
http://download.qt.io/official_releases/qt/%{major_minor}/%{version}/subm...
+# do not compile with -Wno-format, which also bypasses -Werror-format-security
+Patch0: qtwebengine-opensource-src-5.6.0-beta-no-format.patch
+# some tweaks to linux.pri (system libs, link libpci, run unbundling script)
+Patch1: qtwebengine-opensource-src-5.6.1-linux-pri.patch
+# quick hack to avoid checking for the nonexistent icudtl.dat and silence the
+# resulting warnings - not upstreamable as is because it removes the fallback
+# mechanism for the ICU data directory (which is not used in our builds because
+# we use the system ICU, which embeds the data statically) completely
+Patch2: qtwebengine-opensource-src-5.6.0-no-icudtl-dat.patch
+# fix extractCFlag to also look in QMAKE_CFLAGS_RELEASE, needed to detect the
+# ARM flags with our %%qmake_qt5 macro, including for the next patch
+Patch3: qtwebengine-opensource-src-5.6.0-beta-fix-extractcflag.patch
+# disable NEON vector instructions on ARM for now, the NEON code FTBFS due to
+# GCC bug
https://bugzilla.redhat.com/show_bug.cgi?id=1282495
+Patch4: qtwebengine-opensource-src-5.6.0-beta-no-neon.patch
+# use the system NSPR prtime (based on Debian patch)
+# We already depend on NSPR, so it is useless to copy these functions here.
+# Debian uses this just fine, and I don't see relevant modifications either.
+Patch5: qtwebengine-opensource-src-5.6.0-beta-system-nspr-prtime.patch
+# use the system ICU UTF functions
+# We already depend on ICU, so it is useless to copy these functions here.
+# I checked the history of that directory, and other than the renames I am
+# undoing, there were no modifications at all. Must be applied after Patch5.
+Patch6: qtwebengine-opensource-src-5.6.0-beta-system-icu-utf.patch
+# do not require SSE2 on i686
+# cumulative revert of upstream reviews 187423002, 308003004, 511773002 (parts
+# relevant to QtWebEngine only), 516543004, 1152053004 and 1161853008, along
+# with some custom fixes and improvements
+# also build V8 shared and twice on i686 (once for x87, once for SSE2)
+Patch7: qtwebengine-opensource-src-5.6.1-no-sse2.patch
+
+# the architectures theoretically supported by the version of V8 used (#1298011)
+# You may need some minor patching to build on one of the secondary
+# architectures, e.g., to add to the Qt -> Chromium -> V8 arch translations.
+# If you cannot get this package to build on your secondary architecure, please:
+# * remove your architecture from this list AND
+# * put #1298011 onto your ExcludeArch tracker.
+ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 mips mipsel mips64el
+
+BuildRequires: qt5-qtbase-devel >= %{version}
+BuildRequires: qt5-qtbase-private-devel
+# TODO: check of = is really needed or if >= would be good enough -- rex
+%{?_qt5:Requires: %{_qt5}%{?_isa} = %{_qt5_version}}
+BuildRequires: qt5-qtdeclarative-devel >= %{version}
+BuildRequires: qt5-qtxmlpatterns-devel >= %{version}
+BuildRequires: qt5-qtlocation-devel >= %{version}
+BuildRequires: qt5-qtsensors-devel >= %{version}
+BuildRequires: qt5-qtwebchannel-devel >= %{version}
+BuildRequires: qt5-qttools-static >= %{version}
+BuildRequires: ninja-build
+BuildRequires: bison
+BuildRequires: git-core
+BuildRequires: gperf
+BuildRequires: libicu-devel
+BuildRequires: libjpeg-devel
+BuildRequires: re2-devel
+BuildRequires: snappy-devel
+%ifarch %{ix86} x86_64
+BuildRequires: yasm
+%endif
+BuildRequires: pkgconfig(expat)
+BuildRequires: pkgconfig(gobject-2.0)
+BuildRequires: pkgconfig(glib-2.0)
+BuildRequires: pkgconfig(fontconfig)
+BuildRequires: pkgconfig(freetype2)
+BuildRequires: pkgconfig(gl)
+BuildRequires: pkgconfig(egl)
+%if 0%{?use_system_ffmpeg}
+BuildRequires: pkgconfig(libavcodec)
+BuildRequires: pkgconfig(libavformat)
+BuildRequires: pkgconfig(libavutil)
+%global system_ffmpeg_flag use_system_ffmpeg
+%endif
+BuildRequires: pkgconfig(libpng)
+BuildRequires: pkgconfig(libudev)
+%if 0%{?use_system_libwebp}
+BuildRequires: pkgconfig(libwebp) >= 0.4.3
+%endif
+BuildRequires: pkgconfig(harfbuzz)
+BuildRequires: pkgconfig(jsoncpp)
+BuildRequires: pkgconfig(protobuf)
+BuildRequires: pkgconfig(libdrm)
+BuildRequires: pkgconfig(opus)
+BuildRequires: pkgconfig(libevent)
+BuildRequires: pkgconfig(zlib)
+BuildRequires: pkgconfig(minizip)
+BuildRequires: pkgconfig(libxml-2.0)
+BuildRequires: pkgconfig(libxslt)
+BuildRequires: pkgconfig(x11)
+BuildRequires: pkgconfig(xi)
+BuildRequires: pkgconfig(xcursor)
+BuildRequires: pkgconfig(xext)
+BuildRequires: pkgconfig(xfixes)
+BuildRequires: pkgconfig(xrender)
+BuildRequires: pkgconfig(xdamage)
+BuildRequires: pkgconfig(xcomposite)
+BuildRequires: pkgconfig(xtst)
+BuildRequires: pkgconfig(xrandr)
+BuildRequires: pkgconfig(xscrnsaver)
+BuildRequires: pkgconfig(libcap)
+BuildRequires: pkgconfig(libpulse)
+BuildRequires: pkgconfig(alsa)
+BuildRequires: pkgconfig(libpci)
+BuildRequires: pkgconfig(dbus-1)
+BuildRequires: pkgconfig(nss)
+BuildRequires: pkgconfig(libsrtp)
+BuildRequires: perl
+BuildRequires: python
+%if 0%{?use_system_libvpx}
+BuildRequires: pkgconfig(vpx) >= 1.4.0
+%endif
+
+# extra (non-upstream) functions needed, see
+# src/3rdparty/chromium/third_party/sqlite/README.chromium for details
+#BuildRequires: pkgconfig(sqlite3)
+
+## Various bundled libraries that Chromium does not support unbundling :-(
+## Only the parts actually built are listed.
+## Query for candidates:
+## grep third_party/ build.log | sed 's!third_party/!\nthird_party/!g' | \
+## grep third_party/ | sed 's!^third_party/!!g' | sed 's!/.*$!!g' | \
+## sed 's/\;.*$//g' | sed 's/ .*$//g' | sort | uniq | less
+## some false positives where only shim headers are generated for some reason
+## some false positives with dummy placeholder dirs (swiftshader, widevine)
+## some false negatives where a header-only library is bundled (e.g. x86inc)
+## Spot's chromium.spec also has a list that I checked.
+
+# Of course, Chromium itself is bundled. It cannot be unbundled because it is
+# not a library, but forked (modified) application code.
+# Some security fixes are backported, see:
+#
http://code.qt.io/cgit/qt/qtwebengine-chromium.git/log/?h=45-based
+Provides: bundled(chromium) = 45
+
+# Bundled in src/3rdparty/chromium/third_party:
+# Check src/3rdparty/chromium/third_party/*/README.chromium for version numbers,
+# except where specified otherwise.
+Provides: bundled(angle) = 2422
+# Google's fork of OpenSSL
+# We cannot build against NSS instead because it no longer works with NSS 3.21:
+# HTTPS on, ironically, Google's sites (Google, YouTube, etc.) stops working
+# completely and produces only ERR_SSL_PROTOCOL_ERROR errors:
+#
http://kaosx.us/phpBB3/viewtopic.php?t=1235
+#
https://bugs.launchpad.net/ubuntu/+source/chromium-browser/+bug/1520568
+# So we have to do what Chromium 47 now defaults to: a "chimera build", i.e.,
+# use the BoringSSL code and the system NSS certificates.
+Provides: bundled(boringssl)
+Provides: bundled(brotli)
+%if !0%{?use_system_ffmpeg}
+# see src/3rdparty/chromium/third_party/ffmpeg/Changelog for the version number
+Provides: bundled(ffmpeg) = 2.7
+%endif
+Provides: bundled(iccjpeg)
+# bundled as "khronos", headers only
+Provides: bundled(khronos_headers)
+# bundled as "leveldatabase"
+Provides: bundled(leveldb) = r80
+Provides: bundled(libjingle) = 9564
+%if !0%{?use_system_libvpx}
+Provides: bundled(libvpx) = 1.4.0
+%endif
+%if !0%{?use_system_libwebp}
+Provides: bundled(libwebp) = 0.4.3
+%endif
+Provides: bundled(libXNVCtrl) = 302.17
+Provides: bundled(libyuv) = 1444
+Provides: bundled(modp_b64)
+Provides: bundled(mojo)
+# headers only
+Provides: bundled(npapi)
+Provides: bundled(openmax_dl) = 1.0.2
+Provides: bundled(ots)
+Provides: bundled(qcms) = 4
+Provides: bundled(sfntly) = 0-0.1.svn111
+Provides: bundled(skia)
+# bundled as "smhasher"
+Provides: bundled(SMHasher) = 0-0.1.svn147
+Provides: bundled(sqlite) = 3.8.7.4
+Provides: bundled(usrsctp) = 0-0.1.svn9045
+Provides: bundled(webrtc) = 90
+%ifarch %{ix86} x86_64
+# header (for assembly) only
+Provides: bundled(x86inc) = 0
+%endif
+
+# Bundled in src/3rdparty/chromium/base/third_party:
+# Check src/3rdparty/chromium/third_party/base/*/README.chromium for version
+# numbers, except where specified otherwise.
+Provides: bundled(dmg_fp)
+Provides: bundled(dynamic_annotations) = 4384
+Provides: bundled(superfasthash) = 0
+Provides: bundled(symbolize)
+# bundled as "valgrind", headers only
+Provides: bundled(valgrind.h)
+# bundled as "xdg_mime"
+Provides: bundled(xdg-mime)
+# bundled as "xdg_user_dirs"
+Provides: bundled(xdg-user-dirs) = 0.10
+
+# Bundled in src/3rdparty/chromium/net/third_party:
+# Check src/3rdparty/chromium/third_party/net/*/README.chromium for version
+# numbers, except where specified otherwise.
+Provides: bundled(mozilla_security_manager) = 1.9.2
+
+# Bundled in src/3rdparty/chromium/url/third_party:
+# Check src/3rdparty/chromium/third_party/url/*/README.chromium for version
+# numbers, except where specified otherwise.
+# bundled as "mozilla", file renamed and modified
+Provides: bundled(nsURLParsers)
+
+# Bundled outside of third_party, apparently not considered as such by Chromium:
+# see src/3rdparty/chromium/v8/include/v8_version.h for the version number
+Provides: bundled(v8) = 4.5.103.35
+# bundled by v8 (src/3rdparty/chromium/v8/src/third_party/fdlibm)
+# see src/3rdparty/chromium/v8/src/third_party/fdlibm/README.v8 for the version
+Provides: bundled(fdlibm) = 5.3
+
+%{?_qt5_version:Requires: qt5-qtbase%{?_isa} = %{_qt5_version}}
+# depend on the official version for data files
+Requires: qt5-qtwebengine%{?_isa} = %{version}
+
+
+%description
+%{summary}.
+
+This version is compiled with support for patent-encumbered codecs enabled.
+
+
+%prep
+%setup -q -n %{qt_module}-opensource-src-%{version}%{?prerelease:-%{prerelease}}
+%patch0 -p1 -b .no-format
+%patch1 -p1 -b .linux-pri
+%patch2 -p1 -b .no-icudtl-dat
+%patch3 -p1 -b .fix-extractcflag
+%patch4 -p1 -b .no-neon
+%patch5 -p1 -b .system-nspr-prtime
+%patch6 -p1 -b .system-icu-utf
+%patch7 -p1 -b .no-sse2
+# fix // in #include in content/renderer/gpu to avoid debugedit failure
+sed -i -e 's!gpu//!gpu/!g' \
+ src/3rdparty/chromium/content/renderer/gpu/compositor_forwarding_message_filter.cc
+# remove ./ from #line commands in ANGLE to avoid debugedit failure (?)
+sed -i -e 's!\./!!g' \
+ src/3rdparty/chromium/third_party/angle/src/compiler/preprocessor/Tokenizer.cpp \
+ src/3rdparty/chromium/third_party/angle/src/compiler/translator/glslang_lex.cpp
+
+#
http://bugzilla.redhat.com/1337585
+# can't just delete, but we'll overwrite with system headers to be on the safe
side
+cp -bv /usr/include/re2/*.h src/3rdparty/chromium/third_party/re2/re2/
+
+%ifnarch x86_64
+# most arches run out of memory with full debuginfo, so use -g1 on non-x86_64
+sed -i -e 's/=-g$/=-g1/g' src/core/gyp_run.pro
+%endif
+
+# copy the Chromium license so it is installed with the appropriate name
+cp -p src/3rdparty/chromium/LICENSE LICENSE.Chromium
+
+%build
+export STRIP=strip
+export NINJAFLAGS="-v %{_smp_mflags}"
+export NINJA_PATH=%{_bindir}/ninja-build
+export CXXFLAGS="%{optflags} -fno-delete-null-pointer-checks"
+%ifnarch x86_64
+# most arches run out of memory with full debuginfo, so use -g1 on non-x86_64
+export CXXFLAGS=`echo "$CXXFLAGS" | sed -e 's/ -g / -g1 /g'`
+%endif
+
+mkdir %{_target_platform}
+pushd %{_target_platform}
+
+%{qmake_qt5} CONFIG+="webcore_debug v8base_debug force_debug_info" \
+ WEBENGINE_CONFIG+="use_system_icu %{?system_ffmpeg_flag}
use_proprietary_codecs" ..
+
+# workaround, disable parallel compilation as it fails to compile in brew
+make %{?_smp_mflags}
+
+%install
+# install the libraries to a special directory to avoid conflict with official
+# qt5-qtwebengine package (do not install the other files, depend on
+# qt5-qtwebengine for them instead)
+mkdir -p %{buildroot}%{_libdir}/%{name}
+for i in libQt5WebEngineCore libQt5WebEngine libQt5WebEngineWidgets ; do
+ install -m 755 -p %{_target_platform}/lib/$i.so.%{version}
%{buildroot}%{_libdir}/%{name}/
+ ln -sf $i.so.%{version} %{buildroot}%{_libdir}/%{name}/$i.so.%{major}
+ ln -sf $i.so.%{version} %{buildroot}%{_libdir}/%{name}/$i.so.%{major_minor}
+done
+
+# Register the library directory in /etc/ld.so.conf.d
+mkdir -p %{buildroot}%{_sysconfdir}/ld.so.conf.d
+echo "%{_libdir}/%{name}" \
+ >%{buildroot}%{_sysconfdir}/ld.so.conf.d/%{name}-%{_arch}.conf
+
+%post -p /sbin/ldconfig
+%postun -p /sbin/ldconfig
+
+%files
+%license LICENSE.* src/webengine/doc/src/qtwebengine-3rdparty.qdoc
+%{_libdir}/%{name}/
+%config(noreplace) %{_sysconfdir}/ld.so.conf.d/%{name}-%{_arch}.conf
+
+
+%changelog
+* Sat Dec 10 2016 Kevin Kofler <Kevin(a)tigcc.ticalc.org> - 5.6.2-2
+- Rename to qt5-qtwebengine-freeworld, Require qt5-qtwebengine%%{?isa}
+- Enable use_system_ffmpeg where possible
+- Enable use_proprietary_codecs (= patent-encumbered FFmpeg codecs)
+- Install only the shared libraries, to a dedicated directory
+- Use an ld.so.conf.d snippet as in freetype-freeworld to enable it
+- Change qt5-qtbase dependency from >= to =
+- Ship the license files
+- Do not build docs, they are not installed here
+
+* Wed Nov 02 2016 Rex Dieter <rdieter(a)fedoraproject.org> - 5.6.2-1
+- 5.6.2
+
+* Sun Jul 31 2016 Rex Dieter <rdieter(a)fedoraproject.org> - 5.6.1-4
+- BR: cmake (for cmake autoprovides mostly)
+
+* Tue Jun 14 2016 Rex Dieter <rdieter(a)fedoraproject.org> - 5.6.1-3
+- rebuild (glibc)
+
+* Sun Jun 12 2016 Rex Dieter <rdieter(a)fedoraproject.org> - 5.6.1-2
+- add versioned qt5-qtbase runtime dep
+
+* Sat Jun 11 2016 Kevin Kofler <Kevin(a)tigcc.ticalc.org> - 5.6.1-1
+- Update to 5.6.1
+- Rebase linux-pri patch (drop the parts already fixed upstream)
+- Drop backported chimera-nss-init patch, already applied upstream
+- Rebase no-sse2 patch (the core_module.pro change)
+- Add the new designer/libqwebengineview.so plugin to the file list
+
+* Mon Jun 06 2016 Rex Dieter <rdieter(a)fedoraproject.org> - 5.6.0-8
+- workaround stackmashing runtime errors in re2-related bundled headers (#1337585)
+
+* Sat May 21 2016 Rex Dieter <rdieter(a)fedoraproject.org> - 5.6.0-7
+- rebuild (pciutuils)
+
+* Wed May 18 2016 Rex Dieter <rdieter(a)fedoraproject.org> 5.6.0-6
+- BR: git-core
+
+* Fri Apr 15 2016 David Tardon <dtardon(a)redhat.com> - 5.6.0-5
+- rebuild for ICU 57.1
+
+* Fri Apr 08 2016 Than Ngo <than(a)redhat.com> - 5.6.0-4
+- drop ppc ppc64 ppc64le from ExclusiveArch, it's not supported yet
+
+* Thu Mar 24 2016 Kevin Kofler <Kevin(a)tigcc.ticalc.org> - 5.6.0-3
+- Build with CONFIG+="webcore_debug v8base_debug force_debug_info"
+- Force -fno-delete-null-pointer-checks through CXXFLAGS, Qt flags not used here
+- Use -g1 instead of -g on non-x86_64 to avoid memory exhaustion
+- Work around debugedit failure by removing "./" from #line commands and
+ changing "//" to "/" in an #include command
+
+* Fri Mar 18 2016 Kevin Kofler <Kevin(a)tigcc.ticalc.org> - 5.6.0-2
+- Avoid checking for the nonexistent icudtl.dat and silence the warnings
+
+* Thu Mar 17 2016 Kevin Kofler <Kevin(a)tigcc.ticalc.org> - 5.6.0-1
+- Update to 5.6.0 (final)
+- Drop system-icu54 patch, fixed upstream
+
+* Thu Feb 25 2016 Kevin Kofler <Kevin(a)tigcc.ticalc.org> - 5.6.0-0.19.rc
+- Update to 5.6.0 RC
+- Rebase linux-pri and no-sse2 patches
+- Remove BuildRequires pkgconfig(flac), pkgconfig(speex), no longer needed
+- Update file list for 5.6.0 RC (resources now in resources/ subdirectory)
+- Tag translations with correct %%lang tags
+
+* Wed Feb 24 2016 Kevin Kofler <Kevin(a)tigcc.ticalc.org> - 5.6.0-0.18.beta
+- no-sse2 patch: Fix FFT (RealFourier) in webrtc on non-SSE2 x86
+
+* Tue Feb 23 2016 Kevin Kofler <Kevin(a)tigcc.ticalc.org> - 5.6.0-0.17.beta
+- Fix FTBFS on aarch64: Respin tarball with fixed clean_ffmpeg.sh (#1310753).
+
+* Thu Feb 04 2016 Fedora Release Engineering <releng(a)fedoraproject.org> -
5.6.0-0.16.beta
+- Rebuilt for
https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild
+
+* Tue Jan 19 2016 Kevin Kofler <Kevin(a)tigcc.ticalc.org> - 5.6.0-0.15.beta
+- Build V8 as a shared library on i686 to allow for swappable backends
+- Build both the x87 version and the SSE2 version of V8 on i686
+- Add the private library directory to the file list on i686
+- Add Provides/Requires filtering for libv8.so (i686) and for plugins
+
+* Sun Jan 17 2016 Kevin Kofler <Kevin(a)tigcc.ticalc.org> - 5.6.0-0.14.beta
+- Do not require SSE2 on i686
+
+* Thu Jan 14 2016 Kevin Kofler <Kevin(a)tigcc.ticalc.org> - 5.6.0-0.13.beta
+- Drop nss321 backport (and the related nss-headers patch), it did not help
+- Do an NSS/BoringSSL "chimera build" as will be the default in Chromium 47
+- Update License accordingly (add "OpenSSL")
+- Fix the "chimera build" to call EnsureNSSHttpIOInit (backport from Chromium)
+
+* Wed Jan 13 2016 Kevin Kofler <Kevin(a)tigcc.ticalc.org> - 5.6.0-0.12.beta
+- Update forked NSS SSL code to 3.21, match system NSS (backport from Chromium)
+
+* Wed Jan 13 2016 Kevin Kofler <Kevin(a)tigcc.ticalc.org> - 5.6.0-0.11.beta
+- Add an (optimistic) ExclusiveArch list because of V8 (tracking bug: #1298011)
+
+* Tue Jan 12 2016 Kevin Kofler <Kevin(a)tigcc.ticalc.org> - 5.6.0-0.10.beta
+- Unbundle prtime.cc, use the system NSPR instead (which is already required)
+- Unbundle icu_utf.cc, use the system ICU instead (which is already required)
+
+* Mon Jan 11 2016 Kevin Kofler <Kevin(a)tigcc.ticalc.org> - 5.6.0-0.9.beta
+- linux-pri.patch: Set icu_use_data_file_flag=0 for system ICU
+
+* Mon Jan 11 2016 Kevin Kofler <Kevin(a)tigcc.ticalc.org> - 5.6.0-0.8.beta
+- Build against the system libvpx also on F23 (1.4.0), worked in Copr
+
+* Mon Jan 11 2016 Kevin Kofler <Kevin(a)tigcc.ticalc.org> - 5.6.0-0.7.beta
+- Use the system libvpx on F24+ (1.5.0)
+- Fixes to Provides: bundled(*): libwebp if bundled, x86inc only on x86
+
+* Sun Jan 10 2016 Kevin Kofler <Kevin(a)tigcc.ticalc.org> - 5.6.0-0.6.beta
+- Fix extractCFlag to also look in QMAKE_CFLAGS_RELEASE (needed for ARM)
+- Fix FTBFS on ARM: Disable NEON due to #1282495 (GCC bug)
+
+* Sat Jan 09 2016 Kevin Kofler <Kevin(a)tigcc.ticalc.org> - 5.6.0-0.5.beta
+- Fix FTBFS on ARM: linux-pri patch: Set use_system_yasm only on x86_64 and i386
+- Fix FTBFS on ARM: Respin tarball with: clean_ffmpeg.sh: Add missing ARM files
+
+* Sat Jan 09 2016 Kevin Kofler <Kevin(a)tigcc.ticalc.org> - 5.6.0-0.4.beta.1
+- Use more specific BuildRequires for docs (thanks to rdieter)
+- Fix FTBFS against ICU 54 (F22/F23), thanks to spot for the Chromium fix
+
+* Fri Jan 08 2016 Kevin Kofler <Kevin(a)tigcc.ticalc.org> - 5.6.0-0.4.beta
+- Fix License tag
+- Use %%_qt5_examplesdir macro
+- Add Provides: bundled(*) for all the bundled libraries that I found
+
+* Wed Jan 06 2016 Kevin Kofler <Kevin(a)tigcc.ticalc.org> - 5.6.0-0.3.beta
+- linux-pri patch: Add use_system_protobuf, went missing in the 5.6 rebase
+
+* Wed Jan 06 2016 Kevin Kofler <Kevin(a)tigcc.ticalc.org> - 5.6.0-0.2.beta
+- linux-pri patch: Add missing newline at the end of the log line
+- Use export for NINJA_PATH (fixes system ninja-build use)
+
+* Wed Jan 06 2016 Kevin Kofler <Kevin(a)tigcc.ticalc.org> - 5.6.0-0.1.beta
+- Readd BR pkgconfig(jsoncpp) because linux.pri now checks for it
+- BR yasm only on x86 (i686, x86_64)
+- Add dot at the end of %%description
+- Rebase no-format patch
+- Replace unbundle-gyp.patch with new linux-pri.patch
+- Use system ninja-build instead of the bundled one
+- Run the unbundling script replace_gyp_files.py in linux.pri rather than here
+- Update file list for 5.6.0-beta (no more libffmpegsumo since Chromium 45)
+
+* Tue Jan 05 2016 Kevin Kofler <Kevin(a)tigcc.ticalc.org> - 5.5.1-4
+- Remove unused BRs flex, libgcrypt-devel, bzip2-devel, pkgconfig(gio-2.0),
+ pkgconfig(hunspell), pkgconfig(libpcre), pkgconfig(libssl),
+ pkgconfig(libcrypto), pkgconfig(jsoncpp), pkgconfig(libmtp),
+ pkgconfig(libexif), pkgconfig(liblzma), pkgconfig(cairo), pkgconfig(libusb),
+ perl(version), perl(Digest::MD5), perl(Text::ParseWords), ruby
+- Add missing explicit BRs on pkgconfig(x11), pkgconfig(xext),
+ pkgconfig(xfixes), pkgconfig(xdamage), pkgconfig(egl)
+- Fix BR pkgconfig(flac++) to pkgconfig(flac) (libFLAC++ not used, only libFLAC)
+- Fix BR python-devel to python
+- Remove unused -Duse_system_openssl=1 flag (QtWebEngine uses NSS instead)
+- Remove unused -Duse_system_jsoncpp=1 and -Duse_system_libusb=1 flags
+
+* Mon Jan 04 2016 Kevin Kofler <Kevin(a)tigcc.ticalc.org> - 5.5.1-3
+- Update file list for 5.5.1 (add qtwebengine_resources_[12]00p.pak)
+
+* Mon Jan 04 2016 Kevin Kofler <Kevin(a)tigcc.ticalc.org> - 5.5.1-2
+- Add missing explicit BRs on pkgconfig(expat) and pkgconfig(libxml-2.0)
+- Remove unused BR v8-devel (cannot currently be unbundled)
+
+* Thu Dec 24 2015 Kevin Kofler <Kevin(a)tigcc.ticalc.org> - 5.5.1-1
+- Update to 5.5.1
+- Remove patent-encumbered codecs in the bundled FFmpeg from the tarball
+
+* Fri Jul 17 2015 Helio Chissini de Castro <helio(a)kde.org> - 5.5.0-2
+- Update with unbundle flags. Adapted from original 5.4 Suse package
+- Disable vpx and sqlite as unbundle due some compilation issues
+- Enable verbose build
+
+* Fri Jul 17 2015 Helio Chissini de Castro <helio(a)kde.org> - 5.5.0-1
+- Initial spec
+
+* Thu Jun 25 2015 Helio Chissini de Castro <helio(a)kde.org> - 5.5.0-0.2.rc
+- Update for official RC1 released packages
diff --git a/qtwebengine-opensource-src-5.6.0-beta-fix-extractcflag.patch
b/qtwebengine-opensource-src-5.6.0-beta-fix-extractcflag.patch
new file mode 100644
index 0000000..8beae69
--- /dev/null
+++ b/qtwebengine-opensource-src-5.6.0-beta-fix-extractcflag.patch
@@ -0,0 +1,12 @@
+diff -ur qtwebengine-opensource-src-5.6.0-beta/tools/qmake/mkspecs/features/functions.prf
qtwebengine-opensource-src-5.6.0-beta-fix-extractcflag/tools/qmake/mkspecs/features/functions.prf
+---
qtwebengine-opensource-src-5.6.0-beta/tools/qmake/mkspecs/features/functions.prf 2015-12-14
16:27:24.000000000 +0100
++++
qtwebengine-opensource-src-5.6.0-beta-fix-extractcflag/tools/qmake/mkspecs/features/functions.prf 2016-01-10
18:15:23.942032985 +0100
+@@ -87,7 +87,7 @@
+ }
+
+ defineReplace(extractCFlag) {
+- CFLAGS = $$QMAKE_CC $$QMAKE_CFLAGS
++ CFLAGS = $$QMAKE_CC $$QMAKE_CFLAGS $$QMAKE_CFLAGS_RELEASE
+ OPTION = $$find(CFLAGS, $$1)
+ OPTION = $$split(OPTION, =)
+ return ($$member(OPTION, 1))
diff --git a/qtwebengine-opensource-src-5.6.0-beta-no-format.patch
b/qtwebengine-opensource-src-5.6.0-beta-no-format.patch
new file mode 100644
index 0000000..650854f
--- /dev/null
+++ b/qtwebengine-opensource-src-5.6.0-beta-no-format.patch
@@ -0,0 +1,30 @@
+diff -ur qtwebengine-opensource-src-5.6.0-beta/src/3rdparty/chromium/build/common.gypi
qtwebengine-opensource-src-5.6.0-beta-no-format/src/3rdparty/chromium/build/common.gypi
+---
qtwebengine-opensource-src-5.6.0-beta/src/3rdparty/chromium/build/common.gypi 2015-12-10
18:17:21.000000000 +0100
++++
qtwebengine-opensource-src-5.6.0-beta-no-format/src/3rdparty/chromium/build/common.gypi 2016-01-05
05:58:55.336938182 +0100
+@@ -3142,11 +3142,6 @@
+ # Don't warn about hash_map in third-party code.
+ '-Wno-deprecated',
+ ],
+- 'cflags': [
+- # Don't warn about printf format problems.
+- # This is off by default in gcc but on in Ubuntu's gcc(!).
+- '-Wno-format',
+- ],
+ 'cflags_cc!': [
+ # Necessary because
llvm.org/PR10448 is WONTFIX (
crbug.com/90453).
+ '-Wsign-compare',
+diff -ur
qtwebengine-opensource-src-5.6.0-beta/src/3rdparty/chromium/build/config/compiler/BUILD.gn
qtwebengine-opensource-src-5.6.0-beta-no-format/src/3rdparty/chromium/build/config/compiler/BUILD.gn
+---
qtwebengine-opensource-src-5.6.0-beta/src/3rdparty/chromium/build/config/compiler/BUILD.gn 2015-12-10
18:17:21.000000000 +0100
++++
qtwebengine-opensource-src-5.6.0-beta-no-format/src/3rdparty/chromium/build/config/compiler/BUILD.gn 2016-01-05
05:58:55.362938322 +0100
+@@ -1013,11 +1013,6 @@
+ }
+
+ if (is_linux || is_android) {
+- cflags += [
+- # Don't warn about printf format problems. This is off by default in gcc
+- # but on in Ubuntu's gcc(!).
+- "-Wno-format",
+- ]
+ cflags_cc += [
+ # Don't warn about hash_map in third-party code.
+ "-Wno-deprecated",
diff --git a/qtwebengine-opensource-src-5.6.0-beta-no-neon.patch
b/qtwebengine-opensource-src-5.6.0-beta-no-neon.patch
new file mode 100644
index 0000000..af9bbf7
--- /dev/null
+++ b/qtwebengine-opensource-src-5.6.0-beta-no-neon.patch
@@ -0,0 +1,15 @@
+diff -ur qtwebengine-opensource-src-5.6.0-beta/src/core/gyp_run.pro
qtwebengine-opensource-src-5.6.0-beta-no-neon/src/core/gyp_run.pro
+--- qtwebengine-opensource-src-5.6.0-beta/src/core/gyp_run.pro 2015-12-14
16:27:24.000000000 +0100
++++ qtwebengine-opensource-src-5.6.0-beta-no-neon/src/core/gyp_run.pro 2016-01-10
17:48:45.689954050 +0100
+@@ -74,7 +74,10 @@
+ # we use arm_neon_optional for ARMv7 and newer and let chromium decide
+ # about the mfpu option.
+ contains(MFPU, "neon")|contains(MFPU, "neon-vfpv4"):
GYP_CONFIG += arm_fpu=\"$$MFPU\" arm_neon=1
+- else:!lessThan(MARMV, 7): GYP_CONFIG += arm_neon=0 arm_neon_optional=1
++ # Disable NEON entirely for now, because it fails to build:
++ #
https://bugzilla.redhat.com/show_bug.cgi?id=1282495
++ # (This line was also missing the required arm_fpu flag, which I added.)
++ # else:!lessThan(MARMV, 7): GYP_CONFIG += arm_fpu=\"$$MFPU\"
arm_neon=0 arm_neon_optional=1
+ else: GYP_CONFIG += arm_fpu=\"$$MFPU\" arm_neon=0 arm_neon_optional=0
+ }
+
diff --git a/qtwebengine-opensource-src-5.6.0-beta-system-icu-utf.patch
b/qtwebengine-opensource-src-5.6.0-beta-system-icu-utf.patch
new file mode 100644
index 0000000..a522e8e
--- /dev/null
+++ b/qtwebengine-opensource-src-5.6.0-beta-system-icu-utf.patch
@@ -0,0 +1,381 @@
+diff -ur
qtwebengine-opensource-src-5.6.0-beta-system-nspr-prtime/src/3rdparty/chromium/base/base.gypi
qtwebengine-opensource-src-5.6.0-beta-system-icu-utf/src/3rdparty/chromium/base/base.gypi
+---
qtwebengine-opensource-src-5.6.0-beta-system-nspr-prtime/src/3rdparty/chromium/base/base.gypi 2016-01-12
03:01:20.875004550 +0100
++++
qtwebengine-opensource-src-5.6.0-beta-system-icu-utf/src/3rdparty/chromium/base/base.gypi 2016-01-12
03:04:12.789946122 +0100
+@@ -621,8 +621,6 @@
+ 'third_party/dmg_fp/dmg_fp.h',
+ 'third_party/dmg_fp/dtoa_wrapper.cc',
+ 'third_party/dmg_fp/g_fmt.cc',
+- 'third_party/icu/icu_utf.cc',
+- 'third_party/icu/icu_utf.h',
+ 'third_party/superfasthash/superfasthash.c',
+ 'third_party/xdg_mime/xdgmime.h',
+ 'thread_task_runner_handle.cc',
+diff -ur
qtwebengine-opensource-src-5.6.0-beta-system-nspr-prtime/src/3rdparty/chromium/base/BUILD.gn
qtwebengine-opensource-src-5.6.0-beta-system-icu-utf/src/3rdparty/chromium/base/BUILD.gn
+---
qtwebengine-opensource-src-5.6.0-beta-system-nspr-prtime/src/3rdparty/chromium/base/BUILD.gn 2016-01-12
03:03:08.040591492 +0100
++++
qtwebengine-opensource-src-5.6.0-beta-system-icu-utf/src/3rdparty/chromium/base/BUILD.gn 2016-01-12
03:04:27.209025094 +0100
+@@ -504,8 +504,6 @@
+ "third_party/dmg_fp/dmg_fp.h",
+ "third_party/dmg_fp/dtoa_wrapper.cc",
+ "third_party/dmg_fp/g_fmt.cc",
+- "third_party/icu/icu_utf.cc",
+- "third_party/icu/icu_utf.h",
+ "third_party/superfasthash/superfasthash.c",
+ "thread_task_runner_handle.cc",
+ "thread_task_runner_handle.h",
+diff -ur
qtwebengine-opensource-src-5.6.0-beta-system-nspr-prtime/src/3rdparty/chromium/base/files/file_path.cc
qtwebengine-opensource-src-5.6.0-beta-system-icu-utf/src/3rdparty/chromium/base/files/file_path.cc
+---
qtwebengine-opensource-src-5.6.0-beta-system-nspr-prtime/src/3rdparty/chromium/base/files/file_path.cc 2015-12-10
18:17:21.000000000 +0100
++++
qtwebengine-opensource-src-5.6.0-beta-system-icu-utf/src/3rdparty/chromium/base/files/file_path.cc 2016-01-12
03:09:08.430565334 +0100
+@@ -20,7 +20,7 @@
+
+ #if defined(OS_MACOSX)
+ #include "base/mac/scoped_cftyperef.h"
+-#include "base/third_party/icu/icu_utf.h"
++#include <unicode/utf.h>
+ #endif
+
+ #if defined(OS_WIN)
+@@ -1140,9 +1140,9 @@
+ int* index) {
+ int codepoint = 0;
+ while (*index < length && codepoint == 0) {
+- // CBU8_NEXT returns a value < 0 in error cases. For purposes of string
++ // U8_NEXT returns a value < 0 in error cases. For purposes of string
+ // comparison, we just use that value and flag it with DCHECK.
+- CBU8_NEXT(string, *index, length, codepoint);
++ U8_NEXT(string, *index, length, codepoint);
+ DCHECK_GT(codepoint, 0);
+ if (codepoint > 0) {
+ // Check if there is a subtable for this upper byte.
+diff -ur
qtwebengine-opensource-src-5.6.0-beta-system-nspr-prtime/src/3rdparty/chromium/base/json/json_parser.cc
qtwebengine-opensource-src-5.6.0-beta-system-icu-utf/src/3rdparty/chromium/base/json/json_parser.cc
+---
qtwebengine-opensource-src-5.6.0-beta-system-nspr-prtime/src/3rdparty/chromium/base/json/json_parser.cc 2015-12-10
18:17:21.000000000 +0100
++++
qtwebengine-opensource-src-5.6.0-beta-system-icu-utf/src/3rdparty/chromium/base/json/json_parser.cc 2016-01-12
03:12:23.701634827 +0100
+@@ -14,7 +14,7 @@
+ #include "base/strings/stringprintf.h"
+ #include "base/strings/utf_string_conversion_utils.h"
+ #include "base/strings/utf_string_conversions.h"
+-#include "base/third_party/icu/icu_utf.h"
++#include <unicode/utf.h>
+ #include "base/values.h"
+
+ namespace base {
+@@ -616,8 +616,8 @@
+ int32 next_char = 0;
+
+ while (CanConsume(1)) {
+- pos_ = start_pos_ + index_; // CBU8_NEXT is postcrement.
+- CBU8_NEXT(start_pos_, index_, length, next_char);
++ pos_ = start_pos_ + index_; // U8_NEXT is postcrement.
++ U8_NEXT(start_pos_, index_, length, next_char);
+ if (next_char < 0 || !IsValidCharacter(next_char)) {
+ ReportError(JSONReader::JSON_UNSUPPORTED_ENCODING, 1);
+ return false;
+@@ -710,7 +710,7 @@
+ return false;
+ }
+ } else if (next_char == '"') {
+- --index_; // Rewind by one because of CBU8_NEXT.
++ --index_; // Rewind by one because of U8_NEXT.
+ out->Swap(&string);
+ return true;
+ } else {
+@@ -750,10 +750,10 @@
+
+ // If this is a high surrogate, consume the next code unit to get the
+ // low surrogate.
+- if (CBU16_IS_SURROGATE(code_unit16_high)) {
++ if (U16_IS_SURROGATE(code_unit16_high)) {
+ // Make sure this is the high surrogate. If not, it's an encoding
+ // error.
+- if (!CBU16_IS_SURROGATE_LEAD(code_unit16_high))
++ if (!U16_IS_SURROGATE_LEAD(code_unit16_high))
+ return false;
+
+ // Make sure that the token has more characters to consume the
+@@ -770,24 +770,24 @@
+
+ NextNChars(3);
+
+- if (!CBU16_IS_TRAIL(code_unit16_low)) {
++ if (!U16_IS_TRAIL(code_unit16_low)) {
+ return false;
+ }
+
+- uint32 code_point = CBU16_GET_SUPPLEMENTARY(code_unit16_high,
+- code_unit16_low);
++ uint32 code_point = U16_GET_SUPPLEMENTARY(code_unit16_high,
++ code_unit16_low);
+ if (!IsValidCharacter(code_point))
+ return false;
+
+ offset = 0;
+- CBU8_APPEND_UNSAFE(code_unit8, offset, code_point);
++ U8_APPEND_UNSAFE(code_unit8, offset, code_point);
+ } else {
+ // Not a surrogate.
+- DCHECK(CBU16_IS_SINGLE(code_unit16_high));
++ DCHECK(U16_IS_SINGLE(code_unit16_high));
+ if (!IsValidCharacter(code_unit16_high))
+ return false;
+
+- CBU8_APPEND_UNSAFE(code_unit8, offset, code_unit16_high);
++ U8_APPEND_UNSAFE(code_unit8, offset, code_unit16_high);
+ }
+
+ dest_string->append(code_unit8);
+@@ -804,9 +804,9 @@
+ } else {
+ char utf8_units[4] = { 0 };
+ int offset = 0;
+- CBU8_APPEND_UNSAFE(utf8_units, offset, point);
++ U8_APPEND_UNSAFE(utf8_units, offset, point);
+ dest->Convert();
+- // CBU8_APPEND_UNSAFE can overwrite up to 4 bytes, so utf8_units may not be
++ // U8_APPEND_UNSAFE can overwrite up to 4 bytes, so utf8_units may not be
+ // zero terminated at this point. |offset| contains the correct length.
+ dest->AppendString(std::string(utf8_units, offset));
+ }
+diff -ur
qtwebengine-opensource-src-5.6.0-beta-system-nspr-prtime/src/3rdparty/chromium/base/json/string_escape.cc
qtwebengine-opensource-src-5.6.0-beta-system-icu-utf/src/3rdparty/chromium/base/json/string_escape.cc
+---
qtwebengine-opensource-src-5.6.0-beta-system-nspr-prtime/src/3rdparty/chromium/base/json/string_escape.cc 2015-12-10
18:17:21.000000000 +0100
++++
qtwebengine-opensource-src-5.6.0-beta-system-icu-utf/src/3rdparty/chromium/base/json/string_escape.cc 2016-01-12
03:12:46.093757468 +0100
+@@ -10,7 +10,7 @@
+ #include "base/strings/stringprintf.h"
+ #include "base/strings/utf_string_conversion_utils.h"
+ #include "base/strings/utf_string_conversions.h"
+-#include "base/third_party/icu/icu_utf.h"
++#include <unicode/utf.h>
+
+ namespace base {
+
+diff -ur
qtwebengine-opensource-src-5.6.0-beta-system-nspr-prtime/src/3rdparty/chromium/base/strings/pattern.cc
qtwebengine-opensource-src-5.6.0-beta-system-icu-utf/src/3rdparty/chromium/base/strings/pattern.cc
+---
qtwebengine-opensource-src-5.6.0-beta-system-nspr-prtime/src/3rdparty/chromium/base/strings/pattern.cc 2015-12-10
18:17:21.000000000 +0100
++++
qtwebengine-opensource-src-5.6.0-beta-system-icu-utf/src/3rdparty/chromium/base/strings/pattern.cc 2016-01-12
03:14:17.884254687 +0100
+@@ -4,13 +4,13 @@
+
+ #include "base/strings/pattern.h"
+
+-#include "base/third_party/icu/icu_utf.h"
++#include <unicode/utf.h>
+
+ namespace base {
+
+ namespace {
+
+-static bool IsWildcard(base_icu::UChar32 character) {
++static bool IsWildcard(UChar32 character) {
+ return character == '*' || character == '?';
+ }
+
+@@ -37,9 +37,9 @@
+ // Check if the chars match, if so, increment the ptrs.
+ const CHAR* pattern_next = *pattern;
+ const CHAR* string_next = *string;
+- base_icu::UChar32 pattern_char = next(&pattern_next, pattern_end);
++ UChar32 pattern_char = next(&pattern_next, pattern_end);
+ if (pattern_char == next(&string_next, string_end) &&
+- pattern_char != CBU_SENTINEL) {
++ pattern_char != U_SENTINEL) {
+ *pattern = pattern_next;
+ *string = string_next;
+ } else {
+@@ -133,20 +133,20 @@
+ }
+
+ struct NextCharUTF8 {
+- base_icu::UChar32 operator()(const char** p, const char* end) {
+- base_icu::UChar32 c;
++ UChar32 operator()(const char** p, const char* end) {
++ UChar32 c;
+ int offset = 0;
+- CBU8_NEXT(*p, offset, end - *p, c);
++ U8_NEXT(*p, offset, end - *p, c);
+ *p += offset;
+ return c;
+ }
+ };
+
+ struct NextCharUTF16 {
+- base_icu::UChar32 operator()(const char16** p, const char16* end) {
+- base_icu::UChar32 c;
++ UChar32 operator()(const char16** p, const char16* end) {
++ UChar32 c;
+ int offset = 0;
+- CBU16_NEXT(*p, offset, end - *p, c);
++ U16_NEXT(*p, offset, end - *p, c);
+ *p += offset;
+ return c;
+ }
+diff -ur
qtwebengine-opensource-src-5.6.0-beta-system-nspr-prtime/src/3rdparty/chromium/base/strings/string_split.cc
qtwebengine-opensource-src-5.6.0-beta-system-icu-utf/src/3rdparty/chromium/base/strings/string_split.cc
+---
qtwebengine-opensource-src-5.6.0-beta-system-nspr-prtime/src/3rdparty/chromium/base/strings/string_split.cc 2015-12-10
18:17:21.000000000 +0100
++++
qtwebengine-opensource-src-5.6.0-beta-system-icu-utf/src/3rdparty/chromium/base/strings/string_split.cc 2016-01-12
03:14:39.106365912 +0100
+@@ -6,7 +6,7 @@
+
+ #include "base/logging.h"
+ #include "base/strings/string_util.h"
+-#include "base/third_party/icu/icu_utf.h"
++#include <unicode/utf.h>
+
+ namespace base {
+
+@@ -201,7 +201,7 @@
+ void SplitString(const string16& str,
+ char16 c,
+ std::vector<string16>* result) {
+- DCHECK(CBU16_IS_SINGLE(c));
++ DCHECK(U16_IS_SINGLE(c));
+ *result = SplitStringT<string16, string16, char16>(
+ str, c, TRIM_WHITESPACE, SPLIT_WANT_ALL);
+
+@@ -274,7 +274,7 @@
+ void SplitStringDontTrim(StringPiece16 str,
+ char16 c,
+ std::vector<string16>* result) {
+- DCHECK(CBU16_IS_SINGLE(c));
++ DCHECK(U16_IS_SINGLE(c));
+ *result = SplitStringT<string16, string16, char16>(
+ str, c, KEEP_WHITESPACE, SPLIT_WANT_ALL);
+ }
+diff -ur
qtwebengine-opensource-src-5.6.0-beta-system-nspr-prtime/src/3rdparty/chromium/base/strings/string_util.cc
qtwebengine-opensource-src-5.6.0-beta-system-icu-utf/src/3rdparty/chromium/base/strings/string_util.cc
+---
qtwebengine-opensource-src-5.6.0-beta-system-nspr-prtime/src/3rdparty/chromium/base/strings/string_util.cc 2015-12-10
18:17:21.000000000 +0100
++++
qtwebengine-opensource-src-5.6.0-beta-system-icu-utf/src/3rdparty/chromium/base/strings/string_util.cc 2016-01-12
03:15:00.981480560 +0100
+@@ -24,7 +24,7 @@
+ #include "base/strings/string_split.h"
+ #include "base/strings/utf_string_conversion_utils.h"
+ #include "base/strings/utf_string_conversions.h"
+-#include "base/third_party/icu/icu_utf.h"
++#include <unicode/utf.h>
+ #include "build/build_config.h"
+
+ // Remove when this entire file is in the base namespace.
+@@ -274,19 +274,19 @@
+ return;
+ }
+ DCHECK_LE(byte_size, static_cast<uint32>(kint32max));
+- // Note: This cast is necessary because CBU8_NEXT uses int32s.
++ // Note: This cast is necessary because U8_NEXT uses int32s.
+ int32 truncation_length = static_cast<int32>(byte_size);
+ int32 char_index = truncation_length - 1;
+ const char* data = input.data();
+
+- // Using CBU8, we will move backwards from the truncation point
++ // Using U8, we will move backwards from the truncation point
+ // to the beginning of the string looking for a valid UTF8
+ // character. Once a full UTF8 character is found, we will
+ // truncate the string to the end of that character.
+ while (char_index >= 0) {
+ int32 prev = char_index;
+- base_icu::UChar32 code_point = 0;
+- CBU8_NEXT(data, char_index, truncation_length, code_point);
++ UChar32 code_point = 0;
++ U8_NEXT(data, char_index, truncation_length, code_point);
+ if (!IsValidCharacter(code_point) ||
+ !IsValidCodepoint(code_point)) {
+ char_index = prev - 1;
+@@ -447,7 +447,7 @@
+
+ while (char_index < src_len) {
+ int32 code_point;
+- CBU8_NEXT(src, char_index, src_len, code_point);
++ U8_NEXT(src, char_index, src_len, code_point);
+ if (!IsValidCharacter(code_point))
+ return false;
+ }
+diff -ur
qtwebengine-opensource-src-5.6.0-beta-system-nspr-prtime/src/3rdparty/chromium/base/strings/utf_string_conversion_utils.cc
qtwebengine-opensource-src-5.6.0-beta-system-icu-utf/src/3rdparty/chromium/base/strings/utf_string_conversion_utils.cc
+---
qtwebengine-opensource-src-5.6.0-beta-system-nspr-prtime/src/3rdparty/chromium/base/strings/utf_string_conversion_utils.cc 2015-12-10
18:17:21.000000000 +0100
++++
qtwebengine-opensource-src-5.6.0-beta-system-icu-utf/src/3rdparty/chromium/base/strings/utf_string_conversion_utils.cc 2016-01-12
03:15:27.384618939 +0100
+@@ -4,7 +4,7 @@
+
+ #include "base/strings/utf_string_conversion_utils.h"
+
+-#include "base/third_party/icu/icu_utf.h"
++#include <unicode/utf.h>
+
+ namespace base {
+
+@@ -18,7 +18,7 @@
+ // use a signed type for code_point. But this function returns false
+ // on error anyway, so code_point_out is unsigned.
+ int32 code_point;
+- CBU8_NEXT(src, *char_index, src_len, code_point);
++ U8_NEXT(src, *char_index, src_len, code_point);
+ *code_point_out = static_cast<uint32>(code_point);
+
+ // The ICU macro above moves to the next char, we want to point to the last
+@@ -33,16 +33,16 @@
+ int32 src_len,
+ int32* char_index,
+ uint32* code_point) {
+- if (CBU16_IS_SURROGATE(src[*char_index])) {
+- if (!CBU16_IS_SURROGATE_LEAD(src[*char_index]) ||
++ if (U16_IS_SURROGATE(src[*char_index])) {
++ if (!U16_IS_SURROGATE_LEAD(src[*char_index]) ||
+ *char_index + 1 >= src_len ||
+- !CBU16_IS_TRAIL(src[*char_index + 1])) {
++ !U16_IS_TRAIL(src[*char_index + 1])) {
+ // Invalid surrogate pair.
+ return false;
+ }
+
+ // Valid surrogate pair.
+- *code_point = CBU16_GET_SUPPLEMENTARY(src[*char_index],
++ *code_point = U16_GET_SUPPLEMENTARY(src[*char_index],
+ src[*char_index + 1]);
+ (*char_index)++;
+ } else {
+@@ -76,30 +76,30 @@
+ }
+
+
+- // CBU8_APPEND_UNSAFE can append up to 4 bytes.
++ // U8_APPEND_UNSAFE can append up to 4 bytes.
+ size_t char_offset = output->length();
+ size_t original_char_offset = char_offset;
+- output->resize(char_offset + CBU8_MAX_LENGTH);
++ output->resize(char_offset + U8_MAX_LENGTH);
+
+- CBU8_APPEND_UNSAFE(&(*output)[0], char_offset, code_point);
++ U8_APPEND_UNSAFE(&(*output)[0], char_offset, code_point);
+
+- // CBU8_APPEND_UNSAFE will advance our pointer past the inserted character, so
++ // U8_APPEND_UNSAFE will advance our pointer past the inserted character, so
+ // it will represent the new length of the string.
+ output->resize(char_offset);
+ return char_offset - original_char_offset;
+ }
+
+ size_t WriteUnicodeCharacter(uint32 code_point, string16* output) {
+- if (CBU16_LENGTH(code_point) == 1) {
++ if (U16_LENGTH(code_point) == 1) {
+ // Thie code point is in the Basic Multilingual Plane (BMP).
+ output->push_back(static_cast<char16>(code_point));
+ return 1;
+ }
+ // Non-BMP characters use a double-character encoding.
+ size_t char_offset = output->length();
+- output->resize(char_offset + CBU16_MAX_LENGTH);
+- CBU16_APPEND_UNSAFE(&(*output)[0], char_offset, code_point);
+- return CBU16_MAX_LENGTH;
++ output->resize(char_offset + U16_MAX_LENGTH);
++ U16_APPEND_UNSAFE(&(*output)[0], char_offset, code_point);
++ return U16_MAX_LENGTH;
+ }
+
+ // Generalized Unicode converter -----------------------------------------------
+diff -ur
qtwebengine-opensource-src-5.6.0-beta-system-nspr-prtime/src/3rdparty/chromium/ui/gfx/utf16_indexing.cc
qtwebengine-opensource-src-5.6.0-beta-system-icu-utf/src/3rdparty/chromium/ui/gfx/utf16_indexing.cc
+---
qtwebengine-opensource-src-5.6.0-beta-system-nspr-prtime/src/3rdparty/chromium/ui/gfx/utf16_indexing.cc 2015-12-10
18:17:21.000000000 +0100
++++
qtwebengine-opensource-src-5.6.0-beta-system-icu-utf/src/3rdparty/chromium/ui/gfx/utf16_indexing.cc 2016-01-12
03:15:51.205743785 +0100
+@@ -5,13 +5,13 @@
+ #include "ui/gfx/utf16_indexing.h"
+
+ #include "base/logging.h"
+-#include "base/third_party/icu/icu_utf.h"
++#include <unicode/utf.h>
+
+ namespace gfx {
+
+ bool IsValidCodePointIndex(const base::string16& s, size_t index) {
+ return index == 0 || index == s.length() ||
+- !(CBU16_IS_TRAIL(s[index]) && CBU16_IS_LEAD(s[index - 1]));
++ !(U16_IS_TRAIL(s[index]) && U16_IS_LEAD(s[index - 1]));
+ }
+
+ ptrdiff_t UTF16IndexToOffset(const base::string16& s, size_t base, size_t pos) {
diff --git a/qtwebengine-opensource-src-5.6.0-beta-system-nspr-prtime.patch
b/qtwebengine-opensource-src-5.6.0-beta-system-nspr-prtime.patch
new file mode 100644
index 0000000..dffa81e
--- /dev/null
+++ b/qtwebengine-opensource-src-5.6.0-beta-system-nspr-prtime.patch
@@ -0,0 +1,49 @@
+diff -ur qtwebengine-opensource-src-5.6.0-beta/src/3rdparty/chromium/base/base.gypi
qtwebengine-opensource-src-5.6.0-beta-system-nspr-prtime/src/3rdparty/chromium/base/base.gypi
+--- qtwebengine-opensource-src-5.6.0-beta/src/3rdparty/chromium/base/base.gypi 2015-12-10
18:17:21.000000000 +0100
++++
qtwebengine-opensource-src-5.6.0-beta-system-nspr-prtime/src/3rdparty/chromium/base/base.gypi 2016-01-12
03:01:20.875004550 +0100
+@@ -623,8 +623,6 @@
+ 'third_party/dmg_fp/g_fmt.cc',
+ 'third_party/icu/icu_utf.cc',
+ 'third_party/icu/icu_utf.h',
+- 'third_party/nspr/prtime.cc',
+- 'third_party/nspr/prtime.h',
+ 'third_party/superfasthash/superfasthash.c',
+ 'third_party/xdg_mime/xdgmime.h',
+ 'thread_task_runner_handle.cc',
+diff -ur qtwebengine-opensource-src-5.6.0-beta/src/3rdparty/chromium/base/BUILD.gn
qtwebengine-opensource-src-5.6.0-beta-system-nspr-prtime/src/3rdparty/chromium/base/BUILD.gn
+--- qtwebengine-opensource-src-5.6.0-beta/src/3rdparty/chromium/base/BUILD.gn 2015-12-10
18:17:21.000000000 +0100
++++
qtwebengine-opensource-src-5.6.0-beta-system-nspr-prtime/src/3rdparty/chromium/base/BUILD.gn 2016-01-12
03:03:08.040591492 +0100
+@@ -506,8 +506,6 @@
+ "third_party/dmg_fp/g_fmt.cc",
+ "third_party/icu/icu_utf.cc",
+ "third_party/icu/icu_utf.h",
+- "third_party/nspr/prtime.cc",
+- "third_party/nspr/prtime.h",
+ "third_party/superfasthash/superfasthash.c",
+ "thread_task_runner_handle.cc",
+ "thread_task_runner_handle.h",
+diff -ur
qtwebengine-opensource-src-5.6.0-beta/src/3rdparty/chromium/base/time/pr_time_unittest.cc
qtwebengine-opensource-src-5.6.0-beta-system-nspr-prtime/src/3rdparty/chromium/base/time/pr_time_unittest.cc
+---
qtwebengine-opensource-src-5.6.0-beta/src/3rdparty/chromium/base/time/pr_time_unittest.cc 2015-12-10
18:17:21.000000000 +0100
++++
qtwebengine-opensource-src-5.6.0-beta-system-nspr-prtime/src/3rdparty/chromium/base/time/pr_time_unittest.cc 2016-01-12
03:01:20.876004555 +0100
+@@ -6,7 +6,7 @@
+ #include <time.h>
+
+ #include "base/compiler_specific.h"
+-#include "base/third_party/nspr/prtime.h"
++#include <nspr4/prtime.h>
+ #include "base/time/time.h"
+ #include "testing/gtest/include/gtest/gtest.h"
+
+diff -ur qtwebengine-opensource-src-5.6.0-beta/src/3rdparty/chromium/base/time/time.cc
qtwebengine-opensource-src-5.6.0-beta-system-nspr-prtime/src/3rdparty/chromium/base/time/time.cc
+---
qtwebengine-opensource-src-5.6.0-beta/src/3rdparty/chromium/base/time/time.cc 2015-12-10
18:17:21.000000000 +0100
++++
qtwebengine-opensource-src-5.6.0-beta-system-nspr-prtime/src/3rdparty/chromium/base/time/time.cc 2016-01-12
03:01:20.877004561 +0100
+@@ -13,7 +13,8 @@
+ #include "base/lazy_instance.h"
+ #include "base/logging.h"
+ #include "base/strings/stringprintf.h"
+-#include "base/third_party/nspr/prtime.h"
++
++#include <nspr4/prtime.h>
+
+ namespace base {
+
diff --git a/qtwebengine-opensource-src-5.6.0-no-icudtl-dat.patch
b/qtwebengine-opensource-src-5.6.0-no-icudtl-dat.patch
new file mode 100644
index 0000000..00cbfc2
--- /dev/null
+++ b/qtwebengine-opensource-src-5.6.0-no-icudtl-dat.patch
@@ -0,0 +1,28 @@
+diff -ur qtwebengine-opensource-src-5.6.0/src/core/web_engine_library_info.cpp
qtwebengine-opensource-src-5.6.0-no-icudtl-dat/src/core/web_engine_library_info.cpp
+--- qtwebengine-opensource-src-5.6.0/src/core/web_engine_library_info.cpp 2016-03-03
17:02:28.000000000 +0100
++++
qtwebengine-opensource-src-5.6.0-no-icudtl-dat/src/core/web_engine_library_info.cpp 2016-03-18
03:08:24.385444415 +0100
+@@ -207,24 +207,7 @@
+ #if defined(OS_MACOSX) && defined(QT_MAC_FRAMEWORK_BUILD)
+ return getResourcesPath(frameworkBundle());
+ #else
+- static bool initialized = false;
+ static QString potentialResourcesPath =
QLibraryInfo::location(QLibraryInfo::DataPath) % QLatin1String("/resources");
+- if (!initialized) {
+- initialized = true;
+- if (!QFileInfo::exists(potentialResourcesPath %
QLatin1String("/icudtl.dat"))) {
+- qWarning("Qt WebEngine ICU data not found at %s. Trying parent
directory...", qPrintable(potentialResourcesPath));
+- potentialResourcesPath = QLibraryInfo::location(QLibraryInfo::DataPath);
+- }
+- if (!QFileInfo::exists(potentialResourcesPath %
QLatin1String("/icudtl.dat"))) {
+- qWarning("Qt WebEngine ICU data not found at %s. Trying application
directory...", qPrintable(potentialResourcesPath));
+- potentialResourcesPath = QCoreApplication::applicationDirPath();
+- }
+- if (!QFileInfo::exists(potentialResourcesPath %
QLatin1String("/icudtl.dat"))) {
+- qWarning("Qt WebEngine ICU data not found at %s. Trying fallback
directory... The application MAY NOT work.", qPrintable(potentialResourcesPath));
+- potentialResourcesPath = fallbackDir();
+- }
+- }
+-
+ return potentialResourcesPath;
+ #endif
+ }
diff --git a/qtwebengine-opensource-src-5.6.1-linux-pri.patch
b/qtwebengine-opensource-src-5.6.1-linux-pri.patch
new file mode 100644
index 0000000..16f2767
--- /dev/null
+++ b/qtwebengine-opensource-src-5.6.1-linux-pri.patch
@@ -0,0 +1,29 @@
+diff -ur qtwebengine-opensource-src-5.6.1/src/core/config/linux.pri
qtwebengine-opensource-src-5.6.1-linux-pri/src/core/config/linux.pri
+--- qtwebengine-opensource-src-5.6.1/src/core/config/linux.pri 2016-05-26
20:01:25.000000000 +0200
++++ qtwebengine-opensource-src-5.6.1-linux-pri/src/core/config/linux.pri 2016-06-11
01:17:26.494650774 +0200
+@@ -46,3 +46,25 @@
+ use?(system_icu): GYP_CONFIG += use_system_icu=1 icu_use_data_file_flag=0
+ use?(system_ffmpeg): GYP_CONFIG += use_system_ffmpeg=1
+
++# some more system packages, that are not checked for for some reason
++GYP_CONFIG += \
++ use_system_expat=1 \
++ use_system_re2=1 \
++ use_system_protobuf=1
++
++# yasm is only used on x86, and passing use_system_yasm makes the build fail on
++# other architectures (e.g., ARM), so make it conditional on the architecture
++contains(QT_ARCH, "x86_64")|contains(QT_ARCH, "i386") {
++ GYP_CONFIG += use_system_yasm=1
++}
++
++# link libpci instead of dlopening it, our Qt packaging depends on it anyway
++GYP_CONFIG += linux_link_libpci=1
++
++# run the unbundling script Chromium provides
++CHROMIUM_SRC_DIR = "$$QTWEBENGINE_ROOT/$$getChromiumSrcDir()"
++R_G_F_PY = "$$CHROMIUM_SRC_DIR/build/linux/unbundle/replace_gyp_files.py"
++R_G_F_PY_ARGS =
++for (config, GYP_CONFIG): R_G_F_PY_ARGS += "-D $$config"
++log("Running python $$R_G_F_PY $$R_G_F_PY_ARGS$${EOL}")
++!system("python $$R_G_F_PY $$R_G_F_PY_ARGS"): error("-- unbundling
failed")
diff --git a/qtwebengine-opensource-src-5.6.1-no-sse2.patch
b/qtwebengine-opensource-src-5.6.1-no-sse2.patch
new file mode 100644
index 0000000..b6fed7e
--- /dev/null
+++ b/qtwebengine-opensource-src-5.6.1-no-sse2.patch
@@ -0,0 +1,4896 @@
+diff -Nur
qtwebengine-opensource-src-5.6.1/src/3rdparty/chromium/breakpad/src/build/common.gypi
qtwebengine-opensource-src-5.6.1-no-sse2/src/3rdparty/chromium/breakpad/src/build/common.gypi
+---
qtwebengine-opensource-src-5.6.1/src/3rdparty/chromium/breakpad/src/build/common.gypi 2016-02-10
11:20:27.000000000 +0100
++++
qtwebengine-opensource-src-5.6.1-no-sse2/src/3rdparty/chromium/breakpad/src/build/common.gypi 2016-02-25
00:47:14.856720934 +0100
+@@ -80,8 +80,8 @@
+ # The system root for cross-compiles. Default: none.
+ 'sysroot%': '',
+
+- # On Linux, we build with sse2 for Chromium builds.
+- 'disable_sse2%': 0,
++ # Do not assume SSE2 by default (Fedora patch).
++ 'disable_sse2%': 1
+ },
+
+ 'target_arch%': '<(target_arch)',
+@@ -725,17 +725,13 @@
+ 'conditions': [
+ ['disable_sse2==0', {
+ 'cflags': [
+- '-march=pentium4',
+ '-msse2',
+ '-mfpmath=sse',
+ ],
+ }],
+ ],
+- # -mmmx allows mmintrin.h to be used for mmx intrinsics.
+- # video playback is mmx and sse2 optimized.
+ 'cflags': [
+ '-m32',
+- '-mmmx',
+ ],
+ 'ldflags': [
+ '-m32',
+diff -Nur qtwebengine-opensource-src-5.6.1/src/3rdparty/chromium/build/common.gypi
qtwebengine-opensource-src-5.6.1-no-sse2/src/3rdparty/chromium/build/common.gypi
+--- qtwebengine-opensource-src-5.6.1/src/3rdparty/chromium/build/common.gypi 2016-02-10
11:20:27.000000000 +0100
++++
qtwebengine-opensource-src-5.6.1-no-sse2/src/3rdparty/chromium/build/common.gypi 2016-02-25
00:47:14.883721079 +0100
+@@ -3904,15 +3904,7 @@
+ # value used during computation does not change depending on
+ # how the compiler optimized the code, since the value is
+ # always kept in its specified precision.
+- #
+- # Refer to
http://crbug.com/348761 for rationale behind SSE2
+- # being a minimum requirement for 32-bit Linux builds and
+- #
http://crbug.com/313032 for an example where this has "bit"
+- # us in the past.
+ 'cflags': [
+- '-msse2',
+- '-mfpmath=sse',
+- '-mmmx', # Allows mmintrin.h for MMX intrinsics.
+ '-m32',
+ ],
+ 'ldflags': [
+diff -Nur qtwebengine-opensource-src-5.6.1/src/3rdparty/chromium/cc/BUILD.gn
qtwebengine-opensource-src-5.6.1-no-sse2/src/3rdparty/chromium/cc/BUILD.gn
+--- qtwebengine-opensource-src-5.6.1/src/3rdparty/chromium/cc/BUILD.gn 2016-02-10
11:20:27.000000000 +0100
++++ qtwebengine-opensource-src-5.6.1-no-sse2/src/3rdparty/chromium/cc/BUILD.gn 2016-02-25
00:47:14.892721127 +0100
+@@ -502,13 +502,6 @@
+ "trees/tree_synchronizer.h",
+ ]
+
+- if (target_cpu == "x86" || target_cpu == "x64") {
+- sources += [
+- "raster/texture_compressor_etc1_sse.cc",
+- "raster/texture_compressor_etc1_sse.h",
+- ]
+- }
+-
+ public_deps = [
+ "//cc/base",
+ "//skia",
+@@ -516,6 +509,7 @@
+ deps = [
+ "//base",
+ "//base/third_party/dynamic_annotations",
++ "//cc:cc_opts",
+ "//cc/surfaces:surface_id",
+ "//gpu",
+ "//gpu/command_buffer/client:gles2_interface",
+@@ -533,6 +527,36 @@
+ }
+ }
+
++source_set("cc_opts") {
++ public_deps = [
++ "//cc:cc_opts_sse",
++ ]
++}
++
++source_set("cc_opts_sse") {
++ if (target_cpu == "x86" || target_cpu == "x64") {
++ deps = [
++ "//base",
++ ]
++
++ defines = [ "CC_IMPLEMENTATION=1" ]
++
++ if (!is_debug && (is_win || is_android)) {
++ configs -= [ "//build/config/compiler:optimize" ]
++ configs += [ "//build/config/compiler:optimize_max" ]
++ }
++
++ sources = [
++ "raster/texture_compressor.h",
++ "raster/texture_compressor_etc1.h",
++ "raster/texture_compressor_etc1_sse.cc",
++ "raster/texture_compressor_etc1_sse.h",
++ ]
++
++ cflags = [ "-msse2" ]
++ }
++}
++
+ source_set("test_support") {
+ testonly = true
+ sources = [
+diff -Nur qtwebengine-opensource-src-5.6.1/src/3rdparty/chromium/cc/cc.gyp
qtwebengine-opensource-src-5.6.1-no-sse2/src/3rdparty/chromium/cc/cc.gyp
+--- qtwebengine-opensource-src-5.6.1/src/3rdparty/chromium/cc/cc.gyp 2016-02-10
11:20:27.000000000 +0100
++++ qtwebengine-opensource-src-5.6.1-no-sse2/src/3rdparty/chromium/cc/cc.gyp 2016-02-25
00:47:14.903721186 +0100
+@@ -21,6 +21,7 @@
+ '<(DEPTH)/ui/events/events.gyp:events_base',
+ '<(DEPTH)/ui/gfx/gfx.gyp:gfx',
+ '<(DEPTH)/ui/gfx/gfx.gyp:gfx_geometry',
++ 'cc_opts',
+ ],
+ 'variables': {
+ 'optimize': 'max',
+@@ -563,14 +564,6 @@
+ 'includes': [
+ '../build/android/increase_size_for_speed.gypi',
+ ],
+- 'conditions': [
+- ['target_arch == "ia32" or target_arch == "x64"', {
+- 'sources': [
+- 'raster/texture_compressor_etc1_sse.cc',
+- 'raster/texture_compressor_etc1_sse.h',
+- ],
+- }],
+- ],
+ },
+ {
+ # GN version: //cc/surfaces
+@@ -621,5 +614,41 @@
+ '../build/android/increase_size_for_speed.gypi',
+ ],
+ },
++ {
++ 'target_name': 'cc_opts',
++ 'type': 'static_library',
++ 'conditions': [
++ ['target_arch == "ia32" or target_arch == "x64"', {
++ 'defines': [
++ 'CC_IMPLEMENTATION=1',
++ ],
++ 'dependencies': [
++ 'cc_opts_sse',
++ ]
++ }],
++ ],
++ },
++ {
++ 'target_name': 'cc_opts_sse',
++ 'type': 'static_library',
++ 'dependencies': [
++ '<(DEPTH)/base/base.gyp:base',
++ ],
++ 'conditions': [
++ ['target_arch == "ia32" or target_arch == "x64"', {
++ 'defines': [
++ 'CC_IMPLEMENTATION=1',
++ ],
++ 'sources': [
++ # Conditional compilation for SSE2 code on x86 and x64 machines
++ 'raster/texture_compressor_etc1_sse.cc',
++ 'raster/texture_compressor_etc1_sse.h',
++ ],
++ 'cflags': [
++ '-msse2',
++ ],
++ }],
++ ],
++ },
+ ],
+ }
+diff -Nur qtwebengine-opensource-src-5.6.1/src/3rdparty/chromium/media/base/BUILD.gn
qtwebengine-opensource-src-5.6.1-no-sse2/src/3rdparty/chromium/media/base/BUILD.gn
+--- qtwebengine-opensource-src-5.6.1/src/3rdparty/chromium/media/base/BUILD.gn 2016-02-10
11:20:27.000000000 +0100
++++
qtwebengine-opensource-src-5.6.1-no-sse2/src/3rdparty/chromium/media/base/BUILD.gn 2016-02-25
00:47:14.941721390 +0100
+@@ -270,13 +270,13 @@
+ }
+
+ if (current_cpu == "x86" || current_cpu == "x64") {
+- sources += [
+- "simd/convert_rgb_to_yuv_sse2.cc",
+- "simd/convert_rgb_to_yuv_ssse3.cc",
+- "simd/convert_yuv_to_rgb_x86.cc",
+- "simd/filter_yuv_sse2.cc",
++ sources += [ "simd/convert_yuv_to_rgb_x86.cc" ]
++ deps += [
++ ":media_yasm",
++ ":media_mmx",
++ ":media_sse",
++ ":media_sse2",
+ ]
+- deps += [ ":media_yasm" ]
+ }
+
+ configs += [ "//build/config/compiler:no_size_t_to_int_warning" ]
+@@ -462,10 +462,47 @@
+ }
+
+ if (current_cpu == "x86" || current_cpu == "x64") {
++ source_set("media_mmx") {
++ sources = [ "simd/filter_yuv_mmx.cc" ]
++ configs += [ "//media:media_config" ]
++ if (!is_win) {
++ cflags = [ "-mmmx" ]
++ }
++ }
++
++ source_set("media_sse") {
++ sources = [
++ "simd/sinc_resampler_sse.cc",
++ ]
++ configs += [
++ "//media:media_config",
++ "//media:media_implementation",
++ ]
++ if (!is_win) {
++ cflags = [ "-msse" ]
++ }
++ }
++
++ source_set("media_sse2") {
++ sources = [
++ "simd/convert_rgb_to_yuv_sse2.cc",
++ "simd/convert_rgb_to_yuv_ssse3.cc",
++ "simd/filter_yuv_sse2.cc",
++ ]
++ configs += [
++ "//media:media_config",
++ "//media:media_implementation",
++ ]
++ if (!is_win) {
++ cflags = [ "-msse2" ]
++ }
++ }
++
+ import("//third_party/yasm/yasm_assemble.gni")
+ yasm_assemble("media_yasm") {
+ sources = [
+ "simd/convert_rgb_to_yuv_ssse3.asm",
++ "simd/convert_yuv_to_rgb_mmx.asm",
+ "simd/convert_yuv_to_rgb_sse.asm",
+ "simd/convert_yuva_to_argb_mmx.asm",
+ "simd/empty_register_state_mmx.asm",
+diff -Nur qtwebengine-opensource-src-5.6.1/src/3rdparty/chromium/media/base/media.cc
qtwebengine-opensource-src-5.6.1-no-sse2/src/3rdparty/chromium/media/base/media.cc
+--- qtwebengine-opensource-src-5.6.1/src/3rdparty/chromium/media/base/media.cc 2016-02-10
11:20:27.000000000 +0100
++++
qtwebengine-opensource-src-5.6.1-no-sse2/src/3rdparty/chromium/media/base/media.cc 2016-02-25
00:47:14.954721460 +0100
+@@ -9,6 +9,8 @@
+ #include "base/path_service.h"
+ #include "base/synchronization/lock.h"
+ #include "build/build_config.h"
++#include "media/base/sinc_resampler.h"
++#include "media/base/vector_math.h"
+ #include "media/base/yuv_convert.h"
+
+ #if !defined(MEDIA_DISABLE_FFMPEG)
+@@ -24,6 +26,8 @@
+
+ MediaInitializer() {
+ // Perform initialization of libraries which require runtime CPU detection.
++ vector_math::Initialize();
++ SincResampler::InitializeCPUSpecificFeatures();
+ InitializeCPUSpecificYUVConversions();
+
+ #if !defined(MEDIA_DISABLE_FFMPEG)
+diff -Nur
qtwebengine-opensource-src-5.6.1/src/3rdparty/chromium/media/base/simd/convert_yuv_to_rgb.h
qtwebengine-opensource-src-5.6.1-no-sse2/src/3rdparty/chromium/media/base/simd/convert_yuv_to_rgb.h
+---
qtwebengine-opensource-src-5.6.1/src/3rdparty/chromium/media/base/simd/convert_yuv_to_rgb.h 2016-02-10
11:20:27.000000000 +0100
++++
qtwebengine-opensource-src-5.6.1-no-sse2/src/3rdparty/chromium/media/base/simd/convert_yuv_to_rgb.h 2016-02-25
00:47:14.968721535 +0100
+@@ -63,6 +63,17 @@
+ int rgbstride,
+ YUVType yuv_type);
+
++MEDIA_EXPORT void ConvertYUVToRGB32_MMX(const uint8* yplane,
++ const uint8* uplane,
++ const uint8* vplane,
++ uint8* rgbframe,
++ int width,
++ int height,
++ int ystride,
++ int uvstride,
++ int rgbstride,
++ YUVType yuv_type);
++
+ MEDIA_EXPORT void ConvertYUVAToARGB_MMX(const uint8* yplane,
+ const uint8* uplane,
+ const uint8* vplane,
+@@ -114,6 +125,13 @@
+ // issue on at least Win64. The C-equivalent RowProc versions' prototypes
+ // include the same change to ptrdiff_t to reuse the typedefs.
+
++MEDIA_EXPORT void ConvertYUVToRGB32Row_MMX(const uint8* yplane,
++ const uint8* uplane,
++ const uint8* vplane,
++ uint8* rgbframe,
++ ptrdiff_t width,
++ const int16* convert_table);
++
+ MEDIA_EXPORT void ConvertYUVAToARGBRow_MMX(const uint8* yplane,
+ const uint8* uplane,
+ const uint8* vplane,
+@@ -129,6 +147,14 @@
+ ptrdiff_t width,
+ const int16* convert_table);
+
++MEDIA_EXPORT void ScaleYUVToRGB32Row_MMX(const uint8* y_buf,
++ const uint8* u_buf,
++ const uint8* v_buf,
++ uint8* rgb_buf,
++ ptrdiff_t width,
++ ptrdiff_t source_dx,
++ const int16* convert_table);
++
+ MEDIA_EXPORT void ScaleYUVToRGB32Row_SSE(const uint8* y_buf,
+ const uint8* u_buf,
+ const uint8* v_buf,
+@@ -145,6 +171,14 @@
+ ptrdiff_t source_dx,
+ const int16* convert_table);
+
++MEDIA_EXPORT void LinearScaleYUVToRGB32Row_MMX(const uint8* y_buf,
++ const uint8* u_buf,
++ const uint8* v_buf,
++ uint8* rgb_buf,
++ ptrdiff_t width,
++ ptrdiff_t source_dx,
++ const int16* convert_table);
++
+ MEDIA_EXPORT void LinearScaleYUVToRGB32Row_SSE(const uint8* y_buf,
+ const uint8* u_buf,
+ const uint8* v_buf,
+diff -Nur
qtwebengine-opensource-src-5.6.1/src/3rdparty/chromium/media/base/simd/convert_yuv_to_rgb_mmx.asm
qtwebengine-opensource-src-5.6.1-no-sse2/src/3rdparty/chromium/media/base/simd/convert_yuv_to_rgb_mmx.asm
+---
qtwebengine-opensource-src-5.6.1/src/3rdparty/chromium/media/base/simd/convert_yuv_to_rgb_mmx.asm 1970-01-01
01:00:00.000000000 +0100
++++
qtwebengine-opensource-src-5.6.1-no-sse2/src/3rdparty/chromium/media/base/simd/convert_yuv_to_rgb_mmx.asm 2016-02-25
00:47:14.968721535 +0100
+@@ -0,0 +1,23 @@
++; Copyright (c) 2011 The Chromium Authors. All rights reserved.
++; Use of this source code is governed by a BSD-style license that can be
++; found in the LICENSE file.
++
++%include "third_party/x86inc/x86inc.asm"
++
++;
++; This file uses MMX instructions.
++;
++ SECTION_TEXT
++ CPU MMX
++
++; Use movq to save the output.
++%define MOVQ movq
++
++; extern "C" void ConvertYUVToRGB32Row_MMX(const uint8* y_buf,
++; const uint8* u_buf,
++; const uint8* v_buf,
++; uint8* rgb_buf,
++; ptrdiff_t width,
++; const int16* convert_table);
++%define SYMBOL ConvertYUVToRGB32Row_MMX
++%include "convert_yuv_to_rgb_mmx.inc"
+diff -Nur
qtwebengine-opensource-src-5.6.1/src/3rdparty/chromium/media/base/simd/convert_yuv_to_rgb_x86.cc
qtwebengine-opensource-src-5.6.1-no-sse2/src/3rdparty/chromium/media/base/simd/convert_yuv_to_rgb_x86.cc
+---
qtwebengine-opensource-src-5.6.1/src/3rdparty/chromium/media/base/simd/convert_yuv_to_rgb_x86.cc 2016-02-10
11:20:27.000000000 +0100
++++
qtwebengine-opensource-src-5.6.1-no-sse2/src/3rdparty/chromium/media/base/simd/convert_yuv_to_rgb_x86.cc 2016-02-25
00:47:14.976721578 +0100
+@@ -13,6 +13,34 @@
+
+ namespace media {
+
++void ConvertYUVToRGB32_MMX(const uint8* yplane,
++ const uint8* uplane,
++ const uint8* vplane,
++ uint8* rgbframe,
++ int width,
++ int height,
++ int ystride,
++ int uvstride,
++ int rgbstride,
++ YUVType yuv_type) {
++ unsigned int y_shift = GetVerticalShift(yuv_type);
++ for (int y = 0; y < height; ++y) {
++ uint8* rgb_row = rgbframe + y * rgbstride;
++ const uint8* y_ptr = yplane + y * ystride;
++ const uint8* u_ptr = uplane + (y >> y_shift) * uvstride;
++ const uint8* v_ptr = vplane + (y >> y_shift) * uvstride;
++
++ ConvertYUVToRGB32Row_MMX(y_ptr,
++ u_ptr,
++ v_ptr,
++ rgb_row,
++ width,
++ GetLookupTable(yuv_type));
++ }
++
++ EmptyRegisterState();
++}
++
+ void ConvertYUVAToARGB_MMX(const uint8* yplane,
+ const uint8* uplane,
+ const uint8* vplane,
+diff -Nur
qtwebengine-opensource-src-5.6.1/src/3rdparty/chromium/media/base/simd/filter_yuv.h
qtwebengine-opensource-src-5.6.1-no-sse2/src/3rdparty/chromium/media/base/simd/filter_yuv.h
+---
qtwebengine-opensource-src-5.6.1/src/3rdparty/chromium/media/base/simd/filter_yuv.h 2016-02-10
11:20:27.000000000 +0100
++++
qtwebengine-opensource-src-5.6.1-no-sse2/src/3rdparty/chromium/media/base/simd/filter_yuv.h 2016-02-25
00:47:14.977721583 +0100
+@@ -19,6 +19,12 @@
+ int source_width,
+ uint8 source_y_fraction);
+
++MEDIA_EXPORT void FilterYUVRows_MMX(uint8* ybuf,
++ const uint8* y0_ptr,
++ const uint8* y1_ptr,
++ int source_width,
++ uint8 source_y_fraction);
++
+ MEDIA_EXPORT void FilterYUVRows_SSE2(uint8* ybuf,
+ const uint8* y0_ptr,
+ const uint8* y1_ptr,
+diff -Nur
qtwebengine-opensource-src-5.6.1/src/3rdparty/chromium/media/base/simd/filter_yuv_mmx.cc
qtwebengine-opensource-src-5.6.1-no-sse2/src/3rdparty/chromium/media/base/simd/filter_yuv_mmx.cc
+---
qtwebengine-opensource-src-5.6.1/src/3rdparty/chromium/media/base/simd/filter_yuv_mmx.cc 1970-01-01
01:00:00.000000000 +0100
++++
qtwebengine-opensource-src-5.6.1-no-sse2/src/3rdparty/chromium/media/base/simd/filter_yuv_mmx.cc 2016-02-25
00:47:14.978721589 +0100
+@@ -0,0 +1,79 @@
++// Copyright (c) 2011 The Chromium Authors. All rights reserved.
++// Use of this source code is governed by a BSD-style license that can be
++// found in the LICENSE file.
++
++#if defined(_MSC_VER)
++#include <intrin.h>
++#else
++#include <mmintrin.h>
++#endif
++
++#include "build/build_config.h"
++#include "media/base/simd/filter_yuv.h"
++
++namespace media {
++
++#if defined(COMPILER_MSVC)
++// Warning 4799 is about calling emms before the function exits.
++// We calls emms in a frame level so suppress this warning.
++#pragma warning(push)
++#pragma warning(disable: 4799)
++#endif
++
++void FilterYUVRows_MMX(uint8* dest,
++ const uint8* src0,
++ const uint8* src1,
++ int width,
++ uint8 fraction) {
++ int pixel = 0;
++
++ // Process the unaligned bytes first.
++ int unaligned_width =
++ (8 - (reinterpret_cast<uintptr_t>(dest) & 7)) & 7;
++ while (pixel < width && pixel < unaligned_width) {
++ dest[pixel] = (src0[pixel] * (256 - fraction) +
++ src1[pixel] * fraction) >> 8;
++ ++pixel;
++ }
++
++ __m64 zero = _mm_setzero_si64();
++ __m64 src1_fraction = _mm_set1_pi16(fraction);
++ __m64 src0_fraction = _mm_set1_pi16(256 - fraction);
++ const __m64* src0_64 = reinterpret_cast<const __m64*>(src0 + pixel);
++ const __m64* src1_64 = reinterpret_cast<const __m64*>(src1 + pixel);
++ __m64* dest64 = reinterpret_cast<__m64*>(dest + pixel);
++ __m64* end64 = reinterpret_cast<__m64*>(
++ reinterpret_cast<uintptr_t>(dest + width) & ~7);
++
++ while (dest64 < end64) {
++ __m64 src0 = *src0_64++;
++ __m64 src1 = *src1_64++;
++ __m64 src2 = _mm_unpackhi_pi8(src0, zero);
++ __m64 src3 = _mm_unpackhi_pi8(src1, zero);
++ src0 = _mm_unpacklo_pi8(src0, zero);
++ src1 = _mm_unpacklo_pi8(src1, zero);
++ src0 = _mm_mullo_pi16(src0, src0_fraction);
++ src1 = _mm_mullo_pi16(src1, src1_fraction);
++ src2 = _mm_mullo_pi16(src2, src0_fraction);
++ src3 = _mm_mullo_pi16(src3, src1_fraction);
++ src0 = _mm_add_pi16(src0, src1);
++ src2 = _mm_add_pi16(src2, src3);
++ src0 = _mm_srli_pi16(src0, 8);
++ src2 = _mm_srli_pi16(src2, 8);
++ src0 = _mm_packs_pu16(src0, src2);
++ *dest64++ = src0;
++ pixel += 8;
++ }
++
++ while (pixel < width) {
++ dest[pixel] = (src0[pixel] * (256 - fraction) +
++ src1[pixel] * fraction) >> 8;
++ ++pixel;
++ }
++}
++
++#if defined(COMPILER_MSVC)
++#pragma warning(pop)
++#endif
++
++} // namespace media
+diff -Nur
qtwebengine-opensource-src-5.6.1/src/3rdparty/chromium/media/base/simd/sinc_resampler_sse.cc
qtwebengine-opensource-src-5.6.1-no-sse2/src/3rdparty/chromium/media/base/simd/sinc_resampler_sse.cc
+---
qtwebengine-opensource-src-5.6.1/src/3rdparty/chromium/media/base/simd/sinc_resampler_sse.cc 1970-01-01
01:00:00.000000000 +0100
++++
qtwebengine-opensource-src-5.6.1-no-sse2/src/3rdparty/chromium/media/base/simd/sinc_resampler_sse.cc 2016-02-25
00:47:14.978721589 +0100
+@@ -0,0 +1,50 @@
++// Copyright 2013 The Chromium Authors. All rights reserved.
++// Use of this source code is governed by a BSD-style license that can be
++// found in the LICENSE file.
++
++#include "media/base/sinc_resampler.h"
++
++#include <xmmintrin.h>
++
++namespace media {
++
++float SincResampler::Convolve_SSE(const float* input_ptr, const float* k1,
++ const float* k2,
++ double kernel_interpolation_factor) {
++ __m128 m_input;
++ __m128 m_sums1 = _mm_setzero_ps();
++ __m128 m_sums2 = _mm_setzero_ps();
++
++ // Based on |input_ptr| alignment, we need to use loadu or load. Unrolling
++ // these loops hurt performance in local testing.
++ if (reinterpret_cast<uintptr_t>(input_ptr) & 0x0F) {
++ for (int i = 0; i < kKernelSize; i += 4) {
++ m_input = _mm_loadu_ps(input_ptr + i);
++ m_sums1 = _mm_add_ps(m_sums1, _mm_mul_ps(m_input, _mm_load_ps(k1 + i)));
++ m_sums2 = _mm_add_ps(m_sums2, _mm_mul_ps(m_input, _mm_load_ps(k2 + i)));
++ }
++ } else {
++ for (int i = 0; i < kKernelSize; i += 4) {
++ m_input = _mm_load_ps(input_ptr + i);
++ m_sums1 = _mm_add_ps(m_sums1, _mm_mul_ps(m_input, _mm_load_ps(k1 + i)));
++ m_sums2 = _mm_add_ps(m_sums2, _mm_mul_ps(m_input, _mm_load_ps(k2 + i)));
++ }
++ }
++
++ // Linearly interpolate the two "convolutions".
++ m_sums1 = _mm_mul_ps(m_sums1, _mm_set_ps1(
++ static_cast<float>(1.0 - kernel_interpolation_factor)));
++ m_sums2 = _mm_mul_ps(m_sums2, _mm_set_ps1(
++ static_cast<float>(kernel_interpolation_factor)));
++ m_sums1 = _mm_add_ps(m_sums1, m_sums2);
++
++ // Sum components together.
++ float result;
++ m_sums2 = _mm_add_ps(_mm_movehl_ps(m_sums1, m_sums1), m_sums1);
++ _mm_store_ss(&result, _mm_add_ss(m_sums2, _mm_shuffle_ps(
++ m_sums2, m_sums2, 1)));
++
++ return result;
++}
++
++} // namespace media
+diff -Nur
qtwebengine-opensource-src-5.6.1/src/3rdparty/chromium/media/base/simd/vector_math_sse.cc
qtwebengine-opensource-src-5.6.1-no-sse2/src/3rdparty/chromium/media/base/simd/vector_math_sse.cc
+---
qtwebengine-opensource-src-5.6.1/src/3rdparty/chromium/media/base/simd/vector_math_sse.cc 1970-01-01
01:00:00.000000000 +0100
++++
qtwebengine-opensource-src-5.6.1-no-sse2/src/3rdparty/chromium/media/base/simd/vector_math_sse.cc 2016-02-25
00:47:14.978721589 +0100
+@@ -0,0 +1,118 @@
++// Copyright 2013 The Chromium Authors. All rights reserved.
++// Use of this source code is governed by a BSD-style license that can be
++// found in the LICENSE file.
++
++#include "media/base/vector_math_testing.h"
++
++#include <algorithm>
++
++#include <xmmintrin.h> // NOLINT
++
++namespace media {
++namespace vector_math {
++
++void FMUL_SSE(const float src[], float scale, int len, float dest[]) {
++ const int rem = len % 4;
++ const int last_index = len - rem;
++ __m128 m_scale = _mm_set_ps1(scale);
++ for (int i = 0; i < last_index; i += 4)
++ _mm_store_ps(dest + i, _mm_mul_ps(_mm_load_ps(src + i), m_scale));
++
++ // Handle any remaining values that wouldn't fit in an SSE pass.
++ for (int i = last_index; i < len; ++i)
++ dest[i] = src[i] * scale;
++}
++
++void FMAC_SSE(const float src[], float scale, int len, float dest[]) {
++ const int rem = len % 4;
++ const int last_index = len - rem;
++ __m128 m_scale = _mm_set_ps1(scale);
++ for (int i = 0; i < last_index; i += 4) {
++ _mm_store_ps(dest + i, _mm_add_ps(_mm_load_ps(dest + i),
++ _mm_mul_ps(_mm_load_ps(src + i), m_scale)));
++ }
++
++ // Handle any remaining values that wouldn't fit in an SSE pass.
++ for (int i = last_index; i < len; ++i)
++ dest[i] += src[i] * scale;
++}
++
++// Convenience macro to extract float 0 through 3 from the vector |a|. This is
++// needed because compilers other than clang don't support access via
++// operator[]().
++#define EXTRACT_FLOAT(a, i) \
++ (i == 0 ? \
++ _mm_cvtss_f32(a) : \
++ _mm_cvtss_f32(_mm_shuffle_ps(a, a, i)))
++
++std::pair<float, float> EWMAAndMaxPower_SSE(
++ float initial_value, const float src[], int len, float smoothing_factor) {
++ // When the recurrence is unrolled, we see that we can split it into 4
++ // separate lanes of evaluation:
++ //
++ // y[n] = a(S[n]^2) + (1-a)(y[n-1])
++ // = a(S[n]^2) + (1-a)^1(aS[n-1]^2) + (1-a)^2(aS[n-2]^2) + ...
++ // = z[n] + (1-a)^1(z[n-1]) + (1-a)^2(z[n-2]) + (1-a)^3(z[n-3])
++ //
++ // where z[n] = a(S[n]^2) + (1-a)^4(z[n-4]) + (1-a)^8(z[n-8]) + ...
++ //
++ // Thus, the strategy here is to compute z[n], z[n-1], z[n-2], and z[n-3] in
++ // each of the 4 lanes, and then combine them to give y[n].
++
++ const int rem = len % 4;
++ const int last_index = len - rem;
++
++ const __m128 smoothing_factor_x4 = _mm_set_ps1(smoothing_factor);
++ const float weight_prev = 1.0f - smoothing_factor;
++ const __m128 weight_prev_x4 = _mm_set_ps1(weight_prev);
++ const __m128 weight_prev_squared_x4 =
++ _mm_mul_ps(weight_prev_x4, weight_prev_x4);
++ const __m128 weight_prev_4th_x4 =
++ _mm_mul_ps(weight_prev_squared_x4, weight_prev_squared_x4);
++
++ // Compute z[n], z[n-1], z[n-2], and z[n-3] in parallel in lanes 3, 2, 1 and
++ // 0, respectively.
++ __m128 max_x4 = _mm_setzero_ps();
++ __m128 ewma_x4 = _mm_setr_ps(0.0f, 0.0f, 0.0f, initial_value);
++ int i;
++ for (i = 0; i < last_index; i += 4) {
++ ewma_x4 = _mm_mul_ps(ewma_x4, weight_prev_4th_x4);
++ const __m128 sample_x4 = _mm_load_ps(src + i);
++ const __m128 sample_squared_x4 = _mm_mul_ps(sample_x4, sample_x4);
++ max_x4 = _mm_max_ps(max_x4, sample_squared_x4);
++ // Note: The compiler optimizes this to a single multiply-and-accumulate
++ // instruction:
++ ewma_x4 = _mm_add_ps(ewma_x4,
++ _mm_mul_ps(sample_squared_x4, smoothing_factor_x4));
++ }
++
++ // y[n] = z[n] + (1-a)^1(z[n-1]) + (1-a)^2(z[n-2]) + (1-a)^3(z[n-3])
++ float ewma = EXTRACT_FLOAT(ewma_x4, 3);
++ ewma_x4 = _mm_mul_ps(ewma_x4, weight_prev_x4);
++ ewma += EXTRACT_FLOAT(ewma_x4, 2);
++ ewma_x4 = _mm_mul_ps(ewma_x4, weight_prev_x4);
++ ewma += EXTRACT_FLOAT(ewma_x4, 1);
++ ewma_x4 = _mm_mul_ss(ewma_x4, weight_prev_x4);
++ ewma += EXTRACT_FLOAT(ewma_x4, 0);
++
++ // Fold the maximums together to get the overall maximum.
++ max_x4 = _mm_max_ps(max_x4,
++ _mm_shuffle_ps(max_x4, max_x4, _MM_SHUFFLE(3, 3, 1, 1)));
++ max_x4 = _mm_max_ss(max_x4, _mm_shuffle_ps(max_x4, max_x4, 2));
++
++ std::pair<float, float> result(ewma, EXTRACT_FLOAT(max_x4, 0));
++
++ // Handle remaining values at the end of |src|.
++ for (; i < len; ++i) {
++ result.first *= weight_prev;
++ const float sample = src[i];
++ const float sample_squared = sample * sample;
++ result.first += sample_squared * smoothing_factor;
++ result.second = std::max(result.second, sample_squared);
++ }
++
++ return result;
++}
++
++} // namespace vector_math
++} // namespace media
+diff -Nur
qtwebengine-opensource-src-5.6.1/src/3rdparty/chromium/media/base/sinc_resampler.cc
qtwebengine-opensource-src-5.6.1-no-sse2/src/3rdparty/chromium/media/base/sinc_resampler.cc
+---
qtwebengine-opensource-src-5.6.1/src/3rdparty/chromium/media/base/sinc_resampler.cc 2016-02-10
11:20:27.000000000 +0100
++++
qtwebengine-opensource-src-5.6.1-no-sse2/src/3rdparty/chromium/media/base/sinc_resampler.cc 2016-02-25
00:47:15.049721970 +0100
+@@ -81,16 +81,11 @@
+ #include <cmath>
+ #include <limits>
+
++#include "base/cpu.h"
+ #include "base/logging.h"
+
+-#if defined(ARCH_CPU_X86_FAMILY)
+-#include <xmmintrin.h>
+-#define CONVOLVE_FUNC Convolve_SSE
+-#elif defined(ARCH_CPU_ARM_FAMILY) && defined(USE_NEON)
++#if defined(ARCH_CPU_ARM_FAMILY) && defined(USE_NEON)
+ #include <arm_neon.h>
+-#define CONVOLVE_FUNC Convolve_NEON
+-#else
+-#define CONVOLVE_FUNC Convolve_C
+ #endif
+
+ namespace media {
+@@ -111,10 +106,41 @@
+ return sinc_scale_factor;
+ }
+
++#undef CONVOLVE_FUNC
++
+ static int CalculateChunkSize(int block_size_, double io_ratio) {
+ return block_size_ / io_ratio;
+ }
+
++// If we know the minimum architecture at compile time, avoid CPU detection.
++// Force NaCl code to use C routines since (at present) nothing there uses these
++// methods and plumbing the -msse built library is non-trivial.
++#if defined(ARCH_CPU_X86_FAMILY) && !defined(OS_NACL)
++#if defined(__SSE__)
++#define CONVOLVE_FUNC Convolve_SSE
++void SincResampler::InitializeCPUSpecificFeatures() {}
++#else
++// X86 CPU detection required. Functions will be set by
++// InitializeCPUSpecificFeatures().
++#define CONVOLVE_FUNC g_convolve_proc_
++
++typedef float (*ConvolveProc)(const float*, const float*, const float*, double);
++static ConvolveProc g_convolve_proc_ = NULL;
++
++void SincResampler::InitializeCPUSpecificFeatures() {
++ CHECK(!g_convolve_proc_);
++ g_convolve_proc_ = base::CPU().has_sse() ? Convolve_SSE : Convolve_C;
++}
++#endif
++#elif defined(ARCH_CPU_ARM_FAMILY) && defined(USE_NEON)
++#define CONVOLVE_FUNC Convolve_NEON
++void SincResampler::InitializeCPUSpecificFeatures() {}
++#else
++// Unknown architecture.
++#define CONVOLVE_FUNC Convolve_C
++void SincResampler::InitializeCPUSpecificFeatures() {}
++#endif
++
+ SincResampler::SincResampler(double io_sample_rate_ratio,
+ int request_frames,
+ const ReadCB& read_cb)
+@@ -342,46 +368,7 @@
+ kernel_interpolation_factor * sum2);
+ }
+
+-#if defined(ARCH_CPU_X86_FAMILY)
+-float SincResampler::Convolve_SSE(const float* input_ptr, const float* k1,
+- const float* k2,
+- double kernel_interpolation_factor) {
+- __m128 m_input;
+- __m128 m_sums1 = _mm_setzero_ps();
+- __m128 m_sums2 = _mm_setzero_ps();
+-
+- // Based on |input_ptr| alignment, we need to use loadu or load. Unrolling
+- // these loops hurt performance in local testing.
+- if (reinterpret_cast<uintptr_t>(input_ptr) & 0x0F) {
+- for (int i = 0; i < kKernelSize; i += 4) {
+- m_input = _mm_loadu_ps(input_ptr + i);
+- m_sums1 = _mm_add_ps(m_sums1, _mm_mul_ps(m_input, _mm_load_ps(k1 + i)));
+- m_sums2 = _mm_add_ps(m_sums2, _mm_mul_ps(m_input, _mm_load_ps(k2 + i)));
+- }
+- } else {
+- for (int i = 0; i < kKernelSize; i += 4) {
+- m_input = _mm_load_ps(input_ptr + i);
+- m_sums1 = _mm_add_ps(m_sums1, _mm_mul_ps(m_input, _mm_load_ps(k1 + i)));
+- m_sums2 = _mm_add_ps(m_sums2, _mm_mul_ps(m_input, _mm_load_ps(k2 + i)));
+- }
+- }
+-
+- // Linearly interpolate the two "convolutions".
+- m_sums1 = _mm_mul_ps(m_sums1, _mm_set_ps1(
+- static_cast<float>(1.0 - kernel_interpolation_factor)));
+- m_sums2 = _mm_mul_ps(m_sums2, _mm_set_ps1(
+- static_cast<float>(kernel_interpolation_factor)));
+- m_sums1 = _mm_add_ps(m_sums1, m_sums2);
+-
+- // Sum components together.
+- float result;
+- m_sums2 = _mm_add_ps(_mm_movehl_ps(m_sums1, m_sums1), m_sums1);
+- _mm_store_ss(&result, _mm_add_ss(m_sums2, _mm_shuffle_ps(
+- m_sums2, m_sums2, 1)));
+-
+- return result;
+-}
+-#elif defined(ARCH_CPU_ARM_FAMILY) && defined(USE_NEON)
++#if defined(ARCH_CPU_ARM_FAMILY) && defined(USE_NEON)
+ float SincResampler::Convolve_NEON(const float* input_ptr, const float* k1,
+ const float* k2,
+ double kernel_interpolation_factor) {
+diff -Nur
qtwebengine-opensource-src-5.6.1/src/3rdparty/chromium/media/base/sinc_resampler.h
qtwebengine-opensource-src-5.6.1-no-sse2/src/3rdparty/chromium/media/base/sinc_resampler.h
+---
qtwebengine-opensource-src-5.6.1/src/3rdparty/chromium/media/base/sinc_resampler.h 2016-02-10
11:20:27.000000000 +0100
++++
qtwebengine-opensource-src-5.6.1-no-sse2/src/3rdparty/chromium/media/base/sinc_resampler.h 2016-02-25
00:47:15.055722002 +0100
+@@ -34,6 +34,10 @@
+ kKernelStorageSize = kKernelSize * (kKernelOffsetCount + 1),
+ };
+
++ // Selects runtime specific CPU features like SSE. Must be called before
++ // using SincResampler.
++ static void InitializeCPUSpecificFeatures();
++
+ // Callback type for providing more data into the resampler. Expects |frames|
+ // of data to be rendered into |destination|; zero padded if not enough frames
+ // are available to satisfy the request.
+diff -Nur
qtwebengine-opensource-src-5.6.1/src/3rdparty/chromium/media/base/sinc_resampler_perftest.cc
qtwebengine-opensource-src-5.6.1-no-sse2/src/3rdparty/chromium/media/base/sinc_resampler_perftest.cc
+---
qtwebengine-opensource-src-5.6.1/src/3rdparty/chromium/media/base/sinc_resampler_perftest.cc 2016-02-10
11:20:27.000000000 +0100
++++
qtwebengine-opensource-src-5.6.1-no-sse2/src/3rdparty/chromium/media/base/sinc_resampler_perftest.cc 2016-02-25
00:47:15.057722012 +0100
+@@ -4,6 +4,7 @@
+
+ #include "base/bind.h"
+ #include "base/bind_helpers.h"
++#include "base/cpu.h"
+ #include "base/time/time.h"
+ #include "media/base/sinc_resampler.h"
+ #include "testing/gmock/include/gmock/gmock.h"
+@@ -60,6 +61,9 @@
+ &resampler, SincResampler::Convolve_C, true,
"unoptimized_aligned");
+
+ #if defined(CONVOLVE_FUNC)
++#if defined(ARCH_CPU_X86_FAMILY)
++ ASSERT_TRUE(base::CPU().has_sse());
++#endif
+ RunConvolveBenchmark(
+ &resampler, SincResampler::CONVOLVE_FUNC, true,
"optimized_aligned");
+ RunConvolveBenchmark(
+diff -Nur
qtwebengine-opensource-src-5.6.1/src/3rdparty/chromium/media/base/sinc_resampler_unittest.cc
qtwebengine-opensource-src-5.6.1-no-sse2/src/3rdparty/chromium/media/base/sinc_resampler_unittest.cc
+---
qtwebengine-opensource-src-5.6.1/src/3rdparty/chromium/media/base/sinc_resampler_unittest.cc 2016-02-10
11:20:27.000000000 +0100
++++
qtwebengine-opensource-src-5.6.1-no-sse2/src/3rdparty/chromium/media/base/sinc_resampler_unittest.cc 2016-02-25
00:47:15.060722029 +0100
+@@ -9,6 +9,7 @@
+
+ #include "base/bind.h"
+ #include "base/bind_helpers.h"
++#include "base/cpu.h"
+ #include "base/strings/string_number_conversions.h"
+ #include "base/time/time.h"
+ #include "build/build_config.h"
+@@ -163,6 +164,10 @@
+ static const double kKernelInterpolationFactor = 0.5;
+
+ TEST(SincResamplerTest, Convolve) {
++#if defined(ARCH_CPU_X86_FAMILY)
++ ASSERT_TRUE(base::CPU().has_sse());
++#endif
++
+ // Initialize a dummy resampler.
+ MockSource mock_source;
+ SincResampler resampler(
+diff -Nur
qtwebengine-opensource-src-5.6.1/src/3rdparty/chromium/media/base/vector_math.cc
qtwebengine-opensource-src-5.6.1-no-sse2/src/3rdparty/chromium/media/base/vector_math.cc
+---
qtwebengine-opensource-src-5.6.1/src/3rdparty/chromium/media/base/vector_math.cc 2016-02-10
11:20:27.000000000 +0100
++++
qtwebengine-opensource-src-5.6.1-no-sse2/src/3rdparty/chromium/media/base/vector_math.cc 2016-02-25
00:47:15.063722045 +0100
+@@ -7,12 +7,17 @@
+
+ #include <algorithm>
+
++#include "base/cpu.h"
+ #include "base/logging.h"
+ #include "build/build_config.h"
+
++namespace media {
++namespace vector_math {
++
++// If we know the minimum architecture at compile time, avoid CPU detection.
+ // NaCl does not allow intrinsics.
+ #if defined(ARCH_CPU_X86_FAMILY) && !defined(OS_NACL)
+-#include <xmmintrin.h>
++#if defined(__SSE__)
+ // Don't use custom SSE versions where the auto-vectorized C version performs
+ // better, which is anywhere clang is used.
+ #if !defined(__clang__)
+@@ -23,20 +28,52 @@
+ #define FMUL_FUNC FMUL_C
+ #endif
+ #define EWMAAndMaxPower_FUNC EWMAAndMaxPower_SSE
++void Initialize() {}
++#else
++// X86 CPU detection required. Functions will be set by Initialize().
++#if !defined(__clang__)
++#define FMAC_FUNC g_fmac_proc_
++#define FMUL_FUNC g_fmul_proc_
++#else
++#define FMAC_FUNC FMAC_C
++#define FMUL_FUNC FMUL_C
++#endif
++#define EWMAAndMaxPower_FUNC g_ewma_power_proc_
++
++#if !defined(__clang__)
++typedef void (*MathProc)(const float src[], float scale, int len, float dest[]);
++static MathProc g_fmac_proc_ = NULL;
++static MathProc g_fmul_proc_ = NULL;
++#endif
++typedef std::pair<float, float> (*EWMAAndMaxPowerProc)(
++ float initial_value, const float src[], int len, float smoothing_factor);
++static EWMAAndMaxPowerProc g_ewma_power_proc_ = NULL;
++
++void Initialize() {
++ CHECK(!g_fmac_proc_);
++ CHECK(!g_fmul_proc_);
++ CHECK(!g_ewma_power_proc_);
++ const bool kUseSSE = base::CPU().has_sse();
++#if !defined(__clang__)
++ g_fmac_proc_ = kUseSSE ? FMAC_SSE : FMAC_C;
++ g_fmul_proc_ = kUseSSE ? FMUL_SSE : FMUL_C;
++#endif
++ g_ewma_power_proc_ = kUseSSE ? EWMAAndMaxPower_SSE : EWMAAndMaxPower_C;
++}
++#endif
+ #elif defined(ARCH_CPU_ARM_FAMILY) && defined(USE_NEON)
+ #include <arm_neon.h>
+ #define FMAC_FUNC FMAC_NEON
+ #define FMUL_FUNC FMUL_NEON
+ #define EWMAAndMaxPower_FUNC EWMAAndMaxPower_NEON
++void Initialize() {}
+ #else
+ #define FMAC_FUNC FMAC_C
+ #define FMUL_FUNC FMUL_C
+ #define EWMAAndMaxPower_FUNC EWMAAndMaxPower_C
++void Initialize() {}
+ #endif
+
+-namespace media {
+-namespace vector_math {
+-
+ void FMAC(const float src[], float scale, int len, float dest[]) {
+ // Ensure |src| and |dest| are 16-byte aligned.
+ DCHECK_EQ(0u, reinterpret_cast<uintptr_t>(src) & (kRequiredAlignment - 1));
+@@ -89,111 +126,6 @@
+ return result;
+ }
+
+-#if defined(ARCH_CPU_X86_FAMILY) && !defined(OS_NACL)
+-void FMUL_SSE(const float src[], float scale, int len, float dest[]) {
+- const int rem = len % 4;
+- const int last_index = len - rem;
+- __m128 m_scale = _mm_set_ps1(scale);
+- for (int i = 0; i < last_index; i += 4)
+- _mm_store_ps(dest + i, _mm_mul_ps(_mm_load_ps(src + i), m_scale));
+-
+- // Handle any remaining values that wouldn't fit in an SSE pass.
+- for (int i = last_index; i < len; ++i)
+- dest[i] = src[i] * scale;
+-}
+-
+-void FMAC_SSE(const float src[], float scale, int len, float dest[]) {
+- const int rem = len % 4;
+- const int last_index = len - rem;
+- __m128 m_scale = _mm_set_ps1(scale);
+- for (int i = 0; i < last_index; i += 4) {
+- _mm_store_ps(dest + i, _mm_add_ps(_mm_load_ps(dest + i),
+- _mm_mul_ps(_mm_load_ps(src + i), m_scale)));
+- }
+-
+- // Handle any remaining values that wouldn't fit in an SSE pass.
+- for (int i = last_index; i < len; ++i)
+- dest[i] += src[i] * scale;
+-}
+-
+-// Convenience macro to extract float 0 through 3 from the vector |a|. This is
+-// needed because compilers other than clang don't support access via
+-// operator[]().
+-#define EXTRACT_FLOAT(a, i) \
+- (i == 0 ? \
+- _mm_cvtss_f32(a) : \
+- _mm_cvtss_f32(_mm_shuffle_ps(a, a, i)))
+-
+-std::pair<float, float> EWMAAndMaxPower_SSE(
+- float initial_value, const float src[], int len, float smoothing_factor) {
+- // When the recurrence is unrolled, we see that we can split it into 4
+- // separate lanes of evaluation:
+- //
+- // y[n] = a(S[n]^2) + (1-a)(y[n-1])
+- // = a(S[n]^2) + (1-a)^1(aS[n-1]^2) + (1-a)^2(aS[n-2]^2) + ...
+- // = z[n] + (1-a)^1(z[n-1]) + (1-a)^2(z[n-2]) + (1-a)^3(z[n-3])
+- //
+- // where z[n] = a(S[n]^2) + (1-a)^4(z[n-4]) + (1-a)^8(z[n-8]) + ...
+- //
+- // Thus, the strategy here is to compute z[n], z[n-1], z[n-2], and z[n-3] in
+- // each of the 4 lanes, and then combine them to give y[n].
+-
+- const int rem = len % 4;
+- const int last_index = len - rem;
+-
+- const __m128 smoothing_factor_x4 = _mm_set_ps1(smoothing_factor);
+- const float weight_prev = 1.0f - smoothing_factor;
+- const __m128 weight_prev_x4 = _mm_set_ps1(weight_prev);
+- const __m128 weight_prev_squared_x4 =
+- _mm_mul_ps(weight_prev_x4, weight_prev_x4);
+- const __m128 weight_prev_4th_x4 =
+- _mm_mul_ps(weight_prev_squared_x4, weight_prev_squared_x4);
+-
+- // Compute z[n], z[n-1], z[n-2], and z[n-3] in parallel in lanes 3, 2, 1 and
+- // 0, respectively.
+- __m128 max_x4 = _mm_setzero_ps();
+- __m128 ewma_x4 = _mm_setr_ps(0.0f, 0.0f, 0.0f, initial_value);
+- int i;
+- for (i = 0; i < last_index; i += 4) {
+- ewma_x4 = _mm_mul_ps(ewma_x4, weight_prev_4th_x4);
+- const __m128 sample_x4 = _mm_load_ps(src + i);
+- const __m128 sample_squared_x4 = _mm_mul_ps(sample_x4, sample_x4);
+- max_x4 = _mm_max_ps(max_x4, sample_squared_x4);
+- // Note: The compiler optimizes this to a single multiply-and-accumulate
+- // instruction:
+- ewma_x4 = _mm_add_ps(ewma_x4,
+- _mm_mul_ps(sample_squared_x4, smoothing_factor_x4));
+- }
+-
+- // y[n] = z[n] + (1-a)^1(z[n-1]) + (1-a)^2(z[n-2]) + (1-a)^3(z[n-3])
+- float ewma = EXTRACT_FLOAT(ewma_x4, 3);
+- ewma_x4 = _mm_mul_ps(ewma_x4, weight_prev_x4);
+- ewma += EXTRACT_FLOAT(ewma_x4, 2);
+- ewma_x4 = _mm_mul_ps(ewma_x4, weight_prev_x4);
+- ewma += EXTRACT_FLOAT(ewma_x4, 1);
+- ewma_x4 = _mm_mul_ss(ewma_x4, weight_prev_x4);
+- ewma += EXTRACT_FLOAT(ewma_x4, 0);
+-
+- // Fold the maximums together to get the overall maximum.
+- max_x4 = _mm_max_ps(max_x4,
+- _mm_shuffle_ps(max_x4, max_x4, _MM_SHUFFLE(3, 3, 1, 1)));
+- max_x4 = _mm_max_ss(max_x4, _mm_shuffle_ps(max_x4, max_x4, 2));
+-
+- std::pair<float, float> result(ewma, EXTRACT_FLOAT(max_x4, 0));
+-
+- // Handle remaining values at the end of |src|.
+- for (; i < len; ++i) {
+- result.first *= weight_prev;
+- const float sample = src[i];
+- const float sample_squared = sample * sample;
+- result.first += sample_squared * smoothing_factor;
+- result.second = std::max(result.second, sample_squared);
+- }
+-
+- return result;
+-}
+-#endif
+-
+ #if defined(ARCH_CPU_ARM_FAMILY) && defined(USE_NEON)
+ void FMAC_NEON(const float src[], float scale, int len, float dest[]) {
+ const int rem = len % 4;
+diff -Nur qtwebengine-opensource-src-5.6.1/src/3rdparty/chromium/media/base/vector_math.h
qtwebengine-opensource-src-5.6.1-no-sse2/src/3rdparty/chromium/media/base/vector_math.h
+---
qtwebengine-opensource-src-5.6.1/src/3rdparty/chromium/media/base/vector_math.h 2016-02-10
11:20:27.000000000 +0100
++++
qtwebengine-opensource-src-5.6.1-no-sse2/src/3rdparty/chromium/media/base/vector_math.h 2016-02-25
00:47:15.068722072 +0100
+@@ -15,6 +15,11 @@
+ // Required alignment for inputs and outputs to all vector math functions
+ enum { kRequiredAlignment = 16 };
+
++// Selects runtime specific optimizations such as SSE. Must be called prior to
++// calling FMAC() or FMUL(). Called during media library initialization; most
++// users should never have to call this.
++MEDIA_EXPORT void Initialize();
++
+ // Multiply each element of |src| (up to |len|) by |scale| and add to |dest|.
+ // |src| and |dest| must be aligned by kRequiredAlignment.
+ MEDIA_EXPORT void FMAC(const float src[], float scale, int len, float dest[]);
+diff -Nur
qtwebengine-opensource-src-5.6.1/src/3rdparty/chromium/media/base/vector_math_perftest.cc
qtwebengine-opensource-src-5.6.1-no-sse2/src/3rdparty/chromium/media/base/vector_math_perftest.cc
+---
qtwebengine-opensource-src-5.6.1/src/3rdparty/chromium/media/base/vector_math_perftest.cc 2016-02-10
11:20:27.000000000 +0100
++++
qtwebengine-opensource-src-5.6.1-no-sse2/src/3rdparty/chromium/media/base/vector_math_perftest.cc 2016-02-25
00:47:15.068722072 +0100
+@@ -2,6 +2,7 @@
+ // Use of this source code is governed by a BSD-style license that can be
+ // found in the LICENSE file.
+
++#include "base/cpu.h"
+ #include "base/memory/aligned_memory.h"
+ #include "base/memory/scoped_ptr.h"
+ #include "base/time/time.h"
+@@ -79,15 +80,11 @@
+ DISALLOW_COPY_AND_ASSIGN(VectorMathPerfTest);
+ };
+
+-// Define platform dependent function names for SIMD optimized methods.
++// Define platform independent function name for FMAC* perf tests.
+ #if defined(ARCH_CPU_X86_FAMILY)
+ #define FMAC_FUNC FMAC_SSE
+-#define FMUL_FUNC FMUL_SSE
+-#define EWMAAndMaxPower_FUNC EWMAAndMaxPower_SSE
+ #elif defined(ARCH_CPU_ARM_FAMILY) && defined(USE_NEON)
+ #define FMAC_FUNC FMAC_NEON
+-#define FMUL_FUNC FMUL_NEON
+-#define EWMAAndMaxPower_FUNC EWMAAndMaxPower_NEON
+ #endif
+
+ // Benchmark for each optimized vector_math::FMAC() method.
+@@ -96,6 +93,9 @@
+ RunBenchmark(
+ vector_math::FMAC_C, true, "vector_math_fmac",
"unoptimized");
+ #if defined(FMAC_FUNC)
++#if defined(ARCH_CPU_X86_FAMILY)
++ ASSERT_TRUE(base::CPU().has_sse());
++#endif
+ // Benchmark FMAC_FUNC() with unaligned size.
+ ASSERT_NE((kVectorSize - 1) % (vector_math::kRequiredAlignment /
+ sizeof(float)), 0U);
+@@ -109,12 +109,24 @@
+ #endif
+ }
+
++#undef FMAC_FUNC
++
++// Define platform independent function name for FMULBenchmark* tests.
++#if defined(ARCH_CPU_X86_FAMILY)
++#define FMUL_FUNC FMUL_SSE
++#elif defined(ARCH_CPU_ARM_FAMILY) && defined(USE_NEON)
++#define FMUL_FUNC FMUL_NEON
++#endif
++
+ // Benchmark for each optimized vector_math::FMUL() method.
+ TEST_F(VectorMathPerfTest, FMUL) {
+ // Benchmark FMUL_C().
+ RunBenchmark(
+ vector_math::FMUL_C, true, "vector_math_fmul",
"unoptimized");
+ #if defined(FMUL_FUNC)
++#if defined(ARCH_CPU_X86_FAMILY)
++ ASSERT_TRUE(base::CPU().has_sse());
++#endif
+ // Benchmark FMUL_FUNC() with unaligned size.
+ ASSERT_NE((kVectorSize - 1) % (vector_math::kRequiredAlignment /
+ sizeof(float)), 0U);
+@@ -128,6 +140,14 @@
+ #endif
+ }
+
++#undef FMUL_FUNC
++
++#if defined(ARCH_CPU_X86_FAMILY)
++#define EWMAAndMaxPower_FUNC EWMAAndMaxPower_SSE
++#elif defined(ARCH_CPU_ARM_FAMILY) && defined(USE_NEON)
++#define EWMAAndMaxPower_FUNC EWMAAndMaxPower_NEON
++#endif
++
+ // Benchmark for each optimized vector_math::EWMAAndMaxPower() method.
+ TEST_F(VectorMathPerfTest, EWMAAndMaxPower) {
+ // Benchmark EWMAAndMaxPower_C().
+@@ -136,6 +156,9 @@
+ "vector_math_ewma_and_max_power",
+ "unoptimized");
+ #if defined(EWMAAndMaxPower_FUNC)
++#if defined(ARCH_CPU_X86_FAMILY)
++ ASSERT_TRUE(base::CPU().has_sse());
++#endif
+ // Benchmark EWMAAndMaxPower_FUNC() with unaligned size.
+ ASSERT_NE((kVectorSize - 1) % (vector_math::kRequiredAlignment /
+ sizeof(float)), 0U);
+@@ -153,4 +176,6 @@
+ #endif
+ }
+
++#undef EWMAAndMaxPower_FUNC
++
+ } // namespace media
+diff -Nur
qtwebengine-opensource-src-5.6.1/src/3rdparty/chromium/media/base/vector_math_testing.h
qtwebengine-opensource-src-5.6.1-no-sse2/src/3rdparty/chromium/media/base/vector_math_testing.h
+---
qtwebengine-opensource-src-5.6.1/src/3rdparty/chromium/media/base/vector_math_testing.h 2016-02-10
11:20:27.000000000 +0100
++++
qtwebengine-opensource-src-5.6.1-no-sse2/src/3rdparty/chromium/media/base/vector_math_testing.h 2016-02-25
00:47:15.076722114 +0100
+@@ -19,7 +19,7 @@
+ MEDIA_EXPORT std::pair<float, float> EWMAAndMaxPower_C(
+ float initial_value, const float src[], int len, float smoothing_factor);
+
+-#if defined(ARCH_CPU_X86_FAMILY) && !defined(OS_NACL)
++#if defined(ARCH_CPU_X86_FAMILY)
+ MEDIA_EXPORT void FMAC_SSE(const float src[], float scale, int len,
+ float dest[]);
+ MEDIA_EXPORT void FMUL_SSE(const float src[], float scale, int len,
+diff -Nur
qtwebengine-opensource-src-5.6.1/src/3rdparty/chromium/media/base/vector_math_unittest.cc
qtwebengine-opensource-src-5.6.1-no-sse2/src/3rdparty/chromium/media/base/vector_math_unittest.cc
+---
qtwebengine-opensource-src-5.6.1/src/3rdparty/chromium/media/base/vector_math_unittest.cc 2016-02-10
11:20:27.000000000 +0100
++++
qtwebengine-opensource-src-5.6.1-no-sse2/src/3rdparty/chromium/media/base/vector_math_unittest.cc 2016-02-25
00:47:15.084722157 +0100
+@@ -6,6 +6,7 @@
+ #define _USE_MATH_DEFINES
+ #include <cmath>
+
++#include "base/cpu.h"
+ #include "base/memory/aligned_memory.h"
+ #include "base/memory/scoped_ptr.h"
+ #include "base/strings/string_number_conversions.h"
+@@ -75,6 +76,7 @@
+
+ #if defined(ARCH_CPU_X86_FAMILY)
+ {
++ ASSERT_TRUE(base::CPU().has_sse());
+ SCOPED_TRACE("FMAC_SSE");
+ FillTestVectors(kInputFillValue, kOutputFillValue);
+ vector_math::FMAC_SSE(
+@@ -116,6 +118,7 @@
+
+ #if defined(ARCH_CPU_X86_FAMILY)
+ {
++ ASSERT_TRUE(base::CPU().has_sse());
+ SCOPED_TRACE("FMUL_SSE");
+ FillTestVectors(kInputFillValue, kOutputFillValue);
+ vector_math::FMUL_SSE(
+@@ -224,6 +227,7 @@
+
+ #if defined(ARCH_CPU_X86_FAMILY)
+ {
++ ASSERT_TRUE(base::CPU().has_sse());
+ SCOPED_TRACE("EWMAAndMaxPower_SSE");
+ const std::pair<float, float>& result =
vector_math::EWMAAndMaxPower_SSE(
+ initial_value_, data_.get(), data_len_, smoothing_factor_);
+diff -Nur
qtwebengine-opensource-src-5.6.1/src/3rdparty/chromium/media/base/yuv_convert.cc
qtwebengine-opensource-src-5.6.1-no-sse2/src/3rdparty/chromium/media/base/yuv_convert.cc
+---
qtwebengine-opensource-src-5.6.1/src/3rdparty/chromium/media/base/yuv_convert.cc 2016-02-10
11:20:27.000000000 +0100
++++
qtwebengine-opensource-src-5.6.1-no-sse2/src/3rdparty/chromium/media/base/yuv_convert.cc 2016-02-25
00:47:15.088722179 +0100
+@@ -29,7 +29,7 @@
+ #include "media/base/simd/convert_yuv_to_rgb.h"
+ #include "media/base/simd/filter_yuv.h"
+
+-#if defined(ARCH_CPU_X86_FAMILY)
++#if defined(ARCH_CPU_X86_FAMILY) && defined(__MMX__)
+ #if defined(COMPILER_MSVC)
+ #include <intrin.h>
+ #else
+@@ -133,7 +133,7 @@
+
+ // Empty SIMD registers state after using them.
+ void EmptyRegisterStateStub() {}
+-#if defined(MEDIA_MMX_INTRINSICS_AVAILABLE)
++#if defined(MEDIA_MMX_INTRINSICS_AVAILABLE) && defined(__MMX__)
+ void EmptyRegisterStateIntrinsic() { _mm_empty(); }
+ #endif
+ typedef void (*EmptyRegisterStateProc)();
+@@ -247,34 +247,46 @@
+ // Assembly code confuses MemorySanitizer. Also not available in iOS builds.
+ #if defined(ARCH_CPU_X86_FAMILY) && !defined(MEMORY_SANITIZER) && \
+ !defined(OS_IOS)
+- g_convert_yuva_to_argb_proc_ = ConvertYUVAToARGB_MMX;
++ base::CPU cpu;
++ if (cpu.has_mmx()) {
++ g_convert_yuv_to_rgb32_row_proc_ = ConvertYUVToRGB32Row_MMX;
++ g_scale_yuv_to_rgb32_row_proc_ = ScaleYUVToRGB32Row_MMX;
++ g_convert_yuv_to_rgb32_proc_ = ConvertYUVToRGB32_MMX;
++ g_convert_yuva_to_argb_proc_ = ConvertYUVAToARGB_MMX;
++ g_linear_scale_yuv_to_rgb32_row_proc_ = LinearScaleYUVToRGB32Row_MMX;
+
+ #if defined(MEDIA_MMX_INTRINSICS_AVAILABLE)
+- g_empty_register_state_proc_ = EmptyRegisterStateIntrinsic;
++ g_filter_yuv_rows_proc_ = FilterYUVRows_MMX;
++#endif
++#if defined(MEDIA_MMX_INTRINSICS_AVAILABLE) && defined(__MMX__)
++ g_empty_register_state_proc_ = EmptyRegisterStateIntrinsic;
+ #else
+- g_empty_register_state_proc_ = EmptyRegisterState_MMX;
++ g_empty_register_state_proc_ = EmptyRegisterState_MMX;
+ #endif
++ }
+
+- g_convert_yuv_to_rgb32_row_proc_ = ConvertYUVToRGB32Row_SSE;
+- g_convert_yuv_to_rgb32_proc_ = ConvertYUVToRGB32_SSE;
++ if (cpu.has_sse()) {
++ g_convert_yuv_to_rgb32_row_proc_ = ConvertYUVToRGB32Row_SSE;
++ g_scale_yuv_to_rgb32_row_proc_ = ScaleYUVToRGB32Row_SSE;
++ g_linear_scale_yuv_to_rgb32_row_proc_ = LinearScaleYUVToRGB32Row_SSE;
++ g_convert_yuv_to_rgb32_proc_ = ConvertYUVToRGB32_SSE;
++ }
+
+- g_filter_yuv_rows_proc_ = FilterYUVRows_SSE2;
+- g_convert_rgb32_to_yuv_proc_ = ConvertRGB32ToYUV_SSE2;
++ if (cpu.has_sse2()) {
++ g_filter_yuv_rows_proc_ = FilterYUVRows_SSE2;
++ g_convert_rgb32_to_yuv_proc_ = ConvertRGB32ToYUV_SSE2;
+
+ #if defined(ARCH_CPU_X86_64)
+- g_scale_yuv_to_rgb32_row_proc_ = ScaleYUVToRGB32Row_SSE2_X64;
++ g_scale_yuv_to_rgb32_row_proc_ = ScaleYUVToRGB32Row_SSE2_X64;
+
+- // Technically this should be in the MMX section, but MSVC will optimize out
+- // the export of LinearScaleYUVToRGB32Row_MMX, which is required by the unit
+- // tests, if that decision can be made at compile time. Since all X64 CPUs
+- // have SSE2, we can hack around this by making the selection here.
+- g_linear_scale_yuv_to_rgb32_row_proc_ = LinearScaleYUVToRGB32Row_MMX_X64;
+-#else
+- g_scale_yuv_to_rgb32_row_proc_ = ScaleYUVToRGB32Row_SSE;
+- g_linear_scale_yuv_to_rgb32_row_proc_ = LinearScaleYUVToRGB32Row_SSE;
++ // Technically this should be in the MMX section, but MSVC will optimize out
++ // the export of LinearScaleYUVToRGB32Row_MMX, which is required by the unit
++ // tests, if that decision can be made at compile time. Since all X64 CPUs
++ // have SSE2, we can hack around this by making the selection here.
++ g_linear_scale_yuv_to_rgb32_row_proc_ = LinearScaleYUVToRGB32Row_MMX_X64;
+ #endif
++ }
+
+- base::CPU cpu;
+ if (cpu.has_ssse3()) {
+ g_convert_rgb24_to_yuv_proc_ = &ConvertRGB24ToYUV_SSSE3;
+
+diff -Nur
qtwebengine-opensource-src-5.6.1/src/3rdparty/chromium/media/base/yuv_convert_perftest.cc
qtwebengine-opensource-src-5.6.1-no-sse2/src/3rdparty/chromium/media/base/yuv_convert_perftest.cc
+---
qtwebengine-opensource-src-5.6.1/src/3rdparty/chromium/media/base/yuv_convert_perftest.cc 2016-02-10
11:20:27.000000000 +0100
++++
qtwebengine-opensource-src-5.6.1-no-sse2/src/3rdparty/chromium/media/base/yuv_convert_perftest.cc 2016-02-25
00:47:15.089722184 +0100
+@@ -64,6 +64,31 @@
+ DISALLOW_COPY_AND_ASSIGN(YUVConvertPerfTest);
+ };
+
++TEST_F(YUVConvertPerfTest, ConvertYUVToRGB32Row_MMX) {
++ ASSERT_TRUE(base::CPU().has_mmx());
++
++ base::TimeTicks start = base::TimeTicks::HighResNow();
++ for (int i = 0; i < kPerfTestIterations; ++i) {
++ for (int row = 0; row < kSourceHeight; ++row) {
++ int chroma_row = row / 2;
++ ConvertYUVToRGB32Row_MMX(
++ yuv_bytes_.get() + row * kSourceWidth,
++ yuv_bytes_.get() + kSourceUOffset + (chroma_row * kSourceWidth / 2),
++ yuv_bytes_.get() + kSourceVOffset + (chroma_row * kSourceWidth / 2),
++ rgb_bytes_converted_.get(),
++ kWidth,
++ GetLookupTable(YV12));
++ }
++ }
++ double total_time_seconds =
++ (base::TimeTicks::HighResNow() - start).InSecondsF();
++ perf_test::PrintResult(
++ "yuv_convert_perftest", "",
"ConvertYUVToRGB32Row_MMX",
++ kPerfTestIterations / total_time_seconds, "runs/s", true);
++
++ media::EmptyRegisterState();
++}
++
+ TEST_F(YUVConvertPerfTest, ConvertYUVToRGB32Row_SSE) {
+ ASSERT_TRUE(base::CPU().has_sse());
+
+@@ -87,9 +112,33 @@
+ media::EmptyRegisterState();
+ }
+
+-// 64-bit release + component builds on Windows are too smart and optimizes
+-// away the function being tested.
+-#if defined(OS_WIN) && (defined(ARCH_CPU_X86) || !defined(COMPONENT_BUILD))
++TEST_F(YUVConvertPerfTest, ScaleYUVToRGB32Row_MMX) {
++ ASSERT_TRUE(base::CPU().has_mmx());
++
++ const int kSourceDx = 80000; // This value means a scale down.
++
++ base::TimeTicks start = base::TimeTicks::HighResNow();
++ for (int i = 0; i < kPerfTestIterations; ++i) {
++ for (int row = 0; row < kSourceHeight; ++row) {
++ int chroma_row = row / 2;
++ ScaleYUVToRGB32Row_MMX(
++ yuv_bytes_.get() + row * kSourceWidth,
++ yuv_bytes_.get() + kSourceUOffset + (chroma_row * kSourceWidth / 2),
++ yuv_bytes_.get() + kSourceVOffset + (chroma_row * kSourceWidth / 2),
++ rgb_bytes_converted_.get(),
++ kWidth,
++ kSourceDx,
++ GetLookupTable(YV12));
++ }
++ }
++ double total_time_seconds =
++ (base::TimeTicks::HighResNow() - start).InSecondsF();
++ perf_test::PrintResult(
++ "yuv_convert_perftest", "",
"ScaleYUVToRGB32Row_MMX",
++ kPerfTestIterations / total_time_seconds, "runs/s", true);
++ media::EmptyRegisterState();
++}
++
+ TEST_F(YUVConvertPerfTest, ScaleYUVToRGB32Row_SSE) {
+ ASSERT_TRUE(base::CPU().has_sse());
+
+@@ -116,6 +165,33 @@
+ media::EmptyRegisterState();
+ }
+
++TEST_F(YUVConvertPerfTest, LinearScaleYUVToRGB32Row_MMX) {
++ ASSERT_TRUE(base::CPU().has_mmx());
++
++ const int kSourceDx = 80000; // This value means a scale down.
++
++ base::TimeTicks start = base::TimeTicks::HighResNow();
++ for (int i = 0; i < kPerfTestIterations; ++i) {
++ for (int row = 0; row < kSourceHeight; ++row) {
++ int chroma_row = row / 2;
++ LinearScaleYUVToRGB32Row_MMX(
++ yuv_bytes_.get() + row * kSourceWidth,
++ yuv_bytes_.get() + kSourceUOffset + (chroma_row * kSourceWidth / 2),
++ yuv_bytes_.get() + kSourceVOffset + (chroma_row * kSourceWidth / 2),
++ rgb_bytes_converted_.get(),
++ kWidth,
++ kSourceDx,
++ GetLookupTable(YV12));
++ }
++ }
++ double total_time_seconds =
++ (base::TimeTicks::HighResNow() - start).InSecondsF();
++ perf_test::PrintResult(
++ "yuv_convert_perftest", "",
"LinearScaleYUVToRGB32Row_MMX",
++ kPerfTestIterations / total_time_seconds, "runs/s", true);
++ media::EmptyRegisterState();
++}
++
+ TEST_F(YUVConvertPerfTest, LinearScaleYUVToRGB32Row_SSE) {
+ ASSERT_TRUE(base::CPU().has_sse());
+
+@@ -141,7 +217,6 @@
+ kPerfTestIterations / total_time_seconds, "runs/s", true);
+ media::EmptyRegisterState();
+ }
+-#endif // defined(OS_WIN) && (ARCH_CPU_X86 || COMPONENT_BUILD)
+
+ #endif // !defined(ARCH_CPU_ARM_FAMILY) && !defined(ARCH_CPU_MIPS_FAMILY)
+
+diff -Nur
qtwebengine-opensource-src-5.6.1/src/3rdparty/chromium/media/base/yuv_convert_unittest.cc
qtwebengine-opensource-src-5.6.1-no-sse2/src/3rdparty/chromium/media/base/yuv_convert_unittest.cc
+---
qtwebengine-opensource-src-5.6.1/src/3rdparty/chromium/media/base/yuv_convert_unittest.cc 2016-02-10
11:20:27.000000000 +0100
++++
qtwebengine-opensource-src-5.6.1-no-sse2/src/3rdparty/chromium/media/base/yuv_convert_unittest.cc 2016-02-25
00:47:15.090722190 +0100
+@@ -658,6 +658,37 @@
+ EXPECT_EQ(0, error);
+ }
+
++TEST(YUVConvertTest, ConvertYUVToRGB32Row_MMX) {
++ base::CPU cpu;
++ if (!cpu.has_mmx()) {
++ LOG(WARNING) << "System not supported. Test skipped.";
++ return;
++ }
++
++ scoped_ptr<uint8[]> yuv_bytes(new uint8[kYUV12Size]);
++ scoped_ptr<uint8[]> rgb_bytes_reference(new uint8[kRGBSize]);
++ scoped_ptr<uint8[]> rgb_bytes_converted(new uint8[kRGBSize]);
++ ReadYV12Data(&yuv_bytes);
++
++ const int kWidth = 167;
++ ConvertYUVToRGB32Row_C(yuv_bytes.get(),
++ yuv_bytes.get() + kSourceUOffset,
++ yuv_bytes.get() + kSourceVOffset,
++ rgb_bytes_reference.get(),
++ kWidth,
++ GetLookupTable(YV12));
++ ConvertYUVToRGB32Row_MMX(yuv_bytes.get(),
++ yuv_bytes.get() + kSourceUOffset,
++ yuv_bytes.get() + kSourceVOffset,
++ rgb_bytes_converted.get(),
++ kWidth,
++ GetLookupTable(YV12));
++ media::EmptyRegisterState();
++ EXPECT_EQ(0, memcmp(rgb_bytes_reference.get(),
++ rgb_bytes_converted.get(),
++ kWidth * kBpp));
++}
++
+ TEST(YUVConvertTest, ConvertYUVToRGB32Row_SSE) {
+ base::CPU cpu;
+ if (!cpu.has_sse()) {
+@@ -689,9 +720,40 @@
+ kWidth * kBpp));
+ }
+
+-// 64-bit release + component builds on Windows are too smart and optimizes
+-// away the function being tested.
+-#if defined(OS_WIN) && (defined(ARCH_CPU_X86) || !defined(COMPONENT_BUILD))
++TEST(YUVConvertTest, ScaleYUVToRGB32Row_MMX) {
++ base::CPU cpu;
++ if (!cpu.has_mmx()) {
++ LOG(WARNING) << "System not supported. Test skipped.";
++ return;
++ }
++
++ scoped_ptr<uint8[]> yuv_bytes(new uint8[kYUV12Size]);
++ scoped_ptr<uint8[]> rgb_bytes_reference(new uint8[kRGBSize]);
++ scoped_ptr<uint8[]> rgb_bytes_converted(new uint8[kRGBSize]);
++ ReadYV12Data(&yuv_bytes);
++
++ const int kWidth = 167;
++ const int kSourceDx = 80000; // This value means a scale down.
++ ScaleYUVToRGB32Row_C(yuv_bytes.get(),
++ yuv_bytes.get() + kSourceUOffset,
++ yuv_bytes.get() + kSourceVOffset,
++ rgb_bytes_reference.get(),
++ kWidth,
++ kSourceDx,
++ GetLookupTable(YV12));
++ ScaleYUVToRGB32Row_MMX(yuv_bytes.get(),
++ yuv_bytes.get() + kSourceUOffset,
++ yuv_bytes.get() + kSourceVOffset,
++ rgb_bytes_converted.get(),
++ kWidth,
++ kSourceDx,
++ GetLookupTable(YV12));
++ media::EmptyRegisterState();
++ EXPECT_EQ(0, memcmp(rgb_bytes_reference.get(),
++ rgb_bytes_converted.get(),
++ kWidth * kBpp));
++}
++
+ TEST(YUVConvertTest, ScaleYUVToRGB32Row_SSE) {
+ base::CPU cpu;
+ if (!cpu.has_sse()) {
+@@ -726,6 +788,40 @@
+ kWidth * kBpp));
+ }
+
++TEST(YUVConvertTest, LinearScaleYUVToRGB32Row_MMX) {
++ base::CPU cpu;
++ if (!cpu.has_mmx()) {
++ LOG(WARNING) << "System not supported. Test skipped.";
++ return;
++ }
++
++ scoped_ptr<uint8[]> yuv_bytes(new uint8[kYUV12Size]);
++ scoped_ptr<uint8[]> rgb_bytes_reference(new uint8[kRGBSize]);
++ scoped_ptr<uint8[]> rgb_bytes_converted(new uint8[kRGBSize]);
++ ReadYV12Data(&yuv_bytes);
++
++ const int kWidth = 167;
++ const int kSourceDx = 80000; // This value means a scale down.
++ LinearScaleYUVToRGB32Row_C(yuv_bytes.get(),
++ yuv_bytes.get() + kSourceUOffset,
++ yuv_bytes.get() + kSourceVOffset,
++ rgb_bytes_reference.get(),
++ kWidth,
++ kSourceDx,
++ GetLookupTable(YV12));
++ LinearScaleYUVToRGB32Row_MMX(yuv_bytes.get(),
++ yuv_bytes.get() + kSourceUOffset,
++ yuv_bytes.get() + kSourceVOffset,
++ rgb_bytes_converted.get(),
++ kWidth,
++ kSourceDx,
++ GetLookupTable(YV12));
++ media::EmptyRegisterState();
++ EXPECT_EQ(0, memcmp(rgb_bytes_reference.get(),
++ rgb_bytes_converted.get(),
++ kWidth * kBpp));
++}
++
+ TEST(YUVConvertTest, LinearScaleYUVToRGB32Row_SSE) {
+ base::CPU cpu;
+ if (!cpu.has_sse()) {
+@@ -759,7 +855,6 @@
+ rgb_bytes_converted.get(),
+ kWidth * kBpp));
+ }
+-#endif // defined(OS_WIN) && (ARCH_CPU_X86 || COMPONENT_BUILD)
+
+ TEST(YUVConvertTest, FilterYUVRows_C_OutOfBounds) {
+ scoped_ptr<uint8[]> src(new uint8[16]);
+@@ -776,6 +871,30 @@
+ }
+ }
+
++#if defined(MEDIA_MMX_INTRINSICS_AVAILABLE)
++TEST(YUVConvertTest, FilterYUVRows_MMX_OutOfBounds) {
++ base::CPU cpu;
++ if (!cpu.has_mmx()) {
++ LOG(WARNING) << "System not supported. Test skipped.";
++ return;
++ }
++
++ scoped_ptr<uint8[]> src(new uint8[16]);
++ scoped_ptr<uint8[]> dst(new uint8[16]);
++
++ memset(src.get(), 0xff, 16);
++ memset(dst.get(), 0, 16);
++
++ media::FilterYUVRows_MMX(dst.get(), src.get(), src.get(), 1, 255);
++ media::EmptyRegisterState();
++
++ EXPECT_EQ(255u, dst[0]);
++ for (int i = 1; i < 16; ++i) {
++ EXPECT_EQ(0u, dst[i]);
++ }
++}
++#endif // defined(MEDIA_MMX_INTRINSICS_AVAILABLE)
++
+ TEST(YUVConvertTest, FilterYUVRows_SSE2_OutOfBounds) {
+ base::CPU cpu;
+ if (!cpu.has_sse2()) {
+@@ -797,6 +916,38 @@
+ }
+ }
+
++#if defined(MEDIA_MMX_INTRINSICS_AVAILABLE)
++TEST(YUVConvertTest, FilterYUVRows_MMX_UnalignedDestination) {
++ base::CPU cpu;
++ if (!cpu.has_mmx()) {
++ LOG(WARNING) << "System not supported. Test skipped.";
++ return;
++ }
++
++ const int kSize = 32;
++ scoped_ptr<uint8[]> src(new uint8[kSize]);
++ scoped_ptr<uint8[]> dst_sample(new uint8[kSize]);
++ scoped_ptr<uint8[]> dst(new uint8[kSize]);
++
++ memset(dst_sample.get(), 0, kSize);
++ memset(dst.get(), 0, kSize);
++ for (int i = 0; i < kSize; ++i)
++ src[i] = 100 + i;
++
++ media::FilterYUVRows_C(dst_sample.get(),
++ src.get(), src.get(), 17, 128);
++
++ // Generate an unaligned output address.
++ uint8* dst_ptr =
++ reinterpret_cast<uint8*>(
++ (reinterpret_cast<uintptr_t>(dst.get() + 8) & ~7) + 1);
++ media::FilterYUVRows_MMX(dst_ptr, src.get(), src.get(), 17, 128);
++ media::EmptyRegisterState();
++
++ EXPECT_EQ(0, memcmp(dst_sample.get(), dst_ptr, 17));
++}
++#endif // defined(MEDIA_MMX_INTRINSICS_AVAILABLE)
++
+ TEST(YUVConvertTest, FilterYUVRows_SSE2_UnalignedDestination) {
+ base::CPU cpu;
+ if (!cpu.has_sse2()) {
+diff -Nur qtwebengine-opensource-src-5.6.1/src/3rdparty/chromium/media/BUILD.gn
qtwebengine-opensource-src-5.6.1-no-sse2/src/3rdparty/chromium/media/BUILD.gn
+--- qtwebengine-opensource-src-5.6.1/src/3rdparty/chromium/media/BUILD.gn 2016-02-10
11:20:27.000000000 +0100
++++
qtwebengine-opensource-src-5.6.1-no-sse2/src/3rdparty/chromium/media/BUILD.gn 2016-02-25
00:47:15.118722340 +0100
+@@ -747,6 +747,26 @@
+ deps = [
+ "//base",
+ ]
++ if (current_cpu == "x86" || current_cpu == "x64") {
++ deps += [
++ ":shared_memory_support_sse",
++ ]
++ }
++}
++
++if (current_cpu == "x86" || current_cpu == "x64") {
++ source_set("shared_memory_support_sse") {
++ sources = [
++ "base/simd/vector_math_sse.cc",
++ ]
++ configs += [
++ "//media:media_config",
++ "//media:media_implementation",
++ ]
++ if (!is_win) {
++ cflags = [ "-msse" ]
++ }
++ }
+ }
+
+ if (media_use_ffmpeg) {
+diff -Nur qtwebengine-opensource-src-5.6.1/src/3rdparty/chromium/media/media.gyp
qtwebengine-opensource-src-5.6.1-no-sse2/src/3rdparty/chromium/media/media.gyp
+--- qtwebengine-opensource-src-5.6.1/src/3rdparty/chromium/media/media.gyp 2016-02-10
11:20:27.000000000 +0100
++++
qtwebengine-opensource-src-5.6.1-no-sse2/src/3rdparty/chromium/media/media.gyp 2016-02-25
00:47:15.126722383 +0100
+@@ -1053,12 +1053,12 @@
+ ['target_arch=="ia32" or target_arch=="x64"', {
+ 'dependencies': [
+ 'media_asm',
++ 'media_mmx',
++ 'media_sse',
++ 'media_sse2',
+ ],
+ 'sources': [
+- 'base/simd/convert_rgb_to_yuv_sse2.cc',
+- 'base/simd/convert_rgb_to_yuv_ssse3.cc',
+ 'base/simd/convert_yuv_to_rgb_x86.cc',
+- 'base/simd/filter_yuv_sse2.cc',
+ ],
+ }],
+ ['OS!="linux" and OS!="win"', {
+@@ -1572,6 +1572,11 @@
+ 'USE_NEON'
+ ],
+ }],
++ ['target_arch=="ia32" or target_arch=="x64"', {
++ 'dependencies': [
++ 'shared_memory_support_sse'
++ ],
++ }],
+ ],
+ },
+ ],
+@@ -1583,6 +1588,7 @@
+ 'type': 'static_library',
+ 'sources': [
+ 'base/simd/convert_rgb_to_yuv_ssse3.asm',
++ 'base/simd/convert_yuv_to_rgb_mmx.asm',
+ 'base/simd/convert_yuv_to_rgb_sse.asm',
+ 'base/simd/convert_yuva_to_argb_mmx.asm',
+ 'base/simd/empty_register_state_mmx.asm',
+@@ -1663,6 +1669,75 @@
+ '../third_party/yasm/yasm_compile.gypi',
+ ],
+ },
++ {
++ # GN version: //media/base:media_mmx
++ 'target_name': 'media_mmx',
++ 'type': 'static_library',
++ 'cflags': [
++ '-mmmx',
++ ],
++ 'defines': [
++ 'MEDIA_IMPLEMENTATION',
++ ],
++ 'include_dirs': [
++ '..',
++ ],
++ 'sources': [
++ 'base/simd/filter_yuv_mmx.cc',
++ ],
++ },
++ {
++ # GN version: //media/base:media_sse
++ 'target_name': 'media_sse',
++ 'type': 'static_library',
++ 'cflags': [
++ '-msse',
++ ],
++ 'defines': [
++ 'MEDIA_IMPLEMENTATION',
++ ],
++ 'include_dirs': [
++ '..',
++ ],
++ 'sources': [
++ 'base/simd/sinc_resampler_sse.cc',
++ ],
++ },
++ {
++ # GN version: //media/base:media_sse2
++ 'target_name': 'media_sse2',
++ 'type': 'static_library',
++ 'cflags': [
++ '-msse2',
++ ],
++ 'defines': [
++ 'MEDIA_IMPLEMENTATION',
++ ],
++ 'include_dirs': [
++ '..',
++ ],
++ 'sources': [
++ 'base/simd/convert_rgb_to_yuv_sse2.cc',
++ 'base/simd/convert_rgb_to_yuv_ssse3.cc',
++ 'base/simd/filter_yuv_sse2.cc',
++ ],
++ },
++ {
++ 'target_name': 'shared_memory_support_sse',
++ 'type': 'static_library',
++ 'cflags': [
++ '-msse',
++ ],
++ 'defines': [
++ 'MEDIA_IMPLEMENTATION',
++ ],
++ 'include_dirs': [
++ '..',
++ ],
++ 'sources': [
++ 'base/simd/vector_math_sse.cc',
++ ],
++ },
+ ], # targets
+ }],
+ ['OS=="android"', {
+diff -Nur qtwebengine-opensource-src-5.6.1/src/3rdparty/chromium/skia/BUILD.gn
qtwebengine-opensource-src-5.6.1-no-sse2/src/3rdparty/chromium/skia/BUILD.gn
+--- qtwebengine-opensource-src-5.6.1/src/3rdparty/chromium/skia/BUILD.gn 2016-02-10
11:20:27.000000000 +0100
++++
qtwebengine-opensource-src-5.6.1-no-sse2/src/3rdparty/chromium/skia/BUILD.gn 2016-02-25
00:47:15.128722393 +0100
+@@ -300,12 +300,6 @@
+ "ext/skia_utils_win.cc",
+ ]
+
+- if (current_cpu == "x86" || current_cpu == "x64") {
+- sources += [ "ext/convolver_SSE2.cc" ]
+- } else if (current_cpu == "mipsel" && mips_dsp_rev >= 2) {
+- sources += [ "ext/convolver_mips_dspr2.cc" ]
+- }
+-
+ # The skia gypi values are relative to the skia_dir, so we need to rebase.
+ sources += gypi_skia_core.sources
+ sources += gypi_skia_effects.sources
+@@ -532,7 +526,15 @@
+ ]
+
+ if (current_cpu == "x86" || current_cpu == "x64") {
+- sources = gypi_skia_opts.sse2_sources
++ sources = gypi_skia_opts.sse2_sources +
++ [
++ # Chrome-specific.
++ "ext/convolver_SSE2.cc",
++ "ext/convolver_SSE2.h",
++ ]
++ if (!is_win || is_clang) {
++ cflags += [ "-msse2" ]
++ }
+ deps += [
+ ":skia_opts_sse3",
+ ":skia_opts_sse4",
+@@ -562,6 +564,13 @@
+
+ if (mips_dsp_rev >= 1) {
+ sources = gypi_skia_opts.mips_dsp_sources
++ if (mips_dsp_rev >= 2) {
++ sources += [
++ # Chrome-specific.
++ "ext/convolver_mips_dspr2.cc",
++ "ext/convolver_mips_dspr2.h",
++ ]
++ }
+ } else {
+ sources = gypi_skia_opts.none_sources
+ }
+diff -Nur qtwebengine-opensource-src-5.6.1/src/3rdparty/chromium/skia/ext/convolver.cc
qtwebengine-opensource-src-5.6.1-no-sse2/src/3rdparty/chromium/skia/ext/convolver.cc
+---
qtwebengine-opensource-src-5.6.1/src/3rdparty/chromium/skia/ext/convolver.cc 2016-02-10
11:20:27.000000000 +0100
++++
qtwebengine-opensource-src-5.6.1-no-sse2/src/3rdparty/chromium/skia/ext/convolver.cc 2016-02-25
00:47:15.165722592 +0100
+@@ -362,10 +362,13 @@
+
+ void SetupSIMD(ConvolveProcs *procs) {
+ #ifdef SIMD_SSE2
+- procs->extra_horizontal_reads = 3;
+- procs->convolve_vertically = &ConvolveVertically_SSE2;
+- procs->convolve_4rows_horizontally = &Convolve4RowsHorizontally_SSE2;
+- procs->convolve_horizontally = &ConvolveHorizontally_SSE2;
++ base::CPU cpu;
++ if (cpu.has_sse2()) {
++ procs->extra_horizontal_reads = 3;
++ procs->convolve_vertically = &ConvolveVertically_SSE2;
++ procs->convolve_4rows_horizontally = &Convolve4RowsHorizontally_SSE2;
++ procs->convolve_horizontally = &ConvolveHorizontally_SSE2;
++ }
+ #elif defined SIMD_MIPS_DSPR2
+ procs->extra_horizontal_reads = 3;
+ procs->convolve_vertically = &ConvolveVertically_mips_dspr2;
+diff -Nur qtwebengine-opensource-src-5.6.1/src/3rdparty/chromium/skia/ext/convolver.h
qtwebengine-opensource-src-5.6.1-no-sse2/src/3rdparty/chromium/skia/ext/convolver.h
+---
qtwebengine-opensource-src-5.6.1/src/3rdparty/chromium/skia/ext/convolver.h 2016-02-10
11:20:27.000000000 +0100
++++
qtwebengine-opensource-src-5.6.1-no-sse2/src/3rdparty/chromium/skia/ext/convolver.h 2016-02-25
00:47:15.177722656 +0100
+@@ -9,6 +9,7 @@
+ #include <vector>
+
+ #include "base/basictypes.h"
++#include "base/cpu.h"
+ #include "third_party/skia/include/core/SkSize.h"
+ #include "third_party/skia/include/core/SkTypes.h"
+
+diff -Nur qtwebengine-opensource-src-5.6.1/src/3rdparty/chromium/skia/skia_chrome.gypi
qtwebengine-opensource-src-5.6.1-no-sse2/src/3rdparty/chromium/skia/skia_chrome.gypi
+---
qtwebengine-opensource-src-5.6.1/src/3rdparty/chromium/skia/skia_chrome.gypi 2016-02-10
11:20:27.000000000 +0100
++++
qtwebengine-opensource-src-5.6.1-no-sse2/src/3rdparty/chromium/skia/skia_chrome.gypi 2016-02-25
00:47:15.178722662 +0100
+@@ -9,6 +9,7 @@
+ {
+ 'dependencies': [
+ 'skia_library',
++ 'skia_chrome_opts',
+ '../base/base.gyp:base',
+
'../base/third_party/dynamic_annotations/dynamic_annotations.gyp:dynamic_annotations',
+ ],
+@@ -60,22 +61,16 @@
+ 'ext/skia_utils_base.cc',
+ ],
+ }],
++ ['OS == "ios"', {
++ 'dependencies!': [
++ 'skia_chrome_opts',
++ ],
++ }],
+ [ 'OS != "android" and (OS != "linux" or use_cairo==1)',
{
+ 'sources!': [
+ 'ext/bitmap_platform_device_skia.cc',
+ ],
+ }],
+- [ 'OS != "ios" and target_arch != "arm" and target_arch !=
"mipsel" and \
+- target_arch != "arm64" and target_arch != "mips64el"', {
+- 'sources': [
+- 'ext/convolver_SSE2.cc',
+- ],
+- }],
+- [ 'target_arch == "mipsel" and mips_dsp_rev >= 2',{
+- 'sources': [
+- 'ext/convolver_mips_dspr2.cc',
+- ],
+- }],
+ ],
+
+ 'target_conditions': [
+diff -Nur qtwebengine-opensource-src-5.6.1/src/3rdparty/chromium/skia/skia.gyp
qtwebengine-opensource-src-5.6.1-no-sse2/src/3rdparty/chromium/skia/skia.gyp
+--- qtwebengine-opensource-src-5.6.1/src/3rdparty/chromium/skia/skia.gyp 2016-02-10
11:20:27.000000000 +0100
++++
qtwebengine-opensource-src-5.6.1-no-sse2/src/3rdparty/chromium/skia/skia.gyp 2016-02-25
00:47:15.178722662 +0100
+@@ -91,6 +91,37 @@
+ # targets that are not dependent upon the component type
+ 'targets': [
+ {
++ 'target_name': 'skia_chrome_opts',
++ 'type': 'static_library',
++ 'include_dirs': [
++ '..',
++ 'config',
++ '../third_party/skia/include/core',
++ ],
++ 'conditions': [
++ [ 'os_posix == 1 and OS != "mac" and OS != "android" and
\
++ target_arch != "arm" and target_arch != "mipsel" and \
++ target_arch != "arm64" and target_arch !=
"mips64el"', {
++ 'cflags': [
++ '-msse2',
++ ],
++ }],
++ [ 'target_arch != "arm" and target_arch != "mipsel" and
\
++ target_arch != "arm64" and target_arch !=
"mips64el"', {
++ 'sources': [
++ 'ext/convolver_SSE2.cc',
++ 'ext/convolver_SSE2.h',
++ ],
++ }],
++ [ 'target_arch == "mipsel" and mips_dsp_rev >= 2',{
++ 'sources': [
++ 'ext/convolver_mips_dspr2.cc',
++ 'ext/convolver_mips_dspr2.h',
++ ],
++ }],
++ ],
++ },
++ {
+ 'target_name': 'image_operations_bench',
+ 'type': 'executable',
+ 'dependencies': [
+diff -Nur
qtwebengine-opensource-src-5.6.1/src/3rdparty/chromium/skia/skia_library_opts.gyp
qtwebengine-opensource-src-5.6.1-no-sse2/src/3rdparty/chromium/skia/skia_library_opts.gyp
+---
qtwebengine-opensource-src-5.6.1/src/3rdparty/chromium/skia/skia_library_opts.gyp 2016-02-10
11:20:27.000000000 +0100
++++
qtwebengine-opensource-src-5.6.1-no-sse2/src/3rdparty/chromium/skia/skia_library_opts.gyp 2016-02-25
00:47:15.179722667 +0100
+@@ -18,10 +18,22 @@
+ },
+
+ 'targets': [
+- # SSE files have to be built in a separate target, because gcc needs
+- # different -msse flags for different SSE levels which enable use of SSE
+- # intrinsics but also allow emission of SSE2 instructions for scalar code.
+- # gyp does not allow per-file compiler flags.
++ # Due to an unfortunate intersection of lameness between gcc and gyp,
++ # we have to build the *_SSE2.cpp files in a separate target. The
++ # gcc lameness is that, in order to compile SSE2 intrinsics code, it
++ # must be passed the -msse2 flag. However, with this flag, it may
++ # emit SSE2 instructions even for scalar code, such as the CPUID
++ # test used to test for the presence of SSE2. So that, and all other
++ # code must be compiled *without* -msse2. The gyp lameness is that it
++ # does not allow file-specific CFLAGS, so we must create this extra
++ # target for those files to be compiled with -msse2.
++ #
++ # This is actually only a problem on 32-bit Linux (all Intel Macs have
++ # SSE2, Linux x86_64 has SSE2 by definition, and MSC will happily emit
++ # SSE2 from instrinsics, which generating plain ol' 386 for everything
++ # else). However, to keep the .gyp file simple and avoid platform-specific
++ # build breakage, we do this on all platforms.
++
+ # For about the same reason, we need to compile the ARM opts files
+ # separately as well.
+ {
+@@ -37,12 +49,13 @@
+ ],
+ 'include_dirs': [ '<@(include_dirs)' ],
+ 'conditions': [
++ [ 'os_posix == 1 and OS != "mac" and OS != "android" and
\
++ target_arch != "arm" and target_arch != "arm64" and \
++ target_arch != "mipsel" and target_arch !=
"mips64el"', {
++ 'cflags': [ '-msse2' ],
++ }],
+ [ 'target_arch != "arm" and target_arch != "mipsel" and
\
+ target_arch != "arm64" and target_arch !=
"mips64el"', {
+- # Chrome builds with -msse2 locally, so sse2_sources could in theory
+- # be in the regular skia target. But we need skia_opts for arm
+- # anyway, so putting sse2_sources here is simpler than making this
+- # conditionally a type none target on x86.
+ 'sources': [ '<@(sse2_sources)' ],
+ 'dependencies': [
+ 'skia_opts_ssse3',
+diff -Nur
qtwebengine-opensource-src-5.6.1/src/3rdparty/chromium/third_party/qcms/BUILD.gn
qtwebengine-opensource-src-5.6.1-no-sse2/src/3rdparty/chromium/third_party/qcms/BUILD.gn
+---
qtwebengine-opensource-src-5.6.1/src/3rdparty/chromium/third_party/qcms/BUILD.gn 2016-02-10
11:20:27.000000000 +0100
++++
qtwebengine-opensource-src-5.6.1-no-sse2/src/3rdparty/chromium/third_party/qcms/BUILD.gn 2016-02-25
00:47:15.202722790 +0100
+@@ -26,8 +26,8 @@
+ public_configs = [ ":qcms_config" ]
+
+ if (current_cpu == "x86" || current_cpu == "x64") {
+- defines = [ "SSE2_ENABLE" ]
+- sources += [ "src/transform-sse2.c" ]
++ defines = [ "SSE2_ENABLE" ] # runtime detection
++ deps = [ "qcms_sse2" ]
+ }
+
+ if (is_win) {
+@@ -37,3 +37,15 @@
+ ]
+ }
+ }
++
++source_set("qcms_sse2") {
++ configs -= [ "//build/config/compiler:chromium_code" ]
++ configs += [ "//build/config/compiler:no_chromium_code" ]
++ public_configs = [ ":qcms_config" ]
++
++ if (current_cpu == "x86" || current_cpu == "x64") {
++ defines = [ "SSE2_ENABLE" ]
++ sources = [ "src/transform-sse2.c" ]
++ cflags = [ "-msse2" ]
++ }
++}
+diff -Nur
qtwebengine-opensource-src-5.6.1/src/3rdparty/chromium/third_party/qcms/qcms.gyp
qtwebengine-opensource-src-5.6.1-no-sse2/src/3rdparty/chromium/third_party/qcms/qcms.gyp
+---
qtwebengine-opensource-src-5.6.1/src/3rdparty/chromium/third_party/qcms/qcms.gyp 2016-02-10
11:20:27.000000000 +0100
++++
qtwebengine-opensource-src-5.6.1-no-sse2/src/3rdparty/chromium/third_party/qcms/qcms.gyp 2016-02-25
00:47:15.202722790 +0100
+@@ -33,10 +33,10 @@
+ 'conditions': [
+ ['target_arch=="ia32" or target_arch=="x64"', {
+ 'defines': [
+- 'SSE2_ENABLE',
++ 'SSE2_ENABLE', # runtime detection
+ ],
+- 'sources': [
+- 'src/transform-sse2.c',
++ 'dependencies': [
++ 'qcms_sse2',
+ ],
+ }],
+ ['OS == "win"', {
+@@ -47,6 +47,29 @@
+ }],
+ ],
+ },
++ {
++ 'target_name': 'qcms_sse2',
++ 'type': 'static_library',
++ 'conditions': [
++ ['target_arch == "ia32" or target_arch == "x64"', {
++ 'defines': [
++ 'SSE2_ENABLE',
++ ],
++ 'sources': [
++ # Conditional compilation for SSE2 code on x86 and x64 machines
++ 'src/transform-sse2.c',
++ ],
++ 'cflags': [
++ '-msse2',
++ ],
++ }],
++ ],
++ 'direct_dependent_settings': {
++ 'include_dirs': [
++ './src',
++ ],
++ },
++ },
+ ],
+ }
+
+diff -Nur
qtwebengine-opensource-src-5.6.1/src/3rdparty/chromium/third_party/WebKit/Source/platform/audio/DirectConvolver.cpp
qtwebengine-opensource-src-5.6.1-no-sse2/src/3rdparty/chromium/third_party/WebKit/Source/platform/audio/DirectConvolver.cpp
+---
qtwebengine-opensource-src-5.6.1/src/3rdparty/chromium/third_party/WebKit/Source/platform/audio/DirectConvolver.cpp 2016-02-10
11:20:27.000000000 +0100
++++
qtwebengine-opensource-src-5.6.1-no-sse2/src/3rdparty/chromium/third_party/WebKit/Source/platform/audio/DirectConvolver.cpp 2016-02-25
00:47:15.220722887 +0100
+@@ -30,6 +30,9 @@
+
+ #if ENABLE(WEB_AUDIO)
+
++// include this first to get it before the CPU() function-like macro
++#include "base/cpu.h"
++
+ #include "platform/audio/DirectConvolver.h"
+
+ #if OS(MACOSX)
+@@ -39,14 +42,20 @@
+ #include "platform/audio/VectorMath.h"
+ #include "wtf/CPU.h"
+
+-#if (CPU(X86) || CPU(X86_64)) && !(OS(MACOSX) || USE(WEBAUDIO_IPP))
++#if ((CPU(X86) && defined(__SSE2__)) || CPU(X86_64)) && !(OS(MACOSX) ||
USE(WEBAUDIO_IPP))
+ #include <emmintrin.h>
+ #endif
+
++#if defined(BUILD_ONLY_THE_SSE2_PARTS) && !defined(__SSE2__)
++#error SSE2 parts must be built with -msse2
++#endif
++
+ namespace blink {
+
+ using namespace VectorMath;
+
++#ifndef BUILD_ONLY_THE_SSE2_PARTS
++
+ DirectConvolver::DirectConvolver(size_t inputBlockSize)
+ : m_inputBlockSize(inputBlockSize)
+ #if USE(WEBAUDIO_IPP)
+@@ -54,10 +63,26 @@
+ #endif // USE(WEBAUDIO_IPP)
+ , m_buffer(inputBlockSize * 2)
+ {
++#if CPU(X86)
++ base::CPU cpu;
++ m_haveSSE2 = cpu.has_sse2();
++#endif
+ }
+
++#endif
++
++#ifdef BUILD_ONLY_THE_SSE2_PARTS
++void DirectConvolver::m_processSSE2(AudioFloatArray* convolutionKernel, const float*
sourceP, float* destP, size_t framesToProcess)
++#else
+ void DirectConvolver::process(AudioFloatArray* convolutionKernel, const float* sourceP,
float* destP, size_t framesToProcess)
++#endif
+ {
++#if CPU(X86) && !defined(__SSE2__)
++ if (m_haveSSE2) {
++ m_processSSE2(convolutionKernel, sourceP, destP, framesToProcess);
++ return;
++ }
++#endif
+ ASSERT(framesToProcess == m_inputBlockSize);
+ if (framesToProcess != m_inputBlockSize)
+ return;
+@@ -102,7 +127,7 @@
+ #endif // CPU(X86)
+ #else
+ size_t i = 0;
+-#if CPU(X86) || CPU(X86_64)
++#if (CPU(X86) && defined(__SSE2__)) || CPU(X86_64)
+ // Convolution using SSE2. Currently only do this if both |kernelSize| and
|framesToProcess|
+ // are multiples of 4. If not, use the straightforward loop below.
+
+@@ -412,7 +437,7 @@
+ }
+ destP[i++] = sum;
+ }
+-#if CPU(X86) || CPU(X86_64)
++#if (CPU(X86) && defined(__SSE2__)) || CPU(X86_64)
+ }
+ #endif
+ #endif // OS(MACOSX)
+@@ -422,6 +447,8 @@
+ #endif
+ }
+
++#ifndef BUILD_ONLY_THE_SSE2_PARTS
++
+ void DirectConvolver::reset()
+ {
+ m_buffer.zero();
+@@ -430,6 +457,8 @@
+ #endif // USE(WEBAUDIO_IPP)
+ }
+
++#endif
++
+ } // namespace blink
+
+ #endif // ENABLE(WEB_AUDIO)
+diff -Nur
qtwebengine-opensource-src-5.6.1/src/3rdparty/chromium/third_party/WebKit/Source/platform/audio/DirectConvolver.h
qtwebengine-opensource-src-5.6.1-no-sse2/src/3rdparty/chromium/third_party/WebKit/Source/platform/audio/DirectConvolver.h
+---
qtwebengine-opensource-src-5.6.1/src/3rdparty/chromium/third_party/WebKit/Source/platform/audio/DirectConvolver.h 2016-02-10
11:20:27.000000000 +0100
++++
qtwebengine-opensource-src-5.6.1-no-sse2/src/3rdparty/chromium/third_party/WebKit/Source/platform/audio/DirectConvolver.h 2016-02-25
00:47:15.221722892 +0100
+@@ -31,6 +31,7 @@
+
+ #include "platform/PlatformExport.h"
+ #include "platform/audio/AudioArray.h"
++#include "wtf/CPU.h"
+
+ #if USE(WEBAUDIO_IPP)
+ #include <ipps.h>
+@@ -53,6 +54,11 @@
+ AudioFloatArray m_overlayBuffer;
+ #endif // USE(WEBAUDIO_IPP)
+ AudioFloatArray m_buffer;
++
++#if CPU(X86)
++ bool m_haveSSE2;
++ void m_processSSE2(AudioFloatArray* convolutionKernel, const float* sourceP, float*
destP, size_t framesToProcess);
++#endif
+ };
+
+ } // namespace blink
+diff -Nur
qtwebengine-opensource-src-5.6.1/src/3rdparty/chromium/third_party/WebKit/Source/platform/audio/DirectConvolverSSE2.cpp
qtwebengine-opensource-src-5.6.1-no-sse2/src/3rdparty/chromium/third_party/WebKit/Source/platform/audio/DirectConvolverSSE2.cpp
+---
qtwebengine-opensource-src-5.6.1/src/3rdparty/chromium/third_party/WebKit/Source/platform/audio/DirectConvolverSSE2.cpp 1970-01-01
01:00:00.000000000 +0100
++++
qtwebengine-opensource-src-5.6.1-no-sse2/src/3rdparty/chromium/third_party/WebKit/Source/platform/audio/DirectConvolverSSE2.cpp 2016-02-25
00:47:15.221722892 +0100
+@@ -0,0 +1,2 @@
++#define BUILD_ONLY_THE_SSE2_PARTS
++#include "DirectConvolver.cpp"
+diff -Nur
qtwebengine-opensource-src-5.6.1/src/3rdparty/chromium/third_party/WebKit/Source/platform/audio/SincResampler.cpp
qtwebengine-opensource-src-5.6.1-no-sse2/src/3rdparty/chromium/third_party/WebKit/Source/platform/audio/SincResampler.cpp
+---
qtwebengine-opensource-src-5.6.1/src/3rdparty/chromium/third_party/WebKit/Source/platform/audio/SincResampler.cpp 2016-02-10
11:20:27.000000000 +0100
++++
qtwebengine-opensource-src-5.6.1-no-sse2/src/3rdparty/chromium/third_party/WebKit/Source/platform/audio/SincResampler.cpp 2016-02-25
00:47:15.230722941 +0100
+@@ -30,16 +30,23 @@
+
+ #if ENABLE(WEB_AUDIO)
+
++// include this first to get it before the CPU() function-like macro
++#include "base/cpu.h"
++
+ #include "platform/audio/SincResampler.h"
+
+ #include "platform/audio/AudioBus.h"
+ #include "wtf/CPU.h"
+ #include "wtf/MathExtras.h"
+
+-#if CPU(X86) || CPU(X86_64)
++#if (CPU(X86) && defined(__SSE2__)) || CPU(X86_64)
+ #include <emmintrin.h>
+ #endif
+
++#if defined(BUILD_ONLY_THE_SSE2_PARTS) && !defined(__SSE2__)
++#error SSE2 parts must be built with -msse2
++#endif
++
+ // Input buffer layout, dividing the total buffer into regions (r0 - r5):
+ //
+ //
|----------------|----------------------------------------------------------------|----------------|
+@@ -69,6 +76,8 @@
+
+ namespace blink {
+
++#ifndef BUILD_ONLY_THE_SSE2_PARTS
++
+ SincResampler::SincResampler(double scaleFactor, unsigned kernelSize, unsigned
numberOfKernelOffsets)
+ : m_scaleFactor(scaleFactor)
+ , m_kernelSize(kernelSize)
+@@ -82,6 +91,10 @@
+ , m_sourceProvider(nullptr)
+ , m_isBufferPrimed(false)
+ {
++#if CPU(X86)
++ base::CPU cpu;
++ m_haveSSE2 = cpu.has_sse2();
++#endif
+ initializeKernel();
+ }
+
+@@ -198,8 +211,20 @@
+ }
+ }
+
++#endif
++
++#ifdef BUILD_ONLY_THE_SSE2_PARTS
++void SincResampler::m_processSSE2(AudioSourceProvider* sourceProvider, float*
destination, size_t framesToProcess)
++#else
+ void SincResampler::process(AudioSourceProvider* sourceProvider, float* destination,
size_t framesToProcess)
++#endif
+ {
++#if CPU(X86) && !defined(__SSE2__)
++ if (m_haveSSE2) {
++ m_processSSE2(sourceProvider, destination, framesToProcess);
++ return;
++ }
++#endif
+ bool isGood = sourceProvider && m_blockSize > m_kernelSize &&
m_inputBuffer.size() >= m_blockSize + m_kernelSize && !(m_kernelSize % 2);
+ ASSERT(isGood);
+ if (!isGood)
+@@ -261,7 +286,7 @@
+ {
+ float input;
+
+-#if CPU(X86) || CPU(X86_64)
++#if (CPU(X86) && defined(__SSE2__)) || CPU(X86_64)
+ // If the sourceP address is not 16-byte aligned, the first several
frames (at most three) should be processed seperately.
+ while ((reinterpret_cast<uintptr_t>(inputP) & 0x0F) &&
n) {
+ CONVOLVE_ONE_SAMPLE
+diff -Nur
qtwebengine-opensource-src-5.6.1/src/3rdparty/chromium/third_party/WebKit/Source/platform/audio/SincResampler.h
qtwebengine-opensource-src-5.6.1-no-sse2/src/3rdparty/chromium/third_party/WebKit/Source/platform/audio/SincResampler.h
+---
qtwebengine-opensource-src-5.6.1/src/3rdparty/chromium/third_party/WebKit/Source/platform/audio/SincResampler.h 2016-02-10
11:20:27.000000000 +0100
++++
qtwebengine-opensource-src-5.6.1-no-sse2/src/3rdparty/chromium/third_party/WebKit/Source/platform/audio/SincResampler.h 2016-02-25
00:47:15.236722973 +0100
+@@ -32,6 +32,7 @@
+ #include "platform/PlatformExport.h"
+ #include "platform/audio/AudioArray.h"
+ #include "platform/audio/AudioSourceProvider.h"
++#include "wtf/CPU.h"
+
+ namespace blink {
+
+@@ -80,6 +81,11 @@
+
+ // The buffer is primed once at the very beginning of processing.
+ bool m_isBufferPrimed;
++
++#if CPU(X86)
++ bool m_haveSSE2;
++ void m_processSSE2(AudioSourceProvider*, float* destination, size_t
framesToProcess);
++#endif
+ };
+
+ } // namespace blink
+diff -Nur
qtwebengine-opensource-src-5.6.1/src/3rdparty/chromium/third_party/WebKit/Source/platform/audio/SincResamplerSSE2.cpp
qtwebengine-opensource-src-5.6.1-no-sse2/src/3rdparty/chromium/third_party/WebKit/Source/platform/audio/SincResamplerSSE2.cpp
+---
qtwebengine-opensource-src-5.6.1/src/3rdparty/chromium/third_party/WebKit/Source/platform/audio/SincResamplerSSE2.cpp 1970-01-01
01:00:00.000000000 +0100
++++
qtwebengine-opensource-src-5.6.1-no-sse2/src/3rdparty/chromium/third_party/WebKit/Source/platform/audio/SincResamplerSSE2.cpp 2016-02-25
00:47:15.236722973 +0100
+@@ -0,0 +1,2 @@
++#define BUILD_ONLY_THE_SSE2_PARTS
++#include "SincResampler.cpp"
+diff -Nur
qtwebengine-opensource-src-5.6.1/src/3rdparty/chromium/third_party/WebKit/Source/platform/audio/VectorMath.cpp
qtwebengine-opensource-src-5.6.1-no-sse2/src/3rdparty/chromium/third_party/WebKit/Source/platform/audio/VectorMath.cpp
+---
qtwebengine-opensource-src-5.6.1/src/3rdparty/chromium/third_party/WebKit/Source/platform/audio/VectorMath.cpp 2016-02-10
11:20:27.000000000 +0100
++++
qtwebengine-opensource-src-5.6.1-no-sse2/src/3rdparty/chromium/third_party/WebKit/Source/platform/audio/VectorMath.cpp 2016-02-25
00:47:15.237722978 +0100
+@@ -26,6 +26,9 @@
+
+ #if ENABLE(WEB_AUDIO)
+
++// include this first to get it before the CPU() function-like macro
++#include "base/cpu.h"
++
+ #include "platform/audio/VectorMath.h"
+ #include "wtf/Assertions.h"
+ #include "wtf/CPU.h"
+@@ -35,10 +38,14 @@
+ #include <Accelerate/Accelerate.h>
+ #endif
+
+-#if CPU(X86) || CPU(X86_64)
++#if (CPU(X86) && defined(__SSE2__)) || CPU(X86_64)
+ #include <emmintrin.h>
+ #endif
+
++#if defined(BUILD_ONLY_THE_SSE2_PARTS) && !defined(__SSE2__)
++#error SSE2 parts must be built with -msse2
++#endif
++
+ #if HAVE(ARM_NEON_INTRINSICS)
+ #include <arm_neon.h>
+ #endif
+@@ -121,11 +128,25 @@
+ }
+ #else
+
++#ifdef BUILD_ONLY_THE_SSE2_PARTS
++namespace SSE2 {
++#endif
++
++#if CPU(X86) && !defined(__SSE2__)
++static base::CPU cpu;
++#endif
++
+ void vsma(const float* sourceP, int sourceStride, const float* scale, float* destP, int
destStride, size_t framesToProcess)
+ {
++#if CPU(X86) && !defined(__SSE2__)
++ if (cpu.has_sse2()) {
++ blink::VectorMath::SSE2::vsma(sourceP, sourceStride, scale, destP, destStride,
framesToProcess);
++ return;
++ }
++#endif
+ int n = framesToProcess;
+
+-#if CPU(X86) || CPU(X86_64)
++#if (CPU(X86) && defined(__SSE2__)) || CPU(X86_64)
+ if ((sourceStride == 1) && (destStride == 1)) {
+ float k = *scale;
+
+@@ -196,9 +217,15 @@
+
+ void vsmul(const float* sourceP, int sourceStride, const float* scale, float* destP, int
destStride, size_t framesToProcess)
+ {
++#if CPU(X86) && !defined(__SSE2__)
++ if (cpu.has_sse2()) {
++ blink::VectorMath::SSE2::vsmul(sourceP, sourceStride, scale, destP, destStride,
framesToProcess);
++ return;
++ }
++#endif
+ int n = framesToProcess;
+
+-#if CPU(X86) || CPU(X86_64)
++#if (CPU(X86) && defined(__SSE2__)) || CPU(X86_64)
+ if ((sourceStride == 1) && (destStride == 1)) {
+ float k = *scale;
+
+@@ -269,16 +296,22 @@
+ sourceP += sourceStride;
+ destP += destStride;
+ }
+-#if CPU(X86) || CPU(X86_64)
++#if (CPU(X86) && defined(__SSE2__)) || CPU(X86_64)
+ }
+ #endif
+ }
+
+ void vadd(const float* source1P, int sourceStride1, const float* source2P, int
sourceStride2, float* destP, int destStride, size_t framesToProcess)
+ {
++#if CPU(X86) && !defined(__SSE2__)
++ if (cpu.has_sse2()) {
++ blink::VectorMath::SSE2::vadd(source1P, sourceStride1, source2P, sourceStride2,
destP, destStride, framesToProcess);
++ return;
++ }
++#endif
+ int n = framesToProcess;
+
+-#if CPU(X86) || CPU(X86_64)
++#if (CPU(X86) && defined(__SSE2__)) || CPU(X86_64)
+ if ((sourceStride1 ==1) && (sourceStride2 == 1) && (destStride ==
1)) {
+ // If the sourceP address is not 16-byte aligned, the first several frames (at
most three) should be processed separately.
+ while ((reinterpret_cast<size_t>(source1P) & 0x0F) && n) {
+@@ -381,17 +414,23 @@
+ source2P += sourceStride2;
+ destP += destStride;
+ }
+-#if CPU(X86) || CPU(X86_64)
++#if (CPU(X86) && defined(__SSE2__)) || CPU(X86_64)
+ }
+ #endif
+ }
+
+ void vmul(const float* source1P, int sourceStride1, const float* source2P, int
sourceStride2, float* destP, int destStride, size_t framesToProcess)
+ {
++#if CPU(X86) && !defined(__SSE2__)
++ if (cpu.has_sse2()) {
++ blink::VectorMath::SSE2::vmul(source1P, sourceStride1, source2P, sourceStride2,
destP, destStride, framesToProcess);
++ return;
++ }
++#endif
+
+ int n = framesToProcess;
+
+-#if CPU(X86) || CPU(X86_64)
++#if (CPU(X86) && defined(__SSE2__)) || CPU(X86_64)
+ if ((sourceStride1 == 1) && (sourceStride2 == 1) && (destStride ==
1)) {
+ // If the source1P address is not 16-byte aligned, the first several frames (at
most three) should be processed separately.
+ while ((reinterpret_cast<uintptr_t>(source1P) & 0x0F) && n) {
+@@ -463,8 +502,14 @@
+
+ void zvmul(const float* real1P, const float* imag1P, const float* real2P, const float*
imag2P, float* realDestP, float* imagDestP, size_t framesToProcess)
+ {
++#if CPU(X86) && !defined(__SSE2__)
++ if (cpu.has_sse2()) {
++ blink::VectorMath::SSE2::zvmul(real1P, imag1P, real2P, imag2P, realDestP,
imagDestP, framesToProcess);
++ return;
++ }
++#endif
+ unsigned i = 0;
+-#if CPU(X86) || CPU(X86_64)
++#if (CPU(X86) && defined(__SSE2__)) || CPU(X86_64)
+ // Only use the SSE optimization in the very common case that all addresses are
16-byte aligned.
+ // Otherwise, fall through to the scalar code below.
+ if (!(reinterpret_cast<uintptr_t>(real1P) & 0x0F)
+@@ -519,10 +564,16 @@
+
+ void vsvesq(const float* sourceP, int sourceStride, float* sumP, size_t
framesToProcess)
+ {
++#if CPU(X86) && !defined(__SSE2__)
++ if (cpu.has_sse2()) {
++ blink::VectorMath::SSE2::vsvesq(sourceP, sourceStride, sumP, framesToProcess);
++ return;
++ }
++#endif
+ int n = framesToProcess;
+ float sum = 0;
+
+-#if CPU(X86) || CPU(X86_64)
++#if (CPU(X86) && defined(__SSE2__)) || CPU(X86_64)
+ if (sourceStride == 1) {
+ // If the sourceP address is not 16-byte aligned, the first several frames (at
most three) should be processed separately.
+ while ((reinterpret_cast<uintptr_t>(sourceP) & 0x0F) && n) {
+@@ -584,10 +635,16 @@
+
+ void vmaxmgv(const float* sourceP, int sourceStride, float* maxP, size_t
framesToProcess)
+ {
++#if CPU(X86) && !defined(__SSE2__)
++ if (cpu.has_sse2()) {
++ blink::VectorMath::SSE2::vmaxmgv(sourceP, sourceStride, maxP, framesToProcess);
++ return;
++ }
++#endif
+ int n = framesToProcess;
+ float max = 0;
+
+-#if CPU(X86) || CPU(X86_64)
++#if (CPU(X86) && defined(__SSE2__)) || CPU(X86_64)
+ if (sourceStride == 1) {
+ // If the sourceP address is not 16-byte aligned, the first several frames (at
most three) should be processed separately.
+ while ((reinterpret_cast<uintptr_t>(sourceP) & 0x0F) && n) {
+@@ -651,6 +708,8 @@
+ *maxP = max;
+ }
+
++#ifndef BUILD_ONLY_THE_SSE2_PARTS
++
+ void vclip(const float* sourceP, int sourceStride, const float* lowThresholdP, const
float* highThresholdP, float* destP, int destStride, size_t framesToProcess)
+ {
+ int n = framesToProcess;
+@@ -681,6 +740,12 @@
+ }
+ }
+
++#endif
++
++#ifdef BUILD_ONLY_THE_SSE2_PARTS
++} // namespace SSE2
++#endif
++
+ #endif // OS(MACOSX)
+
+ } // namespace VectorMath
+diff -Nur
qtwebengine-opensource-src-5.6.1/src/3rdparty/chromium/third_party/WebKit/Source/platform/audio/VectorMath.h
qtwebengine-opensource-src-5.6.1-no-sse2/src/3rdparty/chromium/third_party/WebKit/Source/platform/audio/VectorMath.h
+---
qtwebengine-opensource-src-5.6.1/src/3rdparty/chromium/third_party/WebKit/Source/platform/audio/VectorMath.h 2016-02-10
11:20:27.000000000 +0100
++++
qtwebengine-opensource-src-5.6.1-no-sse2/src/3rdparty/chromium/third_party/WebKit/Source/platform/audio/VectorMath.h 2016-02-25
00:47:15.253723064 +0100
+@@ -26,6 +26,7 @@
+ #define VectorMath_h
+
+ #include "platform/PlatformExport.h"
++#include "wtf/CPU.h"
+
+ // Defines the interface for several vector math functions whose implementation will
ideally be optimized.
+
+@@ -53,6 +54,28 @@
+ // Copies elements while clipping values to the threshold inputs.
+ PLATFORM_EXPORT void vclip(const float* sourceP, int sourceStride, const float*
lowThresholdP, const float* highThresholdP, float* destP, int destStride, size_t
framesToProcess);
+
++#if CPU(X86)
++namespace SSE2 {
++// Vector scalar multiply and then add.
++PLATFORM_EXPORT void vsma(const float* sourceP, int sourceStride, const float* scale,
float* destP, int destStride, size_t framesToProcess);
++
++PLATFORM_EXPORT void vsmul(const float* sourceP, int sourceStride, const float* scale,
float* destP, int destStride, size_t framesToProcess);
++PLATFORM_EXPORT void vadd(const float* source1P, int sourceStride1, const float*
source2P, int sourceStride2, float* destP, int destStride, size_t framesToProcess);
++
++// Finds the maximum magnitude of a float vector.
++PLATFORM_EXPORT void vmaxmgv(const float* sourceP, int sourceStride, float* maxP, size_t
framesToProcess);
++
++// Sums the squares of a float vector's elements.
++PLATFORM_EXPORT void vsvesq(const float* sourceP, int sourceStride, float* sumP, size_t
framesToProcess);
++
++// For an element-by-element multiply of two float vectors.
++PLATFORM_EXPORT void vmul(const float* source1P, int sourceStride1, const float*
source2P, int sourceStride2, float* destP, int destStride, size_t framesToProcess);
++
++// Multiplies two complex vectors.
++PLATFORM_EXPORT void zvmul(const float* real1P, const float* imag1P, const float*
real2P, const float* imag2P, float* realDestP, float* imagDestP, size_t framesToProcess);
++}
++#endif
++
+ } // namespace VectorMath
+ } // namespace blink
+
+diff -Nur
qtwebengine-opensource-src-5.6.1/src/3rdparty/chromium/third_party/WebKit/Source/platform/audio/VectorMathSSE2.cpp
qtwebengine-opensource-src-5.6.1-no-sse2/src/3rdparty/chromium/third_party/WebKit/Source/platform/audio/VectorMathSSE2.cpp
+---
qtwebengine-opensource-src-5.6.1/src/3rdparty/chromium/third_party/WebKit/Source/platform/audio/VectorMathSSE2.cpp 1970-01-01
01:00:00.000000000 +0100
++++
qtwebengine-opensource-src-5.6.1-no-sse2/src/3rdparty/chromium/third_party/WebKit/Source/platform/audio/VectorMathSSE2.cpp 2016-02-25
00:47:15.255723075 +0100
+@@ -0,0 +1,2 @@
++#define BUILD_ONLY_THE_SSE2_PARTS
++#include "VectorMath.cpp"
+diff -Nur
qtwebengine-opensource-src-5.6.1/src/3rdparty/chromium/third_party/WebKit/Source/platform/blink_platform.gyp
qtwebengine-opensource-src-5.6.1-no-sse2/src/3rdparty/chromium/third_party/WebKit/Source/platform/blink_platform.gyp
+---
qtwebengine-opensource-src-5.6.1/src/3rdparty/chromium/third_party/WebKit/Source/platform/blink_platform.gyp 2016-02-10
11:20:27.000000000 +0100
++++
qtwebengine-opensource-src-5.6.1-no-sse2/src/3rdparty/chromium/third_party/WebKit/Source/platform/blink_platform.gyp 2016-02-25
00:47:15.279723203 +0100
+@@ -419,6 +419,11 @@
+ '<(DEPTH)/third_party/openmax_dl/dl/dl.gyp:openmax_dl',
+ ],
+ }],
++ ['target_arch == "ia32"', {
++ 'dependencies': [
++ 'blink_sse2',
++ ],
++ }],
+ ['target_arch=="arm"', {
+ 'dependencies': [
+ 'blink_arm_neon',
+@@ -434,6 +439,37 @@
+ }],
+ ],
+ },
++ {
++ 'target_name': 'blink_sse2',
++ 'conditions': [
++ ['target_arch=="ia32"', {
++ 'type': 'static_library',
++ 'dependencies': [
++ '<(DEPTH)/third_party/khronos/khronos.gyp:khronos_headers',
++ '../config.gyp:config',
++ '../wtf/wtf.gyp:wtf',
++ 'blink_common',
++ 'blink_heap_asm_stubs',
++ 'blink_prerequisites',
++ ],
++ 'defines': [
++ 'BLINK_PLATFORM_IMPLEMENTATION=1',
++ 'INSIDE_BLINK',
++ ],
++ 'sources': [
++ 'audio/DirectConvolverSSE2.cpp',
++ 'audio/SincResamplerSSE2.cpp',
++ 'audio/VectorMathSSE2.cpp',
++ ],
++ 'cflags': [
++ '-msse2',
++ '-mfpmath=sse',
++ ],
++ },{ # target_arch != "ia32"
++ 'type': 'none',
++ }],
++ ],
++ },
+ # The *NEON.cpp files fail to compile when -mthumb is passed. Force
+ # them to build in ARM mode.
+ # See
https://bugs.webkit.org/show_bug.cgi?id=62916.
+diff -Nur
qtwebengine-opensource-src-5.6.1/src/3rdparty/chromium/third_party/WebKit/Source/platform/graphics/cpu/x86/WebGLImageConversionSSE.h
qtwebengine-opensource-src-5.6.1-no-sse2/src/3rdparty/chromium/third_party/WebKit/Source/platform/graphics/cpu/x86/WebGLImageConversionSSE.h
+---
qtwebengine-opensource-src-5.6.1/src/3rdparty/chromium/third_party/WebKit/Source/platform/graphics/cpu/x86/WebGLImageConversionSSE.h 2016-02-10
11:20:27.000000000 +0100
++++
qtwebengine-opensource-src-5.6.1-no-sse2/src/3rdparty/chromium/third_party/WebKit/Source/platform/graphics/cpu/x86/WebGLImageConversionSSE.h 2016-02-25
00:47:15.279723203 +0100
+@@ -5,7 +5,7 @@
+ #ifndef WebGLImageConversionSSE_h
+ #define WebGLImageConversionSSE_h
+
+-#if CPU(X86) || CPU(X86_64)
++#if (CPU(X86) && defined(__SSE2__)) || CPU(X86_64)
+
+ #include <emmintrin.h>
+
+diff -Nur
qtwebengine-opensource-src-5.6.1/src/3rdparty/chromium/third_party/WebKit/Source/platform/graphics/gpu/WebGLImageConversion.cpp
qtwebengine-opensource-src-5.6.1-no-sse2/src/3rdparty/chromium/third_party/WebKit/Source/platform/graphics/gpu/WebGLImageConversion.cpp
+---
qtwebengine-opensource-src-5.6.1/src/3rdparty/chromium/third_party/WebKit/Source/platform/graphics/gpu/WebGLImageConversion.cpp 2016-02-10
11:20:27.000000000 +0100
++++
qtwebengine-opensource-src-5.6.1-no-sse2/src/3rdparty/chromium/third_party/WebKit/Source/platform/graphics/gpu/WebGLImageConversion.cpp 2016-02-25
00:47:15.280723209 +0100
+@@ -422,7 +422,7 @@
+ const uint32_t* source32 = reinterpret_cast_ptr<const uint32_t*>(source);
+ uint32_t* destination32 = reinterpret_cast_ptr<uint32_t*>(destination);
+
+-#if CPU(X86) || CPU(X86_64)
++#if (CPU(X86) && defined(__SSE2__)) || CPU(X86_64)
+ SIMD::unpackOneRowOfBGRA8LittleToRGBA8(source32, destination32, pixelsPerRow);
+ #endif
+ for (unsigned i = 0; i < pixelsPerRow; ++i) {
+@@ -623,7 +623,7 @@
+ // FIXME: this routine is lossy and must be removed.
+ template<> void pack<WebGLImageConversion::DataFormatR8,
WebGLImageConversion::AlphaDoUnmultiply, uint8_t, uint8_t>(const uint8_t* source,
uint8_t* destination, unsigned pixelsPerRow)
+ {
+-#if CPU(X86) || CPU(X86_64)
++#if (CPU(X86) && defined(__SSE2__)) || CPU(X86_64)
+ SIMD::packOneRowOfRGBA8LittleToR8(source, destination, pixelsPerRow);
+ #endif
+ for (unsigned i = 0; i < pixelsPerRow; ++i) {
+@@ -731,7 +731,7 @@
+ // FIXME: this routine is lossy and must be removed.
+ template<> void pack<WebGLImageConversion::DataFormatRGBA8,
WebGLImageConversion::AlphaDoUnmultiply, uint8_t, uint8_t>(const uint8_t* source,
uint8_t* destination, unsigned pixelsPerRow)
+ {
+-#if CPU(X86) || CPU(X86_64)
++#if (CPU(X86) && defined(__SSE2__)) || CPU(X86_64)
+ SIMD::packOneRowOfRGBA8LittleToRGBA8(source, destination, pixelsPerRow);
+ #else
+ for (unsigned i = 0; i < pixelsPerRow; ++i) {
+diff -Nur
qtwebengine-opensource-src-5.6.1/src/3rdparty/chromium/third_party/webrtc/common_audio/real_fourier.cc
qtwebengine-opensource-src-5.6.1-no-sse2/src/3rdparty/chromium/third_party/webrtc/common_audio/real_fourier.cc
+---
qtwebengine-opensource-src-5.6.1/src/3rdparty/chromium/third_party/webrtc/common_audio/real_fourier.cc 2016-02-10
11:20:27.000000000 +0100
++++
qtwebengine-opensource-src-5.6.1-no-sse2/src/3rdparty/chromium/third_party/webrtc/common_audio/real_fourier.cc 2016-02-25
00:47:15.316723402 +0100
+@@ -14,6 +14,7 @@
+ #include "webrtc/common_audio/real_fourier_ooura.h"
+ #include "webrtc/common_audio/real_fourier_openmax.h"
+ #include "webrtc/common_audio/signal_processing/include/spl_inl.h"
++#include "webrtc/system_wrappers/interface/cpu_features_wrapper.h"
+
+ namespace webrtc {
+
+@@ -23,7 +24,15 @@
+
+ rtc::scoped_ptr<RealFourier> RealFourier::Create(int fft_order) {
+ #if defined(RTC_USE_OPENMAX_DL)
++#if defined(WEBRTC_ARCH_X86_FAMILY) && !defined(__SSE2__)
++ // x86 CPU detection required.
++ if (WebRtc_GetCPUInfo(kSSE2))
++ return rtc::scoped_ptr<RealFourier>(new RealFourierOpenmax(fft_order));
++ else
++ return rtc::scoped_ptr<RealFourier>(new RealFourierOoura(fft_order));
++#else
+ return rtc::scoped_ptr<RealFourier>(new RealFourierOpenmax(fft_order));
++#endif
+ #else
+ return rtc::scoped_ptr<RealFourier>(new RealFourierOoura(fft_order));
+ #endif
+diff -Nur
qtwebengine-opensource-src-5.6.1/src/3rdparty/chromium/tools/gyp/pylib/gyp/generator/ninja.py
qtwebengine-opensource-src-5.6.1-no-sse2/src/3rdparty/chromium/tools/gyp/pylib/gyp/generator/ninja.py
+---
qtwebengine-opensource-src-5.6.1/src/3rdparty/chromium/tools/gyp/pylib/gyp/generator/ninja.py 2016-02-10
11:20:27.000000000 +0100
++++
qtwebengine-opensource-src-5.6.1-no-sse2/src/3rdparty/chromium/tools/gyp/pylib/gyp/generator/ninja.py 2016-02-25
00:47:15.345723558 +0100
+@@ -1282,6 +1282,8 @@
+ # Make sure that we have relative paths to our out/(Release|Debug), where we
generate our .pri file, and then prepend $$PWD to them.
+ prefixed_objects = ['$$PWD/' + o for o in toAbsPaths(objects)]
+ prefixed_archives = ['$$PWD/' + o for o in toAbsPaths(libs)]
++ if len(solibs):
++ prefixed_solibs = ['$$PWD/' + so for so in toAbsPaths(solibs)]
+
+ pri_file.write("QMAKE_LFLAGS += %s\n" % qmakeLiteral('
'.join(prefixed_lflags)))
+ pri_file.write("OBJECTS += %s\n" % qmakeLiteral('
'.join(prefixed_objects)))
+@@ -1290,6 +1292,8 @@
+ pri_file.write("LIBS_PRIVATE += -Wl,--start-group %s
-Wl,--end-group\n" % qmakeLiteral(' '.join(prefixed_archives)))
+ else:
+ pri_file.write("LIBS_PRIVATE += %s\n" % qmakeLiteral('
'.join(prefixed_archives)))
++ if len(solibs):
++ pri_file.write("LIBS_PRIVATE += %s\n" % qmakeLiteral('
'.join(prefixed_solibs)))
+ # External libs have to come after objects/archives, the linker resolve them in
order.
+ pri_file.write("LIBS_PRIVATE += %s\n" % qmakeLiteral('
'.join(prefixed_library_dirs + prefixed_libraries)))
+ # Make sure that if ninja modifies one of the inputs, qmake/make will link again.
+diff -Nur qtwebengine-opensource-src-5.6.1/src/3rdparty/chromium/v8/build/standalone.gypi
qtwebengine-opensource-src-5.6.1-no-sse2/src/3rdparty/chromium/v8/build/standalone.gypi
+---
qtwebengine-opensource-src-5.6.1/src/3rdparty/chromium/v8/build/standalone.gypi 2016-02-10
11:20:27.000000000 +0100
++++
qtwebengine-opensource-src-5.6.1-no-sse2/src/3rdparty/chromium/v8/build/standalone.gypi 2016-02-25
00:47:15.361723643 +0100
+@@ -94,6 +94,9 @@
+ 'use_goma%': 0,
+ 'gomadir%': '',
+ 'conditions': [
++ ['target_arch=="ia32"', {
++ 'v8_target_arch%': 'x87',
++ }],
+ # Set default gomadir.
+ ['OS=="win"', {
+ 'gomadir': 'c:\\goma\\goma-win',
+diff -Nur qtwebengine-opensource-src-5.6.1/src/3rdparty/chromium/v8/build/toolchain.gypi
qtwebengine-opensource-src-5.6.1-no-sse2/src/3rdparty/chromium/v8/build/toolchain.gypi
+---
qtwebengine-opensource-src-5.6.1/src/3rdparty/chromium/v8/build/toolchain.gypi 2016-02-10
11:20:27.000000000 +0100
++++
qtwebengine-opensource-src-5.6.1-no-sse2/src/3rdparty/chromium/v8/build/toolchain.gypi 2016-02-25
00:47:15.364723659 +0100
+@@ -93,6 +93,9 @@
+ 'binutils_dir%': '',
+
+ 'conditions': [
++ ['target_arch=="ia32"', {
++ 'v8_target_arch%': 'x87',
++ }],
+ ['OS=="linux" and host_arch=="x64"', {
+ 'binutils_dir%': 'third_party/binutils/Linux_x64/Release/bin',
+ }],
+diff -Nur qtwebengine-opensource-src-5.6.1/src/3rdparty/chromium/v8/BUILD.gn
qtwebengine-opensource-src-5.6.1-no-sse2/src/3rdparty/chromium/v8/BUILD.gn
+--- qtwebengine-opensource-src-5.6.1/src/3rdparty/chromium/v8/BUILD.gn 2016-02-10
11:20:27.000000000 +0100
++++ qtwebengine-opensource-src-5.6.1-no-sse2/src/3rdparty/chromium/v8/BUILD.gn 2016-02-25
00:47:15.377723729 +0100
+@@ -1135,41 +1135,41 @@
+
+ if (v8_target_arch == "x86") {
+ sources += [
+- "src/ia32/assembler-ia32-inl.h",
+- "src/ia32/assembler-ia32.cc",
+- "src/ia32/assembler-ia32.h",
+- "src/ia32/builtins-ia32.cc",
+- "src/ia32/code-stubs-ia32.cc",
+- "src/ia32/code-stubs-ia32.h",
+- "src/ia32/codegen-ia32.cc",
+- "src/ia32/codegen-ia32.h",
+- "src/ia32/cpu-ia32.cc",
+- "src/ia32/debug-ia32.cc",
+- "src/ia32/deoptimizer-ia32.cc",
+- "src/ia32/disasm-ia32.cc",
+- "src/ia32/frames-ia32.cc",
+- "src/ia32/frames-ia32.h",
+- "src/ia32/full-codegen-ia32.cc",
+- "src/ia32/interface-descriptors-ia32.cc",
+- "src/ia32/lithium-codegen-ia32.cc",
+- "src/ia32/lithium-codegen-ia32.h",
+- "src/ia32/lithium-gap-resolver-ia32.cc",
+- "src/ia32/lithium-gap-resolver-ia32.h",
+- "src/ia32/lithium-ia32.cc",
+- "src/ia32/lithium-ia32.h",
+- "src/ia32/macro-assembler-ia32.cc",
+- "src/ia32/macro-assembler-ia32.h",
+- "src/ia32/regexp-macro-assembler-ia32.cc",
+- "src/ia32/regexp-macro-assembler-ia32.h",
+- "src/compiler/ia32/code-generator-ia32.cc",
+- "src/compiler/ia32/instruction-codes-ia32.h",
+- "src/compiler/ia32/instruction-selector-ia32.cc",
+- "src/compiler/ia32/linkage-ia32.cc",
+- "src/ic/ia32/access-compiler-ia32.cc",
+- "src/ic/ia32/handler-compiler-ia32.cc",
+- "src/ic/ia32/ic-ia32.cc",
+- "src/ic/ia32/ic-compiler-ia32.cc",
+- "src/ic/ia32/stub-cache-ia32.cc",
++ "src/x87/assembler-x87-inl.h",
++ "src/x87/assembler-x87.cc",
++ "src/x87/assembler-x87.h",
++ "src/x87/builtins-x87.cc",
++ "src/x87/code-stubs-x87.cc",
++ "src/x87/code-stubs-x87.h",
++ "src/x87/codegen-x87.cc",
++ "src/x87/codegen-x87.h",
++ "src/x87/cpu-x87.cc",
++ "src/x87/debug-x87.cc",
++ "src/x87/deoptimizer-x87.cc",
++ "src/x87/disasm-x87.cc",
++ "src/x87/frames-x87.cc",
++ "src/x87/frames-x87.h",
++ "src/x87/full-codegen-x87.cc",
++ "src/x87/interface-descriptors-x87.cc",
++ "src/x87/lithium-codegen-x87.cc",
++ "src/x87/lithium-codegen-x87.h",
++ "src/x87/lithium-gap-resolver-x87.cc",
++ "src/x87/lithium-gap-resolver-x87.h",
++ "src/x87/lithium-x87.cc",
++ "src/x87/lithium-x87.h",
++ "src/x87/macro-assembler-x87.cc",
++ "src/x87/macro-assembler-x87.h",
++ "src/x87/regexp-macro-assembler-x87.cc",
++ "src/x87/regexp-macro-assembler-x87.h",
++ "src/compiler/x87/code-generator-x87.cc",
++ "src/compiler/x87/instruction-codes-x87.h",
++ "src/compiler/x87/instruction-selector-x87.cc",
++ "src/compiler/x87/linkage-x87.cc",
++ "src/ic/x87/access-compiler-x87.cc",
++ "src/ic/x87/handler-compiler-x87.cc",
++ "src/ic/x87/ic-x87.cc",
++ "src/ic/x87/ic-compiler-x87.cc",
++ "src/ic/x87/stub-cache-x87.cc",
+ ]
+ } else if (v8_target_arch == "x64") {
+ sources += [
+diff -Nur
qtwebengine-opensource-src-5.6.1/src/3rdparty/chromium/v8/tools/gyp/make-v8-sse2-gyp.sh
qtwebengine-opensource-src-5.6.1-no-sse2/src/3rdparty/chromium/v8/tools/gyp/make-v8-sse2-gyp.sh
+---
qtwebengine-opensource-src-5.6.1/src/3rdparty/chromium/v8/tools/gyp/make-v8-sse2-gyp.sh 1970-01-01
01:00:00.000000000 +0100
++++
qtwebengine-opensource-src-5.6.1-no-sse2/src/3rdparty/chromium/v8/tools/gyp/make-v8-sse2-gyp.sh 2016-02-25
00:47:15.377723729 +0100
+@@ -0,0 +1,56 @@
++#!/bin/sh
++# This script renames the v8 targets to _sse2 names so that they do not conflict
++# with the non-SSE2 versions.
++
++# Copyright 2016 Kevin Kofler. All rights reserved.
++# Redistribution and use in source and binary forms, with or without
++# modification, are permitted provided that the following conditions are
++# met:
++#
++# * Redistributions of source code must retain the above copyright
++# notice, this list of conditions and the following disclaimer.
++# * Redistributions in binary form must reproduce the above
++# copyright notice, this list of conditions and the following
++# disclaimer in the documentation and/or other materials provided
++# with the distribution.
++# * Neither the name of Google Inc. nor the names of its
++# contributors may be used to endorse or promote products derived
++# from this software without specific prior written permission.
++#
++# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
++# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
++# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
++# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
++# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
++# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
++# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
++# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
++# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
++# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
++# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
++
++# add comment noting that the file is generated
++echo "# Generated from v8.gyp by make-v8-sse2-gyp.sh" >v8_sse2.gyp
++# rename all target names
++SUBTARGETS=`grep "'target_name': '" v8.gyp | sed -e
"s/^.*'target_name': '//g" -e "s/',$//g"`
++SEDS=
++for SUBTARGET in $SUBTARGETS ; do
++ SEDS=$SEDS\ -e\ "s/'$SUBTARGET\(['#]\)/'${SUBTARGET}_sse2\1/g"
++done
++# in addition:
++# * set v8_target_arch to "ia32" (instead of "x87")
++# * rename all actions
++# * fix mksnapshot_exec to match the renamed target
++# * rename the generated snapshot.cc (but not mksnapshot.cc) to snapshot_sse2.cc
++# * rename the generated *libraries.cc to *libraries_sse2.cc
++# * rename the generated *.bin to *_sse2.bin
++# * set product_name and product_dir for the v8_sse2 target
++sed -e "s/^\( 'variables': {\)/\1\n 'v8_target_arch':
'ia32',/g" \
++ -e "s/\('action_name': '\)/\1v8_sse2_/g" \
++ $SEDS \
++ -e "s/\('mksnapshot_exec': '.*mksnapshot\)/\1_sse2/g" \
++ -e "s#/snapshot\.cc#/snapshot_sse2.cc#g" \
++ -e "s/libraries\.cc/libraries_sse2.cc/g" \
++ -e "s/\.bin/_sse2.bin/g" \
++ -e "s#^\( *\)\('target_name':
'v8_sse2',\)#\1\2\n\1'product_name':
'v8',\n\1'product_dir': '<(PRODUCT_DIR)/lib/sse2',#g" \
++ v8.gyp >>v8_sse2.gyp
+diff -Nur qtwebengine-opensource-src-5.6.1/src/3rdparty/chromium/v8/tools/gyp/v8.gyp
qtwebengine-opensource-src-5.6.1-no-sse2/src/3rdparty/chromium/v8/tools/gyp/v8.gyp
+--- qtwebengine-opensource-src-5.6.1/src/3rdparty/chromium/v8/tools/gyp/v8.gyp 2016-02-10
11:20:27.000000000 +0100
++++
qtwebengine-opensource-src-5.6.1-no-sse2/src/3rdparty/chromium/v8/tools/gyp/v8.gyp 2016-02-25
00:47:15.395723826 +0100
+@@ -34,6 +34,14 @@
+ 'v8_extra_library_files%': [],
+ 'mksnapshot_exec':
'<(PRODUCT_DIR)/<(EXECUTABLE_PREFIX)mksnapshot<(EXECUTABLE_SUFFIX)',
+ 'remove_v8base_debug_symbols%': 0,
++ 'conditions': [
++ # build V8 shared on ia32 so we can swap x87 vs. SSE2 builds
++ ['target_arch == "ia32"', {
++ 'v8_component%': 'shared_library',
++ }, {
++ 'v8_component%': '<(component)',
++ }],
++ ],
+ },
+ 'includes': ['../../build/toolchain.gypi',
'../../build/features.gypi'],
+ 'targets': [
+@@ -47,8 +55,8 @@
+ }, {
+ 'toolsets': ['target'],
+ }],
+- ['component=="shared_library"', {
+- 'type': '<(component)',
++ ['v8_component=="shared_library"', {
++ 'type': '<(v8_component)',
+ 'sources': [
+ # Note: on non-Windows we still build this file so that gyp
+ # has some sources to link into the component.
+@@ -159,7 +167,7 @@
+ 'js2c',
+ ],
+ }],
+- ['component=="shared_library"', {
++ ['v8_component=="shared_library"', {
+ 'defines': [
+ 'V8_SHARED',
+ 'BUILDING_V8_SHARED',
+@@ -237,7 +245,7 @@
+ 'toolsets': ['target'],
+ 'dependencies': ['js2c'],
+ }],
+- ['component=="shared_library"', {
++ ['v8_component=="shared_library"', {
+ 'defines': [
+ 'BUILDING_V8_SHARED',
+ 'V8_SHARED',
+@@ -265,7 +273,7 @@
+ 'natives_blob',
+ ],
+ }],
+- ['component=="shared_library"', {
++ ['v8_component=="shared_library"', {
+ 'defines': [
+ 'V8_SHARED',
+ 'BUILDING_V8_SHARED',
+@@ -1340,7 +1348,7 @@
+ # See
http://crbug.com/485155.
+ 'msvs_shard': 4,
+ }],
+- ['component=="shared_library"', {
++ ['v8_component=="shared_library"', {
+ 'defines': [
+ 'BUILDING_V8_SHARED',
+ 'V8_SHARED',
+diff -Nur qtwebengine-opensource-src-5.6.1/src/3rdparty/chromium/v8/tools/gyp/v8_sse2.gyp
qtwebengine-opensource-src-5.6.1-no-sse2/src/3rdparty/chromium/v8/tools/gyp/v8_sse2.gyp
+---
qtwebengine-opensource-src-5.6.1/src/3rdparty/chromium/v8/tools/gyp/v8_sse2.gyp 1970-01-01
01:00:00.000000000 +0100
++++
qtwebengine-opensource-src-5.6.1-no-sse2/src/3rdparty/chromium/v8/tools/gyp/v8_sse2.gyp 2016-02-25
00:47:15.396723831 +0100
+@@ -0,0 +1,1952 @@
++# Generated from v8.gyp by make-v8-sse2-gyp.sh
++# Copyright 2012 the V8 project authors. All rights reserved.
++# Redistribution and use in source and binary forms, with or without
++# modification, are permitted provided that the following conditions are
++# met:
++#
++# * Redistributions of source code must retain the above copyright
++# notice, this list of conditions and the following disclaimer.
++# * Redistributions in binary form must reproduce the above
++# copyright notice, this list of conditions and the following
++# disclaimer in the documentation and/or other materials provided
++# with the distribution.
++# * Neither the name of Google Inc. nor the names of its
++# contributors may be used to endorse or promote products derived
++# from this software without specific prior written permission.
++#
++# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
++# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
++# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
++# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
++# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
++# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
++# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
++# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
++# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
++# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
++# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
++
++{
++ 'variables': {
++ 'v8_target_arch': 'ia32',
++ 'icu_use_data_file_flag%': 0,
++ 'v8_code': 1,
++ 'v8_random_seed%': 314159265,
++ 'embed_script%': "",
++ 'v8_extra_library_files%': [],
++ 'mksnapshot_exec':
'<(PRODUCT_DIR)/<(EXECUTABLE_PREFIX)mksnapshot_sse2<(EXECUTABLE_SUFFIX)',
++ 'remove_v8base_debug_symbols%': 0,
++ 'conditions': [
++ # build V8 shared on ia32 so we can swap x87 vs. SSE2 builds
++ ['target_arch == "ia32"', {
++ 'v8_component%': 'shared_library',
++ }, {
++ 'v8_component%': '<(component)',
++ }],
++ ],
++ },
++ 'includes': ['../../build/toolchain.gypi',
'../../build/features.gypi'],
++ 'targets': [
++ {
++ 'target_name': 'v8_sse2',
++ 'product_name': 'v8',
++ 'product_dir': '<(PRODUCT_DIR)/lib/sse2',
++ 'dependencies_traverse': 1,
++ 'dependencies': ['v8_maybe_snapshot_sse2'],
++ 'conditions': [
++ ['want_separate_host_toolset==1', {
++ 'toolsets': ['host', 'target'],
++ }, {
++ 'toolsets': ['target'],
++ }],
++ ['v8_component=="shared_library"', {
++ 'type': '<(v8_component)',
++ 'sources': [
++ # Note: on non-Windows we still build this file so that gyp
++ # has some sources to link into the component.
++ '../../src/v8dll-main.cc',
++ ],
++ 'include_dirs': [
++ '../..',
++ ],
++ 'defines': [
++ 'V8_SHARED',
++ 'BUILDING_V8_SHARED',
++ ],
++ 'direct_dependent_settings': {
++ 'defines': [
++ 'V8_SHARED',
++ 'USING_V8_SHARED',
++ ],
++ },
++ 'target_conditions': [
++ ['OS=="android" and _toolset=="target"', {
++ 'libraries': [
++ '-llog',
++ ],
++ 'include_dirs': [
++ 'src/common/android/include',
++ ],
++ }],
++ ],
++ 'conditions': [
++ ['OS=="mac"', {
++ 'xcode_settings': {
++ 'OTHER_LDFLAGS': ['-dynamiclib', '-all_load']
++ },
++ }],
++ ['soname_version!=""', {
++ 'product_extension': 'so.<(soname_version)',
++ }],
++ ],
++ },
++ {
++ 'type': 'none',
++ }],
++ ],
++ 'direct_dependent_settings': {
++ 'include_dirs': [
++ '../../include',
++ ],
++ },
++ },
++ {
++ # This rule delegates to either v8_snapshot, v8_nosnapshot, or
++ # v8_external_snapshot, depending on the current variables.
++ # The intention is to make the 'calling' rules a bit simpler.
++ 'target_name': 'v8_maybe_snapshot_sse2',
++ 'type': 'none',
++ 'conditions': [
++ ['v8_use_snapshot!="true"', {
++ # The dependency on v8_base should come from a transitive
++ # dependency however the Android toolchain requires libv8_base.a
++ # to appear before libv8_snapshot.a so it's listed explicitly.
++ 'dependencies': ['v8_base_sse2',
'v8_nosnapshot_sse2'],
++ }],
++ ['v8_use_snapshot=="true" and
v8_use_external_startup_data==0', {
++ # The dependency on v8_base should come from a transitive
++ # dependency however the Android toolchain requires libv8_base.a
++ # to appear before libv8_snapshot.a so it's listed explicitly.
++ 'dependencies': ['v8_base_sse2', 'v8_snapshot_sse2'],
++ }],
++ ['v8_use_snapshot=="true" and v8_use_external_startup_data==1 and
want_separate_host_toolset==0', {
++ 'dependencies': ['v8_base_sse2',
'v8_external_snapshot_sse2'],
++ 'inputs': [ '<(PRODUCT_DIR)/snapshot_blob_sse2.bin', ],
++ }],
++ ['v8_use_snapshot=="true" and v8_use_external_startup_data==1 and
want_separate_host_toolset==1', {
++ 'dependencies': ['v8_base_sse2',
'v8_external_snapshot_sse2'],
++ 'target_conditions': [
++ ['_toolset=="host"', {
++ 'inputs': [
++ '<(PRODUCT_DIR)/snapshot_blob_host_sse2.bin',
++ ],
++ }, {
++ 'inputs': [
++ '<(PRODUCT_DIR)/snapshot_blob_sse2.bin',
++ ],
++ }],
++ ],
++ }],
++ ['want_separate_host_toolset==1', {
++ 'toolsets': ['host', 'target'],
++ }, {
++ 'toolsets': ['target'],
++ }],
++ ]
++ },
++ {
++ 'target_name': 'v8_snapshot_sse2',
++ 'type': 'static_library',
++ 'conditions': [
++ ['want_separate_host_toolset==1', {
++ 'toolsets': ['host', 'target'],
++ 'dependencies': [
++ 'mksnapshot_sse2#host',
++ 'js2c_sse2#host',
++ ],
++ }, {
++ 'toolsets': ['target'],
++ 'dependencies': [
++ 'mksnapshot_sse2',
++ 'js2c_sse2',
++ ],
++ }],
++ ['v8_component=="shared_library"', {
++ 'defines': [
++ 'V8_SHARED',
++ 'BUILDING_V8_SHARED',
++ ],
++ 'direct_dependent_settings': {
++ 'defines': [
++ 'V8_SHARED',
++ 'USING_V8_SHARED',
++ ],
++ },
++ }],
++ ],
++ 'dependencies': [
++ 'v8_base_sse2',
++ ],
++ 'include_dirs+': [
++ '../..',
++ ],
++ 'sources': [
++ '<(SHARED_INTERMEDIATE_DIR)/libraries_sse2.cc',
++ '<(SHARED_INTERMEDIATE_DIR)/experimental-libraries_sse2.cc',
++ '<(SHARED_INTERMEDIATE_DIR)/extras-libraries_sse2.cc',
++ '<(INTERMEDIATE_DIR)/snapshot_sse2.cc',
++ ],
++ 'actions': [
++ {
++ 'action_name': 'v8_sse2_run_mksnapshot',
++ 'inputs': [
++ '<(mksnapshot_exec)',
++ '<(embed_script)',
++ ],
++ 'outputs': [
++ '<(INTERMEDIATE_DIR)/snapshot_sse2.cc',
++ ],
++ 'variables': {
++ 'mksnapshot_flags': [
++ '--log-snapshot-positions',
++ '--logfile', '<(INTERMEDIATE_DIR)/snapshot.log',
++ ],
++ 'conditions': [
++ ['v8_random_seed!=0', {
++ 'mksnapshot_flags': ['--random-seed',
'<(v8_random_seed)'],
++ }],
++ ],
++ },
++ 'action': [
++ '<(mksnapshot_exec)',
++ '<@(mksnapshot_flags)',
++ '<(a)(INTERMEDIATE_DIR)/snapshot_sse2.cc',
++ '<(embed_script)',
++ ],
++ },
++ ],
++ },
++ {
++ 'target_name': 'v8_nosnapshot_sse2',
++ 'type': 'static_library',
++ 'dependencies': [
++ 'v8_base_sse2',
++ ],
++ 'include_dirs+': [
++ '../..',
++ ],
++ 'sources': [
++ '<(SHARED_INTERMEDIATE_DIR)/libraries_sse2.cc',
++ '<(SHARED_INTERMEDIATE_DIR)/experimental-libraries_sse2.cc',
++ '<(SHARED_INTERMEDIATE_DIR)/extras-libraries_sse2.cc',
++ '../../src/snapshot/snapshot-empty.cc',
++ ],
++ 'conditions': [
++ ['want_separate_host_toolset==1', {
++ 'toolsets': ['host', 'target'],
++ 'dependencies': ['js2c_sse2#host'],
++ }, {
++ 'toolsets': ['target'],
++ 'dependencies': ['js2c_sse2'],
++ }],
++ ['v8_component=="shared_library"', {
++ 'defines': [
++ 'BUILDING_V8_SHARED',
++ 'V8_SHARED',
++ ],
++ }],
++ ]
++ },
++ {
++ 'target_name': 'v8_external_snapshot_sse2',
++ 'type': 'static_library',
++ 'conditions': [
++ [ 'v8_use_external_startup_data==1', {
++ 'conditions': [
++ ['want_separate_host_toolset==1', {
++ 'toolsets': ['host', 'target'],
++ 'dependencies': [
++ 'mksnapshot_sse2#host',
++ 'js2c_sse2#host',
++ 'natives_blob_sse2',
++ ]}, {
++ 'toolsets': ['target'],
++ 'dependencies': [
++ 'mksnapshot_sse2',
++ 'js2c_sse2',
++ 'natives_blob_sse2',
++ ],
++ }],
++ ['v8_component=="shared_library"', {
++ 'defines': [
++ 'V8_SHARED',
++ 'BUILDING_V8_SHARED',
++ ],
++ 'direct_dependent_settings': {
++ 'defines': [
++ 'V8_SHARED',
++ 'USING_V8_SHARED',
++ ],
++ },
++ }],
++ ],
++ 'dependencies': [
++ 'v8_base_sse2',
++ ],
++ 'include_dirs+': [
++ '../..',
++ ],
++ 'sources': [
++ '../../src/snapshot/natives-external.cc',
++ '../../src/snapshot/snapshot-external.cc',
++ ],
++ 'actions': [
++ {
++ 'action_name': 'v8_sse2_run_mksnapshot (external)',
++ 'inputs': [
++ '<(mksnapshot_exec)',
++ ],
++ 'variables': {
++ 'mksnapshot_flags': [
++ '--log-snapshot-positions',
++ '--logfile', '<(INTERMEDIATE_DIR)/snapshot.log',
++ ],
++ 'conditions': [
++ ['v8_random_seed!=0', {
++ 'mksnapshot_flags': ['--random-seed',
'<(v8_random_seed)'],
++ }],
++ ],
++ },
++ 'conditions': [
++ ['want_separate_host_toolset==1', {
++ 'target_conditions': [
++ ['_toolset=="host"', {
++ 'outputs': [
++ '<(INTERMEDIATE_DIR)/snapshot_sse2.cc',
++ '<(PRODUCT_DIR)/snapshot_blob_host_sse2.bin',
++ ],
++ 'action': [
++ '<(mksnapshot_exec)',
++ '<@(mksnapshot_flags)',
++ '<(a)(INTERMEDIATE_DIR)/snapshot_sse2.cc',
++ '--startup_blob',
'<(PRODUCT_DIR)/snapshot_blob_host_sse2.bin',
++ '<(embed_script)',
++ ],
++ }, {
++ 'outputs': [
++ '<(INTERMEDIATE_DIR)/snapshot_sse2.cc',
++ '<(PRODUCT_DIR)/snapshot_blob_sse2.bin',
++ ],
++ 'action': [
++ '<(mksnapshot_exec)',
++ '<@(mksnapshot_flags)',
++ '<(a)(INTERMEDIATE_DIR)/snapshot_sse2.cc',
++ '--startup_blob',
'<(PRODUCT_DIR)/snapshot_blob_sse2.bin',
++ '<(embed_script)',
++ ],
++ }],
++ ],
++ }, {
++ 'outputs': [
++ '<(INTERMEDIATE_DIR)/snapshot_sse2.cc',
++ '<(PRODUCT_DIR)/snapshot_blob_sse2.bin',
++ ],
++ 'action': [
++ '<(mksnapshot_exec)',
++ '<@(mksnapshot_flags)',
++ '<(a)(INTERMEDIATE_DIR)/snapshot_sse2.cc',
++ '--startup_blob',
'<(PRODUCT_DIR)/snapshot_blob_sse2.bin',
++ '<(embed_script)',
++ ],
++ }],
++ ],
++ },
++ ],
++ }],
++ ],
++ },
++ {
++ 'target_name': 'v8_base_sse2',
++ 'type': 'static_library',
++ 'dependencies': [
++ 'v8_libbase_sse2',
++ ],
++ 'variables': {
++ 'optimize': 'max',
++ },
++ 'include_dirs+': [
++ '../..',
++ ],
++ 'defines': [
++ # TODO(jochen): Remove again after this is globally turned on.
++ 'V8_IMMINENT_DEPRECATION_WARNINGS',
++ ],
++ 'sources': [ ### gcmole(all) ###
++ '../../include/v8-debug.h',
++ '../../include/v8-platform.h',
++ '../../include/v8-profiler.h',
++ '../../include/v8-testing.h',
++ '../../include/v8-util.h',
++ '../../include/v8-version.h',
++ '../../include/v8.h',
++ '../../include/v8config.h',
++ '../../src/accessors.cc',
++ '../../src/accessors.h',
++ '../../src/allocation.cc',
++ '../../src/allocation.h',
++ '../../src/allocation-site-scopes.cc',
++ '../../src/allocation-site-scopes.h',
++ '../../src/allocation-tracker.cc',
++ '../../src/allocation-tracker.h',
++ '../../src/api.cc',
++ '../../src/api.h',
++ '../../src/api-natives.cc',
++ '../../src/api-natives.h',
++ '../../src/arguments.cc',
++ '../../src/arguments.h',
++ '../../src/assembler.cc',
++ '../../src/assembler.h',
++ '../../src/assert-scope.h',
++ '../../src/assert-scope.cc',
++ '../../src/ast-value-factory.cc',
++ '../../src/ast-value-factory.h',
++ '../../src/ast-literal-reindexer.cc',
++ '../../src/ast-literal-reindexer.h',
++ '../../src/ast-numbering.cc',
++ '../../src/ast-numbering.h',
++ '../../src/ast.cc',
++ '../../src/ast.h',
++ '../../src/background-parsing-task.cc',
++ '../../src/background-parsing-task.h',
++ '../../src/bailout-reason.cc',
++ '../../src/bailout-reason.h',
++ '../../src/basic-block-profiler.cc',
++ '../../src/basic-block-profiler.h',
++ '../../src/bignum-dtoa.cc',
++ '../../src/bignum-dtoa.h',
++ '../../src/bignum.cc',
++ '../../src/bignum.h',
++ '../../src/bit-vector.cc',
++ '../../src/bit-vector.h',
++ '../../src/bootstrapper.cc',
++ '../../src/bootstrapper.h',
++ '../../src/builtins.cc',
++ '../../src/builtins.h',
++ '../../src/bytecodes-irregexp.h',
++ '../../src/cached-powers.cc',
++ '../../src/cached-powers.h',
++ '../../src/char-predicates.cc',
++ '../../src/char-predicates-inl.h',
++ '../../src/char-predicates.h',
++ '../../src/checks.cc',
++ '../../src/checks.h',
++ '../../src/circular-queue-inl.h',
++ '../../src/circular-queue.h',
++ '../../src/code-factory.cc',
++ '../../src/code-factory.h',
++ '../../src/code-stubs.cc',
++ '../../src/code-stubs.h',
++ '../../src/code-stubs-hydrogen.cc',
++ '../../src/code.h',
++ '../../src/codegen.cc',
++ '../../src/codegen.h',
++ '../../src/compilation-cache.cc',
++ '../../src/compilation-cache.h',
++ '../../src/compilation-dependencies.cc',
++ '../../src/compilation-dependencies.h',
++ '../../src/compilation-statistics.cc',
++ '../../src/compilation-statistics.h',
++ '../../src/compiler/access-builder.cc',
++ '../../src/compiler/access-builder.h',
++ '../../src/compiler/all-nodes.cc',
++ '../../src/compiler/all-nodes.h',
++ '../../src/compiler/ast-graph-builder.cc',
++ '../../src/compiler/ast-graph-builder.h',
++ '../../src/compiler/ast-loop-assignment-analyzer.cc',
++ '../../src/compiler/ast-loop-assignment-analyzer.h',
++ '../../src/compiler/basic-block-instrumentor.cc',
++ '../../src/compiler/basic-block-instrumentor.h',
++ '../../src/compiler/change-lowering.cc',
++ '../../src/compiler/change-lowering.h',
++ '../../src/compiler/coalesced-live-ranges.cc',
++ '../../src/compiler/coalesced-live-ranges.h',
++ '../../src/compiler/code-generator-impl.h',
++ '../../src/compiler/code-generator.cc',
++ '../../src/compiler/code-generator.h',
++ '../../src/compiler/common-node-cache.cc',
++ '../../src/compiler/common-node-cache.h',
++ '../../src/compiler/common-operator-reducer.cc',
++ '../../src/compiler/common-operator-reducer.h',
++ '../../src/compiler/common-operator.cc',
++ '../../src/compiler/common-operator.h',
++ '../../src/compiler/control-builders.cc',
++ '../../src/compiler/control-builders.h',
++ '../../src/compiler/control-equivalence.cc',
++ '../../src/compiler/control-equivalence.h',
++ '../../src/compiler/control-flow-optimizer.cc',
++ '../../src/compiler/control-flow-optimizer.h',
++ '../../src/compiler/dead-code-elimination.cc',
++ '../../src/compiler/dead-code-elimination.h',
++ '../../src/compiler/diamond.h',
++ '../../src/compiler/frame.h',
++ '../../src/compiler/frame-elider.cc',
++ '../../src/compiler/frame-elider.h',
++ "../../src/compiler/frame-states.cc",
++ "../../src/compiler/frame-states.h",
++ '../../src/compiler/gap-resolver.cc',
++ '../../src/compiler/gap-resolver.h',
++ '../../src/compiler/graph-builder.h',
++ '../../src/compiler/graph-reducer.cc',
++ '../../src/compiler/graph-reducer.h',
++ '../../src/compiler/graph-replay.cc',
++ '../../src/compiler/graph-replay.h',
++ '../../src/compiler/graph-trimmer.cc',
++ '../../src/compiler/graph-trimmer.h',
++ '../../src/compiler/graph-visualizer.cc',
++ '../../src/compiler/graph-visualizer.h',
++ '../../src/compiler/graph.cc',
++ '../../src/compiler/graph.h',
++ '../../src/compiler/greedy-allocator.cc',
++ '../../src/compiler/greedy-allocator.h',
++ '../../src/compiler/instruction-codes.h',
++ '../../src/compiler/instruction-selector-impl.h',
++ '../../src/compiler/instruction-selector.cc',
++ '../../src/compiler/instruction-selector.h',
++ '../../src/compiler/instruction.cc',
++ '../../src/compiler/instruction.h',
++ '../../src/compiler/js-builtin-reducer.cc',
++ '../../src/compiler/js-builtin-reducer.h',
++ '../../src/compiler/js-context-specialization.cc',
++ '../../src/compiler/js-context-specialization.h',
++ '../../src/compiler/js-frame-specialization.cc',
++ '../../src/compiler/js-frame-specialization.h',
++ '../../src/compiler/js-generic-lowering.cc',
++ '../../src/compiler/js-generic-lowering.h',
++ '../../src/compiler/js-graph.cc',
++ '../../src/compiler/js-graph.h',
++ '../../src/compiler/js-inlining.cc',
++ '../../src/compiler/js-inlining.h',
++ '../../src/compiler/js-intrinsic-lowering.cc',
++ '../../src/compiler/js-intrinsic-lowering.h',
++ '../../src/compiler/js-operator.cc',
++ '../../src/compiler/js-operator.h',
++ '../../src/compiler/js-type-feedback.cc',
++ '../../src/compiler/js-type-feedback.h',
++ '../../src/compiler/js-typed-lowering.cc',
++ '../../src/compiler/js-typed-lowering.h',
++ '../../src/compiler/jump-threading.cc',
++ '../../src/compiler/jump-threading.h',
++ '../../src/compiler/linkage-impl.h',
++ '../../src/compiler/linkage.cc',
++ '../../src/compiler/linkage.h',
++ '../../src/compiler/liveness-analyzer.cc',
++ '../../src/compiler/liveness-analyzer.h',
++ '../../src/compiler/load-elimination.cc',
++ '../../src/compiler/load-elimination.h',
++ '../../src/compiler/loop-analysis.cc',
++ '../../src/compiler/loop-analysis.h',
++ '../../src/compiler/loop-peeling.cc',
++ '../../src/compiler/loop-peeling.h',
++ '../../src/compiler/machine-operator-reducer.cc',
++ '../../src/compiler/machine-operator-reducer.h',
++ '../../src/compiler/machine-operator.cc',
++ '../../src/compiler/machine-operator.h',
++ '../../src/compiler/machine-type.cc',
++ '../../src/compiler/machine-type.h',
++ '../../src/compiler/move-optimizer.cc',
++ '../../src/compiler/move-optimizer.h',
++ '../../src/compiler/node-aux-data.h',
++ '../../src/compiler/node-cache.cc',
++ '../../src/compiler/node-cache.h',
++ '../../src/compiler/node-marker.cc',
++ '../../src/compiler/node-marker.h',
++ '../../src/compiler/node-matchers.cc',
++ '../../src/compiler/node-matchers.h',
++ '../../src/compiler/node-properties.cc',
++ '../../src/compiler/node-properties.h',
++ '../../src/compiler/node.cc',
++ '../../src/compiler/node.h',
++ '../../src/compiler/opcodes.cc',
++ '../../src/compiler/opcodes.h',
++ '../../src/compiler/operator-properties.cc',
++ '../../src/compiler/operator-properties.h',
++ '../../src/compiler/operator.cc',
++ '../../src/compiler/operator.h',
++ '../../src/compiler/osr.cc',
++ '../../src/compiler/osr.h',
++ '../../src/compiler/pipeline.cc',
++ '../../src/compiler/pipeline.h',
++ '../../src/compiler/pipeline-statistics.cc',
++ '../../src/compiler/pipeline-statistics.h',
++ '../../src/compiler/raw-machine-assembler.cc',
++ '../../src/compiler/raw-machine-assembler.h',
++ '../../src/compiler/register-allocator.cc',
++ '../../src/compiler/register-allocator.h',
++ '../../src/compiler/register-allocator-verifier.cc',
++ '../../src/compiler/register-allocator-verifier.h',
++ '../../src/compiler/register-configuration.cc',
++ '../../src/compiler/register-configuration.h',
++ '../../src/compiler/representation-change.h',
++ '../../src/compiler/schedule.cc',
++ '../../src/compiler/schedule.h',
++ '../../src/compiler/scheduler.cc',
++ '../../src/compiler/scheduler.h',
++ '../../src/compiler/select-lowering.cc',
++ '../../src/compiler/select-lowering.h',
++ '../../src/compiler/simplified-lowering.cc',
++ '../../src/compiler/simplified-lowering.h',
++ '../../src/compiler/simplified-operator-reducer.cc',
++ '../../src/compiler/simplified-operator-reducer.h',
++ '../../src/compiler/simplified-operator.cc',
++ '../../src/compiler/simplified-operator.h',
++ '../../src/compiler/source-position.cc',
++ '../../src/compiler/source-position.h',
++ '../../src/compiler/state-values-utils.cc',
++ '../../src/compiler/state-values-utils.h',
++ '../../src/compiler/tail-call-optimization.cc',
++ '../../src/compiler/tail-call-optimization.h',
++ '../../src/compiler/typer.cc',
++ '../../src/compiler/typer.h',
++ '../../src/compiler/value-numbering-reducer.cc',
++ '../../src/compiler/value-numbering-reducer.h',
++ '../../src/compiler/verifier.cc',
++ '../../src/compiler/verifier.h',
++ '../../src/compiler/zone-pool.cc',
++ '../../src/compiler/zone-pool.h',
++ '../../src/compiler.cc',
++ '../../src/compiler.h',
++ '../../src/contexts.cc',
++ '../../src/contexts.h',
++ '../../src/conversions-inl.h',
++ '../../src/conversions.cc',
++ '../../src/conversions.h',
++ '../../src/counters.cc',
++ '../../src/counters.h',
++ '../../src/cpu-profiler-inl.h',
++ '../../src/cpu-profiler.cc',
++ '../../src/cpu-profiler.h',
++ '../../src/date.cc',
++ '../../src/date.h',
++ '../../src/dateparser-inl.h',
++ '../../src/dateparser.cc',
++ '../../src/dateparser.h',
++ '../../src/debug.cc',
++ '../../src/debug.h',
++ '../../src/deoptimizer.cc',
++ '../../src/deoptimizer.h',
++ '../../src/disasm.h',
++ '../../src/disassembler.cc',
++ '../../src/disassembler.h',
++ '../../src/diy-fp.cc',
++ '../../src/diy-fp.h',
++ '../../src/double.h',
++ '../../src/dtoa.cc',
++ '../../src/dtoa.h',
++ '../../src/effects.h',
++ '../../src/elements-kind.cc',
++ '../../src/elements-kind.h',
++ '../../src/elements.cc',
++ '../../src/elements.h',
++ '../../src/execution.cc',
++ '../../src/execution.h',
++ '../../src/expression-classifier.h',
++ '../../src/extensions/externalize-string-extension.cc',
++ '../../src/extensions/externalize-string-extension.h',
++ '../../src/extensions/free-buffer-extension.cc',
++ '../../src/extensions/free-buffer-extension.h',
++ '../../src/extensions/gc-extension.cc',
++ '../../src/extensions/gc-extension.h',
++ '../../src/extensions/statistics-extension.cc',
++ '../../src/extensions/statistics-extension.h',
++ '../../src/extensions/trigger-failure-extension.cc',
++ '../../src/extensions/trigger-failure-extension.h',
++ '../../src/factory.cc',
++ '../../src/factory.h',
++ '../../src/fast-dtoa.cc',
++ '../../src/fast-dtoa.h',
++ '../../src/field-index.h',
++ '../../src/field-index-inl.h',
++ '../../src/fixed-dtoa.cc',
++ '../../src/fixed-dtoa.h',
++ '../../src/flag-definitions.h',
++ '../../src/flags.cc',
++ '../../src/flags.h',
++ '../../src/frames-inl.h',
++ '../../src/frames.cc',
++ '../../src/frames.h',
++ '../../src/full-codegen.cc',
++ '../../src/full-codegen.h',
++ '../../src/func-name-inferrer.cc',
++ '../../src/func-name-inferrer.h',
++ '../../src/gdb-jit.cc',
++ '../../src/gdb-jit.h',
++ '../../src/global-handles.cc',
++ '../../src/global-handles.h',
++ '../../src/globals.h',
++ '../../src/handles-inl.h',
++ '../../src/handles.cc',
++ '../../src/handles.h',
++ '../../src/hashmap.h',
++ '../../src/heap-profiler.cc',
++ '../../src/heap-profiler.h',
++ '../../src/heap-snapshot-generator-inl.h',
++ '../../src/heap-snapshot-generator.cc',
++ '../../src/heap-snapshot-generator.h',
++ '../../src/heap/memory-reducer.cc',
++ '../../src/heap/memory-reducer.h',
++ '../../src/heap/gc-idle-time-handler.cc',
++ '../../src/heap/gc-idle-time-handler.h',
++ '../../src/heap/gc-tracer.cc',
++ '../../src/heap/gc-tracer.h',
++ '../../src/heap/heap-inl.h',
++ '../../src/heap/heap.cc',
++ '../../src/heap/heap.h',
++ '../../src/heap/identity-map.cc',
++ '../../src/heap/identity-map.h',
++ '../../src/heap/incremental-marking-inl.h',
++ '../../src/heap/incremental-marking.cc',
++ '../../src/heap/incremental-marking.h',
++ '../../src/heap/mark-compact-inl.h',
++ '../../src/heap/mark-compact.cc',
++ '../../src/heap/mark-compact.h',
++ '../../src/heap/objects-visiting-inl.h',
++ '../../src/heap/objects-visiting.cc',
++ '../../src/heap/objects-visiting.h',
++ '../../src/heap/spaces-inl.h',
++ '../../src/heap/spaces.cc',
++ '../../src/heap/spaces.h',
++ '../../src/heap/store-buffer-inl.h',
++ '../../src/heap/store-buffer.cc',
++ '../../src/heap/store-buffer.h',
++ '../../src/hydrogen-alias-analysis.h',
++ '../../src/hydrogen-bce.cc',
++ '../../src/hydrogen-bce.h',
++ '../../src/hydrogen-bch.cc',
++ '../../src/hydrogen-bch.h',
++ '../../src/hydrogen-canonicalize.cc',
++ '../../src/hydrogen-canonicalize.h',
++ '../../src/hydrogen-check-elimination.cc',
++ '../../src/hydrogen-check-elimination.h',
++ '../../src/hydrogen-dce.cc',
++ '../../src/hydrogen-dce.h',
++ '../../src/hydrogen-dehoist.cc',
++ '../../src/hydrogen-dehoist.h',
++ '../../src/hydrogen-environment-liveness.cc',
++ '../../src/hydrogen-environment-liveness.h',
++ '../../src/hydrogen-escape-analysis.cc',
++ '../../src/hydrogen-escape-analysis.h',
++ '../../src/hydrogen-flow-engine.h',
++ '../../src/hydrogen-instructions.cc',
++ '../../src/hydrogen-instructions.h',
++ '../../src/hydrogen.cc',
++ '../../src/hydrogen.h',
++ '../../src/hydrogen-gvn.cc',
++ '../../src/hydrogen-gvn.h',
++ '../../src/hydrogen-infer-representation.cc',
++ '../../src/hydrogen-infer-representation.h',
++ '../../src/hydrogen-infer-types.cc',
++ '../../src/hydrogen-infer-types.h',
++ '../../src/hydrogen-load-elimination.cc',
++ '../../src/hydrogen-load-elimination.h',
++ '../../src/hydrogen-mark-deoptimize.cc',
++ '../../src/hydrogen-mark-deoptimize.h',
++ '../../src/hydrogen-mark-unreachable.cc',
++ '../../src/hydrogen-mark-unreachable.h',
++ '../../src/hydrogen-osr.cc',
++ '../../src/hydrogen-osr.h',
++ '../../src/hydrogen-range-analysis.cc',
++ '../../src/hydrogen-range-analysis.h',
++ '../../src/hydrogen-redundant-phi.cc',
++ '../../src/hydrogen-redundant-phi.h',
++ '../../src/hydrogen-removable-simulates.cc',
++ '../../src/hydrogen-removable-simulates.h',
++ '../../src/hydrogen-representation-changes.cc',
++ '../../src/hydrogen-representation-changes.h',
++ '../../src/hydrogen-sce.cc',
++ '../../src/hydrogen-sce.h',
++ '../../src/hydrogen-store-elimination.cc',
++ '../../src/hydrogen-store-elimination.h',
++ '../../src/hydrogen-types.cc',
++ '../../src/hydrogen-types.h',
++ '../../src/hydrogen-uint32-analysis.cc',
++ '../../src/hydrogen-uint32-analysis.h',
++ '../../src/i18n.cc',
++ '../../src/i18n.h',
++ '../../src/icu_util.cc',
++ '../../src/icu_util.h',
++ '../../src/ic/access-compiler.cc',
++ '../../src/ic/access-compiler.h',
++ '../../src/ic/call-optimization.cc',
++ '../../src/ic/call-optimization.h',
++ '../../src/ic/handler-compiler.cc',
++ '../../src/ic/handler-compiler.h',
++ '../../src/ic/ic-inl.h',
++ '../../src/ic/ic-state.cc',
++ '../../src/ic/ic-state.h',
++ '../../src/ic/ic.cc',
++ '../../src/ic/ic.h',
++ '../../src/ic/ic-compiler.cc',
++ '../../src/ic/ic-compiler.h',
++ '../../src/interface-descriptors.cc',
++ '../../src/interface-descriptors.h',
++ '../../src/interpreter-irregexp.cc',
++ '../../src/interpreter-irregexp.h',
++ '../../src/isolate.cc',
++ '../../src/isolate.h',
++ '../../src/json-parser.h',
++ '../../src/json-stringifier.h',
++ '../../src/jsregexp-inl.h',
++ '../../src/jsregexp.cc',
++ '../../src/jsregexp.h',
++ '../../src/layout-descriptor-inl.h',
++ '../../src/layout-descriptor.cc',
++ '../../src/layout-descriptor.h',
++ '../../src/list-inl.h',
++ '../../src/list.h',
++ '../../src/lithium-allocator-inl.h',
++ '../../src/lithium-allocator.cc',
++ '../../src/lithium-allocator.h',
++ '../../src/lithium-codegen.cc',
++ '../../src/lithium-codegen.h',
++ '../../src/lithium.cc',
++ '../../src/lithium.h',
++ '../../src/lithium-inl.h',
++ '../../src/liveedit.cc',
++ '../../src/liveedit.h',
++ '../../src/log-inl.h',
++ '../../src/log-utils.cc',
++ '../../src/log-utils.h',
++ '../../src/log.cc',
++ '../../src/log.h',
++ '../../src/lookup-inl.h',
++ '../../src/lookup.cc',
++ '../../src/lookup.h',
++ '../../src/macro-assembler.h',
++ '../../src/messages.cc',
++ '../../src/messages.h',
++ '../../src/modules.cc',
++ '../../src/modules.h',
++ '../../src/msan.h',
++ '../../src/objects-debug.cc',
++ '../../src/objects-inl.h',
++ '../../src/objects-printer.cc',
++ '../../src/objects.cc',
++ '../../src/objects.h',
++ '../../src/optimizing-compile-dispatcher.cc',
++ '../../src/optimizing-compile-dispatcher.h',
++ '../../src/ostreams.cc',
++ '../../src/ostreams.h',
++ '../../src/pattern-rewriter.cc',
++ '../../src/parser.cc',
++ '../../src/parser.h',
++ '../../src/pending-compilation-error-handler.cc',
++ '../../src/pending-compilation-error-handler.h',
++ '../../src/preparse-data-format.h',
++ '../../src/preparse-data.cc',
++ '../../src/preparse-data.h',
++ '../../src/preparser.cc',
++ '../../src/preparser.h',
++ '../../src/prettyprinter.cc',
++ '../../src/prettyprinter.h',
++ '../../src/profile-generator-inl.h',
++ '../../src/profile-generator.cc',
++ '../../src/profile-generator.h',
++ '../../src/property-details.h',
++ '../../src/property.cc',
++ '../../src/property.h',
++ '../../src/prototype.h',
++ '../../src/regexp-macro-assembler-irregexp-inl.h',
++ '../../src/regexp-macro-assembler-irregexp.cc',
++ '../../src/regexp-macro-assembler-irregexp.h',
++ '../../src/regexp-macro-assembler-tracer.cc',
++ '../../src/regexp-macro-assembler-tracer.h',
++ '../../src/regexp-macro-assembler.cc',
++ '../../src/regexp-macro-assembler.h',
++ '../../src/regexp-stack.cc',
++ '../../src/regexp-stack.h',
++ '../../src/rewriter.cc',
++ '../../src/rewriter.h',
++ '../../src/runtime-profiler.cc',
++ '../../src/runtime-profiler.h',
++ '../../src/runtime/runtime-array.cc',
++ '../../src/runtime/runtime-atomics.cc',
++ '../../src/runtime/runtime-classes.cc',
++ '../../src/runtime/runtime-collections.cc',
++ '../../src/runtime/runtime-compiler.cc',
++ '../../src/runtime/runtime-date.cc',
++ '../../src/runtime/runtime-debug.cc',
++ '../../src/runtime/runtime-forin.cc',
++ '../../src/runtime/runtime-function.cc',
++ '../../src/runtime/runtime-generator.cc',
++ '../../src/runtime/runtime-i18n.cc',
++ '../../src/runtime/runtime-internal.cc',
++ '../../src/runtime/runtime-json.cc',
++ '../../src/runtime/runtime-literals.cc',
++ '../../src/runtime/runtime-liveedit.cc',
++ '../../src/runtime/runtime-maths.cc',
++ '../../src/runtime/runtime-numbers.cc',
++ '../../src/runtime/runtime-object.cc',
++ '../../src/runtime/runtime-observe.cc',
++ '../../src/runtime/runtime-proxy.cc',
++ '../../src/runtime/runtime-regexp.cc',
++ '../../src/runtime/runtime-scopes.cc',
++ '../../src/runtime/runtime-strings.cc',
++ '../../src/runtime/runtime-symbol.cc',
++ '../../src/runtime/runtime-test.cc',
++ '../../src/runtime/runtime-typedarray.cc',
++ '../../src/runtime/runtime-uri.cc',
++ '../../src/runtime/runtime-utils.h',
++ '../../src/runtime/runtime.cc',
++ '../../src/runtime/runtime.h',
++ '../../src/safepoint-table.cc',
++ '../../src/safepoint-table.h',
++ '../../src/sampler.cc',
++ '../../src/sampler.h',
++ '../../src/scanner-character-streams.cc',
++ '../../src/scanner-character-streams.h',
++ '../../src/scanner.cc',
++ '../../src/scanner.h',
++ '../../src/scopeinfo.cc',
++ '../../src/scopeinfo.h',
++ '../../src/scopes.cc',
++ '../../src/scopes.h',
++ '../../src/signature.h',
++ '../../src/simulator.h',
++ '../../src/small-pointer-list.h',
++ '../../src/smart-pointers.h',
++ '../../src/snapshot/natives.h',
++ '../../src/snapshot/serialize.cc',
++ '../../src/snapshot/serialize.h',
++ '../../src/snapshot/snapshot.h',
++ '../../src/snapshot/snapshot-common.cc',
++ '../../src/snapshot/snapshot-source-sink.cc',
++ '../../src/snapshot/snapshot-source-sink.h',
++ '../../src/splay-tree.h',
++ '../../src/splay-tree-inl.h',
++ '../../src/startup-data-util.cc',
++ '../../src/startup-data-util.h',
++ '../../src/string-builder.cc',
++ '../../src/string-builder.h',
++ '../../src/string-search.cc',
++ '../../src/string-search.h',
++ '../../src/string-stream.cc',
++ '../../src/string-stream.h',
++ '../../src/strings-storage.cc',
++ '../../src/strings-storage.h',
++ '../../src/strtod.cc',
++ '../../src/strtod.h',
++ '../../src/ic/stub-cache.cc',
++ '../../src/ic/stub-cache.h',
++ '../../src/token.cc',
++ '../../src/token.h',
++ '../../src/transitions-inl.h',
++ '../../src/transitions.cc',
++ '../../src/transitions.h',
++ '../../src/type-feedback-vector-inl.h',
++ '../../src/type-feedback-vector.cc',
++ '../../src/type-feedback-vector.h',
++ '../../src/type-info.cc',
++ '../../src/type-info.h',
++ '../../src/types-inl.h',
++ '../../src/types.cc',
++ '../../src/types.h',
++ '../../src/typing.cc',
++ '../../src/typing.h',
++ '../../src/unbound-queue-inl.h',
++ '../../src/unbound-queue.h',
++ '../../src/unicode-inl.h',
++ '../../src/unicode.cc',
++ '../../src/unicode.h',
++ '../../src/unicode-decoder.cc',
++ '../../src/unicode-decoder.h',
++ '../../src/unique.h',
++ '../../src/utils.cc',
++ '../../src/utils.h',
++ '../../src/v8.cc',
++ '../../src/v8.h',
++ '../../src/v8memory.h',
++ '../../src/v8threads.cc',
++ '../../src/v8threads.h',
++ '../../src/variables.cc',
++ '../../src/variables.h',
++ '../../src/vector.h',
++ '../../src/version.cc',
++ '../../src/version.h',
++ '../../src/vm-state-inl.h',
++ '../../src/vm-state.h',
++ '../../src/zone.cc',
++ '../../src/zone.h',
++ '../../src/zone-allocator.h',
++ '../../src/zone-containers.h',
++ '../../src/third_party/fdlibm/fdlibm.cc',
++ '../../src/third_party/fdlibm/fdlibm.h',
++ ],
++ 'conditions': [
++ ['OS!="win" and remove_v8base_debug_symbols==1', {
++ 'cflags!': ['-g', '-gdwarf-4'],
++ }],
++ ['want_separate_host_toolset==1', {
++ 'toolsets': ['host', 'target'],
++ }, {
++ 'toolsets': ['target'],
++ }],
++ ['v8_target_arch=="arm"', {
++ 'sources': [ ### gcmole(arch:arm) ###
++ '../../src/arm/assembler-arm-inl.h',
++ '../../src/arm/assembler-arm.cc',
++ '../../src/arm/assembler-arm.h',
++ '../../src/arm/builtins-arm.cc',
++ '../../src/arm/code-stubs-arm.cc',
++ '../../src/arm/code-stubs-arm.h',
++ '../../src/arm/codegen-arm.cc',
++ '../../src/arm/codegen-arm.h',
++ '../../src/arm/constants-arm.h',
++ '../../src/arm/constants-arm.cc',
++ '../../src/arm/cpu-arm.cc',
++ '../../src/arm/debug-arm.cc',
++ '../../src/arm/deoptimizer-arm.cc',
++ '../../src/arm/disasm-arm.cc',
++ '../../src/arm/frames-arm.cc',
++ '../../src/arm/frames-arm.h',
++ '../../src/arm/full-codegen-arm.cc',
++ '../../src/arm/interface-descriptors-arm.cc',
++ '../../src/arm/interface-descriptors-arm.h',
++ '../../src/arm/lithium-arm.cc',
++ '../../src/arm/lithium-arm.h',
++ '../../src/arm/lithium-codegen-arm.cc',
++ '../../src/arm/lithium-codegen-arm.h',
++ '../../src/arm/lithium-gap-resolver-arm.cc',
++ '../../src/arm/lithium-gap-resolver-arm.h',
++ '../../src/arm/macro-assembler-arm.cc',
++ '../../src/arm/macro-assembler-arm.h',
++ '../../src/arm/regexp-macro-assembler-arm.cc',
++ '../../src/arm/regexp-macro-assembler-arm.h',
++ '../../src/arm/simulator-arm.cc',
++ '../../src/arm/simulator-arm.h',
++ '../../src/compiler/arm/code-generator-arm.cc',
++ '../../src/compiler/arm/instruction-codes-arm.h',
++ '../../src/compiler/arm/instruction-selector-arm.cc',
++ '../../src/compiler/arm/linkage-arm.cc',
++ '../../src/ic/arm/access-compiler-arm.cc',
++ '../../src/ic/arm/handler-compiler-arm.cc',
++ '../../src/ic/arm/ic-arm.cc',
++ '../../src/ic/arm/ic-compiler-arm.cc',
++ '../../src/ic/arm/stub-cache-arm.cc',
++ ],
++ }],
++ ['v8_target_arch=="arm64"', {
++ 'sources': [ ### gcmole(arch:arm64) ###
++ '../../src/arm64/assembler-arm64.cc',
++ '../../src/arm64/assembler-arm64.h',
++ '../../src/arm64/assembler-arm64-inl.h',
++ '../../src/arm64/builtins-arm64.cc',
++ '../../src/arm64/codegen-arm64.cc',
++ '../../src/arm64/codegen-arm64.h',
++ '../../src/arm64/code-stubs-arm64.cc',
++ '../../src/arm64/code-stubs-arm64.h',
++ '../../src/arm64/constants-arm64.h',
++ '../../src/arm64/cpu-arm64.cc',
++ '../../src/arm64/debug-arm64.cc',
++ '../../src/arm64/decoder-arm64.cc',
++ '../../src/arm64/decoder-arm64.h',
++ '../../src/arm64/decoder-arm64-inl.h',
++ '../../src/arm64/delayed-masm-arm64.cc',
++ '../../src/arm64/delayed-masm-arm64.h',
++ '../../src/arm64/delayed-masm-arm64-inl.h',
++ '../../src/arm64/deoptimizer-arm64.cc',
++ '../../src/arm64/disasm-arm64.cc',
++ '../../src/arm64/disasm-arm64.h',
++ '../../src/arm64/frames-arm64.cc',
++ '../../src/arm64/frames-arm64.h',
++ '../../src/arm64/full-codegen-arm64.cc',
++ '../../src/arm64/instructions-arm64.cc',
++ '../../src/arm64/instructions-arm64.h',
++ '../../src/arm64/instrument-arm64.cc',
++ '../../src/arm64/instrument-arm64.h',
++ '../../src/arm64/interface-descriptors-arm64.cc',
++ '../../src/arm64/interface-descriptors-arm64.h',
++ '../../src/arm64/lithium-arm64.cc',
++ '../../src/arm64/lithium-arm64.h',
++ '../../src/arm64/lithium-codegen-arm64.cc',
++ '../../src/arm64/lithium-codegen-arm64.h',
++ '../../src/arm64/lithium-gap-resolver-arm64.cc',
++ '../../src/arm64/lithium-gap-resolver-arm64.h',
++ '../../src/arm64/macro-assembler-arm64.cc',
++ '../../src/arm64/macro-assembler-arm64.h',
++ '../../src/arm64/macro-assembler-arm64-inl.h',
++ '../../src/arm64/regexp-macro-assembler-arm64.cc',
++ '../../src/arm64/regexp-macro-assembler-arm64.h',
++ '../../src/arm64/simulator-arm64.cc',
++ '../../src/arm64/simulator-arm64.h',
++ '../../src/arm64/utils-arm64.cc',
++ '../../src/arm64/utils-arm64.h',
++ '../../src/compiler/arm64/code-generator-arm64.cc',
++ '../../src/compiler/arm64/instruction-codes-arm64.h',
++ '../../src/compiler/arm64/instruction-selector-arm64.cc',
++ '../../src/compiler/arm64/linkage-arm64.cc',
++ '../../src/ic/arm64/access-compiler-arm64.cc',
++ '../../src/ic/arm64/handler-compiler-arm64.cc',
++ '../../src/ic/arm64/ic-arm64.cc',
++ '../../src/ic/arm64/ic-compiler-arm64.cc',
++ '../../src/ic/arm64/stub-cache-arm64.cc',
++ ],
++ }],
++ ['v8_target_arch=="ia32"', {
++ 'sources': [ ### gcmole(arch:ia32) ###
++ '../../src/ia32/assembler-ia32-inl.h',
++ '../../src/ia32/assembler-ia32.cc',
++ '../../src/ia32/assembler-ia32.h',
++ '../../src/ia32/builtins-ia32.cc',
++ '../../src/ia32/code-stubs-ia32.cc',
++ '../../src/ia32/code-stubs-ia32.h',
++ '../../src/ia32/codegen-ia32.cc',
++ '../../src/ia32/codegen-ia32.h',
++ '../../src/ia32/cpu-ia32.cc',
++ '../../src/ia32/debug-ia32.cc',
++ '../../src/ia32/deoptimizer-ia32.cc',
++ '../../src/ia32/disasm-ia32.cc',
++ '../../src/ia32/frames-ia32.cc',
++ '../../src/ia32/frames-ia32.h',
++ '../../src/ia32/full-codegen-ia32.cc',
++ '../../src/ia32/interface-descriptors-ia32.cc',
++ '../../src/ia32/lithium-codegen-ia32.cc',
++ '../../src/ia32/lithium-codegen-ia32.h',
++ '../../src/ia32/lithium-gap-resolver-ia32.cc',
++ '../../src/ia32/lithium-gap-resolver-ia32.h',
++ '../../src/ia32/lithium-ia32.cc',
++ '../../src/ia32/lithium-ia32.h',
++ '../../src/ia32/macro-assembler-ia32.cc',
++ '../../src/ia32/macro-assembler-ia32.h',
++ '../../src/ia32/regexp-macro-assembler-ia32.cc',
++ '../../src/ia32/regexp-macro-assembler-ia32.h',
++ '../../src/compiler/ia32/code-generator-ia32.cc',
++ '../../src/compiler/ia32/instruction-codes-ia32.h',
++ '../../src/compiler/ia32/instruction-selector-ia32.cc',
++ '../../src/compiler/ia32/linkage-ia32.cc',
++ '../../src/ic/ia32/access-compiler-ia32.cc',
++ '../../src/ic/ia32/handler-compiler-ia32.cc',
++ '../../src/ic/ia32/ic-ia32.cc',
++ '../../src/ic/ia32/ic-compiler-ia32.cc',
++ '../../src/ic/ia32/stub-cache-ia32.cc',
++ ],
++ }],
++ ['v8_target_arch=="x87"', {
++ 'sources': [ ### gcmole(arch:x87) ###
++ '../../src/x87/assembler-x87-inl.h',
++ '../../src/x87/assembler-x87.cc',
++ '../../src/x87/assembler-x87.h',
++ '../../src/x87/builtins-x87.cc',
++ '../../src/x87/code-stubs-x87.cc',
++ '../../src/x87/code-stubs-x87.h',
++ '../../src/x87/codegen-x87.cc',
++ '../../src/x87/codegen-x87.h',
++ '../../src/x87/cpu-x87.cc',
++ '../../src/x87/debug-x87.cc',
++ '../../src/x87/deoptimizer-x87.cc',
++ '../../src/x87/disasm-x87.cc',
++ '../../src/x87/frames-x87.cc',
++ '../../src/x87/frames-x87.h',
++ '../../src/x87/full-codegen-x87.cc',
++ '../../src/x87/interface-descriptors-x87.cc',
++ '../../src/x87/lithium-codegen-x87.cc',
++ '../../src/x87/lithium-codegen-x87.h',
++ '../../src/x87/lithium-gap-resolver-x87.cc',
++ '../../src/x87/lithium-gap-resolver-x87.h',
++ '../../src/x87/lithium-x87.cc',
++ '../../src/x87/lithium-x87.h',
++ '../../src/x87/macro-assembler-x87.cc',
++ '../../src/x87/macro-assembler-x87.h',
++ '../../src/x87/regexp-macro-assembler-x87.cc',
++ '../../src/x87/regexp-macro-assembler-x87.h',
++ '../../src/compiler/x87/code-generator-x87.cc',
++ '../../src/compiler/x87/instruction-codes-x87.h',
++ '../../src/compiler/x87/instruction-selector-x87.cc',
++ '../../src/compiler/x87/linkage-x87.cc',
++ '../../src/ic/x87/access-compiler-x87.cc',
++ '../../src/ic/x87/handler-compiler-x87.cc',
++ '../../src/ic/x87/ic-x87.cc',
++ '../../src/ic/x87/ic-compiler-x87.cc',
++ '../../src/ic/x87/stub-cache-x87.cc',
++ ],
++ }],
++ ['v8_target_arch=="mips" or
v8_target_arch=="mipsel"', {
++ 'sources': [ ### gcmole(arch:mipsel) ###
++ '../../src/mips/assembler-mips.cc',
++ '../../src/mips/assembler-mips.h',
++ '../../src/mips/assembler-mips-inl.h',
++ '../../src/mips/builtins-mips.cc',
++ '../../src/mips/codegen-mips.cc',
++ '../../src/mips/codegen-mips.h',
++ '../../src/mips/code-stubs-mips.cc',
++ '../../src/mips/code-stubs-mips.h',
++ '../../src/mips/constants-mips.cc',
++ '../../src/mips/constants-mips.h',
++ '../../src/mips/cpu-mips.cc',
++ '../../src/mips/debug-mips.cc',
++ '../../src/mips/deoptimizer-mips.cc',
++ '../../src/mips/disasm-mips.cc',
++ '../../src/mips/frames-mips.cc',
++ '../../src/mips/frames-mips.h',
++ '../../src/mips/full-codegen-mips.cc',
++ '../../src/mips/interface-descriptors-mips.cc',
++ '../../src/mips/lithium-codegen-mips.cc',
++ '../../src/mips/lithium-codegen-mips.h',
++ '../../src/mips/lithium-gap-resolver-mips.cc',
++ '../../src/mips/lithium-gap-resolver-mips.h',
++ '../../src/mips/lithium-mips.cc',
++ '../../src/mips/lithium-mips.h',
++ '../../src/mips/macro-assembler-mips.cc',
++ '../../src/mips/macro-assembler-mips.h',
++ '../../src/mips/regexp-macro-assembler-mips.cc',
++ '../../src/mips/regexp-macro-assembler-mips.h',
++ '../../src/mips/simulator-mips.cc',
++ '../../src/mips/simulator-mips.h',
++ '../../src/compiler/mips/code-generator-mips.cc',
++ '../../src/compiler/mips/instruction-codes-mips.h',
++ '../../src/compiler/mips/instruction-selector-mips.cc',
++ '../../src/compiler/mips/linkage-mips.cc',
++ '../../src/ic/mips/access-compiler-mips.cc',
++ '../../src/ic/mips/handler-compiler-mips.cc',
++ '../../src/ic/mips/ic-mips.cc',
++ '../../src/ic/mips/ic-compiler-mips.cc',
++ '../../src/ic/mips/stub-cache-mips.cc',
++ ],
++ }],
++ ['v8_target_arch=="mips64el"', {
++ 'sources': [ ### gcmole(arch:mips64el) ###
++ '../../src/mips64/assembler-mips64.cc',
++ '../../src/mips64/assembler-mips64.h',
++ '../../src/mips64/assembler-mips64-inl.h',
++ '../../src/mips64/builtins-mips64.cc',
++ '../../src/mips64/codegen-mips64.cc',
++ '../../src/mips64/codegen-mips64.h',
++ '../../src/mips64/code-stubs-mips64.cc',
++ '../../src/mips64/code-stubs-mips64.h',
++ '../../src/mips64/constants-mips64.cc',
++ '../../src/mips64/constants-mips64.h',
++ '../../src/mips64/cpu-mips64.cc',
++ '../../src/mips64/debug-mips64.cc',
++ '../../src/mips64/deoptimizer-mips64.cc',
++ '../../src/mips64/disasm-mips64.cc',
++ '../../src/mips64/frames-mips64.cc',
++ '../../src/mips64/frames-mips64.h',
++ '../../src/mips64/full-codegen-mips64.cc',
++ '../../src/mips64/interface-descriptors-mips64.cc',
++ '../../src/mips64/lithium-codegen-mips64.cc',
++ '../../src/mips64/lithium-codegen-mips64.h',
++ '../../src/mips64/lithium-gap-resolver-mips64.cc',
++ '../../src/mips64/lithium-gap-resolver-mips64.h',
++ '../../src/mips64/lithium-mips64.cc',
++ '../../src/mips64/lithium-mips64.h',
++ '../../src/mips64/macro-assembler-mips64.cc',
++ '../../src/mips64/macro-assembler-mips64.h',
++ '../../src/mips64/regexp-macro-assembler-mips64.cc',
++ '../../src/mips64/regexp-macro-assembler-mips64.h',
++ '../../src/mips64/simulator-mips64.cc',
++ '../../src/mips64/simulator-mips64.h',
++ '../../src/compiler/mips64/code-generator-mips64.cc',
++ '../../src/compiler/mips64/instruction-codes-mips64.h',
++ '../../src/compiler/mips64/instruction-selector-mips64.cc',
++ '../../src/compiler/mips64/linkage-mips64.cc',
++ '../../src/ic/mips64/access-compiler-mips64.cc',
++ '../../src/ic/mips64/handler-compiler-mips64.cc',
++ '../../src/ic/mips64/ic-mips64.cc',
++ '../../src/ic/mips64/ic-compiler-mips64.cc',
++ '../../src/ic/mips64/stub-cache-mips64.cc',
++ ],
++ }],
++ ['v8_target_arch=="x64" or v8_target_arch=="x32"',
{
++ 'sources': [ ### gcmole(arch:x64) ###
++ '../../src/x64/assembler-x64-inl.h',
++ '../../src/x64/assembler-x64.cc',
++ '../../src/x64/assembler-x64.h',
++ '../../src/x64/builtins-x64.cc',
++ '../../src/x64/code-stubs-x64.cc',
++ '../../src/x64/code-stubs-x64.h',
++ '../../src/x64/codegen-x64.cc',
++ '../../src/x64/codegen-x64.h',
++ '../../src/x64/cpu-x64.cc',
++ '../../src/x64/debug-x64.cc',
++ '../../src/x64/deoptimizer-x64.cc',
++ '../../src/x64/disasm-x64.cc',
++ '../../src/x64/frames-x64.cc',
++ '../../src/x64/frames-x64.h',
++ '../../src/x64/full-codegen-x64.cc',
++ '../../src/x64/interface-descriptors-x64.cc',
++ '../../src/x64/lithium-codegen-x64.cc',
++ '../../src/x64/lithium-codegen-x64.h',
++ '../../src/x64/lithium-gap-resolver-x64.cc',
++ '../../src/x64/lithium-gap-resolver-x64.h',
++ '../../src/x64/lithium-x64.cc',
++ '../../src/x64/lithium-x64.h',
++ '../../src/x64/macro-assembler-x64.cc',
++ '../../src/x64/macro-assembler-x64.h',
++ '../../src/x64/regexp-macro-assembler-x64.cc',
++ '../../src/x64/regexp-macro-assembler-x64.h',
++ '../../src/ic/x64/access-compiler-x64.cc',
++ '../../src/ic/x64/handler-compiler-x64.cc',
++ '../../src/ic/x64/ic-x64.cc',
++ '../../src/ic/x64/ic-compiler-x64.cc',
++ '../../src/ic/x64/stub-cache-x64.cc',
++ ],
++ }],
++ ['v8_target_arch=="x64"', {
++ 'sources': [
++ '../../src/compiler/x64/code-generator-x64.cc',
++ '../../src/compiler/x64/instruction-codes-x64.h',
++ '../../src/compiler/x64/instruction-selector-x64.cc',
++ '../../src/compiler/x64/linkage-x64.cc',
++ ],
++ }],
++ ['v8_target_arch=="ppc" or v8_target_arch=="ppc64"',
{
++ 'sources': [ ### gcmole(arch:ppc) ###
++ '../../src/ppc/assembler-ppc-inl.h',
++ '../../src/ppc/assembler-ppc.cc',
++ '../../src/ppc/assembler-ppc.h',
++ '../../src/ppc/builtins-ppc.cc',
++ '../../src/ppc/code-stubs-ppc.cc',
++ '../../src/ppc/code-stubs-ppc.h',
++ '../../src/ppc/codegen-ppc.cc',
++ '../../src/ppc/codegen-ppc.h',
++ '../../src/ppc/constants-ppc.h',
++ '../../src/ppc/constants-ppc.cc',
++ '../../src/ppc/cpu-ppc.cc',
++ '../../src/ppc/debug-ppc.cc',
++ '../../src/ppc/deoptimizer-ppc.cc',
++ '../../src/ppc/disasm-ppc.cc',
++ '../../src/ppc/frames-ppc.cc',
++ '../../src/ppc/frames-ppc.h',
++ '../../src/ppc/full-codegen-ppc.cc',
++ '../../src/ppc/interface-descriptors-ppc.cc',
++ '../../src/ppc/interface-descriptors-ppc.h',
++ '../../src/ppc/lithium-ppc.cc',
++ '../../src/ppc/lithium-ppc.h',
++ '../../src/ppc/lithium-codegen-ppc.cc',
++ '../../src/ppc/lithium-codegen-ppc.h',
++ '../../src/ppc/lithium-gap-resolver-ppc.cc',
++ '../../src/ppc/lithium-gap-resolver-ppc.h',
++ '../../src/ppc/macro-assembler-ppc.cc',
++ '../../src/ppc/macro-assembler-ppc.h',
++ '../../src/ppc/regexp-macro-assembler-ppc.cc',
++ '../../src/ppc/regexp-macro-assembler-ppc.h',
++ '../../src/ppc/simulator-ppc.cc',
++ '../../src/ppc/simulator-ppc.h',
++ '../../src/compiler/ppc/code-generator-ppc.cc',
++ '../../src/compiler/ppc/instruction-codes-ppc.h',
++ '../../src/compiler/ppc/instruction-selector-ppc.cc',
++ '../../src/compiler/ppc/linkage-ppc.cc',
++ '../../src/ic/ppc/access-compiler-ppc.cc',
++ '../../src/ic/ppc/handler-compiler-ppc.cc',
++ '../../src/ic/ppc/ic-ppc.cc',
++ '../../src/ic/ppc/ic-compiler-ppc.cc',
++ '../../src/ic/ppc/stub-cache-ppc.cc',
++ ],
++ }],
++ ['OS=="win"', {
++ 'variables': {
++ 'gyp_generators': '<!(echo $GYP_GENERATORS)',
++ },
++ 'msvs_disabled_warnings': [4351, 4355, 4800],
++ # When building Official, the .lib is too large and exceeds the 2G
++ # limit. This breaks it into multiple pieces to avoid the limit.
++ # See
http://crbug.com/485155.
++ 'msvs_shard': 4,
++ }],
++ ['v8_component=="shared_library"', {
++ 'defines': [
++ 'BUILDING_V8_SHARED',
++ 'V8_SHARED',
++ ],
++ }],
++ ['v8_postmortem_support=="true"', {
++ 'sources': [
++ '<(SHARED_INTERMEDIATE_DIR)/debug-support.cc',
++ ]
++ }],
++ ['v8_enable_i18n_support==1', {
++ 'dependencies': [
++ '<(icu_gyp_path):icui18n',
++ '<(icu_gyp_path):icuuc',
++ ]
++ }, { # v8_enable_i18n_support==0
++ 'sources!': [
++ '../../src/i18n.cc',
++ '../../src/i18n.h',
++ ],
++ }],
++ ['OS=="win" and v8_enable_i18n_support==1', {
++ 'dependencies': [
++ '<(icu_gyp_path):icudata',
++ ],
++ }],
++ ['icu_use_data_file_flag==1', {
++ 'defines': ['ICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_FILE'],
++ }, { # else icu_use_data_file_flag !=1
++ 'conditions': [
++ ['OS=="win"', {
++ 'defines': ['ICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_SHARED'],
++ }, {
++ 'defines': ['ICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC'],
++ }],
++ ],
++ }],
++ ],
++ },
++ {
++ 'target_name': 'v8_libbase_sse2',
++ 'type': 'static_library',
++ 'variables': {
++ 'optimize': 'max',
++ },
++ 'include_dirs+': [
++ '../..',
++ ],
++ 'sources': [
++ '../../src/base/adapters.h',
++ '../../src/base/atomicops.h',
++ '../../src/base/atomicops_internals_arm64_gcc.h',
++ '../../src/base/atomicops_internals_arm_gcc.h',
++ '../../src/base/atomicops_internals_atomicword_compat.h',
++ '../../src/base/atomicops_internals_mac.h',
++ '../../src/base/atomicops_internals_mips_gcc.h',
++ '../../src/base/atomicops_internals_mips64_gcc.h',
++ '../../src/base/atomicops_internals_portable.h',
++ '../../src/base/atomicops_internals_ppc_gcc.h',
++ '../../src/base/atomicops_internals_tsan.h',
++ '../../src/base/atomicops_internals_x86_gcc.cc',
++ '../../src/base/atomicops_internals_x86_gcc.h',
++ '../../src/base/atomicops_internals_x86_msvc.h',
++ '../../src/base/bits.cc',
++ '../../src/base/bits.h',
++ '../../src/base/build_config.h',
++ '../../src/base/compiler-specific.h',
++ '../../src/base/cpu.cc',
++ '../../src/base/cpu.h',
++ '../../src/base/division-by-constant.cc',
++ '../../src/base/division-by-constant.h',
++ '../../src/base/flags.h',
++ '../../src/base/functional.cc',
++ '../../src/base/functional.h',
++ '../../src/base/iterator.h',
++ '../../src/base/lazy-instance.h',
++ '../../src/base/logging.cc',
++ '../../src/base/logging.h',
++ '../../src/base/macros.h',
++ '../../src/base/once.cc',
++ '../../src/base/once.h',
++ '../../src/base/platform/elapsed-timer.h',
++ '../../src/base/platform/time.cc',
++ '../../src/base/platform/time.h',
++ '../../src/base/platform/condition-variable.cc',
++ '../../src/base/platform/condition-variable.h',
++ '../../src/base/platform/mutex.cc',
++ '../../src/base/platform/mutex.h',
++ '../../src/base/platform/platform.h',
++ '../../src/base/platform/semaphore.cc',
++ '../../src/base/platform/semaphore.h',
++ '../../src/base/safe_conversions.h',
++ '../../src/base/safe_conversions_impl.h',
++ '../../src/base/safe_math.h',
++ '../../src/base/safe_math_impl.h',
++ '../../src/base/sys-info.cc',
++ '../../src/base/sys-info.h',
++ '../../src/base/utils/random-number-generator.cc',
++ '../../src/base/utils/random-number-generator.h',
++ ],
++ 'conditions': [
++ ['want_separate_host_toolset==1', {
++ 'toolsets': ['host', 'target'],
++ }, {
++ 'toolsets': ['target'],
++ }],
++ ['OS=="linux"', {
++ 'conditions': [
++ ['nacl_target_arch=="none"', {
++ 'link_settings': {
++ 'libraries': [
++ '-ldl',
++ '-lrt'
++ ],
++ },
++ }, {
++ 'defines': [
++ 'V8_LIBRT_NOT_AVAILABLE=1',
++ ],
++ }],
++ ],
++ 'sources': [
++ '../../src/base/platform/platform-linux.cc',
++ '../../src/base/platform/platform-posix.cc'
++ ],
++ }
++ ],
++ ['OS=="android"', {
++ 'sources': [
++ '../../src/base/platform/platform-posix.cc'
++ ],
++ 'link_settings': {
++ 'target_conditions': [
++ ['_toolset=="host"', {
++ # Only include libdl and librt on host builds because they
++ # are included by default on Android target builds, and we
++ # don't want to re-include them here since this will change
++ # library order and break (see
crbug.com/469973).
++ 'libraries': [
++ '-ldl',
++ '-lrt'
++ ]
++ }]
++ ]
++ },
++ 'conditions': [
++ ['host_os=="mac"', {
++ 'target_conditions': [
++ ['_toolset=="host"', {
++ 'sources': [
++ '../../src/base/platform/platform-macos.cc'
++ ]
++ }, {
++ 'sources': [
++ '../../src/base/platform/platform-linux.cc'
++ ]
++ }],
++ ],
++ }, {
++ 'sources': [
++ '../../src/base/platform/platform-linux.cc'
++ ]
++ }],
++ ],
++ },
++ ],
++ ['OS=="qnx"', {
++ 'link_settings': {
++ 'target_conditions': [
++ ['_toolset=="host" and host_os=="linux"', {
++ 'libraries': [
++ '-lrt'
++ ],
++ }],
++ ['_toolset=="target"', {
++ 'libraries': [
++ '-lbacktrace'
++ ],
++ }],
++ ],
++ },
++ 'sources': [
++ '../../src/base/platform/platform-posix.cc',
++ '../../src/base/qnx-math.h',
++ ],
++ 'target_conditions': [
++ ['_toolset=="host" and host_os=="linux"', {
++ 'sources': [
++ '../../src/base/platform/platform-linux.cc'
++ ],
++ }],
++ ['_toolset=="host" and host_os=="mac"', {
++ 'sources': [
++ '../../src/base/platform/platform-macos.cc'
++ ],
++ }],
++ ['_toolset=="target"', {
++ 'sources': [
++ '../../src/base/platform/platform-qnx.cc'
++ ],
++ }],
++ ],
++ },
++ ],
++ ['OS=="freebsd"', {
++ 'link_settings': {
++ 'libraries': [
++ '-L/usr/local/lib -lexecinfo',
++ ]},
++ 'sources': [
++ '../../src/base/platform/platform-freebsd.cc',
++ '../../src/base/platform/platform-posix.cc'
++ ],
++ }
++ ],
++ ['OS=="openbsd"', {
++ 'link_settings': {
++ 'libraries': [
++ '-L/usr/local/lib -lexecinfo',
++ ]},
++ 'sources': [
++ '../../src/base/platform/platform-openbsd.cc',
++ '../../src/base/platform/platform-posix.cc'
++ ],
++ }
++ ],
++ ['OS=="netbsd"', {
++ 'link_settings': {
++ 'libraries': [
++ '-L/usr/pkg/lib -Wl,-R/usr/pkg/lib -lexecinfo',
++ ]},
++ 'sources': [
++ '../../src/base/platform/platform-openbsd.cc',
++ '../../src/base/platform/platform-posix.cc'
++ ],
++ }
++ ],
++ ['OS=="aix"', {
++ 'sources': [
++ '../../src/base/platform/platform-aix.cc',
++ '../../src/base/platform/platform-posix.cc'
++ ]},
++ ],
++ ['OS=="solaris"', {
++ 'link_settings': {
++ 'libraries': [
++ '-lnsl -lrt',
++ ]},
++ 'sources': [
++ '../../src/base/platform/platform-solaris.cc',
++ '../../src/base/platform/platform-posix.cc'
++ ],
++ }
++ ],
++ ['OS=="mac"', {
++ 'sources': [
++ '../../src/base/platform/platform-macos.cc',
++ '../../src/base/platform/platform-posix.cc'
++ ]},
++ ],
++ ['OS=="win"', {
++ 'defines': [
++ '_CRT_RAND_S' # for rand_s()
++ ],
++ 'variables': {
++ 'gyp_generators': '<!(echo $GYP_GENERATORS)',
++ },
++ 'conditions': [
++ ['gyp_generators=="make"', {
++ 'variables': {
++ 'build_env': '<!(uname -o)',
++ },
++ 'conditions': [
++ ['build_env=="Cygwin"', {
++ 'sources': [
++ '../../src/base/platform/platform-cygwin.cc',
++ '../../src/base/platform/platform-posix.cc'
++ ],
++ }, {
++ 'sources': [
++ '../../src/base/platform/platform-win32.cc',
++ '../../src/base/win32-headers.h',
++ ],
++ }],
++ ],
++ 'link_settings': {
++ 'libraries': [ '-lwinmm', '-lws2_32' ],
++ },
++ }, {
++ 'sources': [
++ '../../src/base/platform/platform-win32.cc',
++ '../../src/base/win32-headers.h',
++ ],
++ 'msvs_disabled_warnings': [4351, 4355, 4800],
++ 'link_settings': {
++ 'libraries': [ '-lwinmm.lib', '-lws2_32.lib' ],
++ },
++ }],
++ ],
++ }],
++ ],
++ },
++ {
++ 'target_name': 'v8_libplatform_sse2',
++ 'type': 'static_library',
++ 'variables': {
++ 'optimize': 'max',
++ },
++ 'dependencies': [
++ 'v8_libbase_sse2',
++ ],
++ 'include_dirs+': [
++ '../..',
++ ],
++ 'sources': [
++ '../../include/libplatform/libplatform.h',
++ '../../src/libplatform/default-platform.cc',
++ '../../src/libplatform/default-platform.h',
++ '../../src/libplatform/task-queue.cc',
++ '../../src/libplatform/task-queue.h',
++ '../../src/libplatform/worker-thread.cc',
++ '../../src/libplatform/worker-thread.h',
++ ],
++ 'conditions': [
++ ['want_separate_host_toolset==1', {
++ 'toolsets': ['host', 'target'],
++ }, {
++ 'toolsets': ['target'],
++ }],
++ ],
++ },
++ {
++ 'target_name': 'natives_blob_sse2',
++ 'type': 'none',
++ 'conditions': [
++ [ 'v8_use_external_startup_data==1', {
++ 'conditions': [
++ ['want_separate_host_toolset==1', {
++ 'dependencies': ['js2c_sse2#host'],
++ }, {
++ 'dependencies': ['js2c_sse2'],
++ }],
++ ],
++ 'actions': [{
++ 'action_name': 'v8_sse2_concatenate_natives_blob',
++ 'inputs': [
++ '../../tools/concatenate-files.py',
++ '<(SHARED_INTERMEDIATE_DIR)/libraries_sse2.bin',
++ '<(SHARED_INTERMEDIATE_DIR)/libraries-experimental_sse2.bin',
++ '<(SHARED_INTERMEDIATE_DIR)/libraries-extras_sse2.bin',
++ ],
++ 'conditions': [
++ ['want_separate_host_toolset==1', {
++ 'target_conditions': [
++ ['_toolset=="host"', {
++ 'outputs': [
++ '<(PRODUCT_DIR)/natives_blob_host_sse2.bin',
++ ],
++ 'action': [
++ 'python', '<@(_inputs)',
'<(PRODUCT_DIR)/natives_blob_host_sse2.bin'
++ ],
++ }, {
++ 'outputs': [
++ '<(PRODUCT_DIR)/natives_blob_sse2.bin',
++ ],
++ 'action': [
++ 'python', '<@(_inputs)',
'<(PRODUCT_DIR)/natives_blob_sse2.bin'
++ ],
++ }],
++ ],
++ }, {
++ 'outputs': [
++ '<(PRODUCT_DIR)/natives_blob_sse2.bin',
++ ],
++ 'action': [
++ 'python', '<@(_inputs)',
'<(PRODUCT_DIR)/natives_blob_sse2.bin'
++ ],
++ }],
++ ],
++ }],
++ }],
++ ['want_separate_host_toolset==1', {
++ 'toolsets': ['host', 'target'],
++ }, {
++ 'toolsets': ['target'],
++ }],
++ ]
++ },
++ {
++ 'target_name': 'js2c_sse2',
++ 'type': 'none',
++ 'conditions': [
++ ['want_separate_host_toolset==1', {
++ 'toolsets': ['host'],
++ }, {
++ 'toolsets': ['target'],
++ }],
++ ['v8_enable_i18n_support==1', {
++ 'variables': {
++ 'i18n_library_files': [
++ '../../src/i18n.js',
++ ],
++ },
++ }, {
++ 'variables': {
++ 'i18n_library_files': [],
++ },
++ }],
++ ],
++ 'variables': {
++ 'library_files': [
++ '../../src/macros.py',
++ '../../src/messages.h',
++ '../../src/runtime.js',
++ '../../src/prologue.js',
++ '../../src/v8natives.js',
++ '../../src/symbol.js',
++ '../../src/array.js',
++ '../../src/string.js',
++ '../../src/uri.js',
++ '../../src/math.js',
++ '../../src/third_party/fdlibm/fdlibm.js',
++ '../../src/date.js',
++ '../../src/regexp.js',
++ '../../src/arraybuffer.js',
++ '../../src/typedarray.js',
++ '../../src/iterator-prototype.js',
++ '../../src/generator.js',
++ '../../src/object-observe.js',
++ '../../src/collection.js',
++ '../../src/weak-collection.js',
++ '../../src/collection-iterator.js',
++ '../../src/promise.js',
++ '../../src/messages.js',
++ '../../src/json.js',
++ '../../src/array-iterator.js',
++ '../../src/string-iterator.js',
++ '../../src/debug-debugger.js',
++ '../../src/mirror-debugger.js',
++ '../../src/liveedit-debugger.js',
++ '../../src/templates.js',
++ '../../src/harmony-array.js',
++ '../../src/harmony-typedarray.js',
++ ],
++ 'experimental_library_files': [
++ '../../src/macros.py',
++ '../../src/messages.h',
++ '../../src/proxy.js',
++ '../../src/generator.js',
++ '../../src/harmony-atomics.js',
++ '../../src/harmony-array-includes.js',
++ '../../src/harmony-concat-spreadable.js',
++ '../../src/harmony-tostring.js',
++ '../../src/harmony-regexp.js',
++ '../../src/harmony-reflect.js',
++ '../../src/harmony-spread.js',
++ '../../src/harmony-object.js',
++ '../../src/harmony-sharedarraybuffer.js',
++ ],
++ 'libraries_bin_file':
'<(SHARED_INTERMEDIATE_DIR)/libraries_sse2.bin',
++ 'libraries_experimental_bin_file':
'<(SHARED_INTERMEDIATE_DIR)/libraries-experimental_sse2.bin',
++ 'libraries_extras_bin_file':
'<(SHARED_INTERMEDIATE_DIR)/libraries-extras_sse2.bin',
++ },
++ 'actions': [
++ {
++ 'action_name': 'v8_sse2_js2c',
++ 'inputs': [
++ '../../tools/js2c.py',
++ '<@(library_files)',
++ '<@(i18n_library_files)'
++ ],
++ 'outputs': [
++ '<(SHARED_INTERMEDIATE_DIR)/libraries_sse2.cc',
++ ],
++ 'action': [
++ 'python',
++ '../../tools/js2c.py',
++ '<(SHARED_INTERMEDIATE_DIR)/libraries_sse2.cc',
++ 'CORE',
++ '<@(library_files)',
++ '<@(i18n_library_files)'
++ ],
++ 'conditions': [
++ [ 'v8_use_external_startup_data==1', {
++ 'outputs': ['<@(libraries_bin_file)'],
++ 'action': [
++ '--startup_blob', '<@(libraries_bin_file)',
++ ],
++ }],
++ ],
++ },
++ {
++ 'action_name': 'v8_sse2_js2c_experimental',
++ 'inputs': [
++ '../../tools/js2c.py',
++ '<@(experimental_library_files)',
++ ],
++ 'outputs': [
++ '<(SHARED_INTERMEDIATE_DIR)/experimental-libraries_sse2.cc',
++ ],
++ 'action': [
++ 'python',
++ '../../tools/js2c.py',
++ '<(SHARED_INTERMEDIATE_DIR)/experimental-libraries_sse2.cc',
++ 'EXPERIMENTAL',
++ '<@(experimental_library_files)'
++ ],
++ 'conditions': [
++ [ 'v8_use_external_startup_data==1', {
++ 'outputs': ['<@(libraries_experimental_bin_file)'],
++ 'action': [
++ '--startup_blob',
'<@(libraries_experimental_bin_file)'
++ ],
++ }],
++ ],
++ },
++ {
++ 'action_name': 'v8_sse2_js2c_extras',
++ 'inputs': [
++ '../../tools/js2c.py',
++ '<@(v8_extra_library_files)',
++ ],
++ 'outputs': [
++ '<(SHARED_INTERMEDIATE_DIR)/extras-libraries_sse2.cc',
++ ],
++ 'action': [
++ 'python',
++ '../../tools/js2c.py',
++ '<(SHARED_INTERMEDIATE_DIR)/extras-libraries_sse2.cc',
++ 'EXTRAS',
++ '<@(v8_extra_library_files)',
++ ],
++ 'conditions': [
++ [ 'v8_use_external_startup_data==1', {
++ 'outputs': ['<@(libraries_extras_bin_file)'],
++ 'action': [
++ '--startup_blob', '<@(libraries_extras_bin_file)',
++ ],
++ }],
++ ],
++ },
++ ],
++ },
++ {
++ 'target_name': 'postmortem-metadata_sse2',
++ 'type': 'none',
++ 'variables': {
++ 'heapobject_files': [
++ '../../src/objects.h',
++ '../../src/objects-inl.h',
++ ],
++ },
++ 'actions': [
++ {
++ 'action_name': 'v8_sse2_gen-postmortem-metadata',
++ 'inputs': [
++ '../../tools/gen-postmortem-metadata.py',
++ '<@(heapobject_files)',
++ ],
++ 'outputs': [
++ '<(SHARED_INTERMEDIATE_DIR)/debug-support.cc',
++ ],
++ 'action': [
++ 'python',
++ '../../tools/gen-postmortem-metadata.py',
++ '<@(_outputs)',
++ '<@(heapobject_files)'
++ ]
++ }
++ ]
++ },
++ {
++ 'target_name': 'mksnapshot_sse2',
++ 'type': 'executable',
++ 'dependencies': ['v8_base_sse2', 'v8_nosnapshot_sse2',
'v8_libplatform_sse2'],
++ 'include_dirs+': [
++ '../..',
++ ],
++ 'sources': [
++ '../../src/snapshot/mksnapshot.cc',
++ ],
++ 'conditions': [
++ ['v8_enable_i18n_support==1', {
++ 'dependencies': [
++ '<(icu_gyp_path):icui18n',
++ '<(icu_gyp_path):icuuc',
++ ]
++ }],
++ ['want_separate_host_toolset==1', {
++ 'toolsets': ['host'],
++ }, {
++ 'toolsets': ['target'],
++ }],
++ ],
++ },
++ ],
++}
+diff -Nur qtwebengine-opensource-src-5.6.1/src/core/core_module.pro
qtwebengine-opensource-src-5.6.1-no-sse2/src/core/core_module.pro
+--- qtwebengine-opensource-src-5.6.1/src/core/core_module.pro 2016-05-26
20:01:25.000000000 +0200
++++ qtwebengine-opensource-src-5.6.1-no-sse2/src/core/core_module.pro 2016-06-11
01:25:56.463419047 +0200
+@@ -9,6 +9,29 @@
+ error("Could not find the linking information that gyp should have
generated.")
+ }
+
++# find the shared libraries in the link line
++# remove those in lib/sse2 that are only replacements for the normal ones
++# collect all shared libraries so they can be installed
++for(private_lib, LIBS_PRIVATE) {
++ contains(private_lib, .*\.so) {
++ contains(private_lib, .*/lib/sse2/.*) {
++ LIBS_PRIVATE -= $$private_lib
++ shlibs_sse2 += $$private_lib
++ } else {
++ shlibs += $$private_lib
++ }
++ }
++}
++
++# set the shared libraries to be installed
++# add an rpath to their installation location
++shlib_install_path = $$[QT_INSTALL_LIBS]/qtwebengine
++!isEmpty(shlibs) {
++ shlibs.files += $$shlibs
++ shlibs_sse2.files += $$shlibs_sse2
++ LIBS_PRIVATE += -Wl,--rpath,$$shlib_install_path
++}
++
+ load(qt_module)
+
+ api_library_name = qtwebenginecoreapi$$qtPlatformTargetSuffix()
+@@ -71,7 +94,12 @@
+ locales.path = $$[QT_INSTALL_TRANSLATIONS]/qtwebengine_locales
+ resources.CONFIG += no_check_exist
+ resources.path = $$[QT_INSTALL_DATA]/resources
+- INSTALLS += locales resources
++ # install the shared libraries
++ shlibs.CONFIG += no_check_exist
++ shlibs.path = $$shlib_install_path
++ shlibs_sse2.CONFIG += no_check_exist
++ shlibs_sse2.path = $$shlib_install_path/sse2
++ INSTALLS += locales resources shlibs shlibs_sse2
+
+ !use?(system_icu) {
+ icu.CONFIG += no_check_exist
+diff -Nur qtwebengine-opensource-src-5.6.1/src/core/qtwebengine.gypi
qtwebengine-opensource-src-5.6.1-no-sse2/src/core/qtwebengine.gypi
+--- qtwebengine-opensource-src-5.6.1/src/core/qtwebengine.gypi 2016-02-15
16:18:46.000000000 +0100
++++ qtwebengine-opensource-src-5.6.1-no-sse2/src/core/qtwebengine.gypi 2016-02-25
00:47:15.416723938 +0100
+@@ -58,6 +58,11 @@
+ },
+ },
+ 'conditions': [
++ ['target_arch=="ia32"', {
++ 'dependencies': [
++ '<(chromium_src_dir)/v8/tools/gyp/v8_sse2.gyp:v8_sse2',
++ ],
++ }],
+ ['OS=="win" and win_use_allocator_shim==1', {
+ 'dependencies': [
+ '<(chromium_src_dir)/base/allocator/allocator.gyp:allocator',
diff --git a/sources b/sources
index e69de29..94ef494 100644
--- a/sources
+++ b/sources
@@ -0,0 +1 @@
+a6426e9edf6be7418e7727839ef4222e qtwebengine-opensource-src-5.6.2.tar.xz