Skip to content

Commit 0ba11e3

Browse files
WIP
1 parent 2e4cd22 commit 0ba11e3

File tree

1 file changed

+13
-4
lines changed

1 file changed

+13
-4
lines changed

include/xsimd/arch/xsimd_altivec.hpp

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)