Minor std::to_chars optimisation for base 10

__to_chars_10_impl is quite fast. According to the IACA the main loop
takes only 6.0 cycles, the whole function with one iteration takes
10.0 cycles. Replacing the __first[pos] and __first[pos - 1] with
__first[0] and __first[1] drops the function time to 7.53 cycles.

2019-09-09  Antony Polukhin  <antoshkka@gmail.com>

	* include/bits/charconv.h (__detail::__to_chars_10_impl): Replace
	final offsets with constants.

From-SVN: r275514
This commit is contained in:
Antony Polukhin 2019-09-09 11:12:44 +00:00 committed by Jonathan Wakely
parent 27dada7d06
commit d0e086ae4f
2 changed files with 8 additions and 3 deletions

View File

@ -1,3 +1,8 @@
2019-09-09 Antony Polukhin <antoshkka@gmail.com>
* include/bits/charconv.h (__detail::__to_chars_10_impl): Replace
final offsets with constants.
2019-09-09 Jonathan Wakely <jwakely@redhat.com>
* include/bits/range_access.h (__adl_to_address): Remove.

View File

@ -92,11 +92,11 @@ namespace __detail
if (__val >= 10)
{
auto const __num = __val * 2;
__first[__pos] = __digits[__num + 1];
__first[__pos - 1] = __digits[__num];
__first[1] = __digits[__num + 1];
__first[0] = __digits[__num];
}
else
__first[__pos] = '0' + __val;
__first[0] = '0' + __val;
}
} // namespace __detail