31 #define GET_T(tt0,tt1,src,a,b){ \
32 a = vec_ld(16, src); \
33 tt0 = vec_perm(b, a, align); \
34 b = vec_ld(32, src); \
35 tt1 = vec_perm(a, b, align); \
38 #define GET_T(tt0,tt1,src,a,b){ \
39 tt0 = vec_vsx_ld(0, src); \
40 tt1 = vec_vsx_ld(16, src); \
45 static int32_t scalarproduct_and_madd_int16_altivec(int16_t *v1,
52 register vec_s16 muls = { mul, mul, mul, mul, mul, mul, mul, mul };
53 register vec_s16 t0, t1, i0, i1, i4, i2, i3;
64 GET_T(t0,t1,v2,i1,i2);
67 res = vec_msum(t0, i0, res);
68 res = vec_msum(t1, i1, res);
69 GET_T(t0,t1,v3,i4,i3);
70 pv1[0] = vec_mladd(t0, muls, i0);
71 pv1[1] = vec_mladd(t1, muls, i1);
76 res = vec_splat(vec_sums(res,
zero_s32v), 3);
77 vec_ste(res, 0, &ires);
89 c->scalarproduct_and_madd_int16 = scalarproduct_and_madd_int16_altivec;