static void test () { #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ vector unsigned long vul = {1,0}; vector double vd = {1.0,0.0}; #else vector unsigned long vul = {0,1}; vector double vd = {0.0,1.0}; #endif vec_stl (vul, 0, (vector unsigned long *)svul); vec_stl (vd, 0, (vector double *)svd); check_arrays (); }
static void vorbis_inverse_coupling_altivec(float *mag, float *ang, intptr_t blocksize) { int i; vector float m, a; vector bool int t0, t1; const vector unsigned int v_31 = //XXX vec_add(vec_add(vec_splat_u32(15),vec_splat_u32(15)),vec_splat_u32(1)); for (i = 0; i < blocksize; i += 4) { m = vec_ld(0, mag+i); a = vec_ld(0, ang+i); t0 = vec_cmple(m, (vector float)vec_splat_u32(0)); t1 = vec_cmple(a, (vector float)vec_splat_u32(0)); a = vec_xor(a, (vector float) vec_sl((vector unsigned int)t0, v_31)); t0 = (vector bool int)vec_and(a, t1); t1 = (vector bool int)vec_andc(a, t1); a = vec_sub(m, (vector float)t1); m = vec_add(m, (vector float)t0); vec_stl(a, 0, ang+i); vec_stl(m, 0, mag+i); } }
void b() { z = vec_add (x, y); /* Make sure the predicates accept correct argument types. */ int1 = vec_all_in (f, g); int1 = vec_all_ge (f, g); int1 = vec_all_eq (c, d); int1 = vec_all_ne (s, t); int1 = vec_any_eq (i, j); int1 = vec_any_ge (f, g); int1 = vec_all_ngt (f, g); int1 = vec_any_ge (c, d); int1 = vec_any_ge (s, t); int1 = vec_any_ge (i, j); int1 = vec_any_ge (c, d); int1 = vec_any_ge (s, t); int1 = vec_any_ge (i, j); vec_mtvscr (i); vec_dssall (); s = (vector signed short) vec_mfvscr (); vec_dss (3); vec_dst (pi, int1 + int2, 3); vec_dstst (pi, int1 + int2, 3); vec_dststt (pi, int1 + int2, 3); vec_dstt (pi, int1 + int2, 3); uc = (vector unsigned char) vec_lvsl (int1 + 69, (signed int *) pi); uc = (vector unsigned char) vec_lvsr (int1 + 69, (signed int *) pi); c = vec_lde (int1, (signed char *) pi); s = vec_lde (int1, (signed short *) pi); i = vec_lde (int1, (signed int *) pi); i = vec_ldl (int1, pi); i = vec_ld (int1, pi); vec_st (i, int2, pi); vec_ste (c, int2, (signed char *) pi); vec_ste (s, int2, (signed short *) pi); vec_ste (i, int2, (signed int *) pi); vec_stl (i, int2, pi); }
static void test () { vector unsigned char vuc = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}; vector signed char vsc = {-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7}; vector bool char vbc = {0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255}; vector unsigned short vus = {0,1,2,3,4,5,6,7}; vector signed short vss = {-4,-3,-2,-1,0,1,2,3}; vector bool short vbs = {0,65535,0,65535,0,65535,0,65535}; vector pixel vp = {0,1,2,3,4,5,6,7}; vector unsigned int vui = {0,1,2,3}; vector signed int vsi = {-2,-1,0,1}; vector bool int vbi = {0,0xffffffff,0,0xffffffff}; vector float vf = {0.0,1.0,2.0,3.0}; vec_stl (vuc, 0, (vector unsigned char *)svuc); vec_stl (vsc, 0, (vector signed char *)svsc); vec_stl (vbc, 0, (vector bool char *)svbc); vec_stl (vus, 0, (vector unsigned short *)svus); vec_stl (vss, 0, (vector signed short *)svss); vec_stl (vbs, 0, (vector bool short *)svbs); vec_stl (vp, 0, (vector pixel *)svp); vec_stl (vui, 0, (vector unsigned int *)svui); vec_stl (vsi, 0, (vector signed int *)svsi); vec_stl (vbi, 0, (vector bool int *)svbi); vec_stl (vf, 0, (vector float *)svf); check_arrays (); }
static void vector_fmul_add_add_altivec(float *dst, const float *src0, const float *src1, const float *src2, int src3, int len, int step) { int i; vector float d, s0, s1, s2, t0, t1, edges; vector unsigned char align = vec_lvsr(0,dst), mask = vec_lvsl(0, dst); #if 0 //FIXME: there is still something wrong if (step == 2) { int y; vector float d0, d1, s3, t2; vector unsigned int sel = vec_mergeh(vec_splat_u32(-1), vec_splat_u32(0)); t1 = vec_ld(16, dst); for (i=0,y=0; i<len-3; i+=4,y+=8) { s0 = vec_ld(0,src0+i); s1 = vec_ld(0,src1+i); s2 = vec_ld(0,src2+i); // t0 = vec_ld(0, dst+y); //[x x x|a] // t1 = vec_ld(16, dst+y); //[b c d|e] t2 = vec_ld(31, dst+y); //[f g h|x] d = vec_madd(s0,s1,s2); // [A B C D] // [A A B B] // [C C D D] d0 = vec_perm(t0, t1, mask); // [a b c d] d0 = vec_sel(vec_mergeh(d, d), d0, sel); // [A b B d] edges = vec_perm(t1, t0, mask); t0 = vec_perm(edges, d0, align); // [x x x|A] t1 = vec_perm(d0, edges, align); // [b B d|e] vec_stl(t0, 0, dst+y); d1 = vec_perm(t1, t2, mask); // [e f g h] d1 = vec_sel(vec_mergel(d, d), d1, sel); // [C f D h] edges = vec_perm(t2, t1, mask); t1 = vec_perm(edges, d1, align); // [b B d|C] t2 = vec_perm(d1, edges, align); // [f D h|x] vec_stl(t1, 16, dst+y); t0 = t1; vec_stl(t2, 31, dst+y); t1 = t2; } } else #endif if (step == 1 && src3 == 0) for (i=0; i<len-3; i+=4) { t0 = vec_ld(0, dst+i); t1 = vec_ld(15, dst+i); s0 = vec_ld(0, src0+i); s1 = vec_ld(0, src1+i); s2 = vec_ld(0, src2+i); edges = vec_perm(t1 ,t0, mask); d = vec_madd(s0,s1,s2); t1 = vec_perm(d, edges, align); t0 = vec_perm(edges, d, align); vec_st(t1, 15, dst+i); vec_st(t0, 0, dst+i); } else ff_vector_fmul_add_add_c(dst, src0, src1, src2, src3, len, step); }