IPSDK  4_1_0_2
IPSDK : Image Processing Software Development Kit
GatherRegImpl.h
1 // GatherRegImpl.h:
3 // ------------
4 //
14 
15 #ifndef __IPSDKUTIL_INSTRUCTIONSET_DETAIL_AVX_GATHERREGIMPL_H__
16 #define __IPSDKUTIL_INSTRUCTIONSET_DETAIL_AVX_GATHERREGIMPL_H__
17 
22 
23 namespace ipsdk {
24 namespace simd {
25 namespace detail {
26 
29 
30 // gather implementation for AVX for real32 type
31 IPSDK_FORCEINLINE
32 void
33 GatherReg<eInstructionSet::eIS_Avx, ipReal32>::act(
34  const ipReal32* baseAddress, const ipUInt32* indexes,
35  AvxType<ipReal32>::Type& out)
36 {
37  out = _mm256_set_ps(*(baseAddress + indexes[7]),
38  *(baseAddress + indexes[6]),
39  *(baseAddress + indexes[5]),
40  *(baseAddress + indexes[4]),
41  *(baseAddress + indexes[3]),
42  *(baseAddress + indexes[2]),
43  *(baseAddress + indexes[1]),
44  *(baseAddress + indexes[0]));
45 }
46 
47 // gather implementation for AVX for real32 type
48 IPSDK_FORCEINLINE
49 void
50 GatherReg<eInstructionSet::eIS_Avx, ipReal32>::act(
51  const ipReal32* baseAddress, const AvxType<ipUInt32>::Type& regIdx,
52  AvxType<ipReal32>::Type& out)
53 {
54  ipUInt32 indexes[8];
55  UnloadReg<eInstructionSet::eIS_Avx, ipUInt32>::act(regIdx, indexes);
56  out = _mm256_set_ps(*(baseAddress + indexes[7]),
57  *(baseAddress + indexes[6]),
58  *(baseAddress + indexes[5]),
59  *(baseAddress + indexes[4]),
60  *(baseAddress + indexes[3]),
61  *(baseAddress + indexes[2]),
62  *(baseAddress + indexes[1]),
63  *(baseAddress + indexes[0]));
64 }
65 
68 
69 } // end of namespace detail
70 } // end of namespace simd
71 } // end of namespace ipsdk
72 
73 #endif // __IPSDKUTIL_INSTRUCTIONSET_DETAIL_AVX_GATHERREGIMPL_H__
Defines the IPSDK_FORCEINLINE.
Main namespace for IPSDK library.
Definition: AlgorithmFunctionEfficiency.h:22
Definition of import/export macro for library.
unload function; unloads a pack into a memory buffer
float ipReal32
Base types definition.
Definition: BaseTypes.h:56
uint32_t ipUInt32
Base types definition.
Definition: BaseTypes.h:53