ref: 407c27db02c7ed1732d1fe2a3e89e54bd29427ef
parent: d4df861993010586fdf61794f12ae923891872ac
author: B Krishnan Iyer <krishnaniyer97@gmail.com>
date: Tue Jul 23 12:54:07 EDT 2019
arm: mc: neon: Merge load and other related operations in blend/blend_h/blend_v functions A73 A53 Current Earlier Current Earlier blend_h_w2_8bpc_neon: 71.1 74.1 132.7 137.5 blend_h_w4_8bpc_neon: 60.2 65.8 137.5 147.1 blend_h_w8_8bpc_neon: 62.2 68.9 123.1 131.7 blend_h_w16_8bpc_neon: 82.1 86 180.7 190.3 blend_h_w32_8bpc_neon: 149.9 149.2 358.3 358 blend_h_w64_8bpc_neon: 265.3 263.1 630.2 629.8 blend_h_w128_8bpc_neon: 579.5 571 1404.4 1404.5 blend_v_w2_8bpc_neon: 118.7 118.7 193.2 195.3 blend_v_w4_8bpc_neon: 248.6 245.8 373.4 357.3 blend_v_w8_8bpc_neon: 202.7 202 356.4 357.2 blend_v_w16_8bpc_neon: 238.8 234.8 590.4 591.3 blend_v_w32_8bpc_neon: 346.7 344.4 993.7 994.7 blend_w4_8bpc_neon: 33.5 37.5 90.7 96.7 blend_w8_8bpc_neon: 49.7 53 123.3 123.3 blend_w16_8bpc_neon: 151.8 151 348.8 332.4 blend_w32_8bpc_neon: 372.9 370.9 908.3 908.4
--- a/src/arm/32/mc.S
+++ b/src/arm/32/mc.S
@@ -472,12 +472,10 @@
add r12, r0, r1
lsl r1, r1, #1
4:
- vld1.32 {d2[]}, [r5]!
- vld1.32 {d1[]}, [r2]!
+ vld1.u8 {d2}, [r5]!
+ vld1.u8 {d1}, [r2]!
vld1.32 {d0[]}, [r0]
subs r4, r4, #2
- vld1.32 {d2[1]}, [r5]!
- vld1.32 {d1[1]}, [r2]!
vld1.32 {d0[1]}, [r12]
vsub.i8 d3, d22, d2
vmull.u8 q8, d1, d2
@@ -492,12 +490,10 @@
add r12, r0, r1
lsl r1, r1, #1
8:
- vld1.u8 {d2}, [r5]!
- vld1.u8 {d4}, [r2]!
+ vld1.u8 {q1}, [r5]!
+ vld1.u8 {q2}, [r2]!
vld1.u8 {d0}, [r0]
vsub.i8 d17, d16, d2
- vld1.u8 {d3}, [r5]!
- vld1.u8 {d5}, [r2]!
vld1.u8 {d1}, [r12]
subs r4, r4, #2
vsub.i8 d18, d16, d3
@@ -516,37 +512,35 @@
add r12, r0, r1
lsl r1, r1, #1
16:
- vld1.u8 {q2}, [r5]!
- vld1.u8 {q1}, [r2]!
+ vld1.u8 {q1, q2}, [r5]!
+ vld1.u8 {q8, q9}, [r2]!
vld1.u8 {q0}, [r0]
subs r4, r4, #2
- vsub.i8 q11, q12, q2
- vld1.u8 {q15}, [r5]!
- vld1.u8 {q14}, [r2]!
+ vsub.i8 q15, q12, q1
vld1.u8 {q13}, [r12]
- vmull.u8 q3, d2, d4
- vmlal.u8 q3, d0, d22
- vmull.u8 q8, d3, d5
- vmlal.u8 q8, d1, d23
- vsub.i8 q11, q12, q15
- vrshrn.i16 d18, q3, #6
- vrshrn.i16 d19, q8, #6
- vmull.u8 q3, d28, d30
- vmlal.u8 q3, d26, d22
- vmull.u8 q8, d29, d31
- vmlal.u8 q8, d27, d23
+ vmull.u8 q3, d16, d2
+ vmlal.u8 q3, d0, d30
+ vmull.u8 q14, d17, d3
+ vmlal.u8 q14, d1, d31
+ vsub.i8 q15, q12, q2
vrshrn.i16 d20, q3, #6
- vrshrn.i16 d21, q8, #6
- vst1.u8 {q9}, [r0], r1
- vst1.u8 {q10}, [r12], r1
+ vrshrn.i16 d21, q14, #6
+ vmull.u8 q3, d18, d4
+ vmlal.u8 q3, d26, d30
+ vmull.u8 q14, d19, d5
+ vmlal.u8 q14, d27, d31
+ vrshrn.i16 d22, q3, #6
+ vrshrn.i16 d23, q14, #6
+ vst1.u8 {q10}, [r0], r1
+ vst1.u8 {q11}, [r12], r1
bgt 16b
pop {r4-r5,pc}
320:
vmov.i8 q10, #64
32:
- vld1.u8 {q2, q3}, [r5]!
- vld1.u8 {q8, q9}, [r2]!
- vld1.u8 {q0, q1}, [r0]
+ vld1.u8 {q2, q3}, [r5]!
+ vld1.u8 {q8, q9}, [r2]!
+ vld1.u8 {q0, q1}, [r0]
subs r4, r4, #1
vsub.i8 q11, q10, q2
vmull.u8 q15, d16, d4
@@ -595,13 +589,12 @@
lsl r1, r1, #1
2:
vld1.16 {d2[], d3[]}, [r5]!
- vld1.16 {d1[]}, [r2]!
+ vld1.32 {d1[0]}, [r2]!
subs r4, r4, #2
- vld1.16 {d0[]}, [r0]
+ vld1.16 {d0[]}, [r0]
vzip.8 d2, d3
- vld1.16 {d1[1]}, [r2]!
vsub.i8 d4, d22, d2
- vld1.16 {d0[1]}, [r12]
+ vld1.16 {d0[1]}, [r12]
vmull.u8 q8, d1, d2
vmlal.u8 q8, d0, d4
vrshrn.i16 d20, q8, #6
@@ -614,17 +607,15 @@
add r12, r0, r1
lsl r1, r1, #1
4:
- vld1.u8 {d2[]}, [r5]!
- vld1.32 {d1[]}, [r2]!
+ vld2.u8 {d2[], d3[]}, [r5]!
+ vld1.u8 {d1}, [r2]!
subs r4, r4, #2
- vld1.u8 {d6[]}, [r5]!
- vld1.32 {d1[1]}, [r2]!
- vext.u8 d2, d2, d6, #4
- vld1.32 {d0[]}, [r0]
- vsub.i8 d3, d22, d2
- vld1.32 {d0[1]}, [r12]
+ vext.u8 d2, d2, d3, #4
+ vld1.32 {d0[]}, [r0]
+ vsub.i8 d6, d22, d2
+ vld1.32 {d0[1]}, [r12]
vmull.u8 q8, d1, d2
- vmlal.u8 q8, d0, d3
+ vmlal.u8 q8, d0, d6
vrshrn.i16 d20, q8, #6
vst1.32 {d20[0]}, [r0], r1
vst1.32 {d20[1]}, [r12], r1
@@ -631,23 +622,20 @@
bgt 4b
pop {r4-r8,pc}
80:
- vmov.i8 d16, #64
+ vmov.i8 q8, #64
add r12, r0, r1
lsl r1, r1, #1
8:
- vld1.u8 {d2[]}, [r5]!
- vld1.u8 {d4}, [r2]!
+ vld2.u8 {d2[], d3[]}, [r5]!
+ vld1.u8 {d4, d5}, [r2]!
vld1.u8 {d0}, [r0]
- vsub.i8 d17, d16, d2
- vld1.u8 {d3[]}, [r5]!
- vld1.u8 {d5}, [r2]!
+ vsub.i8 q9, q8, q1
vld1.u8 {d1}, [r12]
subs r4, r4, #2
- vsub.i8 d18, d16, d3
vmull.u8 q3, d2, d4
- vmlal.u8 q3, d0, d17
+ vmlal.u8 q3, d0, d18
vmull.u8 q10, d3, d5
- vmlal.u8 q10, d1, d18
+ vmlal.u8 q10, d1, d19
vrshrn.i16 d22, q3, #6
vrshrn.i16 d23, q10, #6
vst1.u8 {d22}, [r0], r1
@@ -655,28 +643,25 @@
bgt 8b
pop {r4-r8,pc}
160:
- vmov.i8 d24, #64
+ vmov.i8 q12, #64
add r12, r0, r1
lsl r1, r1, #1
16:
- vld1.u8 {d4[]}, [r5]!
- vld1.u8 {q1}, [r2]!
- vsub.i8 d5, d24, d4
- vld1.u8 {q0}, [r0]
+ vld2.u8 {d28[], d29[]}, [r5]!
+ vld1.u8 {d2, d3, d4, d5}, [r2]!
+ vsub.i8 q15, q12, q14
+ vld1.u8 {q0}, [r0]
subs r4, r4, #2
- vld1.u8 {d30[]}, [r5]!
- vld1.u8 {q14}, [r2]!
- vsub.i8 d31, d24, d30
- vld1.u8 {q13}, [r12]
- vmull.u8 q3, d2, d4
- vmlal.u8 q3, d0, d5
- vmull.u8 q8, d3, d4
- vmlal.u8 q8, d1, d5
+ vld1.u8 {q13}, [r12]
+ vmull.u8 q3, d2, d28
+ vmlal.u8 q3, d0, d30
+ vmull.u8 q8, d3, d28
+ vmlal.u8 q8, d1, d30
vrshrn.i16 d18, q3, #6
vrshrn.i16 d19, q8, #6
- vmull.u8 q3, d28, d30
+ vmull.u8 q3, d4, d29
vmlal.u8 q3, d26, d31
- vmull.u8 q8, d29, d30
+ vmull.u8 q8, d5, d29
vmlal.u8 q8, d27, d31
vrshrn.i16 d20, q3, #6
vrshrn.i16 d21, q8, #6
@@ -690,12 +675,12 @@
vmov.i8 d20, #64
sub r1, r1, r3
321:
- vld1.u8 {d6[]}, [r5]!
+ vld1.u8 {d6[]}, [r5]!
vsub.i8 d7, d20, d6
mov r8, r3
32:
- vld1.u8 {q8, q9}, [r2]!
- vld1.u8 {q0, q1}, [r0]
+ vld1.u8 {q8, q9}, [r2]!
+ vld1.u8 {q0, q1}, [r0]
vmull.u8 q15, d16, d6
vmlal.u8 q15, d0, d7
vmull.u8 q14, d17, d6
@@ -708,7 +693,7 @@
vmlal.u8 q14, d3, d7
vrshrn.i16 d2, q15, #6
vrshrn.i16 d3, q14, #6
- vst1.u8 {q0, q1}, [r0]!
+ vst1.u8 {q0, q1}, [r0]!
subs r8, r8, #32
bgt 32b
add r0, r0, r1
@@ -738,36 +723,35 @@
20:
vmov.i8 d22, #64
- vld1.8 {d2[]}, [r5]
+ vld1.8 {d2[]}, [r5]
add r12, r0, r1
lsl r1, r1, #1
vsub.i8 d3, d22, d2
2:
- vld1.16 {d1[]}, [r2]!
- vld1.8 {d0[]}, [r0]
+ vld1.16 {d1[0]}, [r2]!
+ vld1.8 {d0[]}, [r0]
subs r4, r4, #2
- vld1.8 {d1[1]}, [r2]
- vld1.8 {d0[1]}, [r12]
+ vld1.8 {d1[1]}, [r2]
+ vld1.8 {d0[1]}, [r12]
vmull.u8 q2, d1, d2
vmlal.u8 q2, d0, d3
vrshrn.i16 d6, q2, #6
add r2, r2, #2
- vst1.8 {d6[0]}, [r0], r1
- vst1.8 {d6[1]}, [r12], r1
+ vst1.8 {d6[0]}, [r0], r1
+ vst1.8 {d6[1]}, [r12], r1
bgt 2b
pop {r4-r5,pc}
40:
vmov.i8 d22, #64
- vld1.32 {d4[]}, [r5]
+ vld1.32 {d4[]}, [r5]
add r12, r0, r1
lsl r1, r1, #1
vsub.i8 d5, d22, d4
sub r1, r1, #3
4:
- vld1.32 {d2[]}, [r2]!
- vld1.32 {d0[]}, [r0]
- vld1.32 {d2[1]}, [r2]!
- vld1.32 {d0[1]}, [r12]
+ vld1.u8 {d2}, [r2]!
+ vld1.32 {d0[]}, [r0]
+ vld1.32 {d0[1]}, [r12]
subs r4, r4, #2
vmull.u8 q3, d2, d4
vmlal.u8 q3, d0, d5
@@ -782,15 +766,14 @@
pop {r4-r5,pc}
80:
vmov.i8 d16, #64
- vld1.u8 {d2}, [r5]
+ vld1.u8 {d2}, [r5]
add r12, r0, r1
lsl r1, r1, #1
vsub.i8 d17, d16, d2
sub r1, r1, #6
8:
- vld1.u8 {d4}, [r2]!
+ vld1.u8 {d4, d5}, [r2]!
vld1.u8 {d0}, [r0]
- vld1.u8 {d5}, [r2]!
vld1.u8 {d1}, [r12]
subs r4, r4, #2
vmull.u8 q3, d2, d4
@@ -809,26 +792,25 @@
pop {r4-r5,pc}
160:
vmov.i8 q12, #64
- vld1.u8 {q2}, [r5]
+ vld1.u8 {q14}, [r5]
add r12, r0, r1
lsl r1, r1, #1
- vsub.i8 q11, q12, q2
+ vsub.i8 q11, q12, q14
sub r1, r1, #12
16:
- vld1.u8 {q1}, [r2]!
+ vld1.u8 {q1, q2}, [r2]!
vld1.u8 {q0}, [r0]
subs r4, r4, #2
- vld1.u8 {q14}, [r2]!
vld1.u8 {q13}, [r12]
- vmull.u8 q3, d2, d4
+ vmull.u8 q3, d2, d28
vmlal.u8 q3, d0, d22
- vmull.u8 q8, d3, d5
+ vmull.u8 q8, d3, d29
vmlal.u8 q8, d1, d23
vrshrn.i16 d18, q3, #6
vrshrn.i16 d19, q8, #6
- vmull.u8 q3, d28, d4
+ vmull.u8 q3, d4, d28
vmlal.u8 q3, d26, d22
- vmull.u8 q8, d29, d5
+ vmull.u8 q8, d5, d29
vmlal.u8 q8, d27, d23
vrshrn.i16 d20, q3, #6
vrshrn.i16 d21, q8, #6
@@ -846,8 +828,8 @@
vsub.i8 q11, q10, q2
vsub.i8 q12, q10, q3
32:
- vld1.u8 {q8, q9}, [r2]!
- vld1.u8 {q0, q1}, [r0]
+ vld1.u8 {q8, q9}, [r2]!
+ vld1.u8 {q0, q1}, [r0]
subs r4, r4, #1
vmull.u8 q15, d16, d4
vmlal.u8 q15, d0, d22
@@ -858,7 +840,7 @@
vmull.u8 q15, d18, d6
vmlal.u8 q15, d2, d24
vrshrn.i16 d2, q15, #6
- vst1.u8 {d0, d1, d2}, [r0], r1
+ vst1.u8 {d0, d1, d2}, [r0], r1
bgt 32b
pop {r4-r5,pc}
endfunc