]> git.uio.no Git - u/mrichter/AliRoot.git/blob - Vc/include/Vc/scalar/interleavedmemory.tcc
update to Vc 0.7.3-dev
[u/mrichter/AliRoot.git] / Vc / include / Vc / scalar / interleavedmemory.tcc
1 /*  This file is part of the Vc library. {{{
2
3     Copyright (C) 2012 Matthias Kretz <kretz@kde.org>
4
5     Vc is free software: you can redistribute it and/or modify
6     it under the terms of the GNU Lesser General Public License as
7     published by the Free Software Foundation, either version 3 of
8     the License, or (at your option) any later version.
9
10     Vc is distributed in the hope that it will be useful, but
11     WITHOUT ANY WARRANTY; without even the implied warranty of
12     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13     GNU Lesser General Public License for more details.
14
15     You should have received a copy of the GNU Lesser General Public
16     License along with Vc.  If not, see <http://www.gnu.org/licenses/>.
17
18 }}}*/
19
20 #ifndef VC_SCALAR_INTERLEAVEDMEMORY_TCC
21 #define VC_SCALAR_INTERLEAVEDMEMORY_TCC
22
23 #include "macros.h"
24 namespace AliRoot {
25 namespace Vc
26 {
27 namespace Common
28 {
29
30 template<typename V> Vc_ALWAYS_INLINE void InterleavedMemoryAccessBase<V>::interleave(const typename V::AsArg v0,/*{{{*/
31         const typename V::AsArg v1)
32 {
33     m_data[m_indexes.data() + 0] = v0.data();
34     m_data[m_indexes.data() + 1] = v1.data();
35 }/*}}}*/
36 template<typename V> Vc_ALWAYS_INLINE void InterleavedMemoryAccessBase<V>::interleave(const typename V::AsArg v0,/*{{{*/
37         const typename V::AsArg v1, const typename V::AsArg v2)
38 {
39     m_data[m_indexes.data() + 0] = v0.data();
40     m_data[m_indexes.data() + 1] = v1.data();
41     m_data[m_indexes.data() + 2] = v2.data();
42 }/*}}}*/
43 template<typename V> Vc_ALWAYS_INLINE void InterleavedMemoryAccessBase<V>::interleave(const typename V::AsArg v0,/*{{{*/
44         const typename V::AsArg v1, const typename V::AsArg v2, const typename V::AsArg v3)
45 {
46     m_data[m_indexes.data() + 0] = v0.data();
47     m_data[m_indexes.data() + 1] = v1.data();
48     m_data[m_indexes.data() + 2] = v2.data();
49     m_data[m_indexes.data() + 3] = v3.data();
50 }/*}}}*/
51 template<typename V> Vc_ALWAYS_INLINE void InterleavedMemoryAccessBase<V>::interleave(const typename V::AsArg v0,/*{{{*/
52         const typename V::AsArg v1, const typename V::AsArg v2, const typename V::AsArg v3, const typename V::AsArg v4)
53 {
54     m_data[m_indexes.data() + 0] = v0.data();
55     m_data[m_indexes.data() + 1] = v1.data();
56     m_data[m_indexes.data() + 2] = v2.data();
57     m_data[m_indexes.data() + 3] = v3.data();
58     m_data[m_indexes.data() + 4] = v4.data();
59 }/*}}}*/
60 template<typename V> Vc_ALWAYS_INLINE void InterleavedMemoryAccessBase<V>::interleave(const typename V::AsArg v0,/*{{{*/
61         const typename V::AsArg v1, const typename V::AsArg v2, const typename V::AsArg v3, const typename V::AsArg v4,
62         const typename V::AsArg v5)
63 {
64     m_data[m_indexes.data() + 0] = v0.data();
65     m_data[m_indexes.data() + 1] = v1.data();
66     m_data[m_indexes.data() + 2] = v2.data();
67     m_data[m_indexes.data() + 3] = v3.data();
68     m_data[m_indexes.data() + 4] = v4.data();
69     m_data[m_indexes.data() + 5] = v5.data();
70 }/*}}}*/
71 template<typename V> Vc_ALWAYS_INLINE void InterleavedMemoryAccessBase<V>::interleave(const typename V::AsArg v0,/*{{{*/
72         const typename V::AsArg v1, const typename V::AsArg v2, const typename V::AsArg v3, const typename V::AsArg v4,
73         const typename V::AsArg v5, const typename V::AsArg v6)
74 {
75     m_data[m_indexes.data() + 0] = v0.data();
76     m_data[m_indexes.data() + 1] = v1.data();
77     m_data[m_indexes.data() + 2] = v2.data();
78     m_data[m_indexes.data() + 3] = v3.data();
79     m_data[m_indexes.data() + 4] = v4.data();
80     m_data[m_indexes.data() + 5] = v5.data();
81     m_data[m_indexes.data() + 6] = v6.data();
82 }/*}}}*/
83 template<typename V> Vc_ALWAYS_INLINE void InterleavedMemoryAccessBase<V>::interleave(const typename V::AsArg v0,/*{{{*/
84         const typename V::AsArg v1, const typename V::AsArg v2, const typename V::AsArg v3, const typename V::AsArg v4,
85         const typename V::AsArg v5, const typename V::AsArg v6, const typename V::AsArg v7)
86 {
87     m_data[m_indexes.data() + 0] = v0.data();
88     m_data[m_indexes.data() + 1] = v1.data();
89     m_data[m_indexes.data() + 2] = v2.data();
90     m_data[m_indexes.data() + 3] = v3.data();
91     m_data[m_indexes.data() + 4] = v4.data();
92     m_data[m_indexes.data() + 5] = v5.data();
93     m_data[m_indexes.data() + 6] = v6.data();
94     m_data[m_indexes.data() + 7] = v7.data();
95 }/*}}}*/
96 template<typename V> Vc_ALWAYS_INLINE void InterleavedMemoryAccessBase<V>::deinterleave(V &v0, V &v1) const/*{{{*/
97 {
98     v0.data() = m_data[m_indexes.data() + 0];
99     v1.data() = m_data[m_indexes.data() + 1];
100 }/*}}}*/
101 template<typename V> Vc_ALWAYS_INLINE void InterleavedMemoryAccessBase<V>::deinterleave(V &v0, V &v1, V &v2) const/*{{{*/
102 {
103     v0.data() = m_data[m_indexes.data() + 0];
104     v1.data() = m_data[m_indexes.data() + 1];
105     v2.data() = m_data[m_indexes.data() + 2];
106 }/*}}}*/
107 template<typename V> Vc_ALWAYS_INLINE void InterleavedMemoryAccessBase<V>::deinterleave(V &v0, V &v1, V &v2, V &v3) const/*{{{*/
108 {
109     v0.data() = m_data[m_indexes.data() + 0];
110     v1.data() = m_data[m_indexes.data() + 1];
111     v2.data() = m_data[m_indexes.data() + 2];
112     v3.data() = m_data[m_indexes.data() + 3];
113 }/*}}}*/
114 template<typename V> Vc_ALWAYS_INLINE void InterleavedMemoryAccessBase<V>::deinterleave(V &v0, V &v1, V &v2, V &v3, V &v4) const/*{{{*/
115 {
116     v0.data() = m_data[m_indexes.data() + 0];
117     v1.data() = m_data[m_indexes.data() + 1];
118     v2.data() = m_data[m_indexes.data() + 2];
119     v3.data() = m_data[m_indexes.data() + 3];
120     v4.data() = m_data[m_indexes.data() + 4];
121 }/*}}}*/
122 template<typename V> Vc_ALWAYS_INLINE void InterleavedMemoryAccessBase<V>::deinterleave(V &v0, V &v1, V &v2, V &v3, V &v4, V &v5) const/*{{{*/
123 {
124     v0.data() = m_data[m_indexes.data() + 0];
125     v1.data() = m_data[m_indexes.data() + 1];
126     v2.data() = m_data[m_indexes.data() + 2];
127     v3.data() = m_data[m_indexes.data() + 3];
128     v4.data() = m_data[m_indexes.data() + 4];
129     v5.data() = m_data[m_indexes.data() + 5];
130 }/*}}}*/
131 template<typename V> Vc_ALWAYS_INLINE void InterleavedMemoryAccessBase<V>::deinterleave(V &v0, V &v1, V &v2, V &v3, V &v4, V &v5, V &v6) const/*{{{*/
132 {
133     v0.data() = m_data[m_indexes.data() + 0];
134     v1.data() = m_data[m_indexes.data() + 1];
135     v2.data() = m_data[m_indexes.data() + 2];
136     v3.data() = m_data[m_indexes.data() + 3];
137     v4.data() = m_data[m_indexes.data() + 4];
138     v5.data() = m_data[m_indexes.data() + 5];
139     v6.data() = m_data[m_indexes.data() + 6];
140 }/*}}}*/
141 template<typename V> Vc_ALWAYS_INLINE void InterleavedMemoryAccessBase<V>::deinterleave(V &v0, V &v1, V &v2, V &v3, V &v4, V &v5, V &v6, V &v7) const/*{{{*/
142 {
143     v0.data() = m_data[m_indexes.data() + 0];
144     v1.data() = m_data[m_indexes.data() + 1];
145     v2.data() = m_data[m_indexes.data() + 2];
146     v3.data() = m_data[m_indexes.data() + 3];
147     v4.data() = m_data[m_indexes.data() + 4];
148     v5.data() = m_data[m_indexes.data() + 5];
149     v6.data() = m_data[m_indexes.data() + 6];
150     v7.data() = m_data[m_indexes.data() + 7];
151 }/*}}}*/
152
153 } // namespace Common
154 } // namespace Vc
155 } // namespace AliRoot
156 #include "undomacros.h"
157
158 #endif // VC_SCALAR_INTERLEAVEDMEMORY_TCC
159
160 // vim: foldmethod=marker