mirror of https://github.com/CGAL/cgal
add an avx version for archive, it is slower so not used
in general, CGAL with avx is itself slower
This commit is contained in:
parent
433881020e
commit
fffea5c616
|
|
@ -155,6 +155,36 @@ private :
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef __AVX__
|
||||||
|
static Vector SL_cross_product_avx(const Vector& A, const Vector& B)
|
||||||
|
{
|
||||||
|
const FT ax=A.x(), ay=A.y(), az=A.z();
|
||||||
|
const FT bx=B.x(), by=B.y(), bz=B.z();
|
||||||
|
|
||||||
|
__m256d a = _mm256_set_pd(ay, az, ax, 1.0);
|
||||||
|
__m256d b = _mm256_set_pd(bz, bx, by, 1.0);
|
||||||
|
__m256d c = _mm256_set_pd(az, ax, ay, 1.0);
|
||||||
|
__m256d d = _mm256_set_pd(by, bz, bx, 1.0);
|
||||||
|
|
||||||
|
__m256d s1 = _mm256_sub_pd(b, c);
|
||||||
|
__m256d s2 = _mm256_sub_pd(a, d);
|
||||||
|
|
||||||
|
b = _mm256_mul_pd(a, s1);
|
||||||
|
d = _mm256_mul_pd(c, s2);
|
||||||
|
a = _mm256_add_pd(b, d);
|
||||||
|
|
||||||
|
double res[4];
|
||||||
|
_mm256_storeu_pd(res, a);
|
||||||
|
|
||||||
|
// a * (b - c ) + c * ( a - d);
|
||||||
|
// FT x = ay * (bz - az) + az * (ay - by);
|
||||||
|
// FT y = az * (bx - ax) + ax * (az - bz);
|
||||||
|
// FT z = ax * (by - ay) + ay * (ax - bx);
|
||||||
|
|
||||||
|
return Vector(res[3], res[2], res[1]);
|
||||||
|
}
|
||||||
|
#end
|
||||||
|
|
||||||
static Vector SL_cross_product(const Vector& a, const Vector& b)
|
static Vector SL_cross_product(const Vector& a, const Vector& b)
|
||||||
{
|
{
|
||||||
const FT ax=a.x(), ay=a.y(), az=a.z();
|
const FT ax=a.x(), ay=a.y(), az=a.z();
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue