Commit 28db4a22 authored by Maksim Shabunin's avatar Maksim Shabunin

Merge pull request #7175 from tomoaki0705:featureIntrinsic64

parents 1ac1e5be 7fef96be
...@@ -1611,11 +1611,21 @@ inline v_float64x2 v_cvt_f64(const v_int32x4& a) ...@@ -1611,11 +1611,21 @@ inline v_float64x2 v_cvt_f64(const v_int32x4& a)
return v_float64x2(_mm_cvtepi32_pd(a.val)); return v_float64x2(_mm_cvtepi32_pd(a.val));
} }
inline v_float64x2 v_cvt_f64_high(const v_int32x4& a)
{
return v_float64x2(_mm_cvtepi32_pd(_mm_srli_si128(a.val,8)));
}
inline v_float64x2 v_cvt_f64(const v_float32x4& a) inline v_float64x2 v_cvt_f64(const v_float32x4& a)
{ {
return v_float64x2(_mm_cvtps_pd(a.val)); return v_float64x2(_mm_cvtps_pd(a.val));
} }
inline v_float64x2 v_cvt_f64_high(const v_float32x4& a)
{
return v_float64x2(_mm_cvtps_pd(_mm_castsi128_ps(_mm_srli_si128(_mm_castps_si128(a.val),8))));
}
//! @endcond //! @endcond
} }
......
...@@ -652,12 +652,18 @@ template<typename R> struct TheTest ...@@ -652,12 +652,18 @@ template<typename R> struct TheTest
dataA *= 1.1; dataA *= 1.1;
R a = dataA; R a = dataA;
Rt b = v_cvt_f64(a); Rt b = v_cvt_f64(a);
Rt c = v_cvt_f64_high(a);
Data<Rt> resB = b; Data<Rt> resB = b;
Data<Rt> resC = c;
int n = std::min<int>(Rt::nlanes, R::nlanes); int n = std::min<int>(Rt::nlanes, R::nlanes);
for (int i = 0; i < n; ++i) for (int i = 0; i < n; ++i)
{ {
EXPECT_EQ((typename Rt::lane_type)dataA[i], resB[i]); EXPECT_EQ((typename Rt::lane_type)dataA[i], resB[i]);
} }
for (int i = 0; i < n; ++i)
{
EXPECT_EQ((typename Rt::lane_type)dataA[i+n], resC[i]);
}
#endif #endif
return *this; return *this;
} }
......
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment