22#ifndef VECTORCLASS_PORTABLE_H
23#define VECTORCLASS_PORTABLE_H
28#include <initializer_list>
62 if (list.size() == 1) {
63 for(
int i=0;
i<VECL; ++
i) {
64 val[
i] = *(list.begin());
66 }
else if (list.size() == VECL) {
68 for(
auto it = list.begin(); it != list.end(); ++it) {
73 printf(
"Constructing a vector with a number of elements not equal to 1 or VECL = %d \nInitializer_list size = %lu\n", VECL, list.size());
84 for(
unsigned int i=0;
i<VECL;
i++) {
94 for(
unsigned int i=0;
i<VECL;
i++) {
104 for(
unsigned int i=0;
i<VECL;
i++) {
110template <
class T,
class S>
113 for(
unsigned int i=0;
i<VECL;
i++) {
119template <
class T,
class S>
122 for(
unsigned int i=0;
i<VECL;
i++) {
132 for(
unsigned int i=0;
i<VECL;
i++) {
142 for(
unsigned int i=0;
i<VECL;
i++) {
148template <
class T,
class S>
151 for(
unsigned int i=0;
i<VECL;
i++) {
157template <
class T,
class S>
160 for(
unsigned int i=0;
i<VECL;
i++) {
170 for(
unsigned int i=0;
i<VECL;
i++) {
176template <
class T,
class S>
180 for(
unsigned int i=0;
i<VECL;
i++) {
186template <
class T,
class S>
190 for(
unsigned int i=0;
i<VECL;
i++) {
202 for(
unsigned int i=0;
i<VECL;
i++) {
208template <
class T,
class S>
212 for(
unsigned int i=0;
i<VECL;
i++) {
218template <
class T,
class S>
222 for(
unsigned int i=0;
i<VECL;
i++) {
234template <
class T,
class S>
246template <
class T,
class S>
258template <
class T,
class S>
268 for(
unsigned int i=0;
i<VECL;
i++) {
279 for(
unsigned int i=0;
i<VECL;
i++) {
289 for(
unsigned int i=0;
i<VECL;
i++) {
295template <
class T,
class S>
299 for(
unsigned int i=0;
i<VECL;
i++) {
305template <
class T,
class S>
309 for(
unsigned int i=0;
i<VECL;
i++) {
319 for(
unsigned int i=0;
i<VECL;
i++) {
330 for(
unsigned int i=0;
i<VECL;
i++) {
337template <
class T,
class S>
341 for(
unsigned int i=0;
i<VECL;
i++) {
349template <
class T,
class S>
353 for(
unsigned int i=0;
i<VECL;
i++) {
364 for(
unsigned int i=0;
i<VECL;
i++) {
371template <
class T,
class S>
375 for(
unsigned int i=0;
i<VECL;
i++) {
383template <
class T,
class S>
387 for(
unsigned int i=0;
i<VECL;
i++) {
399 for(
unsigned int i=0;
i<VECL;
i++) {
406template <
class T,
class S>
410 for(
unsigned int i=0;
i<VECL;
i++) {
416template <
class T,
class S>
420 for(
unsigned int i=0;
i<VECL;
i++) {
432 for(
unsigned int i=0;
i<VECL;
i++) {
439template <
class T,
class S>
443 for(
unsigned int i=0;
i<VECL;
i++) {
449template <
class T,
class S>
453 for(
unsigned int i=0;
i<VECL;
i++) {
465 for(
unsigned int i=0;
i<VECL;
i++) {
466 temp.
insert(
i, l.val[
i] < r.val[
i] ? l.val[
i] : r.val[
i]);
471template <
class T,
class S>
474 for(
unsigned int i=0;
i<VECL;
i++) {
475 temp.
insert(
i, l < r.val[
i] ? l : r.val[
i]);
483 for(
unsigned int i=0;
i<VECL;
i++) {
484 temp.
insert(
i, l.val[
i] > r.val[
i] ? l.val[
i] : r.val[
i]);
490template <
class T,
class S>
493 for(
unsigned int i=0;
i<VECL;
i++) {
494 temp.
insert(
i, l.val[
i] > r ? l.val[
i] : r);
500template <
class T,
class S>
503 for(
unsigned int i=0;
i<VECL;
i++) {
504 temp.
insert(
i, r.val[
i] > l ? r.val[
i] : l);
514 for(
unsigned int i=0;
i<VECL;
i++) {
521template <
class T,
class S>
524 for(
unsigned int i=0;
i<VECL;
i++) {
531template <
class T,
class S>
534 for(
unsigned int i=0;
i<VECL;
i++) {
544 for(
unsigned int i=0;
i<VECL;
i++) {
552 bool temp = a.val[0];
553 for(
unsigned int i=1;
i<VECL;
i++) {
554 temp = temp || a.val[
i];
561 bool temp = a.val[0];
562 for(
unsigned int i=1;
i<VECL;
i++) {
563 temp = temp && a.val[
i];
571 for(
unsigned int i=1;
i<VECL;
i++) {
580 for(
unsigned int i=0;
i<VECL;
i++) {
591 for(
unsigned int i=0;
i<VECL;
i++) {
592 temp.
insert(
i, std::nearbyint(a.val[
i]));
600 for(
unsigned int i=0;
i<VECL;
i++) {
609 for(
unsigned int i=0;
i<VECL;
i++) {
618 for(
unsigned int i=0;
i<VECL;
i++) {
633 for(
unsigned int i=0;
i<VECL;
i++) {
643 for(
unsigned int i=0;
i<VECL;
i++) {
651 for(
unsigned int i=0;
i<VECL;
i++) {
660 return this->
load(p);
672 for(
unsigned int i=0;
i<VECL;
i++) {
685 for(
unsigned int i=0;
i<VECL;
i++) {
703 for(
unsigned int i=0;
i<VECL;
i++) {
711 for(
unsigned int i=0;
i<VECL;
i++)
ARCH_HOSTDEV VecSimple< T > & load(T const *p)
ARCH_HOSTDEV void store_a(T *p) const
ARCH_HOSTDEV VecSimple< T > & insert(int i, T const &x)
ARCH_HOSTDEV VecSimple< T > operator++(int)
ARCH_HOSTDEV VecSimple< T > operator--(int)
ARCH_HOSTDEV void store(T *p) const
T val[VECL] __attribute__((aligned(32)))
ARCH_HOSTDEV VecSimple< T > & load_a(T const *p)
ARCH_HOSTDEV VecSimple(std::initializer_list< T > list)
ARCH_HOSTDEV T operator[](int i) const
ARCH_HOSTDEV VecSimple< T > & operator=(VecSimple< T > const &r)
static ARCH_HOSTDEV VecSimple< T > operator*(const VecSimple< T > &l, const VecSimple< T > &r)
static ARCH_HOSTDEV VecSimple< T > & operator+=(VecSimple< T > &l, const VecSimple< T > &r)
static ARCH_HOSTDEV VecSimple< T > min(VecSimple< T > const &l, VecSimple< T > const &r)
static ARCH_HOSTDEV VecSimple< bool > operator!=(const VecSimple< T > &l, const S r)
static ARCH_HOSTDEV bool horizontal_or(VecSimple< T > const &a)
static ARCH_HOSTDEV VecSimple< T > sqrt(const VecSimple< T > &l)
static ARCH_HOSTDEV void no_subnormals()
static ARCH_HOSTDEV VecSimple< bool > operator!(const VecSimple< T > &l)
static ARCH_HOSTDEV VecSimple< bool > operator<=(const VecSimple< T > &l, const VecSimple< T > &r)
static ARCH_HOSTDEV VecSimple< bool > operator<(const VecSimple< T > &l, const VecSimple< T > &r)
static ARCH_HOSTDEV VecSimple< T > operator+(const VecSimple< T > &l, const VecSimple< T > &r)
static ARCH_HOSTDEV VecSimple< int > roundi(VecSimple< T > const &a)
static ARCH_HOSTDEV VecSimple< T > max(VecSimple< T > const &l, VecSimple< T > const &r)
static ARCH_HOSTDEV VecSimple< bool > operator>=(const VecSimple< T > &l, const VecSimple< T > &r)
static ARCH_HOSTDEV VecSimple< T > select(VecSimple< bool > const &a, VecSimple< T > const &b, VecSimple< T > const &c)
static ARCH_HOSTDEV VecSimple< int > truncate_to_int(VecSimple< T > const &a)
static ARCH_HOSTDEV T horizontal_add(VecSimple< T > const &a)
static ARCH_HOSTDEV VecSimple< bool > operator>(const VecSimple< T > &l, const VecSimple< T > &r)
static ARCH_HOSTDEV VecSimple< bool > operator==(const VecSimple< T > &l, const VecSimple< T > &r)
static ARCH_HOSTDEV VecSimple< bool > operator&&(const VecSimple< T > &l, const VecSimple< T > &r)
static ARCH_HOSTDEV VecSimple< float > to_float(VecSimple< T > const &a)
static ARCH_HOSTDEV VecSimple< T > abs(const VecSimple< T > &l)
static ARCH_HOSTDEV VecSimple< T > & operator-=(VecSimple< T > &l, const VecSimple< T > &r)
static ARCH_HOSTDEV VecSimple< double > to_double(VecSimple< T > const &a)
static ARCH_HOSTDEV VecSimple< T > floor(VecSimple< T > const &a)
static ARCH_HOSTDEV VecSimple< T > & operator*=(VecSimple< T > &l, const VecSimple< T > &r)
static ARCH_HOSTDEV VecSimple< T > operator/(const VecSimple< T > &l, const VecSimple< T > &r)
static ARCH_HOSTDEV VecSimple< T > operator-(const VecSimple< T > &r)
static ARCH_HOSTDEV VecSimple< bool > operator||(const VecSimple< T > &l, const VecSimple< T > &r)
static ARCH_HOSTDEV bool horizontal_and(VecSimple< T > const &a)