2#ifdef __ARM_FEATURE_MVE
3#include "argon/utility.hpp"
4#include "multivector.hpp"
9void store1_x2(Scalar_t<T>* ptr, MultiVector_t<T, 2> value) {
10 constexpr size_t lanes =
sizeof(T) /
sizeof(Scalar_t<T>);
11 argon::utility::constexpr_for<0, 2, 1>([&](
auto i) {
17void store1_x3(Scalar_t<T>* ptr, MultiVector_t<T, 3> value) {
18 constexpr size_t lanes =
sizeof(T) /
sizeof(Scalar_t<T>);
19 argon::utility::constexpr_for<0, 3, 1>([&](
auto i) {
25void store1_x4(Scalar_t<T>* ptr, MultiVector_t<T, 4> value) {
26 constexpr size_t lanes =
sizeof(T) /
sizeof(Scalar_t<T>);
27 argon::utility::constexpr_for<0, 4, 1>([&](
auto i) {
33template <
size_t LaneIndex,
typename T>
34void store2_lane(Scalar_t<T>* ptr, MultiVector_t<T, 2> value) {
35 constexpr size_t lanes =
sizeof(T) /
sizeof(Scalar_t<T>);
36 argon::utility::constexpr_for<0, 2, 1>([&](
auto i) {
37 *ptr = value[i][LaneIndex];
42template <
size_t LaneIndex,
typename T>
43void store3_lane(Scalar_t<T>* ptr, MultiVector_t<T, 3> value) {
44 constexpr size_t lanes =
sizeof(T) /
sizeof(Scalar_t<T>);
45 argon::utility::constexpr_for<0, 3, 1>([&](
auto i) {
46 *ptr = value[i][LaneIndex];
51template <
size_t LaneIndex,
typename T>
52void store4_lane(Scalar_t<T>* ptr, MultiVector_t<T, 4> value) {
53 constexpr size_t lanes =
sizeof(T) /
sizeof(Scalar_t<T>);
54 argon::utility::constexpr_for<0, 4, 1>([&](
auto i) {
55 *ptr = value[i][LaneIndex];