Home | History | Annotate | Download | only in opts

Lines Matching refs:AI

19 AI static float32x4_t armv7_vrndmq_f32(float32x4_t v) {
28 AI SkNx(float32x2_t vec) : fVec(vec) {}
30 AI SkNx() {}
31 AI SkNx(float val) : fVec(vdup_n_f32(val)) {}
32 AI SkNx(float a, float b) { fVec = (float32x2_t) { a, b }; }
34 AI static SkNx Load(const void* ptr) { return vld1_f32((const float*)ptr); }
35 AI void store(void* ptr) const { vst1_f32((float*)ptr, fVec); }
37 AI static void Store3(void* dst, const SkNx& a, const SkNx& b, const SkNx& c) {
46 AI static void Store4(void* dst, const SkNx& a, const SkNx& b, const SkNx& c, const SkNx& d) {
56 AI SkNx invert() const {
62 AI SkNx operator - () const { return vneg_f32(fVec); }
64 AI SkNx operator + (const SkNx& o) const { return vadd_f32(fVec, o.fVec); }
65 AI SkNx operator - (const SkNx& o) const { return vsub_f32(fVec, o.fVec); }
66 AI SkNx operator * (const SkNx& o) const { return vmul_f32(fVec, o.fVec); }
67 AI SkNx operator / (const SkNx& o) const {
78 AI SkNx operator==(const SkNx& o) const { return vreinterpret_f32_u32(vceq_f32(fVec, o.fVec)); }
79 AI SkNx operator <(const SkNx& o) const { return vreinterpret_f32_u32(vclt_f32(fVec, o.fVec)); }
80 AI SkNx operator >(const SkNx& o) const { return vreinterpret_f32_u32(vcgt_f32(fVec, o.fVec)); }
81 AI SkNx operator<=(const SkNx& o) const { return vreinterpret_f32_u32(vcle_f32(fVec, o.fVec)); }
82 AI SkNx operator>=(const SkNx& o) const { return vreinterpret_f32_u32(vcge_f32(fVec, o.fVec)); }
83 AI SkNx operator!=(const SkNx& o) const {
87 AI static SkNx Min(const SkNx& l, const SkNx& r) { return vmin_f32(l.fVec, r.fVec); }
88 AI static SkNx Max(const SkNx& l, const SkNx& r) { return vmax_f32(l.fVec, r.fVec); }
90 AI SkNx abs() const { return vabs_f32(fVec); }
92 AI SkNx rsqrt() const {
97 AI SkNx sqrt() const {
108 AI float operator[](int k) const {
114 AI bool allTrue() const {
118 AI bool anyTrue() const {
123 AI SkNx thenElse(const SkNx& t, const SkNx& e) const {
133 AI SkNx(float32x4_t vec) : fVec(vec) {}
135 AI SkNx() {}
136 AI SkNx(float val) : fVec(vdupq_n_f32(val)) {}
137 AI SkNx(float a, float b, float c, float d) { fVec = (float32x4_t) { a, b, c, d }; }
139 AI static SkNx Load(const void* ptr) { return vld1q_f32((const float*)ptr); }
140 AI void store(void* ptr) const { vst1q_f32((float*)ptr, fVec); }
142 AI static void Load2(const void* ptr, SkNx* x, SkNx* y) {
148 AI static void Load4(const void* ptr, SkNx* r, SkNx* g, SkNx* b, SkNx* a) {
155 AI static void Store4(void* dst, const SkNx& r, const SkNx& g, const SkNx& b, const SkNx& a) {
165 AI SkNx invert() const {
171 AI SkNx operator - () const { return vnegq_f32(fVec); }
173 AI SkNx operator + (const SkNx& o) const { return vaddq_f32(fVec, o.fVec); }
174 AI SkNx operator - (const SkNx& o) const { return vsubq_f32(fVec, o.fVec); }
175 AI SkNx operator * (const SkNx& o) const { return vmulq_f32(fVec, o.fVec); }
176 AI SkNx operator / (const SkNx& o) const {
187 AI SkNx operator==(const SkNx& o) const {return vreinterpretq_f32_u32(vceqq_f32(fVec, o.fVec));}
188 AI SkNx operator <(const SkNx& o) const {return vreinterpretq_f32_u32(vcltq_f32(fVec, o.fVec));}
189 AI SkNx operator >(const SkNx& o) const {return vreinterpretq_f32_u32(vcgtq_f32(fVec, o.fVec));}
190 AI SkNx operator<=(const SkNx& o) const {return vreinterpretq_f32_u32(vcleq_f32(fVec, o.fVec));}
191 AI SkNx operator>=(const SkNx& o) const {return vreinterpretq_f32_u32(vcgeq_f32(fVec, o.fVec));}
192 AI SkNx operator!=(const SkNx& o) const {
196 AI static SkNx Min(const SkNx& l, const SkNx& r) { return vminq_f32(l.fVec, r.fVec); }
197 AI static SkNx Max(const SkNx& l, const SkNx& r) { return vmaxq_f32(l.fVec, r.fVec); }
199 AI SkNx abs() const { return vabsq_f32(fVec); }
200 AI SkNx floor() const {
209 AI SkNx rsqrt() const {
214 AI SkNx sqrt() const {
225 AI float operator[](int k) const {
231 AI bool allTrue() const {
236 AI bool anyTrue() const {
242 AI SkNx thenElse(const SkNx& t, const SkNx& e) const {
250 AI static Sk4f SkNx_fma(const Sk4f& f, const Sk4f& m, const Sk4f& a) {
261 AI SkNx(const uint16x4_t& vec) : fVec(vec) {}
263 AI SkNx() {}
264 AI SkNx(uint16_t val) : fVec(vdup_n_u16(val)) {}
265 AI SkNx(uint16_t a, uint16_t b, uint16_t c, uint16_t d) {
269 AI static SkNx Load(const void* ptr) { return vld1_u16((const uint16_t*)ptr); }
270 AI void store(void* ptr) const { vst1_u16((uint16_t*)ptr, fVec); }
272 AI static void Load4(const void* ptr, SkNx* r, SkNx* g, SkNx* b, SkNx* a) {
279 AI static void Load3(const void* ptr, SkNx* r, SkNx* g, SkNx* b) {
285 AI static void Store4(void* dst, const SkNx& r, const SkNx& g, const SkNx& b, const SkNx& a) {
295 AI SkNx operator + (const SkNx& o) const { return vadd_u16(fVec, o.fVec); }
296 AI SkNx operator - (const SkNx& o) const { return vsub_u16(fVec, o.fVec); }
297 AI SkNx operator * (const SkNx& o) const { return vmul_u16(fVec, o.fVec); }
298 AI SkNx operator & (const SkNx& o) const { return vand_u16(fVec, o.fVec); }
299 AI SkNx operator | (const SkNx& o) const { return vorr_u16(fVec, o.fVec); }
301 AI SkNx operator << (int bits) const { return fVec << SkNx(bits).fVec; }
302 AI SkNx operator >> (int bits) const { return fVec >> SkNx(bits).fVec; }
304 AI static SkNx Min(const SkNx& a, const SkNx& b) { return vmin_u16(a.fVec, b.fVec); }
306 AI uint16_t operator[](int k) const {
312 AI SkNx thenElse(const SkNx& t, const SkNx& e) const {
322 AI SkNx(const uint16x8_t& vec) : fVec(vec) {}
324 AI SkNx() {}
325 AI SkNx(uint16_t val) : fVec(vdupq_n_u16(val)) {}
326 AI static SkNx Load(const void* ptr) { return vld1q_u16((const uint16_t*)ptr); }
328 AI SkNx(uint16_t a, uint16_t b, uint16_t c, uint16_t d,
333 AI void store(void* ptr) const { vst1q_u16((uint16_t*)ptr, fVec); }
335 AI SkNx operator + (const SkNx& o) const { return vaddq_u16(fVec, o.fVec); }
336 AI SkNx operator - (const SkNx& o) const { return vsubq_u16(fVec, o.fVec); }
337 AI SkNx operator * (const SkNx& o) const { return vmulq_u16(fVec, o.fVec); }
338 AI SkNx operator & (const SkNx& o) const { return vandq_u16(fVec, o.fVec); }
339 AI SkNx operator | (const SkNx& o) const { return vorrq_u16(fVec, o.fVec); }
341 AI SkNx operator << (int bits) const { return fVec << SkNx(bits).fVec; }
342 AI SkNx operator >> (int bits) const { return fVec >> SkNx(bits).fVec; }
344 AI static SkNx Min(const SkNx& a, const SkNx& b) { return vminq_u16(a.fVec, b.fVec); }
346 AI uint16_t operator[](int k) const {
352 AI SkNx mulHi(const SkNx& m) const {
359 AI SkNx thenElse(const SkNx& t, const SkNx& e) const {
371 AI SkNx(const uint8x8_t& vec) : fVec(vec) {}
373 AI SkNx() {}
374 AI SkNx(uint8_t a, uint8_t b, uint8_t c, uint8_t d) {
377 AI static SkNx Load(const void* ptr) {
380 AI void store(void* ptr) const {
383 AI uint8_t operator[](int k) const {
397 AI SkNx(const uint8x8_t& vec) : fVec(vec) {}
399 AI SkNx() {}
400 AI SkNx(uint8_t val) : fVec(vdup_n_u8(val)) {}
401 AI SkNx(uint8_t a, uint8_t b, uint8_t c, uint8_t d,
406 AI static SkNx Load(const void* ptr) { return vld1_u8((const uint8_t*)ptr); }
407 AI void store(void* ptr) const { vst1_u8((uint8_t*)ptr, fVec); }
409 AI uint8_t operator[](int k) const {
421 AI SkNx(const uint8x16_t& vec) : fVec(vec) {}
423 AI SkNx() {}
424 AI SkNx(uint8_t val) : fVec(vdupq_n_u8(val)) {}
425 AI SkNx(uint8_t a, uint8_t b, uint8_t c, uint8_t d,
432 AI static SkNx Load(const void* ptr) { return vld1q_u8((const uint8_t*)ptr); }
433 AI void store(void* ptr) const { vst1q_u8((uint8_t*)ptr, fVec); }
435 AI SkNx saturatedAdd(const SkNx& o) const { return vqaddq_u8(fVec, o.fVec); }
437 AI SkNx operator + (const SkNx& o) const { return vaddq_u8(fVec, o.fVec); }
438 AI SkNx operator - (const SkNx& o) const { return vsubq_u8(fVec, o.fVec); }
440 AI static SkNx Min(const SkNx& a, const SkNx& b) { return vminq_u8(a.fVec, b.fVec); }
441 AI SkNx operator < (const SkNx& o) const { return vcltq_u8(fVec, o.fVec); }
443 AI uint8_t operator[](int k) const {
449 AI SkNx thenElse(const SkNx& t, const SkNx& e) const {
459 AI SkNx(const int32x4_t& vec) : fVec(vec) {}
461 AI SkNx() {}
462 AI SkNx(int32_t v) {
465 AI SkNx(int32_t a, int32_t b, int32_t c, int32_t d) {
468 AI static SkNx Load(const void* ptr) {
471 AI void store(void* ptr) const {
474 AI int32_t operator[](int k) const {
480 AI
481 AI SkNx operator - (const SkNx& o) const { return vsubq_s32(fVec, o.fVec); }
482 AI SkNx operator * (const SkNx& o) const { return vmulq_s32(fVec, o.fVec); }
484 AI SkNx operator & (const SkNx& o) const { return vandq_s32(fVec, o.fVec); }
485 AI SkNx operator | (const SkNx& o) const { return vorrq_s32(fVec, o.fVec); }
486 AI SkNx operator ^ (const SkNx& o) const { return veorq_s32(fVec, o.fVec); }
488 AI SkNx operator << (int bits) const { return fVec << SkNx(bits).fVec; }
489 AI SkNx operator >> (int bits) const { return fVec >> SkNx(bits).fVec; }
491 AI SkNx operator == (const SkNx& o) const {
494 AI SkNx operator < (const SkNx& o) const {
497 AI SkNx operator > (const SkNx& o) const {
501 AI static SkNx Min(const SkNx& a, const SkNx& b) { return vminq_s32(a.fVec, b.fVec); }
502 AI static SkNx Max(const SkNx& a, const SkNx& b) { return vmaxq_s32(a.fVec, b.fVec); }
505 AI SkNx thenElse(const SkNx& t, const SkNx& e) const {
509 AI SkNx abs() const { return vabsq_s32(fVec); }
517 AI SkNx(const uint32x4_t& vec) : fVec(vec) {}
519 AI SkNx() {}
520 AI SkNx(uint32_t v) {
523 AI SkNx(uint32_t a, uint32_t b, uint32_t c, uint32_t d) {
526 AI static SkNx Load(const void* ptr) {
529 AI void store(void* ptr) const {
532 AI uint32_t operator[](int k) const {
538 AI SkNx operator + (const SkNx& o) const { return vaddq_u32(fVec, o.fVec); }
539 AI SkNx operator - (const SkNx& o) const { return vsubq_u32(fVec, o.fVec); }
540 AI SkNx operator * (const SkNx& o) const { return vmulq_u32(fVec, o.fVec); }
542 AI SkNx operator & (const SkNx& o) const { return vandq_u32(fVec, o.fVec); }
543 AI SkNx operator | (const SkNx& o) const { return vorrq_u32(fVec, o.fVec); }
544 AI SkNx operator ^ (const SkNx& o) const { return veorq_u32(fVec, o.fVec); }
546 AI SkNx operator << (int bits) const { return fVec << SkNx(bits).fVec; }
547 AI SkNx operator >> (int bits) const { return fVec >> SkNx(bits).fVec; }
549 AI SkNx operator == (const SkNx& o) const { return vceqq_u32(fVec, o.fVec); }
550 AI SkNx operator < (const SkNx& o) const { return vcltq_u32(fVec, o.fVec); }
551 AI SkNx operator > (const SkNx& o) const { return vcgtq_u32(fVec, o.fVec); }
553 AI static SkNx Min(const SkNx& a, const SkNx& b) { return vminq_u32(a.fVec, b.fVec); }
556 AI SkNx mulHi(const SkNx& m) const {
563 AI SkNx thenElse(const SkNx& t, const SkNx& e) const {
570 template<> AI /*static*/ Sk4i SkNx_cast<int32_t, float>(const Sk4f& src) {
574 template<> AI /*static*/ Sk4f SkNx_cast<float, int32_t>(const Sk4i& src) {
577 template<> AI /*static*/ Sk4f SkNx_cast<float, uint32_t>(const Sk4u& src) {
581 template<> AI /*static*/ Sk4h SkNx_cast<uint16_t, float>(const Sk4f& src) {
585 template<> AI /*static*/ Sk4f SkNx_cast<float, uint16_t>(const Sk4h& src) {
589 template<> AI /*static*/ Sk4b SkNx_cast<uint8_t, float>(const Sk4f& src) {
595 template<> AI /*static*/ Sk4u SkNx_cast<uint32_t, uint8_t>(const Sk4b& src) {
600 template<> AI /*static*/ Sk4i SkNx_cast<int32_t, uint8_t>(const Sk4b& src) {
604 template<> AI /*static*/ Sk4f SkNx_cast<float, uint8_t>(const Sk4b& src) {
608 template<> AI /*static*/ Sk16b SkNx_cast<uint8_t, float>(const Sk16f& src) {
621 template<> AI /*static*/ Sk8b SkNx_cast<uint8_t, int32_t>(const Sk8i& src) {
630 template<> AI /*static*/ Sk4h SkNx_cast<uint16_t, uint8_t>(const Sk4b& src) {
634 template<> AI /*static*/ Sk8h SkNx_cast<uint16_t, uint8_t>(const Sk8b& src) {
638 template<> AI /*static*/ Sk4b SkNx_cast<uint8_t, uint16_t>(const Sk4h& src) {
642 template<> AI /*static*/ Sk8b SkNx_cast<uint8_t, uint16_t>(const Sk8h& src) {
646 template<> AI /*static*/ Sk4b SkNx_cast<uint8_t, int32_t>(const Sk4i& src) {
651 template<> AI /*static*/ Sk4b SkNx_cast<uint8_t, uint32_t>(const Sk4u& src) {
656 template<> AI /*static*/ Sk4i SkNx_cast<int32_t, uint16_t>(const Sk4h& src) {
660 template<> AI /*static*/ Sk4h SkNx_cast<uint16_t, int32_t>(const Sk4i& src) {
664 template<> AI /*static*/ Sk4i SkNx_cast<int32_t, uint32_t>(const Sk4u& src) {
668 AI static Sk4i Sk4f_round(const Sk4f& x) {