Index: src/opts/SkNx_neon.h |
diff --git a/src/opts/SkNx_neon.h b/src/opts/SkNx_neon.h |
index 1acd7a00f40ffc6df9591dc5b923157d4c64e3a8..52b2e73798e7eebb69144fb75288eba151553a23 100644 |
--- a/src/opts/SkNx_neon.h |
+++ b/src/opts/SkNx_neon.h |
@@ -305,12 +305,20 @@ public: |
SkNx(const uint8x8_t& vec) : fVec(vec) {} |
SkNx() {} |
+ SkNx(uint8_t a, uint8_t b, uint8_t c, uint8_t d) { |
+ fVec = (uint8x8_t){a,b,c,d, 0,0,0,0}; |
+ } |
static SkNx Load(const void* ptr) { |
return (uint8x8_t)vld1_dup_u32((const uint32_t*)ptr); |
} |
void store(void* ptr) const { |
return vst1_lane_u32((uint32_t*)ptr, (uint32x2_t)fVec, 0); |
} |
+ uint8_t operator[](int k) const { |
+ SkASSERT(0 <= k && k < 4); |
+ union { uint8x8_t v; uint8_t us[8]; } pun = {fVec}; |
+ return pun.us[k&3]; |
+ } |
// TODO as needed |