AI Engine API User Guide (AIE) 2022.1
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages Concepts
expr.hpp File Reference

Expression templates types. More...

Detailed Description

Expression templates types.

#include "aie_types.hpp"

Classes

struct  aie::binary_op< Parent1, Parent2, Operation::Max >
 
struct  aie::binary_op< Parent1, Parent2, Operation::Min >
 
struct  aie::binary_op< Parent1, Parent2, Operation::Sign >
 
struct  aie::binary_op_common< Parent1, Parent2, Op >
 
struct  aie::is_accum_op< T >
 
struct  aie::is_accum_op< binary_op< Parent1, Parent2, Op > >
 
struct  aie::is_accum_op< unary_op< Parent, Op > >
 
struct  aie::is_binary_op< T >
 
struct  aie::is_binary_op< binary_op< Parent1, Parent2, Op > >
 
struct  aie::is_complex_op< T >
 
struct  aie::is_complex_op< binary_op< Parent1, Parent2, Op > >
 
struct  aie::is_complex_op< unary_op< Parent, Op > >
 
struct  aie::is_elem_op< T >
 
struct  aie::is_elem_op< binary_op< Parent1, Parent2, Op > >
 
struct  aie::is_elem_op< unary_op< Parent, Op > >
 
struct  aie::is_mmul_op< T >
 
struct  aie::is_real_op< T >
 
struct  aie::is_unary_op< T >
 
struct  aie::is_unary_op< unary_op< Parent, Op > >
 
struct  aie::is_vector_op< T >
 
struct  aie::is_vector_op< binary_op< Parent1, Parent2, Op > >
 
struct  aie::is_vector_op< unary_op< Parent, Op > >
 
struct  aie::op_result_helper< T, Op >
 
struct  aie::op_result_helper< binary_op< Parent1, Parent2, ParentOp >, Op >
 
struct  aie::op_result_helper< Parent, Operation::None >
 
struct  aie::op_result_helper< unaligned_vector_ref< T, Elems, Resource >, Op >
 
struct  aie::op_result_helper< unary_op< Parent, ParentOp >, Op >
 
struct  aie::op_result_helper< vector_elem_const_ref< T, Elems >, Op >
 
struct  aie::op_result_helper< vector_elem_ref< T, Elems >, Op >
 
struct  aie::op_result_helper< vector_ref< T, Elems, Resource >, Op >
 
struct  aie::op_value_type_helper< T >
 
struct  aie::op_value_type_helper< binary_op< Parent1, Parent2, Op > >
 
struct  aie::op_value_type_helper< unaligned_vector_ref< T, Elems, Resource > >
 
struct  aie::op_value_type_helper< unary_op< Parent, Op > >
 
struct  aie::op_value_type_helper< vector< T, Elems > >
 
struct  aie::op_value_type_helper< vector_elem_const_ref< T, Elems > >
 
struct  aie::op_value_type_helper< vector_elem_ref< T, Elems > >
 
struct  aie::op_value_type_helper< vector_ref< T, Elems, Resource > >
 
struct  aie::unary_op< Parent, Operation::Abs >
 
struct  aie::unary_op< Parent, Operation::Acc_Add >
 
struct  aie::unary_op< Parent, Operation::Acc_Sub >
 
struct  aie::unary_op< Parent, Operation::Conj >
 
struct  aie::unary_op< Parent, Operation::None >
 
struct  aie::unary_op_common< Parent, Op >
 

Namespaces

namespace  aie
 

Macros

#define __AIE_API_EXPR__HPP__
 
#define BINARY_OP(op)
  More...
 
#define BINARY_OP_IMPL(op)
  More...
 
#define UNARY_OP(op)
  More...
 
#define UNARY_OP_IMPL(op)
  More...
 

Typedefs

template<typename T , Operation Op>
using aie::op_result_type_t = typename op_result_helper< T, Op >::type
 
template<typename T >
using aie::op_value_type_t = typename op_value_type_helper< aie_dm_resource_remove_t< T > >::type
 

Enumerations

enum class  aie::Operation {
  aie::None , aie::Acc_Add , aie::Acc_Sub , aie::Abs ,
  aie::Conj , aie::Max , aie::Min , aie::Sign
}
 

Class Documentation

◆ aie::op_result_helper

struct aie::op_result_helper
template<typename T, Operation Op>
struct aie::op_result_helper< T, Op >
Class Members
typedef T type

◆ aie::op_result_helper< binary_op< Parent1, Parent2, ParentOp >, Op >

struct aie::op_result_helper< binary_op< Parent1, Parent2, ParentOp >, Op >
template<typename Parent1, typename Parent2, Operation ParentOp, Operation Op>
struct aie::op_result_helper< binary_op< Parent1, Parent2, ParentOp >, Op >
Class Members
typedef typename result_type, Op >::type type

◆ aie::op_result_helper< Parent, Operation::None >

struct aie::op_result_helper< Parent, Operation::None >
template<typename Parent>
struct aie::op_result_helper< Parent, Operation::None >
Class Members
typedef Parent type

◆ aie::op_result_helper< unaligned_vector_ref< T, Elems, Resource >, Op >

struct aie::op_result_helper< unaligned_vector_ref< T, Elems, Resource >, Op >
template<typename T, unsigned Elems, aie_dm_resource Resource, Operation Op>
struct aie::op_result_helper< unaligned_vector_ref< T, Elems, Resource >, Op >
Class Members
typedef vector< T, Elems > type

