Index: src/opts/opts_check_x86.cpp |
diff --git a/src/opts/opts_check_x86.cpp b/src/opts/opts_check_x86.cpp |
index e3b6b470786f9825f04857bcf9b535f1a194a052..272d75944a915bb066844aa633a3cdb78f1a7d57 100644 |
--- a/src/opts/opts_check_x86.cpp |
+++ b/src/opts/opts_check_x86.cpp |
@@ -12,6 +12,7 @@ |
#include "SkBlitRect_opts_SSE2.h" |
#include "SkBlitRow.h" |
#include "SkBlitRow_opts_SSE2.h" |
+#include "SkBlitRow_opts_SSE4.h" |
#include "SkBlurImage_opts_SSE2.h" |
#include "SkMorphology_opts.h" |
#include "SkMorphology_opts_SSE2.h" |
@@ -206,16 +207,30 @@ SkBlitRow::Proc SkBlitRow::PlatformProcs565(unsigned flags) { |
} |
} |
-static SkBlitRow::Proc32 platform_32_procs[] = { |
+static SkBlitRow::Proc32 platform_32_procs_SSE2[] = { |
NULL, // S32_Opaque, |
S32_Blend_BlitRow32_SSE2, // S32_Blend, |
S32A_Opaque_BlitRow32_SSE2, // S32A_Opaque |
S32A_Blend_BlitRow32_SSE2, // S32A_Blend, |
}; |
+#if !defined(_MSC_VER) |
+static SkBlitRow::Proc32 platform_32_procs_SSE4[] = { |
+ NULL, // S32_Opaque, |
+ S32_Blend_BlitRow32_SSE2, // S32_Blend, |
+ S32A_Opaque_BlitRow32_SSE4_asm, // S32A_Opaque |
+ S32A_Blend_BlitRow32_SSE2, // S32A_Blend, |
+}; |
+#endif |
+ |
SkBlitRow::Proc32 SkBlitRow::PlatformProcs32(unsigned flags) { |
+#if !defined(_MSC_VER) |
+ if (supports_simd(SK_CPU_SSE_LEVEL_SSE42)) { |
+ return platform_32_procs_SSE4[flags]; |
+ } else |
+#endif |
if (supports_simd(SK_CPU_SSE_LEVEL_SSE2)) { |
- return platform_32_procs[flags]; |
+ return platform_32_procs_SSE2[flags]; |
} else { |
return NULL; |
} |