summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--printf.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/printf.c b/printf.c
index b67d7da..c982353 100644
--- a/printf.c
+++ b/printf.c
@@ -14,8 +14,16 @@ static int print_decimal(unsigned long val)
{
do
{
- *--p = (val % 10) + '0';
- val /= 10;
+ unsigned long d, r;
+
+ /* Compiling with -Os results in a call to the division routine.
+ Do what the compiler ought to have done. */
+ d = __builtin_alpha_umulh(val, 0xcccccccccccccccd);
+ d >>= 3;
+ r = val - (d * 10);
+
+ *--p = r + '0';
+ val = d;
}
while (val);
}