comparison ppc/dsputil_altivec.c @ 10082:9f4b529bd5c0 libavcodec

PPC: remove unnecessary alignment on local variables Storing a single element from a vector where all elements have the same value does not require an aligned destination. Which element is stored depends on the alignment of the destination address, but since they all have the same value, the result is the same regardless of the alignment.
author mru
date Mon, 24 Aug 2009 21:42:22 +0000
parents 5a730e38f1b3
children 50415a8f1451
comparison
equal deleted inserted replaced
10081:b870decf566d 10082:9f4b529bd5c0
30 #include "types_altivec.h" 30 #include "types_altivec.h"
31 31
32 int sad16_x2_altivec(void *v, uint8_t *pix1, uint8_t *pix2, int line_size, int h) 32 int sad16_x2_altivec(void *v, uint8_t *pix1, uint8_t *pix2, int line_size, int h)
33 { 33 {
34 int i; 34 int i;
35 DECLARE_ALIGNED_16(int, s); 35 int s;
36 const vector unsigned char zero = (const vector unsigned char)vec_splat_u8(0); 36 const vector unsigned char zero = (const vector unsigned char)vec_splat_u8(0);
37 vector unsigned char *tv; 37 vector unsigned char *tv;
38 vector unsigned char pix1v, pix2v, pix2iv, avgv, t5; 38 vector unsigned char pix1v, pix2v, pix2iv, avgv, t5;
39 vector unsigned int sad; 39 vector unsigned int sad;
40 vector signed int sumdiffs; 40 vector signed int sumdiffs;
75 } 75 }
76 76
77 int sad16_y2_altivec(void *v, uint8_t *pix1, uint8_t *pix2, int line_size, int h) 77 int sad16_y2_altivec(void *v, uint8_t *pix1, uint8_t *pix2, int line_size, int h)
78 { 78 {
79 int i; 79 int i;
80 DECLARE_ALIGNED_16(int, s); 80 int s;
81 const vector unsigned char zero = (const vector unsigned char)vec_splat_u8(0); 81 const vector unsigned char zero = (const vector unsigned char)vec_splat_u8(0);
82 vector unsigned char *tv; 82 vector unsigned char *tv;
83 vector unsigned char pix1v, pix2v, pix3v, avgv, t5; 83 vector unsigned char pix1v, pix2v, pix3v, avgv, t5;
84 vector unsigned int sad; 84 vector unsigned int sad;
85 vector signed int sumdiffs; 85 vector signed int sumdiffs;
131 } 131 }
132 132
133 int sad16_xy2_altivec(void *v, uint8_t *pix1, uint8_t *pix2, int line_size, int h) 133 int sad16_xy2_altivec(void *v, uint8_t *pix1, uint8_t *pix2, int line_size, int h)
134 { 134 {
135 int i; 135 int i;
136 DECLARE_ALIGNED_16(int, s); 136 int s;
137 uint8_t *pix3 = pix2 + line_size; 137 uint8_t *pix3 = pix2 + line_size;
138 const vector unsigned char zero = (const vector unsigned char)vec_splat_u8(0); 138 const vector unsigned char zero = (const vector unsigned char)vec_splat_u8(0);
139 const vector unsigned short two = (const vector unsigned short)vec_splat_u16(2); 139 const vector unsigned short two = (const vector unsigned short)vec_splat_u16(2);
140 vector unsigned char *tv, avgv, t5; 140 vector unsigned char *tv, avgv, t5;
141 vector unsigned char pix1v, pix2v, pix3v, pix2iv, pix3iv; 141 vector unsigned char pix1v, pix2v, pix3v, pix2iv, pix3iv;
226 } 226 }
227 227
228 int sad16_altivec(void *v, uint8_t *pix1, uint8_t *pix2, int line_size, int h) 228 int sad16_altivec(void *v, uint8_t *pix1, uint8_t *pix2, int line_size, int h)
229 { 229 {
230 int i; 230 int i;
231 DECLARE_ALIGNED_16(int, s); 231 int s;
232 const vector unsigned int zero = (const vector unsigned int)vec_splat_u32(0); 232 const vector unsigned int zero = (const vector unsigned int)vec_splat_u32(0);
233 vector unsigned char perm1, perm2, *pix1v, *pix2v; 233 vector unsigned char perm1, perm2, *pix1v, *pix2v;
234 vector unsigned char t1, t2, t3,t4, t5; 234 vector unsigned char t1, t2, t3,t4, t5;
235 vector unsigned int sad; 235 vector unsigned int sad;
236 vector signed int sumdiffs; 236 vector signed int sumdiffs;
268 } 268 }
269 269
270 int sad8_altivec(void *v, uint8_t *pix1, uint8_t *pix2, int line_size, int h) 270 int sad8_altivec(void *v, uint8_t *pix1, uint8_t *pix2, int line_size, int h)
271 { 271 {
272 int i; 272 int i;
273 DECLARE_ALIGNED_16(int, s); 273 int s;
274 const vector unsigned int zero = (const vector unsigned int)vec_splat_u32(0); 274 const vector unsigned int zero = (const vector unsigned int)vec_splat_u32(0);
275 vector unsigned char perm1, perm2, permclear, *pix1v, *pix2v; 275 vector unsigned char perm1, perm2, permclear, *pix1v, *pix2v;
276 vector unsigned char t1, t2, t3,t4, t5; 276 vector unsigned char t1, t2, t3,t4, t5;
277 vector unsigned int sad; 277 vector unsigned int sad;
278 vector signed int sumdiffs; 278 vector signed int sumdiffs;
313 } 313 }
314 314
315 int pix_norm1_altivec(uint8_t *pix, int line_size) 315 int pix_norm1_altivec(uint8_t *pix, int line_size)
316 { 316 {
317 int i; 317 int i;
318 DECLARE_ALIGNED_16(int, s); 318 int s;
319 const vector unsigned int zero = (const vector unsigned int)vec_splat_u32(0); 319 const vector unsigned int zero = (const vector unsigned int)vec_splat_u32(0);
320 vector unsigned char *tv; 320 vector unsigned char *tv;
321 vector unsigned char pixv; 321 vector unsigned char pixv;
322 vector unsigned int sv; 322 vector unsigned int sv;
323 vector signed int sum; 323 vector signed int sum;
349 * It's the sad8_altivec code above w/ squaring added. 349 * It's the sad8_altivec code above w/ squaring added.
350 */ 350 */
351 int sse8_altivec(void *v, uint8_t *pix1, uint8_t *pix2, int line_size, int h) 351 int sse8_altivec(void *v, uint8_t *pix1, uint8_t *pix2, int line_size, int h)
352 { 352 {
353 int i; 353 int i;
354 DECLARE_ALIGNED_16(int, s); 354 int s;
355 const vector unsigned int zero = (const vector unsigned int)vec_splat_u32(0); 355 const vector unsigned int zero = (const vector unsigned int)vec_splat_u32(0);
356 vector unsigned char perm1, perm2, permclear, *pix1v, *pix2v; 356 vector unsigned char perm1, perm2, permclear, *pix1v, *pix2v;
357 vector unsigned char t1, t2, t3,t4, t5; 357 vector unsigned char t1, t2, t3,t4, t5;
358 vector unsigned int sum; 358 vector unsigned int sum;
359 vector signed int sumsqr; 359 vector signed int sumsqr;
403 * It's the sad16_altivec code above w/ squaring added. 403 * It's the sad16_altivec code above w/ squaring added.
404 */ 404 */
405 int sse16_altivec(void *v, uint8_t *pix1, uint8_t *pix2, int line_size, int h) 405 int sse16_altivec(void *v, uint8_t *pix1, uint8_t *pix2, int line_size, int h)
406 { 406 {
407 int i; 407 int i;
408 DECLARE_ALIGNED_16(int, s); 408 int s;
409 const vector unsigned int zero = (const vector unsigned int)vec_splat_u32(0); 409 const vector unsigned int zero = (const vector unsigned int)vec_splat_u32(0);
410 vector unsigned char perm1, perm2, *pix1v, *pix2v; 410 vector unsigned char perm1, perm2, *pix1v, *pix2v;
411 vector unsigned char t1, t2, t3,t4, t5; 411 vector unsigned char t1, t2, t3,t4, t5;
412 vector unsigned int sum; 412 vector unsigned int sum;
413 vector signed int sumsqr; 413 vector signed int sumsqr;
453 vector unsigned char t1; 453 vector unsigned char t1;
454 vector unsigned int sad; 454 vector unsigned int sad;
455 vector signed int sumdiffs; 455 vector signed int sumdiffs;
456 456
457 int i; 457 int i;
458 DECLARE_ALIGNED_16(int, s); 458 int s;
459 459
460 sad = (vector unsigned int)vec_splat_u32(0); 460 sad = (vector unsigned int)vec_splat_u32(0);
461 461
462 for (i = 0; i < 16; i++) { 462 for (i = 0; i < 16; i++) {
463 /* Read the potentially unaligned 16 pixels into t1 */ 463 /* Read the potentially unaligned 16 pixels into t1 */