tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

0006-Bug-751814-ARM-EDSP-ARMv6-Skia-fixes.patch (6159B)


      1 From 94916fbbc7865c6fe23a57d6edc48c6daf93dda8 Mon Sep 17 00:00:00 2001
      2 From: George Wright <gwright@mozilla.com>
      3 Date: Fri, 18 May 2012 14:16:08 -0400
      4 Subject: [PATCH 06/10]     Bug 755869 - [9] Re-apply bug 751814 - Various
      5 Skia fixes for ARM without EDSP and ARMv6+
      6 r=mattwoodrow
      7 
      8 ---
      9 gfx/skia/include/core/SkMath.h                   |    5 +--
     10 gfx/skia/include/core/SkPostConfig.h             |   45 ++++++++++++++++++++++
     11 gfx/skia/src/opts/SkBitmapProcState_opts_arm.cpp |    6 +-
     12 gfx/skia/src/opts/SkBlitRow_opts_arm.cpp         |    9 ++++
     13 4 files changed, 58 insertions(+), 7 deletions(-)
     14 
     15 diff --git a/gfx/skia/include/core/SkMath.h b/gfx/skia/include/core/SkMath.h
     16 index 5889103..7a4b707 100644
     17 --- a/gfx/skia/include/core/SkMath.h
     18 +++ b/gfx/skia/include/core/SkMath.h
     19 @@ -153,10 +153,7 @@ static inline bool SkIsPow2(int value) {
     20     With this requirement, we can generate faster instructions on some
     21     architectures.
     22 */
     23 -#if defined(__arm__) \
     24 -  && !defined(__thumb__) \
     25 -  && !defined(__ARM_ARCH_4T__) \
     26 -  && !defined(__ARM_ARCH_5T__)
     27 +#ifdef SK_ARM_HAS_EDSP
     28     static inline int32_t SkMulS16(S16CPU x, S16CPU y) {
     29         SkASSERT((int16_t)x == x);
     30         SkASSERT((int16_t)y == y);
     31 diff --git a/gfx/skia/include/core/SkPostConfig.h b/gfx/skia/include/core/SkPostConfig.h
     32 index 041fe2a..03105e4 100644
     33 --- a/gfx/skia/include/core/SkPostConfig.h
     34 +++ b/gfx/skia/include/core/SkPostConfig.h
     35 @@ -311,3 +311,48 @@
     36 #ifndef SK_ALLOW_STATIC_GLOBAL_INITIALIZERS
     37 #define SK_ALLOW_STATIC_GLOBAL_INITIALIZERS 1
     38 #endif
     39 +
     40 +//////////////////////////////////////////////////////////////////////
     41 +// ARM defines
     42 +
     43 +#if defined(__GNUC__) && defined(__arm__)
     44 +
     45 +#  define SK_ARM_ARCH 3
     46 +
     47 +#  if defined(__ARM_ARCH_4__) || defined(__ARM_ARCH_4T__) \
     48 +   || defined(_ARM_ARCH_4)
     49 +#    undef SK_ARM_ARCH
     50 +#    define SK_ARM_ARCH 4
     51 +#  endif
     52 +
     53 +#  if defined(__ARM_ARCH_5__) || defined(__ARM_ARCH_5T__) \
     54 +   || defined(__ARM_ARCH_5E__) || defined(__ARM_ARCH_5TE__) \
     55 +   || defined(__ARM_ARCH_5TEJ__) || defined(_ARM_ARCH_5)
     56 +#    undef SK_ARM_ARCH
     57 +#    define SK_ARM_ARCH 5
     58 +#  endif
     59 + 
     60 +#  if defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) \
     61 +   || defined(__ARM_ARCH_6K__) || defined(__ARM_ARCH_6Z__) \
     62 +   || defined(__ARM_ARCH_6ZK__) || defined(__ARM_ARCH_6T2__) \
     63 +   || defined(__ARM_ARCH_6M__) || defined(_ARM_ARCH_6)
     64 +#    undef SK_ARM_ARCH
     65 +#    define SK_ARM_ARCH 6
     66 +#  endif
     67 +
     68 +#  if defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) \
     69 +   || defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) \
     70 +   || defined(__ARM_ARCH_7EM__) || defined(_ARM_ARCH_7)
     71 +#    undef SK_ARM_ARCH
     72 +#    define SK_ARM_ARCH 7
     73 +#  endif
     74 +
     75 +#  undef SK_ARM_HAS_EDSP
     76 +#  if defined(__thumb2__) && (SK_ARM_ARCH >= 6) \
     77 +   || !defined(__thumb__) \
     78 +   && ((SK_ARM_ARCH > 5) || defined(__ARM_ARCH_5E__) \
     79 +       || defined(__ARM_ARCH_5TE__) || defined(__ARM_ARCH_5TEJ__))
     80 +#    define SK_ARM_HAS_EDSP 1
     81 +#  endif
     82 +
     83 +#endif
     84 diff --git a/gfx/skia/src/opts/SkBitmapProcState_opts_arm.cpp b/gfx/skia/src/opts/SkBitmapProcState_opts_arm.cpp
     85 index 20d62e1..deb1bfe 100644
     86 --- a/gfx/skia/src/opts/SkBitmapProcState_opts_arm.cpp
     87 +++ b/gfx/skia/src/opts/SkBitmapProcState_opts_arm.cpp
     88 @@ -11,7 +11,7 @@
     89 #include "SkColorPriv.h"
     90 #include "SkUtils.h"
     91 
     92 -#if __ARM_ARCH__ >= 6 && !defined(SK_CPU_BENDIAN)
     93 +#if SK_ARM_ARCH >= 6 && !defined(SK_CPU_BENDIAN)
     94 void SI8_D16_nofilter_DX_arm(
     95     const SkBitmapProcState& s,
     96     const uint32_t* SK_RESTRICT xy,
     97 @@ -182,7 +182,7 @@ void SI8_opaque_D32_nofilter_DX_arm(const SkBitmapProcState& s,
     98 
     99     s.fBitmap->getColorTable()->unlockColors(false);
    100 }
    101 -#endif //__ARM_ARCH__ >= 6 && !defined(SK_CPU_BENDIAN)
    102 +#endif // SK_ARM_ARCH >= 6 && !defined(SK_CPU_BENDIAN)
    103 
    104 ///////////////////////////////////////////////////////////////////////////////
    105 
    106 @@ -200,7 +200,7 @@ void SkBitmapProcState::platformProcs() {
    107 
    108     switch (fBitmap->config()) {
    109         case SkBitmap::kIndex8_Config:
    110 -#if __ARM_ARCH__ >= 6 && !defined(SK_CPU_BENDIAN)
    111 +#if SK_ARM_ARCH >= 6 && !defined(SK_CPU_BENDIAN)
    112             if (justDx && !doFilter) {
    113 #if 0   /* crashing on android device */
    114                 fSampleProc16 = SI8_D16_nofilter_DX_arm;
    115 diff --git a/gfx/skia/src/opts/SkBlitRow_opts_arm.cpp b/gfx/skia/src/opts/SkBlitRow_opts_arm.cpp
    116 index 2490371..c928888 100644
    117 --- a/gfx/skia/src/opts/SkBlitRow_opts_arm.cpp
    118 +++ b/gfx/skia/src/opts/SkBlitRow_opts_arm.cpp
    119 @@ -675,8 +675,13 @@ static void __attribute((noinline,optimize("-fomit-frame-pointer"))) S32A_Blend_
    120                   /* dst1_scale and dst2_scale*/
    121                   "lsr    r9, r5, #24                \n\t" /* src >> 24 */
    122                   "lsr    r10, r6, #24               \n\t" /* src >> 24 */
    123 +#ifdef SK_ARM_HAS_EDSP
    124                   "smulbb r9, r9, %[alpha]           \n\t" /* r9 = SkMulS16 r9 with src_scale */
    125                   "smulbb r10, r10, %[alpha]         \n\t" /* r10 = SkMulS16 r10 with src_scale */
    126 +#else
    127 +                  "mul    r9, r9, %[alpha]           \n\t" /* r9 = SkMulS16 r9 with src_scale */
    128 +                  "mul    r10, r10, %[alpha]         \n\t" /* r10 = SkMulS16 r10 with src_scale */
    129 +#endif
    130                   "lsr    r9, r9, #8                 \n\t" /* r9 >> 8 */
    131                   "lsr    r10, r10, #8               \n\t" /* r10 >> 8 */
    132                   "rsb    r9, r9, #256               \n\t" /* dst1_scale = r9 = 255 - r9 + 1 */
    133 @@ -745,7 +750,11 @@ static void __attribute((noinline,optimize("-fomit-frame-pointer"))) S32A_Blend_
    134 
    135                   "lsr    r6, r5, #24                \n\t" /* src >> 24 */
    136                   "and    r8, r12, r5, lsr #8        \n\t" /* ag = r8 = r5 masked by r12 lsr by #8 */
    137 +#ifdef SK_ARM_HAS_EDSP
    138                   "smulbb r6, r6, %[alpha]           \n\t" /* r6 = SkMulS16 with src_scale */
    139 +#else
    140 +                  "mul    r6, r6, %[alpha]           \n\t" /* r6 = SkMulS16 with src_scale */
    141 +#endif
    142                   "and    r9, r12, r5                \n\t" /* rb = r9 = r5 masked by r12 */
    143                   "lsr    r6, r6, #8                 \n\t" /* r6 >> 8 */
    144                   "mul    r8, r8, %[alpha]           \n\t" /* ag = r8 times scale */
    145 -- 
    146 1.7.5.4