[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