2015-01-12 19:46 GMT+03:00 Jakub Jelinek <ja...@redhat.com>: > On Mon, Jan 12, 2015 at 07:38:10PM +0300, Andrew Senkevich wrote: >> > during work on addition vector math functions to Glibc and discussions >> > with community was found an issue with meaning of “#pragma omp declare >> > simd” (which will appear in math.h). >> > >> > Issue is there are no working way to specify ISA of vector function >> > in GCC 5.0, and hence no way to determine exact vector function name. >> > >> > Here is description of exact meaning of “#pragma omp declare simd” for >> > x86_64. >> > >> > This is proposed as agreement between compilers supporting OpenMP. >> > >> > *************** OpenMP vector function ABI for x86_64 *************** >> > >> > Name of vector math function is based on Intel Vector Function ABI >> > (http://www.cilkplus.org/sites/default/files/open_specifications/Intel-ABI-Vector-Function-2012-v0.9.5.pdf) >> > with a little difference in part of name specifying ISA – namely >> > letters b, c, d instead of x, y, Y. >> > >> > #pragma omp declare simd notinbranch simdlen(2) for some function >> > “func” means what the name of vector version is: >> > >> > _ZGVbN2v_func (it is SSE4 implementation). >> > >> > #pragma omp declare simd notinbranch simdlen(4) for some function >> > “func” means what the following names are available: >> > >> > _ZGVcN4v_func (it is AVX implementation) >> > and >> > _ZGVdN4v_func (it is AVX2 implementation). >> > >> > Every vector function should be provided by math library for each >> > supported ISA (currently SSE4, AVX and AVX2). >> > Semantics of those pragmas are independent of the processor for which >> > code is being generated. >> > Those pragmas must not be interpreted as meaning version of other ISA >> > of functions are available even if code is being built for a processor >> > with such ISA support. >> > Any future ABI extension that defines additional vector function >> > versions will also define a different pragma to declare their >> > availability. >> > >> > ********************************************************************* >> > >> > Any feedback? >> >> is this agreement OK? >> >> Consensus is required to commit x86_64 vector math functions by Glibc >> maintainer. > > With the difference that b stands for SSE2, not SSE4, and the fact > that those functions do not use the __regcall calling conventions, but > normal psABI calling conventions after replacing the arguments/return values > with the vectors documented in the 0.9.5 pdf (and/or adding the vector mask > arg) it describes what has been implemented, yes.
But which name use for SSE4? Gcc generates the same as for SSE2, and we now have SSE4 implementations. -- WBR, Andrew