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

--- Comment #2 from g.peterhoff.home at talkplus dot de ---
(In reply to Andrew Pinski from comment #1)
> I think you forgot to clear the MMX state.  MMX and FP share the same
> register set and need to be cleared before going from MMX to FP.

I know, but that's not the problem. If you replace
z.m=_mm_set1_pi32(r);
by
z.m=_mm_setzero_si64()
z.m+=r; // gcc only
it works.

With sse-intrinsict it works so well:

typedef union
{
    __m64    m;
    __m128i s;
    int16_t    e[4];
} ZZ;

z.s=_mm_set1_epi32(r);

AVX unfortunately I can not test because my hardware only with float/double
counted (AVX1), but not with integers (AVX2).

Reply via email to