| Index: src/opts/opts_check_x86.cpp
 | 
| diff --git a/src/opts/opts_check_SSE2.cpp b/src/opts/opts_check_x86.cpp
 | 
| similarity index 92%
 | 
| rename from src/opts/opts_check_SSE2.cpp
 | 
| rename to src/opts/opts_check_x86.cpp
 | 
| index 6c684c27bdcfc447443b6b9b557b1334ff349e40..0b0debb2708a80bd00cdc8e68b377917935f508b 100644
 | 
| --- a/src/opts/opts_check_SSE2.cpp
 | 
| +++ b/src/opts/opts_check_x86.cpp
 | 
| @@ -5,23 +5,22 @@
 | 
|   * found in the LICENSE file.
 | 
|   */
 | 
|  
 | 
| +#include "SkBitmapFilter_opts_SSE2.h"
 | 
|  #include "SkBitmapProcState_opts_SSE2.h"
 | 
|  #include "SkBitmapProcState_opts_SSSE3.h"
 | 
| -#include "SkBitmapFilter_opts_SSE2.h"
 | 
|  #include "SkBlitMask.h"
 | 
| -#include "SkBlitRow.h"
 | 
|  #include "SkBlitRect_opts_SSE2.h"
 | 
| +#include "SkBlitRow.h"
 | 
|  #include "SkBlitRow_opts_SSE2.h"
 | 
|  #include "SkBlurImage_opts_SSE2.h"
 | 
| -#include "SkUtils_opts_SSE2.h"
 | 
| -#include "SkUtils.h"
 | 
|  #include "SkMorphology_opts.h"
 | 
|  #include "SkMorphology_opts_SSE2.h"
 | 
| +#include "SkRTConf.h"
 | 
| +#include "SkUtils.h"
 | 
| +#include "SkUtils_opts_SSE2.h"
 | 
|  #include "SkXfermode.h"
 | 
|  #include "SkXfermode_proccoeff.h"
 | 
|  
 | 
| -#include "SkRTConf.h"
 | 
| -
 | 
|  #if defined(_MSC_VER) && defined(_WIN64)
 | 
|  #include <intrin.h>
 | 
|  #endif
 | 
| @@ -32,6 +31,7 @@
 | 
|     in this directory should be compiled with -msse2. */
 | 
|  
 | 
|  
 | 
| +/* Function to get the CPU SSE-level in runtime, for different compilers. */
 | 
|  #ifdef _MSC_VER
 | 
