diff --git a/src/opts/SkBitmapProcState_opts_SSSE3.cpp b/src/opts/SkBitmapProcState_opts_SSSE3.cpp index 07b3171c6a..17d7da931a 100644 --- a/src/opts/SkBitmapProcState_opts_SSSE3.cpp +++ b/src/opts/SkBitmapProcState_opts_SSSE3.cpp @@ -10,6 +10,14 @@ #include "SkPaint.h" #include "SkUtils.h" +/* With the exception of the compilers that don't support it, we always build the + * SSSE3 functions and enable the caller to determine SSSE3 support. However for + * compilers that do not support SSSE3 we provide a stub implementation. + */ +#if SK_CPU_SSE_LEVEL >= SK_CPU_SSE_LEVEL_SSSE3 + +#include // SSSE3 + // adding anonymous namespace seemed to force gcc to inline directly the // instantiation, instead of creating the functions // S32_generic_D32_filter_DX_SSSE3 and @@ -723,3 +731,31 @@ void S32_alpha_D32_filter_DXDY_SSSE3(const SkBitmapProcState& s, int count, uint32_t* colors) { S32_generic_D32_filter_DXDY_SSSE3(s, xy, count, colors); } + +#else // SK_CPU_SSE_LEVEL >= SK_CPU_SSE_LEVEL_SSSE3 + +void S32_opaque_D32_filter_DX_SSSE3(const SkBitmapProcState& s, + const uint32_t* xy, + int count, uint32_t* colors) { + sk_throw(); +} + +void S32_alpha_D32_filter_DX_SSSE3(const SkBitmapProcState& s, + const uint32_t* xy, + int count, uint32_t* colors) { + sk_throw(); +} + +void S32_opaque_D32_filter_DXDY_SSSE3(const SkBitmapProcState& s, + const uint32_t* xy, + int count, uint32_t* colors) { + sk_throw(); +} + +void S32_alpha_D32_filter_DXDY_SSSE3(const SkBitmapProcState& s, + const uint32_t* xy, + int count, uint32_t* colors) { + sk_throw(); +} + +#endif diff --git a/src/opts/SkBlitRow_opts_SSE4.cpp b/src/opts/SkBlitRow_opts_SSE4.cpp index 7afb1e78e8..e5d880904e 100644 --- a/src/opts/SkBlitRow_opts_SSE4.cpp +++ b/src/opts/SkBlitRow_opts_SSE4.cpp @@ -6,6 +6,17 @@ */ #include "SkBlitRow_opts_SSE4.h" + +// Some compilers can't compile SSSE3 or SSE4 intrinsics. We give them stub methods. +// The stubs should never be called, so we make them crash just to confirm that. +#if SK_CPU_SSE_LEVEL < SK_CPU_SSE_LEVEL_SSE41 +void S32A_Opaque_BlitRow32_SSE4(SkPMColor* SK_RESTRICT, const SkPMColor* SK_RESTRICT, int, U8CPU) { + sk_throw(); +} + +#else + +#include // SSE4.1 intrinsics #include "SkColorPriv.h" #include "SkColor_opts_SSE2.h" #include "SkMSAN.h" @@ -59,3 +70,5 @@ void S32A_Opaque_BlitRow32_SSE4(SkPMColor* SK_RESTRICT dst, } } } + +#endif