OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2015 Google Inc. | 2 * Copyright 2015 Google Inc. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
6 */ | 6 */ |
7 | 7 |
8 #ifndef SkNx_neon_DEFINED | 8 #ifndef SkNx_neon_DEFINED |
9 #define SkNx_neon_DEFINED | 9 #define SkNx_neon_DEFINED |
10 | 10 |
(...skipping 319 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
330 SkNi operator << (int bits) const { SHIFT16(vshlq_n_u16, fVec, bits); } | 330 SkNi operator << (int bits) const { SHIFT16(vshlq_n_u16, fVec, bits); } |
331 SkNi operator >> (int bits) const { SHIFT16(vshrq_n_u16, fVec, bits); } | 331 SkNi operator >> (int bits) const { SHIFT16(vshrq_n_u16, fVec, bits); } |
332 | 332 |
333 static SkNi Min(const SkNi& a, const SkNi& b) { return vminq_u16(a.fVec, b.f
Vec); } | 333 static SkNi Min(const SkNi& a, const SkNi& b) { return vminq_u16(a.fVec, b.f
Vec); } |
334 | 334 |
335 template <int k> uint16_t kth() const { | 335 template <int k> uint16_t kth() const { |
336 SkASSERT(0 <= k && k < 8); | 336 SkASSERT(0 <= k && k < 8); |
337 return vgetq_lane_u16(fVec, k&7); | 337 return vgetq_lane_u16(fVec, k&7); |
338 } | 338 } |
339 | 339 |
| 340 SkNi thenElse(const SkNi& t, const SkNi& e) const { |
| 341 return vorrq_u16(vandq_u16(t.fVec, fVec), |
| 342 vbicq_u16(e.fVec, fVec)); |
| 343 } |
| 344 |
340 uint16x8_t fVec; | 345 uint16x8_t fVec; |
341 }; | 346 }; |
342 | 347 |
343 template <> | 348 template <> |
344 class SkNi<16, uint8_t> { | 349 class SkNi<16, uint8_t> { |
345 public: | 350 public: |
346 SkNi(const uint8x16_t& vec) : fVec(vec) {} | 351 SkNi(const uint8x16_t& vec) : fVec(vec) {} |
347 | 352 |
348 SkNi() {} | 353 SkNi() {} |
349 explicit SkNi(uint8_t val) : fVec(vdupq_n_u8(val)) {} | 354 explicit SkNi(uint8_t val) : fVec(vdupq_n_u8(val)) {} |
(...skipping 29 matching lines...) Expand all Loading... |
379 uint8x16_t fVec; | 384 uint8x16_t fVec; |
380 }; | 385 }; |
381 | 386 |
382 #undef SHIFT32 | 387 #undef SHIFT32 |
383 #undef SHIFT16 | 388 #undef SHIFT16 |
384 #undef SHIFT8 | 389 #undef SHIFT8 |
385 | 390 |
386 } // namespace | 391 } // namespace |
387 | 392 |
388 #endif//SkNx_neon_DEFINED | 393 #endif//SkNx_neon_DEFINED |
OLD | NEW |