зеркало из https://github.com/microsoft/STL.git
Fix floating `minmax` performance (#5016)
Co-authored-by: Stephan T. Lavavej <stl@nuwen.net>
This commit is contained in:
Родитель
bfd5b8ce7b
Коммит
3532569b95
|
@ -2222,11 +2222,25 @@ namespace {
|
|||
}
|
||||
}
|
||||
|
||||
#ifndef _M_ARM64EC
|
||||
// TRANSITION, DevCom-10767462
|
||||
template <_Min_max_mode _Mode, class _Traits, bool _Sign>
|
||||
auto __std_minmax_impl_wrap(const void* const _First, const void* const _Last) noexcept {
|
||||
auto _Rx = __std_minmax_impl<_Mode, _Traits, _Sign>(_First, _Last);
|
||||
_mm256_zeroupper();
|
||||
return _Rx;
|
||||
}
|
||||
#endif // ^^^ !defined(_M_ARM64EC) ^^^
|
||||
|
||||
template <_Min_max_mode _Mode, class _Traits, bool _Sign>
|
||||
auto __std_minmax_disp(const void* const _First, const void* const _Last) noexcept {
|
||||
#ifndef _M_ARM64EC
|
||||
if (_Byte_length(_First, _Last) >= 32 && _Use_avx2()) {
|
||||
return __std_minmax_impl<_Mode, typename _Traits::_Avx, _Sign>(_First, _Last);
|
||||
if constexpr (_Traits::_Avx::_Is_floating) {
|
||||
return __std_minmax_impl_wrap<_Mode, typename _Traits::_Avx, _Sign>(_First, _Last);
|
||||
} else {
|
||||
return __std_minmax_impl<_Mode, typename _Traits::_Avx, _Sign>(_First, _Last);
|
||||
}
|
||||
}
|
||||
|
||||
if (_Byte_length(_First, _Last) >= 16 && _Use_sse42()) {
|
||||
|
|
Загрузка…
Ссылка в новой задаче