ref: beaf7c1893a03712781225efa5eb9e310384ba52
parent: b86e1f00b2d6cd06eae0c8321754ef53190f2400
author: dongzhang <[email protected]>
date: Wed Jul 9 14:22:42 EDT 2014
speed up memory loading in arm64 MC
--- a/codec/common/arm64/mc_aarch64_neon.S
+++ b/codec/common/arm64/mc_aarch64_neon.S
@@ -413,8 +413,8 @@
movi v0.8h, #20, lsl #0
movi v1.8h, #5, lsl #0
w8_h_mc_luma_loop:
- ld1 {v2.8b, v3.8b}, [x0], x1 //only use 13(8+5); v2=src[-2]
- trn1 v2.2d, v2.2d, v3.2d
+ ld1 {v2.16b}, [x0], x1 //only use 13(8+5); v2=src[-2]
+
//prfm pldl1strm, [x0]
ext v5.16b, v2.16b, v4.16b, #1 //v5=src[-1]
ext v6.16b, v2.16b, v4.16b, #2 //v6=src[0]
@@ -492,8 +492,8 @@
movi v0.8h, #20, lsl #0
movi v1.8h, #5, lsl #0
w8_xy_10_mc_luma_loop:
- ld1 {v2.8b, v3.8b}, [x0], x1 //only use 13(8+5); v2=src[-2]
- trn1 v2.2d, v2.2d, v3.2d
+ ld1 {v2.16b}, [x0], x1 //only use 13(8+5); v2=src[-2]
+
//prfm pldl1strm, [x0]
ext v5.16b, v2.16b, v4.16b, #1 //v5=src[-1]
ext v6.16b, v2.16b, v4.16b, #2 //v6=src[0]
@@ -572,8 +572,8 @@
movi v0.8h, #20, lsl #0
movi v1.8h, #5, lsl #0
w8_xy_30_mc_luma_loop:
- ld1 {v2.8b, v3.8b}, [x0], x1 //only use 13(8+5); v2=src[-2]
- trn1 v2.2d, v2.2d, v3.2d
+ ld1 {v2.16b}, [x0], x1 //only use 13(8+5); v2=src[-2]
+
//prfm pldl1strm, [x0]
ext v5.16b, v2.16b, v4.16b, #1 //v5=src[-1]
ext v6.16b, v2.16b, v4.16b, #2 //v6=src[0]
@@ -1779,20 +1779,20 @@
movi v1.8h, #5, lsl #0
ldr q22, filter_para
w17_h_mc_luma_loop:
- ld1 {v2.8b, v3.8b, v4.8b}, [x0], x1 //only use 22(17+5); v2=src[-2]
- trn1 v2.2d, v2.2d, v3.2d
+ ld1 {v2.16b, v3.16b}, [x0], x1 //only use 22(17+5); v2=src[-2]
+
//prfm pldl1strm, [x0]
- ext v5.16b, v2.16b, v4.16b, #1 //v5=src[-1]
- ext v6.16b, v2.16b, v4.16b, #2 //v6=src[0]
- ext v7.16b, v2.16b, v4.16b, #3 //v7=src[1]
- ext v16.16b, v2.16b, v4.16b, #4 //v16=src[2]
- ext v17.16b, v2.16b, v4.16b, #5 //v17=src[3]
+ ext v5.16b, v2.16b, v3.16b, #1 //v5=src[-1]
+ ext v6.16b, v2.16b, v3.16b, #2 //v6=src[0]
+ ext v7.16b, v2.16b, v3.16b, #3 //v7=src[1]
+ ext v16.16b, v2.16b, v3.16b, #4 //v16=src[2]
+ ext v17.16b, v2.16b, v3.16b, #5 //v17=src[3]
FILTER_6TAG_8BITS1 v2, v5, v6, v7, v16, v17, v20, v0, v1
FILTER_6TAG_8BITS2 v2, v5, v6, v7, v16, v17, v20, v0, v1
st1 {v20.16b}, [x2], x5 //write 16Byte
- ext.8b v21, v4, v4, #7 // [0][1][2][3][4][5]XY-->O[0][1][2][3][4][5]X
+ ext.8b v21, v3, v3, #7 // [0][1][2][3][4][5]XY-->O[0][1][2][3][4][5]X
FILTER_SINGLE_TAG_8BITS v21, v22, v23, h21
st1 {v21.b}[0], [x2], x3 //write 16th Byte
@@ -1808,8 +1808,8 @@
movi v1.8h, #5, lsl #0
ldr q22, filter_para
w9_h_mc_luma_loop:
- ld1 {v2.8b, v3.8b}, [x0], x1 //only use 14(9+5); v2=src[-2]
- trn1 v2.2d, v2.2d, v3.2d
+ ld1 {v2.16b}, [x0], x1 //only use 14(9+5); v2=src[-2]
+ mov v3.d[0], v2.d[1]
//prfm pldl1strm, [x0]
ext v5.16b, v2.16b, v4.16b, #1 //v5=src[-1]
ext v6.16b, v2.16b, v4.16b, #2 //v6=src[0]