From: Søren Sandmann Pedersen <[email protected]>

The default has been 7-bit for a while now, and the quality
improvement with 8-bit precision is not enough to justify keeping the
code around as a compile-time option.
---
 pixman/pixman-mmx.c  | 35 +++++++----------------------------
 pixman/pixman-sse2.c | 43 ++++++++-----------------------------------
 test/affine-test.c   |  4 +---
 test/scaling-test.c  |  4 +---
 4 files changed, 17 insertions(+), 69 deletions(-)

diff --git a/pixman/pixman-mmx.c b/pixman/pixman-mmx.c
index c94d282..a0f59ef 100644
--- a/pixman/pixman-mmx.c
+++ b/pixman/pixman-mmx.c
@@ -3561,7 +3561,6 @@ mmx_composite_over_reverse_n_8888 
(pixman_implementation_t *imp,
 #define BILINEAR_DECLARE_VARIABLES                                             
\
     const __m64 mm_wt = _mm_set_pi16 (wt, wt, wt, wt);                         
\
     const __m64 mm_wb = _mm_set_pi16 (wb, wb, wb, wb);                         
\
-    const __m64 mm_BSHIFT = _mm_set_pi16 (BSHIFT, BSHIFT, BSHIFT, BSHIFT);     
\
     const __m64 mm_addc7 = _mm_set_pi16 (0, 1, 0, 1);                          
\
     const __m64 mm_xorc7 = _mm_set_pi16 (0, BMSK, 0, BMSK);                    
\
     const __m64 mm_ux = _mm_set_pi16 (unit_x, unit_x, unit_x, unit_x);         
\
@@ -3581,35 +3580,15 @@ do {                                                    
                        \
     __m64 hi = _mm_add_pi16 (t_hi, b_hi);                                      
\
     __m64 lo = _mm_add_pi16 (t_lo, b_lo);                                      
\
     vx += unit_x;                                                              
\
-    if (BILINEAR_INTERPOLATION_BITS < 8)                                       
\
-    {                                                                          
\
-       /* calculate horizontal weights */                                      
\
-       __m64 mm_wh = _mm_add_pi16 (mm_addc7, _mm_xor_si64 (mm_xorc7,           
\
+    /* calculate horizontal weights */                                         
\
+    __m64 mm_wh = _mm_add_pi16 (mm_addc7, _mm_xor_si64 (mm_xorc7,              
\
                          _mm_srli_pi16 (mm_x,                                  
\
                                         16 - BILINEAR_INTERPOLATION_BITS)));   
\
-       /* horizontal interpolation */                                          
\
-       __m64 p = _mm_unpacklo_pi16 (lo, hi);                                   
\
-       __m64 q = _mm_unpackhi_pi16 (lo, hi);                                   
\
-       lo = _mm_madd_pi16 (p, mm_wh);                                          
\
-       hi = _mm_madd_pi16 (q, mm_wh);                                          
\
-    }                                                                          
\
-    else                                                                       
\
-    {                                                                          
\
-       /* calculate horizontal weights */                                      
\
-       __m64 mm_wh_lo = _mm_sub_pi16 (mm_BSHIFT, _mm_srli_pi16 (mm_x,          
\
-                                       16 - BILINEAR_INTERPOLATION_BITS));     
\
-       __m64 mm_wh_hi = _mm_srli_pi16 (mm_x,                                   
\
-                                       16 - BILINEAR_INTERPOLATION_BITS);      
\
-       /* horizontal interpolation */                                          
\
-       __m64 mm_lo_lo = _mm_mullo_pi16 (lo, mm_wh_lo);                         
\
-       __m64 mm_lo_hi = _mm_mullo_pi16 (hi, mm_wh_hi);                         
\
-       __m64 mm_hi_lo = _mm_mulhi_pu16 (lo, mm_wh_lo);                         
\
-       __m64 mm_hi_hi = _mm_mulhi_pu16 (hi, mm_wh_hi);                         
\
-       lo = _mm_add_pi32 (_mm_unpacklo_pi16 (mm_lo_lo, mm_hi_lo),              
\
-                          _mm_unpacklo_pi16 (mm_lo_hi, mm_hi_hi));             
\
-       hi = _mm_add_pi32 (_mm_unpackhi_pi16 (mm_lo_lo, mm_hi_lo),              
\
-                          _mm_unpackhi_pi16 (mm_lo_hi, mm_hi_hi));             
\
-    }                                                                          
\
+    /* horizontal interpolation */                                             
\
+    __m64 p = _mm_unpacklo_pi16 (lo, hi);                                      
\
+    __m64 q = _mm_unpackhi_pi16 (lo, hi);                                      
\
+    lo = _mm_madd_pi16 (p, mm_wh);                                             
\
+    hi = _mm_madd_pi16 (q, mm_wh);                                             
\
     mm_x = _mm_add_pi16 (mm_x, mm_ux);                                         
\
     /* shift and pack the result */                                            
\
     hi = _mm_srli_pi32 (hi, BILINEAR_INTERPOLATION_BITS * 2);                  
\
diff --git a/pixman/pixman-sse2.c b/pixman/pixman-sse2.c
index dde9235..a629565 100644
--- a/pixman/pixman-sse2.c
+++ b/pixman/pixman-sse2.c
@@ -5554,7 +5554,6 @@ FAST_NEAREST_MAINLOOP_COMMON 
(sse2_8888_n_8888_normal_OVER,
                              scaled_nearest_scanline_sse2_8888_n_8888_OVER,
                              uint32_t, uint32_t, uint32_t, NORMAL, TRUE, TRUE)
 
-#if BILINEAR_INTERPOLATION_BITS < 8
 # define BILINEAR_DECLARE_VARIABLES                                            
\
     const __m128i xmm_wt = _mm_set_epi16 (wt, wt, wt, wt, wt, wt, wt, wt);     
\
     const __m128i xmm_wb = _mm_set_epi16 (wb, wb, wb, wb, wb, wb, wb, wb);     
\
@@ -5564,21 +5563,10 @@ FAST_NEAREST_MAINLOOP_COMMON 
(sse2_8888_n_8888_normal_OVER,
     const __m128i xmm_zero = _mm_setzero_si128 ();                             
\
     __m128i xmm_x = _mm_set_epi16 (vx, -(vx + 1), vx, -(vx + 1),               
\
                                   vx, -(vx + 1), vx, -(vx + 1))
-#else
-# define BILINEAR_DECLARE_VARIABLES                                            
\
-    const __m128i xmm_wt = _mm_set_epi16 (wt, wt, wt, wt, wt, wt, wt, wt);     
\
-    const __m128i xmm_wb = _mm_set_epi16 (wb, wb, wb, wb, wb, wb, wb, wb);     
\
-    const __m128i xmm_addc = _mm_set_epi16 (0, 0, 0, 0, 1, 1, 1, 1);           
\
-    const __m128i xmm_ux = _mm_set_epi16 (unit_x, unit_x, unit_x, unit_x,      
\
-                                         -unit_x, -unit_x, -unit_x, -unit_x);  
\
-    const __m128i xmm_zero = _mm_setzero_si128 ();                             
\
-    __m128i xmm_x = _mm_set_epi16 (vx, vx, vx, vx,                             
\
-                                  -(vx + 1), -(vx + 1), -(vx + 1), -(vx + 1))
-#endif
 
 #define BILINEAR_INTERPOLATE_ONE_PIXEL(pix)                                    
\
 do {                                                                           
\
-    __m128i xmm_wh, xmm_lo, xmm_hi, a;                                         
\
+    __m128i xmm_wh, a;                                                         
\
     /* fetch 2x2 pixel block into sse2 registers */                            
\
     __m128i tltr = _mm_loadl_epi64 (                                           
\
                            (__m128i *)&src_top[pixman_fixed_to_int (vx)]);     
\
@@ -5590,28 +5578,13 @@ do {                                                    
                        \
                                        xmm_wt),                                
\
                       _mm_mullo_epi16 (_mm_unpacklo_epi8 (blbr, xmm_zero),     
\
                                        xmm_wb));                               
\
-    if (BILINEAR_INTERPOLATION_BITS < 8)                                       
\
-    {                                                                          
\
-       /* calculate horizontal weights */                                      
\
-       xmm_wh = _mm_add_epi16 (xmm_addc, _mm_srli_epi16 (xmm_x,                
\
-                                       16 - BILINEAR_INTERPOLATION_BITS));     
\
-       xmm_x = _mm_add_epi16 (xmm_x, xmm_ux);                                  
\
-       /* horizontal interpolation */                                          
\
-       a = _mm_madd_epi16 (_mm_unpackhi_epi16 (_mm_shuffle_epi32 (             
\
-               a, _MM_SHUFFLE (1, 0, 3, 2)), a), xmm_wh);                      
\
-    }                                                                          
\
-    else                                                                       
\
-    {                                                                          
\
-       /* calculate horizontal weights */                                      
\
-       xmm_wh = _mm_add_epi16 (xmm_addc, _mm_srli_epi16 (xmm_x,                
\
-                                       16 - BILINEAR_INTERPOLATION_BITS));     
\
-       xmm_x = _mm_add_epi16 (xmm_x, xmm_ux);                                  
\
-       /* horizontal interpolation */                                          
\
-       xmm_lo = _mm_mullo_epi16 (a, xmm_wh);                                   
\
-       xmm_hi = _mm_mulhi_epu16 (a, xmm_wh);                                   
\
-       a = _mm_add_epi32 (_mm_unpacklo_epi16 (xmm_lo, xmm_hi),                 
\
-                          _mm_unpackhi_epi16 (xmm_lo, xmm_hi));                
\
-    }                                                                          
\
+    /* calculate horizontal weights */                                         
\
+    xmm_wh = _mm_add_epi16 (xmm_addc, _mm_srli_epi16 (xmm_x,                   
\
+                             16 - BILINEAR_INTERPOLATION_BITS));               
\
+    xmm_x = _mm_add_epi16 (xmm_x, xmm_ux);                                     
\
+    /* horizontal interpolation */                                             
\
+    a = _mm_madd_epi16 (_mm_unpackhi_epi16 (_mm_shuffle_epi32 (                
        \
+                              a, _MM_SHUFFLE (1, 0, 3, 2)), a), xmm_wh);       
\
     /* shift and pack the result */                                            
\
     a = _mm_srli_epi32 (a, BILINEAR_INTERPOLATION_BITS * 2);                   
\
     a = _mm_packs_epi32 (a, a);                                                
        \
diff --git a/test/affine-test.c b/test/affine-test.c
index 2506250..c1649ed 100644
--- a/test/affine-test.c
+++ b/test/affine-test.c
@@ -306,9 +306,7 @@ test_composite (int      testnum,
     return crc32;
 }
 
-#if BILINEAR_INTERPOLATION_BITS == 8
-#define CHECKSUM 0x2CDF1F07
-#elif BILINEAR_INTERPOLATION_BITS == 7
+#if BILINEAR_INTERPOLATION_BITS == 7
 #define CHECKSUM 0xBC00B1DF
 #elif BILINEAR_INTERPOLATION_BITS == 4
 #define CHECKSUM 0xA227306B
diff --git a/test/scaling-test.c b/test/scaling-test.c
index a8cb4c4..b4142a7 100644
--- a/test/scaling-test.c
+++ b/test/scaling-test.c
@@ -375,9 +375,7 @@ test_composite (int      testnum,
     return crc32;
 }
 
-#if BILINEAR_INTERPOLATION_BITS == 8
-#define CHECKSUM 0x9096E6B6
-#elif BILINEAR_INTERPOLATION_BITS == 7
+#if BILINEAR_INTERPOLATION_BITS == 7
 #define CHECKSUM 0xCE8EC6BA
 #elif BILINEAR_INTERPOLATION_BITS == 4
 #define CHECKSUM 0xAB1D39BE
-- 
1.7.11.7

_______________________________________________
Pixman mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/pixman

Reply via email to