| Index: src/opts/SkNx_neon.h
|
| diff --git a/src/opts/SkNx_neon.h b/src/opts/SkNx_neon.h
|
| index 8adb276064dd6180fe39cc49764c76161d4ddd17..a4b7cd1a731045380619052d9e5b945f3779fdd1 100644
|
| --- a/src/opts/SkNx_neon.h
|
| +++ b/src/opts/SkNx_neon.h
|
| @@ -41,10 +41,10 @@ public:
|
|
|
| SkNx() {}
|
| SkNx(float val) : fVec(vdup_n_f32(val)) {}
|
| - static SkNx Load(const float vals[2]) { return vld1_f32(vals); }
|
| + static SkNx Load(const void* ptr) { return vld1_f32((const float*)ptr); }
|
| SkNx(float a, float b) { fVec = (float32x2_t) { a, b }; }
|
|
|
| - void store(float vals[2]) const { vst1_f32(vals, fVec); }
|
| + void store(void* ptr) const { vst1_f32((float*)ptr, fVec); }
|
|
|
| SkNx approxInvert() const {
|
| float32x2_t est0 = vrecpe_f32(fVec),
|
| @@ -122,10 +122,10 @@ public:
|
|
|
| SkNx() {}
|
| SkNx(int val) : fVec(vdupq_n_s32(val)) {}
|
| - static SkNx Load(const int vals[4]) { return vld1q_s32(vals); }
|
| + static SkNx Load(const void* ptr) { return vld1q_s32((const int*)ptr); }
|
| SkNx(int a, int b, int c, int d) { fVec = (int32x4_t) { a, b, c, d }; }
|
|
|
| - void store(int vals[4]) const { vst1q_s32(vals, fVec); }
|
| + void store(void* ptr) const { vst1q_s32((int*)ptr, fVec); }
|
|
|
| SkNx operator + (const SkNx& o) const { return vaddq_s32(fVec, o.fVec); }
|
| SkNx operator - (const SkNx& o) const { return vsubq_s32(fVec, o.fVec); }
|
| @@ -149,10 +149,10 @@ public:
|
|
|
| SkNx() {}
|
| SkNx(float val) : fVec(vdupq_n_f32(val)) {}
|
| - static SkNx Load(const float vals[4]) { return vld1q_f32(vals); }
|
| + static SkNx Load(const void* ptr) { return vld1q_f32((const float*)ptr); }
|
| SkNx(float a, float b, float c, float d) { fVec = (float32x4_t) { a, b, c, d }; }
|
|
|
| - void store(float vals[4]) const { vst1q_f32(vals, fVec); }
|
| + void store(void* ptr) const { vst1q_f32((float*)ptr, fVec); }
|
| SkNx approxInvert() const {
|
| float32x4_t est0 = vrecpeq_f32(fVec),
|
| est1 = vmulq_f32(vrecpsq_f32(est0, fVec), est0);
|
| @@ -240,13 +240,13 @@ public:
|
|
|
| SkNx() {}
|
| SkNx(uint16_t val) : fVec(vdup_n_u16(val)) {}
|
| - static SkNx Load(const uint16_t vals[4]) { return vld1_u16(vals); }
|
| + static SkNx Load(const void* ptr) { return vld1_u16((const uint16_t*)ptr); }
|
|
|
| SkNx(uint16_t a, uint16_t b, uint16_t c, uint16_t d) {
|
| fVec = (uint16x4_t) { a,b,c,d };
|
| }
|
|
|
| - void store(uint16_t vals[4]) const { vst1_u16(vals, fVec); }
|
| + void store(void* ptr) const { vst1_u16((uint16_t*)ptr, fVec); }
|
|
|
| SkNx operator + (const SkNx& o) const { return vadd_u16(fVec, o.fVec); }
|
| SkNx operator - (const SkNx& o) const { return vsub_u16(fVec, o.fVec); }
|
| @@ -276,14 +276,14 @@ public:
|
|
|
| SkNx() {}
|
| SkNx(uint16_t val) : fVec(vdupq_n_u16(val)) {}
|
| - static SkNx Load(const uint16_t vals[8]) { return vld1q_u16(vals); }
|
| + static SkNx Load(const void* ptr) { return vld1q_u16((const uint16_t*)ptr); }
|
|
|
| SkNx(uint16_t a, uint16_t b, uint16_t c, uint16_t d,
|
| uint16_t e, uint16_t f, uint16_t g, uint16_t h) {
|
| fVec = (uint16x8_t) { a,b,c,d, e,f,g,h };
|
| }
|
|
|
| - void store(uint16_t vals[8]) const { vst1q_u16(vals, fVec); }
|
| + void store(void* ptr) const { vst1q_u16((uint16_t*)ptr, fVec); }
|
|
|
| SkNx operator + (const SkNx& o) const { return vaddq_u16(fVec, o.fVec); }
|
| SkNx operator - (const SkNx& o) const { return vsubq_u16(fVec, o.fVec); }
|
| @@ -312,11 +312,11 @@ public:
|
| SkNx(const uint8x8_t& vec) : fVec(vec) {}
|
|
|
| SkNx() {}
|
| - static SkNx Load(const uint8_t vals[4]) {
|
| - return (uint8x8_t)vld1_dup_u32((const uint32_t*)vals);
|
| + static SkNx Load(const void* ptr) {
|
| + return (uint8x8_t)vld1_dup_u32((const uint32_t*)ptr);
|
| }
|
| - void store(uint8_t vals[4]) const {
|
| - return vst1_lane_u32((uint32_t*)vals, (uint32x2_t)fVec, 0);
|
| + void store(void* ptr) const {
|
| + return vst1_lane_u32((uint32_t*)ptr, (uint32x2_t)fVec, 0);
|
| }
|
|
|
| // TODO as needed
|
| @@ -331,7 +331,7 @@ public:
|
|
|
| SkNx() {}
|
| SkNx(uint8_t val) : fVec(vdupq_n_u8(val)) {}
|
| - static SkNx Load(const uint8_t vals[16]) { return vld1q_u8(vals); }
|
| + static SkNx Load(const void* ptr) { return vld1q_u8((const uint8_t*)ptr); }
|
|
|
| SkNx(uint8_t a, uint8_t b, uint8_t c, uint8_t d,
|
| uint8_t e, uint8_t f, uint8_t g, uint8_t h,
|
| @@ -340,7 +340,7 @@ public:
|
| fVec = (uint8x16_t) { a,b,c,d, e,f,g,h, i,j,k,l, m,n,o,p };
|
| }
|
|
|
| - void store(uint8_t vals[16]) const { vst1q_u8(vals, fVec); }
|
| + void store(void* ptr) const { vst1q_u8((uint8_t*)ptr, fVec); }
|
|
|
| SkNx saturatedAdd(const SkNx& o) const { return vqaddq_u8(fVec, o.fVec); }
|
|
|
|
|