https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88955
--- Comment #3 from Alexander Monakov <amonakov at gcc dot gnu.org> ---
Note, without the attribute gcc passes the union on an SSE register, so it
doesn't look like TImode on the union matters (otherwise it would be passed via
rdx:rax register pair):
typedef unsigned long u64x2 __attribute__ ((vector_size (16)));
typedef union
{
u64x2 u64;
} v128;
v128 bar(v128 x);
v128 foo(v128 x)
{
x.u64 *= -1;
return bar(x);
}
foo:
vpxor %xmm1, %xmm1, %xmm1
vpsubq %xmm0, %xmm1, %xmm0
jmp bar