From patchwork Wed Mar 8 10:01:11 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?q?Martin_Storsj=C3=B6?= X-Patchwork-Id: 2817 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.103.50.79 with SMTP id y76csp953710vsy; Wed, 8 Mar 2017 02:04:22 -0800 (PST) X-Received: by 10.223.134.98 with SMTP id 31mr4909392wrw.69.1488967462271; Wed, 08 Mar 2017 02:04:22 -0800 (PST) Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id y130si22562990wmg.56.2017.03.08.02.04.21; Wed, 08 Mar 2017 02:04:22 -0800 (PST) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@martin-st.20150623.gappssmtp.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id EDBCE688314; Wed, 8 Mar 2017 12:01:30 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-lf0-f46.google.com (mail-lf0-f46.google.com [209.85.215.46]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 019146882FC for ; Wed, 8 Mar 2017 12:01:28 +0200 (EET) Received: by mail-lf0-f46.google.com with SMTP id y193so12359402lfd.3 for ; Wed, 08 Mar 2017 02:01:42 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=martin-st.20150623.gappssmtp.com; s=20150623; h=from:to:subject:date:message-id:in-reply-to:references; bh=yhiD6Nfzp9GL2yjgWf714t3KzTsgoCLVUy9mmQa0lfw=; b=bG0UZKcCjrKzfOTcbMiLaEQu6bPHSnkbIZcc4UGjGCweQEq1KDPc4dKHEeg8E8VQqt cSIFEKwZcj8AjrOzzN8weIql1H2dMEemdr5xJhj2meYRmAf6pspiEVUaCjeG3xCY5AFO NV2uAXRd/hUSKccSkQZikcDwLOLKmisPa4z1rC/l4RU+5Lx2lF9CXa9DgqfGhhCAstl6 Eff3T8mARce2aqE6n42DYYTREPcht5rQFF7p7Mjxq7xeZHTrHZYpBLpecDzebnMgl+8+ pW44ny1YI0aLxYJc30yh3e+nZd5uOVxypv+oSYGOjPSMazJnmJ8F08kVbDoLd+p7CFsf Arxg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references; bh=yhiD6Nfzp9GL2yjgWf714t3KzTsgoCLVUy9mmQa0lfw=; b=d5NUHibGYbBf2z/vKehJ89DFNG4OOyHQ9R1MMrOqFjBhLjucKCgs6uuEcreETd7Zjw 0yxclaq99Ks1osohi8E+Kw14FN+waxdoKchMAC/TyGZs53qm1Z6jWGKW06Lj4X4sQZwF ygIVUxZEorjGZowLMhHVxxe+FgeWTGrCqwe0M8F1GKPye3r2/9MeJFgNI+URpt9kQMwC pwLgorxoNTdn/SfoMjC5eP5SfAuk3n4aAl2nKyBTQNKd9mZPIuoXOXK8FXX1aQ7GeE2N 7H+sSO1hlXQOEMVgmaHl7yvs0szBtYdHgHRUQnJUFCVrw3Woeb/XF7ijucvz/e8hgaaQ Gqtg== X-Gm-Message-State: AMke39mWPK9edb/fH2A/Shcpu9aAdp2EZHyw5MWV/ybJUCADxvqhAtjia2TI2iXFUjdzGw== X-Received: by 10.46.19.25 with SMTP id 25mr1819836ljt.103.1488967301505; Wed, 08 Mar 2017 02:01:41 -0800 (PST) Received: from localhost.localdomain ([2001:470:28:852:7d47:68e:13e8:4933]) by smtp.gmail.com with ESMTPSA id m127sm513064lfg.58.2017.03.08.02.01.40 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 08 Mar 2017 02:01:41 -0800 (PST) From: =?UTF-8?q?Martin=20Storsj=C3=B6?= To: ffmpeg-devel@ffmpeg.org Date: Wed, 8 Mar 2017 12:01:11 +0200 Message-Id: <1488967274-8143-31-git-send-email-martin@martin.st> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1488967274-8143-1-git-send-email-martin@martin.st> References: <1488967274-8143-1-git-send-email-martin@martin.st> Subject: [FFmpeg-devel] [PATCH 31/34] arm: vp9itxfm: Reorder the idct coefficients for better pairing X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" All elements are used pairwise, except for the first one. Previously, the 16th element was unused. Move the unused element to the second slot, to make the later element pairs not split across registers. This simplifies loading only parts of the coefficients, reducing the difference to the 16 bpp version. This is cherrypicked from libav commit de06bdfe6c8abd8266d5c6f5c68e4df0060b61fc. --- libavcodec/arm/vp9itxfm_neon.S | 124 ++++++++++++++++++++--------------------- 1 file changed, 62 insertions(+), 62 deletions(-) diff --git a/libavcodec/arm/vp9itxfm_neon.S b/libavcodec/arm/vp9itxfm_neon.S index 9385b01..05e31e6 100644 --- a/libavcodec/arm/vp9itxfm_neon.S +++ b/libavcodec/arm/vp9itxfm_neon.S @@ -22,7 +22,7 @@ #include "neon.S" const itxfm4_coeffs, align=4 - .short 11585, 6270, 15137, 0 + .short 11585, 0, 6270, 15137 iadst4_coeffs: .short 5283, 15212, 9929, 13377 endconst @@ -30,8 +30,8 @@ endconst const iadst8_coeffs, align=4 .short 16305, 1606, 14449, 7723, 10394, 12665, 4756, 15679 idct_coeffs: - .short 11585, 6270, 15137, 3196, 16069, 13623, 9102, 1606 - .short 16305, 12665, 10394, 7723, 14449, 15679, 4756, 0 + .short 11585, 0, 6270, 15137, 3196, 16069, 13623, 9102 + .short 1606, 16305, 12665, 10394, 7723, 14449, 15679, 4756 .short 804, 16364, 12140, 11003, 7005, 14811, 15426, 5520 .short 3981, 15893, 14053, 8423, 9760, 13160, 16207, 2404 endconst @@ -224,14 +224,14 @@ endconst .endm .macro idct4 c0, c1, c2, c3 - vmull.s16 q13, \c1, d0[2] - vmull.s16 q11, \c1, d0[1] + vmull.s16 q13, \c1, d0[3] + vmull.s16 q11, \c1, d0[2] vadd.i16 d16, \c0, \c2 vsub.i16 d17, \c0, \c2 - vmlal.s16 q13, \c3, d0[1] + vmlal.s16 q13, \c3, d0[2] vmull.s16 q9, d16, d0[0] vmull.s16 q10, d17, d0[0] - vmlsl.s16 q11, \c3, d0[2] + vmlsl.s16 q11, \c3, d0[3] vrshrn.s32 d26, q13, #14 vrshrn.s32 d18, q9, #14 vrshrn.s32 d20, q10, #14 @@ -350,9 +350,9 @@ itxfm_func4x4 iwht, iwht .macro idct8 dmbutterfly0 d16, d17, d24, d25, q8, q12, q2, q4, d4, d5, d8, d9, q3, q2, q5, q4 @ q8 = t0a, q12 = t1a - dmbutterfly d20, d21, d28, d29, d0[1], d0[2], q2, q3, q4, q5 @ q10 = t2a, q14 = t3a - dmbutterfly d18, d19, d30, d31, d0[3], d1[0], q2, q3, q4, q5 @ q9 = t4a, q15 = t7a - dmbutterfly d26, d27, d22, d23, d1[1], d1[2], q2, q3, q4, q5 @ q13 = t5a, q11 = t6a + dmbutterfly d20, d21, d28, d29, d0[2], d0[3], q2, q3, q4, q5 @ q10 = t2a, q14 = t3a + dmbutterfly d18, d19, d30, d31, d1[0], d1[1], q2, q3, q4, q5 @ q9 = t4a, q15 = t7a + dmbutterfly d26, d27, d22, d23, d1[2], d1[3], q2, q3, q4, q5 @ q13 = t5a, q11 = t6a butterfly q2, q14, q8, q14 @ q2 = t0, q14 = t3 butterfly q3, q10, q12, q10 @ q3 = t1, q10 = t2 @@ -386,8 +386,8 @@ itxfm_func4x4 iwht, iwht vneg.s16 q15, q15 @ q15 = out[7] butterfly q8, q9, q11, q9 @ q8 = out[0], q9 = t2 - dmbutterfly_l q10, q11, q5, q7, d4, d5, d6, d7, d0[1], d0[2] @ q10,q11 = t5a, q5,q7 = t4a - dmbutterfly_l q2, q3, q13, q14, d12, d13, d8, d9, d0[2], d0[1] @ q2,q3 = t6a, q13,q14 = t7a + dmbutterfly_l q10, q11, q5, q7, d4, d5, d6, d7, d0[2], d0[3] @ q10,q11 = t5a, q5,q7 = t4a + dmbutterfly_l q2, q3, q13, q14, d12, d13, d8, d9, d0[3], d0[2] @ q2,q3 = t6a, q13,q14 = t7a dbutterfly_n d28, d29, d8, d9, q10, q11, q13, q14, q4, q6, q10, q11 @ q14 = out[6], q4 = t7 @@ -594,13 +594,13 @@ endfunc function idct16 mbutterfly0 d16, d24, d16, d24, d4, d6, q2, q3 @ d16 = t0a, d24 = t1a - mbutterfly d20, d28, d0[1], d0[2], q2, q3 @ d20 = t2a, d28 = t3a - mbutterfly d18, d30, d0[3], d1[0], q2, q3 @ d18 = t4a, d30 = t7a - mbutterfly d26, d22, d1[1], d1[2], q2, q3 @ d26 = t5a, d22 = t6a - mbutterfly d17, d31, d1[3], d2[0], q2, q3 @ d17 = t8a, d31 = t15a - mbutterfly d25, d23, d2[1], d2[2], q2, q3 @ d25 = t9a, d23 = t14a - mbutterfly d21, d27, d2[3], d3[0], q2, q3 @ d21 = t10a, d27 = t13a - mbutterfly d29, d19, d3[1], d3[2], q2, q3 @ d29 = t11a, d19 = t12a + mbutterfly d20, d28, d0[2], d0[3], q2, q3 @ d20 = t2a, d28 = t3a + mbutterfly d18, d30, d1[0], d1[1], q2, q3 @ d18 = t4a, d30 = t7a + mbutterfly d26, d22, d1[2], d1[3], q2, q3 @ d26 = t5a, d22 = t6a + mbutterfly d17, d31, d2[0], d2[1], q2, q3 @ d17 = t8a, d31 = t15a + mbutterfly d25, d23, d2[2], d2[3], q2, q3 @ d25 = t9a, d23 = t14a + mbutterfly d21, d27, d3[0], d3[1], q2, q3 @ d21 = t10a, d27 = t13a + mbutterfly d29, d19, d3[2], d3[3], q2, q3 @ d29 = t11a, d19 = t12a butterfly d4, d28, d16, d28 @ d4 = t0, d28 = t3 butterfly d5, d20, d24, d20 @ d5 = t1, d20 = t2 @@ -612,20 +612,20 @@ function idct16 butterfly d29, d23, d31, d23 @ d29 = t15, d23 = t14 mbutterfly0 d22, d26, d22, d26, d18, d30, q9, q15 @ d22 = t6a, d26 = t5a - mbutterfly d23, d25, d0[1], d0[2], q9, q15 @ d23 = t9a, d25 = t14a - mbutterfly d27, d21, d0[1], d0[2], q9, q15, neg=1 @ d27 = t13a, d21 = t10a + mbutterfly d23, d25, d0[2], d0[3], q9, q15 @ d23 = t9a, d25 = t14a + mbutterfly d27, d21, d0[2], d0[3], q9, q15, neg=1 @ d27 = t13a, d21 = t10a idct16_end endfunc function idct16_half mbutterfly0_h d16, d24, d16, d24, d4, d6, q2, q3 @ d16 = t0a, d24 = t1a - mbutterfly_h1 d20, d28, d0[1], d0[2], q2, q3 @ d20 = t2a, d28 = t3a - mbutterfly_h1 d18, d30, d0[3], d1[0], q2, q3 @ d18 = t4a, d30 = t7a - mbutterfly_h2 d26, d22, d1[1], d1[2], q2, q3 @ d26 = t5a, d22 = t6a - mbutterfly_h1 d17, d31, d1[3], d2[0], q2, q3 @ d17 = t8a, d31 = t15a - mbutterfly_h2 d25, d23, d2[1], d2[2], q2, q3 @ d25 = t9a, d23 = t14a - mbutterfly_h1 d21, d27, d2[3], d3[0], q2, q3 @ d21 = t10a, d27 = t13a - mbutterfly_h2 d29, d19, d3[1], d3[2], q2, q3 @ d29 = t11a, d19 = t12a + mbutterfly_h1 d20, d28, d0[2], d0[3], q2, q3 @ d20 = t2a, d28 = t3a + mbutterfly_h1 d18, d30, d1[0], d1[1], q2, q3 @ d18 = t4a, d30 = t7a + mbutterfly_h2 d26, d22, d1[2], d1[3], q2, q3 @ d26 = t5a, d22 = t6a + mbutterfly_h1 d17, d31, d2[0], d2[1], q2, q3 @ d17 = t8a, d31 = t15a + mbutterfly_h2 d25, d23, d2[2], d2[3], q2, q3 @ d25 = t9a, d23 = t14a + mbutterfly_h1 d21, d27, d3[0], d3[1], q2, q3 @ d21 = t10a, d27 = t13a + mbutterfly_h2 d29, d19, d3[2], d3[3], q2, q3 @ d29 = t11a, d19 = t12a butterfly d4, d28, d16, d28 @ d4 = t0, d28 = t3 butterfly d5, d20, d24, d20 @ d5 = t1, d20 = t2 @@ -637,19 +637,19 @@ function idct16_half butterfly d29, d23, d31, d23 @ d29 = t15, d23 = t14 mbutterfly0 d22, d26, d22, d26, d18, d30, q9, q15 @ d22 = t6a, d26 = t5a - mbutterfly d23, d25, d0[1], d0[2], q9, q15 @ d23 = t9a, d25 = t14a - mbutterfly d27, d21, d0[1], d0[2], q9, q15, neg=1 @ d27 = t13a, d21 = t10a + mbutterfly d23, d25, d0[2], d0[3], q9, q15 @ d23 = t9a, d25 = t14a + mbutterfly d27, d21, d0[2], d0[3], q9, q15, neg=1 @ d27 = t13a, d21 = t10a idct16_end endfunc function idct16_quarter - vmull.s16 q12, d19, d3[2] - vmull.s16 q2, d17, d1[3] - vmull.s16 q3, d18, d1[0] - vmull.s16 q15, d18, d0[3] + vmull.s16 q12, d19, d3[3] + vmull.s16 q2, d17, d2[0] + vmull.s16 q3, d18, d1[1] + vmull.s16 q15, d18, d1[0] vneg.s32 q12, q12 - vmull.s16 q14, d17, d2[0] - vmull.s16 q13, d19, d3[1] + vmull.s16 q14, d17, d2[1] + vmull.s16 q13, d19, d3[2] vmull.s16 q11, d16, d0[0] vrshrn.s32 d24, q12, #14 vrshrn.s32 d16, q2, #14 @@ -659,8 +659,8 @@ function idct16_quarter vrshrn.s32 d17, q13, #14 vrshrn.s32 d28, q11, #14 - mbutterfly_l q10, q11, d17, d24, d0[1], d0[2] - mbutterfly_l q9, q15, d29, d16, d0[1], d0[2] + mbutterfly_l q10, q11, d17, d24, d0[2], d0[3] + mbutterfly_l q9, q15, d29, d16, d0[2], d0[3] vneg.s32 q11, q11 vrshrn.s32 d27, q10, #14 vrshrn.s32 d21, q11, #14 @@ -697,16 +697,16 @@ function iadst16 movrel r12, idct_coeffs vld1.16 {q0}, [r12,:128] butterfly_n d22, d30, q3, q5, q6, q5 @ d22 = t7a, d30 = t15a - mbutterfly_l q7, q6, d23, d24, d0[3], d1[0] @ q7 = t9, q6 = t8 + mbutterfly_l q7, q6, d23, d24, d1[0], d1[1] @ q7 = t9, q6 = t8 butterfly_n d25, d17, q2, q4, q3, q4 @ d25 = t6a, d17 = t14a - mbutterfly_l q2, q3, d28, d19, d1[0], d0[3] @ q2 = t12, q3 = t13 + mbutterfly_l q2, q3, d28, d19, d1[1], d1[0] @ q2 = t12, q3 = t13 butterfly_n d23, d19, q6, q2, q4, q2 @ d23 = t8a, d19 = t12a - mbutterfly_l q5, q4, d21, d26, d1[1], d1[2] @ q5 = t11, q4 = t10 + mbutterfly_l q5, q4, d21, d26, d1[2], d1[3] @ q5 = t11, q4 = t10 butterfly_r d4, d27, d16, d27 @ d4 = t4, d27 = t0 butterfly_n d24, d28, q7, q3, q6, q3 @ d24 = t9a, d28 = t13a - mbutterfly_l q6, q7, d30, d17, d1[2], d1[1] @ q6 = t14, q7 = t15 + mbutterfly_l q6, q7, d30, d17, d1[3], d1[2] @ q6 = t14, q7 = t15 butterfly_r d5, d20, d31, d20 @ d5 = t5, d20 = t1 butterfly_n d21, d17, q4, q6, q3, q6 @ d21 = t10a, d17 = t14a butterfly_n d26, d30, q5, q7, q4, q7 @ d26 = t11a, d30 = t15a @@ -714,15 +714,15 @@ function iadst16 butterfly_r d6, d25, d18, d25 @ d6 = t6, d25 = t2 butterfly_r d7, d22, d29, d22 @ d7 = t7, d22 = t3 - mbutterfly_l q5, q4, d19, d28, d0[1], d0[2] @ q5 = t13, q4 = t12 - mbutterfly_l q6, q7, d30, d17, d0[2], d0[1] @ q6 = t14, q7 = t15 + mbutterfly_l q5, q4, d19, d28, d0[2], d0[3] @ q5 = t13, q4 = t12 + mbutterfly_l q6, q7, d30, d17, d0[3], d0[2] @ q6 = t14, q7 = t15 butterfly_n d18, d30, q4, q6, q8, q6 @ d18 = out[2], d30 = t14a butterfly_n d29, d17, q5, q7, q6, q7 @ d29 = -out[13], d17 = t15a vneg.s16 d29, d29 @ d29 = out[13] - mbutterfly_l q5, q4, d4, d5, d0[1], d0[2] @ q5 = t5a, q4 = t4a - mbutterfly_l q6, q7, d7, d6, d0[2], d0[1] @ q6 = t6a, q7 = t7a + mbutterfly_l q5, q4, d4, d5, d0[2], d0[3] @ q5 = t5a, q4 = t4a + mbutterfly_l q6, q7, d7, d6, d0[3], d0[2] @ q6 = t6a, q7 = t7a butterfly d2, d6, d27, d25 @ d2 = out[0], d6 = t2a butterfly d3, d7, d23, d21 @ d3 =-out[1], d7 = t10 @@ -1194,10 +1194,10 @@ endfunc butterfly d11, d29, d29, d31 @ d11 = t31a, d29 = t28a butterfly d22, d27, d24, d27 @ d22 = t30, d27 = t29 - mbutterfly d27, d20, d0[1], d0[2], q12, q15 @ d27 = t18a, d20 = t29a - mbutterfly d29, d9, d0[1], d0[2], q12, q15 @ d29 = t19, d9 = t28 - mbutterfly d28, d10, d0[1], d0[2], q12, q15, neg=1 @ d28 = t27, d10 = t20 - mbutterfly d26, d21, d0[1], d0[2], q12, q15, neg=1 @ d26 = t26a, d21 = t21a + mbutterfly d27, d20, d0[2], d0[3], q12, q15 @ d27 = t18a, d20 = t29a + mbutterfly d29, d9, d0[2], d0[3], q12, q15 @ d29 = t19, d5 = t28 + mbutterfly d28, d10, d0[2], d0[3], q12, q15, neg=1 @ d28 = t27, d6 = t20 + mbutterfly d26, d21, d0[2], d0[3], q12, q15, neg=1 @ d26 = t26a, d21 = t21a butterfly d31, d24, d11, d8 @ d31 = t31, d24 = t24 butterfly d30, d25, d22, d23 @ d30 = t30a, d25 = t25a @@ -1235,10 +1235,10 @@ function idct32_odd butterfly d29, d23, d31, d23 @ d29 = t31, d23 = t30 butterfly d31, d27, d19, d27 @ d31 = t28, d27 = t29 - mbutterfly d23, d24, d0[3], d1[0], q8, q9 @ d23 = t17a, d24 = t30a - mbutterfly d27, d20, d0[3], d1[0], q8, q9, neg=1 @ d27 = t29a, d20 = t18a - mbutterfly d21, d26, d1[1], d1[2], q8, q9 @ d21 = t21a, d26 = t26a - mbutterfly d25, d22, d1[1], d1[2], q8, q9, neg=1 @ d25 = t25a, d22 = t22a + mbutterfly d23, d24, d1[0], d1[1], q8, q9 @ d23 = t17a, d24 = t30a + mbutterfly d27, d20, d1[0], d1[1], q8, q9, neg=1 @ d27 = t29a, d20 = t18a + mbutterfly d21, d26, d1[2], d1[3], q8, q9 @ d21 = t21a, d26 = t26a + mbutterfly d25, d22, d1[2], d1[3], q8, q9, neg=1 @ d25 = t25a, d22 = t22a idct32_end endfunc @@ -1261,10 +1261,10 @@ function idct32_odd_half butterfly d29, d23, d31, d23 @ d29 = t31, d23 = t30 butterfly d31, d27, d19, d27 @ d31 = t28, d27 = t29 - mbutterfly d23, d24, d0[3], d1[0], q8, q9 @ d23 = t17a, d24 = t30a - mbutterfly d27, d20, d0[3], d1[0], q8, q9, neg=1 @ d27 = t29a, d20 = t18a - mbutterfly d21, d26, d1[1], d1[2], q8, q9 @ d21 = t21a, d26 = t26a - mbutterfly d25, d22, d1[1], d1[2], q8, q9, neg=1 @ d25 = t25a, d22 = t22a + mbutterfly d23, d24, d1[0], d1[1], q8, q9 @ d23 = t17a, d24 = t30a + mbutterfly d27, d20, d1[0], d1[1], q8, q9, neg=1 @ d27 = t29a, d20 = t18a + mbutterfly d21, d26, d1[2], d1[3], q8, q9 @ d21 = t21a, d26 = t26a + mbutterfly d25, d22, d1[2], d1[3], q8, q9, neg=1 @ d25 = t25a, d22 = t22a idct32_end endfunc @@ -1291,17 +1291,17 @@ function idct32_odd_quarter vrshrn.s32 d10, q10, #14 vrshrn.s32 d30, q12, #14 - mbutterfly_l q8, q9, d29, d8, d0[3], d1[0] - mbutterfly_l q13, q10, d31, d9, d0[3], d1[0] + mbutterfly_l q8, q9, d29, d8, d1[0], d1[1] + mbutterfly_l q13, q10, d31, d9, d1[0], d1[1] vrshrn.s32 d23, q8, #14 vrshrn.s32 d24, q9, #14 vneg.s32 q10, q10 vrshrn.s32 d27, q13, #14 vrshrn.s32 d20, q10, #14 - mbutterfly_l q8, q9, d30, d10, d1[1], d1[2] + mbutterfly_l q8, q9, d30, d10, d1[2], d1[3] vrshrn.s32 d21, q8, #14 vrshrn.s32 d26, q9, #14 - mbutterfly_l q8, q9, d28, d11, d1[1], d1[2] + mbutterfly_l q8, q9, d28, d11, d1[2], d1[3] vrshrn.s32 d25, q8, #14 vneg.s32 q9, q9 vrshrn.s32 d22, q9, #14