On 8/28/2017 1:41 PM, wm4 wrote: > On Mon, 28 Aug 2017 12:53:09 -0300 > James Almer <[email protected]> wrote: > >> On 8/28/2017 12:08 PM, wm4 wrote: >>> On Mon, 28 Aug 2017 11:52:52 -0300 >>> James Almer <[email protected]> wrote: >>> >>>> AV_CPU_FLAG_MMX == AV_CPU_FLAG_ARMV6 == AV_CPU_FLAG_ALTIVEC >>>> AV_CPU_FLAG_3DNOWEXT == AV_CPU_FLAG_NEON >>>> AV_CPU_FLAG_SSE == AV_CPU_FLAG_VFP >>>> >>>> Signed-off-by: James Almer <[email protected]> >>>> --- >>>> libavutil/cpu.c | 13 +++++++++++-- >>>> 1 file changed, 11 insertions(+), 2 deletions(-) >>>> >>>> diff --git a/libavutil/cpu.c b/libavutil/cpu.c >>>> index 5aef6af21..da857cd2c 100644 >>>> --- a/libavutil/cpu.c >>>> +++ b/libavutil/cpu.c >>>> @@ -20,6 +20,7 @@ >>>> #include <stdint.h> >>>> #include <stdatomic.h> >>>> >>>> +#include "attributes.h" >>>> #include "cpu.h" >>>> #include "cpu_internal.h" >>>> #include "config.h" >>>> @@ -184,12 +185,20 @@ int av_cpu_count(void) >>>> >>>> size_t av_cpu_max_align(void) >>>> { >>>> - int flags = av_get_cpu_flags(); >>>> + int av_unused flags = av_get_cpu_flags(); >>>> >>>> +#if ARCH_ARM || ARCH_AARCH64 >>>> + if (flags & AV_CPU_FLAG_NEON) >>>> + return 16; >>>> +#elif ARCH_PPC >>>> + if (flags & AV_CPU_FLAG_ALTIVEC) >>>> + return 16; >>>> +#elif ARCH_X86 >>>> if (flags & AV_CPU_FLAG_AVX) >>>> return 32; >>>> - if (flags & (AV_CPU_FLAG_ALTIVEC | AV_CPU_FLAG_SSE | >>>> AV_CPU_FLAG_NEON)) >>>> + if (flags & AV_CPU_FLAG_SSE) >>>> return 16; >>>> +#endif >>>> >>>> return 8; >>>> } >>> >>> Wouldn't it be better to make the values disjoint? >> >> That requires an ABI break and is not a good solution, especially when >> it's only a "problem" in a function like this one outside of arch >> specific folders. > > Libav recently had an ABI bump. Should still be possible.
That was five months ago. > > I had the same problem when trying to use this function from outside > Libav - I couldn't know on which arch Libav thinks it is, without > duplicating its configure check. This patch should solve that, returning the correct alignment depending on the arch the library was built for. In any case, there are 31 bits available for flags and x86 alone uses 23, and that's without AVX512. What you're asking for is kinda constricting and the supposed benefits doubtful. _______________________________________________ libav-devel mailing list [email protected] https://lists.libav.org/mailman/listinfo/libav-devel
