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

Peter Cordes <peter at cordes dot ca> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Target|i386-linux-gnu              |i386-linux-gnu,
                   |                            |x86_64-linux-gnu

--- Comment #1 from Peter Cordes <peter at cordes dot ca> ---
I noticed a similar (the same?) problem in 64bit mode: http://goo.gl/8B7O7T

    typedef float __m512 __attribute__ ((vector_size (64)));

    __m512 mul_broad(__m512 a, float b) {
        asm(
            //"vbroadcastss  %[scalar], %g[scalar]\n\t"
            //"vmulps        %g[scalar], %[vec], %[vec]\n\t"
          ""
            : [vec] "+x" (a), [scalar] "+x" (b)
            :
            :
        );
        return a;
    }


mul_broad(float __vector(16), float):
 push   %rbp
 mov    %rsp,%rbp
 push   %r10
 pop    %r10
 pop    %rbp
 retq


An extremely similar function compiles fine:


__m512 mul_broad2(__m512 a, float b) {
    __m512 tmpvec;
    asm(
        "vbroadcastss  %[scalar], %[tmpvec]\n\t"
        "vmulps        %[tmpvec], %[vec], %[vec]\n\t"
        : [vec] "+x" (a), [tmpvec] "=x" (tmpvec)
        : [scalar] "1" (b)
        :
    );

  return a;
}

mul_broad2(float __vector(16), float):
 vbroadcastss %xmm1,%zmm1
 vmulps %zmm1,%zmm0,%zmm0
 retq

Reply via email to