https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102143
--- Comment #2 from Uroš Bizjak <ubizjak at gmail dot com> --- (In reply to H.J. Lu from comment #1) > 16-bit and 32-bit vector pass and return are not specified in i386 psABI. > 64-bit vector is specified, not really usable. Any suggestions? With -mno-sse, clang creates: foo: movzwl 16(%esp), %edx movzwl 12(%esp), %eax addw 4(%esp), %ax addw 8(%esp), %dx retl So, it is incompatible with itself for -msse/-mno-sse differences. The ABI should be ISA agnostic, so using integer ABI as implemented by gcc is IMO the way to go.