aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar mtklein <mtklein@chromium.org>2015-08-18 05:18:52 -0700
committerGravatar Commit bot <commit-bot@chromium.org>2015-08-18 05:18:53 -0700
commit948376379362e54c5357005778ba5f53f3dc9d5e (patch)
treec26651fb47b53dcb70f25a12d7ab2ba0f70ee5fa /src
parent95dd17737d0fa0401782f7fa72e5d69bb5686f67 (diff)
Remove SkOpts_sse2.cpp.
It's sort of pointless: all our clients that will have SSE2 at runtime have it unconditionally at compile time, so the functions in namespace portable will pick up the SSE2 code. The procs in SkOpts_sse2.o were just duplicate code. A couple of the procs we had in _sse2.cpp can benefit slightly when compiled with SSSE3. I've moved those to _ssse3.cpp. This should lead to small speedups on platforms like Linux and Windows that have a baseline of SSE2. Similarly, I've removed the call to Init_neon() when NEON is available globally... it's a no-op. Renaming namespace portable to something clearer is TBD. BUG=skia:4117 Review URL: https://codereview.chromium.org/1294213002
Diffstat (limited to 'src')
-rw-r--r--src/core/SkOpts.cpp6
-rw-r--r--src/opts/SkOpts_sse2.cpp34
-rw-r--r--src/opts/SkOpts_ssse3.cpp6
-rw-r--r--src/opts/SkPMFloat_sse.h2
4 files changed, 7 insertions, 41 deletions
diff --git a/src/core/SkOpts.cpp b/src/core/SkOpts.cpp
index 2bfc1af899..890d9c7532 100644
--- a/src/core/SkOpts.cpp
+++ b/src/core/SkOpts.cpp
@@ -54,7 +54,6 @@ namespace SkOpts {
decltype(blit_mask_d32_a8) blit_mask_d32_a8 = portable::blit_mask_d32_a8;
// Each Init_foo() is defined in src/opts/SkOpts_foo.cpp.
- void Init_sse2();
void Init_ssse3();
void Init_sse41();
void Init_neon();
@@ -65,12 +64,9 @@ namespace SkOpts {
#if defined(SK_CPU_X86) && !defined(SK_BUILD_FOR_IOS)
uint32_t abcd[] = {0,0,0,0};
cpuid(abcd);
- if (abcd[3] & (1<<26)) { Init_sse2(); }
if (abcd[2] & (1<< 9)) { Init_ssse3(); }
if (abcd[2] & (1<<19)) { Init_sse41(); }
- #elif defined(SK_ARM_HAS_NEON)
- Init_neon();
- #elif defined(SK_CPU_ARM32) && defined(SK_BUILD_FOR_ANDROID)
+ #elif !defined(SK_ARM_HAS_NEON) && defined(SK_CPU_ARM32) && defined(SK_BUILD_FOR_ANDROID)
if (android_getCpuFeatures() & ANDROID_CPU_ARM_FEATURE_NEON) { Init_neon(); }
#endif
}
diff --git a/src/opts/SkOpts_sse2.cpp b/src/opts/SkOpts_sse2.cpp
deleted file mode 100644
index 3440676935..0000000000
--- a/src/opts/SkOpts_sse2.cpp
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright 2015 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#include "SkOpts.h"
-
-#define SK_OPTS_NS sse2
-#include "SkBlitMask_opts.h"
-#include "SkBlurImageFilter_opts.h"
-#include "SkMorphologyImageFilter_opts.h"
-#include "SkUtils_opts.h"
-#include "SkXfermode_opts.h"
-
-namespace SkOpts {
- void Init_sse2() {
- memset16 = sse2::memset16;
- memset32 = sse2::memset32;
- create_xfermode = SkCreate4pxXfermode;
-
- box_blur_xx = sse2::box_blur_xx;
- box_blur_xy = sse2::box_blur_xy;
- box_blur_yx = sse2::box_blur_yx;
-
- dilate_x = sse2::dilate_x;
- dilate_y = sse2::dilate_y;
- erode_x = sse2::erode_x;
- erode_y = sse2::erode_y;
-
- blit_mask_d32_a8 = sse2::blit_mask_d32_a8;
- }
-}
diff --git a/src/opts/SkOpts_ssse3.cpp b/src/opts/SkOpts_ssse3.cpp
index de3296654f..7e056a0787 100644
--- a/src/opts/SkOpts_ssse3.cpp
+++ b/src/opts/SkOpts_ssse3.cpp
@@ -6,9 +6,13 @@
*/
#include "SkOpts.h"
+#define SK_OPTS_NS ssse3
+#include "SkBlitMask_opts.h"
+#include "SkXfermode_opts.h"
namespace SkOpts {
void Init_ssse3() {
-
+ create_xfermode = SkCreate4pxXfermode;
+ blit_mask_d32_a8 = ssse3::blit_mask_d32_a8;
}
}
diff --git a/src/opts/SkPMFloat_sse.h b/src/opts/SkPMFloat_sse.h
index 28aa90bf29..85503886a6 100644
--- a/src/opts/SkPMFloat_sse.h
+++ b/src/opts/SkPMFloat_sse.h
@@ -10,7 +10,7 @@ namespace { // See SkPMFloat.h
inline SkPMFloat::SkPMFloat(SkPMColor c) {
SkPMColorAssert(c);
#if SK_CPU_SSE_LEVEL >= SK_CPU_SSE_LEVEL_SSSE3
- const int _ = 255; // Zero these bytes.
+ const char _ = ~0; // Zero these bytes.
__m128i fix8 = _mm_cvtsi32_si128((int)c),
fix8_32 = _mm_shuffle_epi8(fix8, _mm_setr_epi8(0,_,_,_, 1,_,_,_, 2,_,_,_, 3,_,_,_));
#else