aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/SkNx.h
diff options
context:
space:
mode:
authorGravatar mtklein <mtklein@chromium.org>2016-01-31 08:02:47 -0800
committerGravatar Commit bot <commit-bot@chromium.org>2016-01-31 08:02:47 -0800
commit507ef6d68115ae9e6d884bb36436a1463523d893 (patch)
tree67a2aabdf43f8dab134b2f08240d511dd1113af1 /src/core/SkNx.h
parentb1c32b7bde01e74ea59a9c0182c47cef862ef1c5 (diff)
SkNx Load/store: take any pointer.
This means we can remove a lot of explicit casts in code that uses SkNx. BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1650653002 CQ_EXTRA_TRYBOTS=client.skia:Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-SKNX_NO_SIMD-Trybot Review URL: https://codereview.chromium.org/1650653002
Diffstat (limited to 'src/core/SkNx.h')
-rw-r--r--src/core/SkNx.h16
1 files changed, 12 insertions, 4 deletions
diff --git a/src/core/SkNx.h b/src/core/SkNx.h
index 2bbd495ce5..4cb15dffe7 100644
--- a/src/core/SkNx.h
+++ b/src/core/SkNx.h
@@ -32,7 +32,8 @@ public:
SkNx() {}
SkNx(const SkNx<N/2, T>& lo, const SkNx<N/2, T>& hi) : fLo(lo), fHi(hi) {}
SkNx(T val) : fLo(val), fHi(val) {}
- static SkNx Load(const T vals[N]) {
+ static SkNx Load(const void* ptr) {
+ auto vals = (const T*)ptr;
return SkNx(SkNx<N/2,T>::Load(vals), SkNx<N/2,T>::Load(vals+N/2));
}
@@ -43,7 +44,8 @@ public:
T i, T j, T k, T l, T m, T n, T o, T p)
: fLo(a,b,c,d, e,f,g,h), fHi(i,j,k,l, m,n,o,p) { REQUIRE(N==16); }
- void store(T vals[N]) const {
+ void store(void* ptr) const {
+ auto vals = (T*)ptr;
fLo.store(vals);
fHi.store(vals+N/2);
}
@@ -108,9 +110,15 @@ class SkNx<1,T> {
public:
SkNx() {}
SkNx(T val) : fVal(val) {}
- static SkNx Load(const T vals[1]) { return SkNx(vals[0]); }
+ static SkNx Load(const void* ptr) {
+ auto vals = (const T*)ptr;
+ return SkNx(vals[0]);
+ }
- void store(T vals[1]) const { vals[0] = fVal; }
+ void store(void* ptr) const {
+ auto vals = (T*) ptr;
+ vals[0] = fVal;
+ }
SkNx saturatedAdd(const SkNx& o) const {
SkASSERT((T)(~0) > 0); // TODO: support signed T