Author: post
Date: 2010-06-29 20:29:39 +0200 (Tue, 29 Jun 2010)
New Revision: 3454

Modified:
   trunk/plugins/dcp/dcp-sse2.c
Log:
Use streaming prefetch/stores to avoid cache pollution.

Modified: trunk/plugins/dcp/dcp-sse2.c
===================================================================
--- trunk/plugins/dcp/dcp-sse2.c        2010-06-29 18:01:26 UTC (rev 3453)
+++ trunk/plugins/dcp/dcp-sse2.c        2010-06-29 18:29:39 UTC (rev 3454)
@@ -647,15 +647,16 @@
 
        for(y = t->start_y ; y < t->end_y; y++)
        {
+               __m128i* pixel = (__m128i*)GET_PIXEL(image, 0, y);
                for(x=0; x < end_x; x+=4)
                {
-                       __m128i* pixel = (__m128i*)GET_PIXEL(image, x, y);
 
                        zero = _mm_setzero_si128();
 
                        /* Convert to float */
                        p1 = _mm_load_si128(pixel);
                        p2 = _mm_load_si128(pixel + 1);
+                       _mm_prefetch((char*)(pixel+4), _MM_HINT_NTA);
 
                        /* Unpack to R G B x */
                        p2f = _mm_cvtepi32_ps(_mm_unpackhi_epi16(p1, zero));
@@ -904,10 +905,12 @@
                        p2 = _mm_xor_si128(p2, signxor);
 
                        /* Store processed pixel */
-                       _mm_store_si128(pixel, p1);
-                       _mm_store_si128(pixel + 1, p2);
+                       _mm_stream_si128(pixel, p1);
+                       _mm_stream_si128(pixel + 1, p2);
+                       pixel += 2;
                }
        }
+       _mm_sfence();
        _MM_SET_ROUNDING_MODE(_mm_rounding);
        return TRUE;
 }


_______________________________________________
Rawstudio-commit mailing list
[email protected]
http://rawstudio.org/cgi-bin/mailman/listinfo/rawstudio-commit

Reply via email to