Re: [FFmpeg-devel] [PATCH] avutil/intmath: use bzhi gcc builtin in av_mod_uintp2()
On 26/06/15 8:14 PM, James Almer wrote: Signed-off-by: James Almer jamr...@gmail.com --- Now making sure it's not used with ICC. Pushed the original. Oked by Cehoyos who confirmed ICC never reaches this code to begin with. ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
[FFmpeg-devel] [PATCH] avutil/intmath: use bzhi gcc builtin in av_mod_uintp2()
Signed-off-by: James Almer jamr...@gmail.com --- libavutil/x86/intmath.h | 7 +++ 1 file changed, 7 insertions(+) diff --git a/libavutil/x86/intmath.h b/libavutil/x86/intmath.h index c42fa83..85f15a4 100644 --- a/libavutil/x86/intmath.h +++ b/libavutil/x86/intmath.h @@ -39,6 +39,12 @@ #if defined(__BMI2__) +#if AV_GCC_VERSION_AT_LEAST(5,1) +#define av_mod_uintp2 __builtin_ia32_bzhi_si +#else +/* GCC releases before 5.1.0 have a broken bzhi builtin, so for those we + * implement it using inline assembly + */ #define av_mod_uintp2 av_mod_uintp2_bmi2 static av_always_inline av_const unsigned av_mod_uintp2_bmi2(unsigned a, unsigned p) { @@ -50,6 +56,7 @@ static av_always_inline av_const unsigned av_mod_uintp2_bmi2(unsigned a, unsigne return x; } } +#endif /* AV_GCC_VERSION_AT_LEAST */ #endif /* __BMI2__ */ -- 2.4.4 ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
Re: [FFmpeg-devel] [PATCH] avutil/intmath: use bzhi gcc builtin in av_mod_uintp2()
On 26/06/15 4:56 PM, Carl Eugen Hoyos wrote: On Friday 26 June 2015 09:52:31 pm James Almer wrote: +#if AV_GCC_VERSION_AT_LEAST(5,1) +#define av_mod_uintp2 __builtin_ia32_bzhi_si Since there are compilers != gcc that define GCC (for example icc), this needs a configure check imo. Does it define __GNUC__ with a value =5 like I'm checking above? And if it defines __GNUC__, shouldn't it support the relevant builtins or defines? What is the advantage over the inline version? The bzhi instruction sets the ZF flag among others, but GCC apparently doesn't take it into consideration when it's used inside the __asm__() block, so something like if (av_mod_uintp2(foo, bar)) will result in a bzhi instruction followed by a test instruction. This doesn't happen if you use the builtin. Carl Eugen ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
Re: [FFmpeg-devel] [PATCH] avutil/intmath: use bzhi gcc builtin in av_mod_uintp2()
On Friday 26 June 2015 09:52:31 pm James Almer wrote: +#if AV_GCC_VERSION_AT_LEAST(5,1) +#define av_mod_uintp2 __builtin_ia32_bzhi_si Since there are compilers != gcc that define GCC (for example icc), this needs a configure check imo. What is the advantage over the inline version? Carl Eugen ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
[FFmpeg-devel] [PATCH] avutil/intmath: use bzhi gcc builtin in av_mod_uintp2()
Signed-off-by: James Almer jamr...@gmail.com --- Now making sure it's not used with ICC. libavutil/x86/intmath.h | 7 +++ 1 file changed, 7 insertions(+) diff --git a/libavutil/x86/intmath.h b/libavutil/x86/intmath.h index c42fa83..8127e10 100644 --- a/libavutil/x86/intmath.h +++ b/libavutil/x86/intmath.h @@ -39,6 +39,12 @@ #if defined(__BMI2__) +#if AV_GCC_VERSION_AT_LEAST(5,1) !defined(__INTEL_COMPILER) +#define av_mod_uintp2 __builtin_ia32_bzhi_si +#else +/* GCC releases before 5.1.0 have a broken bzhi builtin, so for those we + * implement it using inline assembly + */ #define av_mod_uintp2 av_mod_uintp2_bmi2 static av_always_inline av_const unsigned av_mod_uintp2_bmi2(unsigned a, unsigned p) { @@ -50,6 +56,7 @@ static av_always_inline av_const unsigned av_mod_uintp2_bmi2(unsigned a, unsigne return x; } } +#endif /* AV_GCC_VERSION_AT_LEAST */ #endif /* __BMI2__ */ -- 2.4.4 ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel