[Pixman] [PATCH 3/3] armv7: Use VLD-to-all-lanes
Ben Avison
bavison at riscosopen.org
Wed Mar 4 17:56:01 PST 2015
I noticed in passing that a number of opportunities to use the all-lanes
variant of VLD has been missed. I don't expect any measurable speedup because
these are all in init code, but this simplifies the code a bit.
---
pixman/pixman-arm-neon-asm.S | 142 +++++++++++++++++-------------------------
1 files changed, 58 insertions(+), 84 deletions(-)
diff --git a/pixman/pixman-arm-neon-asm.S b/pixman/pixman-arm-neon-asm.S
index 7e949a3..9a5d85a 100644
--- a/pixman/pixman-arm-neon-asm.S
+++ b/pixman/pixman-arm-neon-asm.S
@@ -396,11 +396,10 @@ generate_composite_function \
.macro pixman_composite_over_n_0565_init
add DUMMY, sp, #ARGS_STACK_OFFSET
- vld1.32 {d3[0]}, [DUMMY]
- vdup.8 d0, d3[0]
- vdup.8 d1, d3[1]
- vdup.8 d2, d3[2]
- vdup.8 d3, d3[3]
+ vld1.8 {d0[]}, [DUMMY]!
+ vld1.8 {d1[]}, [DUMMY]!
+ vld1.8 {d2[]}, [DUMMY]!
+ vld1.8 {d3[]}, [DUMMY]!
vmvn.8 d3, d3 /* invert source alpha */
.endm
@@ -761,11 +760,10 @@ generate_composite_function_single_scanline \
.macro pixman_composite_over_n_8888_init
add DUMMY, sp, #ARGS_STACK_OFFSET
- vld1.32 {d3[0]}, [DUMMY]
- vdup.8 d0, d3[0]
- vdup.8 d1, d3[1]
- vdup.8 d2, d3[2]
- vdup.8 d3, d3[3]
+ vld1.8 {d0[]}, [DUMMY]!
+ vld1.8 {d1[]}, [DUMMY]!
+ vld1.8 {d2[]}, [DUMMY]!
+ vld1.8 {d3[]}, [DUMMY]!
vmvn.8 d24, d3 /* get inverted alpha */
.endm
@@ -813,11 +811,10 @@ generate_composite_function \
.macro pixman_composite_over_reverse_n_8888_init
add DUMMY, sp, #ARGS_STACK_OFFSET
- vld1.32 {d7[0]}, [DUMMY]
- vdup.8 d4, d7[0]
- vdup.8 d5, d7[1]
- vdup.8 d6, d7[2]
- vdup.8 d7, d7[3]
+ vld1.8 {d4[]}, [DUMMY]!
+ vld1.8 {d5[]}, [DUMMY]!
+ vld1.8 {d6[]}, [DUMMY]!
+ vld1.8 {d7[]}, [DUMMY]!
.endm
generate_composite_function \
@@ -956,11 +953,10 @@ generate_composite_function \
.macro pixman_composite_over_n_8_0565_init
add DUMMY, sp, #ARGS_STACK_OFFSET
vpush {d8-d15}
- vld1.32 {d11[0]}, [DUMMY]
- vdup.8 d8, d11[0]
- vdup.8 d9, d11[1]
- vdup.8 d10, d11[2]
- vdup.8 d11, d11[3]
+ vld1.8 {d8[]}, [DUMMY]!
+ vld1.8 {d9[]}, [DUMMY]!
+ vld1.8 {d10[]}, [DUMMY]!
+ vld1.8 {d11[]}, [DUMMY]!
.endm
.macro pixman_composite_over_n_8_0565_cleanup
@@ -981,10 +977,9 @@ generate_composite_function \
/******************************************************************************/
.macro pixman_composite_over_8888_n_0565_init
- add DUMMY, sp, #(ARGS_STACK_OFFSET + 8)
+ add DUMMY, sp, #(ARGS_STACK_OFFSET + 11)
vpush {d8-d15}
- vld1.32 {d24[0]}, [DUMMY]
- vdup.8 d24, d24[3]
+ vld1.8 {d24[]}, [DUMMY]
.endm
.macro pixman_composite_over_8888_n_0565_cleanup
@@ -1049,12 +1044,8 @@ generate_composite_function \
.macro pixman_composite_src_n_8_init
add DUMMY, sp, #ARGS_STACK_OFFSET
- vld1.32 {d0[0]}, [DUMMY]
- vsli.u64 d0, d0, #8
- vsli.u64 d0, d0, #16
- vsli.u64 d0, d0, #32
- vorr d1, d0, d0
- vorr q1, q0, q0
+ vld1.8 {d0[],d1[]}, [DUMMY]
+ vld1.8 {d2[],d3[]}, [DUMMY]
.endm
.macro pixman_composite_src_n_8_cleanup
@@ -1089,11 +1080,8 @@ generate_composite_function \
.macro pixman_composite_src_n_0565_init
add DUMMY, sp, #ARGS_STACK_OFFSET
- vld1.32 {d0[0]}, [DUMMY]
- vsli.u64 d0, d0, #16
- vsli.u64 d0, d0, #32
- vorr d1, d0, d0
- vorr q1, q0, q0
+ vld1.16 {d0[],d1[]}, [DUMMY]
+ vld1.16 {d2[],d3[]}, [DUMMY]
.endm
.macro pixman_composite_src_n_0565_cleanup
@@ -1128,10 +1116,8 @@ generate_composite_function \
.macro pixman_composite_src_n_8888_init
add DUMMY, sp, #ARGS_STACK_OFFSET
- vld1.32 {d0[0]}, [DUMMY]
- vsli.u64 d0, d0, #32
- vorr d1, d0, d0
- vorr q1, q0, q0
+ vld1.32 {d0[],d1[]}, [DUMMY]
+ vld1.32 {d2[],d3[]}, [DUMMY]
.endm
.macro pixman_composite_src_n_8888_cleanup
@@ -1271,11 +1257,10 @@ generate_composite_function \
.macro pixman_composite_src_n_8_8888_init
add DUMMY, sp, #ARGS_STACK_OFFSET
- vld1.32 {d3[0]}, [DUMMY]
- vdup.8 d0, d3[0]
- vdup.8 d1, d3[1]
- vdup.8 d2, d3[2]
- vdup.8 d3, d3[3]
+ vld1.8 {d0[]}, [DUMMY]!
+ vld1.8 {d1[]}, [DUMMY]!
+ vld1.8 {d2[]}, [DUMMY]!
+ vld1.8 {d3[]}, [DUMMY]!
.endm
.macro pixman_composite_src_n_8_8888_cleanup
@@ -1339,9 +1324,8 @@ generate_composite_function \
.endm
.macro pixman_composite_src_n_8_8_init
- add DUMMY, sp, #ARGS_STACK_OFFSET
- vld1.32 {d16[0]}, [DUMMY]
- vdup.8 d16, d16[3]
+ add DUMMY, sp, #ARGS_STACK_OFFSET + 3
+ vld1.8 {d16[]}, [DUMMY]
.endm
.macro pixman_composite_src_n_8_8_cleanup
@@ -1449,11 +1433,10 @@ generate_composite_function \
.macro pixman_composite_over_n_8_8888_init
add DUMMY, sp, #ARGS_STACK_OFFSET
vpush {d8-d15}
- vld1.32 {d11[0]}, [DUMMY]
- vdup.8 d8, d11[0]
- vdup.8 d9, d11[1]
- vdup.8 d10, d11[2]
- vdup.8 d11, d11[3]
+ vld1.8 {d8[]}, [DUMMY]!
+ vld1.8 {d9[]}, [DUMMY]!
+ vld1.8 {d10[]}, [DUMMY]!
+ vld1.8 {d11[]}, [DUMMY]!
.endm
.macro pixman_composite_over_n_8_8888_cleanup
@@ -1518,10 +1501,9 @@ generate_composite_function \
.endm
.macro pixman_composite_over_n_8_8_init
- add DUMMY, sp, #ARGS_STACK_OFFSET
+ add DUMMY, sp, #ARGS_STACK_OFFSET + 3
vpush {d8-d15}
- vld1.32 {d8[0]}, [DUMMY]
- vdup.8 d8, d8[3]
+ vld1.8 {d8[]}, [DUMMY]
.endm
.macro pixman_composite_over_n_8_8_cleanup
@@ -1621,11 +1603,10 @@ generate_composite_function \
.macro pixman_composite_over_n_8888_8888_ca_init
add DUMMY, sp, #ARGS_STACK_OFFSET
vpush {d8-d15}
- vld1.32 {d11[0]}, [DUMMY]
- vdup.8 d8, d11[0]
- vdup.8 d9, d11[1]
- vdup.8 d10, d11[2]
- vdup.8 d11, d11[3]
+ vld1.8 {d8[]}, [DUMMY]!
+ vld1.8 {d9[]}, [DUMMY]!
+ vld1.8 {d10[]}, [DUMMY]!
+ vld1.8 {d11[]}, [DUMMY]!
.endm
.macro pixman_composite_over_n_8888_8888_ca_cleanup
@@ -1790,11 +1771,10 @@ generate_composite_function \
.macro pixman_composite_over_n_8888_0565_ca_init
add DUMMY, sp, #ARGS_STACK_OFFSET
vpush {d8-d15}
- vld1.32 {d11[0]}, [DUMMY]
- vdup.8 d8, d11[0]
- vdup.8 d9, d11[1]
- vdup.8 d10, d11[2]
- vdup.8 d11, d11[3]
+ vld1.8 {d8[]}, [DUMMY]!
+ vld1.8 {d9[]}, [DUMMY]!
+ vld1.8 {d10[]}, [DUMMY]!
+ vld1.8 {d11[]}, [DUMMY]!
.endm
.macro pixman_composite_over_n_8888_0565_ca_cleanup
@@ -1843,9 +1823,8 @@ generate_composite_function \
.endm
.macro pixman_composite_in_n_8_init
- add DUMMY, sp, #ARGS_STACK_OFFSET
- vld1.32 {d3[0]}, [DUMMY]
- vdup.8 d3, d3[3]
+ add DUMMY, sp, #ARGS_STACK_OFFSET + 3
+ vld1.8 {d3[]}, [DUMMY]
.endm
.macro pixman_composite_in_n_8_cleanup
@@ -1901,10 +1880,9 @@ generate_composite_function \
.endm
.macro pixman_composite_add_n_8_8_init
- add DUMMY, sp, #ARGS_STACK_OFFSET
+ add DUMMY, sp, #ARGS_STACK_OFFSET + 3
vpush {d8-d15}
- vld1.32 {d11[0]}, [DUMMY]
- vdup.8 d11, d11[3]
+ vld1.8 {d11[]}, [DUMMY]
.endm
.macro pixman_composite_add_n_8_8_cleanup
@@ -2069,11 +2047,10 @@ generate_composite_function \
.macro pixman_composite_add_n_8_8888_init
add DUMMY, sp, #ARGS_STACK_OFFSET
- vld1.32 {d3[0]}, [DUMMY]
- vdup.8 d0, d3[0]
- vdup.8 d1, d3[1]
- vdup.8 d2, d3[2]
- vdup.8 d3, d3[3]
+ vld1.8 {d0[]}, [DUMMY]!
+ vld1.8 {d1[]}, [DUMMY]!
+ vld1.8 {d2[]}, [DUMMY]!
+ vld1.8 {d3[]}, [DUMMY]!
.endm
.macro pixman_composite_add_n_8_8888_cleanup
@@ -2097,9 +2074,8 @@ generate_composite_function \
/******************************************************************************/
.macro pixman_composite_add_8888_n_8888_init
- add DUMMY, sp, #(ARGS_STACK_OFFSET + 8)
- vld1.32 {d27[0]}, [DUMMY]
- vdup.8 d27, d27[3]
+ add DUMMY, sp, #(ARGS_STACK_OFFSET + 11)
+ vld1.8 {d27[]}, [DUMMY]
.endm
.macro pixman_composite_add_8888_n_8888_cleanup
@@ -2207,10 +2183,9 @@ generate_composite_function_single_scanline \
.endm
.macro pixman_composite_over_8888_n_8888_init
- add DUMMY, sp, #48
+ add DUMMY, sp, #48 + 3
vpush {d8-d15}
- vld1.32 {d15[0]}, [DUMMY]
- vdup.8 d15, d15[3]
+ vld1.8 {d15[]}, [DUMMY]
.endm
.macro pixman_composite_over_8888_n_8888_cleanup
@@ -2579,10 +2554,9 @@ generate_composite_function \
/******************************************************************************/
.macro pixman_composite_over_0565_n_0565_init
- add DUMMY, sp, #(ARGS_STACK_OFFSET + 8)
+ add DUMMY, sp, #(ARGS_STACK_OFFSET + 11)
vpush {d8-d15}
- vld1.32 {d15[0]}, [DUMMY]
- vdup.8 d15, d15[3]
+ vld1.8 {d15[]}, [DUMMY]
.endm
.macro pixman_composite_over_0565_n_0565_cleanup
--
1.7.5.4
More information about the Pixman
mailing list