1/* Copyright (C) 2017 Povilas Kanapickas <povilas@radix.lt>
2
3 Distributed under the Boost Software License, Version 1.0.
4 (See accompanying file LICENSE_1_0.txt or copy at
5 http://www.boost.org/LICENSE_1_0.txt)
6*/
7
8#ifndef LIBSIMDPP_SIMDPP_DETAIL_VECTOR_ARRAY_MACROS_H
9#define LIBSIMDPP_SIMDPP_DETAIL_VECTOR_ARRAY_MACROS_H
10
11#ifndef LIBSIMDPP_SIMD_H
12 #error "This file must be included through simd.h"
13#endif
14
15#include <simdpp/types.h>
16
17#define SIMDPP_VEC_ARRAY_IMPL1(RTYPE, OP, V1) \
18 RTYPE r; for (unsigned i = 0; i < r.vec_length; ++i) { \
19 r.vec(i) = OP((V1).vec(i)); } \
20 return r;
21
22#define SIMDPP_VEC_ARRAY_IMPL2(RTYPE, OP, V1, V2) \
23 RTYPE r; for (unsigned i = 0; i < r.vec_length; ++i) { \
24 r.vec(i) = OP((V1).vec(i), (V2).vec(i)); } \
25 return r;
26
27#define SIMDPP_VEC_ARRAY_IMPL2S(RTYPE, OP, V1, A2) \
28 RTYPE r; for (unsigned i = 0; i < r.vec_length; ++i) { \
29 r.vec(i) = OP((V1).vec(i), (A2)); } \
30 return r;
31
32#define SIMDPP_VEC_ARRAY_IMPL3(RTYPE, OP, V1, V2, V3) \
33 RTYPE r; for (unsigned i = 0; i < r.vec_length; ++i) { \
34 r.vec(i) = OP((V1).vec(i), (V2).vec(i), (V3).vec(i)); \
35 } \
36 return r;
37
38#define SIMDPP_VEC_ARRAY_IMPL_REF1(RTYPE, OP, V1) \
39 for (unsigned i = 0; i < RTYPE::vec_length; ++i) { \
40 OP((V1).vec(i)); }
41
42#define SIMDPP_VEC_ARRAY_IMPL_REF2(RTYPE, OP, V1, V2) \
43 for (unsigned i = 0; i < RTYPE::vec_length; ++i) { \
44 OP((V1).vec(i), (V2).vec(i)); }
45
46#define SIMDPP_VEC_ARRAY_IMPL_REF3(RTYPE, OP, V1, V2, V3) \
47 for (unsigned i = 0; i < RTYPE::vec_length; ++i) { \
48 OP((V1).vec(i), (V2).vec(i), (V3).vec(i)); }
49
50#define SIMDPP_VEC_ARRAY_IMPL_REF4(RTYPE, OP, V1, V2, V3, V4) \
51 for (unsigned i = 0; i < RTYPE::vec_length; ++i) { \
52 OP((V1).vec(i), (V2).vec(i), (V3).vec(i), (V4).vec(i)); }
53
54#endif
55