All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
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]
 
}; 
 
struct fcl::details::sse_meta_f12 fcl::details::__attribute__
 

Macro Definition Documentation

#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))
#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))
#define vec_splatd (   a,
 
)    _mm_shuffle_pd((a), (a), _MM_SHUFFLE2((e), (e)))

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

Typedef Documentation

typedef double meta_type

Function Documentation

sse_meta_f4& __attribute__::lbound ( const sse_meta_f4 l)
inline
sse_meta_d4& __attribute__::lbound ( const sse_meta_d4 l)
inline
void negate ( )
inline
void operator delete[] ( void *  x)
inline
void * operator new[] ( size_t  n)
inline
sse_meta_f4 __attribute__::operator* ( const sse_meta_f4 other) const
inline
sse_meta_f4 __attribute__::operator* ( float  t) const
inline
sse_meta_d4 __attribute__::operator* ( const sse_meta_d4 other) const
inline
sse_meta_d4 __attribute__::operator* ( double  t) const
inline
sse_meta_f4& __attribute__::operator*= ( const sse_meta_f4 other)
inline
sse_meta_f4& __attribute__::operator*= ( float  t)
inline
sse_meta_d4& __attribute__::operator*= ( const sse_meta_d4 other)
inline
sse_meta_d4& __attribute__::operator*= ( double  t)
inline
sse_meta_f4 __attribute__::operator+ ( const sse_meta_f4 other) const
inline
sse_meta_f4 __attribute__::operator+ ( float  t) const
inline
sse_meta_d4 __attribute__::operator+ ( const sse_meta_d4 other) const
inline
sse_meta_d4 __attribute__::operator+ ( double  t) const
inline
sse_meta_f4& __attribute__::operator+= ( const sse_meta_f4 other)
inline
sse_meta_f4& __attribute__::operator+= ( float  t)
inline
sse_meta_d4& __attribute__::operator+= ( const sse_meta_d4 other)
inline
sse_meta_d4& __attribute__::operator+= ( double  t)
inline
sse_meta_f4 __attribute__::operator- ( const sse_meta_f4 other) const
inline
sse_meta_f4 __attribute__::operator- ( float  t) const
inline
sse_meta_d4 operator- ( ) const
inline
sse_meta_d4 __attribute__::operator- ( const sse_meta_d4 other) const
inline
sse_meta_d4 __attribute__::operator- ( double  t) const
inline
sse_meta_f4& __attribute__::operator-= ( const sse_meta_f4 other)
inline
sse_meta_f4& __attribute__::operator-= ( float  t)
inline
sse_meta_d4& __attribute__::operator-= ( const sse_meta_d4 other)
inline
sse_meta_d4& __attribute__::operator-= ( double  t)
inline
sse_meta_f4 __attribute__::operator/ ( const sse_meta_f4 other) const
inline
sse_meta_f4 __attribute__::operator/ ( float  t) const
inline
sse_meta_d4 __attribute__::operator/ ( const sse_meta_d4 other) const
inline
sse_meta_d4 __attribute__::operator/ ( double  t) const
inline
sse_meta_f4& __attribute__::operator/= ( const sse_meta_f4 other)
inline
sse_meta_f4& __attribute__::operator/= ( float  t)
inline
sse_meta_d4& __attribute__::operator/= ( const sse_meta_d4 other)
inline
sse_meta_d4& __attribute__::operator/= ( double  t)
inline
double & operator[] ( size_t  i) const
inline
void __attribute__::setValue ( float  x,
float  y,
float  z,
float  w = 1 
)
inline
void __attribute__::setValue ( float  x)
inline
void __attribute__::setValue ( __m128  x)
inline
void __attribute__::setValue ( double  x,
double  y,
double  z,
double  w = 0 
)
inline
void __attribute__::setValue ( double  x)
inline
void __attribute__::setValue ( __m128d  x,
__m128d  y 
)
inline
__attribute__::sse_meta_d4 ( )
__attribute__::sse_meta_d4 ( double  x)
__attribute__::sse_meta_d4 ( double *  px)
__attribute__::sse_meta_d4 ( __m128d  x,
__m128d  y 
)
__attribute__::sse_meta_d4 ( double  x,
double  y,
double  z,
double  w = 0 
)
__attribute__::sse_meta_f4 ( float  x)
__attribute__::sse_meta_f4 ( float *  px)
__attribute__::sse_meta_f4 ( __m128  x)
__attribute__::sse_meta_f4 ( float  x,
float  y,
float  z,
float  w = 1 
)
sse_meta_f4& __attribute__::ubound ( const sse_meta_f4 u)
inline
sse_meta_d4& __attribute__::ubound ( const sse_meta_d4 u)
inline

Variable Documentation

union { ... }
union { ... }
double vs[4]