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