Index: libcxx/include/experimental/simd =================================================================== --- libcxx/include/experimental/simd +++ libcxx/include/experimental/simd @@ -18,14 +18,14 @@ inline namespace parallelism_v2 { namespace simd_abi { - -struct scalar {}; -template struct fixed_size {}; -template inline constexpr int max_fixed_size = implementation-defined; -template using compatible = implementation-defined; -template using native = implementation-defined; - -} // simd_abi + struct scalar {}; + template struct fixed_size {}; + template inline constexpr int max_fixed_size = implementation-defined; + template using compatible = implementation-defined; + template using native = implementation-defined; + template struct deduce { using type = see below ; }; + template using deduce_t = typename deduce::type; +} struct element_aligned_tag {}; struct vector_aligned_tag {}; @@ -37,17 +37,20 @@ // traits [simd.traits] template struct is_abi_tag; template inline constexpr bool is_abi_tag_v = is_abi_tag::value; + template struct is_simd; template inline constexpr bool is_simd_v = is_simd::value; + template struct is_simd_mask; template inline constexpr bool is_simd_mask_v = is_simd_mask::value; + template struct is_simd_flag_type; template inline constexpr bool is_simd_flag_type_v = is_simd_flag_type::value; -template struct abi_for_size { using type = see below ; }; -template using abi_for_size_t = typename abi_for_size::type; + template > struct simd_size; template > inline constexpr size_t simd_size_v = simd_size::value; + template struct memory_alignment; template inline constexpr size_t memory_alignment_v = memory_alignment::value; @@ -64,43 +67,32 @@ // casts [simd.casts] template see below simd_cast(const simd&); - template see below static_simd_cast(const simd&); template fixed_size_simd> to_fixed_size(const simd&) noexcept; - template fixed_size_simd_mask> to_fixed_size(const simd_mask&) noexcept; - -template native_simd to_native(const fixed_size_simd&) noexcept; - -template -native_simd_mask to_native(const fixed_size_simd_mask> &) noexcept; - -template simd to_compatible(const fixed_size_simd&) noexcept; - -template simd_mask to_compatible(const fixed_size_simd_mask&) noexcept; +template native_simd to_native(const fixed_size_simd&) noexcept; +template native_simd_mask to_native(const fixed_size_simd_mask&) noexcept; +template simd to_compatible(const fixed_size_simd&) noexcept; +template simd_mask to_compatible(const fixed_size_simd_mask&) noexcept; template -tuple>...> split(const simd&); - +tuple>...> split(const simd&); template -tuple>...> split(const simd_mask&); - +tuple>...> split(const simd_mask&); template array / V::size()> split( const simd&); - template array / V::size()> split( const simd_mask&); template -simd + ...)>> concat(const simd&...); - +simd + ...)>> concat(const simd&...); template -simd_mask + ...)>> concat(const simd_mask&...); +simd_mask + ...)>> concat(const simd_mask&...); // reductions [simd.mask.reductions] template bool all_of(const simd_mask&) noexcept; @@ -110,6 +102,7 @@ template int popcount(const simd_mask&) noexcept; template int find_first_set(const simd_mask&); template int find_last_set(const simd_mask&); + bool all_of(see below ) noexcept; bool any_of(see below ) noexcept; bool none_of(see below ) noexcept; @@ -124,113 +117,107 @@ // masked assignment [simd.mask.where] template struct nodeduce { using type = T; }; // exposition only - template using nodeduce_t = typename nodeduce::type; // exposition only template where_expression, simd> where(const typename simd::mask_type&, simd&) noexcept; - template -const_where_expression, const simd> +const_where_expression, simd> where(const typename simd::mask_type&, const simd&) noexcept; template where_expression, simd_mask> where(const nodeduce_t>&, simd_mask&) noexcept; - template -const_where_expression, const simd_mask> +const_where_expression, simd_mask> where(const nodeduce_t>&, const simd_mask&) noexcept; template where_expression where(see below k, T& d) noexcept; - template -const_where_expression where(see below k, const T& d) noexcept; +const_where_expression where(see below k, const T& d) noexcept; // reductions [simd.reductions] -template > -T reduce(const simd&, BinaryOperation = BinaryOperation()); +template > +T reduce(const simd&, BinaryOperation = {}); template typename V::value_type reduce(const const_where_expression& x, -typename V::value_type neutral_element, BinaryOperation binary_op); - +typename V::value_type identity_element, BinaryOperation binary_op); template -typename V::value_type reduce(const const_where_expression& x, plus<> binary_op = plus<>()); - +typename V::value_type reduce(const const_where_expression& x, plus<> binary_op = {}); template typename V::value_type reduce(const const_where_expression& x, multiplies<> binary_op); - template typename V::value_type reduce(const const_where_expression& x, bit_and<> binary_op); - template typename V::value_type reduce(const const_where_expression& x, bit_or<> binary_op); - template typename V::value_type reduce(const const_where_expression& x, bit_xor<> binary_op); template T hmin(const simd&); -template T hmin(const const_where_expression&); +template typename V::value_type hmin(const const_where_expression&); template T hmax(const simd&); -template T hmax(const const_where_expression&); +template typename V::value_type hmax(const const_where_expression&); // algorithms [simd.alg] template simd min(const simd&, const simd&) noexcept; - template simd max(const simd&, const simd&) noexcept; - template -std::pair, simd> minmax(const simd&, const simd&) noexcept; - +pair, simd> minmax(const simd&, const simd&) noexcept; template simd clamp(const simd& v, const simd& lo, const simd& hi); // [simd.whereexpr] template class const_where_expression { - const M& mask; // exposition only + const M mask; // exposition only T& data; // exposition only + public: const_where_expression(const const_where_expression&) = delete; const_where_expression& operator=(const const_where_expression&) = delete; - remove_const_t operator-() const &&; + + T operator-() const &&; + T operator+() const &&; + T operator~() const &&; + template void copy_to(U* mem, Flags f) const &&; }; template class where_expression : public const_where_expression { public: - where_expression(const where_expression&) = delete; - where_expression& operator=(const where_expression&) = delete; - template void operator=(U&& x); - template void operator+=(U&& x); - template void operator-=(U&& x); - template void operator*=(U&& x); - template void operator/=(U&& x); - template void operator%=(U&& x); - template void operator&=(U&& x); - template void operator|=(U&& x); - template void operator^=(U&& x); - template void operator<<=(U&& x); - template void operator>>=(U&& x); - void operator++(); - void operator++(int); - void operator--(); - void operator--(int); - template void copy_from(const U* mem, Flags); + template void operator=(U&& x) &&; + template void operator+=(U&& x) &&; + template void operator-=(U&& x) &&; + template void operator*=(U&& x) &&; + template void operator/=(U&& x) &&; + template void operator%=(U&& x) &&; + template void operator&=(U&& x) &&; + template void operator|=(U&& x) &&; + template void operator^=(U&& x) &&; + template void operator<<=(U&& x) &&; + template void operator>>=(U&& x) &&; + void operator++() &&; + void operator++(int) &&; + void operator--() &&; + void operator--(int) &&; + + template void copy_from(const U* mem, Flags) &&; }; // [simd.class] -template class simd { +template +class simd { public: using value_type = T; using reference = see below ; using mask_type = simd_mask; - using abi_type = Abi; + static constexpr size_t size() noexcept; + simd() = default; // implicit type conversion constructor @@ -285,7 +272,6 @@ friend simd& operator*= (simd&, const simd&); friend simd& operator/= (simd&, const simd&); friend simd& operator%= (simd&, const simd&); - friend simd& operator&= (simd&, const simd&); friend simd& operator|= (simd&, const simd&); friend simd& operator^= (simd&, const simd&); @@ -303,237 +289,36 @@ friend mask_type operator< (const simd&, const simd&); }; -// [simd.math] -template using scharv = simd; // exposition only -template using shortv = simd; // exposition only -template using intv = simd; // exposition only -template using longv = simd; // exposition only -template using llongv = simd; // exposition only -template using floatv = simd; // exposition only -template using doublev = simd; // exposition only -template using ldoublev = simd; // exposition only -template using samesize = fixed_size_simd; // exposition only -template floatv acos(floatv x); -template doublev acos(doublev x); -template ldoublev acos(ldoublev x); -template floatv asin(floatv x); -template doublev asin(doublev x); -template ldoublev asin(ldoublev x); -template floatv atan(floatv x); -template doublev atan(doublev x); -template ldoublev atan(ldoublev x); -template floatv atan2(floatv y, floatv x); -template doublev atan2(doublev y, doublev x); -template ldoublev atan2(ldoublev y, ldoublev x); -template floatv cos(floatv x); -template doublev cos(doublev x); -template ldoublev cos(ldoublev x); -template floatv sin(floatv x); -template doublev sin(doublev x); -template ldoublev sin(ldoublev x); -template floatv tan(floatv x); -template doublev tan(doublev x); -template ldoublev tan(ldoublev x); -template floatv acosh(floatv x); -template doublev acosh(doublev x); -template ldoublev acosh(ldoublev x); -template floatv asinh(floatv x); -template doublev asinh(doublev x); -template ldoublev asinh(ldoublev x); -template floatv atanh(floatv x); -template doublev atanh(doublev x); -template ldoublev atanh(ldoublev x); -template floatv cosh(floatv x); -template doublev cosh(doublev x); -template ldoublev cosh(ldoublev x); -template floatv sinh(floatv x); -template doublev sinh(doublev x); -template ldoublev sinh(ldoublev x); -template floatv tanh(floatv x); -template doublev tanh(doublev x); -template ldoublev tanh(ldoublev x); -template floatv exp(floatv x); -template doublev exp(doublev x); -template ldoublev exp(ldoublev x); -template floatv exp2(floatv x); -template doublev exp2(doublev x); -template ldoublev exp2(ldoublev x); -template floatv expm1(floatv x); -template doublev expm1(doublev x); -template ldoublev expm1(ldoublev x); -template floatv frexp(floatv value, samesize>* exp); -template doublev frexp(doublev value, samesize>* exp); -template ldoublev frexp(ldoublev value, samesize>* exp); -template samesize> ilogb(floatv x); -template samesize> ilogb(doublev x); -template samesize> ilogb(ldoublev x); -template floatv ldexp(floatv x, samesize> exp); -template doublev ldexp(doublev x, samesize> exp); -template ldoublev ldexp(ldoublev x, samesize> exp); -template floatv log(floatv x); -template doublev log(doublev x); -template ldoublev log(ldoublev x); -template floatv log10(floatv x); -template doublev log10(doublev x); -template ldoublev log10(ldoublev x); -template floatv log1p(floatv x); -template doublev log1p(doublev x); -template ldoublev log1p(ldoublev x); -template floatv log2(floatv x); -template doublev log2(doublev x); -template ldoublev log2(ldoublev x); -template floatv logb(floatv x); -template doublev logb(doublev x); -template ldoublev logb(ldoublev x); -template floatv modf(floatv value, floatv* iptr); -template doublev modf(doublev value, doublev* iptr); -template ldoublev modf(ldoublev value, ldoublev* iptr); -template floatv scalbn(floatv x, samesize> n); -template doublev scalbn(doublev x, samesize> n); -template ldoublev scalbn(ldoublev x, samesize> n); -template floatv scalbln(floatv x, samesize> n); -template doublev scalbln(doublev x, samesize> n); -template ldoublev scalbln(ldoublev x, samesize> n); -template floatv cbrt(floatv x); -template doublev cbrt(doublev x); -template ldoublev cbrt(ldoublev x); -template scharv abs(scharv j); -template shortv abs(shortv j); -template intv abs(intv j); -template longv abs(longv j); -template llongv abs(llongv j); -template floatv abs(floatv j); -template doublev abs(doublev j); -template ldoublev abs(ldoublev j); -template floatv hypot(floatv x, floatv y); -template doublev hypot(doublev x, doublev y); -template ldoublev hypot(doublev x, doublev y); -template floatv hypot(floatv x, floatv y, floatv z); -template doublev hypot(doublev x, doublev y, doublev z); -template ldoublev hypot(ldoublev x, ldoublev y, ldoublev z); -template floatv pow(floatv x, floatv y); -template doublev pow(doublev x, doublev y); -template ldoublev pow(ldoublev x, ldoublev y); -template floatv sqrt(floatv x); -template doublev sqrt(doublev x); -template ldoublev sqrt(ldoublev x); -template floatv erf(floatv x); -template doublev erf(doublev x); -template ldoublev erf(ldoublev x); -template floatv erfc(floatv x); -template doublev erfc(doublev x); -template ldoublev erfc(ldoublev x); -template floatv lgamma(floatv x); -template doublev lgamma(doublev x); -template ldoublev lgamma(ldoublev x); -template floatv tgamma(floatv x); -template doublev tgamma(doublev x); -template ldoublev tgamma(ldoublev x); -template floatv ceil(floatv x); -template doublev ceil(doublev x); -template ldoublev ceil(ldoublev x); -template floatv floor(floatv x); -template doublev floor(doublev x); -template ldoublev floor(ldoublev x); -template floatv nearbyint(floatv x); -template doublev nearbyint(doublev x); -template ldoublev nearbyint(ldoublev x); -template floatv rint(floatv x); -template doublev rint(doublev x); -template ldoublev rint(ldoublev x); -template samesize> lrint(floatv x); -template samesize> lrint(doublev x); -template samesize> lrint(ldoublev x); -template samesize> llrint(floatv x); -template samesize> llrint(doublev x); -template samesize> llrint(ldoublev x); -template floatv round(floatv x); -template doublev round(doublev x); -template ldoublev round(ldoublev x); -template samesize> lround(floatv x); -template samesize> lround(doublev x); -template samesize> lround(ldoublev x); -template samesize> llround(floatv x); -template samesize> llround(doublev x); -template samesize> llround(ldoublev x); -template floatv trunc(floatv x); -template doublev trunc(doublev x); -template ldoublev trunc(ldoublev x); -template floatv fmod(floatv x, floatv y); -template doublev fmod(doublev x, doublev y); -template ldoublev fmod(ldoublev x, ldoublev y); -template floatv remainder(floatv x, floatv y); -template doublev remainder(doublev x, doublev y); -template ldoublev remainder(ldoublev x, ldoublev y); -template floatv remquo(floatv x, floatv y, samesize>* quo); -template doublev remquo(doublev x, doublev y, samesize>* quo); -template ldoublev remquo(ldoublev x, ldoublev y, samesize>* quo); -template floatv copysign(floatv x, floatv y); -template doublev copysign(doublev x, doublev y); -template ldoublev copysign(ldoublev x, ldoublev y); -template doublev nan(const char* tagp); -template floatv nanf(const char* tagp); -template ldoublev nanl(const char* tagp); -template floatv nextafter(floatv x, floatv y); -template doublev nextafter(doublev x, doublev y); -template ldoublev nextafter(ldoublev x, ldoublev y); -template floatv nexttoward(floatv x, ldoublev y); -template doublev nexttoward(doublev x, ldoublev y); -template ldoublev nexttoward(ldoublev x, ldoublev y); -template floatv fdim(floatv x, floatv y); -template doublev fdim(doublev x, doublev y); -template ldoublev fdim(ldoublev x, ldoublev y); -template floatv fmax(floatv x, floatv y); -template doublev fmax(doublev x, doublev y); -template ldoublev fmax(ldoublev x, ldoublev y); -template floatv fmin(floatv x, floatv y); -template doublev fmin(doublev x, doublev y); -template ldoublev fmin(ldoublev x, ldoublev y); -template floatv fma(floatv x, floatv y, floatv z); -template doublev fma(doublev x, doublev y, doublev z); -template ldoublev fma(ldoublev x, ldoublev y, ldoublev z); -template samesize> fpclassify(floatv x); -template samesize> fpclassify(doublev x); -template samesize> fpclassify(ldoublev x); -template simd_mask isfinite(floatv x); -template simd_mask isfinite(doublev x); -template simd_mask isfinite(ldoublev x); -template simd_mask isinf(floatv x); -template simd_mask isinf(doublev x); -template simd_mask isinf(ldoublev x); -template simd_mask isnan(floatv x); -template simd_mask isnan(doublev x); -template simd_mask isnan(ldoublev x); -template simd_mask isnormal(floatv x); -template simd_mask isnormal(doublev x); -template simd_mask isnormal(ldoublev x); -template simd_mask signbit(floatv x); -template simd_mask signbit(doublev x); -template simd_mask signbit(ldoublev x); -template simd_mask isgreater(floatv x, floatv y); -template simd_mask isgreater(doublev x, doublev y); -template simd_mask isgreater(ldoublev x, ldoublev y); -template simd_mask isgreaterequal(floatv x, floatv y); -template simd_mask isgreaterequal(doublev x, doublev y); -template simd_mask isgreaterequal(ldoublev x, ldoublev y); -template simd_mask isless(floatv x, floatv y); -template simd_mask isless(doublev x, doublev y); -template simd_mask isless(ldoublev x, ldoublev y); -template simd_mask islessequal(floatv x, floatv y); -template simd_mask islessequal(doublev x, doublev y); -template simd_mask islessequal(ldoublev x, ldoublev y); -template simd_mask islessgreater(floatv x, floatv y); -template simd_mask islessgreater(doublev x, doublev y); -template simd_mask islessgreater(ldoublev x, ldoublev y); -template simd_mask isunordered(floatv x, floatv y); -template simd_mask isunordered(doublev x, doublev y); -template simd_mask isunordered(ldoublev x, ldoublev y); -template struct simd_div_t { V quot, rem; }; -template simd_div_t> div(scharv numer, scharv denom); -template simd_div_t> div(shortv numer, shortv denom); -template simd_div_t> div(intv numer, intv denom); -template simd_div_t> div(longv numer, longv denom); -template simd_div_t> div(llongv numer, llongv denom); +class reference // exposition only +{ +public: + reference() = delete; + reference(const reference &) = delete; + + operator value_type() const noexcept; + + template reference operator=(U&& x) &&; + + template reference operator+=(U&& x) &&; + template reference operator-=(U&& x) &&; + template reference operator*=(U&& x) &&; + template reference operator/=(U&& x) &&; + template reference operator%=(U&& x) &&; + template reference operator|=(U&& x) &&; + template reference operator&=(U&& x) &&; + template reference operator^=(U&& x) &&; + template reference operator<<=(U&& x) &&; + template reference operator>>=(U&& x) &&; + + reference operator++() &&; + value_type operator++(int) &&; + reference operator--() &&; + value_type operator--(int) &&; + + friend void swap(reference&& a, reference&& b) noexcept; + friend void swap(value_type& a, reference&& b) noexcept; + friend void swap(reference&& a, value_type& b) noexcept; +}; // [simd.mask.class] template @@ -543,7 +328,9 @@ using reference = see below ; using simd_type = simd; using abi_type = Abi; + static constexpr size_t size() noexcept; + simd_mask() = default; // broadcast constructor Index: libcxx/test/std/experimental/simd/simd.horizontal/concat.pass.cpp =================================================================== --- libcxx/test/std/experimental/simd/simd.horizontal/concat.pass.cpp +++ libcxx/test/std/experimental/simd/simd.horizontal/concat.pass.cpp @@ -12,7 +12,7 @@ // // // template -// simd + ...)>> +// simd + ...)>> // concat(const simd&...); // // template @@ -20,7 +20,7 @@ // concat(const std::array, N>& __v); // // template -// simd_mask + ...)>> +// simd_mask + ...)>> // concat(const simd_mask&...); // // template Index: libcxx/test/std/experimental/simd/simd.horizontal/hmax.pass.cpp =================================================================== --- libcxx/test/std/experimental/simd/simd.horizontal/hmax.pass.cpp +++ libcxx/test/std/experimental/simd/simd.horizontal/hmax.pass.cpp @@ -12,7 +12,8 @@ // // // template T hmax(const simd&); -// template T hmax(const const_where_expression&); +// template typename V::value_type +// hmax(const const_where_expression&); #include #include Index: libcxx/test/std/experimental/simd/simd.horizontal/hmin.pass.cpp =================================================================== --- libcxx/test/std/experimental/simd/simd.horizontal/hmin.pass.cpp +++ libcxx/test/std/experimental/simd/simd.horizontal/hmin.pass.cpp @@ -12,7 +12,8 @@ // // // template T hmin(const simd&); -// template T hmin(const const_where_expression&); +// template typename V::value_type +// hmin(const const_where_expression&); #include #include Index: libcxx/test/std/experimental/simd/simd.horizontal/reduce.pass.cpp =================================================================== --- libcxx/test/std/experimental/simd/simd.horizontal/reduce.pass.cpp +++ libcxx/test/std/experimental/simd/simd.horizontal/reduce.pass.cpp @@ -12,15 +12,15 @@ // // // // reductions [simd.reductions] -// template > -// T reduce(const simd&, BinaryOperation = BinaryOperation()); +// template > +// T reduce(const simd&, BinaryOperation = {}); // // template // typename V::value_type reduce(const const_where_expression& x, -// typename V::value_type neutral_element, BinaryOperation binary_op); +// typename V::value_type identity_element, BinaryOperation binary_op); // // template -// typename V::value_type reduce(const const_where_expression& x, plus<> binary_op = plus<>()); +// typename V::value_type reduce(const const_where_expression& x, plus<> binary_op = {}); // // template // typename V::value_type reduce(const const_where_expression& x, multiplies<> binary_op); Index: libcxx/test/std/experimental/simd/simd.horizontal/split.pass.cpp =================================================================== --- libcxx/test/std/experimental/simd/simd.horizontal/split.pass.cpp +++ libcxx/test/std/experimental/simd/simd.horizontal/split.pass.cpp @@ -12,10 +12,10 @@ // // // template -// tuple>...> split(const simd&); +// tuple>...> split(const simd&); // // template -// tuple>...> split(const simd_mask&); +// tuple>...> split(const simd_mask&); // // template // array / V::size()> split( Index: libcxx/test/std/experimental/simd/simd.access/default.pass.cpp =================================================================== --- libcxx/test/std/experimental/simd/simd.access/default.pass.cpp +++ libcxx/test/std/experimental/simd/simd.access/default.pass.cpp @@ -11,9 +11,36 @@ // // -// scalar access [simd.subscr] -// reference operator[](size_t); -// value_type operator[](size_t) const; +// class reference // exposition only +// { +// public: +// reference() = delete; +// reference(const reference &) = delete; +// +// operator value_type() const noexcept; +// +// template reference operator=(U&& x) &&; +// +// template reference operator+=(U&& x) &&; +// template reference operator-=(U&& x) &&; +// template reference operator*=(U&& x) &&; +// template reference operator/=(U&& x) &&; +// template reference operator%=(U&& x) &&; +// template reference operator|=(U&& x) &&; +// template reference operator&=(U&& x) &&; +// template reference operator^=(U&& x) &&; +// template reference operator<<=(U&& x) &&; +// template reference operator>>=(U&& x) &&; +// +// reference operator++() &&; +// value_type operator++(int) &&; +// reference operator--() &&; +// value_type operator--(int) &&; +// +// friend void swap(reference&& a, reference&& b) noexcept; +// friend void swap(value_type& a, reference&& b) noexcept; +// friend void swap(reference&& a, value_type& b) noexcept; +// }; #include #include Index: libcxx/test/std/experimental/simd/simd.casts/to_compatible.pass.cpp =================================================================== --- libcxx/test/std/experimental/simd/simd.casts/to_compatible.pass.cpp +++ libcxx/test/std/experimental/simd/simd.casts/to_compatible.pass.cpp @@ -12,12 +12,8 @@ // // // [simd.casts] -// -// template simd -// to_compatible(const fixed_size_simd&) noexcept; -// -// template simd_mask -// to_compatible(const fixed_size_simd_mask&) noexcept; +// template simd to_compatible(const fixed_size_simd&) noexcept; +// template simd_mask to_compatible(const fixed_size_simd_mask&) noexcept; #include #include Index: libcxx/test/std/experimental/simd/simd.casts/to_native.pass.cpp =================================================================== --- libcxx/test/std/experimental/simd/simd.casts/to_native.pass.cpp +++ libcxx/test/std/experimental/simd/simd.casts/to_native.pass.cpp @@ -12,12 +12,8 @@ // // // [simd.casts] -// -// template -// native_simd to_native(const fixed_size_simd&) noexcept; -// -// template -// native_simd_mask to_native(const fixed_size_simd_mask&) noexcept; +// template native_simd to_native(const fixed_size_simd&) noexcept; +// template native_simd_mask to_native(const fixed_size_simd_mask&) noexcept; #include #include Index: libcxx/test/std/experimental/simd/simd.elementwise/minmax.pass.cpp =================================================================== --- libcxx/test/std/experimental/simd/simd.elementwise/minmax.pass.cpp +++ libcxx/test/std/experimental/simd/simd.elementwise/minmax.pass.cpp @@ -12,7 +12,7 @@ // // // template -// std::pair, simd> +// pair, simd> // minmax(const simd&, const simd&) noexcept; #include Index: libcxx/test/std/experimental/simd/simd.traits/simd_abi_deduce.pass.cpp =================================================================== --- libcxx/test/std/experimental/simd/simd.traits/simd_abi_deduce.pass.cpp +++ libcxx/test/std/experimental/simd/simd.traits/simd_abi_deduce.pass.cpp @@ -10,10 +10,8 @@ // UNSUPPORTED: c++98, c++03 // -// -// [simd.traits] -// template struct abi_for_size { using type = see below ; }; -// template using abi_for_size_t = typename abi_for_size::type; +// template struct deduce { using type = see below ; }; +// template using deduce_t = typename deduce::type; #include #include Index: libcxx/test/std/experimental/simd/simd.whereexpr/const_where_expression.pass.cpp =================================================================== --- libcxx/test/std/experimental/simd/simd.whereexpr/const_where_expression.pass.cpp +++ libcxx/test/std/experimental/simd/simd.whereexpr/const_where_expression.pass.cpp @@ -14,12 +14,17 @@ // // [simd.whereexpr] // template // class const_where_expression { -// const M& mask; // exposition only +// const M mask; // exposition only // T& data; // exposition only +// // public: // const_where_expression(const const_where_expression&) = delete; // const_where_expression& operator=(const const_where_expression&) = delete; -// remove_const_t operator-() const &&; +// +// T operator-() const &&; +// T operator+() const &&; +// T operator~() const &&; +// // template void copy_to(U* mem, Flags f) const &&; // }; Index: libcxx/test/std/experimental/simd/simd.whereexpr/where.pass.cpp =================================================================== --- libcxx/test/std/experimental/simd/simd.whereexpr/where.pass.cpp +++ libcxx/test/std/experimental/simd/simd.whereexpr/where.pass.cpp @@ -17,7 +17,7 @@ // where(const typename simd::mask_type&, simd&) noexcept; // // template -// const_where_expression, const simd> +// const_where_expression, simd> // where(const typename simd::mask_type&, const simd&) noexcept; // // template @@ -25,13 +25,13 @@ // where(const nodeduce_t>&, simd_mask&) noexcept; // // template -// const_where_expression, const simd_mask> +// const_where_expression, simd_mask> // where(const nodeduce_t>&, const simd_mask&) noexcept; // // template where_expression where(see below k, T& d) noexcept; // // template -// const_where_expression where(see below k, const T& d) noexcept; +// const_where_expression where(see below k, const T& d) noexcept; #include #include Index: libcxx/test/std/experimental/simd/simd.whereexpr/where_expression.pass.cpp =================================================================== --- libcxx/test/std/experimental/simd/simd.whereexpr/where_expression.pass.cpp +++ libcxx/test/std/experimental/simd/simd.whereexpr/where_expression.pass.cpp @@ -15,24 +15,23 @@ // template // class where_expression : public const_where_expression { // public: -// where_expression(const where_expression&) = delete; -// where_expression& operator=(const where_expression&) = delete; -// template void operator=(U&& x); -// template void operator+=(U&& x); -// template void operator-=(U&& x); -// template void operator*=(U&& x); -// template void operator/=(U&& x); -// template void operator%=(U&& x); -// template void operator&=(U&& x); -// template void operator|=(U&& x); -// template void operator^=(U&& x); -// template void operator<<=(U&& x); -// template void operator>>=(U&& x); -// void operator++(); -// void operator++(int); -// void operator--(); -// void operator--(int); -// template void copy_from(const U* mem, Flags); +// template void operator=(U&& x) &&; +// template void operator+=(U&& x) &&; +// template void operator-=(U&& x) &&; +// template void operator*=(U&& x) &&; +// template void operator/=(U&& x) &&; +// template void operator%=(U&& x) &&; +// template void operator&=(U&& x) &&; +// template void operator|=(U&& x) &&; +// template void operator^=(U&& x) &&; +// template void operator<<=(U&& x) &&; +// template void operator>>=(U&& x) &&; +// void operator++() &&; +// void operator++(int) &&; +// void operator--() &&; +// void operator--(int) &&; +// +// template void copy_from(const U* mem, Flags) &&; // }; #include