comparison ppc/float_altivec.c @ 4387:05ab6e897ffd libavcodec

10l, there is a corner case afterall...
author lu_zero
date Tue, 23 Jan 2007 12:04:48 +0000
parents c8c591fe26f8
children d5ba514e3f4a
comparison
equal deleted inserted replaced
4386:09849d8689d6 4387:05ab6e897ffd
74 int i; 74 int i;
75 vector float d, s0, s1, s2, t0, t1, edges; 75 vector float d, s0, s1, s2, t0, t1, edges;
76 vector unsigned char align = vec_lvsr(0,dst), 76 vector unsigned char align = vec_lvsr(0,dst),
77 mask = vec_lvsl(0, dst); 77 mask = vec_lvsl(0, dst);
78 78
79 t0 = vec_ld(0, dst);
80 #if 0 //FIXME: there is still something wrong 79 #if 0 //FIXME: there is still something wrong
81 if (step == 2) { 80 if (step == 2) {
82 int y; 81 int y;
83 vector float d0, d1, s3, t2; 82 vector float d0, d1, s3, t2;
84 vector unsigned int sel = 83 vector unsigned int sel =
132 } 131 }
133 } else 132 } else
134 #endif 133 #endif
135 if (step == 1 && src3 == 0) 134 if (step == 1 && src3 == 0)
136 for (i=0; i<len-3; i+=4) { 135 for (i=0; i<len-3; i+=4) {
136 t0 = vec_ld(0, dst+i);
137 t1 = vec_ld(15, dst+i); 137 t1 = vec_ld(15, dst+i);
138 s0 = vec_ld(0, src0+i); 138 s0 = vec_ld(0, src0+i);
139 s1 = vec_ld(0, src1+i); 139 s1 = vec_ld(0, src1+i);
140 s2 = vec_ld(0, src2+i); 140 s2 = vec_ld(0, src2+i);
141 edges = vec_perm(t1 ,t0, mask); 141 edges = vec_perm(t1 ,t0, mask);
142 d = vec_madd(s0,s1,s2); 142 d = vec_madd(s0,s1,s2);
143 t1 = vec_perm(d, edges, align); 143 t1 = vec_perm(d, edges, align);
144 t0 = vec_perm(edges, d, align); 144 t0 = vec_perm(edges, d, align);
145 vec_st(t1, 15, dst+i); 145 vec_st(t1, 15, dst+i);
146 vec_st(t0, 0, dst+i); 146 vec_st(t0, 0, dst+i);
147 t0 = t1;
148 } 147 }
149 else 148 else
150 ff_vector_fmul_add_add_c(dst, src0, src1, src2, src3, len, step); 149 ff_vector_fmul_add_add_c(dst, src0, src1, src2, src3, len, step);
151 } 150 }
152 151