mirror of
https://github.com/opencv/opencv.git
synced 2026-07-29 15:23:05 +04:00
checks
This commit is contained in:
+76
-13
@@ -64,7 +64,7 @@ FUNCTOR_TEMPLATE(VLoadStore128);
|
||||
#if CV_SSE2
|
||||
FUNCTOR_TEMPLATE(VLoadStore64);
|
||||
FUNCTOR_TEMPLATE(VLoadStore128Aligned);
|
||||
#if CV_AVX
|
||||
#if CV_AVX2
|
||||
FUNCTOR_TEMPLATE(VLoadStore256);
|
||||
FUNCTOR_TEMPLATE(VLoadStore256Aligned);
|
||||
#endif
|
||||
@@ -2626,10 +2626,16 @@ struct Div_SIMD
|
||||
template <>
|
||||
struct Div_SIMD<uchar>
|
||||
{
|
||||
bool haveSIMD;
|
||||
Div_SIMD() { haveSIMD = checkHardwareSupport(CV_CPU_SSE4_1); }
|
||||
|
||||
int operator() (const uchar * src1, const uchar * src2, uchar * dst, int width, double scale) const
|
||||
{
|
||||
int x = 0;
|
||||
|
||||
if (!haveSIMD)
|
||||
return x;
|
||||
|
||||
__m128d v_scale = _mm_set1_pd(scale);
|
||||
__m128i v_zero = _mm_setzero_si128();
|
||||
|
||||
@@ -2672,10 +2678,16 @@ struct Div_SIMD<uchar>
|
||||
template <>
|
||||
struct Div_SIMD<schar>
|
||||
{
|
||||
bool haveSIMD;
|
||||
Div_SIMD() { haveSIMD = checkHardwareSupport(CV_CPU_SSE2); }
|
||||
|
||||
int operator() (const schar * src1, const schar * src2, schar * dst, int width, double scale) const
|
||||
{
|
||||
int x = 0;
|
||||
|
||||
if (!haveSIMD)
|
||||
return x;
|
||||
|
||||
__m128d v_scale = _mm_set1_pd(scale);
|
||||
__m128i v_zero = _mm_setzero_si128();
|
||||
|
||||
@@ -2718,10 +2730,16 @@ struct Div_SIMD<schar>
|
||||
template <>
|
||||
struct Div_SIMD<ushort>
|
||||
{
|
||||
bool haveSIMD;
|
||||
Div_SIMD() { haveSIMD = checkHardwareSupport(CV_CPU_SSE4_1); }
|
||||
|
||||
int operator() (const ushort * src1, const ushort * src2, ushort * dst, int width, double scale) const
|
||||
{
|
||||
int x = 0;
|
||||
|
||||
if (!haveSIMD)
|
||||
return x;
|
||||
|
||||
__m128d v_scale = _mm_set1_pd(scale);
|
||||
__m128i v_zero = _mm_setzero_si128();
|
||||
|
||||
@@ -2763,10 +2781,16 @@ struct Div_SIMD<ushort>
|
||||
template <>
|
||||
struct Div_SIMD<short>
|
||||
{
|
||||
bool haveSIMD;
|
||||
Div_SIMD() { haveSIMD = checkHardwareSupport(CV_CPU_SSE2); }
|
||||
|
||||
int operator() (const short * src1, const short * src2, short * dst, int width, double scale) const
|
||||
{
|
||||
int x = 0;
|
||||
|
||||
if (!haveSIMD)
|
||||
return x;
|
||||
|
||||
__m128d v_scale = _mm_set1_pd(scale);
|
||||
__m128i v_zero = _mm_setzero_si128();
|
||||
|
||||
@@ -2806,10 +2830,16 @@ struct Div_SIMD<short>
|
||||
template <>
|
||||
struct Div_SIMD<int>
|
||||
{
|
||||
bool haveSIMD;
|
||||
Div_SIMD() { haveSIMD = checkHardwareSupport(CV_CPU_SSE2); }
|
||||
|
||||
int operator() (const int * src1, const int * src2, int * dst, int width, double scale) const
|
||||
{
|
||||
int x = 0;
|
||||
|
||||
if (!haveSIMD)
|
||||
return x;
|
||||
|
||||
__m128d v_scale = _mm_set1_pd(scale);
|
||||
__m128i v_zero = _mm_setzero_si128();
|
||||
|
||||
@@ -2902,10 +2932,16 @@ struct Recip_SIMD
|
||||
template <>
|
||||
struct Recip_SIMD<uchar>
|
||||
{
|
||||
bool haveSIMD;
|
||||
Recip_SIMD() { haveSIMD = checkHardwareSupport(CV_CPU_SSE4_1); }
|
||||
|
||||
int operator() (const uchar * src2, uchar * dst, int width, double scale) const
|
||||
{
|
||||
int x = 0;
|
||||
|
||||
if (!haveSIMD)
|
||||
return x;
|
||||
|
||||
__m128d v_scale = _mm_set1_pd(scale);
|
||||
__m128i v_zero = _mm_setzero_si128();
|
||||
|
||||
@@ -2941,10 +2977,16 @@ struct Recip_SIMD<uchar>
|
||||
template <>
|
||||
struct Recip_SIMD<schar>
|
||||
{
|
||||
bool haveSIMD;
|
||||
Recip_SIMD() { haveSIMD = checkHardwareSupport(CV_CPU_SSE2); }
|
||||
|
||||
int operator() (const schar * src2, schar * dst, int width, double scale) const
|
||||
{
|
||||
int x = 0;
|
||||
|
||||
if (!haveSIMD)
|
||||
return x;
|
||||
|
||||
__m128d v_scale = _mm_set1_pd(scale);
|
||||
__m128i v_zero = _mm_setzero_si128();
|
||||
|
||||
@@ -2980,10 +3022,16 @@ struct Recip_SIMD<schar>
|
||||
template <>
|
||||
struct Recip_SIMD<ushort>
|
||||
{
|
||||
bool haveSIMD;
|
||||
Recip_SIMD() { haveSIMD = checkHardwareSupport(CV_CPU_SSE4_1); }
|
||||
|
||||
int operator() (const ushort * src2, ushort * dst, int width, double scale) const
|
||||
{
|
||||
int x = 0;
|
||||
|
||||
if (!haveSIMD)
|
||||
return x;
|
||||
|
||||
__m128d v_scale = _mm_set1_pd(scale);
|
||||
__m128i v_zero = _mm_setzero_si128();
|
||||
|
||||
@@ -3018,10 +3066,16 @@ struct Recip_SIMD<ushort>
|
||||
template <>
|
||||
struct Recip_SIMD<short>
|
||||
{
|
||||
bool haveSIMD;
|
||||
Recip_SIMD() { haveSIMD = checkHardwareSupport(CV_CPU_SSE2); }
|
||||
|
||||
int operator() (const short * src2, short * dst, int width, double scale) const
|
||||
{
|
||||
int x = 0;
|
||||
|
||||
if (!haveSIMD)
|
||||
return x;
|
||||
|
||||
__m128d v_scale = _mm_set1_pd(scale);
|
||||
__m128i v_zero = _mm_setzero_si128();
|
||||
|
||||
@@ -3054,10 +3108,16 @@ struct Recip_SIMD<short>
|
||||
template <>
|
||||
struct Recip_SIMD<int>
|
||||
{
|
||||
bool haveSIMD;
|
||||
Recip_SIMD() { haveSIMD = checkHardwareSupport(CV_CPU_SSE2); }
|
||||
|
||||
int operator() (const int * src2, int * dst, int width, double scale) const
|
||||
{
|
||||
int x = 0;
|
||||
|
||||
if (!haveSIMD)
|
||||
return x;
|
||||
|
||||
__m128d v_scale = _mm_set1_pd(scale);
|
||||
__m128i v_zero = _mm_setzero_si128();
|
||||
|
||||
@@ -4126,7 +4186,8 @@ static void cmp8u(const uchar* src1, size_t step1, const uchar* src2, size_t ste
|
||||
{
|
||||
int x =0;
|
||||
#if CV_SSE2
|
||||
if( USE_SSE2 ){
|
||||
if( USE_SSE2 )
|
||||
{
|
||||
__m128i m128 = code == CMP_GT ? _mm_setzero_si128() : _mm_set1_epi8 (-1);
|
||||
__m128i c128 = _mm_set1_epi8 (-128);
|
||||
for( ; x <= size.width - 16; x += 16 )
|
||||
@@ -4142,7 +4203,7 @@ static void cmp8u(const uchar* src1, size_t step1, const uchar* src2, size_t ste
|
||||
|
||||
}
|
||||
}
|
||||
#elif CV_NEON
|
||||
#elif CV_NEON
|
||||
uint8x16_t mask = code == CMP_GT ? vdupq_n_u8(0) : vdupq_n_u8(255);
|
||||
|
||||
for( ; x <= size.width - 16; x += 16 )
|
||||
@@ -4164,7 +4225,8 @@ static void cmp8u(const uchar* src1, size_t step1, const uchar* src2, size_t ste
|
||||
{
|
||||
int x = 0;
|
||||
#if CV_SSE2
|
||||
if( USE_SSE2 ){
|
||||
if( USE_SSE2 )
|
||||
{
|
||||
__m128i m128 = code == CMP_EQ ? _mm_setzero_si128() : _mm_set1_epi8 (-1);
|
||||
for( ; x <= size.width - 16; x += 16 )
|
||||
{
|
||||
@@ -4174,7 +4236,7 @@ static void cmp8u(const uchar* src1, size_t step1, const uchar* src2, size_t ste
|
||||
_mm_storeu_si128((__m128i*)(dst + x), r00);
|
||||
}
|
||||
}
|
||||
#elif CV_NEON
|
||||
#elif CV_NEON
|
||||
uint8x16_t mask = code == CMP_EQ ? vdupq_n_u8(0) : vdupq_n_u8(255);
|
||||
|
||||
for( ; x <= size.width - 16; x += 16 )
|
||||
@@ -4254,7 +4316,8 @@ static void cmp16s(const short* src1, size_t step1, const short* src2, size_t st
|
||||
{
|
||||
int x =0;
|
||||
#if CV_SSE2
|
||||
if( USE_SSE2){//
|
||||
if( USE_SSE2)
|
||||
{
|
||||
__m128i m128 = code == CMP_GT ? _mm_setzero_si128() : _mm_set1_epi16 (-1);
|
||||
for( ; x <= size.width - 16; x += 16 )
|
||||
{
|
||||
@@ -4278,7 +4341,7 @@ static void cmp16s(const short* src1, size_t step1, const short* src2, size_t st
|
||||
x += 8;
|
||||
}
|
||||
}
|
||||
#elif CV_NEON
|
||||
#elif CV_NEON
|
||||
uint8x16_t mask = code == CMP_GT ? vdupq_n_u8(0) : vdupq_n_u8(255);
|
||||
|
||||
for( ; x <= size.width - 16; x += 16 )
|
||||
@@ -4293,8 +4356,7 @@ static void cmp16s(const short* src1, size_t step1, const short* src2, size_t st
|
||||
|
||||
vst1q_u8(dst+x, veorq_u8(vcombine_u8(t1, t2), mask));
|
||||
}
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
||||
for( ; x < size.width; x++ ){
|
||||
dst[x] = (uchar)(-(src1[x] > src2[x]) ^ m);
|
||||
@@ -4308,7 +4370,8 @@ static void cmp16s(const short* src1, size_t step1, const short* src2, size_t st
|
||||
{
|
||||
int x = 0;
|
||||
#if CV_SSE2
|
||||
if( USE_SSE2 ){
|
||||
if( USE_SSE2 )
|
||||
{
|
||||
__m128i m128 = code == CMP_EQ ? _mm_setzero_si128() : _mm_set1_epi16 (-1);
|
||||
for( ; x <= size.width - 16; x += 16 )
|
||||
{
|
||||
@@ -4332,7 +4395,7 @@ static void cmp16s(const short* src1, size_t step1, const short* src2, size_t st
|
||||
x += 8;
|
||||
}
|
||||
}
|
||||
#elif CV_NEON
|
||||
#elif CV_NEON
|
||||
uint8x16_t mask = code == CMP_EQ ? vdupq_n_u8(0) : vdupq_n_u8(255);
|
||||
|
||||
for( ; x <= size.width - 16; x += 16 )
|
||||
@@ -4347,8 +4410,8 @@ static void cmp16s(const short* src1, size_t step1, const short* src2, size_t st
|
||||
|
||||
vst1q_u8(dst+x, veorq_u8(vcombine_u8(t1, t2), mask));
|
||||
}
|
||||
#endif
|
||||
for( ; x < size.width; x++ )
|
||||
#endif
|
||||
for( ; x < size.width; x++ )
|
||||
dst[x] = (uchar)(-(src1[x] == src2[x]) ^ m);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user