Skip to content

Commit

Permalink
Various cleanups: Impl and wrapper functions for vector algorithms (#…
Browse files Browse the repository at this point in the history
  • Loading branch information
StephanTLavavej authored Nov 7, 2023
1 parent f89524b commit ceec966
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 22 deletions.
6 changes: 4 additions & 2 deletions stl/inc/algorithm
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@ const void* __stdcall __std_find_last_trivial_4(const void* _First, const void*
const void* __stdcall __std_find_last_trivial_8(const void* _First, const void* _Last, uint64_t _Val) noexcept;
} // extern "C"

_STD_BEGIN
template <class _Ty>
_STD pair<_Ty*, _Ty*> __std_minmax_element(_Ty* _First, _Ty* _Last) noexcept {
constexpr bool _Signed = _STD is_signed_v<_Ty>;
Expand Down Expand Up @@ -102,6 +103,7 @@ _Ty* __std_find_last_trivial(_Ty* _First, _Ty* _Last, const _TVal _Val) noexcept
static_assert(_STD _Always_false<_Ty>, "Unexpected size");
}
}
_STD_END
#endif // _USE_STD_VECTOR_ALGORITHMS

_STD_BEGIN
Expand Down Expand Up @@ -9848,7 +9850,7 @@ namespace ranges {
if (!_STD is_constant_evaluated()) {
const auto _First_ptr = _STD to_address(_First);
const auto _Last_ptr = _First_ptr + (_Last - _First);
const auto _Result = _CSTD __std_minmax_element(_First_ptr, _Last_ptr);
const auto _Result = _STD __std_minmax_element(_First_ptr, _Last_ptr);
if constexpr (is_pointer_v<_It>) {
return {_Result.first, _Result.second};
} else {
Expand Down Expand Up @@ -10046,7 +10048,7 @@ namespace ranges {
if (!_STD is_constant_evaluated()) {
const auto _First_ptr = _STD to_address(_First);
const auto _Last_ptr = _First_ptr + (_Last - _First);
const auto _Result = _CSTD __std_minmax_element(_First_ptr, _Last_ptr);
const auto _Result = _STD __std_minmax_element(_First_ptr, _Last_ptr);
return {static_cast<_Vty>(*_Result.first), static_cast<_Vty>(*_Result.second)};
}
}
Expand Down
2 changes: 2 additions & 0 deletions stl/inc/xutility
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,7 @@ const void* __stdcall __std_max_element_4(const void* _First, const void* _Last,
const void* __stdcall __std_max_element_8(const void* _First, const void* _Last, bool _Signed) noexcept;
} // extern "C"

_STD_BEGIN
template <class _Ty, class _TVal>
__declspec(noalias) size_t __std_count_trivial(_Ty* _First, _Ty* _Last, const _TVal _Val) noexcept {
if constexpr (_STD is_pointer_v<_TVal> || _STD is_null_pointer_v<_TVal>) {
Expand Down Expand Up @@ -186,6 +187,7 @@ _Ty* __std_max_element(_Ty* _First, _Ty* _Last) noexcept {
static_assert(_STD _Always_false<_Ty>, "Unexpected size");
}
}
_STD_END

#endif // _USE_STD_VECTOR_ALGORITHMS

Expand Down
40 changes: 20 additions & 20 deletions stl/src/vector_algorithms.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1240,7 +1240,7 @@ namespace {
// In optimized builds it avoids an extra call, as this function is too large to inline.

template <class _Traits, class _Ty>
const void* __stdcall __std_find_trivial_unsized(const void* _First, const _Ty _Val) noexcept {
const void* __stdcall __std_find_trivial_unsized_impl(const void* _First, const _Ty _Val) noexcept {
#ifndef _M_ARM64EC
if (_Use_avx2()) {
_Zeroupper_on_exit _Guard; // TRANSITION, DevCom-10331414
Expand Down Expand Up @@ -1326,7 +1326,7 @@ namespace {
}

template <class _Traits, class _Ty>
const void* __stdcall __std_find_trivial(const void* _First, const void* _Last, _Ty _Val) noexcept {
const void* __stdcall __std_find_trivial_impl(const void* _First, const void* _Last, _Ty _Val) noexcept {
#ifndef _M_ARM64EC
size_t _Size_bytes = _Byte_length(_First, _Last);

Expand Down Expand Up @@ -1380,7 +1380,7 @@ namespace {
}

template <class _Traits, class _Ty>
const void* __stdcall __std_find_last_trivial(const void* _First, const void* _Last, _Ty _Val) noexcept {
const void* __stdcall __std_find_last_trivial_impl(const void* _First, const void* _Last, _Ty _Val) noexcept {
const void* const _Real_last = _Last;
#ifndef _M_ARM64EC
size_t _Size_bytes = _Byte_length(_First, _Last);
Expand Down Expand Up @@ -1439,7 +1439,7 @@ namespace {

template <class _Traits, class _Ty>
__declspec(noalias) size_t
__stdcall __std_count_trivial(const void* _First, const void* const _Last, const _Ty _Val) noexcept {
__stdcall __std_count_trivial_impl(const void* _First, const void* const _Last, const _Ty _Val) noexcept {
size_t _Result = 0;

#ifndef _M_ARM64EC
Expand Down Expand Up @@ -1488,79 +1488,79 @@ namespace {
extern "C" {

const void* __stdcall __std_find_trivial_unsized_1(const void* const _First, const uint8_t _Val) noexcept {
return __std_find_trivial_unsized<_Find_traits_1>(_First, _Val);
return __std_find_trivial_unsized_impl<_Find_traits_1>(_First, _Val);
}

const void* __stdcall __std_find_trivial_unsized_2(const void* const _First, const uint16_t _Val) noexcept {
return __std_find_trivial_unsized<_Find_traits_2>(_First, _Val);
return __std_find_trivial_unsized_impl<_Find_traits_2>(_First, _Val);
}

const void* __stdcall __std_find_trivial_unsized_4(const void* const _First, const uint32_t _Val) noexcept {
return __std_find_trivial_unsized<_Find_traits_4>(_First, _Val);
return __std_find_trivial_unsized_impl<_Find_traits_4>(_First, _Val);
}

const void* __stdcall __std_find_trivial_unsized_8(const void* const _First, const uint64_t _Val) noexcept {
return __std_find_trivial_unsized<_Find_traits_8>(_First, _Val);
return __std_find_trivial_unsized_impl<_Find_traits_8>(_First, _Val);
}

const void* __stdcall __std_find_trivial_1(
const void* const _First, const void* const _Last, const uint8_t _Val) noexcept {
return __std_find_trivial<_Find_traits_1>(_First, _Last, _Val);
return __std_find_trivial_impl<_Find_traits_1>(_First, _Last, _Val);
}

const void* __stdcall __std_find_trivial_2(
const void* const _First, const void* const _Last, const uint16_t _Val) noexcept {
return __std_find_trivial<_Find_traits_2>(_First, _Last, _Val);
return __std_find_trivial_impl<_Find_traits_2>(_First, _Last, _Val);
}

const void* __stdcall __std_find_trivial_4(
const void* const _First, const void* const _Last, const uint32_t _Val) noexcept {
return __std_find_trivial<_Find_traits_4>(_First, _Last, _Val);
return __std_find_trivial_impl<_Find_traits_4>(_First, _Last, _Val);
}

const void* __stdcall __std_find_trivial_8(
const void* const _First, const void* const _Last, const uint64_t _Val) noexcept {
return __std_find_trivial<_Find_traits_8>(_First, _Last, _Val);
return __std_find_trivial_impl<_Find_traits_8>(_First, _Last, _Val);
}

const void* __stdcall __std_find_last_trivial_1(
const void* const _First, const void* const _Last, const uint8_t _Val) noexcept {
return __std_find_last_trivial<_Find_traits_1>(_First, _Last, _Val);
return __std_find_last_trivial_impl<_Find_traits_1>(_First, _Last, _Val);
}

const void* __stdcall __std_find_last_trivial_2(
const void* const _First, const void* const _Last, const uint16_t _Val) noexcept {
return __std_find_last_trivial<_Find_traits_2>(_First, _Last, _Val);
return __std_find_last_trivial_impl<_Find_traits_2>(_First, _Last, _Val);
}

const void* __stdcall __std_find_last_trivial_4(
const void* const _First, const void* const _Last, const uint32_t _Val) noexcept {
return __std_find_last_trivial<_Find_traits_4>(_First, _Last, _Val);
return __std_find_last_trivial_impl<_Find_traits_4>(_First, _Last, _Val);
}

const void* __stdcall __std_find_last_trivial_8(
const void* const _First, const void* const _Last, const uint64_t _Val) noexcept {
return __std_find_last_trivial<_Find_traits_8>(_First, _Last, _Val);
return __std_find_last_trivial_impl<_Find_traits_8>(_First, _Last, _Val);
}

__declspec(noalias) size_t
__stdcall __std_count_trivial_1(const void* const _First, const void* const _Last, const uint8_t _Val) noexcept {
return __std_count_trivial<_Find_traits_1>(_First, _Last, _Val);
return __std_count_trivial_impl<_Find_traits_1>(_First, _Last, _Val);
}

__declspec(noalias) size_t
__stdcall __std_count_trivial_2(const void* const _First, const void* const _Last, const uint16_t _Val) noexcept {
return __std_count_trivial<_Find_traits_2>(_First, _Last, _Val);
return __std_count_trivial_impl<_Find_traits_2>(_First, _Last, _Val);
}

__declspec(noalias) size_t
__stdcall __std_count_trivial_4(const void* const _First, const void* const _Last, const uint32_t _Val) noexcept {
return __std_count_trivial<_Find_traits_4>(_First, _Last, _Val);
return __std_count_trivial_impl<_Find_traits_4>(_First, _Last, _Val);
}

__declspec(noalias) size_t
__stdcall __std_count_trivial_8(const void* const _First, const void* const _Last, const uint64_t _Val) noexcept {
return __std_count_trivial<_Find_traits_8>(_First, _Last, _Val);
return __std_count_trivial_impl<_Find_traits_8>(_First, _Last, _Val);
}

} // extern "C"
Expand Down

0 comments on commit ceec966

Please sign in to comment.