| 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_DEFINED | 8 #ifndef SkNx_DEFINED |
| 9 #define SkNx_DEFINED | 9 #define SkNx_DEFINED |
| 10 | 10 |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 50 SkNi(T a, T b, T c, T d, T e, T f, T g, T h) : fLo(a,b,c,d), fHi(e,f,g,h) {
REQUIRE(N==8); } | 50 SkNi(T a, T b, T c, T d, T e, T f, T g, T h) : fLo(a,b,c,d), fHi(e,f,g,h) {
REQUIRE(N==8); } |
| 51 SkNi(T a, T b, T c, T d, T e, T f, T g, T h, | 51 SkNi(T a, T b, T c, T d, T e, T f, T g, T h, |
| 52 T i, T j, T k, T l, T m, T n, T o, T p) | 52 T i, T j, T k, T l, T m, T n, T o, T p) |
| 53 : fLo(a,b,c,d, e,f,g,h), fHi(i,j,k,l, m,n,o,p) { REQUIRE(N==16); } | 53 : fLo(a,b,c,d, e,f,g,h), fHi(i,j,k,l, m,n,o,p) { REQUIRE(N==16); } |
| 54 | 54 |
| 55 void store(T vals[N]) const { | 55 void store(T vals[N]) const { |
| 56 fLo.store(vals); | 56 fLo.store(vals); |
| 57 fHi.store(vals+N/2); | 57 fHi.store(vals+N/2); |
| 58 } | 58 } |
| 59 | 59 |
| 60 SkNi saturatedAdd(const SkNi& o) const { |
| 61 return SkNi(fLo.saturatedAdd(o.fLo), fHi.saturatedAdd(o.fHi)); |
| 62 } |
| 63 |
| 60 SkNi operator + (const SkNi& o) const { return SkNi(fLo + o.fLo, fHi + o.fHi
); } | 64 SkNi operator + (const SkNi& o) const { return SkNi(fLo + o.fLo, fHi + o.fHi
); } |
| 61 SkNi operator - (const SkNi& o) const { return SkNi(fLo - o.fLo, fHi - o.fHi
); } | 65 SkNi operator - (const SkNi& o) const { return SkNi(fLo - o.fLo, fHi - o.fHi
); } |
| 62 SkNi operator * (const SkNi& o) const { return SkNi(fLo * o.fLo, fHi * o.fHi
); } | 66 SkNi operator * (const SkNi& o) const { return SkNi(fLo * o.fLo, fHi * o.fHi
); } |
| 63 | 67 |
| 64 SkNi operator << (int bits) const { return SkNi(fLo << bits, fHi << bits); } | 68 SkNi operator << (int bits) const { return SkNi(fLo << bits, fHi << bits); } |
| 65 SkNi operator >> (int bits) const { return SkNi(fLo >> bits, fHi >> bits); } | 69 SkNi operator >> (int bits) const { return SkNi(fLo >> bits, fHi >> bits); } |
| 66 | 70 |
| 67 // TODO: comparisons, min, max? | 71 // TODO: comparisons, min, max? |
| 68 | 72 |
| 69 template <int k> T kth() const { | 73 template <int k> T kth() const { |
| (...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 159 | 163 |
| 160 template <typename T> | 164 template <typename T> |
| 161 class SkNi<1,T> { | 165 class SkNi<1,T> { |
| 162 public: | 166 public: |
| 163 SkNi() {} | 167 SkNi() {} |
| 164 explicit SkNi(T val) : fVal(val) {} | 168 explicit SkNi(T val) : fVal(val) {} |
| 165 static SkNi Load(const T vals[1]) { return SkNi(vals[0]); } | 169 static SkNi Load(const T vals[1]) { return SkNi(vals[0]); } |
| 166 | 170 |
| 167 void store(T vals[1]) const { vals[0] = fVal; } | 171 void store(T vals[1]) const { vals[0] = fVal; } |
| 168 | 172 |
| 173 SkNi saturatedAdd(const SkNi& o) const { |
| 174 SkASSERT((T)(~0) > 0); // TODO: support signed T |
| 175 T sum = fVal + o.fVal; |
| 176 return SkNi(sum > fVal ? sum : (T)(~0)); |
| 177 } |
| 178 |
| 169 SkNi operator + (const SkNi& o) const { return SkNi(fVal + o.fVal); } | 179 SkNi operator + (const SkNi& o) const { return SkNi(fVal + o.fVal); } |
| 170 SkNi operator - (const SkNi& o) const { return SkNi(fVal - o.fVal); } | 180 SkNi operator - (const SkNi& o) const { return SkNi(fVal - o.fVal); } |
| 171 SkNi operator * (const SkNi& o) const { return SkNi(fVal * o.fVal); } | 181 SkNi operator * (const SkNi& o) const { return SkNi(fVal * o.fVal); } |
| 172 | 182 |
| 173 SkNi operator << (int bits) const { return SkNi(fVal << bits); } | 183 SkNi operator << (int bits) const { return SkNi(fVal << bits); } |
| 174 SkNi operator >> (int bits) const { return SkNi(fVal >> bits); } | 184 SkNi operator >> (int bits) const { return SkNi(fVal >> bits); } |
| 175 | 185 |
| 176 template <int k> T kth() const { | 186 template <int k> T kth() const { |
| 177 SkASSERT(0 == k); | 187 SkASSERT(0 == k); |
| 178 return fVal; | 188 return fVal; |
| (...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 269 typedef SkNi<4, uint16_t> Sk4h; | 279 typedef SkNi<4, uint16_t> Sk4h; |
| 270 typedef SkNi<8, uint16_t> Sk8h; | 280 typedef SkNi<8, uint16_t> Sk8h; |
| 271 typedef SkNi<16, uint16_t> Sk16h; | 281 typedef SkNi<16, uint16_t> Sk16h; |
| 272 | 282 |
| 273 typedef SkNi<16, uint8_t> Sk16b; | 283 typedef SkNi<16, uint8_t> Sk16b; |
| 274 | 284 |
| 275 typedef SkNi<4, int32_t> Sk4i; | 285 typedef SkNi<4, int32_t> Sk4i; |
| 276 typedef SkNi<4, uint32_t> Sk4u; | 286 typedef SkNi<4, uint32_t> Sk4u; |
| 277 | 287 |
| 278 #endif//SkNx_DEFINED | 288 #endif//SkNx_DEFINED |
| OLD | NEW |