aboutsummaryrefslogtreecommitdiffstats
path: root/meta-oe/recipes-graphics/xorg-lib/pixman-0.23.6/0003-ARM-NEON-Replace-old-bilinear-scanline-generator-wit.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-oe/recipes-graphics/xorg-lib/pixman-0.23.6/0003-ARM-NEON-Replace-old-bilinear-scanline-generator-wit.patch')
-rw-r--r--meta-oe/recipes-graphics/xorg-lib/pixman-0.23.6/0003-ARM-NEON-Replace-old-bilinear-scanline-generator-wit.patch520
1 files changed, 520 insertions, 0 deletions
diff --git a/meta-oe/recipes-graphics/xorg-lib/pixman-0.23.6/0003-ARM-NEON-Replace-old-bilinear-scanline-generator-wit.patch b/meta-oe/recipes-graphics/xorg-lib/pixman-0.23.6/0003-ARM-NEON-Replace-old-bilinear-scanline-generator-wit.patch
new file mode 100644
index 0000000000..7c6f501ac3
--- /dev/null
+++ b/meta-oe/recipes-graphics/xorg-lib/pixman-0.23.6/0003-ARM-NEON-Replace-old-bilinear-scanline-generator-wit.patch
@@ -0,0 +1,520 @@
+From 8d0460c4f1b23f3a13e9ff7282b30dd06f10aee1 Mon Sep 17 00:00:00 2001
+From: Taekyun Kim <tkq.kim@samsung.com>
+Date: Fri, 23 Sep 2011 00:03:22 +0900
+Subject: [PATCH 3/8] ARM: NEON: Replace old bilinear scanline generator with new template
+
+Bilinear scanline functions in pixman-arm-neon-asm-bilinear.S can
+be replaced with new template just by wrapping existing macros.
+---
+ pixman/pixman-arm-neon-asm-bilinear.S | 484 ++++++++++++++++++++-------------
+ 1 files changed, 292 insertions(+), 192 deletions(-)
+
+diff --git a/pixman/pixman-arm-neon-asm-bilinear.S b/pixman/pixman-arm-neon-asm-bilinear.S
+index 784e5df..25bcb24 100644
+--- a/pixman/pixman-arm-neon-asm-bilinear.S
++++ b/pixman/pixman-arm-neon-asm-bilinear.S
+@@ -582,198 +582,6 @@ fname:
+ bilinear_store_&dst_fmt 4, q2, q3
+ .endm
+
+-.macro generate_bilinear_scanline_func_src_dst \
+- fname, src_fmt, dst_fmt, op, \
+- bpp_shift, prefetch_distance
+-
+-pixman_asm_function fname
+- OUT .req r0
+- TOP .req r1
+- BOTTOM .req r2
+- WT .req r3
+- WB .req r4
+- X .req r5
+- UX .req r6
+- WIDTH .req ip
+- TMP1 .req r3
+- TMP2 .req r4
+- PF_OFFS .req r7
+- TMP3 .req r8
+- TMP4 .req r9
+- STRIDE .req r2
+-
+- mov ip, sp
+- push {r4, r5, r6, r7, r8, r9}
+- mov PF_OFFS, #prefetch_distance
+- ldmia ip, {WB, X, UX, WIDTH}
+- mul PF_OFFS, PF_OFFS, UX
+-
+- .set prefetch_offset, prefetch_distance
+-
+- sub STRIDE, BOTTOM, TOP
+- .unreq BOTTOM
+-
+- cmp WIDTH, #0
+- ble 3f
+-
+- vdup.u16 q12, X
+- vdup.u16 q13, UX
+- vdup.u8 d28, WT
+- vdup.u8 d29, WB
+- vadd.u16 d25, d25, d26
+- vadd.u16 q13, q13, q13
+- vshr.u16 q15, q12, #8
+- vadd.u16 q12, q12, q13
+-
+- subs WIDTH, WIDTH, #4
+- blt 1f
+- mov PF_OFFS, PF_OFFS, asr #(16 - bpp_shift)
+-0:
+- bilinear_interpolate_four_pixels src_fmt, x, dst_fmt, op
+- subs WIDTH, WIDTH, #4
+- bge 0b
+-1:
+- tst WIDTH, #2
+- beq 2f
+- bilinear_interpolate_two_pixels src_fmt, x, dst_fmt, op
+-2:
+- tst WIDTH, #1
+- beq 3f
+- bilinear_interpolate_last_pixel src_fmt, x, dst_fmt, op
+-3:
+- pop {r4, r5, r6, r7, r8, r9}
+- bx lr
+-
+- .unreq OUT
+- .unreq TOP
+- .unreq WT
+- .unreq WB
+- .unreq X
+- .unreq UX
+- .unreq WIDTH
+- .unreq TMP1
+- .unreq TMP2
+- .unreq PF_OFFS
+- .unreq TMP3
+- .unreq TMP4
+- .unreq STRIDE
+-.endfunc
+-
+-.endm
+-
+-.macro generate_bilinear_scanline_func_src_a8_dst \
+- fname, src_fmt, dst_fmt, op, \
+- bpp_shift, prefetch_distance
+-
+-pixman_asm_function fname
+- OUT .req r0
+- MASK .req r1
+- TOP .req r2
+- BOTTOM .req r3
+- WT .req r4
+- WB .req r5
+- X .req r6
+- UX .req r7
+- WIDTH .req ip
+- TMP1 .req r4
+- TMP2 .req r5
+- PF_OFFS .req r8
+- TMP3 .req r9
+- TMP4 .req r10
+- STRIDE .req r3
+-
+- mov ip, sp
+- push {r4, r5, r6, r7, r8, r9, r10, ip}
+- mov PF_OFFS, #prefetch_distance
+- ldmia ip, {WT, WB, X, UX, WIDTH}
+- mul PF_OFFS, PF_OFFS, UX
+-
+- .set prefetch_offset, prefetch_distance
+-
+- sub STRIDE, BOTTOM, TOP
+- .unreq BOTTOM
+-
+- cmp WIDTH, #0
+- ble 3f
+-
+- vdup.u16 q12, X
+- vdup.u16 q13, UX
+- vdup.u8 d28, WT
+- vdup.u8 d29, WB
+- vadd.u16 d25, d25, d26
+- vadd.u16 q13, q13, q13
+- vshr.u16 q15, q12, #8
+- vadd.u16 q12, q12, q13
+-
+- subs WIDTH, WIDTH, #4
+- blt 1f
+- mov PF_OFFS, PF_OFFS, asr #(16 - bpp_shift)
+-0:
+- bilinear_interpolate_four_pixels src_fmt, 8, dst_fmt, op
+- subs WIDTH, WIDTH, #4
+- bge 0b
+-1:
+- tst WIDTH, #2
+- beq 2f
+- bilinear_interpolate_two_pixels src_fmt, 8, dst_fmt, op
+-2:
+- tst WIDTH, #1
+- beq 3f
+- bilinear_interpolate_last_pixel src_fmt, 8, dst_fmt, op
+-3:
+- pop {r4, r5, r6, r7, r8, r9, r10, ip}
+- bx lr
+-
+- .unreq OUT
+- .unreq TOP
+- .unreq WT
+- .unreq WB
+- .unreq X
+- .unreq UX
+- .unreq WIDTH
+- .unreq MASK
+- .unreq TMP1
+- .unreq TMP2
+- .unreq PF_OFFS
+- .unreq TMP3
+- .unreq TMP4
+- .unreq STRIDE
+-.endfunc
+-
+-.endm
+-
+-generate_bilinear_scanline_func_src_dst \
+- pixman_scaled_bilinear_scanline_8888_8888_OVER_asm_neon, \
+- 8888, 8888, over, 2, 28
+-
+-generate_bilinear_scanline_func_src_dst \
+- pixman_scaled_bilinear_scanline_8888_8888_ADD_asm_neon, \
+- 8888, 8888, add, 2, 28
+-
+-generate_bilinear_scanline_func_src_a8_dst \
+- pixman_scaled_bilinear_scanline_8888_8_8888_SRC_asm_neon, \
+- 8888, 8888, src, 2, 28
+-
+-generate_bilinear_scanline_func_src_a8_dst \
+- pixman_scaled_bilinear_scanline_8888_8_0565_SRC_asm_neon, \
+- 8888, 0565, src, 2, 28
+-
+-generate_bilinear_scanline_func_src_a8_dst \
+- pixman_scaled_bilinear_scanline_0565_8_x888_SRC_asm_neon, \
+- 0565, 8888, src, 1, 28
+-
+-generate_bilinear_scanline_func_src_a8_dst \
+- pixman_scaled_bilinear_scanline_0565_8_0565_SRC_asm_neon, \
+- 0565, 0565, src, 1, 28
+-
+-generate_bilinear_scanline_func_src_a8_dst \
+- pixman_scaled_bilinear_scanline_8888_8_8888_OVER_asm_neon, \
+- 8888, 8888, over, 2, 28
+-
+-generate_bilinear_scanline_func_src_a8_dst \
+- pixman_scaled_bilinear_scanline_8888_8_8888_ADD_asm_neon, \
+- 8888, 8888, add, 2, 28
+-
+ .set BILINEAR_FLAG_USE_MASK, 1
+ .set BILINEAR_FLAG_USE_ALL_NEON_REGS, 2
+
+@@ -855,6 +663,8 @@ pixman_asm_function fname
+ TMP4 .req r10
+ STRIDE .req r3
+
++ .set prefetch_offset, prefetch_distance
++
+ mov ip, sp
+ push {r4, r5, r6, r7, r8, r9, r10, ip}
+ mov PF_OFFS, #prefetch_distance
+@@ -968,3 +778,293 @@ pixman_asm_function fname
+ .endfunc
+
+ .endm
++
++/* src_8888_8_8888 */
++.macro bilinear_src_8888_8_8888_process_last_pixel
++ bilinear_interpolate_last_pixel 8888, 8, 8888, src
++.endm
++
++.macro bilinear_src_8888_8_8888_process_two_pixels
++ bilinear_interpolate_two_pixels 8888, 8, 8888, src
++.endm
++
++.macro bilinear_src_8888_8_8888_process_four_pixels
++ bilinear_interpolate_four_pixels 8888, 8, 8888, src
++.endm
++
++.macro bilinear_src_8888_8_8888_process_pixblock_head
++ bilinear_src_8888_8_8888_process_four_pixels
++.endm
++
++.macro bilinear_src_8888_8_8888_process_pixblock_tail
++.endm
++
++.macro bilinear_src_8888_8_8888_process_pixblock_tail_head
++ bilinear_src_8888_8_8888_process_pixblock_tail
++ bilinear_src_8888_8_8888_process_pixblock_head
++.endm
++
++/* src_8888_8_0565 */
++.macro bilinear_src_8888_8_0565_process_last_pixel
++ bilinear_interpolate_last_pixel 8888, 8, 0565, src
++.endm
++
++.macro bilinear_src_8888_8_0565_process_two_pixels
++ bilinear_interpolate_two_pixels 8888, 8, 0565, src
++.endm
++
++.macro bilinear_src_8888_8_0565_process_four_pixels
++ bilinear_interpolate_four_pixels 8888, 8, 0565, src
++.endm
++
++.macro bilinear_src_8888_8_0565_process_pixblock_head
++ bilinear_src_8888_8_0565_process_four_pixels
++.endm
++
++.macro bilinear_src_8888_8_0565_process_pixblock_tail
++.endm
++
++.macro bilinear_src_8888_8_0565_process_pixblock_tail_head
++ bilinear_src_8888_8_0565_process_pixblock_tail
++ bilinear_src_8888_8_0565_process_pixblock_head
++.endm
++
++/* src_0565_8_x888 */
++.macro bilinear_src_0565_8_x888_process_last_pixel
++ bilinear_interpolate_last_pixel 0565, 8, 8888, src
++.endm
++
++.macro bilinear_src_0565_8_x888_process_two_pixels
++ bilinear_interpolate_two_pixels 0565, 8, 8888, src
++.endm
++
++.macro bilinear_src_0565_8_x888_process_four_pixels
++ bilinear_interpolate_four_pixels 0565, 8, 8888, src
++.endm
++
++.macro bilinear_src_0565_8_x888_process_pixblock_head
++ bilinear_src_0565_8_x888_process_four_pixels
++.endm
++
++.macro bilinear_src_0565_8_x888_process_pixblock_tail
++.endm
++
++.macro bilinear_src_0565_8_x888_process_pixblock_tail_head
++ bilinear_src_0565_8_x888_process_pixblock_tail
++ bilinear_src_0565_8_x888_process_pixblock_head
++.endm
++
++/* src_0565_8_0565 */
++.macro bilinear_src_0565_8_0565_process_last_pixel
++ bilinear_interpolate_last_pixel 0565, 8, 0565, src
++.endm
++
++.macro bilinear_src_0565_8_0565_process_two_pixels
++ bilinear_interpolate_two_pixels 0565, 8, 0565, src
++.endm
++
++.macro bilinear_src_0565_8_0565_process_four_pixels
++ bilinear_interpolate_four_pixels 0565, 8, 0565, src
++.endm
++
++.macro bilinear_src_0565_8_0565_process_pixblock_head
++ bilinear_src_0565_8_0565_process_four_pixels
++.endm
++
++.macro bilinear_src_0565_8_0565_process_pixblock_tail
++.endm
++
++.macro bilinear_src_0565_8_0565_process_pixblock_tail_head
++ bilinear_src_0565_8_0565_process_pixblock_tail
++ bilinear_src_0565_8_0565_process_pixblock_head
++.endm
++
++/* over_8888_8888 */
++.macro bilinear_over_8888_8888_process_last_pixel
++ bilinear_interpolate_last_pixel 8888, x, 8888, over
++.endm
++
++.macro bilinear_over_8888_8888_process_two_pixels
++ bilinear_interpolate_two_pixels 8888, x, 8888, over
++.endm
++
++.macro bilinear_over_8888_8888_process_four_pixels
++ bilinear_interpolate_four_pixels 8888, x, 8888, over
++.endm
++
++.macro bilinear_over_8888_8888_process_pixblock_head
++ bilinear_over_8888_8888_process_four_pixels
++.endm
++
++.macro bilinear_over_8888_8888_process_pixblock_tail
++.endm
++
++.macro bilinear_over_8888_8888_process_pixblock_tail_head
++ bilinear_over_8888_8888_process_pixblock_tail
++ bilinear_over_8888_8888_process_pixblock_head
++.endm
++
++/* over_8888_8_8888 */
++.macro bilinear_over_8888_8_8888_process_last_pixel
++ bilinear_interpolate_last_pixel 8888, 8, 8888, over
++.endm
++
++.macro bilinear_over_8888_8_8888_process_two_pixels
++ bilinear_interpolate_two_pixels 8888, 8, 8888, over
++.endm
++
++.macro bilinear_over_8888_8_8888_process_four_pixels
++ bilinear_interpolate_four_pixels 8888, 8, 8888, over
++.endm
++
++.macro bilinear_over_8888_8_8888_process_pixblock_head
++ bilinear_over_8888_8_8888_process_four_pixels
++.endm
++
++.macro bilinear_over_8888_8_8888_process_pixblock_tail
++.endm
++
++.macro bilinear_over_8888_8_8888_process_pixblock_tail_head
++ bilinear_over_8888_8_8888_process_pixblock_tail
++ bilinear_over_8888_8_8888_process_pixblock_head
++.endm
++
++/* add_8888_8888 */
++.macro bilinear_add_8888_8888_process_last_pixel
++ bilinear_interpolate_last_pixel 8888, x, 8888, add
++.endm
++
++.macro bilinear_add_8888_8888_process_two_pixels
++ bilinear_interpolate_two_pixels 8888, x, 8888, add
++.endm
++
++.macro bilinear_add_8888_8888_process_four_pixels
++ bilinear_interpolate_four_pixels 8888, x, 8888, add
++.endm
++
++.macro bilinear_add_8888_8888_process_pixblock_head
++ bilinear_add_8888_8888_process_four_pixels
++.endm
++
++.macro bilinear_add_8888_8888_process_pixblock_tail
++.endm
++
++.macro bilinear_add_8888_8888_process_pixblock_tail_head
++ bilinear_add_8888_8888_process_pixblock_tail
++ bilinear_add_8888_8888_process_pixblock_head
++.endm
++
++/* add_8888_8_8888 */
++.macro bilinear_add_8888_8_8888_process_last_pixel
++ bilinear_interpolate_last_pixel 8888, 8, 8888, add
++.endm
++
++.macro bilinear_add_8888_8_8888_process_two_pixels
++ bilinear_interpolate_two_pixels 8888, 8, 8888, add
++.endm
++
++.macro bilinear_add_8888_8_8888_process_four_pixels
++ bilinear_interpolate_four_pixels 8888, 8, 8888, add
++.endm
++
++.macro bilinear_add_8888_8_8888_process_pixblock_head
++ bilinear_add_8888_8_8888_process_four_pixels
++.endm
++
++.macro bilinear_add_8888_8_8888_process_pixblock_tail
++.endm
++
++.macro bilinear_add_8888_8_8888_process_pixblock_tail_head
++ bilinear_add_8888_8_8888_process_pixblock_tail
++ bilinear_add_8888_8_8888_process_pixblock_head
++.endm
++
++
++/* Bilinear scanline functions */
++generate_bilinear_scanline_func \
++ pixman_scaled_bilinear_scanline_8888_8_8888_SRC_asm_neon, \
++ 8888, 8888, 2, 2, \
++ bilinear_src_8888_8_8888_process_last_pixel, \
++ bilinear_src_8888_8_8888_process_two_pixels, \
++ bilinear_src_8888_8_8888_process_four_pixels, \
++ bilinear_src_8888_8_8888_process_pixblock_head, \
++ bilinear_src_8888_8_8888_process_pixblock_tail, \
++ bilinear_src_8888_8_8888_process_pixblock_tail_head, \
++ 4, 28, BILINEAR_FLAG_USE_MASK
++
++generate_bilinear_scanline_func \
++ pixman_scaled_bilinear_scanline_8888_8_0565_SRC_asm_neon, \
++ 8888, 0565, 2, 1, \
++ bilinear_src_8888_8_0565_process_last_pixel, \
++ bilinear_src_8888_8_0565_process_two_pixels, \
++ bilinear_src_8888_8_0565_process_four_pixels, \
++ bilinear_src_8888_8_0565_process_pixblock_head, \
++ bilinear_src_8888_8_0565_process_pixblock_tail, \
++ bilinear_src_8888_8_0565_process_pixblock_tail_head, \
++ 4, 28, BILINEAR_FLAG_USE_MASK
++
++generate_bilinear_scanline_func \
++ pixman_scaled_bilinear_scanline_0565_8_x888_SRC_asm_neon, \
++ 0565, 8888, 1, 2, \
++ bilinear_src_0565_8_x888_process_last_pixel, \
++ bilinear_src_0565_8_x888_process_two_pixels, \
++ bilinear_src_0565_8_x888_process_four_pixels, \
++ bilinear_src_0565_8_x888_process_pixblock_head, \
++ bilinear_src_0565_8_x888_process_pixblock_tail, \
++ bilinear_src_0565_8_x888_process_pixblock_tail_head, \
++ 4, 28, BILINEAR_FLAG_USE_MASK
++
++generate_bilinear_scanline_func \
++ pixman_scaled_bilinear_scanline_0565_8_0565_SRC_asm_neon, \
++ 0565, 0565, 1, 1, \
++ bilinear_src_0565_8_0565_process_last_pixel, \
++ bilinear_src_0565_8_0565_process_two_pixels, \
++ bilinear_src_0565_8_0565_process_four_pixels, \
++ bilinear_src_0565_8_0565_process_pixblock_head, \
++ bilinear_src_0565_8_0565_process_pixblock_tail, \
++ bilinear_src_0565_8_0565_process_pixblock_tail_head, \
++ 4, 28, BILINEAR_FLAG_USE_MASK
++
++generate_bilinear_scanline_func \
++ pixman_scaled_bilinear_scanline_8888_8888_OVER_asm_neon, \
++ 8888, 8888, 2, 2, \
++ bilinear_over_8888_8888_process_last_pixel, \
++ bilinear_over_8888_8888_process_two_pixels, \
++ bilinear_over_8888_8888_process_four_pixels, \
++ bilinear_over_8888_8888_process_pixblock_head, \
++ bilinear_over_8888_8888_process_pixblock_tail, \
++ bilinear_over_8888_8888_process_pixblock_tail_head, \
++ 4, 28, 0
++
++generate_bilinear_scanline_func \
++ pixman_scaled_bilinear_scanline_8888_8_8888_OVER_asm_neon, \
++ 8888, 8888, 2, 2, \
++ bilinear_over_8888_8_8888_process_last_pixel, \
++ bilinear_over_8888_8_8888_process_two_pixels, \
++ bilinear_over_8888_8_8888_process_four_pixels, \
++ bilinear_over_8888_8_8888_process_pixblock_head, \
++ bilinear_over_8888_8_8888_process_pixblock_tail, \
++ bilinear_over_8888_8_8888_process_pixblock_tail_head, \
++ 4, 28, BILINEAR_FLAG_USE_MASK
++
++generate_bilinear_scanline_func \
++ pixman_scaled_bilinear_scanline_8888_8888_ADD_asm_neon, \
++ 8888, 8888, 2, 2, \
++ bilinear_add_8888_8888_process_last_pixel, \
++ bilinear_add_8888_8888_process_two_pixels, \
++ bilinear_add_8888_8888_process_four_pixels, \
++ bilinear_add_8888_8888_process_pixblock_head, \
++ bilinear_add_8888_8888_process_pixblock_tail, \
++ bilinear_add_8888_8888_process_pixblock_tail_head, \
++ 4, 28, 0
++
++generate_bilinear_scanline_func \
++ pixman_scaled_bilinear_scanline_8888_8_8888_ADD_asm_neon, \
++ 8888, 8888, 2, 2, \
++ bilinear_add_8888_8_8888_process_last_pixel, \
++ bilinear_add_8888_8_8888_process_two_pixels, \
++ bilinear_add_8888_8_8888_process_four_pixels, \
++ bilinear_add_8888_8_8888_process_pixblock_head, \
++ bilinear_add_8888_8_8888_process_pixblock_tail, \
++ bilinear_add_8888_8_8888_process_pixblock_tail_head, \
++ 4, 28, BILINEAR_FLAG_USE_MASK
+--
+1.6.6.1
+