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
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)
_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