ref: 811c647c0ec3553ff8fa16cf933146e59aa4277e
parent: ca457f57e9150ce48f8fe555909296444d253319
author: Martin Storsjö <martin@martin.st>
date: Sun Mar 9 12:57:17 EDT 2014
Remap registers to avoid clobbering the neon registers q4-q7 According to the calling convention, the registers q4-q7 should be preserved by functions. The caller (generated by the compiler) could be using those registers anywhere for any intermediate data. Functions that use 12 or less of the qX registers can avoid violating the calling convention by simply using other registers instead of the callee saved registers q4-q7. This change only remaps the registers used within functions - therefore this does not affect performance at all. E.g. in functions using registers q0-q7, we now use q0-q3 and q8-q11 instead.
--- a/codec/common/deblocking_neon.S
+++ b/codec/common/deblocking_neon.S
@@ -615,31 +615,31 @@
sub r0, r0, r2, lsl #1
sub r1, r1, r2, lsl #1
- vld1.s8 {d15}, [r3]
- vmovl.u8 q6, d15
- vshl.u64 d13,d12,#8
- vorr d12,d13
- vmov d13, d12
- veor q7, q7
- vsub.i8 q7,q7,q6
+ vld1.s8 {d31}, [r3]
+ vmovl.u8 q14,d31
+ vshl.u64 d29,d28,#8
+ vorr d28,d29
+ vmov d29, d28
+ veor q15, q15
+ vsub.i8 q15,q15,q14
- MASK_MATRIX q0, q1, q2, q3, q11, q9, q5
+ MASK_MATRIX q0, q1, q2, q3, q11, q9, q10
- DIFF_LUMA_LT4_P0_Q0 d0, d2, d4, d6, d8, q12, q13
- DIFF_LUMA_LT4_P0_Q0 d1, d3, d5, d7, d9, q12, q13
- vmax.s8 q4, q4, q7
- vmin.s8 q4, q4, q6
+ DIFF_LUMA_LT4_P0_Q0 d0, d2, d4, d6, d16, q12, q13
+ DIFF_LUMA_LT4_P0_Q0 d1, d3, d5, d7, d17, q12, q13
+ vmax.s8 q8, q8, q15
+ vmin.s8 q8, q8, q14
- vand.s8 q4, q4, q5
- vcge.s8 q6, q6, #0
- vand.s8 q4, q4, q6
- EXTRACT_DELTA_INTO_TWO_PART q4, q5
- vqadd.u8 q1, q1, q5
- vqsub.u8 q1, q1, q4
+ vand.s8 q8, q8, q10
+ vcge.s8 q14, q14, #0
+ vand.s8 q8, q8, q14
+ EXTRACT_DELTA_INTO_TWO_PART q8, q10
+ vqadd.u8 q1, q1, q10
+ vqsub.u8 q1, q1, q8
vst1.u8 {d2}, [r0], r2
vst1.u8 {d3}, [r1], r2
- vqsub.u8 q2, q2, q5
- vqadd.u8 q2, q2, q4
+ vqsub.u8 q2, q2, q10
+ vqadd.u8 q2, q2, q8
vst1.u8 {d4}, [r0]
vst1.u8 {d5}, [r1]
@@ -692,7 +692,7 @@
vdup.u8 q9, r3
ldr r3, [sp, #4]
sub r1, r1, #2
- vld1.s8 {d15}, [r3]
+ vld1.s8 {d31}, [r3]
LOAD_CHROMA_DATA_4 d0, d1, d2, d3, d4, d5, d6, d7, 0
LOAD_CHROMA_DATA_4 d0, d1, d2, d3, d4, d5, d6, d7, 1
@@ -706,28 +706,28 @@
vswp d1, d2
vswp d6, d5
- vmovl.u8 q6, d15
- vshl.u64 d13,d12,#8
- vorr d12,d13
- vmov d13, d12
- veor q7, q7
- vsub.i8 q7,q7,q6
+ vmovl.u8 q14, d31
+ vshl.u64 d29,d28,#8
+ vorr d28,d29
+ vmov d29, d28
+ veor q15, q15
+ vsub.i8 q15,q15,q14
- MASK_MATRIX q0, q1, q2, q3, q11, q9, q5
+ MASK_MATRIX q0, q1, q2, q3, q11, q9, q10
- DIFF_LUMA_LT4_P0_Q0 d0, d2, d4, d6, d8, q12, q13
- DIFF_LUMA_LT4_P0_Q0 d1, d3, d5, d7, d9, q12, q13
- vmax.s8 q4, q4, q7
- vmin.s8 q4, q4, q6
+ DIFF_LUMA_LT4_P0_Q0 d0, d2, d4, d6, d16, q12, q13
+ DIFF_LUMA_LT4_P0_Q0 d1, d3, d5, d7, d17, q12, q13
+ vmax.s8 q8, q8, q15
+ vmin.s8 q8, q8, q14
- vand.s8 q4, q4, q5
- vcge.s8 q6, q6, #0
- vand.s8 q4, q4, q6
- EXTRACT_DELTA_INTO_TWO_PART q4, q5
- vqadd.u8 q1, q1, q5
- vqsub.u8 q1, q1, q4
- vqsub.u8 q2, q2, q5
- vqadd.u8 q2, q2, q4
+ vand.s8 q8, q8, q10
+ vcge.s8 q14, q14, #0
+ vand.s8 q8, q8, q14
+ EXTRACT_DELTA_INTO_TWO_PART q8, q10
+ vqadd.u8 q1, q1, q10
+ vqsub.u8 q1, q1, q8
+ vqsub.u8 q2, q2, q10
+ vqadd.u8 q2, q2, q8
sub r0, r0, r2, lsl #3
sub r1, r1, r2, lsl #3
--- a/codec/common/mc_neon.S
+++ b/codec/common/mc_neon.S
@@ -271,13 +271,13 @@
vext.8 q2, q0, q1, #1 //q2=src[-1]
vext.8 q3, q0, q1, #2 //q3=src[0]
- vext.8 q4, q0, q1, #3 //q4=src[1]
- vext.8 q5, q0, q1, #4 //q5=src[2]
- vext.8 q6, q0, q1, #5 //q6=src[3]
+ vext.8 q8, q0, q1, #3 //q8=src[1]
+ vext.8 q9, q0, q1, #4 //q9=src[2]
+ vext.8 q10, q0, q1, #5 //q10=src[3]
- FILTER_6TAG_8BITS d0, d4, d6, d8, d10, d12, d2, q14, q15
+ FILTER_6TAG_8BITS d0, d4, d6, d16, d18, d20, d2, q14, q15
- FILTER_6TAG_8BITS d1, d5, d7, d9, d11, d13, d3, q14, q15
+ FILTER_6TAG_8BITS d1, d5, d7, d17, d19, d21, d3, q14, q15
sub r4, #1
vst1.u8 {d2, d3}, [r2], r3 //write 16Byte
@@ -334,9 +334,9 @@
vext.8 d4, d0, d1, #1 //d4: 1st row src[-1:6]
vext.8 d5, d2, d3, #1 //d5: 2nd row src[-1:6]
vext.8 q3, q2, q2, #1 //src[0:6 *]
- vext.8 q4, q2, q2, #2 //src[1:6 * *]
+ vext.8 q8, q2, q2, #2 //src[1:6 * *]
- vtrn.32 q3, q4 //q3::d6:1st row [0:3]+[1:4]; d7:2nd row [0:3]+[1:4]
+ vtrn.32 q3, q8 //q3::d6:1st row [0:3]+[1:4]; d7:2nd row [0:3]+[1:4]
vtrn.32 d6, d7 //d6:[0:3]; d7[1:4]
vtrn.32 d0, d2 //d0:[-2:1]; d2[2:5]
vtrn.32 d4, d5 //d4:[-1:2]; d5[3:6]
@@ -370,13 +370,13 @@
vext.8 q2, q0, q1, #1 //q2=src[-1]
vext.8 q3, q0, q1, #2 //q3=src[0]
- vext.8 q4, q0, q1, #3 //q4=src[1]
- vext.8 q5, q0, q1, #4 //q5=src[2]
- vext.8 q6, q0, q1, #5 //q6=src[3]
+ vext.8 q8, q0, q1, #3 //q8=src[1]
+ vext.8 q9, q0, q1, #4 //q9=src[2]
+ vext.8 q10, q0, q1, #5 //q10=src[3]
- FILTER_6TAG_8BITS_AVERAGE_WITH_0 d0, d4, d6, d8, d10, d12, d2, q14, q15
+ FILTER_6TAG_8BITS_AVERAGE_WITH_0 d0, d4, d6, d16, d18, d20, d2, q14, q15
- FILTER_6TAG_8BITS_AVERAGE_WITH_0 d1, d5, d7, d9, d11, d13, d3, q14, q15
+ FILTER_6TAG_8BITS_AVERAGE_WITH_0 d1, d5, d7, d17, d19, d21, d3, q14, q15
sub r4, #1
vst1.u8 {d2, d3}, [r2], r3 //write 16Byte
@@ -433,9 +433,9 @@
vext.8 d4, d0, d1, #1 //d4: 1st row src[-1:6]
vext.8 d5, d2, d3, #1 //d5: 2nd row src[-1:6]
vext.8 q3, q2, q2, #1 //src[0:6 *]
- vext.8 q4, q2, q2, #2 //src[1:6 * *]
+ vext.8 q8, q2, q2, #2 //src[1:6 * *]
- vtrn.32 q3, q4 //q3::d6:1st row [0:3]+[1:4]; d7:2nd row [0:3]+[1:4]
+ vtrn.32 q3, q8 //q3::d6:1st row [0:3]+[1:4]; d7:2nd row [0:3]+[1:4]
vtrn.32 d6, d7 //d6:[0:3]; d7[1:4]
vtrn.32 d0, d2 //d0:[-2:1]; d2[2:5]
vtrn.32 d4, d5 //d4:[-1:2]; d5[3:6]
@@ -469,13 +469,13 @@
vext.8 q2, q0, q1, #1 //q2=src[-1]
vext.8 q3, q0, q1, #2 //q3=src[0]
- vext.8 q4, q0, q1, #3 //q4=src[1]
- vext.8 q5, q0, q1, #4 //q5=src[2]
- vext.8 q6, q0, q1, #5 //q6=src[3]
+ vext.8 q8, q0, q1, #3 //q8=src[1]
+ vext.8 q9, q0, q1, #4 //q9=src[2]
+ vext.8 q10, q0, q1, #5 //q10=src[3]
- FILTER_6TAG_8BITS_AVERAGE_WITH_1 d0, d4, d6, d8, d10, d12, d2, q14, q15
+ FILTER_6TAG_8BITS_AVERAGE_WITH_1 d0, d4, d6, d16, d18, d20, d2, q14, q15
- FILTER_6TAG_8BITS_AVERAGE_WITH_1 d1, d5, d7, d9, d11, d13, d3, q14, q15
+ FILTER_6TAG_8BITS_AVERAGE_WITH_1 d1, d5, d7, d17, d19, d21, d3, q14, q15
sub r4, #1
vst1.u8 {d2, d3}, [r2], r3 //write 16Byte
@@ -532,9 +532,9 @@
vext.8 d4, d0, d1, #1 //d4: 1st row src[-1:6]
vext.8 d5, d2, d3, #1 //d5: 2nd row src[-1:6]
vext.8 q3, q2, q2, #1 //src[0:6 *]
- vext.8 q4, q2, q2, #2 //src[1:6 * *]
+ vext.8 q8, q2, q2, #2 //src[1:6 * *]
- vtrn.32 q3, q4 //q3::d6:1st row [0:3]+[1:4]; d7:2nd row [0:3]+[1:4]
+ vtrn.32 q3, q8 //q3::d6:1st row [0:3]+[1:4]; d7:2nd row [0:3]+[1:4]
vtrn.32 d6, d7 //d6:[0:3]; d7[1:4]
vtrn.32 d0, d2 //d0:[-2:1]; d2[2:5]
vtrn.32 d4, d5 //d4:[-1:2]; d5[3:6]
@@ -569,64 +569,64 @@
vshr.u16 q15, q14, #2 // 5
vld1.u8 {q2}, [r0], r1 //q2=src[0]
vld1.u8 {q3}, [r0], r1 //q3=src[1]
- vld1.u8 {q4}, [r0], r1 //q4=src[2]
+ vld1.u8 {q8}, [r0], r1 //q8=src[2]
w16_xy_01_luma_loop:
- vld1.u8 {q5}, [r0], r1 //q5=src[3]
+ vld1.u8 {q9}, [r0], r1 //q9=src[3]
- FILTER_6TAG_8BITS_AVERAGE_WITH_0 d0, d2, d4, d6, d8, d10, d12, q14, q15
+ FILTER_6TAG_8BITS_AVERAGE_WITH_0 d0, d2, d4, d6, d16, d18, d20, q14, q15
pld [r0]
- FILTER_6TAG_8BITS_AVERAGE_WITH_0 d1, d3, d5, d7, d9, d11, d13, q14, q15
+ FILTER_6TAG_8BITS_AVERAGE_WITH_0 d1, d3, d5, d7, d17, d19, d21, q14, q15
vld1.u8 {q0}, [r0], r1 //read 2nd row
- vst1.u8 {q6}, [r2], r3 //write 1st 16Byte
+ vst1.u8 {q10}, [r2], r3 //write 1st 16Byte
- FILTER_6TAG_8BITS_AVERAGE_WITH_0 d2, d4, d6, d8, d10, d0, d12, q14, q15
+ FILTER_6TAG_8BITS_AVERAGE_WITH_0 d2, d4, d6, d16, d18, d0, d20, q14, q15
pld [r0]
- FILTER_6TAG_8BITS_AVERAGE_WITH_0 d3, d5, d7, d9, d11, d1, d13, q14, q15
+ FILTER_6TAG_8BITS_AVERAGE_WITH_0 d3, d5, d7, d17, d19, d1, d21, q14, q15
vld1.u8 {q1}, [r0], r1 //read 3rd row
- vst1.u8 {q6}, [r2], r3 //write 2nd 16Byte
+ vst1.u8 {q10}, [r2], r3 //write 2nd 16Byte
- FILTER_6TAG_8BITS_AVERAGE_WITH_0 d4, d6, d8, d10, d0, d2, d12, q14, q15
+ FILTER_6TAG_8BITS_AVERAGE_WITH_0 d4, d6, d16, d18, d0, d2, d20, q14, q15
pld [r0]
- FILTER_6TAG_8BITS_AVERAGE_WITH_0 d5, d7, d9, d11, d1, d3, d13, q14, q15
+ FILTER_6TAG_8BITS_AVERAGE_WITH_0 d5, d7, d17, d19, d1, d3, d21, q14, q15
vld1.u8 {q2}, [r0], r1 //read 4th row
- vst1.u8 {q6}, [r2], r3 //write 3rd 16Byte
+ vst1.u8 {q10}, [r2], r3 //write 3rd 16Byte
- FILTER_6TAG_8BITS_AVERAGE_WITH_0 d6, d8, d10, d0, d2, d4, d12, q14, q15
+ FILTER_6TAG_8BITS_AVERAGE_WITH_0 d6, d16, d18, d0, d2, d4, d20, q14, q15
pld [r0]
- FILTER_6TAG_8BITS_AVERAGE_WITH_0 d7, d9, d11, d1, d3, d5, d13, q14, q15
+ FILTER_6TAG_8BITS_AVERAGE_WITH_0 d7, d17, d19, d1, d3, d5, d21, q14, q15
vld1.u8 {q3}, [r0], r1 //read 5th row
- vst1.u8 {q6}, [r2], r3 //write 4th 16Byte
+ vst1.u8 {q10}, [r2], r3 //write 4th 16Byte
- FILTER_6TAG_8BITS_AVERAGE_WITH_0 d8, d10, d0, d2, d4, d6, d12, q14, q15
+ FILTER_6TAG_8BITS_AVERAGE_WITH_0 d16, d18, d0, d2, d4, d6, d20, q14, q15
pld [r0]
- FILTER_6TAG_8BITS_AVERAGE_WITH_0 d9, d11, d1, d3, d5, d7, d13, q14, q15
- vld1.u8 {q4}, [r0], r1 //read 6th row
- vst1.u8 {q6}, [r2], r3 //write 5th 16Byte
+ FILTER_6TAG_8BITS_AVERAGE_WITH_0 d17, d19, d1, d3, d5, d7, d21, q14, q15
+ vld1.u8 {q8}, [r0], r1 //read 6th row
+ vst1.u8 {q10}, [r2], r3 //write 5th 16Byte
- FILTER_6TAG_8BITS_AVERAGE_WITH_0 d10, d0, d2, d4, d6, d8, d12, q14, q15
+ FILTER_6TAG_8BITS_AVERAGE_WITH_0 d18, d0, d2, d4, d6, d16, d20, q14, q15
pld [r0]
- FILTER_6TAG_8BITS_AVERAGE_WITH_0 d11, d1, d3, d5, d7, d9, d13, q14, q15
- vld1.u8 {q5}, [r0], r1 //read 7th row
- vst1.u8 {q6}, [r2], r3 //write 6th 16Byte
+ FILTER_6TAG_8BITS_AVERAGE_WITH_0 d19, d1, d3, d5, d7, d17, d21, q14, q15
+ vld1.u8 {q9}, [r0], r1 //read 7th row
+ vst1.u8 {q10}, [r2], r3 //write 6th 16Byte
- FILTER_6TAG_8BITS_AVERAGE_WITH_0 d0, d2, d4, d6, d8, d10, d12, q14, q15
+ FILTER_6TAG_8BITS_AVERAGE_WITH_0 d0, d2, d4, d6, d16, d18, d20, q14, q15
pld [r0]
- FILTER_6TAG_8BITS_AVERAGE_WITH_0 d1, d3, d5, d7, d9, d11, d13, q14, q15
+ FILTER_6TAG_8BITS_AVERAGE_WITH_0 d1, d3, d5, d7, d17, d19, d21, q14, q15
vld1.u8 {q0}, [r0], r1 //read 8th row
- vst1.u8 {q6}, [r2], r3 //write 7th 16Byte
+ vst1.u8 {q10}, [r2], r3 //write 7th 16Byte
- FILTER_6TAG_8BITS_AVERAGE_WITH_0 d2, d4, d6, d8, d10, d0, d12, q14, q15
+ FILTER_6TAG_8BITS_AVERAGE_WITH_0 d2, d4, d6, d16, d18, d0, d20, q14, q15
pld [r0]
- FILTER_6TAG_8BITS_AVERAGE_WITH_0 d3, d5, d7, d9, d11, d1, d13, q14, q15
- vst1.u8 {q6}, [r2], r3 //write 8th 16Byte
+ FILTER_6TAG_8BITS_AVERAGE_WITH_0 d3, d5, d7, d17, d19, d1, d21, q14, q15
+ vst1.u8 {q10}, [r2], r3 //write 8th 16Byte
//q2, q3, q4, q5, q0 --> q0~q4
- vswp q0, q4
+ vswp q0, q8
vswp q0, q2
vmov q1, q3
- vmov q3, q5 //q0~q4
+ vmov q3, q9 //q0~q4
sub r4, #8
cmp r4, #0
@@ -658,24 +658,24 @@
w8_xy_01_mc_luma_loop:
pld [r0]
- FILTER_6TAG_8BITS_AVERAGE_WITH_0 d0, d1, d2, d3, d4, d5, d12, q14, q15
+ FILTER_6TAG_8BITS_AVERAGE_WITH_0 d0, d1, d2, d3, d4, d5, d16, q14, q15
vld1.u8 {d0}, [r0], r1 //read 2nd row
- vst1.u8 {d12}, [r2], r3 //write 1st 8Byte
+ vst1.u8 {d16}, [r2], r3 //write 1st 8Byte
pld [r0]
- FILTER_6TAG_8BITS_AVERAGE_WITH_0 d1, d2, d3, d4, d5, d0, d12, q14, q15
+ FILTER_6TAG_8BITS_AVERAGE_WITH_0 d1, d2, d3, d4, d5, d0, d16, q14, q15
vld1.u8 {d1}, [r0], r1 //read 3rd row
- vst1.u8 {d12}, [r2], r3 //write 2nd 8Byte
+ vst1.u8 {d16}, [r2], r3 //write 2nd 8Byte
pld [r0]
- FILTER_6TAG_8BITS_AVERAGE_WITH_0 d2, d3, d4, d5, d0, d1, d12, q14, q15
+ FILTER_6TAG_8BITS_AVERAGE_WITH_0 d2, d3, d4, d5, d0, d1, d16, q14, q15
vld1.u8 {d2}, [r0], r1 //read 4th row
- vst1.u8 {d12}, [r2], r3 //write 3rd 8Byte
+ vst1.u8 {d16}, [r2], r3 //write 3rd 8Byte
pld [r0]
- FILTER_6TAG_8BITS_AVERAGE_WITH_0 d3, d4, d5, d0, d1, d2, d12, q14, q15
+ FILTER_6TAG_8BITS_AVERAGE_WITH_0 d3, d4, d5, d0, d1, d2, d16, q14, q15
vld1.u8 {d3}, [r0], r1 //read 5th row
- vst1.u8 {d12}, [r2], r3 //write 4th 8Byte
+ vst1.u8 {d16}, [r2], r3 //write 4th 8Byte
//d4, d5, d0, d1, d2, d3 --> d0, d1, d2, d3, d4, d5
vswp q0, q2
@@ -721,8 +721,8 @@
vmov d4, r4, r5
vmov d5, r5, r6 //reserved r6
- FILTER_6TAG_8BITS_AVERAGE_WITH_0 d0, d1, d2, d3, d4, d5, d12, q14, q15
- vmov r4, r5, d12
+ FILTER_6TAG_8BITS_AVERAGE_WITH_0 d0, d1, d2, d3, d4, d5, d16, q14, q15
+ vmov r4, r5, d16
str r4, [r2], r3 //write 1st 4Byte
str r5, [r2], r3 //write 2nd 4Byte
@@ -731,8 +731,8 @@
vmov d0, r6, r5
vmov d1, r5, r4 //reserved r4
- FILTER_6TAG_8BITS_AVERAGE_WITH_0 d2, d3, d4, d5, d0, d1, d12, q14, q15
- vmov r5, r6, d12
+ FILTER_6TAG_8BITS_AVERAGE_WITH_0 d2, d3, d4, d5, d0, d1, d16, q14, q15
+ vmov r5, r6, d16
str r5, [r2], r3 //write 3rd 4Byte
str r6, [r2], r3 //write 4th 4Byte
@@ -764,64 +764,64 @@
vshr.u16 q15, q14, #2 // 5
vld1.u8 {q2}, [r0], r1 //q2=src[0]
vld1.u8 {q3}, [r0], r1 //q3=src[1]
- vld1.u8 {q4}, [r0], r1 //q4=src[2]
+ vld1.u8 {q8}, [r0], r1 //q8=src[2]
w16_xy_03_luma_loop:
- vld1.u8 {q5}, [r0], r1 //q5=src[3]
+ vld1.u8 {q9}, [r0], r1 //q9=src[3]
- FILTER_6TAG_8BITS_AVERAGE_WITH_1 d0, d2, d4, d6, d8, d10, d12, q14, q15
+ FILTER_6TAG_8BITS_AVERAGE_WITH_1 d0, d2, d4, d6, d16, d18, d20, q14, q15
pld [r0]
- FILTER_6TAG_8BITS_AVERAGE_WITH_1 d1, d3, d5, d7, d9, d11, d13, q14, q15
+ FILTER_6TAG_8BITS_AVERAGE_WITH_1 d1, d3, d5, d7, d17, d19, d21, q14, q15
vld1.u8 {q0}, [r0], r1 //read 2nd row
- vst1.u8 {q6}, [r2], r3 //write 1st 16Byte
+ vst1.u8 {q10}, [r2], r3 //write 1st 16Byte
- FILTER_6TAG_8BITS_AVERAGE_WITH_1 d2, d4, d6, d8, d10, d0, d12, q14, q15
+ FILTER_6TAG_8BITS_AVERAGE_WITH_1 d2, d4, d6, d16, d18, d0, d20, q14, q15
pld [r0]
- FILTER_6TAG_8BITS_AVERAGE_WITH_1 d3, d5, d7, d9, d11, d1, d13, q14, q15
+ FILTER_6TAG_8BITS_AVERAGE_WITH_1 d3, d5, d7, d17, d19, d1, d21, q14, q15
vld1.u8 {q1}, [r0], r1 //read 3rd row
- vst1.u8 {q6}, [r2], r3 //write 2nd 16Byte
+ vst1.u8 {q10}, [r2], r3 //write 2nd 16Byte
- FILTER_6TAG_8BITS_AVERAGE_WITH_1 d4, d6, d8, d10, d0, d2, d12, q14, q15
+ FILTER_6TAG_8BITS_AVERAGE_WITH_1 d4, d6, d16, d18, d0, d2, d20, q14, q15
pld [r0]
- FILTER_6TAG_8BITS_AVERAGE_WITH_1 d5, d7, d9, d11, d1, d3, d13, q14, q15
+ FILTER_6TAG_8BITS_AVERAGE_WITH_1 d5, d7, d17, d19, d1, d3, d21, q14, q15
vld1.u8 {q2}, [r0], r1 //read 4th row
- vst1.u8 {q6}, [r2], r3 //write 3rd 16Byte
+ vst1.u8 {q10}, [r2], r3 //write 3rd 16Byte
- FILTER_6TAG_8BITS_AVERAGE_WITH_1 d6, d8, d10, d0, d2, d4, d12, q14, q15
+ FILTER_6TAG_8BITS_AVERAGE_WITH_1 d6, d16, d18, d0, d2, d4, d20, q14, q15
pld [r0]
- FILTER_6TAG_8BITS_AVERAGE_WITH_1 d7, d9, d11, d1, d3, d5, d13, q14, q15
+ FILTER_6TAG_8BITS_AVERAGE_WITH_1 d7, d17, d19, d1, d3, d5, d21, q14, q15
vld1.u8 {q3}, [r0], r1 //read 5th row
- vst1.u8 {q6}, [r2], r3 //write 4th 16Byte
+ vst1.u8 {q10}, [r2], r3 //write 4th 16Byte
- FILTER_6TAG_8BITS_AVERAGE_WITH_1 d8, d10, d0, d2, d4, d6, d12, q14, q15
+ FILTER_6TAG_8BITS_AVERAGE_WITH_1 d16, d18, d0, d2, d4, d6, d20, q14, q15
pld [r0]
- FILTER_6TAG_8BITS_AVERAGE_WITH_1 d9, d11, d1, d3, d5, d7, d13, q14, q15
- vld1.u8 {q4}, [r0], r1 //read 6th row
- vst1.u8 {q6}, [r2], r3 //write 5th 16Byte
+ FILTER_6TAG_8BITS_AVERAGE_WITH_1 d17, d19, d1, d3, d5, d7, d21, q14, q15
+ vld1.u8 {q8}, [r0], r1 //read 6th row
+ vst1.u8 {q10}, [r2], r3 //write 5th 16Byte
- FILTER_6TAG_8BITS_AVERAGE_WITH_1 d10, d0, d2, d4, d6, d8, d12, q14, q15
+ FILTER_6TAG_8BITS_AVERAGE_WITH_1 d18, d0, d2, d4, d6, d16, d20, q14, q15
pld [r0]
- FILTER_6TAG_8BITS_AVERAGE_WITH_1 d11, d1, d3, d5, d7, d9, d13, q14, q15
- vld1.u8 {q5}, [r0], r1 //read 7th row
- vst1.u8 {q6}, [r2], r3 //write 6th 16Byte
+ FILTER_6TAG_8BITS_AVERAGE_WITH_1 d19, d1, d3, d5, d7, d17, d21, q14, q15
+ vld1.u8 {q9}, [r0], r1 //read 7th row
+ vst1.u8 {q10}, [r2], r3 //write 6th 16Byte
- FILTER_6TAG_8BITS_AVERAGE_WITH_1 d0, d2, d4, d6, d8, d10, d12, q14, q15
+ FILTER_6TAG_8BITS_AVERAGE_WITH_1 d0, d2, d4, d6, d16, d18, d20, q14, q15
pld [r0]
- FILTER_6TAG_8BITS_AVERAGE_WITH_1 d1, d3, d5, d7, d9, d11, d13, q14, q15
+ FILTER_6TAG_8BITS_AVERAGE_WITH_1 d1, d3, d5, d7, d17, d19, d21, q14, q15
vld1.u8 {q0}, [r0], r1 //read 8th row
- vst1.u8 {q6}, [r2], r3 //write 7th 16Byte
+ vst1.u8 {q10}, [r2], r3 //write 7th 16Byte
- FILTER_6TAG_8BITS_AVERAGE_WITH_1 d2, d4, d6, d8, d10, d0, d12, q14, q15
+ FILTER_6TAG_8BITS_AVERAGE_WITH_1 d2, d4, d6, d16, d18, d0, d20, q14, q15
pld [r0]
- FILTER_6TAG_8BITS_AVERAGE_WITH_1 d3, d5, d7, d9, d11, d1, d13, q14, q15
- vst1.u8 {q6}, [r2], r3 //write 8th 16Byte
+ FILTER_6TAG_8BITS_AVERAGE_WITH_1 d3, d5, d7, d17, d19, d1, d21, q14, q15
+ vst1.u8 {q10}, [r2], r3 //write 8th 16Byte
- //q2, q3, q4, q5, q0 --> q0~q4
- vswp q0, q4
+ //q2, q3, q8, q9, q0 --> q0~q8
+ vswp q0, q8
vswp q0, q2
vmov q1, q3
- vmov q3, q5 //q0~q4
+ vmov q3, q9 //q0~q8
sub r4, #8
cmp r4, #0
@@ -853,24 +853,24 @@
w8_xy_03_mc_luma_loop:
pld [r0]
- FILTER_6TAG_8BITS_AVERAGE_WITH_1 d0, d1, d2, d3, d4, d5, d12, q14, q15
+ FILTER_6TAG_8BITS_AVERAGE_WITH_1 d0, d1, d2, d3, d4, d5, d16, q14, q15
vld1.u8 {d0}, [r0], r1 //read 2nd row
- vst1.u8 {d12}, [r2], r3 //write 1st 8Byte
+ vst1.u8 {d16}, [r2], r3 //write 1st 8Byte
pld [r0]
- FILTER_6TAG_8BITS_AVERAGE_WITH_1 d1, d2, d3, d4, d5, d0, d12, q14, q15
+ FILTER_6TAG_8BITS_AVERAGE_WITH_1 d1, d2, d3, d4, d5, d0, d16, q14, q15
vld1.u8 {d1}, [r0], r1 //read 3rd row
- vst1.u8 {d12}, [r2], r3 //write 2nd 8Byte
+ vst1.u8 {d16}, [r2], r3 //write 2nd 8Byte
pld [r0]
- FILTER_6TAG_8BITS_AVERAGE_WITH_1 d2, d3, d4, d5, d0, d1, d12, q14, q15
+ FILTER_6TAG_8BITS_AVERAGE_WITH_1 d2, d3, d4, d5, d0, d1, d16, q14, q15
vld1.u8 {d2}, [r0], r1 //read 4th row
- vst1.u8 {d12}, [r2], r3 //write 3rd 8Byte
+ vst1.u8 {d16}, [r2], r3 //write 3rd 8Byte
pld [r0]
- FILTER_6TAG_8BITS_AVERAGE_WITH_1 d3, d4, d5, d0, d1, d2, d12, q14, q15
+ FILTER_6TAG_8BITS_AVERAGE_WITH_1 d3, d4, d5, d0, d1, d2, d16, q14, q15
vld1.u8 {d3}, [r0], r1 //read 5th row
- vst1.u8 {d12}, [r2], r3 //write 4th 8Byte
+ vst1.u8 {d16}, [r2], r3 //write 4th 8Byte
//d4, d5, d0, d1, d2, d3 --> d0, d1, d2, d3, d4, d5
vswp q0, q2
@@ -916,8 +916,8 @@
vmov d4, r4, r5
vmov d5, r5, r6 //reserved r6
- FILTER_6TAG_8BITS_AVERAGE_WITH_1 d0, d1, d2, d3, d4, d5, d12, q14, q15
- vmov r4, r5, d12
+ FILTER_6TAG_8BITS_AVERAGE_WITH_1 d0, d1, d2, d3, d4, d5, d16, q14, q15
+ vmov r4, r5, d16
str r4, [r2], r3 //write 1st 4Byte
str r5, [r2], r3 //write 2nd 4Byte
@@ -926,8 +926,8 @@
vmov d0, r6, r5
vmov d1, r5, r4 //reserved r4
- FILTER_6TAG_8BITS_AVERAGE_WITH_1 d2, d3, d4, d5, d0, d1, d12, q14, q15
- vmov r5, r6, d12
+ FILTER_6TAG_8BITS_AVERAGE_WITH_1 d2, d3, d4, d5, d0, d1, d16, q14, q15
+ vmov r5, r6, d16
str r5, [r2], r3 //write 3rd 4Byte
str r6, [r2], r3 //write 4th 4Byte
@@ -959,64 +959,64 @@
vshr.u16 q15, q14, #2 // 5
vld1.u8 {q2}, [r0], r1 //q2=src[0]
vld1.u8 {q3}, [r0], r1 //q3=src[1]
- vld1.u8 {q4}, [r0], r1 //q4=src[2]
+ vld1.u8 {q8}, [r0], r1 //q8=src[2]
w16_v_mc_luma_loop:
- vld1.u8 {q5}, [r0], r1 //q5=src[3]
+ vld1.u8 {q9}, [r0], r1 //q9=src[3]
- FILTER_6TAG_8BITS d0, d2, d4, d6, d8, d10, d12, q14, q15
+ FILTER_6TAG_8BITS d0, d2, d4, d6, d16, d18, d20, q14, q15
pld [r0]
- FILTER_6TAG_8BITS d1, d3, d5, d7, d9, d11, d13, q14, q15
+ FILTER_6TAG_8BITS d1, d3, d5, d7, d17, d19, d21, q14, q15
vld1.u8 {q0}, [r0], r1 //read 2nd row
- vst1.u8 {q6}, [r2], r3 //write 1st 16Byte
+ vst1.u8 {q10}, [r2], r3 //write 1st 16Byte
- FILTER_6TAG_8BITS d2, d4, d6, d8, d10, d0, d12, q14, q15
+ FILTER_6TAG_8BITS d2, d4, d6, d16, d18, d0, d20, q14, q15
pld [r0]
- FILTER_6TAG_8BITS d3, d5, d7, d9, d11, d1, d13, q14, q15
+ FILTER_6TAG_8BITS d3, d5, d7, d17, d19, d1, d21, q14, q15
vld1.u8 {q1}, [r0], r1 //read 3rd row
- vst1.u8 {q6}, [r2], r3 //write 2nd 16Byte
+ vst1.u8 {q10}, [r2], r3 //write 2nd 16Byte
- FILTER_6TAG_8BITS d4, d6, d8, d10, d0, d2, d12, q14, q15
+ FILTER_6TAG_8BITS d4, d6, d16, d18, d0, d2, d20, q14, q15
pld [r0]
- FILTER_6TAG_8BITS d5, d7, d9, d11, d1, d3, d13, q14, q15
+ FILTER_6TAG_8BITS d5, d7, d17, d19, d1, d3, d21, q14, q15
vld1.u8 {q2}, [r0], r1 //read 4th row
- vst1.u8 {q6}, [r2], r3 //write 3rd 16Byte
+ vst1.u8 {q10}, [r2], r3 //write 3rd 16Byte
- FILTER_6TAG_8BITS d6, d8, d10, d0, d2, d4, d12, q14, q15
+ FILTER_6TAG_8BITS d6, d16, d18, d0, d2, d4, d20, q14, q15
pld [r0]
- FILTER_6TAG_8BITS d7, d9, d11, d1, d3, d5, d13, q14, q15
+ FILTER_6TAG_8BITS d7, d17, d19, d1, d3, d5, d21, q14, q15
vld1.u8 {q3}, [r0], r1 //read 5th row
- vst1.u8 {q6}, [r2], r3 //write 4th 16Byte
+ vst1.u8 {q10}, [r2], r3 //write 4th 16Byte
- FILTER_6TAG_8BITS d8, d10, d0, d2, d4, d6, d12, q14, q15
+ FILTER_6TAG_8BITS d16, d18, d0, d2, d4, d6, d20, q14, q15
pld [r0]
- FILTER_6TAG_8BITS d9, d11, d1, d3, d5, d7, d13, q14, q15
- vld1.u8 {q4}, [r0], r1 //read 6th row
- vst1.u8 {q6}, [r2], r3 //write 5th 16Byte
+ FILTER_6TAG_8BITS d17, d19, d1, d3, d5, d7, d21, q14, q15
+ vld1.u8 {q8}, [r0], r1 //read 6th row
+ vst1.u8 {q10}, [r2], r3 //write 5th 16Byte
- FILTER_6TAG_8BITS d10, d0, d2, d4, d6, d8, d12, q14, q15
+ FILTER_6TAG_8BITS d18, d0, d2, d4, d6, d16, d20, q14, q15
pld [r0]
- FILTER_6TAG_8BITS d11, d1, d3, d5, d7, d9, d13, q14, q15
- vld1.u8 {q5}, [r0], r1 //read 7th row
- vst1.u8 {q6}, [r2], r3 //write 6th 16Byte
+ FILTER_6TAG_8BITS d19, d1, d3, d5, d7, d17, d21, q14, q15
+ vld1.u8 {q9}, [r0], r1 //read 7th row
+ vst1.u8 {q10}, [r2], r3 //write 6th 16Byte
- FILTER_6TAG_8BITS d0, d2, d4, d6, d8, d10, d12, q14, q15
+ FILTER_6TAG_8BITS d0, d2, d4, d6, d16, d18, d20, q14, q15
pld [r0]
- FILTER_6TAG_8BITS d1, d3, d5, d7, d9, d11, d13, q14, q15
+ FILTER_6TAG_8BITS d1, d3, d5, d7, d17, d19, d21, q14, q15
vld1.u8 {q0}, [r0], r1 //read 8th row
- vst1.u8 {q6}, [r2], r3 //write 7th 16Byte
+ vst1.u8 {q10}, [r2], r3 //write 7th 16Byte
- FILTER_6TAG_8BITS d2, d4, d6, d8, d10, d0, d12, q14, q15
+ FILTER_6TAG_8BITS d2, d4, d6, d16, d18, d0, d20, q14, q15
pld [r0]
- FILTER_6TAG_8BITS d3, d5, d7, d9, d11, d1, d13, q14, q15
- vst1.u8 {q6}, [r2], r3 //write 8th 16Byte
+ FILTER_6TAG_8BITS d3, d5, d7, d17, d19, d1, d21, q14, q15
+ vst1.u8 {q10}, [r2], r3 //write 8th 16Byte
- //q2, q3, q4, q5, q0 --> q0~q4
- vswp q0, q4
+ //q2, q3, q8, q9, q0 --> q0~q8
+ vswp q0, q8
vswp q0, q2
vmov q1, q3
- vmov q3, q5 //q0~q4
+ vmov q3, q9 //q0~q8
sub r4, #8
cmp r4, #0
@@ -1048,24 +1048,24 @@
w8_v_mc_luma_loop:
pld [r0]
- FILTER_6TAG_8BITS d0, d1, d2, d3, d4, d5, d12, q14, q15
+ FILTER_6TAG_8BITS d0, d1, d2, d3, d4, d5, d16, q14, q15
vld1.u8 {d0}, [r0], r1 //read 2nd row
- vst1.u8 {d12}, [r2], r3 //write 1st 8Byte
+ vst1.u8 {d16}, [r2], r3 //write 1st 8Byte
pld [r0]
- FILTER_6TAG_8BITS d1, d2, d3, d4, d5, d0, d12, q14, q15
+ FILTER_6TAG_8BITS d1, d2, d3, d4, d5, d0, d16, q14, q15
vld1.u8 {d1}, [r0], r1 //read 3rd row
- vst1.u8 {d12}, [r2], r3 //write 2nd 8Byte
+ vst1.u8 {d16}, [r2], r3 //write 2nd 8Byte
pld [r0]
- FILTER_6TAG_8BITS d2, d3, d4, d5, d0, d1, d12, q14, q15
+ FILTER_6TAG_8BITS d2, d3, d4, d5, d0, d1, d16, q14, q15
vld1.u8 {d2}, [r0], r1 //read 4th row
- vst1.u8 {d12}, [r2], r3 //write 3rd 8Byte
+ vst1.u8 {d16}, [r2], r3 //write 3rd 8Byte
pld [r0]
- FILTER_6TAG_8BITS d3, d4, d5, d0, d1, d2, d12, q14, q15
+ FILTER_6TAG_8BITS d3, d4, d5, d0, d1, d2, d16, q14, q15
vld1.u8 {d3}, [r0], r1 //read 5th row
- vst1.u8 {d12}, [r2], r3 //write 4th 8Byte
+ vst1.u8 {d16}, [r2], r3 //write 4th 8Byte
//d4, d5, d0, d1, d2, d3 --> d0, d1, d2, d3, d4, d5
vswp q0, q2
@@ -1111,8 +1111,8 @@
vmov d4, r4, r5
vmov d5, r5, r6 //reserved r6
- FILTER_6TAG_8BITS d0, d1, d2, d3, d4, d5, d12, q14, q15
- vmov r4, r5, d12
+ FILTER_6TAG_8BITS d0, d1, d2, d3, d4, d5, d16, q14, q15
+ vmov r4, r5, d16
str r4, [r2], r3 //write 1st 4Byte
str r5, [r2], r3 //write 2nd 4Byte
@@ -1121,8 +1121,8 @@
vmov d0, r6, r5
vmov d1, r5, r4 //reserved r4
- FILTER_6TAG_8BITS d2, d3, d4, d5, d0, d1, d12, q14, q15
- vmov r5, r6, d12
+ FILTER_6TAG_8BITS d2, d3, d4, d5, d0, d1, d16, q14, q15
+ vmov r5, r6, d16
str r5, [r2], r3 //write 3rd 4Byte
str r6, [r2], r3 //write 4th 4Byte
@@ -1479,10 +1479,10 @@
vld1.u8 {q2}, [r2]!
vld1.u8 {q3}, [r3]!
- vld1.u8 {q4}, [r2]!
- vld1.u8 {q5}, [r3]!
- vld1.u8 {q6}, [r2]!
- vld1.u8 {q7}, [r3]!
+ vld1.u8 {q8}, [r2]!
+ vld1.u8 {q9}, [r3]!
+ vld1.u8 {q10}, [r2]!
+ vld1.u8 {q11}, [r3]!
AVERAGE_TWO_8BITS d0, d0, d2
AVERAGE_TWO_8BITS d1, d1, d3
@@ -1492,13 +1492,13 @@
AVERAGE_TWO_8BITS d5, d5, d7
vst1.u8 {q2}, [r0], r1
- AVERAGE_TWO_8BITS d8, d8, d10
- AVERAGE_TWO_8BITS d9, d9, d11
- vst1.u8 {q4}, [r0], r1
+ AVERAGE_TWO_8BITS d16, d16, d18
+ AVERAGE_TWO_8BITS d17, d17, d19
+ vst1.u8 {q8}, [r0], r1
- AVERAGE_TWO_8BITS d12, d12, d14
- AVERAGE_TWO_8BITS d13, d13, d15
- vst1.u8 {q6}, [r0], r1
+ AVERAGE_TWO_8BITS d20, d20, d22
+ AVERAGE_TWO_8BITS d21, d21, d23
+ vst1.u8 {q10}, [r0], r1
sub r4, #4
cmp r4, #0
@@ -1679,18 +1679,18 @@
vext.8 q2, q0, q1, #1 //q2=src[-1]
vext.8 q3, q0, q1, #2 //q3=src[0]
- vext.8 q4, q0, q1, #3 //q4=src[1]
- vext.8 q5, q0, q1, #4 //q5=src[2]
- vext.8 q6, q0, q1, #5 //q6=src[3]
+ vext.8 q8, q0, q1, #3 //q8=src[1]
+ vext.8 q9, q0, q1, #4 //q9=src[2]
+ vext.8 q10, q0, q1, #5 //q10=src[3]
- FILTER_6TAG_8BITS d0, d4, d6, d8, d10, d12, d14, q14, q15
+ FILTER_6TAG_8BITS d0, d4, d6, d16, d18, d20, d22, q14, q15
- FILTER_6TAG_8BITS d1, d5, d7, d9, d11, d13, d15, q14, q15
+ FILTER_6TAG_8BITS d1, d5, d7, d17, d19, d21, d23, q14, q15
- vst1.u8 {d14, d15}, [r2]! //write [0:15] Byte
+ vst1.u8 {d22, d23}, [r2]! //write [0:15] Byte
vsli.64 d2, d2, #8 // [0][1][2][3][4][5]XO-->O[0][1][2][3][4][5]X
- FILTER_SINGLE_TAG_8BITS d2, d3, d14, q7, q1
+ FILTER_SINGLE_TAG_8BITS d2, d3, d22, q11, q1
vst1.u8 {d2[0]}, [r2], r3 //write 16th Byte
@@ -1727,13 +1727,13 @@
vext.8 d5, d0, d1, #4 //d5=src[2]
vext.8 d6, d0, d1, #5 //d6=src[3]
- FILTER_6TAG_8BITS d0, d2, d3, d4, d5, d6, d8, q14, q15
+ FILTER_6TAG_8BITS d0, d2, d3, d4, d5, d6, d16, q14, q15
sub r4, #1
- vst1.u8 {d8}, [r2]! //write [0:7] Byte
+ vst1.u8 {d16}, [r2]! //write [0:7] Byte
vsli.64 d2, d1, #8 // [0][1][2][3][4][5]XO-->O[0][1][2][3][4][5]X
- FILTER_SINGLE_TAG_8BITS d2, d7, d14, q7, q1
+ FILTER_SINGLE_TAG_8BITS d2, d7, d18, q9, q1
vst1.u8 {d2[0]}, [r2], r3 //write 8th Byte
cmp r4, #0
@@ -1758,73 +1758,73 @@
vshr.u16 q15, q14, #2 // 5
vld1.u8 {q2}, [r0], r1 //q2=src[0]
vld1.u8 {q3}, [r0], r1 //q3=src[1]
- vld1.u8 {q4}, [r0], r1 //q4=src[2]
+ vld1.u8 {q8}, [r0], r1 //q8=src[2]
w17_v_mc_luma_loop:
- vld1.u8 {q5}, [r0], r1 //q5=src[3]
+ vld1.u8 {q9}, [r0], r1 //q9=src[3]
- FILTER_6TAG_8BITS d0, d2, d4, d6, d8, d10, d12, q14, q15
+ FILTER_6TAG_8BITS d0, d2, d4, d6, d16, d18, d20, q14, q15
pld [r0]
- FILTER_6TAG_8BITS d1, d3, d5, d7, d9, d11, d13, q14, q15
+ FILTER_6TAG_8BITS d1, d3, d5, d7, d17, d19, d21, q14, q15
vld1.u8 {q0}, [r0], r1 //read 2nd row
- vst1.u8 {q6}, [r2], r3 //write 1st 16Byte
+ vst1.u8 {q10}, [r2], r3 //write 1st 16Byte
- FILTER_6TAG_8BITS d2, d4, d6, d8, d10, d0, d12, q14, q15
+ FILTER_6TAG_8BITS d2, d4, d6, d16, d18, d0, d20, q14, q15
pld [r0]
- FILTER_6TAG_8BITS d3, d5, d7, d9, d11, d1, d13, q14, q15
+ FILTER_6TAG_8BITS d3, d5, d7, d17, d19, d1, d21, q14, q15
vld1.u8 {q1}, [r0], r1 //read 3rd row
- vst1.u8 {q6}, [r2], r3 //write 2nd 16Byte
+ vst1.u8 {q10}, [r2], r3 //write 2nd 16Byte
- FILTER_6TAG_8BITS d4, d6, d8, d10, d0, d2, d12, q14, q15
+ FILTER_6TAG_8BITS d4, d6, d16, d18, d0, d2, d20, q14, q15
pld [r0]
- FILTER_6TAG_8BITS d5, d7, d9, d11, d1, d3, d13, q14, q15
+ FILTER_6TAG_8BITS d5, d7, d17, d19, d1, d3, d21, q14, q15
vld1.u8 {q2}, [r0], r1 //read 4th row
- vst1.u8 {q6}, [r2], r3 //write 3rd 16Byte
+ vst1.u8 {q10}, [r2], r3 //write 3rd 16Byte
- FILTER_6TAG_8BITS d6, d8, d10, d0, d2, d4, d12, q14, q15
+ FILTER_6TAG_8BITS d6, d16, d18, d0, d2, d4, d20, q14, q15
pld [r0]
- FILTER_6TAG_8BITS d7, d9, d11, d1, d3, d5, d13, q14, q15
+ FILTER_6TAG_8BITS d7, d17, d19, d1, d3, d5, d21, q14, q15
vld1.u8 {q3}, [r0], r1 //read 5th row
- vst1.u8 {q6}, [r2], r3 //write 4th 16Byte
+ vst1.u8 {q10}, [r2], r3 //write 4th 16Byte
- FILTER_6TAG_8BITS d8, d10, d0, d2, d4, d6, d12, q14, q15
+ FILTER_6TAG_8BITS d16, d18, d0, d2, d4, d6, d20, q14, q15
pld [r0]
- FILTER_6TAG_8BITS d9, d11, d1, d3, d5, d7, d13, q14, q15
- vld1.u8 {q4}, [r0], r1 //read 6th row
- vst1.u8 {q6}, [r2], r3 //write 5th 16Byte
+ FILTER_6TAG_8BITS d17, d19, d1, d3, d5, d7, d21, q14, q15
+ vld1.u8 {q8}, [r0], r1 //read 6th row
+ vst1.u8 {q10}, [r2], r3 //write 5th 16Byte
- FILTER_6TAG_8BITS d10, d0, d2, d4, d6, d8, d12, q14, q15
+ FILTER_6TAG_8BITS d18, d0, d2, d4, d6, d16, d20, q14, q15
pld [r0]
- FILTER_6TAG_8BITS d11, d1, d3, d5, d7, d9, d13, q14, q15
- vld1.u8 {q5}, [r0], r1 //read 7th row
- vst1.u8 {q6}, [r2], r3 //write 6th 16Byte
+ FILTER_6TAG_8BITS d19, d1, d3, d5, d7, d17, d21, q14, q15
+ vld1.u8 {q9}, [r0], r1 //read 7th row
+ vst1.u8 {q10}, [r2], r3 //write 6th 16Byte
- FILTER_6TAG_8BITS d0, d2, d4, d6, d8, d10, d12, q14, q15
+ FILTER_6TAG_8BITS d0, d2, d4, d6, d16, d18, d20, q14, q15
pld [r0]
- FILTER_6TAG_8BITS d1, d3, d5, d7, d9, d11, d13, q14, q15
+ FILTER_6TAG_8BITS d1, d3, d5, d7, d17, d19, d21, q14, q15
vld1.u8 {q0}, [r0], r1 //read 8th row
- vst1.u8 {q6}, [r2], r3 //write 7th 16Byte
+ vst1.u8 {q10}, [r2], r3 //write 7th 16Byte
- FILTER_6TAG_8BITS d2, d4, d6, d8, d10, d0, d12, q14, q15
+ FILTER_6TAG_8BITS d2, d4, d6, d16, d18, d0, d20, q14, q15
pld [r0]
- FILTER_6TAG_8BITS d3, d5, d7, d9, d11, d1, d13, q14, q15
- vst1.u8 {q6}, [r2], r3 //write 8th 16Byte
+ FILTER_6TAG_8BITS d3, d5, d7, d17, d19, d1, d21, q14, q15
+ vst1.u8 {q10}, [r2], r3 //write 8th 16Byte
- //q2, q3, q4, q5, q0 --> q0~q4
- vswp q0, q4
+ //q2, q3, q8, q9, q0 --> q0~q8
+ vswp q0, q8
vswp q0, q2
vmov q1, q3
- vmov q3, q5 //q0~q4
+ vmov q3, q9 //q0~q8
sub r4, #8
cmp r4, #1
bne w17_v_mc_luma_loop
// the last 16Bytes
- vld1.u8 {q5}, [r0], r1 //q5=src[3]
- FILTER_6TAG_8BITS d0, d2, d4, d6, d8, d10, d12, q14, q15
- FILTER_6TAG_8BITS d1, d3, d5, d7, d9, d11, d13, q14, q15
- vst1.u8 {q6}, [r2], r3 //write 1st 16Byte
+ vld1.u8 {q9}, [r0], r1 //q9=src[3]
+ FILTER_6TAG_8BITS d0, d2, d4, d6, d16, d18, d20, q14, q15
+ FILTER_6TAG_8BITS d1, d3, d5, d7, d17, d19, d21, q14, q15
+ vst1.u8 {q10}, [r2], r3 //write 1st 16Byte
pop {r4}
WELS_ASM_FUNC_END
@@ -1853,24 +1853,24 @@
w9_v_mc_luma_loop:
pld [r0]
- FILTER_6TAG_8BITS d0, d1, d2, d3, d4, d5, d12, q14, q15
+ FILTER_6TAG_8BITS d0, d1, d2, d3, d4, d5, d16, q14, q15
vld1.u8 {d0}, [r0], r1 //read 2nd row
- vst1.u8 {d12}, [r2], r3 //write 1st 8Byte
+ vst1.u8 {d16}, [r2], r3 //write 1st 8Byte
pld [r0]
- FILTER_6TAG_8BITS d1, d2, d3, d4, d5, d0, d12, q14, q15
+ FILTER_6TAG_8BITS d1, d2, d3, d4, d5, d0, d16, q14, q15
vld1.u8 {d1}, [r0], r1 //read 3rd row
- vst1.u8 {d12}, [r2], r3 //write 2nd 8Byte
+ vst1.u8 {d16}, [r2], r3 //write 2nd 8Byte
pld [r0]
- FILTER_6TAG_8BITS d2, d3, d4, d5, d0, d1, d12, q14, q15
+ FILTER_6TAG_8BITS d2, d3, d4, d5, d0, d1, d16, q14, q15
vld1.u8 {d2}, [r0], r1 //read 4th row
- vst1.u8 {d12}, [r2], r3 //write 3rd 8Byte
+ vst1.u8 {d16}, [r2], r3 //write 3rd 8Byte
pld [r0]
- FILTER_6TAG_8BITS d3, d4, d5, d0, d1, d2, d12, q14, q15
+ FILTER_6TAG_8BITS d3, d4, d5, d0, d1, d2, d16, q14, q15
vld1.u8 {d3}, [r0], r1 //read 5th row
- vst1.u8 {d12}, [r2], r3 //write 4th 8Byte
+ vst1.u8 {d16}, [r2], r3 //write 4th 8Byte
//d4, d5, d0, d1, d2, d3 --> d0, d1, d2, d3, d4, d5
vswp q0, q2
@@ -1880,8 +1880,8 @@
cmp r4, #1
bne w9_v_mc_luma_loop
- FILTER_6TAG_8BITS d0, d1, d2, d3, d4, d5, d12, q14, q15
- vst1.u8 {d12}, [r2], r3 //write last 8Byte
+ FILTER_6TAG_8BITS d0, d1, d2, d3, d4, d5, d16, q14, q15
+ vst1.u8 {d16}, [r2], r3 //write last 8Byte
pop {r4}
WELS_ASM_FUNC_END
@@ -2134,10 +2134,10 @@
vld1.u8 {q2}, [r2], r3
vld1.u8 {q3}, [r4], r5
- vld1.u8 {q4}, [r2], r3
- vld1.u8 {q5}, [r4], r5
- vld1.u8 {q6}, [r2], r3
- vld1.u8 {q7}, [r4], r5
+ vld1.u8 {q8}, [r2], r3
+ vld1.u8 {q9}, [r4], r5
+ vld1.u8 {q10}, [r2], r3
+ vld1.u8 {q11}, [r4], r5
AVERAGE_TWO_8BITS d0, d0, d2
AVERAGE_TWO_8BITS d1, d1, d3
@@ -2147,13 +2147,13 @@
AVERAGE_TWO_8BITS d5, d5, d7
vst1.u8 {q2}, [r0], r1
- AVERAGE_TWO_8BITS d8, d8, d10
- AVERAGE_TWO_8BITS d9, d9, d11
- vst1.u8 {q4}, [r0], r1
+ AVERAGE_TWO_8BITS d16, d16, d18
+ AVERAGE_TWO_8BITS d17, d17, d19
+ vst1.u8 {q8}, [r0], r1
- AVERAGE_TWO_8BITS d12, d12, d14
- AVERAGE_TWO_8BITS d13, d13, d15
- vst1.u8 {q6}, [r0], r1
+ AVERAGE_TWO_8BITS d20, d20, d22
+ AVERAGE_TWO_8BITS d21, d21, d23
+ vst1.u8 {q10}, [r0], r1
sub r6, #4
cmp r6, #0
--- a/codec/decoder/core/arm/block_add_neon.S
+++ b/codec/decoder/core/arm/block_add_neon.S
@@ -161,9 +161,9 @@
vld4.s16 {d0, d1, d2, d3}, [r2] // cost 3 cycles!
- ROW_TRANSFORM_1_STEP d0, d1, d2, d3, q4, q5, q6, q7, d4, d5
+ ROW_TRANSFORM_1_STEP d0, d1, d2, d3, q8, q9, q10, q11, d4, d5
- TRANSFORM_4BYTES q0, q1, q2, q3, q4, q5, q6, q7
+ TRANSFORM_4BYTES q0, q1, q2, q3, q8, q9, q10, q11
// transform element 32bits
vtrn.s32 q0, q1 //[0 1 2 3]+[4 5 6 7]-->[0 4 2 6]+[1 5 3 7]
@@ -171,33 +171,33 @@
vswp d1, d4 //[0 4 2 6]+[8 12 10 14]-->[0 4 8 12]+[2 6 10 14]
vswp d3, d6 //[1 5 3 7]+[9 13 11 15]-->[1 5 9 13]+[3 7 11 15]
- COL_TRANSFORM_1_STEP q0, q1, q2, q3, q4, q5, q6, q7
+ COL_TRANSFORM_1_STEP q0, q1, q2, q3, q8, q9, q10, q11
- TRANSFORM_4BYTES q0, q1, q2, q3, q4, q5, q6, q7
+ TRANSFORM_4BYTES q0, q1, q2, q3, q8, q9, q10, q11
//after clip_table[MAX_NEG_CROP] into [0, 255]
mov r2, r0
- vld1.32 {d12[0]},[r0],r1
- vld1.32 {d12[1]},[r0],r1
- vld1.32 {d14[0]},[r0],r1
- vld1.32 {d14[1]},[r0]
+ vld1.32 {d20[0]},[r0],r1
+ vld1.32 {d20[1]},[r0],r1
+ vld1.32 {d22[0]},[r0],r1
+ vld1.32 {d22[1]},[r0]
- vrshrn.s32 d8, q0, #6
- vrshrn.s32 d9, q1, #6
- vrshrn.s32 d10, q2, #6
- vrshrn.s32 d11, q3, #6
+ vrshrn.s32 d16, q0, #6
+ vrshrn.s32 d17, q1, #6
+ vrshrn.s32 d18, q2, #6
+ vrshrn.s32 d19, q3, #6
- vmovl.u8 q0,d12
- vmovl.u8 q1,d14
- vadd.s16 q0,q4
- vadd.s16 q1,q5
+ vmovl.u8 q0,d20
+ vmovl.u8 q1,d22
+ vadd.s16 q0,q8
+ vadd.s16 q1,q9
- vqmovun.s16 d12,q0
- vqmovun.s16 d14,q1
+ vqmovun.s16 d20,q0
+ vqmovun.s16 d22,q1
- vst1.32 {d12[0]},[r2],r1
- vst1.32 {d12[1]},[r2],r1
- vst1.32 {d14[0]},[r2],r1
- vst1.32 {d14[1]},[r2]
+ vst1.32 {d20[0]},[r2],r1
+ vst1.32 {d20[1]},[r2],r1
+ vst1.32 {d22[0]},[r2],r1
+ vst1.32 {d22[1]},[r2]
WELS_ASM_FUNC_END
#endif
--- a/codec/decoder/core/arm/intra_pred_neon.S
+++ b/codec/decoder/core/arm/intra_pred_neon.S
@@ -214,12 +214,12 @@
vmla.s16 q3, q2, d0[0]
//Calculate a+'b'*{1,2,3,4,5,6,7,8} + c*{-7}
- vshl.s16 q5, q1, #3
- vadd.s16 q5, q3
+ vshl.s16 q8, q1, #3
+ vadd.s16 q8, q3
//right shift 5 bits and rounding
vqrshrun.s16 d0, q3, #5
- vqrshrun.s16 d1, q5, #5
+ vqrshrun.s16 d1, q8, #5
//Set the line of MB
vst1.u32 {d0,d1}, [r0], r1
@@ -229,9 +229,9 @@
mov r2, #15
loop_0_get_i16x16_luma_pred_plane:
vadd.s16 q3, q2
- vadd.s16 q5, q2
+ vadd.s16 q8, q2
vqrshrun.s16 d0, q3, #5
- vqrshrun.s16 d1, q5, #5
+ vqrshrun.s16 d1, q8, #5
vst1.u32 {d0,d1}, [r0], r1
subs r2, #1
bne loop_0_get_i16x16_luma_pred_plane
--- a/codec/encoder/core/arm/intra_pred_neon.S
+++ b/codec/encoder/core/arm/intra_pred_neon.S
@@ -216,12 +216,12 @@
vmla.s16 q3, q2, d0[0]
//Calculate a+'b'*{1,2,3,4,5,6,7,8} + c*{-7}
- vshl.s16 q5, q1, #3
- vadd.s16 q5, q3
+ vshl.s16 q8, q1, #3
+ vadd.s16 q8, q3
//right shift 5 bits and rounding
vqrshrun.s16 d0, q3, #5
- vqrshrun.s16 d1, q5, #5
+ vqrshrun.s16 d1, q8, #5
//Set the line of MB
vst1.u32 {d0,d1}, [r0]!
@@ -231,9 +231,9 @@
mov r3, #15
loop_0_get_i16x16_luma_pred_plane:
vadd.s16 q3, q2
- vadd.s16 q5, q2
+ vadd.s16 q8, q2
vqrshrun.s16 d0, q3, #5
- vqrshrun.s16 d1, q5, #5
+ vqrshrun.s16 d1, q8, #5
vst1.u32 {d0,d1}, [r0]!
subs r3, #1
bne loop_0_get_i16x16_luma_pred_plane
--- a/codec/encoder/core/arm/pixel_neon.S
+++ b/codec/encoder/core/arm/pixel_neon.S
@@ -405,11 +405,11 @@
vld1.8 {q0}, [r0], r1 //save pix1
vld1.8 {q1}, [r2], r3 //save pix2 - stride
- vld1.8 {q6}, [r2], r3 //save pix2
+ vld1.8 {q10}, [r2], r3 //save pix2
vld1.8 {q2}, [r2], r3 //save pix2 + stride
vld1.8 {q3}, [r4], r3 //save pix2 - 1
- vld1.8 {q4}, [r5], r3 //save pix2 + 1
+ vld1.8 {q8}, [r5], r3 //save pix2 + 1
//Do the SAD for 16 bytes
vabdl.u8 q15, d0, d2
@@ -421,8 +421,8 @@
vabdl.u8 q11, d0, d6
vabal.u8 q11, d1, d7
- vabdl.u8 q9, d0, d8
- vabal.u8 q9, d1, d9
+ vabdl.u8 q9, d0, d16
+ vabal.u8 q9, d1, d17
mov lr, #15
pixel_sad_4_16x16_loop_0:
@@ -429,14 +429,14 @@
//Loading a horizontal line data (16 bytes)
vld1.8 {q0}, [r0], r1 //save pix1
- vmov.8 q1, q6 //save pix2 - stride
- vmov.8 q6, q2
+ vmov.8 q1, q10 //save pix2 - stride
+ vmov.8 q10, q2
vabal.u8 q15, d0, d2
vld1.8 {q2}, [r2], r3 //save pix2 + stride
vabal.u8 q15, d1, d3
vld1.8 {q3}, [r4], r3 //save pix2 - 1
vabal.u8 q13, d0, d4
- vld1.8 {q4}, [r5], r3 //save pix2 + 1
+ vld1.8 {q8}, [r5], r3 //save pix2 + 1
vabal.u8 q13, d1, d5
subs lr, #1
@@ -443,8 +443,8 @@
vabal.u8 q11, d0, d6
vabal.u8 q11, d1, d7
- vabal.u8 q9, d0, d8
- vabal.u8 q9, d1, d9
+ vabal.u8 q9, d0, d16
+ vabal.u8 q9, d1, d17
bne pixel_sad_4_16x16_loop_0
@@ -481,11 +481,11 @@
vld1.8 {q0}, [r0], r1 //save pix1
vld1.8 {q1}, [r2], r3 //save pix2 - stride
- vld1.8 {q6}, [r2], r3 //save pix2
+ vld1.8 {q10}, [r2], r3 //save pix2
vld1.8 {q2}, [r2], r3 //save pix2 + stride
vld1.8 {q3}, [r4], r3 //save pix2 - 1
- vld1.8 {q4}, [r5], r3 //save pix2 + 1
+ vld1.8 {q8}, [r5], r3 //save pix2 + 1
//Do the SAD for 16 bytes
vabdl.u8 q15, d0, d2
@@ -497,8 +497,8 @@
vabdl.u8 q11, d0, d6
vabal.u8 q11, d1, d7
- vabdl.u8 q9, d0, d8
- vabal.u8 q9, d1, d9
+ vabdl.u8 q9, d0, d16
+ vabal.u8 q9, d1, d17
mov lr, #7
pixel_sad_4_16x8_loop_0:
@@ -505,14 +505,14 @@
//Loading a horizontal line data (16 bytes)
vld1.8 {q0}, [r0], r1 //save pix1
- vmov.8 q1, q6 //save pix2 - stride
- vmov.8 q6, q2
+ vmov.8 q1, q10 //save pix2 - stride
+ vmov.8 q10, q2
vabal.u8 q15, d0, d2
vld1.8 {q2}, [r2], r3 //save pix2 + stride
vabal.u8 q15, d1, d3
vld1.8 {q3}, [r4], r3 //save pix2 - 1
vabal.u8 q13, d0, d4
- vld1.8 {q4}, [r5], r3 //save pix2 + 1
+ vld1.8 {q8}, [r5], r3 //save pix2 + 1
vabal.u8 q13, d1, d5
subs lr, #1
@@ -519,8 +519,8 @@
vabal.u8 q11, d0, d6
vabal.u8 q11, d1, d7
- vabal.u8 q9, d0, d8
- vabal.u8 q9, d1, d9
+ vabal.u8 q9, d0, d16
+ vabal.u8 q9, d1, d17
bne pixel_sad_4_16x8_loop_0
--- a/codec/encoder/core/arm/reconstruct_neon.S
+++ b/codec/encoder/core/arm/reconstruct_neon.S
@@ -616,17 +616,17 @@
STORE_ALIGNED_DATA_WITH_STRIDE q0, q1, q2, q3, r0, r1
- LOAD_ALIGNED_DATA_WITH_STRIDE q4, q5, q6, q7, r2, r3
+ LOAD_ALIGNED_DATA_WITH_STRIDE q8, q9, q10, q11, r2, r3
- STORE_ALIGNED_DATA_WITH_STRIDE q4, q5, q6, q7, r0, r1
+ STORE_ALIGNED_DATA_WITH_STRIDE q8, q9, q10, q11, r0, r1
LOAD_ALIGNED_DATA_WITH_STRIDE q0, q1, q2, q3, r2, r3
STORE_ALIGNED_DATA_WITH_STRIDE q0, q1, q2, q3, r0, r1
- LOAD_ALIGNED_DATA_WITH_STRIDE q4, q5, q6, q7, r2, r3
+ LOAD_ALIGNED_DATA_WITH_STRIDE q8, q9, q10, q11, r2, r3
- STORE_ALIGNED_DATA_WITH_STRIDE q4, q5, q6, q7, r0, r1
+ STORE_ALIGNED_DATA_WITH_STRIDE q8, q9, q10, q11, r0, r1
WELS_ASM_FUNC_END
@@ -637,17 +637,17 @@
STORE_UNALIGNED_DATA_WITH_STRIDE q0, q1, q2, q3, r0, r1
- LOAD_UNALIGNED_DATA_WITH_STRIDE q4, q5, q6, q7, r2, r3
+ LOAD_UNALIGNED_DATA_WITH_STRIDE q8, q9, q10, q11, r2, r3
- STORE_UNALIGNED_DATA_WITH_STRIDE q4, q5, q6, q7, r0, r1
+ STORE_UNALIGNED_DATA_WITH_STRIDE q8, q9, q10, q11, r0, r1
LOAD_UNALIGNED_DATA_WITH_STRIDE q0, q1, q2, q3, r2, r3
STORE_UNALIGNED_DATA_WITH_STRIDE q0, q1, q2, q3, r0, r1
- LOAD_UNALIGNED_DATA_WITH_STRIDE q4, q5, q6, q7, r2, r3
+ LOAD_UNALIGNED_DATA_WITH_STRIDE q8, q9, q10, q11, r2, r3
- STORE_UNALIGNED_DATA_WITH_STRIDE q4, q5, q6, q7, r0, r1
+ STORE_UNALIGNED_DATA_WITH_STRIDE q8, q9, q10, q11, r0, r1
WELS_ASM_FUNC_END
@@ -658,9 +658,9 @@
STORE_UNALIGNED_DATA_WITH_STRIDE q0, q1, q2, q3, r0, r1
- LOAD_UNALIGNED_DATA_WITH_STRIDE q4, q5, q6, q7, r2, r3
+ LOAD_UNALIGNED_DATA_WITH_STRIDE q8, q9, q10, q11, r2, r3
- STORE_UNALIGNED_DATA_WITH_STRIDE q4, q5, q6, q7, r0, r1
+ STORE_UNALIGNED_DATA_WITH_STRIDE q8, q9, q10, q11, r0, r1
WELS_ASM_FUNC_END
@@ -720,22 +720,22 @@
push {r4}
ldr r4, [sp, #4]
- LOAD_8x8_DATA_FOR_DCT d8, d9, d10, d11, d12, d13, d14, d15, r1, r3
+ LOAD_8x8_DATA_FOR_DCT d16, d17, d18, d19, d20, d21, d22, d23, r1, r3
- vsubl.u8 q0, d8, d12
- vsubl.u8 q1, d9, d13
- vsubl.u8 q2, d10, d14
- vsubl.u8 q3, d11, d15
+ vsubl.u8 q0, d16, d20
+ vsubl.u8 q1, d17, d21
+ vsubl.u8 q2, d18, d22
+ vsubl.u8 q3, d19, d23
MATRIX_TRANSFORM_EACH_16BITS q0, q1, q2, q3
// horizontal transform
- DCT_ROW_TRANSFORM_TOTAL_16BITS q0, q1, q2, q3, q4, q5, q6, q7
+ DCT_ROW_TRANSFORM_TOTAL_16BITS q0, q1, q2, q3, q8, q9, q10, q11
// transform element
MATRIX_TRANSFORM_EACH_16BITS q0, q1, q2, q3
// vertical transform
- DCT_ROW_TRANSFORM_TOTAL_16BITS q0, q1, q2, q3, q4, q5, q6, q7
+ DCT_ROW_TRANSFORM_TOTAL_16BITS q0, q1, q2, q3, q8, q9, q10, q11
vswp d1, d2
vswp d5, d6
@@ -744,22 +744,22 @@
vst1.s16 {q2, q3}, [r0]!
////////////////
- LOAD_8x8_DATA_FOR_DCT d8, d9, d10, d11, d12, d13, d14, d15, r1, r3
+ LOAD_8x8_DATA_FOR_DCT d16, d17, d18, d19, d20, d21, d22, d23, r1, r3
- vsubl.u8 q0, d8, d12
- vsubl.u8 q1, d9, d13
- vsubl.u8 q2, d10, d14
- vsubl.u8 q3, d11, d15
+ vsubl.u8 q0, d16, d20
+ vsubl.u8 q1, d17, d21
+ vsubl.u8 q2, d18, d22
+ vsubl.u8 q3, d19, d23
MATRIX_TRANSFORM_EACH_16BITS q0, q1, q2, q3
// horizontal transform
- DCT_ROW_TRANSFORM_TOTAL_16BITS q0, q1, q2, q3, q4, q5, q6, q7
+ DCT_ROW_TRANSFORM_TOTAL_16BITS q0, q1, q2, q3, q8, q9, q10, q11
// transform element
MATRIX_TRANSFORM_EACH_16BITS q0, q1, q2, q3
// vertical transform
- DCT_ROW_TRANSFORM_TOTAL_16BITS q0, q1, q2, q3, q4, q5, q6, q7
+ DCT_ROW_TRANSFORM_TOTAL_16BITS q0, q1, q2, q3, q8, q9, q10, q11
vswp d1, d2
vswp d5, d6
@@ -776,13 +776,13 @@
vld1.s16 {q0, q1}, [r0]
vld1.s16 {q3}, [r2]
- vmov q4, q2
+ vmov q8, q2
- NEWQUANT_COEF_EACH_16BITS q0, q2, d4, d5, d6, d7, q5, q6, q7
+ NEWQUANT_COEF_EACH_16BITS q0, q2, d4, d5, d6, d7, q9, q10, q11
vst1.s16 {q2}, [r0]!
- NEWQUANT_COEF_EACH_16BITS q1, q4, d8, d9, d6, d7, q5, q6, q7
- vst1.s16 {q4}, [r0]!
+ NEWQUANT_COEF_EACH_16BITS q1, q8, d16, d17, d6, d7, q9, q10, q11
+ vst1.s16 {q8}, [r0]!
WELS_ASM_FUNC_END
@@ -793,13 +793,13 @@
vdup.s16 q2, r1 // even ff range [0, 768]
vdup.s16 q3, r2
- vmov q4, q2
+ vmov q8, q2
- NEWQUANT_COEF_EACH_16BITS q0, q2, d4, d5, d6, d7, q5, q6, q7
+ NEWQUANT_COEF_EACH_16BITS q0, q2, d4, d5, d6, d7, q9, q10, q11
vst1.s16 {q2}, [r0]!
- NEWQUANT_COEF_EACH_16BITS q1, q4, d8, d9, d6, d7, q5, q6, q7
- vst1.s16 {q4}, [r0]!
+ NEWQUANT_COEF_EACH_16BITS q1, q8, d16, d17, d6, d7, q9, q10, q11
+ vst1.s16 {q8}, [r0]!
WELS_ASM_FUNC_END
@@ -810,36 +810,36 @@
mov r1, r0
vld1.s16 {q0, q1}, [r0]!
- vmov q4, q2
- NEWQUANT_COEF_EACH_16BITS q0, q4, d8, d9, d6, d7, q5, q6, q7
- vst1.s16 {q4}, [r1]!
- vmov q4, q2
- NEWQUANT_COEF_EACH_16BITS q1, q4, d8, d9, d6, d7, q5, q6, q7
- vst1.s16 {q4}, [r1]!
+ vmov q8, q2
+ NEWQUANT_COEF_EACH_16BITS q0, q8, d16, d17, d6, d7, q9, q10, q11
+ vst1.s16 {q8}, [r1]!
+ vmov q8, q2
+ NEWQUANT_COEF_EACH_16BITS q1, q8, d16, d17, d6, d7, q9, q10, q11
+ vst1.s16 {q8}, [r1]!
vld1.s16 {q0, q1}, [r0]!
- vmov q4, q2
- NEWQUANT_COEF_EACH_16BITS q0, q4, d8, d9, d6, d7, q5, q6, q7
- vst1.s16 {q4}, [r1]!
- vmov q4, q2
- NEWQUANT_COEF_EACH_16BITS q1, q4, d8, d9, d6, d7, q5, q6, q7
- vst1.s16 {q4}, [r1]!
+ vmov q8, q2
+ NEWQUANT_COEF_EACH_16BITS q0, q8, d16, d17, d6, d7, q9, q10, q11
+ vst1.s16 {q8}, [r1]!
+ vmov q8, q2
+ NEWQUANT_COEF_EACH_16BITS q1, q8, d16, d17, d6, d7, q9, q10, q11
+ vst1.s16 {q8}, [r1]!
vld1.s16 {q0, q1}, [r0]!
- vmov q4, q2
- NEWQUANT_COEF_EACH_16BITS q0, q4, d8, d9, d6, d7, q5, q6, q7
- vst1.s16 {q4}, [r1]!
- vmov q4, q2
- NEWQUANT_COEF_EACH_16BITS q1, q4, d8, d9, d6, d7, q5, q6, q7
- vst1.s16 {q4}, [r1]!
+ vmov q8, q2
+ NEWQUANT_COEF_EACH_16BITS q0, q8, d16, d17, d6, d7, q9, q10, q11
+ vst1.s16 {q8}, [r1]!
+ vmov q8, q2
+ NEWQUANT_COEF_EACH_16BITS q1, q8, d16, d17, d6, d7, q9, q10, q11
+ vst1.s16 {q8}, [r1]!
vld1.s16 {q0, q1}, [r0]!
- vmov q4, q2
- NEWQUANT_COEF_EACH_16BITS q0, q4, d8, d9, d6, d7, q5, q6, q7
- vst1.s16 {q4}, [r1]!
- vmov q4, q2
- NEWQUANT_COEF_EACH_16BITS q1, q4, d8, d9, d6, d7, q5, q6, q7
- vst1.s16 {q4}, [r1]!
+ vmov q8, q2
+ NEWQUANT_COEF_EACH_16BITS q0, q8, d16, d17, d6, d7, q9, q10, q11
+ vst1.s16 {q8}, [r1]!
+ vmov q8, q2
+ NEWQUANT_COEF_EACH_16BITS q1, q8, d16, d17, d6, d7, q9, q10, q11
+ vst1.s16 {q8}, [r1]!
WELS_ASM_FUNC_END
@@ -850,42 +850,42 @@
mov r1, r0
vld1.s16 {q0, q1}, [r0]!
- vmov q4, q2
- NEWQUANT_COEF_EACH_16BITS_MAX q0, q4, d8, d9, d6, d7, q5, q6, q7, d18
- vst1.s16 {q4}, [r1]!
vmov q8, q2
- NEWQUANT_COEF_EACH_16BITS_MAX q1, q8, d16, d17, d6, d7, q5, q6, q7, d20
- vst1.s16 {q8}, [r1]! // then 1st 16 elem in d18 & d20
+ NEWQUANT_COEF_EACH_16BITS_MAX q0, q8, d16, d17, d6, d7, q9, q10, q11, d26
+ vst1.s16 {q8}, [r1]!
+ vmov q12, q2
+ NEWQUANT_COEF_EACH_16BITS_MAX q1, q12, d24, d25, d6, d7, q9, q10, q11, d28
+ vst1.s16 {q12}, [r1]! // then 1st 16 elem in d26 & d28
vld1.s16 {q0, q1}, [r0]!
- vmov q4, q2
- NEWQUANT_COEF_EACH_16BITS_MAX q0, q4, d8, d9, d6, d7, q5, q6, q7, d19
- vst1.s16 {q4}, [r1]!
vmov q8, q2
- NEWQUANT_COEF_EACH_16BITS_MAX q1, q8, d16, d17, d6, d7, q5, q6, q7, d21
- vst1.s16 {q8}, [r1]! // then 2nd 16 elem in d19 & d21
+ NEWQUANT_COEF_EACH_16BITS_MAX q0, q8, d16, d17, d6, d7, q9, q10, q11, d27
+ vst1.s16 {q8}, [r1]!
+ vmov q12, q2
+ NEWQUANT_COEF_EACH_16BITS_MAX q1, q12, d24, d25, d6, d7, q9, q10, q11, d29
+ vst1.s16 {q12}, [r1]! // then 2nd 16 elem in d27 & d29
- SELECT_MAX_IN_ABS_COEF q9, q10, q0, d0, d1
+ SELECT_MAX_IN_ABS_COEF q13, q14, q0, d0, d1
vst1.s32 {d0[0]}, [r3]!
///////////
vld1.s16 {q0, q1}, [r0]!
- vmov q4, q2
- NEWQUANT_COEF_EACH_16BITS_MAX q0, q4, d8, d9, d6, d7, q5, q6, q7, d18
- vst1.s16 {q4}, [r1]!
vmov q8, q2
- NEWQUANT_COEF_EACH_16BITS_MAX q1, q8, d16, d17, d6, d7, q5, q6, q7, d20
- vst1.s16 {q8}, [r1]! // then 3rd 16 elem in d18 & d20
+ NEWQUANT_COEF_EACH_16BITS_MAX q0, q8, d16, d17, d6, d7, q9, q10, q11, d26
+ vst1.s16 {q8}, [r1]!
+ vmov q12, q2
+ NEWQUANT_COEF_EACH_16BITS_MAX q1, q12, d24, d25, d6, d7, q9, q10, q11, d28
+ vst1.s16 {q12}, [r1]! // then 3rd 16 elem in d26 & d28
vld1.s16 {q0, q1}, [r0]!
- vmov q4, q2
- NEWQUANT_COEF_EACH_16BITS_MAX q0, q4, d8, d9, d6, d7, q5, q6, q7, d19
- vst1.s16 {q4}, [r1]!
vmov q8, q2
- NEWQUANT_COEF_EACH_16BITS_MAX q1, q8, d16, d17, d6, d7, q5, q6, q7, d21
- vst1.s16 {q8}, [r1]! // then 4th 16 elem in d19 & d21
+ NEWQUANT_COEF_EACH_16BITS_MAX q0, q8, d16, d17, d6, d7, q9, q10, q11, d27
+ vst1.s16 {q8}, [r1]!
+ vmov q12, q2
+ NEWQUANT_COEF_EACH_16BITS_MAX q1, q12, d24, d25, d6, d7, q9, q10, q11, d29
+ vst1.s16 {q12}, [r1]! // then 4th 16 elem in d27 & d29
- SELECT_MAX_IN_ABS_COEF q9, q10, q0, d0, d1
+ SELECT_MAX_IN_ABS_COEF q13, q14, q0, d0, d1
vst1.s32 {d0[0]}, [r3]!
WELS_ASM_FUNC_END
@@ -907,23 +907,23 @@
vtrn.16 q0, q2 // d0[0 4], d1[1 5]
vtrn.16 q1, q3 // d2[2 6], d3[3 7]
- vld1.s16 {d8}, [r1], r2
- vld1.s16 {d9}, [r3], r2
- vld1.s16 {d12}, [r1], r2
- vld1.s16 {d13}, [r3], r2
- vld1.s16 {d10}, [r1], r2
- vld1.s16 {d11}, [r3], r2
- vld1.s16 {d14}, [r1], r2
- vld1.s16 {d15}, [r3], r2
- vtrn.16 q4, q6 // d8[08 12], d9[09 13]
- vtrn.16 q5, q7 //d10[10 14],d11[11 15]
+ vld1.s16 {d16}, [r1], r2
+ vld1.s16 {d17}, [r3], r2
+ vld1.s16 {d20}, [r1], r2
+ vld1.s16 {d21}, [r3], r2
+ vld1.s16 {d18}, [r1], r2
+ vld1.s16 {d19}, [r3], r2
+ vld1.s16 {d22}, [r1], r2
+ vld1.s16 {d23}, [r3], r2
+ vtrn.16 q8, q10 //d16[08 12],d17[09 13]
+ vtrn.16 q9, q11 //d18[10 14],d19[11 15]
- vtrn.32 q0, q4 // d0 [0 4 08 12] = dct[idx], d1[1 5 09 13] = dct[idx+16]
- vtrn.32 q1, q5 // d2 [2 6 10 14] = dct[idx+64], d3[3 7 11 15] = dct[idx+80]
+ vtrn.32 q0, q8 // d0 [0 4 08 12] = dct[idx], d1[1 5 09 13] = dct[idx+16]
+ vtrn.32 q1, q9 // d2 [2 6 10 14] = dct[idx+64], d3[3 7 11 15] = dct[idx+80]
- ROW_TRANSFORM_0_STEP d0, d1, d3, d2, q4, q7, q6, q5
+ ROW_TRANSFORM_0_STEP d0, d1, d3, d2, q8, q11, q10, q9
- TRANSFORM_4BYTES q0, q1, q3, q2, q4, q7, q6, q5
+ TRANSFORM_4BYTES q0, q1, q3, q2, q8, q11, q10, q9
// transform element 32bits
vtrn.s32 q0, q1 //[0 1 2 3]+[4 5 6 7]-->[0 4 2 6]+[1 5 3 7]
@@ -931,15 +931,15 @@
vswp d1, d4 //[0 4 2 6]+[8 12 10 14]-->[0 4 8 12]+[2 6 10 14]
vswp d3, d6 //[1 5 3 7]+[9 13 11 15]-->[1 5 9 13]+[3 7 11 15]
- COL_TRANSFORM_0_STEP q0, q1, q3, q2, q4, q7, q6, q5
+ COL_TRANSFORM_0_STEP q0, q1, q3, q2, q8, q11, q10, q9
- TRANSFORM_4BYTES q0, q1, q3, q2, q4, q7, q6, q5
+ TRANSFORM_4BYTES q0, q1, q3, q2, q8, q11, q10, q9
- vrshrn.s32 d8, q0, #1
- vrshrn.s32 d9, q1, #1
- vrshrn.s32 d10, q2, #1
- vrshrn.s32 d11, q3, #1
- vst1.16 {q4, q5}, [r0] //store
+ vrshrn.s32 d16, q0, #1
+ vrshrn.s32 d17, q1, #1
+ vrshrn.s32 d18, q2, #1
+ vrshrn.s32 d19, q3, #1
+ vst1.16 {q8, q9}, [r0] //store
pop {r2,r3}
WELS_ASM_FUNC_END
@@ -1020,35 +1020,35 @@
vld1.s16 {q0, q1}, [r0]
vld1.u16 {q2}, [r1]
- vmul.s16 q4, q0, q2
- vmul.s16 q5, q1, q2
+ vmul.s16 q8, q0, q2
+ vmul.s16 q9, q1, q2
- vst1.s16 {q4, q5}, [r0]
+ vst1.s16 {q8, q9}, [r0]
WELS_ASM_FUNC_END
WELS_ASM_FUNC_BEGIN WelsDequantFour4x4_neon
- vld1.u16 {q8}, [r1]
+ vld1.u16 {q12}, [r1]
mov r1, r0
vld1.s16 {q0, q1}, [r0]!
vld1.s16 {q2, q3}, [r0]!
- vmul.s16 q0, q0, q8
- vld1.s16 {q4, q5}, [r0]!
- vmul.s16 q1, q1, q8
- vld1.s16 {q6, q7}, [r0]!
+ vmul.s16 q0, q0, q12
+ vld1.s16 {q8, q9}, [r0]!
+ vmul.s16 q1, q1, q12
+ vld1.s16 {q10, q11}, [r0]!
vst1.s16 {q0, q1}, [r1]!
- vmul.s16 q2, q2, q8
- vmul.s16 q3, q3, q8
- vmul.s16 q4, q4, q8
+ vmul.s16 q2, q2, q12
+ vmul.s16 q3, q3, q12
+ vmul.s16 q8, q8, q12
vst1.s16 {q2, q3}, [r1]!
- vmul.s16 q5, q5, q8
- vmul.s16 q6, q6, q8
- vmul.s16 q7, q7, q8
- vst1.s16 {q4, q5}, [r1]!
- vst1.s16 {q6, q7}, [r1]!
+ vmul.s16 q9, q9, q12
+ vmul.s16 q10, q10, q12
+ vmul.s16 q11, q11, q12
+ vst1.s16 {q8, q9}, [r1]!
+ vst1.s16 {q10, q11}, [r1]!
WELS_ASM_FUNC_END
@@ -1056,7 +1056,7 @@
WELS_ASM_FUNC_BEGIN WelsDequantIHadamard4x4_neon
vld1.s16 {q0, q1}, [r0]
- vdup.s16 q4, r1
+ vdup.s16 q8, r1
IHDM_4x4_TOTAL_16BITS q0, q2, q3
IHDM_4x4_TOTAL_16BITS q1, q2, q3
@@ -1064,10 +1064,10 @@
MATRIX_TRANSFORM_EACH_16BITS d0, d1, d2, d3
IHDM_4x4_TOTAL_16BITS q0, q2, q3
- vmul.s16 q0, q4
+ vmul.s16 q0, q8
IHDM_4x4_TOTAL_16BITS q1, q2, q3
- vmul.s16 q1, q4
+ vmul.s16 q1, q8
MATRIX_TRANSFORM_EACH_16BITS d0, d1, d2, d3
vst1.s16 {q0, q1}, [r0]
@@ -1075,14 +1075,14 @@
WELS_ASM_FUNC_BEGIN WelsIDctT4Rec_neon
- vld1.u32 {d14[0]}, [r2], r3
+ vld1.u32 {d16[0]}, [r2], r3
push {r4}
ldr r4, [sp, #4]
- vld1.u32 {d14[1]}, [r2], r3
+ vld1.u32 {d16[1]}, [r2], r3
vld4.s16 {d0, d1, d2, d3}, [r4] // cost 3 cycles!
- vld1.u32 {d15[0]}, [r2], r3
- vld1.u32 {d15[1]}, [r2], r3 // q7 is pred
+ vld1.u32 {d17[0]}, [r2], r3
+ vld1.u32 {d17[1]}, [r2], r3 // q7 is pred
ROW_TRANSFORM_1_STEP_TOTAL_16BITS d0, d1, d2, d3, d4, d5, d6, d7
@@ -1099,17 +1099,17 @@
vrshr.s16 d3, d3, #6
//after rounding 6, clip into [0, 255]
- vmovl.u8 q2,d14
+ vmovl.u8 q2,d16
vadd.s16 q0,q2
- vqmovun.s16 d14,q0
- vst1.32 {d14[0]},[r0],r1
- vst1.32 {d14[1]},[r0],r1
+ vqmovun.s16 d16,q0
+ vst1.32 {d16[0]},[r0],r1
+ vst1.32 {d16[1]},[r0],r1
- vmovl.u8 q2,d15
+ vmovl.u8 q2,d17
vadd.s16 q1,q2
- vqmovun.s16 d15,q1
- vst1.32 {d15[0]},[r0],r1
- vst1.32 {d15[1]},[r0]
+ vqmovun.s16 d17,q1
+ vst1.32 {d17[0]},[r0],r1
+ vst1.32 {d17[1]},[r0]
pop {r4}
WELS_ASM_FUNC_END
@@ -1117,28 +1117,28 @@
WELS_ASM_FUNC_BEGIN WelsIDctFourT4Rec_neon
- vld1.u64 {d16}, [r2], r3
+ vld1.u64 {d24}, [r2], r3
push {r4}
ldr r4, [sp, #4]
- vld1.u64 {d17}, [r2], r3
+ vld1.u64 {d25}, [r2], r3
vld4.s16 {d0, d1, d2, d3}, [r4]! // cost 3 cycles!
- vld1.u64 {d18}, [r2], r3
- vld1.u64 {d19}, [r2], r3
+ vld1.u64 {d26}, [r2], r3
+ vld1.u64 {d27}, [r2], r3
vld4.s16 {d4, d5, d6, d7}, [r4]! // cost 3 cycles!
vswp d1, d4
vswp d3, d6
vswp q1, q2 // q0~q3
- ROW_TRANSFORM_1_STEP_TOTAL_16BITS q0, q1, q2, q3, q4, q5, q6, q7
+ ROW_TRANSFORM_1_STEP_TOTAL_16BITS q0, q1, q2, q3, q8, q9, q10, q11
- TRANSFORM_TOTAL_16BITS q0, q1, q2, q3, q4, q5, q6, q7
+ TRANSFORM_TOTAL_16BITS q0, q1, q2, q3, q8, q9, q10, q11
MATRIX_TRANSFORM_EACH_16BITS q0, q1, q2, q3
- ROW_TRANSFORM_1_STEP_TOTAL_16BITS q0, q1, q2, q3, q4, q5, q6, q7
+ ROW_TRANSFORM_1_STEP_TOTAL_16BITS q0, q1, q2, q3, q8, q9, q10, q11
- TRANSFORM_TOTAL_16BITS q0, q1, q2, q3, q4, q5, q6, q7
+ TRANSFORM_TOTAL_16BITS q0, q1, q2, q3, q8, q9, q10, q11
vrshr.s16 q0, q0, #6
vrshr.s16 q1, q1, #6
vrshr.s16 q2, q2, #6
@@ -1145,46 +1145,46 @@
vrshr.s16 q3, q3, #6
//after rounding 6, clip into [0, 255]
- vmovl.u8 q4,d16
- vadd.s16 q0,q4
- vqmovun.s16 d16,q0
- vst1.u8 {d16},[r0],r1
+ vmovl.u8 q8,d24
+ vadd.s16 q0,q8
+ vqmovun.s16 d24,q0
+ vst1.u8 {d24},[r0],r1
- vmovl.u8 q4,d17
- vadd.s16 q1,q4
- vqmovun.s16 d17,q1
- vst1.u8 {d17},[r0],r1
+ vmovl.u8 q8,d25
+ vadd.s16 q1,q8
+ vqmovun.s16 d25,q1
+ vst1.u8 {d25},[r0],r1
- vmovl.u8 q4,d18
- vadd.s16 q2,q4
- vqmovun.s16 d18,q2
- vst1.u8 {d18},[r0],r1
+ vmovl.u8 q8,d26
+ vadd.s16 q2,q8
+ vqmovun.s16 d26,q2
+ vst1.u8 {d26},[r0],r1
- vmovl.u8 q4,d19
- vadd.s16 q3,q4
- vqmovun.s16 d19,q3
- vst1.u8 {d19},[r0],r1
+ vmovl.u8 q8,d27
+ vadd.s16 q3,q8
+ vqmovun.s16 d27,q3
+ vst1.u8 {d27},[r0],r1
- vld1.u64 {d16}, [r2], r3
- vld1.u64 {d17}, [r2], r3
+ vld1.u64 {d24}, [r2], r3
+ vld1.u64 {d25}, [r2], r3
vld4.s16 {d0, d1, d2, d3}, [r4]! // cost 3 cycles!
- vld1.u64 {d18}, [r2], r3
- vld1.u64 {d19}, [r2], r3
+ vld1.u64 {d26}, [r2], r3
+ vld1.u64 {d27}, [r2], r3
vld4.s16 {d4, d5, d6, d7}, [r4]! // cost 3 cycles!
vswp d1, d4
vswp d3, d6
vswp q1, q2 // q0~q3
- ROW_TRANSFORM_1_STEP_TOTAL_16BITS q0, q1, q2, q3, q4, q5, q6, q7
+ ROW_TRANSFORM_1_STEP_TOTAL_16BITS q0, q1, q2, q3, q8, q9, q10, q11
- TRANSFORM_TOTAL_16BITS q0, q1, q2, q3, q4, q5, q6, q7
+ TRANSFORM_TOTAL_16BITS q0, q1, q2, q3, q8, q9, q10, q11
MATRIX_TRANSFORM_EACH_16BITS q0, q1, q2, q3
- ROW_TRANSFORM_1_STEP_TOTAL_16BITS q0, q1, q2, q3, q4, q5, q6, q7
+ ROW_TRANSFORM_1_STEP_TOTAL_16BITS q0, q1, q2, q3, q8, q9, q10, q11
- TRANSFORM_TOTAL_16BITS q0, q1, q2, q3, q4, q5, q6, q7
+ TRANSFORM_TOTAL_16BITS q0, q1, q2, q3, q8, q9, q10, q11
vrshr.s16 q0, q0, #6
vrshr.s16 q1, q1, #6
vrshr.s16 q2, q2, #6
@@ -1191,25 +1191,25 @@
vrshr.s16 q3, q3, #6
//after rounding 6, clip into [0, 255]
- vmovl.u8 q4,d16
- vadd.s16 q0,q4
- vqmovun.s16 d16,q0
- vst1.u8 {d16},[r0],r1
+ vmovl.u8 q8,d24
+ vadd.s16 q0,q8
+ vqmovun.s16 d24,q0
+ vst1.u8 {d24},[r0],r1
- vmovl.u8 q4,d17
- vadd.s16 q1,q4
- vqmovun.s16 d17,q1
- vst1.u8 {d17},[r0],r1
+ vmovl.u8 q8,d25
+ vadd.s16 q1,q8
+ vqmovun.s16 d25,q1
+ vst1.u8 {d25},[r0],r1
- vmovl.u8 q4,d18
- vadd.s16 q2,q4
- vqmovun.s16 d18,q2
- vst1.u8 {d18},[r0],r1
+ vmovl.u8 q8,d26
+ vadd.s16 q2,q8
+ vqmovun.s16 d26,q2
+ vst1.u8 {d26},[r0],r1
- vmovl.u8 q4,d19
- vadd.s16 q3,q4
- vqmovun.s16 d19,q3
- vst1.u8 {d19},[r0],r1
+ vmovl.u8 q8,d27
+ vadd.s16 q3,q8
+ vqmovun.s16 d27,q3
+ vst1.u8 {d27},[r0],r1
pop {r4}
WELS_ASM_FUNC_END
--- a/codec/processing/src/arm/down_sample_neon.S
+++ b/codec/processing/src/arm/down_sample_neon.S
@@ -257,10 +257,10 @@
vdup.s32 d1, r11; //init u 16384 16383 16384 16383
mov r11, #16384
- vdup.s16 d8, r11
+ vdup.s16 d16, r11
sub r11, #1
- vdup.s16 d9, r11
- vext.8 d7, d9, d8, #4 //init v 16384 16384 16383 16383
+ vdup.s16 d17, r11
+ vext.8 d7, d17, d16, #4 //init v 16384 16384 16383 16383
veor q14, q14
sub r1, r2 // stride - width
--- a/codec/processing/src/arm/vaa_calc_neon.S
+++ b/codec/processing/src/arm/vaa_calc_neon.S
@@ -103,8 +103,8 @@
ldr r4, [sp, #20] //load pic_stride
ldr r5, [sp, #28] //load psad8x8
- //Initial the Q4 register for save the "psadframe"
- vmov.s64 q4, #0
+ //Initial the Q8 register for save the "psadframe"
+ vmov.s64 q8, #0
//Get the jump distance to use on loop codes
lsl r8, r4, #4
@@ -140,7 +140,7 @@
//Save to calculate "psadframe"
vadd.u32 q0, q1
- vadd.u32 q4, q0
+ vadd.u32 q8, q0
bne vaa_calc_sad_loop1
@@ -152,8 +152,8 @@
bne vaa_calc_sad_loop0
ldr r6, [sp, #24] //load psadframe
- vadd.u32 d8, d9
- vst1.32 {d8[0]}, [r6]
+ vadd.u32 d16, d17
+ vst1.32 {d16[0]}, [r6]
ldmia sp!, {r4-r8}