[25/37,v2] armv6: Add src_1555_8888 fast path

Submitted by Ben Avison on April 21, 2015, 12:10 a.m.

Details

Message ID 1429575052-9637-1-git-send-email-bavison@riscosopen.org
State New
Headers show

Not browsing as part of any series.

Commit Message

Ben Avison April 21, 2015, 12:10 a.m.
lowlevel-blt-bench results, compared to using the armv6 1555 fetcher:

    Before          After
    Mean   StdDev   Mean   StdDev  Confidence  Change
L1  57.0   1.1      70.1   0.6     100.0%      +23.1%
L2  41.4   1.0      44.1   1.4     100.0%      +6.3%
M   49.8   0.1      59.0   0.2     100.0%      +18.5%
HT  21.4   0.3      32.3   0.3     100.0%      +50.9%
VT  21.0   0.3      30.2   0.3     100.0%      +43.8%
R   19.7   0.2      27.0   0.2     100.0%      +37.4%
RT  7.0    0.2      10.9   0.3     100.0%      +56.6%
---
 pixman/pixman-arm-simd-asm.S |   10 ++++++++++
 pixman/pixman-arm-simd.c     |    9 +++++++++
 2 files changed, 19 insertions(+), 0 deletions(-)

Patch hide | download patch | download mbox

diff --git a/pixman/pixman-arm-simd-asm.S b/pixman/pixman-arm-simd-asm.S
index 6674a9d..118cdf4 100644
--- a/pixman/pixman-arm-simd-asm.S
+++ b/pixman/pixman-arm-simd-asm.S
@@ -2803,6 +2803,16 @@  generate_composite_function_single_scanline \
  .endif
 .endm
 
+generate_composite_function \
+    pixman_composite_src_1555_8888_asm_armv6, 16, 0, 32, \
+    FLAG_DST_WRITEONLY | FLAG_BRANCH_OVER, \
+    3, /* prefetch distance */ \
+    src_1555_8888_init, \
+    nop_macro, /* newline */ \
+    nop_macro, /* cleanup */ \
+    src_1555_8888_process_head, \
+    src_1555_8888_process_tail
+
 generate_composite_function_single_scanline \
     pixman_get_scanline_a1r5g5b5_asm_armv6, 16, 0, 32, \
     FLAG_DST_WRITEONLY | FLAG_BRANCH_OVER, \
diff --git a/pixman/pixman-arm-simd.c b/pixman/pixman-arm-simd.c
index e6c5d81..ccb13fd 100644
--- a/pixman/pixman-arm-simd.c
+++ b/pixman/pixman-arm-simd.c
@@ -43,6 +43,8 @@  PIXMAN_ARM_BIND_FAST_PATH_SRC_DST (armv6, src_0565_8888,
                                    uint16_t, 1, uint32_t, 1)
 PIXMAN_ARM_BIND_FAST_PATH_SRC_DST (armv6, src_x888_0565,
                                    uint32_t, 1, uint16_t, 1)
+PIXMAN_ARM_BIND_FAST_PATH_SRC_DST (armv6, src_1555_8888,
+                                   uint16_t, 1, uint32_t, 1)
 
 PIXMAN_ARM_BIND_FAST_PATH_SRC_DST (armv6, add_8_8,
                                    uint8_t, 1, uint8_t, 1)
@@ -277,6 +279,13 @@  static const pixman_fast_path_t arm_simd_fast_paths[] =
     PIXMAN_STD_FAST_PATH (SRC, a8b8g8r8, null, b5g6r5, armv6_composite_src_x888_0565),
     PIXMAN_STD_FAST_PATH (SRC, x8b8g8r8, null, b5g6r5, armv6_composite_src_x888_0565),
 
+    PIXMAN_STD_FAST_PATH (SRC, x1r5g5b5, null, x8r8g8b8, armv6_composite_src_1555_8888),
+    PIXMAN_STD_FAST_PATH (SRC, a1r5g5b5, null, x8r8g8b8, armv6_composite_src_1555_8888),
+    PIXMAN_STD_FAST_PATH (SRC, x1b5g5r5, null, x8b8g8r8, armv6_composite_src_1555_8888),
+    PIXMAN_STD_FAST_PATH (SRC, a1b5g5r5, null, x8b8g8r8, armv6_composite_src_1555_8888),
+    PIXMAN_STD_FAST_PATH (SRC, a1r5g5b5, null, a8r8g8b8, armv6_composite_src_1555_8888),
+    PIXMAN_STD_FAST_PATH (SRC, a1b5g5r5, null, a8b8g8r8, armv6_composite_src_1555_8888),
+
     PIXMAN_STD_FAST_PATH (OVER, a8r8g8b8, null, a8r8g8b8, armv6_composite_over_8888_8888),
     PIXMAN_STD_FAST_PATH (OVER, a8r8g8b8, null, x8r8g8b8, armv6_composite_over_8888_8888),
     PIXMAN_STD_FAST_PATH (OVER, a8b8g8r8, null, a8b8g8r8, armv6_composite_over_8888_8888),