Sorry for late response. Jim had given the correct answer already. You won't get an extra instruction with compiler optimization turned on.
Aleksey. On Mon, Nov 20, 2017 at 4:36 PM, Wiles, Keith <keith.wi...@intel.com> wrote: > > > > On Nov 19, 2017, at 4:16 PM, Aleksey Baulin <aleksey.bau...@gmail.com> > wrote: > > > > A warning is issued when using an argument to likely() or unlikely() > > builtins which is evaluated to a pointer value, as __builtin_expect() > > expects a 'long int' type for its first argument. With this fix > > a pointer value is converted to an integer with the value of 0 or 1. > > > > Signed-off-by: Aleksey Baulin <aleksey.bau...@gmail.com> > > --- > > lib/librte_eal/common/include/rte_branch_prediction.h | 4 ++-- > > 1 file changed, 2 insertions(+), 2 deletions(-) > > > > diff --git a/lib/librte_eal/common/include/rte_branch_prediction.h > b/lib/librte_eal/common/include/rte_branch_prediction.h > > index a6a56d1..2e7dc69 100644 > > --- a/lib/librte_eal/common/include/rte_branch_prediction.h > > +++ b/lib/librte_eal/common/include/rte_branch_prediction.h > > @@ -50,7 +50,7 @@ > > * > > */ > > #ifndef likely > > -#define likely(x) __builtin_expect((x),1) > > +#define likely(x) __builtin_expect(!!(x), 1) > > #endif /* likely */ > > > > /** > > @@ -64,7 +64,7 @@ > > * > > */ > > #ifndef unlikely > > -#define unlikely(x) __builtin_expect((x),0) > > +#define unlikely(x) __builtin_expect(!!(x), 0) > > I have not looked at the generated code, but does this add some extra > instruction now to do the !!(x) ? > > > #endif /* unlikely */ > > > > #endif /* _RTE_BRANCH_PREDICTION_H_ */ > > -- > > 2.7.4 > > > > Regards, > Keith > > -- Aleksey Baulin