diff dsputil.c @ 997:4dfe15ae0078 libavcodec

sse16 & pix_norm1 optimization patch by (Felix von Leitner <felix-ffmpeg at fefe dot de>) (with some modifications)
author michaelni
date Sat, 11 Jan 2003 22:32:56 +0000
parents ad44196ea483
children b2cf2a1d9a51
line wrap: on
line diff
--- a/dsputil.c	Sat Jan 11 21:04:47 2003 +0000
+++ b/dsputil.c	Sat Jan 11 22:32:56 2003 +0000
@@ -129,6 +129,7 @@
     s = 0;
     for (i = 0; i < 16; i++) {
 	for (j = 0; j < 16; j += 8) {
+#if 0
 	    s += sq[pix[0]];
 	    s += sq[pix[1]];
 	    s += sq[pix[2]];
@@ -137,6 +138,30 @@
 	    s += sq[pix[5]];
 	    s += sq[pix[6]];
 	    s += sq[pix[7]];
+#else
+#if LONG_MAX > 2147483647
+	    register uint64_t x=*(uint64_t*)pix;
+	    s += sq[x&0xff];
+	    s += sq[(x>>8)&0xff];
+	    s += sq[(x>>16)&0xff];
+	    s += sq[(x>>24)&0xff];
+            s += sq[(x>>32)&0xff];
+            s += sq[(x>>40)&0xff];
+            s += sq[(x>>48)&0xff];
+            s += sq[(x>>56)&0xff];
+#else
+	    register uint32_t x=*(uint32_t*)pix;
+	    s += sq[x&0xff];
+	    s += sq[(x>>8)&0xff];
+	    s += sq[(x>>16)&0xff];
+	    s += sq[(x>>24)&0xff];
+            x=*(uint32_t*)(pix+4);
+            s += sq[x&0xff];
+            s += sq[(x>>8)&0xff];
+            s += sq[(x>>16)&0xff];
+            s += sq[(x>>24)&0xff];
+#endif
+#endif
 	    pix += 8;
 	}
 	pix += line_size - 16;
@@ -174,6 +199,38 @@
     s = 0;
     for (i = 0; i < 16; i++) {
         for (j = 0; j < 16; j += 8) {
+#if 1
+#if LONG_MAX > 2147483647
+	    uint64_t x,y;
+	    x=*(uint64_t*)pix1;
+	    y=*(uint64_t*)pix2;
+
+	    s += sq[(x&0xff) - (y&0xff)];
+	    s += sq[((x>>8)&0xff) - ((y>>8)&0xff)];
+	    s += sq[((x>>16)&0xff) - ((y>>16)&0xff)];
+	    s += sq[((x>>24)&0xff) - ((y>>24)&0xff)];
+	    s += sq[((x>>32)&0xff) - ((y>>32)&0xff)];
+	    s += sq[((x>>40)&0xff) - ((y>>40)&0xff)];
+	    s += sq[((x>>48)&0xff) - ((y>>48)&0xff)];
+	    s += sq[((x>>56)&0xff) - ((y>>56)&0xff)];
+#else
+	    uint32_t x,y;
+	    x=*(uint32_t*)pix1;
+	    y=*(uint32_t*)pix2;
+
+	    s += sq[(x&0xff) - (y&0xff)];
+	    s += sq[((x>>8)&0xff) - ((y>>8)&0xff)];
+	    s += sq[((x>>16)&0xff) - ((y>>16)&0xff)];
+	    s += sq[((x>>24)&0xff) - ((y>>24)&0xff)];
+
+	    x=*(uint32_t*)(pix1+4);
+	    y=*(uint32_t*)(pix2+4);
+	    s += sq[(x&0xff) - (y&0xff)];
+	    s += sq[((x>>8)&0xff) - ((y>>8)&0xff)];
+	    s += sq[((x>>16)&0xff) - ((y>>16)&0xff)];
+	    s += sq[((x>>24)&0xff) - ((y>>24)&0xff)];
+#endif
+#else
             s += sq[pix1[0] - pix2[0]];
             s += sq[pix1[1] - pix2[1]];
             s += sq[pix1[2] - pix2[2]];
@@ -182,6 +239,7 @@
             s += sq[pix1[5] - pix2[5]];
             s += sq[pix1[6] - pix2[6]];
             s += sq[pix1[7] - pix2[7]];
+#endif
             pix1 += 8;
             pix2 += 8;
         }