Re: [PATCH] 2.4.21-rc1 pointless IDE noise reduction

Richard B. Johnson (root@chaos.analogic.com)
Thu, 24 Apr 2003 12:46:10 -0400 (EDT)


On Thu, 24 Apr 2003, Timothy Miller wrote:

>
>
> Richard B. Johnson wrote:
>
> >On Thu, 24 Apr 2003, Chuck Ebbert wrote:
> >
> >
> >
> >>Jens Axboe wrote:
> >>
> >>
> >>
> >>
> >>>>+ return((drive->id->cfs_enable_1 & 0x0400) ? 1 : 0);
> >>>> }
> >>>>
> >>>>
> >>>Seconded, it causes a lot more confusion than it does good.
> >>>
> >>>
> >> The return looks like a function call in that last line.
> >>
> >> That's one of the few things I find really annoying -- extra parens
> >>are fine when they make code clearer, but not there.
> >>
> >>
> >>-------
> >> Chuck [ C Style Police, badge #666 ]
> >>
> >>
> >
> >return((drive->id->cfs_enable_1 & 0x0400) ? 1 : 0);
> > ^^^^^^|__________ wtf?
> >These undefined numbers in the code are much more annoying to me...
> >but I don't have a C Style Police Badge.
> >
> >Also, whatever that is, 0x400, I'll call it MASK, can have shorter
> >code like:
> >
> > return (drive->id->cfs_enable_1 && MASK); // TRUE/FALSE
> >... for pedantics...
> > return (int) (drive->id->cfs_enable_1 && MASK);
> >
> >
> >
> >
>
> That wouldn't work, because && isn't a bitwise operator. But I agree
> that the ( x ? 1 : 0 ) method may not be very efficient, because it may
> involve branches.
>
> Two alternatives:
>
> (a) !!(x & 0x400)
>
> (b) (x & 0x400) >> 10
>

I meant return ((foo & MASK) && 1);

Try it, you'll like it! No shifts, no jumps.

int main()
{
int foo = 0x12340400;
printf("%d\n", ((foo & 0x400) && 1));
printf("%d\n", ((foo & 0x300) && 1));
printf("%d\n", ((foo & 0x500) && 1));
}

Cheers,
Dick Johnson
Penguin : Linux version 2.4.20 on an i686 machine (797.90 BogoMips).
Why is the government concerned about the lunatic fringe? Think about it.

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/