Commit 2885eb86 authored by Andrey Kamaev's avatar Andrey Kamaev

Remove alignment reqirements from NEON optimizations in libpng

On Android memory is not guaranted to be aligned and applications often crash with BUSERROR
parent f017ad59
...@@ -41,12 +41,12 @@ func png_read_filter_row_sub4_neon, export=1 ...@@ -41,12 +41,12 @@ func png_read_filter_row_sub4_neon, export=1
ldr r3, [r0, #4] @ rowbytes ldr r3, [r0, #4] @ rowbytes
vmov.i8 d3, #0 vmov.i8 d3, #0
1: 1:
vld4.32 {d4[],d5[],d6[],d7[]}, [r1,:128] vld4.32 {d4[],d5[],d6[],d7[]}, [r1]
vadd.u8 d0, d3, d4 vadd.u8 d0, d3, d4
vadd.u8 d1, d0, d5 vadd.u8 d1, d0, d5
vadd.u8 d2, d1, d6 vadd.u8 d2, d1, d6
vadd.u8 d3, d2, d7 vadd.u8 d3, d2, d7
vst4.32 {d0[0],d1[0],d2[0],d3[0]},[r1,:128]! vst4.32 {d0[0],d1[0],d2[0],d3[0]},[r1]!
subs r3, r3, #16 subs r3, r3, #16
bgt 1b bgt 1b
...@@ -67,7 +67,7 @@ func png_read_filter_row_sub3_neon, export=1 ...@@ -67,7 +67,7 @@ func png_read_filter_row_sub3_neon, export=1
vadd.u8 d1, d0, d5 vadd.u8 d1, d0, d5
vext.8 d7, d23, d23, #1 vext.8 d7, d23, d23, #1
vld1.8 {q11}, [r0], r12 vld1.8 {q11}, [r0], r12
vst1.32 {d0[0]}, [r1,:32], r2 vst1.32 {d0[0]}, [r1], r2
vadd.u8 d2, d1, d6 vadd.u8 d2, d1, d6
vst1.32 {d1[0]}, [r1], r2 vst1.32 {d1[0]}, [r1], r2
vadd.u8 d3, d2, d7 vadd.u8 d3, d2, d7
...@@ -82,10 +82,10 @@ endfunc ...@@ -82,10 +82,10 @@ endfunc
func png_read_filter_row_up_neon, export=1 func png_read_filter_row_up_neon, export=1
ldr r3, [r0, #4] @ rowbytes ldr r3, [r0, #4] @ rowbytes
1: 1:
vld1.8 {q0}, [r1,:128] vld1.8 {q0}, [r1]
vld1.8 {q1}, [r2,:128]! vld1.8 {q1}, [r2]!
vadd.u8 q0, q0, q1 vadd.u8 q0, q0, q1
vst1.8 {q0}, [r1,:128]! vst1.8 {q0}, [r1]!
subs r3, r3, #16 subs r3, r3, #16
bgt 1b bgt 1b
...@@ -96,8 +96,8 @@ func png_read_filter_row_avg4_neon, export=1 ...@@ -96,8 +96,8 @@ func png_read_filter_row_avg4_neon, export=1
ldr r12, [r0, #4] @ rowbytes ldr r12, [r0, #4] @ rowbytes
vmov.i8 d3, #0 vmov.i8 d3, #0
1: 1:
vld4.32 {d4[],d5[],d6[],d7[]}, [r1,:128] vld4.32 {d4[],d5[],d6[],d7[]}, [r1]
vld4.32 {d16[],d17[],d18[],d19[]},[r2,:128]! vld4.32 {d16[],d17[],d18[],d19[]},[r2]!
vhadd.u8 d0, d3, d16 vhadd.u8 d0, d3, d16
vadd.u8 d0, d0, d4 vadd.u8 d0, d0, d4
vhadd.u8 d1, d0, d17 vhadd.u8 d1, d0, d17
...@@ -106,7 +106,7 @@ func png_read_filter_row_avg4_neon, export=1 ...@@ -106,7 +106,7 @@ func png_read_filter_row_avg4_neon, export=1
vadd.u8 d2, d2, d6 vadd.u8 d2, d2, d6
vhadd.u8 d3, d2, d19 vhadd.u8 d3, d2, d19
vadd.u8 d3, d3, d7 vadd.u8 d3, d3, d7
vst4.32 {d0[0],d1[0],d2[0],d3[0]},[r1,:128]! vst4.32 {d0[0],d1[0],d2[0],d3[0]},[r1]!
subs r12, r12, #16 subs r12, r12, #16
bgt 1b bgt 1b
...@@ -133,7 +133,7 @@ func png_read_filter_row_avg3_neon, export=1 ...@@ -133,7 +133,7 @@ func png_read_filter_row_avg3_neon, export=1
vadd.u8 d1, d1, d5 vadd.u8 d1, d1, d5
vext.8 d7, d23, d23, #1 vext.8 d7, d23, d23, #1
vld1.8 {q11}, [r0], lr vld1.8 {q11}, [r0], lr
vst1.32 {d0[0]}, [r1,:32], r4 vst1.32 {d0[0]}, [r1], r4
vhadd.u8 d2, d1, d18 vhadd.u8 d2, d1, d18
vst1.32 {d1[0]}, [r1], r4 vst1.32 {d1[0]}, [r1], r4
vext.8 d19, d21, d21, #1 vext.8 d19, d21, d21, #1
...@@ -169,8 +169,8 @@ func png_read_filter_row_paeth4_neon, export=1 ...@@ -169,8 +169,8 @@ func png_read_filter_row_paeth4_neon, export=1
vmov.i8 d3, #0 vmov.i8 d3, #0
vmov.i8 d20, #0 vmov.i8 d20, #0
1: 1:
vld4.32 {d4[],d5[],d6[],d7[]}, [r1,:128] vld4.32 {d4[],d5[],d6[],d7[]}, [r1]
vld4.32 {d16[],d17[],d18[],d19[]},[r2,:128]! vld4.32 {d16[],d17[],d18[],d19[]},[r2]!
paeth d0, d3, d16, d20 paeth d0, d3, d16, d20
vadd.u8 d0, d0, d4 vadd.u8 d0, d0, d4
paeth d1, d0, d17, d16 paeth d1, d0, d17, d16
...@@ -180,7 +180,7 @@ func png_read_filter_row_paeth4_neon, export=1 ...@@ -180,7 +180,7 @@ func png_read_filter_row_paeth4_neon, export=1
paeth d3, d2, d19, d18 paeth d3, d2, d19, d18
vmov d20, d19 vmov d20, d19
vadd.u8 d3, d3, d7 vadd.u8 d3, d3, d7
vst4.32 {d0[0],d1[0],d2[0],d3[0]},[r1,:128]! vst4.32 {d0[0],d1[0],d2[0],d3[0]},[r1]!
subs r12, r12, #16 subs r12, r12, #16
bgt 1b bgt 1b
...@@ -203,7 +203,7 @@ func png_read_filter_row_paeth3_neon, export=1 ...@@ -203,7 +203,7 @@ func png_read_filter_row_paeth3_neon, export=1
vadd.u8 d0, d0, d22 vadd.u8 d0, d0, d22
vext.8 d17, d20, d21, #3 vext.8 d17, d20, d21, #3
paeth d1, d0, d17, d20 paeth d1, d0, d17, d20
vst1.32 {d0[0]}, [r1,:32], r4 vst1.32 {d0[0]}, [r1], r4
vext.8 d6, d22, d23, #6 vext.8 d6, d22, d23, #6
vadd.u8 d1, d1, d5 vadd.u8 d1, d1, d5
vext.8 d18, d20, d21, #6 vext.8 d18, d20, d21, #6
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment