This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH, rs6000] Add x86 instrinsic headers to GCC PPC64LE taget


On Thu, 2017-05-11 at 09:39 -0500, Segher Boessenkool wrote:
> On Wed, May 10, 2017 at 12:59:28PM -0500, Steven Munroe wrote:
> > > That is just for the testsuite; I meant what happens if a user tries
> > > to use it with an older target (or BE, or 32-bit)?  Is there a useful,
> > > obvious error message?
> > > 
> > So looking at the X86 headers, their current practice falls into two two
> > areas. 
> > 
> > 1) guard 64-bit dependent intrinsic functions with:
> > 
> > #ifdef __x86_64__
> > #endif
> > 
> > But they do not provide any warnings. I assume that attempting to use an
> > intrinsic of this class would result in an implicit function declaration
> > and a link-time failure.
> 
> Yeah probably.  Which is fine -- it does not silently do the wrong thing,
> and it is easy to find where the problem is.
> 
> > If GCC does support that target then the '#pragma GCC target("avx")'
> > will enable code generation, but the user might get a SIGILL if the
> > hardware they have does not support those instructions.
> 
> That is less friendly, but it still does not silently generate bad code.
> 
> > In the BMI headers I already guard with:
> > 
> > #ifdef  __PPC64__
> > #endif
> > 
> > This means that like x86_64, attempting to use _pext_u64 on a 32-bit
> > compiler will result in an implicit function declaration and cause a
> > linker error.
> 
> Yup, that's fine.
> 
> > This is sufficient for most of BMI and BMI2 (registers only / endian
> > agnostic). But this does not address the larger issues (for SSE/SSE2+)
> > which needing VXS implementation or restricting to LE.
> 
> Right.
> 
> > So should I check for:
> > 
> > #ifdef __VSX__
> > #endif
> > 
> > or 
> > 
> > #ifdef __POWER8_VECTOR__
> > 
> > or 
> > 
> > #ifdef _ARCH_PWR8
> > 
> > and perhaps:
> > 
> > #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
> > 
> > as well to enforce this. 
> > 
> > And are you suggesting I add an #else clause with #warning or #error? Or
> > is the implicit function and link failure sufficient?
> 
> The first is friendlier, the second is sufficient I think.
> 
> Maybe it is good enough to check for LE only?  Most unmodified code
> written for x86 (using intrinsics etc.) will not work correctly on BE.
> And if you restrict to LE you get 64-bit and POWER8 automatically.
> 
> So maybe just require LE?
> 
Ok I will add "#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__" guard for
the MMX/SSE and later intrinsic headers.



Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]