| 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;
|
| }
|
|
|