[RFC] How to add vector math functions to Glibc
Joseph S. Myers
joseph@codesourcery.com
Tue Oct 21 15:29:00 GMT 2014
On Tue, 21 Oct 2014, Andrew Senkevich wrote:
> > There shouldn't be such conditionals. It should be arranged that if
> > there isn't a relevant vector version of a particular function, running
> > vector tests for that function does nothing - so there are no conditionals
> > on which *_test functions to run, and none inside those functions, just
> > conditionals affecting what the test macros do (by means of conditionals
> > inside them such as if (HAVE_VECTOR_cos_double_vlen4), for example,
> > resulting from appropriate concatenations).
>
> With HAVE_VECTOR_cos_double_vlen4 we need to have such macros with
> zero for all set of not vector functions which is huge.
But I'd hope such macros could be generated by gen-libm-test.pl (or some
such script, anyway) rather than needing lots of repetitive definitions to
be maintained by hand and checked in.
Essentially:
* The architecture-specific headers (installed headers, or possibly
non-installed ones used only by the testsuite in some cases) contain the
information about what vector versions of what functions are available.
Things are designed so that they only need to contain definitions where
vector functions are available, not where they aren't (to avoid needing to
repeat slightly different huge lists for each architecture).
* Where a default definition to 0 is needed in any cases, the relevant
definitions are generated automatically. (Indeed, this might make sense
for a header included by bits/mathcalls.h, so that __MATHCALL can expand
to include the right __DECL_SIMD_*, which might end up empty, rather than
needing lots of #if conditionals before every function declaration there.)
(Incidentally, there have been so many different patch fragments posted in
this discussion that it's hard to follow what you're proposing, if e.g. in
the discussion of testing it's relevant to look at what you're proposing
for installed headers. I think it would help if you had a git branch with
the current set of proposed changes, that you frequently rebase so it
always shows what you currently propose.)
> May be more suitable way is to have determined name of vector function
> wrapper and selection based on function name?
> I mean to have something like this in test driver test-double-vlen4.c:
>
> #define HAVE_VECTOR 1
> #define VEC_PREFIX_STR "VECTOR_LEN_"
> #define cos VECTOR_LEN_4_cos
> #include "libm-test.c"
>
> in test-double-vlen4-wrapper.c:
>
> VECTOR_WRAPPER(VECTOR_LEN_4_cos,_ZGVdN4v_cos)
If you did something like that, I think it would still be desirable to
have some form of automatic generation of a list of defines, one per
function and conditional as needed on whether the relevant vector version
of that function exists.
--
Joseph S. Myers
joseph@codesourcery.com
More information about the Libc-alpha
mailing list