1 | /* Copyright (C) 2011-2014 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_INSN_I_SHIFT_H |
9 | #define LIBSIMDPP_SIMDPP_DETAIL_INSN_I_SHIFT_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 | // this file contains forward declarations of shift functions for internal use |
18 | // from within shift implementation |
19 | |
20 | namespace simdpp { |
21 | namespace SIMDPP_ARCH_NAMESPACE { |
22 | |
23 | template<unsigned N, class E> SIMDPP_INL |
24 | uint8<N,expr_empty> shift_l(const uint8<N,E>& a, unsigned count); |
25 | template<unsigned N, class E> SIMDPP_INL |
26 | uint16<N,expr_empty> shift_l(const uint16<N,E>& a, unsigned count); |
27 | template<unsigned N, class E> SIMDPP_INL |
28 | uint32<N,expr_empty> shift_l(const uint32<N,E>& a, unsigned count); |
29 | template<unsigned N, class E> SIMDPP_INL |
30 | uint64<N,expr_empty> shift_l(const uint64<N,E>& a, unsigned count); |
31 | |
32 | template<unsigned N, class E> SIMDPP_INL |
33 | uint8<N,expr_empty> shift_l(const uint8<N,E>& a, const uint8<N,E>& count); |
34 | template<unsigned N, class E> SIMDPP_INL |
35 | uint16<N,expr_empty> shift_l(const uint16<N,E>& a, const uint16<N,E>& count); |
36 | template<unsigned N, class E> SIMDPP_INL |
37 | uint32<N,expr_empty> shift_l(const uint32<N,E>& a, const uint32<N,E>& count); |
38 | |
39 | template<unsigned count, unsigned N, class E> SIMDPP_INL |
40 | uint8<N,expr_empty> shift_l(const uint8<N,E>& a); |
41 | template<unsigned count, unsigned N, class E> SIMDPP_INL |
42 | uint16<N,expr_empty> shift_l(const uint16<N,E>& a); |
43 | template<unsigned count, unsigned N, class E> SIMDPP_INL |
44 | uint32<N,expr_empty> shift_l(const uint32<N,E>& a); |
45 | template<unsigned count, unsigned N, class E> SIMDPP_INL |
46 | uint64<N,expr_empty> shift_l(const uint64<N,E>& a); |
47 | |
48 | template<unsigned N, class E> SIMDPP_INL |
49 | int8<N,expr_empty> shift_r(const int8<N,E>& a, unsigned count); |
50 | template<unsigned N, class E> SIMDPP_INL |
51 | int16<N,expr_empty> shift_r(const int16<N,E>& a, unsigned count); |
52 | template<unsigned N, class E> SIMDPP_INL |
53 | int32<N,expr_empty> shift_r(const int32<N,E>& a, unsigned count); |
54 | template<unsigned N, class E> SIMDPP_INL |
55 | int64<N,expr_empty> shift_r(const int64<N,E>& a, unsigned count); |
56 | |
57 | template<unsigned N, class E> SIMDPP_INL |
58 | int8<N,expr_empty> shift_r(const int8<N,E>& a, const uint8<N,E>& count); |
59 | template<unsigned N, class E> SIMDPP_INL |
60 | int16<N,expr_empty> shift_r(const int16<N,E>& a, const uint16<N,E>& count); |
61 | template<unsigned N, class E> SIMDPP_INL |
62 | int32<N,expr_empty> shift_r(const int32<N,E>& a, const uint32<N,E>& count); |
63 | |
64 | template<unsigned count, unsigned N, class E> SIMDPP_INL |
65 | int8<N,expr_empty> shift_r(const int8<N,E>& a); |
66 | template<unsigned count, unsigned N, class E> SIMDPP_INL |
67 | int16<N,expr_empty> shift_r(const int16<N,E>& a); |
68 | template<unsigned count, unsigned N, class E> SIMDPP_INL |
69 | int32<N,expr_empty> shift_r(const int32<N,E>& a); |
70 | template<unsigned count, unsigned N, class E> SIMDPP_INL |
71 | int64<N,expr_empty> shift_r(const int64<N,E>& a); |
72 | |
73 | template<unsigned N, class E> SIMDPP_INL |
74 | uint8<N,expr_empty> shift_r(const uint8<N,E>& a, unsigned count); |
75 | template<unsigned N, class E> SIMDPP_INL |
76 | uint16<N,expr_empty> shift_r(const uint16<N,E>& a, unsigned count); |
77 | template<unsigned N, class E> SIMDPP_INL |
78 | uint32<N,expr_empty> shift_r(const uint32<N,E>& a, unsigned count); |
79 | template<unsigned N, class E> SIMDPP_INL |
80 | uint64<N,expr_empty> shift_r(const uint64<N,E>& a, unsigned count); |
81 | |
82 | template<unsigned N, class E> SIMDPP_INL |
83 | uint8<N,expr_empty> shift_r(const uint8<N,E>& a, const uint8<N,E>& count); |
84 | template<unsigned N, class E> SIMDPP_INL |
85 | uint16<N,expr_empty> shift_r(const uint16<N,E>& a, const uint16<N,E>& count); |
86 | template<unsigned N, class E> SIMDPP_INL |
87 | uint32<N,expr_empty> shift_r(const uint32<N,E>& a, const uint32<N,E>& count); |
88 | |
89 | template<unsigned count, unsigned N, class E> SIMDPP_INL |
90 | uint8<N,expr_empty> shift_r(const uint8<N,E>& a); |
91 | template<unsigned count, unsigned N, class E> SIMDPP_INL |
92 | uint16<N,expr_empty> shift_r(const uint16<N,E>& a); |
93 | template<unsigned count, unsigned N, class E> SIMDPP_INL |
94 | uint32<N,expr_empty> shift_r(const uint32<N,E>& a); |
95 | template<unsigned count, unsigned N, class E> SIMDPP_INL |
96 | uint64<N,expr_empty> shift_r(const uint64<N,E>& a); |
97 | |
98 | } // namespace SIMDPP_ARCH_NAMESPACE |
99 | } // namespace simdpp |
100 | |
101 | #endif |
102 | |
103 | |