https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85669

--- Comment #14 from Wilco <wilco at gcc dot gnu.org> ---
Since DEFAULT_ABI == ABI_DARWIN, the save area is 24 bytes:

#define RS6000_SAVE_AREA \
  ((DEFAULT_ABI == ABI_V4 ? 8 : DEFAULT_ABI == ABI_ELFv2 ? 16 : 24)     \
   << (TARGET_64BIT ? 1 : 0))

STACK_BOUNDARY is 128 bit (due to TARGET_ALTIVEC_ABI == 1 on darwin):

#define STACK_BOUNDARY  \
  ((TARGET_32BIT && !TARGET_ALTIVEC && !TARGET_ALTIVEC_ABI && !TARGET_VSX) \
    ? 64 : 128)

So here is the bug in darwin.h:

#undef STACK_DYNAMIC_OFFSET
#define STACK_DYNAMIC_OFFSET(FUNDECL)                                   \
  (RS6000_ALIGN (crtl->outgoing_args_size.to_constant (), 16)           \
   + (STACK_POINTER_OFFSET))

This will correctly align the outgoing arguments to fails to align the outgoing
arguments. The STACK_DYNAMIC_OFFSET definitions in rs6000.h and aix.h are
correct.

Reply via email to