mirror of
https://github.com/opencv/opencv.git
synced 2026-07-31 08:13:04 +04:00
remove raw SSE2/NEON implementation from imgwarp.cpp
* use universal intrinsic instead of raw intrinsic * add 2 channels de-interleave on x86 platform * add v_int32x4 version of v_muladd * add accumulate version of v_dotprod based on the commit from seiko2plus on bf1852d * remove some verify check in performance test * avoid the out of boundary access and keep the performance
This commit is contained in:
@@ -521,15 +521,25 @@ template<typename R> struct TheTest
|
||||
TheTest & test_dot_prod()
|
||||
{
|
||||
typedef typename V_RegTrait128<LaneType>::w_reg Rx2;
|
||||
typedef typename Rx2::lane_type w_type;
|
||||
|
||||
Data<R> dataA, dataB(2);
|
||||
R a = dataA, b = dataB;
|
||||
|
||||
Data<Rx2> res = v_dotprod(a, b);
|
||||
Data<Rx2> dataC;
|
||||
dataC += std::numeric_limits<w_type>::is_signed ?
|
||||
std::numeric_limits<w_type>::min() :
|
||||
std::numeric_limits<w_type>::max() - R::nlanes * (dataB[0] + 1);
|
||||
Rx2 c = dataC;
|
||||
|
||||
Data<Rx2> resD = v_dotprod(a, b),
|
||||
resE = v_dotprod(a, b, c);
|
||||
|
||||
const int n = R::nlanes / 2;
|
||||
for (int i = 0; i < n; ++i)
|
||||
{
|
||||
EXPECT_EQ(dataA[i*2] * dataB[i*2] + dataA[i*2 + 1] * dataB[i*2 + 1], res[i]);
|
||||
EXPECT_EQ(dataA[i*2] * dataB[i*2] + dataA[i*2 + 1] * dataB[i*2 + 1], resD[i]);
|
||||
EXPECT_EQ(dataA[i*2] * dataB[i*2] + dataA[i*2 + 1] * dataB[i*2 + 1] + dataC[i], resE[i]);
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user