summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorBart Van Assche <bvanassche@acm.org>2018-08-26 08:54:19 -0700
committerBart Van Assche <bvanassche@acm.org>2018-09-07 07:21:10 -0700
commit3b6879b271835dabefbe7bc626cb24ecb96547c1 (patch)
tree11ec57070ef2849d1dff25e2260d4e189004d39d /lib
parentc7d23f4bd20fcb255619508210ed91f185f0ff6f (diff)
downloadfio-3b6879b271835dabefbe7bc626cb24ecb96547c1.tar.gz
fio-3b6879b271835dabefbe7bc626cb24ecb96547c1.tar.bz2
Micro-optimize num2str()
Instead of selecting an element from the thousand[] array several times, perform the choice between 1000 and 1024 once. This patch does not change any functionality. Signed-off-by: Bart Van Assche <bvanassche@acm.org>
Diffstat (limited to 'lib')
-rw-r--r--lib/num2str.c14
1 files changed, 7 insertions, 7 deletions
diff --git a/lib/num2str.c b/lib/num2str.c
index 40fb3aec..ff8a365b 100644
--- a/lib/num2str.c
+++ b/lib/num2str.c
@@ -30,7 +30,7 @@ char *num2str(uint64_t num, int maxlen, int base, int pow2, enum n2s_unit units)
[N2S_BYTEPERSEC]= "B/s",
[N2S_BITPERSEC] = "bit/s"
};
- const unsigned int thousand[] = { 1000, 1024 };
+ const unsigned int thousand = pow2 ? 1024 : 1000;
unsigned int modulo;
int post_index, carry = 0;
char tmp[32], fmt[32];
@@ -49,7 +49,7 @@ char *num2str(uint64_t num, int maxlen, int base, int pow2, enum n2s_unit units)
unitprefix = sistr;
for (post_index = 0; base > 1; post_index++)
- base /= thousand[!!pow2];
+ base /= thousand;
switch (units) {
case N2S_NONE:
@@ -77,9 +77,9 @@ char *num2str(uint64_t num, int maxlen, int base, int pow2, enum n2s_unit units)
if (strlen(tmp) <= maxlen)
break;
- modulo = num % thousand[!!pow2];
- num /= thousand[!!pow2];
- carry = modulo >= thousand[!!pow2] / 2;
+ modulo = num % thousand;
+ num /= thousand;
+ carry = modulo >= thousand / 2;
post_index++;
}
@@ -110,9 +110,9 @@ done:
* Fill in everything and return the result.
*/
assert(maxlen - strlen(tmp) - 1 > 0);
- assert(modulo < thousand[!!pow2]);
+ assert(modulo < thousand);
sprintf(fmt, "%%.%df", (int)(maxlen - strlen(tmp) - 1));
- sprintf(tmp, fmt, (double)modulo / (double)thousand[!!pow2]);
+ sprintf(tmp, fmt, (double)modulo / (double)thousand);
sprintf(buf, "%llu.%s%s%s", (unsigned long long) num, &tmp[2],
unitprefix[post_index], unitstr[units]);