Siarhei Siamashka <siarhei.siamas...@gmail.com> writes: > +.macro pixman_composite_src_n_8_0565_process_pixblock_head > + /* in */ > + vmull.u8 q15, d24, d2 > + vmull.u8 q3, d24, d1 > + vmull.u8 q2, d24, d0 > + vrshr.u16 q12, q15, #8 > + vrshr.u16 q11, q3, #8 > + vrshr.u16 q10, q2, #8 > + vraddhn.u16 d16, q15, q12 > + vraddhn.u16 d19, q3, q11 > + vraddhn.u16 d18, q2, q10 > +.endm > + > +.macro pixman_composite_src_n_8_0565_process_pixblock_tail > + /* convert to r5g6b5 */ > + vshll.u8 q14, d16, #8 > + vshll.u8 q8, d19, #8 > + vshll.u8 q9, d18, #8 > + vsri.u16 q14, q8, #5 > + vsri.u16 q14, q9, #11 > +.endm
It's remarkable how much NEON can do with so few instructions. > @@ -90,6 +90,8 @@ PIXMAN_ARM_BIND_FAST_PATH_SRC_MASK_DST (neon, > over_8888_8888_8888, > uint32_t, 1, uint32_t, 1, uint32_t, > 1) > PIXMAN_ARM_BIND_FAST_PATH_SRC_MASK_DST (neon, over_8888_8_0565, > uint32_t, 1, uint8_t, 1, uint16_t, 1) > +PIXMAN_ARM_BIND_FAST_PATH_SRC_MASK_DST (neon, src_8888_8_0565, > + uint32_t, 1, uint8_t, 1, uint16_t, 1) > > void > pixman_composite_src_n_8_asm_neon (int32_t w, > @@ -198,6 +200,8 @@ pixman_blt_neon (uint32_t *src_bits, > > static const pixman_fast_path_t arm_neon_fast_paths[] = > { > + PIXMAN_STD_FAST_PATH (SRC, a8r8g8b8, a8, r5g6b5, > neon_composite_src_8888_8_0565), > + PIXMAN_STD_FAST_PATH (SRC, a8b8g8r8, a8, b5g6r5, > neon_composite_src_8888_8_0565), It seems like this fast path will work as src_x888_8_0565 as well since the alpha channel is completely ignored. Soren _______________________________________________ Pixman mailing list Pixman@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/pixman