On Wed, May 23, 2012 at 09:57:47AM -0700, Linus Torvalds wrote: > On Wed, May 23, 2012 at 9:53 AM, Borislav Petkov <bp@xxxxxxxxx> wrote: > > > > How about the following completely untested chunk: > > No, you can't do that. All standard C operations will return *one* > type. That very much includes the ternary ?: operator. And, in addition, hpa's example won't work too: u64 msr = ~BIT(1); > The *only* ways I know of to get two types are > > - C preprocessor stuff, ie > > #define BIT(x) __BIT_##x > > and then just enumerate all the 64 cases. This is portable, but it gets old. Nah, that's ugly. > - using __builtin_choose_expr(), which actually allows the two > expressions to have different types, but requires a very strict > compile-time constant (ie you cannot rely on the optimizer making it a > constant - because it needs to choose the expression before the > optimizer runs) > > There might be some other magic gcc extension, of course. Hmm and if not, it looks like BIT_64 is the easiest and most readable thing we can do. Oh well. -- Regards/Gruss, Boris. -- To unsubscribe from this list: send the line "unsubscribe linux-tip-commits" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html