summaryrefslogtreecommitdiff
path: root/Bug-1610814-Fix-NEON-compile-error-with-gcc-and-RGB-.patch
diff options
context:
space:
mode:
Diffstat (limited to 'Bug-1610814-Fix-NEON-compile-error-with-gcc-and-RGB-.patch')
-rw-r--r--Bug-1610814-Fix-NEON-compile-error-with-gcc-and-RGB-.patch36
1 files changed, 36 insertions, 0 deletions
diff --git a/Bug-1610814-Fix-NEON-compile-error-with-gcc-and-RGB-.patch b/Bug-1610814-Fix-NEON-compile-error-with-gcc-and-RGB-.patch
new file mode 100644
index 0000000..fc35ae4
--- /dev/null
+++ b/Bug-1610814-Fix-NEON-compile-error-with-gcc-and-RGB-.patch
@@ -0,0 +1,36 @@
+From: Andrew Osmond <aosmond@mozilla.com>
+Date: Wed, 22 Jan 2020 15:19:20 +0000
+Subject: Bug 1610814 - Fix NEON compile error with gcc and RGB unpacking.
+ r=lsalzman
+
+This patch makes us use the correct intrinsic for loading a uint8x16
+register. It is not entirely clear why clang accepts this without
+complaint but beyond the types, it should be equivalent.
+
+Differential Revision: https://phabricator.services.mozilla.com/D60667
+---
+ gfx/2d/SwizzleNEON.cpp | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/gfx/2d/SwizzleNEON.cpp b/gfx/2d/SwizzleNEON.cpp
+index 6b34f76cab1..63f211ff294 100644
+--- a/gfx/2d/SwizzleNEON.cpp
++++ b/gfx/2d/SwizzleNEON.cpp
+@@ -412,7 +412,7 @@ void UnpackRowRGB24_NEON(const uint8_t* aSrc, uint8_t* aDst, int32_t aLength) {
+ src -= 4 * 3;
+ dst -= 4 * 4;
+ while (src >= aSrc) {
+- uint8x16_t px = vld1q_u16(reinterpret_cast<const uint16_t*>(src));
++ uint8x16_t px = vld1q_u8(src);
+ // G2R2B1G1 R1B0G0R0 -> X1R1G1B1 X0R0G0B0
+ uint8x8_t pxlo = vtbl1_u8(vget_low_u8(px), masklo);
+ // B3G3R3B2 G2R2B1G1 -> X3R3G3B3 X2R2G2B2
+@@ -420,7 +420,7 @@ void UnpackRowRGB24_NEON(const uint8_t* aSrc, uint8_t* aDst, int32_t aLength) {
+ vtbl1_u8(vext_u8(vget_low_u8(px), vget_high_u8(px), 4), maskhi);
+ px = vcombine_u8(pxlo, pxhi);
+ px = vorrq_u8(px, alpha);
+- vst1q_u16(reinterpret_cast<uint16_t*>(dst), px);
++ vst1q_u8(dst, px);
+ src -= 4 * 3;
+ dst -= 4 * 4;
+ }
bgstack15