Messages in this thread | | | Date | Mon, 11 Aug 2003 05:55:31 +0100 | From | Jamie Lokier <> | Subject | Re: [PATCH] 2.4.22pre10: {,un}likely_p() macros for pointers |
| |
Willy Tarreau wrote: > > I looked at the assembly (ppc, gcc 3.2.3) and didn't > > see any overhead. > > same here on x86, gcc-2.95.3 and gcc-3.3.1. The compiler is smart enough not > to add several intermediate tests for !!(x).
What I recall is no additional tests, but the different forms affected the compilers choice of instructions on x86, making one form better than another. Unfortunately I don't recall what that was, or what test it showed up in :(
> I agree (I didn't think about pointers, BTW). But what I meant is that we > don't need the result to be precisely 1, but we need it to be something the > compiler interpretes as different from zero, to match the condition. So it > should be cleaner to always check against 0 which is also OK for pointers, > whatever their type (according to Chip's link) : > > likely => __builtin_expect(!(x), 0)
This will break "if (likely(p)) { ... }"
> unlikely => __builtin_expect((x), 0)
This will give a warning with "if (unlikely(p)) { ... }"
-- Jamie - 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/
| |