// -*-C++-*- #ifndef VEC_BASE_H #define VEC_BASE_H #ifndef VML_NO_IOSTREAM # include #endif #include "vec_mask.h" namespace vecmathlib { template struct boolvec { }; template struct intvec { }; template struct realvec { }; // boolvec wrappers template inline intvec as_int(boolvec x) { return x.as_int(); } template inline intvec convert_int(boolvec x) { return x.convert_int(); } template inline bool all(boolvec x) { return x.all(); } template inline bool any(boolvec x) { return x.any(); } template inline boolvec ifthen(boolvec c, boolvec x, boolvec y) { return c.ifthen(x, y); } template inline intvec ifthen(boolvec c, intvec x, intvec y) { return c.ifthen(x, y); } template inline realvec ifthen(boolvec c, realvec x, realvec y) { return c.ifthen(x, y); } // intvec wrappers template inline boolvec as_bool(intvec x) { return x.as_bool(); } template inline boolvec convert_bool(intvec x) { return x.convert_bool(); } template inline realvec as_float(intvec x) { return x.as_float(); } template inline realvec convert_float(intvec x) { return x.convert_float(); } template inline intvec abs(intvec x) { return x.abs(); } template inline intvec bitifthen(intvec x, intvec y, intvec z) { return x.bitifthen(y, z); } template inline intvec clz(intvec x) { return x.clz(); } template inline boolvec isignbit(intvec x) { return x.isignbit(); } template inline intvec lsr(intvec x, typename intvec::int_t n) { return x.lsr(n); } template inline intvec lsr(intvec x, intvec n) { return x.lsr(n); } template inline intvec max(intvec x, intvec y) { return x.max(y); } template inline intvec min(intvec x, intvec y) { return x.min(y); } template inline intvec popcount(intvec x) { return x.popcount(); } template inline intvec rotate(intvec x, typename intvec::int_t n) { return x.rotate(n); } template inline intvec rotate(intvec x, intvec n) { return x.rotate(n); } // realvec wrappers template inline realvec loada(real_t const* p, realvec x, typename realvec::mask_t const& m) { return x.loada(p, m); } template inline realvec loadu(real_t const* p, realvec x, typename realvec::mask_t const& m) { return x.loadu(p, m); } template inline realvec loadu(real_t const* p, size_t ioff, realvec x, typename realvec::mask_t const& m) { return x.loadu(p, ioff, m); } template inline void storea(realvec x, real_t* p) { x.storea(p); } template inline void storeu(realvec x, real_t* p) { x.storeu(p); } template inline void storeu(realvec x, real_t* p, size_t ioff) { x.storeu(p, ioff); } template inline void storea(realvec x, real_t* p, typename realvec::mask_t const& m) { x.storea(p, m); } template inline void storeu(realvec x, real_t* p, typename realvec::mask_t const& m) { x.storeu(p, m); } template inline void storeu(realvec x, real_t* p, size_t ioff, typename realvec::mask_t const &m) { x.storeu(p, ioff, m); } template inline intvec as_int(realvec x) { return x.as_int(); } template inline intvec convert_int(realvec x) { return x.convert_int(); } template inline typename realvec::real_t maxval(realvec x) { return x.maxval(); } template inline typename realvec::real_t minval(realvec x) { return x.minval(); } template inline typename realvec::real_t prod(realvec x) { return x.prod(); } template inline typename realvec::real_t sum(realvec x) { return x.sum(); } template inline realvec acos(realvec x) { return x.acos(); } template inline realvec acosh(realvec x) { return x.acosh(); } template inline realvec asin(realvec x) { return x.asin(); } template inline realvec asinh(realvec x) { return x.asinh(); } template inline realvec atan(realvec x) { return x.atan(); } template inline realvec atan2(realvec x, realvec y) { return x.atan2(y); } template inline realvec atanh(realvec x) { return x.atanh(); } template inline realvec cbrt(realvec x) { return x.cbrt(); } template inline realvec ceil(realvec x) { return x.ceil(); } template inline realvec copysign(realvec x, realvec y) { return x.copysign(y); } template inline realvec cos(realvec x) { return x.cos(); } template inline realvec cosh(realvec x) { return x.cosh(); } template inline realvec exp(realvec x) { return x.exp(); } template inline realvec exp10(realvec x) { return x.exp10(); } template inline realvec exp2(realvec x) { return x.exp2(); } template inline realvec expm1(realvec x) { return x.expm1(); } template inline realvec fabs(realvec x) { return x.fabs(); } template inline realvec floor(realvec x) { return x.floor(); } template inline realvec fdim(realvec x, realvec y) { return x.fdim(y); } template inline realvec fma(realvec x, realvec y, realvec z) { return x.fma(y, z); } template inline realvec fmax(realvec x, realvec y) { return x.fmax(y); } template inline realvec fmin(realvec x, realvec y) { return x.fmin(y); } template inline realvec fmod(realvec x, realvec y) { return x.fmod(y); } template inline realvec frexp(realvec x, intvec* r) { return x.frexp(r); } template inline realvec hypot(realvec x, realvec y) { return x.hypot(y); } template inline intvec ilogb(realvec x) { return x.ilogb(); } template inline boolvec isfinite(realvec x) { return x.isfinite(); } template inline boolvec isinf(realvec x) { return x.isinf(); } template inline boolvec isnan(realvec x) { return x.isnan(); } template inline boolvec isnormal(realvec x) { return x.isnormal(); } template inline realvec ldexp(realvec x, typename intvec::int_t n) { return x.ldexp(n); } template inline realvec ldexp(realvec x, intvec n) { return x.ldexp(n); } template inline realvec log(realvec x) { return x.log(); } template inline realvec log10(realvec x) { return x.log10(); } template inline realvec log1p(realvec x) { return x.log1p(); } template inline realvec log2(realvec x) { return x.log2(); } template inline intvec lrint(realvec x) { return x.lrint(); } template inline realvec mad(realvec x, realvec y, realvec z) { return x.mad(y, z); } template inline realvec nextafter(realvec x, realvec y) { return x.nextafter(y); } template inline realvec pow(realvec x, realvec y) { return x.pow(y); } template inline realvec rcp(realvec x) { return x.rcp(); } template inline realvec remainder(realvec x, realvec y) { return x.remainder(y); } template inline realvec rint(realvec x) { return x.rint(); } template inline realvec round(realvec x) { return x.round(); } template inline realvec rsqrt(realvec x) { return x.rsqrt(); } template inline boolvec signbit(realvec x) { return x.signbit(); } template inline realvec sin(realvec x) { return x.sin(); } template inline realvec sinh(realvec x) { return x.sinh(); } template inline realvec sqrt(realvec x) { return x.sqrt(); } template inline realvec tan(realvec x) { return x.tan(); } template inline realvec tanh(realvec x) { return x.tanh(); } template inline realvec trunc(realvec x) { return x.trunc(); } #ifndef VML_NO_IOSTREAM template std::ostream& operator<<(std::ostream& os, boolvec const& x) { os << "["; for (int i=0; i std::ostream& operator<<(std::ostream& os, intvec const& x) { os << "["; for (int i=0; i std::ostream& operator<<(std::ostream& os, realvec const& x) { os << "["; for (int i=0; i