[Pixman] [PATCH 28/32] armv6: Add fetcher for x8r8g8b8 nearest-neighbour transformed images

Ben Avison bavison at riscosopen.org
Thu Aug 7 09:50:24 PDT 2014


This is related to the a8r8g8b8 nearest-scaled-cover fetcher. Below are
benchmarks for add_x888_8888, which uses it.

lowlevel-blt-bench -n :

     Before          After
     Mean   StdDev   Mean   StdDev  Confidence  Change
L1   12.0   0.0      45.0   0.5     100.0%      +275.3%
L2   9.2    0.1      30.4   1.2     100.0%      +231.6%
M    8.6    0.0      27.8   0.1     100.0%      +224.0%
HT   6.0    0.0      15.4   0.1     100.0%      +158.5%
VT   5.9    0.0      14.5   0.1     100.0%      +146.2%
R    5.7    0.0      14.1   0.1     100.0%      +145.8%
RT   2.9    0.0      5.6    0.1     100.0%      +91.4%

affine-bench:

     Before          After
     Mean   StdDev   Mean   StdDev  Confidence  Change
0.5  12.1   0.0      32.5   0.1     100.0%      +169.6%
0.75 11.3   0.0      30.0   0.0     100.0%      +165.1%
1.0  10.7   0.0      27.1   0.0     100.0%      +153.7%
1.5  9.6    0.0      24.1   0.0     100.0%      +151.6%
2.0  8.8    0.0      21.5   0.0     100.0%      +145.1%
---
 pixman/pixman-arm-simd-asm-scaled.S |    8 ++++++++
 pixman/pixman-arm-simd.c            |    9 +++++++++
 2 files changed, 17 insertions(+), 0 deletions(-)

diff --git a/pixman/pixman-arm-simd-asm-scaled.S b/pixman/pixman-arm-simd-asm-scaled.S
index 44f565a..f018e76 100644
--- a/pixman/pixman-arm-simd-asm-scaled.S
+++ b/pixman/pixman-arm-simd-asm-scaled.S
@@ -162,6 +162,14 @@ generate_nearest_scaled_cover_function \
     pixman_get_scanline_nearest_scaled_cover_a8r8g8b8_asm_armv6, 32, \
     3, 3 /* prefetch distances */, nop_macro, nop_macro
 
+.macro convert_x888_8888, reg, tmp
+        orr     reg, reg, #0xFF000000
+.endm
+
+generate_nearest_scaled_cover_function \
+    pixman_get_scanline_nearest_scaled_cover_x8r8g8b8_asm_armv6, 32, \
+    2, 3 /* prefetch distances */, nop_macro, convert_x888_8888
+
 .macro init_ge
         msr     CPSR_s, #0x50000
 .endm
diff --git a/pixman/pixman-arm-simd.c b/pixman/pixman-arm-simd.c
index a9d8e7d..23e3ab5 100644
--- a/pixman/pixman-arm-simd.c
+++ b/pixman/pixman-arm-simd.c
@@ -177,6 +177,7 @@ cputype##_get_scanline_nearest_scaled_cover_##name (pixman_iter_t  *iter,   \
 }
 
 BIND_GET_SCANLINE_NEAREST_SCALED_COVER (armv6, a8r8g8b8, uint32_t)
+BIND_GET_SCANLINE_NEAREST_SCALED_COVER (armv6, x8r8g8b8, uint32_t)
 BIND_GET_SCANLINE_NEAREST_SCALED_COVER (armv6, r5g6b5,   uint16_t)
 
 void
@@ -411,6 +412,14 @@ static const pixman_iter_info_t arm_simd_iters[] =
       NULL
     },
 
+    { PIXMAN_x8r8g8b8,
+      PIXMAN_ARM_NEAREST_SCALED_COVER_FLAGS,
+      ITER_NARROW | ITER_SRC,
+      NULL,
+      armv6_get_scanline_nearest_scaled_cover_x8r8g8b8,
+      NULL
+    },
+
     { PIXMAN_r5g6b5,
       (FAST_PATH_STANDARD_FLAGS             |
        FAST_PATH_ID_TRANSFORM               |
-- 
1.7.5.4



More information about the Pixman mailing list