aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAntony Polukhin <antoshkka@gmail.com>2019-09-09 11:12:44 +0000
committerJonathan Wakely <redi@gcc.gnu.org>2019-09-09 12:12:44 +0100
commitd0e086ae4f9ac2138a5fa6c6405c61b1f7ae032d (patch)
treeb59733708c7b9a3b4caa6d4ecb5aad284d1b7d7b
parent27dada7d06926cc7ef6293fbbf0629f523b49e48 (diff)
downloadgcc-d0e086ae4f9ac2138a5fa6c6405c61b1f7ae032d.zip
gcc-d0e086ae4f9ac2138a5fa6c6405c61b1f7ae032d.tar.gz
gcc-d0e086ae4f9ac2138a5fa6c6405c61b1f7ae032d.tar.bz2
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
-rw-r--r--libstdc++-v3/ChangeLog5
-rw-r--r--libstdc++-v3/include/bits/charconv.h6
2 files changed, 8 insertions, 3 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index 0aff148..6cf1737 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -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.
diff --git a/libstdc++-v3/include/bits/charconv.h b/libstdc++-v3/include/bits/charconv.h
index 0911660..a5b6be5 100644
--- a/libstdc++-v3/include/bits/charconv.h
+++ b/libstdc++-v3/include/bits/charconv.h
@@ -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