SSE vectorización de la función matemática 'pow' gcc

Estaba tratando de vectorizar un bucle que contiene el uso de la función 'pow' en la biblioteca matemática. Sé que el compilador de Intel admite el uso de 'pow' para instrucciones sse, pero parece que no puedo ejecutarlo con gcc (creo). Este es el caso con el que estoy trabajando:

int main(){
        int i=0;
        float a[256],
        b[256];

        float x= 2.3;


        for  (i =0 ; i<256; i++){
                a[i]=1.5;
        }

        for (i=0; i<256; i++){
                b[i]=pow(a[i],x);
        }

        for (i=0; i<256; i++){
                b[i]=a[i]*a[i];
        }
    return 0;

}

Estoy compilando lo siguiente:

gcc -O3 -Wall -ftree-vectorize -msse2 -ftree-vectorizer-verbose=5 code.c -o runthis

Esto está en OS X 10.5.8 usando gcc versión 4.2 (también utilicé 4.5 y no podía decir si había vectorizado algo, ya que no produjo nada). Parece que ninguno de los bucles se vectoriza: ¿hay algún problema de alineación o algún otro problema que deba restringir? Si escribo uno de los bucles como una función, obtengo un resultado ligeramente más detallado (código):

void pow2(float *a, float * b, int n) {
        int i;
        for (i=0; i<n; i++){
                b[i]=a[i]*a[i];
        }
}

output (utilizando salida detallada de nivel 7):

note: not vectorized: can't determine dependence between *D.2878_13 and *D.2877_8
bad data dependence.

Miré elgcc auto-vectorización página, pero eso no ayudó mucho. Si no es posible usar pow en la versión gcc, ¿dónde podría encontrar el recurso para hacer una función equivalente a pow (estoy tratando principalmente con poderes enteros).

Edita así que solo estaba cavando en otra fuente, ¿cómo se vectorizó esto?!:

void array_op(double * d,int len,double value,void (*f)(double*,double*) ) { 
    for ( int i = 0; i < len; i++ ){
        f(&d[i],&value);
    }
};

La salida de gcc relevante:

note: Profitability threshold is 3 loop iterations.

note: LOOP VECTORIZED.

Bueno, ahora estoy perdido: 'd' y 'value' están modificados por una función que gcc desconoce: ¿extraño? Tal vez necesito probar esta porción un poco más a fondo para asegurarme de que los resultados sean correctos para la porción vectorizada. Todavía estoy buscando una biblioteca matemática vectorizada: ¿por qué no hay ninguna fuente abierta?

Respuestas a la pregunta(2)

Su respuesta a la pregunta