Commit 175766ec authored by Evan Nemerson's avatar Evan Nemerson

neon/ld3: load entire vectors sequentially

This should just be slightly easier (less difficult) for compilers
since they may be able to convert this to a gather operation on
some architectures.  I'm not going to hold my breath, though.
parent 1dac64c4
...@@ -29,6 +29,7 @@ ...@@ -29,6 +29,7 @@
#define SIMDE_ARM_NEON_LD3_H #define SIMDE_ARM_NEON_LD3_H
#include "types.h" #include "types.h"
#include "ld1.h"
HEDLEY_DIAGNOSTIC_PUSH HEDLEY_DIAGNOSTIC_PUSH
SIMDE_DISABLE_UNWANTED_DIAGNOSTICS SIMDE_DISABLE_UNWANTED_DIAGNOSTICS
...@@ -45,12 +46,21 @@ simde_vld3_f32(simde_float32 const *ptr) { ...@@ -45,12 +46,21 @@ simde_vld3_f32(simde_float32 const *ptr) {
#if defined(SIMDE_ARM_NEON_A32V7_NATIVE) #if defined(SIMDE_ARM_NEON_A32V7_NATIVE)
return vld3_f32(ptr); return vld3_f32(ptr);
#else #else
simde_float32x2_private a_[3]; simde_float32x2_private r_[3];
for (size_t i = 0; i < (sizeof(simde_float32x2_t) / sizeof(*ptr)) * 3 ; i++) {
a_[i % 3].values[i / 3] = ptr[i]; for (size_t i = 0; i < (sizeof(r_) / sizeof(r_[0])); i++) {
for (size_t j = 0 ; j < (sizeof(r_[0].values) / sizeof(r_[0].values[0])) ; j++) {
r_[i].values[j] = ptr[i + (j * (sizeof(r_) / sizeof(r_[0])))];
}
} }
simde_float32x2x3_t s_ = { { simde_float32x2_from_private(a_[0]), simde_float32x2_from_private(a_[1]), simde_float32x2_from_private(a_[2]) } };
return (s_); simde_float32x2x3_t r = { {
simde_float32x2_from_private(r_[0]),
simde_float32x2_from_private(r_[1]),
simde_float32x2_from_private(r_[2])
} };
return r;
#endif #endif
} }
#if defined(SIMDE_ARM_NEON_A32V7_ENABLE_NATIVE_ALIASES) #if defined(SIMDE_ARM_NEON_A32V7_ENABLE_NATIVE_ALIASES)
...@@ -64,12 +74,21 @@ simde_vld3_f64(simde_float64 const *ptr) { ...@@ -64,12 +74,21 @@ simde_vld3_f64(simde_float64 const *ptr) {
#if defined(SIMDE_ARM_NEON_A64V8_NATIVE) #if defined(SIMDE_ARM_NEON_A64V8_NATIVE)
return vld3_f64(ptr); return vld3_f64(ptr);
#else #else
simde_float64x1_private a_[3]; simde_float64x1_private r_[3];
for (size_t i = 0; i < (sizeof(simde_float64x1_t) / sizeof(*ptr)) * 3 ; i++) {
a_[i % 3].values[i / 3] = ptr[i]; for (size_t i = 0; i < (sizeof(r_) / sizeof(r_[0])); i++) {
for (size_t j = 0 ; j < (sizeof(r_[0].values) / sizeof(r_[0].values[0])) ; j++) {
r_[i].values[j] = ptr[i + (j * (sizeof(r_) / sizeof(r_[0])))];
}
} }
simde_float64x1x3_t s_ = { { simde_float64x1_from_private(a_[0]), simde_float64x1_from_private(a_[1]), simde_float64x1_from_private(a_[2]) } };
return s_; simde_float64x1x3_t r = { {
simde_float64x1_from_private(r_[0]),
simde_float64x1_from_private(r_[1]),
simde_float64x1_from_private(r_[2])
} };
return r;
#endif #endif
} }
#if defined(SIMDE_ARM_NEON_A64V8_ENABLE_NATIVE_ALIASES) #if defined(SIMDE_ARM_NEON_A64V8_ENABLE_NATIVE_ALIASES)
...@@ -83,12 +102,21 @@ simde_vld3_s8(int8_t const *ptr) { ...@@ -83,12 +102,21 @@ simde_vld3_s8(int8_t const *ptr) {
#if defined(SIMDE_ARM_NEON_A32V7_NATIVE) #if defined(SIMDE_ARM_NEON_A32V7_NATIVE)
return vld3_s8(ptr); return vld3_s8(ptr);
#else #else
simde_int8x8_private a_[3]; simde_int8x8_private r_[3];
for (size_t i = 0; i < (sizeof(simde_int8x8_t) / sizeof(*ptr)) * 3 ; i++) {
a_[i % 3].values[i / 3] = ptr[i]; for (size_t i = 0; i < (sizeof(r_) / sizeof(r_[0])); i++) {
for (size_t j = 0 ; j < (sizeof(r_[0].values) / sizeof(r_[0].values[0])) ; j++) {
r_[i].values[j] = ptr[i + (j * (sizeof(r_) / sizeof(r_[0])))];
}
} }
simde_int8x8x3_t s_ = { { simde_int8x8_from_private(a_[0]), simde_int8x8_from_private(a_[1]), simde_int8x8_from_private(a_[2]) } };
return s_; simde_int8x8x3_t r = { {
simde_int8x8_from_private(r_[0]),
simde_int8x8_from_private(r_[1]),
simde_int8x8_from_private(r_[2])
} };
return r;
#endif #endif
} }
#if defined(SIMDE_ARM_NEON_A32V7_ENABLE_NATIVE_ALIASES) #if defined(SIMDE_ARM_NEON_A32V7_ENABLE_NATIVE_ALIASES)
...@@ -102,12 +130,21 @@ simde_vld3_s16(int16_t const *ptr) { ...@@ -102,12 +130,21 @@ simde_vld3_s16(int16_t const *ptr) {
#if defined(SIMDE_ARM_NEON_A32V7_NATIVE) #if defined(SIMDE_ARM_NEON_A32V7_NATIVE)
return vld3_s16(ptr); return vld3_s16(ptr);
#else #else
simde_int16x4_private a_[3]; simde_int16x4_private r_[3];
for (size_t i = 0; i < (sizeof(simde_int16x4_t) / sizeof(*ptr)) * 3 ; i++) {
a_[i % 3].values[i / 3] = ptr[i]; for (size_t i = 0; i < (sizeof(r_) / sizeof(r_[0])); i++) {
for (size_t j = 0 ; j < (sizeof(r_[0].values) / sizeof(r_[0].values[0])) ; j++) {
r_[i].values[j] = ptr[i + (j * (sizeof(r_) / sizeof(r_[0])))];
}
} }
simde_int16x4x3_t s_ = { { simde_int16x4_from_private(a_[0]), simde_int16x4_from_private(a_[1]), simde_int16x4_from_private(a_[2]) } };
return s_; simde_int16x4x3_t r = { {
simde_int16x4_from_private(r_[0]),
simde_int16x4_from_private(r_[1]),
simde_int16x4_from_private(r_[2])
} };
return r;
#endif #endif
} }
#if defined(SIMDE_ARM_NEON_A32V7_ENABLE_NATIVE_ALIASES) #if defined(SIMDE_ARM_NEON_A32V7_ENABLE_NATIVE_ALIASES)
...@@ -121,12 +158,21 @@ simde_vld3_s32(int32_t const *ptr) { ...@@ -121,12 +158,21 @@ simde_vld3_s32(int32_t const *ptr) {
#if defined(SIMDE_ARM_NEON_A32V7_NATIVE) #if defined(SIMDE_ARM_NEON_A32V7_NATIVE)
return vld3_s32(ptr); return vld3_s32(ptr);
#else #else
simde_int32x2_private a_[3]; simde_int32x2_private r_[3];
for (size_t i = 0; i < (sizeof(simde_int32x2_t) / sizeof(*ptr)) * 3 ; i++) {
a_[i % 3].values[i / 3] = ptr[i]; for (size_t i = 0; i < (sizeof(r_) / sizeof(r_[0])); i++) {
for (size_t j = 0 ; j < (sizeof(r_[0].values) / sizeof(r_[0].values[0])) ; j++) {
r_[i].values[j] = ptr[i + (j * (sizeof(r_) / sizeof(r_[0])))];
}
} }
simde_int32x2x3_t s_ = { { simde_int32x2_from_private(a_[0]), simde_int32x2_from_private(a_[1]), simde_int32x2_from_private(a_[2]) } };
return s_; simde_int32x2x3_t r = { {
simde_int32x2_from_private(r_[0]),
simde_int32x2_from_private(r_[1]),
simde_int32x2_from_private(r_[2])
} };
return r;
#endif #endif
} }
#if defined(SIMDE_ARM_NEON_A32V7_ENABLE_NATIVE_ALIASES) #if defined(SIMDE_ARM_NEON_A32V7_ENABLE_NATIVE_ALIASES)
...@@ -140,12 +186,21 @@ simde_vld3_s64(int64_t const *ptr) { ...@@ -140,12 +186,21 @@ simde_vld3_s64(int64_t const *ptr) {
#if defined(SIMDE_ARM_NEON_A32V7_NATIVE) #if defined(SIMDE_ARM_NEON_A32V7_NATIVE)
return vld3_s64(ptr); return vld3_s64(ptr);
#else #else
simde_int64x1_private a_[3]; simde_int64x1_private r_[3];
for (size_t i = 0; i < (sizeof(simde_int64x1_t) / sizeof(*ptr)) * 3 ; i++) {
a_[i % 3].values[i / 3] = ptr[i]; for (size_t i = 0; i < (sizeof(r_) / sizeof(r_[0])); i++) {
for (size_t j = 0 ; j < (sizeof(r_[0].values) / sizeof(r_[0].values[0])) ; j++) {
r_[i].values[j] = ptr[i + (j * (sizeof(r_) / sizeof(r_[0])))];
}
} }
simde_int64x1x3_t s_ = { { simde_int64x1_from_private(a_[0]), simde_int64x1_from_private(a_[1]), simde_int64x1_from_private(a_[2]) } };
return s_; simde_int64x1x3_t r = { {
simde_int64x1_from_private(r_[0]),
simde_int64x1_from_private(r_[1]),
simde_int64x1_from_private(r_[2])
} };
return r;
#endif #endif
} }
#if defined(SIMDE_ARM_NEON_A64V8_ENABLE_NATIVE_ALIASES) #if defined(SIMDE_ARM_NEON_A64V8_ENABLE_NATIVE_ALIASES)
...@@ -159,12 +214,21 @@ simde_vld3_u8(uint8_t const *ptr) { ...@@ -159,12 +214,21 @@ simde_vld3_u8(uint8_t const *ptr) {
#if defined(SIMDE_ARM_NEON_A32V7_NATIVE) #if defined(SIMDE_ARM_NEON_A32V7_NATIVE)
return vld3_u8(ptr); return vld3_u8(ptr);
#else #else
simde_uint8x8_private a_[3]; simde_uint8x8_private r_[3];
for (size_t i = 0; i < (sizeof(simde_uint8x8_t) / sizeof(*ptr)) * 3 ; i++) {
a_[i % 3].values[i / 3] = ptr[i]; for (size_t i = 0; i < (sizeof(r_) / sizeof(r_[0])); i++) {
for (size_t j = 0 ; j < (sizeof(r_[0].values) / sizeof(r_[0].values[0])) ; j++) {
r_[i].values[j] = ptr[i + (j * (sizeof(r_) / sizeof(r_[0])))];
}
} }
simde_uint8x8x3_t s_ = { { simde_uint8x8_from_private(a_[0]), simde_uint8x8_from_private(a_[1]), simde_uint8x8_from_private(a_[2]) } };
return s_; simde_uint8x8x3_t r = { {
simde_uint8x8_from_private(r_[0]),
simde_uint8x8_from_private(r_[1]),
simde_uint8x8_from_private(r_[2])
} };
return r;
#endif #endif
} }
#if defined(SIMDE_ARM_NEON_A32V7_ENABLE_NATIVE_ALIASES) #if defined(SIMDE_ARM_NEON_A32V7_ENABLE_NATIVE_ALIASES)
...@@ -178,12 +242,21 @@ simde_vld3_u16(uint16_t const *ptr) { ...@@ -178,12 +242,21 @@ simde_vld3_u16(uint16_t const *ptr) {
#if defined(SIMDE_ARM_NEON_A32V7_NATIVE) #if defined(SIMDE_ARM_NEON_A32V7_NATIVE)
return vld3_u16(ptr); return vld3_u16(ptr);
#else #else
simde_uint16x4_private a_[3]; simde_uint16x4_private r_[3];
for (size_t i = 0; i < (sizeof(simde_uint16x4_t) / sizeof(*ptr)) * 3 ; i++) {
a_[i % 3].values[i / 3] = ptr[i]; for (size_t i = 0; i < (sizeof(r_) / sizeof(r_[0])); i++) {
for (size_t j = 0 ; j < (sizeof(r_[0].values) / sizeof(r_[0].values[0])) ; j++) {
r_[i].values[j] = ptr[i + (j * (sizeof(r_) / sizeof(r_[0])))];
}
} }
simde_uint16x4x3_t s_ = { { simde_uint16x4_from_private(a_[0]), simde_uint16x4_from_private(a_[1]), simde_uint16x4_from_private(a_[2]) } };
return s_; simde_uint16x4x3_t r = { {
simde_uint16x4_from_private(r_[0]),
simde_uint16x4_from_private(r_[1]),
simde_uint16x4_from_private(r_[2])
} };
return r;
#endif #endif
} }
#if defined(SIMDE_ARM_NEON_A32V7_ENABLE_NATIVE_ALIASES) #if defined(SIMDE_ARM_NEON_A32V7_ENABLE_NATIVE_ALIASES)
...@@ -197,12 +270,21 @@ simde_vld3_u32(uint32_t const *ptr) { ...@@ -197,12 +270,21 @@ simde_vld3_u32(uint32_t const *ptr) {
#if defined(SIMDE_ARM_NEON_A32V7_NATIVE) #if defined(SIMDE_ARM_NEON_A32V7_NATIVE)
return vld3_u32(ptr); return vld3_u32(ptr);
#else #else
simde_uint32x2_private a_[3]; simde_uint32x2_private r_[3];
for (size_t i = 0; i < (sizeof(simde_uint32x2_t) / sizeof(*ptr)) * 3 ; i++) {
a_[i % 3].values[i / 3] = ptr[i]; for (size_t i = 0; i < (sizeof(r_) / sizeof(r_[0])); i++) {
for (size_t j = 0 ; j < (sizeof(r_[0].values) / sizeof(r_[0].values[0])) ; j++) {
r_[i].values[j] = ptr[i + (j * (sizeof(r_) / sizeof(r_[0])))];
}
} }
simde_uint32x2x3_t s_ = { { simde_uint32x2_from_private(a_[0]), simde_uint32x2_from_private(a_[1]), simde_uint32x2_from_private(a_[2]) } };
return s_; simde_uint32x2x3_t r = { {
simde_uint32x2_from_private(r_[0]),
simde_uint32x2_from_private(r_[1]),
simde_uint32x2_from_private(r_[2])
} };
return r;
#endif #endif
} }
#if defined(SIMDE_ARM_NEON_A32V7_ENABLE_NATIVE_ALIASES) #if defined(SIMDE_ARM_NEON_A32V7_ENABLE_NATIVE_ALIASES)
...@@ -216,12 +298,21 @@ simde_vld3_u64(uint64_t const *ptr) { ...@@ -216,12 +298,21 @@ simde_vld3_u64(uint64_t const *ptr) {
#if defined(SIMDE_ARM_NEON_A32V7_NATIVE) #if defined(SIMDE_ARM_NEON_A32V7_NATIVE)
return vld3_u64(ptr); return vld3_u64(ptr);
#else #else
simde_uint64x1_private a_[3]; simde_uint64x1_private r_[3];
for (size_t i = 0; i < (sizeof(simde_uint64x1_t) / sizeof(*ptr)) * 3 ; i++) {
a_[i % 3].values[i / 3] = ptr[i]; for (size_t i = 0; i < (sizeof(r_) / sizeof(r_[0])); i++) {
for (size_t j = 0 ; j < (sizeof(r_[0].values) / sizeof(r_[0].values[0])) ; j++) {
r_[i].values[j] = ptr[i + (j * (sizeof(r_) / sizeof(r_[0])))];
}
} }
simde_uint64x1x3_t s_ = { { simde_uint64x1_from_private(a_[0]), simde_uint64x1_from_private(a_[1]), simde_uint64x1_from_private(a_[2]) } };
return s_; simde_uint64x1x3_t r = { {
simde_uint64x1_from_private(r_[0]),
simde_uint64x1_from_private(r_[1]),
simde_uint64x1_from_private(r_[2])
} };
return r;
#endif #endif
} }
#if defined(SIMDE_ARM_NEON_A64V8_ENABLE_NATIVE_ALIASES) #if defined(SIMDE_ARM_NEON_A64V8_ENABLE_NATIVE_ALIASES)
...@@ -235,12 +326,21 @@ simde_vld3q_f32(simde_float32 const *ptr) { ...@@ -235,12 +326,21 @@ simde_vld3q_f32(simde_float32 const *ptr) {
#if defined(SIMDE_ARM_NEON_A32V7_NATIVE) #if defined(SIMDE_ARM_NEON_A32V7_NATIVE)
return vld3q_f32(ptr); return vld3q_f32(ptr);
#else #else
simde_float32x4_private a_[3]; simde_float32x4_private r_[3];
for (size_t i = 0; i < (sizeof(simde_float32x4_t) / sizeof(*ptr)) * 3 ; i++) {
a_[i % 3].values[i / 3] = ptr[i]; for (size_t i = 0; i < (sizeof(r_) / sizeof(r_[0])); i++) {
for (size_t j = 0 ; j < (sizeof(r_[0].values) / sizeof(r_[0].values[0])) ; j++) {
r_[i].values[j] = ptr[i + (j * (sizeof(r_) / sizeof(r_[0])))];
}
} }
simde_float32x4x3_t s_ = { { simde_float32x4_from_private(a_[0]), simde_float32x4_from_private(a_[1]), simde_float32x4_from_private(a_[2]) } };
return s_; simde_float32x4x3_t r = { {
simde_float32x4_from_private(r_[0]),
simde_float32x4_from_private(r_[1]),
simde_float32x4_from_private(r_[2])
} };
return r;
#endif #endif
} }
#if defined(SIMDE_ARM_NEON_A32V7_ENABLE_NATIVE_ALIASES) #if defined(SIMDE_ARM_NEON_A32V7_ENABLE_NATIVE_ALIASES)
...@@ -254,12 +354,21 @@ simde_vld3q_f64(simde_float64 const *ptr) { ...@@ -254,12 +354,21 @@ simde_vld3q_f64(simde_float64 const *ptr) {
#if defined(SIMDE_ARM_NEON_A64V8_NATIVE) #if defined(SIMDE_ARM_NEON_A64V8_NATIVE)
return vld3q_f64(ptr); return vld3q_f64(ptr);
#else #else
simde_float64x2_private a_[3]; simde_float64x2_private r_[3];
for (size_t i = 0; i < (sizeof(simde_float64x2_t) / sizeof(*ptr)) * 3 ; i++) {
a_[i % 3].values[i / 3] = ptr[i]; for (size_t i = 0; i < (sizeof(r_) / sizeof(r_[0])); i++) {
for (size_t j = 0 ; j < (sizeof(r_[0].values) / sizeof(r_[0].values[0])) ; j++) {
r_[i].values[j] = ptr[i + (j * (sizeof(r_) / sizeof(r_[0])))];
}
} }
simde_float64x2x3_t s_ = { { simde_float64x2_from_private(a_[0]), simde_float64x2_from_private(a_[1]), simde_float64x2_from_private(a_[2]) } };
return s_; simde_float64x2x3_t r = { {
simde_float64x2_from_private(r_[0]),
simde_float64x2_from_private(r_[1]),
simde_float64x2_from_private(r_[2])
} };
return r;
#endif #endif
} }
#if defined(SIMDE_ARM_NEON_A64V8_ENABLE_NATIVE_ALIASES) #if defined(SIMDE_ARM_NEON_A64V8_ENABLE_NATIVE_ALIASES)
...@@ -273,12 +382,21 @@ simde_vld3q_s8(int8_t const *ptr) { ...@@ -273,12 +382,21 @@ simde_vld3q_s8(int8_t const *ptr) {
#if defined(SIMDE_ARM_NEON_A32V7_NATIVE) #if defined(SIMDE_ARM_NEON_A32V7_NATIVE)
return vld3q_s8(ptr); return vld3q_s8(ptr);
#else #else
simde_int8x16_private a_[3]; simde_int8x16_private r_[3];
for (size_t i = 0; i < (sizeof(simde_int8x16_t) / sizeof(*ptr)) * 3 ; i++) {
a_[i % 3].values[i / 3] = ptr[i]; for (size_t i = 0; i < (sizeof(r_) / sizeof(r_[0])); i++) {
for (size_t j = 0 ; j < (sizeof(r_[0].values) / sizeof(r_[0].values[0])) ; j++) {
r_[i].values[j] = ptr[i + (j * (sizeof(r_) / sizeof(r_[0])))];
}
} }
simde_int8x16x3_t s_ = { { simde_int8x16_from_private(a_[0]), simde_int8x16_from_private(a_[1]), simde_int8x16_from_private(a_[2]) } };
return s_; simde_int8x16x3_t r = { {
simde_int8x16_from_private(r_[0]),
simde_int8x16_from_private(r_[1]),
simde_int8x16_from_private(r_[2])
} };
return r;
#endif #endif
} }
#if defined(SIMDE_ARM_NEON_A32V7_ENABLE_NATIVE_ALIASES) #if defined(SIMDE_ARM_NEON_A32V7_ENABLE_NATIVE_ALIASES)
...@@ -292,12 +410,21 @@ simde_vld3q_s16(int16_t const *ptr) { ...@@ -292,12 +410,21 @@ simde_vld3q_s16(int16_t const *ptr) {
#if defined(SIMDE_ARM_NEON_A32V7_NATIVE) #if defined(SIMDE_ARM_NEON_A32V7_NATIVE)
return vld3q_s16(ptr); return vld3q_s16(ptr);
#else #else
simde_int16x8_private a_[3]; simde_int16x8_private r_[3];
for (size_t i = 0; i < (sizeof(simde_int16x8_t) / sizeof(*ptr)) * 3 ; i++) {
a_[i % 3].values[i / 3] = ptr[i]; for (size_t i = 0; i < (sizeof(r_) / sizeof(r_[0])); i++) {
for (size_t j = 0 ; j < (sizeof(r_[0].values) / sizeof(r_[0].values[0])) ; j++) {
r_[i].values[j] = ptr[i + (j * (sizeof(r_) / sizeof(r_[0])))];
}
} }
simde_int16x8x3_t s_ = { { simde_int16x8_from_private(a_[0]), simde_int16x8_from_private(a_[1]), simde_int16x8_from_private(a_[2]) } };
return s_; simde_int16x8x3_t r = { {
simde_int16x8_from_private(r_[0]),
simde_int16x8_from_private(r_[1]),
simde_int16x8_from_private(r_[2])
} };
return r;
#endif #endif
} }
#if defined(SIMDE_ARM_NEON_A32V7_ENABLE_NATIVE_ALIASES) #if defined(SIMDE_ARM_NEON_A32V7_ENABLE_NATIVE_ALIASES)
...@@ -311,12 +438,21 @@ simde_vld3q_s32(int32_t const *ptr) { ...@@ -311,12 +438,21 @@ simde_vld3q_s32(int32_t const *ptr) {
#if defined(SIMDE_ARM_NEON_A32V7_NATIVE) #if defined(SIMDE_ARM_NEON_A32V7_NATIVE)
return vld3q_s32(ptr); return vld3q_s32(ptr);
#else #else
simde_int32x4_private a_[3]; simde_int32x4_private r_[3];
for (size_t i = 0; i < (sizeof(simde_int32x4_t) / sizeof(*ptr)) * 3 ; i++) {
a_[i % 3].values[i / 3] = ptr[i]; for (size_t i = 0; i < (sizeof(r_) / sizeof(r_[0])); i++) {
for (size_t j = 0 ; j < (sizeof(r_[0].values) / sizeof(r_[0].values[0])) ; j++) {
r_[i].values[j] = ptr[i + (j * (sizeof(r_) / sizeof(r_[0])))];
}
} }
simde_int32x4x3_t s_ = { { simde_int32x4_from_private(a_[0]), simde_int32x4_from_private(a_[1]), simde_int32x4_from_private(a_[2]) } };
return s_; simde_int32x4x3_t r = { {
simde_int32x4_from_private(r_[0]),
simde_int32x4_from_private(r_[1]),
simde_int32x4_from_private(r_[2])
} };
return r;
#endif #endif
} }
#if defined(SIMDE_ARM_NEON_A32V7_ENABLE_NATIVE_ALIASES) #if defined(SIMDE_ARM_NEON_A32V7_ENABLE_NATIVE_ALIASES)
...@@ -330,12 +466,21 @@ simde_vld3q_s64(int64_t const *ptr) { ...@@ -330,12 +466,21 @@ simde_vld3q_s64(int64_t const *ptr) {
#if defined(SIMDE_ARM_NEON_A64V8_NATIVE) #if defined(SIMDE_ARM_NEON_A64V8_NATIVE)
return vld3q_s64(ptr); return vld3q_s64(ptr);
#else #else
simde_int64x2_private a_[3]; simde_int64x2_private r_[3];
for (size_t i = 0; i < (sizeof(simde_int64x2_t) / sizeof(*ptr)) * 3 ; i++) {
a_[i % 3].values[i / 3] = ptr[i]; for (size_t i = 0; i < (sizeof(r_) / sizeof(r_[0])); i++) {
for (size_t j = 0 ; j < (sizeof(r_[0].values) / sizeof(r_[0].values[0])) ; j++) {
r_[i].values[j] = ptr[i + (j * (sizeof(r_) / sizeof(r_[0])))];
}
} }
simde_int64x2x3_t s_ = { { simde_int64x2_from_private(a_[0]), simde_int64x2_from_private(a_[1]), simde_int64x2_from_private(a_[2]) } };
return s_; simde_int64x2x3_t r = { {
simde_int64x2_from_private(r_[0]),
simde_int64x2_from_private(r_[1]),
simde_int64x2_from_private(r_[2])
} };
return r;
#endif #endif
} }
#if defined(SIMDE_ARM_NEON_A64V8_ENABLE_NATIVE_ALIASES) #if defined(SIMDE_ARM_NEON_A64V8_ENABLE_NATIVE_ALIASES)
...@@ -350,12 +495,21 @@ simde_vld3q_u8(uint8_t const *ptr) { ...@@ -350,12 +495,21 @@ simde_vld3q_u8(uint8_t const *ptr) {
#if defined(SIMDE_ARM_NEON_A32V7_NATIVE) #if defined(SIMDE_ARM_NEON_A32V7_NATIVE)
return vld3q_u8(ptr); return vld3q_u8(ptr);
#else #else
simde_uint8x16_private a_[3]; simde_uint8x16_private r_[3];
for (size_t i = 0; i < (sizeof(simde_uint8x16_t) / sizeof(*ptr)) * 3 ; i++) {
a_[i % 3].values[i / 3] = ptr[i]; for (size_t i = 0; i < (sizeof(r_) / sizeof(r_[0])); i++) {
for (size_t j = 0 ; j < (sizeof(r_[0].values) / sizeof(r_[0].values[0])) ; j++) {
r_[i].values[j] = ptr[i + (j * (sizeof(r_) / sizeof(r_[0])))];
}
} }
simde_uint8x16x3_t s_ = { { simde_uint8x16_from_private(a_[0]), simde_uint8x16_from_private(a_[1]), simde_uint8x16_from_private(a_[2]) } };
return s_; simde_uint8x16x3_t r = { {
simde_uint8x16_from_private(r_[0]),
simde_uint8x16_from_private(r_[1]),
simde_uint8x16_from_private(r_[2])
} };
return r;
#endif #endif
} }
#if defined(SIMDE_ARM_NEON_A32V7_ENABLE_NATIVE_ALIASES) #if defined(SIMDE_ARM_NEON_A32V7_ENABLE_NATIVE_ALIASES)
...@@ -369,12 +523,21 @@ simde_vld3q_u16(uint16_t const *ptr) { ...@@ -369,12 +523,21 @@ simde_vld3q_u16(uint16_t const *ptr) {
#if defined(SIMDE_ARM_NEON_A32V7_NATIVE) #if defined(SIMDE_ARM_NEON_A32V7_NATIVE)
return vld3q_u16(ptr); return vld3q_u16(ptr);
#else #else
simde_uint16x8_private a_[3]; simde_uint16x8_private r_[3];
for (size_t i = 0; i < (sizeof(simde_uint16x8_t) / sizeof(*ptr)) * 3 ; i++) {
a_[i % 3].values[i / 3] = ptr[i]; for (size_t i = 0; i < (sizeof(r_) / sizeof(r_[0])); i++) {
for (size_t j = 0 ; j < (sizeof(r_[0].values) / sizeof(r_[0].values[0])) ; j++) {
r_[i].values[j] = ptr[i + (j * (sizeof(r_) / sizeof(r_[0])))];
}
} }
simde_uint16x8x3_t s_ = { { simde_uint16x8_from_private(a_[0]), simde_uint16x8_from_private(a_[1]), simde_uint16x8_from_private(a_[2]) } };
return s_; simde_uint16x8x3_t r = { {
simde_uint16x8_from_private(r_[0]),
simde_uint16x8_from_private(r_[1]),
simde_uint16x8_from_private(r_[2])
} };
return r;
#endif #endif
} }
#if defined(SIMDE_ARM_NEON_A32V7_ENABLE_NATIVE_ALIASES) #if defined(SIMDE_ARM_NEON_A32V7_ENABLE_NATIVE_ALIASES)
...@@ -388,12 +551,21 @@ simde_vld3q_u32(uint32_t const *ptr) { ...@@ -388,12 +551,21 @@ simde_vld3q_u32(uint32_t const *ptr) {
#if defined(SIMDE_ARM_NEON_A32V7_NATIVE) #if defined(SIMDE_ARM_NEON_A32V7_NATIVE)
return vld3q_u32(ptr); return vld3q_u32(ptr);
#else #else
simde_uint32x4_private a_[3]; simde_uint32x4_private r_[3];
for (size_t i = 0; i < (sizeof(simde_uint32x4_t) / sizeof(*ptr)) * 3 ; i++) {
a_[i % 3].values[i / 3] = ptr[i]; for (size_t i = 0; i < (sizeof(r_) / sizeof(r_[0])); i++) {
for (size_t j = 0 ; j < (sizeof(r_[0].values) / sizeof(r_[0].values[0])) ; j++) {
r_[i].values[j] = ptr[i + (j * (sizeof(r_) / sizeof(r_[0])))];
}
} }
simde_uint32x4x3_t s_ = { { simde_uint32x4_from_private(a_[0]), simde_uint32x4_from_private(a_[1]), simde_uint32x4_from_private(a_[2]) } };
return s_; simde_uint32x4x3_t r = { {
simde_uint32x4_from_private(r_[0]),
simde_uint32x4_from_private(r_[1]),
simde_uint32x4_from_private(r_[2])
} };
return r;
#endif #endif
} }
#if defined(SIMDE_ARM_NEON_A32V7_ENABLE_NATIVE_ALIASES) #if defined(SIMDE_ARM_NEON_A32V7_ENABLE_NATIVE_ALIASES)
...@@ -407,12 +579,21 @@ simde_vld3q_u64(uint64_t const *ptr) { ...@@ -407,12 +579,21 @@ simde_vld3q_u64(uint64_t const *ptr) {
#if defined(SIMDE_ARM_NEON_A64V8_NATIVE) #if defined(SIMDE_ARM_NEON_A64V8_NATIVE)
return vld3q_u64(ptr); return vld3q_u64(ptr);
#else #else
simde_uint64x2_private a_[3]; simde_uint64x2_private r_[3];
for (size_t i = 0; i < (sizeof(simde_uint64x2_t) / sizeof(*ptr)) * 3 ; i++) {
a_[i % 3].values[i / 3] = ptr[i]; for (size_t i = 0; i < (sizeof(r_) / sizeof(r_[0])); i++) {
for (size_t j = 0 ; j < (sizeof(r_[0].values) / sizeof(r_[0].values[0])) ; j++) {
r_[i].values[j] = ptr[i + (j * (sizeof(r_) / sizeof(r_[0])))];
}
} }
simde_uint64x2x3_t s_ = { { simde_uint64x2_from_private(a_[0]), simde_uint64x2_from_private(a_[1]), simde_uint64x2_from_private(a_[2]) } };
return s_; simde_uint64x2x3_t r = { {
simde_uint64x2_from_private(r_[0]),
simde_uint64x2_from_private(r_[1]),
simde_uint64x2_from_private(r_[2])
} };
return r;
#endif #endif
} }
#if defined(SIMDE_ARM_NEON_A64V8_ENABLE_NATIVE_ALIASES) #if defined(SIMDE_ARM_NEON_A64V8_ENABLE_NATIVE_ALIASES)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment