Source-Changes-D archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: CVS commit: src/lib/libc/string

On Mon, 19 Apr 2010, Joerg Sonnenberger wrote:
> On Sun, Apr 18, 2010 at 10:51:35AM +0000, Alan Barrett wrote:
> > Log Message:
> > Bitwise operations on signed types are well-defined if the values
> > happen to be positive, and indeed the values here were guaranteed
> > to be positive, but some compilers complained anyway, so convert
> > the bitwise operations to arithmetic operations.
> In that case use an explicit cast to the unsigned type. What you did is
> penalize the code for no good reason.

I expect the compiler to be able to figure out that some arithmetic
operations involving powers of 2 are equivalent to bitwise operations,
and to choose the most appropriate instructions.  This expectation
is not entirely unjustified; for example, I just verified that
"gcc -O2" emits identical code for the following two functions:

    int f(int i)
        if (i < 0) return 0;
        return i >> 3;

    int g(int i)
        if (i < 0) return 0;
        return i / 8;

--apb (Alan Barrett)

Home | Main Index | Thread Index | Old Index