History log of /bionic/libc/bionic/strtol.cpp
Revision Date Author Comments
cb239bda6569c48efd3925bb87682fc0efa077fd 21-Dec-2017 Elliott Hughes <enh@google.com> Simplify atoi*/strto* for signed integers.

Make the cost of strto<signed> closer to the cost of strto<unsigned>
by removing an `if` from the inner loop. Previously a signed conversion
cost 10ns more than an unsigned one.

After:

BM_inttypes_strtoimax 81 ns 81 ns 8603362
BM_inttypes_strtoumax 78 ns 78 ns 8967174
BM_stdlib_strtol 81 ns 81 ns 8685537
BM_stdlib_strtoll 81 ns 81 ns 8685481
BM_stdlib_strtoul 78 ns 78 ns 8962569
BM_stdlib_strtoull 78 ns 78 ns 8972023

Bug: N/A
Test: ran tests, benchmarks
Change-Id: I72dd5499427b6a940bd94c4d6f727f7efe134d7e
1133fecde3899183b5c0edee9c92736ad878a290 20-Dec-2017 Elliott Hughes <enh@google.com> Use inline ctype functions for ato*/strto* and scanf.

This also let us remove the `unsigned char` casts, since we define our
inlines to work for all values.

Before:

Benchmark Time CPU Iterations
-------------------------------------------------------------
BM_inttypes_strtoimax 112 ns 112 ns 6222193
BM_inttypes_strtoumax 104 ns 104 ns 6725010
BM_stdlib_strtol 113 ns 113 ns 6195861
BM_stdlib_strtoll 113 ns 113 ns 6195633
BM_stdlib_strtoul 105 ns 105 ns 6691394
BM_stdlib_strtoull 105 ns 105 ns 6690695

BM_stdio_scanf_d 504 ns 503 ns 1385224
BM_stdio_scanf_maps 1900 ns 1898 ns 369260
BM_stdio_scanf_maps_baseline 1030 ns 1030 ns 678832
BM_stdio_scanf_s 433 ns 432 ns 1619086

After:

BM_inttypes_strtoimax 91 ns 91 ns 7718194
BM_inttypes_strtoumax 82 ns 82 ns 8508052
BM_stdlib_strtol 92 ns 92 ns 7674694
BM_stdlib_strtoll 91 ns 91 ns 7639228
BM_stdlib_strtoul 83 ns 82 ns 8500304
BM_stdlib_strtoull 82 ns 82 ns 8504929

BM_stdio_scanf_d 465 ns 465 ns 1507891
BM_stdio_scanf_maps 1836 ns 1836 ns 381082
BM_stdio_scanf_maps_baseline 846 ns 845 ns 830881
BM_stdio_scanf_s 419 ns 419 ns 1671979

Bug: N/A
Test: ran tests, benchmarks
Change-Id: I44681daf16c4328b060770cf11fc0633157c427f
1921dce886c8ea17fb7958b59a18a71b6dc7ff96 19-Dec-2017 Elliott Hughes <enh@google.com> Refactor the ato* and strto* family.

There are no meaningful changes here, just a minimal conversion to two
C++ templates to make further changes easier.

Bug: N/A
Test: ran tests, benchmarks
Change-Id: I958fbf17a85f19dd8f17bfb4bbb9314d220daa3b