|
15 | 15 |
|
16 | 16 | #include "hdr/stdint_proxy.h"
|
17 | 17 | #include "src/__support/CPP/algorithm.h"
|
18 |
| -#include "src/__support/CPP/bit.h" |
19 |
| -#include "src/__support/CPP/type_traits/integral_constant.h" |
| 18 | +#include "src/__support/CPP/limits.h" |
| 19 | +#include "src/__support/CPP/type_traits.h" |
20 | 20 | #include "src/__support/macros/attributes.h"
|
21 | 21 | #include "src/__support/macros/config.h"
|
22 | 22 |
|
@@ -128,6 +128,55 @@ LIBC_INLINE constexpr simd<T, N> max(simd<T, N> x, simd<T, N> y) {
|
128 | 128 | return __builtin_elementwise_max(x, y);
|
129 | 129 | }
|
130 | 130 |
|
| 131 | +template <typename T, size_t N> |
| 132 | +LIBC_INLINE constexpr simd<T, N> abs(simd<T, N> x) { |
| 133 | + return __builtin_elementwise_abs(x); |
| 134 | +} |
| 135 | +template <typename T, size_t N> |
| 136 | +LIBC_INLINE constexpr simd<T, N> fma(simd<T, N> x, simd<T, N> y, simd<T, N> z) { |
| 137 | + return __builtin_elementwise_fma(x, y, z); |
| 138 | +} |
| 139 | +template <typename T, size_t N> |
| 140 | +LIBC_INLINE constexpr simd<T, N> ceil(simd<T, N> x) { |
| 141 | + return __builtin_elementwise_ceil(x); |
| 142 | +} |
| 143 | +template <typename T, size_t N> |
| 144 | +LIBC_INLINE constexpr simd<T, N> floor(simd<T, N> x) { |
| 145 | + return __builtin_elementwise_floor(x); |
| 146 | +} |
| 147 | +template <typename T, size_t N> |
| 148 | +LIBC_INLINE constexpr simd<T, N> roundeven(simd<T, N> x) { |
| 149 | + return __builtin_elementwise_roundeven(x); |
| 150 | +} |
| 151 | +template <typename T, size_t N> |
| 152 | +LIBC_INLINE constexpr simd<T, N> round(simd<T, N> x) { |
| 153 | + return __builtin_elementwise_round(x); |
| 154 | +} |
| 155 | +template <typename T, size_t N> |
| 156 | +LIBC_INLINE constexpr simd<T, N> trunc(simd<T, N> x) { |
| 157 | + return __builtin_elementwise_trunc(x); |
| 158 | +} |
| 159 | +template <typename T, size_t N> |
| 160 | +LIBC_INLINE constexpr simd<T, N> nearbyint(simd<T, N> x) { |
| 161 | + return __builtin_elementwise_nearbyint(x); |
| 162 | +} |
| 163 | +template <typename T, size_t N> |
| 164 | +LIBC_INLINE constexpr simd<T, N> rint(simd<T, N> x) { |
| 165 | + return __builtin_elementwise_rint(x); |
| 166 | +} |
| 167 | +template <typename T, size_t N> |
| 168 | +LIBC_INLINE constexpr simd<T, N> canonicalize(simd<T, N> x) { |
| 169 | + return __builtin_elementwise_canonicalize(x); |
| 170 | +} |
| 171 | +template <typename T, size_t N> |
| 172 | +LIBC_INLINE constexpr simd<T, N> copysign(simd<T, N> x, simd<T, N> y) { |
| 173 | + return __builtin_elementwise_copysign(x, y); |
| 174 | +} |
| 175 | +template <typename T, size_t N> |
| 176 | +LIBC_INLINE constexpr simd<T, N> fmod(simd<T, N> x, simd<T, N> y) { |
| 177 | + return __builtin_elementwise_fmod(x, y); |
| 178 | +} |
| 179 | + |
131 | 180 | // Reduction operations.
|
132 | 181 | template <typename T, size_t N, typename Op = cpp::plus<>>
|
133 | 182 | LIBC_INLINE constexpr T reduce(simd<T, N> v, Op op = {}) {
|
|
0 commit comments