> -----Original Message----- > From: Qiu, Michael > Sent: Friday, November 27, 2015 3:22 PM > To: Ananyev, Konstantin > Cc: Thomas Monjalon; dev at dpdk.org > Subject: Re: [PATCH] lib/librte_sched: Fix compile with gcc 4.3.4 > > Sorry for not explaining clearly. > > For gcc version start from version 4.4, x86intrin.h will be include, and > inside x86intrin.h, immintrin.h will be directly include without > check AVX
Yes, but inside immintrin.h there is a check. At least that what I am seeing for gcc4.4.3: #ifdef __AVX__ #include <avxintrin.h> #endif Isn't it the same for your case? Konstantin > (as I know, AVX is not exist when gcc >= 4.4),so no AVX macro does not mean > vector disable. > > Only gcc < 4.4 and no macro AVX will disable vector. > > This is my understanding, may be wrong :) > > Thanks, > Michael > > > ? 2015?11?27????10:09?Ananyev, Konstantin <konstantin.ananyev at intel.com> > > ??? > > > > > > > >> -----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. > >>>>>