Classes | Namespaces | Macros | Typedefs | Functions | Variables
math_simd_details.h File Reference
#include <hpp/fcl/data_types.h>
#include <xmmintrin.h>
Include dependency graph for math_simd_details.h:

Classes

struct  fcl::details::sse_meta_f4
 
struct  fcl::details::sse_meta_d4
 
struct  fcl::details::sse_meta_f12
 
struct  fcl::details::sse_meta_f16
 

Namespaces

 fcl
 Main namespace.
 
 fcl::details
 FCL internals.
 

Macros

#define vec_splat(a, e)   _mm_shuffle_ps((a), (a), _MM_SHUFFLE((e), (e), (e), (e)))
 
#define vec_splatd(a, e)   _mm_shuffle_pd((a), (a), _MM_SHUFFLE2((e), (e)))
 
#define _mm_ror_ps(x, e)   (((e) % 4) ? _mm_shuffle_ps((x), (x), _MM_SHUFFLE(((e)+3)%4, ((e)+2)%4, ((e)+1)%4, (e)%4)) : (x))
 
#define _mm_rol_ps(x, e)   (((e) % 4) ? _mm_shuffle_ps((x), (x), _MM_SHUFFLE((7-(e))%4, (6-(e))%4, (5-(e))%4, (4-(e))%4)) : (x))
 

Typedefs

typedef float meta_type
 

Functions

static __m128 fcl::details::vec_sel (__m128 a, __m128 b, __m128 mask)
 
static __m128 fcl::details::vec_sel (__m128 a, __m128 b, const unsigned int *mask)
 
static __m128 fcl::details::vec_sel (__m128 a, __m128 b, unsigned int mask)
 
static __m128 fcl::details::newtonraphson_rsqrt4 (const __m128 v)
 
struct fcl::details::sse_meta_f4 fcl::details::__attribute__ ((aligned(16)))
 
 sse_meta_f4 ()
 
 sse_meta_f4 (float x)
 
 sse_meta_f4 (float *px)
 
 sse_meta_f4 (__m128 x)
 
 sse_meta_f4 (float x, float y, float z, float w=1)
 
void setValue (float x, float y, float z, float w=1)
 
void setValue (float x)
 
void setValue (__m128 x)
 
void negate ()
 
sse_meta_f4ubound (const sse_meta_f4 &u)
 
sse_meta_f4lbound (const sse_meta_f4 &l)
 
void * operator new [] (size_t n)
 
void operator delete [] (void *x)
 
float operator[] (size_t i) const
 
sse_meta_f4 operator+ (const sse_meta_f4 &other) const
 
sse_meta_f4 operator- (const sse_meta_f4 &other) const
 
sse_meta_f4 operator* (const sse_meta_f4 &other) const
 
sse_meta_f4 operator/ (const sse_meta_f4 &other) const
 
sse_meta_f4operator+= (const sse_meta_f4 &other)
 
sse_meta_f4operator-= (const sse_meta_f4 &other)
 
sse_meta_f4operator*= (const sse_meta_f4 &other)
 
sse_meta_f4operator/= (const sse_meta_f4 &other)
 
sse_meta_f4 operator+ (float t) const
 
sse_meta_f4 operator- (float t) const
 
sse_meta_f4 operator* (float t) const
 
sse_meta_f4 operator/ (float t) const
 
sse_meta_f4operator+= (float t)
 
sse_meta_f4operator-= (float t)
 
sse_meta_f4operator*= (float t)
 
sse_meta_f4operator/= (float t)
 
sse_meta_f4 operator- () const
 
 sse_meta_d4 ()
 
 sse_meta_d4 (double x)
 
 sse_meta_d4 (double *px)
 
 sse_meta_d4 (__m128d x, __m128d y)
 
 sse_meta_d4 (double x, double y, double z, double w=0)
 
void setValue (double x, double y, double z, double w=0)
 
void setValue (double x)
 
void setValue (__m128d x, __m128d y)
 
sse_meta_d4ubound (const sse_meta_d4 &u)
 
sse_meta_d4lbound (const sse_meta_d4 &l)
 
sse_meta_d4 operator+ (const sse_meta_d4 &other) const
 
