From 8a8a8e9dd5c47f3fc930064bd030790f98af27af Mon Sep 17 00:00:00 2001 From: Chris Dalton Date: Fri, 23 Mar 2018 12:33:47 -0600 Subject: Implement Sk2f::Store2 Bug: skia: Change-Id: Ieedd05ced376a7604936e9d2729fc20a8669496e Reviewed-on: https://skia-review.googlesource.com/115531 Commit-Queue: Chris Dalton Reviewed-by: Mike Klein --- src/opts/SkNx_neon.h | 8 ++++++++ src/opts/SkNx_sse.h | 5 +++++ 2 files changed, 13 insertions(+) (limited to 'src') diff --git a/src/opts/SkNx_neon.h b/src/opts/SkNx_neon.h index f8170ef962..554fc8228a 100644 --- a/src/opts/SkNx_neon.h +++ b/src/opts/SkNx_neon.h @@ -34,6 +34,14 @@ public: AI static SkNx Load(const void* ptr) { return vld1_f32((const float*)ptr); } AI void store(void* ptr) const { vst1_f32((float*)ptr, fVec); } + AI static void Store2(void* dst, const SkNx& a, const SkNx& b) { + float32x2x2_t ab = {{ + a.fVec, + b.fVec, + }}; + vst2_f32((float*) dst, ab); + } + AI static void Store3(void* dst, const SkNx& a, const SkNx& b, const SkNx& c) { float32x2x3_t abc = {{ a.fVec, diff --git a/src/opts/SkNx_sse.h b/src/opts/SkNx_sse.h index b4ae0cbe2b..bd5c58e261 100644 --- a/src/opts/SkNx_sse.h +++ b/src/opts/SkNx_sse.h @@ -29,6 +29,11 @@ public: AI void store(void* ptr) const { _mm_storel_pi((__m64*)ptr, fVec); } + AI static void Store2(void* dst, const SkNx& a, const SkNx& b) { + auto vals = _mm_unpacklo_ps(a.fVec, b.fVec); + _mm_storeu_ps((float*)dst, vals); + } + AI static void Store3(void* dst, const SkNx& a, const SkNx& b, const SkNx& c) { auto lo = _mm_setr_ps(a[0], b[0], c[0], a[1]), hi = _mm_setr_ps(b[1], c[1], 0, 0); -- cgit v1.2.3