aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/opts/SkNx_sse.h
diff options
context:
space:
mode:
authorGravatar mtklein <mtklein@chromium.org>2015-11-09 08:33:53 -0800
committerGravatar Commit bot <commit-bot@chromium.org>2015-11-09 08:33:53 -0800
commit6f797092d2054f79374fb98fc1d57ca3554c7db4 (patch)
treee5e1ec524c11736085ef5c5080de3e10d57ec38e /src/opts/SkNx_sse.h
parenta4c26c0d3a1ffdd0bab08b1aec24bea025a0d9e2 (diff)
prune unused SkNx features
- remove float -> int conversion, keeping float -> byte - remove support for doubles I was thinking of specializing Sk8f for AVX. This will help keep the complexity down. This may cause minor diffs in radial gradients: toBytes() rounds where castTrunc() truncated. But I don't see any diffs in Gold. https://gold.skia.org/search2?issue=1411563008&unt=true&query=source_type%3Dgm&master=false BUG=skia:4117 CQ_EXTRA_TRYBOTS=client.skia:Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-SKNX_NO_SIMD-Trybot Review URL: https://codereview.chromium.org/1411563008
Diffstat (limited to 'src/opts/SkNx_sse.h')
-rw-r--r--src/opts/SkNx_sse.h53
1 files changed, 2 insertions, 51 deletions
diff --git a/src/opts/SkNx_sse.h b/src/opts/SkNx_sse.h
index a99531b770..6e9c59c5cb 100644
--- a/src/opts/SkNx_sse.h
+++ b/src/opts/SkNx_sse.h
@@ -14,7 +14,7 @@ namespace { // See SkNx.h
template <>
-class SkNf<2, float> {
+class SkNf<2> {
public:
SkNf(const __m128& vec) : fVec(vec) {}
@@ -63,53 +63,6 @@ public:
};
template <>
-class SkNf<2, double> {
-public:
- SkNf(const __m128d& vec) : fVec(vec) {}
-
- SkNf() {}
- explicit SkNf(double val) : fVec( _mm_set1_pd(val) ) {}
- static SkNf Load(const double vals[2]) { return _mm_loadu_pd(vals); }
- SkNf(double a, double b) : fVec(_mm_setr_pd(a,b)) {}
-
- void store(double vals[2]) const { _mm_storeu_pd(vals, fVec); }
-
- SkNf operator + (const SkNf& o) const { return _mm_add_pd(fVec, o.fVec); }
- SkNf operator - (const SkNf& o) const { return _mm_sub_pd(fVec, o.fVec); }
- SkNf operator * (const SkNf& o) const { return _mm_mul_pd(fVec, o.fVec); }
- SkNf operator / (const SkNf& o) const { return _mm_div_pd(fVec, o.fVec); }
-
- SkNf operator == (const SkNf& o) const { return _mm_cmpeq_pd (fVec, o.fVec); }
- SkNf operator != (const SkNf& o) const { return _mm_cmpneq_pd(fVec, o.fVec); }
- SkNf operator < (const SkNf& o) const { return _mm_cmplt_pd (fVec, o.fVec); }
- SkNf operator > (const SkNf& o) const { return _mm_cmpgt_pd (fVec, o.fVec); }
- SkNf operator <= (const SkNf& o) const { return _mm_cmple_pd (fVec, o.fVec); }
- SkNf operator >= (const SkNf& o) const { return _mm_cmpge_pd (fVec, o.fVec); }
-
- static SkNf Min(const SkNf& l, const SkNf& r) { return _mm_min_pd(l.fVec, r.fVec); }
- static SkNf Max(const SkNf& l, const SkNf& r) { return _mm_max_pd(l.fVec, r.fVec); }
-
- SkNf sqrt() const { return _mm_sqrt_pd(fVec); }
- SkNf rsqrt0() const { return _mm_cvtps_pd(_mm_rsqrt_ps(_mm_cvtpd_ps(fVec))); }
- SkNf rsqrt1() const { return this->rsqrt0(); }
- SkNf rsqrt2() const { return this->rsqrt1(); }
-
- SkNf invert() const { return SkNf(1) / *this; }
- SkNf approxInvert() const { return _mm_cvtps_pd(_mm_rcp_ps(_mm_cvtpd_ps(fVec))); }
-
- template <int k> double kth() const {
- SkASSERT(0 <= k && k < 2);
- union { __m128d v; double ds[2]; } pun = {fVec};
- return pun.ds[k&1];
- }
-
- bool allTrue() const { return 0xffff == _mm_movemask_epi8(_mm_castpd_si128(fVec)); }
- bool anyTrue() const { return 0x0000 != _mm_movemask_epi8(_mm_castpd_si128(fVec)); }
-
- __m128d fVec;
-};
-
-template <>
class SkNi<4, int> {
public:
SkNi(const __m128i& vec) : fVec(vec) {}
@@ -148,7 +101,7 @@ public:
};
template <>
-class SkNf<4, float> {
+class SkNf<4> {
public:
SkNf(const __m128& vec) : fVec(vec) {}
@@ -179,8 +132,6 @@ public:
*(int*)bytes = _mm_cvtsi128_si32(fix8);
}
- SkNi<4, int> castTrunc() const { return _mm_cvttps_epi32(fVec); }
-
SkNf operator + (const SkNf& o) const { return _mm_add_ps(fVec, o.fVec); }
SkNf operator - (const SkNf& o) const { return _mm_sub_ps(fVec, o.fVec); }
SkNf operator * (const SkNf& o) const { return _mm_mul_ps(fVec, o.fVec); }