--- a/src/opts/SkRasterPipeline_opts.h +++ b/src/opts/SkRasterPipeline_opts.h @@ -1047,7 +1047,7 @@ static const size_t N = sizeof(F) / sizeof(float); // TODO: crashes during compilation :( #define ABI __attribute__((sysv_abi)) #define JUMPER_NARROW_STAGES 0 -#elif defined(_MSC_VER) +#elif defined(_MSC_VER) && SK_CPU_SSE_LEVEL >= SK_CPU_SSE_LEVEL_SSE2 // Even if not vectorized, this lets us pass {r,g,b,a} as registers, // instead of {b,a} on the stack. Narrow stages work best for __vectorcall. #define ABI __vectorcall --- a/include/private/SkVx.h +++ b/include/private/SkVx.h @@ -515,9 +515,6 @@ static inline Vec approx_scale(const Vec& x, const Vec rcp(const Vec<4,float>& x) { return bit_pun>(_mm_rcp_ps(bit_pun<__m128>(x))); } - static inline Vec<4,int> lrint(const Vec<4,float>& x) { - return bit_pun>(_mm_cvtps_epi32(bit_pun<__m128>(x))); - } static inline Vec<2,float> sqrt(const Vec<2,float>& x) { return shuffle<0,1>( sqrt(shuffle<0,1,0,1>(x)));