8namespace native::detail::arm_constant {
10 template<
class V>
constexpr auto lanes(V value)
noexcept {
11 using T =
typename V::value_type;
12 auto physical = __builtin_bit_cast(std::array<T,
sizeof(
typename V::native_type) /
sizeof(T)>, value.to_native());
13 std::array<T, V::lanes> result{};
14 for (
unsigned i = 0; i < V::lanes; ++i) result[i] = physical[i];
18 template<
class V,
class T, std::
size_t N>
19 constexpr V pack(std::array<T, N>
const &values)
noexcept {
20 static_assert(N == V::lanes);
21 std::array<T,
sizeof(
typename V::native_type) /
sizeof(T)> physical{};
22 for (
unsigned i = 0; i < N; ++i) physical[i] = values[i];
23 return V::from_native(__builtin_bit_cast(
typename V::native_type, physical));