|  static inline void getcpuid(int info_type, int info[4]) {
 | 
|  #if defined(_WIN64)
 | 
| @@ -72,6 +72,8 @@ static inline void getcpuid(int info_type, int info[4]) {
 | 
|  #endif
 | 
|  #endif
 | 
|  
 | 
| +////////////////////////////////////////////////////////////////////////////////
 | 
| +
 | 
|  #if defined(__x86_64__) || defined(_WIN64) || SK_CPU_SSE_LEVEL >= SK_CPU_SSE_LEVEL_SSE2
 | 
|  /* All x86_64 machines have SSE2, or we know it's supported at compile time,  so don't even bother checking. */
 | 
|  static inline bool hasSSE2() {
 | 
| @@ -120,6 +122,8 @@ static bool cachedHasSSSE3() {
 | 
|      return gHasSSSE3;
 | 
|  }
 | 
|  
 | 
| +////////////////////////////////////////////////////////////////////////////////
 | 
| +
 | 
|  SK_CONF_DECLARE( bool, c_hqfilter_sse, "bitmap.filter.highQualitySSE", false, "Use SSE optimized version of high quality image filters");
 | 
|  
 | 
|  void SkBitmapProcState::platformConvolutionProcs(SkConvolutionProcs* procs) {
 | 
| @@ -132,6 +136,8 @@ void SkBitmapProcState::platformConvolutionProcs(SkConvolutionProcs* procs) {
 | 
|      }
 | 
|  }
 | 
|  
 | 
| +////////////////////////////////////////////////////////////////////////////////
 | 
| +
 | 
|  void SkBitmapProcState::platformProcs() {
 | 
|      /* Every optimization in the function requires at least SSE2 */
 | 
|      if (!cachedHasSSE2()) {
 | 
| @@ -185,6 +191,8 @@ void SkBitmapProcState::platformProcs() {
 | 
|      }
 | 
|  }
 | 
|  
 | 
| +////////////////////////////////////////////////////////////////////////////////
 | 
| +
 | 
|  static SkBlitRow::Proc platform_16_procs[] = {
 | 
|      S32_D565_Opaque_SSE2,               // S32_D565_Opaque
 | 
|      NULL,                               // S32_D565_Blend
 | 
| @@ -196,6 +204,14 @@ static SkBlitRow::Proc platform_16_procs[] = {
 | 
|      NULL,                               // S32A_D565_Blend_Dither
 | 
|  };
 | 
|  
 | 
| +SkBlitRow::Proc SkBlitRow::PlatformProcs565(unsigned flags) {
 | 
| +    if (cachedHasSSE2()) {
 | 
| +        return platform_16_procs[flags];
 | 
| +    } else {
 | 
| +        return NULL;
 | 
| +    }
 | 
| +}
 | 
| +
 | 
|  static SkBlitRow::Proc32 platform_32_procs[] = {
 | 
|      NULL,                               // S32_Opaque,
 | 
|      S32_Blend_BlitRow32_SSE2,           // S32_Blend,
 | 
| @@ -203,9 +219,9 @@ static SkBlitRow::Proc32 platform_32_procs[] = {
 | 
|      S32A_Blend_BlitRow32_SSE2,          // S32A_Blend,
 | 
|  };
 | 
|  
 | 
| -SkBlitRow::Proc SkBlitRow::PlatformProcs565(unsigned flags) {
 | 
| +SkBlitRow::Proc32 SkBlitRow::PlatformProcs32(unsigned flags) {
 | 
|      if (cachedHasSSE2()) {
 | 
| -        return platform_16_procs[flags];
 | 
| +        return platform_32_procs[flags];
 | 
|      } else {
 | 
|          return NULL;
 | 
|      }
 | 
| @@ -219,14 +235,20 @@ SkBlitRow::ColorProc SkBlitRow::PlatformColorProc() {
 | 
|      }
 | 
|  }
 | 
|  
 | 
| -SkBlitRow::Proc32 SkBlitRow::PlatformProcs32(unsigned flags) {
 | 
| +SkBlitRow::ColorRectProc PlatformColorRectProcFactory(); // suppress warning
 | 
| +
 | 
| +SkBlitRow::ColorRectProc PlatformColorRectProcFactory() {
 | 
| +/* Return NULL for now, since the optimized path in ColorRect32_SSE2 is disabled.
 | 
|      if (cachedHasSSE2()) {
 | 
| -        return platform_32_procs[flags];
 | 
| +        return ColorRect32_SSE2;
 | 
|      } else {
 | 
|          return NULL;
 | 
|      }
 | 
| +*/
 | 
| +    return NULL;
 | 
|  }
 | 
|  
 | 
| +////////////////////////////////////////////////////////////////////////////////
 | 
|  
 | 
|  SkBlitMask::ColorProc SkBlitMask::PlatformColorProcs(SkBitmap::Config dstConfig,
 | 
|                                                       SkMask::Format maskFormat,
 | 
| @@ -264,12 +286,15 @@ SkBlitMask::BlitLCD16RowProc SkBlitMask::PlatformBlitRowProcs16(bool isOpaque) {
 | 
|      }
 | 
|  
 | 
|  }
 | 
| +
 | 
|  SkBlitMask::RowProc SkBlitMask::PlatformRowProcs(SkBitmap::Config dstConfig,
 | 
|                                                   SkMask::Format maskFormat,
 | 
|                                                   RowFlags flags) {
 | 
|      return NULL;
 | 
|  }
 | 
|  
 | 
| +////////////////////////////////////////////////////////////////////////////////
 | 
| +
 | 
|  SkMemset16Proc SkMemset16GetPlatformProc() {
 | 
|      if (cachedHasSSE2()) {
 | 
|          return sk_memset16_SSE2;
 | 
| @@ -286,6 +311,8 @@ SkMemset32Proc SkMemset32GetPlatformProc() {
 | 
|      }
 | 
|  }
 | 
|  
 | 
| +////////////////////////////////////////////////////////////////////////////////
 | 
| +
 | 
|  SkMorphologyImageFilter::Proc SkMorphologyGetPlatformProc(SkMorphologyProcType type) {
 | 
|      if (!cachedHasSSE2()) {
 | 
|          return NULL;
 | 
| @@ -304,6 +331,8 @@ SkMorphologyImageFilter::Proc SkMorphologyGetPlatformProc(SkMorphologyProcType t
 | 
|      }
 | 
|  }
 | 
|  
 | 
| +////////////////////////////////////////////////////////////////////////////////
 | 
| +
 | 
|  bool SkBoxBlurGetPlatformProcs(SkBoxBlurProc* boxBlurX,
 | 
|                                 SkBoxBlurProc* boxBlurY,
 | 
|                                 SkBoxBlurProc* boxBlurXY,
 | 
| @@ -318,15 +347,7 @@ bool SkBoxBlurGetPlatformProcs(SkBoxBlurProc* boxBlurX,
 | 
|  #endif
 | 
|  }
 | 
|  
 | 
| -SkBlitRow::ColorRectProc PlatformColorRectProcFactory(); // suppress warning
 | 
| -
 | 
| -SkBlitRow::ColorRectProc PlatformColorRectProcFactory() {
 | 
| -    if (cachedHasSSE2()) {
 | 
| -        return ColorRect32_SSE2;
 | 
| -    } else {
 | 
| -        return NULL;
 | 
| -    }
 | 
| -}
 | 
| +////////////////////////////////////////////////////////////////////////////////
 | 
|  
 | 
|  extern SkProcCoeffXfermode* SkPlatformXfermodeFactory_impl_SSE2(const ProcCoeff& rec,
 | 
|                                                                  SkXfermode::Mode mode);
 | 
| 
 |