Skip to content

Commit 8602e05

Browse files
WIP
1 parent ca1fd74 commit 8602e05

File tree

2 files changed

+19
-8
lines changed

2 files changed

+19
-8
lines changed

include/xsimd/arch/xsimd_altivec.hpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -798,7 +798,8 @@ namespace xsimd
798798
template <class A, class T, class... Values, class = typename std::enable_if<std::is_scalar<T>::value, void>::type>
799799
XSIMD_INLINE batch_bool<T, A> set(batch_bool<T, A> const&, requires_arch<altivec>, Values... values) noexcept
800800
{
801-
return set(batch<T, A>(), A {}, static_cast<T>(values ? -1LL : 0LL)...).data;
801+
static_assert(sizeof...(Values) == batch_bool<T, A>::size, "consistent init");
802+
return typename batch_bool<T, A>::register_type { static_cast<decltype(std::declval<typename batch_bool<T, A>::register_type>()[0])>(values ? -1LL : 0LL)... };
802803
}
803804

804805
// ssub

include/xsimd/types/xsimd_altivec_register.hpp

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -39,12 +39,22 @@ namespace xsimd
3939
namespace types
4040
{
4141

42-
#define XSIMD_DECLARE_SIMD_BOOL_ALTIVEC_REGISTER(T, Tb) \
43-
template <> \
44-
struct get_bool_simd_register<T, altivec> \
45-
{ \
46-
using type = __vector __bool Tb; \
47-
}; \
42+
#define XSIMD_DECLARE_SIMD_BOOL_ALTIVEC_REGISTER(T, Tb) \
43+
template <> \
44+
struct get_bool_simd_register<T, altivec> \
45+
{ \
46+
struct type \
47+
{ \
48+
using register_type = __vector __bool Tb; \
49+
register_type data; \
50+
type() = default; \
51+
type(register_type r) \
52+
: data(r) \
53+
{ \
54+
} \
55+
operator register_type() const noexcept { return data; } \
56+
}; \
57+
}; \
4858
XSIMD_DECLARE_SIMD_REGISTER(T, altivec, __vector T)
4959

5060
XSIMD_DECLARE_SIMD_BOOL_ALTIVEC_REGISTER(signed char, char);
@@ -54,7 +64,7 @@ namespace xsimd
5464
XSIMD_DECLARE_SIMD_BOOL_ALTIVEC_REGISTER(short, short);
5565
XSIMD_DECLARE_SIMD_BOOL_ALTIVEC_REGISTER(unsigned int, int);
5666
XSIMD_DECLARE_SIMD_BOOL_ALTIVEC_REGISTER(int, int);
57-
XSIMD_DECLARE_SIMD_BOOL_ALTIVEC_REGISTER(float, float);
67+
XSIMD_DECLARE_SIMD_BOOL_ALTIVEC_REGISTER(float, int);
5868

5969
#undef XSIMD_DECLARE_SIMD_BOOL_ALTIVEC_REGISTER
6070
}

0 commit comments

Comments
 (0)