http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53233
--- Comment #1 from Sean McGovern <gseanmcg at gmail dot com> 2012-05-04 19:00:05 UTC --- The code in question (with line numbers): 93 static void vector_fmul_window_altivec(float *dst, const float *src0, const float *src1, const float *win, int len) 94 { 95 vector float zero, t0, t1, s0, s1, wi, wj; 96 const vector unsigned char reverse = vcprm(3,2,1,0); 97 int i,j; 98 99 dst += len; 100 win += len; 101 src0+= len; 102 103 zero = (vector float)vec_splat_u32(0); 104 105 for(i=-len*4, j=len*4-16; i<0; i+=16, j-=16) { 106 s0 = vec_ld(i, src0); 107 s1 = vec_ld(j, src1); 108 wi = vec_ld(i, win); 109 wj = vec_ld(j, win); 110 111 s1 = vec_perm(s1, s1, reverse); 112 wj = vec_perm(wj, wj, reverse); 113 114 t0 = vec_madd(s0, wj, zero); 115 t0 = vec_nmsub(s1, wi, t0); 116 t1 = vec_madd(s0, wi, zero); 117 t1 = vec_madd(s1, wj, t1); 118 t1 = vec_perm(t1, t1, reverse); 119 120 vec_st(t0, i, dst); 121 vec_st(t1, j, dst); 122 } 123 }