24 memcpy((
void*)&v, &splat, 16);
30 static_assert(
SK_A32_SHIFT == 24,
"This method assumes little-endian.");
31 return Sk4px(skvx::shuffle<3,3,3,3, 7,7,7,7, 11,11,11,11, 15,15,15,15>(fV));
38 memcpy((
void*)&v, px, 16);
43 memcpy((
void*)&v, px, 8);
48 memcpy((
void*)&v, px, 4);
56 return Sk4px(skvx::shuffle<0,0,0,0, 1,1,1,1, 2,2,2,2, 3,3,3,3>(
a));
106 return Sk4px(approx_scale(fV, o.fV));
110 return Sk4px(saturated_add(fV, o.fV));
115 template <
typename Fn>
124 dst4 = fn(
Load4(src+4));
127 dst += 8; src += 8; n -= 8;
132 fn(
Load4(src)).store4(dst);
133 dst += 4; src += 4; n -= 4;
136 fn(
Load2(src)).store2(dst);
137 dst += 2; src += 2; n -= 2;
140 fn(
Load1(src)).store1(dst);
147 template <
typename Fn>
158 dst += 8; src += 8; n -= 8;
164 dst += 4; src += 4; n -= 4;
168 dst += 2; src += 2; n -= 2;
178 template <
typename Fn>
189 dst += 8;
a += 8; n -= 8;
195 dst += 4;
a += 4; n -= 4;
199 dst += 2;
a += 2; n -= 2;
209 template <
typename Fn>
221 dst += 8; src += 8;
a += 8; n -= 8;
227 dst += 4; src += 4;
a += 4; n -= 4;
231 dst += 2; src += 2;
a += 2; n -= 2;
Wide(const skvx::Vec< 16, uint16_t > &v)
Wide operator-(const Wide &o) const
Wide operator<<(int bits) const
Wide operator>>(int bits) const
Wide operator*(const Wide &o) const
Wide operator+(const Wide &o) const
Sk4px approxMulDiv255(const Sk4px &o) const
void store2(SkPMColor px[2]) const
static Sk4px Load2Alphas(const SkAlpha alphas[2])
void store1(SkPMColor px[1]) const
static void MapSrc(int n, SkPMColor *dst, const SkPMColor *src, const Fn &fn)
static void MapDstSrc(int n, SkPMColor *dst, const SkPMColor *src, const Fn &fn)
static Sk4px Load4Alphas(const SkAlpha alphas[4])
Sk4px thenElse(const Sk4px &t, const Sk4px &e) const
Sk4px saturatedAdd(const Sk4px &o) const
static Sk4px Load2(const SkPMColor px[2])
Sk4px operator-(const Sk4px &o) const
Wide operator*(const Sk4px &o) const
void store4(SkPMColor px[4]) const
static Sk4px DupPMColor(SkPMColor c)
Sk4px(const skvx::byte16 &v)
static void MapDstAlpha(int n, SkPMColor *dst, const SkAlpha *a, const Fn &fn)
Wide mulWiden(const skvx::byte16 &o) const
Sk4px operator&(const Sk4px &o) const
static Sk4px Load1(const SkPMColor px[1])
static Sk4px Load4(const SkPMColor px[4])
static void MapDstSrcAlpha(int n, SkPMColor *dst, const SkPMColor *src, const SkAlpha *a, const Fn &fn)
Sk4px operator<(const Sk4px &o) const
Sk4px operator+(const Sk4px &o) const
SIN Vec< N, uint8_t > div255(const Vec< N, uint16_t > &x)
static SKVX_ALWAYS_INLINE Vec Load(const void *ptr)