Thanks! Merged to master at 6c4f96784a55..c20f3b8bcb8c (from, to]
You can see the entire diff with 'git diff' or at https://github.com/brho/akaros/compare/6c4f96784a55...c20f3b8bcb8c On 2016-04-15 at 13:30 "'Michael Davidson' via Akaros" <[email protected]> wrote: > gcc has been optimizing division by a constant into a multiply > and shift for at least 10 years now so there is no need to do > this by hand as a special case - especially in a function that > is going to delay for at least 1 microsecond anyway. > > Also remove unnecessary casts - usec is a uint64_t so everything > else in the expression is going to get promoted appropriately. > > Signed-off-by: Michael Davidson <[email protected]> > --- > kern/arch/x86/time.c | 24 +++++++----------------- > 1 file changed, 7 insertions(+), 17 deletions(-) > > diff --git a/kern/arch/x86/time.c b/kern/arch/x86/time.c > index d08d589..fed0b73 100644 > --- a/kern/arch/x86/time.c > +++ b/kern/arch/x86/time.c > @@ -102,26 +102,16 @@ void udelay(uint64_t usec) > void udelay_pit(uint64_t usec) > { > int64_t delta, prev_tick, tick, ticks_left; > + > + if (usec <= 0) > + return; > + > prev_tick = getpit(); > /* > - * Calculate (n * (i8254_freq / 1e6)) without using floating > point > - * and without any avoidable overflows. > + * Calculate ticks as (usec * (i8254_freq / 1e6)) rounded up > + * without using floating point and without any avoidable > overflows. */ > - if (usec <= 0) > - ticks_left = 0; > - // some optimization from bsd code > - else if (usec < 256) > - /* > - * Use fixed point to avoid a slow division by > 1000000. > - * 39099 = 1193182 * 2^15 / 10^6 rounded to nearest. > - * 2^15 is the first power of 2 that gives exact > results > - * for n between 0 and 256. > - */ > - ticks_left = ((uint64_t)usec * 39099 + (1 << 15) - > 1) >> 15; > - else > - // round up the ticks left > - ticks_left = ((uint64_t)usec * (long long)PIT_FREQ+ > 999999) > - / 1000000; > + ticks_left = ((usec * PIT_FREQ) + 999999) / 1000000; > while (ticks_left > 0) { > tick = getpit(); > delta = prev_tick - tick; -- You received this message because you are subscribed to the Google Groups "Akaros" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. For more options, visit https://groups.google.com/d/optout.
