@@ -137,7 +137,7 @@ namespace xsimd
137137 }
138138
139139 // bitwise_andnot
140- template <class A , class T , class = typename std::enable_if<std::is_integral <T>::value, void >::type>
140+ template <class A , class T , class = typename std::enable_if<std::is_scalar <T>::value, void >::type>
141141 XSIMD_INLINE batch<T, A> bitwise_andnot (batch<T, A> const & self, batch<T, A> const & other, requires_arch<altivec>) noexcept
142142 {
143143 return self.data & ~other.data ;
@@ -149,7 +149,7 @@ namespace xsimd
149149 }
150150
151151 // bitwise_lshift
152- template <class A , class T , class = typename std::enable_if<std::is_integral <T>::value, void >::type>
152+ template <class A , class T , class = typename std::enable_if<std::is_scalar <T>::value, void >::type>
153153 XSIMD_INLINE batch<T, A> bitwise_lshift (batch<T, A> const & self, int32_t other, requires_arch<altivec>) noexcept
154154 {
155155 using shift_type = as_unsigned_integer_t <T>;
@@ -182,7 +182,7 @@ namespace xsimd
182182 }
183183
184184 // bitwise_rshift
185- template <class A , class T , class = typename std::enable_if<std::is_integral <T>::value, void >::type>
185+ template <class A , class T , class = typename std::enable_if<std::is_scalar <T>::value, void >::type>
186186 XSIMD_INLINE batch<T, A> bitwise_rshift (batch<T, A> const & self, int32_t other, requires_arch<altivec>) noexcept
187187 {
188188 using shift_type = as_unsigned_integer_t <T>;
@@ -219,19 +219,28 @@ namespace xsimd
219219 // store_complex
220220 namespace detail
221221 {
222- // Override these methods in SSE-based archs, no need to override store_aligned / store_unaligned
223222 // complex_low
224223 template <class A >
225224 XSIMD_INLINE batch<float , A> complex_low (batch<std::complex <float >, A> const & self, requires_arch<altivec>) noexcept
226225 {
227226 return vec_mergel (self.real ().data , self.imag ().data );
228227 }
228+ template <class A >
229+ XSIMD_INLINE batch<double , A> complex_low (batch<std::complex <double >, A> const & self, requires_arch<altivec>) noexcept
230+ {
231+ return vec_mergel (self.real ().data , self.imag ().data );
232+ }
229233 // complex_high
230234 template <class A >
231235 XSIMD_INLINE batch<float , A> complex_high (batch<std::complex <float >, A> const & self, requires_arch<altivec>) noexcept
232236 {
233237 return vec_mergeh (self.real ().data , self.imag ().data );
234238 }
239+ template <class A >
240+ XSIMD_INLINE batch<double , A> complex_high (batch<std::complex <double >, A> const & self, requires_arch<altivec>) noexcept
241+ {
242+ return vec_mergeh (self.real ().data , self.imag ().data );
243+ }
235244 }
236245
237246 // decr_if
0 commit comments