http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57949
--- Comment #3 from Bill Schmidt <wschmidt at gcc dot gnu.org> --- The problem is target-specific, in config/rs6000/rs6000.c: rs6000_function_arg_boundary(). static unsigned int rs6000_function_arg_boundary (enum machine_mode mode, const_tree type) { if (DEFAULT_ABI == ABI_V4 && (GET_MODE_SIZE (mode) == 8 || (TARGET_HARD_FLOAT && TARGET_FPRS && (mode == TFmode || mode == TDmode)))) return 64; else if (SPE_VECTOR_MODE (mode) || (type && TREE_CODE (type) == VECTOR_TYPE && int_size_in_bytes (type) >= 8 && int_size_in_bytes (type) < 16)) return 64; else if (ALTIVEC_OR_VSX_VECTOR_MODE (mode) || (type && TREE_CODE (type) == VECTOR_TYPE && int_size_in_bytes (type) >= 16)) return 128; else if (TARGET_MACHO && rs6000_darwin64_abi && mode == BLKmode && type && TYPE_ALIGN (type) > 64) return 128; else return PARM_BOUNDARY; } Note that the TARGET_MACHO + Darwin ABI case does what the 64-bit PowerPC ELF ABI implies should be done. It's not clear to me why that ABI is excluded.