From 782b91da6747898e9d5dee6401227d57fc315235 Mon Sep 17 00:00:00 2001 From: Nikolay Puzanov Date: Thu, 30 Jan 2025 12:31:29 +0300 Subject: [PATCH] Speed up printing of ^2 base --- uprintf.c | 30 +++++++++++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/uprintf.c b/uprintf.c index 1f54ed1..ec67c5c 100644 --- a/uprintf.c +++ b/uprintf.c @@ -103,12 +103,36 @@ static void print_decimal(put_char_func pc, uint64_t u, int negative, unsigned i do { uint64_t l; + /* Speed up of special cases */ + switch (base) { + case 2: + l = u & 1; + u >>= 1; + break; + + case 4: + l = u & 3; + u >>= 2; + break; + + case 8: + l = u & 7; + u >>= 3; + break; + + case 16: + l = u & 15; + u >>= 4; + break; + + default: #ifdef UPRINTF_CUSTOM_DIV_FUNC - u = idiv64_uu(u, (uint64_t)base, &l); + u = idiv64_uu(u, (uint64_t)base, &l); #else - l = u % base; - u = u / base; + l = u % base; + u = u / base; #endif + } s[si--] = abet[lcase][l]; } while (u > 0);