https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81467

--- Comment #1 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
If you want to clobber the xmm16-31 and/or k registers, do it conditionally
based on preprocessor macros:
  __asm ("...." : ... : ... : "..."
#if defined(__AVX512F__) && defined(__x86_64__)
         , "xmm18"
#endif
#if defined(__AVX512F__)
         , "k4"
#endif
  );
xmm16+ is only available in m64/mx31 code (thus __x86_64__) and if AVX512F is
included.  Then if you compile code with -mavx512f -m64 or similar, it will
clobber those registers, otherwise the registers aren't really available to the
compiler and don't have to be clobbered.

As for 2), you haven't read the gcc documentation. { and } are special
characters in the inline asm templates, for supporting multiple dialects.
So you need to use "vmovdqu32 0(%0), %%zmm0 %{%%k1%}%{z%}".

Reply via email to