diff options
author | 2015-07-27 11:08:28 -0700 | |
---|---|---|
committer | 2015-07-27 11:08:28 -0700 | |
commit | 58fd2c8af4fc4debbf3c9f3cf7783971982bd6dc (patch) | |
tree | e1bc172dafab6416e0de9a243ceaf4cd51257b5b /src | |
parent | ce2c5055cee5d5d3c9fc84c1b3eeed4b4d84a827 (diff) |
Remove sk_memcpy32
It's only implemented on x86, where the exisiting benchmark says memcpy() is
faster for all cases:
Timer overhead: 24ns
curr/maxrss loops min median mean max stddev samples config bench
10/10 MB 1 35.9µs 36.2µs 36.2µs 36.6µs 1% ▁▂▄▅▅▃█▄▄▅ nonrendering sk_memcpy32_100000
10/10 MB 13 2.27µs 2.28µs 2.28µs 2.29µs 0% █▄▃▅▃▁▃▅▁▄ nonrendering sk_memcpy32_10000
11/11 MB 677 91.6ns 95.9ns 94.5ns 99.4ns 3% ▅▅▅▅▅█▁▁▁▁ nonrendering sk_memcpy32_1000
11/11 MB 1171 20ns 20.9ns 21.3ns 23.4ns 6% ▁▁▇▃▃▃█▇▃▃ nonrendering sk_memcpy32_100
11/11 MB 1952 14ns 14ns 14.3ns 15.2ns 3% ▁▁██▁▁▁▁▁▁ nonrendering sk_memcpy32_10
11/11 MB 5 33.6µs 33.7µs 34.1µs 35.2µs 2% ▆▇█▁▁▁▁▁▁▁ nonrendering memcpy32_memcpy_100000
11/11 MB 18 2.12µs 2.22µs 2.24µs 2.39µs 5% ▂█▄▇█▄▇▁▁▁ nonrendering memcpy32_memcpy_10000
11/11 MB 1112 87.3ns 87.3ns 89.1ns 93.7ns 3% ▄██▄▁▁▁▁▁▁ nonrendering memcpy32_memcpy_1000
11/11 MB 2124 12.8ns 13.3ns 13.5ns 14.8ns 6% ▁▁▁█▃▃█▇▃▃ nonrendering memcpy32_memcpy_100
11/11 MB 3077 9ns 9.41ns 9.52ns 10.2ns 4% ▃█▁█▃▃▃▃▃▃ nonrendering memcpy32_memcpy_10
(Why? One fewer thing to port to SkOpts.)
BUG=skia:4117
Review URL: https://codereview.chromium.org/1256763003
Diffstat (limited to 'src')
-rw-r--r-- | src/codec/SkCodecPriv.h | 2 | ||||
-rw-r--r-- | src/core/SkBlitRow_D32.cpp | 2 | ||||
-rw-r--r-- | src/core/SkUtils.cpp | 14 | ||||
-rw-r--r-- | src/opts/SkUtils_opts_SSE2.cpp | 30 | ||||
-rw-r--r-- | src/opts/SkUtils_opts_SSE2.h | 1 | ||||
-rw-r--r-- | src/opts/SkUtils_opts_arm.cpp | 4 | ||||
-rw-r--r-- | src/opts/SkUtils_opts_none.cpp | 4 | ||||
-rw-r--r-- | src/opts/opts_check_x86.cpp | 8 |
8 files changed, 2 insertions, 63 deletions
diff --git a/src/codec/SkCodecPriv.h b/src/codec/SkCodecPriv.h index 98b2d3aae5..90b16323a7 100644 --- a/src/codec/SkCodecPriv.h +++ b/src/codec/SkCodecPriv.h @@ -41,7 +41,7 @@ static inline void copy_color_table(const SkImageInfo& dstInfo, SkColorTable* co SkASSERT(NULL != inputColorPtr); SkASSERT(NULL != inputColorCount); SkASSERT(NULL != colorTable); - sk_memcpy32(inputColorPtr, colorTable->readColors(), *inputColorCount); + memcpy(inputColorPtr, colorTable->readColors(), *inputColorCount * 4); } } diff --git a/src/core/SkBlitRow_D32.cpp b/src/core/SkBlitRow_D32.cpp index 57d0ead220..559ee18c5e 100644 --- a/src/core/SkBlitRow_D32.cpp +++ b/src/core/SkBlitRow_D32.cpp @@ -16,7 +16,7 @@ static void S32_Opaque_BlitRow32(SkPMColor* SK_RESTRICT dst, const SkPMColor* SK_RESTRICT src, int count, U8CPU alpha) { SkASSERT(255 == alpha); - sk_memcpy32(dst, src, count); + memcpy(dst, src, count * 4); } static void S32_Blend_BlitRow32(SkPMColor* SK_RESTRICT dst, diff --git a/src/core/SkUtils.cpp b/src/core/SkUtils.cpp index 33ea4db47c..afd523d369 100644 --- a/src/core/SkUtils.cpp +++ b/src/core/SkUtils.cpp @@ -109,10 +109,6 @@ static void sk_memset32_portable(uint32_t dst[], uint32_t value, int count) { } } -static void sk_memcpy32_portable(uint32_t dst[], const uint32_t src[], int count) { - memcpy(dst, src, count * sizeof(uint32_t)); -} - namespace { // These three methods technically need external linkage to be passed as template parameters. // Since they can't be static, we hide them in an anonymous namespace instead. @@ -127,11 +123,6 @@ SkMemset32Proc choose_memset32() { return proc ? proc : sk_memset32_portable; } -SkMemcpy32Proc choose_memcpy32() { - SkMemcpy32Proc proc = SkMemcpy32GetPlatformProc(); - return proc ? proc : sk_memcpy32_portable; -} - } // namespace void sk_memset16_large(uint16_t dst[], uint16_t value, int count) { @@ -144,11 +135,6 @@ void sk_memset32_large(uint32_t dst[], uint32_t value, int count) { proc.get()(dst, value, count); } -void sk_memcpy32(uint32_t dst[], const uint32_t src[], int count) { - SK_DECLARE_STATIC_LAZY_FN_PTR(SkMemcpy32Proc, proc, choose_memcpy32); - proc.get()(dst, src, count); -} - /////////////////////////////////////////////////////////////////////////////// /* 0xxxxxxx 1 total diff --git a/src/opts/SkUtils_opts_SSE2.cpp b/src/opts/SkUtils_opts_SSE2.cpp index bd2f9b29a4..a3c5aa5dfd 100644 --- a/src/opts/SkUtils_opts_SSE2.cpp +++ b/src/opts/SkUtils_opts_SSE2.cpp @@ -67,33 +67,3 @@ void sk_memset32_SSE2(uint32_t *dst, uint32_t value, int count) --count; } } - -void sk_memcpy32_SSE2(uint32_t *dst, const uint32_t *src, int count) -{ - if (count >= 16) { - while (((size_t)dst) & 0x0F) { - *dst++ = *src++; - --count; - } - __m128i *dst128 = reinterpret_cast<__m128i*>(dst); - const __m128i *src128 = reinterpret_cast<const __m128i*>(src); - while (count >= 16) { - __m128i a = _mm_loadu_si128(src128++); - __m128i b = _mm_loadu_si128(src128++); - __m128i c = _mm_loadu_si128(src128++); - __m128i d = _mm_loadu_si128(src128++); - - _mm_store_si128(dst128++, a); - _mm_store_si128(dst128++, b); - _mm_store_si128(dst128++, c); - _mm_store_si128(dst128++, d); - count -= 16; - } - dst = reinterpret_cast<uint32_t*>(dst128); - src = reinterpret_cast<const uint32_t*>(src128); - } - while (count > 0) { - *dst++ = *src++; - --count; - } -} diff --git a/src/opts/SkUtils_opts_SSE2.h b/src/opts/SkUtils_opts_SSE2.h index 009f01894b..5f0bc32954 100644 --- a/src/opts/SkUtils_opts_SSE2.h +++ b/src/opts/SkUtils_opts_SSE2.h @@ -12,6 +12,5 @@ void sk_memset16_SSE2(uint16_t *dst, uint16_t value, int count); void sk_memset32_SSE2(uint32_t *dst, uint32_t value, int count); -void sk_memcpy32_SSE2(uint32_t *dst, const uint32_t *src, int count); #endif diff --git a/src/opts/SkUtils_opts_arm.cpp b/src/opts/SkUtils_opts_arm.cpp index d74471f787..01fd035eee 100644 --- a/src/opts/SkUtils_opts_arm.cpp +++ b/src/opts/SkUtils_opts_arm.cpp @@ -30,7 +30,3 @@ SkMemset32Proc SkMemset32GetPlatformProc() { return nullptr; #endif } - -SkMemcpy32Proc SkMemcpy32GetPlatformProc() { - return NULL; -} diff --git a/src/opts/SkUtils_opts_none.cpp b/src/opts/SkUtils_opts_none.cpp index 18f52496db..286f10d7e5 100644 --- a/src/opts/SkUtils_opts_none.cpp +++ b/src/opts/SkUtils_opts_none.cpp @@ -16,7 +16,3 @@ SkMemset16Proc SkMemset16GetPlatformProc() { SkMemset32Proc SkMemset32GetPlatformProc() { return NULL; } - -SkMemcpy32Proc SkMemcpy32GetPlatformProc() { - return NULL; -} diff --git a/src/opts/opts_check_x86.cpp b/src/opts/opts_check_x86.cpp index 26490eb63d..8671c3abaa 100644 --- a/src/opts/opts_check_x86.cpp +++ b/src/opts/opts_check_x86.cpp @@ -317,14 +317,6 @@ SkMemset32Proc SkMemset32GetPlatformProc() { } } -SkMemcpy32Proc SkMemcpy32GetPlatformProc() { - if (supports_simd(SK_CPU_SSE_LEVEL_SSE2)) { - return sk_memcpy32_SSE2; - } else { - return NULL; - } -} - //////////////////////////////////////////////////////////////////////////////// SkMorphologyImageFilter::Proc SkMorphologyGetPlatformProc(SkMorphologyProcType type) { |