summaryrefslogtreecommitdiff
path: root/vpx_dsp
diff options
context:
space:
mode:
authorLinfeng Zhang <linfengz@google.com>2016-12-07 21:03:21 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2016-12-07 21:03:21 +0000
commit174528de1e56538d2f930251b23272fdc012be1c (patch)
treebf03aca6148875dcd7df2b760962613a7ba14948 /vpx_dsp
parentf16a0a1aa446930cf7e5e3c5b6a4c9721b1654cb (diff)
parent018a2adcb1b14a8f12fae6342c627c41e8b28ef1 (diff)
downloadlibvpx-174528de1e56538d2f930251b23272fdc012be1c.tar
libvpx-174528de1e56538d2f930251b23272fdc012be1c.tar.gz
libvpx-174528de1e56538d2f930251b23272fdc012be1c.tar.bz2
libvpx-174528de1e56538d2f930251b23272fdc012be1c.zip
Merge "Update idct NEON optimization to not use narrowing saturating shift"
Diffstat (limited to 'vpx_dsp')
-rw-r--r--vpx_dsp/arm/idct16x16_add_neon.asm146
-rw-r--r--vpx_dsp/arm/idct16x16_add_neon.c144
-rw-r--r--vpx_dsp/arm/idct32x32_add_neon.c4
-rw-r--r--vpx_dsp/arm/idct4x4_add_neon.asm16
-rw-r--r--vpx_dsp/arm/idct8x8_add_neon.asm48
5 files changed, 179 insertions, 179 deletions
diff --git a/vpx_dsp/arm/idct16x16_add_neon.asm b/vpx_dsp/arm/idct16x16_add_neon.asm
index 9d3627a90..b80f2ba54 100644
--- a/vpx_dsp/arm/idct16x16_add_neon.asm
+++ b/vpx_dsp/arm/idct16x16_add_neon.asm
@@ -107,12 +107,12 @@ idct16x16_256_add_neon_pass1
vdup.16 d3, r12 ; duplicate cospi_20_64
; dct_const_round_shift(temp1)
- vqrshrn.s32 d8, q2, #14 ; >> 14
- vqrshrn.s32 d9, q3, #14 ; >> 14
+ vrshrn.s32 d8, q2, #14 ; >> 14
+ vrshrn.s32 d9, q3, #14 ; >> 14
; dct_const_round_shift(temp2)
- vqrshrn.s32 d14, q5, #14 ; >> 14
- vqrshrn.s32 d15, q6, #14 ; >> 14
+ vrshrn.s32 d14, q5, #14 ; >> 14
+ vrshrn.s32 d15, q6, #14 ; >> 14
; preloading to avoid stall
; cospi_16_64 = 11585
@@ -138,12 +138,12 @@ idct16x16_256_add_neon_pass1
vmlal.s16 q15, d23, d2
; dct_const_round_shift(temp1)
- vqrshrn.s32 d10, q2, #14 ; >> 14
- vqrshrn.s32 d11, q3, #14 ; >> 14
+ vrshrn.s32 d10, q2, #14 ; >> 14
+ vrshrn.s32 d11, q3, #14 ; >> 14
; dct_const_round_shift(temp2)
- vqrshrn.s32 d12, q9, #14 ; >> 14
- vqrshrn.s32 d13, q15, #14 ; >> 14
+ vrshrn.s32 d12, q9, #14 ; >> 14
+ vrshrn.s32 d13, q15, #14 ; >> 14
; stage 4
vdup.16 d30, r3 ; cospi_16_64
@@ -171,12 +171,12 @@ idct16x16_256_add_neon_pass1
vsub.s32 q1, q11, q1
; dct_const_round_shift(temp1)
- vqrshrn.s32 d16, q3, #14 ; >> 14
- vqrshrn.s32 d17, q12, #14 ; >> 14
+ vrshrn.s32 d16, q3, #14 ; >> 14
+ vrshrn.s32 d17, q12, #14 ; >> 14
; dct_const_round_shift(temp2)
- vqrshrn.s32 d18, q13, #14 ; >> 14
- vqrshrn.s32 d19, q1, #14 ; >> 14
+ vrshrn.s32 d18, q13, #14 ; >> 14
+ vrshrn.s32 d19, q1, #14 ; >> 14
; step1[2] * cospi_24_64 - step1[3] * cospi_8_64;
; step1[2] * cospi_8_64
@@ -196,12 +196,12 @@ idct16x16_256_add_neon_pass1
vmlsl.s16 q13, d29, d31
; dct_const_round_shift(temp2)
- vqrshrn.s32 d22, q0, #14 ; >> 14
- vqrshrn.s32 d23, q1, #14 ; >> 14
+ vrshrn.s32 d22, q0, #14 ; >> 14
+ vrshrn.s32 d23, q1, #14 ; >> 14
; dct_const_round_shift(temp1)
- vqrshrn.s32 d20, q12, #14 ; >> 14
- vqrshrn.s32 d21, q13, #14 ; >> 14
+ vrshrn.s32 d20, q12, #14 ; >> 14
+ vrshrn.s32 d21, q13, #14 ; >> 14
vsub.s16 q13, q4, q5 ; step2[5] = step1[4] - step1[5];
vadd.s16 q4, q4, q5 ; step2[4] = step1[4] + step1[5];
@@ -236,15 +236,15 @@ idct16x16_256_add_neon_pass1
vadd.s32 q10, q10, q12
; dct_const_round_shift(temp1)
- vqrshrn.s32 d10, q6, #14 ; >> 14
- vqrshrn.s32 d11, q13, #14 ; >> 14
+ vrshrn.s32 d10, q6, #14 ; >> 14
+ vrshrn.s32 d11, q13, #14 ; >> 14
; dct_const_round_shift(temp2)
- vqrshrn.s32 d12, q9, #14 ; >> 14
- vqrshrn.s32 d13, q10, #14 ; >> 14
+ vrshrn.s32 d12, q9, #14 ; >> 14
+ vrshrn.s32 d13, q10, #14 ; >> 14
; stage 6
- vadd.s16 q8, q0, q15 ; step2[0] = step1[0] + step1[7];
+ vadd.s16 q8, q0, q15 ; step2[0] = step1[0] + step1[7];
vadd.s16 q9, q1, q6 ; step2[1] = step1[1] + step1[6];
vadd.s16 q10, q2, q5 ; step2[2] = step1[2] + step1[5];
vadd.s16 q11, q3, q4 ; step2[3] = step1[3] + step1[4];
@@ -357,12 +357,12 @@ idct16x16_256_add_neon_pass2
vdup.16 d31, r12 ; duplicate cospi_18_64
; dct_const_round_shift(temp1)
- vqrshrn.s32 d0, q2, #14 ; >> 14
- vqrshrn.s32 d1, q3, #14 ; >> 14
+ vrshrn.s32 d0, q2, #14 ; >> 14
+ vrshrn.s32 d1, q3, #14 ; >> 14
; dct_const_round_shift(temp2)
- vqrshrn.s32 d14, q1, #14 ; >> 14
- vqrshrn.s32 d15, q4, #14 ; >> 14
+ vrshrn.s32 d14, q1, #14 ; >> 14
+ vrshrn.s32 d15, q4, #14 ; >> 14
; preloading to avoid stall
; cospi_22_64 = 7723
@@ -391,12 +391,12 @@ idct16x16_256_add_neon_pass2
vdup.16 d31, r12 ; duplicate cospi_10_64
; dct_const_round_shift(temp1)
- vqrshrn.s32 d2, q2, #14 ; >> 14
- vqrshrn.s32 d3, q3, #14 ; >> 14
+ vrshrn.s32 d2, q2, #14 ; >> 14
+ vrshrn.s32 d3, q3, #14 ; >> 14
; dct_const_round_shift(temp2)
- vqrshrn.s32 d12, q4, #14 ; >> 14
- vqrshrn.s32 d13, q5, #14 ; >> 14
+ vrshrn.s32 d12, q4, #14 ; >> 14
+ vrshrn.s32 d13, q5, #14 ; >> 14
; step1[10] * cospi_22_64
vmull.s16 q11, d20, d30
@@ -425,12 +425,12 @@ idct16x16_256_add_neon_pass2
vdup.16 d31, r12 ; duplicate cospi_26_64
; dct_const_round_shift(temp1)
- vqrshrn.s32 d4, q11, #14 ; >> 14
- vqrshrn.s32 d5, q12, #14 ; >> 14
+ vrshrn.s32 d4, q11, #14 ; >> 14
+ vrshrn.s32 d5, q12, #14 ; >> 14
; dct_const_round_shift(temp2)
- vqrshrn.s32 d11, q5, #14 ; >> 14
- vqrshrn.s32 d10, q4, #14 ; >> 14
+ vrshrn.s32 d11, q5, #14 ; >> 14
+ vrshrn.s32 d10, q4, #14 ; >> 14
; step1[11] * cospi_6_64
vmull.s16 q10, d28, d30
@@ -452,12 +452,12 @@ idct16x16_256_add_neon_pass2
vadd.s16 q0, q0, q1 ; step1[8]=step2[8]+step2[9]
; dct_const_round_shift(temp1)
- vqrshrn.s32 d6, q10, #14 ; >> 14
- vqrshrn.s32 d7, q11, #14 ; >> 14
+ vrshrn.s32 d6, q10, #14 ; >> 14
+ vrshrn.s32 d7, q11, #14 ; >> 14
; dct_const_round_shift(temp2)
- vqrshrn.s32 d8, q12, #14 ; >> 14
- vqrshrn.s32 d9, q13, #14 ; >> 14
+ vrshrn.s32 d8, q12, #14 ; >> 14
+ vrshrn.s32 d9, q13, #14 ; >> 14
; stage 3
vsub.s16 q10, q3, q2 ; step1[10]=-step2[10]+step2[11]
@@ -498,12 +498,12 @@ idct16x16_256_add_neon_pass2
vdup.16 d30, r12 ; duplicate -cospi_8_64
; dct_const_round_shift(temp2)
- vqrshrn.s32 d12, q2, #14 ; >> 14
- vqrshrn.s32 d13, q3, #14 ; >> 14
+ vrshrn.s32 d12, q2, #14 ; >> 14
+ vrshrn.s32 d13, q3, #14 ; >> 14
; dct_const_round_shift(temp1)
- vqrshrn.s32 d2, q4, #14 ; >> 14
- vqrshrn.s32 d3, q5, #14 ; >> 14
+ vrshrn.s32 d2, q4, #14 ; >> 14
+ vrshrn.s32 d3, q5, #14 ; >> 14
vmov.s16 q3, q11
vmov.s16 q4, q12
@@ -525,12 +525,12 @@ idct16x16_256_add_neon_pass2
vmlal.s16 q9, d27, d31
; dct_const_round_shift(temp2)
- vqrshrn.s32 d4, q11, #14 ; >> 14
- vqrshrn.s32 d5, q12, #14 ; >> 14
+ vrshrn.s32 d4, q11, #14 ; >> 14
+ vrshrn.s32 d5, q12, #14 ; >> 14
; dct_const_round_shift(temp1)
- vqrshrn.s32 d10, q8, #14 ; >> 14
- vqrshrn.s32 d11, q9, #14 ; >> 14
+ vrshrn.s32 d10, q8, #14 ; >> 14
+ vrshrn.s32 d11, q9, #14 ; >> 14
; stage 5
vadd.s16 q8, q0, q3 ; step1[8] = step2[8]+step2[11];
@@ -565,12 +565,12 @@ idct16x16_256_add_neon_pass2
vadd.s32 q4, q4, q1
; dct_const_round_shift(temp1)
- vqrshrn.s32 d4, q5, #14 ; >> 14
- vqrshrn.s32 d5, q6, #14 ; >> 14
+ vrshrn.s32 d4, q5, #14 ; >> 14
+ vrshrn.s32 d5, q6, #14 ; >> 14
; dct_const_round_shift(temp2)
- vqrshrn.s32 d10, q10, #14 ; >> 14
- vqrshrn.s32 d11, q4, #14 ; >> 14
+ vrshrn.s32 d10, q10, #14 ; >> 14
+ vrshrn.s32 d11, q4, #14 ; >> 14
; step1[11] * cospi_16_64
vmull.s16 q0, d22, d14
@@ -589,12 +589,12 @@ idct16x16_256_add_neon_pass2
vadd.s32 q6, q6, q1
; dct_const_round_shift(temp1)
- vqrshrn.s32 d6, q10, #14 ; >> 14
- vqrshrn.s32 d7, q4, #14 ; >> 14
+ vrshrn.s32 d6, q10, #14 ; >> 14
+ vrshrn.s32 d7, q4, #14 ; >> 14
; dct_const_round_shift(temp2)
- vqrshrn.s32 d8, q13, #14 ; >> 14
- vqrshrn.s32 d9, q6, #14 ; >> 14
+ vrshrn.s32 d8, q13, #14 ; >> 14
+ vrshrn.s32 d9, q6, #14 ; >> 14
mov r4, #16 ; pass1_output stride
ldr r3, [sp] ; load skip_adding
@@ -893,12 +893,12 @@ ENDIF ; CONFIG_VP9_HIGHBITDEPTH
vadd.s32 q10, q10, q12
; dct_const_round_shift(temp1)
- vqrshrn.s32 d11, q15, #14 ; >> 14
- vqrshrn.s32 d10, q6, #14 ; >> 14
+ vrshrn.s32 d11, q15, #14 ; >> 14
+ vrshrn.s32 d10, q6, #14 ; >> 14
; dct_const_round_shift(temp2)
- vqrshrn.s32 d12, q9, #14 ; >> 14
- vqrshrn.s32 d13, q10, #14 ; >> 14
+ vrshrn.s32 d12, q9, #14 ; >> 14
+ vrshrn.s32 d13, q10, #14 ; >> 14
; stage 6
vadd.s16 q2, q8, q7 ; step2[0] = step1[0] + step1[7];
@@ -1010,12 +1010,12 @@ ENDIF ; CONFIG_VP9_HIGHBITDEPTH
vdup.16 d30, r12 ; duplicate -cospi_8_64
; dct_const_round_shift(temp1)
- vqrshrn.s32 d2, q12, #14 ; >> 14
- vqrshrn.s32 d3, q5, #14 ; >> 14
+ vrshrn.s32 d2, q12, #14 ; >> 14
+ vrshrn.s32 d3, q5, #14 ; >> 14
; dct_const_round_shift(temp2)
- vqrshrn.s32 d12, q2, #14 ; >> 14
- vqrshrn.s32 d13, q11, #14 ; >> 14
+ vrshrn.s32 d12, q2, #14 ; >> 14
+ vrshrn.s32 d13, q11, #14 ; >> 14
; - step1[13] * cospi_8_64
vmull.s16 q10, d8, d30
@@ -1034,12 +1034,12 @@ ENDIF ; CONFIG_VP9_HIGHBITDEPTH
vmlal.s16 q9, d9, d31
; dct_const_round_shift(temp1)
- vqrshrn.s32 d4, q10, #14 ; >> 14
- vqrshrn.s32 d5, q13, #14 ; >> 14
+ vrshrn.s32 d4, q10, #14 ; >> 14
+ vrshrn.s32 d5, q13, #14 ; >> 14
; dct_const_round_shift(temp2)
- vqrshrn.s32 d10, q8, #14 ; >> 14
- vqrshrn.s32 d11, q9, #14 ; >> 14
+ vrshrn.s32 d10, q8, #14 ; >> 14
+ vrshrn.s32 d11, q9, #14 ; >> 14
; stage 5
vadd.s16 q8, q0, q3 ; step1[8] = step2[8]+step2[11];
@@ -1074,12 +1074,12 @@ ENDIF ; CONFIG_VP9_HIGHBITDEPTH
vadd.s32 q1, q4, q1
; dct_const_round_shift(temp1)
- vqrshrn.s32 d4, q5, #14 ; >> 14
- vqrshrn.s32 d5, q6, #14 ; >> 14
+ vrshrn.s32 d4, q5, #14 ; >> 14
+ vrshrn.s32 d5, q6, #14 ; >> 14
; dct_const_round_shift(temp2)
- vqrshrn.s32 d10, q0, #14 ; >> 14
- vqrshrn.s32 d11, q1, #14 ; >> 14
+ vrshrn.s32 d10, q0, #14 ; >> 14
+ vrshrn.s32 d11, q1, #14 ; >> 14
; step1[11] * cospi_16_64
vmull.s16 q0, d22, d14
@@ -1098,12 +1098,12 @@ ENDIF ; CONFIG_VP9_HIGHBITDEPTH
vadd.s32 q6, q6, q1
; dct_const_round_shift(input_dc * cospi_16_64)
- vqrshrn.s32 d6, q10, #14 ; >> 14
- vqrshrn.s32 d7, q4, #14 ; >> 14
+ vrshrn.s32 d6, q10, #14 ; >> 14
+ vrshrn.s32 d7, q4, #14 ; >> 14
; dct_const_round_shift((step1[11] + step1[12]) * cospi_16_64);
- vqrshrn.s32 d8, q13, #14 ; >> 14
- vqrshrn.s32 d9, q6, #14 ; >> 14
+ vrshrn.s32 d8, q13, #14 ; >> 14
+ vrshrn.s32 d9, q6, #14 ; >> 14
mov r4, #16 ; pass1_output stride
ldr r3, [sp] ; load skip_adding
diff --git a/vpx_dsp/arm/idct16x16_add_neon.c b/vpx_dsp/arm/idct16x16_add_neon.c
index b37063443..4e22b5520 100644
--- a/vpx_dsp/arm/idct16x16_add_neon.c
+++ b/vpx_dsp/arm/idct16x16_add_neon.c
@@ -73,10 +73,10 @@ static void idct16x16_256_add_neon_pass1(const int16x8_t s0, const int16x8_t s1,
d2s16 = vdup_n_s16((int16_t)cospi_12_64);
d3s16 = vdup_n_s16((int16_t)cospi_20_64);
- d8s16 = vqrshrn_n_s32(q2s32, 14);
- d9s16 = vqrshrn_n_s32(q3s32, 14);
- d14s16 = vqrshrn_n_s32(q5s32, 14);
- d15s16 = vqrshrn_n_s32(q6s32, 14);
+ d8s16 = vrshrn_n_s32(q2s32, 14);
+ d9s16 = vrshrn_n_s32(q3s32, 14);
+ d14s16 = vrshrn_n_s32(q5s32, 14);
+ d15s16 = vrshrn_n_s32(q6s32, 14);
q4s16 = vcombine_s16(d8s16, d9s16);
q7s16 = vcombine_s16(d14s16, d15s16);
@@ -90,10 +90,10 @@ static void idct16x16_256_add_neon_pass1(const int16x8_t s0, const int16x8_t s1,
q9s32 = vmlal_s16(q9s32, d22s16, d2s16);
q15s32 = vmlal_s16(q15s32, d23s16, d2s16);
- d10s16 = vqrshrn_n_s32(q2s32, 14);
- d11s16 = vqrshrn_n_s32(q3s32, 14);
- d12s16 = vqrshrn_n_s32(q9s32, 14);
- d13s16 = vqrshrn_n_s32(q15s32, 14);
+ d10s16 = vrshrn_n_s32(q2s32, 14);
+ d11s16 = vrshrn_n_s32(q3s32, 14);
+ d12s16 = vrshrn_n_s32(q9s32, 14);
+ d13s16 = vrshrn_n_s32(q15s32, 14);
q5s16 = vcombine_s16(d10s16, d11s16);
q6s16 = vcombine_s16(d12s16, d13s16);
@@ -113,10 +113,10 @@ static void idct16x16_256_add_neon_pass1(const int16x8_t s0, const int16x8_t s1,
q13s32 = vsubq_s32(q2s32, q0s32);
q1s32 = vsubq_s32(q11s32, q1s32);
- d16s16 = vqrshrn_n_s32(q3s32, 14);
- d17s16 = vqrshrn_n_s32(q12s32, 14);
- d18s16 = vqrshrn_n_s32(q13s32, 14);
- d19s16 = vqrshrn_n_s32(q1s32, 14);
+ d16s16 = vrshrn_n_s32(q3s32, 14);
+ d17s16 = vrshrn_n_s32(q12s32, 14);
+ d18s16 = vrshrn_n_s32(q13s32, 14);
+ d19s16 = vrshrn_n_s32(q1s32, 14);
q8s16 = vcombine_s16(d16s16, d17s16);
q9s16 = vcombine_s16(d18s16, d19s16);
@@ -130,10 +130,10 @@ static void idct16x16_256_add_neon_pass1(const int16x8_t s0, const int16x8_t s1,
q12s32 = vmlsl_s16(q12s32, d28s16, d31s16);
q13s32 = vmlsl_s16(q13s32, d29s16, d31s16);
- d22s16 = vqrshrn_n_s32(q0s32, 14);
- d23s16 = vqrshrn_n_s32(q1s32, 14);
- d20s16 = vqrshrn_n_s32(q12s32, 14);
- d21s16 = vqrshrn_n_s32(q13s32, 14);
+ d22s16 = vrshrn_n_s32(q0s32, 14);
+ d23s16 = vrshrn_n_s32(q1s32, 14);
+ d20s16 = vrshrn_n_s32(q12s32, 14);
+ d21s16 = vrshrn_n_s32(q13s32, 14);
q10s16 = vcombine_s16(d20s16, d21s16);
q11s16 = vcombine_s16(d22s16, d23s16);
@@ -164,10 +164,10 @@ static void idct16x16_256_add_neon_pass1(const int16x8_t s0, const int16x8_t s1,
q9s32 = vaddq_s32(q9s32, q11s32);
q10s32 = vaddq_s32(q10s32, q12s32);
- d10s16 = vqrshrn_n_s32(q6s32, 14);
- d11s16 = vqrshrn_n_s32(q13s32, 14);
- d12s16 = vqrshrn_n_s32(q9s32, 14);
- d13s16 = vqrshrn_n_s32(q10s32, 14);
+ d10s16 = vrshrn_n_s32(q6s32, 14);
+ d11s16 = vrshrn_n_s32(q13s32, 14);
+ d12s16 = vrshrn_n_s32(q9s32, 14);
+ d13s16 = vrshrn_n_s32(q10s32, 14);
q5s16 = vcombine_s16(d10s16, d11s16);
q6s16 = vcombine_s16(d12s16, d13s16);
@@ -329,10 +329,10 @@ static void idct16x16_256_add_neon_pass2(const int16x8_t s0, const int16x8_t s1,
q1s32 = vmlal_s16(q1s32, d30s16, d12s16);
q4s32 = vmlal_s16(q4s32, d31s16, d12s16);
- d0s16 = vqrshrn_n_s32(q2s32, 14);
- d1s16 = vqrshrn_n_s32(q3s32, 14);
- d14s16 = vqrshrn_n_s32(q1s32, 14);
- d15s16 = vqrshrn_n_s32(q4s32, 14);
+ d0s16 = vrshrn_n_s32(q2s32, 14);
+ d1s16 = vrshrn_n_s32(q3s32, 14);
+ d14s16 = vrshrn_n_s32(q1s32, 14);
+ d15s16 = vrshrn_n_s32(q4s32, 14);
q0s16 = vcombine_s16(d0s16, d1s16);
q7s16 = vcombine_s16(d14s16, d15s16);
@@ -349,10 +349,10 @@ static void idct16x16_256_add_neon_pass2(const int16x8_t s0, const int16x8_t s1,
q4s32 = vmlal_s16(q4s32, d22s16, d30s16);
q5s32 = vmlal_s16(q5s32, d23s16, d30s16);
- d2s16 = vqrshrn_n_s32(q2s32, 14);
- d3s16 = vqrshrn_n_s32(q3s32, 14);
- d12s16 = vqrshrn_n_s32(q4s32, 14);
- d13s16 = vqrshrn_n_s32(q5s32, 14);
+ d2s16 = vrshrn_n_s32(q2s32, 14);
+ d3s16 = vrshrn_n_s32(q3s32, 14);
+ d12s16 = vrshrn_n_s32(q4s32, 14);
+ d13s16 = vrshrn_n_s32(q5s32, 14);
q1s16 = vcombine_s16(d2s16, d3s16);
q6s16 = vcombine_s16(d12s16, d13s16);
@@ -369,10 +369,10 @@ static void idct16x16_256_add_neon_pass2(const int16x8_t s0, const int16x8_t s1,
q4s32 = vmlal_s16(q4s32, d26s16, d30s16);
q5s32 = vmlal_s16(q5s32, d27s16, d30s16);
- d4s16 = vqrshrn_n_s32(q11s32, 14);
- d5s16 = vqrshrn_n_s32(q12s32, 14);
- d11s16 = vqrshrn_n_s32(q5s32, 14);
- d10s16 = vqrshrn_n_s32(q4s32, 14);
+ d4s16 = vrshrn_n_s32(q11s32, 14);
+ d5s16 = vrshrn_n_s32(q12s32, 14);
+ d11s16 = vrshrn_n_s32(q5s32, 14);
+ d10s16 = vrshrn_n_s32(q4s32, 14);
q2s16 = vcombine_s16(d4s16, d5s16);
q5s16 = vcombine_s16(d10s16, d11s16);
@@ -389,10 +389,10 @@ static void idct16x16_256_add_neon_pass2(const int16x8_t s0, const int16x8_t s1,
q12s32 = vmlal_s16(q12s32, d18s16, d30s16);
q13s32 = vmlal_s16(q13s32, d19s16, d30s16);
- d6s16 = vqrshrn_n_s32(q10s32, 14);
- d7s16 = vqrshrn_n_s32(q11s32, 14);
- d8s16 = vqrshrn_n_s32(q12s32, 14);
- d9s16 = vqrshrn_n_s32(q13s32, 14);
+ d6s16 = vrshrn_n_s32(q10s32, 14);
+ d7s16 = vrshrn_n_s32(q11s32, 14);
+ d8s16 = vrshrn_n_s32(q12s32, 14);
+ d9s16 = vrshrn_n_s32(q13s32, 14);
q3s16 = vcombine_s16(d6s16, d7s16);
q4s16 = vcombine_s16(d8s16, d9s16);
@@ -429,10 +429,10 @@ static void idct16x16_256_add_neon_pass2(const int16x8_t s0, const int16x8_t s1,
q4s32 = vmlsl_s16(q4s32, d18s16, d30s16);
q5s32 = vmlsl_s16(q5s32, d19s16, d30s16);
- d12s16 = vqrshrn_n_s32(q2s32, 14);
- d13s16 = vqrshrn_n_s32(q3s32, 14);
- d2s16 = vqrshrn_n_s32(q4s32, 14);
- d3s16 = vqrshrn_n_s32(q5s32, 14);
+ d12s16 = vrshrn_n_s32(q2s32, 14);
+ d13s16 = vrshrn_n_s32(q3s32, 14);
+ d2s16 = vrshrn_n_s32(q4s32, 14);
+ d3s16 = vrshrn_n_s32(q5s32, 14);
q1s16 = vcombine_s16(d2s16, d3s16);
q6s16 = vcombine_s16(d12s16, d13s16);
@@ -450,10 +450,10 @@ static void idct16x16_256_add_neon_pass2(const int16x8_t s0, const int16x8_t s1,
q8s32 = vmlal_s16(q8s32, d26s16, d31s16);
q9s32 = vmlal_s16(q9s32, d27s16, d31s16);
- d4s16 = vqrshrn_n_s32(q11s32, 14);
- d5s16 = vqrshrn_n_s32(q12s32, 14);
- d10s16 = vqrshrn_n_s32(q8s32, 14);
- d11s16 = vqrshrn_n_s32(q9s32, 14);
+ d4s16 = vrshrn_n_s32(q11s32, 14);
+ d5s16 = vrshrn_n_s32(q12s32, 14);
+ d10s16 = vrshrn_n_s32(q8s32, 14);
+ d11s16 = vrshrn_n_s32(q9s32, 14);
q2s16 = vcombine_s16(d4s16, d5s16);
q5s16 = vcombine_s16(d10s16, d11s16);
@@ -489,10 +489,10 @@ static void idct16x16_256_add_neon_pass2(const int16x8_t s0, const int16x8_t s1,
q10s32 = vaddq_s32(q3s32, q0s32);
q4s32 = vaddq_s32(q4s32, q1s32);
- d4s16 = vqrshrn_n_s32(q5s32, 14);
- d5s16 = vqrshrn_n_s32(q6s32, 14);
- d10s16 = vqrshrn_n_s32(q10s32, 14);
- d11s16 = vqrshrn_n_s32(q4s32, 14);
+ d4s16 = vrshrn_n_s32(q5s32, 14);
+ d5s16 = vrshrn_n_s32(q6s32, 14);
+ d10s16 = vrshrn_n_s32(q10s32, 14);
+ d11s16 = vrshrn_n_s32(q4s32, 14);
q2s16 = vcombine_s16(d4s16, d5s16);
q5s16 = vcombine_s16(d10s16, d11s16);
@@ -506,10 +506,10 @@ static void idct16x16_256_add_neon_pass2(const int16x8_t s0, const int16x8_t s1,
q13s32 = vaddq_s32(q13s32, q0s32);
q6s32 = vaddq_s32(q6s32, q1s32);
- d6s16 = vqrshrn_n_s32(q10s32, 14);
- d7s16 = vqrshrn_n_s32(q4s32, 14);
- d8s16 = vqrshrn_n_s32(q13s32, 14);
- d9s16 = vqrshrn_n_s32(q6s32, 14);
+ d6s16 = vrshrn_n_s32(q10s32, 14);
+ d7s16 = vrshrn_n_s32(q4s32, 14);
+ d8s16 = vrshrn_n_s32(q13s32, 14);
+ d9s16 = vrshrn_n_s32(q6s32, 14);
q3s16 = vcombine_s16(d6s16, d7s16);
q4s16 = vcombine_s16(d8s16, d9s16);
@@ -938,10 +938,10 @@ void vpx_idct16x16_10_add_neon_pass1(const tran_low_t *in, int16_t *out) {
q9s32 = vaddq_s32(q9s32, q11s32);
q10s32 = vaddq_s32(q10s32, q12s32);
- d11s16 = vqrshrn_n_s32(q15s32, 14);
- d10s16 = vqrshrn_n_s32(q6s32, 14);
- d12s16 = vqrshrn_n_s32(q9s32, 14);
- d13s16 = vqrshrn_n_s32(q10s32, 14);
+ d11s16 = vrshrn_n_s32(q15s32, 14);
+ d10s16 = vrshrn_n_s32(q6s32, 14);
+ d12s16 = vrshrn_n_s32(q9s32, 14);
+ d13s16 = vrshrn_n_s32(q10s32, 14);
q5s16 = vcombine_s16(d10s16, d11s16);
q6s16 = vcombine_s16(d12s16, d13s16);
@@ -1049,10 +1049,10 @@ void vpx_idct16x16_10_add_neon_pass2(const tran_low_t *src, int16_t *out,
q2s32 = vmlal_s16(q2s32, d14s16, d30s16);
q11s32 = vmlal_s16(q11s32, d15s16, d30s16);
- d2s16 = vqrshrn_n_s32(q12s32, 14);
- d3s16 = vqrshrn_n_s32(q5s32, 14);
- d12s16 = vqrshrn_n_s32(q2s32, 14);
- d13s16 = vqrshrn_n_s32(q11s32, 14);
+ d2s16 = vrshrn_n_s32(q12s32, 14);
+ d3s16 = vrshrn_n_s32(q5s32, 14);
+ d12s16 = vrshrn_n_s32(q2s32, 14);
+ d13s16 = vrshrn_n_s32(q11s32, 14);
q1s16 = vcombine_s16(d2s16, d3s16);
q6s16 = vcombine_s16(d12s16, d13s16);
@@ -1067,10 +1067,10 @@ void vpx_idct16x16_10_add_neon_pass2(const tran_low_t *src, int16_t *out,
q8s32 = vmlal_s16(q8s32, d8s16, d31s16);
q9s32 = vmlal_s16(q9s32, d9s16, d31s16);
- d4s16 = vqrshrn_n_s32(q10s32, 14);
- d5s16 = vqrshrn_n_s32(q13s32, 14);
- d10s16 = vqrshrn_n_s32(q8s32, 14);
- d11s16 = vqrshrn_n_s32(q9s32, 14);
+ d4s16 = vrshrn_n_s32(q10s32, 14);
+ d5s16 = vrshrn_n_s32(q13s32, 14);
+ d10s16 = vrshrn_n_s32(q8s32, 14);
+ d11s16 = vrshrn_n_s32(q9s32, 14);
q2s16 = vcombine_s16(d4s16, d5s16);
q5s16 = vcombine_s16(d10s16, d11s16);
@@ -1105,10 +1105,10 @@ void vpx_idct16x16_10_add_neon_pass2(const tran_low_t *src, int16_t *out,
q0s32 = vaddq_s32(q3s32, q0s32);
q4s32 = vaddq_s32(q4s32, q1s32);
- d4s16 = vqrshrn_n_s32(q5s32, 14);
- d5s16 = vqrshrn_n_s32(q6s32, 14);
- d10s16 = vqrshrn_n_s32(q0s32, 14);
- d11s16 = vqrshrn_n_s32(q4s32, 14);
+ d4s16 = vrshrn_n_s32(q5s32, 14);
+ d5s16 = vrshrn_n_s32(q6s32, 14);
+ d10s16 = vrshrn_n_s32(q0s32, 14);
+ d11s16 = vrshrn_n_s32(q4s32, 14);
q2s16 = vcombine_s16(d4s16, d5s16);
q5s16 = vcombine_s16(d10s16, d11s16);
@@ -1122,10 +1122,10 @@ void vpx_idct16x16_10_add_neon_pass2(const tran_low_t *src, int16_t *out,
q13s32 = vaddq_s32(q13s32, q0s32);
q6s32 = vaddq_s32(q6s32, q1s32);
- d6s16 = vqrshrn_n_s32(q10s32, 14);
- d7s16 = vqrshrn_n_s32(q4s32, 14);
- d8s16 = vqrshrn_n_s32(q13s32, 14);
- d9s16 = vqrshrn_n_s32(q6s32, 14);
+ d6s16 = vrshrn_n_s32(q10s32, 14);
+ d7s16 = vrshrn_n_s32(q4s32, 14);
+ d8s16 = vrshrn_n_s32(q13s32, 14);
+ d9s16 = vrshrn_n_s32(q6s32, 14);
q3s16 = vcombine_s16(d6s16, d7s16);
q4s16 = vcombine_s16(d8s16, d9s16);
diff --git a/vpx_dsp/arm/idct32x32_add_neon.c b/vpx_dsp/arm/idct32x32_add_neon.c
index 4eff9b970..c3a765101 100644
--- a/vpx_dsp/arm/idct32x32_add_neon.c
+++ b/vpx_dsp/arm/idct32x32_add_neon.c
@@ -146,8 +146,8 @@ static INLINE void DO_BUTTERFLY(int16x8_t q14s16, int16x8_t q13s16,
q11s32 = vaddq_s32(q12s32, q11s32);
q10s32 = vaddq_s32(q10s32, q15s32);
- *qAs16 = vcombine_s16(vqrshrn_n_s32(q8s32, 14), vqrshrn_n_s32(q9s32, 14));
- *qBs16 = vcombine_s16(vqrshrn_n_s32(q11s32, 14), vqrshrn_n_s32(q10s32, 14));
+ *qAs16 = vcombine_s16(vrshrn_n_s32(q8s32, 14), vrshrn_n_s32(q9s32, 14));
+ *qBs16 = vcombine_s16(vrshrn_n_s32(q11s32, 14), vrshrn_n_s32(q10s32, 14));
}
static INLINE void idct32_transpose_pair(const int16_t *input, int16_t *t_buf) {
diff --git a/vpx_dsp/arm/idct4x4_add_neon.asm b/vpx_dsp/arm/idct4x4_add_neon.asm
index cb96d4f94..1550785a9 100644
--- a/vpx_dsp/arm/idct4x4_add_neon.asm
+++ b/vpx_dsp/arm/idct4x4_add_neon.asm
@@ -88,10 +88,10 @@
vmlal.s16 q1, d19, d22
; dct_const_round_shift
- vqrshrn.s32 d26, q13, #14
- vqrshrn.s32 d27, q14, #14
- vqrshrn.s32 d29, q15, #14
- vqrshrn.s32 d28, q1, #14
+ vrshrn.s32 d26, q13, #14
+ vrshrn.s32 d27, q14, #14
+ vrshrn.s32 d29, q15, #14
+ vrshrn.s32 d28, q1, #14
; stage 2
; output[0] = step[0] + step[3];
@@ -139,10 +139,10 @@
vmlal.s16 q1, d19, d22
; dct_const_round_shift
- vqrshrn.s32 d26, q13, #14
- vqrshrn.s32 d27, q14, #14
- vqrshrn.s32 d29, q15, #14
- vqrshrn.s32 d28, q1, #14
+ vrshrn.s32 d26, q13, #14
+ vrshrn.s32 d27, q14, #14
+ vrshrn.s32 d29, q15, #14
+ vrshrn.s32 d28, q1, #14
; stage 2
; output[0] = step[0] + step[3];
diff --git a/vpx_dsp/arm/idct8x8_add_neon.asm b/vpx_dsp/arm/idct8x8_add_neon.asm
index a5c9c927d..b58bf0ccd 100644
--- a/vpx_dsp/arm/idct8x8_add_neon.asm
+++ b/vpx_dsp/arm/idct8x8_add_neon.asm
@@ -47,12 +47,12 @@
vmlsl.s16 q6, d23, d3
; dct_const_round_shift(input_dc * cospi_16_64)
- vqrshrn.s32 d8, q2, #14 ; >> 14
- vqrshrn.s32 d9, q3, #14 ; >> 14
+ vrshrn.s32 d8, q2, #14 ; >> 14
+ vrshrn.s32 d9, q3, #14 ; >> 14
; dct_const_round_shift(input_dc * cospi_16_64)
- vqrshrn.s32 d10, q5, #14 ; >> 14
- vqrshrn.s32 d11, q6, #14 ; >> 14
+ vrshrn.s32 d10, q5, #14 ; >> 14
+ vrshrn.s32 d11, q6, #14 ; >> 14
; input[1] * cospi_4_64
vmull.s16 q2, d18, d1
@@ -71,15 +71,15 @@
vmlal.s16 q13, d23, d2
; dct_const_round_shift(input_dc * cospi_16_64)
- vqrshrn.s32 d14, q2, #14 ; >> 14
- vqrshrn.s32 d15, q3, #14 ; >> 14
+ vrshrn.s32 d14, q2, #14 ; >> 14
+ vrshrn.s32 d15, q3, #14 ; >> 14
; stage 2 & stage 3 - even half
vdup.16 d0, r7 ; duplicate cospi_16_64
; dct_const_round_shift(input_dc * cospi_16_64)
- vqrshrn.s32 d12, q9, #14 ; >> 14
- vqrshrn.s32 d13, q13, #14 ; >> 14
+ vrshrn.s32 d12, q9, #14 ; >> 14
+ vrshrn.s32 d13, q13, #14 ; >> 14
; input[0] * cospi_16_64
vmull.s16 q2, d16, d0
@@ -101,12 +101,12 @@
vdup.16 d1, r9 ; duplicate cospi_8_64
; dct_const_round_shift(input_dc * cospi_16_64)
- vqrshrn.s32 d18, q2, #14 ; >> 14
- vqrshrn.s32 d19, q3, #14 ; >> 14
+ vrshrn.s32 d18, q2, #14 ; >> 14
+ vrshrn.s32 d19, q3, #14 ; >> 14
; dct_const_round_shift(input_dc * cospi_16_64)
- vqrshrn.s32 d22, q13, #14 ; >> 14
- vqrshrn.s32 d23, q15, #14 ; >> 14
+ vrshrn.s32 d22, q13, #14 ; >> 14
+ vrshrn.s32 d23, q15, #14 ; >> 14
; input[1] * cospi_24_64 - input[3] * cospi_8_64
; input[1] * cospi_24_64
@@ -126,12 +126,12 @@
vmlal.s16 q12, d29, d0
; dct_const_round_shift(input_dc * cospi_16_64)
- vqrshrn.s32 d26, q2, #14 ; >> 14
- vqrshrn.s32 d27, q3, #14 ; >> 14
+ vrshrn.s32 d26, q2, #14 ; >> 14
+ vrshrn.s32 d27, q3, #14 ; >> 14
; dct_const_round_shift(input_dc * cospi_16_64)
- vqrshrn.s32 d30, q8, #14 ; >> 14
- vqrshrn.s32 d31, q12, #14 ; >> 14
+ vrshrn.s32 d30, q8, #14 ; >> 14
+ vrshrn.s32 d31, q12, #14 ; >> 14
vadd.s16 q0, q9, q15 ; output[0] = step[0] + step[3]
vadd.s16 q1, q11, q13 ; output[1] = step[1] + step[2]
@@ -164,12 +164,12 @@
vmlal.s16 q12, d27, d16
; dct_const_round_shift(input_dc * cospi_16_64)
- vqrshrn.s32 d10, q9, #14 ; >> 14
- vqrshrn.s32 d11, q10, #14 ; >> 14
+ vrshrn.s32 d10, q9, #14 ; >> 14
+ vrshrn.s32 d11, q10, #14 ; >> 14
; dct_const_round_shift(input_dc * cospi_16_64)
- vqrshrn.s32 d12, q11, #14 ; >> 14
- vqrshrn.s32 d13, q12, #14 ; >> 14
+ vrshrn.s32 d12, q11, #14 ; >> 14
+ vrshrn.s32 d13, q12, #14 ; >> 14
; stage 4
vadd.s16 q8, q0, q7 ; output[0] = step1[0] + step1[7];
@@ -423,12 +423,12 @@
vmlal.s16 q12, d27, d16
; dct_const_round_shift(input_dc * cospi_16_64)
- vqrshrn.s32 d10, q9, #14 ; >> 14
- vqrshrn.s32 d11, q10, #14 ; >> 14
+ vrshrn.s32 d10, q9, #14 ; >> 14
+ vrshrn.s32 d11, q10, #14 ; >> 14
; dct_const_round_shift(input_dc * cospi_16_64)
- vqrshrn.s32 d12, q11, #14 ; >> 14
- vqrshrn.s32 d13, q12, #14 ; >> 14
+ vrshrn.s32 d12, q11, #14 ; >> 14
+ vrshrn.s32 d13, q12, #14 ; >> 14
; stage 4
vadd.s16 q8, q0, q7 ; output[0] = step1[0] + step1[7];