◆ aie::op_result_helper< unary_op< Parent, ParentOp >, Op >

struct aie::op_result_helper< unary_op< Parent, ParentOp >, Op >
template<typename Parent, Operation ParentOp, Operation Op>
struct aie::op_result_helper< unary_op< Parent, ParentOp >, Op >
Class Members
typedef typename result_type, Op >::type type

◆ aie::op_result_helper< vector_elem_const_ref< T, Elems >, Op >

struct aie::op_result_helper< vector_elem_const_ref< T, Elems >, Op >
template<typename T, unsigned Elems, Operation Op>
struct aie::op_result_helper< vector_elem_const_ref< T, Elems >, Op >
Class Members
typedef T type

◆ aie::op_result_helper< vector_elem_ref< T, Elems >, Op >

struct aie::op_result_helper< vector_elem_ref< T, Elems >, Op >
template<typename T, unsigned Elems, Operation Op>
struct aie::op_result_helper< vector_elem_ref< T, Elems >, Op >
Class Members
typedef T type

◆ aie::op_result_helper< vector_ref< T, Elems, Resource >, Op >

struct aie::op_result_helper< vector_ref< T, Elems, Resource >, Op >
template<typename T, unsigned Elems, aie_dm_resource Resource, Operation Op>
struct aie::op_result_helper< vector_ref< T, Elems, Resource >, Op >
Class Members
typedef vector< T, Elems > type

◆ aie::op_value_type_helper

struct aie::op_value_type_helper
template<typename T>
struct aie::op_value_type_helper< T >
Class Members
typedef T type

◆ aie::op_value_type_helper< binary_op< Parent1, Parent2, Op > >

struct aie::op_value_type_helper< binary_op< Parent1, Parent2, Op > >
template<typename Parent1, typename Parent2, Operation Op>
struct aie::op_value_type_helper< binary_op< Parent1, Parent2, Op > >
Class Members
typedef typename value_type type

◆ aie::op_value_type_helper< unaligned_vector_ref< T, Elems, Resource > >

struct aie::op_value_type_helper< unaligned_vector_ref< T, Elems, Resource > >
template<typename T, unsigned Elems, aie_dm_resource Resource>
struct aie::op_value_type_helper< unaligned_vector_ref< T, Elems, Resource > >
Class Members
typedef typename value_type type

◆ aie::op_value_type_helper< unary_op< Parent, Op > >

struct aie::op_value_type_helper< unary_op< Parent, Op > >
template<typename Parent, Operation Op>
struct aie::op_value_type_helper< unary_op< Parent, Op > >
Class Members
typedef typename value_type type

◆ aie::op_value_type_helper< vector< T, Elems > >

struct aie::op_value_type_helper< vector< T, Elems > >
template<typename T, unsigned Elems>
struct aie::op_value_type_helper< vector< T, Elems > >
Class Members
typedef typename value_type type

◆ aie::op_value_type_helper< vector_elem_const_ref< T, Elems > >

struct aie::op_value_type_helper< vector_elem_const_ref< T, Elems > >
template<typename T, unsigned Elems>
struct aie::op_value_type_helper< vector_elem_const_ref< T, Elems > >
Class Members
typedef typename value_type type

◆ aie::op_value_type_helper< vector_elem_ref< T, Elems > >

struct aie::op_value_type_helper< vector_elem_ref< T, Elems > >
template<typename T, unsigned Elems>
struct aie::op_value_type_helper< vector_elem_ref< T, Elems > >
Class Members
typedef typename value_type type

◆ aie::op_value_type_helper< vector_ref< T, Elems, Resource > >

struct aie::op_value_type_helper< vector_ref< T, Elems, Resource > >
template<typename T, unsigned Elems, aie_dm_resource Resource>
struct aie::op_value_type_helper< vector_ref< T, Elems, Resource > >
Class Members
typedef typename value_type type

Macro Definition Documentation

◆ BINARY_OP

#define BINARY_OP (   op)
Value:
\
template <typename Parent1, typename Parent2> \
struct binary_op<Parent1, Parent2, Operation::op> : public binary_op_common<Parent1, Parent2, Operation::op> \
{ \
using parent1_type = Parent1; \
using parent2_type = Parent2; \
using result_type = op_result_type_t<parent1_type, Operation::op>; \
using value_type = op_value_type_t<result_type>; \
\
using binary_op_common<Parent1, Parent2, Operation::op>::binary_op_common; \
\
result_type operator()() const; \
};

◆ BINARY_OP_IMPL

#define BINARY_OP_IMPL (   op)
Value:
template <typename Parent1, typename Parent2> \
__attribute__((always_inline)) \
typename binary_op<Parent1, Parent2, Operation::op>::result_type binary_op<Parent1, Parent2, Operation::op>::operator()() const

◆ UNARY_OP

#define UNARY_OP (   op)
Value:
template <typename Parent> \
struct unary_op<Parent, Operation::op> : public unary_op_common<Parent, Operation::op> \
{ \
using parent1_type = Parent; \
using result_type = op_result_type_t<parent1_type, Operation::op>; \
using value_type = op_value_type_t<result_type>; \
\
using unary_op_common<Parent, Operation::op>::unary_op_common; \
\
result_type operator()() const; \
};

◆ UNARY_OP_IMPL

#define UNARY_OP_IMPL (   op)
Value:
template <typename Parent> \
__attribute__((always_inline)) \
typename unary_op<Parent, Operation::op>::result_type unary_op<Parent, Operation::op>::operator()() const