IPSDK  4_1_0_2
IPSDK : Image Processing Software Development Kit
LoadRegImpl.h
1 // LoadReg.h:
3 // ------------
4 //
14 
15 #ifndef __IPSDKUTIL_INSTRUCTIONSET_DETAIL_AVX2_IMPL_LOADREGIMPL_H__
16 #define __IPSDKUTIL_INSTRUCTIONSET_DETAIL_AVX2_IMPL_LOADREGIMPL_H__
17 
23 
24 namespace ipsdk {
25 namespace simd {
26 namespace detail {
27 
30 
31 template <typename T>
32 typename AvxType<T>::Type
33 LoadReg<
35  T,
36  typename boost::enable_if_c<
37  boost::is_integral<T>::value>::type
38  >::act(const T* pT)
39 {
40  return _mm256_loadu_si256(
41  reinterpret_cast<const typename AvxType<T>::Type*>(pT));
42 }
43 
44 template <typename T>
45 void
46 LoadReg<
48  T,
49  typename boost::enable_if_c<
50  boost::is_integral<T>::value>::type
51  >::act(typename AvxType<T>::Type& reg, const T* pT)
52 {
53  reg = _mm256_loadu_si256(
54  reinterpret_cast<const typename AvxType<T>::Type*>(pT));
55 }
56 
57 AvxType<ipReal32>::Type
58 LoadReg<eInstructionSet::eIS_Avx2, ipReal32>::act(const ipReal32* pT)
59 {
60  return LoadReg<eInstructionSet::eIS_Avx, ipReal32>::act(pT);
61 }
62 
63 void
64 LoadReg<eInstructionSet::eIS_Avx2, ipReal32>::act(AvxType<ipReal32>::Type& reg, const ipReal32* pT)
65 {
66  LoadReg<eInstructionSet::eIS_Avx, ipReal32>::act(reg, pT);
67 }
68 
69 AvxType<ipReal64>::Type
70 LoadReg<eInstructionSet::eIS_Avx2, ipReal64>::act(const ipReal64* pT)
71 {
72  return LoadReg<eInstructionSet::eIS_Avx, ipReal64>::act(pT);
73 }
74 
75 void
76 LoadReg<eInstructionSet::eIS_Avx2, ipReal64>::act(
77  AvxType<ipReal64>::Type& reg,
78  const ipReal64* pT)
79 {
80  LoadReg<eInstructionSet::eIS_Avx, ipReal64>::act(reg, pT);
81 }
82 
85 
86 } // end of namespace detail
87 } // end of namespace simd
88 } // end of namespace ipsdk
89 
90 #endif // __IPSDKUTIL_INSTRUCTIONSET_DETAIL_AVX2_LOADREGIMPL_H__
Defines the IPSDK_FORCEINLINE.
Main namespace for IPSDK library.
Definition: AlgorithmFunctionEfficiency.h:22
double ipReal64
Base types definition.
Definition: BaseTypes.h:57
BasePack class; defines a set of scalars (for instruction set "standard") or registers (for all other...
Advanced Vector Extensions 2.
Definition: InstructionSetTypes.h:48
Predefined types associated to instruction set management.
Definition of import/export macro for library.
float ipReal32
Base types definition.
Definition: BaseTypes.h:56