1.1 --- a/src/video/arm/pixman-arm-neon-asm.S Thu Oct 31 14:00:28 2019 +0300
1.2 +++ b/src/video/arm/pixman-arm-neon-asm.S Thu Oct 31 14:00:28 2019 +0300
1.3 @@ -100,3 +100,91 @@
1.4 RGBtoRGBPixelAlpha_process_pixblock_head, \
1.5 RGBtoRGBPixelAlpha_process_pixblock_tail, \
1.6 RGBtoRGBPixelAlpha_process_pixblock_tail_head
1.7 +
1.8 + /******************************************************************************/
1.9 +
1.10 +.macro ARGBto565PixelAlpha_process_pixblock_head
1.11 + vmvn d6, d3
1.12 + vshr.u8 d1, #2
1.13 + vshr.u8 d3, #3
1.14 + vshr.u8 d0, #3
1.15 + vshrn.u16 d7, q2, #3
1.16 + vshrn.u16 d25, q2, #8
1.17 + vbic.i16 q2, #0xe0
1.18 + vshr.u8 d6, #3
1.19 + vshr.u8 d7, #2
1.20 + vshr.u8 d2, #3
1.21 + vmovn.u16 d24, q2
1.22 + vshr.u8 d25, #3
1.23 + vmull.u8 q13, d1, d3
1.24 + vmlal.u8 q13, d7, d6
1.25 + vmull.u8 q14, d0, d3
1.26 + vmlal.u8 q14, d24, d6
1.27 + vmull.u8 q15, d2, d3
1.28 + vmlal.u8 q15, d25, d6
1.29 +.endm
1.30 +
1.31 +.macro ARGBto565PixelAlpha_process_pixblock_tail
1.32 + vsra.u16 q13, #5
1.33 + vsra.u16 q14, #5
1.34 + vsra.u16 q15, #5
1.35 + vrshr.u16 q13, #5
1.36 + vrshr.u16 q14, #5
1.37 + vrshr.u16 q15, #5
1.38 + vsli.u16 q14, q13, #5
1.39 + vsli.u16 q14, q15, #11
1.40 +.endm
1.41 +
1.42 +.macro ARGBto565PixelAlpha_process_pixblock_tail_head
1.43 + vld4.8 {d0-d3}, [SRC]!
1.44 + PF add PF_X, PF_X, #8
1.45 + vsra.u16 q13, #5
1.46 + PF tst PF_CTL, #0xF
1.47 + vsra.u16 q14, #5
1.48 + PF addne PF_X, PF_X, #8
1.49 + vsra.u16 q15, #5
1.50 + PF subne PF_CTL, PF_CTL, #1
1.51 + vrshr.u16 q13, #5
1.52 + PF cmp PF_X, ORIG_W
1.53 + vrshr.u16 q14, #5
1.54 + PF pld, [PF_SRC, PF_X, lsl #src_bpp_shift]
1.55 + vrshr.u16 q15, #5
1.56 + PF pld, [PF_DST, PF_X, lsl #dst_bpp_shift]
1.57 + vld1.8 {d4-d5}, [DST_R]!
1.58 + PF subge PF_X, PF_X, ORIG_W
1.59 + vsli.u16 q14, q13, #5
1.60 + PF subges PF_CTL, PF_CTL, #0x10
1.61 + vsli.u16 q14, q15, #11
1.62 + PF ldrgeb DUMMY, [PF_SRC, SRC_STRIDE, lsl #src_bpp_shift]!
1.63 + vst1.8 {q14}, [DST_W :128]!
1.64 + vmvn d6, d3
1.65 + vshr.u8 d1, #2
1.66 + vshr.u8 d3, #3
1.67 + vshr.u8 d0, #3
1.68 + vshrn.u16 d7, q2, #3
1.69 + vshrn.u16 d25, q2, #8
1.70 + vbic.i16 q2, #0xe0
1.71 + PF ldrgeb DUMMY, [PF_DST, DST_STRIDE, lsl #dst_bpp_shift]!
1.72 + vshr.u8 d6, #3
1.73 + vshr.u8 d7, #2
1.74 + vshr.u8 d2, #3
1.75 + vmovn.u16 d24, q2
1.76 + vshr.u8 d25, #3
1.77 + vmull.u8 q13, d1, d3
1.78 + vmlal.u8 q13, d7, d6
1.79 + vmull.u8 q14, d0, d3
1.80 + vmlal.u8 q14, d24, d6
1.81 + vmull.u8 q15, d2, d3
1.82 + vmlal.u8 q15, d25, d6
1.83 +.endm
1.84 +
1.85 +generate_composite_function \
1.86 + BlitARGBto565PixelAlphaARMNEONAsm, 32, 0, 16, \
1.87 + FLAG_DST_READWRITE | FLAG_DEINTERLEAVE_32BPP, \
1.88 + 8, /* number of pixels, processed in a single block */ \
1.89 + 6, /* prefetch distance */ \
1.90 + default_init, \
1.91 + default_cleanup, \
1.92 + ARGBto565PixelAlpha_process_pixblock_head, \
1.93 + ARGBto565PixelAlpha_process_pixblock_tail, \
1.94 + ARGBto565PixelAlpha_process_pixblock_tail_head