Hi, 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? -- WBR, Andrew