shithub: openh264

Download patch

ref: 811c647c0ec3553ff8fa16cf933146e59aa4277e
parent: ca457f57e9150ce48f8fe555909296444d253319
author: Martin Storsjö <[email protected]>
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}