On Mon, 17 Dec 2007, [EMAIL PROTECTED] wrote: > When we can't hint the real target, we want to hint the most common > target. There are potentially clever ways for the compiler to do this > automatically, but I'm most interested in giving the user some way to do > it explicitly. One possiblity is to have something similar to > __builtin_expect, but for functions. For example, I propose: > > __builtin_expect_call (FP, PFP)
Is there a hidden benefit? I mean, isn't this really expressable using builtin_expect as-is, at least when it comes to the syntax? Like: > > which returns the value of FP with the same type as FP, and tells the > compiler that PFP is the expected target of FP. Trival examples: > > typedef void (*fptr_t)(void); > > extern void foo(void); > > void > call_fp (fptr_t fp) > { > /* Call the function pointed to by fp, but predict it as if it is > calling foo() */ > __builtin_expect_call (fp, foo)(); __builtin_expect (fp, foo); /* alt __builtin_expect (fp == foo, 1); */ fp (); > } > > void > call_fp_predicted (fptr_t fp, fptr_t predicted) > { > /* same as above but the function we are calling doesn't have to be > known at compile time */ > __builtin_expect_call (fp, predicted)(); __builtin_expect (fp, predicted); fp(); I guess the information just isn't readily available in the preferred form when needed and *that* part could more or less simply be fixed? brgds, H-P