| OLD | NEW |
| 1 #ifndef SkColor_opts_neon_DEFINED | 1 #ifndef SkColor_opts_neon_DEFINED |
| 2 #define SkColor_opts_neon_DEFINED | 2 #define SkColor_opts_neon_DEFINED |
| 3 | 3 |
| 4 #include "SkTypes.h" | 4 #include "SkTypes.h" |
| 5 #include "SkColorPriv.h" | 5 #include "SkColorPriv.h" |
| 6 | 6 |
| 7 #include <arm_neon.h> | 7 #include <arm_neon.h> |
| 8 | 8 |
| 9 #define NEON_A (SK_A32_SHIFT / 8) | 9 #define NEON_A (SK_A32_SHIFT / 8) |
| 10 #define NEON_R (SK_R32_SHIFT / 8) | 10 #define NEON_R (SK_R32_SHIFT / 8) |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 75 src_wide = vreinterpretq_s16_u16(vmovl_u8(src)); | 75 src_wide = vreinterpretq_s16_u16(vmovl_u8(src)); |
| 76 dst_wide = vreinterpretq_s16_u16(vmovl_u8(dst)); | 76 dst_wide = vreinterpretq_s16_u16(vmovl_u8(dst)); |
| 77 | 77 |
| 78 src_wide = (src_wide - dst_wide) * vreinterpretq_s16_u16(scale); | 78 src_wide = (src_wide - dst_wide) * vreinterpretq_s16_u16(scale); |
| 79 | 79 |
| 80 dst_wide += vshrq_n_s16(src_wide, 5); | 80 dst_wide += vshrq_n_s16(src_wide, 5); |
| 81 | 81 |
| 82 return vmovn_u16(vreinterpretq_u16_s16(dst_wide)); | 82 return vmovn_u16(vreinterpretq_u16_s16(dst_wide)); |
| 83 } | 83 } |
| 84 | 84 |
| 85 static inline SkPMColor SkFourByteInterp256_neon(SkPMColor src, SkPMColor dst, |
| 86 unsigned srcScale) { |
| 87 SkASSERT(srcScale <= 256); |
| 88 int16x8_t vscale = vdupq_n_s16(srcScale); |
| 89 int16x8_t vsrc_wide, vdst_wide, vdiff; |
| 90 uint8x8_t res; |
| 91 |
| 92 vsrc_wide = vreinterpretq_s16_u16(vmovl_u8(vreinterpret_u8_u32(vdup_n_u32(sr
c)))); |
| 93 vdst_wide = vreinterpretq_s16_u16(vmovl_u8(vreinterpret_u8_u32(vdup_n_u32(ds
t)))); |
| 94 |
| 95 vdiff = vsrc_wide - vdst_wide; |
| 96 vdiff *= vscale; |
| 97 |
| 98 vdiff = vshrq_n_s16(vdiff, 8); |
| 99 |
| 100 vdst_wide += vdiff; |
| 101 |
| 102 res = vmovn_u16(vreinterpretq_u16_s16(vdst_wide)); |
| 103 |
| 104 return vget_lane_u32(vreinterpret_u32_u8(res), 0); |
| 105 } |
| 106 |
| 107 static inline SkPMColor SkFourByteInterp_neon(SkPMColor src, SkPMColor dst, |
| 108 U8CPU srcWeight) { |
| 109 SkASSERT(srcWeight <= 255); |
| 110 unsigned scale = SkAlpha255To256(srcWeight); |
| 111 return SkFourByteInterp256_neon(src, dst, scale); |
| 112 } |
| 113 |
| 85 #endif /* #ifndef SkColor_opts_neon_DEFINED */ | 114 #endif /* #ifndef SkColor_opts_neon_DEFINED */ |
| OLD | NEW |