src/video/arm/pixman-arm-neon-asm.S
branchSDL-1.2
changeset 13221 3705e81df6ff
parent 13220 0ae1ddca5e85
child 13222 c8562ecca3c9
     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