Source-Changes archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: CVS commit: syssrc/sys/kern
On Wed, 02 Oct 2002 22:14:37 -0700
Matt Thomas <matt%3am-software.com@localhost> wrote:
> At 10:06 PM 10/2/2002, itojun%iijlab.net@localhost wrote:
> > >> Modified Files:
> > >> syssrc/sys/kern: kern_resource.c
> > >>
> > >> Log Message:
> > >> check negative arg. from openbsd
> > >Due to the `(u_int)' cast -- which I added just about 5 years ago --
> > >this code already handled negative arguments correctly. Your change
> > >is a noop.
> >
> > ok, but isn't it better to explicitly check
> > if (which < 0 || which >= MAX)
> > return EINVAL
> > than
> > if ((u_int)which >= MAX)
> > return EINVAL
> > from readability/clarity?
>
> No. It's slower and not if you don't know about signedness/unsigness
> of number, you shouldn't be doing kernel programming.
It's not slower (not unless it's got some magic quantum element hidden in it 8)
as the compiler optimises it to the same thing. I'd prefer readabilty over
casting because some thinks it's faster. (note I'll happily admit 5 years back
it probably was faster)
Certainly the arm compiler does:
#define MAX 4098
if (which < 0 || which >= MAX)
return EINVAL
mov r3, #4096
add r3, r3, #1
cmp r0, r3
movhi r0, #22
movls r0, #0
if ((u_int)which >= MAX)
return EINVAL;
mov r3, #4096
add r3, r3, #1
cmp r0, r3
movhi r0, #22
movls r0, #0
(note that i386 gcc produces identical code blocks, but I don't understand i386
asm that well, so not shown 8)
Chris
Home |
Main Index |
Thread Index |
Old Index