10template <
typename T,
int N>
18 static constexpr int size = 1;
27template <
typename T,
int N>
32template <
typename T,
int N>
36 if constexpr (std::is_same_v<T, bool> &&
N > 1) {
42template <
typename,
typename =
void>
53 T{std::rint(in.
value.real()), std::rint(in.
value.imag())}};
61 return T(1.0) /
sqrt(in);
69#define DEFAULT_UNARY(name, op) \
70 template <typename T> \
71 Simd<T, 1> name(Simd<T, 1> in) { \
72 return op(in.value); \
105 return std::real(in.value);
109 return std::imag(in.value);
113 return std::isnan(in.
value);
116#define DEFAULT_BINARY(OP) \
117 template <typename T1, typename T2> \
118 auto operator OP(Simd<T1, 1> a, Simd<T2, 1> b) \
119 ->Simd<decltype(a.value OP b.value), 1> { \
120 return a.value OP b.value; \
122 template <typename T1, typename T2> \
123 auto operator OP(T1 a, Simd<T2, 1> b)->Simd<decltype(a OP b.value), 1> { \
124 return a OP b.value; \
126 template <typename T1, typename T2> \
127 auto operator OP(Simd<T1, 1> a, T2 b)->Simd<decltype(a.value OP b), 1> { \
128 return a.value OP b; \
148 if constexpr (std::is_integral_v<T>) {
151 r = std::remainder(a, b);
153 if constexpr (std::is_signed_v<T>) {
154 if (r != 0 && (r < 0 != b < 0)) {
165 if constexpr (!std::is_integral_v<T>) {
170 return (a > b) ? a : b;
177 if constexpr (!std::is_integral_v<T>) {
182 return (a < b) ? a : b;
189 if constexpr (!std::is_integral_v<T>) {
190 return std::pow(base,
exp);
209#define DEFAULT_COMPARISONS(OP) \
210 template <typename T1, typename T2> \
211 Simd<bool, 1> operator OP(Simd<T1, 1> a, Simd<T2, 1> b) { \
212 return a.value OP b.value; \
214 template <typename T1, typename T2> \
215 Simd<bool, 1> operator OP(T1 a, Simd<T2, 1> b) { \
216 return a OP b.value; \
218 template <typename T1, typename T2> \
219 Simd<bool, 1> operator OP(Simd<T1, 1> a, T2 b) { \
220 return a.value OP b; \
230template <typename MaskT, typename T>
232 return mask.value ? x.value : y.value;
240template <
typename T,
typename U>
246#define DEFAULT_REDUCTION(name, type) \
247 template <typename T> \
248 type name(Simd<T, 1> x) { \
#define DEFAULT_REDUCTION(name, type)
Definition base_simd.h:246
#define DEFAULT_UNARY(name, op)
Definition base_simd.h:69
#define DEFAULT_BINARY(OP)
Definition base_simd.h:116
#define DEFAULT_COMPARISONS(OP)
Definition base_simd.h:209
array std(const array &a, bool keepdims, int ddof=0, StreamOrDevice s={})
Computes the standard deviation of the elements of an array.
Definition accelerate_fp16_simd.h:9
Simd< bool, N > isnan(Simd< T, N > v)
Definition accelerate_simd.h:146
Simd< float16_t, N > sinh(Simd< float16_t, N > v)
Definition accelerate_fp16_simd.h:41
constexpr int N
Definition neon_fp16_simd.h:9
Simd< float16_t, N > atanh(Simd< float16_t, N > v)
Definition accelerate_fp16_simd.h:34
Simd< T, N > minimum(Simd< T, N > a, Simd< T, N > b)
Definition accelerate_simd.h:215
Simd< float16_t, N > pow(Simd< float16_t, N > x, Simd< float16_t, N > y)
Definition accelerate_fp16_simd.h:54
Simd< float16_t, N > atan2(Simd< float16_t, N > x, Simd< float16_t, N > y)
Definition accelerate_fp16_simd.h:52
T prod(Simd< T, N > x)
Definition accelerate_simd.h:297
Simd< float16_t, N > log10(Simd< float16_t, N > v)
Definition accelerate_fp16_simd.h:39
Simd< T, N > rint(Simd< T, N > v)
Definition accelerate_simd.h:127
Simd< T, N > load(const T *x)
Definition base_simd.h:28
Simd< float16_t, N > tan(Simd< float16_t, N > v)
Definition accelerate_fp16_simd.h:42
Simd< T, N > abs(Simd< T, N > v)
Definition accelerate_simd.h:112
Simd< float16_t, N > acosh(Simd< float16_t, N > v)
Definition accelerate_fp16_simd.h:30
bool all(Simd< T, N > x)
Definition accelerate_simd.h:276
T sum(Simd< T, N > x)
Definition accelerate_simd.h:284
constexpr bool is_complex
Definition base_simd.h:43
Simd< T, 1 > conj(Simd< T, 1 > in)
Definition base_simd.h:85
Simd< float16_t, N > log2(Simd< float16_t, N > v)
Definition accelerate_fp16_simd.h:38
T max(Simd< T, N > x)
Definition accelerate_simd.h:288
Simd< T, N > maximum(Simd< T, N > a, Simd< T, N > b)
Definition accelerate_simd.h:209
Simd< T, N > exp(Simd< T, N > in)
Compute exp(x) in an optimizer friendly way as follows:
Definition math.h:28
Simd< float16_t, N > log(Simd< float16_t, N > v)
Definition accelerate_fp16_simd.h:37
Simd< T, N > floor(Simd< T, N > v)
Definition accelerate_simd.h:113
Simd< float16_t, N > expm1(Simd< float16_t, N > v)
Definition accelerate_fp16_simd.h:36
auto imag(Simd< T, 1 > in) -> Simd< decltype(std::imag(in.value)), 1 >
Definition base_simd.h:108
Simd< float16_t, N > asin(Simd< float16_t, N > v)
Definition accelerate_fp16_simd.h:31
bool any(Simd< T, N > x)
Definition accelerate_simd.h:280
Simd< T, N > fma(Simd< T, N > x, Simd< T, N > y, U z)
Definition accelerate_simd.h:269
Simd< float16_t, N > tanh(Simd< float16_t, N > v)
Definition accelerate_fp16_simd.h:43
Simd< float16_t, N > atan(Simd< float16_t, N > v)
Definition accelerate_fp16_simd.h:33
Simd< float16_t, N > asinh(Simd< float16_t, N > v)
Definition accelerate_fp16_simd.h:32
Simd< float16_t, N > remainder(Simd< float16_t, N > x, Simd< float16_t, N > y)
Definition accelerate_fp16_simd.h:53
static constexpr int max_size
Definition base_simd.h:14
T min(Simd< T, N > x)
Definition accelerate_simd.h:292
auto real(Simd< T, 1 > in) -> Simd< decltype(std::real(in.value)), 1 >
Definition base_simd.h:104
Simd< float16_t, N > log1p(Simd< float16_t, N > v)
Definition accelerate_fp16_simd.h:40
Simd< T, N > ceil(Simd< T, N > v)
Definition accelerate_simd.h:120
Simd< T, N > recip(Simd< T, N > v)
Definition accelerate_simd.h:131
Simd< T, N > sqrt(Simd< T, N > v)
Definition accelerate_simd.h:129
Simd< T, N > clamp(Simd< T, N > v, Simd< T, N > min, Simd< T, N > max)
Definition accelerate_simd.h:264
Simd< float16_t, N > acos(Simd< float16_t, N > v)
Definition accelerate_fp16_simd.h:29
Simd< T, N > rsqrt(Simd< T, N > v)
Definition accelerate_simd.h:130
Simd< float16_t, N > cosh(Simd< float16_t, N > v)
Definition accelerate_fp16_simd.h:35
void store(T *dst, Simd< T, N > x)
Definition base_simd.h:33
Simd< T1, N > select(Simd< MaskT, N > mask, Simd< T1, N > x, Simd< T2, N > y)
Definition accelerate_simd.h:236
static constexpr int size
Definition base_simd.h:18
Simd()
Definition base_simd.h:20
Simd(Simd< U, 1 > v)
Definition base_simd.h:22
T value
Definition base_simd.h:19
Simd(U v)
Definition base_simd.h:24
Definition accelerate_simd.h:55
asd::Vector< scalar_t, N >::packed_t value
Definition accelerate_simd.h:80