sse_meta_d4 operator- (const sse_meta_d4 &other) const
 
sse_meta_d4 operator* (const sse_meta_d4 &other) const
 
sse_meta_d4 operator/ (const sse_meta_d4 &other) const
 
sse_meta_d4operator+= (const sse_meta_d4 &other)
 
sse_meta_d4operator-= (const sse_meta_d4 &other)
 
sse_meta_d4operator*= (const sse_meta_d4 &other)
 
sse_meta_d4operator/= (const sse_meta_d4 &other)
 
sse_meta_d4 operator+ (double t) const
 
sse_meta_d4 operator- (double t) const
 
sse_meta_d4 operator* (double t) const
 
sse_meta_d4 operator/ (double t) const
 
sse_meta_d4operator+= (double t)
 
sse_meta_d4operator-= (double t)
 
sse_meta_d4operator*= (double t)
 
sse_meta_d4operator/= (double t)
 
static __m128 fcl::details::cross_prod (__m128 x, __m128 y)
 
static sse_meta_f4 fcl::details::cross_prod (const sse_meta_f4 &x, const sse_meta_f4 &y)
 
static void fcl::details::cross_prod (__m128d x0, __m128d x1, __m128d y0, __m128d y1, __m128d *z0, __m128d *z1)
 
static sse_meta_d4 fcl::details::cross_prod (const sse_meta_d4 &x, const sse_meta_d4 &y)
 
static __m128 fcl::details::dot_prod3 (__m128 x, __m128 y)
 
static float fcl::details::dot_prod3 (const sse_meta_f4 &x, const sse_meta_f4 &y)
 
static __m128d fcl::details::dot_prod3 (__m128d x0, __m128d x1, __m128d y0, __m128d y1)
 
static double fcl::details::dot_prod3 (const sse_meta_d4 &x, const sse_meta_d4 &y)
 
static __m128 fcl::details::dot_prod4 (__m128 x, __m128 y)
 
static float fcl::details::dot_prod4 (const sse_meta_f4 &x, const sse_meta_f4 &y)
 
static __m128d fcl::details::dot_prod4 (__m128d x0, __m128d x1, __m128d y0, __m128d y1)
 
static double fcl::details::dot_prod4 (const sse_meta_d4 &x, const sse_meta_d4 &y)
 
static sse_meta_f4 fcl::details::min (const sse_meta_f4 &x, const sse_meta_f4 &y)
 
static sse_meta_d4 fcl::details::min (const sse_meta_d4 &x, const sse_meta_d4 &y)
 
static sse_meta_f4 fcl::details::max (const sse_meta_f4 &x, const sse_meta_f4 &y)
 
static sse_meta_d4 fcl::details::max (const sse_meta_d4 &x, const sse_meta_d4 &y)
 
static sse_meta_f4 fcl::details::abs (const sse_meta_f4 &x)
 
static sse_meta_d4 fcl::details::abs (const sse_meta_d4 &x)
 
static bool fcl::details::equal (const sse_meta_f4 &x, const sse_meta_f4 &y, float epsilon)
 
static bool fcl::details::equal (const sse_meta_d4 &x, const sse_meta_d4 &y, double epsilon)
 
static sse_meta_f4 fcl::details::normalize3 (const sse_meta_f4 &x)
 
static sse_meta_f4 fcl::details::normalize3_approx (const sse_meta_f4 &x)
 
static void fcl::details::transpose (__m128 c0, __m128 c1, __m128 c2, __m128 *r0, __m128 *r1, __m128 *r2)
 
static void fcl::details::inverse (__m128 c0, __m128 c1, __m128 c2, __m128 *i0, __m128 *i1, __m128 *i2)
 
static sse_meta_f12 fcl::details::abs (const sse_meta_f12 &mat)
 
static sse_meta_f12 fcl::details::transpose (const sse_meta_f12 &mat)
 
static sse_meta_f12 fcl::details::inverse (const sse_meta_f12 &mat)
 
static void fcl::details::transpose (__m128 c0, __m128 c1, __m128 c2, __m128 c3, __m128 *r0, __m128 *r1, __m128 *r2, __m128 *r3)
 
static void fcl::details::inverse (__m128 c0, __m128 c1, __m128 c2, __m128 c3, __m128 *res0, __m128 *res1, __m128 *res2, __m128 *res3)
 
static sse_meta_f16 fcl::details::abs (const sse_meta_f16 &mat)
 
static sse_meta_f16 fcl::details::transpose (const sse_meta_f16 &mat)
 
static sse_meta_f16 fcl::details::inverse (const sse_meta_f16 &mat)
 

Variables

const __m128 fcl::details::xmms_0 = {0.f, 0.f, 0.f, 0.f}
 
const __m128d fcl::details::xmmd_0 = {0, 0}
 
union {
   float   vs [4]
 
   __m128   v
 
}; 
 
union {
   double   vs [4]
 
   __m128d   v [2]
 
}; 
 

Macro Definition Documentation

◆ _mm_rol_ps

#define _mm_rol_ps (   x,
 
)    (((e) % 4) ? _mm_shuffle_ps((x), (x), _MM_SHUFFLE((7-(e))%4, (6-(e))%4, (5-(e))%4, (4-(e))%4)) : (x))

◆ _mm_ror_ps

#define _mm_ror_ps (   x,
 
)    (((e) % 4) ? _mm_shuffle_ps((x), (x), _MM_SHUFFLE(((e)+3)%4, ((e)+2)%4, ((e)+1)%4, (e)%4)) : (x))

◆ vec_splat

#define vec_splat (   a,
 
)    _mm_shuffle_ps((a), (a), _MM_SHUFFLE((e), (e), (e), (e)))

◆ vec_splatd

#define vec_splatd (   a,
 
)    _mm_shuffle_pd((a), (a), _MM_SHUFFLE2((e), (e)))

Referenced by fcl::details::dot_prod3().

Typedef Documentation

◆ meta_type

typedef double meta_type

Function Documentation

◆ lbound() [1/2]

sse_meta_f4& __attribute__::lbound ( const sse_meta_f4 l)
inline

◆ lbound() [2/2]

sse_meta_d4& __attribute__::lbound ( const sse_meta_d4 l)
inline

◆ negate()

void __attribute__::negate ( )
inline

◆ operator delete []()

void operator delete [] ( void *  x)
inline

◆ operator new []()

void * operator new [] ( size_t  n)
inline

◆ operator*() [1/4]

sse_meta_f4 __attribute__::operator* ( const sse_meta_f4 other) const
inline

◆ operator*() [2/4]

sse_meta_f4 __attribute__::operator* ( float  t) const
inline

◆ operator*() [3/4]

sse_meta_d4 __attribute__::operator* ( const sse_meta_d4 other) const
inline

◆ operator*() [4/4]

sse_meta_d4 __attribute__::operator* ( double  t) const
inline

◆ operator*=() [1/4]

sse_meta_f4& __attribute__::operator*= ( const sse_meta_f4 other)
inline

◆ operator*=() [2/4]

sse_meta_f4& __attribute__::operator*= ( float  t)
inline

◆ operator*=() [3/4]

sse_meta_d4& __attribute__::operator*= ( const sse_meta_d4 other)
inline

◆ operator*=() [4/4]

sse_meta_d4& __attribute__::operator*= ( double  t)
inline

◆ operator+() [1/4]

sse_meta_f4 __attribute__::operator+ ( const sse_meta_f4 other) const
inline

◆ operator+() [2/4]

sse_meta_f4 __attribute__::operator+ ( float  t) const
inline

◆ operator+() [3/4]

sse_meta_d4 __attribute__::operator+ ( const sse_meta_d4 other) const
inline

◆ operator+() [4/4]

sse_meta_d4 __attribute__::operator+ ( double  t) const
inline

◆ operator+=() [1/4]

sse_meta_f4& __attribute__::operator+= ( const sse_meta_f4 other)
inline

◆ operator+=() [2/4]

sse_meta_f4& __attribute__::operator+= ( float  t)
inline

◆ operator+=() [3/4]

sse_meta_d4& __attribute__::operator+= ( const sse_meta_d4 other)
inline

◆ operator+=() [4/4]

sse_meta_d4& __attribute__::operator+= ( double  t)
inline

◆ operator-() [1/5]

sse_meta_f4 __attribute__::operator- ( const sse_meta_f4 other) const
inline

◆ operator-() [2/5]

sse_meta_f4 __attribute__::operator- ( float  t) const
inline

◆ operator-() [3/5]

sse_meta_f4 __attribute__::operator- ( ) const
inline

◆ operator-() [4/5]

sse_meta_d4 __attribute__::operator- ( const sse_meta_d4 other) const
inline

◆ operator-() [5/5]

sse_meta_d4 __attribute__::operator- ( double  t) const
inline

◆ operator-=() [1/4]

sse_meta_f4& __attribute__::operator-= ( const sse_meta_f4 other)
inline

◆ operator-=() [2/4]

sse_meta_f4& __attribute__::operator-= ( float  t)
inline

◆ operator-=() [3/4]

sse_meta_d4& __attribute__::operator-= ( const sse_meta_d4 other)
inline

◆ operator-=() [4/4]

sse_meta_d4& __attribute__::operator-= ( double  t)
inline

◆ operator/() [1/4]

sse_meta_f4 __attribute__::operator/ ( const sse_meta_f4 other) const
inline

◆ operator/() [2/4]

sse_meta_f4 __attribute__::operator/ ( float  t) const
inline

◆ operator/() [3/4]

sse_meta_d4 __attribute__::operator/ ( const sse_meta_d4 other) const
inline

◆ operator/() [4/4]

sse_meta_d4 __attribute__::operator/ ( double  t) const
inline

◆ operator/=() [1/4]

sse_meta_f4& __attribute__::operator/= ( const sse_meta_f4 other)
inline

◆ operator/=() [2/4]

sse_meta_f4& __attribute__::operator/= ( float  t)
inline

◆ operator/=() [3/4]

sse_meta_d4& __attribute__::operator/= ( const sse_meta_d4 other)
inline

◆ operator/=() [4/4]

sse_meta_d4& __attribute__::operator/= ( double  t)
inline

◆ operator[]()

float __attribute__::operator[] ( size_t  i) const
inline

◆ setValue() [1/6]

void __attribute__::setValue ( float  x,
float  y,
float  z,
float  w = 1 
)
inline

◆ setValue() [2/6]

void __attribute__::setValue ( float  x)
inline

◆ setValue() [3/6]

void __attribute__::setValue ( __m128  x)
inline

◆ setValue() [4/6]

void __attribute__::setValue ( double  x,
double  y,
double  z,
double  w = 0 
)
inline

◆ setValue() [5/6]

void __attribute__::setValue ( double  x)
inline

◆ setValue() [6/6]

void __attribute__::setValue ( __m128d  x,
__m128d  y 
)
inline

◆ sse_meta_d4() [1/5]

__attribute__::sse_meta_d4 ( )

◆ sse_meta_d4() [2/5]

__attribute__::sse_meta_d4 ( double  x)

◆ sse_meta_d4() [3/5]

__attribute__::sse_meta_d4 ( double *  px)

◆ sse_meta_d4() [4/5]

__attribute__::sse_meta_d4 ( __m128d  x,
__m128d  y 
)

◆ sse_meta_d4() [5/5]

__attribute__::sse_meta_d4 ( double  x,
double  y,
double  z,
double  w = 0 
)

◆ sse_meta_f4() [1/5]

__attribute__::sse_meta_f4 ( )

◆ sse_meta_f4() [2/5]

__attribute__::sse_meta_f4 ( float  x)

◆ sse_meta_f4() [3/5]

__attribute__::sse_meta_f4 ( float *  px)

◆ sse_meta_f4() [4/5]

__attribute__::sse_meta_f4 ( __m128  x)

◆ sse_meta_f4() [5/5]

__attribute__::sse_meta_f4 ( float  x,
float  y,
float  z,
float  w = 1 
)

◆ ubound() [1/2]

sse_meta_f4& __attribute__::ubound ( const sse_meta_f4 u)
inline

◆ ubound() [2/2]

sse_meta_d4& __attribute__::ubound ( const sse_meta_d4 u)
inline

Variable Documentation

◆ @11

union { ... }

◆ @15

union { ... }

◆ v

__m128d v[2]

◆ vs

double vs[4]