# HG changeset patch # User gpoirier # Date 1231238106 0 # Node ID 8f3e20061affb9741a58e2f87c351bbf4916501f # Parent b80cf351176e6ca9515968269a0ab34d6cedda48 offset and weights are signed, fixes some non-bitexact issues. Patch by David Conrad %lessen42 A gmail P com% diff -r b80cf351176e -r 8f3e20061aff ppc/h264_altivec.c --- a/ppc/h264_altivec.c Tue Jan 06 10:13:25 2009 +0000 +++ b/ppc/h264_altivec.c Tue Jan 06 10:35:06 2009 +0000 @@ -942,7 +942,8 @@ { int y, dst_aligned, src_aligned; vec_u8 vsrc, vdst; - vec_u16 vtemp, vlog2_denom, vweights, vweightd, voffset, v0, v1, v2, v3; + vec_s16 vtemp, vweights, vweightd, voffset, v0, v1, v2, v3; + vec_u16 vlog2_denom; DECLARE_ALIGNED_16(int32_t, temp[4]); LOAD_ZERO; @@ -977,16 +978,16 @@ } if (w == 16 || dst_aligned) { - v0 = vec_mladd(v0, vweightd, zero_u16v); - v2 = vec_mladd(v2, vweights, zero_u16v); + v0 = vec_mladd(v0, vweightd, zero_s16v); + v2 = vec_mladd(v2, vweights, zero_s16v); v0 = vec_adds(v0, voffset); v0 = vec_adds(v0, v2); v0 = vec_sra(v0, vlog2_denom); } if (w == 16 || !dst_aligned) { - v1 = vec_mladd(v1, vweightd, zero_u16v); - v3 = vec_mladd(v3, vweights, zero_u16v); + v1 = vec_mladd(v1, vweightd, zero_s16v); + v3 = vec_mladd(v3, vweights, zero_s16v); v1 = vec_adds(v1, voffset); v1 = vec_adds(v1, v3);