core(ipp): disable SSE4.2 meanStdDev() optimization for CV_32F

pull/12960/head
Alexander Alekhin 6 years ago
parent defeda2f70
commit 3e0c72ea84
  1. 15
      modules/core/src/mean.cpp

@ -674,10 +674,23 @@ static bool ipp_meanStdDev(Mat& src, OutputArray _mean, OutputArray _sdv, Mat& m
if (cn > 1) if (cn > 1)
return false; return false;
#endif #endif
#if IPP_VERSION_X100 < 201901 #if IPP_VERSION_X100 >= 201900 && IPP_VERSION_X100 < 201901
// IPP_DISABLE: 32f C3C functions can read outside of allocated memory // IPP_DISABLE: 32f C3C functions can read outside of allocated memory
if (cn > 1 && src.depth() == CV_32F) if (cn > 1 && src.depth() == CV_32F)
return false; return false;
// SSE4.2 buffer overrun
#if defined(_WIN32) && !defined(_WIN64)
// IPPICV doesn't have AVX2 in 32-bit builds
// However cv::ipp::getIppTopFeatures() may return AVX2 value on AVX2 capable H/W
// details #12959
#else
if (cv::ipp::getIppTopFeatures() == ippCPUID_SSE42) // Linux x64 + OPENCV_IPP=SSE42 is affected too
#endif
{
if (src.depth() == CV_32F && src.dims > 1 && src.size[src.dims - 1] == 6)
return false;
}
#endif #endif
size_t total_size = src.total(); size_t total_size = src.total();

Loading…
Cancel
Save