Skip to content

Commit e837c20

Browse files
WIP
1 parent c79341a commit e837c20

File tree

2 files changed

+16
-0
lines changed

2 files changed

+16
-0
lines changed

include/xsimd/arch/xsimd_emulated.hpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -230,6 +230,13 @@ namespace xsimd
230230
return r;
231231
}
232232

233+
// first
234+
template <class A, class T, size_t N = 8 * sizeof(T) * batch<T, A>::size>
235+
T XSIMD_INLINE first(batch<T, A> const& self, requires_arch<emulated<N>>) noexcept
236+
{
237+
return self.data[0];
238+
}
239+
233240
#if 0
234241
// count
235242
template <class A, class T, size_t N = 8 * sizeof(T) * batch<T, A>::size>

include/xsimd/arch/xsimd_sve.hpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818

1919
#include "../types/xsimd_sve_register.hpp"
2020

21+
#include <arm_neon_sve_bridge.h>
22+
2123
namespace xsimd
2224
{
2325
template <typename T, class A, T... Values>
@@ -949,6 +951,13 @@ namespace xsimd
949951
return svsel(index_predicate, broadcast<A, T>(val, sve {}), arg);
950952
}
951953

954+
// first
955+
template <class A, class T, typename std::enable_if<std::is_scalar<T>::value, void>::type>
956+
XSIMD_INLINE T first(batch<T, A> const& self, requires_arch<sve>) noexcept
957+
{
958+
return first(svget_neon(self));
959+
}
960+
952961
// all
953962
template <class A, class T, detail::sve_enable_all_t<T> = 0>
954963
XSIMD_INLINE bool all(batch_bool<T, A> const& arg, requires_arch<sve>) noexcept

0 commit comments

Comments
 (0)