Ejemplo n.º 1
0
static void
sse3_test_hsubpd_subsume (double *i1, double *i2, double *r)
{
    __m128d t1 = _mm_load_pd (i1);
    __m128d t2 = _mm_load_pd (i2);

    t1 = _mm_hsub_pd (t1, t2);

    _mm_storeu_pd (r, t1);
}
Ejemplo n.º 2
0
double Point::Cross(const Point &point) const
{
#ifdef __SSE3__
	__m128d b = _mm_shuffle_pd(point.v, point.v, 0x01);
	b *= v;
	b = _mm_hsub_pd(b, b);
	return reinterpret_cast<double &>(b);
#else
	return x * point.y - y * point.x;
#endif
}
Ejemplo n.º 3
0
__m128d test_mm_hsub_pd(__m128d A, __m128d B) {
  // CHECK-LABEL: test_mm_hsub_pd
  // CHECK: call <2 x double> @llvm.x86.sse3.hsub.pd(<2 x double> %{{.*}}, <2 x double> %{{.*}})
  return _mm_hsub_pd(A, B);
}
Ejemplo n.º 4
0
__m128d test_mm_hsub_pd(__m128d A, __m128d B) {
  // CHECK-LABEL: test_mm_hsub_pd
  // CHECK: call <2 x double> @llvm.x86.sse3.hsub.pd
  // CHECK-ASM: hsubpd %xmm{{.*}}, %xmm{{.*}}
  return _mm_hsub_pd(A, B);
}