This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH 1/2 v4] libc-internal.h: add ALIGN helper macros


Mike Frysinger <vapier@gentoo.org> writes:

> On Monday 03 June 2013 15:12:05 Roland McGrath wrote:
>> I think we should be using inlines rather than macros any time we don't
>> have a strong reason to use macros.
>
> generally we don't do caps inlines though ?  and using inlines means we now 
> have to deal with types.  the current one works with any size and does the 
> right thing.  if i wrote an inline, i'd have to pick a type (size_t? int? 
> long? uint64_t? uintmax_t?) and then there'd be ugliness with signed vs 
> unsigned, implicit casts, implicit truncation, overhead with casting up to 
> larger than natural types (like 64bit on a 32bit system), etc...

I'm afraid one would have to deal with types anyway, as recently seen
in the kernel http://lwn.net/Articles/548336/.

>
>> > +/* Align a value by rounding down to closest size.
>> > +   e.g. Using size of 4096, we get this behavior:
>> > +	{4095, 4096, 4097} = {0, 4096, 4096}.  */
>> > +#define ALIGN_DOWN(base, size)	((base) & ~((size) - 1))

This won't DTRT if base is a 64-bit type and size is an unsigned
32-bit type.

-- 
Rasmus Villemoes
<http://rasmusvillemoes.dk/>


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]