mozilla-bmo1610814.patch
author Wolfgang Rosenauer <wr@rosenauer.org>
Sat, 07 Mar 2020 09:48:10 +0100
branchfirefox73
changeset 1122 a9cd24eaa361
permissions -rw-r--r--
73.0.1
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1122
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
     1
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
     2
# HG changeset patch
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
     3
# User Andrew Osmond <aosmond@mozilla.com>
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
     4
# Date 1579706360 0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
     5
# Node ID b3d8b08265b800165d684281d19ac845a8ff9a66
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
     6
# Parent  50c371b37a9fcd994a5866db73bd0d078e19f95d
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
     7
Bug 1610814 - Fix NEON compile error with gcc and RGB unpacking. r=lsalzman
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
     8
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
     9
This patch makes us use the correct intrinsic for loading a uint8x16
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    10
register. It is not entirely clear why clang accepts this without
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    11
complaint but beyond the types, it should be equivalent.
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    12
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    13
Differential Revision: https://phabricator.services.mozilla.com/D60667
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    14
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    15
diff --git a/gfx/2d/SwizzleNEON.cpp b/gfx/2d/SwizzleNEON.cpp
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    16
--- a/gfx/2d/SwizzleNEON.cpp
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    17
+++ b/gfx/2d/SwizzleNEON.cpp
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    18
@@ -407,25 +407,25 @@ void UnpackRowRGB24_NEON(const uint8_t* 
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    19
   }
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    20
 
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    21
   uint8x16_t alpha = vreinterpretq_u8_u32(vdupq_n_u32(0xFF000000));
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    22
 
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    23
   // Process all 4-pixel chunks as one vector.
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    24
   src -= 4 * 3;
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    25
   dst -= 4 * 4;
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    26
   while (src >= aSrc) {
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    27
-    uint8x16_t px = vld1q_u16(reinterpret_cast<const uint16_t*>(src));
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    28
+    uint8x16_t px = vld1q_u8(src);
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    29
     // G2R2B1G1 R1B0G0R0 -> X1R1G1B1 X0R0G0B0
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    30
     uint8x8_t pxlo = vtbl1_u8(vget_low_u8(px), masklo);
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    31
     // B3G3R3B2 G2R2B1G1 -> X3R3G3B3 X2R2G2B2
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    32
     uint8x8_t pxhi =
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    33
         vtbl1_u8(vext_u8(vget_low_u8(px), vget_high_u8(px), 4), maskhi);
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    34
     px = vcombine_u8(pxlo, pxhi);
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    35
     px = vorrq_u8(px, alpha);
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    36
-    vst1q_u16(reinterpret_cast<uint16_t*>(dst), px);
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    37
+    vst1q_u8(dst, px);
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    38
     src -= 4 * 3;
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    39
     dst -= 4 * 4;
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    40
   }
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    41
 }
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    42
 
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    43
 // Force instantiation of swizzle variants here.
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    44
 template void UnpackRowRGB24_NEON<false>(const uint8_t*, uint8_t*, int32_t);
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    45
 template void UnpackRowRGB24_NEON<true>(const uint8_t*, uint8_t*, int32_t);
Wolfgang Rosenauer <wr@rosenauer.org>
parents:
diff changeset
    46