Merge pull request #7373 from tomoaki0705:featureCannyUniversalIntrinsic
This commit is contained in:
@@ -549,6 +549,13 @@ inline v_float32x4 v_invsqrt(const v_float32x4& x)
|
||||
}
|
||||
#endif
|
||||
|
||||
#define OPENCV_HAL_IMPL_NEON_ABS(_Tpuvec, _Tpsvec, usuffix, ssuffix) \
|
||||
inline _Tpuvec v_abs(const _Tpsvec& a) { return v_reinterpret_as_##usuffix(_Tpsvec(vabsq_##ssuffix(a.val))); }
|
||||
|
||||
OPENCV_HAL_IMPL_NEON_ABS(v_uint8x16, v_int8x16, u8, s8)
|
||||
OPENCV_HAL_IMPL_NEON_ABS(v_uint16x8, v_int16x8, u16, s16)
|
||||
OPENCV_HAL_IMPL_NEON_ABS(v_uint32x4, v_int32x4, u32, s32)
|
||||
|
||||
inline v_float32x4 v_abs(v_float32x4 x)
|
||||
{ return v_float32x4(vabsq_f32(x.val)); }
|
||||
|
||||
|
||||
@@ -739,6 +739,18 @@ inline v_float64x2 v_invsqrt(const v_float64x2& x)
|
||||
return v_float64x2(_mm_div_pd(v_1, _mm_sqrt_pd(x.val)));
|
||||
}
|
||||
|
||||
#define OPENCV_HAL_IMPL_SSE_ABS_INT_FUNC(_Tpuvec, _Tpsvec, func, suffix, subWidth) \
|
||||
inline _Tpuvec v_abs(const _Tpsvec& x) \
|
||||
{ return _Tpuvec(_mm_##func##_ep##suffix(x.val, _mm_sub_ep##subWidth(_mm_setzero_si128(), x.val))); }
|
||||
|
||||
OPENCV_HAL_IMPL_SSE_ABS_INT_FUNC(v_uint8x16, v_int8x16, min, u8, i8)
|
||||
OPENCV_HAL_IMPL_SSE_ABS_INT_FUNC(v_uint16x8, v_int16x8, max, i16, i16)
|
||||
inline v_uint32x4 v_abs(const v_int32x4& x)
|
||||
{
|
||||
__m128i s = _mm_srli_epi32(x.val, 31);
|
||||
__m128i f = _mm_srai_epi32(x.val, 31);
|
||||
return v_uint32x4(_mm_add_epi32(_mm_xor_si128(x.val, f), s));
|
||||
}
|
||||
inline v_float32x4 v_abs(const v_float32x4& x)
|
||||
{ return v_float32x4(_mm_and_ps(x.val, _mm_castsi128_ps(_mm_set1_epi32(0x7fffffff)))); }
|
||||
inline v_float64x2 v_abs(const v_float64x2& x)
|
||||
|
||||
Reference in New Issue
Block a user