9template <
typename T,
int N>
17 static constexpr int size = 1;
26template <
typename T,
int N>
31template <
typename T,
int N>
35 if constexpr (std::is_same_v<T, bool> &&
N > 1) {
41template <
typename,
typename =
void>
52 T{std::rint(in.
value.real()), std::rint(in.
value.imag())}};
60 return T(1.0) /
sqrt(in);
68#define DEFAULT_UNARY(name, op) \
69 template <typename T> \
70 Simd<T, 1> name(Simd<T, 1> in) { \
71 return op(in.value); \
99 return std::real(in.value);
103 return std::imag(in.value);
107 return std::isnan(in.
value);
110#define DEFAULT_BINARY(OP) \
111 template <typename T1, typename T2> \
112 auto operator OP(Simd<T1, 1> a, Simd<T2, 1> b) \
113 ->Simd<decltype(a.value OP b.value), 1> { \
114 return a.value OP b.value; \
116 template <typename T1, typename T2> \
117 auto operator OP(T1 a, Simd<T2, 1> b)->Simd<decltype(a OP b.value), 1> { \
118 return a OP b.value; \
120 template <typename T1, typename T2> \
121 auto operator OP(Simd<T1, 1> a, T2 b)->Simd<decltype(a.value OP b), 1> { \
122 return a.value OP b; \
142 if constexpr (std::is_integral_v<T>) {
145 r = std::remainder(a, b);
147 if constexpr (std::is_signed_v<T>) {
148 if (r != 0 && (r < 0 != b < 0)) {
159 if constexpr (!std::is_integral_v<T>) {
164 return (a > b) ? a : b;
171 if constexpr (!std::is_integral_v<T>) {
176 return (a < b) ? a : b;
183 if constexpr (!std::is_integral_v<T>) {
184 return std::pow(base,
exp);
203#define DEFAULT_COMPARISONS(OP) \
204 template <typename T1, typename T2> \
205 Simd<bool, 1> operator OP(Simd<T1, 1> a, Simd<T2, 1> b) { \
206 return a.value OP b.value; \
208 template <typename T1, typename T2> \
209 Simd<bool, 1> operator OP(T1 a, Simd<T2, 1> b) { \
210 return a OP b.value; \
212 template <typename T1, typename T2> \
213 Simd<bool, 1> operator OP(Simd<T1, 1> a, T2 b) { \
214 return a.value OP b; \
224template <typename MaskT, typename T>
226 return mask.value ? x.value : y.value;
234template <
typename T,
typename U>
240#define DEFAULT_REDUCTION(name, type) \
241 template <typename T> \
242 type name(Simd<T, 1> x) { \
#define DEFAULT_REDUCTION(name, type)
Definition base_simd.h:240
#define DEFAULT_UNARY(name, op)
Definition base_simd.h:68
#define DEFAULT_BINARY(OP)
Definition base_simd.h:110
#define DEFAULT_COMPARISONS(OP)
Definition base_simd.h:203
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:141
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:210
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:292
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:27
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:271
T sum(Simd< T, N > x)
Definition accelerate_simd.h:279
constexpr bool is_complex
Definition base_simd.h:42
Simd< T, 1 > conj(Simd< T, 1 > in)
Definition base_simd.h:84
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:283
Simd< T, N > maximum(Simd< T, N > a, Simd< T, N > b)
Definition accelerate_simd.h:204
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:102
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:275
Simd< T, N > fma(Simd< T, N > x, Simd< T, N > y, U z)
Definition accelerate_simd.h:264
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:13
T min(Simd< T, N > x)
Definition accelerate_simd.h:287
auto real(Simd< T, 1 > in) -> Simd< decltype(std::real(in.value)), 1 >
Definition base_simd.h:98
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:259
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:32
Simd< T1, N > select(Simd< MaskT, N > mask, Simd< T1, N > x, Simd< T2, N > y)
Definition accelerate_simd.h:231
static constexpr int size
Definition base_simd.h:17
Simd()
Definition base_simd.h:19
Simd(Simd< U, 1 > v)
Definition base_simd.h:21
T value
Definition base_simd.h:18
Simd(U v)
Definition base_simd.h:23
Definition accelerate_simd.h:55
asd::Vector< scalar_t, N >::packed_t value
Definition accelerate_simd.h:80