|
Namespaces |
namespace | ustl |
namespace | ustl::simd |
Classes |
struct | ustl::simd::fpadds< T > |
struct | ustl::simd::fpsubs< T > |
struct | ustl::simd::fpshl< T > |
struct | ustl::simd::fpshr< T > |
struct | ustl::simd::fpmin< T > |
struct | ustl::simd::fpmax< T > |
struct | ustl::simd::fpavg< T > |
struct | ustl::simd::fcast< T, D > |
Defines |
#define | SIMD_PACKEDOP1(name, operation) |
#define | SIMD_PACKEDOP2(name, operation) |
#define | SIMD_PACKEDOP3(name, operation) |
#define | SIMD_SINGLEOP1(name, operation) |
#define | SIMD_CONVERTOP(name, operation) |
#define | VECTOR_ATTRIBUTE(x) |
#define | SIMD_PKOP2_SPEC(n, type, optype) |
#define | SIMD_PASSIGN_SPEC(n, type) |
#define | SIMD_IPASSIGN_SPEC(n, type) |
#define | SIMD_CONVERT_SPEC(n, type1, type2, optype) |
Typedefs |
typedef uint8_t v8qi_t | VECTOR_ATTRIBUTE (V8QI) |
Functions |
template<typename Ctr, typename UnaryOperation> |
void | packop (Ctr &op1, UnaryOperation op) |
| Applies op to each element in op1 .
|
template<typename Ctr, typename BinaryOperation> |
void | packop (const Ctr &op1, Ctr &op2, BinaryOperation op) |
| Applies op to each element in op1 and op2 and stores in op2 .
|
template<typename Ctr, typename BinaryOperation> |
void | packop (const Ctr &op1, const Ctr &op2, Ctr &result, BinaryOperation op) |
| Applies op to corresponding elements in op1 and op2 and stores in result .
|
template<typename Ctr> |
void | passign (const Ctr &op1, Ctr &result) |
| Copies op1 into result .
|
template<typename Ctr> |
void | ipassign (typename Ctr::const_iterator op1, Ctr &result) |
| Copies result.size() elements from op1 to result .
|
template<typename Ctr1, typename Ctr2, typename ConvertFunction> |
void | pconvert (const Ctr1 &op1, Ctr2 &op2, ConvertFunction f) |
All algorithms are container-based because iterator syntax is just too damn verbose and because the specializations need to be able to tell how many elements are in the container in order to choose proper SIMD instruction set (i.e.: 4 floats select SSE, while 2 floats select 3dNow!) Specializations are only for the tuple template because the container must be of a fixed and compile-time-known size for the compiler to be able to choose the specialization.