aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/opts/SkColor_opts_SSE2.h
diff options
context:
space:
mode:
authorGravatar commit-bot@chromium.org <commit-bot@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81>2014-02-19 03:09:52 +0000
committerGravatar commit-bot@chromium.org <commit-bot@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81>2014-02-19 03:09:52 +0000
commit475910750cdc7d14da3071d4052ba9ab98383be9 (patch)
tree3cf3f26d35a3a6375275a784a3ef0b2ed6f30a0d /src/opts/SkColor_opts_SSE2.h
parentb45c56e4b7e3d51c808b0d8694e13ea3b403ec6f (diff)
SSE2 implementation of S32A_D565_Opaque
microbenchmark of S32A_D565_Opaque() shows a 3x speedup after SSE optimization with various count on i7-3770. BUG= R=mtklein@google.com, reed@google.com Author: qiankun.miao@intel.com Review URL: https://codereview.chromium.org/138163013 git-svn-id: http://skia.googlecode.com/svn/trunk@13495 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'src/opts/SkColor_opts_SSE2.h')
-rw-r--r--src/opts/SkColor_opts_SSE2.h31
1 files changed, 31 insertions, 0 deletions
diff --git a/src/opts/SkColor_opts_SSE2.h b/src/opts/SkColor_opts_SSE2.h
new file mode 100644
index 0000000000..13a5be5655
--- /dev/null
+++ b/src/opts/SkColor_opts_SSE2.h
@@ -0,0 +1,31 @@
+/*
+ * Copyright 2014 The Android Open Source Project
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#ifndef SkColor_opts_SSE2_DEFINED
+#define SkColor_opts_SSE2_DEFINED
+
+#include <emmintrin.h>
+
+static inline __m128i SkMul16ShiftRound_SSE(__m128i a, __m128i b, int shift) {
+ __m128i prod = _mm_mullo_epi16(a, b);
+ prod = _mm_add_epi16(prod, _mm_set1_epi16(1 << (shift - 1)));
+ prod = _mm_add_epi16(prod, _mm_srli_epi16(prod, shift));
+ prod = _mm_srli_epi16(prod, shift);
+
+ return prod;
+}
+
+static inline __m128i SkPackRGB16_SSE(__m128i r, __m128i g, __m128i b) {
+ r = _mm_slli_epi16(r, SK_R16_SHIFT);
+ g = _mm_slli_epi16(g, SK_G16_SHIFT);
+ b = _mm_slli_epi16(b, SK_B16_SHIFT);
+
+ __m128i c = _mm_or_si128(r, g);
+ return _mm_or_si128(c, b);
+}
+
+#endif//SkColor_opts_SSE2_DEFINED