[Gimp-developer] Unsigned vs. signed (forward from gcc-devel)

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

 



Hija,

seems I'm not the only one in favour of unsigned arithmetics where
possible.

------ Forwarded message ------
    From: Linus Torvalds <torvalds@xxxxxxxxxxxxx>
 Subject: Re: Optimizations on long long multiply/divide on PowerPC32  don't work
    Date: Mon, 10 Dec 2001 10:52:07 -0800 (PST)
      To: Franz Sirl <Franz.Sirl-kernel@xxxxxxxxxxxxxx>
      Cc: Richard Henderson <rth@xxxxxxxxxx>, <gcc@xxxxxxxxxxx>


On Mon, 10 Dec 2001, Franz Sirl wrote:
> >
> > Which part of FAT-FS actually tries to do a signed division?
>
> It's this code fragment:
>
>         inode->i_blocks = ((inode->i_size + inode->i_blksize - 1)
>                            & ~(inode->i_blksize - 1)) / 512;
>
> that is in inode.c/fat_read_root() and fat_fill_inode(). It's inode->i_size
> that is of type loff_t here.

Hmm, ok.

I've never really liked the signedness of "loff_t" (or "off_t"), as
negative numbers are illegal anyway, and are really only used for "seek
offset" case.

It might be a good idea to make the in-kernel sizes all be unsigned, to
avoid things like this being problematic.

For fat, the inode size is actually limited to 32 bits, so the above is
definitely _always_ a unsigned number, and a relatively small one at that.
So unsigned vs signed doesn't matter, but on the whole I'd prefer to
default to unsigned which tends to be faster anyway, and has less
surprising behaviour in case of bugs..

> It calculates the number of blocks here, so the rounding up might be wanted...

Yes, it does the rounding up by hand, but it does _not_ need or want the
"negative division" rounding part.

> Hehe, yeah, exactly :-). Anyway, Richard's patch works fine and gcc3 now is
> able to optimize the divdi3 call away.

Good. The code looks correct, even if I have this feeling that the kernel
might want changing too..

		Linus


--
Servus,
       Daniel









[Index of Archives]     [Video For Linux]     [Photo]     [Yosemite News]     [gtk]     [GIMP for Windows]     [KDE]     [GEGL]     [Gimp's Home]     [Gimp on GUI]     [Gimp on Windows]     [Steve's Art]

  Powered by Linux