IPSDK  4_1_0_2
IPSDK : Image Processing Software Development Kit
BitwiseNotRegImpl.h
Go to the documentation of this file.
1 // BitwiseNotRegImpl.h:
3 // -------------------
4 //
14 
15 #ifndef __IPSDKUTIL_INSTRUCTIONSET_LOGICAL_DETAIL_AVX_BITWISENOTREGIMPL_H__
16 #define __IPSDKUTIL_INSTRUCTIONSET_LOGICAL_DETAIL_AVX_BITWISENOTREGIMPL_H__
17 
21 
22 namespace ipsdk {
23 namespace simd {
24 namespace detail {
25 
28 
29 IPSDK_FORCEINLINE
30 AvxType<ipReal32>::Type
31 BitwiseNotReg<eInstructionSet::eIS_Avx, ipReal32>::act(
32  const AvxType<ipReal32>::Type& in)
33 {
34  AvxType<ipReal32>::Type out;
35  BitwiseNotReg<eInstructionSet::eIS_Avx, ipReal32>::act(in, out);
36  return out;
37 }
38 
39 
40 IPSDK_FORCEINLINE
41 void
42 BitwiseNotReg<eInstructionSet::eIS_Avx, ipReal32>::act(
43  const AvxType<ipReal32>::Type& in,
44  AvxType<ipReal32>::Type& out)
45 {
46  AvxType<ipReal32>::Type allbits;
47  const ipUInt32 scalarAllBits = 0xFFFFFFFF;
48  AssignReg<eInstructionSet::eIS_Avx, ipReal32>::act(allbits, *reinterpret_cast<const ipReal32*>(&scalarAllBits));
49  out = _mm256_xor_ps(in, allbits);
50 }
51 
52 IPSDK_FORCEINLINE
53 AvxType<ipReal64>::Type
54 BitwiseNotReg<eInstructionSet::eIS_Avx, ipReal64>::act(
55  const AvxType<ipReal64>::Type& in)
56 {
57  AvxType<ipReal64>::Type out;
58  BitwiseNotReg<eInstructionSet::eIS_Avx, ipReal64>::act(in, out);
59  return out;
60 }
61 
62 
63 IPSDK_FORCEINLINE
64 void
65 BitwiseNotReg<eInstructionSet::eIS_Avx, ipReal64>::act(
66  const AvxType<ipReal64>::Type& in,
67  AvxType<ipReal64>::Type& out)
68 {
69  AvxType<ipReal64>::Type allbits;
70  const ipUInt64 scalarAllBits = 0xFFFFFFFFFFFFFFFF;
71  AssignReg<eInstructionSet::eIS_Avx, ipReal64>::act(allbits, *reinterpret_cast<const ipReal64*>(&scalarAllBits));
72  out = _mm256_xor_pd(in, allbits);
73 }
76 
77 } // end of namespace detail
78 } // end of namespace simd
79 } // end of namespace ipsdk
80 
81 
82 #endif // __IPSDKUTIL_INSTRUCTIONSET_LOGICAL_DETAIL_AVX_BITWISENOTREGIMPL_H__
Functions to convert from 128 (resp. 256) bits registers to 256 (resp. 128) bits registers.
Main namespace for IPSDK library.
Definition: AlgorithmFunctionEfficiency.h:22
uint64_t ipUInt64
Base types definition.
Definition: BaseTypes.h:55
uint32_t ipUInt32
Base types definition.
Definition: BaseTypes.h:53