https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88671
Bug ID: 88671 Summary: generic vector passed in MMX regs Product: gcc Version: 9.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: target Assignee: unassigned at gcc dot gnu.org Reporter: rguenth at gcc dot gnu.org Target Milestone: --- typedef unsigned int U32; typedef U32 U32x2 __attribute__((vector_size(8))); typedef U32 U32x4 __attribute__((vector_size(16))); void bar2(U32x2); void foo2(U32x2 *p) { bar2(*p); } void bar4(U32x4); void foo4(U32x4 *p) { bar4(*p); } shows bar2/foo2 passing U32x2 in MMX regs on i?86-linux with -msse2 (on the stack when using -mno-mmx). On x86_64-linux args are passed in SSE regs. clang passes U32x2 values on the stack on i?86-linux independent of -m[no-]mmx.