1 /*  Copyright (C) 2011-2013  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_SIMD_H
9 #define LIBSIMDPP_SIMD_H
10 
11 /* The following file sets up the preprocessor variables and includes the
12    required system headers for the specific architecture
13 */
14 #include <simdpp/setup_arch.h>
15 
16 #include <cstdlib>
17 
18 
19 #include <simdpp/core/align.h>
20 #include <simdpp/core/aligned_allocator.h>
21 #include <simdpp/core/bit_and.h>
22 #include <simdpp/core/bit_andnot.h>
23 #include <simdpp/core/bit_not.h>
24 #include <simdpp/core/bit_or.h>
25 #include <simdpp/core/bit_xor.h>
26 #include <simdpp/core/blend.h>
27 #include <simdpp/core/cache.h>
28 #include <simdpp/core/cast.h>
29 #include <simdpp/core/cmp_eq.h>
30 #include <simdpp/core/cmp_ge.h>
31 #include <simdpp/core/cmp_gt.h>
32 #include <simdpp/core/cmp_le.h>
33 #include <simdpp/core/cmp_lt.h>
34 #include <simdpp/core/cmp_neq.h>
35 #include <simdpp/core/extract.h>
36 #include <simdpp/core/extract_bits.h>
37 #include <simdpp/core/f_abs.h>
38 #include <simdpp/core/f_add.h>
39 #include <simdpp/core/f_ceil.h>
40 #include <simdpp/core/f_div.h>
41 #include <simdpp/core/f_floor.h>
42 #include <simdpp/core/f_fmadd.h>
43 #include <simdpp/core/f_fmsub.h>
44 #include <simdpp/core/f_isnan.h>
45 #include <simdpp/core/f_isnan2.h>
46 #include <simdpp/core/f_max.h>
47 #include <simdpp/core/f_min.h>
48 #include <simdpp/core/f_mul.h>
49 #include <simdpp/core/f_neg.h>
50 #include <simdpp/core/f_reduce_add.h>
51 #include <simdpp/core/f_reduce_max.h>
52 #include <simdpp/core/f_reduce_min.h>
53 #include <simdpp/core/f_reduce_mul.h>
54 #include <simdpp/core/f_rcp_e.h>
55 #include <simdpp/core/f_rcp_rh.h>
56 #include <simdpp/core/f_rsqrt_e.h>
57 #include <simdpp/core/f_rsqrt_rh.h>
58 #include <simdpp/core/f_sign.h>
59 #include <simdpp/core/f_sqrt.h>
60 #include <simdpp/core/f_sub.h>
61 #include <simdpp/core/f_trunc.h>
62 #include <simdpp/core/for_each.h>
63 #include <simdpp/core/i_abs.h>
64 #include <simdpp/core/i_add.h>
65 #include <simdpp/core/i_add_sat.h>
66 #include <simdpp/core/i_avg.h>
67 #include <simdpp/core/i_avg_trunc.h>
68 #include <simdpp/core/i_div_p.h>
69 #include <simdpp/core/i_max.h>
70 #include <simdpp/core/i_min.h>
71 #include <simdpp/core/i_mul.h>
72 #include <simdpp/core/i_mull.h>
73 #include <simdpp/core/i_neg.h>
74 #include <simdpp/core/i_popcnt.h>
75 #include <simdpp/core/i_reduce_add.h>
76 #include <simdpp/core/i_reduce_and.h>
77 #include <simdpp/core/i_reduce_max.h>
78 #include <simdpp/core/i_reduce_min.h>
79 #include <simdpp/core/i_reduce_mul.h>
80 #include <simdpp/core/i_reduce_or.h>
81 #include <simdpp/core/i_reduce_popcnt.h>
82 #include <simdpp/core/i_shift_l.h>
83 #include <simdpp/core/i_shift_r.h>
84 #include <simdpp/core/i_sub.h>
85 #include <simdpp/core/i_sub_sat.h>
86 #include <simdpp/core/insert.h>
87 #include <simdpp/core/load.h>
88 #include <simdpp/core/load_packed2.h>
89 #include <simdpp/core/load_packed3.h>
90 #include <simdpp/core/load_packed4.h>
91 #include <simdpp/core/load_splat.h>
92 #include <simdpp/core/load_u.h>
93 #include <simdpp/core/make_float.h>
94 #include <simdpp/core/make_int.h>
95 #include <simdpp/core/make_uint.h>
96 #include <simdpp/core/make_shuffle_bytes_mask.h>
97 #include <simdpp/core/move_l.h>
98 #include <simdpp/core/move_r.h>
99 #include <simdpp/core/permute2.h>
100 #include <simdpp/core/permute4.h>
101 #include <simdpp/core/permute_bytes16.h>
102 #include <simdpp/core/permute_zbytes16.h>
103 #include <simdpp/core/set_splat.h>
104 #include <simdpp/core/shuffle1.h>
105 #include <simdpp/core/shuffle2.h>
106 #include <simdpp/core/shuffle4x2.h>
107 #include <simdpp/core/shuffle_bytes16.h>
108 #include <simdpp/core/shuffle_zbytes16.h>
109 #include <simdpp/core/splat.h>
110 #include <simdpp/core/splat_n.h>
111 #include <simdpp/core/store_first.h>
112 #include <simdpp/core/store.h>
113 #include <simdpp/core/store_last.h>
114 #include <simdpp/core/store_masked.h>
115 #include <simdpp/core/store_packed2.h>
116 #include <simdpp/core/store_packed3.h>
117 #include <simdpp/core/store_packed4.h>
118 #include <simdpp/core/store_u.h>
119 #include <simdpp/core/stream.h>
120 #include <simdpp/core/test_bits.h>
121 #include <simdpp/core/to_float32.h>
122 #include <simdpp/core/to_float64.h>
123 #include <simdpp/core/to_int16.h>
124 #include <simdpp/core/to_int32.h>
125 #include <simdpp/core/to_int64.h>
126 #include <simdpp/core/to_int8.h>
127 #include <simdpp/core/to_mask.h>
128 #include <simdpp/core/transpose.h>
129 #include <simdpp/core/unzip_hi.h>
130 #include <simdpp/core/unzip_lo.h>
131 #include <simdpp/core/zip_hi.h>
132 #include <simdpp/core/zip_lo.h>
133 #include <simdpp/detail/cast.h>
134 #include <simdpp/detail/cast.inl>
135 #include <simdpp/detail/insn/conv_to_mask.inl>
136 
137 #include <simdpp/detail/altivec/load1.h>
138 
139 #include <simdpp/detail/neon/math_int.h>
140 #include <simdpp/detail/neon/memory_store.h>
141 #include <simdpp/detail/neon/shuffle.h>
142 
143 #include <simdpp/detail/null/bitwise.h>
144 #include <simdpp/detail/null/compare.h>
145 #include <simdpp/detail/null/mask.h>
146 #include <simdpp/detail/null/math.h>
147 #include <simdpp/detail/null/memory.h>
148 #include <simdpp/detail/null/set.h>
149 #include <simdpp/detail/null/shuffle.h>
150 #include <simdpp/detail/null/transpose.h>
151 
152 #include <simdpp/detail/extract128.h>
153 
154 #include <simdpp/types.h>
155 #include <simdpp/types/generic.h>
156 #include <simdpp/types/empty_expr.h>
157 #include <simdpp/types/float32.h>
158 #include <simdpp/types/float32x4.h>
159 #include <simdpp/types/float32x8.h>
160 #include <simdpp/types/float64.h>
161 #include <simdpp/types/float64x2.h>
162 #include <simdpp/types/float64x4.h>
163 #include <simdpp/types/fwd.h>
164 #include <simdpp/types/int16.h>
165 #include <simdpp/types/int16x16.h>
166 #include <simdpp/types/int16x8.h>
167 #include <simdpp/types/int32.h>
168 #include <simdpp/types/int32x4.h>
169 #include <simdpp/types/int32x8.h>
170 #include <simdpp/types/int64.h>
171 #include <simdpp/types/int64x2.h>
172 #include <simdpp/types/int64x4.h>
173 #include <simdpp/types/int8.h>
174 #include <simdpp/types/int8x16.h>
175 #include <simdpp/types/int8x32.h>
176 #include <simdpp/types/traits.h>
177 #include <simdpp/expr.inl>
178 
179 #include <simdpp/operators/bit_and.h>
180 #include <simdpp/operators/bit_or.h>
181 #include <simdpp/operators/bit_xor.h>
182 #include <simdpp/operators/bit_not.h>
183 #include <simdpp/operators/cmp_eq.h>
184 #include <simdpp/operators/cmp_neq.h>
185 #include <simdpp/operators/cmp_ge.h>
186 #include <simdpp/operators/cmp_gt.h>
187 #include <simdpp/operators/cmp_le.h>
188 #include <simdpp/operators/cmp_lt.h>
189 #include <simdpp/operators/f_add.h>
190 #include <simdpp/operators/f_div.h>
191 #include <simdpp/operators/f_mul.h>
192 #include <simdpp/operators/f_sub.h>
193 #include <simdpp/operators/i_add.h>
194 #include <simdpp/operators/i_mul.h>
195 #include <simdpp/operators/i_shift_l.h>
196 #include <simdpp/operators/i_shift_r.h>
197 #include <simdpp/operators/i_sub.h>
198 
199 /** @def SIMDPP_NO_DISPATCHER
200     Disables internal dispatching functionality. If the internal dispathcher
201     mechanism is not needed, the user can define the @c SIMDPP_NO_DISPATCHER.
202 */
203 #ifndef SIMDPP_NO_DISPATCHER
204 #include <simdpp/dispatch/dispatcher.h>
205 #include <simdpp/dispatch/make_dispatcher.h>
206 #endif
207 
208 #include <simdpp/capabilities.h>
209 
210 namespace simdpp {
211 using namespace SIMDPP_ARCH_NAMESPACE;
212 namespace detail {
213 using namespace ::simdpp::SIMDPP_ARCH_NAMESPACE::detail;
214 } // namespace detail
215 } // namespace simdpp
216 
217 #endif
218