1 /*  Copyright (C) 2013-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_EXPR_BIT_AND_H
9 #define LIBSIMDPP_SIMDPP_DETAIL_EXPR_BIT_AND_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 #include <simdpp/core/detail/get_expr_bitwise.h>
17 #include <simdpp/detail/insn/bit_and.h>
18 #include <simdpp/detail/eval_scalar.h>
19 
20 namespace simdpp {
21 namespace SIMDPP_ARCH_NAMESPACE {
22 namespace detail {
23 
24 template<class R, class E1, class E2>
25 struct expr_eval<R, expr_bit_and<E1, E2>> {
26     static SIMDPP_INL R eval(const expr_bit_and<E1, E2>& e)
27     {
28         using E = get_expr_bitwise2_and_impl<E1, E2>;
29         return (R) insn::i_bit_and(
30                 eval_maybe_scalar_bitwise<typename E::v1_final_type, E1>::eval(e.a),
31                 eval_maybe_scalar_bitwise<typename E::v2_final_type, E2>::eval(e.b));
32     }
33 };
34 
35 } // namespace detail
36 } // namespace SIMDPP_ARCH_NAMESPACE
37 } // namespace simdpp
38 
39 #endif
40