IPSDK  4_1_0_2
IPSDK : Image Processing Software Development Kit
UniformRandomLCGPack.h
Go to the documentation of this file.
1 // UniformRandomLCGPack.h:
3 // -------------------
4 //
14 
15 #ifndef __IPSDKUTIL_INSTRUCTIONSET_ARITHMETIC_DETAIL_SSE2_UNIFORMRANDOMLCGPACK_H__
16 #define __IPSDKUTIL_INSTRUCTIONSET_ARITHMETIC_DETAIL_SSE2_UNIFORMRANDOMLCGPACK_H__
17 
23 
24 namespace ipsdk {
25 namespace simd {
26 namespace detail {
27 
30 
31 template <typename T>
33  typename boost::enable_if_c<sizeof(T) == 1>::type>
34 {
35  static
36  IPSDK_FORCEINLINE
38  act(const typename RegType<eInstructionSet::eIS_Sse2, typename UniformRandomLCGReg<eInstructionSet::eIS_Sse2, T>::FloatType>::Type& rRangeMultiplier,
41  {
43  out._val[0] =
45  rRangeMultiplier, rRangeOffset, rSeed);
46  return out;
47  }
48 };
49 
50 template <typename T>
52  typename boost::enable_if_c<sizeof(T) == 2>::type>
53 {
54  static
55  IPSDK_FORCEINLINE
57  act(const typename RegType<eInstructionSet::eIS_Sse2, typename UniformRandomLCGReg<eInstructionSet::eIS_Sse2, T>::FloatType>::Type& rRangeMultiplier,
60  {
62  out._val[0] =
64  rRangeMultiplier, rRangeOffset, rSeed);
65  out._val[1] =
67  rRangeMultiplier, rRangeOffset, rSeed);
68  return out;
69  }
70 };
71 
72 template <typename T>
74  typename boost::enable_if_c<sizeof(T) == 4>::type>
75 {
76  static
77  IPSDK_FORCEINLINE
79  act(const typename RegType<eInstructionSet::eIS_Sse2, typename UniformRandomLCGReg<eInstructionSet::eIS_Sse2, T>::FloatType>::Type& rRangeMultiplier,
82  {
84  out._val[0] =
86  rRangeMultiplier, rRangeOffset, rSeed);
87  out._val[1] =
89  rRangeMultiplier, rRangeOffset, rSeed);
90  out._val[2] =
92  rRangeMultiplier, rRangeOffset, rSeed);
93  out._val[3] =
95  rRangeMultiplier, rRangeOffset, rSeed);
96  return out;
97  }
98 };
99 
100 template <typename T>
102  typename boost::enable_if_c<sizeof(T) == 8>::type>
103 {
104  static
105  IPSDK_FORCEINLINE
107  act(const typename RegType<eInstructionSet::eIS_Sse2, typename UniformRandomLCGReg<eInstructionSet::eIS_Sse2, T>::FloatType>::Type& rRangeMultiplier,
110  {
112  out._val[0] =
114  rRangeMultiplier, rRangeOffset, rSeed);
115  out._val[1] =
117  rRangeMultiplier, rRangeOffset, rSeed);
118  out._val[2] =
120  rRangeMultiplier, rRangeOffset, rSeed);
121  out._val[3] =
123  rRangeMultiplier, rRangeOffset, rSeed);
124  out._val[4] =
126  rRangeMultiplier, rRangeOffset, rSeed);
127  out._val[5] =
129  rRangeMultiplier, rRangeOffset, rSeed);
130  out._val[6] =
132  rRangeMultiplier, rRangeOffset, rSeed);
133  out._val[7] =
135  rRangeMultiplier, rRangeOffset, rSeed);
136  return out;
137  }
138 };
139 
142 
143 } // end of namespace detail
144 } // end of namespace simd
145 } // end of namespace ipsdk
146 
147 #endif // __IPSDKUTIL_INSTRUCTIONSET_ARITHMETIC_DETAIL_SSE2_UNIFORMRANDOMLCGPACK_H__
Defines the IPSDK_FORCEINLINE.
Main namespace for IPSDK library.
Definition: AlgorithmFunctionEfficiency.h:22
BasePack class; defines a set of scalars (for instruction set "standard") or registers (for all other...
eInstructionSet
Enumerate for processor instruction set description.
Definition: InstructionSetTypes.h:31
Definition: UniformRandomLCGReg.h:29
specialization of ipsdk::simd::detail::UniformRandomLCGReg structure for SSE2 instruction set ...
Definition of import/export macro for library.
Streaming SIMD Extensions 2.
Definition: InstructionSetTypes.h:36
AddPack<eInstructionSet::domain instructionSet, typename TIn1, typename TIn2, typename Enable=void> s...
Definition: RegType.h:29
Definition: UniformRandomLCGPack.h:37