Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(740)

Side by Side Diff: src/core/SkNx.h

Issue 1105233003: Revert of Split rsqrt into rsqrt{0,1,2}, with increasing cost and precision on ARM (Closed) Base URL: https://skia.googlesource.com/skia@master
Patch Set: Created 5 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | src/effects/gradients/SkRadialGradient.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
112 Nb operator >= (const SkNf& o) const { return Nb(fLo >= o.fLo, fHi >= o.fHi) ; } 112 Nb operator >= (const SkNf& o) const { return Nb(fLo >= o.fLo, fHi >= o.fHi) ; }
113 113
114 static SkNf Min(const SkNf& l, const SkNf& r) { 114 static SkNf Min(const SkNf& l, const SkNf& r) {
115 return SkNf(SkNf<N/2,T>::Min(l.fLo, r.fLo), SkNf<N/2,T>::Min(l.fHi, r.fH i)); 115 return SkNf(SkNf<N/2,T>::Min(l.fLo, r.fLo), SkNf<N/2,T>::Min(l.fHi, r.fH i));
116 } 116 }
117 static SkNf Max(const SkNf& l, const SkNf& r) { 117 static SkNf Max(const SkNf& l, const SkNf& r) {
118 return SkNf(SkNf<N/2,T>::Max(l.fLo, r.fLo), SkNf<N/2,T>::Max(l.fHi, r.fH i)); 118 return SkNf(SkNf<N/2,T>::Max(l.fLo, r.fLo), SkNf<N/2,T>::Max(l.fHi, r.fH i));
119 } 119 }
120 120
121 SkNf sqrt() const { return SkNf(fLo. sqrt(), fHi. sqrt()); } 121 SkNf sqrt() const { return SkNf(fLo. sqrt(), fHi. sqrt()); }
122 122 SkNf rsqrt() const { return SkNf(fLo.rsqrt(), fHi.rsqrt()); }
123 // Generally, increasing precision, increasing cost.
124 SkNf rsqrt0() const { return SkNf(fLo.rsqrt0(), fHi.rsqrt0()); }
125 SkNf rsqrt1() const { return SkNf(fLo.rsqrt1(), fHi.rsqrt1()); }
126 SkNf rsqrt2() const { return SkNf(fLo.rsqrt2(), fHi.rsqrt2()); }
127 123
128 SkNf invert() const { return SkNf(fLo. invert(), fHi. invert ()); } 124 SkNf invert() const { return SkNf(fLo. invert(), fHi. invert ()); }
129 SkNf approxInvert() const { return SkNf(fLo.approxInvert(), fHi.approxInvert ()); } 125 SkNf approxInvert() const { return SkNf(fLo.approxInvert(), fHi.approxInvert ()); }
130 126
131 template <int k> T kth() const { 127 template <int k> T kth() const {
132 SkASSERT(0 <= k && k < N); 128 SkASSERT(0 <= k && k < N);
133 return k < N/2 ? fLo.template kth<k>() : fHi.template kth<k-N/2>(); 129 return k < N/2 ? fLo.template kth<k>() : fHi.template kth<k-N/2>();
134 } 130 }
135 131
136 private: 132 private:
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
204 Nb operator != (const SkNf& o) const { return Nb(fVal != o.fVal); } 200 Nb operator != (const SkNf& o) const { return Nb(fVal != o.fVal); }
205 Nb operator < (const SkNf& o) const { return Nb(fVal < o.fVal); } 201 Nb operator < (const SkNf& o) const { return Nb(fVal < o.fVal); }
206 Nb operator > (const SkNf& o) const { return Nb(fVal > o.fVal); } 202 Nb operator > (const SkNf& o) const { return Nb(fVal > o.fVal); }
207 Nb operator <= (const SkNf& o) const { return Nb(fVal <= o.fVal); } 203 Nb operator <= (const SkNf& o) const { return Nb(fVal <= o.fVal); }
208 Nb operator >= (const SkNf& o) const { return Nb(fVal >= o.fVal); } 204 Nb operator >= (const SkNf& o) const { return Nb(fVal >= o.fVal); }
209 205
210 static SkNf Min(const SkNf& l, const SkNf& r) { return SkNf(SkTMin(l.fVal, r .fVal)); } 206 static SkNf Min(const SkNf& l, const SkNf& r) { return SkNf(SkTMin(l.fVal, r .fVal)); }
211 static SkNf Max(const SkNf& l, const SkNf& r) { return SkNf(SkTMax(l.fVal, r .fVal)); } 207 static SkNf Max(const SkNf& l, const SkNf& r) { return SkNf(SkTMax(l.fVal, r .fVal)); }
212 208
213 SkNf sqrt() const { return SkNf(Sqrt(fVal)); } 209 SkNf sqrt() const { return SkNf(Sqrt(fVal)); }
214 SkNf rsqrt0() const { return SkNf((T)1 / Sqrt(fVal)); } 210 SkNf rsqrt() const { return SkNf((T)1 / Sqrt(fVal)); }
215 SkNf rsqrt1() const { return this->rsqrt0(); }
216 SkNf rsqrt2() const { return this->rsqrt1(); }
217 211
218 SkNf invert() const { return SkNf((T)1 / fVal); } 212 SkNf invert() const { return SkNf((T)1 / fVal); }
219 SkNf approxInvert() const { return this->invert(); } 213 SkNf approxInvert() const { return this->invert(); }
220 214
221 template <int k> T kth() const { 215 template <int k> T kth() const {
222 SkASSERT(k == 0); 216 SkASSERT(k == 0);
223 return fVal; 217 return fVal;
224 } 218 }
225 219
226 private: 220 private:
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
262 typedef SkNf<4, float> Sk4f; 256 typedef SkNf<4, float> Sk4f;
263 typedef SkNf<4, double> Sk4d; 257 typedef SkNf<4, double> Sk4d;
264 typedef SkNf<4, SkScalar> Sk4s; 258 typedef SkNf<4, SkScalar> Sk4s;
265 259
266 typedef SkNi<4, uint16_t> Sk4h; 260 typedef SkNi<4, uint16_t> Sk4h;
267 typedef SkNi<8, uint16_t> Sk8h; 261 typedef SkNi<8, uint16_t> Sk8h;
268 262
269 typedef SkNi<4, int> Sk4i; 263 typedef SkNi<4, int> Sk4i;
270 264
271 #endif//SkNx_DEFINED 265 #endif//SkNx_DEFINED
OLDNEW
« no previous file with comments | « no previous file | src/effects/gradients/SkRadialGradient.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698