diff options
Diffstat (limited to 'external/skia/fix-sse.patch.1')
-rw-r--r-- | external/skia/fix-sse.patch.1 | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/external/skia/fix-sse.patch.1 b/external/skia/fix-sse.patch.1 new file mode 100644 index 000000000..8a731725e --- /dev/null +++ b/external/skia/fix-sse.patch.1 @@ -0,0 +1,23 @@ +--- 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<N,uint8_t> approx_scale(const Vec<N,uint8_t>& x, const Vec<N,u + static inline Vec<4,float> rcp(const Vec<4,float>& x) { + return bit_pun<Vec<4,float>>(_mm_rcp_ps(bit_pun<__m128>(x))); + } +- static inline Vec<4,int> lrint(const Vec<4,float>& x) { +- return bit_pun<Vec<4,int>>(_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))); |