On Wed, 20 Dec 2000, Steve Grubb wrote:

> +                        while (isdigit(c)) {
> +                                result = (result*10) + (c & 0x0f);
> +                                c = *(++cp);
> +                        }

x * 10 can be written as:

(x << 2 + x) << 1   = (4x+x) * 2
(x << 3) + (x << 1) = 8x + 2x 

Not sure if that/which one is faster, you may want to benchmark.
However, on machines that I have seen, multiplication times are either
constant or depend on the count of set bits in the second divisor, so
it's something like 6 + 2s.

However, I have only m68k data books here, and it will gain nothing on
an 'C68060 since those beasts ram down multiplications in 2 cycles, so
we'd gain nothing on those chips (OK, the shifts take 1 cycles each and
are scheduled in parallel, and the add takes an additional cycle after
the shifts have completed). Not sure about the ix86, alpha or sparc
series.

-- 
Matthias Andree
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
Please read the FAQ at http://www.tux.org/lkml/

Reply via email to