On Mon, 28 Mar 2016, Allan Sandfeld Jensen wrote:

On Sunday 27 March 2016, Marc Glisse wrote:
On Sun, 27 Mar 2016, Allan Sandfeld Jensen wrote:
Would it be possible to add constexpr to the intrinsics headers?

For instance _mm_set_XX and _mm_setzero intrinsics.

Already suggested here:
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65197

A patch would be welcome (I started doing it at some point, I don't
remember if it was functional, the patch is attached).

That looks very similar to the patch I experimented with, and that at least
works for using them in C++11 constexpr functions.

Ideally it could also be added all intrinsics that can be evaluated at
compile time, but it is harder to tell which those are.

Does gcc have a C extension we can use to set constexpr?

What for?

To have similar functionality in C. For instance to explicitly allow those
functions to be evaluated at compile time, and values with similar attributes
be optimized completely out.

Those intrinsics that are implemented without builtins can already be evaluated at compile time.

#include <x86intrin.h>

__m128d f(){
  __m128d a=_mm_set_pd(1,2);
  __m128d b=_mm_setr_pd(4,3);
  return _mm_add_pd(a, b);
}

The generated asm is just

        movapd  .LC0(%rip), %xmm0
        ret

For the more esoteric intrinsics, what is missing is not in the parser, it is a folder that understands the behavior of each particular intrinsic.

And of course avoid using precompiler noise, in
shared C/C++ headers like these are.

--
Marc Glisse

Reply via email to