Hi,

Its current setting is 128.  It originally had been 64 and was bumped to 128 
in 2001 when Altivec support was added; yet:

aix.h:
/* AIX does not support Altivec.  */
#undef  TARGET_ALTIVEC
#define TARGET_ALTIVEC 0
#undef  TARGET_ALTIVEC_ABI
#define TARGET_ALTIVEC_ABI 0

That's problematic (in particular for Ada) because nothing is 128-bit aligned 
on AIX 32-bit.  The stack is not:

rs6000.h:
/* Boundary (in *bits*) on which stack pointer should be aligned.  */
#define STACK_BOUNDARY \
  ((TARGET_32BIT && !TARGET_ALTIVEC && !TARGET_ALTIVEC_ABI) ? 64 : 128)

The sections are not either:

xcoff.h:
/* Output before writable data.
   Align entire section to BIGGEST_ALIGNMENT.  */
#define DATA_SECTION_ASM_OP "\t.csect .data[RW],3"

rs6000.c:
/* A get_unnamed_decl callback, used for read-only sections.  PTR
   points to the section string variable.  */

static void
rs6000_xcoff_output_readonly_section_asm_op (const void *directive)
{
  fprintf (asm_out_file, "\t.csect %s[RO],3\n",
           *(const char *const *) directive);
}

/* Likewise for read-write sections.  */

static void
rs6000_xcoff_output_readwrite_section_asm_op (const void *directive)
{
  fprintf (asm_out_file, "\t.csect %s[RW],3\n",
           *(const char *const *) directive);
}


As a result, the Ada compiler cannot pass the ACATS testsuite on AIX 32-bit.

We therefore are proposing to revert to the pre-Altivec setting.

-- 
Eric Botcazou

Reply via email to