Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
88 changes: 44 additions & 44 deletions source/numerics.tex
Original file line number Diff line number Diff line change
Expand Up @@ -16532,10 +16532,24 @@
template<class T, @\exposid{simd-size-type}@ N = @\exposid{simd-size-v}@<T, @\exposid{native-abi}@<T>>>
using @\libmember{vec}{simd}@ = basic_vec<T, @\exposid{deduce-abi-t}@<T, N>>;

// \ref{simd.mask.class}, class template \tcode{basic_mask}
template<size_t Bytes, class Abi = @\exposid{native-abi}@<@\exposid{integer-from}@<Bytes>>> class basic_mask;
template<class T, @\exposid{simd-size-type}@ N = @\exposid{simd-size-v}@<T, @\exposid{native-abi}@<T>>>
using @\libmember{mask}{simd}@ = basic_mask<sizeof(T), @\exposid{deduce-abi-t}@<T, N>>;
// \ref{simd.reductions}, \tcode{basic_vec} reductions
template<class T, class Abi, class BinaryOperation = plus<>>
constexpr T reduce(const basic_vec<T, Abi>&, BinaryOperation = {});
template<class T, class Abi, class BinaryOperation = plus<>>
constexpr T reduce(
const basic_vec<T, Abi>& x, const typename basic_vec<T, Abi>::mask_type& mask,
BinaryOperation binary_op = {}, type_identity_t<T> identity_element = @\seebelow@);

template<class T, class Abi>
constexpr T reduce_min(const basic_vec<T, Abi>&) noexcept;
template<class T, class Abi>
constexpr T reduce_min(const basic_vec<T, Abi>&,
const typename basic_vec<T, Abi>::mask_type&) noexcept;
template<class T, class Abi>
constexpr T reduce_max(const basic_vec<T, Abi>&) noexcept;
template<class T, class Abi>
constexpr T reduce_max(const basic_vec<T, Abi>&,
const typename basic_vec<T, Abi>::mask_type&) noexcept;

// \ref{simd.loadstore}, \tcode{basic_vec} load and store functions
template<class V = @\seebelow@, ranges::@\libconcept{contiguous_range}@ R, class... Flags>
Expand Down Expand Up @@ -16715,46 +16729,6 @@
(basic_mask<Bytes, Abis>::size() + ...)>>
cat(const basic_mask<Bytes, Abis>&...) noexcept;

// \ref{simd.mask.reductions}, \tcode{basic_mask} reductions
template<size_t Bytes, class Abi>
constexpr bool all_of(const basic_mask<Bytes, Abi>&) noexcept;
template<size_t Bytes, class Abi>
constexpr bool any_of(const basic_mask<Bytes, Abi>&) noexcept;
template<size_t Bytes, class Abi>
constexpr bool none_of(const basic_mask<Bytes, Abi>&) noexcept;
template<size_t Bytes, class Abi>
constexpr @\exposid{simd-size-type}@ reduce_count(const basic_mask<Bytes, Abi>&) noexcept;
template<size_t Bytes, class Abi>
constexpr @\exposid{simd-size-type}@ reduce_min_index(const basic_mask<Bytes, Abi>&);
template<size_t Bytes, class Abi>
constexpr @\exposid{simd-size-type}@ reduce_max_index(const basic_mask<Bytes, Abi>&);

constexpr bool all_of(@\libconcept{same_as}@<bool> auto) noexcept;
constexpr bool any_of(@\libconcept{same_as}@<bool> auto) noexcept;
constexpr bool none_of(@\libconcept{same_as}@<bool> auto) noexcept;
constexpr @\exposid{simd-size-type}@ reduce_count(@\libconcept{same_as}@<bool> auto) noexcept;
constexpr @\exposid{simd-size-type}@ reduce_min_index(@\libconcept{same_as}@<bool> auto);
constexpr @\exposid{simd-size-type}@ reduce_max_index(@\libconcept{same_as}@<bool> auto);

// \ref{simd.reductions}, \tcode{basic_vec} reductions
template<class T, class Abi, class BinaryOperation = plus<>>
constexpr T reduce(const basic_vec<T, Abi>&, BinaryOperation = {});
template<class T, class Abi, class BinaryOperation = plus<>>
constexpr T reduce(
const basic_vec<T, Abi>& x, const typename basic_vec<T, Abi>::mask_type& mask,
BinaryOperation binary_op = {}, type_identity_t<T> identity_element = @\seebelow@);

template<class T, class Abi>
constexpr T reduce_min(const basic_vec<T, Abi>&) noexcept;
template<class T, class Abi>
constexpr T reduce_min(const basic_vec<T, Abi>&,
const typename basic_vec<T, Abi>::mask_type&) noexcept;
template<class T, class Abi>
constexpr T reduce_max(const basic_vec<T, Abi>&) noexcept;
template<class T, class Abi>
constexpr T reduce_max(const basic_vec<T, Abi>&,
const typename basic_vec<T, Abi>::mask_type&) noexcept;

// \ref{simd.alg}, algorithms
template<class T, class Abi>
constexpr basic_vec<T, Abi>
Expand Down Expand Up @@ -17021,6 +16995,32 @@
rebind_t<complex<typename V::value_type>, V> polar(const V& x, const V& y = {});

template<@\exposconcept{simd-complex}@ V> constexpr V pow(const V& x, const V& y);

// \ref{simd.mask.class}, class template \tcode{basic_mask}
template<size_t Bytes, class Abi = @\exposid{native-abi}@<@\exposid{integer-from}@<Bytes>>> class basic_mask;
template<class T, @\exposid{simd-size-type}@ N = @\exposid{simd-size-v}@<T, @\exposid{native-abi}@<T>>>
using @\libmember{mask}{simd}@ = basic_mask<sizeof(T), @\exposid{deduce-abi-t}@<T, N>>;

// \ref{simd.mask.reductions}, \tcode{basic_mask} reductions
template<size_t Bytes, class Abi>
constexpr bool all_of(const basic_mask<Bytes, Abi>&) noexcept;
template<size_t Bytes, class Abi>
constexpr bool any_of(const basic_mask<Bytes, Abi>&) noexcept;
template<size_t Bytes, class Abi>
constexpr bool none_of(const basic_mask<Bytes, Abi>&) noexcept;
template<size_t Bytes, class Abi>
constexpr @\exposid{simd-size-type}@ reduce_count(const basic_mask<Bytes, Abi>&) noexcept;
template<size_t Bytes, class Abi>
constexpr @\exposid{simd-size-type}@ reduce_min_index(const basic_mask<Bytes, Abi>&);
template<size_t Bytes, class Abi>
constexpr @\exposid{simd-size-type}@ reduce_max_index(const basic_mask<Bytes, Abi>&);

constexpr bool all_of(@\libconcept{same_as}@<bool> auto) noexcept;
constexpr bool any_of(@\libconcept{same_as}@<bool> auto) noexcept;
constexpr bool none_of(@\libconcept{same_as}@<bool> auto) noexcept;
constexpr @\exposid{simd-size-type}@ reduce_count(@\libconcept{same_as}@<bool> auto) noexcept;
constexpr @\exposid{simd-size-type}@ reduce_min_index(@\libconcept{same_as}@<bool> auto);
constexpr @\exposid{simd-size-type}@ reduce_max_index(@\libconcept{same_as}@<bool> auto);
}

namespace std {
Expand Down