| Index: src/opts/SkBitmapProcState_filter_neon.h
|
| diff --git a/src/opts/SkBitmapProcState_filter_neon.h b/src/opts/SkBitmapProcState_filter_neon.h
|
| index e56b683b87412dbb905747b64865a5096f40c86c..0887145c3d0527de8b2a323fe75e05881c817cb3 100644
|
| --- a/src/opts/SkBitmapProcState_filter_neon.h
|
| +++ b/src/opts/SkBitmapProcState_filter_neon.h
|
| @@ -17,12 +17,15 @@
|
| * exact results for the color components, but if the 4 incoming colors are
|
| * all opaque, then the output color must also be opaque. Subsequent parts of
|
| * the drawing pipeline may rely on this (e.g. which blitrow proc to use).
|
| + *
|
| */
|
| -
|
| -static inline void Filter_32_opaque_neon(unsigned x, unsigned y,
|
| - SkPMColor a00, SkPMColor a01,
|
| - SkPMColor a10, SkPMColor a11,
|
| - SkPMColor *dst) {
|
| +// Chrome on Android uses -Os so we need to force these inline. Otherwise
|
| +// calling the function in the inner loops will cause significant overhead on
|
| +// some platforms.
|
| +static SK_ALWAYS_INLINE void Filter_32_opaque_neon(unsigned x, unsigned y,
|
| + SkPMColor a00, SkPMColor a01,
|
| + SkPMColor a10, SkPMColor a11,
|
| + SkPMColor *dst) {
|
| uint8x8_t vy, vconst16_8, v16_y, vres;
|
| uint16x4_t vx, vconst16_16, v16_x, tmp;
|
| uint32x2_t va0, va1;
|
| @@ -53,10 +56,11 @@ static inline void Filter_32_opaque_neon(unsigned x, unsigned y,
|
| vst1_lane_u32(dst, vreinterpret_u32_u8(vres), 0); // store result
|
| }
|
|
|
| -static inline void Filter_32_alpha_neon(unsigned x, unsigned y,
|
| - SkPMColor a00, SkPMColor a01,
|
| - SkPMColor a10, SkPMColor a11,
|
| - SkPMColor *dst, uint16_t scale) {
|
| +static SK_ALWAYS_INLINE void Filter_32_alpha_neon(unsigned x, unsigned y,
|
| + SkPMColor a00, SkPMColor a01,
|
| + SkPMColor a10, SkPMColor a11,
|
| + SkPMColor *dst,
|
| + uint16_t scale) {
|
| uint8x8_t vy, vconst16_8, v16_y, vres;
|
| uint16x4_t vx, vconst16_16, v16_x, tmp, vscale;
|
| uint32x2_t va0, va1;
|
|
|