commit | 5c54b53299d0223877158df6285560b7a69609ff | [log] [tgz] |
---|---|---|
author | Richard Henderson <rth@twiddle.net> | Sat Apr 16 08:24:15 2011 -0700 |
committer | Richard Henderson <rth@twiddle.net> | Sat Apr 16 08:24:15 2011 -0700 |
tree | 81474e4362283ed7d8fe02a9e6e28786c8e8c505 | |
parent | 3fae2a407ae3a09d6191ba407a8ce93c2e57c506 [diff] |
Use explicit division avoidance in print_decimal.
diff --git a/printf.c b/printf.c index b67d7da..c982353 100644 --- a/printf.c +++ b/printf.c
@@ -14,8 +14,16 @@ { 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); }