[Pixman] [PATCH] iOS Runtime Detection Support For ARM NEON

Bobby Salazar bobby8934 at gmail.com
Fri Feb 3 15:54:10 PST 2012


Sure, I have attached the decompiled ARM NEON sources. Hopefully the
runtime detection patch will be accepted soon too!

On 2/1/12, cu <cairouser at yahoo.com> wrote:
> Would you mind sharing the de-compiled sources? I would be very
> interested in building an optimized iOS version of pixman.
>
> Thank you.
>
> Bobby Salazar wrote:
>> I did manage to get the ARM NEON assembly code to compile, sort of.
>> But not from the .S source file. I spent many hours and basically gave
>> up on that. The macros used in the .S sources are just completely
>> incompatible with the Apple version of gcc and all scripts I've tried
>> to preprocess them failed too.
>>
>> The way I was able to make it work was to follow the advice here:
>> http://lists.freedesktop.org/archives/pixman/2011-March/001110.html
>>
>> Basically, what I did was compile the ARM NEON code using the Android
>> NDK and then decompiled it back into assembly code. That expanded all
>> the macros for me and gave me usable code for Apple gcc (along with
>> the other steps described in that link above).
>>
>>
>
>
-------------- next part --------------
.text
.fpu neon
.arch armv7a
.p2align 2
.syntax unified


.global _pixman_composite_src_rpixbuf_8888_asm_neon
_pixman_composite_src_rpixbuf_8888_asm_neon:
	push	{r4, r5, r6, r7, r8, r9, sl, fp, ip, lr}
	ldr	r4, [sp, #40]
	mov	sl, #0
	ldr	r5, [sp, #44]
	mov	r6, r2
	mov	fp, r4
	mov	ip, r6
	mov	lr, r7
	lsl	r9, r1, #4
	sub	r9, r9, #6
	subs	r1, r1, #1
	mov	r7, r0
	blt	0f
	cmp	r0, #16
	blt	1f
15:	tst	r6, #15
	beq	2f
	tst	r6, #4
	beq	3f
	vld1.32	{d0[1]}, [r4]!
	add	r6, r6, #4
	add	sl, sl, #1
	sub	r0, r0, #1
3:	tst	r6, #8
	beq	4f
	vld1.32	{d1}, [r4]!
	add	r6, r6, #8
	add	sl, sl, #2
	sub	r0, r0, #2
4:	vld1.32	{d2-d3}, [r4]!
	add	r6, r6, #16
	add	sl, sl, #4
	sub	r0, r0, #4
	vuzp.8	d0, d1
	vuzp.8	d2, d3
	vuzp.8	d1, d3
	vuzp.8	d0, d2
	vmull.u8	q8, d3, d0
	vmull.u8	q9, d3, d1
	vmull.u8	q10, d3, d2
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r7
	pld	[fp, sl, lsl #2]
	subge	sl, sl, r7
	subsge	r9, r9, #16
	ldrbge	r8, [fp, r5, lsl #2]!
	vrshr.u16	q11, q8, #8
	vswp	d3, d31
	vrshr.u16	q12, q9, #8
	vrshr.u16	q13, q10, #8
	vraddhn.i16	d28, q11, q8
	vraddhn.i16	d29, q12, q9
	vraddhn.i16	d30, q13, q10
	vzip.8	d28, d30
	vzip.8	d29, d31
	vzip.8	d30, d31
	vzip.8	d28, d29
	tst	r2, #4
	beq	5f
	vst1.32	{d28[1]}, [r2]!
5:	tst	r2, #8
	beq	6f
	vst1.32	{d29}, [r2, :64]!
6:	vst1.32	{d30-d31}, [r2, :128]!
2:	vld4.8	{d0-d3}, [r4]!
	add	sl, sl, #8
	vmull.u8	q8, d3, d0
	vmull.u8	q9, d3, d1
	vmull.u8	q10, d3, d2
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r7
	pld	[fp, sl, lsl #2]
	subge	sl, sl, r7
	subsge	r9, r9, #16
	ldrbge	r8, [fp, r5, lsl #2]!
	subs	r0, r0, #16
	blt	7f
8:	vrshr.u16	q11, q8, #8
	vswp	d3, d31
	vrshr.u16	q12, q9, #8
	vrshr.u16	q13, q10, #8
	vld4.8	{d0-d3}, [r4]!
	vraddhn.i16	d28, q11, q8
	add	sl, sl, #8
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	vraddhn.i16	d29, q12, q9
	vraddhn.i16	d30, q13, q10
	vmull.u8	q8, d3, d0
	vmull.u8	q9, d3, d1
	vmull.u8	q10, d3, d2
	vst4.8	{d28-d31}, [r2, :128]!
	cmp	sl, r7
	pld	[fp, sl, lsl #2]
	subge	sl, sl, r7
	subsge	r9, r9, #16
	ldrbge	r8, [fp, r5, lsl #2]!
	subs	r0, r0, #8
	bge	8b
7:	vrshr.u16	q11, q8, #8
	vswp	d3, d31
	vrshr.u16	q12, q9, #8
	vrshr.u16	q13, q10, #8
	vraddhn.i16	d28, q11, q8
	vraddhn.i16	d29, q12, q9
	vraddhn.i16	d30, q13, q10
	vst4.8	{d28-d31}, [r2, :128]!
	tst	r0, #7
	beq	9f
	tst	r0, #4
	beq	10f
	vld1.32	{d2-d3}, [r4]!
	add	sl, sl, #4
10:	tst	r0, #2
	beq	11f
	vld1.32	{d1}, [r4]!
	add	sl, sl, #2
11:	tst	r0, #1
	beq	12f
	vld1.32	{d0[1]}, [r4]!
	add	sl, sl, #1
12:	vuzp.8	d0, d1
	vuzp.8	d2, d3
	vuzp.8	d1, d3
	vuzp.8	d0, d2
	vmull.u8	q8, d3, d0
	vmull.u8	q9, d3, d1
	vmull.u8	q10, d3, d2
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r7
	pld	[fp, sl, lsl #2]
	subge	sl, sl, r7
	subsge	r9, r9, #16
	ldrbge	r8, [fp, r5, lsl #2]!
	vrshr.u16	q11, q8, #8
	vswp	d3, d31
	vrshr.u16	q12, q9, #8
	vrshr.u16	q13, q10, #8
	vraddhn.i16	d28, q11, q8
	vraddhn.i16	d29, q12, q9
	vraddhn.i16	d30, q13, q10
	vzip.8	d28, d30
	vzip.8	d29, d31
	vzip.8	d30, d31
	vzip.8	d28, d29
	tst	r0, #4
	beq	13f
	vst1.32	{d30-d31}, [r2, :128]!
13:	tst	r0, #2
	beq	14f
	vst1.32	{d29}, [r2, :64]!
14:	tst	r0, #1
	beq	9f
	vst1.32	{d28[1]}, [r2]!
9:	mov	r0, r7
	add	r2, r2, r3, lsl #2
	add	r4, r4, r5, lsl #2
	sub	r2, r2, r0, lsl #2
	sub	r4, r4, r0, lsl #2
	subs	r1, r1, #1
	mov	r6, r2
	bge	15b
	pop	{r4, r5, r6, r7, r8, r9, sl, fp, ip, pc}
1:	tst	r0, #8
	beq	16f
	vld4.8	{d0-d3}, [r4]!
	vmull.u8	q8, d3, d0
	vmull.u8	q9, d3, d1
	vmull.u8	q10, d3, d2
	vrshr.u16	q11, q8, #8
	vswp	d3, d31
	vrshr.u16	q12, q9, #8
	vrshr.u16	q13, q10, #8
	vraddhn.i16	d28, q11, q8
	vraddhn.i16	d29, q12, q9
	vraddhn.i16	d30, q13, q10
	vst4.8	{d28-d31}, [r2]!
16:	tst	r0, #7
	beq	17f
	tst	r0, #4
	beq	18f
	vld1.32	{d2-d3}, [r4]!
18:	tst	r0, #2
	beq	19f
	vld1.32	{d1}, [r4]!
19:	tst	r0, #1
	beq	20f
	vld1.32	{d0[1]}, [r4]!
20:	vuzp.8	d0, d1
	vuzp.8	d2, d3
	vuzp.8	d1, d3
	vuzp.8	d0, d2
	vmull.u8	q8, d3, d0
	vmull.u8	q9, d3, d1
	vmull.u8	q10, d3, d2
	vrshr.u16	q11, q8, #8
	vswp	d3, d31
	vrshr.u16	q12, q9, #8
	vrshr.u16	q13, q10, #8
	vraddhn.i16	d28, q11, q8
	vraddhn.i16	d29, q12, q9
	vraddhn.i16	d30, q13, q10
	vzip.8	d28, d30
	vzip.8	d29, d31
	vzip.8	d30, d31
	vzip.8	d28, d29
	tst	r0, #4
	beq	21f
	vst1.32	{d30-d31}, [r2]!
21:	tst	r0, #2
	beq	22f
	vst1.32	{d29}, [r2]!
22:	tst	r0, #1
	beq	17f
	vst1.32	{d28[1]}, [r2]!
17:	mov	r0, r7
	add	r2, r2, r3, lsl #2
	add	r4, r4, r5, lsl #2
	sub	r2, r2, r0, lsl #2
	sub	r4, r4, r0, lsl #2
	subs	r1, r1, #1
	mov	r6, r2
	bge	1b
0:	pop	{r4, r5, r6, r7, r8, r9, sl, fp, ip, pc}

.global _pixman_scaled_nearest_scanline_8888_0565_OVER_asm_neon
_pixman_scaled_nearest_scanline_8888_0565_OVER_asm_neon:
	ldr	ip, [sp]
	push	{r4, r5, r6, lr}
	mov	r6, r1
	cmp	r0, #8
	blt	0f
	tst	r6, #15
	beq	1f
	tst	r6, #2
	beq	2f
	asr	r4, r3, #16
	add	r3, r3, ip
	add	r4, r2, r4, lsl #2
	vld1.32	{d0[1]}, [r4, :32]
	vld1.16	{d4[1]}, [r6]!
	sub	r0, r0, #1
2:	tst	r6, #4
	beq	3f
	asr	r4, r3, #16
	add	r3, r3, ip
	add	r4, r2, r4, lsl #2
	asr	r5, r3, #16
	add	r3, r3, ip
	add	r5, r2, r5, lsl #2
	vld1.32	{d1[0]}, [r4, :32]
	vld1.32	{d1[1]}, [r5, :32]
	vld1.16	{d4[2]}, [r6]!
	vld1.16	{d4[3]}, [r6]!
	sub	r0, r0, #2
3:	tst	r6, #8
	beq	4f
	asr	r4, r3, #16
	add	r3, r3, ip, lsl #1
	add	r4, r2, r4, lsl #2
	asr	r5, r3, #16
	sub	r3, r3, ip
	add	r5, r2, r5, lsl #2
	vld1.32	{d2[0]}, [r4, :32]
	asr	r4, r3, #16
	add	r3, r3, ip, lsl #1
	add	r4, r2, r4, lsl #2
	vld1.32	{d3[0]}, [r5, :32]
	asr	r5, r3, #16
	add	r3, r3, ip
	add	r5, r2, r5, lsl #2
	vld1.32	{d2[1]}, [r4, :32]
	vld1.32	{d3[1]}, [r5, :32]
	vld1.16	{d5}, [r6, :64]!
	sub	r0, r0, #4
4:	vuzp.8	d0, d1
	vuzp.8	d2, d3
	vuzp.8	d1, d3
	vuzp.8	d0, d2
	vshrn.i16	d6, q2, #8
	vshrn.i16	d7, q2, #3
	vsli.16	q2, q2, #5
	vsri.8	d6, d6, #5
	vmvn	d3, d3
	vsri.8	d7, d7, #6
	vshrn.i16	d30, q2, #2
	vmull.u8	q10, d3, d6
	vmull.u8	q11, d3, d7
	vmull.u8	q12, d3, d30
	vrshr.u16	q13, q10, #8
	vrshr.u16	q3, q11, #8
	vrshr.u16	q15, q12, #8
	vraddhn.i16	d20, q10, q13
	vraddhn.i16	d23, q11, q3
	vraddhn.i16	d22, q12, q15
	vqadd.u8	d16, d2, d20
	vqadd.u8	q9, q0, q11
	vshll.i8	q14, d16, #8
	vshll.i8	q8, d19, #8
	vshll.i8	q9, d18, #8
	vsri.16	q14, q8, #5
	vsri.16	q14, q9, #11
	tst	r1, #2
	beq	5f
	vst1.16	{d28[1]}, [r1]!
5:	tst	r1, #4
	beq	6f
	vst1.16	{d28[2]}, [r1]!
	vst1.16	{d28[3]}, [r1]!
6:	tst	r1, #8
	beq	1f
	vst1.16	{d29}, [r1, :64]!
1:	subs	r0, r0, #8
	blt	7f
	vld1.16	{d4-d5}, [r6, :128]!
	asr	r4, r3, #16
	add	r3, r3, ip, lsl #1
	add	r4, r2, r4, lsl #2
	asr	r5, r3, #16
	sub	r3, r3, ip
	add	r5, r2, r5, lsl #2
	vld1.32	{d0[0]}, [r4, :32]
	asr	r4, r3, #16
	add	r3, r3, ip, lsl #1
	add	r4, r2, r4, lsl #2
	vld1.32	{d1[0]}, [r5, :32]
	asr	r5, r3, #16
	add	r3, r3, ip
	add	r5, r2, r5, lsl #2
	vld1.32	{d0[1]}, [r4, :32]
	vld1.32	{d1[1]}, [r5, :32]
	asr	r4, r3, #16
	add	r3, r3, ip, lsl #1
	add	r4, r2, r4, lsl #2
	asr	r5, r3, #16
	sub	r3, r3, ip
	add	r5, r2, r5, lsl #2
	vld1.32	{d2[0]}, [r4, :32]
	asr	r4, r3, #16
	add	r3, r3, ip, lsl #1
	add	r4, r2, r4, lsl #2
	vld1.32	{d3[0]}, [r5, :32]
	asr	r5, r3, #16
	add	r3, r3, ip
	add	r5, r2, r5, lsl #2
	vld1.32	{d2[1]}, [r4, :32]
	vld1.32	{d3[1]}, [r5, :32]
	vuzp.8	d0, d1
	vuzp.8	d2, d3
	vuzp.8	d1, d3
	vuzp.8	d0, d2
	vshrn.i16	d6, q2, #8
	vshrn.i16	d7, q2, #3
	vsli.16	q2, q2, #5
	vsri.8	d6, d6, #5
	vmvn	d3, d3
	vsri.8	d7, d7, #6
	vshrn.i16	d30, q2, #2
	vmull.u8	q10, d3, d6
	vmull.u8	q11, d3, d7
	vmull.u8	q12, d3, d30
	vrshr.u16	q13, q10, #8
	vrshr.u16	q3, q11, #8
	vrshr.u16	q15, q12, #8
	vraddhn.i16	d20, q10, q13
	vraddhn.i16	d23, q11, q3
	vraddhn.i16	d22, q12, q15
	subs	r0, r0, #8
	blt	8f
9:	vqadd.u8	d16, d2, d20
	vld1.16	{d4-d5}, [r6, :128]!
	vqadd.u8	q9, q0, q11
	vshrn.i16	d6, q2, #8
	asr	r4, r3, #16
	add	r3, r3, ip, lsl #1
	add	r4, r2, r4, lsl #2
	asr	r5, r3, #16
	sub	r3, r3, ip
	add	r5, r2, r5, lsl #2
	vld1.32	{d0[0]}, [r4, :32]
	asr	r4, r3, #16
	add	r3, r3, ip, lsl #1
	add	r4, r2, r4, lsl #2
	vld1.32	{d1[0]}, [r5, :32]
	asr	r5, r3, #16
	add	r3, r3, ip
	add	r5, r2, r5, lsl #2
	vld1.32	{d0[1]}, [r4, :32]
	vld1.32	{d1[1]}, [r5, :32]
	asr	r4, r3, #16
	add	r3, r3, ip, lsl #1
	add	r4, r2, r4, lsl #2
	asr	r5, r3, #16
	sub	r3, r3, ip
	add	r5, r2, r5, lsl #2
	vld1.32	{d2[0]}, [r4, :32]
	asr	r4, r3, #16
	add	r3, r3, ip, lsl #1
	add	r4, r2, r4, lsl #2
	vld1.32	{d3[0]}, [r5, :32]
	asr	r5, r3, #16
	add	r3, r3, ip
	add	r5, r2, r5, lsl #2
	vld1.32	{d2[1]}, [r4, :32]
	vld1.32	{d3[1]}, [r5, :32]
	vuzp.8	d0, d1
	vuzp.8	d2, d3
	vuzp.8	d1, d3
	vuzp.8	d0, d2
	vshrn.i16	d7, q2, #3
	vsli.16	q2, q2, #5
	vshll.i8	q14, d16, #8
	vshll.i8	q8, d19, #8
	vsri.8	d6, d6, #5
	vmvn	d3, d3
	vsri.8	d7, d7, #6
	vshrn.i16	d30, q2, #2
	vmull.u8	q10, d3, d6
	vmull.u8	q11, d3, d7
	vmull.u8	q12, d3, d30
	vsri.16	q14, q8, #5
	vshll.i8	q9, d18, #8
	vrshr.u16	q13, q10, #8
	vrshr.u16	q3, q11, #8
	vrshr.u16	q15, q12, #8
	vsri.16	q14, q9, #11
	vraddhn.i16	d20, q10, q13
	vraddhn.i16	d23, q11, q3
	vraddhn.i16	d22, q12, q15
	vst1.16	{d28-d29}, [r1, :128]!
	subs	r0, r0, #8
	bge	9b
8:	vqadd.u8	d16, d2, d20
	vqadd.u8	q9, q0, q11
	vshll.i8	q14, d16, #8
	vshll.i8	q8, d19, #8
	vshll.i8	q9, d18, #8
	vsri.16	q14, q8, #5
	vsri.16	q14, q9, #11
	vst1.16	{d28-d29}, [r1, :128]!
7:	tst	r0, #7
	beq	10f
	tst	r0, #4
	beq	11f
	asr	r4, r3, #16
	add	r3, r3, ip, lsl #1
	add	r4, r2, r4, lsl #2
	asr	r5, r3, #16
	sub	r3, r3, ip
	add	r5, r2, r5, lsl #2
	vld1.32	{d2[0]}, [r4, :32]
	asr	r4, r3, #16
	add	r3, r3, ip, lsl #1
	add	r4, r2, r4, lsl #2
	vld1.32	{d3[0]}, [r5, :32]
	asr	r5, r3, #16
	add	r3, r3, ip
	add	r5, r2, r5, lsl #2
	vld1.32	{d2[1]}, [r4, :32]
	vld1.32	{d3[1]}, [r5, :32]
	vld1.16	{d5}, [r6, :64]!
11:	tst	r0, #2
	beq	12f
	asr	r4, r3, #16
	add	r3, r3, ip
	add	r4, r2, r4, lsl #2
	asr	r5, r3, #16
	add	r3, r3, ip
	add	r5, r2, r5, lsl #2
	vld1.32	{d1[0]}, [r4, :32]
	vld1.32	{d1[1]}, [r5, :32]
	vld1.16	{d4[2]}, [r6]!
	vld1.16	{d4[3]}, [r6]!
12:	tst	r0, #1
	beq	13f
	asr	r4, r3, #16
	add	r3, r3, ip
	add	r4, r2, r4, lsl #2
	vld1.32	{d0[1]}, [r4, :32]
	vld1.16	{d4[1]}, [r6]!
13:	vuzp.8	d0, d1
	vuzp.8	d2, d3
	vuzp.8	d1, d3
	vuzp.8	d0, d2
	vshrn.i16	d6, q2, #8
	vshrn.i16	d7, q2, #3
	vsli.16	q2, q2, #5
	vsri.8	d6, d6, #5
	vmvn	d3, d3
	vsri.8	d7, d7, #6
	vshrn.i16	d30, q2, #2
	vmull.u8	q10, d3, d6
	vmull.u8	q11, d3, d7
	vmull.u8	q12, d3, d30
	vrshr.u16	q13, q10, #8
	vrshr.u16	q3, q11, #8
	vrshr.u16	q15, q12, #8
	vraddhn.i16	d20, q10, q13
	vraddhn.i16	d23, q11, q3
	vraddhn.i16	d22, q12, q15
	vqadd.u8	d16, d2, d20
	vqadd.u8	q9, q0, q11
	vshll.i8	q14, d16, #8
	vshll.i8	q8, d19, #8
	vshll.i8	q9, d18, #8
	vsri.16	q14, q8, #5
	vsri.16	q14, q9, #11
	tst	r0, #4
	beq	14f
	vst1.16	{d29}, [r1, :64]!
14:	tst	r0, #2
	beq	15f
	vst1.16	{d28[2]}, [r1]!
	vst1.16	{d28[3]}, [r1]!
15:	tst	r0, #1
	beq	10f
	vst1.16	{d28[1]}, [r1]!
10:	pop	{r4, r5, r6, pc}
0:	tst	r0, #7
	beq	16f
	tst	r0, #4
	beq	17f
	asr	r4, r3, #16
	add	r3, r3, ip, lsl #1
	add	r4, r2, r4, lsl #2
	asr	r5, r3, #16
	sub	r3, r3, ip
	add	r5, r2, r5, lsl #2
	vld1.32	{d2[0]}, [r4, :32]
	asr	r4, r3, #16
	add	r3, r3, ip, lsl #1
	add	r4, r2, r4, lsl #2
	vld1.32	{d3[0]}, [r5, :32]
	asr	r5, r3, #16
	add	r3, r3, ip
	add	r5, r2, r5, lsl #2
	vld1.32	{d2[1]}, [r4, :32]
	vld1.32	{d3[1]}, [r5, :32]
	vld1.16	{d5}, [r6]!
17:	tst	r0, #2
	beq	18f
	asr	r4, r3, #16
	add	r3, r3, ip
	add	r4, r2, r4, lsl #2
	asr	r5, r3, #16
	add	r3, r3, ip
	add	r5, r2, r5, lsl #2
	vld1.32	{d1[0]}, [r4, :32]
	vld1.32	{d1[1]}, [r5, :32]
	vld1.16	{d4[2]}, [r6]!
	vld1.16	{d4[3]}, [r6]!
18:	tst	r0, #1
	beq	19f
	asr	r4, r3, #16
	add	r3, r3, ip
	add	r4, r2, r4, lsl #2
	vld1.32	{d0[1]}, [r4, :32]
	vld1.16	{d4[1]}, [r6]!
19:	vuzp.8	d0, d1
	vuzp.8	d2, d3
	vuzp.8	d1, d3
	vuzp.8	d0, d2
	vshrn.i16	d6, q2, #8
	vshrn.i16	d7, q2, #3
	vsli.16	q2, q2, #5
	vsri.8	d6, d6, #5
	vmvn	d3, d3
	vsri.8	d7, d7, #6
	vshrn.i16	d30, q2, #2
	vmull.u8	q10, d3, d6
	vmull.u8	q11, d3, d7
	vmull.u8	q12, d3, d30
	vrshr.u16	q13, q10, #8
	vrshr.u16	q3, q11, #8
	vrshr.u16	q15, q12, #8
	vraddhn.i16	d20, q10, q13
	vraddhn.i16	d23, q11, q3
	vraddhn.i16	d22, q12, q15
	vqadd.u8	d16, d2, d20
	vqadd.u8	q9, q0, q11
	vshll.i8	q14, d16, #8
	vshll.i8	q8, d19, #8
	vshll.i8	q9, d18, #8
	vsri.16	q14, q8, #5
	vsri.16	q14, q9, #11
	tst	r0, #4
	beq	20f
	vst1.16	{d29}, [r1]!
20:	tst	r0, #2
	beq	21f
	vst1.16	{d28[2]}, [r1]!
	vst1.16	{d28[3]}, [r1]!
21:	tst	r0, #1
	beq	16f
	vst1.16	{d28[1]}, [r1]!
16:	pop	{r4, r5, r6, pc}

.global _pixman_composite_src_0888_0565_rev_asm_neon
_pixman_composite_src_0888_0565_rev_asm_neon:
	push	{r4, r5, r6, r7, r8, r9, sl, fp, ip, lr}
	ldr	r4, [sp, #40]
	ldr	r5, [sp, #44]
	mov	r6, r2
	sub	r5, r5, r0
	sub	r5, r5, r0, lsl #1
	subs	r1, r1, #1
	mov	sl, r0
	blt	0f
	cmp	r0, #16
	blt	1f
16:	tst	r6, #15
	beq	2f
	tst	r6, #2
	beq	3f
	vld3.8	{d0[1],d1[1],d2[1]}, [r4]!
	add	r6, r6, #2
	sub	r0, r0, #1
3:	tst	r6, #4
	beq	4f
	vld3.8	{d0[2],d1[2],d2[2]}, [r4]!
	vld3.8	{d0[3],d1[3],d2[3]}, [r4]!
	add	r6, r6, #4
	sub	r0, r0, #2
4:	tst	r6, #8
	beq	5f
	vld3.8	{d0[4],d1[4],d2[4]}, [r4]!
	vld3.8	{d0[5],d1[5],d2[5]}, [r4]!
	vld3.8	{d0[6],d1[6],d2[6]}, [r4]!
	vld3.8	{d0[7],d1[7],d2[7]}, [r4]!
	add	r6, r6, #8
	sub	r0, r0, #4
5:	vshll.i8	q8, d1, #8
	vshll.i8	q9, d2, #8
	pld	[r4, #192]
	vshll.i8	q14, d0, #8
	vsri.16	q14, q8, #5
	vsri.16	q14, q9, #11
	tst	r2, #2
	beq	6f
	vst1.16	{d28[1]}, [r2]!
6:	tst	r2, #4
	beq	7f
	vst1.16	{d28[2]}, [r2]!
	vst1.16	{d28[3]}, [r2]!
7:	tst	r2, #8
	beq	2f
	vst1.16	{d29}, [r2, :64]!
2:	vld3.8	{d0-d2}, [r4]!
	vshll.i8	q8, d1, #8
	vshll.i8	q9, d2, #8
	pld	[r4, #192]
	subs	r0, r0, #16
	blt	8f
9:	vshll.i8	q14, d0, #8
	vld3.8	{d0-d2}, [r4]!
	vsri.16	q14, q8, #5
	vsri.16	q14, q9, #11
	vshll.i8	q8, d1, #8
	vst1.16	{d28-d29}, [r2, :128]!
	vshll.i8	q9, d2, #8
	pld	[r4, #192]
	subs	r0, r0, #8
	bge	9b
8:	vshll.i8	q14, d0, #8
	vsri.16	q14, q8, #5
	vsri.16	q14, q9, #11
	vst1.16	{d28-d29}, [r2, :128]!
	tst	r0, #7
	beq	10f
	tst	r0, #4
	beq	11f
	vld3.8	{d0[4],d1[4],d2[4]}, [r4]!
	vld3.8	{d0[5],d1[5],d2[5]}, [r4]!
	vld3.8	{d0[6],d1[6],d2[6]}, [r4]!
	vld3.8	{d0[7],d1[7],d2[7]}, [r4]!
11:	tst	r0, #2
	beq	12f
	vld3.8	{d0[2],d1[2],d2[2]}, [r4]!
	vld3.8	{d0[3],d1[3],d2[3]}, [r4]!
12:	tst	r0, #1
	beq	13f
	vld3.8	{d0[1],d1[1],d2[1]}, [r4]!
13:	vshll.i8	q8, d1, #8
	vshll.i8	q9, d2, #8
	pld	[r4, #192]
	vshll.i8	q14, d0, #8
	vsri.16	q14, q8, #5
	vsri.16	q14, q9, #11
	tst	r0, #4
	beq	14f
	vst1.16	{d29}, [r2, :64]!
14:	tst	r0, #2
	beq	15f
	vst1.16	{d28[2]}, [r2]!
	vst1.16	{d28[3]}, [r2]!
15:	tst	r0, #1
	beq	10f
	vst1.16	{d28[1]}, [r2]!
10:	mov	r0, sl
	add	r2, r2, r3, lsl #1
	add	r4, r4, r5
	sub	r2, r2, r0, lsl #1
	subs	r1, r1, #1
	mov	r6, r2
	bge	16b
	pop	{r4, r5, r6, r7, r8, r9, sl, fp, ip, pc}
1:	tst	r0, #8
	beq	17f
	vld3.8	{d0-d2}, [r4]!
	vshll.i8	q8, d1, #8
	vshll.i8	q9, d2, #8
	vshll.i8	q14, d0, #8
	vsri.16	q14, q8, #5
	vsri.16	q14, q9, #11
	vst1.16	{d28-d29}, [r2]!
17:	tst	r0, #7
	beq	18f
	tst	r0, #4
	beq	19f
	vld3.8	{d0[4],d1[4],d2[4]}, [r4]!
	vld3.8	{d0[5],d1[5],d2[5]}, [r4]!
	vld3.8	{d0[6],d1[6],d2[6]}, [r4]!
	vld3.8	{d0[7],d1[7],d2[7]}, [r4]!
19:	tst	r0, #2
	beq	20f
	vld3.8	{d0[2],d1[2],d2[2]}, [r4]!
	vld3.8	{d0[3],d1[3],d2[3]}, [r4]!
20:	tst	r0, #1
	beq	21f
	vld3.8	{d0[1],d1[1],d2[1]}, [r4]!
21:	vshll.i8	q8, d1, #8
	vshll.i8	q9, d2, #8
	vshll.i8	q14, d0, #8
	vsri.16	q14, q8, #5
	vsri.16	q14, q9, #11
	tst	r0, #4
	beq	22f
	vst1.16	{d29}, [r2]!
22:	tst	r0, #2
	beq	23f
	vst1.16	{d28[2]}, [r2]!
	vst1.16	{d28[3]}, [r2]!
23:	tst	r0, #1
	beq	18f
	vst1.16	{d28[1]}, [r2]!
18:	mov	r0, sl
	add	r2, r2, r3, lsl #1
	add	r4, r4, r5
	sub	r2, r2, r0, lsl #1
	subs	r1, r1, #1
	mov	r6, r2
	bge	1b
0:	pop	{r4, r5, r6, r7, r8, r9, sl, fp, ip, pc}

.global _pixman_composite_add_8888_n_8888_asm_neon
_pixman_composite_add_8888_n_8888_asm_neon:
	push	{r4, r5, r6, r7, r8, r9, sl, fp, ip, lr}
	ldr	r4, [sp, #40]
	mov	sl, #0
	ldr	r5, [sp, #44]
	mov	r6, r2
	mov	fp, r4
	mov	ip, r6
	mov	lr, r7
	lsl	r9, r1, #4
	sub	r9, r9, #11
	add	r8, sp, #48
	vld1.32	{d27[0]}, [r8]
	vdup.8	d27, d27[3]
	subs	r1, r1, #1
	mov	r7, r0
	blt	0f
	cmp	r0, #16
	blt	1f
15:	tst	r6, #15
	beq	2f
	tst	r6, #4
	beq	3f
	vld1.32	{d0[1]}, [r4]!
	vld1.32	{d4[1]}, [r6]!
	add	sl, sl, #1
	sub	r0, r0, #1
3:	tst	r6, #8
	beq	4f
	vld1.32	{d1}, [r4]!
	vld1.32	{d5}, [r6, :64]!
	add	sl, sl, #2
	sub	r0, r0, #2
4:	vld1.32	{d2-d3}, [r4]!
	vld1.32	{d6-d7}, [r6, :128]!
	add	sl, sl, #4
	sub	r0, r0, #4
	vuzp.8	d0, d1
	vuzp.8	d2, d3
	vuzp.8	d1, d3
	vuzp.8	d0, d2
	vuzp.8	d4, d5
	vuzp.8	d6, d7
	vuzp.8	d5, d7
	vuzp.8	d4, d6
	vmull.u8	q8, d27, d0
	vmull.u8	q9, d27, d1
	vmull.u8	q10, d27, d2
	vmull.u8	q11, d27, d3
	vrsra.u16	q8, q8, #8
	vrsra.u16	q9, q9, #8
	vrsra.u16	q10, q10, #8
	vrsra.u16	q11, q11, #8
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r7
	pld	[fp, sl, lsl #2]
	pld	[ip, sl, lsl #2]
	subge	sl, sl, r7
	subsge	r9, r9, #16
	ldrbge	r8, [fp, r5, lsl #2]!
	ldrbge	r8, [ip, r3, lsl #2]!
	vrshrn.i16	d28, q8, #8
	vrshrn.i16	d29, q9, #8
	vrshrn.i16	d30, q10, #8
	vrshrn.i16	d31, q11, #8
	vqadd.u8	q14, q2, q14
	vqadd.u8	q15, q3, q15
	vzip.8	d28, d30
	vzip.8	d29, d31
	vzip.8	d30, d31
	vzip.8	d28, d29
	tst	r2, #4
	beq	5f
	vst1.32	{d28[1]}, [r2]!
5:	tst	r2, #8
	beq	6f
	vst1.32	{d29}, [r2, :64]!
6:	vst1.32	{d30-d31}, [r2, :128]!
2:	vld4.8	{d4-d7}, [r6, :128]!
	vld4.8	{d0-d3}, [r4]!
	add	sl, sl, #8
	vmull.u8	q8, d27, d0
	vmull.u8	q9, d27, d1
	vmull.u8	q10, d27, d2
	vmull.u8	q11, d27, d3
	vrsra.u16	q8, q8, #8
	vrsra.u16	q9, q9, #8
	vrsra.u16	q10, q10, #8
	vrsra.u16	q11, q11, #8
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r7
	pld	[fp, sl, lsl #2]
	pld	[ip, sl, lsl #2]
	subge	sl, sl, r7
	subsge	r9, r9, #16
	ldrbge	r8, [fp, r5, lsl #2]!
	ldrbge	r8, [ip, r3, lsl #2]!
	subs	r0, r0, #16
	blt	7f
8:	vld4.8	{d0-d3}, [r4]!
	vrshrn.i16	d28, q8, #8
	vrshrn.i16	d29, q9, #8
	vmull.u8	q8, d27, d0
	vrshrn.i16	d30, q10, #8
	vmull.u8	q9, d27, d1
	vrshrn.i16	d31, q11, #8
	vmull.u8	q10, d27, d2
	vqadd.u8	q14, q2, q14
	vmull.u8	q11, d27, d3
	vqadd.u8	q15, q3, q15
	vrsra.u16	q8, q8, #8
	vld4.8	{d4-d7}, [r6, :128]!
	vrsra.u16	q9, q9, #8
	vst4.8	{d28-d31}, [r2, :128]!
	vrsra.u16	q10, q10, #8
	add	sl, sl, #8
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r7
	pld	[fp, sl, lsl #2]
	pld	[ip, sl, lsl #2]
	subge	sl, sl, r7
	subsge	r9, r9, #16
	ldrbge	r8, [fp, r5, lsl #2]!
	ldrbge	r8, [ip, r3, lsl #2]!
	vrsra.u16	q11, q11, #8
	subs	r0, r0, #8
	bge	8b
7:	vrshrn.i16	d28, q8, #8
	vrshrn.i16	d29, q9, #8
	vrshrn.i16	d30, q10, #8
	vrshrn.i16	d31, q11, #8
	vqadd.u8	q14, q2, q14
	vqadd.u8	q15, q3, q15
	vst4.8	{d28-d31}, [r2, :128]!
	tst	r0, #7
	beq	9f
	tst	r0, #4
	beq	10f
	vld1.32	{d2-d3}, [r4]!
	vld1.32	{d6-d7}, [r6, :128]!
	add	sl, sl, #4
10:	tst	r0, #2
	beq	11f
	vld1.32	{d1}, [r4]!
	vld1.32	{d5}, [r6, :64]!
	add	sl, sl, #2
11:	tst	r0, #1
	beq	12f
	vld1.32	{d0[1]}, [r4]!
	vld1.32	{d4[1]}, [r6]!
	add	sl, sl, #1
12:	vuzp.8	d0, d1
	vuzp.8	d2, d3
	vuzp.8	d1, d3
	vuzp.8	d0, d2
	vuzp.8	d4, d5
	vuzp.8	d6, d7
	vuzp.8	d5, d7
	vuzp.8	d4, d6
	vmull.u8	q8, d27, d0
	vmull.u8	q9, d27, d1
	vmull.u8	q10, d27, d2
	vmull.u8	q11, d27, d3
	vrsra.u16	q8, q8, #8
	vrsra.u16	q9, q9, #8
	vrsra.u16	q10, q10, #8
	vrsra.u16	q11, q11, #8
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r7
	pld	[fp, sl, lsl #2]
	pld	[ip, sl, lsl #2]
	subge	sl, sl, r7
	subsge	r9, r9, #16
	ldrbge	r8, [fp, r5, lsl #2]!
	ldrbge	r8, [ip, r3, lsl #2]!
	vrshrn.i16	d28, q8, #8
	vrshrn.i16	d29, q9, #8
	vrshrn.i16	d30, q10, #8
	vrshrn.i16	d31, q11, #8
	vqadd.u8	q14, q2, q14
	vqadd.u8	q15, q3, q15
	vzip.8	d28, d30
	vzip.8	d29, d31
	vzip.8	d30, d31
	vzip.8	d28, d29
	tst	r0, #4
	beq	13f
	vst1.32	{d30-d31}, [r2, :128]!
13:	tst	r0, #2
	beq	14f
	vst1.32	{d29}, [r2, :64]!
14:	tst	r0, #1
	beq	9f
	vst1.32	{d28[1]}, [r2]!
9:	mov	r0, r7
	add	r2, r2, r3, lsl #2
	add	r4, r4, r5, lsl #2
	sub	r2, r2, r0, lsl #2
	sub	r4, r4, r0, lsl #2
	subs	r1, r1, #1
	mov	r6, r2
	bge	15b
	pop	{r4, r5, r6, r7, r8, r9, sl, fp, ip, pc}
1:	tst	r0, #8
	beq	16f
	vld4.8	{d4-d7}, [r6]!
	vld4.8	{d0-d3}, [r4]!
	vmull.u8	q8, d27, d0
	vmull.u8	q9, d27, d1
	vmull.u8	q10, d27, d2
	vmull.u8	q11, d27, d3
	vrsra.u16	q8, q8, #8
	vrsra.u16	q9, q9, #8
	vrsra.u16	q10, q10, #8
	vrsra.u16	q11, q11, #8
	vrshrn.i16	d28, q8, #8
	vrshrn.i16	d29, q9, #8
	vrshrn.i16	d30, q10, #8
	vrshrn.i16	d31, q11, #8
	vqadd.u8	q14, q2, q14
	vqadd.u8	q15, q3, q15
	vst4.8	{d28-d31}, [r2]!
16:	tst	r0, #7
	beq	17f
	tst	r0, #4
	beq	18f
	vld1.32	{d2-d3}, [r4]!
	vld1.32	{d6-d7}, [r6]!
18:	tst	r0, #2
	beq	19f
	vld1.32	{d1}, [r4]!
	vld1.32	{d5}, [r6]!
19:	tst	r0, #1
	beq	20f
	vld1.32	{d0[1]}, [r4]!
	vld1.32	{d4[1]}, [r6]!
20:	vuzp.8	d0, d1
	vuzp.8	d2, d3
	vuzp.8	d1, d3
	vuzp.8	d0, d2
	vuzp.8	d4, d5
	vuzp.8	d6, d7
	vuzp.8	d5, d7
	vuzp.8	d4, d6
	vmull.u8	q8, d27, d0
	vmull.u8	q9, d27, d1
	vmull.u8	q10, d27, d2
	vmull.u8	q11, d27, d3
	vrsra.u16	q8, q8, #8
	vrsra.u16	q9, q9, #8
	vrsra.u16	q10, q10, #8
	vrsra.u16	q11, q11, #8
	vrshrn.i16	d28, q8, #8
	vrshrn.i16	d29, q9, #8
	vrshrn.i16	d30, q10, #8
	vrshrn.i16	d31, q11, #8
	vqadd.u8	q14, q2, q14
	vqadd.u8	q15, q3, q15
	vzip.8	d28, d30
	vzip.8	d29, d31
	vzip.8	d30, d31
	vzip.8	d28, d29
	tst	r0, #4
	beq	21f
	vst1.32	{d30-d31}, [r2]!
21:	tst	r0, #2
	beq	22f
	vst1.32	{d29}, [r2]!
22:	tst	r0, #1
	beq	17f
	vst1.32	{d28[1]}, [r2]!
17:	mov	r0, r7
	add	r2, r2, r3, lsl #2
	add	r4, r4, r5, lsl #2
	sub	r2, r2, r0, lsl #2
	sub	r4, r4, r0, lsl #2
	subs	r1, r1, #1
	mov	r6, r2
	bge	1b
0:	pop	{r4, r5, r6, r7, r8, r9, sl, fp, ip, pc}

.global _pixman_composite_scanline_out_reverse_mask_asm_neon
_pixman_composite_scanline_out_reverse_mask_asm_neon:
	vstmdb	sp!, {d8-d15}
	mov	ip, r1
	cmp	r0, #8
	blt	0f
	tst	ip, #15
	beq	1f
	tst	ip, #4
	beq	2f
	vld1.32	{d0[1]}, [r2]!
	vld1.32	{d12[1]}, [r3]!
	vld1.32	{d4[1]}, [ip]!
	sub	r0, r0, #1
2:	tst	ip, #8
	beq	3f
	vld1.32	{d1}, [r2]!
	vld1.32	{d13}, [r3]!
	vld1.32	{d5}, [ip, :64]!
	sub	r0, r0, #2
3:	vld1.32	{d2-d3}, [r2]!
	vld1.32	{d14-d15}, [r3]!
	vld1.32	{d6-d7}, [ip, :128]!
	sub	r0, r0, #4
	vuzp.8	d0, d1
	vuzp.8	d2, d3
	vuzp.8	d1, d3
	vuzp.8	d0, d2
	vuzp.8	d12, d13
	vuzp.8	d14, d15
	vuzp.8	d13, d15
	vuzp.8	d12, d14
	vuzp.8	d4, d5
	vuzp.8	d6, d7
	vuzp.8	d5, d7
	vuzp.8	d4, d6
	vmull.u8	q8, d15, d3
	vmull.u8	q6, d15, d2
	vmull.u8	q5, d15, d1
	vmull.u8	q4, d15, d0
	vrshr.u16	q13, q8, #8
	vrshr.u16	q12, q6, #8
	vrshr.u16	q11, q5, #8
	vrshr.u16	q10, q4, #8
	vraddhn.i16	d3, q8, q13
	vraddhn.i16	d2, q6, q12
	vraddhn.i16	d1, q5, q11
	vraddhn.i16	d0, q4, q10
	vmvn	d24, d3
	vmull.u8	q8, d24, d4
	vmull.u8	q9, d24, d5
	vmull.u8	q10, d24, d6
	vmull.u8	q11, d24, d7
	vrshr.u16	q14, q8, #8
	vrshr.u16	q15, q9, #8
	vrshr.u16	q12, q10, #8
	vrshr.u16	q13, q11, #8
	vraddhn.i16	d28, q14, q8
	vraddhn.i16	d29, q15, q9
	vraddhn.i16	d30, q12, q10
	vraddhn.i16	d31, q13, q11
	vzip.8	d28, d30
	vzip.8	d29, d31
	vzip.8	d30, d31
	vzip.8	d28, d29
	tst	r1, #4
	beq	4f
	vst1.32	{d28[1]}, [r1]!
4:	tst	r1, #8
	beq	5f
	vst1.32	{d29}, [r1, :64]!
5:	vst1.32	{d30-d31}, [r1, :128]!
1:	subs	r0, r0, #8
	blt	6f
	vld4.8	{d4-d7}, [ip, :128]!
	vld4.8	{d0-d3}, [r2]!
	vld4.8	{d12-d15}, [r3]!
	vmull.u8	q8, d15, d3
	vmull.u8	q6, d15, d2
	vmull.u8	q5, d15, d1
	vmull.u8	q4, d15, d0
	vrshr.u16	q13, q8, #8
	vrshr.u16	q12, q6, #8
	vrshr.u16	q11, q5, #8
	vrshr.u16	q10, q4, #8
	vraddhn.i16	d3, q8, q13
	vraddhn.i16	d2, q6, q12
	vraddhn.i16	d1, q5, q11
	vraddhn.i16	d0, q4, q10
	vmvn	d24, d3
	vmull.u8	q8, d24, d4
	vmull.u8	q9, d24, d5
	vmull.u8	q10, d24, d6
	vmull.u8	q11, d24, d7
	subs	r0, r0, #8
	blt	7f
8:	vld4.8	{d4-d7}, [ip, :128]!
	vrshr.u16	q14, q8, #8
	vrshr.u16	q15, q9, #8
	vrshr.u16	q12, q10, #8
	vrshr.u16	q13, q11, #8
	vraddhn.i16	d28, q14, q8
	vraddhn.i16	d29, q15, q9
	vraddhn.i16	d30, q12, q10
	vraddhn.i16	d31, q13, q11
	vld4.8	{d0-d3}, [r2]!
	vld4.8	{d12-d15}, [r3]!
	vmull.u8	q8, d15, d3
	vmull.u8	q6, d15, d2
	vmull.u8	q5, d15, d1
	vmull.u8	q4, d15, d0
	vrshr.u16	q13, q8, #8
	vrshr.u16	q12, q6, #8
	vrshr.u16	q11, q5, #8
	vrshr.u16	q10, q4, #8
	vraddhn.i16	d3, q8, q13
	vraddhn.i16	d2, q6, q12
	vraddhn.i16	d1, q5, q11
	vraddhn.i16	d0, q4, q10
	vmvn	d24, d3
	vmull.u8	q8, d24, d4
	vmull.u8	q9, d24, d5
	vmull.u8	q10, d24, d6
	vmull.u8	q11, d24, d7
	vst4.8	{d28-d31}, [r1, :128]!
	subs	r0, r0, #8
	bge	8b
7:	vrshr.u16	q14, q8, #8
	vrshr.u16	q15, q9, #8
	vrshr.u16	q12, q10, #8
	vrshr.u16	q13, q11, #8
	vraddhn.i16	d28, q14, q8
	vraddhn.i16	d29, q15, q9
	vraddhn.i16	d30, q12, q10
	vraddhn.i16	d31, q13, q11
	vst4.8	{d28-d31}, [r1, :128]!
6:	tst	r0, #7
	beq	9f
	tst	r0, #4
	beq	10f
	vld1.32	{d2-d3}, [r2]!
	vld1.32	{d14-d15}, [r3]!
	vld1.32	{d6-d7}, [ip, :128]!
10:	tst	r0, #2
	beq	11f
	vld1.32	{d1}, [r2]!
	vld1.32	{d13}, [r3]!
	vld1.32	{d5}, [ip, :64]!
11:	tst	r0, #1
	beq	12f
	vld1.32	{d0[1]}, [r2]!
	vld1.32	{d12[1]}, [r3]!
	vld1.32	{d4[1]}, [ip]!
12:	vuzp.8	d0, d1
	vuzp.8	d2, d3
	vuzp.8	d1, d3
	vuzp.8	d0, d2
	vuzp.8	d12, d13
	vuzp.8	d14, d15
	vuzp.8	d13, d15
	vuzp.8	d12, d14
	vuzp.8	d4, d5
	vuzp.8	d6, d7
	vuzp.8	d5, d7
	vuzp.8	d4, d6
	vmull.u8	q8, d15, d3
	vmull.u8	q6, d15, d2
	vmull.u8	q5, d15, d1
	vmull.u8	q4, d15, d0
	vrshr.u16	q13, q8, #8
	vrshr.u16	q12, q6, #8
	vrshr.u16	q11, q5, #8
	vrshr.u16	q10, q4, #8
	vraddhn.i16	d3, q8, q13
	vraddhn.i16	d2, q6, q12
	vraddhn.i16	d1, q5, q11
	vraddhn.i16	d0, q4, q10
	vmvn	d24, d3
	vmull.u8	q8, d24, d4
	vmull.u8	q9, d24, d5
	vmull.u8	q10, d24, d6
	vmull.u8	q11, d24, d7
	vrshr.u16	q14, q8, #8
	vrshr.u16	q15, q9, #8
	vrshr.u16	q12, q10, #8
	vrshr.u16	q13, q11, #8
	vraddhn.i16	d28, q14, q8
	vraddhn.i16	d29, q15, q9
	vraddhn.i16	d30, q12, q10
	vraddhn.i16	d31, q13, q11
	vzip.8	d28, d30
	vzip.8	d29, d31
	vzip.8	d30, d31
	vzip.8	d28, d29
	tst	r0, #4
	beq	13f
	vst1.32	{d30-d31}, [r1, :128]!
13:	tst	r0, #2
	beq	14f
	vst1.32	{d29}, [r1, :64]!
14:	tst	r0, #1
	beq	9f
	vst1.32	{d28[1]}, [r1]!
9:	vldmia	sp!, {d8-d15}
	bx	lr
0:	tst	r0, #7
	beq	15f
	tst	r0, #4
	beq	16f
	vld1.32	{d2-d3}, [r2]!
	vld1.32	{d14-d15}, [r3]!
	vld1.32	{d6-d7}, [ip]!
16:	tst	r0, #2
	beq	17f
	vld1.32	{d1}, [r2]!
	vld1.32	{d13}, [r3]!
	vld1.32	{d5}, [ip]!
17:	tst	r0, #1
	beq	18f
	vld1.32	{d0[1]}, [r2]!
	vld1.32	{d12[1]}, [r3]!
	vld1.32	{d4[1]}, [ip]!
18:	vuzp.8	d0, d1
	vuzp.8	d2, d3
	vuzp.8	d1, d3
	vuzp.8	d0, d2
	vuzp.8	d12, d13
	vuzp.8	d14, d15
	vuzp.8	d13, d15
	vuzp.8	d12, d14
	vuzp.8	d4, d5
	vuzp.8	d6, d7
	vuzp.8	d5, d7
	vuzp.8	d4, d6
	vmull.u8	q8, d15, d3
	vmull.u8	q6, d15, d2
	vmull.u8	q5, d15, d1
	vmull.u8	q4, d15, d0
	vrshr.u16	q13, q8, #8
	vrshr.u16	q12, q6, #8
	vrshr.u16	q11, q5, #8
	vrshr.u16	q10, q4, #8
	vraddhn.i16	d3, q8, q13
	vraddhn.i16	d2, q6, q12
	vraddhn.i16	d1, q5, q11
	vraddhn.i16	d0, q4, q10
	vmvn	d24, d3
	vmull.u8	q8, d24, d4
	vmull.u8	q9, d24, d5
	vmull.u8	q10, d24, d6
	vmull.u8	q11, d24, d7
	vrshr.u16	q14, q8, #8
	vrshr.u16	q15, q9, #8
	vrshr.u16	q12, q10, #8
	vrshr.u16	q13, q11, #8
	vraddhn.i16	d28, q14, q8
	vraddhn.i16	d29, q15, q9
	vraddhn.i16	d30, q12, q10
	vraddhn.i16	d31, q13, q11
	vzip.8	d28, d30
	vzip.8	d29, d31
	vzip.8	d30, d31
	vzip.8	d28, d29
	tst	r0, #4
	beq	19f
	vst1.32	{d30-d31}, [r1]!
19:	tst	r0, #2
	beq	20f
	vst1.32	{d29}, [r1]!
20:	tst	r0, #1
	beq	15f
	vst1.32	{d28[1]}, [r1]!
15:	vldmia	sp!, {d8-d15}
	bx	lr

.global _pixman_composite_out_reverse_8_0565_asm_neon
_pixman_composite_out_reverse_8_0565_asm_neon:
	push	{r4, r5, r6, r7, r8, r9, sl, fp, ip, lr}
	ldr	r4, [sp, #40]
	mov	sl, #0
	ldr	r5, [sp, #44]
	mov	r6, r2
	mov	fp, r4
	mov	ip, r6
	mov	lr, r7
	lsl	r9, r1, #4
	sub	r9, r9, #11
	vstmdb	sp!, {d8-d15}
	subs	r1, r1, #1
	mov	r7, r0
	blt	0f
	cmp	r0, #16
	blt	1f
16:	tst	r6, #15
	beq	2f
	tst	r6, #2
	beq	3f
	vld1.8	{d15[1]}, [r4]!
	vld1.16	{d10[1]}, [r6]!
	add	sl, sl, #1
	sub	r0, r0, #1
3:	tst	r6, #4
	beq	4f
	vld1.8	{d15[2]}, [r4]!
	vld1.8	{d15[3]}, [r4]!
	vld1.16	{d10[2]}, [r6]!
	vld1.16	{d10[3]}, [r6]!
	add	sl, sl, #2
	sub	r0, r0, #2
4:	tst	r6, #8
	beq	5f
	vld1.8	{d15[4]}, [r4]!
	vld1.8	{d15[5]}, [r4]!
	vld1.8	{d15[6]}, [r4]!
	vld1.8	{d15[7]}, [r4]!
	vld1.16	{d11}, [r6, :64]!
	add	sl, sl, #4
	sub	r0, r0, #4
5:	vshrn.i16	d6, q5, #8
	vshrn.i16	d5, q5, #3
	vsli.16	q5, q5, #5
	vsri.8	d6, d6, #5
	vsri.8	d5, d5, #6
	vshrn.i16	d4, q5, #2
	vmvn	d24, d15
	vmull.u8	q8, d24, d4
	vmull.u8	q9, d24, d5
	vmull.u8	q10, d24, d6
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r7
	pld	[fp, sl]
	pld	[ip, sl, lsl #1]
	subge	sl, sl, r7
	subsge	r9, r9, #16
	ldrbge	r8, [fp, r5]!
	ldrbge	r8, [ip, r3, lsl #1]!
	vrshr.u16	q14, q8, #8
	vrshr.u16	q15, q9, #8
	vrshr.u16	q12, q10, #8
	vraddhn.i16	d0, q14, q8
	vraddhn.i16	d1, q15, q9
	vraddhn.i16	d2, q12, q10
	vshll.i8	q15, d1, #8
	vshll.i8	q14, d2, #8
	vshll.i8	q3, d0, #8
	vsri.16	q14, q15, #5
	vsri.16	q14, q3, #11
	tst	r2, #2
	beq	6f
	vst1.16	{d28[1]}, [r2]!
6:	tst	r2, #4
	beq	7f
	vst1.16	{d28[2]}, [r2]!
	vst1.16	{d28[3]}, [r2]!
7:	tst	r2, #8
	beq	2f
	vst1.16	{d29}, [r2, :64]!
2:	vld1.16	{d10-d11}, [r6, :128]!
	vld1.8	{d15}, [r4]!
	add	sl, sl, #8
	vshrn.i16	d6, q5, #8
	vshrn.i16	d5, q5, #3
	vsli.16	q5, q5, #5
	vsri.8	d6, d6, #5
	vsri.8	d5, d5, #6
	vshrn.i16	d4, q5, #2
	vmvn	d24, d15
	vmull.u8	q8, d24, d4
	vmull.u8	q9, d24, d5
	vmull.u8	q10, d24, d6
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r7
	pld	[fp, sl]
	pld	[ip, sl, lsl #1]
	subge	sl, sl, r7
	subsge	r9, r9, #16
	ldrbge	r8, [fp, r5]!
	ldrbge	r8, [ip, r3, lsl #1]!
	subs	r0, r0, #16
	blt	8f
9:	vld1.8	{d15}, [r4]!
	vrshr.u16	q14, q8, #8
	vrshr.u16	q15, q9, #8
	vrshr.u16	q12, q10, #8
	vraddhn.i16	d0, q14, q8
	vraddhn.i16	d1, q15, q9
	vraddhn.i16	d2, q12, q10
	vshll.i8	q15, d1, #8
	vshll.i8	q14, d2, #8
	vshll.i8	q3, d0, #8
	vsri.16	q14, q15, #5
	vsri.16	q14, q3, #11
	vld1.16	{d10-d11}, [r6, :128]!
	add	sl, sl, #8
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r7
	pld	[fp, sl]
	pld	[ip, sl, lsl #1]
	subge	sl, sl, r7
	subsge	r9, r9, #16
	ldrbge	r8, [fp, r5]!
	ldrbge	r8, [ip, r3, lsl #1]!
	vshrn.i16	d6, q5, #8
	vshrn.i16	d5, q5, #3
	vsli.16	q5, q5, #5
	vsri.8	d6, d6, #5
	vsri.8	d5, d5, #6
	vshrn.i16	d4, q5, #2
	vmvn	d24, d15
	vmull.u8	q8, d24, d4
	vmull.u8	q9, d24, d5
	vmull.u8	q10, d24, d6
	vst1.16	{d28-d29}, [r2, :128]!
	subs	r0, r0, #8
	bge	9b
8:	vrshr.u16	q14, q8, #8
	vrshr.u16	q15, q9, #8
	vrshr.u16	q12, q10, #8
	vraddhn.i16	d0, q14, q8
	vraddhn.i16	d1, q15, q9
	vraddhn.i16	d2, q12, q10
	vshll.i8	q15, d1, #8
	vshll.i8	q14, d2, #8
	vshll.i8	q3, d0, #8
	vsri.16	q14, q15, #5
	vsri.16	q14, q3, #11
	vst1.16	{d28-d29}, [r2, :128]!
	tst	r0, #7
	beq	10f
	tst	r0, #4
	beq	11f
	vld1.8	{d15[4]}, [r4]!
	vld1.8	{d15[5]}, [r4]!
	vld1.8	{d15[6]}, [r4]!
	vld1.8	{d15[7]}, [r4]!
	vld1.16	{d11}, [r6, :64]!
	add	sl, sl, #4
11:	tst	r0, #2
	beq	12f
	vld1.8	{d15[2]}, [r4]!
	vld1.8	{d15[3]}, [r4]!
	vld1.16	{d10[2]}, [r6]!
	vld1.16	{d10[3]}, [r6]!
	add	sl, sl, #2
12:	tst	r0, #1
	beq	13f
	vld1.8	{d15[1]}, [r4]!
	vld1.16	{d10[1]}, [r6]!
	add	sl, sl, #1
13:	vshrn.i16	d6, q5, #8
	vshrn.i16	d5, q5, #3
	vsli.16	q5, q5, #5
	vsri.8	d6, d6, #5
	vsri.8	d5, d5, #6
	vshrn.i16	d4, q5, #2
	vmvn	d24, d15
	vmull.u8	q8, d24, d4
	vmull.u8	q9, d24, d5
	vmull.u8	q10, d24, d6
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r7
	pld	[fp, sl]
	pld	[ip, sl, lsl #1]
	subge	sl, sl, r7
	subsge	r9, r9, #16
	ldrbge	r8, [fp, r5]!
	ldrbge	r8, [ip, r3, lsl #1]!
	vrshr.u16	q14, q8, #8
	vrshr.u16	q15, q9, #8
	vrshr.u16	q12, q10, #8
	vraddhn.i16	d0, q14, q8
	vraddhn.i16	d1, q15, q9
	vraddhn.i16	d2, q12, q10
	vshll.i8	q15, d1, #8
	vshll.i8	q14, d2, #8
	vshll.i8	q3, d0, #8
	vsri.16	q14, q15, #5
	vsri.16	q14, q3, #11
	tst	r0, #4
	beq	14f
	vst1.16	{d29}, [r2, :64]!
14:	tst	r0, #2
	beq	15f
	vst1.16	{d28[2]}, [r2]!
	vst1.16	{d28[3]}, [r2]!
15:	tst	r0, #1
	beq	10f
	vst1.16	{d28[1]}, [r2]!
10:	mov	r0, r7
	add	r2, r2, r3, lsl #1
	add	r4, r4, r5
	sub	r2, r2, r0, lsl #1
	sub	r4, r4, r0
	subs	r1, r1, #1
	mov	r6, r2
	bge	16b
	vldmia	sp!, {d8-d15}
	pop	{r4, r5, r6, r7, r8, r9, sl, fp, ip, pc}
1:	tst	r0, #8
	beq	17f
	vld1.16	{d10-d11}, [r6]!
	vld1.8	{d15}, [r4]!
	vshrn.i16	d6, q5, #8
	vshrn.i16	d5, q5, #3
	vsli.16	q5, q5, #5
	vsri.8	d6, d6, #5
	vsri.8	d5, d5, #6
	vshrn.i16	d4, q5, #2
	vmvn	d24, d15
	vmull.u8	q8, d24, d4
	vmull.u8	q9, d24, d5
	vmull.u8	q10, d24, d6
	vrshr.u16	q14, q8, #8
	vrshr.u16	q15, q9, #8
	vrshr.u16	q12, q10, #8
	vraddhn.i16	d0, q14, q8
	vraddhn.i16	d1, q15, q9
	vraddhn.i16	d2, q12, q10
	vshll.i8	q15, d1, #8
	vshll.i8	q14, d2, #8
	vshll.i8	q3, d0, #8
	vsri.16	q14, q15, #5
	vsri.16	q14, q3, #11
	vst1.16	{d28-d29}, [r2]!
17:	tst	r0, #7
	beq	18f
	tst	r0, #4
	beq	19f
	vld1.8	{d15[4]}, [r4]!
	vld1.8	{d15[5]}, [r4]!
	vld1.8	{d15[6]}, [r4]!
	vld1.8	{d15[7]}, [r4]!
	vld1.16	{d11}, [r6]!
19:	tst	r0, #2
	beq	20f
	vld1.8	{d15[2]}, [r4]!
	vld1.8	{d15[3]}, [r4]!
	vld1.16	{d10[2]}, [r6]!
	vld1.16	{d10[3]}, [r6]!
20:	tst	r0, #1
	beq	21f
	vld1.8	{d15[1]}, [r4]!
	vld1.16	{d10[1]}, [r6]!
21:	vshrn.i16	d6, q5, #8
	vshrn.i16	d5, q5, #3
	vsli.16	q5, q5, #5
	vsri.8	d6, d6, #5
	vsri.8	d5, d5, #6
	vshrn.i16	d4, q5, #2
	vmvn	d24, d15
	vmull.u8	q8, d24, d4
	vmull.u8	q9, d24, d5
	vmull.u8	q10, d24, d6
	vrshr.u16	q14, q8, #8
	vrshr.u16	q15, q9, #8
	vrshr.u16	q12, q10, #8
	vraddhn.i16	d0, q14, q8
	vraddhn.i16	d1, q15, q9
	vraddhn.i16	d2, q12, q10
	vshll.i8	q15, d1, #8
	vshll.i8	q14, d2, #8
	vshll.i8	q3, d0, #8
	vsri.16	q14, q15, #5
	vsri.16	q14, q3, #11
	tst	r0, #4
	beq	22f
	vst1.16	{d29}, [r2]!
22:	tst	r0, #2
	beq	23f
	vst1.16	{d28[2]}, [r2]!
	vst1.16	{d28[3]}, [r2]!
23:	tst	r0, #1
	beq	18f
	vst1.16	{d28[1]}, [r2]!
18:	mov	r0, r7
	add	r2, r2, r3, lsl #1
	add	r4, r4, r5
	sub	r2, r2, r0, lsl #1
	sub	r4, r4, r0
	subs	r1, r1, #1
	mov	r6, r2
	bge	1b
0:	vldmia	sp!, {d8-d15}
	pop	{r4, r5, r6, r7, r8, r9, sl, fp, ip, pc}

.global _pixman_composite_src_n_8_8_asm_neon
_pixman_composite_src_n_8_8_asm_neon:
	push	{r4, r5, r6, r7, r8, r9, sl, fp, ip, lr}
	ldr	r7, [sp, #48]
	mov	sl, #0
	ldr	r8, [sp, #52]
	mov	r6, r2
	mov	fp, r4
	mov	ip, r6
	mov	lr, r7
	lsl	r9, r1, #4
	sub	r9, r9, #11
	add	r5, sp, #40
	vld1.32	{d16[0]}, [r5]
	vdup.8	d16, d16[3]
	subs	r1, r1, #1
	mov	r4, r0
	blt	0f
	cmp	r0, #64
	blt	1f
23:	tst	r6, #15
	beq	2f
	tst	r6, #1
	beq	3f
	vld1.8	{d24[1]}, [r7]!
	add	r6, r6, #1
	add	sl, sl, #1
	sub	r0, r0, #1
3:	tst	r6, #2
	beq	4f
	vld1.8	{d24[2]}, [r7]!
	vld1.8	{d24[3]}, [r7]!
	add	r6, r6, #2
	add	sl, sl, #2
	sub	r0, r0, #2
4:	tst	r6, #4
	beq	5f
	vld1.8	{d24[4]}, [r7]!
	vld1.8	{d24[5]}, [r7]!
	vld1.8	{d24[6]}, [r7]!
	vld1.8	{d24[7]}, [r7]!
	add	r6, r6, #4
	add	sl, sl, #4
	sub	r0, r0, #4
5:	tst	r6, #8
	beq	6f
	vld1.8	{d25}, [r7]!
	add	r6, r6, #8
	add	sl, sl, #8
	sub	r0, r0, #8
6:	vld1.8	{d26-d27}, [r7]!
	add	r6, r6, #16
	add	sl, sl, #16
	sub	r0, r0, #16
	vmull.u8	q0, d24, d16
	vmull.u8	q1, d25, d16
	vmull.u8	q2, d26, d16
	vmull.u8	q3, d27, d16
	vrsra.u16	q0, q0, #8
	vrsra.u16	q1, q1, #8
	vrsra.u16	q2, q2, #8
	vrsra.u16	q3, q3, #8
	tst	r9, #15
	addne	sl, sl, #32
	subne	r9, r9, #1
	cmp	sl, r4
	pld	[lr, sl]
	subge	sl, sl, r4
	subsge	r9, r9, #16
	ldrbge	r5, [lr, r8]!
	vrshrn.i16	d28, q0, #8
	vrshrn.i16	d29, q1, #8
	vrshrn.i16	d30, q2, #8
	vrshrn.i16	d31, q3, #8
	tst	r2, #1
	beq	7f
	vst1.8	{d28[1]}, [r2]!
7:	tst	r2, #2
	beq	8f
	vst1.8	{d28[2]}, [r2]!
	vst1.8	{d28[3]}, [r2]!
8:	tst	r2, #4
	beq	9f
	vst1.8	{d28[4]}, [r2]!
	vst1.8	{d28[5]}, [r2]!
	vst1.8	{d28[6]}, [r2]!
	vst1.8	{d28[7]}, [r2]!
9:	tst	r2, #8
	beq	10f
	vst1.8	{d29}, [r2, :64]!
10:	vst1.8	{d30-d31}, [r2, :128]!
2:	vld1.8	{d24-d27}, [r7]!
	add	sl, sl, #32
	vmull.u8	q0, d24, d16
	vmull.u8	q1, d25, d16
	vmull.u8	q2, d26, d16
	vmull.u8	q3, d27, d16
	vrsra.u16	q0, q0, #8
	vrsra.u16	q1, q1, #8
	vrsra.u16	q2, q2, #8
	vrsra.u16	q3, q3, #8
	tst	r9, #15
	addne	sl, sl, #32
	subne	r9, r9, #1
	cmp	sl, r4
	pld	[lr, sl]
	subge	sl, sl, r4
	subsge	r9, r9, #16
	ldrbge	r5, [lr, r8]!
	subs	r0, r0, #64
	blt	11f
12:	vld1.8	{d24-d27}, [r7]!
	add	sl, sl, #8
	vrshrn.i16	d28, q0, #8
	tst	r9, #15
	vrshrn.i16	d29, q1, #8
	addne	sl, sl, #8
	vrshrn.i16	d30, q2, #8
	subne	r9, r9, #1
	vrshrn.i16	d31, q3, #8
	cmp	sl, r4
	vmull.u8	q0, d24, d16
	pld	[lr, sl]
	vmull.u8	q1, d25, d16
	subge	sl, sl, r4
	vmull.u8	q2, d26, d16
	subsge	r9, r9, #16
	vmull.u8	q3, d27, d16
	ldrbge	r5, [lr, r8]!
	vst1.8	{d28-d31}, [r2, :128]!
	vrsra.u16	q0, q0, #8
	vrsra.u16	q1, q1, #8
	vrsra.u16	q2, q2, #8
	vrsra.u16	q3, q3, #8
	subs	r0, r0, #32
	bge	12b
11:	vrshrn.i16	d28, q0, #8
	vrshrn.i16	d29, q1, #8
	vrshrn.i16	d30, q2, #8
	vrshrn.i16	d31, q3, #8
	vst1.8	{d28-d31}, [r2, :128]!
	tst	r0, #31
	beq	13f
	tst	r0, #16
	beq	14f
	vld1.8	{d26-d27}, [r7]!
	add	sl, sl, #16
14:	tst	r0, #8
	beq	15f
	vld1.8	{d25}, [r7]!
	add	sl, sl, #8
15:	tst	r0, #4
	beq	16f
	vld1.8	{d24[4]}, [r7]!
	vld1.8	{d24[5]}, [r7]!
	vld1.8	{d24[6]}, [r7]!
	vld1.8	{d24[7]}, [r7]!
	add	sl, sl, #4
16:	tst	r0, #2
	beq	17f
	vld1.8	{d24[2]}, [r7]!
	vld1.8	{d24[3]}, [r7]!
	add	sl, sl, #2
17:	tst	r0, #1
	beq	18f
	vld1.8	{d24[1]}, [r7]!
	add	sl, sl, #1
18:	vmull.u8	q0, d24, d16
	vmull.u8	q1, d25, d16
	vmull.u8	q2, d26, d16
	vmull.u8	q3, d27, d16
	vrsra.u16	q0, q0, #8
	vrsra.u16	q1, q1, #8
	vrsra.u16	q2, q2, #8
	vrsra.u16	q3, q3, #8
	tst	r9, #15
	addne	sl, sl, #32
	subne	r9, r9, #1
	cmp	sl, r4
	pld	[lr, sl]
	subge	sl, sl, r4
	subsge	r9, r9, #16
	ldrbge	r5, [lr, r8]!
	vrshrn.i16	d28, q0, #8
	vrshrn.i16	d29, q1, #8
	vrshrn.i16	d30, q2, #8
	vrshrn.i16	d31, q3, #8
	tst	r0, #16
	beq	19f
	vst1.8	{d30-d31}, [r2, :128]!
19:	tst	r0, #8
	beq	20f
	vst1.8	{d29}, [r2, :64]!
20:	tst	r0, #4
	beq	21f
	vst1.8	{d28[4]}, [r2]!
	vst1.8	{d28[5]}, [r2]!
	vst1.8	{d28[6]}, [r2]!
	vst1.8	{d28[7]}, [r2]!
21:	tst	r0, #2
	beq	22f
	vst1.8	{d28[2]}, [r2]!
	vst1.8	{d28[3]}, [r2]!
22:	tst	r0, #1
	beq	13f
	vst1.8	{d28[1]}, [r2]!
13:	mov	r0, r4
	add	r2, r2, r3
	add	r7, r7, r8
	sub	r2, r2, r0
	sub	r7, r7, r0
	subs	r1, r1, #1
	mov	r6, r2
	bge	23b
	pop	{r4, r5, r6, r7, r8, r9, sl, fp, ip, pc}
1:	tst	r0, #32
	beq	24f
	vld1.8	{d24-d27}, [r7]!
	vmull.u8	q0, d24, d16
	vmull.u8	q1, d25, d16
	vmull.u8	q2, d26, d16
	vmull.u8	q3, d27, d16
	vrsra.u16	q0, q0, #8
	vrsra.u16	q1, q1, #8
	vrsra.u16	q2, q2, #8
	vrsra.u16	q3, q3, #8
	vrshrn.i16	d28, q0, #8
	vrshrn.i16	d29, q1, #8
	vrshrn.i16	d30, q2, #8
	vrshrn.i16	d31, q3, #8
	vst1.8	{d28-d31}, [r2]!
24:	tst	r0, #31
	beq	25f
	tst	r0, #16
	beq	26f
	vld1.8	{d26-d27}, [r7]!
26:	tst	r0, #8
	beq	27f
	vld1.8	{d25}, [r7]!
27:	tst	r0, #4
	beq	28f
	vld1.8	{d24[4]}, [r7]!
	vld1.8	{d24[5]}, [r7]!
	vld1.8	{d24[6]}, [r7]!
	vld1.8	{d24[7]}, [r7]!
28:	tst	r0, #2
	beq	29f
	vld1.8	{d24[2]}, [r7]!
	vld1.8	{d24[3]}, [r7]!
29:	tst	r0, #1
	beq	30f
	vld1.8	{d24[1]}, [r7]!
30:	vmull.u8	q0, d24, d16
	vmull.u8	q1, d25, d16
	vmull.u8	q2, d26, d16
	vmull.u8	q3, d27, d16
	vrsra.u16	q0, q0, #8
	vrsra.u16	q1, q1, #8
	vrsra.u16	q2, q2, #8
	vrsra.u16	q3, q3, #8
	vrshrn.i16	d28, q0, #8
	vrshrn.i16	d29, q1, #8
	vrshrn.i16	d30, q2, #8
	vrshrn.i16	d31, q3, #8
	tst	r0, #16
	beq	31f
	vst1.8	{d30-d31}, [r2]!
31:	tst	r0, #8
	beq	32f
	vst1.8	{d29}, [r2]!
32:	tst	r0, #4
	beq	33f
	vst1.8	{d28[4]}, [r2]!
	vst1.8	{d28[5]}, [r2]!
	vst1.8	{d28[6]}, [r2]!
	vst1.8	{d28[7]}, [r2]!
33:	tst	r0, #2
	beq	34f
	vst1.8	{d28[2]}, [r2]!
	vst1.8	{d28[3]}, [r2]!
34:	tst	r0, #1
	beq	25f
	vst1.8	{d28[1]}, [r2]!
25:	mov	r0, r4
	add	r2, r2, r3
	add	r7, r7, r8
	sub	r2, r2, r0
	sub	r7, r7, r0
	subs	r1, r1, #1
	mov	r6, r2
	bge	1b
0:	pop	{r4, r5, r6, r7, r8, r9, sl, fp, ip, pc}

.global _pixman_composite_src_8888_0565_asm_neon
_pixman_composite_src_8888_0565_asm_neon:
	push	{r4, r5, r6, r7, r8, r9, sl, fp, ip, lr}
	ldr	r4, [sp, #40]
	mov	sl, #0
	ldr	r5, [sp, #44]
	mov	r6, r2
	mov	fp, r4
	mov	ip, r6
	mov	lr, r7
	lsl	r9, r1, #4
	sub	r9, r9, #6
	subs	r1, r1, #1
	mov	r7, r0
	blt	0f
	cmp	r0, #16
	blt	1f
16:	tst	r6, #15
	beq	2f
	tst	r6, #2
	beq	3f
	vld1.32	{d0[1]}, [r4]!
	add	r6, r6, #2
	add	sl, sl, #1
	sub	r0, r0, #1
3:	tst	r6, #4
	beq	4f
	vld1.32	{d1}, [r4]!
	add	r6, r6, #4
	add	sl, sl, #2
	sub	r0, r0, #2
4:	tst	r6, #8
	beq	5f
	vld1.32	{d2-d3}, [r4]!
	add	r6, r6, #8
	add	sl, sl, #4
	sub	r0, r0, #4
5:	vuzp.8	d0, d1
	vuzp.8	d2, d3
	vuzp.8	d1, d3
	vuzp.8	d0, d2
	vshll.i8	q8, d1, #8
	vshll.i8	q14, d2, #8
	vshll.i8	q9, d0, #8
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r7
	pld	[fp, sl, lsl #2]
	subge	sl, sl, r7
	subsge	r9, r9, #16
	ldrbge	r8, [fp, r5, lsl #2]!
	vsri.16	q14, q8, #5
	vsri.16	q14, q9, #11
	tst	r2, #2
	beq	6f
	vst1.16	{d28[1]}, [r2]!
6:	tst	r2, #4
	beq	7f
	vst1.16	{d28[2]}, [r2]!
	vst1.16	{d28[3]}, [r2]!
7:	tst	r2, #8
	beq	2f
	vst1.16	{d29}, [r2, :64]!
2:	vld4.8	{d0-d3}, [r4]!
	add	sl, sl, #8
	vshll.i8	q8, d1, #8
	vshll.i8	q14, d2, #8
	vshll.i8	q9, d0, #8
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r7
	pld	[fp, sl, lsl #2]
	subge	sl, sl, r7
	subsge	r9, r9, #16
	ldrbge	r8, [fp, r5, lsl #2]!
	subs	r0, r0, #16
	blt	8f
9:	vsri.16	q14, q8, #5
	add	sl, sl, #8
	tst	r9, #15
	vld4.8	{d0-d3}, [r4]!
	addne	sl, sl, #8
	subne	r9, r9, #1
	vsri.16	q14, q9, #11
	cmp	sl, r7
	pld	[fp, sl, lsl #2]
	vshll.i8	q8, d1, #8
	vst1.16	{d28-d29}, [r2, :128]!
	subge	sl, sl, r7
	subsge	r9, r9, #16
	vshll.i8	q14, d2, #8
	ldrbge	r8, [fp, r5, lsl #2]!
	vshll.i8	q9, d0, #8
	subs	r0, r0, #8
	bge	9b
8:	vsri.16	q14, q8, #5
	vsri.16	q14, q9, #11
	vst1.16	{d28-d29}, [r2, :128]!
	tst	r0, #7
	beq	10f
	tst	r0, #4
	beq	11f
	vld1.32	{d2-d3}, [r4]!
	add	sl, sl, #4
11:	tst	r0, #2
	beq	12f
	vld1.32	{d1}, [r4]!
	add	sl, sl, #2
12:	tst	r0, #1
	beq	13f
	vld1.32	{d0[1]}, [r4]!
	add	sl, sl, #1
13:	vuzp.8	d0, d1
	vuzp.8	d2, d3
	vuzp.8	d1, d3
	vuzp.8	d0, d2
	vshll.i8	q8, d1, #8
	vshll.i8	q14, d2, #8
	vshll.i8	q9, d0, #8
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r7
	pld	[fp, sl, lsl #2]
	subge	sl, sl, r7
	subsge	r9, r9, #16
	ldrbge	r8, [fp, r5, lsl #2]!
	vsri.16	q14, q8, #5
	vsri.16	q14, q9, #11
	tst	r0, #4
	beq	14f
	vst1.16	{d29}, [r2, :64]!
14:	tst	r0, #2
	beq	15f
	vst1.16	{d28[2]}, [r2]!
	vst1.16	{d28[3]}, [r2]!
15:	tst	r0, #1
	beq	10f
	vst1.16	{d28[1]}, [r2]!
10:	mov	r0, r7
	add	r2, r2, r3, lsl #1
	add	r4, r4, r5, lsl #2
	sub	r2, r2, r0, lsl #1
	sub	r4, r4, r0, lsl #2
	subs	r1, r1, #1
	mov	r6, r2
	bge	16b
	pop	{r4, r5, r6, r7, r8, r9, sl, fp, ip, pc}
1:	tst	r0, #8
	beq	17f
	vld4.8	{d0-d3}, [r4]!
	vshll.i8	q8, d1, #8
	vshll.i8	q14, d2, #8
	vshll.i8	q9, d0, #8
	vsri.16	q14, q8, #5
	vsri.16	q14, q9, #11
	vst1.16	{d28-d29}, [r2]!
17:	tst	r0, #7
	beq	18f
	tst	r0, #4
	beq	19f
	vld1.32	{d2-d3}, [r4]!
19:	tst	r0, #2
	beq	20f
	vld1.32	{d1}, [r4]!
20:	tst	r0, #1
	beq	21f
	vld1.32	{d0[1]}, [r4]!
21:	vuzp.8	d0, d1
	vuzp.8	d2, d3
	vuzp.8	d1, d3
	vuzp.8	d0, d2
	vshll.i8	q8, d1, #8
	vshll.i8	q14, d2, #8
	vshll.i8	q9, d0, #8
	vsri.16	q14, q8, #5
	vsri.16	q14, q9, #11
	tst	r0, #4
	beq	22f
	vst1.16	{d29}, [r2]!
22:	tst	r0, #2
	beq	23f
	vst1.16	{d28[2]}, [r2]!
	vst1.16	{d28[3]}, [r2]!
23:	tst	r0, #1
	beq	18f
	vst1.16	{d28[1]}, [r2]!
18:	mov	r0, r7
	add	r2, r2, r3, lsl #1
	add	r4, r4, r5, lsl #2
	sub	r2, r2, r0, lsl #1
	sub	r4, r4, r0, lsl #2
	subs	r1, r1, #1
	mov	r6, r2
	bge	1b
0:	pop	{r4, r5, r6, r7, r8, r9, sl, fp, ip, pc}

/* pixman_composite_over_n_8_8888_asm_armv6 has an external reference - skipped */

.global _pixman_scaled_bilinear_scanline_0565_0565_SRC_asm_neon
_pixman_scaled_bilinear_scanline_0565_0565_SRC_asm_neon:
	mov	ip, sp
	push	{r4, r5, r6, r7, r8, r9}
	mov	r7, #28
	ldm	ip, {r4, r5, r6, ip}
	mul	r7, r7, r6
	sub	r2, r2, r1
	cmp	ip, #0
	ble	0f
	vdup.16	q12, r5
	vdup.16	q13, r6
	vdup.8	d28, r3
	vdup.8	d29, r4
	vadd.i16	d25, d25, d26
	cmp	ip, #1
	blt	1f
	tst	r0, #2
	beq	1f
	vshr.u16	q15, q12, #8
	vadd.i16	q12, q12, q13
	asr	r3, r5, #16
	add	r5, r5, r6
	add	r3, r1, r3, lsl #1
	vld1.32	{d1[0]}, [r3], r2
	vld1.32	{d1[1]}, [r3]
	vshl.s16	d0, d1, #5
	vshl.s16	d2, d1, #11
	vsri.16	d1, d1, #5
	vsri.16	d0, d0, #6
	vsri.16	d2, d2, #5
	vshr.u16	d1, d1, #8
	vsri.16	d0, d2, #8
	vzip.16	d0, d1
	vmull.u8	q1, d0, d28
	vmlal.u8	q1, d1, d29
	vshll.u16	q0, d2, #8
	vmlsl.u16	q0, d2, d30
	vmlal.u16	q0, d3, d30
	vshrn.i32	d0, q0, #16
	vmovn.i16	d0, q0
	vuzp.8	d0, d1
	vuzp.8	d2, d3
	vuzp.8	d1, d3
	vuzp.8	d0, d2
	vshll.i8	q2, d1, #8
	vshll.i8	q1, d2, #8
	vshll.i8	q3, d0, #8
	vsri.16	q1, q2, #5
	vsri.16	q1, q3, #11
	vst1.16	{d2[0]}, [r0, :16]!
	sub	ip, ip, #1
1:	vadd.i16	q13, q13, q13
	vshr.u16	q15, q12, #8
	vadd.i16	q12, q12, q13
	cmp	ip, #2
	blt	2f
	tst	r0, #4
	beq	2f
	asr	r3, r5, #16
	add	r5, r5, r6
	add	r3, r1, r3, lsl #1
	asr	r4, r5, #16
	add	r5, r5, r6
	add	r4, r1, r4, lsl #1
	vld1.32	{d22[0]}, [r3], r2
	vld1.32	{d23[0]}, [r4], r2
	vld1.32	{d22[1]}, [r3]
	vld1.32	{d23[1]}, [r4]
	vshrn.i16	d20, q11, #8
	vshrn.i16	d1, q11, #3
	vsli.16	q11, q11, #5
	vsri.8	d20, d20, #5
	vsri.8	d1, d1, #6
	vshrn.i16	d0, q11, #2
	vzip.8	d0, d20
	vzip.8	d1, d21
	vzip.8	d20, d21
	vzip.8	d0, d1
	vmull.u8	q1, d0, d28
	vmlal.u8	q1, d1, d29
	vmull.u8	q11, d20, d28
	vmlal.u8	q11, d21, d29
	vshll.u16	q0, d2, #8
	vmlsl.u16	q0, d2, d30
	vmlal.u16	q0, d3, d30
	vshll.u16	q10, d22, #8
	vmlsl.u16	q10, d22, d31
	vmlal.u16	q10, d23, d31
	vshrn.i32	d0, q0, #16
	vshrn.i32	d1, q10, #16
	vshr.u16	q15, q12, #8
	vadd.i16	q12, q12, q13
	vmovn.i16	d0, q0
	vuzp.8	d0, d1
	vuzp.8	d2, d3
	vuzp.8	d1, d3
	vuzp.8	d0, d2
	vshll.i8	q2, d1, #8
	vshll.i8	q1, d2, #8
	vshll.i8	q3, d0, #8
	vsri.16	q1, q2, #5
	vsri.16	q1, q3, #11
	vst1.32	{d2[0]}, [r0, :32]!
	sub	ip, ip, #2
2:	subs	ip, ip, #4
	blt	3f
	asr	r7, r7, #15
	asr	r3, r5, #16
	add	r5, r5, r6
	add	r3, r1, r3, lsl #1
	asr	r4, r5, #16
	add	r5, r5, r6
	add	r4, r1, r4, lsl #1
	vld1.32	{d22[0]}, [r3], r2
	vld1.32	{d23[0]}, [r4], r2
	vld1.32	{d22[1]}, [r3]
	vld1.32	{d23[1]}, [r4]
	vshrn.i16	d20, q11, #8
	vshrn.i16	d1, q11, #3
	vsli.16	q11, q11, #5
	vsri.8	d20, d20, #5
	vsri.8	d1, d1, #6
	vshrn.i16	d0, q11, #2
	asr	r3, r5, #16
	add	r5, r5, r6
	add	r3, r1, r3, lsl #1
	asr	r4, r5, #16
	add	r5, r5, r6
	add	r4, r1, r4, lsl #1
	vld1.32	{d18[0]}, [r3], r2
	vzip.8	d0, d20
	vld1.32	{d19[0]}, [r4], r2
	vzip.8	d1, d21
	vld1.32	{d18[1]}, [r3]
	vzip.8	d20, d21
	vld1.32	{d19[1]}, [r4]
	vzip.8	d0, d1
	vshrn.i16	d16, q9, #8
	vshrn.i16	d5, q9, #3
	vsli.16	q9, q9, #5
	vsri.8	d16, d16, #5
	vsri.8	d5, d5, #6
	vshrn.i16	d4, q9, #2
	vmull.u8	q1, d0, d28
	vzip.8	d4, d16
	vmlal.u8	q1, d1, d29
	vzip.8	d5, d17
	vmull.u8	q11, d20, d28
	vzip.8	d16, d17
	vmlal.u8	q11, d21, d29
	vzip.8	d4, d5
	vmull.u8	q3, d4, d28
	vmlal.u8	q3, d5, d29
	vmull.u8	q9, d16, d28
	vmlal.u8	q9, d17, d29
	pld	[r3, r7]
	sub	r3, r3, r2
	vshll.u16	q0, d2, #8
	vmlsl.u16	q0, d2, d30
	vmlal.u16	q0, d3, d30
	vshll.u16	q10, d22, #8
	vmlsl.u16	q10, d22, d31
	vmlal.u16	q10, d23, d31
	vshr.u16	q15, q12, #8
	vshll.u16	q2, d6, #8
	vmlsl.u16	q2, d6, d30
	vmlal.u16	q2, d7, d30
	vshll.u16	q8, d18, #8
	pld	[r4, r7]
	vmlsl.u16	q8, d18, d31
	vmlal.u16	q8, d19, d31
	vadd.i16	q12, q12, q13
	vshrn.i32	d0, q0, #16
	vshrn.i32	d1, q10, #16
	vshrn.i32	d4, q2, #16
	vshrn.i32	d5, q8, #16
	vshr.u16	q15, q12, #8
	vmovn.i16	d0, q0
	vmovn.i16	d1, q2
	vadd.i16	q12, q12, q13
	vuzp.8	d0, d1
	vuzp.8	d2, d3
	vuzp.8	d1, d3
	vuzp.8	d0, d2
	vshll.i8	q2, d1, #8
	vshll.i8	q1, d2, #8
	vshll.i8	q3, d0, #8
	vsri.16	q1, q2, #5
	vsri.16	q1, q3, #11
	vst1.16	{d2}, [r0, :64]!
	subs	ip, ip, #4
	blt	3f
4:	asr	r3, r5, #16
	add	r5, r5, r6
	add	r3, r1, r3, lsl #1
	asr	r4, r5, #16
	add	r5, r5, r6
	add	r4, r1, r4, lsl #1
	vld1.32	{d22[0]}, [r3], r2
	vld1.32	{d23[0]}, [r4], r2
	vld1.32	{d22[1]}, [r3]
	vld1.32	{d23[1]}, [r4]
	vshrn.i16	d20, q11, #8
	vshrn.i16	d1, q11, #3
	vsli.16	q11, q11, #5
	vsri.8	d20, d20, #5
	vsri.8	d1, d1, #6
	vshrn.i16	d0, q11, #2
	asr	r3, r5, #16
	add	r5, r5, r6
	add	r3, r1, r3, lsl #1
	asr	r4, r5, #16
	add	r5, r5, r6
	add	r4, r1, r4, lsl #1
	vld1.32	{d18[0]}, [r3], r2
	vzip.8	d0, d20
	vld1.32	{d19[0]}, [r4], r2
	vzip.8	d1, d21
	vld1.32	{d18[1]}, [r3]
	vzip.8	d20, d21
	vld1.32	{d19[1]}, [r4]
	vzip.8	d0, d1
	vshrn.i16	d16, q9, #8
	vshrn.i16	d5, q9, #3
	vsli.16	q9, q9, #5
	vsri.8	d16, d16, #5
	vsri.8	d5, d5, #6
	vshrn.i16	d4, q9, #2
	vmull.u8	q1, d0, d28
	vzip.8	d4, d16
	vmlal.u8	q1, d1, d29
	vzip.8	d5, d17
	vmull.u8	q11, d20, d28
	vzip.8	d16, d17
	vmlal.u8	q11, d21, d29
	vzip.8	d4, d5
	vmull.u8	q3, d4, d28
	vmlal.u8	q3, d5, d29
	vmull.u8	q9, d16, d28
	vmlal.u8	q9, d17, d29
	pld	[r3, r7]
	sub	r3, r3, r2
	vshll.u16	q0, d2, #8
	vmlsl.u16	q0, d2, d30
	vmlal.u16	q0, d3, d30
	vshll.u16	q10, d22, #8
	vmlsl.u16	q10, d22, d31
	vmlal.u16	q10, d23, d31
	vshr.u16	q15, q12, #8
	vshll.u16	q2, d6, #8
	vmlsl.u16	q2, d6, d30
	vmlal.u16	q2, d7, d30
	vshll.u16	q8, d18, #8
	pld	[r4, r7]
	vmlsl.u16	q8, d18, d31
	vmlal.u16	q8, d19, d31
	vadd.i16	q12, q12, q13
	vshrn.i32	d0, q0, #16
	vshrn.i32	d1, q10, #16
	vshrn.i32	d4, q2, #16
	vshrn.i32	d5, q8, #16
	vshr.u16	q15, q12, #8
	vmovn.i16	d0, q0
	vmovn.i16	d1, q2
	vadd.i16	q12, q12, q13
	vuzp.8	d0, d1
	vuzp.8	d2, d3
	vuzp.8	d1, d3
	vuzp.8	d0, d2
	vshll.i8	q2, d1, #8
	vshll.i8	q1, d2, #8
	vshll.i8	q3, d0, #8
	vsri.16	q1, q2, #5
	vsri.16	q1, q3, #11
	vst1.16	{d2}, [r0, :64]!
	subs	ip, ip, #4
	bge	4b
3:	tst	ip, #2
	beq	5f
	asr	r3, r5, #16
	add	r5, r5, r6
	add	r3, r1, r3, lsl #1
	asr	r4, r5, #16
	add	r5, r5, r6
	add	r4, r1, r4, lsl #1
	vld1.32	{d22[0]}, [r3], r2
	vld1.32	{d23[0]}, [r4], r2
	vld1.32	{d22[1]}, [r3]
	vld1.32	{d23[1]}, [r4]
	vshrn.i16	d20, q11, #8
	vshrn.i16	d1, q11, #3
	vsli.16	q11, q11, #5
	vsri.8	d20, d20, #5
	vsri.8	d1, d1, #6
	vshrn.i16	d0, q11, #2
	vzip.8	d0, d20
	vzip.8	d1, d21
	vzip.8	d20, d21
	vzip.8	d0, d1
	vmull.u8	q1, d0, d28
	vmlal.u8	q1, d1, d29
	vmull.u8	q11, d20, d28
	vmlal.u8	q11, d21, d29
	vshll.u16	q0, d2, #8
	vmlsl.u16	q0, d2, d30
	vmlal.u16	q0, d3, d30
	vshll.u16	q10, d22, #8
	vmlsl.u16	q10, d22, d31
	vmlal.u16	q10, d23, d31
	vshrn.i32	d0, q0, #16
	vshrn.i32	d1, q10, #16
	vshr.u16	q15, q12, #8
	vadd.i16	q12, q12, q13
	vmovn.i16	d0, q0
	vuzp.8	d0, d1
	vuzp.8	d2, d3
	vuzp.8	d1, d3
	vuzp.8	d0, d2
	vshll.i8	q2, d1, #8
	vshll.i8	q1, d2, #8
	vshll.i8	q3, d0, #8
	vsri.16	q1, q2, #5
	vsri.16	q1, q3, #11
	vst1.32	{d2[0]}, [r0, :32]!
5:	tst	ip, #1
	beq	0f
	asr	r3, r5, #16
	add	r5, r5, r6
	add	r3, r1, r3, lsl #1
	vld1.32	{d1[0]}, [r3], r2
	vld1.32	{d1[1]}, [r3]
	vshl.s16	d0, d1, #5
	vshl.s16	d2, d1, #11
	vsri.16	d1, d1, #5
	vsri.16	d0, d0, #6
	vsri.16	d2, d2, #5
	vshr.u16	d1, d1, #8
	vsri.16	d0, d2, #8
	vzip.16	d0, d1
	vmull.u8	q1, d0, d28
	vmlal.u8	q1, d1, d29
	vshll.u16	q0, d2, #8
	vmlsl.u16	q0, d2, d30
	vmlal.u16	q0, d3, d30
	vshrn.i32	d0, q0, #16
	vmovn.i16	d0, q0
	vuzp.8	d0, d1
	vuzp.8	d2, d3
	vuzp.8	d1, d3
	vuzp.8	d0, d2
	vshll.i8	q2, d1, #8
	vshll.i8	q1, d2, #8
	vshll.i8	q3, d0, #8
	vsri.16	q1, q2, #5
	vsri.16	q1, q3, #11
	vst1.16	{d2[0]}, [r0, :16]!
0:	pop	{r4, r5, r6, r7, r8, r9}
	bx	lr
//	format elf32-littlearm

.global _pixman_scaled_bilinear_scanline_0565_x888_SRC_asm_neon
_pixman_scaled_bilinear_scanline_0565_x888_SRC_asm_neon:
	mov	ip, sp
	push	{r4, r5, r6, r7, r8, r9}
	mov	r7, #28
	ldm	ip, {r4, r5, r6, ip}
	mul	r7, r7, r6
	sub	r2, r2, r1
	cmp	ip, #0
	ble	0f
	vdup.16	q12, r5
	vdup.16	q13, r6
	vdup.8	d28, r3
	vdup.8	d29, r4
	vadd.i16	d25, d25, d26
	cmp	ip, #1
	blt	1f
	tst	r0, #4
	beq	1f
	vshr.u16	q15, q12, #8
	vadd.i16	q12, q12, q13
	asr	r3, r5, #16
	add	r5, r5, r6
	add	r3, r1, r3, lsl #1
	vld1.32	{d1[0]}, [r3], r2
	vld1.32	{d1[1]}, [r3]
	vshl.s16	d0, d1, #5
	vshl.s16	d2, d1, #11
	vsri.16	d1, d1, #5
	vsri.16	d0, d0, #6
	vsri.16	d2, d2, #5
	vshr.u16	d1, d1, #8
	vsri.16	d0, d2, #8
	vzip.16	d0, d1
	vmull.u8	q1, d0, d28
	vmlal.u8	q1, d1, d29
	vshll.u16	q0, d2, #8
	vmlsl.u16	q0, d2, d30
	vmlal.u16	q0, d3, d30
	vshrn.i32	d0, q0, #16
	vmovn.i16	d0, q0
	vst1.32	{d0[0]}, [r0, :32]!
	sub	ip, ip, #1
1:	vadd.i16	q13, q13, q13
	vshr.u16	q15, q12, #8
	vadd.i16	q12, q12, q13
	cmp	ip, #2
	blt	2f
	tst	r0, #8
	beq	2f
	asr	r3, r5, #16
	add	r5, r5, r6
	add	r3, r1, r3, lsl #1
	asr	r4, r5, #16
	add	r5, r5, r6
	add	r4, r1, r4, lsl #1
	vld1.32	{d22[0]}, [r3], r2
	vld1.32	{d23[0]}, [r4], r2
	vld1.32	{d22[1]}, [r3]
	vld1.32	{d23[1]}, [r4]
	vshrn.i16	d20, q11, #8
	vshrn.i16	d1, q11, #3
	vsli.16	q11, q11, #5
	vsri.8	d20, d20, #5
	vsri.8	d1, d1, #6
	vshrn.i16	d0, q11, #2
	vzip.8	d0, d20
	vzip.8	d1, d21
	vzip.8	d20, d21
	vzip.8	d0, d1
	vmull.u8	q1, d0, d28
	vmlal.u8	q1, d1, d29
	vmull.u8	q11, d20, d28
	vmlal.u8	q11, d21, d29
	vshll.u16	q0, d2, #8
	vmlsl.u16	q0, d2, d30
	vmlal.u16	q0, d3, d30
	vshll.u16	q10, d22, #8
	vmlsl.u16	q10, d22, d31
	vmlal.u16	q10, d23, d31
	vshrn.i32	d0, q0, #16
	vshrn.i32	d1, q10, #16
	vshr.u16	q15, q12, #8
	vadd.i16	q12, q12, q13
	vmovn.i16	d0, q0
	vst1.32	{d0}, [r0, :64]!
	sub	ip, ip, #2
2:	subs	ip, ip, #4
	blt	3f
	asr	r7, r7, #15
	asr	r3, r5, #16
	add	r5, r5, r6
	add	r3, r1, r3, lsl #1
	asr	r4, r5, #16
	add	r5, r5, r6
	add	r4, r1, r4, lsl #1
	vld1.32	{d22[0]}, [r3], r2
	vld1.32	{d23[0]}, [r4], r2
	vld1.32	{d22[1]}, [r3]
	vld1.32	{d23[1]}, [r4]
	vshrn.i16	d20, q11, #8
	vshrn.i16	d1, q11, #3
	vsli.16	q11, q11, #5
	vsri.8	d20, d20, #5
	vsri.8	d1, d1, #6
	vshrn.i16	d0, q11, #2
	asr	r3, r5, #16
	add	r5, r5, r6
	add	r3, r1, r3, lsl #1
	asr	r4, r5, #16
	add	r5, r5, r6
	add	r4, r1, r4, lsl #1
	vld1.32	{d18[0]}, [r3], r2
	vzip.8	d0, d20
	vld1.32	{d19[0]}, [r4], r2
	vzip.8	d1, d21
	vld1.32	{d18[1]}, [r3]
	vzip.8	d20, d21
	vld1.32	{d19[1]}, [r4]
	vzip.8	d0, d1
	vshrn.i16	d16, q9, #8
	vshrn.i16	d5, q9, #3
	vsli.16	q9, q9, #5
	vsri.8	d16, d16, #5
	vsri.8	d5, d5, #6
	vshrn.i16	d4, q9, #2
	vmull.u8	q1, d0, d28
	vzip.8	d4, d16
	vmlal.u8	q1, d1, d29
	vzip.8	d5, d17
	vmull.u8	q11, d20, d28
	vzip.8	d16, d17
	vmlal.u8	q11, d21, d29
	vzip.8	d4, d5
	vmull.u8	q3, d4, d28
	vmlal.u8	q3, d5, d29
	vmull.u8	q9, d16, d28
	vmlal.u8	q9, d17, d29
	pld	[r3, r7]
	sub	r3, r3, r2
	vshll.u16	q0, d2, #8
	vmlsl.u16	q0, d2, d30
	vmlal.u16	q0, d3, d30
	vshll.u16	q10, d22, #8
	vmlsl.u16	q10, d22, d31
	vmlal.u16	q10, d23, d31
	vshr.u16	q15, q12, #8
	vshll.u16	q2, d6, #8
	vmlsl.u16	q2, d6, d30
	vmlal.u16	q2, d7, d30
	vshll.u16	q8, d18, #8
	pld	[r4, r7]
	vmlsl.u16	q8, d18, d31
	vmlal.u16	q8, d19, d31
	vadd.i16	q12, q12, q13
	vshrn.i32	d0, q0, #16
	vshrn.i32	d1, q10, #16
	vshrn.i32	d4, q2, #16
	vshrn.i32	d5, q8, #16
	vshr.u16	q15, q12, #8
	vmovn.i16	d0, q0
	vmovn.i16	d1, q2
	vadd.i16	q12, q12, q13
	vst1.32	{d0-d1}, [r0, :128]!
	subs	ip, ip, #4
	blt	3f
4:	asr	r3, r5, #16
	add	r5, r5, r6
	add	r3, r1, r3, lsl #1
	asr	r4, r5, #16
	add	r5, r5, r6
	add	r4, r1, r4, lsl #1
	vld1.32	{d22[0]}, [r3], r2
	vld1.32	{d23[0]}, [r4], r2
	vld1.32	{d22[1]}, [r3]
	vld1.32	{d23[1]}, [r4]
	vshrn.i16	d20, q11, #8
	vshrn.i16	d1, q11, #3
	vsli.16	q11, q11, #5
	vsri.8	d20, d20, #5
	vsri.8	d1, d1, #6
	vshrn.i16	d0, q11, #2
	asr	r3, r5, #16
	add	r5, r5, r6
	add	r3, r1, r3, lsl #1
	asr	r4, r5, #16
	add	r5, r5, r6
	add	r4, r1, r4, lsl #1
	vld1.32	{d18[0]}, [r3], r2
	vzip.8	d0, d20
	vld1.32	{d19[0]}, [r4], r2
	vzip.8	d1, d21
	vld1.32	{d18[1]}, [r3]
	vzip.8	d20, d21
	vld1.32	{d19[1]}, [r4]
	vzip.8	d0, d1
	vshrn.i16	d16, q9, #8
	vshrn.i16	d5, q9, #3
	vsli.16	q9, q9, #5
	vsri.8	d16, d16, #5
	vsri.8	d5, d5, #6
	vshrn.i16	d4, q9, #2
	vmull.u8	q1, d0, d28
	vzip.8	d4, d16
	vmlal.u8	q1, d1, d29
	vzip.8	d5, d17
	vmull.u8	q11, d20, d28
	vzip.8	d16, d17
	vmlal.u8	q11, d21, d29
	vzip.8	d4, d5
	vmull.u8	q3, d4, d28
	vmlal.u8	q3, d5, d29
	vmull.u8	q9, d16, d28
	vmlal.u8	q9, d17, d29
	pld	[r3, r7]
	sub	r3, r3, r2
	vshll.u16	q0, d2, #8
	vmlsl.u16	q0, d2, d30
	vmlal.u16	q0, d3, d30
	vshll.u16	q10, d22, #8
	vmlsl.u16	q10, d22, d31
	vmlal.u16	q10, d23, d31
	vshr.u16	q15, q12, #8
	vshll.u16	q2, d6, #8
	vmlsl.u16	q2, d6, d30
	vmlal.u16	q2, d7, d30
	vshll.u16	q8, d18, #8
	pld	[r4, r7]
	vmlsl.u16	q8, d18, d31
	vmlal.u16	q8, d19, d31
	vadd.i16	q12, q12, q13
	vshrn.i32	d0, q0, #16
	vshrn.i32	d1, q10, #16
	vshrn.i32	d4, q2, #16
	vshrn.i32	d5, q8, #16
	vshr.u16	q15, q12, #8
	vmovn.i16	d0, q0
	vmovn.i16	d1, q2
	vadd.i16	q12, q12, q13
	vst1.32	{d0-d1}, [r0, :128]!
	subs	ip, ip, #4
	bge	4b
3:	tst	ip, #2
	beq	5f
	asr	r3, r5, #16
	add	r5, r5, r6
	add	r3, r1, r3, lsl #1
	asr	r4, r5, #16
	add	r5, r5, r6
	add	r4, r1, r4, lsl #1
	vld1.32	{d22[0]}, [r3], r2
	vld1.32	{d23[0]}, [r4], r2
	vld1.32	{d22[1]}, [r3]
	vld1.32	{d23[1]}, [r4]
	vshrn.i16	d20, q11, #8
	vshrn.i16	d1, q11, #3
	vsli.16	q11, q11, #5
	vsri.8	d20, d20, #5
	vsri.8	d1, d1, #6
	vshrn.i16	d0, q11, #2
	vzip.8	d0, d20
	vzip.8	d1, d21
	vzip.8	d20, d21
	vzip.8	d0, d1
	vmull.u8	q1, d0, d28
	vmlal.u8	q1, d1, d29
	vmull.u8	q11, d20, d28
	vmlal.u8	q11, d21, d29
	vshll.u16	q0, d2, #8
	vmlsl.u16	q0, d2, d30
	vmlal.u16	q0, d3, d30
	vshll.u16	q10, d22, #8
	vmlsl.u16	q10, d22, d31
	vmlal.u16	q10, d23, d31
	vshrn.i32	d0, q0, #16
	vshrn.i32	d1, q10, #16
	vshr.u16	q15, q12, #8
	vadd.i16	q12, q12, q13
	vmovn.i16	d0, q0
	vst1.32	{d0}, [r0, :64]!
5:	tst	ip, #1
	beq	0f
	asr	r3, r5, #16
	add	r5, r5, r6
	add	r3, r1, r3, lsl #1
	vld1.32	{d1[0]}, [r3], r2
	vld1.32	{d1[1]}, [r3]
	vshl.s16	d0, d1, #5
	vshl.s16	d2, d1, #11
	vsri.16	d1, d1, #5
	vsri.16	d0, d0, #6
	vsri.16	d2, d2, #5
	vshr.u16	d1, d1, #8
	vsri.16	d0, d2, #8
	vzip.16	d0, d1
	vmull.u8	q1, d0, d28
	vmlal.u8	q1, d1, d29
	vshll.u16	q0, d2, #8
	vmlsl.u16	q0, d2, d30
	vmlal.u16	q0, d3, d30
	vshrn.i32	d0, q0, #16
	vmovn.i16	d0, q0
	vst1.32	{d0[0]}, [r0, :32]!
0:	pop	{r4, r5, r6, r7, r8, r9}
	bx	lr

.global _pixman_scaled_bilinear_scanline_8888_8_8888_ADD_asm_neon
_pixman_scaled_bilinear_scanline_8888_8_8888_ADD_asm_neon:
	mov	ip, sp
	push	{r4, r5, r6, r7, r8, r9, sl, ip}
	mov	r8, #28
	ldm	ip, {r4, r5, r6, r7, ip}
	mul	r8, r8, r7
	sub	r3, r3, r2
	cmp	ip, #0
	ble	0f
	vdup.16	q12, r6
	vdup.16	q13, r7
	vdup.8	d28, r4
	vdup.8	d29, r5
	vadd.i16	d25, d25, d26
	cmp	ip, #1
	blt	1f
	tst	r0, #4
	beq	1f
	vshr.u16	q15, q12, #8
	vadd.i16	q12, q12, q13
	asr	r4, r6, #16
	add	r6, r6, r7
	add	r4, r2, r4, lsl #2
	vld1.32	{d0}, [r4], r3
	vld1.32	{d1}, [r4]
	vld1.8	{d4[0]}, [r1]!
	pld	[r1, #28]
	vld1.32	{d18[0]}, [r0]
	pld	[r0, #112]
	vmull.u8	q1, d0, d28
	vmlal.u8	q1, d1, d29
	vshll.u16	q0, d2, #8
	vmlsl.u16	q0, d2, d30
	vmlal.u16	q0, d3, d30
	vdup.8	d4, d4[0]
	vshrn.i32	d0, q0, #16
	vmovn.i16	d0, q0
	vuzp.8	d0, d1
	vuzp.8	d18, d19
	vuzp.8	d0, d1
	vuzp.8	d18, d19
	vmull.u8	q3, d0, d4
	vmull.u8	q8, d1, d4
	vrshr.u16	q10, q3, #8
	vrshr.u16	q11, q8, #8
	vraddhn.i16	d0, q10, q3
	vraddhn.i16	d1, q11, q8
	vqadd.u8	q0, q9, q0
	vuzp.8	d0, d1
	vuzp.8	d0, d1
	vst1.32	{d0[0]}, [r0, :32]!
	sub	ip, ip, #1
1:	vadd.i16	q13, q13, q13
	vshr.u16	q15, q12, #8
	vadd.i16	q12, q12, q13
	cmp	ip, #2
	blt	2f
	tst	r0, #8
	beq	2f
	asr	r4, r6, #16
	add	r6, r6, r7
	add	r4, r2, r4, lsl #2
	vld1.32	{d0}, [r4], r3
	vld1.32	{d1}, [r4]
	vmull.u8	q1, d0, d28
	vmlal.u8	q1, d1, d29
	asr	r4, r6, #16
	add	r6, r6, r7
	add	r4, r2, r4, lsl #2
	vld1.32	{d20}, [r4], r3
	vld1.32	{d21}, [r4]
	vmull.u8	q11, d20, d28
	vmlal.u8	q11, d21, d29
	vld1.16	{d4[0]}, [r1]!
	pld	[r1, #28]
	vld1.32	{d18}, [r0]
	pld	[r0, #112]
	vshll.u16	q0, d2, #8
	vmlsl.u16	q0, d2, d30
	vmlal.u16	q0, d3, d30
	vshll.u16	q10, d22, #8
	vmlsl.u16	q10, d22, d31
	vmlal.u16	q10, d23, d31
	vshrn.i32	d0, q0, #16
	vshrn.i32	d1, q10, #16
	vdup.16	d4, d4[0]
	vshr.u16	q15, q12, #8
	vadd.i16	q12, q12, q13
	vmovn.i16	d0, q0
	vuzp.8	d0, d1
	vuzp.8	d18, d19
	vuzp.8	d0, d1
	vuzp.8	d18, d19
	vmull.u8	q3, d0, d4
	vmull.u8	q8, d1, d4
	vrshr.u16	q10, q3, #8
	vrshr.u16	q11, q8, #8
	vraddhn.i16	d0, q10, q3
	vraddhn.i16	d1, q11, q8
	vqadd.u8	q0, q9, q0
	vuzp.8	d0, d1
	vuzp.8	d0, d1
	vst1.32	{d0}, [r0]!
	sub	ip, ip, #2
2:	subs	ip, ip, #4
	blt	3f
	asr	r8, r8, #14
	asr	r4, r6, #16
	add	r6, r6, r7
	add	r4, r2, r4, lsl #2
	vld1.32	{d0}, [r4], r3
	vld1.32	{d1}, [r4]
	vmull.u8	q1, d0, d28
	vmlal.u8	q1, d1, d29
	asr	r4, r6, #16
	add	r6, r6, r7
	add	r4, r2, r4, lsl #2
	vld1.32	{d20}, [r4], r3
	vld1.32	{d21}, [r4]
	vmull.u8	q11, d20, d28
	vmlal.u8	q11, d21, d29
	asr	r4, r6, #16
	add	r6, r6, r7
	add	r4, r2, r4, lsl #2
	vld1.32	{d4}, [r4], r3
	vld1.32	{d5}, [r4]
	vmull.u8	q3, d4, d28
	vmlal.u8	q3, d5, d29
	asr	r4, r6, #16
	add	r6, r6, r7
	add	r4, r2, r4, lsl #2
	vld1.32	{d16}, [r4], r3
	vld1.32	{d17}, [r4]
	vmull.u8	q9, d16, d28
	vmlal.u8	q9, d17, d29
	pld	[r4, r8]
	sub	r4, r4, r3
	vshll.u16	q0, d2, #8
	vmlsl.u16	q0, d2, d30
	vmlal.u16	q0, d3, d30
	vshll.u16	q10, d22, #8
	vmlsl.u16	q10, d22, d31
	vmlal.u16	q10, d23, d31
	vshr.u16	q15, q12, #8
	vshll.u16	q2, d6, #8
	vmlsl.u16	q2, d6, d30
	vmlal.u16	q2, d7, d30
	vshll.u16	q8, d18, #8
	vld1.32	{d22[0]}, [r1]!
	pld	[r1, #28]
	vld1.32	{d2-d3}, [r0]
	pld	[r0, #112]
	pld	[r4, r8]
	vmlsl.u16	q8, d18, d31
	vmlal.u16	q8, d19, d31
	vadd.i16	q12, q12, q13
	vshrn.i32	d0, q0, #16
	vshrn.i32	d1, q10, #16
	vshrn.i32	d4, q2, #16
	vshrn.i32	d5, q8, #16
	vdup.32	d22, d22[0]
	vshr.u16	q15, q12, #8
	vmovn.i16	d0, q0
	vmovn.i16	d1, q2
	vadd.i16	q12, q12, q13
	vuzp.8	d0, d1
	vuzp.8	d2, d3
	vuzp.8	d0, d1
	vuzp.8	d2, d3
	vmull.u8	q3, d0, d22
	vmull.u8	q8, d1, d22
	vrshr.u16	q9, q3, #8
	vrshr.u16	q10, q8, #8
	vraddhn.i16	d0, q9, q3
	vraddhn.i16	d1, q10, q8
	vqadd.u8	q0, q1, q0
	vuzp.8	d0, d1
	vuzp.8	d0, d1
	vst1.32	{d0-d1}, [r0]!
	subs	ip, ip, #4
	blt	3f
4:	asr	r4, r6, #16
	add	r6, r6, r7
	add	r4, r2, r4, lsl #2
	vld1.32	{d0}, [r4], r3
	vld1.32	{d1}, [r4]
	vmull.u8	q1, d0, d28
	vmlal.u8	q1, d1, d29
	asr	r4, r6, #16
	add	r6, r6, r7
	add	r4, r2, r4, lsl #2
	vld1.32	{d20}, [r4], r3
	vld1.32	{d21}, [r4]
	vmull.u8	q11, d20, d28
	vmlal.u8	q11, d21, d29
	asr	r4, r6, #16
	add	r6, r6, r7
	add	r4, r2, r4, lsl #2
	vld1.32	{d4}, [r4], r3
	vld1.32	{d5}, [r4]
	vmull.u8	q3, d4, d28
	vmlal.u8	q3, d5, d29
	asr	r4, r6, #16
	add	r6, r6, r7
	add	r4, r2, r4, lsl #2
	vld1.32	{d16}, [r4], r3
	vld1.32	{d17}, [r4]
	vmull.u8	q9, d16, d28
	vmlal.u8	q9, d17, d29
	pld	[r4, r8]
	sub	r4, r4, r3
	vshll.u16	q0, d2, #8
	vmlsl.u16	q0, d2, d30
	vmlal.u16	q0, d3, d30
	vshll.u16	q10, d22, #8
	vmlsl.u16	q10, d22, d31
	vmlal.u16	q10, d23, d31
	vshr.u16	q15, q12, #8
	vshll.u16	q2, d6, #8
	vmlsl.u16	q2, d6, d30
	vmlal.u16	q2, d7, d30
	vshll.u16	q8, d18, #8
	vld1.32	{d22[0]}, [r1]!
	pld	[r1, #28]
	vld1.32	{d2-d3}, [r0]
	pld	[r0, #112]
	pld	[r4, r8]
	vmlsl.u16	q8, d18, d31
	vmlal.u16	q8, d19, d31
	vadd.i16	q12, q12, q13
	vshrn.i32	d0, q0, #16
	vshrn.i32	d1, q10, #16
	vshrn.i32	d4, q2, #16
	vshrn.i32	d5, q8, #16
	vdup.32	d22, d22[0]
	vshr.u16	q15, q12, #8
	vmovn.i16	d0, q0
	vmovn.i16	d1, q2
	vadd.i16	q12, q12, q13
	vuzp.8	d0, d1
	vuzp.8	d2, d3
	vuzp.8	d0, d1
	vuzp.8	d2, d3
	vmull.u8	q3, d0, d22
	vmull.u8	q8, d1, d22
	vrshr.u16	q9, q3, #8
	vrshr.u16	q10, q8, #8
	vraddhn.i16	d0, q9, q3
	vraddhn.i16	d1, q10, q8
	vqadd.u8	q0, q1, q0
	vuzp.8	d0, d1
	vuzp.8	d0, d1
	vst1.32	{d0-d1}, [r0]!
	subs	ip, ip, #4
	bge	4b
3:	tst	ip, #2
	beq	5f
	asr	r4, r6, #16
	add	r6, r6, r7
	add	r4, r2, r4, lsl #2
	vld1.32	{d0}, [r4], r3
	vld1.32	{d1}, [r4]
	vmull.u8	q1, d0, d28
	vmlal.u8	q1, d1, d29
	asr	r4, r6, #16
	add	r6, r6, r7
	add	r4, r2, r4, lsl #2
	vld1.32	{d20}, [r4], r3
	vld1.32	{d21}, [r4]
	vmull.u8	q11, d20, d28
	vmlal.u8	q11, d21, d29
	vld1.16	{d4[0]}, [r1]!
	pld	[r1, #28]
	vld1.32	{d18}, [r0]
	pld	[r0, #112]
	vshll.u16	q0, d2, #8
	vmlsl.u16	q0, d2, d30
	vmlal.u16	q0, d3, d30
	vshll.u16	q10, d22, #8
	vmlsl.u16	q10, d22, d31
	vmlal.u16	q10, d23, d31
	vshrn.i32	d0, q0, #16
	vshrn.i32	d1, q10, #16
	vdup.16	d4, d4[0]
	vshr.u16	q15, q12, #8
	vadd.i16	q12, q12, q13
	vmovn.i16	d0, q0
	vuzp.8	d0, d1
	vuzp.8	d18, d19
	vuzp.8	d0, d1
	vuzp.8	d18, d19
	vmull.u8	q3, d0, d4
	vmull.u8	q8, d1, d4
	vrshr.u16	q10, q3, #8
	vrshr.u16	q11, q8, #8
	vraddhn.i16	d0, q10, q3
	vraddhn.i16	d1, q11, q8
	vqadd.u8	q0, q9, q0
	vuzp.8	d0, d1
	vuzp.8	d0, d1
	vst1.32	{d0}, [r0]!
5:	tst	ip, #1
	beq	0f
	asr	r4, r6, #16
	add	r6, r6, r7
	add	r4, r2, r4, lsl #2
	vld1.32	{d0}, [r4], r3
	vld1.32	{d1}, [r4]
	vld1.8	{d4[0]}, [r1]!
	pld	[r1, #28]
	vld1.32	{d18[0]}, [r0]
	pld	[r0, #112]
	vmull.u8	q1, d0, d28
	vmlal.u8	q1, d1, d29
	vshll.u16	q0, d2, #8
	vmlsl.u16	q0, d2, d30
	vmlal.u16	q0, d3, d30
	vdup.8	d4, d4[0]
	vshrn.i32	d0, q0, #16
	vmovn.i16	d0, q0
	vuzp.8	d0, d1
	vuzp.8	d18, d19
	vuzp.8	d0, d1
	vuzp.8	d18, d19
	vmull.u8	q3, d0, d4
	vmull.u8	q8, d1, d4
	vrshr.u16	q10, q3, #8
	vrshr.u16	q11, q8, #8
	vraddhn.i16	d0, q10, q3
	vraddhn.i16	d1, q11, q8
	vqadd.u8	q0, q9, q0
	vuzp.8	d0, d1
	vuzp.8	d0, d1
	vst1.32	{d0[0]}, [r0, :32]!
0:	pop	{r4, r5, r6, r7, r8, r9, sl, ip}
	bx	lr
//	format elf32-littlearm

.global _pixman_scaled_nearest_scanline_0565_8_0565_OVER_asm_neon
_pixman_scaled_nearest_scanline_0565_8_0565_OVER_asm_neon:
	ldr	ip, [sp]
	push	{r4, r5, r6, lr}
	ldr	lr, [sp, #20]
	vstmdb	sp!, {d8-d15}
	mov	r6, r1
	cmp	r0, #8
	blt	0f
	tst	r6, #15
	beq	1f
	tst	r6, #2
	beq	2f
	asr	r4, r3, #16
	add	r3, r3, ip
	add	r4, r2, r4, lsl #1
	vld1.16	{d8[1]}, [r4, :16]
	vld1.8	{d15[1]}, [lr]!
	vld1.16	{d10[1]}, [r6]!
	sub	r0, r0, #1
2:	tst	r6, #4
	beq	3f
	asr	r4, r3, #16
	add	r3, r3, ip
	add	r4, r2, r4, lsl #1
	vld1.16	{d8[2]}, [r4, :16]
	asr	r4, r3, #16
	add	r3, r3, ip
	add	r4, r2, r4, lsl #1
	vld1.16	{d8[3]}, [r4, :16]
	vld1.8	{d15[2]}, [lr]!
	vld1.8	{d15[3]}, [lr]!
	vld1.16	{d10[2]}, [r6]!
	vld1.16	{d10[3]}, [r6]!
	sub	r0, r0, #2
3:	tst	r6, #8
	beq	4f
	asr	r4, r3, #16
	add	r3, r3, ip
	add	r4, r2, r4, lsl #1
	asr	r5, r3, #16
	add	r3, r3, ip
	add	r5, r2, r5, lsl #1
	vld1.16	{d9[0]}, [r4, :16]
	asr	r4, r3, #16
	add	r3, r3, ip
	add	r4, r2, r4, lsl #1
	vld1.16	{d9[1]}, [r5, :16]
	asr	r5, r3, #16
	add	r3, r3, ip
	add	r5, r2, r5, lsl #1
	vld1.16	{d9[2]}, [r4, :16]
	vld1.16	{d9[3]}, [r5, :16]
	vld1.8	{d15[4]}, [lr]!
	vld1.8	{d15[5]}, [lr]!
	vld1.8	{d15[6]}, [lr]!
	vld1.8	{d15[7]}, [lr]!
	vld1.16	{d11}, [r6, :64]!
	sub	r0, r0, #4
4:	vshrn.i16	d2, q4, #8
	vshrn.i16	d1, q4, #3
	vsli.16	q4, q4, #5
	vsri.8	d2, d2, #5
	vsri.8	d1, d1, #6
	vshrn.i16	d0, q4, #2
	vshrn.i16	d6, q5, #8
	vshrn.i16	d5, q5, #3
	vsli.16	q5, q5, #5
	vsri.8	d6, d6, #5
	vsri.8	d5, d5, #6
	vshrn.i16	d4, q5, #2
	vmvn	d7, d15
	vmull.u8	q6, d15, d2
	vmull.u8	q5, d15, d1
	vmull.u8	q4, d15, d0
	vmull.u8	q8, d7, d4
	vmull.u8	q9, d7, d5
	vmull.u8	q13, d7, d6
	vrshr.u16	q12, q6, #8
	vrshr.u16	q11, q5, #8
	vrshr.u16	q10, q4, #8
	vraddhn.i16	d2, q6, q12
	vraddhn.i16	d1, q5, q11
	vraddhn.i16	d0, q4, q10
	vrshr.u16	q14, q8, #8
	vrshr.u16	q15, q9, #8
	vrshr.u16	q12, q13, #8
	vraddhn.i16	d28, q14, q8
	vraddhn.i16	d29, q15, q9
	vraddhn.i16	d30, q12, q13
	vqadd.u8	q0, q0, q14
	vqadd.u8	q1, q1, q15
	vshll.i8	q15, d1, #8
	vshll.i8	q14, d2, #8
	vshll.i8	q3, d0, #8
	vsri.16	q14, q15, #5
	vsri.16	q14, q3, #11
	tst	r1, #2
	beq	5f
	vst1.16	{d28[1]}, [r1]!
5:	tst	r1, #4
	beq	6f
	vst1.16	{d28[2]}, [r1]!
	vst1.16	{d28[3]}, [r1]!
6:	tst	r1, #8
	beq	1f
	vst1.16	{d29}, [r1, :64]!
1:	subs	r0, r0, #8
	blt	7f
	vld1.16	{d10-d11}, [r6, :128]!
	asr	r4, r3, #16
	add	r3, r3, ip
	add	r4, r2, r4, lsl #1
	asr	r5, r3, #16
	add	r3, r3, ip
	add	r5, r2, r5, lsl #1
	vld1.16	{d8[0]}, [r4, :16]
	asr	r4, r3, #16
	add	r3, r3, ip
	add	r4, r2, r4, lsl #1
	vld1.16	{d8[1]}, [r5, :16]
	asr	r5, r3, #16
	add	r3, r3, ip
	add	r5, r2, r5, lsl #1
	vld1.16	{d8[2]}, [r4, :16]
	vld1.16	{d8[3]}, [r5, :16]
	asr	r4, r3, #16
	add	r3, r3, ip
	add	r4, r2, r4, lsl #1
	asr	r5, r3, #16
	add	r3, r3, ip
	add	r5, r2, r5, lsl #1
	vld1.16	{d9[0]}, [r4, :16]
	asr	r4, r3, #16
	add	r3, r3, ip
	add	r4, r2, r4, lsl #1
	vld1.16	{d9[1]}, [r5, :16]
	asr	r5, r3, #16
	add	r3, r3, ip
	add	r5, r2, r5, lsl #1
	vld1.16	{d9[2]}, [r4, :16]
	vld1.16	{d9[3]}, [r5, :16]
	vld1.8	{d15}, [lr]!
	vshrn.i16	d2, q4, #8
	vshrn.i16	d1, q4, #3
	vsli.16	q4, q4, #5
	vsri.8	d2, d2, #5
	vsri.8	d1, d1, #6
	vshrn.i16	d0, q4, #2
	vshrn.i16	d6, q5, #8
	vshrn.i16	d5, q5, #3
	vsli.16	q5, q5, #5
	vsri.8	d6, d6, #5
	vsri.8	d5, d5, #6
	vshrn.i16	d4, q5, #2
	vmvn	d7, d15
	vmull.u8	q6, d15, d2
	vmull.u8	q5, d15, d1
	vmull.u8	q4, d15, d0
	vmull.u8	q8, d7, d4
	vmull.u8	q9, d7, d5
	vmull.u8	q13, d7, d6
	vrshr.u16	q12, q6, #8
	vrshr.u16	q11, q5, #8
	vrshr.u16	q10, q4, #8
	vraddhn.i16	d2, q6, q12
	vraddhn.i16	d1, q5, q11
	vraddhn.i16	d0, q4, q10
	subs	r0, r0, #8
	blt	8f
9:	vld1.8	{d15}, [lr]!
	vrshr.u16	q14, q8, #8
	vrshr.u16	q15, q9, #8
	vrshr.u16	q12, q13, #8
	vraddhn.i16	d28, q14, q8
	vraddhn.i16	d29, q15, q9
	vraddhn.i16	d30, q12, q13
	vqadd.u8	q0, q0, q14
	vqadd.u8	q1, q1, q15
	vshll.i8	q15, d1, #8
	vshll.i8	q14, d2, #8
	vshll.i8	q3, d0, #8
	vsri.16	q14, q15, #5
	vsri.16	q14, q3, #11
	asr	r4, r3, #16
	add	r3, r3, ip
	add	r4, r2, r4, lsl #1
	asr	r5, r3, #16
	add	r3, r3, ip
	add	r5, r2, r5, lsl #1
	vld1.16	{d8[0]}, [r4, :16]
	asr	r4, r3, #16
	add	r3, r3, ip
	add	r4, r2, r4, lsl #1
	vld1.16	{d8[1]}, [r5, :16]
	asr	r5, r3, #16
	add	r3, r3, ip
	add	r5, r2, r5, lsl #1
	vld1.16	{d8[2]}, [r4, :16]
	vld1.16	{d8[3]}, [r5, :16]
	asr	r4, r3, #16
	add	r3, r3, ip
	add	r4, r2, r4, lsl #1
	asr	r5, r3, #16
	add	r3, r3, ip
	add	r5, r2, r5, lsl #1
	vld1.16	{d9[0]}, [r4, :16]
	asr	r4, r3, #16
	add	r3, r3, ip
	add	r4, r2, r4, lsl #1
	vld1.16	{d9[1]}, [r5, :16]
	asr	r5, r3, #16
	add	r3, r3, ip
	add	r5, r2, r5, lsl #1
	vld1.16	{d9[2]}, [r4, :16]
	vld1.16	{d9[3]}, [r5, :16]
	vld1.16	{d10-d11}, [r6, :128]!
	vshrn.i16	d2, q4, #8
	vshrn.i16	d1, q4, #3
	vsli.16	q4, q4, #5
	vsri.8	d2, d2, #5
	vsri.8	d1, d1, #6
	vshrn.i16	d0, q4, #2
	vshrn.i16	d6, q5, #8
	vshrn.i16	d5, q5, #3
	vsli.16	q5, q5, #5
	vsri.8	d6, d6, #5
	vsri.8	d5, d5, #6
	vshrn.i16	d4, q5, #2
	vmvn	d7, d15
	vmull.u8	q6, d15, d2
	vmull.u8	q5, d15, d1
	vmull.u8	q4, d15, d0
	vmull.u8	q8, d7, d4
	vmull.u8	q9, d7, d5
	vmull.u8	q13, d7, d6
	vrshr.u16	q12, q6, #8
	vrshr.u16	q11, q5, #8
	vrshr.u16	q10, q4, #8
	vraddhn.i16	d2, q6, q12
	vraddhn.i16	d1, q5, q11
	vraddhn.i16	d0, q4, q10
	vst1.16	{d28-d29}, [r1, :128]!
	subs	r0, r0, #8
	bge	9b
8:	vrshr.u16	q14, q8, #8
	vrshr.u16	q15, q9, #8
	vrshr.u16	q12, q13, #8
	vraddhn.i16	d28, q14, q8
	vraddhn.i16	d29, q15, q9
	vraddhn.i16	d30, q12, q13
	vqadd.u8	q0, q0, q14
	vqadd.u8	q1, q1, q15
	vshll.i8	q15, d1, #8
	vshll.i8	q14, d2, #8
	vshll.i8	q3, d0, #8
	vsri.16	q14, q15, #5
	vsri.16	q14, q3, #11
	vst1.16	{d28-d29}, [r1, :128]!
7:	tst	r0, #7
	beq	10f
	tst	r0, #4
	beq	11f
	asr	r4, r3, #16
	add	r3, r3, ip
	add	r4, r2, r4, lsl #1
	asr	r5, r3, #16
	add	r3, r3, ip
	add	r5, r2, r5, lsl #1
	vld1.16	{d9[0]}, [r4, :16]
	asr	r4, r3, #16
	add	r3, r3, ip
	add	r4, r2, r4, lsl #1
	vld1.16	{d9[1]}, [r5, :16]
	asr	r5, r3, #16
	add	r3, r3, ip
	add	r5, r2, r5, lsl #1
	vld1.16	{d9[2]}, [r4, :16]
	vld1.16	{d9[3]}, [r5, :16]
	vld1.8	{d15[4]}, [lr]!
	vld1.8	{d15[5]}, [lr]!
	vld1.8	{d15[6]}, [lr]!
	vld1.8	{d15[7]}, [lr]!
	vld1.16	{d11}, [r6, :64]!
11:	tst	r0, #2
	beq	12f
	asr	r4, r3, #16
	add	r3, r3, ip
	add	r4, r2, r4, lsl #1
	vld1.16	{d8[2]}, [r4, :16]
	asr	r4, r3, #16
	add	r3, r3, ip
	add	r4, r2, r4, lsl #1
	vld1.16	{d8[3]}, [r4, :16]
	vld1.8	{d15[2]}, [lr]!
	vld1.8	{d15[3]}, [lr]!
	vld1.16	{d10[2]}, [r6]!
	vld1.16	{d10[3]}, [r6]!
12:	tst	r0, #1
	beq	13f
	asr	r4, r3, #16
	add	r3, r3, ip
	add	r4, r2, r4, lsl #1
	vld1.16	{d8[1]}, [r4, :16]
	vld1.8	{d15[1]}, [lr]!
	vld1.16	{d10[1]}, [r6]!
13:	vshrn.i16	d2, q4, #8
	vshrn.i16	d1, q4, #3
	vsli.16	q4, q4, #5
	vsri.8	d2, d2, #5
	vsri.8	d1, d1, #6
	vshrn.i16	d0, q4, #2
	vshrn.i16	d6, q5, #8
	vshrn.i16	d5, q5, #3
	vsli.16	q5, q5, #5
	vsri.8	d6, d6, #5
	vsri.8	d5, d5, #6
	vshrn.i16	d4, q5, #2
	vmvn	d7, d15
	vmull.u8	q6, d15, d2
	vmull.u8	q5, d15, d1
	vmull.u8	q4, d15, d0
	vmull.u8	q8, d7, d4
	vmull.u8	q9, d7, d5
	vmull.u8	q13, d7, d6
	vrshr.u16	q12, q6, #8
	vrshr.u16	q11, q5, #8
	vrshr.u16	q10, q4, #8
	vraddhn.i16	d2, q6, q12
	vraddhn.i16	d1, q5, q11
	vraddhn.i16	d0, q4, q10
	vrshr.u16	q14, q8, #8
	vrshr.u16	q15, q9, #8
	vrshr.u16	q12, q13, #8
	vraddhn.i16	d28, q14, q8
	vraddhn.i16	d29, q15, q9
	vraddhn.i16	d30, q12, q13
	vqadd.u8	q0, q0, q14
	vqadd.u8	q1, q1, q15
	vshll.i8	q15, d1, #8
	vshll.i8	q14, d2, #8
	vshll.i8	q3, d0, #8
	vsri.16	q14, q15, #5
	vsri.16	q14, q3, #11
	tst	r0, #4
	beq	14f
	vst1.16	{d29}, [r1, :64]!
14:	tst	r0, #2
	beq	15f
	vst1.16	{d28[2]}, [r1]!
	vst1.16	{d28[3]}, [r1]!
15:	tst	r0, #1
	beq	10f
	vst1.16	{d28[1]}, [r1]!
10:	vldmia	sp!, {d8-d15}
	pop	{r4, r5, r6, pc}
0:	tst	r0, #7
	beq	16f
	tst	r0, #4
	beq	17f
	asr	r4, r3, #16
	add	r3, r3, ip
	add	r4, r2, r4, lsl #1
	asr	r5, r3, #16
	add	r3, r3, ip
	add	r5, r2, r5, lsl #1
	vld1.16	{d9[0]}, [r4, :16]
	asr	r4, r3, #16
	add	r3, r3, ip
	add	r4, r2, r4, lsl #1
	vld1.16	{d9[1]}, [r5, :16]
	asr	r5, r3, #16
	add	r3, r3, ip
	add	r5, r2, r5, lsl #1
	vld1.16	{d9[2]}, [r4, :16]
	vld1.16	{d9[3]}, [r5, :16]
	vld1.8	{d15[4]}, [lr]!
	vld1.8	{d15[5]}, [lr]!
	vld1.8	{d15[6]}, [lr]!
	vld1.8	{d15[7]}, [lr]!
	vld1.16	{d11}, [r6]!
17:	tst	r0, #2
	beq	18f
	asr	r4, r3, #16
	add	r3, r3, ip
	add	r4, r2, r4, lsl #1
	vld1.16	{d8[2]}, [r4, :16]
	asr	r4, r3, #16
	add	r3, r3, ip
	add	r4, r2, r4, lsl #1
	vld1.16	{d8[3]}, [r4, :16]
	vld1.8	{d15[2]}, [lr]!
	vld1.8	{d15[3]}, [lr]!
	vld1.16	{d10[2]}, [r6]!
	vld1.16	{d10[3]}, [r6]!
18:	tst	r0, #1
	beq	19f
	asr	r4, r3, #16
	add	r3, r3, ip
	add	r4, r2, r4, lsl #1
	vld1.16	{d8[1]}, [r4, :16]
	vld1.8	{d15[1]}, [lr]!
	vld1.16	{d10[1]}, [r6]!
19:	vshrn.i16	d2, q4, #8
	vshrn.i16	d1, q4, #3
	vsli.16	q4, q4, #5
	vsri.8	d2, d2, #5
	vsri.8	d1, d1, #6
	vshrn.i16	d0, q4, #2
	vshrn.i16	d6, q5, #8
	vshrn.i16	d5, q5, #3
	vsli.16	q5, q5, #5
	vsri.8	d6, d6, #5
	vsri.8	d5, d5, #6
	vshrn.i16	d4, q5, #2
	vmvn	d7, d15
	vmull.u8	q6, d15, d2
	vmull.u8	q5, d15, d1
	vmull.u8	q4, d15, d0
	vmull.u8	q8, d7, d4
	vmull.u8	q9, d7, d5
	vmull.u8	q13, d7, d6
	vrshr.u16	q12, q6, #8
	vrshr.u16	q11, q5, #8
	vrshr.u16	q10, q4, #8
	vraddhn.i16	d2, q6, q12
	vraddhn.i16	d1, q5, q11
	vraddhn.i16	d0, q4, q10
	vrshr.u16	q14, q8, #8
	vrshr.u16	q15, q9, #8
	vrshr.u16	q12, q13, #8
	vraddhn.i16	d28, q14, q8
	vraddhn.i16	d29, q15, q9
	vraddhn.i16	d30, q12, q13
	vqadd.u8	q0, q0, q14
	vqadd.u8	q1, q1, q15
	vshll.i8	q15, d1, #8
	vshll.i8	q14, d2, #8
	vshll.i8	q3, d0, #8
	vsri.16	q14, q15, #5
	vsri.16	q14, q3, #11
	tst	r0, #4
	beq	20f
	vst1.16	{d29}, [r1]!
20:	tst	r0, #2
	beq	21f
	vst1.16	{d28[2]}, [r1]!
	vst1.16	{d28[3]}, [r1]!
21:	tst	r0, #1
	beq	16f
	vst1.16	{d28[1]}, [r1]!
16:	vldmia	sp!, {d8-d15}
	pop	{r4, r5, r6, pc}

.global _pixman_scaled_nearest_scanline_0565_8888_SRC_asm_neon
_pixman_scaled_nearest_scanline_0565_8888_SRC_asm_neon:
	ldr	ip, [sp]
	push	{r4, r5, r6, lr}
	mov	r6, r1
	cmp	r0, #8
	blt	0f
	tst	r6, #15
	beq	1f
	tst	r6, #4
	beq	2f
	asr	r4, r3, #16
	add	r3, r3, ip
	add	r4, r2, r4, lsl #1
	vld1.16	{d0[1]}, [r4, :16]
	add	r6, r6, #4
	sub	r0, r0, #1
2:	tst	r6, #8
	beq	3f
	asr	r4, r3, #16
	add	r3, r3, ip
	add	r4, r2, r4, lsl #1
	vld1.16	{d0[2]}, [r4, :16]
	asr	r4, r3, #16
	add	r3, r3, ip
	add	r4, r2, r4, lsl #1
	vld1.16	{d0[3]}, [r4, :16]
	add	r6, r6, #8
	sub	r0, r0, #2
3:	asr	r4, r3, #16
	add	r3, r3, ip
	add	r4, r2, r4, lsl #1
	asr	r5, r3, #16
	add	r3, r3, ip
	add	r5, r2, r5, lsl #1
	vld1.16	{d1[0]}, [r4, :16]
	asr	r4, r3, #16
	add	r3, r3, ip
	add	r4, r2, r4, lsl #1
	vld1.16	{d1[1]}, [r5, :16]
	asr	r5, r3, #16
	add	r3, r3, ip
	add	r5, r2, r5, lsl #1
	vld1.16	{d1[2]}, [r4, :16]
	vld1.16	{d1[3]}, [r5, :16]
	add	r6, r6, #16
	sub	r0, r0, #4
	vshrn.i16	d30, q0, #8
	vshrn.i16	d29, q0, #3
	vsli.16	q0, q0, #5
	vmov.i8	d31, #255
	vsri.8	d30, d30, #5
	vsri.8	d29, d29, #6
	vshrn.i16	d28, q0, #2
	vzip.8	d28, d30
	vzip.8	d29, d31
	vzip.8	d30, d31
	vzip.8	d28, d29
	tst	r1, #4
	beq	4f
	vst1.32	{d28[1]}, [r1]!
4:	tst	r1, #8
	beq	5f
	vst1.32	{d29}, [r1, :64]!
5:	vst1.32	{d30-d31}, [r1, :128]!
1:	subs	r0, r0, #8
	blt	6f
	asr	r4, r3, #16
	add	r3, r3, ip
	add	r4, r2, r4, lsl #1
	asr	r5, r3, #16
	add	r3, r3, ip
	add	r5, r2, r5, lsl #1
	vld1.16	{d0[0]}, [r4, :16]
	asr	r4, r3, #16
	add	r3, r3, ip
	add	r4, r2, r4, lsl #1
	vld1.16	{d0[1]}, [r5, :16]
	asr	r5, r3, #16
	add	r3, r3, ip
	add	r5, r2, r5, lsl #1
	vld1.16	{d0[2]}, [r4, :16]
	vld1.16	{d0[3]}, [r5, :16]
	asr	r4, r3, #16
	add	r3, r3, ip
	add	r4, r2, r4, lsl #1
	asr	r5, r3, #16
	add	r3, r3, ip
	add	r5, r2, r5, lsl #1
	vld1.16	{d1[0]}, [r4, :16]
	asr	r4, r3, #16
	add	r3, r3, ip
	add	r4, r2, r4, lsl #1
	vld1.16	{d1[1]}, [r5, :16]
	asr	r5, r3, #16
	add	r3, r3, ip
	add	r5, r2, r5, lsl #1
	vld1.16	{d1[2]}, [r4, :16]
	vld1.16	{d1[3]}, [r5, :16]
	vshrn.i16	d30, q0, #8
	vshrn.i16	d29, q0, #3
	vsli.16	q0, q0, #5
	vmov.i8	d31, #255
	vsri.8	d30, d30, #5
	vsri.8	d29, d29, #6
	vshrn.i16	d28, q0, #2
	subs	r0, r0, #8
	blt	7f
8:	vst4.8	{d28-d31}, [r1, :128]!
	asr	r4, r3, #16
	add	r3, r3, ip
	add	r4, r2, r4, lsl #1
	asr	r5, r3, #16
	add	r3, r3, ip
	add	r5, r2, r5, lsl #1
	vld1.16	{d0[0]}, [r4, :16]
	asr	r4, r3, #16
	add	r3, r3, ip
	add	r4, r2, r4, lsl #1
	vld1.16	{d0[1]}, [r5, :16]
	asr	r5, r3, #16
	add	r3, r3, ip
	add	r5, r2, r5, lsl #1
	vld1.16	{d0[2]}, [r4, :16]
	vld1.16	{d0[3]}, [r5, :16]
	asr	r4, r3, #16
	add	r3, r3, ip
	add	r4, r2, r4, lsl #1
	asr	r5, r3, #16
	add	r3, r3, ip
	add	r5, r2, r5, lsl #1
	vld1.16	{d1[0]}, [r4, :16]
	asr	r4, r3, #16
	add	r3, r3, ip
	add	r4, r2, r4, lsl #1
	vld1.16	{d1[1]}, [r5, :16]
	asr	r5, r3, #16
	add	r3, r3, ip
	add	r5, r2, r5, lsl #1
	vld1.16	{d1[2]}, [r4, :16]
	vld1.16	{d1[3]}, [r5, :16]
	vshrn.i16	d30, q0, #8
	vshrn.i16	d29, q0, #3
	vsli.16	q0, q0, #5
	vmov.i8	d31, #255
	vsri.8	d30, d30, #5
	vsri.8	d29, d29, #6
	vshrn.i16	d28, q0, #2
	subs	r0, r0, #8
	bge	8b
7:	vst4.8	{d28-d31}, [r1, :128]!
6:	tst	r0, #7
	beq	9f
	tst	r0, #4
	beq	10f
	asr	r4, r3, #16
	add	r3, r3, ip
	add	r4, r2, r4, lsl #1
	asr	r5, r3, #16
	add	r3, r3, ip
	add	r5, r2, r5, lsl #1
	vld1.16	{d1[0]}, [r4, :16]
	asr	r4, r3, #16
	add	r3, r3, ip
	add	r4, r2, r4, lsl #1
	vld1.16	{d1[1]}, [r5, :16]
	asr	r5, r3, #16
	add	r3, r3, ip
	add	r5, r2, r5, lsl #1
	vld1.16	{d1[2]}, [r4, :16]
	vld1.16	{d1[3]}, [r5, :16]
10:	tst	r0, #2
	beq	11f
	asr	r4, r3, #16
	add	r3, r3, ip
	add	r4, r2, r4, lsl #1
	vld1.16	{d0[2]}, [r4, :16]
	asr	r4, r3, #16
	add	r3, r3, ip
	add	r4, r2, r4, lsl #1
	vld1.16	{d0[3]}, [r4, :16]
11:	tst	r0, #1
	beq	12f
	asr	r4, r3, #16
	add	r3, r3, ip
	add	r4, r2, r4, lsl #1
	vld1.16	{d0[1]}, [r4, :16]
12:	vshrn.i16	d30, q0, #8
	vshrn.i16	d29, q0, #3
	vsli.16	q0, q0, #5
	vmov.i8	d31, #255
	vsri.8	d30, d30, #5
	vsri.8	d29, d29, #6
	vshrn.i16	d28, q0, #2
	vzip.8	d28, d30
	vzip.8	d29, d31
	vzip.8	d30, d31
	vzip.8	d28, d29
	tst	r0, #4
	beq	13f
	vst1.32	{d30-d31}, [r1, :128]!
13:	tst	r0, #2
	beq	14f
	vst1.32	{d29}, [r1, :64]!
14:	tst	r0, #1
	beq	9f
	vst1.32	{d28[1]}, [r1]!
9:	pop	{r4, r5, r6, pc}
0:	tst	r0, #7
	beq	15f
	tst	r0, #4
	beq	16f
	asr	r4, r3, #16
	add	r3, r3, ip
	add	r4, r2, r4, lsl #1
	asr	r5, r3, #16
	add	r3, r3, ip
	add	r5, r2, r5, lsl #1
	vld1.16	{d1[0]}, [r4, :16]
	asr	r4, r3, #16
	add	r3, r3, ip
	add	r4, r2, r4, lsl #1
	vld1.16	{d1[1]}, [r5, :16]
	asr	r5, r3, #16
	add	r3, r3, ip
	add	r5, r2, r5, lsl #1
	vld1.16	{d1[2]}, [r4, :16]
	vld1.16	{d1[3]}, [r5, :16]
16:	tst	r0, #2
	beq	17f
	asr	r4, r3, #16
	add	r3, r3, ip
	add	r4, r2, r4, lsl #1
	vld1.16	{d0[2]}, [r4, :16]
	asr	r4, r3, #16
	add	r3, r3, ip
	add	r4, r2, r4, lsl #1
	vld1.16	{d0[3]}, [r4, :16]
17:	tst	r0, #1
	beq	18f
	asr	r4, r3, #16
	add	r3, r3, ip
	add	r4, r2, r4, lsl #1
	vld1.16	{d0[1]}, [r4, :16]
18:	vshrn.i16	d30, q0, #8
	vshrn.i16	d29, q0, #3
	vsli.16	q0, q0, #5
	vmov.i8	d31, #255
	vsri.8	d30, d30, #5
	vsri.8	d29, d29, #6
	vshrn.i16	d28, q0, #2
	vzip.8	d28, d30
	vzip.8	d29, d31
	vzip.8	d30, d31
	vzip.8	d28, d29
	tst	r0, #4
	beq	19f
	vst1.32	{d30-d31}, [r1]!
19:	tst	r0, #2
	beq	20f
	vst1.32	{d29}, [r1]!
20:	tst	r0, #1
	beq	15f
	vst1.32	{d28[1]}, [r1]!
15:	pop	{r4, r5, r6, pc}

.global _pixman_composite_over_8888_0565_asm_neon
_pixman_composite_over_8888_0565_asm_neon:
	push	{r4, r5, r6, r7, r8, r9, sl, fp, ip, lr}
	ldr	r4, [sp, #40]
	mov	sl, #0
	ldr	r5, [sp, #44]
	mov	r6, r2
	mov	fp, r4
	mov	ip, r6
	mov	lr, r7
	lsl	r9, r1, #4
	sub	r9, r9, #11
	subs	r1, r1, #1
	mov	r7, r0
	blt	0f
	cmp	r0, #16
	blt	1f
16:	tst	r6, #15
	beq	2f
	tst	r6, #2
	beq	3f
	vld1.32	{d0[1]}, [r4]!
	vld1.16	{d4[1]}, [r6]!
	add	sl, sl, #1
	sub	r0, r0, #1
3:	tst	r6, #4
	beq	4f
	vld1.32	{d1}, [r4]!
	vld1.16	{d4[2]}, [r6]!
	vld1.16	{d4[3]}, [r6]!
	add	sl, sl, #2
	sub	r0, r0, #2
4:	tst	r6, #8
	beq	5f
	vld1.32	{d2-d3}, [r4]!
	vld1.16	{d5}, [r6, :64]!
	add	sl, sl, #4
	sub	r0, r0, #4
5:	vuzp.8	d0, d1
	vuzp.8	d2, d3
	vuzp.8	d1, d3
	vuzp.8	d0, d2
	vshrn.i16	d6, q2, #8
	vshrn.i16	d7, q2, #3
	vsli.16	q2, q2, #5
	vsri.8	d6, d6, #5
	vmvn	d3, d3
	vsri.8	d7, d7, #6
	vshrn.i16	d30, q2, #2
	vmull.u8	q10, d3, d6
	vmull.u8	q11, d3, d7
	vmull.u8	q12, d3, d30
	vrshr.u16	q13, q10, #8
	vrshr.u16	q3, q11, #8
	vrshr.u16	q15, q12, #8
	vraddhn.i16	d20, q10, q13
	vraddhn.i16	d23, q11, q3
	vraddhn.i16	d22, q12, q15
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r7
	pld	[fp, sl, lsl #2]
	pld	[ip, sl, lsl #1]
	subge	sl, sl, r7
	subsge	r9, r9, #16
	ldrbge	r8, [fp, r5, lsl #2]!
	ldrbge	r8, [ip, r3, lsl #1]!
	vqadd.u8	d16, d2, d20
	vqadd.u8	q9, q0, q11
	vshll.i8	q14, d16, #8
	vshll.i8	q8, d19, #8
	vshll.i8	q9, d18, #8
	vsri.16	q14, q8, #5
	vsri.16	q14, q9, #11
	tst	r2, #2
	beq	6f
	vst1.16	{d28[1]}, [r2]!
6:	tst	r2, #4
	beq	7f
	vst1.16	{d28[2]}, [r2]!
	vst1.16	{d28[3]}, [r2]!
7:	tst	r2, #8
	beq	2f
	vst1.16	{d29}, [r2, :64]!
2:	vld1.16	{d4-d5}, [r6, :128]!
	vld4.8	{d0-d3}, [r4]!
	add	sl, sl, #8
	vshrn.i16	d6, q2, #8
	vshrn.i16	d7, q2, #3
	vsli.16	q2, q2, #5
	vsri.8	d6, d6, #5
	vmvn	d3, d3
	vsri.8	d7, d7, #6
	vshrn.i16	d30, q2, #2
	vmull.u8	q10, d3, d6
	vmull.u8	q11, d3, d7
	vmull.u8	q12, d3, d30
	vrshr.u16	q13, q10, #8
	vrshr.u16	q3, q11, #8
	vrshr.u16	q15, q12, #8
	vraddhn.i16	d20, q10, q13
	vraddhn.i16	d23, q11, q3
	vraddhn.i16	d22, q12, q15
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r7
	pld	[fp, sl, lsl #2]
	pld	[ip, sl, lsl #1]
	subge	sl, sl, r7
	subsge	r9, r9, #16
	ldrbge	r8, [fp, r5, lsl #2]!
	ldrbge	r8, [ip, r3, lsl #1]!
	subs	r0, r0, #16
	blt	8f
9:	vqadd.u8	d16, d2, d20
	vld1.16	{d4-d5}, [r6, :128]!
	vqadd.u8	q9, q0, q11
	vshrn.i16	d6, q2, #8
	vld4.8	{d0-d3}, [r4]!
	vshrn.i16	d7, q2, #3
	vsli.16	q2, q2, #5
	vshll.i8	q14, d16, #8
	add	sl, sl, #8
	vshll.i8	q8, d19, #8
	tst	r9, #15
	vsri.8	d6, d6, #5
	addne	sl, sl, #8
	vmvn	d3, d3
	subne	r9, r9, #1
	vsri.8	d7, d7, #6
	vshrn.i16	d30, q2, #2
	vmull.u8	q10, d3, d6
	pld	[fp, sl, lsl #2]
	vmull.u8	q11, d3, d7
	vmull.u8	q12, d3, d30
	pld	[ip, sl, lsl #1]
	vsri.16	q14, q8, #5
	cmp	sl, r7
	vshll.i8	q9, d18, #8
	vrshr.u16	q13, q10, #8
	subge	sl, sl, r7
	vrshr.u16	q3, q11, #8
	vrshr.u16	q15, q12, #8
	subsge	r9, r9, #16
	vsri.16	q14, q9, #11
	ldrbge	r8, [fp, r5, lsl #2]!
	vraddhn.i16	d20, q10, q13
	vraddhn.i16	d23, q11, q3
	ldrbge	r8, [ip, r3, lsl #1]!
	vraddhn.i16	d22, q12, q15
	vst1.16	{d28-d29}, [r2, :128]!
	subs	r0, r0, #8
	bge	9b
8:	vqadd.u8	d16, d2, d20
	vqadd.u8	q9, q0, q11
	vshll.i8	q14, d16, #8
	vshll.i8	q8, d19, #8
	vshll.i8	q9, d18, #8
	vsri.16	q14, q8, #5
	vsri.16	q14, q9, #11
	vst1.16	{d28-d29}, [r2, :128]!
	tst	r0, #7
	beq	10f
	tst	r0, #4
	beq	11f
	vld1.32	{d2-d3}, [r4]!
	vld1.16	{d5}, [r6, :64]!
	add	sl, sl, #4
11:	tst	r0, #2
	beq	12f
	vld1.32	{d1}, [r4]!
	vld1.16	{d4[2]}, [r6]!
	vld1.16	{d4[3]}, [r6]!
	add	sl, sl, #2
12:	tst	r0, #1
	beq	13f
	vld1.32	{d0[1]}, [r4]!
	vld1.16	{d4[1]}, [r6]!
	add	sl, sl, #1
13:	vuzp.8	d0, d1
	vuzp.8	d2, d3
	vuzp.8	d1, d3
	vuzp.8	d0, d2
	vshrn.i16	d6, q2, #8
	vshrn.i16	d7, q2, #3
	vsli.16	q2, q2, #5
	vsri.8	d6, d6, #5
	vmvn	d3, d3
	vsri.8	d7, d7, #6
	vshrn.i16	d30, q2, #2
	vmull.u8	q10, d3, d6
	vmull.u8	q11, d3, d7
	vmull.u8	q12, d3, d30
	vrshr.u16	q13, q10, #8
	vrshr.u16	q3, q11, #8
	vrshr.u16	q15, q12, #8
	vraddhn.i16	d20, q10, q13
	vraddhn.i16	d23, q11, q3
	vraddhn.i16	d22, q12, q15
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r7
	pld	[fp, sl, lsl #2]
	pld	[ip, sl, lsl #1]
	subge	sl, sl, r7
	subsge	r9, r9, #16
	ldrbge	r8, [fp, r5, lsl #2]!
	ldrbge	r8, [ip, r3, lsl #1]!
	vqadd.u8	d16, d2, d20
	vqadd.u8	q9, q0, q11
	vshll.i8	q14, d16, #8
	vshll.i8	q8, d19, #8
	vshll.i8	q9, d18, #8
	vsri.16	q14, q8, #5
	vsri.16	q14, q9, #11
	tst	r0, #4
	beq	14f
	vst1.16	{d29}, [r2, :64]!
14:	tst	r0, #2
	beq	15f
	vst1.16	{d28[2]}, [r2]!
	vst1.16	{d28[3]}, [r2]!
15:	tst	r0, #1
	beq	10f
	vst1.16	{d28[1]}, [r2]!
10:	mov	r0, r7
	add	r2, r2, r3, lsl #1
	add	r4, r4, r5, lsl #2
	sub	r2, r2, r0, lsl #1
	sub	r4, r4, r0, lsl #2
	subs	r1, r1, #1
	mov	r6, r2
	bge	16b
	pop	{r4, r5, r6, r7, r8, r9, sl, fp, ip, pc}
1:	tst	r0, #8
	beq	17f
	vld1.16	{d4-d5}, [r6]!
	vld4.8	{d0-d3}, [r4]!
	vshrn.i16	d6, q2, #8
	vshrn.i16	d7, q2, #3
	vsli.16	q2, q2, #5
	vsri.8	d6, d6, #5
	vmvn	d3, d3
	vsri.8	d7, d7, #6
	vshrn.i16	d30, q2, #2
	vmull.u8	q10, d3, d6
	vmull.u8	q11, d3, d7
	vmull.u8	q12, d3, d30
	vrshr.u16	q13, q10, #8
	vrshr.u16	q3, q11, #8
	vrshr.u16	q15, q12, #8
	vraddhn.i16	d20, q10, q13
	vraddhn.i16	d23, q11, q3
	vraddhn.i16	d22, q12, q15
	vqadd.u8	d16, d2, d20
	vqadd.u8	q9, q0, q11
	vshll.i8	q14, d16, #8
	vshll.i8	q8, d19, #8
	vshll.i8	q9, d18, #8
	vsri.16	q14, q8, #5
	vsri.16	q14, q9, #11
	vst1.16	{d28-d29}, [r2]!
17:	tst	r0, #7
	beq	18f
	tst	r0, #4
	beq	19f
	vld1.32	{d2-d3}, [r4]!
	vld1.16	{d5}, [r6]!
19:	tst	r0, #2
	beq	20f
	vld1.32	{d1}, [r4]!
	vld1.16	{d4[2]}, [r6]!
	vld1.16	{d4[3]}, [r6]!
20:	tst	r0, #1
	beq	21f
	vld1.32	{d0[1]}, [r4]!
	vld1.16	{d4[1]}, [r6]!
21:	vuzp.8	d0, d1
	vuzp.8	d2, d3
	vuzp.8	d1, d3
	vuzp.8	d0, d2
	vshrn.i16	d6, q2, #8
	vshrn.i16	d7, q2, #3
	vsli.16	q2, q2, #5
	vsri.8	d6, d6, #5
	vmvn	d3, d3
	vsri.8	d7, d7, #6
	vshrn.i16	d30, q2, #2
	vmull.u8	q10, d3, d6
	vmull.u8	q11, d3, d7
	vmull.u8	q12, d3, d30
	vrshr.u16	q13, q10, #8
	vrshr.u16	q3, q11, #8
	vrshr.u16	q15, q12, #8
	vraddhn.i16	d20, q10, q13
	vraddhn.i16	d23, q11, q3
	vraddhn.i16	d22, q12, q15
	vqadd.u8	d16, d2, d20
	vqadd.u8	q9, q0, q11
	vshll.i8	q14, d16, #8
	vshll.i8	q8, d19, #8
	vshll.i8	q9, d18, #8
	vsri.16	q14, q8, #5
	vsri.16	q14, q9, #11
	tst	r0, #4
	beq	22f
	vst1.16	{d29}, [r2]!
22:	tst	r0, #2
	beq	23f
	vst1.16	{d28[2]}, [r2]!
	vst1.16	{d28[3]}, [r2]!
23:	tst	r0, #1
	beq	18f
	vst1.16	{d28[1]}, [r2]!
18:	mov	r0, r7
	add	r2, r2, r3, lsl #1
	add	r4, r4, r5, lsl #2
	sub	r2, r2, r0, lsl #1
	sub	r4, r4, r0, lsl #2
	subs	r1, r1, #1
	mov	r6, r2
	bge	1b
0:	pop	{r4, r5, r6, r7, r8, r9, sl, fp, ip, pc}

.global _pixman_composite_src_n_8_asm_neon
_pixman_composite_src_n_8_asm_neon:
	push	{r4, r5, r6, r7, r8, r9, sl, fp, ip, lr}
	mov	r6, r2
	add	ip, sp, #40
	vld1.32	{d0[0]}, [ip]
	vsli.64	d0, d0, #8
	vsli.64	d0, d0, #16
	vsli.64	d0, d0, #32
	vorr	d1, d0, d0
	vorr	q1, q0, q0
	subs	r1, r1, #1
	mov	sl, r0
	blt	0f
	cmp	r0, #64
	blt	1f
23:	tst	r6, #15
	beq	2f
	tst	r6, #1
	beq	3f
	add	r6, r6, #1
	sub	r0, r0, #1
3:	tst	r6, #2
	beq	4f
	add	r6, r6, #2
	sub	r0, r0, #2
4:	tst	r6, #4
	beq	5f
	add	r6, r6, #4
	sub	r0, r0, #4
5:	tst	r6, #8
	beq	6f
	add	r6, r6, #8
	sub	r0, r0, #8
6:	add	r6, r6, #16
	sub	r0, r0, #16
	tst	r2, #1
	beq	7f
	vst1.8	{d0[1]}, [r2]!
7:	tst	r2, #2
	beq	8f
	vst1.8	{d0[2]}, [r2]!
	vst1.8	{d0[3]}, [r2]!
8:	tst	r2, #4
	beq	9f
	vst1.8	{d0[4]}, [r2]!
	vst1.8	{d0[5]}, [r2]!
	vst1.8	{d0[6]}, [r2]!
	vst1.8	{d0[7]}, [r2]!
9:	tst	r2, #8
	beq	10f
	vst1.8	{d1}, [r2, :64]!
10:	vst1.8	{d2-d3}, [r2, :128]!
2:	subs	r0, r0, #64
	blt	11f
12:	vst1.8	{d0-d3}, [r2, :128]!
	subs	r0, r0, #32
	bge	12b
11:	vst1.8	{d0-d3}, [r2, :128]!
	tst	r0, #31
	beq	13f
	tst	r0, #16
	beq	14f
14:	tst	r0, #8
	beq	15f
15:	tst	r0, #4
	beq	16f
16:	tst	r0, #2
	beq	17f
17:	tst	r0, #1
	beq	18f
18:	tst	r0, #16
	beq	19f
	vst1.8	{d2-d3}, [r2, :128]!
19:	tst	r0, #8
	beq	20f
	vst1.8	{d1}, [r2, :64]!
20:	tst	r0, #4
	beq	21f
	vst1.8	{d0[4]}, [r2]!
	vst1.8	{d0[5]}, [r2]!
	vst1.8	{d0[6]}, [r2]!
	vst1.8	{d0[7]}, [r2]!
21:	tst	r0, #2
	beq	22f
	vst1.8	{d0[2]}, [r2]!
	vst1.8	{d0[3]}, [r2]!
22:	tst	r0, #1
	beq	13f
	vst1.8	{d0[1]}, [r2]!
13:	mov	r0, sl
	add	r2, r2, r3
	sub	r2, r2, r0
	subs	r1, r1, #1
	mov	r6, r2
	bge	23b
	pop	{r4, r5, r6, r7, r8, r9, sl, fp, ip, pc}
1:	tst	r0, #32
	beq	24f
	vst1.8	{d0-d3}, [r2]!
24:	tst	r0, #31
	beq	25f
	tst	r0, #16
	beq	26f
26:	tst	r0, #8
	beq	27f
27:	tst	r0, #4
	beq	28f
28:	tst	r0, #2
	beq	29f
29:	tst	r0, #1
	beq	30f
30:	tst	r0, #16
	beq	31f
	vst1.8	{d2-d3}, [r2]!
31:	tst	r0, #8
	beq	32f
	vst1.8	{d1}, [r2]!
32:	tst	r0, #4
	beq	33f
	vst1.8	{d0[4]}, [r2]!
	vst1.8	{d0[5]}, [r2]!
	vst1.8	{d0[6]}, [r2]!
	vst1.8	{d0[7]}, [r2]!
33:	tst	r0, #2
	beq	34f
	vst1.8	{d0[2]}, [r2]!
	vst1.8	{d0[3]}, [r2]!
34:	tst	r0, #1
	beq	25f
	vst1.8	{d0[1]}, [r2]!
25:	mov	r0, sl
	add	r2, r2, r3
	sub	r2, r2, r0
	subs	r1, r1, #1
	mov	r6, r2
	bge	1b
0:	pop	{r4, r5, r6, r7, r8, r9, sl, fp, ip, pc}

.global _pixman_composite_src_x888_8888_asm_neon
_pixman_composite_src_x888_8888_asm_neon:
	push	{r4, r5, r6, r7, r8, r9, sl, fp, ip, lr}
	ldr	r4, [sp, #40]
	mov	sl, #0
	ldr	r5, [sp, #44]
	mov	r6, r2
	mov	fp, r4
	mov	ip, r6
	mov	lr, r7
	lsl	r9, r1, #4
	sub	r9, r9, #6
	vmov.i8	q2, #255
	vshl.s32	q2, q2, #24
	subs	r1, r1, #1
	mov	r7, r0
	blt	0f
	cmp	r0, #16
	blt	1f
15:	tst	r6, #15
	beq	2f
	tst	r6, #4
	beq	3f
	vld1.32	{d0[1]}, [r4]!
	add	r6, r6, #4
	add	sl, sl, #1
	sub	r0, r0, #1
3:	tst	r6, #8
	beq	4f
	vld1.32	{d1}, [r4]!
	add	r6, r6, #8
	add	sl, sl, #2
	sub	r0, r0, #2
4:	vld1.32	{d2-d3}, [r4]!
	add	r6, r6, #16
	add	sl, sl, #4
	sub	r0, r0, #4
	vorr	q0, q0, q2
	vorr	q1, q1, q2
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r7
	pld	[fp, sl, lsl #2]
	subge	sl, sl, r7
	subsge	r9, r9, #16
	ldrbge	r8, [fp, r5, lsl #2]!
	tst	r2, #4
	beq	5f
	vst1.32	{d0[1]}, [r2]!
5:	tst	r2, #8
	beq	6f
	vst1.32	{d1}, [r2, :64]!
6:	vst1.32	{d2-d3}, [r2, :128]!
2:	vld1.32	{d0-d3}, [r4]!
	add	sl, sl, #8
	vorr	q0, q0, q2
	vorr	q1, q1, q2
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r7
	pld	[fp, sl, lsl #2]
	subge	sl, sl, r7
	subsge	r9, r9, #16
	ldrbge	r8, [fp, r5, lsl #2]!
	subs	r0, r0, #16
	blt	7f
8:	vst1.32	{d0-d3}, [r2, :128]!
	vld1.32	{d0-d3}, [r4]!
	vorr	q0, q0, q2
	vorr	q1, q1, q2
	add	sl, sl, #8
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r7
	pld	[fp, sl, lsl #2]
	subge	sl, sl, r7
	subsge	r9, r9, #16
	ldrbge	r8, [fp, r5, lsl #2]!
	subs	r0, r0, #8
	bge	8b
7:	vst1.32	{d0-d3}, [r2, :128]!
	tst	r0, #7
	beq	9f
	tst	r0, #4
	beq	10f
	vld1.32	{d2-d3}, [r4]!
	add	sl, sl, #4
10:	tst	r0, #2
	beq	11f
	vld1.32	{d1}, [r4]!
	add	sl, sl, #2
11:	tst	r0, #1
	beq	12f
	vld1.32	{d0[1]}, [r4]!
	add	sl, sl, #1
12:	vorr	q0, q0, q2
	vorr	q1, q1, q2
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r7
	pld	[fp, sl, lsl #2]
	subge	sl, sl, r7
	subsge	r9, r9, #16
	ldrbge	r8, [fp, r5, lsl #2]!
	tst	r0, #4
	beq	13f
	vst1.32	{d2-d3}, [r2, :128]!
13:	tst	r0, #2
	beq	14f
	vst1.32	{d1}, [r2, :64]!
14:	tst	r0, #1
	beq	9f
	vst1.32	{d0[1]}, [r2]!
9:	mov	r0, r7
	add	r2, r2, r3, lsl #2
	add	r4, r4, r5, lsl #2
	sub	r2, r2, r0, lsl #2
	sub	r4, r4, r0, lsl #2
	subs	r1, r1, #1
	mov	r6, r2
	bge	15b
	pop	{r4, r5, r6, r7, r8, r9, sl, fp, ip, pc}
1:	tst	r0, #8
	beq	16f
	vld1.32	{d0-d3}, [r4]!
	vorr	q0, q0, q2
	vorr	q1, q1, q2
	vst1.32	{d0-d3}, [r2]!
16:	tst	r0, #7
	beq	17f
	tst	r0, #4
	beq	18f
	vld1.32	{d2-d3}, [r4]!
18:	tst	r0, #2
	beq	19f
	vld1.32	{d1}, [r4]!
19:	tst	r0, #1
	beq	20f
	vld1.32	{d0[1]}, [r4]!
20:	vorr	q0, q0, q2
	vorr	q1, q1, q2
	tst	r0, #4
	beq	21f
	vst1.32	{d2-d3}, [r2]!
21:	tst	r0, #2
	beq	22f
	vst1.32	{d1}, [r2]!
22:	tst	r0, #1
	beq	17f
	vst1.32	{d0[1]}, [r2]!
17:	mov	r0, r7
	add	r2, r2, r3, lsl #2
	add	r4, r4, r5, lsl #2
	sub	r2, r2, r0, lsl #2
	sub	r4, r4, r0, lsl #2
	subs	r1, r1, #1
	mov	r6, r2
	bge	1b
0:	pop	{r4, r5, r6, r7, r8, r9, sl, fp, ip, pc}

.global _pixman_composite_src_8888_8888_asm_neon
_pixman_composite_src_8888_8888_asm_neon:
	push	{r4, r5, r6, r7, r8, r9, sl, fp, ip, lr}
	ldr	r4, [sp, #40]
	mov	sl, #0
	ldr	r5, [sp, #44]
	mov	r6, r2
	mov	fp, r4
	mov	ip, r6
	mov	lr, r7
	lsl	r9, r1, #4
	sub	r9, r9, #6
	subs	r1, r1, #1
	mov	r7, r0
	blt	0f
	cmp	r0, #16
	blt	1f
15:	tst	r6, #15
	beq	2f
	tst	r6, #4
	beq	3f
	vld1.32	{d0[1]}, [r4]!
	add	r6, r6, #4
	add	sl, sl, #1
	sub	r0, r0, #1
3:	tst	r6, #8
	beq	4f
	vld1.32	{d1}, [r4]!
	add	r6, r6, #8
	add	sl, sl, #2
	sub	r0, r0, #2
4:	vld1.32	{d2-d3}, [r4]!
	add	r6, r6, #16
	add	sl, sl, #4
	sub	r0, r0, #4
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r7
	pld	[fp, sl, lsl #2]
	subge	sl, sl, r7
	subsge	r9, r9, #16
	ldrbge	r8, [fp, r5, lsl #2]!
	tst	r2, #4
	beq	5f
	vst1.32	{d0[1]}, [r2]!
5:	tst	r2, #8
	beq	6f
	vst1.32	{d1}, [r2, :64]!
6:	vst1.32	{d2-d3}, [r2, :128]!
2:	vld1.32	{d0-d3}, [r4]!
	add	sl, sl, #8
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r7
	pld	[fp, sl, lsl #2]
	subge	sl, sl, r7
	subsge	r9, r9, #16
	ldrbge	r8, [fp, r5, lsl #2]!
	subs	r0, r0, #16
	blt	7f
8:	vst1.32	{d0-d3}, [r2, :128]!
	vld1.32	{d0-d3}, [r4]!
	add	sl, sl, #8
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r7
	pld	[fp, sl, lsl #2]
	subge	sl, sl, r7
	subsge	r9, r9, #16
	ldrbge	r8, [fp, r5, lsl #2]!
	subs	r0, r0, #8
	bge	8b
7:	vst1.32	{d0-d3}, [r2, :128]!
	tst	r0, #7
	beq	9f
	tst	r0, #4
	beq	10f
	vld1.32	{d2-d3}, [r4]!
	add	sl, sl, #4
10:	tst	r0, #2
	beq	11f
	vld1.32	{d1}, [r4]!
	add	sl, sl, #2
11:	tst	r0, #1
	beq	12f
	vld1.32	{d0[1]}, [r4]!
	add	sl, sl, #1
12:	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r7
	pld	[fp, sl, lsl #2]
	subge	sl, sl, r7
	subsge	r9, r9, #16
	ldrbge	r8, [fp, r5, lsl #2]!
	tst	r0, #4
	beq	13f
	vst1.32	{d2-d3}, [r2, :128]!
13:	tst	r0, #2
	beq	14f
	vst1.32	{d1}, [r2, :64]!
14:	tst	r0, #1
	beq	9f
	vst1.32	{d0[1]}, [r2]!
9:	mov	r0, r7
	add	r2, r2, r3, lsl #2
	add	r4, r4, r5, lsl #2
	sub	r2, r2, r0, lsl #2
	sub	r4, r4, r0, lsl #2
	subs	r1, r1, #1
	mov	r6, r2
	bge	15b
	pop	{r4, r5, r6, r7, r8, r9, sl, fp, ip, pc}
1:	tst	r0, #8
	beq	16f
	vld1.32	{d0-d3}, [r4]!
	vst1.32	{d0-d3}, [r2]!
16:	tst	r0, #7
	beq	17f
	tst	r0, #4
	beq	18f
	vld1.32	{d2-d3}, [r4]!
18:	tst	r0, #2
	beq	19f
	vld1.32	{d1}, [r4]!
19:	tst	r0, #1
	beq	20f
	vld1.32	{d0[1]}, [r4]!
20:	tst	r0, #4
	beq	21f
	vst1.32	{d2-d3}, [r2]!
21:	tst	r0, #2
	beq	22f
	vst1.32	{d1}, [r2]!
22:	tst	r0, #1
	beq	17f
	vst1.32	{d0[1]}, [r2]!
17:	mov	r0, r7
	add	r2, r2, r3, lsl #2
	add	r4, r4, r5, lsl #2
	sub	r2, r2, r0, lsl #2
	sub	r4, r4, r0, lsl #2
	subs	r1, r1, #1
	mov	r6, r2
	bge	1b
0:	pop	{r4, r5, r6, r7, r8, r9, sl, fp, ip, pc}

.global _pixman_composite_add_8888_8_8888_asm_neon
_pixman_composite_add_8888_8_8888_asm_neon:
	push	{r4, r5, r6, r7, r8, r9, sl, fp, ip, lr}
	ldr	r4, [sp, #40]
	ldr	r7, [sp, #48]
	mov	sl, #0
	ldr	r5, [sp, #44]
	ldr	r8, [sp, #52]
	mov	r6, r2
	mov	fp, r4
	mov	ip, r6
	mov	lr, r7
	lsl	r9, r1, #4
	sub	r9, r9, #11
	push	{r0, r1}
	subs	r1, r1, #1
	str	r1, [sp, #4]
	blt	0f
	cmp	r0, #16
	blt	1f
15:	tst	r6, #15
	beq	2f
	tst	r6, #4
	beq	3f
	vld1.32	{d0[1]}, [r4]!
	vld1.8	{d27[1]}, [r7]!
	vld1.32	{d4[1]}, [r6]!
	add	sl, sl, #1
	sub	r0, r0, #1
3:	tst	r6, #8
	beq	4f
	vld1.32	{d1}, [r4]!
	vld1.8	{d27[2]}, [r7]!
	vld1.8	{d27[3]}, [r7]!
	vld1.32	{d5}, [r6, :64]!
	add	sl, sl, #2
	sub	r0, r0, #2
4:	vld1.32	{d2-d3}, [r4]!
	vld1.8	{d27[4]}, [r7]!
	vld1.8	{d27[5]}, [r7]!
	vld1.8	{d27[6]}, [r7]!
	vld1.8	{d27[7]}, [r7]!
	vld1.32	{d6-d7}, [r6, :128]!
	add	sl, sl, #4
	sub	r0, r0, #4
	vuzp.8	d0, d1
	vuzp.8	d2, d3
	vuzp.8	d1, d3
	vuzp.8	d0, d2
	vuzp.8	d4, d5
	vuzp.8	d6, d7
	vuzp.8	d5, d7
	vuzp.8	d4, d6
	vmull.u8	q8, d27, d0
	vmull.u8	q9, d27, d1
	vmull.u8	q10, d27, d2
	vmull.u8	q11, d27, d3
	vrsra.u16	q8, q8, #8
	vrsra.u16	q9, q9, #8
	vrsra.u16	q10, q10, #8
	vrsra.u16	q11, q11, #8
	ldr	r1, [sp]
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r1
	pld	[fp, sl, lsl #2]
	pld	[ip, sl, lsl #2]
	pld	[lr, sl]
	subge	sl, sl, r1
	subsge	r9, r9, #16
	ldrbge	r1, [fp, r5, lsl #2]!
	ldrbge	r1, [ip, r3, lsl #2]!
	ldrbge	r1, [lr, r8]!
	vrshrn.i16	d28, q8, #8
	vrshrn.i16	d29, q9, #8
	vrshrn.i16	d30, q10, #8
	vrshrn.i16	d31, q11, #8
	vqadd.u8	q14, q2, q14
	vqadd.u8	q15, q3, q15
	vzip.8	d28, d30
	vzip.8	d29, d31
	vzip.8	d30, d31
	vzip.8	d28, d29
	tst	r2, #4
	beq	5f
	vst1.32	{d28[1]}, [r2]!
5:	tst	r2, #8
	beq	6f
	vst1.32	{d29}, [r2, :64]!
6:	vst1.32	{d30-d31}, [r2, :128]!
2:	vld4.8	{d4-d7}, [r6, :128]!
	vld4.8	{d0-d3}, [r4]!
	vld1.8	{d27}, [r7]!
	add	sl, sl, #8
	vmull.u8	q8, d27, d0
	vmull.u8	q9, d27, d1
	vmull.u8	q10, d27, d2
	vmull.u8	q11, d27, d3
	vrsra.u16	q8, q8, #8
	vrsra.u16	q9, q9, #8
	vrsra.u16	q10, q10, #8
	vrsra.u16	q11, q11, #8
	ldr	r1, [sp]
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r1
	pld	[fp, sl, lsl #2]
	pld	[ip, sl, lsl #2]
	pld	[lr, sl]
	subge	sl, sl, r1
	subsge	r9, r9, #16
	ldrbge	r1, [fp, r5, lsl #2]!
	ldrbge	r1, [ip, r3, lsl #2]!
	ldrbge	r1, [lr, r8]!
	subs	r0, r0, #16
	blt	7f
8:	vld4.8	{d0-d3}, [r4]!
	vrshrn.i16	d28, q8, #8
	vld1.8	{d27}, [r7]!
	vrshrn.i16	d29, q9, #8
	vmull.u8	q8, d27, d0
	vrshrn.i16	d30, q10, #8
	vmull.u8	q9, d27, d1
	vrshrn.i16	d31, q11, #8
	vmull.u8	q10, d27, d2
	vqadd.u8	q14, q2, q14
	vmull.u8	q11, d27, d3
	vqadd.u8	q15, q3, q15
	vrsra.u16	q8, q8, #8
	vld4.8	{d4-d7}, [r6, :128]!
	vrsra.u16	q9, q9, #8
	vst4.8	{d28-d31}, [r2, :128]!
	vrsra.u16	q10, q10, #8
	ldr	r1, [sp]
	add	sl, sl, #8
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r1
	pld	[fp, sl, lsl #2]
	pld	[ip, sl, lsl #2]
	pld	[lr, sl]
	subge	sl, sl, r1
	subsge	r9, r9, #16
	ldrbge	r1, [fp, r5, lsl #2]!
	ldrbge	r1, [ip, r3, lsl #2]!
	ldrbge	r1, [lr, r8]!
	vrsra.u16	q11, q11, #8
	subs	r0, r0, #8
	bge	8b
7:	vrshrn.i16	d28, q8, #8
	vrshrn.i16	d29, q9, #8
	vrshrn.i16	d30, q10, #8
	vrshrn.i16	d31, q11, #8
	vqadd.u8	q14, q2, q14
	vqadd.u8	q15, q3, q15
	vst4.8	{d28-d31}, [r2, :128]!
	tst	r0, #7
	beq	9f
	tst	r0, #4
	beq	10f
	vld1.32	{d2-d3}, [r4]!
	vld1.8	{d27[4]}, [r7]!
	vld1.8	{d27[5]}, [r7]!
	vld1.8	{d27[6]}, [r7]!
	vld1.8	{d27[7]}, [r7]!
	vld1.32	{d6-d7}, [r6, :128]!
	add	sl, sl, #4
10:	tst	r0, #2
	beq	11f
	vld1.32	{d1}, [r4]!
	vld1.8	{d27[2]}, [r7]!
	vld1.8	{d27[3]}, [r7]!
	vld1.32	{d5}, [r6, :64]!
	add	sl, sl, #2
11:	tst	r0, #1
	beq	12f
	vld1.32	{d0[1]}, [r4]!
	vld1.8	{d27[1]}, [r7]!
	vld1.32	{d4[1]}, [r6]!
	add	sl, sl, #1
12:	vuzp.8	d0, d1
	vuzp.8	d2, d3
	vuzp.8	d1, d3
	vuzp.8	d0, d2
	vuzp.8	d4, d5
	vuzp.8	d6, d7
	vuzp.8	d5, d7
	vuzp.8	d4, d6
	vmull.u8	q8, d27, d0
	vmull.u8	q9, d27, d1
	vmull.u8	q10, d27, d2
	vmull.u8	q11, d27, d3
	vrsra.u16	q8, q8, #8
	vrsra.u16	q9, q9, #8
	vrsra.u16	q10, q10, #8
	vrsra.u16	q11, q11, #8
	ldr	r1, [sp]
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r1
	pld	[fp, sl, lsl #2]
	pld	[ip, sl, lsl #2]
	pld	[lr, sl]
	subge	sl, sl, r1
	subsge	r9, r9, #16
	ldrbge	r1, [fp, r5, lsl #2]!
	ldrbge	r1, [ip, r3, lsl #2]!
	ldrbge	r1, [lr, r8]!
	vrshrn.i16	d28, q8, #8
	vrshrn.i16	d29, q9, #8
	vrshrn.i16	d30, q10, #8
	vrshrn.i16	d31, q11, #8
	vqadd.u8	q14, q2, q14
	vqadd.u8	q15, q3, q15
	vzip.8	d28, d30
	vzip.8	d29, d31
	vzip.8	d30, d31
	vzip.8	d28, d29
	tst	r0, #4
	beq	13f
	vst1.32	{d30-d31}, [r2, :128]!
13:	tst	r0, #2
	beq	14f
	vst1.32	{d29}, [r2, :64]!
14:	tst	r0, #1
	beq	9f
	vst1.32	{d28[1]}, [r2]!
9:	ldrd	r0, [sp]
	add	r2, r2, r3, lsl #2
	add	r4, r4, r5, lsl #2
	add	r7, r7, r8
	sub	r2, r2, r0, lsl #2
	sub	r4, r4, r0, lsl #2
	sub	r7, r7, r0
	subs	r1, r1, #1
	mov	r6, r2
	str	r1, [sp, #4]
	bge	15b
	pop	{r0, r1}
	pop	{r4, r5, r6, r7, r8, r9, sl, fp, ip, pc}
1:	tst	r0, #8
	beq	16f
	vld4.8	{d4-d7}, [r6]!
	vld4.8	{d0-d3}, [r4]!
	vld1.8	{d27}, [r7]!
	vmull.u8	q8, d27, d0
	vmull.u8	q9, d27, d1
	vmull.u8	q10, d27, d2
	vmull.u8	q11, d27, d3
	vrsra.u16	q8, q8, #8
	vrsra.u16	q9, q9, #8
	vrsra.u16	q10, q10, #8
	vrsra.u16	q11, q11, #8
	vrshrn.i16	d28, q8, #8
	vrshrn.i16	d29, q9, #8
	vrshrn.i16	d30, q10, #8
	vrshrn.i16	d31, q11, #8
	vqadd.u8	q14, q2, q14
	vqadd.u8	q15, q3, q15
	vst4.8	{d28-d31}, [r2]!
16:	tst	r0, #7
	beq	17f
	tst	r0, #4
	beq	18f
	vld1.32	{d2-d3}, [r4]!
	vld1.8	{d27[4]}, [r7]!
	vld1.8	{d27[5]}, [r7]!
	vld1.8	{d27[6]}, [r7]!
	vld1.8	{d27[7]}, [r7]!
	vld1.32	{d6-d7}, [r6]!
18:	tst	r0, #2
	beq	19f
	vld1.32	{d1}, [r4]!
	vld1.8	{d27[2]}, [r7]!
	vld1.8	{d27[3]}, [r7]!
	vld1.32	{d5}, [r6]!
19:	tst	r0, #1
	beq	20f
	vld1.32	{d0[1]}, [r4]!
	vld1.8	{d27[1]}, [r7]!
	vld1.32	{d4[1]}, [r6]!
20:	vuzp.8	d0, d1
	vuzp.8	d2, d3
	vuzp.8	d1, d3
	vuzp.8	d0, d2
	vuzp.8	d4, d5
	vuzp.8	d6, d7
	vuzp.8	d5, d7
	vuzp.8	d4, d6
	vmull.u8	q8, d27, d0
	vmull.u8	q9, d27, d1
	vmull.u8	q10, d27, d2
	vmull.u8	q11, d27, d3
	vrsra.u16	q8, q8, #8
	vrsra.u16	q9, q9, #8
	vrsra.u16	q10, q10, #8
	vrsra.u16	q11, q11, #8
	vrshrn.i16	d28, q8, #8
	vrshrn.i16	d29, q9, #8
	vrshrn.i16	d30, q10, #8
	vrshrn.i16	d31, q11, #8
	vqadd.u8	q14, q2, q14
	vqadd.u8	q15, q3, q15
	vzip.8	d28, d30
	vzip.8	d29, d31
	vzip.8	d30, d31
	vzip.8	d28, d29
	tst	r0, #4
	beq	21f
	vst1.32	{d30-d31}, [r2]!
21:	tst	r0, #2
	beq	22f
	vst1.32	{d29}, [r2]!
22:	tst	r0, #1
	beq	17f
	vst1.32	{d28[1]}, [r2]!
17:	ldrd	r0, [sp]
	add	r2, r2, r3, lsl #2
	add	r4, r4, r5, lsl #2
	add	r7, r7, r8
	sub	r2, r2, r0, lsl #2
	sub	r4, r4, r0, lsl #2
	sub	r7, r7, r0
	subs	r1, r1, #1
	mov	r6, r2
	str	r1, [sp, #4]
	bge	1b
0:	pop	{r0, r1}
	pop	{r4, r5, r6, r7, r8, r9, sl, fp, ip, pc}

.global _pixman_composite_over_8888_8888_asm_neon
_pixman_composite_over_8888_8888_asm_neon:
	push	{r4, r5, r6, r7, r8, r9, sl, fp, ip, lr}
	ldr	r4, [sp, #40]
	mov	sl, #0
	ldr	r5, [sp, #44]
	mov	r6, r2
	mov	fp, r4
	mov	ip, r6
	mov	lr, r7
	lsl	r9, r1, #4
	sub	r9, r9, #11
	subs	r1, r1, #1
	mov	r7, r0
	blt	0f
	cmp	r0, #16
	blt	1f
15:	tst	r6, #15
	beq	2f
	tst	r6, #4
	beq	3f
	vld1.32	{d0[1]}, [r4]!
	vld1.32	{d4[1]}, [r6]!
	add	sl, sl, #1
	sub	r0, r0, #1
3:	tst	r6, #8
	beq	4f
	vld1.32	{d1}, [r4]!
	vld1.32	{d5}, [r6, :64]!
	add	sl, sl, #2
	sub	r0, r0, #2
4:	vld1.32	{d2-d3}, [r4]!
	vld1.32	{d6-d7}, [r6, :128]!
	add	sl, sl, #4
	sub	r0, r0, #4
	vuzp.8	d0, d1
	vuzp.8	d2, d3
	vuzp.8	d1, d3
	vuzp.8	d0, d2
	vuzp.8	d4, d5
	vuzp.8	d6, d7
	vuzp.8	d5, d7
	vuzp.8	d4, d6
	vmvn	d24, d3
	vmull.u8	q8, d24, d4
	vmull.u8	q9, d24, d5
	vmull.u8	q10, d24, d6
	vmull.u8	q11, d24, d7
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r7
	pld	[fp, sl, lsl #2]
	pld	[ip, sl, lsl #2]
	subge	sl, sl, r7
	subsge	r9, r9, #16
	ldrbge	r8, [fp, r5, lsl #2]!
	ldrbge	r8, [ip, r3, lsl #2]!
	vrshr.u16	q14, q8, #8
	vrshr.u16	q15, q9, #8
	vrshr.u16	q12, q10, #8
	vrshr.u16	q13, q11, #8
	vraddhn.i16	d28, q14, q8
	vraddhn.i16	d29, q15, q9
	vraddhn.i16	d30, q12, q10
	vraddhn.i16	d31, q13, q11
	vqadd.u8	q14, q0, q14
	vqadd.u8	q15, q1, q15
	vzip.8	d28, d30
	vzip.8	d29, d31
	vzip.8	d30, d31
	vzip.8	d28, d29
	tst	r2, #4
	beq	5f
	vst1.32	{d28[1]}, [r2]!
5:	tst	r2, #8
	beq	6f
	vst1.32	{d29}, [r2, :64]!
6:	vst1.32	{d30-d31}, [r2, :128]!
2:	vld4.8	{d4-d7}, [r6, :128]!
	vld4.8	{d0-d3}, [r4]!
	add	sl, sl, #8
	vmvn	d24, d3
	vmull.u8	q8, d24, d4
	vmull.u8	q9, d24, d5
	vmull.u8	q10, d24, d6
	vmull.u8	q11, d24, d7
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r7
	pld	[fp, sl, lsl #2]
	pld	[ip, sl, lsl #2]
	subge	sl, sl, r7
	subsge	r9, r9, #16
	ldrbge	r8, [fp, r5, lsl #2]!
	ldrbge	r8, [ip, r3, lsl #2]!
	subs	r0, r0, #16
	blt	7f
8:	vld4.8	{d4-d7}, [r6, :128]!
	vrshr.u16	q14, q8, #8
	add	sl, sl, #8
	tst	r9, #15
	vrshr.u16	q15, q9, #8
	vrshr.u16	q12, q10, #8
	vrshr.u16	q13, q11, #8
	addne	sl, sl, #8
	subne	r9, r9, #1
	vraddhn.i16	d28, q14, q8
	vraddhn.i16	d29, q15, q9
	cmp	sl, r7
	vraddhn.i16	d30, q12, q10
	vraddhn.i16	d31, q13, q11
	vqadd.u8	q14, q0, q14
	vqadd.u8	q15, q1, q15
	vld4.8	{d0-d3}, [r4]!
	pld	[fp, sl, lsl #2]
	vmvn	d22, d3
	pld	[ip, sl, lsl #2]
	vst4.8	{d28-d31}, [r2, :128]!
	subge	sl, sl, r7
	vmull.u8	q8, d22, d4
	subsge	r9, r9, #16
	vmull.u8	q9, d22, d5
	ldrbge	r8, [fp, r5, lsl #2]!
	vmull.u8	q10, d22, d6
	ldrbge	r8, [ip, r3, lsl #2]!
	vmull.u8	q11, d22, d7
	subs	r0, r0, #8
	bge	8b
7:	vrshr.u16	q14, q8, #8
	vrshr.u16	q15, q9, #8
	vrshr.u16	q12, q10, #8
	vrshr.u16	q13, q11, #8
	vraddhn.i16	d28, q14, q8
	vraddhn.i16	d29, q15, q9
	vraddhn.i16	d30, q12, q10
	vraddhn.i16	d31, q13, q11
	vqadd.u8	q14, q0, q14
	vqadd.u8	q15, q1, q15
	vst4.8	{d28-d31}, [r2, :128]!
	tst	r0, #7
	beq	9f
	tst	r0, #4
	beq	10f
	vld1.32	{d2-d3}, [r4]!
	vld1.32	{d6-d7}, [r6, :128]!
	add	sl, sl, #4
10:	tst	r0, #2
	beq	11f
	vld1.32	{d1}, [r4]!
	vld1.32	{d5}, [r6, :64]!
	add	sl, sl, #2
11:	tst	r0, #1
	beq	12f
	vld1.32	{d0[1]}, [r4]!
	vld1.32	{d4[1]}, [r6]!
	add	sl, sl, #1
12:	vuzp.8	d0, d1
	vuzp.8	d2, d3
	vuzp.8	d1, d3
	vuzp.8	d0, d2
	vuzp.8	d4, d5
	vuzp.8	d6, d7
	vuzp.8	d5, d7
	vuzp.8	d4, d6
	vmvn	d24, d3
	vmull.u8	q8, d24, d4
	vmull.u8	q9, d24, d5
	vmull.u8	q10, d24, d6
	vmull.u8	q11, d24, d7
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r7
	pld	[fp, sl, lsl #2]
	pld	[ip, sl, lsl #2]
	subge	sl, sl, r7
	subsge	r9, r9, #16
	ldrbge	r8, [fp, r5, lsl #2]!
	ldrbge	r8, [ip, r3, lsl #2]!
	vrshr.u16	q14, q8, #8
	vrshr.u16	q15, q9, #8
	vrshr.u16	q12, q10, #8
	vrshr.u16	q13, q11, #8
	vraddhn.i16	d28, q14, q8
	vraddhn.i16	d29, q15, q9
	vraddhn.i16	d30, q12, q10
	vraddhn.i16	d31, q13, q11
	vqadd.u8	q14, q0, q14
	vqadd.u8	q15, q1, q15
	vzip.8	d28, d30
	vzip.8	d29, d31
	vzip.8	d30, d31
	vzip.8	d28, d29
	tst	r0, #4
	beq	13f
	vst1.32	{d30-d31}, [r2, :128]!
13:	tst	r0, #2
	beq	14f
	vst1.32	{d29}, [r2, :64]!
14:	tst	r0, #1
	beq	9f
	vst1.32	{d28[1]}, [r2]!
9:	mov	r0, r7
	add	r2, r2, r3, lsl #2
	add	r4, r4, r5, lsl #2
	sub	r2, r2, r0, lsl #2
	sub	r4, r4, r0, lsl #2
	subs	r1, r1, #1
	mov	r6, r2
	bge	15b
	pop	{r4, r5, r6, r7, r8, r9, sl, fp, ip, pc}
1:	tst	r0, #8
	beq	16f
	vld4.8	{d4-d7}, [r6]!
	vld4.8	{d0-d3}, [r4]!
	vmvn	d24, d3
	vmull.u8	q8, d24, d4
	vmull.u8	q9, d24, d5
	vmull.u8	q10, d24, d6
	vmull.u8	q11, d24, d7
	vrshr.u16	q14, q8, #8
	vrshr.u16	q15, q9, #8
	vrshr.u16	q12, q10, #8
	vrshr.u16	q13, q11, #8
	vraddhn.i16	d28, q14, q8
	vraddhn.i16	d29, q15, q9
	vraddhn.i16	d30, q12, q10
	vraddhn.i16	d31, q13, q11
	vqadd.u8	q14, q0, q14
	vqadd.u8	q15, q1, q15
	vst4.8	{d28-d31}, [r2]!
16:	tst	r0, #7
	beq	17f
	tst	r0, #4
	beq	18f
	vld1.32	{d2-d3}, [r4]!
	vld1.32	{d6-d7}, [r6]!
18:	tst	r0, #2
	beq	19f
	vld1.32	{d1}, [r4]!
	vld1.32	{d5}, [r6]!
19:	tst	r0, #1
	beq	20f
	vld1.32	{d0[1]}, [r4]!
	vld1.32	{d4[1]}, [r6]!
20:	vuzp.8	d0, d1
	vuzp.8	d2, d3
	vuzp.8	d1, d3
	vuzp.8	d0, d2
	vuzp.8	d4, d5
	vuzp.8	d6, d7
	vuzp.8	d5, d7
	vuzp.8	d4, d6
	vmvn	d24, d3
	vmull.u8	q8, d24, d4
	vmull.u8	q9, d24, d5
	vmull.u8	q10, d24, d6
	vmull.u8	q11, d24, d7
	vrshr.u16	q14, q8, #8
	vrshr.u16	q15, q9, #8
	vrshr.u16	q12, q10, #8
	vrshr.u16	q13, q11, #8
	vraddhn.i16	d28, q14, q8
	vraddhn.i16	d29, q15, q9
	vraddhn.i16	d30, q12, q10
	vraddhn.i16	d31, q13, q11
	vqadd.u8	q14, q0, q14
	vqadd.u8	q15, q1, q15
	vzip.8	d28, d30
	vzip.8	d29, d31
	vzip.8	d30, d31
	vzip.8	d28, d29
	tst	r0, #4
	beq	21f
	vst1.32	{d30-d31}, [r2]!
21:	tst	r0, #2
	beq	22f
	vst1.32	{d29}, [r2]!
22:	tst	r0, #1
	beq	17f
	vst1.32	{d28[1]}, [r2]!
17:	mov	r0, r7
	add	r2, r2, r3, lsl #2
	add	r4, r4, r5, lsl #2
	sub	r2, r2, r0, lsl #2
	sub	r4, r4, r0, lsl #2
	subs	r1, r1, #1
	mov	r6, r2
	bge	1b
0:	pop	{r4, r5, r6, r7, r8, r9, sl, fp, ip, pc}

.global _pixman_composite_out_reverse_8_8888_asm_neon
_pixman_composite_out_reverse_8_8888_asm_neon:
	push	{r4, r5, r6, r7, r8, r9, sl, fp, ip, lr}
	ldr	r4, [sp, #40]
	mov	sl, #0
	ldr	r5, [sp, #44]
	mov	r6, r2
	mov	fp, r4
	mov	ip, r6
	mov	lr, r7
	lsl	r9, r1, #4
	sub	r9, r9, #11
	subs	r1, r1, #1
	mov	r7, r0
	blt	0f
	cmp	r0, #16
	blt	1f
15:	tst	r6, #15
	beq	2f
	tst	r6, #4
	beq	3f
	vld1.8	{d0[1]}, [r4]!
	vld1.32	{d4[1]}, [r6]!
	add	sl, sl, #1
	sub	r0, r0, #1
3:	tst	r6, #8
	beq	4f
	vld1.8	{d0[2]}, [r4]!
	vld1.8	{d0[3]}, [r4]!
	vld1.32	{d5}, [r6, :64]!
	add	sl, sl, #2
	sub	r0, r0, #2
4:	vld1.8	{d0[4]}, [r4]!
	vld1.8	{d0[5]}, [r4]!
	vld1.8	{d0[6]}, [r4]!
	vld1.8	{d0[7]}, [r4]!
	vld1.32	{d6-d7}, [r6, :128]!
	add	sl, sl, #4
	sub	r0, r0, #4
	vuzp.8	d4, d5
	vuzp.8	d6, d7
	vuzp.8	d5, d7
	vuzp.8	d4, d6
	vmvn	d1, d0
	vmull.u8	q8, d1, d4
	vmull.u8	q9, d1, d5
	vmull.u8	q10, d1, d6
	vmull.u8	q11, d1, d7
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r7
	pld	[fp, sl]
	pld	[ip, sl, lsl #2]
	subge	sl, sl, r7
	subsge	r9, r9, #16
	ldrbge	r8, [fp, r5]!
	ldrbge	r8, [ip, r3, lsl #2]!
	vrshr.u16	q14, q8, #8
	vrshr.u16	q15, q9, #8
	vrshr.u16	q12, q10, #8
	vrshr.u16	q13, q11, #8
	vraddhn.i16	d28, q14, q8
	vraddhn.i16	d29, q15, q9
	vraddhn.i16	d30, q12, q10
	vraddhn.i16	d31, q13, q11
	vzip.8	d28, d30
	vzip.8	d29, d31
	vzip.8	d30, d31
	vzip.8	d28, d29
	tst	r2, #4
	beq	5f
	vst1.32	{d28[1]}, [r2]!
5:	tst	r2, #8
	beq	6f
	vst1.32	{d29}, [r2, :64]!
6:	vst1.32	{d30-d31}, [r2, :128]!
2:	vld4.8	{d4-d7}, [r6, :128]!
	vld1.8	{d0}, [r4]!
	add	sl, sl, #8
	vmvn	d1, d0
	vmull.u8	q8, d1, d4
	vmull.u8	q9, d1, d5
	vmull.u8	q10, d1, d6
	vmull.u8	q11, d1, d7
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r7
	pld	[fp, sl]
	pld	[ip, sl, lsl #2]
	subge	sl, sl, r7
	subsge	r9, r9, #16
	ldrbge	r8, [fp, r5]!
	ldrbge	r8, [ip, r3, lsl #2]!
	subs	r0, r0, #16
	blt	7f
8:	vld1.8	{d0}, [r4]!
	vrshr.u16	q14, q8, #8
	vrshr.u16	q15, q9, #8
	vrshr.u16	q12, q10, #8
	vrshr.u16	q13, q11, #8
	vraddhn.i16	d28, q14, q8
	vraddhn.i16	d29, q15, q9
	vraddhn.i16	d30, q12, q10
	vraddhn.i16	d31, q13, q11
	vld4.8	{d4-d7}, [r6, :128]!
	add	sl, sl, #8
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r7
	pld	[fp, sl]
	pld	[ip, sl, lsl #2]
	subge	sl, sl, r7
	subsge	r9, r9, #16
	ldrbge	r8, [fp, r5]!
	ldrbge	r8, [ip, r3, lsl #2]!
	vmvn	d1, d0
	vmull.u8	q8, d1, d4
	vmull.u8	q9, d1, d5
	vmull.u8	q10, d1, d6
	vmull.u8	q11, d1, d7
	vst4.8	{d28-d31}, [r2, :128]!
	subs	r0, r0, #8
	bge	8b
7:	vrshr.u16	q14, q8, #8
	vrshr.u16	q15, q9, #8
	vrshr.u16	q12, q10, #8
	vrshr.u16	q13, q11, #8
	vraddhn.i16	d28, q14, q8
	vraddhn.i16	d29, q15, q9
	vraddhn.i16	d30, q12, q10
	vraddhn.i16	d31, q13, q11
	vst4.8	{d28-d31}, [r2, :128]!
	tst	r0, #7
	beq	9f
	tst	r0, #4
	beq	10f
	vld1.8	{d0[4]}, [r4]!
	vld1.8	{d0[5]}, [r4]!
	vld1.8	{d0[6]}, [r4]!
	vld1.8	{d0[7]}, [r4]!
	vld1.32	{d6-d7}, [r6, :128]!
	add	sl, sl, #4
10:	tst	r0, #2
	beq	11f
	vld1.8	{d0[2]}, [r4]!
	vld1.8	{d0[3]}, [r4]!
	vld1.32	{d5}, [r6, :64]!
	add	sl, sl, #2
11:	tst	r0, #1
	beq	12f
	vld1.8	{d0[1]}, [r4]!
	vld1.32	{d4[1]}, [r6]!
	add	sl, sl, #1
12:	vuzp.8	d4, d5
	vuzp.8	d6, d7
	vuzp.8	d5, d7
	vuzp.8	d4, d6
	vmvn	d1, d0
	vmull.u8	q8, d1, d4
	vmull.u8	q9, d1, d5
	vmull.u8	q10, d1, d6
	vmull.u8	q11, d1, d7
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r7
	pld	[fp, sl]
	pld	[ip, sl, lsl #2]
	subge	sl, sl, r7
	subsge	r9, r9, #16
	ldrbge	r8, [fp, r5]!
	ldrbge	r8, [ip, r3, lsl #2]!
	vrshr.u16	q14, q8, #8
	vrshr.u16	q15, q9, #8
	vrshr.u16	q12, q10, #8
	vrshr.u16	q13, q11, #8
	vraddhn.i16	d28, q14, q8
	vraddhn.i16	d29, q15, q9
	vraddhn.i16	d30, q12, q10
	vraddhn.i16	d31, q13, q11
	vzip.8	d28, d30
	vzip.8	d29, d31
	vzip.8	d30, d31
	vzip.8	d28, d29
	tst	r0, #4
	beq	13f
	vst1.32	{d30-d31}, [r2, :128]!
13:	tst	r0, #2
	beq	14f
	vst1.32	{d29}, [r2, :64]!
14:	tst	r0, #1
	beq	9f
	vst1.32	{d28[1]}, [r2]!
9:	mov	r0, r7
	add	r2, r2, r3, lsl #2
	add	r4, r4, r5
	sub	r2, r2, r0, lsl #2
	sub	r4, r4, r0
	subs	r1, r1, #1
	mov	r6, r2
	bge	15b
	pop	{r4, r5, r6, r7, r8, r9, sl, fp, ip, pc}
1:	tst	r0, #8
	beq	16f
	vld4.8	{d4-d7}, [r6]!
	vld1.8	{d0}, [r4]!
	vmvn	d1, d0
	vmull.u8	q8, d1, d4
	vmull.u8	q9, d1, d5
	vmull.u8	q10, d1, d6
	vmull.u8	q11, d1, d7
	vrshr.u16	q14, q8, #8
	vrshr.u16	q15, q9, #8
	vrshr.u16	q12, q10, #8
	vrshr.u16	q13, q11, #8
	vraddhn.i16	d28, q14, q8
	vraddhn.i16	d29, q15, q9
	vraddhn.i16	d30, q12, q10
	vraddhn.i16	d31, q13, q11
	vst4.8	{d28-d31}, [r2]!
16:	tst	r0, #7
	beq	17f
	tst	r0, #4
	beq	18f
	vld1.8	{d0[4]}, [r4]!
	vld1.8	{d0[5]}, [r4]!
	vld1.8	{d0[6]}, [r4]!
	vld1.8	{d0[7]}, [r4]!
	vld1.32	{d6-d7}, [r6]!
18:	tst	r0, #2
	beq	19f
	vld1.8	{d0[2]}, [r4]!
	vld1.8	{d0[3]}, [r4]!
	vld1.32	{d5}, [r6]!
19:	tst	r0, #1
	beq	20f
	vld1.8	{d0[1]}, [r4]!
	vld1.32	{d4[1]}, [r6]!
20:	vuzp.8	d4, d5
	vuzp.8	d6, d7
	vuzp.8	d5, d7
	vuzp.8	d4, d6
	vmvn	d1, d0
	vmull.u8	q8, d1, d4
	vmull.u8	q9, d1, d5
	vmull.u8	q10, d1, d6
	vmull.u8	q11, d1, d7
	vrshr.u16	q14, q8, #8
	vrshr.u16	q15, q9, #8
	vrshr.u16	q12, q10, #8
	vrshr.u16	q13, q11, #8
	vraddhn.i16	d28, q14, q8
	vraddhn.i16	d29, q15, q9
	vraddhn.i16	d30, q12, q10
	vraddhn.i16	d31, q13, q11
	vzip.8	d28, d30
	vzip.8	d29, d31
	vzip.8	d30, d31
	vzip.8	d28, d29
	tst	r0, #4
	beq	21f
	vst1.32	{d30-d31}, [r2]!
21:	tst	r0, #2
	beq	22f
	vst1.32	{d29}, [r2]!
22:	tst	r0, #1
	beq	17f
	vst1.32	{d28[1]}, [r2]!
17:	mov	r0, r7
	add	r2, r2, r3, lsl #2
	add	r4, r4, r5
	sub	r2, r2, r0, lsl #2
	sub	r4, r4, r0
	subs	r1, r1, #1
	mov	r6, r2
	bge	1b
0:	pop	{r4, r5, r6, r7, r8, r9, sl, fp, ip, pc}

.global _pixman_composite_scanline_add_asm_neon
_pixman_composite_scanline_add_asm_neon:
	mov	ip, r1
	cmp	r0, #8
	blt	0f
	tst	ip, #15
	beq	1f
	tst	ip, #4
	beq	2f
	vld1.32	{d0[1]}, [r2]!
	vld1.32	{d4[1]}, [ip]!
	sub	r0, r0, #1
2:	tst	ip, #8
	beq	3f
	vld1.32	{d1}, [r2]!
	vld1.32	{d5}, [ip, :64]!
	sub	r0, r0, #2
3:	vld1.32	{d2-d3}, [r2]!
	vld1.32	{d6-d7}, [ip, :128]!
	sub	r0, r0, #4
	vqadd.u8	q14, q0, q2
	vqadd.u8	q15, q1, q3
	tst	r1, #4
	beq	4f
	vst1.32	{d28[1]}, [r1]!
4:	tst	r1, #8
	beq	5f
	vst1.32	{d29}, [r1, :64]!
5:	vst1.32	{d30-d31}, [r1, :128]!
1:	subs	r0, r0, #8
	blt	6f
	vld1.32	{d4-d7}, [ip, :128]!
	vld1.32	{d0-d3}, [r2]!
	vqadd.u8	q14, q0, q2
	vqadd.u8	q15, q1, q3
	subs	r0, r0, #8
	blt	7f
8:	vld1.32	{d0-d3}, [r2]!
	vld1.32	{d4-d7}, [ip, :128]!
	vst1.32	{d28-d31}, [r1, :128]!
	vqadd.u8	q14, q0, q2
	vqadd.u8	q15, q1, q3
	subs	r0, r0, #8
	bge	8b
7:	vst1.32	{d28-d31}, [r1, :128]!
6:	tst	r0, #7
	beq	9f
	tst	r0, #4
	beq	10f
	vld1.32	{d2-d3}, [r2]!
	vld1.32	{d6-d7}, [ip, :128]!
10:	tst	r0, #2
	beq	11f
	vld1.32	{d1}, [r2]!
	vld1.32	{d5}, [ip, :64]!
11:	tst	r0, #1
	beq	12f
	vld1.32	{d0[1]}, [r2]!
	vld1.32	{d4[1]}, [ip]!
12:	vqadd.u8	q14, q0, q2
	vqadd.u8	q15, q1, q3
	tst	r0, #4
	beq	13f
	vst1.32	{d30-d31}, [r1, :128]!
13:	tst	r0, #2
	beq	14f
	vst1.32	{d29}, [r1, :64]!
14:	tst	r0, #1
	beq	9f
	vst1.32	{d28[1]}, [r1]!
9:	bx	lr
0:	tst	r0, #7
	beq	15f
	tst	r0, #4
	beq	16f
	vld1.32	{d2-d3}, [r2]!
	vld1.32	{d6-d7}, [ip]!
16:	tst	r0, #2
	beq	17f
	vld1.32	{d1}, [r2]!
	vld1.32	{d5}, [ip]!
17:	tst	r0, #1
	beq	18f
	vld1.32	{d0[1]}, [r2]!
	vld1.32	{d4[1]}, [ip]!
18:	vqadd.u8	q14, q0, q2
	vqadd.u8	q15, q1, q3
	tst	r0, #4
	beq	19f
	vst1.32	{d30-d31}, [r1]!
19:	tst	r0, #2
	beq	20f
	vst1.32	{d29}, [r1]!
20:	tst	r0, #1
	beq	15f
	vst1.32	{d28[1]}, [r1]!
15:	bx	lr

.global _pixman_composite_src_n_0565_asm_neon
_pixman_composite_src_n_0565_asm_neon:
	push	{r4, r5, r6, r7, r8, r9, sl, fp, ip, lr}
	mov	r6, r2
	add	ip, sp, #40
	vld1.32	{d0[0]}, [ip]
	vsli.64	d0, d0, #16
	vsli.64	d0, d0, #32
	vorr	d1, d0, d0
	vorr	q1, q0, q0
	subs	r1, r1, #1
	mov	sl, r0
	blt	0f
	cmp	r0, #32
	blt	1f
19:	tst	r6, #15
	beq	2f
	tst	r6, #2
	beq	3f
	add	r6, r6, #2
	sub	r0, r0, #1
3:	tst	r6, #4
	beq	4f
	add	r6, r6, #4
	sub	r0, r0, #2
4:	tst	r6, #8
	beq	5f
	add	r6, r6, #8
	sub	r0, r0, #4
5:	add	r6, r6, #16
	sub	r0, r0, #8
	tst	r2, #2
	beq	6f
	vst1.16	{d0[1]}, [r2]!
6:	tst	r2, #4
	beq	7f
	vst1.16	{d0[2]}, [r2]!
	vst1.16	{d0[3]}, [r2]!
7:	tst	r2, #8
	beq	8f
	vst1.16	{d1}, [r2, :64]!
8:	vst1.16	{d2-d3}, [r2, :128]!
2:	subs	r0, r0, #32
	blt	9f
10:	vst1.16	{d0-d3}, [r2, :128]!
	subs	r0, r0, #16
	bge	10b
9:	vst1.16	{d0-d3}, [r2, :128]!
	tst	r0, #15
	beq	11f
	tst	r0, #8
	beq	12f
12:	tst	r0, #4
	beq	13f
13:	tst	r0, #2
	beq	14f
14:	tst	r0, #1
	beq	15f
15:	tst	r0, #8
	beq	16f
	vst1.16	{d2-d3}, [r2, :128]!
16:	tst	r0, #4
	beq	17f
	vst1.16	{d1}, [r2, :64]!
17:	tst	r0, #2
	beq	18f
	vst1.16	{d0[2]}, [r2]!
	vst1.16	{d0[3]}, [r2]!
18:	tst	r0, #1
	beq	11f
	vst1.16	{d0[1]}, [r2]!
11:	mov	r0, sl
	add	r2, r2, r3, lsl #1
	sub	r2, r2, r0, lsl #1
	subs	r1, r1, #1
	mov	r6, r2
	bge	19b
	pop	{r4, r5, r6, r7, r8, r9, sl, fp, ip, pc}
1:	tst	r0, #16
	beq	20f
	vst1.16	{d0-d3}, [r2]!
20:	tst	r0, #15
	beq	21f
	tst	r0, #8
	beq	22f
22:	tst	r0, #4
	beq	23f
23:	tst	r0, #2
	beq	24f
24:	tst	r0, #1
	beq	25f
25:	tst	r0, #8
	beq	26f
	vst1.16	{d2-d3}, [r2]!
26:	tst	r0, #4
	beq	27f
	vst1.16	{d1}, [r2]!
27:	tst	r0, #2
	beq	28f
	vst1.16	{d0[2]}, [r2]!
	vst1.16	{d0[3]}, [r2]!
28:	tst	r0, #1
	beq	21f
	vst1.16	{d0[1]}, [r2]!
21:	mov	r0, sl
	add	r2, r2, r3, lsl #1
	sub	r2, r2, r0, lsl #1
	subs	r1, r1, #1
	mov	r6, r2
	bge	1b
0:	pop	{r4, r5, r6, r7, r8, r9, sl, fp, ip, pc}

.global _pixman_composite_src_pixbuf_8888_asm_neon
_pixman_composite_src_pixbuf_8888_asm_neon:
	push	{r4, r5, r6, r7, r8, r9, sl, fp, ip, lr}
	ldr	r4, [sp, #40]
	mov	sl, #0
	ldr	r5, [sp, #44]
	mov	r6, r2
	mov	fp, r4
	mov	ip, r6
	mov	lr, r7
	lsl	r9, r1, #4
	sub	r9, r9, #6
	subs	r1, r1, #1
	mov	r7, r0
	blt	0f
	cmp	r0, #16
	blt	1f
15:	tst	r6, #15
	beq	2f
	tst	r6, #4
	beq	3f
	vld1.32	{d0[1]}, [r4]!
	add	r6, r6, #4
	add	sl, sl, #1
	sub	r0, r0, #1
3:	tst	r6, #8
	beq	4f
	vld1.32	{d1}, [r4]!
	add	r6, r6, #8
	add	sl, sl, #2
	sub	r0, r0, #2
4:	vld1.32	{d2-d3}, [r4]!
	add	r6, r6, #16
	add	sl, sl, #4
	sub	r0, r0, #4
	vuzp.8	d0, d1
	vuzp.8	d2, d3
	vuzp.8	d1, d3
	vuzp.8	d0, d2
	vmull.u8	q8, d3, d0
	vmull.u8	q9, d3, d1
	vmull.u8	q10, d3, d2
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r7
	pld	[fp, sl, lsl #2]
	subge	sl, sl, r7
	subsge	r9, r9, #16
	ldrbge	r8, [fp, r5, lsl #2]!
	vrshr.u16	q11, q8, #8
	vswp	d3, d31
	vrshr.u16	q12, q9, #8
	vrshr.u16	q13, q10, #8
	vraddhn.i16	d30, q11, q8
	vraddhn.i16	d29, q12, q9
	vraddhn.i16	d28, q13, q10
	vzip.8	d28, d30
	vzip.8	d29, d31
	vzip.8	d30, d31
	vzip.8	d28, d29
	tst	r2, #4
	beq	5f
	vst1.32	{d28[1]}, [r2]!
5:	tst	r2, #8
	beq	6f
	vst1.32	{d29}, [r2, :64]!
6:	vst1.32	{d30-d31}, [r2, :128]!
2:	vld4.8	{d0-d3}, [r4]!
	add	sl, sl, #8
	vmull.u8	q8, d3, d0
	vmull.u8	q9, d3, d1
	vmull.u8	q10, d3, d2
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r7
	pld	[fp, sl, lsl #2]
	subge	sl, sl, r7
	subsge	r9, r9, #16
	ldrbge	r8, [fp, r5, lsl #2]!
	subs	r0, r0, #16
	blt	7f
8:	vrshr.u16	q11, q8, #8
	vswp	d3, d31
	vrshr.u16	q12, q9, #8
	vrshr.u16	q13, q10, #8
	vld4.8	{d0-d3}, [r4]!
	vraddhn.i16	d30, q11, q8
	add	sl, sl, #8
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	vraddhn.i16	d29, q12, q9
	vraddhn.i16	d28, q13, q10
	vmull.u8	q8, d3, d0
	vmull.u8	q9, d3, d1
	vmull.u8	q10, d3, d2
	vst4.8	{d28-d31}, [r2, :128]!
	cmp	sl, r7
	pld	[fp, sl, lsl #2]
	subge	sl, sl, r7
	subsge	r9, r9, #16
	ldrbge	r8, [fp, r5, lsl #2]!
	subs	r0, r0, #8
	bge	8b
7:	vrshr.u16	q11, q8, #8
	vswp	d3, d31
	vrshr.u16	q12, q9, #8
	vrshr.u16	q13, q10, #8
	vraddhn.i16	d30, q11, q8
	vraddhn.i16	d29, q12, q9
	vraddhn.i16	d28, q13, q10
	vst4.8	{d28-d31}, [r2, :128]!
	tst	r0, #7
	beq	9f
	tst	r0, #4
	beq	10f
	vld1.32	{d2-d3}, [r4]!
	add	sl, sl, #4
10:	tst	r0, #2
	beq	11f
	vld1.32	{d1}, [r4]!
	add	sl, sl, #2
11:	tst	r0, #1
	beq	12f
	vld1.32	{d0[1]}, [r4]!
	add	sl, sl, #1
12:	vuzp.8	d0, d1
	vuzp.8	d2, d3
	vuzp.8	d1, d3
	vuzp.8	d0, d2
	vmull.u8	q8, d3, d0
	vmull.u8	q9, d3, d1
	vmull.u8	q10, d3, d2
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r7
	pld	[fp, sl, lsl #2]
	subge	sl, sl, r7
	subsge	r9, r9, #16
	ldrbge	r8, [fp, r5, lsl #2]!
	vrshr.u16	q11, q8, #8
	vswp	d3, d31
	vrshr.u16	q12, q9, #8
	vrshr.u16	q13, q10, #8
	vraddhn.i16	d30, q11, q8
	vraddhn.i16	d29, q12, q9
	vraddhn.i16	d28, q13, q10
	vzip.8	d28, d30
	vzip.8	d29, d31
	vzip.8	d30, d31
	vzip.8	d28, d29
	tst	r0, #4
	beq	13f
	vst1.32	{d30-d31}, [r2, :128]!
13:	tst	r0, #2
	beq	14f
	vst1.32	{d29}, [r2, :64]!
14:	tst	r0, #1
	beq	9f
	vst1.32	{d28[1]}, [r2]!
9:	mov	r0, r7
	add	r2, r2, r3, lsl #2
	add	r4, r4, r5, lsl #2
	sub	r2, r2, r0, lsl #2
	sub	r4, r4, r0, lsl #2
	subs	r1, r1, #1
	mov	r6, r2
	bge	15b
	pop	{r4, r5, r6, r7, r8, r9, sl, fp, ip, pc}
1:	tst	r0, #8
	beq	16f
	vld4.8	{d0-d3}, [r4]!
	vmull.u8	q8, d3, d0
	vmull.u8	q9, d3, d1
	vmull.u8	q10, d3, d2
	vrshr.u16	q11, q8, #8
	vswp	d3, d31
	vrshr.u16	q12, q9, #8
	vrshr.u16	q13, q10, #8
	vraddhn.i16	d30, q11, q8
	vraddhn.i16	d29, q12, q9
	vraddhn.i16	d28, q13, q10
	vst4.8	{d28-d31}, [r2]!
16:	tst	r0, #7
	beq	17f
	tst	r0, #4
	beq	18f
	vld1.32	{d2-d3}, [r4]!
18:	tst	r0, #2
	beq	19f
	vld1.32	{d1}, [r4]!
19:	tst	r0, #1
	beq	20f
	vld1.32	{d0[1]}, [r4]!
20:	vuzp.8	d0, d1
	vuzp.8	d2, d3
	vuzp.8	d1, d3
	vuzp.8	d0, d2
	vmull.u8	q8, d3, d0
	vmull.u8	q9, d3, d1
	vmull.u8	q10, d3, d2
	vrshr.u16	q11, q8, #8
	vswp	d3, d31
	vrshr.u16	q12, q9, #8
	vrshr.u16	q13, q10, #8
	vraddhn.i16	d30, q11, q8
	vraddhn.i16	d29, q12, q9
	vraddhn.i16	d28, q13, q10
	vzip.8	d28, d30
	vzip.8	d29, d31
	vzip.8	d30, d31
	vzip.8	d28, d29
	tst	r0, #4
	beq	21f
	vst1.32	{d30-d31}, [r2]!
21:	tst	r0, #2
	beq	22f
	vst1.32	{d29}, [r2]!
22:	tst	r0, #1
	beq	17f
	vst1.32	{d28[1]}, [r2]!
17:	mov	r0, r7
	add	r2, r2, r3, lsl #2
	add	r4, r4, r5, lsl #2
	sub	r2, r2, r0, lsl #2
	sub	r4, r4, r0, lsl #2
	subs	r1, r1, #1
	mov	r6, r2
	bge	1b
0:	pop	{r4, r5, r6, r7, r8, r9, sl, fp, ip, pc}

.global _pixman_composite_over_n_8888_0565_ca_asm_neon
_pixman_composite_over_n_8888_0565_ca_asm_neon:
	push	{r4, r5, r6, r7, r8, r9, sl, fp, ip, lr}
	ldr	r7, [sp, #48]
	mov	sl, #0
	ldr	r8, [sp, #52]
	mov	r6, r2
	mov	fp, r4
	mov	ip, r6
	mov	lr, r7
	lsl	r9, r1, #4
	sub	r9, r9, #11
	add	r5, sp, #40
	vstmdb	sp!, {d8-d15}
	vld1.32	{d11[0]}, [r5]
	vdup.8	d8, d11[0]
	vdup.8	d9, d11[1]
	vdup.8	d10, d11[2]
	vdup.8	d11, d11[3]
	subs	r1, r1, #1
	mov	r4, r0
	blt	0f
	cmp	r0, #16
	blt	1f
16:	tst	r6, #15
	beq	2f
	tst	r6, #2
	beq	3f
	vld1.32	{d24[1]}, [r7]!
	vld1.16	{d4[1]}, [r6]!
	add	sl, sl, #1
	sub	r0, r0, #1
3:	tst	r6, #4
	beq	4f
	vld1.32	{d25}, [r7]!
	vld1.16	{d4[2]}, [r6]!
	vld1.16	{d4[3]}, [r6]!
	add	sl, sl, #2
	sub	r0, r0, #2
4:	tst	r6, #8
	beq	5f
	vld1.32	{d26-d27}, [r7]!
	vld1.16	{d5}, [r6, :64]!
	add	sl, sl, #4
	sub	r0, r0, #4
5:	vuzp.8	d24, d25
	vuzp.8	d26, d27
	vuzp.8	d25, d27
	vuzp.8	d24, d26
	vmull.u8	q0, d24, d8
	vmull.u8	q1, d25, d9
	vmull.u8	q6, d26, d10
	vmull.u8	q9, d11, d25
	vmull.u8	q12, d11, d24
	vmull.u8	q13, d11, d26
	vrshr.u16	q8, q0, #8
	vrshr.u16	q10, q1, #8
	vrshr.u16	q11, q6, #8
	vraddhn.i16	d0, q0, q8
	vraddhn.i16	d1, q1, q10
	vraddhn.i16	d2, q6, q11
	vrshr.u16	q11, q12, #8
	vrshr.u16	q8, q9, #8
	vrshr.u16	q6, q13, #8
	vraddhn.i16	d24, q12, q11
	vraddhn.i16	d25, q9, q8
	vshrn.i16	d17, q2, #3
	vshrn.i16	d18, q2, #8
	vraddhn.i16	d26, q13, q6
	vsli.16	q2, q2, #5
	vsri.8	d18, d18, #5
	vsri.8	d17, d17, #6
	vmvn	q12, q12
	vshrn.i16	d16, q2, #2
	vmvn	d26, d26
	vmull.u8	q6, d16, d24
	vmull.u8	q7, d17, d25
	vmull.u8	q11, d18, d26
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r4
	pld	[ip, sl, lsl #1]
	pld	[lr, sl, lsl #2]
	subge	sl, sl, r4
	subsge	r9, r9, #16
	ldrbge	r5, [ip, r3, lsl #1]!
	ldrbge	r5, [lr, r8, lsl #2]!
	vrshr.u16	q10, q6, #8
	vrshr.u16	q14, q7, #8
	vrshr.u16	q15, q11, #8
	vraddhn.i16	d16, q10, q6
	vraddhn.i16	d17, q14, q7
	vraddhn.i16	d18, q15, q11
	vqadd.u8	q8, q0, q8
	vqadd.u8	d18, d2, d18
	vshll.i8	q14, d18, #8
	vshll.i8	q10, d17, #8
	vshll.i8	q15, d16, #8
	vsri.16	q14, q10, #5
	vsri.16	q14, q15, #11
	tst	r2, #2
	beq	6f
	vst1.16	{d28[1]}, [r2]!
6:	tst	r2, #4
	beq	7f
	vst1.16	{d28[2]}, [r2]!
	vst1.16	{d28[3]}, [r2]!
7:	tst	r2, #8
	beq	2f
	vst1.16	{d29}, [r2, :64]!
2:	vld1.16	{d4-d5}, [r6, :128]!
	vld4.8	{d24-d27}, [r7]!
	add	sl, sl, #8
	vmull.u8	q0, d24, d8
	vmull.u8	q1, d25, d9
	vmull.u8	q6, d26, d10
	vmull.u8	q9, d11, d25
	vmull.u8	q12, d11, d24
	vmull.u8	q13, d11, d26
	vrshr.u16	q8, q0, #8
	vrshr.u16	q10, q1, #8
	vrshr.u16	q11, q6, #8
	vraddhn.i16	d0, q0, q8
	vraddhn.i16	d1, q1, q10
	vraddhn.i16	d2, q6, q11
	vrshr.u16	q11, q12, #8
	vrshr.u16	q8, q9, #8
	vrshr.u16	q6, q13, #8
	vraddhn.i16	d24, q12, q11
	vraddhn.i16	d25, q9, q8
	vshrn.i16	d17, q2, #3
	vshrn.i16	d18, q2, #8
	vraddhn.i16	d26, q13, q6
	vsli.16	q2, q2, #5
	vsri.8	d18, d18, #5
	vsri.8	d17, d17, #6
	vmvn	q12, q12
	vshrn.i16	d16, q2, #2
	vmvn	d26, d26
	vmull.u8	q6, d16, d24
	vmull.u8	q7, d17, d25
	vmull.u8	q11, d18, d26
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r4
	pld	[ip, sl, lsl #1]
	pld	[lr, sl, lsl #2]
	subge	sl, sl, r4
	subsge	r9, r9, #16
	ldrbge	r5, [ip, r3, lsl #1]!
	ldrbge	r5, [lr, r8, lsl #2]!
	subs	r0, r0, #16
	blt	8f
9:	vld4.8	{d24-d27}, [r7]!
	vrshr.u16	q10, q6, #8
	vrshr.u16	q14, q7, #8
	vld1.16	{d4-d5}, [r6, :128]!
	vrshr.u16	q15, q11, #8
	vraddhn.i16	d16, q10, q6
	vraddhn.i16	d17, q14, q7
	vraddhn.i16	d22, q15, q11
	vmull.u8	q6, d26, d10
	vqadd.u8	q8, q0, q8
	vmull.u8	q0, d24, d8
	vqadd.u8	d22, d2, d22
	vmull.u8	q1, d25, d9
	vshll.i8	q14, d22, #8
	vshll.i8	q10, d17, #8
	vshll.i8	q15, d16, #8
	vmull.u8	q9, d11, d25
	vsri.16	q14, q10, #5
	vmull.u8	q12, d11, d24
	vmull.u8	q13, d11, d26
	vsri.16	q14, q15, #11
	add	sl, sl, #8
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r4
	pld	[ip, sl, lsl #1]
	pld	[lr, sl, lsl #2]
	subge	sl, sl, r4
	subsge	r9, r9, #16
	ldrbge	r5, [ip, r3, lsl #1]!
	ldrbge	r5, [lr, r8, lsl #2]!
	vrshr.u16	q8, q0, #8
	vrshr.u16	q10, q1, #8
	vrshr.u16	q11, q6, #8
	vraddhn.i16	d0, q0, q8
	vraddhn.i16	d1, q1, q10
	vraddhn.i16	d2, q6, q11
	vrshr.u16	q11, q12, #8
	vrshr.u16	q8, q9, #8
	vrshr.u16	q6, q13, #8
	vraddhn.i16	d24, q12, q11
	vraddhn.i16	d25, q9, q8
	vshrn.i16	d17, q2, #3
	vshrn.i16	d18, q2, #8
	vraddhn.i16	d26, q13, q6
	vsli.16	q2, q2, #5
	vsri.8	d17, d17, #6
	vsri.8	d18, d18, #5
	vmvn	q12, q12
	vshrn.i16	d16, q2, #2
	vmvn	d26, d26
	vmull.u8	q7, d17, d25
	vmull.u8	q6, d16, d24
	vmull.u8	q11, d18, d26
	vst1.16	{d28-d29}, [r2, :128]!
	subs	r0, r0, #8
	bge	9b
8:	vrshr.u16	q10, q6, #8
	vrshr.u16	q14, q7, #8
	vrshr.u16	q15, q11, #8
	vraddhn.i16	d16, q10, q6
	vraddhn.i16	d17, q14, q7
	vraddhn.i16	d18, q15, q11
	vqadd.u8	q8, q0, q8
	vqadd.u8	d18, d2, d18
	vshll.i8	q14, d18, #8
	vshll.i8	q10, d17, #8
	vshll.i8	q15, d16, #8
	vsri.16	q14, q10, #5
	vsri.16	q14, q15, #11
	vst1.16	{d28-d29}, [r2, :128]!
	tst	r0, #7
	beq	10f
	tst	r0, #4
	beq	11f
	vld1.32	{d26-d27}, [r7]!
	vld1.16	{d5}, [r6, :64]!
	add	sl, sl, #4
11:	tst	r0, #2
	beq	12f
	vld1.32	{d25}, [r7]!
	vld1.16	{d4[2]}, [r6]!
	vld1.16	{d4[3]}, [r6]!
	add	sl, sl, #2
12:	tst	r0, #1
	beq	13f
	vld1.32	{d24[1]}, [r7]!
	vld1.16	{d4[1]}, [r6]!
	add	sl, sl, #1
13:	vuzp.8	d24, d25
	vuzp.8	d26, d27
	vuzp.8	d25, d27
	vuzp.8	d24, d26
	vmull.u8	q0, d24, d8
	vmull.u8	q1, d25, d9
	vmull.u8	q6, d26, d10
	vmull.u8	q9, d11, d25
	vmull.u8	q12, d11, d24
	vmull.u8	q13, d11, d26
	vrshr.u16	q8, q0, #8
	vrshr.u16	q10, q1, #8
	vrshr.u16	q11, q6, #8
	vraddhn.i16	d0, q0, q8
	vraddhn.i16	d1, q1, q10
	vraddhn.i16	d2, q6, q11
	vrshr.u16	q11, q12, #8
	vrshr.u16	q8, q9, #8
	vrshr.u16	q6, q13, #8
	vraddhn.i16	d24, q12, q11
	vraddhn.i16	d25, q9, q8
	vshrn.i16	d17, q2, #3
	vshrn.i16	d18, q2, #8
	vraddhn.i16	d26, q13, q6
	vsli.16	q2, q2, #5
	vsri.8	d18, d18, #5
	vsri.8	d17, d17, #6
	vmvn	q12, q12
	vshrn.i16	d16, q2, #2
	vmvn	d26, d26
	vmull.u8	q6, d16, d24
	vmull.u8	q7, d17, d25
	vmull.u8	q11, d18, d26
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r4
	pld	[ip, sl, lsl #1]
	pld	[lr, sl, lsl #2]
	subge	sl, sl, r4
	subsge	r9, r9, #16
	ldrbge	r5, [ip, r3, lsl #1]!
	ldrbge	r5, [lr, r8, lsl #2]!
	vrshr.u16	q10, q6, #8
	vrshr.u16	q14, q7, #8
	vrshr.u16	q15, q11, #8
	vraddhn.i16	d16, q10, q6
	vraddhn.i16	d17, q14, q7
	vraddhn.i16	d18, q15, q11
	vqadd.u8	q8, q0, q8
	vqadd.u8	d18, d2, d18
	vshll.i8	q14, d18, #8
	vshll.i8	q10, d17, #8
	vshll.i8	q15, d16, #8
	vsri.16	q14, q10, #5
	vsri.16	q14, q15, #11
	tst	r0, #4
	beq	14f
	vst1.16	{d29}, [r2, :64]!
14:	tst	r0, #2
	beq	15f
	vst1.16	{d28[2]}, [r2]!
	vst1.16	{d28[3]}, [r2]!
15:	tst	r0, #1
	beq	10f
	vst1.16	{d28[1]}, [r2]!
10:	mov	r0, r4
	add	r2, r2, r3, lsl #1
	add	r7, r7, r8, lsl #2
	sub	r2, r2, r0, lsl #1
	sub	r7, r7, r0, lsl #2
	subs	r1, r1, #1
	mov	r6, r2
	bge	16b
	vldmia	sp!, {d8-d15}
	pop	{r4, r5, r6, r7, r8, r9, sl, fp, ip, pc}
1:	tst	r0, #8
	beq	17f
	vld1.16	{d4-d5}, [r6]!
	vld4.8	{d24-d27}, [r7]!
	vmull.u8	q0, d24, d8
	vmull.u8	q1, d25, d9
	vmull.u8	q6, d26, d10
	vmull.u8	q9, d11, d25
	vmull.u8	q12, d11, d24
	vmull.u8	q13, d11, d26
	vrshr.u16	q8, q0, #8
	vrshr.u16	q10, q1, #8
	vrshr.u16	q11, q6, #8
	vraddhn.i16	d0, q0, q8
	vraddhn.i16	d1, q1, q10
	vraddhn.i16	d2, q6, q11
	vrshr.u16	q11, q12, #8
	vrshr.u16	q8, q9, #8
	vrshr.u16	q6, q13, #8
	vraddhn.i16	d24, q12, q11
	vraddhn.i16	d25, q9, q8
	vshrn.i16	d17, q2, #3
	vshrn.i16	d18, q2, #8
	vraddhn.i16	d26, q13, q6
	vsli.16	q2, q2, #5
	vsri.8	d18, d18, #5
	vsri.8	d17, d17, #6
	vmvn	q12, q12
	vshrn.i16	d16, q2, #2
	vmvn	d26, d26
	vmull.u8	q6, d16, d24
	vmull.u8	q7, d17, d25
	vmull.u8	q11, d18, d26
	vrshr.u16	q10, q6, #8
	vrshr.u16	q14, q7, #8
	vrshr.u16	q15, q11, #8
	vraddhn.i16	d16, q10, q6
	vraddhn.i16	d17, q14, q7
	vraddhn.i16	d18, q15, q11
	vqadd.u8	q8, q0, q8
	vqadd.u8	d18, d2, d18
	vshll.i8	q14, d18, #8
	vshll.i8	q10, d17, #8
	vshll.i8	q15, d16, #8
	vsri.16	q14, q10, #5
	vsri.16	q14, q15, #11
	vst1.16	{d28-d29}, [r2]!
17:	tst	r0, #7
	beq	18f
	tst	r0, #4
	beq	19f
	vld1.32	{d26-d27}, [r7]!
	vld1.16	{d5}, [r6]!
19:	tst	r0, #2
	beq	20f
	vld1.32	{d25}, [r7]!
	vld1.16	{d4[2]}, [r6]!
	vld1.16	{d4[3]}, [r6]!
20:	tst	r0, #1
	beq	21f
	vld1.32	{d24[1]}, [r7]!
	vld1.16	{d4[1]}, [r6]!
21:	vuzp.8	d24, d25
	vuzp.8	d26, d27
	vuzp.8	d25, d27
	vuzp.8	d24, d26
	vmull.u8	q0, d24, d8
	vmull.u8	q1, d25, d9
	vmull.u8	q6, d26, d10
	vmull.u8	q9, d11, d25
	vmull.u8	q12, d11, d24
	vmull.u8	q13, d11, d26
	vrshr.u16	q8, q0, #8
	vrshr.u16	q10, q1, #8
	vrshr.u16	q11, q6, #8
	vraddhn.i16	d0, q0, q8
	vraddhn.i16	d1, q1, q10
	vraddhn.i16	d2, q6, q11
	vrshr.u16	q11, q12, #8
	vrshr.u16	q8, q9, #8
	vrshr.u16	q6, q13, #8
	vraddhn.i16	d24, q12, q11
	vraddhn.i16	d25, q9, q8
	vshrn.i16	d17, q2, #3
	vshrn.i16	d18, q2, #8
	vraddhn.i16	d26, q13, q6
	vsli.16	q2, q2, #5
	vsri.8	d18, d18, #5
	vsri.8	d17, d17, #6
	vmvn	q12, q12
	vshrn.i16	d16, q2, #2
	vmvn	d26, d26
	vmull.u8	q6, d16, d24
	vmull.u8	q7, d17, d25
	vmull.u8	q11, d18, d26
	vrshr.u16	q10, q6, #8
	vrshr.u16	q14, q7, #8
	vrshr.u16	q15, q11, #8
	vraddhn.i16	d16, q10, q6
	vraddhn.i16	d17, q14, q7
	vraddhn.i16	d18, q15, q11
	vqadd.u8	q8, q0, q8
	vqadd.u8	d18, d2, d18
	vshll.i8	q14, d18, #8
	vshll.i8	q10, d17, #8
	vshll.i8	q15, d16, #8
	vsri.16	q14, q10, #5
	vsri.16	q14, q15, #11
	tst	r0, #4
	beq	22f
	vst1.16	{d29}, [r2]!
22:	tst	r0, #2
	beq	23f
	vst1.16	{d28[2]}, [r2]!
	vst1.16	{d28[3]}, [r2]!
23:	tst	r0, #1
	beq	18f
	vst1.16	{d28[1]}, [r2]!
18:	mov	r0, r4
	add	r2, r2, r3, lsl #1
	add	r7, r7, r8, lsl #2
	sub	r2, r2, r0, lsl #1
	sub	r7, r7, r0, lsl #2
	subs	r1, r1, #1
	mov	r6, r2
	bge	1b
0:	vldmia	sp!, {d8-d15}
	pop	{r4, r5, r6, r7, r8, r9, sl, fp, ip, pc}

.global _pixman_composite_scanline_over_asm_neon
_pixman_composite_scanline_over_asm_neon:
	mov	ip, r1
	cmp	r0, #8
	blt	0f
	tst	ip, #15
	beq	1f
	tst	ip, #4
	beq	2f
	vld1.32	{d0[1]}, [r2]!
	vld1.32	{d4[1]}, [ip]!
	sub	r0, r0, #1
2:	tst	ip, #8
	beq	3f
	vld1.32	{d1}, [r2]!
	vld1.32	{d5}, [ip, :64]!
	sub	r0, r0, #2
3:	vld1.32	{d2-d3}, [r2]!
	vld1.32	{d6-d7}, [ip, :128]!
	sub	r0, r0, #4
	vuzp.8	d0, d1
	vuzp.8	d2, d3
	vuzp.8	d1, d3
	vuzp.8	d0, d2
	vuzp.8	d4, d5
	vuzp.8	d6, d7
	vuzp.8	d5, d7
	vuzp.8	d4, d6
	vmvn	d24, d3
	vmull.u8	q8, d24, d4
	vmull.u8	q9, d24, d5
	vmull.u8	q10, d24, d6
	vmull.u8	q11, d24, d7
	vrshr.u16	q14, q8, #8
	vrshr.u16	q15, q9, #8
	vrshr.u16	q12, q10, #8
	vrshr.u16	q13, q11, #8
	vraddhn.i16	d28, q14, q8
	vraddhn.i16	d29, q15, q9
	vraddhn.i16	d30, q12, q10
	vraddhn.i16	d31, q13, q11
	vqadd.u8	q14, q0, q14
	vqadd.u8	q15, q1, q15
	vzip.8	d28, d30
	vzip.8	d29, d31
	vzip.8	d30, d31
	vzip.8	d28, d29
	tst	r1, #4
	beq	4f
	vst1.32	{d28[1]}, [r1]!
4:	tst	r1, #8
	beq	5f
	vst1.32	{d29}, [r1, :64]!
5:	vst1.32	{d30-d31}, [r1, :128]!
1:	subs	r0, r0, #8
	blt	6f
	vld4.8	{d4-d7}, [ip, :128]!
	vld4.8	{d0-d3}, [r2]!
	vmvn	d24, d3
	vmull.u8	q8, d24, d4
	vmull.u8	q9, d24, d5
	vmull.u8	q10, d24, d6
	vmull.u8	q11, d24, d7
	subs	r0, r0, #8
	blt	7f
8:	vld4.8	{d4-d7}, [ip, :128]!
	vrshr.u16	q14, q8, #8
	vrshr.u16	q15, q9, #8
	vrshr.u16	q12, q10, #8
	vrshr.u16	q13, q11, #8
	vraddhn.i16	d28, q14, q8
	vraddhn.i16	d29, q15, q9
	vraddhn.i16	d30, q12, q10
	vraddhn.i16	d31, q13, q11
	vqadd.u8	q14, q0, q14
	vqadd.u8	q15, q1, q15
	vld4.8	{d0-d3}, [r2]!
	vmvn	d22, d3
	vst4.8	{d28-d31}, [r1, :128]!
	vmull.u8	q8, d22, d4
	vmull.u8	q9, d22, d5
	vmull.u8	q10, d22, d6
	vmull.u8	q11, d22, d7
	subs	r0, r0, #8
	bge	8b
7:	vrshr.u16	q14, q8, #8
	vrshr.u16	q15, q9, #8
	vrshr.u16	q12, q10, #8
	vrshr.u16	q13, q11, #8
	vraddhn.i16	d28, q14, q8
	vraddhn.i16	d29, q15, q9
	vraddhn.i16	d30, q12, q10
	vraddhn.i16	d31, q13, q11
	vqadd.u8	q14, q0, q14
	vqadd.u8	q15, q1, q15
	vst4.8	{d28-d31}, [r1, :128]!
6:	tst	r0, #7
	beq	9f
	tst	r0, #4
	beq	10f
	vld1.32	{d2-d3}, [r2]!
	vld1.32	{d6-d7}, [ip, :128]!
10:	tst	r0, #2
	beq	11f
	vld1.32	{d1}, [r2]!
	vld1.32	{d5}, [ip, :64]!
11:	tst	r0, #1
	beq	12f
	vld1.32	{d0[1]}, [r2]!
	vld1.32	{d4[1]}, [ip]!
12:	vuzp.8	d0, d1
	vuzp.8	d2, d3
	vuzp.8	d1, d3
	vuzp.8	d0, d2
	vuzp.8	d4, d5
	vuzp.8	d6, d7
	vuzp.8	d5, d7
	vuzp.8	d4, d6
	vmvn	d24, d3
	vmull.u8	q8, d24, d4
	vmull.u8	q9, d24, d5
	vmull.u8	q10, d24, d6
	vmull.u8	q11, d24, d7
	vrshr.u16	q14, q8, #8
	vrshr.u16	q15, q9, #8
	vrshr.u16	q12, q10, #8
	vrshr.u16	q13, q11, #8
	vraddhn.i16	d28, q14, q8
	vraddhn.i16	d29, q15, q9
	vraddhn.i16	d30, q12, q10
	vraddhn.i16	d31, q13, q11
	vqadd.u8	q14, q0, q14
	vqadd.u8	q15, q1, q15
	vzip.8	d28, d30
	vzip.8	d29, d31
	vzip.8	d30, d31
	vzip.8	d28, d29
	tst	r0, #4
	beq	13f
	vst1.32	{d30-d31}, [r1, :128]!
13:	tst	r0, #2
	beq	14f
	vst1.32	{d29}, [r1, :64]!
14:	tst	r0, #1
	beq	9f
	vst1.32	{d28[1]}, [r1]!
9:	bx	lr
0:	tst	r0, #7
	beq	15f
	tst	r0, #4
	beq	16f
	vld1.32	{d2-d3}, [r2]!
	vld1.32	{d6-d7}, [ip]!
16:	tst	r0, #2
	beq	17f
	vld1.32	{d1}, [r2]!
	vld1.32	{d5}, [ip]!
17:	tst	r0, #1
	beq	18f
	vld1.32	{d0[1]}, [r2]!
	vld1.32	{d4[1]}, [ip]!
18:	vuzp.8	d0, d1
	vuzp.8	d2, d3
	vuzp.8	d1, d3
	vuzp.8	d0, d2
	vuzp.8	d4, d5
	vuzp.8	d6, d7
	vuzp.8	d5, d7
	vuzp.8	d4, d6
	vmvn	d24, d3
	vmull.u8	q8, d24, d4
	vmull.u8	q9, d24, d5
	vmull.u8	q10, d24, d6
	vmull.u8	q11, d24, d7
	vrshr.u16	q14, q8, #8
	vrshr.u16	q15, q9, #8
	vrshr.u16	q12, q10, #8
	vrshr.u16	q13, q11, #8
	vraddhn.i16	d28, q14, q8
	vraddhn.i16	d29, q15, q9
	vraddhn.i16	d30, q12, q10
	vraddhn.i16	d31, q13, q11
	vqadd.u8	q14, q0, q14
	vqadd.u8	q15, q1, q15
	vzip.8	d28, d30
	vzip.8	d29, d31
	vzip.8	d30, d31
	vzip.8	d28, d29
	tst	r0, #4
	beq	19f
	vst1.32	{d30-d31}, [r1]!
19:	tst	r0, #2
	beq	20f
	vst1.32	{d29}, [r1]!
20:	tst	r0, #1
	beq	15f
	vst1.32	{d28[1]}, [r1]!
15:	bx	lr

.global _pixman_scaled_bilinear_scanline_8888_8888_OVER_asm_neon
_pixman_scaled_bilinear_scanline_8888_8888_OVER_asm_neon:
	mov	ip, sp
	push	{r4, r5, r6, r7, r8, r9}
	mov	r7, #28
	ldm	ip, {r4, r5, r6, ip}
	mul	r7, r7, r6
	sub	r2, r2, r1
	cmp	ip, #0
	ble	0f
	vdup.16	q12, r5
	vdup.16	q13, r6
	vdup.8	d28, r3
	vdup.8	d29, r4
	vadd.i16	d25, d25, d26
	cmp	ip, #1
	blt	1f
	tst	r0, #4
	beq	1f
	vshr.u16	q15, q12, #8
	vadd.i16	q12, q12, q13
	asr	r3, r5, #16
	add	r5, r5, r6
	add	r3, r1, r3, lsl #2
	vld1.32	{d0}, [r3], r2
	vld1.32	{d1}, [r3]
	vld1.32	{d18[0]}, [r0]
	pld	[r0, #112]
	vmull.u8	q1, d0, d28
	vmlal.u8	q1, d1, d29
	vshll.u16	q0, d2, #8
	vmlsl.u16	q0, d2, d30
	vmlal.u16	q0, d3, d30
	vshrn.i32	d0, q0, #16
	vmovn.i16	d0, q0
	vuzp.8	d0, d1
	vuzp.8	d18, d19
	vuzp.8	d0, d1
	vuzp.8	d18, d19
	vdup.32	d5, d1[1]
	vmvn	d5, d5
	vmull.u8	q3, d18, d5
	vmull.u8	q8, d19, d5
	vrshr.u16	q10, q3, #8
	vrshr.u16	q11, q8, #8
	vraddhn.i16	d18, q10, q3
	vraddhn.i16	d19, q11, q8
	vqadd.u8	q0, q9, q0
	vuzp.8	d0, d1
	vuzp.8	d0, d1
	vst1.32	{d0[0]}, [r0, :32]!
	sub	ip, ip, #1
1:	vadd.i16	q13, q13, q13
	vshr.u16	q15, q12, #8
	vadd.i16	q12, q12, q13
	cmp	ip, #2
	blt	2f
	tst	r0, #8
	beq	2f
	asr	r3, r5, #16
	add	r5, r5, r6
	add	r3, r1, r3, lsl #2
	vld1.32	{d0}, [r3], r2
	vld1.32	{d1}, [r3]
	vmull.u8	q1, d0, d28
	vmlal.u8	q1, d1, d29
	asr	r3, r5, #16
	add	r5, r5, r6
	add	r3, r1, r3, lsl #2
	vld1.32	{d20}, [r3], r2
	vld1.32	{d21}, [r3]
	vmull.u8	q11, d20, d28
	vmlal.u8	q11, d21, d29
	vld1.32	{d18}, [r0]
	pld	[r0, #112]
	vshll.u16	q0, d2, #8
	vmlsl.u16	q0, d2, d30
	vmlal.u16	q0, d3, d30
	vshll.u16	q10, d22, #8
	vmlsl.u16	q10, d22, d31
	vmlal.u16	q10, d23, d31
	vshrn.i32	d0, q0, #16
	vshrn.i32	d1, q10, #16
	vshr.u16	q15, q12, #8
	vadd.i16	q12, q12, q13
	vmovn.i16	d0, q0
	vuzp.8	d0, d1
	vuzp.8	d18, d19
	vuzp.8	d0, d1
	vuzp.8	d18, d19
	vdup.32	d5, d1[1]
	vmvn	d5, d5
	vmull.u8	q3, d18, d5
	vmull.u8	q8, d19, d5
	vrshr.u16	q10, q3, #8
	vrshr.u16	q11, q8, #8
	vraddhn.i16	d18, q10, q3
	vraddhn.i16	d19, q11, q8
	vqadd.u8	q0, q9, q0
	vuzp.8	d0, d1
	vuzp.8	d0, d1
	vst1.32	{d0}, [r0]!
	sub	ip, ip, #2
2:	subs	ip, ip, #4
	blt	3f
	asr	r7, r7, #14
	asr	r3, r5, #16
	add	r5, r5, r6
	add	r3, r1, r3, lsl #2
	asr	r4, r5, #16
	add	r5, r5, r6
	add	r4, r1, r4, lsl #2
	vld1.32	{d22}, [r3], r2
	vld1.32	{d23}, [r3]
	asr	r8, r5, #16
	add	r5, r5, r6
	add	r8, r1, r8, lsl #2
	vmull.u8	q8, d22, d28
	vmlal.u8	q8, d23, d29
	vld1.32	{d22}, [r4], r2
	vld1.32	{d23}, [r4]
	asr	r9, r5, #16
	add	r5, r5, r6
	add	r9, r1, r9, lsl #2
	vmull.u8	q9, d22, d28
	vmlal.u8	q9, d23, d29
	vld1.32	{d22}, [r8], r2
	vld1.32	{d23}, [r8]
	vmull.u8	q10, d22, d28
	vmlal.u8	q10, d23, d29
	vshll.u16	q0, d16, #8
	vmlsl.u16	q0, d16, d30
	vmlal.u16	q0, d17, d30
	pld	[r9, r7]
	vld1.32	{d16}, [r9], r2
	vld1.32	{d17}, [r9]
	pld	[r9, r7]
	vmull.u8	q11, d16, d28
	vmlal.u8	q11, d17, d29
	vshll.u16	q1, d18, #8
	vmlsl.u16	q1, d18, d31
	vmlal.u16	q1, d19, d31
	vshr.u16	q15, q12, #8
	vadd.i16	q12, q12, q13
	subs	ip, ip, #4
	blt	4f
5:	vshll.u16	q2, d20, #8
	asr	r3, r5, #16
	add	r5, r5, r6
	add	r3, r1, r3, lsl #2
	vmlsl.u16	q2, d20, d30
	asr	r4, r5, #16
	add	r5, r5, r6
	add	r4, r1, r4, lsl #2
	vmlal.u16	q2, d21, d30
	vshll.u16	q3, d22, #8
	vld1.32	{d20}, [r3], r2
	vmlsl.u16	q3, d22, d31
	vmlal.u16	q3, d23, d31
	vld1.32	{d21}, [r3]
	vmull.u8	q8, d20, d28
	vmlal.u8	q8, d21, d29
	vshrn.i32	d0, q0, #16
	vshrn.i32	d1, q1, #16
	vld1.32	{d2-d3}, [r0, :128]
	pld	[r0, r7]
	vshrn.i32	d4, q2, #16
	vshr.u16	q15, q12, #8
	vld1.32	{d22}, [r4], r2
	vshrn.i32	d5, q3, #16
	vmovn.i16	d6, q0
	vld1.32	{d23}, [r4]
	vmull.u8	q9, d22, d28
	asr	r8, r5, #16
	add	r5, r5, r6
	add	r8, r1, r8, lsl #2
	asr	r9, r5, #16
	add	r5, r5, r6
	add	r9, r1, r9, lsl #2
	vmlal.u8	q9, d23, d29
	vmovn.i16	d7, q2
	vld1.32	{d22}, [r8], r2
	vuzp.8	d6, d7
	vuzp.8	d2, d3
	vuzp.8	d6, d7
	vuzp.8	d2, d3
	vdup.32	d4, d7[1]
	vld1.32	{d23}, [r8]
	vmvn	d4, d4
	vmull.u8	q10, d22, d28
	vmlal.u8	q10, d23, d29
	vmull.u8	q11, d2, d4
	vmull.u8	q2, d3, d4
	vshll.u16	q0, d16, #8
	vmlsl.u16	q0, d16, d30
	vrshr.u16	q1, q11, #8
	vmlal.u16	q0, d17, d30
	vrshr.u16	q8, q2, #8
	vraddhn.i16	d2, q1, q11
	vraddhn.i16	d3, q8, q2
	pld	[r9, r7]
	vld1.32	{d16}, [r9], r2
	vqadd.u8	q3, q1, q3
	vld1.32	{d17}, [r9]
	pld	[r9, r7]
	vmull.u8	q11, d16, d28
	vmlal.u8	q11, d17, d29
	vuzp.8	d6, d7
	vshll.u16	q1, d18, #8
	vuzp.8	d6, d7
	vmlsl.u16	q1, d18, d31
	vadd.i16	q12, q12, q13
	vmlal.u16	q1, d19, d31
	vshr.u16	q15, q12, #8
	vadd.i16	q12, q12, q13
	vst1.32	{d6-d7}, [r0, :128]!
	subs	ip, ip, #4
	bge	5b
4:	vshll.u16	q2, d20, #8
	vmlsl.u16	q2, d20, d30
	vmlal.u16	q2, d21, d30
	vshll.u16	q3, d22, #8
	vmlsl.u16	q3, d22, d31
	vmlal.u16	q3, d23, d31
	vshrn.i32	d0, q0, #16
	vshrn.i32	d1, q1, #16
	vld1.32	{d2-d3}, [r0, :128]
	pld	[r0, #112]
	vshrn.i32	d4, q2, #16
	vshr.u16	q15, q12, #8
	vshrn.i32	d5, q3, #16
	vmovn.i16	d6, q0
	vmovn.i16	d7, q2
	vuzp.8	d6, d7
	vuzp.8	d2, d3
	vuzp.8	d6, d7
	vuzp.8	d2, d3
	vdup.32	d4, d7[1]
	vmvn	d4, d4
	vmull.u8	q11, d2, d4
	vmull.u8	q2, d3, d4
	vrshr.u16	q1, q11, #8
	vrshr.u16	q10, q2, #8
	vraddhn.i16	d2, q1, q11
	vraddhn.i16	d3, q10, q2
	vqadd.u8	q3, q1, q3
	vuzp.8	d6, d7
	vuzp.8	d6, d7
	vadd.i16	q12, q12, q13
	vst1.32	{d6-d7}, [r0, :128]!
3:	tst	ip, #2
	beq	6f
	asr	r3, r5, #16
	add	r5, r5, r6
	add	r3, r1, r3, lsl #2
	vld1.32	{d0}, [r3], r2
	vld1.32	{d1}, [r3]
	vmull.u8	q1, d0, d28
	vmlal.u8	q1, d1, d29
	asr	r3, r5, #16
	add	r5, r5, r6
	add	r3, r1, r3, lsl #2
	vld1.32	{d20}, [r3], r2
	vld1.32	{d21}, [r3]
	vmull.u8	q11, d20, d28
	vmlal.u8	q11, d21, d29
	vld1.32	{d18}, [r0]
	pld	[r0, #112]
	vshll.u16	q0, d2, #8
	vmlsl.u16	q0, d2, d30
	vmlal.u16	q0, d3, d30
	vshll.u16	q10, d22, #8
	vmlsl.u16	q10, d22, d31
	vmlal.u16	q10, d23, d31
	vshrn.i32	d0, q0, #16
	vshrn.i32	d1, q10, #16
	vshr.u16	q15, q12, #8
	vadd.i16	q12, q12, q13
	vmovn.i16	d0, q0
	vuzp.8	d0, d1
	vuzp.8	d18, d19
	vuzp.8	d0, d1
	vuzp.8	d18, d19
	vdup.32	d5, d1[1]
	vmvn	d5, d5
	vmull.u8	q3, d18, d5
	vmull.u8	q8, d19, d5
	vrshr.u16	q10, q3, #8
	vrshr.u16	q11, q8, #8
	vraddhn.i16	d18, q10, q3
	vraddhn.i16	d19, q11, q8
	vqadd.u8	q0, q9, q0
	vuzp.8	d0, d1
	vuzp.8	d0, d1
	vst1.32	{d0}, [r0]!
6:	tst	ip, #1
	beq	0f
	asr	r3, r5, #16
	add	r5, r5, r6
	add	r3, r1, r3, lsl #2
	vld1.32	{d0}, [r3], r2
	vld1.32	{d1}, [r3]
	vld1.32	{d18[0]}, [r0]
	pld	[r0, #112]
	vmull.u8	q1, d0, d28
	vmlal.u8	q1, d1, d29
	vshll.u16	q0, d2, #8
	vmlsl.u16	q0, d2, d30
	vmlal.u16	q0, d3, d30
	vshrn.i32	d0, q0, #16
	vmovn.i16	d0, q0
	vuzp.8	d0, d1
	vuzp.8	d18, d19
	vuzp.8	d0, d1
	vuzp.8	d18, d19
	vdup.32	d5, d1[1]
	vmvn	d5, d5
	vmull.u8	q3, d18, d5
	vmull.u8	q8, d19, d5
	vrshr.u16	q10, q3, #8
	vrshr.u16	q11, q8, #8
	vraddhn.i16	d18, q10, q3
	vraddhn.i16	d19, q11, q8
	vqadd.u8	q0, q9, q0
	vuzp.8	d0, d1
	vuzp.8	d0, d1
	vst1.32	{d0[0]}, [r0, :32]!
0:	pop	{r4, r5, r6, r7, r8, r9}
	bx	lr

.global _pixman_composite_over_reverse_n_8888_asm_neon
_pixman_composite_over_reverse_n_8888_asm_neon:
	push	{r4, r5, r6, r7, r8, r9, sl, fp, ip, lr}
	mov	sl, #0
	mov	r6, r2
	mov	fp, r4
	mov	ip, r6
	mov	lr, r7
	lsl	r9, r1, #4
	sub	r9, r9, #11
	add	r8, sp, #40
	vld1.32	{d7[0]}, [r8]
	vdup.8	d4, d7[0]
	vdup.8	d5, d7[1]
	vdup.8	d6, d7[2]
	vdup.8	d7, d7[3]
	subs	r1, r1, #1
	mov	r7, r0
	blt	0f
	cmp	r0, #16
	blt	1f
15:	tst	r6, #15
	beq	2f
	tst	r6, #4
	beq	3f
	vld1.32	{d0[1]}, [r6]!
	add	sl, sl, #1
	sub	r0, r0, #1
3:	tst	r6, #8
	beq	4f
	vld1.32	{d1}, [r6, :64]!
	add	sl, sl, #2
	sub	r0, r0, #2
4:	vld1.32	{d2-d3}, [r6, :128]!
	add	sl, sl, #4
	sub	r0, r0, #4
	vuzp.8	d0, d1
	vuzp.8	d2, d3
	vuzp.8	d1, d3
	vuzp.8	d0, d2
	vmvn	d24, d3
	vmull.u8	q8, d24, d4
	vmull.u8	q9, d24, d5
	vmull.u8	q10, d24, d6
	vmull.u8	q11, d24, d7
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r7
	pld	[ip, sl, lsl #2]
	subge	sl, sl, r7
	subsge	r9, r9, #16
	ldrbge	r8, [ip, r3, lsl #2]!
	vrshr.u16	q14, q8, #8
	vrshr.u16	q15, q9, #8
	vrshr.u16	q12, q10, #8
	vrshr.u16	q13, q11, #8
	vraddhn.i16	d28, q14, q8
	vraddhn.i16	d29, q15, q9
	vraddhn.i16	d30, q12, q10
	vraddhn.i16	d31, q13, q11
	vqadd.u8	q14, q0, q14
	vqadd.u8	q15, q1, q15
	vzip.8	d28, d30
	vzip.8	d29, d31
	vzip.8	d30, d31
	vzip.8	d28, d29
	tst	r2, #4
	beq	5f
	vst1.32	{d28[1]}, [r2]!
5:	tst	r2, #8
	beq	6f
	vst1.32	{d29}, [r2, :64]!
6:	vst1.32	{d30-d31}, [r2, :128]!
2:	vld4.8	{d0-d3}, [r6, :128]!
	add	sl, sl, #8
	vmvn	d24, d3
	vmull.u8	q8, d24, d4
	vmull.u8	q9, d24, d5
	vmull.u8	q10, d24, d6
	vmull.u8	q11, d24, d7
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r7
	pld	[ip, sl, lsl #2]
	subge	sl, sl, r7
	subsge	r9, r9, #16
	ldrbge	r8, [ip, r3, lsl #2]!
	subs	r0, r0, #16
	blt	7f
8:	vrshr.u16	q14, q8, #8
	add	sl, sl, #8
	tst	r9, #15
	vrshr.u16	q15, q9, #8
	vrshr.u16	q12, q10, #8
	vrshr.u16	q13, q11, #8
	addne	sl, sl, #8
	subne	r9, r9, #1
	vraddhn.i16	d28, q14, q8
	vraddhn.i16	d29, q15, q9
	cmp	sl, r7
	vraddhn.i16	d30, q12, q10
	vraddhn.i16	d31, q13, q11
	vqadd.u8	q14, q0, q14
	vqadd.u8	q15, q1, q15
	vld4.8	{d0-d3}, [r6, :128]!
	vmvn	d22, d3
	pld	[ip, sl, lsl #2]
	vst4.8	{d28-d31}, [r2, :128]!
	subge	sl, sl, r7
	vmull.u8	q8, d22, d4
	subsge	r9, r9, #16
	vmull.u8	q9, d22, d5
	vmull.u8	q10, d22, d6
	ldrbge	r8, [ip, r3, lsl #2]!
	vmull.u8	q11, d22, d7
	subs	r0, r0, #8
	bge	8b
7:	vrshr.u16	q14, q8, #8
	vrshr.u16	q15, q9, #8
	vrshr.u16	q12, q10, #8
	vrshr.u16	q13, q11, #8
	vraddhn.i16	d28, q14, q8
	vraddhn.i16	d29, q15, q9
	vraddhn.i16	d30, q12, q10
	vraddhn.i16	d31, q13, q11
	vqadd.u8	q14, q0, q14
	vqadd.u8	q15, q1, q15
	vst4.8	{d28-d31}, [r2, :128]!
	tst	r0, #7
	beq	9f
	tst	r0, #4
	beq	10f
	vld1.32	{d2-d3}, [r6, :128]!
	add	sl, sl, #4
10:	tst	r0, #2
	beq	11f
	vld1.32	{d1}, [r6, :64]!
	add	sl, sl, #2
11:	tst	r0, #1
	beq	12f
	vld1.32	{d0[1]}, [r6]!
	add	sl, sl, #1
12:	vuzp.8	d0, d1
	vuzp.8	d2, d3
	vuzp.8	d1, d3
	vuzp.8	d0, d2
	vmvn	d24, d3
	vmull.u8	q8, d24, d4
	vmull.u8	q9, d24, d5
	vmull.u8	q10, d24, d6
	vmull.u8	q11, d24, d7
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r7
	pld	[ip, sl, lsl #2]
	subge	sl, sl, r7
	subsge	r9, r9, #16
	ldrbge	r8, [ip, r3, lsl #2]!
	vrshr.u16	q14, q8, #8
	vrshr.u16	q15, q9, #8
	vrshr.u16	q12, q10, #8
	vrshr.u16	q13, q11, #8
	vraddhn.i16	d28, q14, q8
	vraddhn.i16	d29, q15, q9
	vraddhn.i16	d30, q12, q10
	vraddhn.i16	d31, q13, q11
	vqadd.u8	q14, q0, q14
	vqadd.u8	q15, q1, q15
	vzip.8	d28, d30
	vzip.8	d29, d31
	vzip.8	d30, d31
	vzip.8	d28, d29
	tst	r0, #4
	beq	13f
	vst1.32	{d30-d31}, [r2, :128]!
13:	tst	r0, #2
	beq	14f
	vst1.32	{d29}, [r2, :64]!
14:	tst	r0, #1
	beq	9f
	vst1.32	{d28[1]}, [r2]!
9:	mov	r0, r7
	add	r2, r2, r3, lsl #2
	sub	r2, r2, r0, lsl #2
	subs	r1, r1, #1
	mov	r6, r2
	bge	15b
	pop	{r4, r5, r6, r7, r8, r9, sl, fp, ip, pc}
1:	tst	r0, #8
	beq	16f
	vld4.8	{d0-d3}, [r6]!
	vmvn	d24, d3
	vmull.u8	q8, d24, d4
	vmull.u8	q9, d24, d5
	vmull.u8	q10, d24, d6
	vmull.u8	q11, d24, d7
	vrshr.u16	q14, q8, #8
	vrshr.u16	q15, q9, #8
	vrshr.u16	q12, q10, #8
	vrshr.u16	q13, q11, #8
	vraddhn.i16	d28, q14, q8
	vraddhn.i16	d29, q15, q9
	vraddhn.i16	d30, q12, q10
	vraddhn.i16	d31, q13, q11
	vqadd.u8	q14, q0, q14
	vqadd.u8	q15, q1, q15
	vst4.8	{d28-d31}, [r2]!
16:	tst	r0, #7
	beq	17f
	tst	r0, #4
	beq	18f
	vld1.32	{d2-d3}, [r6]!
18:	tst	r0, #2
	beq	19f
	vld1.32	{d1}, [r6]!
19:	tst	r0, #1
	beq	20f
	vld1.32	{d0[1]}, [r6]!
20:	vuzp.8	d0, d1
	vuzp.8	d2, d3
	vuzp.8	d1, d3
	vuzp.8	d0, d2
	vmvn	d24, d3
	vmull.u8	q8, d24, d4
	vmull.u8	q9, d24, d5
	vmull.u8	q10, d24, d6
	vmull.u8	q11, d24, d7
	vrshr.u16	q14, q8, #8
	vrshr.u16	q15, q9, #8
	vrshr.u16	q12, q10, #8
	vrshr.u16	q13, q11, #8
	vraddhn.i16	d28, q14, q8
	vraddhn.i16	d29, q15, q9
	vraddhn.i16	d30, q12, q10
	vraddhn.i16	d31, q13, q11
	vqadd.u8	q14, q0, q14
	vqadd.u8	q15, q1, q15
	vzip.8	d28, d30
	vzip.8	d29, d31
	vzip.8	d30, d31
	vzip.8	d28, d29
	tst	r0, #4
	beq	21f
	vst1.32	{d30-d31}, [r2]!
21:	tst	r0, #2
	beq	22f
	vst1.32	{d29}, [r2]!
22:	tst	r0, #1
	beq	17f
	vst1.32	{d28[1]}, [r2]!
17:	mov	r0, r7
	add	r2, r2, r3, lsl #2
	sub	r2, r2, r0, lsl #2
	subs	r1, r1, #1
	mov	r6, r2
	bge	1b
0:	pop	{r4, r5, r6, r7, r8, r9, sl, fp, ip, pc}

.global _pixman_composite_src_n_8888_asm_neon
_pixman_composite_src_n_8888_asm_neon:
	push	{r4, r5, r6, r7, r8, r9, sl, fp, ip, lr}
	mov	r6, r2
	add	ip, sp, #40
	vld1.32	{d0[0]}, [ip]
	vsli.64	d0, d0, #32
	vorr	d1, d0, d0
	vorr	q1, q0, q0
	subs	r1, r1, #1
	mov	sl, r0
	blt	0f
	cmp	r0, #16
	blt	1f
15:	tst	r6, #15
	beq	2f
	tst	r6, #4
	beq	3f
	add	r6, r6, #4
	sub	r0, r0, #1
3:	tst	r6, #8
	beq	4f
	add	r6, r6, #8
	sub	r0, r0, #2
4:	add	r6, r6, #16
	sub	r0, r0, #4
	tst	r2, #4
	beq	5f
	vst1.32	{d0[1]}, [r2]!
5:	tst	r2, #8
	beq	6f
	vst1.32	{d1}, [r2, :64]!
6:	vst1.32	{d2-d3}, [r2, :128]!
2:	subs	r0, r0, #16
	blt	7f
8:	vst1.32	{d0-d3}, [r2, :128]!
	subs	r0, r0, #8
	bge	8b
7:	vst1.32	{d0-d3}, [r2, :128]!
	tst	r0, #7
	beq	9f
	tst	r0, #4
	beq	10f
10:	tst	r0, #2
	beq	11f
11:	tst	r0, #1
	beq	12f
12:	tst	r0, #4
	beq	13f
	vst1.32	{d2-d3}, [r2, :128]!
13:	tst	r0, #2
	beq	14f
	vst1.32	{d1}, [r2, :64]!
14:	tst	r0, #1
	beq	9f
	vst1.32	{d0[1]}, [r2]!
9:	mov	r0, sl
	add	r2, r2, r3, lsl #2
	sub	r2, r2, r0, lsl #2
	subs	r1, r1, #1
	mov	r6, r2
	bge	15b
	pop	{r4, r5, r6, r7, r8, r9, sl, fp, ip, pc}
1:	tst	r0, #8
	beq	16f
	vst1.32	{d0-d3}, [r2]!
16:	tst	r0, #7
	beq	17f
	tst	r0, #4
	beq	18f
18:	tst	r0, #2
	beq	19f
19:	tst	r0, #1
	beq	20f
20:	tst	r0, #4
	beq	21f
	vst1.32	{d2-d3}, [r2]!
21:	tst	r0, #2
	beq	22f
	vst1.32	{d1}, [r2]!
22:	tst	r0, #1
	beq	17f
	vst1.32	{d0[1]}, [r2]!
17:	mov	r0, sl
	add	r2, r2, r3, lsl #2
	sub	r2, r2, r0, lsl #2
	subs	r1, r1, #1
	mov	r6, r2
	bge	1b
0:	pop	{r4, r5, r6, r7, r8, r9, sl, fp, ip, pc}

.global _pixman_scaled_bilinear_scanline_8888_8888_SRC_asm_neon
_pixman_scaled_bilinear_scanline_8888_8888_SRC_asm_neon:
	mov	ip, sp
	push	{r4, r5, r6, r7, r8, r9}
	mov	r7, #28
	ldm	ip, {r4, r5, r6, ip}
	mul	r7, r7, r6
	sub	r2, r2, r1
	cmp	ip, #0
	ble	0f
	vdup.16	q12, r5
	vdup.16	q13, r6
	vdup.8	d28, r3
	vdup.8	d29, r4
	vadd.i16	d25, d25, d26
	cmp	ip, #1
	blt	1f
	tst	r0, #4
	beq	1f
	vshr.u16	q15, q12, #8
	vadd.i16	q12, q12, q13
	asr	r3, r5, #16
	add	r5, r5, r6
	add	r3, r1, r3, lsl #2
	vld1.32	{d0}, [r3], r2
	vld1.32	{d1}, [r3]
	vmull.u8	q1, d0, d28
	vmlal.u8	q1, d1, d29
	vshll.u16	q0, d2, #8
	vmlsl.u16	q0, d2, d30
	vmlal.u16	q0, d3, d30
	vshrn.i32	d0, q0, #16
	vmovn.i16	d0, q0
	vst1.32	{d0[0]}, [r0, :32]!
	sub	ip, ip, #1
1:	vadd.i16	q13, q13, q13
	vshr.u16	q15, q12, #8
	vadd.i16	q12, q12, q13
	cmp	ip, #2
	blt	2f
	tst	r0, #8
	beq	2f
	asr	r3, r5, #16
	add	r5, r5, r6
	add	r3, r1, r3, lsl #2
	vld1.32	{d0}, [r3], r2
	vld1.32	{d1}, [r3]
	vmull.u8	q1, d0, d28
	vmlal.u8	q1, d1, d29
	asr	r3, r5, #16
	add	r5, r5, r6
	add	r3, r1, r3, lsl #2
	vld1.32	{d20}, [r3], r2
	vld1.32	{d21}, [r3]
	vmull.u8	q11, d20, d28
	vmlal.u8	q11, d21, d29
	vshll.u16	q0, d2, #8
	vmlsl.u16	q0, d2, d30
	vmlal.u16	q0, d3, d30
	vshll.u16	q10, d22, #8
	vmlsl.u16	q10, d22, d31
	vmlal.u16	q10, d23, d31
	vshrn.i32	d0, q0, #16
	vshrn.i32	d1, q10, #16
	vshr.u16	q15, q12, #8
	vadd.i16	q12, q12, q13
	vmovn.i16	d0, q0
	vst1.32	{d0}, [r0, :64]!
	sub	ip, ip, #2
2:	subs	ip, ip, #4
	blt	3f
	asr	r7, r7, #14
	asr	r3, r5, #16
	add	r5, r5, r6
	add	r3, r1, r3, lsl #2
	asr	r4, r5, #16
	add	r5, r5, r6
	add	r4, r1, r4, lsl #2
	vld1.32	{d22}, [r3], r2
	vld1.32	{d23}, [r3]
	asr	r8, r5, #16
	add	r5, r5, r6
	add	r8, r1, r8, lsl #2
	vmull.u8	q8, d22, d28
	vmlal.u8	q8, d23, d29
	vld1.32	{d22}, [r4], r2
	vld1.32	{d23}, [r4]
	asr	r9, r5, #16
	add	r5, r5, r6
	add	r9, r1, r9, lsl #2
	vmull.u8	q9, d22, d28
	vmlal.u8	q9, d23, d29
	vld1.32	{d22}, [r8], r2
	vld1.32	{d23}, [r8]
	vmull.u8	q10, d22, d28
	vmlal.u8	q10, d23, d29
	vshll.u16	q0, d16, #8
	vmlsl.u16	q0, d16, d30
	vmlal.u16	q0, d17, d30
	pld	[r9, r7]
	vld1.32	{d16}, [r9], r2
	vld1.32	{d17}, [r9]
	pld	[r9, r7]
	vmull.u8	q11, d16, d28
	vmlal.u8	q11, d17, d29
	vshll.u16	q1, d18, #8
	vmlsl.u16	q1, d18, d31
	subs	ip, ip, #4
	blt	4f
5:	asr	r3, r5, #16
	add	r5, r5, r6
	add	r3, r1, r3, lsl #2
	asr	r4, r5, #16
	add	r5, r5, r6
	add	r4, r1, r4, lsl #2
	vmlal.u16	q1, d19, d31
	vshr.u16	q15, q12, #8
	vshll.u16	q2, d20, #8
	vmlsl.u16	q2, d20, d30
	vmlal.u16	q2, d21, d30
	vshll.u16	q3, d22, #8
	vld1.32	{d20}, [r3], r2
	vmlsl.u16	q3, d22, d31
	vmlal.u16	q3, d23, d31
	vld1.32	{d21}, [r3]
	vmull.u8	q8, d20, d28
	vmlal.u8	q8, d21, d29
	vshrn.i32	d0, q0, #16
	vshrn.i32	d1, q1, #16
	vshrn.i32	d4, q2, #16
	vld1.32	{d22}, [r4], r2
	vshrn.i32	d5, q3, #16
	vadd.i16	q12, q12, q13
	vld1.32	{d23}, [r4]
	vmull.u8	q9, d22, d28
	asr	r8, r5, #16
	add	r5, r5, r6
	add	r8, r1, r8, lsl #2
	asr	r9, r5, #16
	add	r5, r5, r6
	add	r9, r1, r9, lsl #2
	vmlal.u8	q9, d23, d29
	vld1.32	{d22}, [r8], r2
	vshr.u16	q15, q12, #8
	vld1.32	{d23}, [r8]
	vmull.u8	q10, d22, d28
	vmlal.u8	q10, d23, d29
	vmovn.i16	d6, q0
	vshll.u16	q0, d16, #8
	vmovn.i16	d7, q2
	vmlsl.u16	q0, d16, d30
	vmlal.u16	q0, d17, d30
	pld	[r9, r7]
	vld1.32	{d16}, [r9], r2
	vadd.i16	q12, q12, q13
	vld1.32	{d17}, [r9]
	pld	[r9, r7]
	vmull.u8	q11, d16, d28
	vmlal.u8	q11, d17, d29
	vst1.32	{d6-d7}, [r0, :128]!
	vshll.u16	q1, d18, #8
	vmlsl.u16	q1, d18, d31
	subs	ip, ip, #4
	bge	5b
4:	vmlal.u16	q1, d19, d31
	vshr.u16	q15, q12, #8
	vshll.u16	q2, d20, #8
	vmlsl.u16	q2, d20, d30
	vmlal.u16	q2, d21, d30
	vshll.u16	q3, d22, #8
	vmlsl.u16	q3, d22, d31
	vmlal.u16	q3, d23, d31
	vadd.i16	q12, q12, q13
	vshrn.i32	d0, q0, #16
	vshrn.i32	d1, q1, #16
	vshrn.i32	d4, q2, #16
	vshr.u16	q15, q12, #8
	vshrn.i32	d5, q3, #16
	vmovn.i16	d6, q0
	vmovn.i16	d7, q2
	vadd.i16	q12, q12, q13
	vst1.32	{d6-d7}, [r0, :128]!
3:	tst	ip, #2
	beq	6f
	asr	r3, r5, #16
	add	r5, r5, r6
	add	r3, r1, r3, lsl #2
	vld1.32	{d0}, [r3], r2
	vld1.32	{d1}, [r3]
	vmull.u8	q1, d0, d28
	vmlal.u8	q1, d1, d29
	asr	r3, r5, #16
	add	r5, r5, r6
	add	r3, r1, r3, lsl #2
	vld1.32	{d20}, [r3], r2
	vld1.32	{d21}, [r3]
	vmull.u8	q11, d20, d28
	vmlal.u8	q11, d21, d29
	vshll.u16	q0, d2, #8
	vmlsl.u16	q0, d2, d30
	vmlal.u16	q0, d3, d30
	vshll.u16	q10, d22, #8
	vmlsl.u16	q10, d22, d31
	vmlal.u16	q10, d23, d31
	vshrn.i32	d0, q0, #16
	vshrn.i32	d1, q10, #16
	vshr.u16	q15, q12, #8
	vadd.i16	q12, q12, q13
	vmovn.i16	d0, q0
	vst1.32	{d0}, [r0, :64]!
6:	tst	ip, #1
	beq	0f
	asr	r3, r5, #16
	add	r5, r5, r6
	add	r3, r1, r3, lsl #2
	vld1.32	{d0}, [r3], r2
	vld1.32	{d1}, [r3]
	vmull.u8	q1, d0, d28
	vmlal.u8	q1, d1, d29
	vshll.u16	q0, d2, #8
	vmlsl.u16	q0, d2, d30
	vmlal.u16	q0, d3, d30
	vshrn.i32	d0, q0, #16
	vmovn.i16	d0, q0
	vst1.32	{d0[0]}, [r0, :32]!
0:	pop	{r4, r5, r6, r7, r8, r9}
	bx	lr

.global _pixman_scaled_bilinear_scanline_0565_8_x888_SRC_asm_neon
_pixman_scaled_bilinear_scanline_0565_8_x888_SRC_asm_neon:
	mov	ip, sp
	push	{r4, r5, r6, r7, r8, r9, sl, ip}
	mov	r8, #28
	ldm	ip, {r4, r5, r6, r7, ip}
	mul	r8, r8, r7
	sub	r3, r3, r2
	cmp	ip, #0
	ble	0f
	vdup.16	q12, r6
	vdup.16	q13, r7
	vdup.8	d28, r4
	vdup.8	d29, r5
	vadd.i16	d25, d25, d26
	cmp	ip, #1
	blt	1f
	tst	r0, #4
	beq	1f
	vshr.u16	q15, q12, #8
	vadd.i16	q12, q12, q13
	asr	r4, r6, #16
	add	r6, r6, r7
	add	r4, r2, r4, lsl #1
	vld1.32	{d1[0]}, [r4], r3
	vld1.32	{d1[1]}, [r4]
	vshl.s16	d0, d1, #5
	vshl.s16	d2, d1, #11
	vsri.16	d1, d1, #5
	vsri.16	d0, d0, #6
	vsri.16	d2, d2, #5
	vshr.u16	d1, d1, #8
	vsri.16	d0, d2, #8
	vzip.16	d0, d1
	vld1.8	{d4[0]}, [r1]!
	pld	[r1, #28]
	vmull.u8	q1, d0, d28
	vmlal.u8	q1, d1, d29
	vshll.u16	q0, d2, #8
	vmlsl.u16	q0, d2, d30
	vmlal.u16	q0, d3, d30
	vdup.8	d4, d4[0]
	vshrn.i32	d0, q0, #16
	vmovn.i16	d0, q0
	vuzp.8	d0, d1
	vuzp.8	d18, d19
	vuzp.8	d0, d1
	vuzp.8	d18, d19
	vmull.u8	q3, d0, d4
	vmull.u8	q8, d1, d4
	vrshr.u16	q10, q3, #8
	vrshr.u16	q11, q8, #8
	vraddhn.i16	d0, q10, q3
	vraddhn.i16	d1, q11, q8
	vuzp.8	d0, d1
	vuzp.8	d0, d1
	vst1.32	{d0[0]}, [r0, :32]!
	sub	ip, ip, #1
1:	vadd.i16	q13, q13, q13
	vshr.u16	q15, q12, #8
	vadd.i16	q12, q12, q13
	cmp	ip, #2
	blt	2f
	tst	r0, #8
	beq	2f
	asr	r4, r6, #16
	add	r6, r6, r7
	add	r4, r2, r4, lsl #1
	asr	r5, r6, #16
	add	r6, r6, r7
	add	r5, r2, r5, lsl #1
	vld1.32	{d22[0]}, [r4], r3
	vld1.32	{d23[0]}, [r5], r3
	vld1.32	{d22[1]}, [r4]
	vld1.32	{d23[1]}, [r5]
	vshrn.i16	d20, q11, #8
	vshrn.i16	d1, q11, #3
	vsli.16	q11, q11, #5
	vsri.8	d20, d20, #5
	vsri.8	d1, d1, #6
	vshrn.i16	d0, q11, #2
	vzip.8	d0, d20
	vzip.8	d1, d21
	vzip.8	d20, d21
	vzip.8	d0, d1
	vmull.u8	q1, d0, d28
	vmlal.u8	q1, d1, d29
	vmull.u8	q11, d20, d28
	vmlal.u8	q11, d21, d29
	vld1.16	{d4[0]}, [r1]!
	pld	[r1, #28]
	vshll.u16	q0, d2, #8
	vmlsl.u16	q0, d2, d30
	vmlal.u16	q0, d3, d30
	vshll.u16	q10, d22, #8
	vmlsl.u16	q10, d22, d31
	vmlal.u16	q10, d23, d31
	vshrn.i32	d0, q0, #16
	vshrn.i32	d1, q10, #16
	vdup.16	d4, d4[0]
	vshr.u16	q15, q12, #8
	vadd.i16	q12, q12, q13
	vmovn.i16	d0, q0
	vuzp.8	d0, d1
	vuzp.8	d18, d19
	vuzp.8	d0, d1
	vuzp.8	d18, d19
	vmull.u8	q3, d0, d4
	vmull.u8	q8, d1, d4
	vrshr.u16	q10, q3, #8
	vrshr.u16	q11, q8, #8
	vraddhn.i16	d0, q10, q3
	vraddhn.i16	d1, q11, q8
	vuzp.8	d0, d1
	vuzp.8	d0, d1
	vst1.32	{d0}, [r0]!
	sub	ip, ip, #2
2:	subs	ip, ip, #4
	blt	3f
	asr	r8, r8, #15
	asr	r4, r6, #16
	add	r6, r6, r7
	add	r4, r2, r4, lsl #1
	asr	r5, r6, #16
	add	r6, r6, r7
	add	r5, r2, r5, lsl #1
	vld1.32	{d22[0]}, [r4], r3
	vld1.32	{d23[0]}, [r5], r3
	vld1.32	{d22[1]}, [r4]
	vld1.32	{d23[1]}, [r5]
	vshrn.i16	d20, q11, #8
	vshrn.i16	d1, q11, #3
	vsli.16	q11, q11, #5
	vsri.8	d20, d20, #5
	vsri.8	d1, d1, #6
	vshrn.i16	d0, q11, #2
	asr	r4, r6, #16
	add	r6, r6, r7
	add	r4, r2, r4, lsl #1
	asr	r5, r6, #16
	add	r6, r6, r7
	add	r5, r2, r5, lsl #1
	vld1.32	{d18[0]}, [r4], r3
	vzip.8	d0, d20
	vld1.32	{d19[0]}, [r5], r3
	vzip.8	d1, d21
	vld1.32	{d18[1]}, [r4]
	vzip.8	d20, d21
	vld1.32	{d19[1]}, [r5]
	vzip.8	d0, d1
	vshrn.i16	d16, q9, #8
	vshrn.i16	d5, q9, #3
	vsli.16	q9, q9, #5
	vsri.8	d16, d16, #5
	vsri.8	d5, d5, #6
	vshrn.i16	d4, q9, #2
	vmull.u8	q1, d0, d28
	vzip.8	d4, d16
	vmlal.u8	q1, d1, d29
	vzip.8	d5, d17
	vmull.u8	q11, d20, d28
	vzip.8	d16, d17
	vmlal.u8	q11, d21, d29
	vzip.8	d4, d5
	vmull.u8	q3, d4, d28
	vmlal.u8	q3, d5, d29
	vmull.u8	q9, d16, d28
	vmlal.u8	q9, d17, d29
	pld	[r4, r8]
	sub	r4, r4, r3
	vshll.u16	q0, d2, #8
	vmlsl.u16	q0, d2, d30
	vmlal.u16	q0, d3, d30
	vshll.u16	q10, d22, #8
	vmlsl.u16	q10, d22, d31
	vmlal.u16	q10, d23, d31
	vshr.u16	q15, q12, #8
	vshll.u16	q2, d6, #8
	vmlsl.u16	q2, d6, d30
	vmlal.u16	q2, d7, d30
	vshll.u16	q8, d18, #8
	vld1.32	{d22[0]}, [r1]!
	pld	[r1, #28]
	pld	[r4, r8]
	vmlsl.u16	q8, d18, d31
	vmlal.u16	q8, d19, d31
	vadd.i16	q12, q12, q13
	vshrn.i32	d0, q0, #16
	vshrn.i32	d1, q10, #16
	vshrn.i32	d4, q2, #16
	vshrn.i32	d5, q8, #16
	vdup.32	d22, d22[0]
	vshr.u16	q15, q12, #8
	vmovn.i16	d0, q0
	vmovn.i16	d1, q2
	vadd.i16	q12, q12, q13
	vuzp.8	d0, d1
	vuzp.8	d2, d3
	vuzp.8	d0, d1
	vuzp.8	d2, d3
	vmull.u8	q3, d0, d22
	vmull.u8	q8, d1, d22
	vrshr.u16	q9, q3, #8
	vrshr.u16	q10, q8, #8
	vraddhn.i16	d0, q9, q3
	vraddhn.i16	d1, q10, q8
	vuzp.8	d0, d1
	vuzp.8	d0, d1
	vst1.32	{d0-d1}, [r0]!
	subs	ip, ip, #4
	blt	3f
4:	asr	r4, r6, #16
	add	r6, r6, r7
	add	r4, r2, r4, lsl #1
	asr	r5, r6, #16
	add	r6, r6, r7
	add	r5, r2, r5, lsl #1
	vld1.32	{d22[0]}, [r4], r3
	vld1.32	{d23[0]}, [r5], r3
	vld1.32	{d22[1]}, [r4]
	vld1.32	{d23[1]}, [r5]
	vshrn.i16	d20, q11, #8
	vshrn.i16	d1, q11, #3
	vsli.16	q11, q11, #5
	vsri.8	d20, d20, #5
	vsri.8	d1, d1, #6
	vshrn.i16	d0, q11, #2
	asr	r4, r6, #16
	add	r6, r6, r7
	add	r4, r2, r4, lsl #1
	asr	r5, r6, #16
	add	r6, r6, r7
	add	r5, r2, r5, lsl #1
	vld1.32	{d18[0]}, [r4], r3
	vzip.8	d0, d20
	vld1.32	{d19[0]}, [r5], r3
	vzip.8	d1, d21
	vld1.32	{d18[1]}, [r4]
	vzip.8	d20, d21
	vld1.32	{d19[1]}, [r5]
	vzip.8	d0, d1
	vshrn.i16	d16, q9, #8
	vshrn.i16	d5, q9, #3
	vsli.16	q9, q9, #5
	vsri.8	d16, d16, #5
	vsri.8	d5, d5, #6
	vshrn.i16	d4, q9, #2
	vmull.u8	q1, d0, d28
	vzip.8	d4, d16
	vmlal.u8	q1, d1, d29
	vzip.8	d5, d17
	vmull.u8	q11, d20, d28
	vzip.8	d16, d17
	vmlal.u8	q11, d21, d29
	vzip.8	d4, d5
	vmull.u8	q3, d4, d28
	vmlal.u8	q3, d5, d29
	vmull.u8	q9, d16, d28
	vmlal.u8	q9, d17, d29
	pld	[r4, r8]
	sub	r4, r4, r3
	vshll.u16	q0, d2, #8
	vmlsl.u16	q0, d2, d30
	vmlal.u16	q0, d3, d30
	vshll.u16	q10, d22, #8
	vmlsl.u16	q10, d22, d31
	vmlal.u16	q10, d23, d31
	vshr.u16	q15, q12, #8
	vshll.u16	q2, d6, #8
	vmlsl.u16	q2, d6, d30
	vmlal.u16	q2, d7, d30
	vshll.u16	q8, d18, #8
	vld1.32	{d22[0]}, [r1]!
	pld	[r1, #28]
	pld	[r4, r8]
	vmlsl.u16	q8, d18, d31
	vmlal.u16	q8, d19, d31
	vadd.i16	q12, q12, q13
	vshrn.i32	d0, q0, #16
	vshrn.i32	d1, q10, #16
	vshrn.i32	d4, q2, #16
	vshrn.i32	d5, q8, #16
	vdup.32	d22, d22[0]
	vshr.u16	q15, q12, #8
	vmovn.i16	d0, q0
	vmovn.i16	d1, q2
	vadd.i16	q12, q12, q13
	vuzp.8	d0, d1
	vuzp.8	d2, d3
	vuzp.8	d0, d1
	vuzp.8	d2, d3
	vmull.u8	q3, d0, d22
	vmull.u8	q8, d1, d22
	vrshr.u16	q9, q3, #8
	vrshr.u16	q10, q8, #8
	vraddhn.i16	d0, q9, q3
	vraddhn.i16	d1, q10, q8
	vuzp.8	d0, d1
	vuzp.8	d0, d1
	vst1.32	{d0-d1}, [r0]!
	subs	ip, ip, #4
	bge	4b
3:	tst	ip, #2
	beq	5f
	asr	r4, r6, #16
	add	r6, r6, r7
	add	r4, r2, r4, lsl #1
	asr	r5, r6, #16
	add	r6, r6, r7
	add	r5, r2, r5, lsl #1
	vld1.32	{d22[0]}, [r4], r3
	vld1.32	{d23[0]}, [r5], r3
	vld1.32	{d22[1]}, [r4]
	vld1.32	{d23[1]}, [r5]
	vshrn.i16	d20, q11, #8
	vshrn.i16	d1, q11, #3
	vsli.16	q11, q11, #5
	vsri.8	d20, d20, #5
	vsri.8	d1, d1, #6
	vshrn.i16	d0, q11, #2
	vzip.8	d0, d20
	vzip.8	d1, d21
	vzip.8	d20, d21
	vzip.8	d0, d1
	vmull.u8	q1, d0, d28
	vmlal.u8	q1, d1, d29
	vmull.u8	q11, d20, d28
	vmlal.u8	q11, d21, d29
	vld1.16	{d4[0]}, [r1]!
	pld	[r1, #28]
	vshll.u16	q0, d2, #8
	vmlsl.u16	q0, d2, d30
	vmlal.u16	q0, d3, d30
	vshll.u16	q10, d22, #8
	vmlsl.u16	q10, d22, d31
	vmlal.u16	q10, d23, d31
	vshrn.i32	d0, q0, #16
	vshrn.i32	d1, q10, #16
	vdup.16	d4, d4[0]
	vshr.u16	q15, q12, #8
	vadd.i16	q12, q12, q13
	vmovn.i16	d0, q0
	vuzp.8	d0, d1
	vuzp.8	d18, d19
	vuzp.8	d0, d1
	vuzp.8	d18, d19
	vmull.u8	q3, d0, d4
	vmull.u8	q8, d1, d4
	vrshr.u16	q10, q3, #8
	vrshr.u16	q11, q8, #8
	vraddhn.i16	d0, q10, q3
	vraddhn.i16	d1, q11, q8
	vuzp.8	d0, d1
	vuzp.8	d0, d1
	vst1.32	{d0}, [r0]!
5:	tst	ip, #1
	beq	0f
	asr	r4, r6, #16
	add	r6, r6, r7
	add	r4, r2, r4, lsl #1
	vld1.32	{d1[0]}, [r4], r3
	vld1.32	{d1[1]}, [r4]
	vshl.s16	d0, d1, #5
	vshl.s16	d2, d1, #11
	vsri.16	d1, d1, #5
	vsri.16	d0, d0, #6
	vsri.16	d2, d2, #5
	vshr.u16	d1, d1, #8
	vsri.16	d0, d2, #8
	vzip.16	d0, d1
	vld1.8	{d4[0]}, [r1]!
	pld	[r1, #28]
	vmull.u8	q1, d0, d28
	vmlal.u8	q1, d1, d29
	vshll.u16	q0, d2, #8
	vmlsl.u16	q0, d2, d30
	vmlal.u16	q0, d3, d30
	vdup.8	d4, d4[0]
	vshrn.i32	d0, q0, #16
	vmovn.i16	d0, q0
	vuzp.8	d0, d1
	vuzp.8	d18, d19
	vuzp.8	d0, d1
	vuzp.8	d18, d19
	vmull.u8	q3, d0, d4
	vmull.u8	q8, d1, d4
	vrshr.u16	q10, q3, #8
	vrshr.u16	q11, q8, #8
	vraddhn.i16	d0, q10, q3
	vraddhn.i16	d1, q11, q8
	vuzp.8	d0, d1
	vuzp.8	d0, d1
	vst1.32	{d0[0]}, [r0, :32]!
0:	pop	{r4, r5, r6, r7, r8, r9, sl, ip}
	bx	lr

.global _pixman_scaled_nearest_scanline_8888_8888_OVER_asm_neon
_pixman_scaled_nearest_scanline_8888_8888_OVER_asm_neon:
	ldr	ip, [sp]
	push	{r4, r5, r6, lr}
	mov	r6, r1
	cmp	r0, #8
	blt	0f
	tst	r6, #15
	beq	1f
	tst	r6, #4
	beq	2f
	asr	r4, r3, #16
	add	r3, r3, ip
	add	r4, r2, r4, lsl #2
	vld1.32	{d0[1]}, [r4, :32]
	vld1.32	{d4[1]}, [r6]!
	sub	r0, r0, #1
2:	tst	r6, #8
	beq	3f
	asr	r4, r3, #16
	add	r3, r3, ip
	add	r4, r2, r4, lsl #2
	asr	r5, r3, #16
	add	r3, r3, ip
	add	r5, r2, r5, lsl #2
	vld1.32	{d1[0]}, [r4, :32]
	vld1.32	{d1[1]}, [r5, :32]
	vld1.32	{d5}, [r6, :64]!
	sub	r0, r0, #2
3:	asr	r4, r3, #16
	add	r3, r3, ip, lsl #1
	add	r4, r2, r4, lsl #2
	asr	r5, r3, #16
	sub	r3, r3, ip
	add	r5, r2, r5, lsl #2
	vld1.32	{d2[0]}, [r4, :32]
	asr	r4, r3, #16
	add	r3, r3, ip, lsl #1
	add	r4, r2, r4, lsl #2
	vld1.32	{d3[0]}, [r5, :32]
	asr	r5, r3, #16
	add	r3, r3, ip
	add	r5, r2, r5, lsl #2
	vld1.32	{d2[1]}, [r4, :32]
	vld1.32	{d3[1]}, [r5, :32]
	vld1.32	{d6-d7}, [r6, :128]!
	sub	r0, r0, #4
	vuzp.8	d0, d1
	vuzp.8	d2, d3
	vuzp.8	d1, d3
	vuzp.8	d0, d2
	vuzp.8	d4, d5
	vuzp.8	d6, d7
	vuzp.8	d5, d7
	vuzp.8	d4, d6
	vmvn	d24, d3
	vmull.u8	q8, d24, d4
	vmull.u8	q9, d24, d5
	vmull.u8	q10, d24, d6
	vmull.u8	q11, d24, d7
	vrshr.u16	q14, q8, #8
	vrshr.u16	q15, q9, #8
	vrshr.u16	q12, q10, #8
	vrshr.u16	q13, q11, #8
	vraddhn.i16	d28, q14, q8
	vraddhn.i16	d29, q15, q9
	vraddhn.i16	d30, q12, q10
	vraddhn.i16	d31, q13, q11
	vqadd.u8	q14, q0, q14
	vqadd.u8	q15, q1, q15
	vzip.8	d28, d30
	vzip.8	d29, d31
	vzip.8	d30, d31
	vzip.8	d28, d29
	tst	r1, #4
	beq	4f
	vst1.32	{d28[1]}, [r1]!
4:	tst	r1, #8
	beq	5f
	vst1.32	{d29}, [r1, :64]!
5:	vst1.32	{d30-d31}, [r1, :128]!
1:	subs	r0, r0, #8
	blt	6f
	vld4.8	{d4-d7}, [r6, :128]!
	asr	r4, r3, #16
	add	r3, r3, ip, lsl #1
	add	r4, r2, r4, lsl #2
	asr	r5, r3, #16
	sub	r3, r3, ip
	add	r5, r2, r5, lsl #2
	vld1.32	{d0[0]}, [r4, :32]
	asr	r4, r3, #16
	add	r3, r3, ip, lsl #1
	add	r4, r2, r4, lsl #2
	vld1.32	{d1[0]}, [r5, :32]
	asr	r5, r3, #16
	add	r3, r3, ip
	add	r5, r2, r5, lsl #2
	vld1.32	{d0[1]}, [r4, :32]
	vld1.32	{d1[1]}, [r5, :32]
	asr	r4, r3, #16
	add	r3, r3, ip, lsl #1
	add	r4, r2, r4, lsl #2
	asr	r5, r3, #16
	sub	r3, r3, ip
	add	r5, r2, r5, lsl #2
	vld1.32	{d2[0]}, [r4, :32]
	asr	r4, r3, #16
	add	r3, r3, ip, lsl #1
	add	r4, r2, r4, lsl #2
	vld1.32	{d3[0]}, [r5, :32]
	asr	r5, r3, #16
	add	r3, r3, ip
	add	r5, r2, r5, lsl #2
	vld1.32	{d2[1]}, [r4, :32]
	vld1.32	{d3[1]}, [r5, :32]
	vuzp.8	d0, d1
	vuzp.8	d2, d3
	vuzp.8	d1, d3
	vuzp.8	d0, d2
	vmvn	d24, d3
	vmull.u8	q8, d24, d4
	vmull.u8	q9, d24, d5
	vmull.u8	q10, d24, d6
	vmull.u8	q11, d24, d7
	subs	r0, r0, #8
	blt	7f
8:	vld4.8	{d4-d7}, [r6, :128]!
	vrshr.u16	q14, q8, #8
	vrshr.u16	q15, q9, #8
	vrshr.u16	q12, q10, #8
	vrshr.u16	q13, q11, #8
	vraddhn.i16	d28, q14, q8
	vraddhn.i16	d29, q15, q9
	vraddhn.i16	d30, q12, q10
	vraddhn.i16	d31, q13, q11
	vqadd.u8	q14, q0, q14
	vqadd.u8	q15, q1, q15
	asr	r4, r3, #16
	add	r3, r3, ip, lsl #1
	add	r4, r2, r4, lsl #2
	asr	r5, r3, #16
	sub	r3, r3, ip
	add	r5, r2, r5, lsl #2
	vld1.32	{d0[0]}, [r4, :32]
	asr	r4, r3, #16
	add	r3, r3, ip, lsl #1
	add	r4, r2, r4, lsl #2
	vld1.32	{d1[0]}, [r5, :32]
	asr	r5, r3, #16
	add	r3, r3, ip
	add	r5, r2, r5, lsl #2
	vld1.32	{d0[1]}, [r4, :32]
	vld1.32	{d1[1]}, [r5, :32]
	asr	r4, r3, #16
	add	r3, r3, ip, lsl #1
	add	r4, r2, r4, lsl #2
	asr	r5, r3, #16
	sub	r3, r3, ip
	add	r5, r2, r5, lsl #2
	vld1.32	{d2[0]}, [r4, :32]
	asr	r4, r3, #16
	add	r3, r3, ip, lsl #1
	add	r4, r2, r4, lsl #2
	vld1.32	{d3[0]}, [r5, :32]
	asr	r5, r3, #16
	add	r3, r3, ip
	add	r5, r2, r5, lsl #2
	vld1.32	{d2[1]}, [r4, :32]
	vld1.32	{d3[1]}, [r5, :32]
	vuzp.8	d0, d1
	vuzp.8	d2, d3
	vuzp.8	d1, d3
	vuzp.8	d0, d2
	vmvn	d22, d3
	vst4.8	{d28-d31}, [r1, :128]!
	vmull.u8	q8, d22, d4
	vmull.u8	q9, d22, d5
	vmull.u8	q10, d22, d6
	vmull.u8	q11, d22, d7
	subs	r0, r0, #8
	bge	8b
7:	vrshr.u16	q14, q8, #8
	vrshr.u16	q15, q9, #8
	vrshr.u16	q12, q10, #8
	vrshr.u16	q13, q11, #8
	vraddhn.i16	d28, q14, q8
	vraddhn.i16	d29, q15, q9
	vraddhn.i16	d30, q12, q10
	vraddhn.i16	d31, q13, q11
	vqadd.u8	q14, q0, q14
	vqadd.u8	q15, q1, q15
	vst4.8	{d28-d31}, [r1, :128]!
6:	tst	r0, #7
	beq	9f
	tst	r0, #4
	beq	10f
	asr	r4, r3, #16
	add	r3, r3, ip, lsl #1
	add	r4, r2, r4, lsl #2
	asr	r5, r3, #16
	sub	r3, r3, ip
	add	r5, r2, r5, lsl #2
	vld1.32	{d2[0]}, [r4, :32]
	asr	r4, r3, #16
	add	r3, r3, ip, lsl #1
	add	r4, r2, r4, lsl #2
	vld1.32	{d3[0]}, [r5, :32]
	asr	r5, r3, #16
	add	r3, r3, ip
	add	r5, r2, r5, lsl #2
	vld1.32	{d2[1]}, [r4, :32]
	vld1.32	{d3[1]}, [r5, :32]
	vld1.32	{d6-d7}, [r6, :128]!
10:	tst	r0, #2
	beq	11f
	asr	r4, r3, #16
	add	r3, r3, ip
	add	r4, r2, r4, lsl #2
	asr	r5, r3, #16
	add	r3, r3, ip
	add	r5, r2, r5, lsl #2
	vld1.32	{d1[0]}, [r4, :32]
	vld1.32	{d1[1]}, [r5, :32]
	vld1.32	{d5}, [r6, :64]!
11:	tst	r0, #1
	beq	12f
	asr	r4, r3, #16
	add	r3, r3, ip
	add	r4, r2, r4, lsl #2
	vld1.32	{d0[1]}, [r4, :32]
	vld1.32	{d4[1]}, [r6]!
12:	vuzp.8	d0, d1
	vuzp.8	d2, d3
	vuzp.8	d1, d3
	vuzp.8	d0, d2
	vuzp.8	d4, d5
	vuzp.8	d6, d7
	vuzp.8	d5, d7
	vuzp.8	d4, d6
	vmvn	d24, d3
	vmull.u8	q8, d24, d4
	vmull.u8	q9, d24, d5
	vmull.u8	q10, d24, d6
	vmull.u8	q11, d24, d7
	vrshr.u16	q14, q8, #8
	vrshr.u16	q15, q9, #8
	vrshr.u16	q12, q10, #8
	vrshr.u16	q13, q11, #8
	vraddhn.i16	d28, q14, q8
	vraddhn.i16	d29, q15, q9
	vraddhn.i16	d30, q12, q10
	vraddhn.i16	d31, q13, q11
	vqadd.u8	q14, q0, q14
	vqadd.u8	q15, q1, q15
	vzip.8	d28, d30
	vzip.8	d29, d31
	vzip.8	d30, d31
	vzip.8	d28, d29
	tst	r0, #4
	beq	13f
	vst1.32	{d30-d31}, [r1, :128]!
13:	tst	r0, #2
	beq	14f
	vst1.32	{d29}, [r1, :64]!
14:	tst	r0, #1
	beq	9f
	vst1.32	{d28[1]}, [r1]!
9:	pop	{r4, r5, r6, pc}
0:	tst	r0, #7
	beq	15f
	tst	r0, #4
	beq	16f
	asr	r4, r3, #16
	add	r3, r3, ip, lsl #1
	add	r4, r2, r4, lsl #2
	asr	r5, r3, #16
	sub	r3, r3, ip
	add	r5, r2, r5, lsl #2
	vld1.32	{d2[0]}, [r4, :32]
	asr	r4, r3, #16
	add	r3, r3, ip, lsl #1
	add	r4, r2, r4, lsl #2
	vld1.32	{d3[0]}, [r5, :32]
	asr	r5, r3, #16
	add	r3, r3, ip
	add	r5, r2, r5, lsl #2
	vld1.32	{d2[1]}, [r4, :32]
	vld1.32	{d3[1]}, [r5, :32]
	vld1.32	{d6-d7}, [r6]!
16:	tst	r0, #2
	beq	17f
	asr	r4, r3, #16
	add	r3, r3, ip
	add	r4, r2, r4, lsl #2
	asr	r5, r3, #16
	add	r3, r3, ip
	add	r5, r2, r5, lsl #2
	vld1.32	{d1[0]}, [r4, :32]
	vld1.32	{d1[1]}, [r5, :32]
	vld1.32	{d5}, [r6]!
17:	tst	r0, #1
	beq	18f
	asr	r4, r3, #16
	add	r3, r3, ip
	add	r4, r2, r4, lsl #2
	vld1.32	{d0[1]}, [r4, :32]
	vld1.32	{d4[1]}, [r6]!
18:	vuzp.8	d0, d1
	vuzp.8	d2, d3
	vuzp.8	d1, d3
	vuzp.8	d0, d2
	vuzp.8	d4, d5
	vuzp.8	d6, d7
	vuzp.8	d5, d7
	vuzp.8	d4, d6
	vmvn	d24, d3
	vmull.u8	q8, d24, d4
	vmull.u8	q9, d24, d5
	vmull.u8	q10, d24, d6
	vmull.u8	q11, d24, d7
	vrshr.u16	q14, q8, #8
	vrshr.u16	q15, q9, #8
	vrshr.u16	q12, q10, #8
	vrshr.u16	q13, q11, #8
	vraddhn.i16	d28, q14, q8
	vraddhn.i16	d29, q15, q9
	vraddhn.i16	d30, q12, q10
	vraddhn.i16	d31, q13, q11
	vqadd.u8	q14, q0, q14
	vqadd.u8	q15, q1, q15
	vzip.8	d28, d30
	vzip.8	d29, d31
	vzip.8	d30, d31
	vzip.8	d28, d29
	tst	r0, #4
	beq	19f
	vst1.32	{d30-d31}, [r1]!
19:	tst	r0, #2
	beq	20f
	vst1.32	{d29}, [r1]!
20:	tst	r0, #1
	beq	15f
	vst1.32	{d28[1]}, [r1]!
15:	pop	{r4, r5, r6, pc}

.global _pixman_scaled_bilinear_scanline_0565_8_0565_SRC_asm_neon
_pixman_scaled_bilinear_scanline_0565_8_0565_SRC_asm_neon:
	mov	ip, sp
	push	{r4, r5, r6, r7, r8, r9, sl, ip}
	mov	r8, #28
	ldm	ip, {r4, r5, r6, r7, ip}
	mul	r8, r8, r7
	sub	r3, r3, r2
	cmp	ip, #0
	ble	0f
	vdup.16	q12, r6
	vdup.16	q13, r7
	vdup.8	d28, r4
	vdup.8	d29, r5
	vadd.i16	d25, d25, d26
	cmp	ip, #1
	blt	1f
	tst	r0, #2
	beq	1f
	vshr.u16	q15, q12, #8
	vadd.i16	q12, q12, q13
	asr	r4, r6, #16
	add	r6, r6, r7
	add	r4, r2, r4, lsl #1
	vld1.32	{d1[0]}, [r4], r3
	vld1.32	{d1[1]}, [r4]
	vshl.s16	d0, d1, #5
	vshl.s16	d2, d1, #11
	vsri.16	d1, d1, #5
	vsri.16	d0, d0, #6
	vsri.16	d2, d2, #5
	vshr.u16	d1, d1, #8
	vsri.16	d0, d2, #8
	vzip.16	d0, d1
	vld1.8	{d4[0]}, [r1]!
	pld	[r1, #28]
	vmull.u8	q1, d0, d28
	vmlal.u8	q1, d1, d29
	vshll.u16	q0, d2, #8
	vmlsl.u16	q0, d2, d30
	vmlal.u16	q0, d3, d30
	vdup.8	d4, d4[0]
	vshrn.i32	d0, q0, #16
	vmovn.i16	d0, q0
	vuzp.8	d0, d1
	vuzp.8	d18, d19
	vuzp.8	d0, d1
	vuzp.8	d18, d19
	vmull.u8	q3, d0, d4
	vmull.u8	q8, d1, d4
	vrshr.u16	q10, q3, #8
	vrshr.u16	q11, q8, #8
	vraddhn.i16	d0, q10, q3
	vraddhn.i16	d1, q11, q8
	vuzp.8	d0, d1
	vuzp.8	d0, d1
	vuzp.8	d0, d1
	vuzp.8	d2, d3
	vuzp.8	d1, d3
	vuzp.8	d0, d2
	vshll.i8	q2, d1, #8
	vshll.i8	q1, d2, #8
	vshll.i8	q3, d0, #8
	vsri.16	q1, q2, #5
	vsri.16	q1, q3, #11
	vst1.16	{d2[0]}, [r0]!
	sub	ip, ip, #1
1:	vadd.i16	q13, q13, q13
	vshr.u16	q15, q12, #8
	vadd.i16	q12, q12, q13
	cmp	ip, #2
	blt	2f
	tst	r0, #4
	beq	2f
	asr	r4, r6, #16
	add	r6, r6, r7
	add	r4, r2, r4, lsl #1
	asr	r5, r6, #16
	add	r6, r6, r7
	add	r5, r2, r5, lsl #1
	vld1.32	{d22[0]}, [r4], r3
	vld1.32	{d23[0]}, [r5], r3
	vld1.32	{d22[1]}, [r4]
	vld1.32	{d23[1]}, [r5]
	vshrn.i16	d20, q11, #8
	vshrn.i16	d1, q11, #3
	vsli.16	q11, q11, #5
	vsri.8	d20, d20, #5
	vsri.8	d1, d1, #6
	vshrn.i16	d0, q11, #2
	vzip.8	d0, d20
	vzip.8	d1, d21
	vzip.8	d20, d21
	vzip.8	d0, d1
	vmull.u8	q1, d0, d28
	vmlal.u8	q1, d1, d29
	vmull.u8	q11, d20, d28
	vmlal.u8	q11, d21, d29
	vld1.16	{d4[0]}, [r1]!
	pld	[r1, #28]
	vshll.u16	q0, d2, #8
	vmlsl.u16	q0, d2, d30
	vmlal.u16	q0, d3, d30
	vshll.u16	q10, d22, #8
	vmlsl.u16	q10, d22, d31
	vmlal.u16	q10, d23, d31
	vshrn.i32	d0, q0, #16
	vshrn.i32	d1, q10, #16
	vdup.16	d4, d4[0]
	vshr.u16	q15, q12, #8
	vadd.i16	q12, q12, q13
	vmovn.i16	d0, q0
	vuzp.8	d0, d1
	vuzp.8	d18, d19
	vuzp.8	d0, d1
	vuzp.8	d18, d19
	vmull.u8	q3, d0, d4
	vmull.u8	q8, d1, d4
	vrshr.u16	q10, q3, #8
	vrshr.u16	q11, q8, #8
	vraddhn.i16	d0, q10, q3
	vraddhn.i16	d1, q11, q8
	vuzp.8	d0, d1
	vuzp.8	d0, d1
	vuzp.8	d0, d1
	vuzp.8	d2, d3
	vuzp.8	d1, d3
	vuzp.8	d0, d2
	vshll.i8	q2, d1, #8
	vshll.i8	q1, d2, #8
	vshll.i8	q3, d0, #8
	vsri.16	q1, q2, #5
	vsri.16	q1, q3, #11
	vst1.32	{d2[0]}, [r0]!
	sub	ip, ip, #2
2:	subs	ip, ip, #4
	blt	3f
	asr	r8, r8, #15
	asr	r4, r6, #16
	add	r6, r6, r7
	add	r4, r2, r4, lsl #1
	asr	r5, r6, #16
	add	r6, r6, r7
	add	r5, r2, r5, lsl #1
	vld1.32	{d22[0]}, [r4], r3
	vld1.32	{d23[0]}, [r5], r3
	vld1.32	{d22[1]}, [r4]
	vld1.32	{d23[1]}, [r5]
	vshrn.i16	d20, q11, #8
	vshrn.i16	d1, q11, #3
	vsli.16	q11, q11, #5
	vsri.8	d20, d20, #5
	vsri.8	d1, d1, #6
	vshrn.i16	d0, q11, #2
	asr	r4, r6, #16
	add	r6, r6, r7
	add	r4, r2, r4, lsl #1
	asr	r5, r6, #16
	add	r6, r6, r7
	add	r5, r2, r5, lsl #1
	vld1.32	{d18[0]}, [r4], r3
	vzip.8	d0, d20
	vld1.32	{d19[0]}, [r5], r3
	vzip.8	d1, d21
	vld1.32	{d18[1]}, [r4]
	vzip.8	d20, d21
	vld1.32	{d19[1]}, [r5]
	vzip.8	d0, d1
	vshrn.i16	d16, q9, #8
	vshrn.i16	d5, q9, #3
	vsli.16	q9, q9, #5
	vsri.8	d16, d16, #5
	vsri.8	d5, d5, #6
	vshrn.i16	d4, q9, #2
	vmull.u8	q1, d0, d28
	vzip.8	d4, d16
	vmlal.u8	q1, d1, d29
	vzip.8	d5, d17
	vmull.u8	q11, d20, d28
	vzip.8	d16, d17
	vmlal.u8	q11, d21, d29
	vzip.8	d4, d5
	vmull.u8	q3, d4, d28
	vmlal.u8	q3, d5, d29
	vmull.u8	q9, d16, d28
	vmlal.u8	q9, d17, d29
	pld	[r4, r8]
	sub	r4, r4, r3
	vshll.u16	q0, d2, #8
	vmlsl.u16	q0, d2, d30
	vmlal.u16	q0, d3, d30
	vshll.u16	q10, d22, #8
	vmlsl.u16	q10, d22, d31
	vmlal.u16	q10, d23, d31
	vshr.u16	q15, q12, #8
	vshll.u16	q2, d6, #8
	vmlsl.u16	q2, d6, d30
	vmlal.u16	q2, d7, d30
	vshll.u16	q8, d18, #8
	vld1.32	{d22[0]}, [r1]!
	pld	[r1, #28]
	pld	[r4, r8]
	vmlsl.u16	q8, d18, d31
	vmlal.u16	q8, d19, d31
	vadd.i16	q12, q12, q13
	vshrn.i32	d0, q0, #16
	vshrn.i32	d1, q10, #16
	vshrn.i32	d4, q2, #16
	vshrn.i32	d5, q8, #16
	vdup.32	d22, d22[0]
	vshr.u16	q15, q12, #8
	vmovn.i16	d0, q0
	vmovn.i16	d1, q2
	vadd.i16	q12, q12, q13
	vuzp.8	d0, d1
	vuzp.8	d2, d3
	vuzp.8	d0, d1
	vuzp.8	d2, d3
	vmull.u8	q3, d0, d22
	vmull.u8	q8, d1, d22
	vrshr.u16	q9, q3, #8
	vrshr.u16	q10, q8, #8
	vraddhn.i16	d0, q9, q3
	vraddhn.i16	d1, q10, q8
	vuzp.8	d0, d1
	vuzp.8	d0, d1
	vuzp.8	d0, d1
	vuzp.8	d2, d3
	vuzp.8	d1, d3
	vuzp.8	d0, d2
	vshll.i8	q2, d1, #8
	vshll.i8	q1, d2, #8
	vshll.i8	q3, d0, #8
	vsri.16	q1, q2, #5
	vsri.16	q1, q3, #11
	vst1.16	{d2}, [r0]!
	subs	ip, ip, #4
	blt	3f
4:	asr	r4, r6, #16
	add	r6, r6, r7
	add	r4, r2, r4, lsl #1
	asr	r5, r6, #16
	add	r6, r6, r7
	add	r5, r2, r5, lsl #1
	vld1.32	{d22[0]}, [r4], r3
	vld1.32	{d23[0]}, [r5], r3
	vld1.32	{d22[1]}, [r4]
	vld1.32	{d23[1]}, [r5]
	vshrn.i16	d20, q11, #8
	vshrn.i16	d1, q11, #3
	vsli.16	q11, q11, #5
	vsri.8	d20, d20, #5
	vsri.8	d1, d1, #6
	vshrn.i16	d0, q11, #2
	asr	r4, r6, #16
	add	r6, r6, r7
	add	r4, r2, r4, lsl #1
	asr	r5, r6, #16
	add	r6, r6, r7
	add	r5, r2, r5, lsl #1
	vld1.32	{d18[0]}, [r4], r3
	vzip.8	d0, d20
	vld1.32	{d19[0]}, [r5], r3
	vzip.8	d1, d21
	vld1.32	{d18[1]}, [r4]
	vzip.8	d20, d21
	vld1.32	{d19[1]}, [r5]
	vzip.8	d0, d1
	vshrn.i16	d16, q9, #8
	vshrn.i16	d5, q9, #3
	vsli.16	q9, q9, #5
	vsri.8	d16, d16, #5
	vsri.8	d5, d5, #6
	vshrn.i16	d4, q9, #2
	vmull.u8	q1, d0, d28
	vzip.8	d4, d16
	vmlal.u8	q1, d1, d29
	vzip.8	d5, d17
	vmull.u8	q11, d20, d28
	vzip.8	d16, d17
	vmlal.u8	q11, d21, d29
	vzip.8	d4, d5
	vmull.u8	q3, d4, d28
	vmlal.u8	q3, d5, d29
	vmull.u8	q9, d16, d28
	vmlal.u8	q9, d17, d29
	pld	[r4, r8]
	sub	r4, r4, r3
	vshll.u16	q0, d2, #8
	vmlsl.u16	q0, d2, d30
	vmlal.u16	q0, d3, d30
	vshll.u16	q10, d22, #8
	vmlsl.u16	q10, d22, d31
	vmlal.u16	q10, d23, d31
	vshr.u16	q15, q12, #8
	vshll.u16	q2, d6, #8
	vmlsl.u16	q2, d6, d30
	vmlal.u16	q2, d7, d30
	vshll.u16	q8, d18, #8
	vld1.32	{d22[0]}, [r1]!
	pld	[r1, #28]
	pld	[r4, r8]
	vmlsl.u16	q8, d18, d31
	vmlal.u16	q8, d19, d31
	vadd.i16	q12, q12, q13
	vshrn.i32	d0, q0, #16
	vshrn.i32	d1, q10, #16
	vshrn.i32	d4, q2, #16
	vshrn.i32	d5, q8, #16
	vdup.32	d22, d22[0]
	vshr.u16	q15, q12, #8
	vmovn.i16	d0, q0
	vmovn.i16	d1, q2
	vadd.i16	q12, q12, q13
	vuzp.8	d0, d1
	vuzp.8	d2, d3
	vuzp.8	d0, d1
	vuzp.8	d2, d3
	vmull.u8	q3, d0, d22
	vmull.u8	q8, d1, d22
	vrshr.u16	q9, q3, #8
	vrshr.u16	q10, q8, #8
	vraddhn.i16	d0, q9, q3
	vraddhn.i16	d1, q10, q8
	vuzp.8	d0, d1
	vuzp.8	d0, d1
	vuzp.8	d0, d1
	vuzp.8	d2, d3
	vuzp.8	d1, d3
	vuzp.8	d0, d2
	vshll.i8	q2, d1, #8
	vshll.i8	q1, d2, #8
	vshll.i8	q3, d0, #8
	vsri.16	q1, q2, #5
	vsri.16	q1, q3, #11
	vst1.16	{d2}, [r0]!
	subs	ip, ip, #4
	bge	4b
3:	tst	ip, #2
	beq	5f
	asr	r4, r6, #16
	add	r6, r6, r7
	add	r4, r2, r4, lsl #1
	asr	r5, r6, #16
	add	r6, r6, r7
	add	r5, r2, r5, lsl #1
	vld1.32	{d22[0]}, [r4], r3
	vld1.32	{d23[0]}, [r5], r3
	vld1.32	{d22[1]}, [r4]
	vld1.32	{d23[1]}, [r5]
	vshrn.i16	d20, q11, #8
	vshrn.i16	d1, q11, #3
	vsli.16	q11, q11, #5
	vsri.8	d20, d20, #5
	vsri.8	d1, d1, #6
	vshrn.i16	d0, q11, #2
	vzip.8	d0, d20
	vzip.8	d1, d21
	vzip.8	d20, d21
	vzip.8	d0, d1
	vmull.u8	q1, d0, d28
	vmlal.u8	q1, d1, d29
	vmull.u8	q11, d20, d28
	vmlal.u8	q11, d21, d29
	vld1.16	{d4[0]}, [r1]!
	pld	[r1, #28]
	vshll.u16	q0, d2, #8
	vmlsl.u16	q0, d2, d30
	vmlal.u16	q0, d3, d30
	vshll.u16	q10, d22, #8
	vmlsl.u16	q10, d22, d31
	vmlal.u16	q10, d23, d31
	vshrn.i32	d0, q0, #16
	vshrn.i32	d1, q10, #16
	vdup.16	d4, d4[0]
	vshr.u16	q15, q12, #8
	vadd.i16	q12, q12, q13
	vmovn.i16	d0, q0
	vuzp.8	d0, d1
	vuzp.8	d18, d19
	vuzp.8	d0, d1
	vuzp.8	d18, d19
	vmull.u8	q3, d0, d4
	vmull.u8	q8, d1, d4
	vrshr.u16	q10, q3, #8
	vrshr.u16	q11, q8, #8
	vraddhn.i16	d0, q10, q3
	vraddhn.i16	d1, q11, q8
	vuzp.8	d0, d1
	vuzp.8	d0, d1
	vuzp.8	d0, d1
	vuzp.8	d2, d3
	vuzp.8	d1, d3
	vuzp.8	d0, d2
	vshll.i8	q2, d1, #8
	vshll.i8	q1, d2, #8
	vshll.i8	q3, d0, #8
	vsri.16	q1, q2, #5
	vsri.16	q1, q3, #11
	vst1.32	{d2[0]}, [r0]!
5:	tst	ip, #1
	beq	0f
	asr	r4, r6, #16
	add	r6, r6, r7
	add	r4, r2, r4, lsl #1
	vld1.32	{d1[0]}, [r4], r3
	vld1.32	{d1[1]}, [r4]
	vshl.s16	d0, d1, #5
	vshl.s16	d2, d1, #11
	vsri.16	d1, d1, #5
	vsri.16	d0, d0, #6
	vsri.16	d2, d2, #5
	vshr.u16	d1, d1, #8
	vsri.16	d0, d2, #8
	vzip.16	d0, d1
	vld1.8	{d4[0]}, [r1]!
	pld	[r1, #28]
	vmull.u8	q1, d0, d28
	vmlal.u8	q1, d1, d29
	vshll.u16	q0, d2, #8
	vmlsl.u16	q0, d2, d30
	vmlal.u16	q0, d3, d30
	vdup.8	d4, d4[0]
	vshrn.i32	d0, q0, #16
	vmovn.i16	d0, q0
	vuzp.8	d0, d1
	vuzp.8	d18, d19
	vuzp.8	d0, d1
	vuzp.8	d18, d19
	vmull.u8	q3, d0, d4
	vmull.u8	q8, d1, d4
	vrshr.u16	q10, q3, #8
	vrshr.u16	q11, q8, #8
	vraddhn.i16	d0, q10, q3
	vraddhn.i16	d1, q11, q8
	vuzp.8	d0, d1
	vuzp.8	d0, d1
	vuzp.8	d0, d1
	vuzp.8	d2, d3
	vuzp.8	d1, d3
	vuzp.8	d0, d2
	vshll.i8	q2, d1, #8
	vshll.i8	q1, d2, #8
	vshll.i8	q3, d0, #8
	vsri.16	q1, q2, #5
	vsri.16	q1, q3, #11
	vst1.16	{d2[0]}, [r0]!
0:	pop	{r4, r5, r6, r7, r8, r9, sl, ip}
	bx	lr

.global _pixman_scaled_nearest_scanline_8888_8888_SRC_asm_armv6
_pixman_scaled_nearest_scanline_8888_8888_SRC_asm_armv6:
	ldr	ip, [sp]
	push	{r4, r5, r6, r7}
	mvn	r6, #3
	and	r4, r6, r3, lsr #14
	add	r3, r3, ip
	subs	r0, r0, #40
	blt	0f
	mov	r7, #48
	mla	r7, ip, r7, r3
1:	subs	r0, r0, #8
	add	r7, r7, ip, lsl #3
	ldr	r4, [r2, r4]
	and	r5, r6, r3, lsr #14
	add	r3, r3, ip
	str	r4, [r1], #4
	ldr	r5, [r2, r5]
	and	r4, r6, r3, lsr #14
	add	r3, r3, ip
	str	r5, [r1], #4
	ldr	r4, [r2, r4]
	and	r5, r6, r3, lsr #14
	add	r3, r3, ip
	str	r4, [r1], #4
	ldr	r5, [r2, r5]
	and	r4, r6, r3, lsr #14
	add	r3, r3, ip
	str	r5, [r1], #4
	ldr	r4, [r2, r4]
	and	r5, r6, r3, lsr #14
	add	r3, r3, ip
	str	r4, [r1], #4
	ldr	r5, [r2, r5]
	and	r4, r6, r3, lsr #14
	add	r3, r3, ip
	str	r5, [r1], #4
	ldr	r4, [r2, r4]
	and	r5, r6, r3, lsr #14
	add	r3, r3, ip
	str	r4, [r1], #4
	ldr	r5, [r2, r5]
	and	r4, r6, r3, lsr #14
	add	r3, r3, ip
	str	r5, [r1], #4
	pld	[r2, r7, lsr #14]
	bge	1b
0:	adds	r0, r0, #36
	blt	2f
3:	ldr	r4, [r2, r4]
	and	r5, r6, r3, lsr #14
	add	r3, r3, ip
	str	r4, [r1], #4
	ldr	r5, [r2, r5]
	and	r4, r6, r3, lsr #14
	add	r3, r3, ip
	str	r5, [r1], #4
	ldr	r4, [r2, r4]
	and	r5, r6, r3, lsr #14
	add	r3, r3, ip
	str	r4, [r1], #4
	ldr	r5, [r2, r5]
	and	r4, r6, r3, lsr #14
	add	r3, r3, ip
	str	r5, [r1], #4
	subs	r0, r0, #4
	bge	3b
2:	tst	r0, #2
	beq	4f
	ldr	r4, [r2, r4]
	and	r5, r6, r3, lsr #14
	add	r3, r3, ip
	str	r4, [r1], #4
	ldr	r5, [r2, r5]
	and	r4, r6, r3, lsr #14
	add	r3, r3, ip
	str	r5, [r1], #4
4:	tst	r0, #1
	ldrne	r4, [r2, r4]
	strne	r4, [r1]
	pop	{r4, r5, r6, r7}
	bx	lr
	.word	0x00800080
	.word	0xff00ff00

.global _pixman_scaled_nearest_scanline_8888_8_0565_OVER_asm_neon
_pixman_scaled_nearest_scanline_8888_8_0565_OVER_asm_neon:
	ldr	ip, [sp]
	push	{r4, r5, r6, lr}
	ldr	lr, [sp, #20]
	vstmdb	sp!, {d8-d15}
	mov	r6, r1
	cmp	r0, #8
	blt	0f
	tst	r6, #15
	beq	1f
	tst	r6, #2
	beq	2f
	asr	r4, r3, #16
	add	r3, r3, ip
	add	r4, r2, r4, lsl #2
	vld1.32	{d8[1]}, [r4, :32]
	vld1.8	{d24[1]}, [lr]!
	vld1.16	{d4[1]}, [r6]!
	sub	r0, r0, #1
2:	tst	r6, #4
	beq	3f
	asr	r4, r3, #16
	add	r3, r3, ip
	add	r4, r2, r4, lsl #2
	asr	r5, r3, #16
	add	r3, r3, ip
	add	r5, r2, r5, lsl #2
	vld1.32	{d9[0]}, [r4, :32]
	vld1.32	{d9[1]}, [r5, :32]
	vld1.8	{d24[2]}, [lr]!
	vld1.8	{d24[3]}, [lr]!
	vld1.16	{d4[2]}, [r6]!
	vld1.16	{d4[3]}, [r6]!
	sub	r0, r0, #2
3:	tst	r6, #8
	beq	4f
	asr	r4, r3, #16
	add	r3, r3, ip, lsl #1
	add	r4, r2, r4, lsl #2
	asr	r5, r3, #16
	sub	r3, r3, ip
	add	r5, r2, r5, lsl #2
	vld1.32	{d10[0]}, [r4, :32]
	asr	r4, r3, #16
	add	r3, r3, ip, lsl #1
	add	r4, r2, r4, lsl #2
	vld1.32	{d11[0]}, [r5, :32]
	asr	r5, r3, #16
	add	r3, r3, ip
	add	r5, r2, r5, lsl #2
	vld1.32	{d10[1]}, [r4, :32]
	vld1.32	{d11[1]}, [r5, :32]
	vld1.8	{d24[4]}, [lr]!
	vld1.8	{d24[5]}, [lr]!
	vld1.8	{d24[6]}, [lr]!
	vld1.8	{d24[7]}, [lr]!
	vld1.16	{d5}, [r6, :64]!
	sub	r0, r0, #4
4:	vuzp.8	d8, d9
	vuzp.8	d10, d11
	vuzp.8	d9, d11
	vuzp.8	d8, d10
	vmull.u8	q0, d24, d8
	vmull.u8	q1, d24, d9
	vmull.u8	q6, d24, d10
	vmull.u8	q7, d24, d11
	vshrn.i16	d6, q2, #8
	vshrn.i16	d7, q2, #3
	vsli.16	q2, q2, #5
	vrshr.u16	q8, q0, #8
	vrshr.u16	q9, q1, #8
	vrshr.u16	q10, q6, #8
	vrshr.u16	q11, q7, #8
	vraddhn.i16	d0, q0, q8
	vraddhn.i16	d1, q1, q9
	vraddhn.i16	d2, q6, q10
	vraddhn.i16	d3, q7, q11
	vsri.8	d6, d6, #5
	vsri.8	d7, d7, #6
	vmvn	d3, d3
	vshrn.i16	d30, q2, #2
	vmull.u8	q8, d3, d6
	vmull.u8	q9, d3, d7
	vmull.u8	q10, d3, d30
	vrshr.u16	q13, q8, #8
	vrshr.u16	q11, q9, #8
	vrshr.u16	q15, q10, #8
	vraddhn.i16	d16, q8, q13
	vraddhn.i16	d27, q9, q11
	vraddhn.i16	d26, q10, q15
	vqadd.u8	d16, d2, d16
	vqadd.u8	q9, q0, q13
	vshll.i8	q14, d16, #8
	vshll.i8	q8, d19, #8
	vshll.i8	q9, d18, #8
	vsri.16	q14, q8, #5
	vsri.16	q14, q9, #11
	tst	r1, #2
	beq	5f
	vst1.16	{d28[1]}, [r1]!
5:	tst	r1, #4
	beq	6f
	vst1.16	{d28[2]}, [r1]!
	vst1.16	{d28[3]}, [r1]!
6:	tst	r1, #8
	beq	1f
	vst1.16	{d29}, [r1, :64]!
1:	subs	r0, r0, #8
	blt	7f
	vld1.16	{d4-d5}, [r6, :128]!
	asr	r4, r3, #16
	add	r3, r3, ip, lsl #1
	add	r4, r2, r4, lsl #2
	asr	r5, r3, #16
	sub	r3, r3, ip
	add	r5, r2, r5, lsl #2
	vld1.32	{d8[0]}, [r4, :32]
	asr	r4, r3, #16
	add	r3, r3, ip, lsl #1
	add	r4, r2, r4, lsl #2
	vld1.32	{d9[0]}, [r5, :32]
	asr	r5, r3, #16
	add	r3, r3, ip
	add	r5, r2, r5, lsl #2
	vld1.32	{d8[1]}, [r4, :32]
	vld1.32	{d9[1]}, [r5, :32]
	asr	r4, r3, #16
	add	r3, r3, ip, lsl #1
	add	r4, r2, r4, lsl #2
	asr	r5, r3, #16
	sub	r3, r3, ip
	add	r5, r2, r5, lsl #2
	vld1.32	{d10[0]}, [r4, :32]
	asr	r4, r3, #16
	add	r3, r3, ip, lsl #1
	add	r4, r2, r4, lsl #2
	vld1.32	{d11[0]}, [r5, :32]
	asr	r5, r3, #16
	add	r3, r3, ip
	add	r5, r2, r5, lsl #2
	vld1.32	{d10[1]}, [r4, :32]
	vld1.32	{d11[1]}, [r5, :32]
	vuzp.8	d8, d9
	vuzp.8	d10, d11
	vuzp.8	d9, d11
	vuzp.8	d8, d10
	vld1.8	{d24}, [lr]!
	vmull.u8	q0, d24, d8
	vmull.u8	q1, d24, d9
	vmull.u8	q6, d24, d10
	vmull.u8	q7, d24, d11
	vshrn.i16	d6, q2, #8
	vshrn.i16	d7, q2, #3
	vsli.16	q2, q2, #5
	vrshr.u16	q8, q0, #8
	vrshr.u16	q9, q1, #8
	vrshr.u16	q10, q6, #8
	vrshr.u16	q11, q7, #8
	vraddhn.i16	d0, q0, q8
	vraddhn.i16	d1, q1, q9
	vraddhn.i16	d2, q6, q10
	vraddhn.i16	d3, q7, q11
	vsri.8	d6, d6, #5
	vsri.8	d7, d7, #6
	vmvn	d3, d3
	vshrn.i16	d30, q2, #2
	vmull.u8	q8, d3, d6
	vmull.u8	q9, d3, d7
	vmull.u8	q10, d3, d30
	subs	r0, r0, #8
	blt	8f
9:	vld1.16	{d4-d5}, [r6, :128]!
	vshrn.i16	d6, q2, #8
	vld1.8	{d24}, [lr]!
	vshrn.i16	d7, q2, #3
	asr	r4, r3, #16
	add	r3, r3, ip, lsl #1
	add	r4, r2, r4, lsl #2
	asr	r5, r3, #16
	sub	r3, r3, ip
	add	r5, r2, r5, lsl #2
	vld1.32	{d8[0]}, [r4, :32]
	asr	r4, r3, #16
	add	r3, r3, ip, lsl #1
	add	r4, r2, r4, lsl #2
	vld1.32	{d9[0]}, [r5, :32]
	asr	r5, r3, #16
	add	r3, r3, ip
	add	r5, r2, r5, lsl #2
	vld1.32	{d8[1]}, [r4, :32]
	vld1.32	{d9[1]}, [r5, :32]
	asr	r4, r3, #16
	add	r3, r3, ip, lsl #1
	add	r4, r2, r4, lsl #2
	asr	r5, r3, #16
	sub	r3, r3, ip
	add	r5, r2, r5, lsl #2
	vld1.32	{d10[0]}, [r4, :32]
	asr	r4, r3, #16
	add	r3, r3, ip, lsl #1
	add	r4, r2, r4, lsl #2
	vld1.32	{d11[0]}, [r5, :32]
	asr	r5, r3, #16
	add	r3, r3, ip
	add	r5, r2, r5, lsl #2
	vld1.32	{d10[1]}, [r4, :32]
	vld1.32	{d11[1]}, [r5, :32]
	vuzp.8	d8, d9
	vuzp.8	d10, d11
	vuzp.8	d9, d11
	vuzp.8	d8, d10
	vmull.u8	q6, d24, d10
	vrshr.u16	q13, q8, #8
	vrshr.u16	q11, q9, #8
	vrshr.u16	q15, q10, #8
	vraddhn.i16	d16, q8, q13
	vraddhn.i16	d27, q9, q11
	vraddhn.i16	d26, q10, q15
	vqadd.u8	d16, d2, d16
	vmull.u8	q1, d24, d9
	vqadd.u8	q9, q0, q13
	vshll.i8	q14, d16, #8
	vmull.u8	q0, d24, d8
	vshll.i8	q8, d19, #8
	vshll.i8	q9, d18, #8
	vsri.16	q14, q8, #5
	vmull.u8	q7, d24, d11
	vsri.16	q14, q9, #11
	vsli.16	q2, q2, #5
	vrshr.u16	q8, q0, #8
	vrshr.u16	q9, q1, #8
	vrshr.u16	q10, q6, #8
	vrshr.u16	q11, q7, #8
	vraddhn.i16	d0, q0, q8
	vraddhn.i16	d1, q1, q9
	vraddhn.i16	d2, q6, q10
	vraddhn.i16	d3, q7, q11
	vsri.8	d6, d6, #5
	vsri.8	d7, d7, #6
	vmvn	d3, d3
	vshrn.i16	d30, q2, #2
	vst1.16	{d28-d29}, [r1, :128]!
	vmull.u8	q8, d3, d6
	vmull.u8	q9, d3, d7
	vmull.u8	q10, d3, d30
	subs	r0, r0, #8
	bge	9b
8:	vrshr.u16	q13, q8, #8
	vrshr.u16	q11, q9, #8
	vrshr.u16	q15, q10, #8
	vraddhn.i16	d16, q8, q13
	vraddhn.i16	d27, q9, q11
	vraddhn.i16	d26, q10, q15
	vqadd.u8	d16, d2, d16
	vqadd.u8	q9, q0, q13
	vshll.i8	q14, d16, #8
	vshll.i8	q8, d19, #8
	vshll.i8	q9, d18, #8
	vsri.16	q14, q8, #5
	vsri.16	q14, q9, #11
	vst1.16	{d28-d29}, [r1, :128]!
7:	tst	r0, #7
	beq	10f
	tst	r0, #4
	beq	11f
	asr	r4, r3, #16
	add	r3, r3, ip, lsl #1
	add	r4, r2, r4, lsl #2
	asr	r5, r3, #16
	sub	r3, r3, ip
	add	r5, r2, r5, lsl #2
	vld1.32	{d10[0]}, [r4, :32]
	asr	r4, r3, #16
	add	r3, r3, ip, lsl #1
	add	r4, r2, r4, lsl #2
	vld1.32	{d11[0]}, [r5, :32]
	asr	r5, r3, #16
	add	r3, r3, ip
	add	r5, r2, r5, lsl #2
	vld1.32	{d10[1]}, [r4, :32]
	vld1.32	{d11[1]}, [r5, :32]
	vld1.8	{d24[4]}, [lr]!
	vld1.8	{d24[5]}, [lr]!
	vld1.8	{d24[6]}, [lr]!
	vld1.8	{d24[7]}, [lr]!
	vld1.16	{d5}, [r6, :64]!
11:	tst	r0, #2
	beq	12f
	asr	r4, r3, #16
	add	r3, r3, ip
	add	r4, r2, r4, lsl #2
	asr	r5, r3, #16
	add	r3, r3, ip
	add	r5, r2, r5, lsl #2
	vld1.32	{d9[0]}, [r4, :32]
	vld1.32	{d9[1]}, [r5, :32]
	vld1.8	{d24[2]}, [lr]!
	vld1.8	{d24[3]}, [lr]!
	vld1.16	{d4[2]}, [r6]!
	vld1.16	{d4[3]}, [r6]!
12:	tst	r0, #1
	beq	13f
	asr	r4, r3, #16
	add	r3, r3, ip
	add	r4, r2, r4, lsl #2
	vld1.32	{d8[1]}, [r4, :32]
	vld1.8	{d24[1]}, [lr]!
	vld1.16	{d4[1]}, [r6]!
13:	vuzp.8	d8, d9
	vuzp.8	d10, d11
	vuzp.8	d9, d11
	vuzp.8	d8, d10
	vmull.u8	q0, d24, d8
	vmull.u8	q1, d24, d9
	vmull.u8	q6, d24, d10
	vmull.u8	q7, d24, d11
	vshrn.i16	d6, q2, #8
	vshrn.i16	d7, q2, #3
	vsli.16	q2, q2, #5
	vrshr.u16	q8, q0, #8
	vrshr.u16	q9, q1, #8
	vrshr.u16	q10, q6, #8
	vrshr.u16	q11, q7, #8
	vraddhn.i16	d0, q0, q8
	vraddhn.i16	d1, q1, q9
	vraddhn.i16	d2, q6, q10
	vraddhn.i16	d3, q7, q11
	vsri.8	d6, d6, #5
	vsri.8	d7, d7, #6
	vmvn	d3, d3
	vshrn.i16	d30, q2, #2
	vmull.u8	q8, d3, d6
	vmull.u8	q9, d3, d7
	vmull.u8	q10, d3, d30
	vrshr.u16	q13, q8, #8
	vrshr.u16	q11, q9, #8
	vrshr.u16	q15, q10, #8
	vraddhn.i16	d16, q8, q13
	vraddhn.i16	d27, q9, q11
	vraddhn.i16	d26, q10, q15
	vqadd.u8	d16, d2, d16
	vqadd.u8	q9, q0, q13
	vshll.i8	q14, d16, #8
	vshll.i8	q8, d19, #8
	vshll.i8	q9, d18, #8
	vsri.16	q14, q8, #5
	vsri.16	q14, q9, #11
	tst	r0, #4
	beq	14f
	vst1.16	{d29}, [r1, :64]!
14:	tst	r0, #2
	beq	15f
	vst1.16	{d28[2]}, [r1]!
	vst1.16	{d28[3]}, [r1]!
15:	tst	r0, #1
	beq	10f
	vst1.16	{d28[1]}, [r1]!
10:	vldmia	sp!, {d8-d15}
	pop	{r4, r5, r6, pc}
0:	tst	r0, #7
	beq	16f
	tst	r0, #4
	beq	17f
	asr	r4, r3, #16
	add	r3, r3, ip, lsl #1
	add	r4, r2, r4, lsl #2
	asr	r5, r3, #16
	sub	r3, r3, ip
	add	r5, r2, r5, lsl #2
	vld1.32	{d10[0]}, [r4, :32]
	asr	r4, r3, #16
	add	r3, r3, ip, lsl #1
	add	r4, r2, r4, lsl #2
	vld1.32	{d11[0]}, [r5, :32]
	asr	r5, r3, #16
	add	r3, r3, ip
	add	r5, r2, r5, lsl #2
	vld1.32	{d10[1]}, [r4, :32]
	vld1.32	{d11[1]}, [r5, :32]
	vld1.8	{d24[4]}, [lr]!
	vld1.8	{d24[5]}, [lr]!
	vld1.8	{d24[6]}, [lr]!
	vld1.8	{d24[7]}, [lr]!
	vld1.16	{d5}, [r6]!
17:	tst	r0, #2
	beq	18f
	asr	r4, r3, #16
	add	r3, r3, ip
	add	r4, r2, r4, lsl #2
	asr	r5, r3, #16
	add	r3, r3, ip
	add	r5, r2, r5, lsl #2
	vld1.32	{d9[0]}, [r4, :32]
	vld1.32	{d9[1]}, [r5, :32]
	vld1.8	{d24[2]}, [lr]!
	vld1.8	{d24[3]}, [lr]!
	vld1.16	{d4[2]}, [r6]!
	vld1.16	{d4[3]}, [r6]!
18:	tst	r0, #1
	beq	19f
	asr	r4, r3, #16
	add	r3, r3, ip
	add	r4, r2, r4, lsl #2
	vld1.32	{d8[1]}, [r4, :32]
	vld1.8	{d24[1]}, [lr]!
	vld1.16	{d4[1]}, [r6]!
19:	vuzp.8	d8, d9
	vuzp.8	d10, d11
	vuzp.8	d9, d11
	vuzp.8	d8, d10
	vmull.u8	q0, d24, d8
	vmull.u8	q1, d24, d9
	vmull.u8	q6, d24, d10
	vmull.u8	q7, d24, d11
	vshrn.i16	d6, q2, #8
	vshrn.i16	d7, q2, #3
	vsli.16	q2, q2, #5
	vrshr.u16	q8, q0, #8
	vrshr.u16	q9, q1, #8
	vrshr.u16	q10, q6, #8
	vrshr.u16	q11, q7, #8
	vraddhn.i16	d0, q0, q8
	vraddhn.i16	d1, q1, q9
	vraddhn.i16	d2, q6, q10
	vraddhn.i16	d3, q7, q11
	vsri.8	d6, d6, #5
	vsri.8	d7, d7, #6
	vmvn	d3, d3
	vshrn.i16	d30, q2, #2
	vmull.u8	q8, d3, d6
	vmull.u8	q9, d3, d7
	vmull.u8	q10, d3, d30
	vrshr.u16	q13, q8, #8
	vrshr.u16	q11, q9, #8
	vrshr.u16	q15, q10, #8
	vraddhn.i16	d16, q8, q13
	vraddhn.i16	d27, q9, q11
	vraddhn.i16	d26, q10, q15
	vqadd.u8	d16, d2, d16
	vqadd.u8	q9, q0, q13
	vshll.i8	q14, d16, #8
	vshll.i8	q8, d19, #8
	vshll.i8	q9, d18, #8
	vsri.16	q14, q8, #5
	vsri.16	q14, q9, #11
	tst	r0, #4
	beq	20f
	vst1.16	{d29}, [r1]!
20:	tst	r0, #2
	beq	21f
	vst1.16	{d28[2]}, [r1]!
	vst1.16	{d28[3]}, [r1]!
21:	tst	r0, #1
	beq	16f
	vst1.16	{d28[1]}, [r1]!
16:	vldmia	sp!, {d8-d15}
	pop	{r4, r5, r6, pc}

.global _pixman_scaled_bilinear_scanline_8888_0565_SRC_asm_neon
_pixman_scaled_bilinear_scanline_8888_0565_SRC_asm_neon:
	mov	ip, sp
	push	{r4, r5, r6, r7, r8, r9}
	mov	r7, #28
	ldm	ip, {r4, r5, r6, ip}
	mul	r7, r7, r6
	vstmdb	sp!, {d8-d15}
	sub	r2, r2, r1
	cmp	ip, #0
	ble	0f
	vdup.16	q12, r5
	vdup.16	q13, r6
	vdup.8	d28, r3
	vdup.8	d29, r4
	vadd.i16	d25, d25, d26
	cmp	ip, #1
	blt	1f
	tst	r0, #2
	beq	1f
	vshr.u16	q15, q12, #8
	vadd.i16	q12, q12, q13
	asr	r3, r5, #16
	add	r5, r5, r6
	add	r3, r1, r3, lsl #2
	vld1.32	{d0}, [r3], r2
	vld1.32	{d1}, [r3]
	vmull.u8	q1, d0, d28
	vmlal.u8	q1, d1, d29
	vshll.u16	q0, d2, #8
	vmlsl.u16	q0, d2, d30
	vmlal.u16	q0, d3, d30
	vshrn.i32	d0, q0, #16
	vmovn.i16	d0, q0
	vuzp.8	d0, d1
	vuzp.8	d2, d3
	vuzp.8	d1, d3
	vuzp.8	d0, d2
	vshll.i8	q2, d1, #8
	vshll.i8	q1, d2, #8
	vshll.i8	q3, d0, #8
	vsri.16	q1, q2, #5
	vsri.16	q1, q3, #11
	vst1.16	{d2[0]}, [r0, :16]!
	sub	ip, ip, #1
1:	vadd.i16	q13, q13, q13
	vshr.u16	q15, q12, #8
	vadd.i16	q12, q12, q13
	cmp	ip, #2
	blt	2f
	tst	r0, #4
	beq	2f
	asr	r3, r5, #16
	add	r5, r5, r6
	add	r3, r1, r3, lsl #2
	vld1.32	{d0}, [r3], r2
	vld1.32	{d1}, [r3]
	vmull.u8	q1, d0, d28
	vmlal.u8	q1, d1, d29
	asr	r3, r5, #16
	add	r5, r5, r6
	add	r3, r1, r3, lsl #2
	vld1.32	{d20}, [r3], r2
	vld1.32	{d21}, [r3]
	vmull.u8	q11, d20, d28
	vmlal.u8	q11, d21, d29
	vshll.u16	q0, d2, #8
	vmlsl.u16	q0, d2, d30
	vmlal.u16	q0, d3, d30
	vshll.u16	q10, d22, #8
	vmlsl.u16	q10, d22, d31
	vmlal.u16	q10, d23, d31
	vshrn.i32	d0, q0, #16
	vshrn.i32	d1, q10, #16
	vshr.u16	q15, q12, #8
	vadd.i16	q12, q12, q13
	vmovn.i16	d0, q0
	vuzp.8	d0, d1
	vuzp.8	d2, d3
	vuzp.8	d1, d3
	vuzp.8	d0, d2
	vshll.i8	q2, d1, #8
	vshll.i8	q1, d2, #8
	vshll.i8	q3, d0, #8
	vsri.16	q1, q2, #5
	vsri.16	q1, q3, #11
	vst1.32	{d2[0]}, [r0, :32]!
	sub	ip, ip, #2
2:	cmp	ip, #4
	blt	3f
	tst	r0, #8
	beq	3f
	asr	r3, r5, #16
	add	r5, r5, r6
	add	r3, r1, r3, lsl #2
	vld1.32	{d0}, [r3], r2
	vld1.32	{d1}, [r3]
	vmull.u8	q1, d0, d28
	vmlal.u8	q1, d1, d29
	asr	r3, r5, #16
	add	r5, r5, r6
	add	r3, r1, r3, lsl #2
	vld1.32	{d20}, [r3], r2
	vld1.32	{d21}, [r3]
	vmull.u8	q11, d20, d28
	vmlal.u8	q11, d21, d29
	asr	r3, r5, #16
	add	r5, r5, r6
	add	r3, r1, r3, lsl #2
	vld1.32	{d4}, [r3], r2
	vld1.32	{d5}, [r3]
	vmull.u8	q3, d4, d28
	vmlal.u8	q3, d5, d29
	asr	r3, r5, #16
	add	r5, r5, r6
	add	r3, r1, r3, lsl #2
	vld1.32	{d16}, [r3], r2
	vld1.32	{d17}, [r3]
	vmull.u8	q9, d16, d28
	vmlal.u8	q9, d17, d29
	pld	[r3, r7]
	sub	r3, r3, r2
	vshll.u16	q0, d2, #8
	vmlsl.u16	q0, d2, d30
	vmlal.u16	q0, d3, d30
	vshll.u16	q10, d22, #8
	vmlsl.u16	q10, d22, d31
	vmlal.u16	q10, d23, d31
	vshr.u16	q15, q12, #8
	vshll.u16	q2, d6, #8
	vmlsl.u16	q2, d6, d30
	vmlal.u16	q2, d7, d30
	vshll.u16	q8, d18, #8
	pld	[r4, r7]
	vmlsl.u16	q8, d18, d31
	vmlal.u16	q8, d19, d31
	vadd.i16	q12, q12, q13
	vshrn.i32	d0, q0, #16
	vshrn.i32	d1, q10, #16
	vshrn.i32	d4, q2, #16
	vshrn.i32	d5, q8, #16
	vshr.u16	q15, q12, #8
	vmovn.i16	d0, q0
	vmovn.i16	d1, q2
	vadd.i16	q12, q12, q13
	vuzp.8	d0, d1
	vuzp.8	d2, d3
	vuzp.8	d1, d3
	vuzp.8	d0, d2
	vshll.i8	q2, d1, #8
	vshll.i8	q1, d2, #8
	vshll.i8	q3, d0, #8
	vsri.16	q1, q2, #5
	vsri.16	q1, q3, #11
	vst1.16	{d2}, [r0, :64]!
	sub	ip, ip, #4
3:	subs	ip, ip, #8
	blt	4f
	asr	r7, r7, #14
	asr	r3, r5, #16
	add	r5, r5, r6
	add	r3, r1, r3, lsl #2
	asr	r4, r5, #16
	add	r5, r5, r6
	add	r4, r1, r4, lsl #2
	vld1.32	{d20}, [r3], r2
	vld1.32	{d21}, [r3]
	vmull.u8	q8, d20, d28
	vmlal.u8	q8, d21, d29
	vld1.32	{d22}, [r4], r2
	vld1.32	{d23}, [r4]
	vmull.u8	q9, d22, d28
	asr	r8, r5, #16
	add	r5, r5, r6
	add	r8, r1, r8, lsl #2
	asr	r9, r5, #16
	add	r5, r5, r6
	add	r9, r1, r9, lsl #2
	vmlal.u8	q9, d23, d29
	vld1.32	{d22}, [r8], r2
	vld1.32	{d23}, [r8]
	vmull.u8	q10, d22, d28
	vmlal.u8	q10, d23, d29
	vshll.u16	q0, d16, #8
	vmlsl.u16	q0, d16, d30
	vmlal.u16	q0, d17, d30
	pld	[r9, r7]
	vld1.32	{d16}, [r9], r2
	vld1.32	{d17}, [r9]
	pld	[r9, r7]
	vmull.u8	q11, d16, d28
	vmlal.u8	q11, d17, d29
	vshll.u16	q1, d18, #8
	vmlsl.u16	q1, d18, d31
	asr	r3, r5, #16
	add	r5, r5, r6
	add	r3, r1, r3, lsl #2
	asr	r4, r5, #16
	add	r5, r5, r6
	add	r4, r1, r4, lsl #2
	vmlal.u16	q1, d19, d31
	vshr.u16	q15, q12, #8
	vshll.u16	q2, d20, #8
	vmlsl.u16	q2, d20, d30
	vmlal.u16	q2, d21, d30
	vshll.u16	q3, d22, #8
	vld1.32	{d20}, [r3], r2
	vmlsl.u16	q3, d22, d31
	vmlal.u16	q3, d23, d31
	vld1.32	{d21}, [r3]
	vmull.u8	q8, d20, d28
	vmlal.u8	q8, d21, d29
	vshrn.i32	d0, q0, #16
	vshrn.i32	d1, q1, #16
	vshrn.i32	d4, q2, #16
	vld1.32	{d22}, [r4], r2
	vshrn.i32	d5, q3, #16
	vadd.i16	q12, q12, q13
	vld1.32	{d23}, [r4]
	vmull.u8	q9, d22, d28
	asr	r8, r5, #16
	add	r5, r5, r6
	add	r8, r1, r8, lsl #2
	asr	r9, r5, #16
	add	r5, r5, r6
	add	r9, r1, r9, lsl #2
	vmlal.u8	q9, d23, d29
	vld1.32	{d22}, [r8], r2
	vshr.u16	q15, q12, #8
	vld1.32	{d23}, [r8]
	vmull.u8	q10, d22, d28
	vmlal.u8	q10, d23, d29
	vmovn.i16	d8, q0
	vshll.u16	q0, d16, #8
	vmovn.i16	d9, q2
	vmlsl.u16	q0, d16, d30
	vmlal.u16	q0, d17, d30
	pld	[r9, r7]
	vld1.32	{d16}, [r9], r2
	vadd.i16	q12, q12, q13
	vld1.32	{d17}, [r9]
	pld	[r9, r7]
	vmull.u8	q11, d16, d28
	vmlal.u8	q11, d17, d29
	vshll.u16	q1, d18, #8
	vmlsl.u16	q1, d18, d31
	subs	ip, ip, #8
	blt	5f
6:	asr	r3, r5, #16
	add	r5, r5, r6
	add	r3, r1, r3, lsl #2
	asr	r4, r5, #16
	add	r5, r5, r6
	add	r4, r1, r4, lsl #2
	vmlal.u16	q1, d19, d31
	vshr.u16	q15, q12, #8
	vuzp.8	d8, d9
	vshll.u16	q2, d20, #8
	vmlsl.u16	q2, d20, d30
	vmlal.u16	q2, d21, d30
	vshll.u16	q3, d22, #8
	vld1.32	{d20}, [r3], r2
	vmlsl.u16	q3, d22, d31
	vmlal.u16	q3, d23, d31
	vld1.32	{d21}, [r3]
	vmull.u8	q8, d20, d28
	vmlal.u8	q8, d21, d29
	vshrn.i32	d0, q0, #16
	vshrn.i32	d1, q1, #16
	vshrn.i32	d4, q2, #16
	vld1.32	{d22}, [r4], r2
	vshrn.i32	d5, q3, #16
	vadd.i16	q12, q12, q13
	vld1.32	{d23}, [r4]
	vmull.u8	q9, d22, d28
	asr	r8, r5, #16
	add	r5, r5, r6
	add	r8, r1, r8, lsl #2
	asr	r9, r5, #16
	add	r5, r5, r6
	add	r9, r1, r9, lsl #2
	vmlal.u8	q9, d23, d29
	vld1.32	{d22}, [r8], r2
	vshr.u16	q15, q12, #8
	vld1.32	{d23}, [r8]
	vmull.u8	q10, d22, d28
	vmlal.u8	q10, d23, d29
	vmovn.i16	d10, q0
	vshll.u16	q0, d16, #8
	vmovn.i16	d11, q2
	vmlsl.u16	q0, d16, d30
	vmlal.u16	q0, d17, d30
	pld	[r9, r7]
	vld1.32	{d16}, [r9], r2
	vadd.i16	q12, q12, q13
	vld1.32	{d17}, [r9]
	pld	[r9, r7]
	vmull.u8	q11, d16, d28
	vmlal.u8	q11, d17, d29
	vuzp.8	d10, d11
	vshll.u16	q1, d18, #8
	vmlsl.u16	q1, d18, d31
	asr	r3, r5, #16
	add	r5, r5, r6
	add	r3, r1, r3, lsl #2
	asr	r4, r5, #16
	add	r5, r5, r6
	add	r4, r1, r4, lsl #2
	vmlal.u16	q1, d19, d31
	vuzp.8	d9, d11
	vshr.u16	q15, q12, #8
	vshll.u16	q2, d20, #8
	vuzp.8	d8, d10
	vmlsl.u16	q2, d20, d30
	vmlal.u16	q2, d21, d30
	vshll.u16	q3, d22, #8
	vld1.32	{d20}, [r3], r2
	vmlsl.u16	q3, d22, d31
	vmlal.u16	q3, d23, d31
	vld1.32	{d21}, [r3]
	vmull.u8	q8, d20, d28
	vmlal.u8	q8, d21, d29
	vshll.i8	q6, d9, #8
	vshll.i8	q5, d10, #8
	vshll.i8	q7, d8, #8
	vshrn.i32	d0, q0, #16
	vsri.16	q5, q6, #5
	vshrn.i32	d1, q1, #16
	vsri.16	q5, q7, #11
	vshrn.i32	d4, q2, #16
	vld1.32	{d22}, [r4], r2
	vshrn.i32	d5, q3, #16
	vadd.i16	q12, q12, q13
	vld1.32	{d23}, [r4]
	vmull.u8	q9, d22, d28
	asr	r8, r5, #16
	add	r5, r5, r6
	add	r8, r1, r8, lsl #2
	asr	r9, r5, #16
	add	r5, r5, r6
	add	r9, r1, r9, lsl #2
	vmlal.u8	q9, d23, d29
	vld1.32	{d22}, [r8], r2
	vshr.u16	q15, q12, #8
	vld1.32	{d23}, [r8]
	vmull.u8	q10, d22, d28
	vmlal.u8	q10, d23, d29
	vmovn.i16	d8, q0
	vshll.u16	q0, d16, #8
	vmovn.i16	d9, q2
	vmlsl.u16	q0, d16, d30
	vmlal.u16	q0, d17, d30
	pld	[r9, r7]
	vld1.32	{d16}, [r9], r2
	vadd.i16	q12, q12, q13
	vld1.32	{d17}, [r9]
	pld	[r9, r7]
	vmull.u8	q11, d16, d28
	vmlal.u8	q11, d17, d29
	vshll.u16	q1, d18, #8
	vst1.32	{d10-d11}, [r0, :128]!
	vmlsl.u16	q1, d18, d31
	subs	ip, ip, #8
	bge	6b
5:	vmlal.u16	q1, d19, d31
	vshr.u16	q15, q12, #8
	vshll.u16	q2, d20, #8
	vmlsl.u16	q2, d20, d30
	vmlal.u16	q2, d21, d30
	vshll.u16	q3, d22, #8
	vmlsl.u16	q3, d22, d31
	vmlal.u16	q3, d23, d31
	vadd.i16	q12, q12, q13
	vshrn.i32	d0, q0, #16
	vshrn.i32	d1, q1, #16
	vshrn.i32	d4, q2, #16
	vshr.u16	q15, q12, #8
	vshrn.i32	d5, q3, #16
	vmovn.i16	d10, q0
	vmovn.i16	d11, q2
	vadd.i16	q12, q12, q13
	vuzp.8	d8, d9
	vuzp.8	d10, d11
	vuzp.8	d9, d11
	vuzp.8	d8, d10
	vshll.i8	q6, d9, #8
	vshll.i8	q5, d10, #8
	vshll.i8	q7, d8, #8
	vsri.16	q5, q6, #5
	vsri.16	q5, q7, #11
	vst1.32	{d10-d11}, [r0, :128]!
4:	tst	ip, #4
	beq	7f
	asr	r3, r5, #16
	add	r5, r5, r6
	add	r3, r1, r3, lsl #2
	vld1.32	{d0}, [r3], r2
	vld1.32	{d1}, [r3]
	vmull.u8	q1, d0, d28
	vmlal.u8	q1, d1, d29
	asr	r3, r5, #16
	add	r5, r5, r6
	add	r3, r1, r3, lsl #2
	vld1.32	{d20}, [r3], r2
	vld1.32	{d21}, [r3]
	vmull.u8	q11, d20, d28
	vmlal.u8	q11, d21, d29
	asr	r3, r5, #16
	add	r5, r5, r6
	add	r3, r1, r3, lsl #2
	vld1.32	{d4}, [r3], r2
	vld1.32	{d5}, [r3]
	vmull.u8	q3, d4, d28
	vmlal.u8	q3, d5, d29
	asr	r3, r5, #16
	add	r5, r5, r6
	add	r3, r1, r3, lsl #2
	vld1.32	{d16}, [r3], r2
	vld1.32	{d17}, [r3]
	vmull.u8	q9, d16, d28
	vmlal.u8	q9, d17, d29
	pld	[r3, r7]
	sub	r3, r3, r2
	vshll.u16	q0, d2, #8
	vmlsl.u16	q0, d2, d30
	vmlal.u16	q0, d3, d30
	vshll.u16	q10, d22, #8
	vmlsl.u16	q10, d22, d31
	vmlal.u16	q10, d23, d31
	vshr.u16	q15, q12, #8
	vshll.u16	q2, d6, #8
	vmlsl.u16	q2, d6, d30
	vmlal.u16	q2, d7, d30
	vshll.u16	q8, d18, #8
	pld	[r4, r7]
	vmlsl.u16	q8, d18, d31
	vmlal.u16	q8, d19, d31
	vadd.i16	q12, q12, q13
	vshrn.i32	d0, q0, #16
	vshrn.i32	d1, q10, #16
	vshrn.i32	d4, q2, #16
	vshrn.i32	d5, q8, #16
	vshr.u16	q15, q12, #8
	vmovn.i16	d0, q0
	vmovn.i16	d1, q2
	vadd.i16	q12, q12, q13
	vuzp.8	d0, d1
	vuzp.8	d2, d3
	vuzp.8	d1, d3
	vuzp.8	d0, d2
	vshll.i8	q2, d1, #8
	vshll.i8	q1, d2, #8
	vshll.i8	q3, d0, #8
	vsri.16	q1, q2, #5
	vsri.16	q1, q3, #11
	vst1.16	{d2}, [r0, :64]!
7:	tst	ip, #2
	beq	8f
	asr	r3, r5, #16
	add	r5, r5, r6
	add	r3, r1, r3, lsl #2
	vld1.32	{d0}, [r3], r2
	vld1.32	{d1}, [r3]
	vmull.u8	q1, d0, d28
	vmlal.u8	q1, d1, d29
	asr	r3, r5, #16
	add	r5, r5, r6
	add	r3, r1, r3, lsl #2
	vld1.32	{d20}, [r3], r2
	vld1.32	{d21}, [r3]
	vmull.u8	q11, d20, d28
	vmlal.u8	q11, d21, d29
	vshll.u16	q0, d2, #8
	vmlsl.u16	q0, d2, d30
	vmlal.u16	q0, d3, d30
	vshll.u16	q10, d22, #8
	vmlsl.u16	q10, d22, d31
	vmlal.u16	q10, d23, d31
	vshrn.i32	d0, q0, #16
	vshrn.i32	d1, q10, #16
	vshr.u16	q15, q12, #8
	vadd.i16	q12, q12, q13
	vmovn.i16	d0, q0
	vuzp.8	d0, d1
	vuzp.8	d2, d3
	vuzp.8	d1, d3
	vuzp.8	d0, d2
	vshll.i8	q2, d1, #8
	vshll.i8	q1, d2, #8
	vshll.i8	q3, d0, #8
	vsri.16	q1, q2, #5
	vsri.16	q1, q3, #11
	vst1.32	{d2[0]}, [r0, :32]!
8:	tst	ip, #1
	beq	0f
	asr	r3, r5, #16
	add	r5, r5, r6
	add	r3, r1, r3, lsl #2
	vld1.32	{d0}, [r3], r2
	vld1.32	{d1}, [r3]
	vmull.u8	q1, d0, d28
	vmlal.u8	q1, d1, d29
	vshll.u16	q0, d2, #8
	vmlsl.u16	q0, d2, d30
	vmlal.u16	q0, d3, d30
	vshrn.i32	d0, q0, #16
	vmovn.i16	d0, q0
	vuzp.8	d0, d1
	vuzp.8	d2, d3
	vuzp.8	d1, d3
	vuzp.8	d0, d2
	vshll.i8	q2, d1, #8
	vshll.i8	q1, d2, #8
	vshll.i8	q3, d0, #8
	vsri.16	q1, q2, #5
	vsri.16	q1, q3, #11
	vst1.16	{d2[0]}, [r0, :16]!
0:	vldmia	sp!, {d8-d15}
	pop	{r4, r5, r6, r7, r8, r9}
	bx	lr

.global _pixman_composite_over_8888_n_0565_asm_neon
_pixman_composite_over_8888_n_0565_asm_neon:
	push	{r4, r5, r6, r7, r8, r9, sl, fp, ip, lr}
	ldr	r4, [sp, #40]
	mov	sl, #0
	ldr	r5, [sp, #44]
	mov	r6, r2
	mov	fp, r4
	mov	ip, r6
	mov	lr, r7
	lsl	r9, r1, #4
	sub	r9, r9, #11
	add	r8, sp, #48
	vstmdb	sp!, {d8-d15}
	vld1.32	{d24[0]}, [r8]
	vdup.8	d24, d24[3]
	subs	r1, r1, #1
	mov	r7, r0
	blt	0f
	cmp	r0, #16
	blt	1f
16:	tst	r6, #15
	beq	2f
	tst	r6, #2
	beq	3f
	vld1.32	{d8[1]}, [r4]!
	vld1.16	{d4[1]}, [r6]!
	add	sl, sl, #1
	sub	r0, r0, #1
3:	tst	r6, #4
	beq	4f
	vld1.32	{d9}, [r4]!
	vld1.16	{d4[2]}, [r6]!
	vld1.16	{d4[3]}, [r6]!
	add	sl, sl, #2
	sub	r0, r0, #2
4:	tst	r6, #8
	beq	5f
	vld1.32	{d10-d11}, [r4]!
	vld1.16	{d5}, [r6, :64]!
	add	sl, sl, #4
	sub	r0, r0, #4
5:	vuzp.8	d8, d9
	vuzp.8	d10, d11
	vuzp.8	d9, d11
	vuzp.8	d8, d10
	vmull.u8	q0, d24, d8
	vmull.u8	q1, d24, d9
	vmull.u8	q6, d24, d10
	vmull.u8	q7, d24, d11
	vshrn.i16	d6, q2, #8
	vshrn.i16	d7, q2, #3
	vsli.16	q2, q2, #5
	vrshr.u16	q8, q0, #8
	vrshr.u16	q9, q1, #8
	vrshr.u16	q10, q6, #8
	vrshr.u16	q11, q7, #8
	vraddhn.i16	d0, q0, q8
	vraddhn.i16	d1, q1, q9
	vraddhn.i16	d2, q6, q10
	vraddhn.i16	d3, q7, q11
	vsri.8	d6, d6, #5
	vsri.8	d7, d7, #6
	vmvn	d3, d3
	vshrn.i16	d30, q2, #2
	vmull.u8	q8, d3, d6
	vmull.u8	q9, d3, d7
	vmull.u8	q10, d3, d30
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r7
	pld	[fp, sl, lsl #2]
	pld	[ip, sl, lsl #1]
	subge	sl, sl, r7
	subsge	r9, r9, #16
	ldrbge	r8, [fp, r5, lsl #2]!
	ldrbge	r8, [ip, r3, lsl #1]!
	vrshr.u16	q13, q8, #8
	vrshr.u16	q11, q9, #8
	vrshr.u16	q15, q10, #8
	vraddhn.i16	d16, q8, q13
	vraddhn.i16	d27, q9, q11
	vraddhn.i16	d26, q10, q15
	vqadd.u8	d16, d2, d16
	vqadd.u8	q9, q0, q13
	vshll.i8	q14, d16, #8
	vshll.i8	q8, d19, #8
	vshll.i8	q9, d18, #8
	vsri.16	q14, q8, #5
	vsri.16	q14, q9, #11
	tst	r2, #2
	beq	6f
	vst1.16	{d28[1]}, [r2]!
6:	tst	r2, #4
	beq	7f
	vst1.16	{d28[2]}, [r2]!
	vst1.16	{d28[3]}, [r2]!
7:	tst	r2, #8
	beq	2f
	vst1.16	{d29}, [r2, :64]!
2:	vld1.16	{d4-d5}, [r6, :128]!
	vld4.8	{d8-d11}, [r4]!
	add	sl, sl, #8
	vmull.u8	q0, d24, d8
	vmull.u8	q1, d24, d9
	vmull.u8	q6, d24, d10
	vmull.u8	q7, d24, d11
	vshrn.i16	d6, q2, #8
	vshrn.i16	d7, q2, #3
	vsli.16	q2, q2, #5
	vrshr.u16	q8, q0, #8
	vrshr.u16	q9, q1, #8
	vrshr.u16	q10, q6, #8
	vrshr.u16	q11, q7, #8
	vraddhn.i16	d0, q0, q8
	vraddhn.i16	d1, q1, q9
	vraddhn.i16	d2, q6, q10
	vraddhn.i16	d3, q7, q11
	vsri.8	d6, d6, #5
	vsri.8	d7, d7, #6
	vmvn	d3, d3
	vshrn.i16	d30, q2, #2
	vmull.u8	q8, d3, d6
	vmull.u8	q9, d3, d7
	vmull.u8	q10, d3, d30
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r7
	pld	[fp, sl, lsl #2]
	pld	[ip, sl, lsl #1]
	subge	sl, sl, r7
	subsge	r9, r9, #16
	ldrbge	r8, [fp, r5, lsl #2]!
	ldrbge	r8, [ip, r3, lsl #1]!
	subs	r0, r0, #16
	blt	8f
9:	vld1.16	{d4-d5}, [r6, :128]!
	vshrn.i16	d6, q2, #8
	vshrn.i16	d7, q2, #3
	vld4.8	{d8-d11}, [r4]!
	vmull.u8	q6, d24, d10
	vrshr.u16	q13, q8, #8
	vrshr.u16	q11, q9, #8
	vrshr.u16	q15, q10, #8
	vraddhn.i16	d16, q8, q13
	vraddhn.i16	d27, q9, q11
	vraddhn.i16	d26, q10, q15
	vqadd.u8	d16, d2, d16
	vmull.u8	q1, d24, d9
	vqadd.u8	q9, q0, q13
	vshll.i8	q14, d16, #8
	vmull.u8	q0, d24, d8
	vshll.i8	q8, d19, #8
	vshll.i8	q9, d18, #8
	vsri.16	q14, q8, #5
	vmull.u8	q7, d24, d11
	vsri.16	q14, q9, #11
	add	sl, sl, #8
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r7
	pld	[fp, sl, lsl #2]
	pld	[ip, sl, lsl #1]
	subge	sl, sl, r7
	subsge	r9, r9, #16
	ldrbge	r8, [fp, r5, lsl #2]!
	ldrbge	r8, [ip, r3, lsl #1]!
	vsli.16	q2, q2, #5
	vrshr.u16	q8, q0, #8
	vrshr.u16	q9, q1, #8
	vrshr.u16	q10, q6, #8
	vrshr.u16	q11, q7, #8
	vraddhn.i16	d0, q0, q8
	vraddhn.i16	d1, q1, q9
	vraddhn.i16	d2, q6, q10
	vraddhn.i16	d3, q7, q11
	vsri.8	d6, d6, #5
	vsri.8	d7, d7, #6
	vmvn	d3, d3
	vshrn.i16	d30, q2, #2
	vst1.16	{d28-d29}, [r2, :128]!
	vmull.u8	q8, d3, d6
	vmull.u8	q9, d3, d7
	vmull.u8	q10, d3, d30
	subs	r0, r0, #8
	bge	9b
8:	vrshr.u16	q13, q8, #8
	vrshr.u16	q11, q9, #8
	vrshr.u16	q15, q10, #8
	vraddhn.i16	d16, q8, q13
	vraddhn.i16	d27, q9, q11
	vraddhn.i16	d26, q10, q15
	vqadd.u8	d16, d2, d16
	vqadd.u8	q9, q0, q13
	vshll.i8	q14, d16, #8
	vshll.i8	q8, d19, #8
	vshll.i8	q9, d18, #8
	vsri.16	q14, q8, #5
	vsri.16	q14, q9, #11
	vst1.16	{d28-d29}, [r2, :128]!
	tst	r0, #7
	beq	10f
	tst	r0, #4
	beq	11f
	vld1.32	{d10-d11}, [r4]!
	vld1.16	{d5}, [r6, :64]!
	add	sl, sl, #4
11:	tst	r0, #2
	beq	12f
	vld1.32	{d9}, [r4]!
	vld1.16	{d4[2]}, [r6]!
	vld1.16	{d4[3]}, [r6]!
	add	sl, sl, #2
12:	tst	r0, #1
	beq	13f
	vld1.32	{d8[1]}, [r4]!
	vld1.16	{d4[1]}, [r6]!
	add	sl, sl, #1
13:	vuzp.8	d8, d9
	vuzp.8	d10, d11
	vuzp.8	d9, d11
	vuzp.8	d8, d10
	vmull.u8	q0, d24, d8
	vmull.u8	q1, d24, d9
	vmull.u8	q6, d24, d10
	vmull.u8	q7, d24, d11
	vshrn.i16	d6, q2, #8
	vshrn.i16	d7, q2, #3
	vsli.16	q2, q2, #5
	vrshr.u16	q8, q0, #8
	vrshr.u16	q9, q1, #8
	vrshr.u16	q10, q6, #8
	vrshr.u16	q11, q7, #8
	vraddhn.i16	d0, q0, q8
	vraddhn.i16	d1, q1, q9
	vraddhn.i16	d2, q6, q10
	vraddhn.i16	d3, q7, q11
	vsri.8	d6, d6, #5
	vsri.8	d7, d7, #6
	vmvn	d3, d3
	vshrn.i16	d30, q2, #2
	vmull.u8	q8, d3, d6
	vmull.u8	q9, d3, d7
	vmull.u8	q10, d3, d30
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r7
	pld	[fp, sl, lsl #2]
	pld	[ip, sl, lsl #1]
	subge	sl, sl, r7
	subsge	r9, r9, #16
	ldrbge	r8, [fp, r5, lsl #2]!
	ldrbge	r8, [ip, r3, lsl #1]!
	vrshr.u16	q13, q8, #8
	vrshr.u16	q11, q9, #8
	vrshr.u16	q15, q10, #8
	vraddhn.i16	d16, q8, q13
	vraddhn.i16	d27, q9, q11
	vraddhn.i16	d26, q10, q15
	vqadd.u8	d16, d2, d16
	vqadd.u8	q9, q0, q13
	vshll.i8	q14, d16, #8
	vshll.i8	q8, d19, #8
	vshll.i8	q9, d18, #8
	vsri.16	q14, q8, #5
	vsri.16	q14, q9, #11
	tst	r0, #4
	beq	14f
	vst1.16	{d29}, [r2, :64]!
14:	tst	r0, #2
	beq	15f
	vst1.16	{d28[2]}, [r2]!
	vst1.16	{d28[3]}, [r2]!
15:	tst	r0, #1
	beq	10f
	vst1.16	{d28[1]}, [r2]!
10:	mov	r0, r7
	add	r2, r2, r3, lsl #1
	add	r4, r4, r5, lsl #2
	sub	r2, r2, r0, lsl #1
	sub	r4, r4, r0, lsl #2
	subs	r1, r1, #1
	mov	r6, r2
	bge	16b
	vldmia	sp!, {d8-d15}
	pop	{r4, r5, r6, r7, r8, r9, sl, fp, ip, pc}
1:	tst	r0, #8
	beq	17f
	vld1.16	{d4-d5}, [r6]!
	vld4.8	{d8-d11}, [r4]!
	vmull.u8	q0, d24, d8
	vmull.u8	q1, d24, d9
	vmull.u8	q6, d24, d10
	vmull.u8	q7, d24, d11
	vshrn.i16	d6, q2, #8
	vshrn.i16	d7, q2, #3
	vsli.16	q2, q2, #5
	vrshr.u16	q8, q0, #8
	vrshr.u16	q9, q1, #8
	vrshr.u16	q10, q6, #8
	vrshr.u16	q11, q7, #8
	vraddhn.i16	d0, q0, q8
	vraddhn.i16	d1, q1, q9
	vraddhn.i16	d2, q6, q10
	vraddhn.i16	d3, q7, q11
	vsri.8	d6, d6, #5
	vsri.8	d7, d7, #6
	vmvn	d3, d3
	vshrn.i16	d30, q2, #2
	vmull.u8	q8, d3, d6
	vmull.u8	q9, d3, d7
	vmull.u8	q10, d3, d30
	vrshr.u16	q13, q8, #8
	vrshr.u16	q11, q9, #8
	vrshr.u16	q15, q10, #8
	vraddhn.i16	d16, q8, q13
	vraddhn.i16	d27, q9, q11
	vraddhn.i16	d26, q10, q15
	vqadd.u8	d16, d2, d16
	vqadd.u8	q9, q0, q13
	vshll.i8	q14, d16, #8
	vshll.i8	q8, d19, #8
	vshll.i8	q9, d18, #8
	vsri.16	q14, q8, #5
	vsri.16	q14, q9, #11
	vst1.16	{d28-d29}, [r2]!
17:	tst	r0, #7
	beq	18f
	tst	r0, #4
	beq	19f
	vld1.32	{d10-d11}, [r4]!
	vld1.16	{d5}, [r6]!
19:	tst	r0, #2
	beq	20f
	vld1.32	{d9}, [r4]!
	vld1.16	{d4[2]}, [r6]!
	vld1.16	{d4[3]}, [r6]!
20:	tst	r0, #1
	beq	21f
	vld1.32	{d8[1]}, [r4]!
	vld1.16	{d4[1]}, [r6]!
21:	vuzp.8	d8, d9
	vuzp.8	d10, d11
	vuzp.8	d9, d11
	vuzp.8	d8, d10
	vmull.u8	q0, d24, d8
	vmull.u8	q1, d24, d9
	vmull.u8	q6, d24, d10
	vmull.u8	q7, d24, d11
	vshrn.i16	d6, q2, #8
	vshrn.i16	d7, q2, #3
	vsli.16	q2, q2, #5
	vrshr.u16	q8, q0, #8
	vrshr.u16	q9, q1, #8
	vrshr.u16	q10, q6, #8
	vrshr.u16	q11, q7, #8
	vraddhn.i16	d0, q0, q8
	vraddhn.i16	d1, q1, q9
	vraddhn.i16	d2, q6, q10
	vraddhn.i16	d3, q7, q11
	vsri.8	d6, d6, #5
	vsri.8	d7, d7, #6
	vmvn	d3, d3
	vshrn.i16	d30, q2, #2
	vmull.u8	q8, d3, d6
	vmull.u8	q9, d3, d7
	vmull.u8	q10, d3, d30
	vrshr.u16	q13, q8, #8
	vrshr.u16	q11, q9, #8
	vrshr.u16	q15, q10, #8
	vraddhn.i16	d16, q8, q13
	vraddhn.i16	d27, q9, q11
	vraddhn.i16	d26, q10, q15
	vqadd.u8	d16, d2, d16
	vqadd.u8	q9, q0, q13
	vshll.i8	q14, d16, #8
	vshll.i8	q8, d19, #8
	vshll.i8	q9, d18, #8
	vsri.16	q14, q8, #5
	vsri.16	q14, q9, #11
	tst	r0, #4
	beq	22f
	vst1.16	{d29}, [r2]!
22:	tst	r0, #2
	beq	23f
	vst1.16	{d28[2]}, [r2]!
	vst1.16	{d28[3]}, [r2]!
23:	tst	r0, #1
	beq	18f
	vst1.16	{d28[1]}, [r2]!
18:	mov	r0, r7
	add	r2, r2, r3, lsl #1
	add	r4, r4, r5, lsl #2
	sub	r2, r2, r0, lsl #1
	sub	r4, r4, r0, lsl #2
	subs	r1, r1, #1
	mov	r6, r2
	bge	1b
0:	vldmia	sp!, {d8-d15}
	pop	{r4, r5, r6, r7, r8, r9, sl, fp, ip, pc}

.global _pixman_scaled_bilinear_scanline_8888_8_8888_OVER_asm_neon
_pixman_scaled_bilinear_scanline_8888_8_8888_OVER_asm_neon:
	mov	ip, sp
	push	{r4, r5, r6, r7, r8, r9, sl, ip}
	mov	r8, #28
	ldm	ip, {r4, r5, r6, r7, ip}
	mul	r8, r8, r7
	sub	r3, r3, r2
	cmp	ip, #0
	ble	0f
	vdup.16	q12, r6
	vdup.16	q13, r7
	vdup.8	d28, r4
	vdup.8	d29, r5
	vadd.i16	d25, d25, d26
	cmp	ip, #1
	blt	1f
	tst	r0, #4
	beq	1f
	vshr.u16	q15, q12, #8
	vadd.i16	q12, q12, q13
	asr	r4, r6, #16
	add	r6, r6, r7
	add	r4, r2, r4, lsl #2
	vld1.32	{d0}, [r4], r3
	vld1.32	{d1}, [r4]
	vld1.8	{d4[0]}, [r1]!
	pld	[r1, #28]
	vld1.32	{d18[0]}, [r0]
	pld	[r0, #112]
	vmull.u8	q1, d0, d28
	vmlal.u8	q1, d1, d29
	vshll.u16	q0, d2, #8
	vmlsl.u16	q0, d2, d30
	vmlal.u16	q0, d3, d30
	vdup.8	d4, d4[0]
	vshrn.i32	d0, q0, #16
	vmovn.i16	d0, q0
	vuzp.8	d0, d1
	vuzp.8	d18, d19
	vuzp.8	d0, d1
	vuzp.8	d18, d19
	vmull.u8	q3, d0, d4
	vmull.u8	q8, d1, d4
	vrshr.u16	q10, q3, #8
	vrshr.u16	q11, q8, #8
	vraddhn.i16	d0, q10, q3
	vraddhn.i16	d1, q11, q8
	vdup.32	d5, d1[1]
	vmvn	d5, d5
	vmull.u8	q3, d18, d5
	vmull.u8	q8, d19, d5
	vrshr.u16	q10, q3, #8
	vrshr.u16	q11, q8, #8
	vraddhn.i16	d18, q10, q3
	vraddhn.i16	d19, q11, q8
	vqadd.u8	q0, q9, q0
	vuzp.8	d0, d1
	vuzp.8	d0, d1
	vst1.32	{d0[0]}, [r0, :32]!
	sub	ip, ip, #1
1:	vadd.i16	q13, q13, q13
	vshr.u16	q15, q12, #8
	vadd.i16	q12, q12, q13
	cmp	ip, #2
	blt	2f
	tst	r0, #8
	beq	2f
	asr	r4, r6, #16
	add	r6, r6, r7
	add	r4, r2, r4, lsl #2
	vld1.32	{d0}, [r4], r3
	vld1.32	{d1}, [r4]
	vmull.u8	q1, d0, d28
	vmlal.u8	q1, d1, d29
	asr	r4, r6, #16
	add	r6, r6, r7
	add	r4, r2, r4, lsl #2
	vld1.32	{d20}, [r4], r3
	vld1.32	{d21}, [r4]
	vmull.u8	q11, d20, d28
	vmlal.u8	q11, d21, d29
	vld1.16	{d4[0]}, [r1]!
	pld	[r1, #28]
	vld1.32	{d18}, [r0]
	pld	[r0, #112]
	vshll.u16	q0, d2, #8
	vmlsl.u16	q0, d2, d30
	vmlal.u16	q0, d3, d30
	vshll.u16	q10, d22, #8
	vmlsl.u16	q10, d22, d31
	vmlal.u16	q10, d23, d31
	vshrn.i32	d0, q0, #16
	vshrn.i32	d1, q10, #16
	vdup.16	d4, d4[0]
	vshr.u16	q15, q12, #8
	vadd.i16	q12, q12, q13
	vmovn.i16	d0, q0
	vuzp.8	d0, d1
	vuzp.8	d18, d19
	vuzp.8	d0, d1
	vuzp.8	d18, d19
	vmull.u8	q3, d0, d4
	vmull.u8	q8, d1, d4
	vrshr.u16	q10, q3, #8
	vrshr.u16	q11, q8, #8
	vraddhn.i16	d0, q10, q3
	vraddhn.i16	d1, q11, q8
	vdup.32	d5, d1[1]
	vmvn	d5, d5
	vmull.u8	q3, d18, d5
	vmull.u8	q8, d19, d5
	vrshr.u16	q10, q3, #8
	vrshr.u16	q11, q8, #8
	vraddhn.i16	d18, q10, q3
	vraddhn.i16	d19, q11, q8
	vqadd.u8	q0, q9, q0
	vuzp.8	d0, d1
	vuzp.8	d0, d1
	vst1.32	{d0}, [r0]!
	sub	ip, ip, #2
2:	subs	ip, ip, #4
	blt	3f
	asr	r8, r8, #14
	asr	r4, r6, #16
	add	r6, r6, r7
	add	r4, r2, r4, lsl #2
	vld1.32	{d0}, [r4], r3
	asr	r5, r6, #16
	add	r6, r6, r7
	add	r5, r2, r5, lsl #2
	vld1.32	{d1}, [r4]
	asr	r9, r6, #16
	add	r6, r6, r7
	add	r9, r2, r9, lsl #2
	vld1.32	{d2}, [r5], r3
	asr	sl, r6, #16
	add	r6, r6, r7
	add	sl, r2, sl, lsl #2
	vld1.32	{d3}, [r5]
	vmull.u8	q2, d0, d28
	vmull.u8	q3, d2, d28
	vmlal.u8	q2, d1, d29
	vmlal.u8	q3, d3, d29
	vshll.u16	q0, d4, #8
	vshll.u16	q1, d6, #8
	vmlsl.u16	q0, d4, d30
	vmlsl.u16	q1, d6, d31
	vmlal.u16	q0, d5, d30
	vmlal.u16	q1, d7, d31
	vshrn.i32	d0, q0, #16
	vshrn.i32	d1, q1, #16
	vld1.32	{d2}, [r9], r3
	vld1.32	{d3}, [r9]
	pld	[sl, r8]
	vld1.32	{d4}, [sl], r3
	vld1.32	{d5}, [sl]
	pld	[sl, r8]
	vmull.u8	q3, d2, d28
	vmlal.u8	q3, d3, d29
	vmull.u8	q1, d4, d28
	vmlal.u8	q1, d5, d29
	vshr.u16	q15, q12, #8
	vld1.32	{d22[0]}, [r1]!
	pld	[r1, #28]
	vadd.i16	q12, q12, q13
	vmovn.i16	d16, q0
	subs	ip, ip, #4
	blt	4f
5:	vshll.u16	q9, d6, #8
	asr	r4, r6, #16
	add	r6, r6, r7
	add	r4, r2, r4, lsl #2
	vshll.u16	q10, d2, #8
	vld1.32	{d0}, [r4], r3
	asr	r5, r6, #16
	add	r6, r6, r7
	add	r5, r2, r5, lsl #2
	vmlsl.u16	q9, d6, d30
	vmlsl.u16	q10, d2, d31
	vld1.32	{d1}, [r4]
	asr	r9, r6, #16
	add	r6, r6, r7
	add	r9, r2, r9, lsl #2
	vmlal.u16	q9, d7, d30
	vmlal.u16	q10, d3, d31
	vld1.32	{d2}, [r5], r3
	asr	sl, r6, #16
	add	r6, r6, r7
	add	sl, r2, sl, lsl #2
	vshr.u16	q15, q12, #8
	vadd.i16	q12, q12, q13
	vld1.32	{d3}, [r5]
	vdup.32	d22, d22[0]
	vshrn.i32	d18, q9, #16
	vshrn.i32	d19, q10, #16
	vmull.u8	q2, d0, d28
	vmull.u8	q3, d2, d28
	vmovn.i16	d17, q9
	vld1.32	{d18-d19}, [r0, :128]
	pld	[r0, #112]
	vmlal.u8	q2, d1, d29
	vmlal.u8	q3, d3, d29
	vuzp.8	d16, d17
	vuzp.8	d18, d19
	vshll.u16	q0, d4, #8
	vshll.u16	q1, d6, #8
	vuzp.8	d16, d17
	vuzp.8	d18, d19
	vmlsl.u16	q0, d4, d30
	vmlsl.u16	q1, d6, d31
	vmull.u8	q10, d16, d22
	vmull.u8	q11, d17, d22
	vmlal.u16	q0, d5, d30
	vmlal.u16	q1, d7, d31
	vrsra.u16	q10, q10, #8
	vrsra.u16	q11, q11, #8
	vshrn.i32	d0, q0, #16
	vshrn.i32	d1, q1, #16
	vrshrn.i16	d16, q10, #8
	vrshrn.i16	d17, q11, #8
	vld1.32	{d2}, [r9], r3
	vdup.32	d22, d17[1]
	vld1.32	{d3}, [r9]
	vmvn	d22, d22
	pld	[sl, r8]
	vld1.32	{d4}, [sl], r3
	vmull.u8	q10, d18, d22
	vmull.u8	q11, d19, d22
	vld1.32	{d5}, [sl]
	pld	[sl, r8]
	vmull.u8	q3, d2, d28
	vrshr.u16	q9, q10, #8
	vrshr.u16	q15, q11, #8
	vmlal.u8	q3, d3, d29
	vmull.u8	q1, d4, d28
	vraddhn.i16	d18, q9, q10
	vraddhn.i16	d19, q15, q11
	vmlal.u8	q1, d5, d29
	vshr.u16	q15, q12, #8
	vqadd.u8	q9, q8, q9
	vld1.32	{d22[0]}, [r1]!
	vuzp.8	d18, d19
	vadd.i16	q12, q12, q13
	vuzp.8	d18, d19
	vmovn.i16	d16, q0
	vst1.32	{d18-d19}, [r0, :128]!
	subs	ip, ip, #4
	bge	5b
4:	vshll.u16	q9, d6, #8
	vshll.u16	q10, d2, #8
	vmlsl.u16	q9, d6, d30
	vmlsl.u16	q10, d2, d31
	vmlal.u16	q9, d7, d30
	vmlal.u16	q10, d3, d31
	vshr.u16	q15, q12, #8
	vadd.i16	q12, q12, q13
	vdup.32	d22, d22[0]
	vshrn.i32	d18, q9, #16
	vshrn.i32	d19, q10, #16
	vmovn.i16	d17, q9
	vld1.32	{d18-d19}, [r0, :128]
	pld	[r0, r8]
	vuzp.8	d16, d17
	vuzp.8	d18, d19
	vuzp.8	d16, d17
	vuzp.8	d18, d19
	vmull.u8	q10, d16, d22
	vmull.u8	q11, d17, d22
	vrsra.u16	q10, q10, #8
	vrsra.u16	q11, q11, #8
	vrshrn.i16	d16, q10, #8
	vrshrn.i16	d17, q11, #8
	vdup.32	d22, d17[1]
	vmvn	d22, d22
	vmull.u8	q10, d18, d22
	vmull.u8	q11, d19, d22
	vrshr.u16	q9, q10, #8
	vrshr.u16	q0, q11, #8
	vraddhn.i16	d18, q9, q10
	vraddhn.i16	d19, q0, q11
	vqadd.u8	q9, q8, q9
	vuzp.8	d18, d19
	vuzp.8	d18, d19
	vst1.32	{d18-d19}, [r0, :128]!
3:	tst	ip, #2
	beq	6f
	asr	r4, r6, #16
	add	r6, r6, r7
	add	r4, r2, r4, lsl #2
	vld1.32	{d0}, [r4], r3
	vld1.32	{d1}, [r4]
	vmull.u8	q1, d0, d28
	vmlal.u8	q1, d1, d29
	asr	r4, r6, #16
	add	r6, r6, r7
	add	r4, r2, r4, lsl #2
	vld1.32	{d20}, [r4], r3
	vld1.32	{d21}, [r4]
	vmull.u8	q11, d20, d28
	vmlal.u8	q11, d21, d29
	vld1.16	{d4[0]}, [r1]!
	pld	[r1, #28]
	vld1.32	{d18}, [r0]
	pld	[r0, #112]
	vshll.u16	q0, d2, #8
	vmlsl.u16	q0, d2, d30
	vmlal.u16	q0, d3, d30
	vshll.u16	q10, d22, #8
	vmlsl.u16	q10, d22, d31
	vmlal.u16	q10, d23, d31
	vshrn.i32	d0, q0, #16
	vshrn.i32	d1, q10, #16
	vdup.16	d4, d4[0]
	vshr.u16	q15, q12, #8
	vadd.i16	q12, q12, q13
	vmovn.i16	d0, q0
	vuzp.8	d0, d1
	vuzp.8	d18, d19
	vuzp.8	d0, d1
	vuzp.8	d18, d19
	vmull.u8	q3, d0, d4
	vmull.u8	q8, d1, d4
	vrshr.u16	q10, q3, #8
	vrshr.u16	q11, q8, #8
	vraddhn.i16	d0, q10, q3
	vraddhn.i16	d1, q11, q8
	vdup.32	d5, d1[1]
	vmvn	d5, d5
	vmull.u8	q3, d18, d5
	vmull.u8	q8, d19, d5
	vrshr.u16	q10, q3, #8
	vrshr.u16	q11, q8, #8
	vraddhn.i16	d18, q10, q3
	vraddhn.i16	d19, q11, q8
	vqadd.u8	q0, q9, q0
	vuzp.8	d0, d1
	vuzp.8	d0, d1
	vst1.32	{d0}, [r0]!
6:	tst	ip, #1
	beq	0f
	asr	r4, r6, #16
	add	r6, r6, r7
	add	r4, r2, r4, lsl #2
	vld1.32	{d0}, [r4], r3
	vld1.32	{d1}, [r4]
	vld1.8	{d4[0]}, [r1]!
	pld	[r1, #28]
	vld1.32	{d18[0]}, [r0]
	pld	[r0, #112]
	vmull.u8	q1, d0, d28
	vmlal.u8	q1, d1, d29
	vshll.u16	q0, d2, #8
	vmlsl.u16	q0, d2, d30
	vmlal.u16	q0, d3, d30
	vdup.8	d4, d4[0]
	vshrn.i32	d0, q0, #16
	vmovn.i16	d0, q0
	vuzp.8	d0, d1
	vuzp.8	d18, d19
	vuzp.8	d0, d1
	vuzp.8	d18, d19
	vmull.u8	q3, d0, d4
	vmull.u8	q8, d1, d4
	vrshr.u16	q10, q3, #8
	vrshr.u16	q11, q8, #8
	vraddhn.i16	d0, q10, q3
	vraddhn.i16	d1, q11, q8
	vdup.32	d5, d1[1]
	vmvn	d5, d5
	vmull.u8	q3, d18, d5
	vmull.u8	q8, d19, d5
	vrshr.u16	q10, q3, #8
	vrshr.u16	q11, q8, #8
	vraddhn.i16	d18, q10, q3
	vraddhn.i16	d19, q11, q8
	vqadd.u8	q0, q9, q0
	vuzp.8	d0, d1
	vuzp.8	d0, d1
	vst1.32	{d0[0]}, [r0, :32]!
0:	pop	{r4, r5, r6, r7, r8, r9, sl, ip}
	bx	lr

.global _pixman_composite_over_n_8_0565_asm_neon
_pixman_composite_over_n_8_0565_asm_neon:
	push	{r4, r5, r6, r7, r8, r9, sl, fp, ip, lr}
	ldr	r7, [sp, #48]
	mov	sl, #0
	ldr	r8, [sp, #52]
	mov	r6, r2
	mov	fp, r4
	mov	ip, r6
	mov	lr, r7
	lsl	r9, r1, #4
	sub	r9, r9, #11
	add	r5, sp, #40
	vstmdb	sp!, {d8-d15}
	vld1.32	{d11[0]}, [r5]
	vdup.8	d8, d11[0]
	vdup.8	d9, d11[1]
	vdup.8	d10, d11[2]
	vdup.8	d11, d11[3]
	subs	r1, r1, #1
	mov	r4, r0
	blt	0f
	cmp	r0, #16
	blt	1f
16:	tst	r6, #15
	beq	2f
	tst	r6, #2
	beq	3f
	vld1.8	{d24[1]}, [r7]!
	vld1.16	{d4[1]}, [r6]!
	add	sl, sl, #1
	sub	r0, r0, #1
3:	tst	r6, #4
	beq	4f
	vld1.8	{d24[2]}, [r7]!
	vld1.8	{d24[3]}, [r7]!
	vld1.16	{d4[2]}, [r6]!
	vld1.16	{d4[3]}, [r6]!
	add	sl, sl, #2
	sub	r0, r0, #2
4:	tst	r6, #8
	beq	5f
	vld1.8	{d24[4]}, [r7]!
	vld1.8	{d24[5]}, [r7]!
	vld1.8	{d24[6]}, [r7]!
	vld1.8	{d24[7]}, [r7]!
	vld1.16	{d5}, [r6, :64]!
	add	sl, sl, #4
	sub	r0, r0, #4
5:	vmull.u8	q0, d24, d8
	vmull.u8	q1, d24, d9
	vmull.u8	q6, d24, d10
	vmull.u8	q7, d24, d11
	vshrn.i16	d6, q2, #8
	vshrn.i16	d7, q2, #3
	vsli.16	q2, q2, #5
	vrshr.u16	q8, q0, #8
	vrshr.u16	q9, q1, #8
	vrshr.u16	q10, q6, #8
	vrshr.u16	q11, q7, #8
	vraddhn.i16	d0, q0, q8
	vraddhn.i16	d1, q1, q9
	vraddhn.i16	d2, q6, q10
	vraddhn.i16	d3, q7, q11
	vsri.8	d6, d6, #5
	vsri.8	d7, d7, #6
	vmvn	d3, d3
	vshrn.i16	d30, q2, #2
	vmull.u8	q8, d3, d6
	vmull.u8	q9, d3, d7
	vmull.u8	q10, d3, d30
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r4
	pld	[ip, sl, lsl #1]
	pld	[lr, sl]
	subge	sl, sl, r4
	subsge	r9, r9, #16
	ldrbge	r5, [ip, r3, lsl #1]!
	ldrbge	r5, [lr, r8]!
	vrshr.u16	q13, q8, #8
	vrshr.u16	q11, q9, #8
	vrshr.u16	q15, q10, #8
	vraddhn.i16	d16, q8, q13
	vraddhn.i16	d27, q9, q11
	vraddhn.i16	d26, q10, q15
	vqadd.u8	d16, d2, d16
	vqadd.u8	q9, q0, q13
	vshll.i8	q14, d16, #8
	vshll.i8	q8, d19, #8
	vshll.i8	q9, d18, #8
	vsri.16	q14, q8, #5
	vsri.16	q14, q9, #11
	tst	r2, #2
	beq	6f
	vst1.16	{d28[1]}, [r2]!
6:	tst	r2, #4
	beq	7f
	vst1.16	{d28[2]}, [r2]!
	vst1.16	{d28[3]}, [r2]!
7:	tst	r2, #8
	beq	2f
	vst1.16	{d29}, [r2, :64]!
2:	vld1.16	{d4-d5}, [r6, :128]!
	vld1.8	{d24}, [r7]!
	add	sl, sl, #8
	vmull.u8	q0, d24, d8
	vmull.u8	q1, d24, d9
	vmull.u8	q6, d24, d10
	vmull.u8	q7, d24, d11
	vshrn.i16	d6, q2, #8
	vshrn.i16	d7, q2, #3
	vsli.16	q2, q2, #5
	vrshr.u16	q8, q0, #8
	vrshr.u16	q9, q1, #8
	vrshr.u16	q10, q6, #8
	vrshr.u16	q11, q7, #8
	vraddhn.i16	d0, q0, q8
	vraddhn.i16	d1, q1, q9
	vraddhn.i16	d2, q6, q10
	vraddhn.i16	d3, q7, q11
	vsri.8	d6, d6, #5
	vsri.8	d7, d7, #6
	vmvn	d3, d3
	vshrn.i16	d30, q2, #2
	vmull.u8	q8, d3, d6
	vmull.u8	q9, d3, d7
	vmull.u8	q10, d3, d30
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r4
	pld	[ip, sl, lsl #1]
	pld	[lr, sl]
	subge	sl, sl, r4
	subsge	r9, r9, #16
	ldrbge	r5, [ip, r3, lsl #1]!
	ldrbge	r5, [lr, r8]!
	subs	r0, r0, #16
	blt	8f
9:	vld1.16	{d4-d5}, [r6, :128]!
	vshrn.i16	d6, q2, #8
	vld1.8	{d24}, [r7]!
	vshrn.i16	d7, q2, #3
	vmull.u8	q6, d24, d10
	vrshr.u16	q13, q8, #8
	vrshr.u16	q11, q9, #8
	vrshr.u16	q15, q10, #8
	vraddhn.i16	d16, q8, q13
	vraddhn.i16	d27, q9, q11
	vraddhn.i16	d26, q10, q15
	vqadd.u8	d16, d2, d16
	vmull.u8	q1, d24, d9
	vqadd.u8	q9, q0, q13
	vshll.i8	q14, d16, #8
	vmull.u8	q0, d24, d8
	vshll.i8	q8, d19, #8
	vshll.i8	q9, d18, #8
	vsri.16	q14, q8, #5
	vmull.u8	q7, d24, d11
	vsri.16	q14, q9, #11
	add	sl, sl, #8
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r4
	pld	[ip, sl, lsl #1]
	pld	[lr, sl]
	subge	sl, sl, r4
	subsge	r9, r9, #16
	ldrbge	r5, [ip, r3, lsl #1]!
	ldrbge	r5, [lr, r8]!
	vsli.16	q2, q2, #5
	vrshr.u16	q8, q0, #8
	vrshr.u16	q9, q1, #8
	vrshr.u16	q10, q6, #8
	vrshr.u16	q11, q7, #8
	vraddhn.i16	d0, q0, q8
	vraddhn.i16	d1, q1, q9
	vraddhn.i16	d2, q6, q10
	vraddhn.i16	d3, q7, q11
	vsri.8	d6, d6, #5
	vsri.8	d7, d7, #6
	vmvn	d3, d3
	vshrn.i16	d30, q2, #2
	vst1.16	{d28-d29}, [r2, :128]!
	vmull.u8	q8, d3, d6
	vmull.u8	q9, d3, d7
	vmull.u8	q10, d3, d30
	subs	r0, r0, #8
	bge	9b
8:	vrshr.u16	q13, q8, #8
	vrshr.u16	q11, q9, #8
	vrshr.u16	q15, q10, #8
	vraddhn.i16	d16, q8, q13
	vraddhn.i16	d27, q9, q11
	vraddhn.i16	d26, q10, q15
	vqadd.u8	d16, d2, d16
	vqadd.u8	q9, q0, q13
	vshll.i8	q14, d16, #8
	vshll.i8	q8, d19, #8
	vshll.i8	q9, d18, #8
	vsri.16	q14, q8, #5
	vsri.16	q14, q9, #11
	vst1.16	{d28-d29}, [r2, :128]!
	tst	r0, #7
	beq	10f
	tst	r0, #4
	beq	11f
	vld1.8	{d24[4]}, [r7]!
	vld1.8	{d24[5]}, [r7]!
	vld1.8	{d24[6]}, [r7]!
	vld1.8	{d24[7]}, [r7]!
	vld1.16	{d5}, [r6, :64]!
	add	sl, sl, #4
11:	tst	r0, #2
	beq	12f
	vld1.8	{d24[2]}, [r7]!
	vld1.8	{d24[3]}, [r7]!
	vld1.16	{d4[2]}, [r6]!
	vld1.16	{d4[3]}, [r6]!
	add	sl, sl, #2
12:	tst	r0, #1
	beq	13f
	vld1.8	{d24[1]}, [r7]!
	vld1.16	{d4[1]}, [r6]!
	add	sl, sl, #1
13:	vmull.u8	q0, d24, d8
	vmull.u8	q1, d24, d9
	vmull.u8	q6, d24, d10
	vmull.u8	q7, d24, d11
	vshrn.i16	d6, q2, #8
	vshrn.i16	d7, q2, #3
	vsli.16	q2, q2, #5
	vrshr.u16	q8, q0, #8
	vrshr.u16	q9, q1, #8
	vrshr.u16	q10, q6, #8
	vrshr.u16	q11, q7, #8
	vraddhn.i16	d0, q0, q8
	vraddhn.i16	d1, q1, q9
	vraddhn.i16	d2, q6, q10
	vraddhn.i16	d3, q7, q11
	vsri.8	d6, d6, #5
	vsri.8	d7, d7, #6
	vmvn	d3, d3
	vshrn.i16	d30, q2, #2
	vmull.u8	q8, d3, d6
	vmull.u8	q9, d3, d7
	vmull.u8	q10, d3, d30
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r4
	pld	[ip, sl, lsl #1]
	pld	[lr, sl]
	subge	sl, sl, r4
	subsge	r9, r9, #16
	ldrbge	r5, [ip, r3, lsl #1]!
	ldrbge	r5, [lr, r8]!
	vrshr.u16	q13, q8, #8
	vrshr.u16	q11, q9, #8
	vrshr.u16	q15, q10, #8
	vraddhn.i16	d16, q8, q13
	vraddhn.i16	d27, q9, q11
	vraddhn.i16	d26, q10, q15
	vqadd.u8	d16, d2, d16
	vqadd.u8	q9, q0, q13
	vshll.i8	q14, d16, #8
	vshll.i8	q8, d19, #8
	vshll.i8	q9, d18, #8
	vsri.16	q14, q8, #5
	vsri.16	q14, q9, #11
	tst	r0, #4
	beq	14f
	vst1.16	{d29}, [r2, :64]!
14:	tst	r0, #2
	beq	15f
	vst1.16	{d28[2]}, [r2]!
	vst1.16	{d28[3]}, [r2]!
15:	tst	r0, #1
	beq	10f
	vst1.16	{d28[1]}, [r2]!
10:	mov	r0, r4
	add	r2, r2, r3, lsl #1
	add	r7, r7, r8
	sub	r2, r2, r0, lsl #1
	sub	r7, r7, r0
	subs	r1, r1, #1
	mov	r6, r2
	bge	16b
	vldmia	sp!, {d8-d15}
	pop	{r4, r5, r6, r7, r8, r9, sl, fp, ip, pc}
1:	tst	r0, #8
	beq	17f
	vld1.16	{d4-d5}, [r6]!
	vld1.8	{d24}, [r7]!
	vmull.u8	q0, d24, d8
	vmull.u8	q1, d24, d9
	vmull.u8	q6, d24, d10
	vmull.u8	q7, d24, d11
	vshrn.i16	d6, q2, #8
	vshrn.i16	d7, q2, #3
	vsli.16	q2, q2, #5
	vrshr.u16	q8, q0, #8
	vrshr.u16	q9, q1, #8
	vrshr.u16	q10, q6, #8
	vrshr.u16	q11, q7, #8
	vraddhn.i16	d0, q0, q8
	vraddhn.i16	d1, q1, q9
	vraddhn.i16	d2, q6, q10
	vraddhn.i16	d3, q7, q11
	vsri.8	d6, d6, #5
	vsri.8	d7, d7, #6
	vmvn	d3, d3
	vshrn.i16	d30, q2, #2
	vmull.u8	q8, d3, d6
	vmull.u8	q9, d3, d7
	vmull.u8	q10, d3, d30
	vrshr.u16	q13, q8, #8
	vrshr.u16	q11, q9, #8
	vrshr.u16	q15, q10, #8
	vraddhn.i16	d16, q8, q13
	vraddhn.i16	d27, q9, q11
	vraddhn.i16	d26, q10, q15
	vqadd.u8	d16, d2, d16
	vqadd.u8	q9, q0, q13
	vshll.i8	q14, d16, #8
	vshll.i8	q8, d19, #8
	vshll.i8	q9, d18, #8
	vsri.16	q14, q8, #5
	vsri.16	q14, q9, #11
	vst1.16	{d28-d29}, [r2]!
17:	tst	r0, #7
	beq	18f
	tst	r0, #4
	beq	19f
	vld1.8	{d24[4]}, [r7]!
	vld1.8	{d24[5]}, [r7]!
	vld1.8	{d24[6]}, [r7]!
	vld1.8	{d24[7]}, [r7]!
	vld1.16	{d5}, [r6]!
19:	tst	r0, #2
	beq	20f
	vld1.8	{d24[2]}, [r7]!
	vld1.8	{d24[3]}, [r7]!
	vld1.16	{d4[2]}, [r6]!
	vld1.16	{d4[3]}, [r6]!
20:	tst	r0, #1
	beq	21f
	vld1.8	{d24[1]}, [r7]!
	vld1.16	{d4[1]}, [r6]!
21:	vmull.u8	q0, d24, d8
	vmull.u8	q1, d24, d9
	vmull.u8	q6, d24, d10
	vmull.u8	q7, d24, d11
	vshrn.i16	d6, q2, #8
	vshrn.i16	d7, q2, #3
	vsli.16	q2, q2, #5
	vrshr.u16	q8, q0, #8
	vrshr.u16	q9, q1, #8
	vrshr.u16	q10, q6, #8
	vrshr.u16	q11, q7, #8
	vraddhn.i16	d0, q0, q8
	vraddhn.i16	d1, q1, q9
	vraddhn.i16	d2, q6, q10
	vraddhn.i16	d3, q7, q11
	vsri.8	d6, d6, #5
	vsri.8	d7, d7, #6
	vmvn	d3, d3
	vshrn.i16	d30, q2, #2
	vmull.u8	q8, d3, d6
	vmull.u8	q9, d3, d7
	vmull.u8	q10, d3, d30
	vrshr.u16	q13, q8, #8
	vrshr.u16	q11, q9, #8
	vrshr.u16	q15, q10, #8
	vraddhn.i16	d16, q8, q13
	vraddhn.i16	d27, q9, q11
	vraddhn.i16	d26, q10, q15
	vqadd.u8	d16, d2, d16
	vqadd.u8	q9, q0, q13
	vshll.i8	q14, d16, #8
	vshll.i8	q8, d19, #8
	vshll.i8	q9, d18, #8
	vsri.16	q14, q8, #5
	vsri.16	q14, q9, #11
	tst	r0, #4
	beq	22f
	vst1.16	{d29}, [r2]!
22:	tst	r0, #2
	beq	23f
	vst1.16	{d28[2]}, [r2]!
	vst1.16	{d28[3]}, [r2]!
23:	tst	r0, #1
	beq	18f
	vst1.16	{d28[1]}, [r2]!
18:	mov	r0, r4
	add	r2, r2, r3, lsl #1
	add	r7, r7, r8
	sub	r2, r2, r0, lsl #1
	sub	r7, r7, r0
	subs	r1, r1, #1
	mov	r6, r2
	bge	1b
0:	vldmia	sp!, {d8-d15}
	pop	{r4, r5, r6, r7, r8, r9, sl, fp, ip, pc}

.global _pixman_composite_over_n_0565_asm_neon
_pixman_composite_over_n_0565_asm_neon:
	push	{r4, r5, r6, r7, r8, r9, sl, fp, ip, lr}
	mov	sl, #0
	mov	r6, r2
	mov	fp, r4
	mov	ip, r6
	mov	lr, r7
	lsl	r9, r1, #4
	sub	r9, r9, #11
	add	r8, sp, #40
	vld1.32	{d3[0]}, [r8]
	vdup.8	d0, d3[0]
	vdup.8	d1, d3[1]
	vdup.8	d2, d3[2]
	vdup.8	d3, d3[3]
	vmvn	d3, d3
	subs	r1, r1, #1
	mov	r7, r0
	blt	0f
	cmp	r0, #16
	blt	1f
16:	tst	r6, #15
	beq	2f
	tst	r6, #2
	beq	3f
	vld1.16	{d4[1]}, [r6]!
	add	sl, sl, #1
	sub	r0, r0, #1
3:	tst	r6, #4
	beq	4f
	vld1.16	{d4[2]}, [r6]!
	vld1.16	{d4[3]}, [r6]!
	add	sl, sl, #2
	sub	r0, r0, #2
4:	tst	r6, #8
	beq	5f
	vld1.16	{d5}, [r6, :64]!
	add	sl, sl, #4
	sub	r0, r0, #4
5:	vshrn.i16	d6, q2, #8
	vshrn.i16	d7, q2, #3
	vsli.16	q2, q2, #5
	vsri.8	d6, d6, #5
	vsri.8	d7, d7, #6
	vshrn.i16	d30, q2, #2
	vmull.u8	q10, d3, d6
	vmull.u8	q11, d3, d7
	vmull.u8	q12, d3, d30
	vrshr.u16	q13, q10, #8
	vrshr.u16	q3, q11, #8
	vrshr.u16	q15, q12, #8
	vraddhn.i16	d20, q10, q13
	vraddhn.i16	d23, q11, q3
	vraddhn.i16	d22, q12, q15
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r7
	pld	[ip, sl, lsl #1]
	subge	sl, sl, r7
	subsge	r9, r9, #16
	ldrbge	r8, [ip, r3, lsl #1]!
	vqadd.u8	d16, d2, d20
	vqadd.u8	q9, q0, q11
	vshll.i8	q14, d16, #8
	vshll.i8	q8, d19, #8
	vshll.i8	q9, d18, #8
	vsri.16	q14, q8, #5
	vsri.16	q14, q9, #11
	tst	r2, #2
	beq	6f
	vst1.16	{d28[1]}, [r2]!
6:	tst	r2, #4
	beq	7f
	vst1.16	{d28[2]}, [r2]!
	vst1.16	{d28[3]}, [r2]!
7:	tst	r2, #8
	beq	2f
	vst1.16	{d29}, [r2, :64]!
2:	vld1.16	{d4-d5}, [r6, :128]!
	add	sl, sl, #8
	vshrn.i16	d6, q2, #8
	vshrn.i16	d7, q2, #3
	vsli.16	q2, q2, #5
	vsri.8	d6, d6, #5
	vsri.8	d7, d7, #6
	vshrn.i16	d30, q2, #2
	vmull.u8	q10, d3, d6
	vmull.u8	q11, d3, d7
	vmull.u8	q12, d3, d30
	vrshr.u16	q13, q10, #8
	vrshr.u16	q3, q11, #8
	vrshr.u16	q15, q12, #8
	vraddhn.i16	d20, q10, q13
	vraddhn.i16	d23, q11, q3
	vraddhn.i16	d22, q12, q15
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r7
	pld	[ip, sl, lsl #1]
	subge	sl, sl, r7
	subsge	r9, r9, #16
	ldrbge	r8, [ip, r3, lsl #1]!
	subs	r0, r0, #16
	blt	8f
9:	vqadd.u8	d16, d2, d20
	vqadd.u8	q9, q0, q11
	vshll.i8	q14, d16, #8
	vshll.i8	q8, d19, #8
	vshll.i8	q9, d18, #8
	vsri.16	q14, q8, #5
	vsri.16	q14, q9, #11
	vld1.16	{d4-d5}, [r6, :128]!
	vst1.16	{d28-d29}, [r2, :128]!
	vshrn.i16	d6, q2, #8
	vshrn.i16	d7, q2, #3
	vsli.16	q2, q2, #5
	vsri.8	d6, d6, #5
	vsri.8	d7, d7, #6
	vshrn.i16	d30, q2, #2
	vmull.u8	q10, d3, d6
	vmull.u8	q11, d3, d7
	vmull.u8	q12, d3, d30
	vrshr.u16	q13, q10, #8
	vrshr.u16	q3, q11, #8
	vrshr.u16	q15, q12, #8
	vraddhn.i16	d20, q10, q13
	vraddhn.i16	d23, q11, q3
	vraddhn.i16	d22, q12, q15
	add	sl, sl, #8
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r7
	pld	[ip, sl, lsl #1]
	subge	sl, sl, r7
	subsge	r9, r9, #16
	ldrbge	r8, [ip, r3, lsl #1]!
	subs	r0, r0, #8
	bge	9b
8:	vqadd.u8	d16, d2, d20
	vqadd.u8	q9, q0, q11
	vshll.i8	q14, d16, #8
	vshll.i8	q8, d19, #8
	vshll.i8	q9, d18, #8
	vsri.16	q14, q8, #5
	vsri.16	q14, q9, #11
	vst1.16	{d28-d29}, [r2, :128]!
	tst	r0, #7
	beq	10f
	tst	r0, #4
	beq	11f
	vld1.16	{d5}, [r6, :64]!
	add	sl, sl, #4
11:	tst	r0, #2
	beq	12f
	vld1.16	{d4[2]}, [r6]!
	vld1.16	{d4[3]}, [r6]!
	add	sl, sl, #2
12:	tst	r0, #1
	beq	13f
	vld1.16	{d4[1]}, [r6]!
	add	sl, sl, #1
13:	vshrn.i16	d6, q2, #8
	vshrn.i16	d7, q2, #3
	vsli.16	q2, q2, #5
	vsri.8	d6, d6, #5
	vsri.8	d7, d7, #6
	vshrn.i16	d30, q2, #2
	vmull.u8	q10, d3, d6
	vmull.u8	q11, d3, d7
	vmull.u8	q12, d3, d30
	vrshr.u16	q13, q10, #8
	vrshr.u16	q3, q11, #8
	vrshr.u16	q15, q12, #8
	vraddhn.i16	d20, q10, q13
	vraddhn.i16	d23, q11, q3
	vraddhn.i16	d22, q12, q15
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r7
	pld	[ip, sl, lsl #1]
	subge	sl, sl, r7
	subsge	r9, r9, #16
	ldrbge	r8, [ip, r3, lsl #1]!
	vqadd.u8	d16, d2, d20
	vqadd.u8	q9, q0, q11
	vshll.i8	q14, d16, #8
	vshll.i8	q8, d19, #8
	vshll.i8	q9, d18, #8
	vsri.16	q14, q8, #5
	vsri.16	q14, q9, #11
	tst	r0, #4
	beq	14f
	vst1.16	{d29}, [r2, :64]!
14:	tst	r0, #2
	beq	15f
	vst1.16	{d28[2]}, [r2]!
	vst1.16	{d28[3]}, [r2]!
15:	tst	r0, #1
	beq	10f
	vst1.16	{d28[1]}, [r2]!
10:	mov	r0, r7
	add	r2, r2, r3, lsl #1
	sub	r2, r2, r0, lsl #1
	subs	r1, r1, #1
	mov	r6, r2
	bge	16b
	pop	{r4, r5, r6, r7, r8, r9, sl, fp, ip, pc}
1:	tst	r0, #8
	beq	17f
	vld1.16	{d4-d5}, [r6]!
	vshrn.i16	d6, q2, #8
	vshrn.i16	d7, q2, #3
	vsli.16	q2, q2, #5
	vsri.8	d6, d6, #5
	vsri.8	d7, d7, #6
	vshrn.i16	d30, q2, #2
	vmull.u8	q10, d3, d6
	vmull.u8	q11, d3, d7
	vmull.u8	q12, d3, d30
	vrshr.u16	q13, q10, #8
	vrshr.u16	q3, q11, #8
	vrshr.u16	q15, q12, #8
	vraddhn.i16	d20, q10, q13
	vraddhn.i16	d23, q11, q3
	vraddhn.i16	d22, q12, q15
	vqadd.u8	d16, d2, d20
	vqadd.u8	q9, q0, q11
	vshll.i8	q14, d16, #8
	vshll.i8	q8, d19, #8
	vshll.i8	q9, d18, #8
	vsri.16	q14, q8, #5
	vsri.16	q14, q9, #11
	vst1.16	{d28-d29}, [r2]!
17:	tst	r0, #7
	beq	18f
	tst	r0, #4
	beq	19f
	vld1.16	{d5}, [r6]!
19:	tst	r0, #2
	beq	20f
	vld1.16	{d4[2]}, [r6]!
	vld1.16	{d4[3]}, [r6]!
20:	tst	r0, #1
	beq	21f
	vld1.16	{d4[1]}, [r6]!
21:	vshrn.i16	d6, q2, #8
	vshrn.i16	d7, q2, #3
	vsli.16	q2, q2, #5
	vsri.8	d6, d6, #5
	vsri.8	d7, d7, #6
	vshrn.i16	d30, q2, #2
	vmull.u8	q10, d3, d6
	vmull.u8	q11, d3, d7
	vmull.u8	q12, d3, d30
	vrshr.u16	q13, q10, #8
	vrshr.u16	q3, q11, #8
	vrshr.u16	q15, q12, #8
	vraddhn.i16	d20, q10, q13
	vraddhn.i16	d23, q11, q3
	vraddhn.i16	d22, q12, q15
	vqadd.u8	d16, d2, d20
	vqadd.u8	q9, q0, q11
	vshll.i8	q14, d16, #8
	vshll.i8	q8, d19, #8
	vshll.i8	q9, d18, #8
	vsri.16	q14, q8, #5
	vsri.16	q14, q9, #11
	tst	r0, #4
	beq	22f
	vst1.16	{d29}, [r2]!
22:	tst	r0, #2
	beq	23f
	vst1.16	{d28[2]}, [r2]!
	vst1.16	{d28[3]}, [r2]!
23:	tst	r0, #1
	beq	18f
	vst1.16	{d28[1]}, [r2]!
18:	mov	r0, r7
	add	r2, r2, r3, lsl #1
	sub	r2, r2, r0, lsl #1
	subs	r1, r1, #1
	mov	r6, r2
	bge	1b
0:	pop	{r4, r5, r6, r7, r8, r9, sl, fp, ip, pc}

/* pixman_composite_over_8888_n_8888_asm_armv6 has an external reference - skipped */

.global _pixman_composite_add_8_8_asm_armv6
_pixman_composite_add_8_8_asm_armv6:
	push	{r4, r5, r6, r7, r8, r9, sl, fp}
	mov	sl, r1
	sub	sp, sp, #4
	subs	sl, sl, #1
	mov	fp, r0
	mov	r8, r2
	str	r3, [sp]
	ldr	r7, [sp, #36]
	bcc	0f
6:	cmp	fp, #0
	beq	1f
	orr	r3, r8, r7
	tst	r3, #3
	beq	2f
	mov	r1, r8
	mov	r0, r7
	mov	ip, fp
	b	3f
5:	tst	r3, #3
	beq	4f
3:	ldrb	r2, [r0], #1
	subs	ip, ip, #1
	ldrb	r3, [r1]
	uqadd8	r3, r2, r3
	strb	r3, [r1], #1
	orr	r3, r1, r0
	bne	5b
1:	ldr	r3, [sp]
	add	r8, r8, r3
	ldr	r3, [sp, #40]
	add	r7, r7, r3
10:	subs	sl, sl, #1
	bcs	6b
0:	add	sp, sp, #4
	pop	{r4, r5, r6, r7, r8, r9, sl, fp}
	bx	lr
2:	mov	ip, fp
	mov	r1, r8
	mov	r0, r7
4:	cmp	ip, #3
	subgt	r6, ip, #4
	movgt	r9, ip
	lsrgt	r5, r6, #2
	addgt	r3, r5, #1
	movgt	ip, #0
	lslgt	r4, r3, #2
	ble	7f
8:	ldr	r3, [r0, ip]
	ldr	r2, [r1, ip]
	uqadd8	r3, r3, r2
	str	r3, [r1, ip]
	add	ip, ip, #4
	cmp	ip, r4
	bne	8b
	sub	r3, r9, #4
	bic	r3, r3, #3
	add	r3, r3, #4
	subs	ip, r6, r5, lsl #2
	add	r1, r1, r3
	add	r0, r0, r3
	beq	1b
7:	mov	r4, #0
9:	ldrb	r3, [r1, r4]
	ldrb	r2, [r0, r4]
	uqadd8	r3, r2, r3
	strb	r3, [r1, r4]
	add	r4, r4, #1
	cmp	r4, ip
	bne	9b
	ldr	r3, [sp]
	add	r8, r8, r3
	ldr	r3, [sp, #40]
	add	r7, r7, r3
	b	10b

.global _pixman_composite_src_0888_0888_asm_neon
_pixman_composite_src_0888_0888_asm_neon:
	push	{r4, r5, r6, r7, r8, r9, sl, fp, ip, lr}
	ldr	r4, [sp, #40]
	ldr	r5, [sp, #44]
	mov	r6, r2
	sub	r5, r5, r0
	sub	r5, r5, r0, lsl #1
	sub	r3, r3, r0
	sub	r3, r3, r0, lsl #1
	subs	r1, r1, #1
	mov	sl, r0
	blt	0f
	cmp	r0, #16
	blt	1f
10:	vld3.8	{d0-d2}, [r4]!
	pld	[r4, #192]
	subs	r0, r0, #16
	blt	2f
3:	vst3.8	{d0-d2}, [r2]!
	vld3.8	{d0-d2}, [r4]!
	pld	[r4, #192]
	subs	r0, r0, #8
	bge	3b
2:	vst3.8	{d0-d2}, [r2]!
	tst	r0, #7
	beq	4f
	tst	r0, #4
	beq	5f
	vld3.8	{d0[4],d1[4],d2[4]}, [r4]!
	vld3.8	{d0[5],d1[5],d2[5]}, [r4]!
	vld3.8	{d0[6],d1[6],d2[6]}, [r4]!
	vld3.8	{d0[7],d1[7],d2[7]}, [r4]!
5:	tst	r0, #2
	beq	6f
	vld3.8	{d0[2],d1[2],d2[2]}, [r4]!
	vld3.8	{d0[3],d1[3],d2[3]}, [r4]!
6:	tst	r0, #1
	beq	7f
	vld3.8	{d0[1],d1[1],d2[1]}, [r4]!
7:	pld	[r4, #192]
	tst	r0, #4
	beq	8f
	vst3.8	{d0[4],d1[4],d2[4]}, [r2]!
	vst3.8	{d0[5],d1[5],d2[5]}, [r2]!
	vst3.8	{d0[6],d1[6],d2[6]}, [r2]!
	vst3.8	{d0[7],d1[7],d2[7]}, [r2]!
8:	tst	r0, #2
	beq	9f
	vst3.8	{d0[2],d1[2],d2[2]}, [r2]!
	vst3.8	{d0[3],d1[3],d2[3]}, [r2]!
9:	tst	r0, #1
	beq	4f
	vst3.8	{d0[1],d1[1],d2[1]}, [r2]!
4:	mov	r0, sl
	add	r2, r2, r3
	add	r4, r4, r5
	subs	r1, r1, #1
	mov	r6, r2
	bge	10b
	pop	{r4, r5, r6, r7, r8, r9, sl, fp, ip, pc}
1:	tst	r0, #8
	beq	11f
	vld3.8	{d0-d2}, [r4]!
	vst3.8	{d0-d2}, [r2]!
11:	tst	r0, #7
	beq	12f
	tst	r0, #4
	beq	13f
	vld3.8	{d0[4],d1[4],d2[4]}, [r4]!
	vld3.8	{d0[5],d1[5],d2[5]}, [r4]!
	vld3.8	{d0[6],d1[6],d2[6]}, [r4]!
	vld3.8	{d0[7],d1[7],d2[7]}, [r4]!
13:	tst	r0, #2
	beq	14f
	vld3.8	{d0[2],d1[2],d2[2]}, [r4]!
	vld3.8	{d0[3],d1[3],d2[3]}, [r4]!
14:	tst	r0, #1
	beq	15f
	vld3.8	{d0[1],d1[1],d2[1]}, [r4]!
15:	tst	r0, #4
	beq	16f
	vst3.8	{d0[4],d1[4],d2[4]}, [r2]!
	vst3.8	{d0[5],d1[5],d2[5]}, [r2]!
	vst3.8	{d0[6],d1[6],d2[6]}, [r2]!
	vst3.8	{d0[7],d1[7],d2[7]}, [r2]!
16:	tst	r0, #2
	beq	17f
	vst3.8	{d0[2],d1[2],d2[2]}, [r2]!
	vst3.8	{d0[3],d1[3],d2[3]}, [r2]!
17:	tst	r0, #1
	beq	12f
	vst3.8	{d0[1],d1[1],d2[1]}, [r2]!
12:	mov	r0, sl
	add	r2, r2, r3
	add	r4, r4, r5
	subs	r1, r1, #1
	mov	r6, r2
	bge	1b
0:	pop	{r4, r5, r6, r7, r8, r9, sl, fp, ip, pc}

.global _pixman_composite_over_8888_n_8888_asm_neon
_pixman_composite_over_8888_n_8888_asm_neon:
	push	{r4, r5, r6, r7, r8, r9, sl, fp, ip, lr}
	ldr	r4, [sp, #40]
	mov	sl, #0
	ldr	r5, [sp, #44]
	mov	r6, r2
	mov	fp, r4
	mov	ip, r6
	mov	lr, r7
	lsl	r9, r1, #4
	sub	r9, r9, #11
	add	r8, sp, #48
	vstmdb	sp!, {d8-d15}
	vld1.32	{d15[0]}, [r8]
	vdup.8	d15, d15[3]
	subs	r1, r1, #1
	mov	r7, r0
	blt	0f
	cmp	r0, #16
	blt	1f
15:	tst	r6, #15
	beq	2f
	tst	r6, #4
	beq	3f
	vld1.32	{d0[1]}, [r4]!
	vld1.32	{d4[1]}, [r6]!
	add	sl, sl, #1
	sub	r0, r0, #1
3:	tst	r6, #8
	beq	4f
	vld1.32	{d1}, [r4]!
	vld1.32	{d5}, [r6, :64]!
	add	sl, sl, #2
	sub	r0, r0, #2
4:	vld1.32	{d2-d3}, [r4]!
	vld1.32	{d6-d7}, [r6, :128]!
	add	sl, sl, #4
	sub	r0, r0, #4
	vuzp.8	d0, d1
	vuzp.8	d2, d3
	vuzp.8	d1, d3
	vuzp.8	d0, d2
	vuzp.8	d4, d5
	vuzp.8	d6, d7
	vuzp.8	d5, d7
	vuzp.8	d4, d6
	vmull.u8	q8, d15, d3
	vmull.u8	q6, d15, d2
	vmull.u8	q5, d15, d1
	vmull.u8	q4, d15, d0
	vrshr.u16	q13, q8, #8
	vrshr.u16	q12, q6, #8
	vrshr.u16	q11, q5, #8
	vrshr.u16	q10, q4, #8
	vraddhn.i16	d3, q8, q13
	vraddhn.i16	d2, q6, q12
	vraddhn.i16	d1, q5, q11
	vraddhn.i16	d0, q4, q10
	vmvn	d24, d3
	vmull.u8	q8, d24, d4
	vmull.u8	q9, d24, d5
	vmull.u8	q10, d24, d6
	vmull.u8	q11, d24, d7
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r7
	pld	[fp, sl, lsl #2]
	pld	[ip, sl, lsl #2]
	subge	sl, sl, r7
	subsge	r9, r9, #16
	ldrbge	r8, [fp, r5, lsl #2]!
	ldrbge	r8, [ip, r3, lsl #2]!
	vrshr.u16	q14, q8, #8
	vrshr.u16	q15, q9, #8
	vrshr.u16	q12, q10, #8
	vrshr.u16	q13, q11, #8
	vraddhn.i16	d28, q14, q8
	vraddhn.i16	d29, q15, q9
	vraddhn.i16	d30, q12, q10
	vraddhn.i16	d31, q13, q11
	vqadd.u8	q14, q0, q14
	vqadd.u8	q15, q1, q15
	vzip.8	d28, d30
	vzip.8	d29, d31
	vzip.8	d30, d31
	vzip.8	d28, d29
	tst	r2, #4
	beq	5f
	vst1.32	{d28[1]}, [r2]!
5:	tst	r2, #8
	beq	6f
	vst1.32	{d29}, [r2, :64]!
6:	vst1.32	{d30-d31}, [r2, :128]!
2:	vld4.8	{d4-d7}, [r6, :128]!
	vld4.8	{d0-d3}, [r4]!
	add	sl, sl, #8
	vmull.u8	q8, d15, d3
	vmull.u8	q6, d15, d2
	vmull.u8	q5, d15, d1
	vmull.u8	q4, d15, d0
	vrshr.u16	q13, q8, #8
	vrshr.u16	q12, q6, #8
	vrshr.u16	q11, q5, #8
	vrshr.u16	q10, q4, #8
	vraddhn.i16	d3, q8, q13
	vraddhn.i16	d2, q6, q12
	vraddhn.i16	d1, q5, q11
	vraddhn.i16	d0, q4, q10
	vmvn	d24, d3
	vmull.u8	q8, d24, d4
	vmull.u8	q9, d24, d5
	vmull.u8	q10, d24, d6
	vmull.u8	q11, d24, d7
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r7
	pld	[fp, sl, lsl #2]
	pld	[ip, sl, lsl #2]
	subge	sl, sl, r7
	subsge	r9, r9, #16
	ldrbge	r8, [fp, r5, lsl #2]!
	ldrbge	r8, [ip, r3, lsl #2]!
	subs	r0, r0, #16
	blt	7f
8:	vld4.8	{d4-d7}, [r6, :128]!
	vrshr.u16	q14, q8, #8
	vrshr.u16	q15, q9, #8
	vrshr.u16	q12, q10, #8
	vrshr.u16	q13, q11, #8
	vraddhn.i16	d28, q14, q8
	vraddhn.i16	d29, q15, q9
	vraddhn.i16	d30, q12, q10
	vraddhn.i16	d31, q13, q11
	vqadd.u8	q14, q0, q14
	vqadd.u8	q15, q1, q15
	vld4.8	{d0-d3}, [r4]!
	add	sl, sl, #8
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r7
	pld	[fp, sl, lsl #2]
	pld	[ip, sl, lsl #2]
	subge	sl, sl, r7
	subsge	r9, r9, #16
	ldrbge	r8, [fp, r5, lsl #2]!
	ldrbge	r8, [ip, r3, lsl #2]!
	vmull.u8	q8, d15, d3
	vmull.u8	q6, d15, d2
	vmull.u8	q5, d15, d1
	vmull.u8	q4, d15, d0
	vrshr.u16	q13, q8, #8
	vrshr.u16	q12, q6, #8
	vrshr.u16	q11, q5, #8
	vrshr.u16	q10, q4, #8
	vraddhn.i16	d3, q8, q13
	vraddhn.i16	d2, q6, q12
	vraddhn.i16	d1, q5, q11
	vraddhn.i16	d0, q4, q10
	vmvn	d24, d3
	vmull.u8	q8, d24, d4
	vmull.u8	q9, d24, d5
	vmull.u8	q10, d24, d6
	vmull.u8	q11, d24, d7
	vst4.8	{d28-d31}, [r2, :128]!
	subs	r0, r0, #8
	bge	8b
7:	vrshr.u16	q14, q8, #8
	vrshr.u16	q15, q9, #8
	vrshr.u16	q12, q10, #8
	vrshr.u16	q13, q11, #8
	vraddhn.i16	d28, q14, q8
	vraddhn.i16	d29, q15, q9
	vraddhn.i16	d30, q12, q10
	vraddhn.i16	d31, q13, q11
	vqadd.u8	q14, q0, q14
	vqadd.u8	q15, q1, q15
	vst4.8	{d28-d31}, [r2, :128]!
	tst	r0, #7
	beq	9f
	tst	r0, #4
	beq	10f
	vld1.32	{d2-d3}, [r4]!
	vld1.32	{d6-d7}, [r6, :128]!
	add	sl, sl, #4
10:	tst	r0, #2
	beq	11f
	vld1.32	{d1}, [r4]!
	vld1.32	{d5}, [r6, :64]!
	add	sl, sl, #2
11:	tst	r0, #1
	beq	12f
	vld1.32	{d0[1]}, [r4]!
	vld1.32	{d4[1]}, [r6]!
	add	sl, sl, #1
12:	vuzp.8	d0, d1
	vuzp.8	d2, d3
	vuzp.8	d1, d3
	vuzp.8	d0, d2
	vuzp.8	d4, d5
	vuzp.8	d6, d7
	vuzp.8	d5, d7
	vuzp.8	d4, d6
	vmull.u8	q8, d15, d3
	vmull.u8	q6, d15, d2
	vmull.u8	q5, d15, d1
	vmull.u8	q4, d15, d0
	vrshr.u16	q13, q8, #8
	vrshr.u16	q12, q6, #8
	vrshr.u16	q11, q5, #8
	vrshr.u16	q10, q4, #8
	vraddhn.i16	d3, q8, q13
	vraddhn.i16	d2, q6, q12
	vraddhn.i16	d1, q5, q11
	vraddhn.i16	d0, q4, q10
	vmvn	d24, d3
	vmull.u8	q8, d24, d4
	vmull.u8	q9, d24, d5
	vmull.u8	q10, d24, d6
	vmull.u8	q11, d24, d7
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r7
	pld	[fp, sl, lsl #2]
	pld	[ip, sl, lsl #2]
	subge	sl, sl, r7
	subsge	r9, r9, #16
	ldrbge	r8, [fp, r5, lsl #2]!
	ldrbge	r8, [ip, r3, lsl #2]!
	vrshr.u16	q14, q8, #8
	vrshr.u16	q15, q9, #8
	vrshr.u16	q12, q10, #8
	vrshr.u16	q13, q11, #8
	vraddhn.i16	d28, q14, q8
	vraddhn.i16	d29, q15, q9
	vraddhn.i16	d30, q12, q10
	vraddhn.i16	d31, q13, q11
	vqadd.u8	q14, q0, q14
	vqadd.u8	q15, q1, q15
	vzip.8	d28, d30
	vzip.8	d29, d31
	vzip.8	d30, d31
	vzip.8	d28, d29
	tst	r0, #4
	beq	13f
	vst1.32	{d30-d31}, [r2, :128]!
13:	tst	r0, #2
	beq	14f
	vst1.32	{d29}, [r2, :64]!
14:	tst	r0, #1
	beq	9f
	vst1.32	{d28[1]}, [r2]!
9:	mov	r0, r7
	add	r2, r2, r3, lsl #2
	add	r4, r4, r5, lsl #2
	sub	r2, r2, r0, lsl #2
	sub	r4, r4, r0, lsl #2
	subs	r1, r1, #1
	mov	r6, r2
	bge	15b
	vldmia	sp!, {d8-d15}
	pop	{r4, r5, r6, r7, r8, r9, sl, fp, ip, pc}
1:	tst	r0, #8
	beq	16f
	vld4.8	{d4-d7}, [r6]!
	vld4.8	{d0-d3}, [r4]!
	vmull.u8	q8, d15, d3
	vmull.u8	q6, d15, d2
	vmull.u8	q5, d15, d1
	vmull.u8	q4, d15, d0
	vrshr.u16	q13, q8, #8
	vrshr.u16	q12, q6, #8
	vrshr.u16	q11, q5, #8
	vrshr.u16	q10, q4, #8
	vraddhn.i16	d3, q8, q13
	vraddhn.i16	d2, q6, q12
	vraddhn.i16	d1, q5, q11
	vraddhn.i16	d0, q4, q10
	vmvn	d24, d3
	vmull.u8	q8, d24, d4
	vmull.u8	q9, d24, d5
	vmull.u8	q10, d24, d6
	vmull.u8	q11, d24, d7
	vrshr.u16	q14, q8, #8
	vrshr.u16	q15, q9, #8
	vrshr.u16	q12, q10, #8
	vrshr.u16	q13, q11, #8
	vraddhn.i16	d28, q14, q8
	vraddhn.i16	d29, q15, q9
	vraddhn.i16	d30, q12, q10
	vraddhn.i16	d31, q13, q11
	vqadd.u8	q14, q0, q14
	vqadd.u8	q15, q1, q15
	vst4.8	{d28-d31}, [r2]!
16:	tst	r0, #7
	beq	17f
	tst	r0, #4
	beq	18f
	vld1.32	{d2-d3}, [r4]!
	vld1.32	{d6-d7}, [r6]!
18:	tst	r0, #2
	beq	19f
	vld1.32	{d1}, [r4]!
	vld1.32	{d5}, [r6]!
19:	tst	r0, #1
	beq	20f
	vld1.32	{d0[1]}, [r4]!
	vld1.32	{d4[1]}, [r6]!
20:	vuzp.8	d0, d1
	vuzp.8	d2, d3
	vuzp.8	d1, d3
	vuzp.8	d0, d2
	vuzp.8	d4, d5
	vuzp.8	d6, d7
	vuzp.8	d5, d7
	vuzp.8	d4, d6
	vmull.u8	q8, d15, d3
	vmull.u8	q6, d15, d2
	vmull.u8	q5, d15, d1
	vmull.u8	q4, d15, d0
	vrshr.u16	q13, q8, #8
	vrshr.u16	q12, q6, #8
	vrshr.u16	q11, q5, #8
	vrshr.u16	q10, q4, #8
	vraddhn.i16	d3, q8, q13
	vraddhn.i16	d2, q6, q12
	vraddhn.i16	d1, q5, q11
	vraddhn.i16	d0, q4, q10
	vmvn	d24, d3
	vmull.u8	q8, d24, d4
	vmull.u8	q9, d24, d5
	vmull.u8	q10, d24, d6
	vmull.u8	q11, d24, d7
	vrshr.u16	q14, q8, #8
	vrshr.u16	q15, q9, #8
	vrshr.u16	q12, q10, #8
	vrshr.u16	q13, q11, #8
	vraddhn.i16	d28, q14, q8
	vraddhn.i16	d29, q15, q9
	vraddhn.i16	d30, q12, q10
	vraddhn.i16	d31, q13, q11
	vqadd.u8	q14, q0, q14
	vqadd.u8	q15, q1, q15
	vzip.8	d28, d30
	vzip.8	d29, d31
	vzip.8	d30, d31
	vzip.8	d28, d29
	tst	r0, #4
	beq	21f
	vst1.32	{d30-d31}, [r2]!
21:	tst	r0, #2
	beq	22f
	vst1.32	{d29}, [r2]!
22:	tst	r0, #1
	beq	17f
	vst1.32	{d28[1]}, [r2]!
17:	mov	r0, r7
	add	r2, r2, r3, lsl #2
	add	r4, r4, r5, lsl #2
	sub	r2, r2, r0, lsl #2
	sub	r4, r4, r0, lsl #2
	subs	r1, r1, #1
	mov	r6, r2
	bge	1b
0:	vldmia	sp!, {d8-d15}
	pop	{r4, r5, r6, r7, r8, r9, sl, fp, ip, pc}

.global _pixman_composite_add_n_8_8888_asm_neon
_pixman_composite_add_n_8_8888_asm_neon:
	push	{r4, r5, r6, r7, r8, r9, sl, fp, ip, lr}
	ldr	r7, [sp, #48]
	mov	sl, #0
	ldr	r8, [sp, #52]
	mov	r6, r2
	mov	fp, r4
	mov	ip, r6
	mov	lr, r7
	lsl	r9, r1, #4
	sub	r9, r9, #11
	add	r5, sp, #40
	vld1.32	{d3[0]}, [r5]
	vdup.8	d0, d3[0]
	vdup.8	d1, d3[1]
	vdup.8	d2, d3[2]
	vdup.8	d3, d3[3]
	subs	r1, r1, #1
	mov	r4, r0
	blt	0f
	cmp	r0, #16
	blt	1f
15:	tst	r6, #15
	beq	2f
	tst	r6, #4
	beq	3f
	vld1.8	{d27[1]}, [r7]!
	vld1.32	{d4[1]}, [r6]!
	add	sl, sl, #1
	sub	r0, r0, #1
3:	tst	r6, #8
	beq	4f
	vld1.8	{d27[2]}, [r7]!
	vld1.8	{d27[3]}, [r7]!
	vld1.32	{d5}, [r6, :64]!
	add	sl, sl, #2
	sub	r0, r0, #2
4:	vld1.8	{d27[4]}, [r7]!
	vld1.8	{d27[5]}, [r7]!
	vld1.8	{d27[6]}, [r7]!
	vld1.8	{d27[7]}, [r7]!
	vld1.32	{d6-d7}, [r6, :128]!
	add	sl, sl, #4
	sub	r0, r0, #4
	vuzp.8	d4, d5
	vuzp.8	d6, d7
	vuzp.8	d5, d7
	vuzp.8	d4, d6
	vmull.u8	q8, d27, d0
	vmull.u8	q9, d27, d1
	vmull.u8	q10, d27, d2
	vmull.u8	q11, d27, d3
	vrsra.u16	q8, q8, #8
	vrsra.u16	q9, q9, #8
	vrsra.u16	q10, q10, #8
	vrsra.u16	q11, q11, #8
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r4
	pld	[ip, sl, lsl #2]
	pld	[lr, sl]
	subge	sl, sl, r4
	subsge	r9, r9, #16
	ldrbge	r5, [ip, r3, lsl #2]!
	ldrbge	r5, [lr, r8]!
	vrshrn.i16	d28, q8, #8
	vrshrn.i16	d29, q9, #8
	vrshrn.i16	d30, q10, #8
	vrshrn.i16	d31, q11, #8
	vqadd.u8	q14, q2, q14
	vqadd.u8	q15, q3, q15
	vzip.8	d28, d30
	vzip.8	d29, d31
	vzip.8	d30, d31
	vzip.8	d28, d29
	tst	r2, #4
	beq	5f
	vst1.32	{d28[1]}, [r2]!
5:	tst	r2, #8
	beq	6f
	vst1.32	{d29}, [r2, :64]!
6:	vst1.32	{d30-d31}, [r2, :128]!
2:	vld4.8	{d4-d7}, [r6, :128]!
	vld1.8	{d27}, [r7]!
	add	sl, sl, #8
	vmull.u8	q8, d27, d0
	vmull.u8	q9, d27, d1
	vmull.u8	q10, d27, d2
	vmull.u8	q11, d27, d3
	vrsra.u16	q8, q8, #8
	vrsra.u16	q9, q9, #8
	vrsra.u16	q10, q10, #8
	vrsra.u16	q11, q11, #8
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r4
	pld	[ip, sl, lsl #2]
	pld	[lr, sl]
	subge	sl, sl, r4
	subsge	r9, r9, #16
	ldrbge	r5, [ip, r3, lsl #2]!
	ldrbge	r5, [lr, r8]!
	subs	r0, r0, #16
	blt	7f
8:	vrshrn.i16	d28, q8, #8
	vld1.8	{d27}, [r7]!
	vrshrn.i16	d29, q9, #8
	vmull.u8	q8, d27, d0
	vrshrn.i16	d30, q10, #8
	vmull.u8	q9, d27, d1
	vrshrn.i16	d31, q11, #8
	vmull.u8	q10, d27, d2
	vqadd.u8	q14, q2, q14
	vmull.u8	q11, d27, d3
	vqadd.u8	q15, q3, q15
	vrsra.u16	q8, q8, #8
	vld4.8	{d4-d7}, [r6, :128]!
	vrsra.u16	q9, q9, #8
	vst4.8	{d28-d31}, [r2, :128]!
	vrsra.u16	q10, q10, #8
	add	sl, sl, #8
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r4
	pld	[ip, sl, lsl #2]
	pld	[lr, sl]
	subge	sl, sl, r4
	subsge	r9, r9, #16
	ldrbge	r5, [ip, r3, lsl #2]!
	ldrbge	r5, [lr, r8]!
	vrsra.u16	q11, q11, #8
	subs	r0, r0, #8
	bge	8b
7:	vrshrn.i16	d28, q8, #8
	vrshrn.i16	d29, q9, #8
	vrshrn.i16	d30, q10, #8
	vrshrn.i16	d31, q11, #8
	vqadd.u8	q14, q2, q14
	vqadd.u8	q15, q3, q15
	vst4.8	{d28-d31}, [r2, :128]!
	tst	r0, #7
	beq	9f
	tst	r0, #4
	beq	10f
	vld1.8	{d27[4]}, [r7]!
	vld1.8	{d27[5]}, [r7]!
	vld1.8	{d27[6]}, [r7]!
	vld1.8	{d27[7]}, [r7]!
	vld1.32	{d6-d7}, [r6, :128]!
	add	sl, sl, #4
10:	tst	r0, #2
	beq	11f
	vld1.8	{d27[2]}, [r7]!
	vld1.8	{d27[3]}, [r7]!
	vld1.32	{d5}, [r6, :64]!
	add	sl, sl, #2
11:	tst	r0, #1
	beq	12f
	vld1.8	{d27[1]}, [r7]!
	vld1.32	{d4[1]}, [r6]!
	add	sl, sl, #1
12:	vuzp.8	d4, d5
	vuzp.8	d6, d7
	vuzp.8	d5, d7
	vuzp.8	d4, d6
	vmull.u8	q8, d27, d0
	vmull.u8	q9, d27, d1
	vmull.u8	q10, d27, d2
	vmull.u8	q11, d27, d3
	vrsra.u16	q8, q8, #8
	vrsra.u16	q9, q9, #8
	vrsra.u16	q10, q10, #8
	vrsra.u16	q11, q11, #8
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r4
	pld	[ip, sl, lsl #2]
	pld	[lr, sl]
	subge	sl, sl, r4
	subsge	r9, r9, #16
	ldrbge	r5, [ip, r3, lsl #2]!
	ldrbge	r5, [lr, r8]!
	vrshrn.i16	d28, q8, #8
	vrshrn.i16	d29, q9, #8
	vrshrn.i16	d30, q10, #8
	vrshrn.i16	d31, q11, #8
	vqadd.u8	q14, q2, q14
	vqadd.u8	q15, q3, q15
	vzip.8	d28, d30
	vzip.8	d29, d31
	vzip.8	d30, d31
	vzip.8	d28, d29
	tst	r0, #4
	beq	13f
	vst1.32	{d30-d31}, [r2, :128]!
13:	tst	r0, #2
	beq	14f
	vst1.32	{d29}, [r2, :64]!
14:	tst	r0, #1
	beq	9f
	vst1.32	{d28[1]}, [r2]!
9:	mov	r0, r4
	add	r2, r2, r3, lsl #2
	add	r7, r7, r8
	sub	r2, r2, r0, lsl #2
	sub	r7, r7, r0
	subs	r1, r1, #1
	mov	r6, r2
	bge	15b
	pop	{r4, r5, r6, r7, r8, r9, sl, fp, ip, pc}
1:	tst	r0, #8
	beq	16f
	vld4.8	{d4-d7}, [r6]!
	vld1.8	{d27}, [r7]!
	vmull.u8	q8, d27, d0
	vmull.u8	q9, d27, d1
	vmull.u8	q10, d27, d2
	vmull.u8	q11, d27, d3
	vrsra.u16	q8, q8, #8
	vrsra.u16	q9, q9, #8
	vrsra.u16	q10, q10, #8
	vrsra.u16	q11, q11, #8
	vrshrn.i16	d28, q8, #8
	vrshrn.i16	d29, q9, #8
	vrshrn.i16	d30, q10, #8
	vrshrn.i16	d31, q11, #8
	vqadd.u8	q14, q2, q14
	vqadd.u8	q15, q3, q15
	vst4.8	{d28-d31}, [r2]!
16:	tst	r0, #7
	beq	17f
	tst	r0, #4
	beq	18f
	vld1.8	{d27[4]}, [r7]!
	vld1.8	{d27[5]}, [r7]!
	vld1.8	{d27[6]}, [r7]!
	vld1.8	{d27[7]}, [r7]!
	vld1.32	{d6-d7}, [r6]!
18:	tst	r0, #2
	beq	19f
	vld1.8	{d27[2]}, [r7]!
	vld1.8	{d27[3]}, [r7]!
	vld1.32	{d5}, [r6]!
19:	tst	r0, #1
	beq	20f
	vld1.8	{d27[1]}, [r7]!
	vld1.32	{d4[1]}, [r6]!
20:	vuzp.8	d4, d5
	vuzp.8	d6, d7
	vuzp.8	d5, d7
	vuzp.8	d4, d6
	vmull.u8	q8, d27, d0
	vmull.u8	q9, d27, d1
	vmull.u8	q10, d27, d2
	vmull.u8	q11, d27, d3
	vrsra.u16	q8, q8, #8
	vrsra.u16	q9, q9, #8
	vrsra.u16	q10, q10, #8
	vrsra.u16	q11, q11, #8
	vrshrn.i16	d28, q8, #8
	vrshrn.i16	d29, q9, #8
	vrshrn.i16	d30, q10, #8
	vrshrn.i16	d31, q11, #8
	vqadd.u8	q14, q2, q14
	vqadd.u8	q15, q3, q15
	vzip.8	d28, d30
	vzip.8	d29, d31
	vzip.8	d30, d31
	vzip.8	d28, d29
	tst	r0, #4
	beq	21f
	vst1.32	{d30-d31}, [r2]!
21:	tst	r0, #2
	beq	22f
	vst1.32	{d29}, [r2]!
22:	tst	r0, #1
	beq	17f
	vst1.32	{d28[1]}, [r2]!
17:	mov	r0, r4
	add	r2, r2, r3, lsl #2
	add	r7, r7, r8
	sub	r2, r2, r0, lsl #2
	sub	r7, r7, r0
	subs	r1, r1, #1
	mov	r6, r2
	bge	1b
0:	pop	{r4, r5, r6, r7, r8, r9, sl, fp, ip, pc}

.global _pixman_composite_over_8888_8_0565_asm_neon
_pixman_composite_over_8888_8_0565_asm_neon:
	push	{r4, r5, r6, r7, r8, r9, sl, fp, ip, lr}
	ldr	r4, [sp, #40]
	ldr	r7, [sp, #48]
	mov	sl, #0
	ldr	r5, [sp, #44]
	ldr	r8, [sp, #52]
	mov	r6, r2
	mov	fp, r4
	mov	ip, r6
	mov	lr, r7
	lsl	r9, r1, #4
	sub	r9, r9, #11
	vstmdb	sp!, {d8-d15}
	push	{r0, r1}
	subs	r1, r1, #1
	str	r1, [sp, #4]
	blt	0f
	cmp	r0, #16
	blt	1f
16:	tst	r6, #15
	beq	2f
	tst	r6, #2
	beq	3f
	vld1.32	{d8[1]}, [r4]!
	vld1.8	{d24[1]}, [r7]!
	vld1.16	{d4[1]}, [r6]!
	add	sl, sl, #1
	sub	r0, r0, #1
3:	tst	r6, #4
	beq	4f
	vld1.32	{d9}, [r4]!
	vld1.8	{d24[2]}, [r7]!
	vld1.8	{d24[3]}, [r7]!
	vld1.16	{d4[2]}, [r6]!
	vld1.16	{d4[3]}, [r6]!
	add	sl, sl, #2
	sub	r0, r0, #2
4:	tst	r6, #8
	beq	5f
	vld1.32	{d10-d11}, [r4]!
	vld1.8	{d24[4]}, [r7]!
	vld1.8	{d24[5]}, [r7]!
	vld1.8	{d24[6]}, [r7]!
	vld1.8	{d24[7]}, [r7]!
	vld1.16	{d5}, [r6, :64]!
	add	sl, sl, #4
	sub	r0, r0, #4
5:	vuzp.8	d8, d9
	vuzp.8	d10, d11
	vuzp.8	d9, d11
	vuzp.8	d8, d10
	vmull.u8	q0, d24, d8
	vmull.u8	q1, d24, d9
	vmull.u8	q6, d24, d10
	vmull.u8	q7, d24, d11
	vshrn.i16	d6, q2, #8
	vshrn.i16	d7, q2, #3
	vsli.16	q2, q2, #5
	vrshr.u16	q8, q0, #8
	vrshr.u16	q9, q1, #8
	vrshr.u16	q10, q6, #8
	vrshr.u16	q11, q7, #8
	vraddhn.i16	d0, q0, q8
	vraddhn.i16	d1, q1, q9
	vraddhn.i16	d2, q6, q10
	vraddhn.i16	d3, q7, q11
	vsri.8	d6, d6, #5
	vsri.8	d7, d7, #6
	vmvn	d3, d3
	vshrn.i16	d30, q2, #2
	vmull.u8	q8, d3, d6
	vmull.u8	q9, d3, d7
	vmull.u8	q10, d3, d30
	ldr	r1, [sp]
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r1
	pld	[fp, sl, lsl #2]
	pld	[ip, sl, lsl #1]
	pld	[lr, sl]
	subge	sl, sl, r1
	subsge	r9, r9, #16
	ldrbge	r1, [fp, r5, lsl #2]!
	ldrbge	r1, [ip, r3, lsl #1]!
	ldrbge	r1, [lr, r8]!
	vrshr.u16	q13, q8, #8
	vrshr.u16	q11, q9, #8
	vrshr.u16	q15, q10, #8
	vraddhn.i16	d16, q8, q13
	vraddhn.i16	d27, q9, q11
	vraddhn.i16	d26, q10, q15
	vqadd.u8	d16, d2, d16
	vqadd.u8	q9, q0, q13
	vshll.i8	q14, d16, #8
	vshll.i8	q8, d19, #8
	vshll.i8	q9, d18, #8
	vsri.16	q14, q8, #5
	vsri.16	q14, q9, #11
	tst	r2, #2
	beq	6f
	vst1.16	{d28[1]}, [r2]!
6:	tst	r2, #4
	beq	7f
	vst1.16	{d28[2]}, [r2]!
	vst1.16	{d28[3]}, [r2]!
7:	tst	r2, #8
	beq	2f
	vst1.16	{d29}, [r2, :64]!
2:	vld1.16	{d4-d5}, [r6, :128]!
	vld4.8	{d8-d11}, [r4]!
	vld1.8	{d24}, [r7]!
	add	sl, sl, #8
	vmull.u8	q0, d24, d8
	vmull.u8	q1, d24, d9
	vmull.u8	q6, d24, d10
	vmull.u8	q7, d24, d11
	vshrn.i16	d6, q2, #8
	vshrn.i16	d7, q2, #3
	vsli.16	q2, q2, #5
	vrshr.u16	q8, q0, #8
	vrshr.u16	q9, q1, #8
	vrshr.u16	q10, q6, #8
	vrshr.u16	q11, q7, #8
	vraddhn.i16	d0, q0, q8
	vraddhn.i16	d1, q1, q9
	vraddhn.i16	d2, q6, q10
	vraddhn.i16	d3, q7, q11
	vsri.8	d6, d6, #5
	vsri.8	d7, d7, #6
	vmvn	d3, d3
	vshrn.i16	d30, q2, #2
	vmull.u8	q8, d3, d6
	vmull.u8	q9, d3, d7
	vmull.u8	q10, d3, d30
	ldr	r1, [sp]
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r1
	pld	[fp, sl, lsl #2]
	pld	[ip, sl, lsl #1]
	pld	[lr, sl]
	subge	sl, sl, r1
	subsge	r9, r9, #16
	ldrbge	r1, [fp, r5, lsl #2]!
	ldrbge	r1, [ip, r3, lsl #1]!
	ldrbge	r1, [lr, r8]!
	subs	r0, r0, #16
	blt	8f
9:	vld1.16	{d4-d5}, [r6, :128]!
	vshrn.i16	d6, q2, #8
	vld1.8	{d24}, [r7]!
	vshrn.i16	d7, q2, #3
	vld4.8	{d8-d11}, [r4]!
	vmull.u8	q6, d24, d10
	vrshr.u16	q13, q8, #8
	vrshr.u16	q11, q9, #8
	vrshr.u16	q15, q10, #8
	vraddhn.i16	d16, q8, q13
	vraddhn.i16	d27, q9, q11
	vraddhn.i16	d26, q10, q15
	vqadd.u8	d16, d2, d16
	vmull.u8	q1, d24, d9
	vqadd.u8	q9, q0, q13
	vshll.i8	q14, d16, #8
	vmull.u8	q0, d24, d8
	vshll.i8	q8, d19, #8
	vshll.i8	q9, d18, #8
	vsri.16	q14, q8, #5
	vmull.u8	q7, d24, d11
	vsri.16	q14, q9, #11
	ldr	r1, [sp]
	add	sl, sl, #8
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r1
	pld	[fp, sl, lsl #2]
	pld	[ip, sl, lsl #1]
	pld	[lr, sl]
	subge	sl, sl, r1
	subsge	r9, r9, #16
	ldrbge	r1, [fp, r5, lsl #2]!
	ldrbge	r1, [ip, r3, lsl #1]!
	ldrbge	r1, [lr, r8]!
	vsli.16	q2, q2, #5
	vrshr.u16	q8, q0, #8
	vrshr.u16	q9, q1, #8
	vrshr.u16	q10, q6, #8
	vrshr.u16	q11, q7, #8
	vraddhn.i16	d0, q0, q8
	vraddhn.i16	d1, q1, q9
	vraddhn.i16	d2, q6, q10
	vraddhn.i16	d3, q7, q11
	vsri.8	d6, d6, #5
	vsri.8	d7, d7, #6
	vmvn	d3, d3
	vshrn.i16	d30, q2, #2
	vst1.16	{d28-d29}, [r2, :128]!
	vmull.u8	q8, d3, d6
	vmull.u8	q9, d3, d7
	vmull.u8	q10, d3, d30
	subs	r0, r0, #8
	bge	9b
8:	vrshr.u16	q13, q8, #8
	vrshr.u16	q11, q9, #8
	vrshr.u16	q15, q10, #8
	vraddhn.i16	d16, q8, q13
	vraddhn.i16	d27, q9, q11
	vraddhn.i16	d26, q10, q15
	vqadd.u8	d16, d2, d16
	vqadd.u8	q9, q0, q13
	vshll.i8	q14, d16, #8
	vshll.i8	q8, d19, #8
	vshll.i8	q9, d18, #8
	vsri.16	q14, q8, #5
	vsri.16	q14, q9, #11
	vst1.16	{d28-d29}, [r2, :128]!
	tst	r0, #7
	beq	10f
	tst	r0, #4
	beq	11f
	vld1.32	{d10-d11}, [r4]!
	vld1.8	{d24[4]}, [r7]!
	vld1.8	{d24[5]}, [r7]!
	vld1.8	{d24[6]}, [r7]!
	vld1.8	{d24[7]}, [r7]!
	vld1.16	{d5}, [r6, :64]!
	add	sl, sl, #4
11:	tst	r0, #2
	beq	12f
	vld1.32	{d9}, [r4]!
	vld1.8	{d24[2]}, [r7]!
	vld1.8	{d24[3]}, [r7]!
	vld1.16	{d4[2]}, [r6]!
	vld1.16	{d4[3]}, [r6]!
	add	sl, sl, #2
12:	tst	r0, #1
	beq	13f
	vld1.32	{d8[1]}, [r4]!
	vld1.8	{d24[1]}, [r7]!
	vld1.16	{d4[1]}, [r6]!
	add	sl, sl, #1
13:	vuzp.8	d8, d9
	vuzp.8	d10, d11
	vuzp.8	d9, d11
	vuzp.8	d8, d10
	vmull.u8	q0, d24, d8
	vmull.u8	q1, d24, d9
	vmull.u8	q6, d24, d10
	vmull.u8	q7, d24, d11
	vshrn.i16	d6, q2, #8
	vshrn.i16	d7, q2, #3
	vsli.16	q2, q2, #5
	vrshr.u16	q8, q0, #8
	vrshr.u16	q9, q1, #8
	vrshr.u16	q10, q6, #8
	vrshr.u16	q11, q7, #8
	vraddhn.i16	d0, q0, q8
	vraddhn.i16	d1, q1, q9
	vraddhn.i16	d2, q6, q10
	vraddhn.i16	d3, q7, q11
	vsri.8	d6, d6, #5
	vsri.8	d7, d7, #6
	vmvn	d3, d3
	vshrn.i16	d30, q2, #2
	vmull.u8	q8, d3, d6
	vmull.u8	q9, d3, d7
	vmull.u8	q10, d3, d30
	ldr	r1, [sp]
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r1
	pld	[fp, sl, lsl #2]
	pld	[ip, sl, lsl #1]
	pld	[lr, sl]
	subge	sl, sl, r1
	subsge	r9, r9, #16
	ldrbge	r1, [fp, r5, lsl #2]!
	ldrbge	r1, [ip, r3, lsl #1]!
	ldrbge	r1, [lr, r8]!
	vrshr.u16	q13, q8, #8
	vrshr.u16	q11, q9, #8
	vrshr.u16	q15, q10, #8
	vraddhn.i16	d16, q8, q13
	vraddhn.i16	d27, q9, q11
	vraddhn.i16	d26, q10, q15
	vqadd.u8	d16, d2, d16
	vqadd.u8	q9, q0, q13
	vshll.i8	q14, d16, #8
	vshll.i8	q8, d19, #8
	vshll.i8	q9, d18, #8
	vsri.16	q14, q8, #5
	vsri.16	q14, q9, #11
	tst	r0, #4
	beq	14f
	vst1.16	{d29}, [r2, :64]!
14:	tst	r0, #2
	beq	15f
	vst1.16	{d28[2]}, [r2]!
	vst1.16	{d28[3]}, [r2]!
15:	tst	r0, #1
	beq	10f
	vst1.16	{d28[1]}, [r2]!
10:	ldrd	r0, [sp]
	add	r2, r2, r3, lsl #1
	add	r4, r4, r5, lsl #2
	add	r7, r7, r8
	sub	r2, r2, r0, lsl #1
	sub	r4, r4, r0, lsl #2
	sub	r7, r7, r0
	subs	r1, r1, #1
	mov	r6, r2
	str	r1, [sp, #4]
	bge	16b
	pop	{r0, r1}
	vldmia	sp!, {d8-d15}
	pop	{r4, r5, r6, r7, r8, r9, sl, fp, ip, pc}
1:	tst	r0, #8
	beq	17f
	vld1.16	{d4-d5}, [r6]!
	vld4.8	{d8-d11}, [r4]!
	vld1.8	{d24}, [r7]!
	vmull.u8	q0, d24, d8
	vmull.u8	q1, d24, d9
	vmull.u8	q6, d24, d10
	vmull.u8	q7, d24, d11
	vshrn.i16	d6, q2, #8
	vshrn.i16	d7, q2, #3
	vsli.16	q2, q2, #5
	vrshr.u16	q8, q0, #8
	vrshr.u16	q9, q1, #8
	vrshr.u16	q10, q6, #8
	vrshr.u16	q11, q7, #8
	vraddhn.i16	d0, q0, q8
	vraddhn.i16	d1, q1, q9
	vraddhn.i16	d2, q6, q10
	vraddhn.i16	d3, q7, q11
	vsri.8	d6, d6, #5
	vsri.8	d7, d7, #6
	vmvn	d3, d3
	vshrn.i16	d30, q2, #2
	vmull.u8	q8, d3, d6
	vmull.u8	q9, d3, d7
	vmull.u8	q10, d3, d30
	vrshr.u16	q13, q8, #8
	vrshr.u16	q11, q9, #8
	vrshr.u16	q15, q10, #8
	vraddhn.i16	d16, q8, q13
	vraddhn.i16	d27, q9, q11
	vraddhn.i16	d26, q10, q15
	vqadd.u8	d16, d2, d16
	vqadd.u8	q9, q0, q13
	vshll.i8	q14, d16, #8
	vshll.i8	q8, d19, #8
	vshll.i8	q9, d18, #8
	vsri.16	q14, q8, #5
	vsri.16	q14, q9, #11
	vst1.16	{d28-d29}, [r2]!
17:	tst	r0, #7
	beq	18f
	tst	r0, #4
	beq	19f
	vld1.32	{d10-d11}, [r4]!
	vld1.8	{d24[4]}, [r7]!
	vld1.8	{d24[5]}, [r7]!
	vld1.8	{d24[6]}, [r7]!
	vld1.8	{d24[7]}, [r7]!
	vld1.16	{d5}, [r6]!
19:	tst	r0, #2
	beq	20f
	vld1.32	{d9}, [r4]!
	vld1.8	{d24[2]}, [r7]!
	vld1.8	{d24[3]}, [r7]!
	vld1.16	{d4[2]}, [r6]!
	vld1.16	{d4[3]}, [r6]!
20:	tst	r0, #1
	beq	21f
	vld1.32	{d8[1]}, [r4]!
	vld1.8	{d24[1]}, [r7]!
	vld1.16	{d4[1]}, [r6]!
21:	vuzp.8	d8, d9
	vuzp.8	d10, d11
	vuzp.8	d9, d11
	vuzp.8	d8, d10
	vmull.u8	q0, d24, d8
	vmull.u8	q1, d24, d9
	vmull.u8	q6, d24, d10
	vmull.u8	q7, d24, d11
	vshrn.i16	d6, q2, #8
	vshrn.i16	d7, q2, #3
	vsli.16	q2, q2, #5
	vrshr.u16	q8, q0, #8
	vrshr.u16	q9, q1, #8
	vrshr.u16	q10, q6, #8
	vrshr.u16	q11, q7, #8
	vraddhn.i16	d0, q0, q8
	vraddhn.i16	d1, q1, q9
	vraddhn.i16	d2, q6, q10
	vraddhn.i16	d3, q7, q11
	vsri.8	d6, d6, #5
	vsri.8	d7, d7, #6
	vmvn	d3, d3
	vshrn.i16	d30, q2, #2
	vmull.u8	q8, d3, d6
	vmull.u8	q9, d3, d7
	vmull.u8	q10, d3, d30
	vrshr.u16	q13, q8, #8
	vrshr.u16	q11, q9, #8
	vrshr.u16	q15, q10, #8
	vraddhn.i16	d16, q8, q13
	vraddhn.i16	d27, q9, q11
	vraddhn.i16	d26, q10, q15
	vqadd.u8	d16, d2, d16
	vqadd.u8	q9, q0, q13
	vshll.i8	q14, d16, #8
	vshll.i8	q8, d19, #8
	vshll.i8	q9, d18, #8
	vsri.16	q14, q8, #5
	vsri.16	q14, q9, #11
	tst	r0, #4
	beq	22f
	vst1.16	{d29}, [r2]!
22:	tst	r0, #2
	beq	23f
	vst1.16	{d28[2]}, [r2]!
	vst1.16	{d28[3]}, [r2]!
23:	tst	r0, #1
	beq	18f
	vst1.16	{d28[1]}, [r2]!
18:	ldrd	r0, [sp]
	add	r2, r2, r3, lsl #1
	add	r4, r4, r5, lsl #2
	add	r7, r7, r8
	sub	r2, r2, r0, lsl #1
	sub	r4, r4, r0, lsl #2
	sub	r7, r7, r0
	subs	r1, r1, #1
	mov	r6, r2
	str	r1, [sp, #4]
	bge	1b
0:	pop	{r0, r1}
	vldmia	sp!, {d8-d15}
	pop	{r4, r5, r6, r7, r8, r9, sl, fp, ip, pc}

.global _pixman_composite_over_n_8_8888_asm_neon
_pixman_composite_over_n_8_8888_asm_neon:
	push	{r4, r5, r6, r7, r8, r9, sl, fp, ip, lr}
	ldr	r7, [sp, #48]
	mov	sl, #0
	ldr	r8, [sp, #52]
	mov	r6, r2
	mov	fp, r4
	mov	ip, r6
	mov	lr, r7
	lsl	r9, r1, #4
	sub	r9, r9, #11
	add	r5, sp, #40
	vstmdb	sp!, {d8-d15}
	vld1.32	{d11[0]}, [r5]
	vdup.8	d8, d11[0]
	vdup.8	d9, d11[1]
	vdup.8	d10, d11[2]
	vdup.8	d11, d11[3]
	subs	r1, r1, #1
	mov	r4, r0
	blt	0f
	cmp	r0, #16
	blt	1f
15:	tst	r6, #15
	beq	2f
	tst	r6, #4
	beq	3f
	vld1.8	{d24[1]}, [r7]!
	vld1.32	{d4[1]}, [r6]!
	add	sl, sl, #1
	sub	r0, r0, #1
3:	tst	r6, #8
	beq	4f
	vld1.8	{d24[2]}, [r7]!
	vld1.8	{d24[3]}, [r7]!
	vld1.32	{d5}, [r6, :64]!
	add	sl, sl, #2
	sub	r0, r0, #2
4:	vld1.8	{d24[4]}, [r7]!
	vld1.8	{d24[5]}, [r7]!
	vld1.8	{d24[6]}, [r7]!
	vld1.8	{d24[7]}, [r7]!
	vld1.32	{d6-d7}, [r6, :128]!
	add	sl, sl, #4
	sub	r0, r0, #4
	vuzp.8	d4, d5
	vuzp.8	d6, d7
	vuzp.8	d5, d7
	vuzp.8	d4, d6
	vmull.u8	q6, d24, d8
	vmull.u8	q7, d24, d9
	vmull.u8	q8, d24, d10
	vmull.u8	q9, d24, d11
	vrshr.u16	q10, q6, #8
	vrshr.u16	q11, q7, #8
	vrshr.u16	q12, q8, #8
	vrshr.u16	q13, q9, #8
	vraddhn.i16	d0, q6, q10
	vraddhn.i16	d1, q7, q11
	vraddhn.i16	d2, q8, q12
	vraddhn.i16	d3, q9, q13
	vmvn	d25, d3
	vmull.u8	q8, d25, d4
	vmull.u8	q9, d25, d5
	vmull.u8	q10, d25, d6
	vmull.u8	q11, d25, d7
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r4
	pld	[ip, sl, lsl #2]
	pld	[lr, sl]
	subge	sl, sl, r4
	subsge	r9, r9, #16
	ldrbge	r5, [ip, r3, lsl #2]!
	ldrbge	r5, [lr, r8]!
	vrshr.u16	q14, q8, #8
	vrshr.u16	q15, q9, #8
	vrshr.u16	q6, q10, #8
	vrshr.u16	q7, q11, #8
	vraddhn.i16	d28, q14, q8
	vraddhn.i16	d29, q15, q9
	vraddhn.i16	d30, q6, q10
	vraddhn.i16	d31, q7, q11
	vqadd.u8	q14, q0, q14
	vqadd.u8	q15, q1, q15
	vzip.8	d28, d30
	vzip.8	d29, d31
	vzip.8	d30, d31
	vzip.8	d28, d29
	tst	r2, #4
	beq	5f
	vst1.32	{d28[1]}, [r2]!
5:	tst	r2, #8
	beq	6f
	vst1.32	{d29}, [r2, :64]!
6:	vst1.32	{d30-d31}, [r2, :128]!
2:	vld4.8	{d4-d7}, [r6, :128]!
	vld1.8	{d24}, [r7]!
	add	sl, sl, #8
	vmull.u8	q6, d24, d8
	vmull.u8	q7, d24, d9
	vmull.u8	q8, d24, d10
	vmull.u8	q9, d24, d11
	vrshr.u16	q10, q6, #8
	vrshr.u16	q11, q7, #8
	vrshr.u16	q12, q8, #8
	vrshr.u16	q13, q9, #8
	vraddhn.i16	d0, q6, q10
	vraddhn.i16	d1, q7, q11
	vraddhn.i16	d2, q8, q12
	vraddhn.i16	d3, q9, q13
	vmvn	d25, d3
	vmull.u8	q8, d25, d4
	vmull.u8	q9, d25, d5
	vmull.u8	q10, d25, d6
	vmull.u8	q11, d25, d7
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r4
	pld	[ip, sl, lsl #2]
	pld	[lr, sl]
	subge	sl, sl, r4
	subsge	r9, r9, #16
	ldrbge	r5, [ip, r3, lsl #2]!
	ldrbge	r5, [lr, r8]!
	subs	r0, r0, #16
	blt	7f
8:	vrshr.u16	q14, q8, #8
	vld4.8	{d4-d7}, [r6, :128]!
	vrshr.u16	q15, q9, #8
	vld1.8	{d24}, [r7]!
	vrshr.u16	q6, q10, #8
	add	sl, sl, #8
	vrshr.u16	q7, q11, #8
	tst	r9, #15
	vraddhn.i16	d28, q14, q8
	addne	sl, sl, #8
	vraddhn.i16	d29, q15, q9
	subne	r9, r9, #1
	vraddhn.i16	d30, q6, q10
	cmp	sl, r4
	vraddhn.i16	d31, q7, q11
	pld	[ip, sl, lsl #2]
	vmull.u8	q6, d24, d8
	pld	[lr, sl]
	vmull.u8	q7, d24, d9
	subge	sl, sl, r4
	vmull.u8	q8, d24, d10
	subsge	r9, r9, #16
	vmull.u8	q9, d24, d11
	ldrbge	r5, [ip, r3, lsl #2]!
	vqadd.u8	q14, q0, q14
	ldrbge	r5, [lr, r8]!
	vqadd.u8	q15, q1, q15
	vrshr.u16	q10, q6, #8
	vrshr.u16	q11, q7, #8
	vrshr.u16	q12, q8, #8
	vrshr.u16	q13, q9, #8
	vraddhn.i16	d0, q6, q10
	vraddhn.i16	d1, q7, q11
	vraddhn.i16	d2, q8, q12
	vraddhn.i16	d3, q9, q13
	vst4.8	{d28-d31}, [r2, :128]!
	vmvn	d25, d3
	vmull.u8	q8, d25, d4
	vmull.u8	q9, d25, d5
	vmull.u8	q10, d25, d6
	vmull.u8	q11, d25, d7
	subs	r0, r0, #8
	bge	8b
7:	vrshr.u16	q14, q8, #8
	vrshr.u16	q15, q9, #8
	vrshr.u16	q6, q10, #8
	vrshr.u16	q7, q11, #8
	vraddhn.i16	d28, q14, q8
	vraddhn.i16	d29, q15, q9
	vraddhn.i16	d30, q6, q10
	vraddhn.i16	d31, q7, q11
	vqadd.u8	q14, q0, q14
	vqadd.u8	q15, q1, q15
	vst4.8	{d28-d31}, [r2, :128]!
	tst	r0, #7
	beq	9f
	tst	r0, #4
	beq	10f
	vld1.8	{d24[4]}, [r7]!
	vld1.8	{d24[5]}, [r7]!
	vld1.8	{d24[6]}, [r7]!
	vld1.8	{d24[7]}, [r7]!
	vld1.32	{d6-d7}, [r6, :128]!
	add	sl, sl, #4
10:	tst	r0, #2
	beq	11f
	vld1.8	{d24[2]}, [r7]!
	vld1.8	{d24[3]}, [r7]!
	vld1.32	{d5}, [r6, :64]!
	add	sl, sl, #2
11:	tst	r0, #1
	beq	12f
	vld1.8	{d24[1]}, [r7]!
	vld1.32	{d4[1]}, [r6]!
	add	sl, sl, #1
12:	vuzp.8	d4, d5
	vuzp.8	d6, d7
	vuzp.8	d5, d7
	vuzp.8	d4, d6
	vmull.u8	q6, d24, d8
	vmull.u8	q7, d24, d9
	vmull.u8	q8, d24, d10
	vmull.u8	q9, d24, d11
	vrshr.u16	q10, q6, #8
	vrshr.u16	q11, q7, #8
	vrshr.u16	q12, q8, #8
	vrshr.u16	q13, q9, #8
	vraddhn.i16	d0, q6, q10
	vraddhn.i16	d1, q7, q11
	vraddhn.i16	d2, q8, q12
	vraddhn.i16	d3, q9, q13
	vmvn	d25, d3
	vmull.u8	q8, d25, d4
	vmull.u8	q9, d25, d5
	vmull.u8	q10, d25, d6
	vmull.u8	q11, d25, d7
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r4
	pld	[ip, sl, lsl #2]
	pld	[lr, sl]
	subge	sl, sl, r4
	subsge	r9, r9, #16
	ldrbge	r5, [ip, r3, lsl #2]!
	ldrbge	r5, [lr, r8]!
	vrshr.u16	q14, q8, #8
	vrshr.u16	q15, q9, #8
	vrshr.u16	q6, q10, #8
	vrshr.u16	q7, q11, #8
	vraddhn.i16	d28, q14, q8
	vraddhn.i16	d29, q15, q9
	vraddhn.i16	d30, q6, q10
	vraddhn.i16	d31, q7, q11
	vqadd.u8	q14, q0, q14
	vqadd.u8	q15, q1, q15
	vzip.8	d28, d30
	vzip.8	d29, d31
	vzip.8	d30, d31
	vzip.8	d28, d29
	tst	r0, #4
	beq	13f
	vst1.32	{d30-d31}, [r2, :128]!
13:	tst	r0, #2
	beq	14f
	vst1.32	{d29}, [r2, :64]!
14:	tst	r0, #1
	beq	9f
	vst1.32	{d28[1]}, [r2]!
9:	mov	r0, r4
	add	r2, r2, r3, lsl #2
	add	r7, r7, r8
	sub	r2, r2, r0, lsl #2
	sub	r7, r7, r0
	subs	r1, r1, #1
	mov	r6, r2
	bge	15b
	vldmia	sp!, {d8-d15}
	pop	{r4, r5, r6, r7, r8, r9, sl, fp, ip, pc}
1:	tst	r0, #8
	beq	16f
	vld4.8	{d4-d7}, [r6]!
	vld1.8	{d24}, [r7]!
	vmull.u8	q6, d24, d8
	vmull.u8	q7, d24, d9
	vmull.u8	q8, d24, d10
	vmull.u8	q9, d24, d11
	vrshr.u16	q10, q6, #8
	vrshr.u16	q11, q7, #8
	vrshr.u16	q12, q8, #8
	vrshr.u16	q13, q9, #8
	vraddhn.i16	d0, q6, q10
	vraddhn.i16	d1, q7, q11
	vraddhn.i16	d2, q8, q12
	vraddhn.i16	d3, q9, q13
	vmvn	d25, d3
	vmull.u8	q8, d25, d4
	vmull.u8	q9, d25, d5
	vmull.u8	q10, d25, d6
	vmull.u8	q11, d25, d7
	vrshr.u16	q14, q8, #8
	vrshr.u16	q15, q9, #8
	vrshr.u16	q6, q10, #8
	vrshr.u16	q7, q11, #8
	vraddhn.i16	d28, q14, q8
	vraddhn.i16	d29, q15, q9
	vraddhn.i16	d30, q6, q10
	vraddhn.i16	d31, q7, q11
	vqadd.u8	q14, q0, q14
	vqadd.u8	q15, q1, q15
	vst4.8	{d28-d31}, [r2]!
16:	tst	r0, #7
	beq	17f
	tst	r0, #4
	beq	18f
	vld1.8	{d24[4]}, [r7]!
	vld1.8	{d24[5]}, [r7]!
	vld1.8	{d24[6]}, [r7]!
	vld1.8	{d24[7]}, [r7]!
	vld1.32	{d6-d7}, [r6]!
18:	tst	r0, #2
	beq	19f
	vld1.8	{d24[2]}, [r7]!
	vld1.8	{d24[3]}, [r7]!
	vld1.32	{d5}, [r6]!
19:	tst	r0, #1
	beq	20f
	vld1.8	{d24[1]}, [r7]!
	vld1.32	{d4[1]}, [r6]!
20:	vuzp.8	d4, d5
	vuzp.8	d6, d7
	vuzp.8	d5, d7
	vuzp.8	d4, d6
	vmull.u8	q6, d24, d8
	vmull.u8	q7, d24, d9
	vmull.u8	q8, d24, d10
	vmull.u8	q9, d24, d11
	vrshr.u16	q10, q6, #8
	vrshr.u16	q11, q7, #8
	vrshr.u16	q12, q8, #8
	vrshr.u16	q13, q9, #8
	vraddhn.i16	d0, q6, q10
	vraddhn.i16	d1, q7, q11
	vraddhn.i16	d2, q8, q12
	vraddhn.i16	d3, q9, q13
	vmvn	d25, d3
	vmull.u8	q8, d25, d4
	vmull.u8	q9, d25, d5
	vmull.u8	q10, d25, d6
	vmull.u8	q11, d25, d7
	vrshr.u16	q14, q8, #8
	vrshr.u16	q15, q9, #8
	vrshr.u16	q6, q10, #8
	vrshr.u16	q7, q11, #8
	vraddhn.i16	d28, q14, q8
	vraddhn.i16	d29, q15, q9
	vraddhn.i16	d30, q6, q10
	vraddhn.i16	d31, q7, q11
	vqadd.u8	q14, q0, q14
	vqadd.u8	q15, q1, q15
	vzip.8	d28, d30
	vzip.8	d29, d31
	vzip.8	d30, d31
	vzip.8	d28, d29
	tst	r0, #4
	beq	21f
	vst1.32	{d30-d31}, [r2]!
21:	tst	r0, #2
	beq	22f
	vst1.32	{d29}, [r2]!
22:	tst	r0, #1
	beq	17f
	vst1.32	{d28[1]}, [r2]!
17:	mov	r0, r4
	add	r2, r2, r3, lsl #2
	add	r7, r7, r8
	sub	r2, r2, r0, lsl #2
	sub	r7, r7, r0
	subs	r1, r1, #1
	mov	r6, r2
	bge	1b
0:	vldmia	sp!, {d8-d15}
	pop	{r4, r5, r6, r7, r8, r9, sl, fp, ip, pc}

.global _pixman_composite_over_n_8888_asm_neon
_pixman_composite_over_n_8888_asm_neon:
	push	{r4, r5, r6, r7, r8, r9, sl, fp, ip, lr}
	mov	sl, #0
	mov	r6, r2
	mov	fp, r4
	mov	ip, r6
	mov	lr, r7
	lsl	r9, r1, #4
	sub	r9, r9, #11
	add	r8, sp, #40
	vld1.32	{d3[0]}, [r8]
	vdup.8	d0, d3[0]
	vdup.8	d1, d3[1]
	vdup.8	d2, d3[2]
	vdup.8	d3, d3[3]
	vmvn	d24, d3
	subs	r1, r1, #1
	mov	r7, r0
	blt	0f
	cmp	r0, #16
	blt	1f
15:	tst	r6, #15
	beq	2f
	tst	r6, #4
	beq	3f
	vld1.32	{d4[1]}, [r6]!
	add	sl, sl, #1
	sub	r0, r0, #1
3:	tst	r6, #8
	beq	4f
	vld1.32	{d5}, [r6, :64]!
	add	sl, sl, #2
	sub	r0, r0, #2
4:	vld1.32	{d6-d7}, [r6, :128]!
	add	sl, sl, #4
	sub	r0, r0, #4
	vuzp.8	d4, d5
	vuzp.8	d6, d7
	vuzp.8	d5, d7
	vuzp.8	d4, d6
	vmvn	d24, d3
	vmull.u8	q8, d24, d4
	vmull.u8	q9, d24, d5
	vmull.u8	q10, d24, d6
	vmull.u8	q11, d24, d7
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r7
	pld	[ip, sl, lsl #2]
	subge	sl, sl, r7
	subsge	r9, r9, #16
	ldrbge	r8, [ip, r3, lsl #2]!
	vrshr.u16	q14, q8, #8
	vrshr.u16	q15, q9, #8
	vrshr.u16	q12, q10, #8
	vrshr.u16	q13, q11, #8
	vraddhn.i16	d28, q14, q8
	vraddhn.i16	d29, q15, q9
	vraddhn.i16	d30, q12, q10
	vraddhn.i16	d31, q13, q11
	vqadd.u8	q14, q0, q14
	vqadd.u8	q15, q1, q15
	vzip.8	d28, d30
	vzip.8	d29, d31
	vzip.8	d30, d31
	vzip.8	d28, d29
	tst	r2, #4
	beq	5f
	vst1.32	{d28[1]}, [r2]!
5:	tst	r2, #8
	beq	6f
	vst1.32	{d29}, [r2, :64]!
6:	vst1.32	{d30-d31}, [r2, :128]!
2:	vld4.8	{d4-d7}, [r6, :128]!
	add	sl, sl, #8
	vmvn	d24, d3
	vmull.u8	q8, d24, d4
	vmull.u8	q9, d24, d5
	vmull.u8	q10, d24, d6
	vmull.u8	q11, d24, d7
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r7
	pld	[ip, sl, lsl #2]
	subge	sl, sl, r7
	subsge	r9, r9, #16
	ldrbge	r8, [ip, r3, lsl #2]!
	subs	r0, r0, #16
	blt	7f
8:	vrshr.u16	q14, q8, #8
	vrshr.u16	q15, q9, #8
	vrshr.u16	q2, q10, #8
	vrshr.u16	q3, q11, #8
	vraddhn.i16	d28, q14, q8
	vraddhn.i16	d29, q15, q9
	vraddhn.i16	d30, q2, q10
	vraddhn.i16	d31, q3, q11
	vld4.8	{d4-d7}, [r6, :128]!
	vqadd.u8	q14, q0, q14
	add	sl, sl, #8
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	vqadd.u8	q15, q1, q15
	cmp	sl, r7
	vmull.u8	q8, d24, d4
	pld	[ip, sl, lsl #2]
	vmull.u8	q9, d24, d5
	subge	sl, sl, r7
	vmull.u8	q10, d24, d6
	subsge	r9, r9, #16
	vmull.u8	q11, d24, d7
	ldrbge	r8, [ip, r3, lsl #2]!
	vst4.8	{d28-d31}, [r2, :128]!
	subs	r0, r0, #8
	bge	8b
7:	vrshr.u16	q14, q8, #8
	vrshr.u16	q15, q9, #8
	vrshr.u16	q12, q10, #8
	vrshr.u16	q13, q11, #8
	vraddhn.i16	d28, q14, q8
	vraddhn.i16	d29, q15, q9
	vraddhn.i16	d30, q12, q10
	vraddhn.i16	d31, q13, q11
	vqadd.u8	q14, q0, q14
	vqadd.u8	q15, q1, q15
	vst4.8	{d28-d31}, [r2, :128]!
	tst	r0, #7
	beq	9f
	tst	r0, #4
	beq	10f
	vld1.32	{d6-d7}, [r6, :128]!
	add	sl, sl, #4
10:	tst	r0, #2
	beq	11f
	vld1.32	{d5}, [r6, :64]!
	add	sl, sl, #2
11:	tst	r0, #1
	beq	12f
	vld1.32	{d4[1]}, [r6]!
	add	sl, sl, #1
12:	vuzp.8	d4, d5
	vuzp.8	d6, d7
	vuzp.8	d5, d7
	vuzp.8	d4, d6
	vmvn	d24, d3
	vmull.u8	q8, d24, d4
	vmull.u8	q9, d24, d5
	vmull.u8	q10, d24, d6
	vmull.u8	q11, d24, d7
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r7
	pld	[ip, sl, lsl #2]
	subge	sl, sl, r7
	subsge	r9, r9, #16
	ldrbge	r8, [ip, r3, lsl #2]!
	vrshr.u16	q14, q8, #8
	vrshr.u16	q15, q9, #8
	vrshr.u16	q12, q10, #8
	vrshr.u16	q13, q11, #8
	vraddhn.i16	d28, q14, q8
	vraddhn.i16	d29, q15, q9
	vraddhn.i16	d30, q12, q10
	vraddhn.i16	d31, q13, q11
	vqadd.u8	q14, q0, q14
	vqadd.u8	q15, q1, q15
	vzip.8	d28, d30
	vzip.8	d29, d31
	vzip.8	d30, d31
	vzip.8	d28, d29
	tst	r0, #4
	beq	13f
	vst1.32	{d30-d31}, [r2, :128]!
13:	tst	r0, #2
	beq	14f
	vst1.32	{d29}, [r2, :64]!
14:	tst	r0, #1
	beq	9f
	vst1.32	{d28[1]}, [r2]!
9:	mov	r0, r7
	add	r2, r2, r3, lsl #2
	sub	r2, r2, r0, lsl #2
	subs	r1, r1, #1
	mov	r6, r2
	bge	15b
	pop	{r4, r5, r6, r7, r8, r9, sl, fp, ip, pc}
1:	tst	r0, #8
	beq	16f
	vld4.8	{d4-d7}, [r6]!
	vmvn	d24, d3
	vmull.u8	q8, d24, d4
	vmull.u8	q9, d24, d5
	vmull.u8	q10, d24, d6
	vmull.u8	q11, d24, d7
	vrshr.u16	q14, q8, #8
	vrshr.u16	q15, q9, #8
	vrshr.u16	q12, q10, #8
	vrshr.u16	q13, q11, #8
	vraddhn.i16	d28, q14, q8
	vraddhn.i16	d29, q15, q9
	vraddhn.i16	d30, q12, q10
	vraddhn.i16	d31, q13, q11
	vqadd.u8	q14, q0, q14
	vqadd.u8	q15, q1, q15
	vst4.8	{d28-d31}, [r2]!
16:	tst	r0, #7
	beq	17f
	tst	r0, #4
	beq	18f
	vld1.32	{d6-d7}, [r6]!
18:	tst	r0, #2
	beq	19f
	vld1.32	{d5}, [r6]!
19:	tst	r0, #1
	beq	20f
	vld1.32	{d4[1]}, [r6]!
20:	vuzp.8	d4, d5
	vuzp.8	d6, d7
	vuzp.8	d5, d7
	vuzp.8	d4, d6
	vmvn	d24, d3
	vmull.u8	q8, d24, d4
	vmull.u8	q9, d24, d5
	vmull.u8	q10, d24, d6
	vmull.u8	q11, d24, d7
	vrshr.u16	q14, q8, #8
	vrshr.u16	q15, q9, #8
	vrshr.u16	q12, q10, #8
	vrshr.u16	q13, q11, #8
	vraddhn.i16	d28, q14, q8
	vraddhn.i16	d29, q15, q9
	vraddhn.i16	d30, q12, q10
	vraddhn.i16	d31, q13, q11
	vqadd.u8	q14, q0, q14
	vqadd.u8	q15, q1, q15
	vzip.8	d28, d30
	vzip.8	d29, d31
	vzip.8	d30, d31
	vzip.8	d28, d29
	tst	r0, #4
	beq	21f
	vst1.32	{d30-d31}, [r2]!
21:	tst	r0, #2
	beq	22f
	vst1.32	{d29}, [r2]!
22:	tst	r0, #1
	beq	17f
	vst1.32	{d28[1]}, [r2]!
17:	mov	r0, r7
	add	r2, r2, r3, lsl #2
	sub	r2, r2, r0, lsl #2
	subs	r1, r1, #1
	mov	r6, r2
	bge	1b
0:	pop	{r4, r5, r6, r7, r8, r9, sl, fp, ip, pc}

.global _pixman_composite_over_8888_8888_8888_asm_neon
_pixman_composite_over_8888_8888_8888_asm_neon:
	push	{r4, r5, r6, r7, r8, r9, sl, fp, ip, lr}
	ldr	r4, [sp, #40]
	ldr	r7, [sp, #48]
	mov	sl, #0
	ldr	r5, [sp, #44]
	ldr	r8, [sp, #52]
	mov	r6, r2
	mov	fp, r4
	mov	ip, r6
	mov	lr, r7
	lsl	r9, r1, #4
	sub	r9, r9, #11
	vstmdb	sp!, {d8-d15}
	push	{r0, r1}
	subs	r1, r1, #1
	str	r1, [sp, #4]
	blt	0f
	cmp	r0, #16
	blt	1f
15:	tst	r6, #15
	beq	2f
	tst	r6, #4
	beq	3f
	vld1.32	{d0[1]}, [r4]!
	vld1.32	{d12[1]}, [r7]!
	vld1.32	{d4[1]}, [r6]!
	add	sl, sl, #1
	sub	r0, r0, #1
3:	tst	r6, #8
	beq	4f
	vld1.32	{d1}, [r4]!
	vld1.32	{d13}, [r7]!
	vld1.32	{d5}, [r6, :64]!
	add	sl, sl, #2
	sub	r0, r0, #2
4:	vld1.32	{d2-d3}, [r4]!
	vld1.32	{d14-d15}, [r7]!
	vld1.32	{d6-d7}, [r6, :128]!
	add	sl, sl, #4
	sub	r0, r0, #4
	vuzp.8	d0, d1
	vuzp.8	d2, d3
	vuzp.8	d1, d3
	vuzp.8	d0, d2
	vuzp.8	d12, d13
	vuzp.8	d14, d15
	vuzp.8	d13, d15
	vuzp.8	d12, d14
	vuzp.8	d4, d5
	vuzp.8	d6, d7
	vuzp.8	d5, d7
	vuzp.8	d4, d6
	vmull.u8	q8, d15, d3
	vmull.u8	q6, d15, d2
	vmull.u8	q5, d15, d1
	vmull.u8	q4, d15, d0
	vrshr.u16	q13, q8, #8
	vrshr.u16	q12, q6, #8
	vrshr.u16	q11, q5, #8
	vrshr.u16	q10, q4, #8
	vraddhn.i16	d3, q8, q13
	vraddhn.i16	d2, q6, q12
	vraddhn.i16	d1, q5, q11
	vraddhn.i16	d0, q4, q10
	vmvn	d24, d3
	vmull.u8	q8, d24, d4
	vmull.u8	q9, d24, d5
	vmull.u8	q10, d24, d6
	vmull.u8	q11, d24, d7
	ldr	r1, [sp]
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r1
	pld	[fp, sl, lsl #2]
	pld	[ip, sl, lsl #2]
	pld	[lr, sl, lsl #2]
	subge	sl, sl, r1
	subsge	r9, r9, #16
	ldrbge	r1, [fp, r5, lsl #2]!
	ldrbge	r1, [ip, r3, lsl #2]!
	ldrbge	r1, [lr, r8, lsl #2]!
	vrshr.u16	q14, q8, #8
	vrshr.u16	q15, q9, #8
	vrshr.u16	q12, q10, #8
	vrshr.u16	q13, q11, #8
	vraddhn.i16	d28, q14, q8
	vraddhn.i16	d29, q15, q9
	vraddhn.i16	d30, q12, q10
	vraddhn.i16	d31, q13, q11
	vqadd.u8	q14, q0, q14
	vqadd.u8	q15, q1, q15
	vzip.8	d28, d30
	vzip.8	d29, d31
	vzip.8	d30, d31
	vzip.8	d28, d29
	tst	r2, #4
	beq	5f
	vst1.32	{d28[1]}, [r2]!
5:	tst	r2, #8
	beq	6f
	vst1.32	{d29}, [r2, :64]!
6:	vst1.32	{d30-d31}, [r2, :128]!
2:	vld4.8	{d4-d7}, [r6, :128]!
	vld4.8	{d0-d3}, [r4]!
	vld4.8	{d12-d15}, [r7]!
	add	sl, sl, #8
	vmull.u8	q8, d15, d3
	vmull.u8	q6, d15, d2
	vmull.u8	q5, d15, d1
	vmull.u8	q4, d15, d0
	vrshr.u16	q13, q8, #8
	vrshr.u16	q12, q6, #8
	vrshr.u16	q11, q5, #8
	vrshr.u16	q10, q4, #8
	vraddhn.i16	d3, q8, q13
	vraddhn.i16	d2, q6, q12
	vraddhn.i16	d1, q5, q11
	vraddhn.i16	d0, q4, q10
	vmvn	d24, d3
	vmull.u8	q8, d24, d4
	vmull.u8	q9, d24, d5
	vmull.u8	q10, d24, d6
	vmull.u8	q11, d24, d7
	ldr	r1, [sp]
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r1
	pld	[fp, sl, lsl #2]
	pld	[ip, sl, lsl #2]
	pld	[lr, sl, lsl #2]
	subge	sl, sl, r1
	subsge	r9, r9, #16
	ldrbge	r1, [fp, r5, lsl #2]!
	ldrbge	r1, [ip, r3, lsl #2]!
	ldrbge	r1, [lr, r8, lsl #2]!
	subs	r0, r0, #16
	blt	7f
8:	vld4.8	{d4-d7}, [r6, :128]!
	vrshr.u16	q14, q8, #8
	vrshr.u16	q15, q9, #8
	vrshr.u16	q12, q10, #8
	vrshr.u16	q13, q11, #8
	vraddhn.i16	d28, q14, q8
	vraddhn.i16	d29, q15, q9
	vraddhn.i16	d30, q12, q10
	vraddhn.i16	d31, q13, q11
	vqadd.u8	q14, q0, q14
	vqadd.u8	q15, q1, q15
	vld4.8	{d0-d3}, [r4]!
	ldr	r1, [sp]
	add	sl, sl, #8
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r1
	pld	[fp, sl, lsl #2]
	pld	[ip, sl, lsl #2]
	pld	[lr, sl, lsl #2]
	subge	sl, sl, r1
	subsge	r9, r9, #16
	ldrbge	r1, [fp, r5, lsl #2]!
	ldrbge	r1, [ip, r3, lsl #2]!
	ldrbge	r1, [lr, r8, lsl #2]!
	vld4.8	{d12-d15}, [r7]!
	vmull.u8	q8, d15, d3
	vmull.u8	q6, d15, d2
	vmull.u8	q5, d15, d1
	vmull.u8	q4, d15, d0
	vrshr.u16	q13, q8, #8
	vrshr.u16	q12, q6, #8
	vrshr.u16	q11, q5, #8
	vrshr.u16	q10, q4, #8
	vraddhn.i16	d3, q8, q13
	vraddhn.i16	d2, q6, q12
	vraddhn.i16	d1, q5, q11
	vraddhn.i16	d0, q4, q10
	vmvn	d24, d3
	vmull.u8	q8, d24, d4
	vmull.u8	q9, d24, d5
	vmull.u8	q10, d24, d6
	vmull.u8	q11, d24, d7
	vst4.8	{d28-d31}, [r2, :128]!
	subs	r0, r0, #8
	bge	8b
7:	vrshr.u16	q14, q8, #8
	vrshr.u16	q15, q9, #8
	vrshr.u16	q12, q10, #8
	vrshr.u16	q13, q11, #8
	vraddhn.i16	d28, q14, q8
	vraddhn.i16	d29, q15, q9
	vraddhn.i16	d30, q12, q10
	vraddhn.i16	d31, q13, q11
	vqadd.u8	q14, q0, q14
	vqadd.u8	q15, q1, q15
	vst4.8	{d28-d31}, [r2, :128]!
	tst	r0, #7
	beq	9f
	tst	r0, #4
	beq	10f
	vld1.32	{d2-d3}, [r4]!
	vld1.32	{d14-d15}, [r7]!
	vld1.32	{d6-d7}, [r6, :128]!
	add	sl, sl, #4
10:	tst	r0, #2
	beq	11f
	vld1.32	{d1}, [r4]!
	vld1.32	{d13}, [r7]!
	vld1.32	{d5}, [r6, :64]!
	add	sl, sl, #2
11:	tst	r0, #1
	beq	12f
	vld1.32	{d0[1]}, [r4]!
	vld1.32	{d12[1]}, [r7]!
	vld1.32	{d4[1]}, [r6]!
	add	sl, sl, #1
12:	vuzp.8	d0, d1
	vuzp.8	d2, d3
	vuzp.8	d1, d3
	vuzp.8	d0, d2
	vuzp.8	d12, d13
	vuzp.8	d14, d15
	vuzp.8	d13, d15
	vuzp.8	d12, d14
	vuzp.8	d4, d5
	vuzp.8	d6, d7
	vuzp.8	d5, d7
	vuzp.8	d4, d6
	vmull.u8	q8, d15, d3
	vmull.u8	q6, d15, d2
	vmull.u8	q5, d15, d1
	vmull.u8	q4, d15, d0
	vrshr.u16	q13, q8, #8
	vrshr.u16	q12, q6, #8
	vrshr.u16	q11, q5, #8
	vrshr.u16	q10, q4, #8
	vraddhn.i16	d3, q8, q13
	vraddhn.i16	d2, q6, q12
	vraddhn.i16	d1, q5, q11
	vraddhn.i16	d0, q4, q10
	vmvn	d24, d3
	vmull.u8	q8, d24, d4
	vmull.u8	q9, d24, d5
	vmull.u8	q10, d24, d6
	vmull.u8	q11, d24, d7
	ldr	r1, [sp]
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r1
	pld	[fp, sl, lsl #2]
	pld	[ip, sl, lsl #2]
	pld	[lr, sl, lsl #2]
	subge	sl, sl, r1
	subsge	r9, r9, #16
	ldrbge	r1, [fp, r5, lsl #2]!
	ldrbge	r1, [ip, r3, lsl #2]!
	ldrbge	r1, [lr, r8, lsl #2]!
	vrshr.u16	q14, q8, #8
	vrshr.u16	q15, q9, #8
	vrshr.u16	q12, q10, #8
	vrshr.u16	q13, q11, #8
	vraddhn.i16	d28, q14, q8
	vraddhn.i16	d29, q15, q9
	vraddhn.i16	d30, q12, q10
	vraddhn.i16	d31, q13, q11
	vqadd.u8	q14, q0, q14
	vqadd.u8	q15, q1, q15
	vzip.8	d28, d30
	vzip.8	d29, d31
	vzip.8	d30, d31
	vzip.8	d28, d29
	tst	r0, #4
	beq	13f
	vst1.32	{d30-d31}, [r2, :128]!
13:	tst	r0, #2
	beq	14f
	vst1.32	{d29}, [r2, :64]!
14:	tst	r0, #1
	beq	9f
	vst1.32	{d28[1]}, [r2]!
9:	ldrd	r0, [sp]
	add	r2, r2, r3, lsl #2
	add	r4, r4, r5, lsl #2
	add	r7, r7, r8, lsl #2
	sub	r2, r2, r0, lsl #2
	sub	r4, r4, r0, lsl #2
	sub	r7, r7, r0, lsl #2
	subs	r1, r1, #1
	mov	r6, r2
	str	r1, [sp, #4]
	bge	15b
	pop	{r0, r1}
	vldmia	sp!, {d8-d15}
	pop	{r4, r5, r6, r7, r8, r9, sl, fp, ip, pc}
1:	tst	r0, #8
	beq	16f
	vld4.8	{d4-d7}, [r6]!
	vld4.8	{d0-d3}, [r4]!
	vld4.8	{d12-d15}, [r7]!
	vmull.u8	q8, d15, d3
	vmull.u8	q6, d15, d2
	vmull.u8	q5, d15, d1
	vmull.u8	q4, d15, d0
	vrshr.u16	q13, q8, #8
	vrshr.u16	q12, q6, #8
	vrshr.u16	q11, q5, #8
	vrshr.u16	q10, q4, #8
	vraddhn.i16	d3, q8, q13
	vraddhn.i16	d2, q6, q12
	vraddhn.i16	d1, q5, q11
	vraddhn.i16	d0, q4, q10
	vmvn	d24, d3
	vmull.u8	q8, d24, d4
	vmull.u8	q9, d24, d5
	vmull.u8	q10, d24, d6
	vmull.u8	q11, d24, d7
	vrshr.u16	q14, q8, #8
	vrshr.u16	q15, q9, #8
	vrshr.u16	q12, q10, #8
	vrshr.u16	q13, q11, #8
	vraddhn.i16	d28, q14, q8
	vraddhn.i16	d29, q15, q9
	vraddhn.i16	d30, q12, q10
	vraddhn.i16	d31, q13, q11
	vqadd.u8	q14, q0, q14
	vqadd.u8	q15, q1, q15
	vst4.8	{d28-d31}, [r2]!
16:	tst	r0, #7
	beq	17f
	tst	r0, #4
	beq	18f
	vld1.32	{d2-d3}, [r4]!
	vld1.32	{d14-d15}, [r7]!
	vld1.32	{d6-d7}, [r6]!
18:	tst	r0, #2
	beq	19f
	vld1.32	{d1}, [r4]!
	vld1.32	{d13}, [r7]!
	vld1.32	{d5}, [r6]!
19:	tst	r0, #1
	beq	20f
	vld1.32	{d0[1]}, [r4]!
	vld1.32	{d12[1]}, [r7]!
	vld1.32	{d4[1]}, [r6]!
20:	vuzp.8	d0, d1
	vuzp.8	d2, d3
	vuzp.8	d1, d3
	vuzp.8	d0, d2
	vuzp.8	d12, d13
	vuzp.8	d14, d15
	vuzp.8	d13, d15
	vuzp.8	d12, d14
	vuzp.8	d4, d5
	vuzp.8	d6, d7
	vuzp.8	d5, d7
	vuzp.8	d4, d6
	vmull.u8	q8, d15, d3
	vmull.u8	q6, d15, d2
	vmull.u8	q5, d15, d1
	vmull.u8	q4, d15, d0
	vrshr.u16	q13, q8, #8
	vrshr.u16	q12, q6, #8
	vrshr.u16	q11, q5, #8
	vrshr.u16	q10, q4, #8
	vraddhn.i16	d3, q8, q13
	vraddhn.i16	d2, q6, q12
	vraddhn.i16	d1, q5, q11
	vraddhn.i16	d0, q4, q10
	vmvn	d24, d3
	vmull.u8	q8, d24, d4
	vmull.u8	q9, d24, d5
	vmull.u8	q10, d24, d6
	vmull.u8	q11, d24, d7
	vrshr.u16	q14, q8, #8
	vrshr.u16	q15, q9, #8
	vrshr.u16	q12, q10, #8
	vrshr.u16	q13, q11, #8
	vraddhn.i16	d28, q14, q8
	vraddhn.i16	d29, q15, q9
	vraddhn.i16	d30, q12, q10
	vraddhn.i16	d31, q13, q11
	vqadd.u8	q14, q0, q14
	vqadd.u8	q15, q1, q15
	vzip.8	d28, d30
	vzip.8	d29, d31
	vzip.8	d30, d31
	vzip.8	d28, d29
	tst	r0, #4
	beq	21f
	vst1.32	{d30-d31}, [r2]!
21:	tst	r0, #2
	beq	22f
	vst1.32	{d29}, [r2]!
22:	tst	r0, #1
	beq	17f
	vst1.32	{d28[1]}, [r2]!
17:	ldrd	r0, [sp]
	add	r2, r2, r3, lsl #2
	add	r4, r4, r5, lsl #2
	add	r7, r7, r8, lsl #2
	sub	r2, r2, r0, lsl #2
	sub	r4, r4, r0, lsl #2
	sub	r7, r7, r0, lsl #2
	subs	r1, r1, #1
	mov	r6, r2
	str	r1, [sp, #4]
	bge	1b
0:	pop	{r0, r1}
	vldmia	sp!, {d8-d15}
	pop	{r4, r5, r6, r7, r8, r9, sl, fp, ip, pc}

.global _pixman_composite_src_0565_8888_asm_neon
_pixman_composite_src_0565_8888_asm_neon:
	push	{r4, r5, r6, r7, r8, r9, sl, fp, ip, lr}
	ldr	r4, [sp, #40]
	mov	sl, #0
	ldr	r5, [sp, #44]
	mov	r6, r2
	mov	fp, r4
	mov	ip, r6
	mov	lr, r7
	lsl	r9, r1, #4
	sub	r9, r9, #6
	subs	r1, r1, #1
	mov	r7, r0
	blt	0f
	cmp	r0, #16
	blt	1f
15:	tst	r6, #15
	beq	2f
	tst	r6, #4
	beq	3f
	vld1.16	{d0[1]}, [r4]!
	add	r6, r6, #4
	add	sl, sl, #1
	sub	r0, r0, #1
3:	tst	r6, #8
	beq	4f
	vld1.16	{d0[2]}, [r4]!
	vld1.16	{d0[3]}, [r4]!
	add	r6, r6, #8
	add	sl, sl, #2
	sub	r0, r0, #2
4:	vld1.16	{d1}, [r4]!
	add	r6, r6, #16
	add	sl, sl, #4
	sub	r0, r0, #4
	vshrn.i16	d30, q0, #8
	vshrn.i16	d29, q0, #3
	vsli.16	q0, q0, #5
	vmov.i8	d31, #255
	vsri.8	d30, d30, #5
	vsri.8	d29, d29, #6
	vshrn.i16	d28, q0, #2
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r7
	pld	[fp, sl, lsl #1]
	subge	sl, sl, r7
	subsge	r9, r9, #16
	ldrbge	r8, [fp, r5, lsl #1]!
	vzip.8	d28, d30
	vzip.8	d29, d31
	vzip.8	d30, d31
	vzip.8	d28, d29
	tst	r2, #4
	beq	5f
	vst1.32	{d28[1]}, [r2]!
5:	tst	r2, #8
	beq	6f
	vst1.32	{d29}, [r2, :64]!
6:	vst1.32	{d30-d31}, [r2, :128]!
2:	vld1.16	{d0-d1}, [r4]!
	add	sl, sl, #8
	vshrn.i16	d30, q0, #8
	vshrn.i16	d29, q0, #3
	vsli.16	q0, q0, #5
	vmov.i8	d31, #255
	vsri.8	d30, d30, #5
	vsri.8	d29, d29, #6
	vshrn.i16	d28, q0, #2
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r7
	pld	[fp, sl, lsl #1]
	subge	sl, sl, r7
	subsge	r9, r9, #16
	ldrbge	r8, [fp, r5, lsl #1]!
	subs	r0, r0, #16
	blt	7f
8:	vst4.8	{d28-d31}, [r2, :128]!
	vld1.16	{d0-d1}, [r4]!
	vshrn.i16	d30, q0, #8
	vshrn.i16	d29, q0, #3
	vsli.16	q0, q0, #5
	vmov.i8	d31, #255
	vsri.8	d30, d30, #5
	vsri.8	d29, d29, #6
	vshrn.i16	d28, q0, #2
	add	sl, sl, #8
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r7
	pld	[fp, sl, lsl #1]
	subge	sl, sl, r7
	subsge	r9, r9, #16
	ldrbge	r8, [fp, r5, lsl #1]!
	subs	r0, r0, #8
	bge	8b
7:	vst4.8	{d28-d31}, [r2, :128]!
	tst	r0, #7
	beq	9f
	tst	r0, #4
	beq	10f
	vld1.16	{d1}, [r4]!
	add	sl, sl, #4
10:	tst	r0, #2
	beq	11f
	vld1.16	{d0[2]}, [r4]!
	vld1.16	{d0[3]}, [r4]!
	add	sl, sl, #2
11:	tst	r0, #1
	beq	12f
	vld1.16	{d0[1]}, [r4]!
	add	sl, sl, #1
12:	vshrn.i16	d30, q0, #8
	vshrn.i16	d29, q0, #3
	vsli.16	q0, q0, #5
	vmov.i8	d31, #255
	vsri.8	d30, d30, #5
	vsri.8	d29, d29, #6
	vshrn.i16	d28, q0, #2
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r7
	pld	[fp, sl, lsl #1]
	subge	sl, sl, r7
	subsge	r9, r9, #16
	ldrbge	r8, [fp, r5, lsl #1]!
	vzip.8	d28, d30
	vzip.8	d29, d31
	vzip.8	d30, d31
	vzip.8	d28, d29
	tst	r0, #4
	beq	13f
	vst1.32	{d30-d31}, [r2, :128]!
13:	tst	r0, #2
	beq	14f
	vst1.32	{d29}, [r2, :64]!
14:	tst	r0, #1
	beq	9f
	vst1.32	{d28[1]}, [r2]!
9:	mov	r0, r7
	add	r2, r2, r3, lsl #2
	add	r4, r4, r5, lsl #1
	sub	r2, r2, r0, lsl #2
	sub	r4, r4, r0, lsl #1
	subs	r1, r1, #1
	mov	r6, r2
	bge	15b
	pop	{r4, r5, r6, r7, r8, r9, sl, fp, ip, pc}
1:	tst	r0, #8
	beq	16f
	vld1.16	{d0-d1}, [r4]!
	vshrn.i16	d30, q0, #8
	vshrn.i16	d29, q0, #3
	vsli.16	q0, q0, #5
	vmov.i8	d31, #255
	vsri.8	d30, d30, #5
	vsri.8	d29, d29, #6
	vshrn.i16	d28, q0, #2
	vst4.8	{d28-d31}, [r2]!
16:	tst	r0, #7
	beq	17f
	tst	r0, #4
	beq	18f
	vld1.16	{d1}, [r4]!
18:	tst	r0, #2
	beq	19f
	vld1.16	{d0[2]}, [r4]!
	vld1.16	{d0[3]}, [r4]!
19:	tst	r0, #1
	beq	20f
	vld1.16	{d0[1]}, [r4]!
20:	vshrn.i16	d30, q0, #8
	vshrn.i16	d29, q0, #3
	vsli.16	q0, q0, #5
	vmov.i8	d31, #255
	vsri.8	d30, d30, #5
	vsri.8	d29, d29, #6
	vshrn.i16	d28, q0, #2
	vzip.8	d28, d30
	vzip.8	d29, d31
	vzip.8	d30, d31
	vzip.8	d28, d29
	tst	r0, #4
	beq	21f
	vst1.32	{d30-d31}, [r2]!
21:	tst	r0, #2
	beq	22f
	vst1.32	{d29}, [r2]!
22:	tst	r0, #1
	beq	17f
	vst1.32	{d28[1]}, [r2]!
17:	mov	r0, r7
	add	r2, r2, r3, lsl #2
	add	r4, r4, r5, lsl #1
	sub	r2, r2, r0, lsl #2
	sub	r4, r4, r0, lsl #1
	subs	r1, r1, #1
	mov	r6, r2
	bge	1b
0:	pop	{r4, r5, r6, r7, r8, r9, sl, fp, ip, pc}

.global _pixman_composite_src_0888_8888_rev_asm_neon
_pixman_composite_src_0888_8888_rev_asm_neon:
	push	{r4, r5, r6, r7, r8, r9, sl, fp, ip, lr}
	ldr	r4, [sp, #40]
	ldr	r5, [sp, #44]
	mov	r6, r2
	sub	r5, r5, r0
	sub	r5, r5, r0, lsl #1
	veor	d3, d3, d3
	subs	r1, r1, #1
	mov	sl, r0
	blt	0f
	cmp	r0, #16
	blt	1f
15:	tst	r6, #15
	beq	2f
	tst	r6, #4
	beq	3f
	vld3.8	{d0[1],d1[1],d2[1]}, [r4]!
	add	r6, r6, #4
	sub	r0, r0, #1
3:	tst	r6, #8
	beq	4f
	vld3.8	{d0[2],d1[2],d2[2]}, [r4]!
	vld3.8	{d0[3],d1[3],d2[3]}, [r4]!
	add	r6, r6, #8
	sub	r0, r0, #2
4:	vld3.8	{d0[4],d1[4],d2[4]}, [r4]!
	vld3.8	{d0[5],d1[5],d2[5]}, [r4]!
	vld3.8	{d0[6],d1[6],d2[6]}, [r4]!
	vld3.8	{d0[7],d1[7],d2[7]}, [r4]!
	add	r6, r6, #16
	sub	r0, r0, #4
	vswp	d0, d2
	pld	[r4, #192]
	vzip.8	d0, d2
	vzip.8	d1, d3
	vzip.8	d2, d3
	vzip.8	d0, d1
	tst	r2, #4
	beq	5f
	vst1.32	{d0[1]}, [r2]!
5:	tst	r2, #8
	beq	6f
	vst1.32	{d1}, [r2, :64]!
6:	vst1.32	{d2-d3}, [r2, :128]!
2:	vld3.8	{d0-d2}, [r4]!
	vswp	d0, d2
	pld	[r4, #192]
	subs	r0, r0, #16
	blt	7f
8:	vst4.8	{d0-d3}, [r2]!
	vld3.8	{d0-d2}, [r4]!
	vswp	d0, d2
	pld	[r4, #192]
	subs	r0, r0, #8
	bge	8b
7:	vst4.8	{d0-d3}, [r2, :128]!
	tst	r0, #7
	beq	9f
	tst	r0, #4
	beq	10f
	vld3.8	{d0[4],d1[4],d2[4]}, [r4]!
	vld3.8	{d0[5],d1[5],d2[5]}, [r4]!
	vld3.8	{d0[6],d1[6],d2[6]}, [r4]!
	vld3.8	{d0[7],d1[7],d2[7]}, [r4]!
10:	tst	r0, #2
	beq	11f
	vld3.8	{d0[2],d1[2],d2[2]}, [r4]!
	vld3.8	{d0[3],d1[3],d2[3]}, [r4]!
11:	tst	r0, #1
	beq	12f
	vld3.8	{d0[1],d1[1],d2[1]}, [r4]!
12:	vswp	d0, d2
	pld	[r4, #192]
	vzip.8	d0, d2
	vzip.8	d1, d3
	vzip.8	d2, d3
	vzip.8	d0, d1
	tst	r0, #4
	beq	13f
	vst1.32	{d2-d3}, [r2, :128]!
13:	tst	r0, #2
	beq	14f
	vst1.32	{d1}, [r2, :64]!
14:	tst	r0, #1
	beq	9f
	vst1.32	{d0[1]}, [r2]!
9:	mov	r0, sl
	add	r2, r2, r3, lsl #2
	add	r4, r4, r5
	sub	r2, r2, r0, lsl #2
	subs	r1, r1, #1
	mov	r6, r2
	bge	15b
	pop	{r4, r5, r6, r7, r8, r9, sl, fp, ip, pc}
1:	tst	r0, #8
	beq	16f
	vld3.8	{d0-d2}, [r4]!
	vswp	d0, d2
	vst4.8	{d0-d3}, [r2]!
16:	tst	r0, #7
	beq	17f
	tst	r0, #4
	beq	18f
	vld3.8	{d0[4],d1[4],d2[4]}, [r4]!
	vld3.8	{d0[5],d1[5],d2[5]}, [r4]!
	vld3.8	{d0[6],d1[6],d2[6]}, [r4]!
	vld3.8	{d0[7],d1[7],d2[7]}, [r4]!
18:	tst	r0, #2
	beq	19f
	vld3.8	{d0[2],d1[2],d2[2]}, [r4]!
	vld3.8	{d0[3],d1[3],d2[3]}, [r4]!
19:	tst	r0, #1
	beq	20f
	vld3.8	{d0[1],d1[1],d2[1]}, [r4]!
20:	vswp	d0, d2
	vzip.8	d0, d2
	vzip.8	d1, d3
	vzip.8	d2, d3
	vzip.8	d0, d1
	tst	r0, #4
	beq	21f
	vst1.32	{d2-d3}, [r2]!
21:	tst	r0, #2
	beq	22f
	vst1.32	{d1}, [r2]!
22:	tst	r0, #1
	beq	17f
	vst1.32	{d0[1]}, [r2]!
17:	mov	r0, sl
	add	r2, r2, r3, lsl #2
	add	r4, r4, r5
	sub	r2, r2, r0, lsl #2
	subs	r1, r1, #1
	mov	r6, r2
	bge	1b
0:	pop	{r4, r5, r6, r7, r8, r9, sl, fp, ip, pc}

.global _pixman_composite_add_8_8_asm_neon
_pixman_composite_add_8_8_asm_neon:
	push	{r4, r5, r6, r7, r8, r9, sl, fp, ip, lr}
	ldr	r4, [sp, #40]
	mov	sl, #0
	ldr	r5, [sp, #44]
	mov	r6, r2
	mov	fp, r4
	mov	ip, r6
	mov	lr, r7
	lsl	r9, r1, #4
	sub	r9, r9, #6
	subs	r1, r1, #1
	mov	r7, r0
	blt	0f
	cmp	r0, #64
	blt	1f
23:	tst	r6, #15
	beq	2f
	tst	r6, #1
	beq	3f
	vld1.8	{d0[1]}, [r4]!
	vld1.8	{d4[1]}, [r6]!
	add	sl, sl, #1
	sub	r0, r0, #1
3:	tst	r6, #2
	beq	4f
	vld1.8	{d0[2]}, [r4]!
	vld1.8	{d0[3]}, [r4]!
	vld1.8	{d4[2]}, [r6]!
	vld1.8	{d4[3]}, [r6]!
	add	sl, sl, #2
	sub	r0, r0, #2
4:	tst	r6, #4
	beq	5f
	vld1.8	{d0[4]}, [r4]!
	vld1.8	{d0[5]}, [r4]!
	vld1.8	{d0[6]}, [r4]!
	vld1.8	{d0[7]}, [r4]!
	vld1.8	{d4[4]}, [r6]!
	vld1.8	{d4[5]}, [r6]!
	vld1.8	{d4[6]}, [r6]!
	vld1.8	{d4[7]}, [r6]!
	add	sl, sl, #4
	sub	r0, r0, #4
5:	tst	r6, #8
	beq	6f
	vld1.8	{d1}, [r4]!
	vld1.8	{d5}, [r6, :64]!
	add	sl, sl, #8
	sub	r0, r0, #8
6:	vld1.8	{d2-d3}, [r4]!
	vld1.8	{d6-d7}, [r6, :128]!
	add	sl, sl, #16
	sub	r0, r0, #16
	vqadd.u8	q14, q0, q2
	vqadd.u8	q15, q1, q3
	tst	r9, #15
	addne	sl, sl, #32
	subne	r9, r9, #1
	cmp	sl, r7
	pld	[fp, sl]
	pld	[ip, sl]
	subge	sl, sl, r7
	subsge	r9, r9, #16
	ldrbge	r8, [fp, r5]!
	ldrbge	r8, [ip, r3]!
	tst	r2, #1
	beq	7f
	vst1.8	{d28[1]}, [r2]!
7:	tst	r2, #2
	beq	8f
	vst1.8	{d28[2]}, [r2]!
	vst1.8	{d28[3]}, [r2]!
8:	tst	r2, #4
	beq	9f
	vst1.8	{d28[4]}, [r2]!
	vst1.8	{d28[5]}, [r2]!
	vst1.8	{d28[6]}, [r2]!
	vst1.8	{d28[7]}, [r2]!
9:	tst	r2, #8
	beq	10f
	vst1.8	{d29}, [r2, :64]!
10:	vst1.8	{d30-d31}, [r2, :128]!
2:	vld1.8	{d4-d7}, [r6, :128]!
	vld1.8	{d0-d3}, [r4]!
	add	sl, sl, #32
	vqadd.u8	q14, q0, q2
	vqadd.u8	q15, q1, q3
	tst	r9, #15
	addne	sl, sl, #32
	subne	r9, r9, #1
	cmp	sl, r7
	pld	[fp, sl]
	pld	[ip, sl]
	subge	sl, sl, r7
	subsge	r9, r9, #16
	ldrbge	r8, [fp, r5]!
	ldrbge	r8, [ip, r3]!
	subs	r0, r0, #64
	blt	11f
12:	vld1.8	{d0-d3}, [r4]!
	add	sl, sl, #32
	tst	r9, #15
	vld1.8	{d4-d7}, [r6, :128]!
	addne	sl, sl, #32
	subne	r9, r9, #1
	vst1.8	{d28-d31}, [r2, :128]!
	cmp	sl, r7
	pld	[fp, sl]
	pld	[ip, sl]
	subge	sl, sl, r7
	subsge	r9, r9, #16
	vqadd.u8	q14, q0, q2
	ldrbge	r8, [fp, r5]!
	ldrbge	r8, [ip, r3]!
	vqadd.u8	q15, q1, q3
	subs	r0, r0, #32
	bge	12b
11:	vst1.8	{d28-d31}, [r2, :128]!
	tst	r0, #31
	beq	13f
	tst	r0, #16
	beq	14f
	vld1.8	{d2-d3}, [r4]!
	vld1.8	{d6-d7}, [r6, :128]!
	add	sl, sl, #16
14:	tst	r0, #8
	beq	15f
	vld1.8	{d1}, [r4]!
	vld1.8	{d5}, [r6, :64]!
	add	sl, sl, #8
15:	tst	r0, #4
	beq	16f
	vld1.8	{d0[4]}, [r4]!
	vld1.8	{d0[5]}, [r4]!
	vld1.8	{d0[6]}, [r4]!
	vld1.8	{d0[7]}, [r4]!
	vld1.8	{d4[4]}, [r6]!
	vld1.8	{d4[5]}, [r6]!
	vld1.8	{d4[6]}, [r6]!
	vld1.8	{d4[7]}, [r6]!
	add	sl, sl, #4
16:	tst	r0, #2
	beq	17f
	vld1.8	{d0[2]}, [r4]!
	vld1.8	{d0[3]}, [r4]!
	vld1.8	{d4[2]}, [r6]!
	vld1.8	{d4[3]}, [r6]!
	add	sl, sl, #2
17:	tst	r0, #1
	beq	18f
	vld1.8	{d0[1]}, [r4]!
	vld1.8	{d4[1]}, [r6]!
	add	sl, sl, #1
18:	vqadd.u8	q14, q0, q2
	vqadd.u8	q15, q1, q3
	tst	r9, #15
	addne	sl, sl, #32
	subne	r9, r9, #1
	cmp	sl, r7
	pld	[fp, sl]
	pld	[ip, sl]
	subge	sl, sl, r7
	subsge	r9, r9, #16
	ldrbge	r8, [fp, r5]!
	ldrbge	r8, [ip, r3]!
	tst	r0, #16
	beq	19f
	vst1.8	{d30-d31}, [r2, :128]!
19:	tst	r0, #8
	beq	20f
	vst1.8	{d29}, [r2, :64]!
20:	tst	r0, #4
	beq	21f
	vst1.8	{d28[4]}, [r2]!
	vst1.8	{d28[5]}, [r2]!
	vst1.8	{d28[6]}, [r2]!
	vst1.8	{d28[7]}, [r2]!
21:	tst	r0, #2
	beq	22f
	vst1.8	{d28[2]}, [r2]!
	vst1.8	{d28[3]}, [r2]!
22:	tst	r0, #1
	beq	13f
	vst1.8	{d28[1]}, [r2]!
13:	mov	r0, r7
	add	r2, r2, r3
	add	r4, r4, r5
	sub	r2, r2, r0
	sub	r4, r4, r0
	subs	r1, r1, #1
	mov	r6, r2
	bge	23b
	pop	{r4, r5, r6, r7, r8, r9, sl, fp, ip, pc}
1:	tst	r0, #32
	beq	24f
	vld1.8	{d4-d7}, [r6]!
	vld1.8	{d0-d3}, [r4]!
	vqadd.u8	q14, q0, q2
	vqadd.u8	q15, q1, q3
	vst1.8	{d28-d31}, [r2]!
24:	tst	r0, #31
	beq	25f
	tst	r0, #16
	beq	26f
	vld1.8	{d2-d3}, [r4]!
	vld1.8	{d6-d7}, [r6]!
26:	tst	r0, #8
	beq	27f
	vld1.8	{d1}, [r4]!
	vld1.8	{d5}, [r6]!
27:	tst	r0, #4
	beq	28f
	vld1.8	{d0[4]}, [r4]!
	vld1.8	{d0[5]}, [r4]!
	vld1.8	{d0[6]}, [r4]!
	vld1.8	{d0[7]}, [r4]!
	vld1.8	{d4[4]}, [r6]!
	vld1.8	{d4[5]}, [r6]!
	vld1.8	{d4[6]}, [r6]!
	vld1.8	{d4[7]}, [r6]!
28:	tst	r0, #2
	beq	29f
	vld1.8	{d0[2]}, [r4]!
	vld1.8	{d0[3]}, [r4]!
	vld1.8	{d4[2]}, [r6]!
	vld1.8	{d4[3]}, [r6]!
29:	tst	r0, #1
	beq	30f
	vld1.8	{d0[1]}, [r4]!
	vld1.8	{d4[1]}, [r6]!
30:	vqadd.u8	q14, q0, q2
	vqadd.u8	q15, q1, q3
	tst	r0, #16
	beq	31f
	vst1.8	{d30-d31}, [r2]!
31:	tst	r0, #8
	beq	32f
	vst1.8	{d29}, [r2]!
32:	tst	r0, #4
	beq	33f
	vst1.8	{d28[4]}, [r2]!
	vst1.8	{d28[5]}, [r2]!
	vst1.8	{d28[6]}, [r2]!
	vst1.8	{d28[7]}, [r2]!
33:	tst	r0, #2
	beq	34f
	vst1.8	{d28[2]}, [r2]!
	vst1.8	{d28[3]}, [r2]!
34:	tst	r0, #1
	beq	25f
	vst1.8	{d28[1]}, [r2]!
25:	mov	r0, r7
	add	r2, r2, r3
	add	r4, r4, r5
	sub	r2, r2, r0
	sub	r4, r4, r0
	subs	r1, r1, #1
	mov	r6, r2
	bge	1b
0:	pop	{r4, r5, r6, r7, r8, r9, sl, fp, ip, pc}

.global _pixman_composite_over_n_8888_8888_ca_asm_neon
_pixman_composite_over_n_8888_8888_ca_asm_neon:
	push	{r4, r5, r6, r7, r8, r9, sl, fp, ip, lr}
	ldr	r7, [sp, #48]
	mov	sl, #0
	ldr	r8, [sp, #52]
	mov	r6, r2
	mov	fp, r4
	mov	ip, r6
	mov	lr, r7
	lsl	r9, r1, #4
	sub	r9, r9, #11
	add	r5, sp, #40
	vstmdb	sp!, {d8-d15}
	vld1.32	{d11[0]}, [r5]
	vdup.8	d8, d11[0]
	vdup.8	d9, d11[1]
	vdup.8	d10, d11[2]
	vdup.8	d11, d11[3]
	subs	r1, r1, #1
	mov	r4, r0
	blt	0f
	cmp	r0, #16
	blt	1f
15:	tst	r6, #15
	beq	2f
	tst	r6, #4
	beq	3f
	vld1.32	{d24[1]}, [r7]!
	vld1.32	{d4[1]}, [r6]!
	add	sl, sl, #1
	sub	r0, r0, #1
3:	tst	r6, #8
	beq	4f
	vld1.32	{d25}, [r7]!
	vld1.32	{d5}, [r6, :64]!
	add	sl, sl, #2
	sub	r0, r0, #2
4:	vld1.32	{d26-d27}, [r7]!
	vld1.32	{d6-d7}, [r6, :128]!
	add	sl, sl, #4
	sub	r0, r0, #4
	vuzp.8	d24, d25
	vuzp.8	d26, d27
	vuzp.8	d25, d27
	vuzp.8	d24, d26
	vuzp.8	d4, d5
	vuzp.8	d6, d7
	vuzp.8	d5, d7
	vuzp.8	d4, d6
	vmull.u8	q0, d24, d8
	vmull.u8	q1, d25, d9
	vmull.u8	q6, d26, d10
	vmull.u8	q7, d27, d11
	vmull.u8	q9, d11, d25
	vmull.u8	q12, d11, d24
	vmull.u8	q13, d11, d26
	vrshr.u16	q8, q0, #8
	vrshr.u16	q10, q1, #8
	vrshr.u16	q11, q6, #8
	vraddhn.i16	d0, q0, q8
	vraddhn.i16	d1, q1, q10
	vraddhn.i16	d2, q6, q11
	vrshr.u16	q11, q12, #8
	vrshr.u16	q8, q9, #8
	vrshr.u16	q6, q13, #8
	vrshr.u16	q10, q7, #8
	vraddhn.i16	d24, q12, q11
	vraddhn.i16	d25, q9, q8
	vraddhn.i16	d26, q13, q6
	vraddhn.i16	d3, q7, q10
	vmvn	q12, q12
	vmvn	d26, d26
	vmull.u8	q8, d24, d4
	vmull.u8	q9, d25, d5
	vmvn	d27, d3
	vmull.u8	q10, d26, d6
	vmull.u8	q11, d27, d7
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r4
	pld	[ip, sl, lsl #2]
	pld	[lr, sl, lsl #2]
	subge	sl, sl, r4
	subsge	r9, r9, #16
	ldrbge	r5, [ip, r3, lsl #2]!
	ldrbge	r5, [lr, r8, lsl #2]!
	vrshr.u16	q14, q8, #8
	vrshr.u16	q15, q9, #8
	vrshr.u16	q6, q10, #8
	vrshr.u16	q7, q11, #8
	vraddhn.i16	d28, q14, q8
	vraddhn.i16	d29, q15, q9
	vraddhn.i16	d30, q6, q10
	vraddhn.i16	d31, q7, q11
	vqadd.u8	q14, q0, q14
	vqadd.u8	q15, q1, q15
	vzip.8	d28, d30
	vzip.8	d29, d31
	vzip.8	d30, d31
	vzip.8	d28, d29
	tst	r2, #4
	beq	5f
	vst1.32	{d28[1]}, [r2]!
5:	tst	r2, #8
	beq	6f
	vst1.32	{d29}, [r2, :64]!
6:	vst1.32	{d30-d31}, [r2, :128]!
2:	vld4.8	{d4-d7}, [r6, :128]!
	vld4.8	{d24-d27}, [r7]!
	add	sl, sl, #8
	vmull.u8	q0, d24, d8
	vmull.u8	q1, d25, d9
	vmull.u8	q6, d26, d10
	vmull.u8	q7, d27, d11
	vmull.u8	q9, d11, d25
	vmull.u8	q12, d11, d24
	vmull.u8	q13, d11, d26
	vrshr.u16	q8, q0, #8
	vrshr.u16	q10, q1, #8
	vrshr.u16	q11, q6, #8
	vraddhn.i16	d0, q0, q8
	vraddhn.i16	d1, q1, q10
	vraddhn.i16	d2, q6, q11
	vrshr.u16	q11, q12, #8
	vrshr.u16	q8, q9, #8
	vrshr.u16	q6, q13, #8
	vrshr.u16	q10, q7, #8
	vraddhn.i16	d24, q12, q11
	vraddhn.i16	d25, q9, q8
	vraddhn.i16	d26, q13, q6
	vraddhn.i16	d3, q7, q10
	vmvn	q12, q12
	vmvn	d26, d26
	vmull.u8	q8, d24, d4
	vmull.u8	q9, d25, d5
	vmvn	d27, d3
	vmull.u8	q10, d26, d6
	vmull.u8	q11, d27, d7
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r4
	pld	[ip, sl, lsl #2]
	pld	[lr, sl, lsl #2]
	subge	sl, sl, r4
	subsge	r9, r9, #16
	ldrbge	r5, [ip, r3, lsl #2]!
	ldrbge	r5, [lr, r8, lsl #2]!
	subs	r0, r0, #16
	blt	7f
8:	vrshr.u16	q14, q8, #8
	vrshr.u16	q15, q9, #8
	vld4.8	{d4-d7}, [r6, :128]!
	vrshr.u16	q6, q10, #8
	vrshr.u16	q7, q11, #8
	vraddhn.i16	d28, q14, q8
	vraddhn.i16	d29, q15, q9
	vraddhn.i16	d30, q6, q10
	vraddhn.i16	d31, q7, q11
	vld4.8	{d24-d27}, [r7]!
	vqadd.u8	q14, q0, q14
	vqadd.u8	q15, q1, q15
	add	sl, sl, #8
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r4
	pld	[ip, sl, lsl #2]
	pld	[lr, sl, lsl #2]
	subge	sl, sl, r4
	subsge	r9, r9, #16
	ldrbge	r5, [ip, r3, lsl #2]!
	ldrbge	r5, [lr, r8, lsl #2]!
	vmull.u8	q0, d24, d8
	vmull.u8	q1, d25, d9
	vmull.u8	q6, d26, d10
	vmull.u8	q7, d27, d11
	vmull.u8	q9, d11, d25
	vmull.u8	q12, d11, d24
	vmull.u8	q13, d11, d26
	vrshr.u16	q8, q0, #8
	vrshr.u16	q10, q1, #8
	vrshr.u16	q11, q6, #8
	vraddhn.i16	d0, q0, q8
	vraddhn.i16	d1, q1, q10
	vraddhn.i16	d2, q6, q11
	vrshr.u16	q11, q12, #8
	vrshr.u16	q8, q9, #8
	vrshr.u16	q6, q13, #8
	vrshr.u16	q10, q7, #8
	vraddhn.i16	d24, q12, q11
	vraddhn.i16	d25, q9, q8
	vraddhn.i16	d26, q13, q6
	vraddhn.i16	d3, q7, q10
	vmvn	q12, q12
	vmvn	d26, d26
	vmull.u8	q8, d24, d4
	vmull.u8	q9, d25, d5
	vmvn	d27, d3
	vmull.u8	q10, d26, d6
	vmull.u8	q11, d27, d7
	vst4.8	{d28-d31}, [r2, :128]!
	subs	r0, r0, #8
	bge	8b
7:	vrshr.u16	q14, q8, #8
	vrshr.u16	q15, q9, #8
	vrshr.u16	q6, q10, #8
	vrshr.u16	q7, q11, #8
	vraddhn.i16	d28, q14, q8
	vraddhn.i16	d29, q15, q9
	vraddhn.i16	d30, q6, q10
	vraddhn.i16	d31, q7, q11
	vqadd.u8	q14, q0, q14
	vqadd.u8	q15, q1, q15
	vst4.8	{d28-d31}, [r2, :128]!
	tst	r0, #7
	beq	9f
	tst	r0, #4
	beq	10f
	vld1.32	{d26-d27}, [r7]!
	vld1.32	{d6-d7}, [r6, :128]!
	add	sl, sl, #4
10:	tst	r0, #2
	beq	11f
	vld1.32	{d25}, [r7]!
	vld1.32	{d5}, [r6, :64]!
	add	sl, sl, #2
11:	tst	r0, #1
	beq	12f
	vld1.32	{d24[1]}, [r7]!
	vld1.32	{d4[1]}, [r6]!
	add	sl, sl, #1
12:	vuzp.8	d24, d25
	vuzp.8	d26, d27
	vuzp.8	d25, d27
	vuzp.8	d24, d26
	vuzp.8	d4, d5
	vuzp.8	d6, d7
	vuzp.8	d5, d7
	vuzp.8	d4, d6
	vmull.u8	q0, d24, d8
	vmull.u8	q1, d25, d9
	vmull.u8	q6, d26, d10
	vmull.u8	q7, d27, d11
	vmull.u8	q9, d11, d25
	vmull.u8	q12, d11, d24
	vmull.u8	q13, d11, d26
	vrshr.u16	q8, q0, #8
	vrshr.u16	q10, q1, #8
	vrshr.u16	q11, q6, #8
	vraddhn.i16	d0, q0, q8
	vraddhn.i16	d1, q1, q10
	vraddhn.i16	d2, q6, q11
	vrshr.u16	q11, q12, #8
	vrshr.u16	q8, q9, #8
	vrshr.u16	q6, q13, #8
	vrshr.u16	q10, q7, #8
	vraddhn.i16	d24, q12, q11
	vraddhn.i16	d25, q9, q8
	vraddhn.i16	d26, q13, q6
	vraddhn.i16	d3, q7, q10
	vmvn	q12, q12
	vmvn	d26, d26
	vmull.u8	q8, d24, d4
	vmull.u8	q9, d25, d5
	vmvn	d27, d3
	vmull.u8	q10, d26, d6
	vmull.u8	q11, d27, d7
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r4
	pld	[ip, sl, lsl #2]
	pld	[lr, sl, lsl #2]
	subge	sl, sl, r4
	subsge	r9, r9, #16
	ldrbge	r5, [ip, r3, lsl #2]!
	ldrbge	r5, [lr, r8, lsl #2]!
	vrshr.u16	q14, q8, #8
	vrshr.u16	q15, q9, #8
	vrshr.u16	q6, q10, #8
	vrshr.u16	q7, q11, #8
	vraddhn.i16	d28, q14, q8
	vraddhn.i16	d29, q15, q9
	vraddhn.i16	d30, q6, q10
	vraddhn.i16	d31, q7, q11
	vqadd.u8	q14, q0, q14
	vqadd.u8	q15, q1, q15
	vzip.8	d28, d30
	vzip.8	d29, d31
	vzip.8	d30, d31
	vzip.8	d28, d29
	tst	r0, #4
	beq	13f
	vst1.32	{d30-d31}, [r2, :128]!
13:	tst	r0, #2
	beq	14f
	vst1.32	{d29}, [r2, :64]!
14:	tst	r0, #1
	beq	9f
	vst1.32	{d28[1]}, [r2]!
9:	mov	r0, r4
	add	r2, r2, r3, lsl #2
	add	r7, r7, r8, lsl #2
	sub	r2, r2, r0, lsl #2
	sub	r7, r7, r0, lsl #2
	subs	r1, r1, #1
	mov	r6, r2
	bge	15b
	vldmia	sp!, {d8-d15}
	pop	{r4, r5, r6, r7, r8, r9, sl, fp, ip, pc}
1:	tst	r0, #8
	beq	16f
	vld4.8	{d4-d7}, [r6]!
	vld4.8	{d24-d27}, [r7]!
	vmull.u8	q0, d24, d8
	vmull.u8	q1, d25, d9
	vmull.u8	q6, d26, d10
	vmull.u8	q7, d27, d11
	vmull.u8	q9, d11, d25
	vmull.u8	q12, d11, d24
	vmull.u8	q13, d11, d26
	vrshr.u16	q8, q0, #8
	vrshr.u16	q10, q1, #8
	vrshr.u16	q11, q6, #8
	vraddhn.i16	d0, q0, q8
	vraddhn.i16	d1, q1, q10
	vraddhn.i16	d2, q6, q11
	vrshr.u16	q11, q12, #8
	vrshr.u16	q8, q9, #8
	vrshr.u16	q6, q13, #8
	vrshr.u16	q10, q7, #8
	vraddhn.i16	d24, q12, q11
	vraddhn.i16	d25, q9, q8
	vraddhn.i16	d26, q13, q6
	vraddhn.i16	d3, q7, q10
	vmvn	q12, q12
	vmvn	d26, d26
	vmull.u8	q8, d24, d4
	vmull.u8	q9, d25, d5
	vmvn	d27, d3
	vmull.u8	q10, d26, d6
	vmull.u8	q11, d27, d7
	vrshr.u16	q14, q8, #8
	vrshr.u16	q15, q9, #8
	vrshr.u16	q6, q10, #8
	vrshr.u16	q7, q11, #8
	vraddhn.i16	d28, q14, q8
	vraddhn.i16	d29, q15, q9
	vraddhn.i16	d30, q6, q10
	vraddhn.i16	d31, q7, q11
	vqadd.u8	q14, q0, q14
	vqadd.u8	q15, q1, q15
	vst4.8	{d28-d31}, [r2]!
16:	tst	r0, #7
	beq	17f
	tst	r0, #4
	beq	18f
	vld1.32	{d26-d27}, [r7]!
	vld1.32	{d6-d7}, [r6]!
18:	tst	r0, #2
	beq	19f
	vld1.32	{d25}, [r7]!
	vld1.32	{d5}, [r6]!
19:	tst	r0, #1
	beq	20f
	vld1.32	{d24[1]}, [r7]!
	vld1.32	{d4[1]}, [r6]!
20:	vuzp.8	d24, d25
	vuzp.8	d26, d27
	vuzp.8	d25, d27
	vuzp.8	d24, d26
	vuzp.8	d4, d5
	vuzp.8	d6, d7
	vuzp.8	d5, d7
	vuzp.8	d4, d6
	vmull.u8	q0, d24, d8
	vmull.u8	q1, d25, d9
	vmull.u8	q6, d26, d10
	vmull.u8	q7, d27, d11
	vmull.u8	q9, d11, d25
	vmull.u8	q12, d11, d24
	vmull.u8	q13, d11, d26
	vrshr.u16	q8, q0, #8
	vrshr.u16	q10, q1, #8
	vrshr.u16	q11, q6, #8
	vraddhn.i16	d0, q0, q8
	vraddhn.i16	d1, q1, q10
	vraddhn.i16	d2, q6, q11
	vrshr.u16	q11, q12, #8
	vrshr.u16	q8, q9, #8
	vrshr.u16	q6, q13, #8
	vrshr.u16	q10, q7, #8
	vraddhn.i16	d24, q12, q11
	vraddhn.i16	d25, q9, q8
	vraddhn.i16	d26, q13, q6
	vraddhn.i16	d3, q7, q10
	vmvn	q12, q12
	vmvn	d26, d26
	vmull.u8	q8, d24, d4
	vmull.u8	q9, d25, d5
	vmvn	d27, d3
	vmull.u8	q10, d26, d6
	vmull.u8	q11, d27, d7
	vrshr.u16	q14, q8, #8
	vrshr.u16	q15, q9, #8
	vrshr.u16	q6, q10, #8
	vrshr.u16	q7, q11, #8
	vraddhn.i16	d28, q14, q8
	vraddhn.i16	d29, q15, q9
	vraddhn.i16	d30, q6, q10
	vraddhn.i16	d31, q7, q11
	vqadd.u8	q14, q0, q14
	vqadd.u8	q15, q1, q15
	vzip.8	d28, d30
	vzip.8	d29, d31
	vzip.8	d30, d31
	vzip.8	d28, d29
	tst	r0, #4
	beq	21f
	vst1.32	{d30-d31}, [r2]!
21:	tst	r0, #2
	beq	22f
	vst1.32	{d29}, [r2]!
22:	tst	r0, #1
	beq	17f
	vst1.32	{d28[1]}, [r2]!
17:	mov	r0, r4
	add	r2, r2, r3, lsl #2
	add	r7, r7, r8, lsl #2
	sub	r2, r2, r0, lsl #2
	sub	r7, r7, r0, lsl #2
	subs	r1, r1, #1
	mov	r6, r2
	bge	1b
0:	vldmia	sp!, {d8-d15}
	pop	{r4, r5, r6, r7, r8, r9, sl, fp, ip, pc}

.global _pixman_composite_add_8_8_8_asm_neon
_pixman_composite_add_8_8_8_asm_neon:
	push	{r4, r5, r6, r7, r8, r9, sl, fp, ip, lr}
	ldr	r4, [sp, #40]
	ldr	r7, [sp, #48]
	mov	sl, #0
	ldr	r5, [sp, #44]
	ldr	r8, [sp, #52]
	mov	r6, r2
	mov	fp, r4
	mov	ip, r6
	mov	lr, r7
	lsl	r9, r1, #4
	sub	r9, r9, #11
	push	{r0, r1}
	subs	r1, r1, #1
	str	r1, [sp, #4]
	blt	0f
	cmp	r0, #64
	blt	1f
23:	tst	r6, #15
	beq	2f
	tst	r6, #1
	beq	3f
	vld1.8	{d0[1]}, [r4]!
	vld1.8	{d24[1]}, [r7]!
	vld1.8	{d4[1]}, [r6]!
	add	sl, sl, #1
	sub	r0, r0, #1
3:	tst	r6, #2
	beq	4f
	vld1.8	{d0[2]}, [r4]!
	vld1.8	{d0[3]}, [r4]!
	vld1.8	{d24[2]}, [r7]!
	vld1.8	{d24[3]}, [r7]!
	vld1.8	{d4[2]}, [r6]!
	vld1.8	{d4[3]}, [r6]!
	add	sl, sl, #2
	sub	r0, r0, #2
4:	tst	r6, #4
	beq	5f
	vld1.8	{d0[4]}, [r4]!
	vld1.8	{d0[5]}, [r4]!
	vld1.8	{d0[6]}, [r4]!
	vld1.8	{d0[7]}, [r4]!
	vld1.8	{d24[4]}, [r7]!
	vld1.8	{d24[5]}, [r7]!
	vld1.8	{d24[6]}, [r7]!
	vld1.8	{d24[7]}, [r7]!
	vld1.8	{d4[4]}, [r6]!
	vld1.8	{d4[5]}, [r6]!
	vld1.8	{d4[6]}, [r6]!
	vld1.8	{d4[7]}, [r6]!
	add	sl, sl, #4
	sub	r0, r0, #4
5:	tst	r6, #8
	beq	6f
	vld1.8	{d1}, [r4]!
	vld1.8	{d25}, [r7]!
	vld1.8	{d5}, [r6, :64]!
	add	sl, sl, #8
	sub	r0, r0, #8
6:	vld1.8	{d2-d3}, [r4]!
	vld1.8	{d26-d27}, [r7]!
	vld1.8	{d6-d7}, [r6, :128]!
	add	sl, sl, #16
	sub	r0, r0, #16
	vmull.u8	q8, d24, d0
	vmull.u8	q9, d25, d1
	vmull.u8	q10, d26, d2
	vmull.u8	q11, d27, d3
	vrshr.u16	q0, q8, #8
	vrshr.u16	q1, q9, #8
	vrshr.u16	q12, q10, #8
	vrshr.u16	q13, q11, #8
	vraddhn.i16	d0, q0, q8
	vraddhn.i16	d1, q1, q9
	vraddhn.i16	d2, q12, q10
	vraddhn.i16	d3, q13, q11
	vqadd.u8	q14, q0, q2
	vqadd.u8	q15, q1, q3
	ldr	r1, [sp]
	tst	r9, #15
	addne	sl, sl, #32
	subne	r9, r9, #1
	cmp	sl, r1
	pld	[fp, sl]
	pld	[ip, sl]
	pld	[lr, sl]
	subge	sl, sl, r1
	subsge	r9, r9, #16
	ldrbge	r1, [fp, r5]!
	ldrbge	r1, [ip, r3]!
	ldrbge	r1, [lr, r8]!
	tst	r2, #1
	beq	7f
	vst1.8	{d28[1]}, [r2]!
7:	tst	r2, #2
	beq	8f
	vst1.8	{d28[2]}, [r2]!
	vst1.8	{d28[3]}, [r2]!
8:	tst	r2, #4
	beq	9f
	vst1.8	{d28[4]}, [r2]!
	vst1.8	{d28[5]}, [r2]!
	vst1.8	{d28[6]}, [r2]!
	vst1.8	{d28[7]}, [r2]!
9:	tst	r2, #8
	beq	10f
	vst1.8	{d29}, [r2, :64]!
10:	vst1.8	{d30-d31}, [r2, :128]!
2:	vld1.8	{d4-d7}, [r6, :128]!
	vld1.8	{d0-d3}, [r4]!
	vld1.8	{d24-d27}, [r7]!
	add	sl, sl, #32
	vmull.u8	q8, d24, d0
	vmull.u8	q9, d25, d1
	vmull.u8	q10, d26, d2
	vmull.u8	q11, d27, d3
	vrshr.u16	q0, q8, #8
	vrshr.u16	q1, q9, #8
	vrshr.u16	q12, q10, #8
	vrshr.u16	q13, q11, #8
	vraddhn.i16	d0, q0, q8
	vraddhn.i16	d1, q1, q9
	vraddhn.i16	d2, q12, q10
	vraddhn.i16	d3, q13, q11
	vqadd.u8	q14, q0, q2
	vqadd.u8	q15, q1, q3
	ldr	r1, [sp]
	tst	r9, #15
	addne	sl, sl, #32
	subne	r9, r9, #1
	cmp	sl, r1
	pld	[fp, sl]
	pld	[ip, sl]
	pld	[lr, sl]
	subge	sl, sl, r1
	subsge	r9, r9, #16
	ldrbge	r1, [fp, r5]!
	ldrbge	r1, [ip, r3]!
	ldrbge	r1, [lr, r8]!
	subs	r0, r0, #64
	blt	11f
12:	vst1.8	{d28-d31}, [r2, :128]!
	vld1.8	{d4-d7}, [r6, :128]!
	vld1.8	{d24-d27}, [r7]!
	vld1.8	{d0-d3}, [r4]!
	ldr	r1, [sp]
	add	sl, sl, #32
	tst	r9, #15
	addne	sl, sl, #32
	subne	r9, r9, #1
	cmp	sl, r1
	pld	[fp, sl]
	pld	[ip, sl]
	pld	[lr, sl]
	subge	sl, sl, r1
	subsge	r9, r9, #16
	ldrbge	r1, [fp, r5]!
	ldrbge	r1, [ip, r3]!
	ldrbge	r1, [lr, r8]!
	vmull.u8	q8, d24, d0
	vmull.u8	q9, d25, d1
	vmull.u8	q10, d26, d2
	vmull.u8	q11, d27, d3
	vrshr.u16	q0, q8, #8
	vrshr.u16	q1, q9, #8
	vrshr.u16	q12, q10, #8
	vrshr.u16	q13, q11, #8
	vraddhn.i16	d0, q0, q8
	vraddhn.i16	d1, q1, q9
	vraddhn.i16	d2, q12, q10
	vraddhn.i16	d3, q13, q11
	vqadd.u8	q14, q0, q2
	vqadd.u8	q15, q1, q3
	subs	r0, r0, #32
	bge	12b
11:	vst1.8	{d28-d31}, [r2, :128]!
	tst	r0, #31
	beq	13f
	tst	r0, #16
	beq	14f
	vld1.8	{d2-d3}, [r4]!
	vld1.8	{d26-d27}, [r7]!
	vld1.8	{d6-d7}, [r6, :128]!
	add	sl, sl, #16
14:	tst	r0, #8
	beq	15f
	vld1.8	{d1}, [r4]!
	vld1.8	{d25}, [r7]!
	vld1.8	{d5}, [r6, :64]!
	add	sl, sl, #8
15:	tst	r0, #4
	beq	16f
	vld1.8	{d0[4]}, [r4]!
	vld1.8	{d0[5]}, [r4]!
	vld1.8	{d0[6]}, [r4]!
	vld1.8	{d0[7]}, [r4]!
	vld1.8	{d24[4]}, [r7]!
	vld1.8	{d24[5]}, [r7]!
	vld1.8	{d24[6]}, [r7]!
	vld1.8	{d24[7]}, [r7]!
	vld1.8	{d4[4]}, [r6]!
	vld1.8	{d4[5]}, [r6]!
	vld1.8	{d4[6]}, [r6]!
	vld1.8	{d4[7]}, [r6]!
	add	sl, sl, #4
16:	tst	r0, #2
	beq	17f
	vld1.8	{d0[2]}, [r4]!
	vld1.8	{d0[3]}, [r4]!
	vld1.8	{d24[2]}, [r7]!
	vld1.8	{d24[3]}, [r7]!
	vld1.8	{d4[2]}, [r6]!
	vld1.8	{d4[3]}, [r6]!
	add	sl, sl, #2
17:	tst	r0, #1
	beq	18f
	vld1.8	{d0[1]}, [r4]!
	vld1.8	{d24[1]}, [r7]!
	vld1.8	{d4[1]}, [r6]!
	add	sl, sl, #1
18:	vmull.u8	q8, d24, d0
	vmull.u8	q9, d25, d1
	vmull.u8	q10, d26, d2
	vmull.u8	q11, d27, d3
	vrshr.u16	q0, q8, #8
	vrshr.u16	q1, q9, #8
	vrshr.u16	q12, q10, #8
	vrshr.u16	q13, q11, #8
	vraddhn.i16	d0, q0, q8
	vraddhn.i16	d1, q1, q9
	vraddhn.i16	d2, q12, q10
	vraddhn.i16	d3, q13, q11
	vqadd.u8	q14, q0, q2
	vqadd.u8	q15, q1, q3
	ldr	r1, [sp]
	tst	r9, #15
	addne	sl, sl, #32
	subne	r9, r9, #1
	cmp	sl, r1
	pld	[fp, sl]
	pld	[ip, sl]
	pld	[lr, sl]
	subge	sl, sl, r1
	subsge	r9, r9, #16
	ldrbge	r1, [fp, r5]!
	ldrbge	r1, [ip, r3]!
	ldrbge	r1, [lr, r8]!
	tst	r0, #16
	beq	19f
	vst1.8	{d30-d31}, [r2, :128]!
19:	tst	r0, #8
	beq	20f
	vst1.8	{d29}, [r2, :64]!
20:	tst	r0, #4
	beq	21f
	vst1.8	{d28[4]}, [r2]!
	vst1.8	{d28[5]}, [r2]!
	vst1.8	{d28[6]}, [r2]!
	vst1.8	{d28[7]}, [r2]!
21:	tst	r0, #2
	beq	22f
	vst1.8	{d28[2]}, [r2]!
	vst1.8	{d28[3]}, [r2]!
22:	tst	r0, #1
	beq	13f
	vst1.8	{d28[1]}, [r2]!
13:	ldrd	r0, [sp]
	add	r2, r2, r3
	add	r4, r4, r5
	add	r7, r7, r8
	sub	r2, r2, r0
	sub	r4, r4, r0
	sub	r7, r7, r0
	subs	r1, r1, #1
	mov	r6, r2
	str	r1, [sp, #4]
	bge	23b
	pop	{r0, r1}
	pop	{r4, r5, r6, r7, r8, r9, sl, fp, ip, pc}
1:	tst	r0, #32
	beq	24f
	vld1.8	{d4-d7}, [r6]!
	vld1.8	{d0-d3}, [r4]!
	vld1.8	{d24-d27}, [r7]!
	vmull.u8	q8, d24, d0
	vmull.u8	q9, d25, d1
	vmull.u8	q10, d26, d2
	vmull.u8	q11, d27, d3
	vrshr.u16	q0, q8, #8
	vrshr.u16	q1, q9, #8
	vrshr.u16	q12, q10, #8
	vrshr.u16	q13, q11, #8
	vraddhn.i16	d0, q0, q8
	vraddhn.i16	d1, q1, q9
	vraddhn.i16	d2, q12, q10
	vraddhn.i16	d3, q13, q11
	vqadd.u8	q14, q0, q2
	vqadd.u8	q15, q1, q3
	vst1.8	{d28-d31}, [r2]!
24:	tst	r0, #31
	beq	25f
	tst	r0, #16
	beq	26f
	vld1.8	{d2-d3}, [r4]!
	vld1.8	{d26-d27}, [r7]!
	vld1.8	{d6-d7}, [r6]!
26:	tst	r0, #8
	beq	27f
	vld1.8	{d1}, [r4]!
	vld1.8	{d25}, [r7]!
	vld1.8	{d5}, [r6]!
27:	tst	r0, #4
	beq	28f
	vld1.8	{d0[4]}, [r4]!
	vld1.8	{d0[5]}, [r4]!
	vld1.8	{d0[6]}, [r4]!
	vld1.8	{d0[7]}, [r4]!
	vld1.8	{d24[4]}, [r7]!
	vld1.8	{d24[5]}, [r7]!
	vld1.8	{d24[6]}, [r7]!
	vld1.8	{d24[7]}, [r7]!
	vld1.8	{d4[4]}, [r6]!
	vld1.8	{d4[5]}, [r6]!
	vld1.8	{d4[6]}, [r6]!
	vld1.8	{d4[7]}, [r6]!
28:	tst	r0, #2
	beq	29f
	vld1.8	{d0[2]}, [r4]!
	vld1.8	{d0[3]}, [r4]!
	vld1.8	{d24[2]}, [r7]!
	vld1.8	{d24[3]}, [r7]!
	vld1.8	{d4[2]}, [r6]!
	vld1.8	{d4[3]}, [r6]!
29:	tst	r0, #1
	beq	30f
	vld1.8	{d0[1]}, [r4]!
	vld1.8	{d24[1]}, [r7]!
	vld1.8	{d4[1]}, [r6]!
30:	vmull.u8	q8, d24, d0
	vmull.u8	q9, d25, d1
	vmull.u8	q10, d26, d2
	vmull.u8	q11, d27, d3
	vrshr.u16	q0, q8, #8
	vrshr.u16	q1, q9, #8
	vrshr.u16	q12, q10, #8
	vrshr.u16	q13, q11, #8
	vraddhn.i16	d0, q0, q8
	vraddhn.i16	d1, q1, q9
	vraddhn.i16	d2, q12, q10
	vraddhn.i16	d3, q13, q11
	vqadd.u8	q14, q0, q2
	vqadd.u8	q15, q1, q3
	tst	r0, #16
	beq	31f
	vst1.8	{d30-d31}, [r2]!
31:	tst	r0, #8
	beq	32f
	vst1.8	{d29}, [r2]!
32:	tst	r0, #4
	beq	33f
	vst1.8	{d28[4]}, [r2]!
	vst1.8	{d28[5]}, [r2]!
	vst1.8	{d28[6]}, [r2]!
	vst1.8	{d28[7]}, [r2]!
33:	tst	r0, #2
	beq	34f
	vst1.8	{d28[2]}, [r2]!
	vst1.8	{d28[3]}, [r2]!
34:	tst	r0, #1
	beq	25f
	vst1.8	{d28[1]}, [r2]!
25:	ldrd	r0, [sp]
	add	r2, r2, r3
	add	r4, r4, r5
	add	r7, r7, r8
	sub	r2, r2, r0
	sub	r4, r4, r0
	sub	r7, r7, r0
	subs	r1, r1, #1
	mov	r6, r2
	str	r1, [sp, #4]
	bge	1b
0:	pop	{r0, r1}
	pop	{r4, r5, r6, r7, r8, r9, sl, fp, ip, pc}

.global _pixman_composite_src_0565_0565_asm_neon
_pixman_composite_src_0565_0565_asm_neon:
	push	{r4, r5, r6, r7, r8, r9, sl, fp, ip, lr}
	ldr	r4, [sp, #40]
	mov	sl, #0
	ldr	r5, [sp, #44]
	mov	r6, r2
	mov	fp, r4
	mov	ip, r6
	mov	lr, r7
	lsl	r9, r1, #4
	sub	r9, r9, #6
	subs	r1, r1, #1
	mov	r7, r0
	blt	0f
	cmp	r0, #32
	blt	1f
19:	tst	r6, #15
	beq	2f
	tst	r6, #2
	beq	3f
	vld1.16	{d0[1]}, [r4]!
	add	r6, r6, #2
	add	sl, sl, #1
	sub	r0, r0, #1
3:	tst	r6, #4
	beq	4f
	vld1.16	{d0[2]}, [r4]!
	vld1.16	{d0[3]}, [r4]!
	add	r6, r6, #4
	add	sl, sl, #2
	sub	r0, r0, #2
4:	tst	r6, #8
	beq	5f
	vld1.16	{d1}, [r4]!
	add	r6, r6, #8
	add	sl, sl, #4
	sub	r0, r0, #4
5:	vld1.16	{d2-d3}, [r4]!
	add	r6, r6, #16
	add	sl, sl, #8
	sub	r0, r0, #8
	tst	r9, #15
	addne	sl, sl, #16
	subne	r9, r9, #1
	cmp	sl, r7
	pld	[fp, sl, lsl #1]
	subge	sl, sl, r7
	subsge	r9, r9, #16
	ldrbge	r8, [fp, r5, lsl #1]!
	tst	r2, #2
	beq	6f
	vst1.16	{d0[1]}, [r2]!
6:	tst	r2, #4
	beq	7f
	vst1.16	{d0[2]}, [r2]!
	vst1.16	{d0[3]}, [r2]!
7:	tst	r2, #8
	beq	8f
	vst1.16	{d1}, [r2, :64]!
8:	vst1.16	{d2-d3}, [r2, :128]!
2:	vld1.16	{d0-d3}, [r4]!
	add	sl, sl, #16
	tst	r9, #15
	addne	sl, sl, #16
	subne	r9, r9, #1
	cmp	sl, r7
	pld	[fp, sl, lsl #1]
	subge	sl, sl, r7
	subsge	r9, r9, #16
	ldrbge	r8, [fp, r5, lsl #1]!
	subs	r0, r0, #32
	blt	9f
10:	vst1.16	{d0-d3}, [r2, :128]!
	vld1.16	{d0-d3}, [r4]!
	add	sl, sl, #16
	tst	r9, #15
	addne	sl, sl, #16
	subne	r9, r9, #1
	cmp	sl, r7
	pld	[fp, sl, lsl #1]
	subge	sl, sl, r7
	subsge	r9, r9, #16
	ldrbge	r8, [fp, r5, lsl #1]!
	subs	r0, r0, #16
	bge	10b
9:	vst1.16	{d0-d3}, [r2, :128]!
	tst	r0, #15
	beq	11f
	tst	r0, #8
	beq	12f
	vld1.16	{d2-d3}, [r4]!
	add	sl, sl, #8
12:	tst	r0, #4
	beq	13f
	vld1.16	{d1}, [r4]!
	add	sl, sl, #4
13:	tst	r0, #2
	beq	14f
	vld1.16	{d0[2]}, [r4]!
	vld1.16	{d0[3]}, [r4]!
	add	sl, sl, #2
14:	tst	r0, #1
	beq	15f
	vld1.16	{d0[1]}, [r4]!
	add	sl, sl, #1
15:	tst	r9, #15
	addne	sl, sl, #16
	subne	r9, r9, #1
	cmp	sl, r7
	pld	[fp, sl, lsl #1]
	subge	sl, sl, r7
	subsge	r9, r9, #16
	ldrbge	r8, [fp, r5, lsl #1]!
	tst	r0, #8
	beq	16f
	vst1.16	{d2-d3}, [r2, :128]!
16:	tst	r0, #4
	beq	17f
	vst1.16	{d1}, [r2, :64]!
17:	tst	r0, #2
	beq	18f
	vst1.16	{d0[2]}, [r2]!
	vst1.16	{d0[3]}, [r2]!
18:	tst	r0, #1
	beq	11f
	vst1.16	{d0[1]}, [r2]!
11:	mov	r0, r7
	add	r2, r2, r3, lsl #1
	add	r4, r4, r5, lsl #1
	sub	r2, r2, r0, lsl #1
	sub	r4, r4, r0, lsl #1
	subs	r1, r1, #1
	mov	r6, r2
	bge	19b
	pop	{r4, r5, r6, r7, r8, r9, sl, fp, ip, pc}
1:	tst	r0, #16
	beq	20f
	vld1.16	{d0-d3}, [r4]!
	vst1.16	{d0-d3}, [r2]!
20:	tst	r0, #15
	beq	21f
	tst	r0, #8
	beq	22f
	vld1.16	{d2-d3}, [r4]!
22:	tst	r0, #4
	beq	23f
	vld1.16	{d1}, [r4]!
23:	tst	r0, #2
	beq	24f
	vld1.16	{d0[2]}, [r4]!
	vld1.16	{d0[3]}, [r4]!
24:	tst	r0, #1
	beq	25f
	vld1.16	{d0[1]}, [r4]!
25:	tst	r0, #8
	beq	26f
	vst1.16	{d2-d3}, [r2]!
26:	tst	r0, #4
	beq	27f
	vst1.16	{d1}, [r2]!
27:	tst	r0, #2
	beq	28f
	vst1.16	{d0[2]}, [r2]!
	vst1.16	{d0[3]}, [r2]!
28:	tst	r0, #1
	beq	21f
	vst1.16	{d0[1]}, [r2]!
21:	mov	r0, r7
	add	r2, r2, r3, lsl #1
	add	r4, r4, r5, lsl #1
	sub	r2, r2, r0, lsl #1
	sub	r4, r4, r0, lsl #1
	subs	r1, r1, #1
	mov	r6, r2
	bge	1b
0:	pop	{r4, r5, r6, r7, r8, r9, sl, fp, ip, pc}

.global _pixman_composite_over_n_8_8_asm_neon
_pixman_composite_over_n_8_8_asm_neon:
	push	{r4, r5, r6, r7, r8, r9, sl, fp, ip, lr}
	ldr	r7, [sp, #48]
	mov	sl, #0
	ldr	r8, [sp, #52]
	mov	r6, r2
	mov	fp, r4
	mov	ip, r6
	mov	lr, r7
	lsl	r9, r1, #4
	sub	r9, r9, #11
	add	r5, sp, #40
	vstmdb	sp!, {d8-d15}
	vld1.32	{d8[0]}, [r5]
	vdup.8	d8, d8[3]
	subs	r1, r1, #1
	mov	r4, r0
	blt	0f
	cmp	r0, #64
	blt	1f
23:	tst	r6, #15
	beq	2f
	tst	r6, #1
	beq	3f
	vld1.8	{d24[1]}, [r7]!
	vld1.8	{d4[1]}, [r6]!
	add	sl, sl, #1
	sub	r0, r0, #1
3:	tst	r6, #2
	beq	4f
	vld1.8	{d24[2]}, [r7]!
	vld1.8	{d24[3]}, [r7]!
	vld1.8	{d4[2]}, [r6]!
	vld1.8	{d4[3]}, [r6]!
	add	sl, sl, #2
	sub	r0, r0, #2
4:	tst	r6, #4
	beq	5f
	vld1.8	{d24[4]}, [r7]!
	vld1.8	{d24[5]}, [r7]!
	vld1.8	{d24[6]}, [r7]!
	vld1.8	{d24[7]}, [r7]!
	vld1.8	{d4[4]}, [r6]!
	vld1.8	{d4[5]}, [r6]!
	vld1.8	{d4[6]}, [r6]!
	vld1.8	{d4[7]}, [r6]!
	add	sl, sl, #4
	sub	r0, r0, #4
5:	tst	r6, #8
	beq	6f
	vld1.8	{d25}, [r7]!
	vld1.8	{d5}, [r6, :64]!
	add	sl, sl, #8
	sub	r0, r0, #8
6:	vld1.8	{d26-d27}, [r7]!
	vld1.8	{d6-d7}, [r6, :128]!
	add	sl, sl, #16
	sub	r0, r0, #16
	vmull.u8	q0, d24, d8
	vmull.u8	q1, d25, d8
	vmull.u8	q6, d26, d8
	vmull.u8	q7, d27, d8
	vrshr.u16	q10, q0, #8
	vrshr.u16	q11, q1, #8
	vrshr.u16	q12, q6, #8
	vrshr.u16	q13, q7, #8
	vraddhn.i16	d0, q0, q10
	vraddhn.i16	d1, q1, q11
	vraddhn.i16	d2, q6, q12
	vraddhn.i16	d3, q7, q13
	vmvn	q12, q0
	vmvn	q13, q1
	vmull.u8	q8, d24, d4
	vmull.u8	q9, d25, d5
	vmull.u8	q10, d26, d6
	vmull.u8	q11, d27, d7
	tst	r9, #15
	addne	sl, sl, #32
	subne	r9, r9, #1
	cmp	sl, r4
	pld	[ip, sl]
	pld	[lr, sl]
	subge	sl, sl, r4
	subsge	r9, r9, #16
	ldrbge	r5, [ip, r3]!
	ldrbge	r5, [lr, r8]!
	vrshr.u16	q14, q8, #8
	vrshr.u16	q15, q9, #8
	vrshr.u16	q12, q10, #8
	vrshr.u16	q13, q11, #8
	vraddhn.i16	d28, q14, q8
	vraddhn.i16	d29, q15, q9
	vraddhn.i16	d30, q12, q10
	vraddhn.i16	d31, q13, q11
	vqadd.u8	q14, q0, q14
	vqadd.u8	q15, q1, q15
	tst	r2, #1
	beq	7f
	vst1.8	{d28[1]}, [r2]!
7:	tst	r2, #2
	beq	8f
	vst1.8	{d28[2]}, [r2]!
	vst1.8	{d28[3]}, [r2]!
8:	tst	r2, #4
	beq	9f
	vst1.8	{d28[4]}, [r2]!
	vst1.8	{d28[5]}, [r2]!
	vst1.8	{d28[6]}, [r2]!
	vst1.8	{d28[7]}, [r2]!
9:	tst	r2, #8
	beq	10f
	vst1.8	{d29}, [r2, :64]!
10:	vst1.8	{d30-d31}, [r2, :128]!
2:	vld1.8	{d4-d7}, [r6, :128]!
	vld1.8	{d24-d27}, [r7]!
	add	sl, sl, #32
	vmull.u8	q0, d24, d8
	vmull.u8	q1, d25, d8
	vmull.u8	q6, d26, d8
	vmull.u8	q7, d27, d8
	vrshr.u16	q10, q0, #8
	vrshr.u16	q11, q1, #8
	vrshr.u16	q12, q6, #8
	vrshr.u16	q13, q7, #8
	vraddhn.i16	d0, q0, q10
	vraddhn.i16	d1, q1, q11
	vraddhn.i16	d2, q6, q12
	vraddhn.i16	d3, q7, q13
	vmvn	q12, q0
	vmvn	q13, q1
	vmull.u8	q8, d24, d4
	vmull.u8	q9, d25, d5
	vmull.u8	q10, d26, d6
	vmull.u8	q11, d27, d7
	tst	r9, #15
	addne	sl, sl, #32
	subne	r9, r9, #1
	cmp	sl, r4
	pld	[ip, sl]
	pld	[lr, sl]
	subge	sl, sl, r4
	subsge	r9, r9, #16
	ldrbge	r5, [ip, r3]!
	ldrbge	r5, [lr, r8]!
	subs	r0, r0, #64
	blt	11f
12:	vld1.8	{d4-d7}, [r6, :128]!
	vrshr.u16	q14, q8, #8
	vrshr.u16	q15, q9, #8
	vrshr.u16	q12, q10, #8
	vrshr.u16	q13, q11, #8
	vraddhn.i16	d28, q14, q8
	vraddhn.i16	d29, q15, q9
	vraddhn.i16	d30, q12, q10
	vraddhn.i16	d31, q13, q11
	vqadd.u8	q14, q0, q14
	vqadd.u8	q15, q1, q15
	vld1.8	{d24-d27}, [r7]!
	add	sl, sl, #32
	tst	r9, #15
	addne	sl, sl, #32
	subne	r9, r9, #1
	cmp	sl, r4
	pld	[ip, sl]
	pld	[lr, sl]
	subge	sl, sl, r4
	subsge	r9, r9, #16
	ldrbge	r5, [ip, r3]!
	ldrbge	r5, [lr, r8]!
	vst1.8	{d28-d31}, [r2, :128]!
	vmull.u8	q0, d24, d8
	vmull.u8	q1, d25, d8
	vmull.u8	q6, d26, d8
	vmull.u8	q7, d27, d8
	vrshr.u16	q10, q0, #8
	vrshr.u16	q11, q1, #8
	vrshr.u16	q12, q6, #8
	vrshr.u16	q13, q7, #8
	vraddhn.i16	d0, q0, q10
	vraddhn.i16	d1, q1, q11
	vraddhn.i16	d2, q6, q12
	vraddhn.i16	d3, q7, q13
	vmvn	q12, q0
	vmvn	q13, q1
	vmull.u8	q8, d24, d4
	vmull.u8	q9, d25, d5
	vmull.u8	q10, d26, d6
	vmull.u8	q11, d27, d7
	subs	r0, r0, #32
	bge	12b
11:	vrshr.u16	q14, q8, #8
	vrshr.u16	q15, q9, #8
	vrshr.u16	q12, q10, #8
	vrshr.u16	q13, q11, #8
	vraddhn.i16	d28, q14, q8
	vraddhn.i16	d29, q15, q9
	vraddhn.i16	d30, q12, q10
	vraddhn.i16	d31, q13, q11
	vqadd.u8	q14, q0, q14
	vqadd.u8	q15, q1, q15
	vst1.8	{d28-d31}, [r2, :128]!
	tst	r0, #31
	beq	13f
	tst	r0, #16
	beq	14f
	vld1.8	{d26-d27}, [r7]!
	vld1.8	{d6-d7}, [r6, :128]!
	add	sl, sl, #16
14:	tst	r0, #8
	beq	15f
	vld1.8	{d25}, [r7]!
	vld1.8	{d5}, [r6, :64]!
	add	sl, sl, #8
15:	tst	r0, #4
	beq	16f
	vld1.8	{d24[4]}, [r7]!
	vld1.8	{d24[5]}, [r7]!
	vld1.8	{d24[6]}, [r7]!
	vld1.8	{d24[7]}, [r7]!
	vld1.8	{d4[4]}, [r6]!
	vld1.8	{d4[5]}, [r6]!
	vld1.8	{d4[6]}, [r6]!
	vld1.8	{d4[7]}, [r6]!
	add	sl, sl, #4
16:	tst	r0, #2
	beq	17f
	vld1.8	{d24[2]}, [r7]!
	vld1.8	{d24[3]}, [r7]!
	vld1.8	{d4[2]}, [r6]!
	vld1.8	{d4[3]}, [r6]!
	add	sl, sl, #2
17:	tst	r0, #1
	beq	18f
	vld1.8	{d24[1]}, [r7]!
	vld1.8	{d4[1]}, [r6]!
	add	sl, sl, #1
18:	vmull.u8	q0, d24, d8
	vmull.u8	q1, d25, d8
	vmull.u8	q6, d26, d8
	vmull.u8	q7, d27, d8
	vrshr.u16	q10, q0, #8
	vrshr.u16	q11, q1, #8
	vrshr.u16	q12, q6, #8
	vrshr.u16	q13, q7, #8
	vraddhn.i16	d0, q0, q10
	vraddhn.i16	d1, q1, q11
	vraddhn.i16	d2, q6, q12
	vraddhn.i16	d3, q7, q13
	vmvn	q12, q0
	vmvn	q13, q1
	vmull.u8	q8, d24, d4
	vmull.u8	q9, d25, d5
	vmull.u8	q10, d26, d6
	vmull.u8	q11, d27, d7
	tst	r9, #15
	addne	sl, sl, #32
	subne	r9, r9, #1
	cmp	sl, r4
	pld	[ip, sl]
	pld	[lr, sl]
	subge	sl, sl, r4
	subsge	r9, r9, #16
	ldrbge	r5, [ip, r3]!
	ldrbge	r5, [lr, r8]!
	vrshr.u16	q14, q8, #8
	vrshr.u16	q15, q9, #8
	vrshr.u16	q12, q10, #8
	vrshr.u16	q13, q11, #8
	vraddhn.i16	d28, q14, q8
	vraddhn.i16	d29, q15, q9
	vraddhn.i16	d30, q12, q10
	vraddhn.i16	d31, q13, q11
	vqadd.u8	q14, q0, q14
	vqadd.u8	q15, q1, q15
	tst	r0, #16
	beq	19f
	vst1.8	{d30-d31}, [r2, :128]!
19:	tst	r0, #8
	beq	20f
	vst1.8	{d29}, [r2, :64]!
20:	tst	r0, #4
	beq	21f
	vst1.8	{d28[4]}, [r2]!
	vst1.8	{d28[5]}, [r2]!
	vst1.8	{d28[6]}, [r2]!
	vst1.8	{d28[7]}, [r2]!
21:	tst	r0, #2
	beq	22f
	vst1.8	{d28[2]}, [r2]!
	vst1.8	{d28[3]}, [r2]!
22:	tst	r0, #1
	beq	13f
	vst1.8	{d28[1]}, [r2]!
13:	mov	r0, r4
	add	r2, r2, r3
	add	r7, r7, r8
	sub	r2, r2, r0
	sub	r7, r7, r0
	subs	r1, r1, #1
	mov	r6, r2
	bge	23b
	vldmia	sp!, {d8-d15}
	pop	{r4, r5, r6, r7, r8, r9, sl, fp, ip, pc}
1:	tst	r0, #32
	beq	24f
	vld1.8	{d4-d7}, [r6]!
	vld1.8	{d24-d27}, [r7]!
	vmull.u8	q0, d24, d8
	vmull.u8	q1, d25, d8
	vmull.u8	q6, d26, d8
	vmull.u8	q7, d27, d8
	vrshr.u16	q10, q0, #8
	vrshr.u16	q11, q1, #8
	vrshr.u16	q12, q6, #8
	vrshr.u16	q13, q7, #8
	vraddhn.i16	d0, q0, q10
	vraddhn.i16	d1, q1, q11
	vraddhn.i16	d2, q6, q12
	vraddhn.i16	d3, q7, q13
	vmvn	q12, q0
	vmvn	q13, q1
	vmull.u8	q8, d24, d4
	vmull.u8	q9, d25, d5
	vmull.u8	q10, d26, d6
	vmull.u8	q11, d27, d7
	vrshr.u16	q14, q8, #8
	vrshr.u16	q15, q9, #8
	vrshr.u16	q12, q10, #8
	vrshr.u16	q13, q11, #8
	vraddhn.i16	d28, q14, q8
	vraddhn.i16	d29, q15, q9
	vraddhn.i16	d30, q12, q10
	vraddhn.i16	d31, q13, q11
	vqadd.u8	q14, q0, q14
	vqadd.u8	q15, q1, q15
	vst1.8	{d28-d31}, [r2]!
24:	tst	r0, #31
	beq	25f
	tst	r0, #16
	beq	26f
	vld1.8	{d26-d27}, [r7]!
	vld1.8	{d6-d7}, [r6]!
26:	tst	r0, #8
	beq	27f
	vld1.8	{d25}, [r7]!
	vld1.8	{d5}, [r6]!
27:	tst	r0, #4
	beq	28f
	vld1.8	{d24[4]}, [r7]!
	vld1.8	{d24[5]}, [r7]!
	vld1.8	{d24[6]}, [r7]!
	vld1.8	{d24[7]}, [r7]!
	vld1.8	{d4[4]}, [r6]!
	vld1.8	{d4[5]}, [r6]!
	vld1.8	{d4[6]}, [r6]!
	vld1.8	{d4[7]}, [r6]!
28:	tst	r0, #2
	beq	29f
	vld1.8	{d24[2]}, [r7]!
	vld1.8	{d24[3]}, [r7]!
	vld1.8	{d4[2]}, [r6]!
	vld1.8	{d4[3]}, [r6]!
29:	tst	r0, #1
	beq	30f
	vld1.8	{d24[1]}, [r7]!
	vld1.8	{d4[1]}, [r6]!
30:	vmull.u8	q0, d24, d8
	vmull.u8	q1, d25, d8
	vmull.u8	q6, d26, d8
	vmull.u8	q7, d27, d8
	vrshr.u16	q10, q0, #8
	vrshr.u16	q11, q1, #8
	vrshr.u16	q12, q6, #8
	vrshr.u16	q13, q7, #8
	vraddhn.i16	d0, q0, q10
	vraddhn.i16	d1, q1, q11
	vraddhn.i16	d2, q6, q12
	vraddhn.i16	d3, q7, q13
	vmvn	q12, q0
	vmvn	q13, q1
	vmull.u8	q8, d24, d4
	vmull.u8	q9, d25, d5
	vmull.u8	q10, d26, d6
	vmull.u8	q11, d27, d7
	vrshr.u16	q14, q8, #8
	vrshr.u16	q15, q9, #8
	vrshr.u16	q12, q10, #8
	vrshr.u16	q13, q11, #8
	vraddhn.i16	d28, q14, q8
	vraddhn.i16	d29, q15, q9
	vraddhn.i16	d30, q12, q10
	vraddhn.i16	d31, q13, q11
	vqadd.u8	q14, q0, q14
	vqadd.u8	q15, q1, q15
	tst	r0, #16
	beq	31f
	vst1.8	{d30-d31}, [r2]!
31:	tst	r0, #8
	beq	32f
	vst1.8	{d29}, [r2]!
32:	tst	r0, #4
	beq	33f
	vst1.8	{d28[4]}, [r2]!
	vst1.8	{d28[5]}, [r2]!
	vst1.8	{d28[6]}, [r2]!
	vst1.8	{d28[7]}, [r2]!
33:	tst	r0, #2
	beq	34f
	vst1.8	{d28[2]}, [r2]!
	vst1.8	{d28[3]}, [r2]!
34:	tst	r0, #1
	beq	25f
	vst1.8	{d28[1]}, [r2]!
25:	mov	r0, r4
	add	r2, r2, r3
	add	r7, r7, r8
	sub	r2, r2, r0
	sub	r7, r7, r0
	subs	r1, r1, #1
	mov	r6, r2
	bge	1b
0:	vldmia	sp!, {d8-d15}
	pop	{r4, r5, r6, r7, r8, r9, sl, fp, ip, pc}

.global _pixman_composite_add_0565_8_0565_asm_neon
_pixman_composite_add_0565_8_0565_asm_neon:
	push	{r4, r5, r6, r7, r8, r9, sl, fp, ip, lr}
	ldr	r4, [sp, #40]
	ldr	r7, [sp, #48]
	mov	sl, #0
	ldr	r5, [sp, #44]
	ldr	r8, [sp, #52]
	mov	r6, r2
	mov	fp, r4
	mov	ip, r6
	mov	lr, r7
	lsl	r9, r1, #4
	sub	r9, r9, #11
	vstmdb	sp!, {d8-d15}
	push	{r0, r1}
	subs	r1, r1, #1
	str	r1, [sp, #4]
	blt	0f
	cmp	r0, #16
	blt	1f
16:	tst	r6, #15
	beq	2f
	tst	r6, #2
	beq	3f
	vld1.16	{d8[1]}, [r4]!
	vld1.8	{d15[1]}, [r7]!
	vld1.16	{d10[1]}, [r6]!
	add	sl, sl, #1
	sub	r0, r0, #1
3:	tst	r6, #4
	beq	4f
	vld1.16	{d8[2]}, [r4]!
	vld1.16	{d8[3]}, [r4]!
	vld1.8	{d15[2]}, [r7]!
	vld1.8	{d15[3]}, [r7]!
	vld1.16	{d10[2]}, [r6]!
	vld1.16	{d10[3]}, [r6]!
	add	sl, sl, #2
	sub	r0, r0, #2
4:	tst	r6, #8
	beq	5f
	vld1.16	{d9}, [r4]!
	vld1.8	{d15[4]}, [r7]!
	vld1.8	{d15[5]}, [r7]!
	vld1.8	{d15[6]}, [r7]!
	vld1.8	{d15[7]}, [r7]!
	vld1.16	{d11}, [r6, :64]!
	add	sl, sl, #4
	sub	r0, r0, #4
5:	vshrn.i16	d2, q4, #8
	vshrn.i16	d1, q4, #3
	vsli.16	q4, q4, #5
	vsri.8	d2, d2, #5
	vsri.8	d1, d1, #6
	vshrn.i16	d0, q4, #2
	vshrn.i16	d6, q5, #8
	vshrn.i16	d5, q5, #3
	vsli.16	q5, q5, #5
	vsri.8	d6, d6, #5
	vsri.8	d5, d5, #6
	vshrn.i16	d4, q5, #2
	vmull.u8	q6, d15, d2
	vmull.u8	q5, d15, d1
	vmull.u8	q4, d15, d0
	vrshr.u16	q12, q6, #8
	vrshr.u16	q11, q5, #8
	vrshr.u16	q10, q4, #8
	vraddhn.i16	d2, q6, q12
	vraddhn.i16	d1, q5, q11
	vraddhn.i16	d0, q4, q10
	ldr	r1, [sp]
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r1
	pld	[fp, sl, lsl #1]
	pld	[ip, sl, lsl #1]
	pld	[lr, sl]
	subge	sl, sl, r1
	subsge	r9, r9, #16
	ldrbge	r1, [fp, r5, lsl #1]!
	ldrbge	r1, [ip, r3, lsl #1]!
	ldrbge	r1, [lr, r8]!
	vqadd.u8	q0, q0, q2
	vqadd.u8	q1, q1, q3
	vshll.i8	q15, d1, #8
	vshll.i8	q14, d2, #8
	vshll.i8	q3, d0, #8
	vsri.16	q14, q15, #5
	vsri.16	q14, q3, #11
	tst	r2, #2
	beq	6f
	vst1.16	{d28[1]}, [r2]!
6:	tst	r2, #4
	beq	7f
	vst1.16	{d28[2]}, [r2]!
	vst1.16	{d28[3]}, [r2]!
7:	tst	r2, #8
	beq	2f
	vst1.16	{d29}, [r2, :64]!
2:	vld1.16	{d10-d11}, [r6, :128]!
	vld1.16	{d8-d9}, [r4]!
	vld1.8	{d15}, [r7]!
	add	sl, sl, #8
	vshrn.i16	d2, q4, #8
	vshrn.i16	d1, q4, #3
	vsli.16	q4, q4, #5
	vsri.8	d2, d2, #5
	vsri.8	d1, d1, #6
	vshrn.i16	d0, q4, #2
	vshrn.i16	d6, q5, #8
	vshrn.i16	d5, q5, #3
	vsli.16	q5, q5, #5
	vsri.8	d6, d6, #5
	vsri.8	d5, d5, #6
	vshrn.i16	d4, q5, #2
	vmull.u8	q6, d15, d2
	vmull.u8	q5, d15, d1
	vmull.u8	q4, d15, d0
	vrshr.u16	q12, q6, #8
	vrshr.u16	q11, q5, #8
	vrshr.u16	q10, q4, #8
	vraddhn.i16	d2, q6, q12
	vraddhn.i16	d1, q5, q11
	vraddhn.i16	d0, q4, q10
	ldr	r1, [sp]
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r1
	pld	[fp, sl, lsl #1]
	pld	[ip, sl, lsl #1]
	pld	[lr, sl]
	subge	sl, sl, r1
	subsge	r9, r9, #16
	ldrbge	r1, [fp, r5, lsl #1]!
	ldrbge	r1, [ip, r3, lsl #1]!
	ldrbge	r1, [lr, r8]!
	subs	r0, r0, #16
	blt	8f
9:	vld1.8	{d15}, [r7]!
	vqadd.u8	q0, q0, q2
	vqadd.u8	q1, q1, q3
	vshll.i8	q15, d1, #8
	vshll.i8	q14, d2, #8
	vshll.i8	q3, d0, #8
	vsri.16	q14, q15, #5
	vsri.16	q14, q3, #11
	vld1.16	{d8-d9}, [r4]!
	vld1.16	{d10-d11}, [r6, :128]!
	ldr	r1, [sp]
	add	sl, sl, #8
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r1
	pld	[fp, sl, lsl #1]
	pld	[ip, sl, lsl #1]
	pld	[lr, sl]
	subge	sl, sl, r1
	subsge	r9, r9, #16
	ldrbge	r1, [fp, r5, lsl #1]!
	ldrbge	r1, [ip, r3, lsl #1]!
	ldrbge	r1, [lr, r8]!
	vshrn.i16	d2, q4, #8
	vshrn.i16	d1, q4, #3
	vsli.16	q4, q4, #5
	vsri.8	d2, d2, #5
	vsri.8	d1, d1, #6
	vshrn.i16	d0, q4, #2
	vshrn.i16	d6, q5, #8
	vshrn.i16	d5, q5, #3
	vsli.16	q5, q5, #5
	vsri.8	d6, d6, #5
	vsri.8	d5, d5, #6
	vshrn.i16	d4, q5, #2
	vmull.u8	q6, d15, d2
	vmull.u8	q5, d15, d1
	vmull.u8	q4, d15, d0
	vrshr.u16	q12, q6, #8
	vrshr.u16	q11, q5, #8
	vrshr.u16	q10, q4, #8
	vraddhn.i16	d2, q6, q12
	vraddhn.i16	d1, q5, q11
	vraddhn.i16	d0, q4, q10
	vst1.16	{d28-d29}, [r2, :128]!
	subs	r0, r0, #8
	bge	9b
8:	vqadd.u8	q0, q0, q2
	vqadd.u8	q1, q1, q3
	vshll.i8	q15, d1, #8
	vshll.i8	q14, d2, #8
	vshll.i8	q3, d0, #8
	vsri.16	q14, q15, #5
	vsri.16	q14, q3, #11
	vst1.16	{d28-d29}, [r2, :128]!
	tst	r0, #7
	beq	10f
	tst	r0, #4
	beq	11f
	vld1.16	{d9}, [r4]!
	vld1.8	{d15[4]}, [r7]!
	vld1.8	{d15[5]}, [r7]!
	vld1.8	{d15[6]}, [r7]!
	vld1.8	{d15[7]}, [r7]!
	vld1.16	{d11}, [r6, :64]!
	add	sl, sl, #4
11:	tst	r0, #2
	beq	12f
	vld1.16	{d8[2]}, [r4]!
	vld1.16	{d8[3]}, [r4]!
	vld1.8	{d15[2]}, [r7]!
	vld1.8	{d15[3]}, [r7]!
	vld1.16	{d10[2]}, [r6]!
	vld1.16	{d10[3]}, [r6]!
	add	sl, sl, #2
12:	tst	r0, #1
	beq	13f
	vld1.16	{d8[1]}, [r4]!
	vld1.8	{d15[1]}, [r7]!
	vld1.16	{d10[1]}, [r6]!
	add	sl, sl, #1
13:	vshrn.i16	d2, q4, #8
	vshrn.i16	d1, q4, #3
	vsli.16	q4, q4, #5
	vsri.8	d2, d2, #5
	vsri.8	d1, d1, #6
	vshrn.i16	d0, q4, #2
	vshrn.i16	d6, q5, #8
	vshrn.i16	d5, q5, #3
	vsli.16	q5, q5, #5
	vsri.8	d6, d6, #5
	vsri.8	d5, d5, #6
	vshrn.i16	d4, q5, #2
	vmull.u8	q6, d15, d2
	vmull.u8	q5, d15, d1
	vmull.u8	q4, d15, d0
	vrshr.u16	q12, q6, #8
	vrshr.u16	q11, q5, #8
	vrshr.u16	q10, q4, #8
	vraddhn.i16	d2, q6, q12
	vraddhn.i16	d1, q5, q11
	vraddhn.i16	d0, q4, q10
	ldr	r1, [sp]
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r1
	pld	[fp, sl, lsl #1]
	pld	[ip, sl, lsl #1]
	pld	[lr, sl]
	subge	sl, sl, r1
	subsge	r9, r9, #16
	ldrbge	r1, [fp, r5, lsl #1]!
	ldrbge	r1, [ip, r3, lsl #1]!
	ldrbge	r1, [lr, r8]!
	vqadd.u8	q0, q0, q2
	vqadd.u8	q1, q1, q3
	vshll.i8	q15, d1, #8
	vshll.i8	q14, d2, #8
	vshll.i8	q3, d0, #8
	vsri.16	q14, q15, #5
	vsri.16	q14, q3, #11
	tst	r0, #4
	beq	14f
	vst1.16	{d29}, [r2, :64]!
14:	tst	r0, #2
	beq	15f
	vst1.16	{d28[2]}, [r2]!
	vst1.16	{d28[3]}, [r2]!
15:	tst	r0, #1
	beq	10f
	vst1.16	{d28[1]}, [r2]!
10:	ldrd	r0, [sp]
	add	r2, r2, r3, lsl #1
	add	r4, r4, r5, lsl #1
	add	r7, r7, r8
	sub	r2, r2, r0, lsl #1
	sub	r4, r4, r0, lsl #1
	sub	r7, r7, r0
	subs	r1, r1, #1
	mov	r6, r2
	str	r1, [sp, #4]
	bge	16b
	pop	{r0, r1}
	vldmia	sp!, {d8-d15}
	pop	{r4, r5, r6, r7, r8, r9, sl, fp, ip, pc}
1:	tst	r0, #8
	beq	17f
	vld1.16	{d10-d11}, [r6]!
	vld1.16	{d8-d9}, [r4]!
	vld1.8	{d15}, [r7]!
	vshrn.i16	d2, q4, #8
	vshrn.i16	d1, q4, #3
	vsli.16	q4, q4, #5
	vsri.8	d2, d2, #5
	vsri.8	d1, d1, #6
	vshrn.i16	d0, q4, #2
	vshrn.i16	d6, q5, #8
	vshrn.i16	d5, q5, #3
	vsli.16	q5, q5, #5
	vsri.8	d6, d6, #5
	vsri.8	d5, d5, #6
	vshrn.i16	d4, q5, #2
	vmull.u8	q6, d15, d2
	vmull.u8	q5, d15, d1
	vmull.u8	q4, d15, d0
	vrshr.u16	q12, q6, #8
	vrshr.u16	q11, q5, #8
	vrshr.u16	q10, q4, #8
	vraddhn.i16	d2, q6, q12
	vraddhn.i16	d1, q5, q11
	vraddhn.i16	d0, q4, q10
	vqadd.u8	q0, q0, q2
	vqadd.u8	q1, q1, q3
	vshll.i8	q15, d1, #8
	vshll.i8	q14, d2, #8
	vshll.i8	q3, d0, #8
	vsri.16	q14, q15, #5
	vsri.16	q14, q3, #11
	vst1.16	{d28-d29}, [r2]!
17:	tst	r0, #7
	beq	18f
	tst	r0, #4
	beq	19f
	vld1.16	{d9}, [r4]!
	vld1.8	{d15[4]}, [r7]!
	vld1.8	{d15[5]}, [r7]!
	vld1.8	{d15[6]}, [r7]!
	vld1.8	{d15[7]}, [r7]!
	vld1.16	{d11}, [r6]!
19:	tst	r0, #2
	beq	20f
	vld1.16	{d8[2]}, [r4]!
	vld1.16	{d8[3]}, [r4]!
	vld1.8	{d15[2]}, [r7]!
	vld1.8	{d15[3]}, [r7]!
	vld1.16	{d10[2]}, [r6]!
	vld1.16	{d10[3]}, [r6]!
20:	tst	r0, #1
	beq	21f
	vld1.16	{d8[1]}, [r4]!
	vld1.8	{d15[1]}, [r7]!
	vld1.16	{d10[1]}, [r6]!
21:	vshrn.i16	d2, q4, #8
	vshrn.i16	d1, q4, #3
	vsli.16	q4, q4, #5
	vsri.8	d2, d2, #5
	vsri.8	d1, d1, #6
	vshrn.i16	d0, q4, #2
	vshrn.i16	d6, q5, #8
	vshrn.i16	d5, q5, #3
	vsli.16	q5, q5, #5
	vsri.8	d6, d6, #5
	vsri.8	d5, d5, #6
	vshrn.i16	d4, q5, #2
	vmull.u8	q6, d15, d2
	vmull.u8	q5, d15, d1
	vmull.u8	q4, d15, d0
	vrshr.u16	q12, q6, #8
	vrshr.u16	q11, q5, #8
	vrshr.u16	q10, q4, #8
	vraddhn.i16	d2, q6, q12
	vraddhn.i16	d1, q5, q11
	vraddhn.i16	d0, q4, q10
	vqadd.u8	q0, q0, q2
	vqadd.u8	q1, q1, q3
	vshll.i8	q15, d1, #8
	vshll.i8	q14, d2, #8
	vshll.i8	q3, d0, #8
	vsri.16	q14, q15, #5
	vsri.16	q14, q3, #11
	tst	r0, #4
	beq	22f
	vst1.16	{d29}, [r2]!
22:	tst	r0, #2
	beq	23f
	vst1.16	{d28[2]}, [r2]!
	vst1.16	{d28[3]}, [r2]!
23:	tst	r0, #1
	beq	18f
	vst1.16	{d28[1]}, [r2]!
18:	ldrd	r0, [sp]
	add	r2, r2, r3, lsl #1
	add	r4, r4, r5, lsl #1
	add	r7, r7, r8
	sub	r2, r2, r0, lsl #1
	sub	r4, r4, r0, lsl #1
	sub	r7, r7, r0
	subs	r1, r1, #1
	mov	r6, r2
	str	r1, [sp, #4]
	bge	1b
0:	pop	{r0, r1}
	vldmia	sp!, {d8-d15}
	pop	{r4, r5, r6, r7, r8, r9, sl, fp, ip, pc}

.global _pixman_scaled_nearest_scanline_0565_0565_SRC_asm_armv6
_pixman_scaled_nearest_scanline_0565_0565_SRC_asm_armv6:
	ldr	ip, [sp]
	push	{r4, r5, r6, r7}
	mvn	r6, #1
	and	r4, r6, r3, lsr #15
	add	r3, r3, ip
	subs	r0, r0, #40
	blt	0f
	mov	r7, #80
	mla	r7, ip, r7, r3
1:	subs	r0, r0, #8
	add	r7, r7, ip, lsl #3
	ldrh	r4, [r2, r4]
	and	r5, r6, r3, lsr #15
	add	r3, r3, ip
	strh	r4, [r1], #2
	ldrh	r5, [r2, r5]
	and	r4, r6, r3, lsr #15
	add	r3, r3, ip
	strh	r5, [r1], #2
	ldrh	r4, [r2, r4]
	and	r5, r6, r3, lsr #15
	add	r3, r3, ip
	strh	r4, [r1], #2
	ldrh	r5, [r2, r5]
	and	r4, r6, r3, lsr #15
	add	r3, r3, ip
	strh	r5, [r1], #2
	ldrh	r4, [r2, r4]
	and	r5, r6, r3, lsr #15
	add	r3, r3, ip
	strh	r4, [r1], #2
	ldrh	r5, [r2, r5]
	and	r4, r6, r3, lsr #15
	add	r3, r3, ip
	strh	r5, [r1], #2
	ldrh	r4, [r2, r4]
	and	r5, r6, r3, lsr #15
	add	r3, r3, ip
	strh	r4, [r1], #2
	ldrh	r5, [r2, r5]
	and	r4, r6, r3, lsr #15
	add	r3, r3, ip
	strh	r5, [r1], #2
	pld	[r2, r7, lsr #15]
	bge	1b
0:	adds	r0, r0, #36
	blt	2f
3:	ldrh	r4, [r2, r4]
	and	r5, r6, r3, lsr #15
	add	r3, r3, ip
	strh	r4, [r1], #2
	ldrh	r5, [r2, r5]
	and	r4, r6, r3, lsr #15
	add	r3, r3, ip
	strh	r5, [r1], #2
	ldrh	r4, [r2, r4]
	and	r5, r6, r3, lsr #15
	add	r3, r3, ip
	strh	r4, [r1], #2
	ldrh	r5, [r2, r5]
	and	r4, r6, r3, lsr #15
	add	r3, r3, ip
	strh	r5, [r1], #2
	subs	r0, r0, #4
	bge	3b
2:	tst	r0, #2
	beq	4f
	ldrh	r4, [r2, r4]
	and	r5, r6, r3, lsr #15
	add	r3, r3, ip
	strh	r4, [r1], #2
	ldrh	r5, [r2, r5]
	and	r4, r6, r3, lsr #15
	add	r3, r3, ip
	strh	r5, [r1], #2
4:	tst	r0, #1
	ldrhne	r4, [r2, r4]
	strhne	r4, [r1]
	pop	{r4, r5, r6, r7}
	bx	lr

.global _pixman_composite_src_n_8_8888_asm_neon
_pixman_composite_src_n_8_8888_asm_neon:
	push	{r4, r5, r6, r7, r8, r9, sl, fp, ip, lr}
	ldr	r7, [sp, #48]
	mov	sl, #0
	ldr	r8, [sp, #52]
	mov	r6, r2
	mov	fp, r4
	mov	ip, r6
	mov	lr, r7
	lsl	r9, r1, #4
	sub	r9, r9, #11
	add	r5, sp, #40
	vld1.32	{d3[0]}, [r5]
	vdup.8	d0, d3[0]
	vdup.8	d1, d3[1]
	vdup.8	d2, d3[2]
	vdup.8	d3, d3[3]
	subs	r1, r1, #1
	mov	r4, r0
	blt	0f
	cmp	r0, #16
	blt	1f
15:	tst	r6, #15
	beq	2f
	tst	r6, #4
	beq	3f
	vld1.8	{d24[1]}, [r7]!
	add	r6, r6, #4
	add	sl, sl, #1
	sub	r0, r0, #1
3:	tst	r6, #8
	beq	4f
	vld1.8	{d24[2]}, [r7]!
	vld1.8	{d24[3]}, [r7]!
	add	r6, r6, #8
	add	sl, sl, #2
	sub	r0, r0, #2
4:	vld1.8	{d24[4]}, [r7]!
	vld1.8	{d24[5]}, [r7]!
	vld1.8	{d24[6]}, [r7]!
	vld1.8	{d24[7]}, [r7]!
	add	r6, r6, #16
	add	sl, sl, #4
	sub	r0, r0, #4
	vmull.u8	q8, d24, d0
	vmull.u8	q9, d24, d1
	vmull.u8	q10, d24, d2
	vmull.u8	q11, d24, d3
	vrsra.u16	q8, q8, #8
	vrsra.u16	q9, q9, #8
	vrsra.u16	q10, q10, #8
	vrsra.u16	q11, q11, #8
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r4
	pld	[lr, sl]
	subge	sl, sl, r4
	subsge	r9, r9, #16
	ldrbge	r5, [lr, r8]!
	vrshrn.i16	d28, q8, #8
	vrshrn.i16	d29, q9, #8
	vrshrn.i16	d30, q10, #8
	vrshrn.i16	d31, q11, #8
	vzip.8	d28, d30
	vzip.8	d29, d31
	vzip.8	d30, d31
	vzip.8	d28, d29
	tst	r2, #4
	beq	5f
	vst1.32	{d28[1]}, [r2]!
5:	tst	r2, #8
	beq	6f
	vst1.32	{d29}, [r2, :64]!
6:	vst1.32	{d30-d31}, [r2, :128]!
2:	vld1.8	{d24}, [r7]!
	add	sl, sl, #8
	vmull.u8	q8, d24, d0
	vmull.u8	q9, d24, d1
	vmull.u8	q10, d24, d2
	vmull.u8	q11, d24, d3
	vrsra.u16	q8, q8, #8
	vrsra.u16	q9, q9, #8
	vrsra.u16	q10, q10, #8
	vrsra.u16	q11, q11, #8
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r4
	pld	[lr, sl]
	subge	sl, sl, r4
	subsge	r9, r9, #16
	ldrbge	r5, [lr, r8]!
	subs	r0, r0, #16
	blt	7f
8:	vld1.8	{d24}, [r7]!
	add	sl, sl, #8
	vrshrn.i16	d28, q8, #8
	tst	r9, #15
	vrshrn.i16	d29, q9, #8
	addne	sl, sl, #8
	vrshrn.i16	d30, q10, #8
	subne	r9, r9, #1
	vrshrn.i16	d31, q11, #8
	cmp	sl, r4
	vmull.u8	q8, d24, d0
	pld	[lr, sl]
	vmull.u8	q9, d24, d1
	subge	sl, sl, r4
	vmull.u8	q10, d24, d2
	subsge	r9, r9, #16
	vmull.u8	q11, d24, d3
	ldrbge	r5, [lr, r8]!
	vst4.8	{d28-d31}, [r2, :128]!
	vrsra.u16	q8, q8, #8
	vrsra.u16	q9, q9, #8
	vrsra.u16	q10, q10, #8
	vrsra.u16	q11, q11, #8
	subs	r0, r0, #8
	bge	8b
7:	vrshrn.i16	d28, q8, #8
	vrshrn.i16	d29, q9, #8
	vrshrn.i16	d30, q10, #8
	vrshrn.i16	d31, q11, #8
	vst4.8	{d28-d31}, [r2, :128]!
	tst	r0, #7
	beq	9f
	tst	r0, #4
	beq	10f
	vld1.8	{d24[4]}, [r7]!
	vld1.8	{d24[5]}, [r7]!
	vld1.8	{d24[6]}, [r7]!
	vld1.8	{d24[7]}, [r7]!
	add	sl, sl, #4
10:	tst	r0, #2
	beq	11f
	vld1.8	{d24[2]}, [r7]!
	vld1.8	{d24[3]}, [r7]!
	add	sl, sl, #2
11:	tst	r0, #1
	beq	12f
	vld1.8	{d24[1]}, [r7]!
	add	sl, sl, #1
12:	vmull.u8	q8, d24, d0
	vmull.u8	q9, d24, d1
	vmull.u8	q10, d24, d2
	vmull.u8	q11, d24, d3
	vrsra.u16	q8, q8, #8
	vrsra.u16	q9, q9, #8
	vrsra.u16	q10, q10, #8
	vrsra.u16	q11, q11, #8
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r4
	pld	[lr, sl]
	subge	sl, sl, r4
	subsge	r9, r9, #16
	ldrbge	r5, [lr, r8]!
	vrshrn.i16	d28, q8, #8
	vrshrn.i16	d29, q9, #8
	vrshrn.i16	d30, q10, #8
	vrshrn.i16	d31, q11, #8
	vzip.8	d28, d30
	vzip.8	d29, d31
	vzip.8	d30, d31
	vzip.8	d28, d29
	tst	r0, #4
	beq	13f
	vst1.32	{d30-d31}, [r2, :128]!
13:	tst	r0, #2
	beq	14f
	vst1.32	{d29}, [r2, :64]!
14:	tst	r0, #1
	beq	9f
	vst1.32	{d28[1]}, [r2]!
9:	mov	r0, r4
	add	r2, r2, r3, lsl #2
	add	r7, r7, r8
	sub	r2, r2, r0, lsl #2
	sub	r7, r7, r0
	subs	r1, r1, #1
	mov	r6, r2
	bge	15b
	pop	{r4, r5, r6, r7, r8, r9, sl, fp, ip, pc}
1:	tst	r0, #8
	beq	16f
	vld1.8	{d24}, [r7]!
	vmull.u8	q8, d24, d0
	vmull.u8	q9, d24, d1
	vmull.u8	q10, d24, d2
	vmull.u8	q11, d24, d3
	vrsra.u16	q8, q8, #8
	vrsra.u16	q9, q9, #8
	vrsra.u16	q10, q10, #8
	vrsra.u16	q11, q11, #8
	vrshrn.i16	d28, q8, #8
	vrshrn.i16	d29, q9, #8
	vrshrn.i16	d30, q10, #8
	vrshrn.i16	d31, q11, #8
	vst4.8	{d28-d31}, [r2]!
16:	tst	r0, #7
	beq	17f
	tst	r0, #4
	beq	18f
	vld1.8	{d24[4]}, [r7]!
	vld1.8	{d24[5]}, [r7]!
	vld1.8	{d24[6]}, [r7]!
	vld1.8	{d24[7]}, [r7]!
18:	tst	r0, #2
	beq	19f
	vld1.8	{d24[2]}, [r7]!
	vld1.8	{d24[3]}, [r7]!
19:	tst	r0, #1
	beq	20f
	vld1.8	{d24[1]}, [r7]!
20:	vmull.u8	q8, d24, d0
	vmull.u8	q9, d24, d1
	vmull.u8	q10, d24, d2
	vmull.u8	q11, d24, d3
	vrsra.u16	q8, q8, #8
	vrsra.u16	q9, q9, #8
	vrsra.u16	q10, q10, #8
	vrsra.u16	q11, q11, #8
	vrshrn.i16	d28, q8, #8
	vrshrn.i16	d29, q9, #8
	vrshrn.i16	d30, q10, #8
	vrshrn.i16	d31, q11, #8
	vzip.8	d28, d30
	vzip.8	d29, d31
	vzip.8	d30, d31
	vzip.8	d28, d29
	tst	r0, #4
	beq	21f
	vst1.32	{d30-d31}, [r2]!
21:	tst	r0, #2
	beq	22f
	vst1.32	{d29}, [r2]!
22:	tst	r0, #1
	beq	17f
	vst1.32	{d28[1]}, [r2]!
17:	mov	r0, r4
	add	r2, r2, r3, lsl #2
	add	r7, r7, r8
	sub	r2, r2, r0, lsl #2
	sub	r7, r7, r0
	subs	r1, r1, #1
	mov	r6, r2
	bge	1b
0:	pop	{r4, r5, r6, r7, r8, r9, sl, fp, ip, pc}

.global _pixman_composite_add_8888_8888_asm_neon
_pixman_composite_add_8888_8888_asm_neon:
	push	{r4, r5, r6, r7, r8, r9, sl, fp, ip, lr}
	ldr	r4, [sp, #40]
	mov	sl, #0
	ldr	r5, [sp, #44]
	mov	r6, r2
	mov	fp, r4
	mov	ip, r6
	mov	lr, r7
	lsl	r9, r1, #4
	sub	r9, r9, #6
	subs	r1, r1, #1
	mov	r7, r0
	blt	0f
	cmp	r0, #16
	blt	1f
15:	tst	r6, #15
	beq	2f
	tst	r6, #4
	beq	3f
	vld1.32	{d0[1]}, [r4]!
	vld1.32	{d4[1]}, [r6]!
	add	sl, sl, #1
	sub	r0, r0, #1
3:	tst	r6, #8
	beq	4f
	vld1.32	{d1}, [r4]!
	vld1.32	{d5}, [r6, :64]!
	add	sl, sl, #2
	sub	r0, r0, #2
4:	vld1.32	{d2-d3}, [r4]!
	vld1.32	{d6-d7}, [r6, :128]!
	add	sl, sl, #4
	sub	r0, r0, #4
	vqadd.u8	q14, q0, q2
	vqadd.u8	q15, q1, q3
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r7
	pld	[fp, sl, lsl #2]
	pld	[ip, sl, lsl #2]
	subge	sl, sl, r7
	subsge	r9, r9, #16
	ldrbge	r8, [fp, r5, lsl #2]!
	ldrbge	r8, [ip, r3, lsl #2]!
	tst	r2, #4
	beq	5f
	vst1.32	{d28[1]}, [r2]!
5:	tst	r2, #8
	beq	6f
	vst1.32	{d29}, [r2, :64]!
6:	vst1.32	{d30-d31}, [r2, :128]!
2:	vld1.32	{d4-d7}, [r6, :128]!
	vld1.32	{d0-d3}, [r4]!
	add	sl, sl, #8
	vqadd.u8	q14, q0, q2
	vqadd.u8	q15, q1, q3
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r7
	pld	[fp, sl, lsl #2]
	pld	[ip, sl, lsl #2]
	subge	sl, sl, r7
	subsge	r9, r9, #16
	ldrbge	r8, [fp, r5, lsl #2]!
	ldrbge	r8, [ip, r3, lsl #2]!
	subs	r0, r0, #16
	blt	7f
8:	vld1.32	{d0-d3}, [r4]!
	add	sl, sl, #8
	tst	r9, #15
	vld1.32	{d4-d7}, [r6, :128]!
	addne	sl, sl, #8
	subne	r9, r9, #1
	vst1.32	{d28-d31}, [r2, :128]!
	cmp	sl, r7
	pld	[fp, sl, lsl #2]
	pld	[ip, sl, lsl #2]
	subge	sl, sl, r7
	subsge	r9, r9, #16
	vqadd.u8	q14, q0, q2
	ldrbge	r8, [fp, r5, lsl #2]!
	ldrbge	r8, [ip, r3, lsl #2]!
	vqadd.u8	q15, q1, q3
	subs	r0, r0, #8
	bge	8b
7:	vst1.32	{d28-d31}, [r2, :128]!
	tst	r0, #7
	beq	9f
	tst	r0, #4
	beq	10f
	vld1.32	{d2-d3}, [r4]!
	vld1.32	{d6-d7}, [r6, :128]!
	add	sl, sl, #4
10:	tst	r0, #2
	beq	11f
	vld1.32	{d1}, [r4]!
	vld1.32	{d5}, [r6, :64]!
	add	sl, sl, #2
11:	tst	r0, #1
	beq	12f
	vld1.32	{d0[1]}, [r4]!
	vld1.32	{d4[1]}, [r6]!
	add	sl, sl, #1
12:	vqadd.u8	q14, q0, q2
	vqadd.u8	q15, q1, q3
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r7
	pld	[fp, sl, lsl #2]
	pld	[ip, sl, lsl #2]
	subge	sl, sl, r7
	subsge	r9, r9, #16
	ldrbge	r8, [fp, r5, lsl #2]!
	ldrbge	r8, [ip, r3, lsl #2]!
	tst	r0, #4
	beq	13f
	vst1.32	{d30-d31}, [r2, :128]!
13:	tst	r0, #2
	beq	14f
	vst1.32	{d29}, [r2, :64]!
14:	tst	r0, #1
	beq	9f
	vst1.32	{d28[1]}, [r2]!
9:	mov	r0, r7
	add	r2, r2, r3, lsl #2
	add	r4, r4, r5, lsl #2
	sub	r2, r2, r0, lsl #2
	sub	r4, r4, r0, lsl #2
	subs	r1, r1, #1
	mov	r6, r2
	bge	15b
	pop	{r4, r5, r6, r7, r8, r9, sl, fp, ip, pc}
1:	tst	r0, #8
	beq	16f
	vld1.32	{d4-d7}, [r6]!
	vld1.32	{d0-d3}, [r4]!
	vqadd.u8	q14, q0, q2
	vqadd.u8	q15, q1, q3
	vst1.32	{d28-d31}, [r2]!
16:	tst	r0, #7
	beq	17f
	tst	r0, #4
	beq	18f
	vld1.32	{d2-d3}, [r4]!
	vld1.32	{d6-d7}, [r6]!
18:	tst	r0, #2
	beq	19f
	vld1.32	{d1}, [r4]!
	vld1.32	{d5}, [r6]!
19:	tst	r0, #1
	beq	20f
	vld1.32	{d0[1]}, [r4]!
	vld1.32	{d4[1]}, [r6]!
20:	vqadd.u8	q14, q0, q2
	vqadd.u8	q15, q1, q3
	tst	r0, #4
	beq	21f
	vst1.32	{d30-d31}, [r2]!
21:	tst	r0, #2
	beq	22f
	vst1.32	{d29}, [r2]!
22:	tst	r0, #1
	beq	17f
	vst1.32	{d28[1]}, [r2]!
17:	mov	r0, r7
	add	r2, r2, r3, lsl #2
	add	r4, r4, r5, lsl #2
	sub	r2, r2, r0, lsl #2
	sub	r4, r4, r0, lsl #2
	subs	r1, r1, #1
	mov	r6, r2
	bge	1b
0:	pop	{r4, r5, r6, r7, r8, r9, sl, fp, ip, pc}

.global _pixman_scaled_nearest_scanline_8888_0565_SRC_asm_neon
_pixman_scaled_nearest_scanline_8888_0565_SRC_asm_neon:
	ldr	ip, [sp]
	push	{r4, r5, r6, lr}
	mov	r6, r1
	cmp	r0, #8
	blt	0f
	tst	r6, #15
	beq	1f
	tst	r6, #2
	beq	2f
	asr	r4, r3, #16
	add	r3, r3, ip
	add	r4, r2, r4, lsl #2
	vld1.32	{d0[1]}, [r4, :32]
	add	r6, r6, #2
	sub	r0, r0, #1
2:	tst	r6, #4
	beq	3f
	asr	r4, r3, #16
	add	r3, r3, ip
	add	r4, r2, r4, lsl #2
	asr	r5, r3, #16
	add	r3, r3, ip
	add	r5, r2, r5, lsl #2
	vld1.32	{d1[0]}, [r4, :32]
	vld1.32	{d1[1]}, [r5, :32]
	add	r6, r6, #4
	sub	r0, r0, #2
3:	tst	r6, #8
	beq	4f
	asr	r4, r3, #16
	add	r3, r3, ip, lsl #1
	add	r4, r2, r4, lsl #2
	asr	r5, r3, #16
	sub	r3, r3, ip
	add	r5, r2, r5, lsl #2
	vld1.32	{d2[0]}, [r4, :32]
	asr	r4, r3, #16
	add	r3, r3, ip, lsl #1
	add	r4, r2, r4, lsl #2
	vld1.32	{d3[0]}, [r5, :32]
	asr	r5, r3, #16
	add	r3, r3, ip
	add	r5, r2, r5, lsl #2
	vld1.32	{d2[1]}, [r4, :32]
	vld1.32	{d3[1]}, [r5, :32]
	add	r6, r6, #8
	sub	r0, r0, #4
4:	vuzp.8	d0, d1
	vuzp.8	d2, d3
	vuzp.8	d1, d3
	vuzp.8	d0, d2
	vshll.i8	q8, d1, #8
	vshll.i8	q14, d2, #8
	vshll.i8	q9, d0, #8
	vsri.16	q14, q8, #5
	vsri.16	q14, q9, #11
	tst	r1, #2
	beq	5f
	vst1.16	{d28[1]}, [r1]!
5:	tst	r1, #4
	beq	6f
	vst1.16	{d28[2]}, [r1]!
	vst1.16	{d28[3]}, [r1]!
6:	tst	r1, #8
	beq	1f
	vst1.16	{d29}, [r1, :64]!
1:	subs	r0, r0, #8
	blt	7f
	asr	r4, r3, #16
	add	r3, r3, ip, lsl #1
	add	r4, r2, r4, lsl #2
	asr	r5, r3, #16
	sub	r3, r3, ip
	add	r5, r2, r5, lsl #2
	vld1.32	{d0[0]}, [r4, :32]
	asr	r4, r3, #16
	add	r3, r3, ip, lsl #1
	add	r4, r2, r4, lsl #2
	vld1.32	{d1[0]}, [r5, :32]
	asr	r5, r3, #16
	add	r3, r3, ip
	add	r5, r2, r5, lsl #2
	vld1.32	{d0[1]}, [r4, :32]
	vld1.32	{d1[1]}, [r5, :32]
	asr	r4, r3, #16
	add	r3, r3, ip, lsl #1
	add	r4, r2, r4, lsl #2
	asr	r5, r3, #16
	sub	r3, r3, ip
	add	r5, r2, r5, lsl #2
	vld1.32	{d2[0]}, [r4, :32]
	asr	r4, r3, #16
	add	r3, r3, ip, lsl #1
	add	r4, r2, r4, lsl #2
	vld1.32	{d3[0]}, [r5, :32]
	asr	r5, r3, #16
	add	r3, r3, ip
	add	r5, r2, r5, lsl #2
	vld1.32	{d2[1]}, [r4, :32]
	vld1.32	{d3[1]}, [r5, :32]
	vuzp.8	d0, d1
	vuzp.8	d2, d3
	vuzp.8	d1, d3
	vuzp.8	d0, d2
	vshll.i8	q8, d1, #8
	vshll.i8	q14, d2, #8
	vshll.i8	q9, d0, #8
	subs	r0, r0, #8
	blt	8f
9:	vsri.16	q14, q8, #5
	asr	r4, r3, #16
	add	r3, r3, ip, lsl #1
	add	r4, r2, r4, lsl #2
	asr	r5, r3, #16
	sub	r3, r3, ip
	add	r5, r2, r5, lsl #2
	vld1.32	{d0[0]}, [r4, :32]
	asr	r4, r3, #16
	add	r3, r3, ip, lsl #1
	add	r4, r2, r4, lsl #2
	vld1.32	{d1[0]}, [r5, :32]
	asr	r5, r3, #16
	add	r3, r3, ip
	add	r5, r2, r5, lsl #2
	vld1.32	{d0[1]}, [r4, :32]
	vld1.32	{d1[1]}, [r5, :32]
	asr	r4, r3, #16
	add	r3, r3, ip, lsl #1
	add	r4, r2, r4, lsl #2
	asr	r5, r3, #16
	sub	r3, r3, ip
	add	r5, r2, r5, lsl #2
	vld1.32	{d2[0]}, [r4, :32]
	asr	r4, r3, #16
	add	r3, r3, ip, lsl #1
	add	r4, r2, r4, lsl #2
	vld1.32	{d3[0]}, [r5, :32]
	asr	r5, r3, #16
	add	r3, r3, ip
	add	r5, r2, r5, lsl #2
	vld1.32	{d2[1]}, [r4, :32]
	vld1.32	{d3[1]}, [r5, :32]
	vuzp.8	d0, d1
	vuzp.8	d2, d3
	vuzp.8	d1, d3
	vuzp.8	d0, d2
	vsri.16	q14, q9, #11
	vshll.i8	q8, d1, #8
	vst1.16	{d28-d29}, [r1, :128]!
	vshll.i8	q14, d2, #8
	vshll.i8	q9, d0, #8
	subs	r0, r0, #8
	bge	9b
8:	vsri.16	q14, q8, #5
	vsri.16	q14, q9, #11
	vst1.16	{d28-d29}, [r1, :128]!
7:	tst	r0, #7
	beq	10f
	tst	r0, #4
	beq	11f
	asr	r4, r3, #16
	add	r3, r3, ip, lsl #1
	add	r4, r2, r4, lsl #2
	asr	r5, r3, #16
	sub	r3, r3, ip
	add	r5, r2, r5, lsl #2
	vld1.32	{d2[0]}, [r4, :32]
	asr	r4, r3, #16
	add	r3, r3, ip, lsl #1
	add	r4, r2, r4, lsl #2
	vld1.32	{d3[0]}, [r5, :32]
	asr	r5, r3, #16
	add	r3, r3, ip
	add	r5, r2, r5, lsl #2
	vld1.32	{d2[1]}, [r4, :32]
	vld1.32	{d3[1]}, [r5, :32]
11:	tst	r0, #2
	beq	12f
	asr	r4, r3, #16
	add	r3, r3, ip
	add	r4, r2, r4, lsl #2
	asr	r5, r3, #16
	add	r3, r3, ip
	add	r5, r2, r5, lsl #2
	vld1.32	{d1[0]}, [r4, :32]
	vld1.32	{d1[1]}, [r5, :32]
12:	tst	r0, #1
	beq	13f
	asr	r4, r3, #16
	add	r3, r3, ip
	add	r4, r2, r4, lsl #2
	vld1.32	{d0[1]}, [r4, :32]
13:	vuzp.8	d0, d1
	vuzp.8	d2, d3
	vuzp.8	d1, d3
	vuzp.8	d0, d2
	vshll.i8	q8, d1, #8
	vshll.i8	q14, d2, #8
	vshll.i8	q9, d0, #8
	vsri.16	q14, q8, #5
	vsri.16	q14, q9, #11
	tst	r0, #4
	beq	14f
	vst1.16	{d29}, [r1, :64]!
14:	tst	r0, #2
	beq	15f
	vst1.16	{d28[2]}, [r1]!
	vst1.16	{d28[3]}, [r1]!
15:	tst	r0, #1
	beq	10f
	vst1.16	{d28[1]}, [r1]!
10:	pop	{r4, r5, r6, pc}
0:	tst	r0, #7
	beq	16f
	tst	r0, #4
	beq	17f
	asr	r4, r3, #16
	add	r3, r3, ip, lsl #1
	add	r4, r2, r4, lsl #2
	asr	r5, r3, #16
	sub	r3, r3, ip
	add	r5, r2, r5, lsl #2
	vld1.32	{d2[0]}, [r4, :32]
	asr	r4, r3, #16
	add	r3, r3, ip, lsl #1
	add	r4, r2, r4, lsl #2
	vld1.32	{d3[0]}, [r5, :32]
	asr	r5, r3, #16
	add	r3, r3, ip
	add	r5, r2, r5, lsl #2
	vld1.32	{d2[1]}, [r4, :32]
	vld1.32	{d3[1]}, [r5, :32]
17:	tst	r0, #2
	beq	18f
	asr	r4, r3, #16
	add	r3, r3, ip
	add	r4, r2, r4, lsl #2
	asr	r5, r3, #16
	add	r3, r3, ip
	add	r5, r2, r5, lsl #2
	vld1.32	{d1[0]}, [r4, :32]
	vld1.32	{d1[1]}, [r5, :32]
18:	tst	r0, #1
	beq	19f
	asr	r4, r3, #16
	add	r3, r3, ip
	add	r4, r2, r4, lsl #2
	vld1.32	{d0[1]}, [r4, :32]
19:	vuzp.8	d0, d1
	vuzp.8	d2, d3
	vuzp.8	d1, d3
	vuzp.8	d0, d2
	vshll.i8	q8, d1, #8
	vshll.i8	q14, d2, #8
	vshll.i8	q9, d0, #8
	vsri.16	q14, q8, #5
	vsri.16	q14, q9, #11
	tst	r0, #4
	beq	20f
	vst1.16	{d29}, [r1]!
20:	tst	r0, #2
	beq	21f
	vst1.16	{d28[2]}, [r1]!
	vst1.16	{d28[3]}, [r1]!
21:	tst	r0, #1
	beq	16f
	vst1.16	{d28[1]}, [r1]!
16:	pop	{r4, r5, r6, pc}

.global _pixman_scaled_bilinear_scanline_8888_8888_ADD_asm_neon
_pixman_scaled_bilinear_scanline_8888_8888_ADD_asm_neon:
	mov	ip, sp
	push	{r4, r5, r6, r7, r8, r9}
	mov	r7, #28
	ldm	ip, {r4, r5, r6, ip}
	mul	r7, r7, r6
	sub	r2, r2, r1
	cmp	ip, #0
	ble	0f
	vdup.16	q12, r5
	vdup.16	q13, r6
	vdup.8	d28, r3
	vdup.8	d29, r4
	vadd.i16	d25, d25, d26
	cmp	ip, #1
	blt	1f
	tst	r0, #4
	beq	1f
	vshr.u16	q15, q12, #8
	vadd.i16	q12, q12, q13
	asr	r3, r5, #16
	add	r5, r5, r6
	add	r3, r1, r3, lsl #2
	vld1.32	{d0}, [r3], r2
	vld1.32	{d1}, [r3]
	vld1.32	{d18[0]}, [r0]
	pld	[r0, #112]
	vmull.u8	q1, d0, d28
	vmlal.u8	q1, d1, d29
	vshll.u16	q0, d2, #8
	vmlsl.u16	q0, d2, d30
	vmlal.u16	q0, d3, d30
	vshrn.i32	d0, q0, #16
	vmovn.i16	d0, q0
	vqadd.u8	q0, q9, q0
	vst1.32	{d0[0]}, [r0, :32]!
	sub	ip, ip, #1
1:	vadd.i16	q13, q13, q13
	vshr.u16	q15, q12, #8
	vadd.i16	q12, q12, q13
	cmp	ip, #2
	blt	2f
	tst	r0, #8
	beq	2f
	asr	r3, r5, #16
	add	r5, r5, r6
	add	r3, r1, r3, lsl #2
	vld1.32	{d0}, [r3], r2
	vld1.32	{d1}, [r3]
	vmull.u8	q1, d0, d28
	vmlal.u8	q1, d1, d29
	asr	r3, r5, #16
	add	r5, r5, r6
	add	r3, r1, r3, lsl #2
	vld1.32	{d20}, [r3], r2
	vld1.32	{d21}, [r3]
	vmull.u8	q11, d20, d28
	vmlal.u8	q11, d21, d29
	vld1.32	{d18}, [r0]
	pld	[r0, #112]
	vshll.u16	q0, d2, #8
	vmlsl.u16	q0, d2, d30
	vmlal.u16	q0, d3, d30
	vshll.u16	q10, d22, #8
	vmlsl.u16	q10, d22, d31
	vmlal.u16	q10, d23, d31
	vshrn.i32	d0, q0, #16
	vshrn.i32	d1, q10, #16
	vshr.u16	q15, q12, #8
	vadd.i16	q12, q12, q13
	vmovn.i16	d0, q0
	vqadd.u8	q0, q9, q0
	vst1.32	{d0}, [r0]!
	sub	ip, ip, #2
2:	subs	ip, ip, #4
	blt	3f
	asr	r7, r7, #14
	asr	r3, r5, #16
	add	r5, r5, r6
	add	r3, r1, r3, lsl #2
	vld1.32	{d0}, [r3], r2
	vld1.32	{d1}, [r3]
	vmull.u8	q1, d0, d28
	vmlal.u8	q1, d1, d29
	asr	r3, r5, #16
	add	r5, r5, r6
	add	r3, r1, r3, lsl #2
	vld1.32	{d20}, [r3], r2
	vld1.32	{d21}, [r3]
	vmull.u8	q11, d20, d28
	vmlal.u8	q11, d21, d29
	asr	r3, r5, #16
	add	r5, r5, r6
	add	r3, r1, r3, lsl #2
	vld1.32	{d4}, [r3], r2
	vld1.32	{d5}, [r3]
	vmull.u8	q3, d4, d28
	vmlal.u8	q3, d5, d29
	asr	r3, r5, #16
	add	r5, r5, r6
	add	r3, r1, r3, lsl #2
	vld1.32	{d16}, [r3], r2
	vld1.32	{d17}, [r3]
	vmull.u8	q9, d16, d28
	vmlal.u8	q9, d17, d29
	pld	[r3, r7]
	sub	r3, r3, r2
	vshll.u16	q0, d2, #8
	vmlsl.u16	q0, d2, d30
	vmlal.u16	q0, d3, d30
	vshll.u16	q10, d22, #8
	vmlsl.u16	q10, d22, d31
	vmlal.u16	q10, d23, d31
	vshr.u16	q15, q12, #8
	vshll.u16	q2, d6, #8
	vmlsl.u16	q2, d6, d30
	vmlal.u16	q2, d7, d30
	vshll.u16	q8, d18, #8
	vld1.32	{d2-d3}, [r0]
	pld	[r0, #112]
	pld	[r3, r7]
	vmlsl.u16	q8, d18, d31
	vmlal.u16	q8, d19, d31
	vadd.i16	q12, q12, q13
	vshrn.i32	d0, q0, #16
	vshrn.i32	d1, q10, #16
	vshrn.i32	d4, q2, #16
	vshrn.i32	d5, q8, #16
	vshr.u16	q15, q12, #8
	vmovn.i16	d0, q0
	vmovn.i16	d1, q2
	vadd.i16	q12, q12, q13
	vqadd.u8	q0, q1, q0
	vst1.32	{d0-d1}, [r0]!
	subs	ip, ip, #4
	blt	3f
4:	asr	r3, r5, #16
	add	r5, r5, r6
	add	r3, r1, r3, lsl #2
	vld1.32	{d0}, [r3], r2
	vld1.32	{d1}, [r3]
	vmull.u8	q1, d0, d28
	vmlal.u8	q1, d1, d29
	asr	r3, r5, #16
	add	r5, r5, r6
	add	r3, r1, r3, lsl #2
	vld1.32	{d20}, [r3], r2
	vld1.32	{d21}, [r3]
	vmull.u8	q11, d20, d28
	vmlal.u8	q11, d21, d29
	asr	r3, r5, #16
	add	r5, r5, r6
	add	r3, r1, r3, lsl #2
	vld1.32	{d4}, [r3], r2
	vld1.32	{d5}, [r3]
	vmull.u8	q3, d4, d28
	vmlal.u8	q3, d5, d29
	asr	r3, r5, #16
	add	r5, r5, r6
	add	r3, r1, r3, lsl #2
	vld1.32	{d16}, [r3], r2
	vld1.32	{d17}, [r3]
	vmull.u8	q9, d16, d28
	vmlal.u8	q9, d17, d29
	pld	[r3, r7]
	sub	r3, r3, r2
	vshll.u16	q0, d2, #8
	vmlsl.u16	q0, d2, d30
	vmlal.u16	q0, d3, d30
	vshll.u16	q10, d22, #8
	vmlsl.u16	q10, d22, d31
	vmlal.u16	q10, d23, d31
	vshr.u16	q15, q12, #8
	vshll.u16	q2, d6, #8
	vmlsl.u16	q2, d6, d30
	vmlal.u16	q2, d7, d30
	vshll.u16	q8, d18, #8
	vld1.32	{d2-d3}, [r0]
	pld	[r0, #112]
	pld	[r3, r7]
	vmlsl.u16	q8, d18, d31
	vmlal.u16	q8, d19, d31
	vadd.i16	q12, q12, q13
	vshrn.i32	d0, q0, #16
	vshrn.i32	d1, q10, #16
	vshrn.i32	d4, q2, #16
	vshrn.i32	d5, q8, #16
	vshr.u16	q15, q12, #8
	vmovn.i16	d0, q0
	vmovn.i16	d1, q2
	vadd.i16	q12, q12, q13
	vqadd.u8	q0, q1, q0
	vst1.32	{d0-d1}, [r0]!
	subs	ip, ip, #4
	bge	4b
3:	tst	ip, #2
	beq	5f
	asr	r3, r5, #16
	add	r5, r5, r6
	add	r3, r1, r3, lsl #2
	vld1.32	{d0}, [r3], r2
	vld1.32	{d1}, [r3]
	vmull.u8	q1, d0, d28
	vmlal.u8	q1, d1, d29
	asr	r3, r5, #16
	add	r5, r5, r6
	add	r3, r1, r3, lsl #2
	vld1.32	{d20}, [r3], r2
	vld1.32	{d21}, [r3]
	vmull.u8	q11, d20, d28
	vmlal.u8	q11, d21, d29
	vld1.32	{d18}, [r0]
	pld	[r0, #112]
	vshll.u16	q0, d2, #8
	vmlsl.u16	q0, d2, d30
	vmlal.u16	q0, d3, d30
	vshll.u16	q10, d22, #8
	vmlsl.u16	q10, d22, d31
	vmlal.u16	q10, d23, d31
	vshrn.i32	d0, q0, #16
	vshrn.i32	d1, q10, #16
	vshr.u16	q15, q12, #8
	vadd.i16	q12, q12, q13
	vmovn.i16	d0, q0
	vqadd.u8	q0, q9, q0
	vst1.32	{d0}, [r0]!
5:	tst	ip, #1
	beq	0f
	asr	r3, r5, #16
	add	r5, r5, r6
	add	r3, r1, r3, lsl #2
	vld1.32	{d0}, [r3], r2
	vld1.32	{d1}, [r3]
	vld1.32	{d18[0]}, [r0]
	pld	[r0, #112]
	vmull.u8	q1, d0, d28
	vmlal.u8	q1, d1, d29
	vshll.u16	q0, d2, #8
	vmlsl.u16	q0, d2, d30
	vmlal.u16	q0, d3, d30
	vshrn.i32	d0, q0, #16
	vmovn.i16	d0, q0
	vqadd.u8	q0, q9, q0
	vst1.32	{d0[0]}, [r0, :32]!
0:	pop	{r4, r5, r6, r7, r8, r9}
	bx	lr

.global _pixman_composite_over_8888_8_8888_asm_neon
_pixman_composite_over_8888_8_8888_asm_neon:
	push	{r4, r5, r6, r7, r8, r9, sl, fp, ip, lr}
	ldr	r4, [sp, #40]
	ldr	r7, [sp, #48]
	mov	sl, #0
	ldr	r5, [sp, #44]
	ldr	r8, [sp, #52]
	mov	r6, r2
	mov	fp, r4
	mov	ip, r6
	mov	lr, r7
	lsl	r9, r1, #4
	sub	r9, r9, #11
	vstmdb	sp!, {d8-d15}
	push	{r0, r1}
	subs	r1, r1, #1
	str	r1, [sp, #4]
	blt	0f
	cmp	r0, #16
	blt	1f
15:	tst	r6, #15
	beq	2f
	tst	r6, #4
	beq	3f
	vld1.32	{d0[1]}, [r4]!
	vld1.8	{d15[1]}, [r7]!
	vld1.32	{d4[1]}, [r6]!
	add	sl, sl, #1
	sub	r0, r0, #1
3:	tst	r6, #8
	beq	4f
	vld1.32	{d1}, [r4]!
	vld1.8	{d15[2]}, [r7]!
	vld1.8	{d15[3]}, [r7]!
	vld1.32	{d5}, [r6, :64]!
	add	sl, sl, #2
	sub	r0, r0, #2
4:	vld1.32	{d2-d3}, [r4]!
	vld1.8	{d15[4]}, [r7]!
	vld1.8	{d15[5]}, [r7]!
	vld1.8	{d15[6]}, [r7]!
	vld1.8	{d15[7]}, [r7]!
	vld1.32	{d6-d7}, [r6, :128]!
	add	sl, sl, #4
	sub	r0, r0, #4
	vuzp.8	d0, d1
	vuzp.8	d2, d3
	vuzp.8	d1, d3
	vuzp.8	d0, d2
	vuzp.8	d4, d5
	vuzp.8	d6, d7
	vuzp.8	d5, d7
	vuzp.8	d4, d6
	vmull.u8	q8, d15, d3
	vmull.u8	q6, d15, d2
	vmull.u8	q5, d15, d1
	vmull.u8	q4, d15, d0
	vrshr.u16	q13, q8, #8
	vrshr.u16	q12, q6, #8
	vrshr.u16	q11, q5, #8
	vrshr.u16	q10, q4, #8
	vraddhn.i16	d3, q8, q13
	vraddhn.i16	d2, q6, q12
	vraddhn.i16	d1, q5, q11
	vraddhn.i16	d0, q4, q10
	vmvn	d24, d3
	vmull.u8	q8, d24, d4
	vmull.u8	q9, d24, d5
	vmull.u8	q10, d24, d6
	vmull.u8	q11, d24, d7
	ldr	r1, [sp]
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r1
	pld	[fp, sl, lsl #2]
	pld	[ip, sl, lsl #2]
	pld	[lr, sl]
	subge	sl, sl, r1
	subsge	r9, r9, #16
	ldrbge	r1, [fp, r5, lsl #2]!
	ldrbge	r1, [ip, r3, lsl #2]!
	ldrbge	r1, [lr, r8]!
	vrshr.u16	q14, q8, #8
	vrshr.u16	q15, q9, #8
	vrshr.u16	q12, q10, #8
	vrshr.u16	q13, q11, #8
	vraddhn.i16	d28, q14, q8
	vraddhn.i16	d29, q15, q9
	vraddhn.i16	d30, q12, q10
	vraddhn.i16	d31, q13, q11
	vqadd.u8	q14, q0, q14
	vqadd.u8	q15, q1, q15
	vzip.8	d28, d30
	vzip.8	d29, d31
	vzip.8	d30, d31
	vzip.8	d28, d29
	tst	r2, #4
	beq	5f
	vst1.32	{d28[1]}, [r2]!
5:	tst	r2, #8
	beq	6f
	vst1.32	{d29}, [r2, :64]!
6:	vst1.32	{d30-d31}, [r2, :128]!
2:	vld4.8	{d4-d7}, [r6, :128]!
	vld4.8	{d0-d3}, [r4]!
	vld1.8	{d15}, [r7]!
	add	sl, sl, #8
	vmull.u8	q8, d15, d3
	vmull.u8	q6, d15, d2
	vmull.u8	q5, d15, d1
	vmull.u8	q4, d15, d0
	vrshr.u16	q13, q8, #8
	vrshr.u16	q12, q6, #8
	vrshr.u16	q11, q5, #8
	vrshr.u16	q10, q4, #8
	vraddhn.i16	d3, q8, q13
	vraddhn.i16	d2, q6, q12
	vraddhn.i16	d1, q5, q11
	vraddhn.i16	d0, q4, q10
	vmvn	d24, d3
	vmull.u8	q8, d24, d4
	vmull.u8	q9, d24, d5
	vmull.u8	q10, d24, d6
	vmull.u8	q11, d24, d7
	ldr	r1, [sp]
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r1
	pld	[fp, sl, lsl #2]
	pld	[ip, sl, lsl #2]
	pld	[lr, sl]
	subge	sl, sl, r1
	subsge	r9, r9, #16
	ldrbge	r1, [fp, r5, lsl #2]!
	ldrbge	r1, [ip, r3, lsl #2]!
	ldrbge	r1, [lr, r8]!
	subs	r0, r0, #16
	blt	7f
8:	vld4.8	{d4-d7}, [r6, :128]!
	vrshr.u16	q14, q8, #8
	vrshr.u16	q15, q9, #8
	vrshr.u16	q12, q10, #8
	vrshr.u16	q13, q11, #8
	vraddhn.i16	d28, q14, q8
	vraddhn.i16	d29, q15, q9
	vraddhn.i16	d30, q12, q10
	vraddhn.i16	d31, q13, q11
	vqadd.u8	q14, q0, q14
	vqadd.u8	q15, q1, q15
	vld4.8	{d0-d3}, [r4]!
	ldr	r1, [sp]
	add	sl, sl, #8
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r1
	pld	[fp, sl, lsl #2]
	pld	[ip, sl, lsl #2]
	pld	[lr, sl]
	subge	sl, sl, r1
	subsge	r9, r9, #16
	ldrbge	r1, [fp, r5, lsl #2]!
	ldrbge	r1, [ip, r3, lsl #2]!
	ldrbge	r1, [lr, r8]!
	vld1.8	{d15}, [r7]!
	vmull.u8	q8, d15, d3
	vmull.u8	q6, d15, d2
	vmull.u8	q5, d15, d1
	vmull.u8	q4, d15, d0
	vrshr.u16	q13, q8, #8
	vrshr.u16	q12, q6, #8
	vrshr.u16	q11, q5, #8
	vrshr.u16	q10, q4, #8
	vraddhn.i16	d3, q8, q13
	vraddhn.i16	d2, q6, q12
	vraddhn.i16	d1, q5, q11
	vraddhn.i16	d0, q4, q10
	vmvn	d24, d3
	vmull.u8	q8, d24, d4
	vmull.u8	q9, d24, d5
	vmull.u8	q10, d24, d6
	vmull.u8	q11, d24, d7
	vst4.8	{d28-d31}, [r2, :128]!
	subs	r0, r0, #8
	bge	8b
7:	vrshr.u16	q14, q8, #8
	vrshr.u16	q15, q9, #8
	vrshr.u16	q12, q10, #8
	vrshr.u16	q13, q11, #8
	vraddhn.i16	d28, q14, q8
	vraddhn.i16	d29, q15, q9
	vraddhn.i16	d30, q12, q10
	vraddhn.i16	d31, q13, q11
	vqadd.u8	q14, q0, q14
	vqadd.u8	q15, q1, q15
	vst4.8	{d28-d31}, [r2, :128]!
	tst	r0, #7
	beq	9f
	tst	r0, #4
	beq	10f
	vld1.32	{d2-d3}, [r4]!
	vld1.8	{d15[4]}, [r7]!
	vld1.8	{d15[5]}, [r7]!
	vld1.8	{d15[6]}, [r7]!
	vld1.8	{d15[7]}, [r7]!
	vld1.32	{d6-d7}, [r6, :128]!
	add	sl, sl, #4
10:	tst	r0, #2
	beq	11f
	vld1.32	{d1}, [r4]!
	vld1.8	{d15[2]}, [r7]!
	vld1.8	{d15[3]}, [r7]!
	vld1.32	{d5}, [r6, :64]!
	add	sl, sl, #2
11:	tst	r0, #1
	beq	12f
	vld1.32	{d0[1]}, [r4]!
	vld1.8	{d15[1]}, [r7]!
	vld1.32	{d4[1]}, [r6]!
	add	sl, sl, #1
12:	vuzp.8	d0, d1
	vuzp.8	d2, d3
	vuzp.8	d1, d3
	vuzp.8	d0, d2
	vuzp.8	d4, d5
	vuzp.8	d6, d7
	vuzp.8	d5, d7
	vuzp.8	d4, d6
	vmull.u8	q8, d15, d3
	vmull.u8	q6, d15, d2
	vmull.u8	q5, d15, d1
	vmull.u8	q4, d15, d0
	vrshr.u16	q13, q8, #8
	vrshr.u16	q12, q6, #8
	vrshr.u16	q11, q5, #8
	vrshr.u16	q10, q4, #8
	vraddhn.i16	d3, q8, q13
	vraddhn.i16	d2, q6, q12
	vraddhn.i16	d1, q5, q11
	vraddhn.i16	d0, q4, q10
	vmvn	d24, d3
	vmull.u8	q8, d24, d4
	vmull.u8	q9, d24, d5
	vmull.u8	q10, d24, d6
	vmull.u8	q11, d24, d7
	ldr	r1, [sp]
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r1
	pld	[fp, sl, lsl #2]
	pld	[ip, sl, lsl #2]
	pld	[lr, sl]
	subge	sl, sl, r1
	subsge	r9, r9, #16
	ldrbge	r1, [fp, r5, lsl #2]!
	ldrbge	r1, [ip, r3, lsl #2]!
	ldrbge	r1, [lr, r8]!
	vrshr.u16	q14, q8, #8
	vrshr.u16	q15, q9, #8
	vrshr.u16	q12, q10, #8
	vrshr.u16	q13, q11, #8
	vraddhn.i16	d28, q14, q8
	vraddhn.i16	d29, q15, q9
	vraddhn.i16	d30, q12, q10
	vraddhn.i16	d31, q13, q11
	vqadd.u8	q14, q0, q14
	vqadd.u8	q15, q1, q15
	vzip.8	d28, d30
	vzip.8	d29, d31
	vzip.8	d30, d31
	vzip.8	d28, d29
	tst	r0, #4
	beq	13f
	vst1.32	{d30-d31}, [r2, :128]!
13:	tst	r0, #2
	beq	14f
	vst1.32	{d29}, [r2, :64]!
14:	tst	r0, #1
	beq	9f
	vst1.32	{d28[1]}, [r2]!
9:	ldrd	r0, [sp]
	add	r2, r2, r3, lsl #2
	add	r4, r4, r5, lsl #2
	add	r7, r7, r8
	sub	r2, r2, r0, lsl #2
	sub	r4, r4, r0, lsl #2
	sub	r7, r7, r0
	subs	r1, r1, #1
	mov	r6, r2
	str	r1, [sp, #4]
	bge	15b
	pop	{r0, r1}
	vldmia	sp!, {d8-d15}
	pop	{r4, r5, r6, r7, r8, r9, sl, fp, ip, pc}
1:	tst	r0, #8
	beq	16f
	vld4.8	{d4-d7}, [r6]!
	vld4.8	{d0-d3}, [r4]!
	vld1.8	{d15}, [r7]!
	vmull.u8	q8, d15, d3
	vmull.u8	q6, d15, d2
	vmull.u8	q5, d15, d1
	vmull.u8	q4, d15, d0
	vrshr.u16	q13, q8, #8
	vrshr.u16	q12, q6, #8
	vrshr.u16	q11, q5, #8
	vrshr.u16	q10, q4, #8
	vraddhn.i16	d3, q8, q13
	vraddhn.i16	d2, q6, q12
	vraddhn.i16	d1, q5, q11
	vraddhn.i16	d0, q4, q10
	vmvn	d24, d3
	vmull.u8	q8, d24, d4
	vmull.u8	q9, d24, d5
	vmull.u8	q10, d24, d6
	vmull.u8	q11, d24, d7
	vrshr.u16	q14, q8, #8
	vrshr.u16	q15, q9, #8
	vrshr.u16	q12, q10, #8
	vrshr.u16	q13, q11, #8
	vraddhn.i16	d28, q14, q8
	vraddhn.i16	d29, q15, q9
	vraddhn.i16	d30, q12, q10
	vraddhn.i16	d31, q13, q11
	vqadd.u8	q14, q0, q14
	vqadd.u8	q15, q1, q15
	vst4.8	{d28-d31}, [r2]!
16:	tst	r0, #7
	beq	17f
	tst	r0, #4
	beq	18f
	vld1.32	{d2-d3}, [r4]!
	vld1.8	{d15[4]}, [r7]!
	vld1.8	{d15[5]}, [r7]!
	vld1.8	{d15[6]}, [r7]!
	vld1.8	{d15[7]}, [r7]!
	vld1.32	{d6-d7}, [r6]!
18:	tst	r0, #2
	beq	19f
	vld1.32	{d1}, [r4]!
	vld1.8	{d15[2]}, [r7]!
	vld1.8	{d15[3]}, [r7]!
	vld1.32	{d5}, [r6]!
19:	tst	r0, #1
	beq	20f
	vld1.32	{d0[1]}, [r4]!
	vld1.8	{d15[1]}, [r7]!
	vld1.32	{d4[1]}, [r6]!
20:	vuzp.8	d0, d1
	vuzp.8	d2, d3
	vuzp.8	d1, d3
	vuzp.8	d0, d2
	vuzp.8	d4, d5
	vuzp.8	d6, d7
	vuzp.8	d5, d7
	vuzp.8	d4, d6
	vmull.u8	q8, d15, d3
	vmull.u8	q6, d15, d2
	vmull.u8	q5, d15, d1
	vmull.u8	q4, d15, d0
	vrshr.u16	q13, q8, #8
	vrshr.u16	q12, q6, #8
	vrshr.u16	q11, q5, #8
	vrshr.u16	q10, q4, #8
	vraddhn.i16	d3, q8, q13
	vraddhn.i16	d2, q6, q12
	vraddhn.i16	d1, q5, q11
	vraddhn.i16	d0, q4, q10
	vmvn	d24, d3
	vmull.u8	q8, d24, d4
	vmull.u8	q9, d24, d5
	vmull.u8	q10, d24, d6
	vmull.u8	q11, d24, d7
	vrshr.u16	q14, q8, #8
	vrshr.u16	q15, q9, #8
	vrshr.u16	q12, q10, #8
	vrshr.u16	q13, q11, #8
	vraddhn.i16	d28, q14, q8
	vraddhn.i16	d29, q15, q9
	vraddhn.i16	d30, q12, q10
	vraddhn.i16	d31, q13, q11
	vqadd.u8	q14, q0, q14
	vqadd.u8	q15, q1, q15
	vzip.8	d28, d30
	vzip.8	d29, d31
	vzip.8	d30, d31
	vzip.8	d28, d29
	tst	r0, #4
	beq	21f
	vst1.32	{d30-d31}, [r2]!
21:	tst	r0, #2
	beq	22f
	vst1.32	{d29}, [r2]!
22:	tst	r0, #1
	beq	17f
	vst1.32	{d28[1]}, [r2]!
17:	ldrd	r0, [sp]
	add	r2, r2, r3, lsl #2
	add	r4, r4, r5, lsl #2
	add	r7, r7, r8
	sub	r2, r2, r0, lsl #2
	sub	r4, r4, r0, lsl #2
	sub	r7, r7, r0
	subs	r1, r1, #1
	mov	r6, r2
	str	r1, [sp, #4]
	bge	1b
0:	pop	{r0, r1}
	vldmia	sp!, {d8-d15}
	pop	{r4, r5, r6, r7, r8, r9, sl, fp, ip, pc}

.global _pixman_composite_over_0565_n_0565_asm_neon
_pixman_composite_over_0565_n_0565_asm_neon:
	push	{r4, r5, r6, r7, r8, r9, sl, fp, ip, lr}
	ldr	r4, [sp, #40]
	mov	sl, #0
	ldr	r5, [sp, #44]
	mov	r6, r2
	mov	fp, r4
	mov	ip, r6
	mov	lr, r7
	lsl	r9, r1, #4
	sub	r9, r9, #11
	add	r8, sp, #48
	vstmdb	sp!, {d8-d15}
	vld1.32	{d15[0]}, [r8]
	vdup.8	d15, d15[3]
	subs	r1, r1, #1
	mov	r7, r0
	blt	0f
	cmp	r0, #16
	blt	1f
16:	tst	r6, #15
	beq	2f
	tst	r6, #2
	beq	3f
	vld1.16	{d8[1]}, [r4]!
	vld1.16	{d10[1]}, [r6]!
	add	sl, sl, #1
	sub	r0, r0, #1
3:	tst	r6, #4
	beq	4f
	vld1.16	{d8[2]}, [r4]!
	vld1.16	{d8[3]}, [r4]!
	vld1.16	{d10[2]}, [r6]!
	vld1.16	{d10[3]}, [r6]!
	add	sl, sl, #2
	sub	r0, r0, #2
4:	tst	r6, #8
	beq	5f
	vld1.16	{d9}, [r4]!
	vld1.16	{d11}, [r6, :64]!
	add	sl, sl, #4
	sub	r0, r0, #4
5:	vshrn.i16	d2, q4, #8
	vshrn.i16	d1, q4, #3
	vsli.16	q4, q4, #5
	vsri.8	d2, d2, #5
	vsri.8	d1, d1, #6
	vshrn.i16	d0, q4, #2
	vshrn.i16	d6, q5, #8
	vshrn.i16	d5, q5, #3
	vsli.16	q5, q5, #5
	vsri.8	d6, d6, #5
	vsri.8	d5, d5, #6
	vshrn.i16	d4, q5, #2
	vmvn	d7, d15
	vmull.u8	q6, d15, d2
	vmull.u8	q5, d15, d1
	vmull.u8	q4, d15, d0
	vmull.u8	q8, d7, d4
	vmull.u8	q9, d7, d5
	vmull.u8	q13, d7, d6
	vrshr.u16	q12, q6, #8
	vrshr.u16	q11, q5, #8
	vrshr.u16	q10, q4, #8
	vraddhn.i16	d2, q6, q12
	vraddhn.i16	d1, q5, q11
	vraddhn.i16	d0, q4, q10
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r7
	pld	[fp, sl, lsl #1]
	pld	[ip, sl, lsl #1]
	subge	sl, sl, r7
	subsge	r9, r9, #16
	ldrbge	r8, [fp, r5, lsl #1]!
	ldrbge	r8, [ip, r3, lsl #1]!
	vrshr.u16	q14, q8, #8
	vrshr.u16	q15, q9, #8
	vrshr.u16	q12, q13, #8
	vraddhn.i16	d28, q14, q8
	vraddhn.i16	d29, q15, q9
	vraddhn.i16	d30, q12, q13
	vqadd.u8	q0, q0, q14
	vqadd.u8	q1, q1, q15
	vshll.i8	q15, d1, #8
	vshll.i8	q14, d2, #8
	vshll.i8	q3, d0, #8
	vsri.16	q14, q15, #5
	vsri.16	q14, q3, #11
	tst	r2, #2
	beq	6f
	vst1.16	{d28[1]}, [r2]!
6:	tst	r2, #4
	beq	7f
	vst1.16	{d28[2]}, [r2]!
	vst1.16	{d28[3]}, [r2]!
7:	tst	r2, #8
	beq	2f
	vst1.16	{d29}, [r2, :64]!
2:	vld1.16	{d10-d11}, [r6, :128]!
	vld1.16	{d8-d9}, [r4]!
	add	sl, sl, #8
	vshrn.i16	d2, q4, #8
	vshrn.i16	d1, q4, #3
	vsli.16	q4, q4, #5
	vsri.8	d2, d2, #5
	vsri.8	d1, d1, #6
	vshrn.i16	d0, q4, #2
	vshrn.i16	d6, q5, #8
	vshrn.i16	d5, q5, #3
	vsli.16	q5, q5, #5
	vsri.8	d6, d6, #5
	vsri.8	d5, d5, #6
	vshrn.i16	d4, q5, #2
	vmvn	d7, d15
	vmull.u8	q6, d15, d2
	vmull.u8	q5, d15, d1
	vmull.u8	q4, d15, d0
	vmull.u8	q8, d7, d4
	vmull.u8	q9, d7, d5
	vmull.u8	q13, d7, d6
	vrshr.u16	q12, q6, #8
	vrshr.u16	q11, q5, #8
	vrshr.u16	q10, q4, #8
	vraddhn.i16	d2, q6, q12
	vraddhn.i16	d1, q5, q11
	vraddhn.i16	d0, q4, q10
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r7
	pld	[fp, sl, lsl #1]
	pld	[ip, sl, lsl #1]
	subge	sl, sl, r7
	subsge	r9, r9, #16
	ldrbge	r8, [fp, r5, lsl #1]!
	ldrbge	r8, [ip, r3, lsl #1]!
	subs	r0, r0, #16
	blt	8f
9:	vrshr.u16	q14, q8, #8
	vrshr.u16	q15, q9, #8
	vrshr.u16	q12, q13, #8
	vraddhn.i16	d28, q14, q8
	vraddhn.i16	d29, q15, q9
	vraddhn.i16	d30, q12, q13
	vqadd.u8	q0, q0, q14
	vqadd.u8	q1, q1, q15
	vshll.i8	q15, d1, #8
	vshll.i8	q14, d2, #8
	vshll.i8	q3, d0, #8
	vsri.16	q14, q15, #5
	vsri.16	q14, q3, #11
	vld1.16	{d8-d9}, [r4]!
	vld1.16	{d10-d11}, [r6, :128]!
	add	sl, sl, #8
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r7
	pld	[fp, sl, lsl #1]
	pld	[ip, sl, lsl #1]
	subge	sl, sl, r7
	subsge	r9, r9, #16
	ldrbge	r8, [fp, r5, lsl #1]!
	ldrbge	r8, [ip, r3, lsl #1]!
	vshrn.i16	d2, q4, #8
	vshrn.i16	d1, q4, #3
	vsli.16	q4, q4, #5
	vsri.8	d2, d2, #5
	vsri.8	d1, d1, #6
	vshrn.i16	d0, q4, #2
	vshrn.i16	d6, q5, #8
	vshrn.i16	d5, q5, #3
	vsli.16	q5, q5, #5
	vsri.8	d6, d6, #5
	vsri.8	d5, d5, #6
	vshrn.i16	d4, q5, #2
	vmvn	d7, d15
	vmull.u8	q6, d15, d2
	vmull.u8	q5, d15, d1
	vmull.u8	q4, d15, d0
	vmull.u8	q8, d7, d4
	vmull.u8	q9, d7, d5
	vmull.u8	q13, d7, d6
	vrshr.u16	q12, q6, #8
	vrshr.u16	q11, q5, #8
	vrshr.u16	q10, q4, #8
	vraddhn.i16	d2, q6, q12
	vraddhn.i16	d1, q5, q11
	vraddhn.i16	d0, q4, q10
	vst1.16	{d28-d29}, [r2, :128]!
	subs	r0, r0, #8
	bge	9b
8:	vrshr.u16	q14, q8, #8
	vrshr.u16	q15, q9, #8
	vrshr.u16	q12, q13, #8
	vraddhn.i16	d28, q14, q8
	vraddhn.i16	d29, q15, q9
	vraddhn.i16	d30, q12, q13
	vqadd.u8	q0, q0, q14
	vqadd.u8	q1, q1, q15
	vshll.i8	q15, d1, #8
	vshll.i8	q14, d2, #8
	vshll.i8	q3, d0, #8
	vsri.16	q14, q15, #5
	vsri.16	q14, q3, #11
	vst1.16	{d28-d29}, [r2, :128]!
	tst	r0, #7
	beq	10f
	tst	r0, #4
	beq	11f
	vld1.16	{d9}, [r4]!
	vld1.16	{d11}, [r6, :64]!
	add	sl, sl, #4
11:	tst	r0, #2
	beq	12f
	vld1.16	{d8[2]}, [r4]!
	vld1.16	{d8[3]}, [r4]!
	vld1.16	{d10[2]}, [r6]!
	vld1.16	{d10[3]}, [r6]!
	add	sl, sl, #2
12:	tst	r0, #1
	beq	13f
	vld1.16	{d8[1]}, [r4]!
	vld1.16	{d10[1]}, [r6]!
	add	sl, sl, #1
13:	vshrn.i16	d2, q4, #8
	vshrn.i16	d1, q4, #3
	vsli.16	q4, q4, #5
	vsri.8	d2, d2, #5
	vsri.8	d1, d1, #6
	vshrn.i16	d0, q4, #2
	vshrn.i16	d6, q5, #8
	vshrn.i16	d5, q5, #3
	vsli.16	q5, q5, #5
	vsri.8	d6, d6, #5
	vsri.8	d5, d5, #6
	vshrn.i16	d4, q5, #2
	vmvn	d7, d15
	vmull.u8	q6, d15, d2
	vmull.u8	q5, d15, d1
	vmull.u8	q4, d15, d0
	vmull.u8	q8, d7, d4
	vmull.u8	q9, d7, d5
	vmull.u8	q13, d7, d6
	vrshr.u16	q12, q6, #8
	vrshr.u16	q11, q5, #8
	vrshr.u16	q10, q4, #8
	vraddhn.i16	d2, q6, q12
	vraddhn.i16	d1, q5, q11
	vraddhn.i16	d0, q4, q10
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r7
	pld	[fp, sl, lsl #1]
	pld	[ip, sl, lsl #1]
	subge	sl, sl, r7
	subsge	r9, r9, #16
	ldrbge	r8, [fp, r5, lsl #1]!
	ldrbge	r8, [ip, r3, lsl #1]!
	vrshr.u16	q14, q8, #8
	vrshr.u16	q15, q9, #8
	vrshr.u16	q12, q13, #8
	vraddhn.i16	d28, q14, q8
	vraddhn.i16	d29, q15, q9
	vraddhn.i16	d30, q12, q13
	vqadd.u8	q0, q0, q14
	vqadd.u8	q1, q1, q15
	vshll.i8	q15, d1, #8
	vshll.i8	q14, d2, #8
	vshll.i8	q3, d0, #8
	vsri.16	q14, q15, #5
	vsri.16	q14, q3, #11
	tst	r0, #4
	beq	14f
	vst1.16	{d29}, [r2, :64]!
14:	tst	r0, #2
	beq	15f
	vst1.16	{d28[2]}, [r2]!
	vst1.16	{d28[3]}, [r2]!
15:	tst	r0, #1
	beq	10f
	vst1.16	{d28[1]}, [r2]!
10:	mov	r0, r7
	add	r2, r2, r3, lsl #1
	add	r4, r4, r5, lsl #1
	sub	r2, r2, r0, lsl #1
	sub	r4, r4, r0, lsl #1
	subs	r1, r1, #1
	mov	r6, r2
	bge	16b
	vldmia	sp!, {d8-d15}
	pop	{r4, r5, r6, r7, r8, r9, sl, fp, ip, pc}
1:	tst	r0, #8
	beq	17f
	vld1.16	{d10-d11}, [r6]!
	vld1.16	{d8-d9}, [r4]!
	vshrn.i16	d2, q4, #8
	vshrn.i16	d1, q4, #3
	vsli.16	q4, q4, #5
	vsri.8	d2, d2, #5
	vsri.8	d1, d1, #6
	vshrn.i16	d0, q4, #2
	vshrn.i16	d6, q5, #8
	vshrn.i16	d5, q5, #3
	vsli.16	q5, q5, #5
	vsri.8	d6, d6, #5
	vsri.8	d5, d5, #6
	vshrn.i16	d4, q5, #2
	vmvn	d7, d15
	vmull.u8	q6, d15, d2
	vmull.u8	q5, d15, d1
	vmull.u8	q4, d15, d0
	vmull.u8	q8, d7, d4
	vmull.u8	q9, d7, d5
	vmull.u8	q13, d7, d6
	vrshr.u16	q12, q6, #8
	vrshr.u16	q11, q5, #8
	vrshr.u16	q10, q4, #8
	vraddhn.i16	d2, q6, q12
	vraddhn.i16	d1, q5, q11
	vraddhn.i16	d0, q4, q10
	vrshr.u16	q14, q8, #8
	vrshr.u16	q15, q9, #8
	vrshr.u16	q12, q13, #8
	vraddhn.i16	d28, q14, q8
	vraddhn.i16	d29, q15, q9
	vraddhn.i16	d30, q12, q13
	vqadd.u8	q0, q0, q14
	vqadd.u8	q1, q1, q15
	vshll.i8	q15, d1, #8
	vshll.i8	q14, d2, #8
	vshll.i8	q3, d0, #8
	vsri.16	q14, q15, #5
	vsri.16	q14, q3, #11
	vst1.16	{d28-d29}, [r2]!
17:	tst	r0, #7
	beq	18f
	tst	r0, #4
	beq	19f
	vld1.16	{d9}, [r4]!
	vld1.16	{d11}, [r6]!
19:	tst	r0, #2
	beq	20f
	vld1.16	{d8[2]}, [r4]!
	vld1.16	{d8[3]}, [r4]!
	vld1.16	{d10[2]}, [r6]!
	vld1.16	{d10[3]}, [r6]!
20:	tst	r0, #1
	beq	21f
	vld1.16	{d8[1]}, [r4]!
	vld1.16	{d10[1]}, [r6]!
21:	vshrn.i16	d2, q4, #8
	vshrn.i16	d1, q4, #3
	vsli.16	q4, q4, #5
	vsri.8	d2, d2, #5
	vsri.8	d1, d1, #6
	vshrn.i16	d0, q4, #2
	vshrn.i16	d6, q5, #8
	vshrn.i16	d5, q5, #3
	vsli.16	q5, q5, #5
	vsri.8	d6, d6, #5
	vsri.8	d5, d5, #6
	vshrn.i16	d4, q5, #2
	vmvn	d7, d15
	vmull.u8	q6, d15, d2
	vmull.u8	q5, d15, d1
	vmull.u8	q4, d15, d0
	vmull.u8	q8, d7, d4
	vmull.u8	q9, d7, d5
	vmull.u8	q13, d7, d6
	vrshr.u16	q12, q6, #8
	vrshr.u16	q11, q5, #8
	vrshr.u16	q10, q4, #8
	vraddhn.i16	d2, q6, q12
	vraddhn.i16	d1, q5, q11
	vraddhn.i16	d0, q4, q10
	vrshr.u16	q14, q8, #8
	vrshr.u16	q15, q9, #8
	vrshr.u16	q12, q13, #8
	vraddhn.i16	d28, q14, q8
	vraddhn.i16	d29, q15, q9
	vraddhn.i16	d30, q12, q13
	vqadd.u8	q0, q0, q14
	vqadd.u8	q1, q1, q15
	vshll.i8	q15, d1, #8
	vshll.i8	q14, d2, #8
	vshll.i8	q3, d0, #8
	vsri.16	q14, q15, #5
	vsri.16	q14, q3, #11
	tst	r0, #4
	beq	22f
	vst1.16	{d29}, [r2]!
22:	tst	r0, #2
	beq	23f
	vst1.16	{d28[2]}, [r2]!
	vst1.16	{d28[3]}, [r2]!
23:	tst	r0, #1
	beq	18f
	vst1.16	{d28[1]}, [r2]!
18:	mov	r0, r7
	add	r2, r2, r3, lsl #1
	add	r4, r4, r5, lsl #1
	sub	r2, r2, r0, lsl #1
	sub	r4, r4, r0, lsl #1
	subs	r1, r1, #1
	mov	r6, r2
	bge	1b
0:	vldmia	sp!, {d8-d15}
	pop	{r4, r5, r6, r7, r8, r9, sl, fp, ip, pc}

.global _pixman_scaled_bilinear_scanline_8888_8_8888_SRC_asm_neon
_pixman_scaled_bilinear_scanline_8888_8_8888_SRC_asm_neon:
	mov	ip, sp
	push	{r4, r5, r6, r7, r8, r9, sl, ip}
	mov	r8, #28
	ldm	ip, {r4, r5, r6, r7, ip}
	mul	r8, r8, r7
	sub	r3, r3, r2
	cmp	ip, #0
	ble	0f
	vdup.16	q12, r6
	vdup.16	q13, r7
	vdup.8	d28, r4
	vdup.8	d29, r5
	vadd.i16	d25, d25, d26
	cmp	ip, #1
	blt	1f
	tst	r0, #4
	beq	1f
	vshr.u16	q15, q12, #8
	vadd.i16	q12, q12, q13
	asr	r4, r6, #16
	add	r6, r6, r7
	add	r4, r2, r4, lsl #2
	vld1.32	{d0}, [r4], r3
	vld1.32	{d1}, [r4]
	vld1.8	{d4[0]}, [r1]!
	pld	[r1, #28]
	vmull.u8	q1, d0, d28
	vmlal.u8	q1, d1, d29
	vshll.u16	q0, d2, #8
	vmlsl.u16	q0, d2, d30
	vmlal.u16	q0, d3, d30
	vdup.8	d4, d4[0]
	vshrn.i32	d0, q0, #16
	vmovn.i16	d0, q0
	vuzp.8	d0, d1
	vuzp.8	d18, d19
	vuzp.8	d0, d1
	vuzp.8	d18, d19
	vmull.u8	q3, d0, d4
	vmull.u8	q8, d1, d4
	vrshr.u16	q10, q3, #8
	vrshr.u16	q11, q8, #8
	vraddhn.i16	d0, q10, q3
	vraddhn.i16	d1, q11, q8
	vuzp.8	d0, d1
	vuzp.8	d0, d1
	vst1.32	{d0[0]}, [r0, :32]!
	sub	ip, ip, #1
1:	vadd.i16	q13, q13, q13
	vshr.u16	q15, q12, #8
	vadd.i16	q12, q12, q13
	cmp	ip, #2
	blt	2f
	tst	r0, #8
	beq	2f
	asr	r4, r6, #16
	add	r6, r6, r7
	add	r4, r2, r4, lsl #2
	vld1.32	{d0}, [r4], r3
	vld1.32	{d1}, [r4]
	vmull.u8	q1, d0, d28
	vmlal.u8	q1, d1, d29
	asr	r4, r6, #16
	add	r6, r6, r7
	add	r4, r2, r4, lsl #2
	vld1.32	{d20}, [r4], r3
	vld1.32	{d21}, [r4]
	vmull.u8	q11, d20, d28
	vmlal.u8	q11, d21, d29
	vld1.16	{d4[0]}, [r1]!
	pld	[r1, #28]
	vshll.u16	q0, d2, #8
	vmlsl.u16	q0, d2, d30
	vmlal.u16	q0, d3, d30
	vshll.u16	q10, d22, #8
	vmlsl.u16	q10, d22, d31
	vmlal.u16	q10, d23, d31
	vshrn.i32	d0, q0, #16
	vshrn.i32	d1, q10, #16
	vdup.16	d4, d4[0]
	vshr.u16	q15, q12, #8
	vadd.i16	q12, q12, q13
	vmovn.i16	d0, q0
	vuzp.8	d0, d1
	vuzp.8	d18, d19
	vuzp.8	d0, d1
	vuzp.8	d18, d19
	vmull.u8	q3, d0, d4
	vmull.u8	q8, d1, d4
	vrshr.u16	q10, q3, #8
	vrshr.u16	q11, q8, #8
	vraddhn.i16	d0, q10, q3
	vraddhn.i16	d1, q11, q8
	vuzp.8	d0, d1
	vuzp.8	d0, d1
	vst1.32	{d0}, [r0]!
	sub	ip, ip, #2
2:	subs	ip, ip, #4
	blt	3f
	asr	r8, r8, #14
	asr	r4, r6, #16
	add	r6, r6, r7
	add	r4, r2, r4, lsl #2
	vld1.32	{d0}, [r4], r3
	vld1.32	{d1}, [r4]
	vmull.u8	q1, d0, d28
	vmlal.u8	q1, d1, d29
	asr	r4, r6, #16
	add	r6, r6, r7
	add	r4, r2, r4, lsl #2
	vld1.32	{d20}, [r4], r3
	vld1.32	{d21}, [r4]
	vmull.u8	q11, d20, d28
	vmlal.u8	q11, d21, d29
	asr	r4, r6, #16
	add	r6, r6, r7
	add	r4, r2, r4, lsl #2
	vld1.32	{d4}, [r4], r3
	vld1.32	{d5}, [r4]
	vmull.u8	q3, d4, d28
	vmlal.u8	q3, d5, d29
	asr	r4, r6, #16
	add	r6, r6, r7
	add	r4, r2, r4, lsl #2
	vld1.32	{d16}, [r4], r3
	vld1.32	{d17}, [r4]
	vmull.u8	q9, d16, d28
	vmlal.u8	q9, d17, d29
	pld	[r4, r8]
	sub	r4, r4, r3
	vshll.u16	q0, d2, #8
	vmlsl.u16	q0, d2, d30
	vmlal.u16	q0, d3, d30
	vshll.u16	q10, d22, #8
	vmlsl.u16	q10, d22, d31
	vmlal.u16	q10, d23, d31
	vshr.u16	q15, q12, #8
	vshll.u16	q2, d6, #8
	vmlsl.u16	q2, d6, d30
	vmlal.u16	q2, d7, d30
	vshll.u16	q8, d18, #8
	vld1.32	{d22[0]}, [r1]!
	pld	[r1, #28]
	pld	[r4, r8]
	vmlsl.u16	q8, d18, d31
	vmlal.u16	q8, d19, d31
	vadd.i16	q12, q12, q13
	vshrn.i32	d0, q0, #16
	vshrn.i32	d1, q10, #16
	vshrn.i32	d4, q2, #16
	vshrn.i32	d5, q8, #16
	vdup.32	d22, d22[0]
	vshr.u16	q15, q12, #8
	vmovn.i16	d0, q0
	vmovn.i16	d1, q2
	vadd.i16	q12, q12, q13
	vuzp.8	d0, d1
	vuzp.8	d2, d3
	vuzp.8	d0, d1
	vuzp.8	d2, d3
	vmull.u8	q3, d0, d22
	vmull.u8	q8, d1, d22
	vrshr.u16	q9, q3, #8
	vrshr.u16	q10, q8, #8
	vraddhn.i16	d0, q9, q3
	vraddhn.i16	d1, q10, q8
	vuzp.8	d0, d1
	vuzp.8	d0, d1
	vst1.32	{d0-d1}, [r0]!
	subs	ip, ip, #4
	blt	3f
4:	asr	r4, r6, #16
	add	r6, r6, r7
	add	r4, r2, r4, lsl #2
	vld1.32	{d0}, [r4], r3
	vld1.32	{d1}, [r4]
	vmull.u8	q1, d0, d28
	vmlal.u8	q1, d1, d29
	asr	r4, r6, #16
	add	r6, r6, r7
	add	r4, r2, r4, lsl #2
	vld1.32	{d20}, [r4], r3
	vld1.32	{d21}, [r4]
	vmull.u8	q11, d20, d28
	vmlal.u8	q11, d21, d29
	asr	r4, r6, #16
	add	r6, r6, r7
	add	r4, r2, r4, lsl #2
	vld1.32	{d4}, [r4], r3
	vld1.32	{d5}, [r4]
	vmull.u8	q3, d4, d28
	vmlal.u8	q3, d5, d29
	asr	r4, r6, #16
	add	r6, r6, r7
	add	r4, r2, r4, lsl #2
	vld1.32	{d16}, [r4], r3
	vld1.32	{d17}, [r4]
	vmull.u8	q9, d16, d28
	vmlal.u8	q9, d17, d29
	pld	[r4, r8]
	sub	r4, r4, r3
	vshll.u16	q0, d2, #8
	vmlsl.u16	q0, d2, d30
	vmlal.u16	q0, d3, d30
	vshll.u16	q10, d22, #8
	vmlsl.u16	q10, d22, d31
	vmlal.u16	q10, d23, d31
	vshr.u16	q15, q12, #8
	vshll.u16	q2, d6, #8
	vmlsl.u16	q2, d6, d30
	vmlal.u16	q2, d7, d30
	vshll.u16	q8, d18, #8
	vld1.32	{d22[0]}, [r1]!
	pld	[r1, #28]
	pld	[r4, r8]
	vmlsl.u16	q8, d18, d31
	vmlal.u16	q8, d19, d31
	vadd.i16	q12, q12, q13
	vshrn.i32	d0, q0, #16
	vshrn.i32	d1, q10, #16
	vshrn.i32	d4, q2, #16
	vshrn.i32	d5, q8, #16
	vdup.32	d22, d22[0]
	vshr.u16	q15, q12, #8
	vmovn.i16	d0, q0
	vmovn.i16	d1, q2
	vadd.i16	q12, q12, q13
	vuzp.8	d0, d1
	vuzp.8	d2, d3
	vuzp.8	d0, d1
	vuzp.8	d2, d3
	vmull.u8	q3, d0, d22
	vmull.u8	q8, d1, d22
	vrshr.u16	q9, q3, #8
	vrshr.u16	q10, q8, #8
	vraddhn.i16	d0, q9, q3
	vraddhn.i16	d1, q10, q8
	vuzp.8	d0, d1
	vuzp.8	d0, d1
	vst1.32	{d0-d1}, [r0]!
	subs	ip, ip, #4
	bge	4b
3:	tst	ip, #2
	beq	5f
	asr	r4, r6, #16
	add	r6, r6, r7
	add	r4, r2, r4, lsl #2
	vld1.32	{d0}, [r4], r3
	vld1.32	{d1}, [r4]
	vmull.u8	q1, d0, d28
	vmlal.u8	q1, d1, d29
	asr	r4, r6, #16
	add	r6, r6, r7
	add	r4, r2, r4, lsl #2
	vld1.32	{d20}, [r4], r3
	vld1.32	{d21}, [r4]
	vmull.u8	q11, d20, d28
	vmlal.u8	q11, d21, d29
	vld1.16	{d4[0]}, [r1]!
	pld	[r1, #28]
	vshll.u16	q0, d2, #8
	vmlsl.u16	q0, d2, d30
	vmlal.u16	q0, d3, d30
	vshll.u16	q10, d22, #8
	vmlsl.u16	q10, d22, d31
	vmlal.u16	q10, d23, d31
	vshrn.i32	d0, q0, #16
	vshrn.i32	d1, q10, #16
	vdup.16	d4, d4[0]
	vshr.u16	q15, q12, #8
	vadd.i16	q12, q12, q13
	vmovn.i16	d0, q0
	vuzp.8	d0, d1
	vuzp.8	d18, d19
	vuzp.8	d0, d1
	vuzp.8	d18, d19
	vmull.u8	q3, d0, d4
	vmull.u8	q8, d1, d4
	vrshr.u16	q10, q3, #8
	vrshr.u16	q11, q8, #8
	vraddhn.i16	d0, q10, q3
	vraddhn.i16	d1, q11, q8
	vuzp.8	d0, d1
	vuzp.8	d0, d1
	vst1.32	{d0}, [r0]!
5:	tst	ip, #1
	beq	0f
	asr	r4, r6, #16
	add	r6, r6, r7
	add	r4, r2, r4, lsl #2
	vld1.32	{d0}, [r4], r3
	vld1.32	{d1}, [r4]
	vld1.8	{d4[0]}, [r1]!
	pld	[r1, #28]
	vmull.u8	q1, d0, d28
	vmlal.u8	q1, d1, d29
	vshll.u16	q0, d2, #8
	vmlsl.u16	q0, d2, d30
	vmlal.u16	q0, d3, d30
	vdup.8	d4, d4[0]
	vshrn.i32	d0, q0, #16
	vmovn.i16	d0, q0
	vuzp.8	d0, d1
	vuzp.8	d18, d19
	vuzp.8	d0, d1
	vuzp.8	d18, d19
	vmull.u8	q3, d0, d4
	vmull.u8	q8, d1, d4
	vrshr.u16	q10, q3, #8
	vrshr.u16	q11, q8, #8
	vraddhn.i16	d0, q10, q3
	vraddhn.i16	d1, q11, q8
	vuzp.8	d0, d1
	vuzp.8	d0, d1
	vst1.32	{d0[0]}, [r0, :32]!
0:	pop	{r4, r5, r6, r7, r8, r9, sl, ip}
	bx	lr

.global _pixman_composite_add_n_8_8_asm_neon
_pixman_composite_add_n_8_8_asm_neon:
	push	{r4, r5, r6, r7, r8, r9, sl, fp, ip, lr}
	ldr	r7, [sp, #48]
	mov	sl, #0
	ldr	r8, [sp, #52]
	mov	r6, r2
	mov	fp, r4
	mov	ip, r6
	mov	lr, r7
	lsl	r9, r1, #4
	sub	r9, r9, #11
	add	r5, sp, #40
	vstmdb	sp!, {d8-d15}
	vld1.32	{d11[0]}, [r5]
	vdup.8	d11, d11[3]
	subs	r1, r1, #1
	mov	r4, r0
	blt	0f
	cmp	r0, #64
	blt	1f
23:	tst	r6, #15
	beq	2f
	tst	r6, #1
	beq	3f
	vld1.8	{d24[1]}, [r7]!
	vld1.8	{d4[1]}, [r6]!
	add	sl, sl, #1
	sub	r0, r0, #1
3:	tst	r6, #2
	beq	4f
	vld1.8	{d24[2]}, [r7]!
	vld1.8	{d24[3]}, [r7]!
	vld1.8	{d4[2]}, [r6]!
	vld1.8	{d4[3]}, [r6]!
	add	sl, sl, #2
	sub	r0, r0, #2
4:	tst	r6, #4
	beq	5f
	vld1.8	{d24[4]}, [r7]!
	vld1.8	{d24[5]}, [r7]!
	vld1.8	{d24[6]}, [r7]!
	vld1.8	{d24[7]}, [r7]!
	vld1.8	{d4[4]}, [r6]!
	vld1.8	{d4[5]}, [r6]!
	vld1.8	{d4[6]}, [r6]!
	vld1.8	{d4[7]}, [r6]!
	add	sl, sl, #4
	sub	r0, r0, #4
5:	tst	r6, #8
	beq	6f
	vld1.8	{d25}, [r7]!
	vld1.8	{d5}, [r6, :64]!
	add	sl, sl, #8
	sub	r0, r0, #8
6:	vld1.8	{d26-d27}, [r7]!
	vld1.8	{d6-d7}, [r6, :128]!
	add	sl, sl, #16
	sub	r0, r0, #16
	vmull.u8	q0, d24, d11
	vmull.u8	q1, d25, d11
	vmull.u8	q6, d26, d11
	vmull.u8	q7, d27, d11
	vrshr.u16	q10, q0, #8
	vrshr.u16	q11, q1, #8
	vrshr.u16	q12, q6, #8
	vrshr.u16	q13, q7, #8
	vraddhn.i16	d0, q0, q10
	vraddhn.i16	d1, q1, q11
	vraddhn.i16	d2, q6, q12
	vraddhn.i16	d3, q7, q13
	vqadd.u8	q14, q0, q2
	vqadd.u8	q15, q1, q3
	tst	r9, #15
	addne	sl, sl, #32
	subne	r9, r9, #1
	cmp	sl, r4
	pld	[ip, sl]
	pld	[lr, sl]
	subge	sl, sl, r4
	subsge	r9, r9, #16
	ldrbge	r5, [ip, r3]!
	ldrbge	r5, [lr, r8]!
	tst	r2, #1
	beq	7f
	vst1.8	{d28[1]}, [r2]!
7:	tst	r2, #2
	beq	8f
	vst1.8	{d28[2]}, [r2]!
	vst1.8	{d28[3]}, [r2]!
8:	tst	r2, #4
	beq	9f
	vst1.8	{d28[4]}, [r2]!
	vst1.8	{d28[5]}, [r2]!
	vst1.8	{d28[6]}, [r2]!
	vst1.8	{d28[7]}, [r2]!
9:	tst	r2, #8
	beq	10f
	vst1.8	{d29}, [r2, :64]!
10:	vst1.8	{d30-d31}, [r2, :128]!
2:	vld1.8	{d4-d7}, [r6, :128]!
	vld1.8	{d24-d27}, [r7]!
	add	sl, sl, #32
	vmull.u8	q0, d24, d11
	vmull.u8	q1, d25, d11
	vmull.u8	q6, d26, d11
	vmull.u8	q7, d27, d11
	vrshr.u16	q10, q0, #8
	vrshr.u16	q11, q1, #8
	vrshr.u16	q12, q6, #8
	vrshr.u16	q13, q7, #8
	vraddhn.i16	d0, q0, q10
	vraddhn.i16	d1, q1, q11
	vraddhn.i16	d2, q6, q12
	vraddhn.i16	d3, q7, q13
	vqadd.u8	q14, q0, q2
	vqadd.u8	q15, q1, q3
	tst	r9, #15
	addne	sl, sl, #32
	subne	r9, r9, #1
	cmp	sl, r4
	pld	[ip, sl]
	pld	[lr, sl]
	subge	sl, sl, r4
	subsge	r9, r9, #16
	ldrbge	r5, [ip, r3]!
	ldrbge	r5, [lr, r8]!
	subs	r0, r0, #64
	blt	11f
12:	vst1.8	{d28-d31}, [r2, :128]!
	vld1.8	{d4-d7}, [r6, :128]!
	vld1.8	{d24-d27}, [r7]!
	add	sl, sl, #32
	tst	r9, #15
	addne	sl, sl, #32
	subne	r9, r9, #1
	cmp	sl, r4
	pld	[ip, sl]
	pld	[lr, sl]
	subge	sl, sl, r4
	subsge	r9, r9, #16
	ldrbge	r5, [ip, r3]!
	ldrbge	r5, [lr, r8]!
	vmull.u8	q0, d24, d11
	vmull.u8	q1, d25, d11
	vmull.u8	q6, d26, d11
	vmull.u8	q7, d27, d11
	vrshr.u16	q10, q0, #8
	vrshr.u16	q11, q1, #8
	vrshr.u16	q12, q6, #8
	vrshr.u16	q13, q7, #8
	vraddhn.i16	d0, q0, q10
	vraddhn.i16	d1, q1, q11
	vraddhn.i16	d2, q6, q12
	vraddhn.i16	d3, q7, q13
	vqadd.u8	q14, q0, q2
	vqadd.u8	q15, q1, q3
	subs	r0, r0, #32
	bge	12b
11:	vst1.8	{d28-d31}, [r2, :128]!
	tst	r0, #31
	beq	13f
	tst	r0, #16
	beq	14f
	vld1.8	{d26-d27}, [r7]!
	vld1.8	{d6-d7}, [r6, :128]!
	add	sl, sl, #16
14:	tst	r0, #8
	beq	15f
	vld1.8	{d25}, [r7]!
	vld1.8	{d5}, [r6, :64]!
	add	sl, sl, #8
15:	tst	r0, #4
	beq	16f
	vld1.8	{d24[4]}, [r7]!
	vld1.8	{d24[5]}, [r7]!
	vld1.8	{d24[6]}, [r7]!
	vld1.8	{d24[7]}, [r7]!
	vld1.8	{d4[4]}, [r6]!
	vld1.8	{d4[5]}, [r6]!
	vld1.8	{d4[6]}, [r6]!
	vld1.8	{d4[7]}, [r6]!
	add	sl, sl, #4
16:	tst	r0, #2
	beq	17f
	vld1.8	{d24[2]}, [r7]!
	vld1.8	{d24[3]}, [r7]!
	vld1.8	{d4[2]}, [r6]!
	vld1.8	{d4[3]}, [r6]!
	add	sl, sl, #2
17:	tst	r0, #1
	beq	18f
	vld1.8	{d24[1]}, [r7]!
	vld1.8	{d4[1]}, [r6]!
	add	sl, sl, #1
18:	vmull.u8	q0, d24, d11
	vmull.u8	q1, d25, d11
	vmull.u8	q6, d26, d11
	vmull.u8	q7, d27, d11
	vrshr.u16	q10, q0, #8
	vrshr.u16	q11, q1, #8
	vrshr.u16	q12, q6, #8
	vrshr.u16	q13, q7, #8
	vraddhn.i16	d0, q0, q10
	vraddhn.i16	d1, q1, q11
	vraddhn.i16	d2, q6, q12
	vraddhn.i16	d3, q7, q13
	vqadd.u8	q14, q0, q2
	vqadd.u8	q15, q1, q3
	tst	r9, #15
	addne	sl, sl, #32
	subne	r9, r9, #1
	cmp	sl, r4
	pld	[ip, sl]
	pld	[lr, sl]
	subge	sl, sl, r4
	subsge	r9, r9, #16
	ldrbge	r5, [ip, r3]!
	ldrbge	r5, [lr, r8]!
	tst	r0, #16
	beq	19f
	vst1.8	{d30-d31}, [r2, :128]!
19:	tst	r0, #8
	beq	20f
	vst1.8	{d29}, [r2, :64]!
20:	tst	r0, #4
	beq	21f
	vst1.8	{d28[4]}, [r2]!
	vst1.8	{d28[5]}, [r2]!
	vst1.8	{d28[6]}, [r2]!
	vst1.8	{d28[7]}, [r2]!
21:	tst	r0, #2
	beq	22f
	vst1.8	{d28[2]}, [r2]!
	vst1.8	{d28[3]}, [r2]!
22:	tst	r0, #1
	beq	13f
	vst1.8	{d28[1]}, [r2]!
13:	mov	r0, r4
	add	r2, r2, r3
	add	r7, r7, r8
	sub	r2, r2, r0
	sub	r7, r7, r0
	subs	r1, r1, #1
	mov	r6, r2
	bge	23b
	vldmia	sp!, {d8-d15}
	pop	{r4, r5, r6, r7, r8, r9, sl, fp, ip, pc}
1:	tst	r0, #32
	beq	24f
	vld1.8	{d4-d7}, [r6]!
	vld1.8	{d24-d27}, [r7]!
	vmull.u8	q0, d24, d11
	vmull.u8	q1, d25, d11
	vmull.u8	q6, d26, d11
	vmull.u8	q7, d27, d11
	vrshr.u16	q10, q0, #8
	vrshr.u16	q11, q1, #8
	vrshr.u16	q12, q6, #8
	vrshr.u16	q13, q7, #8
	vraddhn.i16	d0, q0, q10
	vraddhn.i16	d1, q1, q11
	vraddhn.i16	d2, q6, q12
	vraddhn.i16	d3, q7, q13
	vqadd.u8	q14, q0, q2
	vqadd.u8	q15, q1, q3
	vst1.8	{d28-d31}, [r2]!
24:	tst	r0, #31
	beq	25f
	tst	r0, #16
	beq	26f
	vld1.8	{d26-d27}, [r7]!
	vld1.8	{d6-d7}, [r6]!
26:	tst	r0, #8
	beq	27f
	vld1.8	{d25}, [r7]!
	vld1.8	{d5}, [r6]!
27:	tst	r0, #4
	beq	28f
	vld1.8	{d24[4]}, [r7]!
	vld1.8	{d24[5]}, [r7]!
	vld1.8	{d24[6]}, [r7]!
	vld1.8	{d24[7]}, [r7]!
	vld1.8	{d4[4]}, [r6]!
	vld1.8	{d4[5]}, [r6]!
	vld1.8	{d4[6]}, [r6]!
	vld1.8	{d4[7]}, [r6]!
28:	tst	r0, #2
	beq	29f
	vld1.8	{d24[2]}, [r7]!
	vld1.8	{d24[3]}, [r7]!
	vld1.8	{d4[2]}, [r6]!
	vld1.8	{d4[3]}, [r6]!
29:	tst	r0, #1
	beq	30f
	vld1.8	{d24[1]}, [r7]!
	vld1.8	{d4[1]}, [r6]!
30:	vmull.u8	q0, d24, d11
	vmull.u8	q1, d25, d11
	vmull.u8	q6, d26, d11
	vmull.u8	q7, d27, d11
	vrshr.u16	q10, q0, #8
	vrshr.u16	q11, q1, #8
	vrshr.u16	q12, q6, #8
	vrshr.u16	q13, q7, #8
	vraddhn.i16	d0, q0, q10
	vraddhn.i16	d1, q1, q11
	vraddhn.i16	d2, q6, q12
	vraddhn.i16	d3, q7, q13
	vqadd.u8	q14, q0, q2
	vqadd.u8	q15, q1, q3
	tst	r0, #16
	beq	31f
	vst1.8	{d30-d31}, [r2]!
31:	tst	r0, #8
	beq	32f
	vst1.8	{d29}, [r2]!
32:	tst	r0, #4
	beq	33f
	vst1.8	{d28[4]}, [r2]!
	vst1.8	{d28[5]}, [r2]!
	vst1.8	{d28[6]}, [r2]!
	vst1.8	{d28[7]}, [r2]!
33:	tst	r0, #2
	beq	34f
	vst1.8	{d28[2]}, [r2]!
	vst1.8	{d28[3]}, [r2]!
34:	tst	r0, #1
	beq	25f
	vst1.8	{d28[1]}, [r2]!
25:	mov	r0, r4
	add	r2, r2, r3
	add	r7, r7, r8
	sub	r2, r2, r0
	sub	r7, r7, r0
	subs	r1, r1, #1
	mov	r6, r2
	bge	1b
0:	vldmia	sp!, {d8-d15}
	pop	{r4, r5, r6, r7, r8, r9, sl, fp, ip, pc}

.global _pixman_scaled_bilinear_scanline_8888_8_0565_SRC_asm_neon
_pixman_scaled_bilinear_scanline_8888_8_0565_SRC_asm_neon:
	mov	ip, sp
	push	{r4, r5, r6, r7, r8, r9, sl, ip}
	mov	r8, #28
	ldm	ip, {r4, r5, r6, r7, ip}
	mul	r8, r8, r7
	sub	r3, r3, r2
	cmp	ip, #0
	ble	0f
	vdup.16	q12, r6
	vdup.16	q13, r7
	vdup.8	d28, r4
	vdup.8	d29, r5
	vadd.i16	d25, d25, d26
	cmp	ip, #1
	blt	1f
	tst	r0, #2
	beq	1f
	vshr.u16	q15, q12, #8
	vadd.i16	q12, q12, q13
	asr	r4, r6, #16
	add	r6, r6, r7
	add	r4, r2, r4, lsl #2
	vld1.32	{d0}, [r4], r3
	vld1.32	{d1}, [r4]
	vld1.8	{d4[0]}, [r1]!
	pld	[r1, #28]
	vmull.u8	q1, d0, d28
	vmlal.u8	q1, d1, d29
	vshll.u16	q0, d2, #8
	vmlsl.u16	q0, d2, d30
	vmlal.u16	q0, d3, d30
	vdup.8	d4, d4[0]
	vshrn.i32	d0, q0, #16
	vmovn.i16	d0, q0
	vuzp.8	d0, d1
	vuzp.8	d18, d19
	vuzp.8	d0, d1
	vuzp.8	d18, d19
	vmull.u8	q3, d0, d4
	vmull.u8	q8, d1, d4
	vrshr.u16	q10, q3, #8
	vrshr.u16	q11, q8, #8
	vraddhn.i16	d0, q10, q3
	vraddhn.i16	d1, q11, q8
	vuzp.8	d0, d1
	vuzp.8	d0, d1
	vuzp.8	d0, d1
	vuzp.8	d2, d3
	vuzp.8	d1, d3
	vuzp.8	d0, d2
	vshll.i8	q2, d1, #8
	vshll.i8	q1, d2, #8
	vshll.i8	q3, d0, #8
	vsri.16	q1, q2, #5
	vsri.16	q1, q3, #11
	vst1.16	{d2[0]}, [r0]!
	sub	ip, ip, #1
1:	vadd.i16	q13, q13, q13
	vshr.u16	q15, q12, #8
	vadd.i16	q12, q12, q13
	cmp	ip, #2
	blt	2f
	tst	r0, #4
	beq	2f
	asr	r4, r6, #16
	add	r6, r6, r7
	add	r4, r2, r4, lsl #2
	vld1.32	{d0}, [r4], r3
	vld1.32	{d1}, [r4]
	vmull.u8	q1, d0, d28
	vmlal.u8	q1, d1, d29
	asr	r4, r6, #16
	add	r6, r6, r7
	add	r4, r2, r4, lsl #2
	vld1.32	{d20}, [r4], r3
	vld1.32	{d21}, [r4]
	vmull.u8	q11, d20, d28
	vmlal.u8	q11, d21, d29
	vld1.16	{d4[0]}, [r1]!
	pld	[r1, #28]
	vshll.u16	q0, d2, #8
	vmlsl.u16	q0, d2, d30
	vmlal.u16	q0, d3, d30
	vshll.u16	q10, d22, #8
	vmlsl.u16	q10, d22, d31
	vmlal.u16	q10, d23, d31
	vshrn.i32	d0, q0, #16
	vshrn.i32	d1, q10, #16
	vdup.16	d4, d4[0]
	vshr.u16	q15, q12, #8
	vadd.i16	q12, q12, q13
	vmovn.i16	d0, q0
	vuzp.8	d0, d1
	vuzp.8	d18, d19
	vuzp.8	d0, d1
	vuzp.8	d18, d19
	vmull.u8	q3, d0, d4
	vmull.u8	q8, d1, d4
	vrshr.u16	q10, q3, #8
	vrshr.u16	q11, q8, #8
	vraddhn.i16	d0, q10, q3
	vraddhn.i16	d1, q11, q8
	vuzp.8	d0, d1
	vuzp.8	d0, d1
	vuzp.8	d0, d1
	vuzp.8	d2, d3
	vuzp.8	d1, d3
	vuzp.8	d0, d2
	vshll.i8	q2, d1, #8
	vshll.i8	q1, d2, #8
	vshll.i8	q3, d0, #8
	vsri.16	q1, q2, #5
	vsri.16	q1, q3, #11
	vst1.32	{d2[0]}, [r0]!
	sub	ip, ip, #2
2:	subs	ip, ip, #4
	blt	3f
	asr	r8, r8, #14
	asr	r4, r6, #16
	add	r6, r6, r7
	add	r4, r2, r4, lsl #2
	vld1.32	{d0}, [r4], r3
	vld1.32	{d1}, [r4]
	vmull.u8	q1, d0, d28
	vmlal.u8	q1, d1, d29
	asr	r4, r6, #16
	add	r6, r6, r7
	add	r4, r2, r4, lsl #2
	vld1.32	{d20}, [r4], r3
	vld1.32	{d21}, [r4]
	vmull.u8	q11, d20, d28
	vmlal.u8	q11, d21, d29
	asr	r4, r6, #16
	add	r6, r6, r7
	add	r4, r2, r4, lsl #2
	vld1.32	{d4}, [r4], r3
	vld1.32	{d5}, [r4]
	vmull.u8	q3, d4, d28
	vmlal.u8	q3, d5, d29
	asr	r4, r6, #16
	add	r6, r6, r7
	add	r4, r2, r4, lsl #2
	vld1.32	{d16}, [r4], r3
	vld1.32	{d17}, [r4]
	vmull.u8	q9, d16, d28
	vmlal.u8	q9, d17, d29
	pld	[r4, r8]
	sub	r4, r4, r3
	vshll.u16	q0, d2, #8
	vmlsl.u16	q0, d2, d30
	vmlal.u16	q0, d3, d30
	vshll.u16	q10, d22, #8
	vmlsl.u16	q10, d22, d31
	vmlal.u16	q10, d23, d31
	vshr.u16	q15, q12, #8
	vshll.u16	q2, d6, #8
	vmlsl.u16	q2, d6, d30
	vmlal.u16	q2, d7, d30
	vshll.u16	q8, d18, #8
	vld1.32	{d22[0]}, [r1]!
	pld	[r1, #28]
	pld	[r4, r8]
	vmlsl.u16	q8, d18, d31
	vmlal.u16	q8, d19, d31
	vadd.i16	q12, q12, q13
	vshrn.i32	d0, q0, #16
	vshrn.i32	d1, q10, #16
	vshrn.i32	d4, q2, #16
	vshrn.i32	d5, q8, #16
	vdup.32	d22, d22[0]
	vshr.u16	q15, q12, #8
	vmovn.i16	d0, q0
	vmovn.i16	d1, q2
	vadd.i16	q12, q12, q13
	vuzp.8	d0, d1
	vuzp.8	d2, d3
	vuzp.8	d0, d1
	vuzp.8	d2, d3
	vmull.u8	q3, d0, d22
	vmull.u8	q8, d1, d22
	vrshr.u16	q9, q3, #8
	vrshr.u16	q10, q8, #8
	vraddhn.i16	d0, q9, q3
	vraddhn.i16	d1, q10, q8
	vuzp.8	d0, d1
	vuzp.8	d0, d1
	vuzp.8	d0, d1
	vuzp.8	d2, d3
	vuzp.8	d1, d3
	vuzp.8	d0, d2
	vshll.i8	q2, d1, #8
	vshll.i8	q1, d2, #8
	vshll.i8	q3, d0, #8
	vsri.16	q1, q2, #5
	vsri.16	q1, q3, #11
	vst1.16	{d2}, [r0]!
	subs	ip, ip, #4
	blt	3f
4:	asr	r4, r6, #16
	add	r6, r6, r7
	add	r4, r2, r4, lsl #2
	vld1.32	{d0}, [r4], r3
	vld1.32	{d1}, [r4]
	vmull.u8	q1, d0, d28
	vmlal.u8	q1, d1, d29
	asr	r4, r6, #16
	add	r6, r6, r7
	add	r4, r2, r4, lsl #2
	vld1.32	{d20}, [r4], r3
	vld1.32	{d21}, [r4]
	vmull.u8	q11, d20, d28
	vmlal.u8	q11, d21, d29
	asr	r4, r6, #16
	add	r6, r6, r7
	add	r4, r2, r4, lsl #2
	vld1.32	{d4}, [r4], r3
	vld1.32	{d5}, [r4]
	vmull.u8	q3, d4, d28
	vmlal.u8	q3, d5, d29
	asr	r4, r6, #16
	add	r6, r6, r7
	add	r4, r2, r4, lsl #2
	vld1.32	{d16}, [r4], r3
	vld1.32	{d17}, [r4]
	vmull.u8	q9, d16, d28
	vmlal.u8	q9, d17, d29
	pld	[r4, r8]
	sub	r4, r4, r3
	vshll.u16	q0, d2, #8
	vmlsl.u16	q0, d2, d30
	vmlal.u16	q0, d3, d30
	vshll.u16	q10, d22, #8
	vmlsl.u16	q10, d22, d31
	vmlal.u16	q10, d23, d31
	vshr.u16	q15, q12, #8
	vshll.u16	q2, d6, #8
	vmlsl.u16	q2, d6, d30
	vmlal.u16	q2, d7, d30
	vshll.u16	q8, d18, #8
	vld1.32	{d22[0]}, [r1]!
	pld	[r1, #28]
	pld	[r4, r8]
	vmlsl.u16	q8, d18, d31
	vmlal.u16	q8, d19, d31
	vadd.i16	q12, q12, q13
	vshrn.i32	d0, q0, #16
	vshrn.i32	d1, q10, #16
	vshrn.i32	d4, q2, #16
	vshrn.i32	d5, q8, #16
	vdup.32	d22, d22[0]
	vshr.u16	q15, q12, #8
	vmovn.i16	d0, q0
	vmovn.i16	d1, q2
	vadd.i16	q12, q12, q13
	vuzp.8	d0, d1
	vuzp.8	d2, d3
	vuzp.8	d0, d1
	vuzp.8	d2, d3
	vmull.u8	q3, d0, d22
	vmull.u8	q8, d1, d22
	vrshr.u16	q9, q3, #8
	vrshr.u16	q10, q8, #8
	vraddhn.i16	d0, q9, q3
	vraddhn.i16	d1, q10, q8
	vuzp.8	d0, d1
	vuzp.8	d0, d1
	vuzp.8	d0, d1
	vuzp.8	d2, d3
	vuzp.8	d1, d3
	vuzp.8	d0, d2
	vshll.i8	q2, d1, #8
	vshll.i8	q1, d2, #8
	vshll.i8	q3, d0, #8
	vsri.16	q1, q2, #5
	vsri.16	q1, q3, #11
	vst1.16	{d2}, [r0]!
	subs	ip, ip, #4
	bge	4b
3:	tst	ip, #2
	beq	5f
	asr	r4, r6, #16
	add	r6, r6, r7
	add	r4, r2, r4, lsl #2
	vld1.32	{d0}, [r4], r3
	vld1.32	{d1}, [r4]
	vmull.u8	q1, d0, d28
	vmlal.u8	q1, d1, d29
	asr	r4, r6, #16
	add	r6, r6, r7
	add	r4, r2, r4, lsl #2
	vld1.32	{d20}, [r4], r3
	vld1.32	{d21}, [r4]
	vmull.u8	q11, d20, d28
	vmlal.u8	q11, d21, d29
	vld1.16	{d4[0]}, [r1]!
	pld	[r1, #28]
	vshll.u16	q0, d2, #8
	vmlsl.u16	q0, d2, d30
	vmlal.u16	q0, d3, d30
	vshll.u16	q10, d22, #8
	vmlsl.u16	q10, d22, d31
	vmlal.u16	q10, d23, d31
	vshrn.i32	d0, q0, #16
	vshrn.i32	d1, q10, #16
	vdup.16	d4, d4[0]
	vshr.u16	q15, q12, #8
	vadd.i16	q12, q12, q13
	vmovn.i16	d0, q0
	vuzp.8	d0, d1
	vuzp.8	d18, d19
	vuzp.8	d0, d1
	vuzp.8	d18, d19
	vmull.u8	q3, d0, d4
	vmull.u8	q8, d1, d4
	vrshr.u16	q10, q3, #8
	vrshr.u16	q11, q8, #8
	vraddhn.i16	d0, q10, q3
	vraddhn.i16	d1, q11, q8
	vuzp.8	d0, d1
	vuzp.8	d0, d1
	vuzp.8	d0, d1
	vuzp.8	d2, d3
	vuzp.8	d1, d3
	vuzp.8	d0, d2
	vshll.i8	q2, d1, #8
	vshll.i8	q1, d2, #8
	vshll.i8	q3, d0, #8
	vsri.16	q1, q2, #5
	vsri.16	q1, q3, #11
	vst1.32	{d2[0]}, [r0]!
5:	tst	ip, #1
	beq	0f
	asr	r4, r6, #16
	add	r6, r6, r7
	add	r4, r2, r4, lsl #2
	vld1.32	{d0}, [r4], r3
	vld1.32	{d1}, [r4]
	vld1.8	{d4[0]}, [r1]!
	pld	[r1, #28]
	vmull.u8	q1, d0, d28
	vmlal.u8	q1, d1, d29
	vshll.u16	q0, d2, #8
	vmlsl.u16	q0, d2, d30
	vmlal.u16	q0, d3, d30
	vdup.8	d4, d4[0]
	vshrn.i32	d0, q0, #16
	vmovn.i16	d0, q0
	vuzp.8	d0, d1
	vuzp.8	d18, d19
	vuzp.8	d0, d1
	vuzp.8	d18, d19
	vmull.u8	q3, d0, d4
	vmull.u8	q8, d1, d4
	vrshr.u16	q10, q3, #8
	vrshr.u16	q11, q8, #8
	vraddhn.i16	d0, q10, q3
	vraddhn.i16	d1, q11, q8
	vuzp.8	d0, d1
	vuzp.8	d0, d1
	vuzp.8	d0, d1
	vuzp.8	d2, d3
	vuzp.8	d1, d3
	vuzp.8	d0, d2
	vshll.i8	q2, d1, #8
	vshll.i8	q1, d2, #8
	vshll.i8	q3, d0, #8
	vsri.16	q1, q2, #5
	vsri.16	q1, q3, #11
	vst1.16	{d2[0]}, [r0]!
0:	pop	{r4, r5, r6, r7, r8, r9, sl, ip}
	bx	lr

.global _pixman_composite_scanline_over_mask_asm_neon
_pixman_composite_scanline_over_mask_asm_neon:
	vstmdb	sp!, {d8-d15}
	mov	ip, r1
	cmp	r0, #8
	blt	0f
	tst	ip, #15
	beq	1f
	tst	ip, #4
	beq	2f
	vld1.32	{d0[1]}, [r2]!
	vld1.32	{d12[1]}, [r3]!
	vld1.32	{d4[1]}, [ip]!
	sub	r0, r0, #1
2:	tst	ip, #8
	beq	3f
	vld1.32	{d1}, [r2]!
	vld1.32	{d13}, [r3]!
	vld1.32	{d5}, [ip, :64]!
	sub	r0, r0, #2
3:	vld1.32	{d2-d3}, [r2]!
	vld1.32	{d14-d15}, [r3]!
	vld1.32	{d6-d7}, [ip, :128]!
	sub	r0, r0, #4
	vuzp.8	d0, d1
	vuzp.8	d2, d3
	vuzp.8	d1, d3
	vuzp.8	d0, d2
	vuzp.8	d12, d13
	vuzp.8	d14, d15
	vuzp.8	d13, d15
	vuzp.8	d12, d14
	vuzp.8	d4, d5
	vuzp.8	d6, d7
	vuzp.8	d5, d7
	vuzp.8	d4, d6
	vmull.u8	q8, d15, d3
	vmull.u8	q6, d15, d2
	vmull.u8	q5, d15, d1
	vmull.u8	q4, d15, d0
	vrshr.u16	q13, q8, #8
	vrshr.u16	q12, q6, #8
	vrshr.u16	q11, q5, #8
	vrshr.u16	q10, q4, #8
	vraddhn.i16	d3, q8, q13
	vraddhn.i16	d2, q6, q12
	vraddhn.i16	d1, q5, q11
	vraddhn.i16	d0, q4, q10
	vmvn	d24, d3
	vmull.u8	q8, d24, d4
	vmull.u8	q9, d24, d5
	vmull.u8	q10, d24, d6
	vmull.u8	q11, d24, d7
	vrshr.u16	q14, q8, #8
	vrshr.u16	q15, q9, #8
	vrshr.u16	q12, q10, #8
	vrshr.u16	q13, q11, #8
	vraddhn.i16	d28, q14, q8
	vraddhn.i16	d29, q15, q9
	vraddhn.i16	d30, q12, q10
	vraddhn.i16	d31, q13, q11
	vqadd.u8	q14, q0, q14
	vqadd.u8	q15, q1, q15
	vzip.8	d28, d30
	vzip.8	d29, d31
	vzip.8	d30, d31
	vzip.8	d28, d29
	tst	r1, #4
	beq	4f
	vst1.32	{d28[1]}, [r1]!
4:	tst	r1, #8
	beq	5f
	vst1.32	{d29}, [r1, :64]!
5:	vst1.32	{d30-d31}, [r1, :128]!
1:	subs	r0, r0, #8
	blt	6f
	vld4.8	{d4-d7}, [ip, :128]!
	vld4.8	{d0-d3}, [r2]!
	vld4.8	{d12-d15}, [r3]!
	vmull.u8	q8, d15, d3
	vmull.u8	q6, d15, d2
	vmull.u8	q5, d15, d1
	vmull.u8	q4, d15, d0
	vrshr.u16	q13, q8, #8
	vrshr.u16	q12, q6, #8
	vrshr.u16	q11, q5, #8
	vrshr.u16	q10, q4, #8
	vraddhn.i16	d3, q8, q13
	vraddhn.i16	d2, q6, q12
	vraddhn.i16	d1, q5, q11
	vraddhn.i16	d0, q4, q10
	vmvn	d24, d3
	vmull.u8	q8, d24, d4
	vmull.u8	q9, d24, d5
	vmull.u8	q10, d24, d6
	vmull.u8	q11, d24, d7
	subs	r0, r0, #8
	blt	7f
8:	vld4.8	{d4-d7}, [ip, :128]!
	vrshr.u16	q14, q8, #8
	vrshr.u16	q15, q9, #8
	vrshr.u16	q12, q10, #8
	vrshr.u16	q13, q11, #8
	vraddhn.i16	d28, q14, q8
	vraddhn.i16	d29, q15, q9
	vraddhn.i16	d30, q12, q10
	vraddhn.i16	d31, q13, q11
	vqadd.u8	q14, q0, q14
	vqadd.u8	q15, q1, q15
	vld4.8	{d0-d3}, [r2]!
	vld4.8	{d12-d15}, [r3]!
	vmull.u8	q8, d15, d3
	vmull.u8	q6, d15, d2
	vmull.u8	q5, d15, d1
	vmull.u8	q4, d15, d0
	vrshr.u16	q13, q8, #8
	vrshr.u16	q12, q6, #8
	vrshr.u16	q11, q5, #8
	vrshr.u16	q10, q4, #8
	vraddhn.i16	d3, q8, q13
	vraddhn.i16	d2, q6, q12
	vraddhn.i16	d1, q5, q11
	vraddhn.i16	d0, q4, q10
	vmvn	d24, d3
	vmull.u8	q8, d24, d4
	vmull.u8	q9, d24, d5
	vmull.u8	q10, d24, d6
	vmull.u8	q11, d24, d7
	vst4.8	{d28-d31}, [r1, :128]!
	subs	r0, r0, #8
	bge	8b
7:	vrshr.u16	q14, q8, #8
	vrshr.u16	q15, q9, #8
	vrshr.u16	q12, q10, #8
	vrshr.u16	q13, q11, #8
	vraddhn.i16	d28, q14, q8
	vraddhn.i16	d29, q15, q9
	vraddhn.i16	d30, q12, q10
	vraddhn.i16	d31, q13, q11
	vqadd.u8	q14, q0, q14
	vqadd.u8	q15, q1, q15
	vst4.8	{d28-d31}, [r1, :128]!
6:	tst	r0, #7
	beq	9f
	tst	r0, #4
	beq	10f
	vld1.32	{d2-d3}, [r2]!
	vld1.32	{d14-d15}, [r3]!
	vld1.32	{d6-d7}, [ip, :128]!
10:	tst	r0, #2
	beq	11f
	vld1.32	{d1}, [r2]!
	vld1.32	{d13}, [r3]!
	vld1.32	{d5}, [ip, :64]!
11:	tst	r0, #1
	beq	12f
	vld1.32	{d0[1]}, [r2]!
	vld1.32	{d12[1]}, [r3]!
	vld1.32	{d4[1]}, [ip]!
12:	vuzp.8	d0, d1
	vuzp.8	d2, d3
	vuzp.8	d1, d3
	vuzp.8	d0, d2
	vuzp.8	d12, d13
	vuzp.8	d14, d15
	vuzp.8	d13, d15
	vuzp.8	d12, d14
	vuzp.8	d4, d5
	vuzp.8	d6, d7
	vuzp.8	d5, d7
	vuzp.8	d4, d6
	vmull.u8	q8, d15, d3
	vmull.u8	q6, d15, d2
	vmull.u8	q5, d15, d1
	vmull.u8	q4, d15, d0
	vrshr.u16	q13, q8, #8
	vrshr.u16	q12, q6, #8
	vrshr.u16	q11, q5, #8
	vrshr.u16	q10, q4, #8
	vraddhn.i16	d3, q8, q13
	vraddhn.i16	d2, q6, q12
	vraddhn.i16	d1, q5, q11
	vraddhn.i16	d0, q4, q10
	vmvn	d24, d3
	vmull.u8	q8, d24, d4
	vmull.u8	q9, d24, d5
	vmull.u8	q10, d24, d6
	vmull.u8	q11, d24, d7
	vrshr.u16	q14, q8, #8
	vrshr.u16	q15, q9, #8
	vrshr.u16	q12, q10, #8
	vrshr.u16	q13, q11, #8
	vraddhn.i16	d28, q14, q8
	vraddhn.i16	d29, q15, q9
	vraddhn.i16	d30, q12, q10
	vraddhn.i16	d31, q13, q11
	vqadd.u8	q14, q0, q14
	vqadd.u8	q15, q1, q15
	vzip.8	d28, d30
	vzip.8	d29, d31
	vzip.8	d30, d31
	vzip.8	d28, d29
	tst	r0, #4
	beq	13f
	vst1.32	{d30-d31}, [r1, :128]!
13:	tst	r0, #2
	beq	14f
	vst1.32	{d29}, [r1, :64]!
14:	tst	r0, #1
	beq	9f
	vst1.32	{d28[1]}, [r1]!
9:	vldmia	sp!, {d8-d15}
	bx	lr
0:	tst	r0, #7
	beq	15f
	tst	r0, #4
	beq	16f
	vld1.32	{d2-d3}, [r2]!
	vld1.32	{d14-d15}, [r3]!
	vld1.32	{d6-d7}, [ip]!
16:	tst	r0, #2
	beq	17f
	vld1.32	{d1}, [r2]!
	vld1.32	{d13}, [r3]!
	vld1.32	{d5}, [ip]!
17:	tst	r0, #1
	beq	18f
	vld1.32	{d0[1]}, [r2]!
	vld1.32	{d12[1]}, [r3]!
	vld1.32	{d4[1]}, [ip]!
18:	vuzp.8	d0, d1
	vuzp.8	d2, d3
	vuzp.8	d1, d3
	vuzp.8	d0, d2
	vuzp.8	d12, d13
	vuzp.8	d14, d15
	vuzp.8	d13, d15
	vuzp.8	d12, d14
	vuzp.8	d4, d5
	vuzp.8	d6, d7
	vuzp.8	d5, d7
	vuzp.8	d4, d6
	vmull.u8	q8, d15, d3
	vmull.u8	q6, d15, d2
	vmull.u8	q5, d15, d1
	vmull.u8	q4, d15, d0
	vrshr.u16	q13, q8, #8
	vrshr.u16	q12, q6, #8
	vrshr.u16	q11, q5, #8
	vrshr.u16	q10, q4, #8
	vraddhn.i16	d3, q8, q13
	vraddhn.i16	d2, q6, q12
	vraddhn.i16	d1, q5, q11
	vraddhn.i16	d0, q4, q10
	vmvn	d24, d3
	vmull.u8	q8, d24, d4
	vmull.u8	q9, d24, d5
	vmull.u8	q10, d24, d6
	vmull.u8	q11, d24, d7
	vrshr.u16	q14, q8, #8
	vrshr.u16	q15, q9, #8
	vrshr.u16	q12, q10, #8
	vrshr.u16	q13, q11, #8
	vraddhn.i16	d28, q14, q8
	vraddhn.i16	d29, q15, q9
	vraddhn.i16	d30, q12, q10
	vraddhn.i16	d31, q13, q11
	vqadd.u8	q14, q0, q14
	vqadd.u8	q15, q1, q15
	vzip.8	d28, d30
	vzip.8	d29, d31
	vzip.8	d30, d31
	vzip.8	d28, d29
	tst	r0, #4
	beq	19f
	vst1.32	{d30-d31}, [r1]!
19:	tst	r0, #2
	beq	20f
	vst1.32	{d29}, [r1]!
20:	tst	r0, #1
	beq	15f
	vst1.32	{d28[1]}, [r1]!
15:	vldmia	sp!, {d8-d15}
	bx	lr

/* pixman_composite_over_8888_8888_asm_armv6 has an external reference - skipped */

.global _pixman_composite_add_8888_8888_8888_asm_neon
_pixman_composite_add_8888_8888_8888_asm_neon:
	push	{r4, r5, r6, r7, r8, r9, sl, fp, ip, lr}
	ldr	r4, [sp, #40]
	ldr	r7, [sp, #48]
	mov	sl, #0
	ldr	r5, [sp, #44]
	ldr	r8, [sp, #52]
	mov	r6, r2
	mov	fp, r4
	mov	ip, r6
	mov	lr, r7
	lsl	r9, r1, #4
	sub	r9, r9, #6
	push	{r0, r1}
	subs	r1, r1, #1
	str	r1, [sp, #4]
	blt	0f
	cmp	r0, #16
	blt	1f
15:	tst	r6, #15
	beq	2f
	tst	r6, #4
	beq	3f
	vld1.32	{d0[1]}, [r4]!
	vld1.32	{d24[1]}, [r7]!
	vld1.32	{d4[1]}, [r6]!
	add	sl, sl, #1
	sub	r0, r0, #1
3:	tst	r6, #8
	beq	4f
	vld1.32	{d1}, [r4]!
	vld1.32	{d25}, [r7]!
	vld1.32	{d5}, [r6, :64]!
	add	sl, sl, #2
	sub	r0, r0, #2
4:	vld1.32	{d2-d3}, [r4]!
	vld1.32	{d26-d27}, [r7]!
	vld1.32	{d6-d7}, [r6, :128]!
	add	sl, sl, #4
	sub	r0, r0, #4
	vuzp.8	d0, d1
	vuzp.8	d2, d3
	vuzp.8	d1, d3
	vuzp.8	d0, d2
	vuzp.8	d24, d25
	vuzp.8	d26, d27
	vuzp.8	d25, d27
	vuzp.8	d24, d26
	vuzp.8	d4, d5
	vuzp.8	d6, d7
	vuzp.8	d5, d7
	vuzp.8	d4, d6
	vmull.u8	q8, d27, d0
	vmull.u8	q9, d27, d1
	vmull.u8	q10, d27, d2
	vmull.u8	q11, d27, d3
	vrsra.u16	q8, q8, #8
	vrsra.u16	q9, q9, #8
	vrsra.u16	q10, q10, #8
	vrsra.u16	q11, q11, #8
	ldr	r1, [sp]
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r1
	pld	[fp, sl, lsl #2]
	pld	[ip, sl, lsl #2]
	pld	[lr, sl, lsl #2]
	subge	sl, sl, r1
	subsge	r9, r9, #16
	ldrbge	r1, [fp, r5, lsl #2]!
	ldrbge	r1, [ip, r3, lsl #2]!
	ldrbge	r1, [lr, r8, lsl #2]!
	vrshrn.i16	d28, q8, #8
	vrshrn.i16	d29, q9, #8
	vrshrn.i16	d30, q10, #8
	vrshrn.i16	d31, q11, #8
	vqadd.u8	q14, q2, q14
	vqadd.u8	q15, q3, q15
	vzip.8	d28, d30
	vzip.8	d29, d31
	vzip.8	d30, d31
	vzip.8	d28, d29
	tst	r2, #4
	beq	5f
	vst1.32	{d28[1]}, [r2]!
5:	tst	r2, #8
	beq	6f
	vst1.32	{d29}, [r2, :64]!
6:	vst1.32	{d30-d31}, [r2, :128]!
2:	vld4.8	{d4-d7}, [r6, :128]!
	vld4.8	{d0-d3}, [r4]!
	vld4.8	{d24-d27}, [r7]!
	add	sl, sl, #8
	vmull.u8	q8, d27, d0
	vmull.u8	q9, d27, d1
	vmull.u8	q10, d27, d2
	vmull.u8	q11, d27, d3
	vrsra.u16	q8, q8, #8
	vrsra.u16	q9, q9, #8
	vrsra.u16	q10, q10, #8
	vrsra.u16	q11, q11, #8
	ldr	r1, [sp]
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r1
	pld	[fp, sl, lsl #2]
	pld	[ip, sl, lsl #2]
	pld	[lr, sl, lsl #2]
	subge	sl, sl, r1
	subsge	r9, r9, #16
	ldrbge	r1, [fp, r5, lsl #2]!
	ldrbge	r1, [ip, r3, lsl #2]!
	ldrbge	r1, [lr, r8, lsl #2]!
	subs	r0, r0, #16
	blt	7f
8:	vld4.8	{d0-d3}, [r4]!
	vrshrn.i16	d28, q8, #8
	vld4.8	{d24-d27}, [r7]!
	vrshrn.i16	d29, q9, #8
	vmull.u8	q8, d27, d0
	vrshrn.i16	d30, q10, #8
	vmull.u8	q9, d27, d1
	vrshrn.i16	d31, q11, #8
	vmull.u8	q10, d27, d2
	vqadd.u8	q14, q2, q14
	vmull.u8	q11, d27, d3
	vqadd.u8	q15, q3, q15
	vrsra.u16	q8, q8, #8
	vld4.8	{d4-d7}, [r6, :128]!
	vrsra.u16	q9, q9, #8
	vst4.8	{d28-d31}, [r2, :128]!
	vrsra.u16	q10, q10, #8
	ldr	r1, [sp]
	add	sl, sl, #8
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r1
	pld	[fp, sl, lsl #2]
	pld	[ip, sl, lsl #2]
	pld	[lr, sl, lsl #2]
	subge	sl, sl, r1
	subsge	r9, r9, #16
	ldrbge	r1, [fp, r5, lsl #2]!
	ldrbge	r1, [ip, r3, lsl #2]!
	ldrbge	r1, [lr, r8, lsl #2]!
	vrsra.u16	q11, q11, #8
	subs	r0, r0, #8
	bge	8b
7:	vrshrn.i16	d28, q8, #8
	vrshrn.i16	d29, q9, #8
	vrshrn.i16	d30, q10, #8
	vrshrn.i16	d31, q11, #8
	vqadd.u8	q14, q2, q14
	vqadd.u8	q15, q3, q15
	vst4.8	{d28-d31}, [r2, :128]!
	tst	r0, #7
	beq	9f
	tst	r0, #4
	beq	10f
	vld1.32	{d2-d3}, [r4]!
	vld1.32	{d26-d27}, [r7]!
	vld1.32	{d6-d7}, [r6, :128]!
	add	sl, sl, #4
10:	tst	r0, #2
	beq	11f
	vld1.32	{d1}, [r4]!
	vld1.32	{d25}, [r7]!
	vld1.32	{d5}, [r6, :64]!
	add	sl, sl, #2
11:	tst	r0, #1
	beq	12f
	vld1.32	{d0[1]}, [r4]!
	vld1.32	{d24[1]}, [r7]!
	vld1.32	{d4[1]}, [r6]!
	add	sl, sl, #1
12:	vuzp.8	d0, d1
	vuzp.8	d2, d3
	vuzp.8	d1, d3
	vuzp.8	d0, d2
	vuzp.8	d24, d25
	vuzp.8	d26, d27
	vuzp.8	d25, d27
	vuzp.8	d24, d26
	vuzp.8	d4, d5
	vuzp.8	d6, d7
	vuzp.8	d5, d7
	vuzp.8	d4, d6
	vmull.u8	q8, d27, d0
	vmull.u8	q9, d27, d1
	vmull.u8	q10, d27, d2
	vmull.u8	q11, d27, d3
	vrsra.u16	q8, q8, #8
	vrsra.u16	q9, q9, #8
	vrsra.u16	q10, q10, #8
	vrsra.u16	q11, q11, #8
	ldr	r1, [sp]
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r1
	pld	[fp, sl, lsl #2]
	pld	[ip, sl, lsl #2]
	pld	[lr, sl, lsl #2]
	subge	sl, sl, r1
	subsge	r9, r9, #16
	ldrbge	r1, [fp, r5, lsl #2]!
	ldrbge	r1, [ip, r3, lsl #2]!
	ldrbge	r1, [lr, r8, lsl #2]!
	vrshrn.i16	d28, q8, #8
	vrshrn.i16	d29, q9, #8
	vrshrn.i16	d30, q10, #8
	vrshrn.i16	d31, q11, #8
	vqadd.u8	q14, q2, q14
	vqadd.u8	q15, q3, q15
	vzip.8	d28, d30
	vzip.8	d29, d31
	vzip.8	d30, d31
	vzip.8	d28, d29
	tst	r0, #4
	beq	13f
	vst1.32	{d30-d31}, [r2, :128]!
13:	tst	r0, #2
	beq	14f
	vst1.32	{d29}, [r2, :64]!
14:	tst	r0, #1
	beq	9f
	vst1.32	{d28[1]}, [r2]!
9:	ldrd	r0, [sp]
	add	r2, r2, r3, lsl #2
	add	r4, r4, r5, lsl #2
	add	r7, r7, r8, lsl #2
	sub	r2, r2, r0, lsl #2
	sub	r4, r4, r0, lsl #2
	sub	r7, r7, r0, lsl #2
	subs	r1, r1, #1
	mov	r6, r2
	str	r1, [sp, #4]
	bge	15b
	pop	{r0, r1}
	pop	{r4, r5, r6, r7, r8, r9, sl, fp, ip, pc}
1:	tst	r0, #8
	beq	16f
	vld4.8	{d4-d7}, [r6]!
	vld4.8	{d0-d3}, [r4]!
	vld4.8	{d24-d27}, [r7]!
	vmull.u8	q8, d27, d0
	vmull.u8	q9, d27, d1
	vmull.u8	q10, d27, d2
	vmull.u8	q11, d27, d3
	vrsra.u16	q8, q8, #8
	vrsra.u16	q9, q9, #8
	vrsra.u16	q10, q10, #8
	vrsra.u16	q11, q11, #8
	vrshrn.i16	d28, q8, #8
	vrshrn.i16	d29, q9, #8
	vrshrn.i16	d30, q10, #8
	vrshrn.i16	d31, q11, #8
	vqadd.u8	q14, q2, q14
	vqadd.u8	q15, q3, q15
	vst4.8	{d28-d31}, [r2]!
16:	tst	r0, #7
	beq	17f
	tst	r0, #4
	beq	18f
	vld1.32	{d2-d3}, [r4]!
	vld1.32	{d26-d27}, [r7]!
	vld1.32	{d6-d7}, [r6]!
18:	tst	r0, #2
	beq	19f
	vld1.32	{d1}, [r4]!
	vld1.32	{d25}, [r7]!
	vld1.32	{d5}, [r6]!
19:	tst	r0, #1
	beq	20f
	vld1.32	{d0[1]}, [r4]!
	vld1.32	{d24[1]}, [r7]!
	vld1.32	{d4[1]}, [r6]!
20:	vuzp.8	d0, d1
	vuzp.8	d2, d3
	vuzp.8	d1, d3
	vuzp.8	d0, d2
	vuzp.8	d24, d25
	vuzp.8	d26, d27
	vuzp.8	d25, d27
	vuzp.8	d24, d26
	vuzp.8	d4, d5
	vuzp.8	d6, d7
	vuzp.8	d5, d7
	vuzp.8	d4, d6
	vmull.u8	q8, d27, d0
	vmull.u8	q9, d27, d1
	vmull.u8	q10, d27, d2
	vmull.u8	q11, d27, d3
	vrsra.u16	q8, q8, #8
	vrsra.u16	q9, q9, #8
	vrsra.u16	q10, q10, #8
	vrsra.u16	q11, q11, #8
	vrshrn.i16	d28, q8, #8
	vrshrn.i16	d29, q9, #8
	vrshrn.i16	d30, q10, #8
	vrshrn.i16	d31, q11, #8
	vqadd.u8	q14, q2, q14
	vqadd.u8	q15, q3, q15
	vzip.8	d28, d30
	vzip.8	d29, d31
	vzip.8	d30, d31
	vzip.8	d28, d29
	tst	r0, #4
	beq	21f
	vst1.32	{d30-d31}, [r2]!
21:	tst	r0, #2
	beq	22f
	vst1.32	{d29}, [r2]!
22:	tst	r0, #1
	beq	17f
	vst1.32	{d28[1]}, [r2]!
17:	ldrd	r0, [sp]
	add	r2, r2, r3, lsl #2
	add	r4, r4, r5, lsl #2
	add	r7, r7, r8, lsl #2
	sub	r2, r2, r0, lsl #2
	sub	r4, r4, r0, lsl #2
	sub	r7, r7, r0, lsl #2
	subs	r1, r1, #1
	mov	r6, r2
	str	r1, [sp, #4]
	bge	1b
0:	pop	{r0, r1}
	pop	{r4, r5, r6, r7, r8, r9, sl, fp, ip, pc}

.global _pixman_composite_scanline_add_mask_asm_neon
_pixman_composite_scanline_add_mask_asm_neon:
	mov	ip, r1
	cmp	r0, #8
	blt	0f
	tst	ip, #15
	beq	1f
	tst	ip, #4
	beq	2f
	vld1.32	{d0[1]}, [r2]!
	vld1.32	{d24[1]}, [r3]!
	vld1.32	{d4[1]}, [ip]!
	sub	r0, r0, #1
2:	tst	ip, #8
	beq	3f
	vld1.32	{d1}, [r2]!
	vld1.32	{d25}, [r3]!
	vld1.32	{d5}, [ip, :64]!
	sub	r0, r0, #2
3:	vld1.32	{d2-d3}, [r2]!
	vld1.32	{d26-d27}, [r3]!
	vld1.32	{d6-d7}, [ip, :128]!
	sub	r0, r0, #4
	vuzp.8	d0, d1
	vuzp.8	d2, d3
	vuzp.8	d1, d3
	vuzp.8	d0, d2
	vuzp.8	d24, d25
	vuzp.8	d26, d27
	vuzp.8	d25, d27
	vuzp.8	d24, d26
	vuzp.8	d4, d5
	vuzp.8	d6, d7
	vuzp.8	d5, d7
	vuzp.8	d4, d6
	vmull.u8	q8, d27, d0
	vmull.u8	q9, d27, d1
	vmull.u8	q10, d27, d2
	vmull.u8	q11, d27, d3
	vrsra.u16	q8, q8, #8
	vrsra.u16	q9, q9, #8
	vrsra.u16	q10, q10, #8
	vrsra.u16	q11, q11, #8
	vrshrn.i16	d28, q8, #8
	vrshrn.i16	d29, q9, #8
	vrshrn.i16	d30, q10, #8
	vrshrn.i16	d31, q11, #8
	vqadd.u8	q14, q2, q14
	vqadd.u8	q15, q3, q15
	vzip.8	d28, d30
	vzip.8	d29, d31
	vzip.8	d30, d31
	vzip.8	d28, d29
	tst	r1, #4
	beq	4f
	vst1.32	{d28[1]}, [r1]!
4:	tst	r1, #8
	beq	5f
	vst1.32	{d29}, [r1, :64]!
5:	vst1.32	{d30-d31}, [r1, :128]!
1:	subs	r0, r0, #8
	blt	6f
	vld4.8	{d4-d7}, [ip, :128]!
	vld4.8	{d0-d3}, [r2]!
	vld4.8	{d24-d27}, [r3]!
	vmull.u8	q8, d27, d0
	vmull.u8	q9, d27, d1
	vmull.u8	q10, d27, d2
	vmull.u8	q11, d27, d3
	vrsra.u16	q8, q8, #8
	vrsra.u16	q9, q9, #8
	vrsra.u16	q10, q10, #8
	vrsra.u16	q11, q11, #8
	subs	r0, r0, #8
	blt	7f
8:	vld4.8	{d0-d3}, [r2]!
	vrshrn.i16	d28, q8, #8
	vld4.8	{d24-d27}, [r3]!
	vrshrn.i16	d29, q9, #8
	vmull.u8	q8, d27, d0
	vrshrn.i16	d30, q10, #8
	vmull.u8	q9, d27, d1
	vrshrn.i16	d31, q11, #8
	vmull.u8	q10, d27, d2
	vqadd.u8	q14, q2, q14
	vmull.u8	q11, d27, d3
	vqadd.u8	q15, q3, q15
	vrsra.u16	q8, q8, #8
	vld4.8	{d4-d7}, [ip, :128]!
	vrsra.u16	q9, q9, #8
	vst4.8	{d28-d31}, [r1, :128]!
	vrsra.u16	q10, q10, #8
	vrsra.u16	q11, q11, #8
	subs	r0, r0, #8
	bge	8b
7:	vrshrn.i16	d28, q8, #8
	vrshrn.i16	d29, q9, #8
	vrshrn.i16	d30, q10, #8
	vrshrn.i16	d31, q11, #8
	vqadd.u8	q14, q2, q14
	vqadd.u8	q15, q3, q15
	vst4.8	{d28-d31}, [r1, :128]!
6:	tst	r0, #7
	beq	9f
	tst	r0, #4
	beq	10f
	vld1.32	{d2-d3}, [r2]!
	vld1.32	{d26-d27}, [r3]!
	vld1.32	{d6-d7}, [ip, :128]!
10:	tst	r0, #2
	beq	11f
	vld1.32	{d1}, [r2]!
	vld1.32	{d25}, [r3]!
	vld1.32	{d5}, [ip, :64]!
11:	tst	r0, #1
	beq	12f
	vld1.32	{d0[1]}, [r2]!
	vld1.32	{d24[1]}, [r3]!
	vld1.32	{d4[1]}, [ip]!
12:	vuzp.8	d0, d1
	vuzp.8	d2, d3
	vuzp.8	d1, d3
	vuzp.8	d0, d2
	vuzp.8	d24, d25
	vuzp.8	d26, d27
	vuzp.8	d25, d27
	vuzp.8	d24, d26
	vuzp.8	d4, d5
	vuzp.8	d6, d7
	vuzp.8	d5, d7
	vuzp.8	d4, d6
	vmull.u8	q8, d27, d0
	vmull.u8	q9, d27, d1
	vmull.u8	q10, d27, d2
	vmull.u8	q11, d27, d3
	vrsra.u16	q8, q8, #8
	vrsra.u16	q9, q9, #8
	vrsra.u16	q10, q10, #8
	vrsra.u16	q11, q11, #8
	vrshrn.i16	d28, q8, #8
	vrshrn.i16	d29, q9, #8
	vrshrn.i16	d30, q10, #8
	vrshrn.i16	d31, q11, #8
	vqadd.u8	q14, q2, q14
	vqadd.u8	q15, q3, q15
	vzip.8	d28, d30
	vzip.8	d29, d31
	vzip.8	d30, d31
	vzip.8	d28, d29
	tst	r0, #4
	beq	13f
	vst1.32	{d30-d31}, [r1, :128]!
13:	tst	r0, #2
	beq	14f
	vst1.32	{d29}, [r1, :64]!
14:	tst	r0, #1
	beq	9f
	vst1.32	{d28[1]}, [r1]!
9:	bx	lr
0:	tst	r0, #7
	beq	15f
	tst	r0, #4
	beq	16f
	vld1.32	{d2-d3}, [r2]!
	vld1.32	{d26-d27}, [r3]!
	vld1.32	{d6-d7}, [ip]!
16:	tst	r0, #2
	beq	17f
	vld1.32	{d1}, [r2]!
	vld1.32	{d25}, [r3]!
	vld1.32	{d5}, [ip]!
17:	tst	r0, #1
	beq	18f
	vld1.32	{d0[1]}, [r2]!
	vld1.32	{d24[1]}, [r3]!
	vld1.32	{d4[1]}, [ip]!
18:	vuzp.8	d0, d1
	vuzp.8	d2, d3
	vuzp.8	d1, d3
	vuzp.8	d0, d2
	vuzp.8	d24, d25
	vuzp.8	d26, d27
	vuzp.8	d25, d27
	vuzp.8	d24, d26
	vuzp.8	d4, d5
	vuzp.8	d6, d7
	vuzp.8	d5, d7
	vuzp.8	d4, d6
	vmull.u8	q8, d27, d0
	vmull.u8	q9, d27, d1
	vmull.u8	q10, d27, d2
	vmull.u8	q11, d27, d3
	vrsra.u16	q8, q8, #8
	vrsra.u16	q9, q9, #8
	vrsra.u16	q10, q10, #8
	vrsra.u16	q11, q11, #8
	vrshrn.i16	d28, q8, #8
	vrshrn.i16	d29, q9, #8
	vrshrn.i16	d30, q10, #8
	vrshrn.i16	d31, q11, #8
	vqadd.u8	q14, q2, q14
	vqadd.u8	q15, q3, q15
	vzip.8	d28, d30
	vzip.8	d29, d31
	vzip.8	d30, d31
	vzip.8	d28, d29
	tst	r0, #4
	beq	19f
	vst1.32	{d30-d31}, [r1]!
19:	tst	r0, #2
	beq	20f
	vst1.32	{d29}, [r1]!
20:	tst	r0, #1
	beq	15f
	vst1.32	{d28[1]}, [r1]!
15:	bx	lr

.global _pixman_composite_in_n_8_asm_neon
_pixman_composite_in_n_8_asm_neon:
	push	{r4, r5, r6, r7, r8, r9, sl, fp, ip, lr}
	mov	sl, #0
	mov	r6, r2
	mov	fp, r4
	mov	ip, r6
	mov	lr, r7
	lsl	r9, r1, #4
	sub	r9, r9, #11
	add	r8, sp, #40
	vld1.32	{d3[0]}, [r8]
	vdup.8	d3, d3[3]
	subs	r1, r1, #1
	mov	r7, r0
	blt	0f
	cmp	r0, #64
	blt	1f
23:	tst	r6, #15
	beq	2f
	tst	r6, #1
	beq	3f
	vld1.8	{d4[1]}, [r6]!
	add	sl, sl, #1
	sub	r0, r0, #1
3:	tst	r6, #2
	beq	4f
	vld1.8	{d4[2]}, [r6]!
	vld1.8	{d4[3]}, [r6]!
	add	sl, sl, #2
	sub	r0, r0, #2
4:	tst	r6, #4
	beq	5f
	vld1.8	{d4[4]}, [r6]!
	vld1.8	{d4[5]}, [r6]!
	vld1.8	{d4[6]}, [r6]!
	vld1.8	{d4[7]}, [r6]!
	add	sl, sl, #4
	sub	r0, r0, #4
5:	tst	r6, #8
	beq	6f
	vld1.8	{d5}, [r6, :64]!
	add	sl, sl, #8
	sub	r0, r0, #8
6:	vld1.8	{d6-d7}, [r6, :128]!
	add	sl, sl, #16
	sub	r0, r0, #16
	vmull.u8	q8, d4, d3
	vmull.u8	q9, d5, d3
	vmull.u8	q10, d6, d3
	vmull.u8	q11, d7, d3
	tst	r9, #15
	addne	sl, sl, #32
	subne	r9, r9, #1
	cmp	sl, r7
	pld	[ip, sl]
	subge	sl, sl, r7
	subsge	r9, r9, #16
	ldrbge	r8, [ip, r3]!
	vrshr.u16	q14, q8, #8
	vrshr.u16	q15, q9, #8
	vrshr.u16	q12, q10, #8
	vrshr.u16	q13, q11, #8
	vraddhn.i16	d28, q8, q14
	vraddhn.i16	d29, q9, q15
	vraddhn.i16	d30, q10, q12
	vraddhn.i16	d31, q11, q13
	tst	r2, #1
	beq	7f
	vst1.8	{d28[1]}, [r2]!
7:	tst	r2, #2
	beq	8f
	vst1.8	{d28[2]}, [r2]!
	vst1.8	{d28[3]}, [r2]!
8:	tst	r2, #4
	beq	9f
	vst1.8	{d28[4]}, [r2]!
	vst1.8	{d28[5]}, [r2]!
	vst1.8	{d28[6]}, [r2]!
	vst1.8	{d28[7]}, [r2]!
9:	tst	r2, #8
	beq	10f
	vst1.8	{d29}, [r2, :64]!
10:	vst1.8	{d30-d31}, [r2, :128]!
2:	vld1.8	{d4-d7}, [r6, :128]!
	add	sl, sl, #32
	vmull.u8	q8, d4, d3
	vmull.u8	q9, d5, d3
	vmull.u8	q10, d6, d3
	vmull.u8	q11, d7, d3
	tst	r9, #15
	addne	sl, sl, #32
	subne	r9, r9, #1
	cmp	sl, r7
	pld	[ip, sl]
	subge	sl, sl, r7
	subsge	r9, r9, #16
	ldrbge	r8, [ip, r3]!
	subs	r0, r0, #64
	blt	11f
12:	vrshr.u16	q14, q8, #8
	vrshr.u16	q15, q9, #8
	vrshr.u16	q12, q10, #8
	vrshr.u16	q13, q11, #8
	vraddhn.i16	d28, q8, q14
	vraddhn.i16	d29, q9, q15
	vraddhn.i16	d30, q10, q12
	vraddhn.i16	d31, q11, q13
	vld1.8	{d4-d7}, [r6, :128]!
	add	sl, sl, #32
	tst	r9, #15
	addne	sl, sl, #32
	subne	r9, r9, #1
	cmp	sl, r7
	pld	[ip, sl]
	subge	sl, sl, r7
	subsge	r9, r9, #16
	ldrbge	r8, [ip, r3]!
	vmull.u8	q8, d4, d3
	vmull.u8	q9, d5, d3
	vmull.u8	q10, d6, d3
	vmull.u8	q11, d7, d3
	vst1.8	{d28-d31}, [r2, :128]!
	subs	r0, r0, #32
	bge	12b
11:	vrshr.u16	q14, q8, #8
	vrshr.u16	q15, q9, #8
	vrshr.u16	q12, q10, #8
	vrshr.u16	q13, q11, #8
	vraddhn.i16	d28, q8, q14
	vraddhn.i16	d29, q9, q15
	vraddhn.i16	d30, q10, q12
	vraddhn.i16	d31, q11, q13
	vst1.8	{d28-d31}, [r2, :128]!
	tst	r0, #31
	beq	13f
	tst	r0, #16
	beq	14f
	vld1.8	{d6-d7}, [r6, :128]!
	add	sl, sl, #16
14:	tst	r0, #8
	beq	15f
	vld1.8	{d5}, [r6, :64]!
	add	sl, sl, #8
15:	tst	r0, #4
	beq	16f
	vld1.8	{d4[4]}, [r6]!
	vld1.8	{d4[5]}, [r6]!
	vld1.8	{d4[6]}, [r6]!
	vld1.8	{d4[7]}, [r6]!
	add	sl, sl, #4
16:	tst	r0, #2
	beq	17f
	vld1.8	{d4[2]}, [r6]!
	vld1.8	{d4[3]}, [r6]!
	add	sl, sl, #2
17:	tst	r0, #1
	beq	18f
	vld1.8	{d4[1]}, [r6]!
	add	sl, sl, #1
18:	vmull.u8	q8, d4, d3
	vmull.u8	q9, d5, d3
	vmull.u8	q10, d6, d3
	vmull.u8	q11, d7, d3
	tst	r9, #15
	addne	sl, sl, #32
	subne	r9, r9, #1
	cmp	sl, r7
	pld	[ip, sl]
	subge	sl, sl, r7
	subsge	r9, r9, #16
	ldrbge	r8, [ip, r3]!
	vrshr.u16	q14, q8, #8
	vrshr.u16	q15, q9, #8
	vrshr.u16	q12, q10, #8
	vrshr.u16	q13, q11, #8
	vraddhn.i16	d28, q8, q14
	vraddhn.i16	d29, q9, q15
	vraddhn.i16	d30, q10, q12
	vraddhn.i16	d31, q11, q13
	tst	r0, #16
	beq	19f
	vst1.8	{d30-d31}, [r2, :128]!
19:	tst	r0, #8
	beq	20f
	vst1.8	{d29}, [r2, :64]!
20:	tst	r0, #4
	beq	21f
	vst1.8	{d28[4]}, [r2]!
	vst1.8	{d28[5]}, [r2]!
	vst1.8	{d28[6]}, [r2]!
	vst1.8	{d28[7]}, [r2]!
21:	tst	r0, #2
	beq	22f
	vst1.8	{d28[2]}, [r2]!
	vst1.8	{d28[3]}, [r2]!
22:	tst	r0, #1
	beq	13f
	vst1.8	{d28[1]}, [r2]!
13:	mov	r0, r7
	add	r2, r2, r3
	sub	r2, r2, r0
	subs	r1, r1, #1
	mov	r6, r2
	bge	23b
	pop	{r4, r5, r6, r7, r8, r9, sl, fp, ip, pc}
1:	tst	r0, #32
	beq	24f
	vld1.8	{d4-d7}, [r6]!
	vmull.u8	q8, d4, d3
	vmull.u8	q9, d5, d3
	vmull.u8	q10, d6, d3
	vmull.u8	q11, d7, d3
	vrshr.u16	q14, q8, #8
	vrshr.u16	q15, q9, #8
	vrshr.u16	q12, q10, #8
	vrshr.u16	q13, q11, #8
	vraddhn.i16	d28, q8, q14
	vraddhn.i16	d29, q9, q15
	vraddhn.i16	d30, q10, q12
	vraddhn.i16	d31, q11, q13
	vst1.8	{d28-d31}, [r2]!
24:	tst	r0, #31
	beq	25f
	tst	r0, #16
	beq	26f
	vld1.8	{d6-d7}, [r6]!
26:	tst	r0, #8
	beq	27f
	vld1.8	{d5}, [r6]!
27:	tst	r0, #4
	beq	28f
	vld1.8	{d4[4]}, [r6]!
	vld1.8	{d4[5]}, [r6]!
	vld1.8	{d4[6]}, [r6]!
	vld1.8	{d4[7]}, [r6]!
28:	tst	r0, #2
	beq	29f
	vld1.8	{d4[2]}, [r6]!
	vld1.8	{d4[3]}, [r6]!
29:	tst	r0, #1
	beq	30f
	vld1.8	{d4[1]}, [r6]!
30:	vmull.u8	q8, d4, d3
	vmull.u8	q9, d5, d3
	vmull.u8	q10, d6, d3
	vmull.u8	q11, d7, d3
	vrshr.u16	q14, q8, #8
	vrshr.u16	q15, q9, #8
	vrshr.u16	q12, q10, #8
	vrshr.u16	q13, q11, #8
	vraddhn.i16	d28, q8, q14
	vraddhn.i16	d29, q9, q15
	vraddhn.i16	d30, q10, q12
	vraddhn.i16	d31, q11, q13
	tst	r0, #16
	beq	31f
	vst1.8	{d30-d31}, [r2]!
31:	tst	r0, #8
	beq	32f
	vst1.8	{d29}, [r2]!
32:	tst	r0, #4
	beq	33f
	vst1.8	{d28[4]}, [r2]!
	vst1.8	{d28[5]}, [r2]!
	vst1.8	{d28[6]}, [r2]!
	vst1.8	{d28[7]}, [r2]!
33:	tst	r0, #2
	beq	34f
	vst1.8	{d28[2]}, [r2]!
	vst1.8	{d28[3]}, [r2]!
34:	tst	r0, #1
	beq	25f
	vst1.8	{d28[1]}, [r2]!
25:	mov	r0, r7
	add	r2, r2, r3
	sub	r2, r2, r0
	subs	r1, r1, #1
	mov	r6, r2
	bge	1b
0:	pop	{r4, r5, r6, r7, r8, r9, sl, fp, ip, pc}

.global _pixman_composite_scanline_out_reverse_asm_neon
_pixman_composite_scanline_out_reverse_asm_neon:
	mov	ip, r1
	cmp	r0, #8
	blt	0f
	tst	ip, #15
	beq	1f
	tst	ip, #4
	beq	2f
	vld1.32	{d0[1]}, [r2]!
	vld1.32	{d4[1]}, [ip]!
	sub	r0, r0, #1
2:	tst	ip, #8
	beq	3f
	vld1.32	{d1}, [r2]!
	vld1.32	{d5}, [ip, :64]!
	sub	r0, r0, #2
3:	vld1.32	{d2-d3}, [r2]!
	vld1.32	{d6-d7}, [ip, :128]!
	sub	r0, r0, #4
	vuzp.8	d0, d1
	vuzp.8	d2, d3
	vuzp.8	d1, d3
	vuzp.8	d0, d2
	vuzp.8	d4, d5
	vuzp.8	d6, d7
	vuzp.8	d5, d7
	vuzp.8	d4, d6
	vmvn	d24, d3
	vmull.u8	q8, d24, d4
	vmull.u8	q9, d24, d5
	vmull.u8	q10, d24, d6
	vmull.u8	q11, d24, d7
	vrshr.u16	q14, q8, #8
	vrshr.u16	q15, q9, #8
	vrshr.u16	q12, q10, #8
	vrshr.u16	q13, q11, #8
	vraddhn.i16	d28, q14, q8
	vraddhn.i16	d29, q15, q9
	vraddhn.i16	d30, q12, q10
	vraddhn.i16	d31, q13, q11
	vzip.8	d28, d30
	vzip.8	d29, d31
	vzip.8	d30, d31
	vzip.8	d28, d29
	tst	r1, #4
	beq	4f
	vst1.32	{d28[1]}, [r1]!
4:	tst	r1, #8
	beq	5f
	vst1.32	{d29}, [r1, :64]!
5:	vst1.32	{d30-d31}, [r1, :128]!
1:	subs	r0, r0, #8
	blt	6f
	vld4.8	{d4-d7}, [ip, :128]!
	vld4.8	{d0-d3}, [r2]!
	vmvn	d24, d3
	vmull.u8	q8, d24, d4
	vmull.u8	q9, d24, d5
	vmull.u8	q10, d24, d6
	vmull.u8	q11, d24, d7
	subs	r0, r0, #8
	blt	7f
8:	vld4.8	{d4-d7}, [ip, :128]!
	vrshr.u16	q14, q8, #8
	vrshr.u16	q15, q9, #8
	vrshr.u16	q12, q10, #8
	vrshr.u16	q13, q11, #8
	vraddhn.i16	d28, q14, q8
	vraddhn.i16	d29, q15, q9
	vraddhn.i16	d30, q12, q10
	vraddhn.i16	d31, q13, q11
	vld4.8	{d0-d3}, [r2]!
	vmvn	d22, d3
	vst4.8	{d28-d31}, [r1, :128]!
	vmull.u8	q8, d22, d4
	vmull.u8	q9, d22, d5
	vmull.u8	q10, d22, d6
	vmull.u8	q11, d22, d7
	subs	r0, r0, #8
	bge	8b
7:	vrshr.u16	q14, q8, #8
	vrshr.u16	q15, q9, #8
	vrshr.u16	q12, q10, #8
	vrshr.u16	q13, q11, #8
	vraddhn.i16	d28, q14, q8
	vraddhn.i16	d29, q15, q9
	vraddhn.i16	d30, q12, q10
	vraddhn.i16	d31, q13, q11
	vst4.8	{d28-d31}, [r1, :128]!
6:	tst	r0, #7
	beq	9f
	tst	r0, #4
	beq	10f
	vld1.32	{d2-d3}, [r2]!
	vld1.32	{d6-d7}, [ip, :128]!
10:	tst	r0, #2
	beq	11f
	vld1.32	{d1}, [r2]!
	vld1.32	{d5}, [ip, :64]!
11:	tst	r0, #1
	beq	12f
	vld1.32	{d0[1]}, [r2]!
	vld1.32	{d4[1]}, [ip]!
12:	vuzp.8	d0, d1
	vuzp.8	d2, d3
	vuzp.8	d1, d3
	vuzp.8	d0, d2
	vuzp.8	d4, d5
	vuzp.8	d6, d7
	vuzp.8	d5, d7
	vuzp.8	d4, d6
	vmvn	d24, d3
	vmull.u8	q8, d24, d4
	vmull.u8	q9, d24, d5
	vmull.u8	q10, d24, d6
	vmull.u8	q11, d24, d7
	vrshr.u16	q14, q8, #8
	vrshr.u16	q15, q9, #8
	vrshr.u16	q12, q10, #8
	vrshr.u16	q13, q11, #8
	vraddhn.i16	d28, q14, q8
	vraddhn.i16	d29, q15, q9
	vraddhn.i16	d30, q12, q10
	vraddhn.i16	d31, q13, q11
	vzip.8	d28, d30
	vzip.8	d29, d31
	vzip.8	d30, d31
	vzip.8	d28, d29
	tst	r0, #4
	beq	13f
	vst1.32	{d30-d31}, [r1, :128]!
13:	tst	r0, #2
	beq	14f
	vst1.32	{d29}, [r1, :64]!
14:	tst	r0, #1
	beq	9f
	vst1.32	{d28[1]}, [r1]!
9:	bx	lr
0:	tst	r0, #7
	beq	15f
	tst	r0, #4
	beq	16f
	vld1.32	{d2-d3}, [r2]!
	vld1.32	{d6-d7}, [ip]!
16:	tst	r0, #2
	beq	17f
	vld1.32	{d1}, [r2]!
	vld1.32	{d5}, [ip]!
17:	tst	r0, #1
	beq	18f
	vld1.32	{d0[1]}, [r2]!
	vld1.32	{d4[1]}, [ip]!
18:	vuzp.8	d0, d1
	vuzp.8	d2, d3
	vuzp.8	d1, d3
	vuzp.8	d0, d2
	vuzp.8	d4, d5
	vuzp.8	d6, d7
	vuzp.8	d5, d7
	vuzp.8	d4, d6
	vmvn	d24, d3
	vmull.u8	q8, d24, d4
	vmull.u8	q9, d24, d5
	vmull.u8	q10, d24, d6
	vmull.u8	q11, d24, d7
	vrshr.u16	q14, q8, #8
	vrshr.u16	q15, q9, #8
	vrshr.u16	q12, q10, #8
	vrshr.u16	q13, q11, #8
	vraddhn.i16	d28, q14, q8
	vraddhn.i16	d29, q15, q9
	vraddhn.i16	d30, q12, q10
	vraddhn.i16	d31, q13, q11
	vzip.8	d28, d30
	vzip.8	d29, d31
	vzip.8	d30, d31
	vzip.8	d28, d29
	tst	r0, #4
	beq	19f
	vst1.32	{d30-d31}, [r1]!
19:	tst	r0, #2
	beq	20f
	vst1.32	{d29}, [r1]!
20:	tst	r0, #1
	beq	15f
	vst1.32	{d28[1]}, [r1]!
15:	bx	lr

.global _pixman_composite_over_0565_8_0565_asm_neon
_pixman_composite_over_0565_8_0565_asm_neon:
	push	{r4, r5, r6, r7, r8, r9, sl, fp, ip, lr}
	ldr	r4, [sp, #40]
	ldr	r7, [sp, #48]
	mov	sl, #0
	ldr	r5, [sp, #44]
	ldr	r8, [sp, #52]
	mov	r6, r2
	mov	fp, r4
	mov	ip, r6
	mov	lr, r7
	lsl	r9, r1, #4
	sub	r9, r9, #11
	vstmdb	sp!, {d8-d15}
	push	{r0, r1}
	subs	r1, r1, #1
	str	r1, [sp, #4]
	blt	0f
	cmp	r0, #16
	blt	1f
16:	tst	r6, #15
	beq	2f
	tst	r6, #2
	beq	3f
	vld1.16	{d8[1]}, [r4]!
	vld1.8	{d15[1]}, [r7]!
	vld1.16	{d10[1]}, [r6]!
	add	sl, sl, #1
	sub	r0, r0, #1
3:	tst	r6, #4
	beq	4f
	vld1.16	{d8[2]}, [r4]!
	vld1.16	{d8[3]}, [r4]!
	vld1.8	{d15[2]}, [r7]!
	vld1.8	{d15[3]}, [r7]!
	vld1.16	{d10[2]}, [r6]!
	vld1.16	{d10[3]}, [r6]!
	add	sl, sl, #2
	sub	r0, r0, #2
4:	tst	r6, #8
	beq	5f
	vld1.16	{d9}, [r4]!
	vld1.8	{d15[4]}, [r7]!
	vld1.8	{d15[5]}, [r7]!
	vld1.8	{d15[6]}, [r7]!
	vld1.8	{d15[7]}, [r7]!
	vld1.16	{d11}, [r6, :64]!
	add	sl, sl, #4
	sub	r0, r0, #4
5:	vshrn.i16	d2, q4, #8
	vshrn.i16	d1, q4, #3
	vsli.16	q4, q4, #5
	vsri.8	d2, d2, #5
	vsri.8	d1, d1, #6
	vshrn.i16	d0, q4, #2
	vshrn.i16	d6, q5, #8
	vshrn.i16	d5, q5, #3
	vsli.16	q5, q5, #5
	vsri.8	d6, d6, #5
	vsri.8	d5, d5, #6
	vshrn.i16	d4, q5, #2
	vmvn	d7, d15
	vmull.u8	q6, d15, d2
	vmull.u8	q5, d15, d1
	vmull.u8	q4, d15, d0
	vmull.u8	q8, d7, d4
	vmull.u8	q9, d7, d5
	vmull.u8	q13, d7, d6
	vrshr.u16	q12, q6, #8
	vrshr.u16	q11, q5, #8
	vrshr.u16	q10, q4, #8
	vraddhn.i16	d2, q6, q12
	vraddhn.i16	d1, q5, q11
	vraddhn.i16	d0, q4, q10
	ldr	r1, [sp]
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r1
	pld	[fp, sl, lsl #1]
	pld	[ip, sl, lsl #1]
	pld	[lr, sl]
	subge	sl, sl, r1
	subsge	r9, r9, #16
	ldrbge	r1, [fp, r5, lsl #1]!
	ldrbge	r1, [ip, r3, lsl #1]!
	ldrbge	r1, [lr, r8]!
	vrshr.u16	q14, q8, #8
	vrshr.u16	q15, q9, #8
	vrshr.u16	q12, q13, #8
	vraddhn.i16	d28, q14, q8
	vraddhn.i16	d29, q15, q9
	vraddhn.i16	d30, q12, q13
	vqadd.u8	q0, q0, q14
	vqadd.u8	q1, q1, q15
	vshll.i8	q15, d1, #8
	vshll.i8	q14, d2, #8
	vshll.i8	q3, d0, #8
	vsri.16	q14, q15, #5
	vsri.16	q14, q3, #11
	tst	r2, #2
	beq	6f
	vst1.16	{d28[1]}, [r2]!
6:	tst	r2, #4
	beq	7f
	vst1.16	{d28[2]}, [r2]!
	vst1.16	{d28[3]}, [r2]!
7:	tst	r2, #8
	beq	2f
	vst1.16	{d29}, [r2, :64]!
2:	vld1.16	{d10-d11}, [r6, :128]!
	vld1.16	{d8-d9}, [r4]!
	vld1.8	{d15}, [r7]!
	add	sl, sl, #8
	vshrn.i16	d2, q4, #8
	vshrn.i16	d1, q4, #3
	vsli.16	q4, q4, #5
	vsri.8	d2, d2, #5
	vsri.8	d1, d1, #6
	vshrn.i16	d0, q4, #2
	vshrn.i16	d6, q5, #8
	vshrn.i16	d5, q5, #3
	vsli.16	q5, q5, #5
	vsri.8	d6, d6, #5
	vsri.8	d5, d5, #6
	vshrn.i16	d4, q5, #2
	vmvn	d7, d15
	vmull.u8	q6, d15, d2
	vmull.u8	q5, d15, d1
	vmull.u8	q4, d15, d0
	vmull.u8	q8, d7, d4
	vmull.u8	q9, d7, d5
	vmull.u8	q13, d7, d6
	vrshr.u16	q12, q6, #8
	vrshr.u16	q11, q5, #8
	vrshr.u16	q10, q4, #8
	vraddhn.i16	d2, q6, q12
	vraddhn.i16	d1, q5, q11
	vraddhn.i16	d0, q4, q10
	ldr	r1, [sp]
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r1
	pld	[fp, sl, lsl #1]
	pld	[ip, sl, lsl #1]
	pld	[lr, sl]
	subge	sl, sl, r1
	subsge	r9, r9, #16
	ldrbge	r1, [fp, r5, lsl #1]!
	ldrbge	r1, [ip, r3, lsl #1]!
	ldrbge	r1, [lr, r8]!
	subs	r0, r0, #16
	blt	8f
9:	vld1.8	{d15}, [r7]!
	vrshr.u16	q14, q8, #8
	vrshr.u16	q15, q9, #8
	vrshr.u16	q12, q13, #8
	vraddhn.i16	d28, q14, q8
	vraddhn.i16	d29, q15, q9
	vraddhn.i16	d30, q12, q13
	vqadd.u8	q0, q0, q14
	vqadd.u8	q1, q1, q15
	vshll.i8	q15, d1, #8
	vshll.i8	q14, d2, #8
	vshll.i8	q3, d0, #8
	vsri.16	q14, q15, #5
	vsri.16	q14, q3, #11
	vld1.16	{d8-d9}, [r4]!
	vld1.16	{d10-d11}, [r6, :128]!
	ldr	r1, [sp]
	add	sl, sl, #8
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r1
	pld	[fp, sl, lsl #1]
	pld	[ip, sl, lsl #1]
	pld	[lr, sl]
	subge	sl, sl, r1
	subsge	r9, r9, #16
	ldrbge	r1, [fp, r5, lsl #1]!
	ldrbge	r1, [ip, r3, lsl #1]!
	ldrbge	r1, [lr, r8]!
	vshrn.i16	d2, q4, #8
	vshrn.i16	d1, q4, #3
	vsli.16	q4, q4, #5
	vsri.8	d2, d2, #5
	vsri.8	d1, d1, #6
	vshrn.i16	d0, q4, #2
	vshrn.i16	d6, q5, #8
	vshrn.i16	d5, q5, #3
	vsli.16	q5, q5, #5
	vsri.8	d6, d6, #5
	vsri.8	d5, d5, #6
	vshrn.i16	d4, q5, #2
	vmvn	d7, d15
	vmull.u8	q6, d15, d2
	vmull.u8	q5, d15, d1
	vmull.u8	q4, d15, d0
	vmull.u8	q8, d7, d4
	vmull.u8	q9, d7, d5
	vmull.u8	q13, d7, d6
	vrshr.u16	q12, q6, #8
	vrshr.u16	q11, q5, #8
	vrshr.u16	q10, q4, #8
	vraddhn.i16	d2, q6, q12
	vraddhn.i16	d1, q5, q11
	vraddhn.i16	d0, q4, q10
	vst1.16	{d28-d29}, [r2, :128]!
	subs	r0, r0, #8
	bge	9b
8:	vrshr.u16	q14, q8, #8
	vrshr.u16	q15, q9, #8
	vrshr.u16	q12, q13, #8
	vraddhn.i16	d28, q14, q8
	vraddhn.i16	d29, q15, q9
	vraddhn.i16	d30, q12, q13
	vqadd.u8	q0, q0, q14
	vqadd.u8	q1, q1, q15
	vshll.i8	q15, d1, #8
	vshll.i8	q14, d2, #8
	vshll.i8	q3, d0, #8
	vsri.16	q14, q15, #5
	vsri.16	q14, q3, #11
	vst1.16	{d28-d29}, [r2, :128]!
	tst	r0, #7
	beq	10f
	tst	r0, #4
	beq	11f
	vld1.16	{d9}, [r4]!
	vld1.8	{d15[4]}, [r7]!
	vld1.8	{d15[5]}, [r7]!
	vld1.8	{d15[6]}, [r7]!
	vld1.8	{d15[7]}, [r7]!
	vld1.16	{d11}, [r6, :64]!
	add	sl, sl, #4
11:	tst	r0, #2
	beq	12f
	vld1.16	{d8[2]}, [r4]!
	vld1.16	{d8[3]}, [r4]!
	vld1.8	{d15[2]}, [r7]!
	vld1.8	{d15[3]}, [r7]!
	vld1.16	{d10[2]}, [r6]!
	vld1.16	{d10[3]}, [r6]!
	add	sl, sl, #2
12:	tst	r0, #1
	beq	13f
	vld1.16	{d8[1]}, [r4]!
	vld1.8	{d15[1]}, [r7]!
	vld1.16	{d10[1]}, [r6]!
	add	sl, sl, #1
13:	vshrn.i16	d2, q4, #8
	vshrn.i16	d1, q4, #3
	vsli.16	q4, q4, #5
	vsri.8	d2, d2, #5
	vsri.8	d1, d1, #6
	vshrn.i16	d0, q4, #2
	vshrn.i16	d6, q5, #8
	vshrn.i16	d5, q5, #3
	vsli.16	q5, q5, #5
	vsri.8	d6, d6, #5
	vsri.8	d5, d5, #6
	vshrn.i16	d4, q5, #2
	vmvn	d7, d15
	vmull.u8	q6, d15, d2
	vmull.u8	q5, d15, d1
	vmull.u8	q4, d15, d0
	vmull.u8	q8, d7, d4
	vmull.u8	q9, d7, d5
	vmull.u8	q13, d7, d6
	vrshr.u16	q12, q6, #8
	vrshr.u16	q11, q5, #8
	vrshr.u16	q10, q4, #8
	vraddhn.i16	d2, q6, q12
	vraddhn.i16	d1, q5, q11
	vraddhn.i16	d0, q4, q10
	ldr	r1, [sp]
	tst	r9, #15
	addne	sl, sl, #8
	subne	r9, r9, #1
	cmp	sl, r1
	pld	[fp, sl, lsl #1]
	pld	[ip, sl, lsl #1]
	pld	[lr, sl]
	subge	sl, sl, r1
	subsge	r9, r9, #16
	ldrbge	r1, [fp, r5, lsl #1]!
	ldrbge	r1, [ip, r3, lsl #1]!
	ldrbge	r1, [lr, r8]!
	vrshr.u16	q14, q8, #8
	vrshr.u16	q15, q9, #8
	vrshr.u16	q12, q13, #8
	vraddhn.i16	d28, q14, q8
	vraddhn.i16	d29, q15, q9
	vraddhn.i16	d30, q12, q13
	vqadd.u8	q0, q0, q14
	vqadd.u8	q1, q1, q15
	vshll.i8	q15, d1, #8
	vshll.i8	q14, d2, #8
	vshll.i8	q3, d0, #8
	vsri.16	q14, q15, #5
	vsri.16	q14, q3, #11
	tst	r0, #4
	beq	14f
	vst1.16	{d29}, [r2, :64]!
14:	tst	r0, #2
	beq	15f
	vst1.16	{d28[2]}, [r2]!
	vst1.16	{d28[3]}, [r2]!
15:	tst	r0, #1
	beq	10f
	vst1.16	{d28[1]}, [r2]!
10:	ldrd	r0, [sp]
	add	r2, r2, r3, lsl #1
	add	r4, r4, r5, lsl #1
	add	r7, r7, r8
	sub	r2, r2, r0, lsl #1
	sub	r4, r4, r0, lsl #1
	sub	r7, r7, r0
	subs	r1, r1, #1
	mov	r6, r2
	str	r1, [sp, #4]
	bge	16b
	pop	{r0, r1}
	vldmia	sp!, {d8-d15}
	pop	{r4, r5, r6, r7, r8, r9, sl, fp, ip, pc}
1:	tst	r0, #8
	beq	17f
	vld1.16	{d10-d11}, [r6]!
	vld1.16	{d8-d9}, [r4]!
	vld1.8	{d15}, [r7]!
	vshrn.i16	d2, q4, #8
	vshrn.i16	d1, q4, #3
	vsli.16	q4, q4, #5
	vsri.8	d2, d2, #5
	vsri.8	d1, d1, #6
	vshrn.i16	d0, q4, #2
	vshrn.i16	d6, q5, #8
	vshrn.i16	d5, q5, #3
	vsli.16	q5, q5, #5
	vsri.8	d6, d6, #5
	vsri.8	d5, d5, #6
	vshrn.i16	d4, q5, #2
	vmvn	d7, d15
	vmull.u8	q6, d15, d2
	vmull.u8	q5, d15, d1
	vmull.u8	q4, d15, d0
	vmull.u8	q8, d7, d4
	vmull.u8	q9, d7, d5
	vmull.u8	q13, d7, d6
	vrshr.u16	q12, q6, #8
	vrshr.u16	q11, q5, #8
	vrshr.u16	q10, q4, #8
	vraddhn.i16	d2, q6, q12
	vraddhn.i16	d1, q5, q11
	vraddhn.i16	d0, q4, q10
	vrshr.u16	q14, q8, #8
	vrshr.u16	q15, q9, #8
	vrshr.u16	q12, q13, #8
	vraddhn.i16	d28, q14, q8
	vraddhn.i16	d29, q15, q9
	vraddhn.i16	d30, q12, q13
	vqadd.u8	q0, q0, q14
	vqadd.u8	q1, q1, q15
	vshll.i8	q15, d1, #8
	vshll.i8	q14, d2, #8
	vshll.i8	q3, d0, #8
	vsri.16	q14, q15, #5
	vsri.16	q14, q3, #11
	vst1.16	{d28-d29}, [r2]!
17:	tst	r0, #7
	beq	18f
	tst	r0, #4
	beq	19f
	vld1.16	{d9}, [r4]!
	vld1.8	{d15[4]}, [r7]!
	vld1.8	{d15[5]}, [r7]!
	vld1.8	{d15[6]}, [r7]!
	vld1.8	{d15[7]}, [r7]!
	vld1.16	{d11}, [r6]!
19:	tst	r0, #2
	beq	20f
	vld1.16	{d8[2]}, [r4]!
	vld1.16	{d8[3]}, [r4]!
	vld1.8	{d15[2]}, [r7]!
	vld1.8	{d15[3]}, [r7]!
	vld1.16	{d10[2]}, [r6]!
	vld1.16	{d10[3]}, [r6]!
20:	tst	r0, #1
	beq	21f
	vld1.16	{d8[1]}, [r4]!
	vld1.8	{d15[1]}, [r7]!
	vld1.16	{d10[1]}, [r6]!
21:	vshrn.i16	d2, q4, #8
	vshrn.i16	d1, q4, #3
	vsli.16	q4, q4, #5
	vsri.8	d2, d2, #5
	vsri.8	d1, d1, #6
	vshrn.i16	d0, q4, #2
	vshrn.i16	d6, q5, #8
	vshrn.i16	d5, q5, #3
	vsli.16	q5, q5, #5
	vsri.8	d6, d6, #5
	vsri.8	d5, d5, #6
	vshrn.i16	d4, q5, #2
	vmvn	d7, d15
	vmull.u8	q6, d15, d2
	vmull.u8	q5, d15, d1
	vmull.u8	q4, d15, d0
	vmull.u8	q8, d7, d4
	vmull.u8	q9, d7, d5
	vmull.u8	q13, d7, d6
	vrshr.u16	q12, q6, #8
	vrshr.u16	q11, q5, #8
	vrshr.u16	q10, q4, #8
	vraddhn.i16	d2, q6, q12
	vraddhn.i16	d1, q5, q11
	vraddhn.i16	d0, q4, q10
	vrshr.u16	q14, q8, #8
	vrshr.u16	q15, q9, #8
	vrshr.u16	q12, q13, #8
	vraddhn.i16	d28, q14, q8
	vraddhn.i16	d29, q15, q9
	vraddhn.i16	d30, q12, q13
	vqadd.u8	q0, q0, q14
	vqadd.u8	q1, q1, q15
	vshll.i8	q15, d1, #8
	vshll.i8	q14, d2, #8
	vshll.i8	q3, d0, #8
	vsri.16	q14, q15, #5
	vsri.16	q14, q3, #11
	tst	r0, #4
	beq	22f
	vst1.16	{d29}, [r2]!
22:	tst	r0, #2
	beq	23f
	vst1.16	{d28[2]}, [r2]!
	vst1.16	{d28[3]}, [r2]!
23:	tst	r0, #1
	beq	18f
	vst1.16	{d28[1]}, [r2]!
18:	ldrd	r0, [sp]
	add	r2, r2, r3, lsl #1
	add	r4, r4, r5, lsl #1
	add	r7, r7, r8
	sub	r2, r2, r0, lsl #1
	sub	r4, r4, r0, lsl #1
	sub	r7, r7, r0
	subs	r1, r1, #1
	mov	r6, r2
	str	r1, [sp, #4]
	bge	1b
0:	pop	{r0, r1}
	vldmia	sp!, {d8-d15}
	pop	{r4, r5, r6, r7, r8, r9, sl, fp, ip, pc}


More information about the Pixman mailing list