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_sse_DEFINED | 8 #ifndef SkNx_sse_DEFINED |
9 #define SkNx_sse_DEFINED | 9 #define SkNx_sse_DEFINED |
10 | 10 |
11 // This file may assume <= SSE2, but must check SK_CPU_SSE_LEVEL for anything mo
re recent. | 11 // This file may assume <= SSE2, but must check SK_CPU_SSE_LEVEL for anything mo
re recent. |
12 #include <immintrin.h> | 12 |
| 13 namespace { // See SkNx.h |
13 | 14 |
14 template <> | 15 template <> |
15 class SkNb<2, 4> { | 16 class SkNb<2, 4> { |
16 public: | 17 public: |
17 SkNb(const __m128i& vec) : fVec(vec) {} | 18 SkNb(const __m128i& vec) : fVec(vec) {} |
18 | 19 |
19 SkNb() {} | 20 SkNb() {} |
20 bool allTrue() const { return 0xff == (_mm_movemask_epi8(fVec) & 0xff); } | 21 bool allTrue() const { return 0xff == (_mm_movemask_epi8(fVec) & 0xff); } |
21 bool anyTrue() const { return 0x00 != (_mm_movemask_epi8(fVec) & 0xff); } | 22 bool anyTrue() const { return 0x00 != (_mm_movemask_epi8(fVec) & 0xff); } |
22 | 23 |
(...skipping 297 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
320 template <int k> uint8_t kth() const { | 321 template <int k> uint8_t kth() const { |
321 SkASSERT(0 <= k && k < 16); | 322 SkASSERT(0 <= k && k < 16); |
322 // SSE4.1 would just `return _mm_extract_epi8(fVec, k)`. We have to rea
d 16-bits instead. | 323 // SSE4.1 would just `return _mm_extract_epi8(fVec, k)`. We have to rea
d 16-bits instead. |
323 int pair = _mm_extract_epi16(fVec, k/2); | 324 int pair = _mm_extract_epi16(fVec, k/2); |
324 return k % 2 == 0 ? pair : (pair >> 8); | 325 return k % 2 == 0 ? pair : (pair >> 8); |
325 } | 326 } |
326 | 327 |
327 __m128i fVec; | 328 __m128i fVec; |
328 }; | 329 }; |
329 | 330 |
| 331 } // namespace |
| 332 |
330 #endif//SkNx_sse_DEFINED | 333 #endif//SkNx_sse_DEFINED |
OLD | NEW |