numbers.c: In function 'scm_exp':
numbers.c:6081: error: '__I' undeclared (first use in this function)
numbers.c:6081: error: (Each undeclared identifier is reported only once
numbers.c:6081: error: for each function it appears in.)

The error in line 617/640 could be resolved by an -fno-strict-aliasing
but the error in line 6081 is a real one...

#define SCM_COMPLEX_VALUE(z) \
(SCM_COMPLEX_REAL (z) + _Complex_I * SCM_COMPLEX_IMAG (z))
The problem is in _Complex_I
AIX 6.1 defines in complex.h
/*.
* a constant expression of type const float _Complex with the
* value of the imaginary unit. (a number i such that i**2 =-1).
* __I is provided by the AIX xlc C99 compiler.
* WARNING: DO NOT USE __I DIRECTLY in an application. Always
* use _Complex_I .
*/
#define _Complex_I __I
Would it be possible to changed this:
From gcc doc:

To write a constant with a complex data type, use the suffix `i' or `j'
(either one; they are equivalent). For example, |2.5fi| has type
|_Complex float| and |3i| has type |_Complex int|. Such a constant
always has a pure imaginary value, but you can form any complex value
you like by adding one to a real constant. This is a GNU extension; if
you have an ISO C99 conforming C library (such as GNU libc), and want to
construct complex constants of floating type, you should include
|<complex.h>| and use the macros |I| or |_Complex_I| instead.