~ubuntu-branches/ubuntu/raring/vc/raring-proposed

« back to all changes in this revision

Viewing changes to scalar/interleavedmemory.tcc

  • Committer: Package Import Robot
  • Author(s): Jonathan Riddell
  • Date: 2013-03-08 12:50:59 UTC
  • Revision ID: package-import@ubuntu.com-20130308125059-2vpu3hm02kgrqv96
Tags: upstream-0.7.0
ImportĀ upstreamĀ versionĀ 0.7.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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 Vc
 
25
{
 
26
namespace Common
 
27
{
 
28
 
 
29
template<typename V> Vc_ALWAYS_INLINE void InterleavedMemoryAccessBase<V>::interleave(const typename V::AsArg v0,/*{{{*/
 
30
        const typename V::AsArg v1)
 
31
{
 
32
    m_data[m_indexes.data() + 0] = v0.data();
 
33
    m_data[m_indexes.data() + 1] = v1.data();
 
34
}/*}}}*/
 
35
template<typename V> Vc_ALWAYS_INLINE void InterleavedMemoryAccessBase<V>::interleave(const typename V::AsArg v0,/*{{{*/
 
36
        const typename V::AsArg v1, const typename V::AsArg v2)
 
37
{
 
38
    m_data[m_indexes.data() + 0] = v0.data();
 
39
    m_data[m_indexes.data() + 1] = v1.data();
 
40
    m_data[m_indexes.data() + 2] = v2.data();
 
41
}/*}}}*/
 
42
template<typename V> Vc_ALWAYS_INLINE void InterleavedMemoryAccessBase<V>::interleave(const typename V::AsArg v0,/*{{{*/
 
43
        const typename V::AsArg v1, const typename V::AsArg v2, const typename V::AsArg v3)
 
44
{
 
45
    m_data[m_indexes.data() + 0] = v0.data();
 
46
    m_data[m_indexes.data() + 1] = v1.data();
 
47
    m_data[m_indexes.data() + 2] = v2.data();
 
48
    m_data[m_indexes.data() + 3] = v3.data();
 
49
}/*}}}*/
 
50
template<typename V> Vc_ALWAYS_INLINE void InterleavedMemoryAccessBase<V>::interleave(const typename V::AsArg v0,/*{{{*/
 
51
        const typename V::AsArg v1, const typename V::AsArg v2, const typename V::AsArg v3, const typename V::AsArg v4)
 
52
{
 
53
    m_data[m_indexes.data() + 0] = v0.data();
 
54
    m_data[m_indexes.data() + 1] = v1.data();
 
55
    m_data[m_indexes.data() + 2] = v2.data();
 
56
    m_data[m_indexes.data() + 3] = v3.data();
 
57
    m_data[m_indexes.data() + 4] = v4.data();
 
58
}/*}}}*/
 
59
template<typename V> Vc_ALWAYS_INLINE void InterleavedMemoryAccessBase<V>::interleave(const typename V::AsArg v0,/*{{{*/
 
60
        const typename V::AsArg v1, const typename V::AsArg v2, const typename V::AsArg v3, const typename V::AsArg v4,
 
61
        const typename V::AsArg v5)
 
62
{
 
63
    m_data[m_indexes.data() + 0] = v0.data();
 
64
    m_data[m_indexes.data() + 1] = v1.data();
 
65
    m_data[m_indexes.data() + 2] = v2.data();
 
66
    m_data[m_indexes.data() + 3] = v3.data();
 
67
    m_data[m_indexes.data() + 4] = v4.data();
 
68
    m_data[m_indexes.data() + 5] = v5.data();
 
69
}/*}}}*/
 
70
template<typename V> Vc_ALWAYS_INLINE void InterleavedMemoryAccessBase<V>::interleave(const typename V::AsArg v0,/*{{{*/
 
71
        const typename V::AsArg v1, const typename V::AsArg v2, const typename V::AsArg v3, const typename V::AsArg v4,
 
72
        const typename V::AsArg v5, const typename V::AsArg v6)
 
73
{
 
74
    m_data[m_indexes.data() + 0] = v0.data();
 
75
    m_data[m_indexes.data() + 1] = v1.data();
 
76
    m_data[m_indexes.data() + 2] = v2.data();
 
77
    m_data[m_indexes.data() + 3] = v3.data();
 
78
    m_data[m_indexes.data() + 4] = v4.data();
 
79
    m_data[m_indexes.data() + 5] = v5.data();
 
80
    m_data[m_indexes.data() + 6] = v6.data();
 
81
}/*}}}*/
 
82
template<typename V> Vc_ALWAYS_INLINE void InterleavedMemoryAccessBase<V>::interleave(const typename V::AsArg v0,/*{{{*/
 
83
        const typename V::AsArg v1, const typename V::AsArg v2, const typename V::AsArg v3, const typename V::AsArg v4,
 
84
        const typename V::AsArg v5, const typename V::AsArg v6, const typename V::AsArg v7)
 
85
{
 
86
    m_data[m_indexes.data() + 0] = v0.data();
 
87
    m_data[m_indexes.data() + 1] = v1.data();
 
88
    m_data[m_indexes.data() + 2] = v2.data();
 
89
    m_data[m_indexes.data() + 3] = v3.data();
 
90
    m_data[m_indexes.data() + 4] = v4.data();
 
91
    m_data[m_indexes.data() + 5] = v5.data();
 
92
    m_data[m_indexes.data() + 6] = v6.data();
 
93
    m_data[m_indexes.data() + 7] = v7.data();
 
94
}/*}}}*/
 
95
template<typename V> Vc_ALWAYS_INLINE void InterleavedMemoryAccessBase<V>::deinterleave(V &v0, V &v1) const/*{{{*/
 
96
{
 
97
    v0.data() = m_data[m_indexes.data() + 0];
 
98
    v1.data() = m_data[m_indexes.data() + 1];
 
99
}/*}}}*/
 
100
template<typename V> Vc_ALWAYS_INLINE void InterleavedMemoryAccessBase<V>::deinterleave(V &v0, V &v1, V &v2) const/*{{{*/
 
101
{
 
102
    v0.data() = m_data[m_indexes.data() + 0];
 
103
    v1.data() = m_data[m_indexes.data() + 1];
 
104
    v2.data() = m_data[m_indexes.data() + 2];
 
105
}/*}}}*/
 
106
template<typename V> Vc_ALWAYS_INLINE void InterleavedMemoryAccessBase<V>::deinterleave(V &v0, V &v1, V &v2, V &v3) const/*{{{*/
 
107
{
 
108
    v0.data() = m_data[m_indexes.data() + 0];
 
109
    v1.data() = m_data[m_indexes.data() + 1];
 
110
    v2.data() = m_data[m_indexes.data() + 2];
 
111
    v3.data() = m_data[m_indexes.data() + 3];
 
112
}/*}}}*/
 
113
template<typename V> Vc_ALWAYS_INLINE void InterleavedMemoryAccessBase<V>::deinterleave(V &v0, V &v1, V &v2, V &v3, V &v4) const/*{{{*/
 
114
{
 
115
    v0.data() = m_data[m_indexes.data() + 0];
 
116
    v1.data() = m_data[m_indexes.data() + 1];
 
117
    v2.data() = m_data[m_indexes.data() + 2];
 
118
    v3.data() = m_data[m_indexes.data() + 3];
 
119
    v4.data() = m_data[m_indexes.data() + 4];
 
120
}/*}}}*/
 
121
template<typename V> Vc_ALWAYS_INLINE void InterleavedMemoryAccessBase<V>::deinterleave(V &v0, V &v1, V &v2, V &v3, V &v4, V &v5) const/*{{{*/
 
122
{
 
123
    v0.data() = m_data[m_indexes.data() + 0];
 
124
    v1.data() = m_data[m_indexes.data() + 1];
 
125
    v2.data() = m_data[m_indexes.data() + 2];
 
126
    v3.data() = m_data[m_indexes.data() + 3];
 
127
    v4.data() = m_data[m_indexes.data() + 4];
 
128
    v5.data() = m_data[m_indexes.data() + 5];
 
129
}/*}}}*/
 
130
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/*{{{*/
 
131
{
 
132
    v0.data() = m_data[m_indexes.data() + 0];
 
133
    v1.data() = m_data[m_indexes.data() + 1];
 
134
    v2.data() = m_data[m_indexes.data() + 2];
 
135
    v3.data() = m_data[m_indexes.data() + 3];
 
136
    v4.data() = m_data[m_indexes.data() + 4];
 
137
    v5.data() = m_data[m_indexes.data() + 5];
 
138
    v6.data() = m_data[m_indexes.data() + 6];
 
139
}/*}}}*/
 
140
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/*{{{*/
 
141
{
 
142
    v0.data() = m_data[m_indexes.data() + 0];
 
143
    v1.data() = m_data[m_indexes.data() + 1];
 
144
    v2.data() = m_data[m_indexes.data() + 2];
 
145
    v3.data() = m_data[m_indexes.data() + 3];
 
146
    v4.data() = m_data[m_indexes.data() + 4];
 
147
    v5.data() = m_data[m_indexes.data() + 5];
 
148
    v6.data() = m_data[m_indexes.data() + 6];
 
149
    v7.data() = m_data[m_indexes.data() + 7];
 
150
}/*}}}*/
 
151
 
 
152
} // namespace Common
 
153
} // namespace Vc
 
154
#include "undomacros.h"
 
155
 
 
156
#endif // VC_SCALAR_INTERLEAVEDMEMORY_TCC
 
157
 
 
158
// vim: foldmethod=marker