> -----Original Message----- > From: Qiu, Michael > Sent: Friday, November 27, 2015 2:02 PM > To: Ananyev, Konstantin > Cc: Thomas Monjalon; dev at dpdk.org > Subject: Re: [PATCH] lib/librte_sched: Fix compile with gcc 4.3.4 > > I just replied that Marco AVX only exist in gcc version < 4.4 , otherwise it > will not exist.
If macro __AVX__ not defined, then #if defined(__AVX__) would always be false and SCHED_VECTOR_ENABLE also wouldn't be defined. So still don't understand why that is a problem Konstantin > > What's your suggest will not work if gcc version greater than 4.3. > > So still need to check gcc version. Any other solution? > > Thanks, > Michael > > > ? 2015?11?27????8:34?Ananyev, Konstantin <konstantin.ananyev at intel.com> > > ??? > > > > > >> -----Original Message----- > >> From: dev [mailto:dev-bounces at dpdk.org] On Behalf Of Qiu, Michael > >> Sent: Friday, November 27, 2015 11:53 AM > >> To: Thomas Monjalon > >> Cc: dev at dpdk.org > >> Subject: Re: [dpdk-dev] [PATCH] lib/librte_sched: Fix compile with gcc > >> 4.3.4 > >> > >> really?I don't think so. > >> > >> AVX Marco only exist in the gcc version below 4.4, I still need to check > >> if below or beyond 4.4 am I right? > >> > >> Thanks, > >> Michael > > > > > > If you look at lib/librte_eal/common/include/arch/x86/rte_vect.h, you'll > > see the code similar > > to one you are trying to put into rte_shed.c: > > > > lib/librte_eal/common/include/arch/x86/rte_vect.h: > > ... > > #if (defined(__ICC) || (__GNUC__ == 4 && __GNUC_MINOR__ < 4)) > > > > #ifdef __SSE__ > > #include <xmmintrin.h> > > #endif > > > > #ifdef __SSE2__ > > #include <emmintrin.h> > > #endif > > > > #ifdef __SSE3__ > > #include <tmmintrin.h> > > #endif > > > > #if defined(__SSE4_2__) || defined(__SSE4_1__) > > #include <smmintrin.h> > > #endif > > > > #if defined(__AVX__) > > #include <immintrin.h> > > #endif > > > > #else > > > > #include <x86intrin.h> > > > > #endif > > ... > > > > So I think you can do just like that: > > > > #include <rte_vect.h> > > #if defined(__AVX__) > > #define SCHED_VECTOR_ENABLE > > #endif > > > > inside rte_sched.c > > > > Konstantin > > > > > >> > >> > >>> ? 2015?11?27????5:01?Thomas Monjalon <thomas.monjalon at 6wind.com> ??? > >>> > >>> 2015-11-27 02:26, Qiu, Michael: > >>>>>> On 2015/11/27 5:29, Thomas Monjalon wrote: > >>>>>> 2015-11-26 18:49, Michael Qiu: > >>>>>> gcc 4.3.4 does not include "immintrin.h", and will post below error: > >>>>>> lib/librte_sched/rte_sched.c:56:23: error: > >>>>>> immintrin.h: No such file or directory > >>>>>> > >>>>>> To avoid this issue, a gcc version check is need and a flag to indicate > >>>>>> vector ablility. > >>>>> [...] > >>>>>> +#if (defined(__ICC) || (__GNUC__ == 4 && __GNUC_MINOR__ < 4)) > >>>>>> + > >>>>>> +#if defined(__AVX__) > >>>>>> #include <immintrin.h> > >>>>>> +#define SCHED_VECTOR_ENABLE > >>>>>> +#endif > >>>>>> + > >>>>>> +#else > >>>>>> + > >>>>>> +#include <x86intrin.h> > >>>>>> +#define SCHED_VECTOR_ENABLE > >>>>>> + > >>>>>> +#endif > >>>>> This kind of complication is managed by EAL. > >>>>> I think we should include rte_vect.h. > >>>> > >>>> As I know here it needs a flag to identify whether the platform support > >>>> AVX, if not it will not use it, so I don't know if we could only simply > >>>> include rte_vect.h? > >>> > >>> It's not exclusive. > >>> You can include rte_vect.h and check AVX to define SCHED_VECTOR_ENABLE. > >>>