Lines Matching defs:SkNx

31 class SkNx<2, float> {
33 AI SkNx(float32x2_t vec) : fVec(vec) {}
35 AI SkNx() {}
36 AI SkNx(float val) : fVec(vdup_n_f32(val)) {}
37 AI SkNx(float a, float b) { fVec = (float32x2_t) { a, b }; }
39 AI static SkNx Load(const void* ptr) { return vld1_f32((const float*)ptr); }
42 AI static void Load2(const void* ptr, SkNx* x, SkNx* y) {
48 AI static void Store2(void* dst, const SkNx& a, const SkNx& b) {
56 AI static void Store3(void* dst, const SkNx& a, const SkNx& b, const SkNx& c) {
65 AI static void Store4(void* dst, const SkNx& a, const SkNx& b, const SkNx& c, const SkNx& d) {
75 AI SkNx operator - () const { return vneg_f32(fVec); }
77 AI SkNx operator + (const SkNx& o) const { return vadd_f32(fVec, o.fVec); }
78 AI SkNx operator - (const SkNx& o) const { return vsub_f32(fVec, o.fVec); }
79 AI SkNx operator * (const SkNx& o) const { return vmul_f32(fVec, o.fVec); }
80 AI SkNx operator / (const SkNx& o) const {
91 AI SkNx operator==(const SkNx& o) const { return vreinterpret_f32_u32(vceq_f32(fVec, o.fVec)); }
92 AI SkNx operator <(const SkNx& o) const { return vreinterpret_f32_u32(vclt_f32(fVec, o.fVec)); }
93 AI SkNx operator >(const SkNx& o) const { return vreinterpret_f32_u32(vcgt_f32(fVec, o.fVec)); }
94 AI SkNx operator<=(const SkNx& o) const { return vreinterpret_f32_u32(vcle_f32(fVec, o.fVec)); }
95 AI SkNx operator>=(const SkNx& o) const { return vreinterpret_f32_u32(vcge_f32(fVec, o.fVec)); }
96 AI SkNx operator!=(const SkNx& o) const {
100 AI static SkNx Min(const SkNx& l, const SkNx& r) { return vmin_f32(l.fVec, r.fVec); }
101 AI static SkNx Max(const SkNx& l, const SkNx& r) { return vmax_f32(l.fVec, r.fVec); }
103 AI SkNx abs() const { return vabs_f32(fVec); }
104 AI SkNx floor() const {
112 AI SkNx sqrt() const {
146 AI SkNx thenElse(const SkNx& t, const SkNx& e) const {
154 class SkNx<4, float> {
156 AI SkNx(float32x4_t vec) : fVec(vec) {}
158 AI SkNx() {}
159 AI SkNx(float val) : fVec(vdupq_n_f32(val)) {}
160 AI SkNx(float a, float b, float c, float d) { fVec = (float32x4_t) { a, b, c, d }; }
162 AI static SkNx Load(const void* ptr) { return vld1q_f32((const float*)ptr); }
165 AI static void Load2(const void* ptr, SkNx* x, SkNx* y) {
171 AI static void Load4(const void* ptr, SkNx* r, SkNx* g, SkNx* b, SkNx* a) {
178 AI static void Store4(void* dst, const SkNx& r, const SkNx& g, const SkNx& b, const SkNx& a) {
188 AI SkNx operator - () const { return vnegq_f32(fVec); }
190 AI SkNx operator + (const SkNx& o) const { return vaddq_f32(fVec, o.fVec); }
191 AI SkNx operator - (const SkNx& o) const { return vsubq_f32(fVec, o.fVec); }
192 AI SkNx operator * (const SkNx& o) const { return vmulq_f32(fVec, o.fVec); }
193 AI SkNx operator / (const SkNx& o) const {
204 AI SkNx operator==(const SkNx& o) const {return vreinterpretq_f32_u32(vceqq_f32(fVec, o.fVec));}
205 AI SkNx operator <(const SkNx& o) const {return vreinterpretq_f32_u32(vcltq_f32(fVec, o.fVec));}
206 AI SkNx operator >(const SkNx& o) const {return vreinterpretq_f32_u32(vcgtq_f32(fVec, o.fVec));}
207 AI SkNx operator<=(const SkNx& o) const {return vreinterpretq_f32_u32(vcleq_f32(fVec, o.fVec));}
208 AI SkNx operator>=(const SkNx& o) const {return vreinterpretq_f32_u32(vcgeq_f32(fVec, o.fVec));}
209 AI SkNx operator!=(const SkNx& o) const {
213 AI static SkNx Min(const SkNx& l, const SkNx& r) { return vminq_f32(l.fVec, r.fVec); }
214 AI static SkNx Max(const SkNx& l, const SkNx& r) { return vmaxq_f32(l.fVec, r.fVec); }
216 AI SkNx abs() const { return vabsq_f32(fVec); }
217 AI SkNx floor() const {
226 AI SkNx sqrt() const {
247 SkNx min = Min(*this, vrev64q_f32(fVec));
256 SkNx max = Max(*this, vrev64q_f32(fVec));
280 AI SkNx thenElse(const SkNx& t, const SkNx& e) const {
297 class SkNx<4, uint16_t> {
299 AI SkNx(const uint16x4_t& vec) : fVec(vec) {}
301 AI SkNx() {}
302 AI SkNx(uint16_t val) : fVec(vdup_n_u16(val)) {}
303 AI SkNx(uint16_t a, uint16_t b, uint16_t c, uint16_t d) {
307 AI static SkNx Load(const void* ptr) { return vld1_u16((const uint16_t*)ptr); }
310 AI static void Load4(const void* ptr, SkNx* r, SkNx* g, SkNx* b, SkNx* a) {
317 AI static void Load3(const void* ptr, SkNx* r, SkNx* g, SkNx* b) {
323 AI static void Store4(void* dst, const SkNx& r, const SkNx& g, const SkNx& b, const SkNx& a) {
333 AI SkNx operator + (const SkNx& o) const { return vadd_u16(fVec, o.fVec); }
334 AI SkNx operator - (const SkNx& o) const { return vsub_u16(fVec, o.fVec); }
335 AI SkNx operator * (const SkNx& o) const { return vmul_u16(fVec, o.fVec); }
336 AI SkNx operator & (const SkNx& o) const { return vand_u16(fVec, o.fVec); }
337 AI SkNx operator | (const SkNx& o) const { return vorr_u16(fVec, o.fVec); }
339 AI SkNx operator << (int bits) const { return fVec << SkNx(bits).fVec; }
340 AI SkNx operator >> (int bits) const { return fVec >> SkNx(bits).fVec; }
342 AI static SkNx Min(const SkNx& a, const SkNx& b) { return vmin_u16(a.fVec, b.fVec); }
350 AI SkNx thenElse(const SkNx& t, const SkNx& e) const {
358 class SkNx<8, uint16_t> {
360 AI SkNx(const uint16x8_t& vec) : fVec(vec) {}
362 AI SkNx() {}
363 AI SkNx(uint16_t val) : fVec(vdupq_n_u16(val)) {}
364 AI static SkNx Load(const void* ptr) { return vld1q_u16((const uint16_t*)ptr); }
366 AI SkNx(uint16_t a, uint16_t b, uint16_t c, uint16_t d,
373 AI SkNx operator + (const SkNx& o) const { return vaddq_u16(fVec, o.fVec); }
374 AI SkNx operator - (const SkNx& o) const { return vsubq_u16(fVec, o.fVec); }
375 AI SkNx operator * (const SkNx& o) const { return vmulq_u16(fVec, o.fVec); }
376 AI SkNx operator & (const SkNx& o) const { return vandq_u16(fVec, o.fVec); }
377 AI SkNx operator | (const SkNx& o) const { return vorrq_u16(fVec, o.fVec); }
379 AI SkNx operator << (int bits) const { return fVec << SkNx(bits).fVec; }
380 AI SkNx operator >> (int bits) const { return fVec >> SkNx(bits).fVec; }
382 AI static SkNx Min(const SkNx& a, const SkNx& b) { return vminq_u16(a.fVec, b.fVec); }
390 AI SkNx mulHi(const SkNx& m) const {
397 AI SkNx thenElse(const SkNx& t, const SkNx& e) const {
405 class SkNx<4, uint8_t> {
409 AI SkNx(const uint8x8_t& vec) : fVec(vec) {}
411 AI SkNx() {}
412 AI SkNx(uint8_t a, uint8_t b, uint8_t c, uint8_t d) {
415 AI static SkNx Load(const void* ptr) {
433 class SkNx<8, uint8_t> {
435 AI SkNx(const uint8x8_t& vec) : fVec(vec) {}
437 AI SkNx() {}
438 AI SkNx(uint8_t val) : fVec(vdup_n_u8(val)) {}
439 AI SkNx(uint8_t a, uint8_t b, uint8_t c, uint8_t d,
444 AI static SkNx Load(const void* ptr) { return vld1_u8((const uint8_t*)ptr); }
457 class SkNx<16, uint8_t> {
459 AI SkNx(const uint8x16_t& vec) : fVec(vec) {}
461 AI SkNx() {}
462 AI SkNx(uint8_t val) : fVec(vdupq_n_u8(val)) {}
463 AI SkNx(uint8_t a, uint8_t b, uint8_t c, uint8_t d,
470 AI static SkNx Load(const void* ptr) { return vld1q_u8((const uint8_t*)ptr); }
473 AI SkNx saturatedAdd(const SkNx& o) const { return vqaddq_u8(fVec, o.fVec); }
475 AI SkNx operator + (const SkNx& o) const { return vaddq_u8(fVec, o.fVec); }
476 AI SkNx operator - (const SkNx& o) const { return vsubq_u8(fVec, o.fVec); }
477 AI SkNx operator & (const SkNx& o) const { return vandq_u8(fVec, o.fVec); }
479 AI static SkNx Min(const SkNx& a, const SkNx& b) { return vminq_u8(a.fVec, b.fVec); }
480 AI SkNx operator < (const SkNx& o) const { return vcltq_u8(fVec, o.fVec); }
488 AI SkNx thenElse(const SkNx& t, const SkNx& e) const {
496 class SkNx<4, int32_t> {
498 AI SkNx(const int32x4_t& vec) : fVec(vec) {}
500 AI SkNx() {}
501 AI SkNx(int32_t v) {
504 AI SkNx(int32_t a, int32_t b, int32_t c, int32_t d) {
507 AI static SkNx Load(const void* ptr) {
519 AI SkNx operator + (const SkNx& o) const { return vaddq_s32(fVec, o.fVec); }
520 AI SkNx operator - (const SkNx& o) const { return vsubq_s32(fVec, o.fVec); }
521 AI SkNx operator * (const SkNx& o) const { return vmulq_s32(fVec, o.fVec); }
523 AI SkNx operator & (const SkNx& o) const { return vandq_s32(fVec, o.fVec); }
524 AI SkNx operator | (const SkNx& o) const { return vorrq_s32(fVec, o.fVec); }
525 AI SkNx operator ^ (const SkNx& o) const { return veorq_s32(fVec, o.fVec); }
527 AI SkNx operator << (int bits) const { return fVec << SkNx(bits).fVec; }
528 AI SkNx operator >> (int bits) const { return fVec >> SkNx(bits).fVec; }
530 AI SkNx operator == (const SkNx& o) const {
533 AI SkNx operator < (const SkNx& o) const {
536 AI SkNx operator > (const SkNx& o) const {
540 AI static SkNx Min(const SkNx& a, const SkNx& b) { return vminq_s32(a.fVec, b.fVec); }
541 AI static SkNx Max(const SkNx& a, const SkNx& b) { return vmaxq_s32(a.fVec, b.fVec); }
544 AI SkNx thenElse(const SkNx& t, const SkNx& e) const {
548 AI SkNx abs() const { return vabsq_s32(fVec); }
554 class SkNx<4, uint32_t> {
556 AI SkNx(const uint32x4_t& vec) : fVec(vec) {}
558 AI SkNx() {}
559 AI SkNx(uint32_t v) {
562 AI SkNx(uint32_t a, uint32_t b, uint32_t c, uint32_t d) {
565 AI static SkNx Load(const void* ptr) {
577 AI SkNx operator + (const SkNx& o) const { return vaddq_u32(fVec, o.fVec); }
578 AI SkNx operator - (const SkNx& o) const { return vsubq_u32(fVec, o.fVec); }
579 AI SkNx operator * (const SkNx& o) const { return vmulq_u32(fVec, o.fVec); }
581 AI SkNx operator & (const SkNx& o) const { return vandq_u32(fVec, o.fVec); }
582 AI SkNx operator | (const SkNx& o) const { return vorrq_u32(fVec, o.fVec); }
583 AI SkNx operator ^ (const SkNx& o) const { return veorq_u32(fVec, o.fVec); }
585 AI SkNx operator << (int bits) const { return fVec << SkNx(bits).fVec; }
586 AI SkNx operator >> (int bits) const { return fVec >> SkNx(bits).fVec; }
588 AI SkNx operator == (const SkNx& o) const { return vceqq_u32(fVec, o.fVec); }
589 AI SkNx operator < (const SkNx& o) const { return vcltq_u32(fVec, o.fVec); }
590 AI SkNx operator > (const SkNx& o) const { return vcgtq_u32(fVec, o.fVec); }
592 AI static SkNx Min(const SkNx& a, const SkNx& b) { return vminq_u32(a.fVec, b.fVec); }
595 AI SkNx mulHi(const SkNx& m) const {
602 AI SkNx thenElse(const SkNx& t, const SkNx& e) const {