| @/***************************************************************************** |
| @* |
| @* Copyright (C) 2012 Ittiam Systems Pvt Ltd, Bangalore |
| @* |
| @* Licensed under the Apache License, Version 2.0 (the "License"); |
| @* you may not use this file except in compliance with the License. |
| @* You may obtain a copy of the License at: |
| @* |
| @* http://www.apache.org/licenses/LICENSE-2.0 |
| @* |
| @* Unless required by applicable law or agreed to in writing, software |
| @* distributed under the License is distributed on an "AS IS" BASIS, |
| @* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| @* See the License for the specific language governing permissions and |
| @* limitations under the License. |
| @* |
| @*****************************************************************************/ |
| @/** |
| @ ******************************************************************************* |
| @ * @file |
| @ * ihevc_itrans_recon_8x8_neon.s |
| @ * |
| @ * @brief |
| @ * contains function definitions for single stage inverse transform |
| @ * |
| @ * @author |
| @ * anand s |
| @ * |
| @ * @par list of functions: |
| @ * - ihevc_itrans_recon_32x32() |
| @ * |
| @ * @remarks |
| @ * the input buffer is being corrupted |
| @ * |
| @ ******************************************************************************* |
| @*/ |
| |
| @/** |
| @ ******************************************************************************* |
| @ * |
| @ * @brief |
| @ * this function performs inverse transform and reconstruction for 8x8 |
| @ * input block |
| @ * |
| @ * @par description: |
| @ * performs inverse transform and adds the prediction data and clips output |
| @ * to 8 bit |
| @ * |
| @ * @param[in] pi2_src |
| @ * input 16x16 coefficients |
| @ * |
| @ * @param[in] pi2_tmp |
| @ * temporary 16x16 buffer for storing inverse |
| @ * |
| @ * transform |
| @ * 1st stage output |
| @ * |
| @ * @param[in] pu1_pred |
| @ * prediction 16x16 block |
| @ * |
| @ * @param[out] pu1_dst |
| @ * output 8x8 block |
| @ * |
| @ * @param[in] src_strd |
| @ * input stride |
| @ * |
| @ * @param[in] pred_strd |
| @ * prediction stride |
| @ * |
| @ * @param[in] dst_strd |
| @ * output stride |
| @ * |
| @ * @param[in] shift |
| @ * output shift |
| @ * |
| @ * @param[in] r12 |
| @ * zero columns in pi2_src |
| @ * |
| @ * @returns void |
| @ * |
| @ * @remarks |
| @ * none |
| @ * |
| @ ******************************************************************************* |
| @ */ |
| |
| @void ihevc_itrans_recon_32x32(word16 *pi2_src, |
| @ word16 *pi2_tmp, |
| @ uword8 *pu1_pred, |
| @ uword8 *pu1_dst, |
| @ word32 src_strd, |
| @ word32 pred_strd, |
| @ word32 dst_strd, |
| @ word32 r12 |
| @ word32 r11 ) |
| |
| @**************variables vs registers************************* |
| @ r0 => *pi2_src |
| @ r1 => *pi2_tmp |
| @ r2 => *pu1_pred |
| @ r3 => *pu1_dst |
| @ src_strd |
| @ pred_strd |
| @ dst_strd |
| @ r12 |
| @ r11 |
| |
| |
| @d0[0]= 64 d2[0]=83 |
| @d0[1]= 90 d2[1]=82 |
| @d0[2]= 90 d2[2]=80 |
| @d0[3]= 90 d2[3]=78 |
| @d1[0]= 89 d3[0]=75 |
| @d1[1]= 88 d3[1]=73 |
| @d1[2]= 87 d3[2]=70 |
| @d1[3]= 85 d3[3]=67 |
| |
| @d4[0]= 64 d6[0]=36 |
| @d4[1]= 61 d6[1]=31 |
| @d4[2]= 57 d6[2]=25 |
| @d4[3]= 54 d6[3]=22 |
| @d5[0]= 50 d7[0]=18 |
| @d5[1]= 46 d7[1]=13 |
| @d5[2]= 43 d7[2]=9 |
| @d5[3]= 38 d7[3]=4 |
| |
| .text |
| .align 4 |
| |
| |
| |
| |
| |
| .set shift_stage1_idct , 7 |
| .set shift_stage2_idct , 12 |
| |
| @#define zero_cols r12 |
| @#define zero_rows r11 |
| |
| .globl ihevc_itrans_recon_32x32_a9q |
| |
| .extern g_ai2_ihevc_trans_32_transpose |
| |
| g_ai2_ihevc_trans_32_transpose_addr: |
| .long g_ai2_ihevc_trans_32_transpose - ulbl1 - 8 |
| |
| r5_addr: .word 0xfffff000 |
| r9_addr: .word 0xffff0000 |
| |
| .type ihevc_itrans_recon_32x32_a9q, %function |
| |
| ihevc_itrans_recon_32x32_a9q: |
| |
| stmfd sp!,{r0-r12,lr} |
| |
| |
| @ldr r8,[sp,#56] @ prediction stride |
| @ldr r7,[sp,#64] @ destination stride |
| ldr r6,[sp,#56] @ src stride |
| ldr r12,[sp,#68] |
| ldr r11,[sp,#72] |
| mov r6,r6,lsl #1 @ x sizeof(word16) |
| add r10,r6,r6, lsl #1 @ 3 rows |
| |
| |
| mov r8,r0 |
| |
| ldr r14,g_ai2_ihevc_trans_32_transpose_addr |
| ulbl1: |
| add r14,r14,pc |
| vld1.16 {d0,d1,d2,d3},[r14]! |
| vld1.16 {d4,d5,d6,d7},[r14]! |
| |
| @registers which are free |
| @ r10,r9,r11,r12 |
| mov r9,#0xffffff00 |
| mov r10,#0xfffffff0 |
| ldr r5,r5_addr |
| ldr r7,r9_addr |
| cmp r12,r10 |
| movhs r14,#1 |
| bhs stage1 |
| |
| |
| cmp r12,r9 |
| movhs r14,#2 |
| bhs stage1 |
| |
| cmp r12,r5 |
| movhs r14,#3 |
| bhs stage1 |
| |
| cmp r12,r7 |
| movhs r14,#4 |
| |
| mov r14,#8 |
| b stage1 |
| @.ltorg |
| |
| |
| dct_stage1: |
| add r8,r8,#8 |
| mov r0,r8 |
| |
| stage1: |
| vld1.16 d10,[r0],r6 |
| vld1.16 d8,[r0],r6 |
| vld1.16 d11,[r0],r6 |
| vld1.16 d9,[r0],r6 |
| |
| vmull.s16 q12,d8,d0[1] @// y1 * cos1(part of b0) |
| vmull.s16 q13,d8,d0[3] @// y1 * cos3(part of b1) |
| vmull.s16 q14,d8,d1[1] @// y1 * sin3(part of b2) |
| vmull.s16 q15,d8,d1[3] @// y1 * sin1(part of b3) |
| |
| vmlal.s16 q12,d9,d0[3] @// y1 * cos1 + y3 * cos3(part of b0) |
| vmlal.s16 q13,d9,d2[1] @// y1 * cos3 - y3 * sin1(part of b1) |
| vmlal.s16 q14,d9,d3[3] @// y1 * sin3 - y3 * cos1(part of b2) |
| vmlal.s16 q15,d9,d5[1] @// y1 * sin1 - y3 * sin3(part of b3) |
| |
| |
| |
| |
| |
| vmull.s16 q10,d10,d0[0] |
| vmlal.s16 q10,d11,d0[2] |
| |
| |
| vmull.s16 q11,d10,d0[0] |
| vmlal.s16 q11,d11,d1[2] |
| |
| vmull.s16 q8,d10,d0[0] |
| vmlal.s16 q8,d11,d2[2] |
| |
| vmull.s16 q9,d10,d0[0] |
| vmlal.s16 q9,d11,d3[2] |
| cmp r11,r10 |
| bhs shift1 |
| |
| vld1.16 d12,[r0],r6 |
| vld1.16 d14,[r0],r6 |
| vld1.16 d13,[r0],r6 |
| vld1.16 d15,[r0],r6 |
| |
| |
| |
| |
| |
| |
| |
| vmlal.s16 q12,d14,d1[1] |
| vmlal.s16 q13,d14,d3[3] |
| vmlal.s16 q14,d14,d6[1] |
| vmlsl.s16 q15,d14,d7[1] |
| |
| |
| vmlal.s16 q12,d15,d1[3] |
| vmlal.s16 q13,d15,d5[1] |
| vmlsl.s16 q14,d15,d7[1] |
| vmlsl.s16 q15,d15,d3[3] |
| |
| |
| vmlal.s16 q10,d12,d1[0] |
| vmlal.s16 q10,d13,d1[2] |
| vmlal.s16 q11,d12,d3[0] |
| vmlal.s16 q11,d13,d4[2] |
| vmlal.s16 q8,d12,d5[0] |
| vmlal.s16 q8,d13,d7[2] |
| vmlal.s16 q9,d12,d7[0] |
| vmlsl.s16 q9,d13,d5[2] |
| |
| cmp r11,r9 |
| bhs shift1 |
| |
| vld1.16 d10,[r0],r6 |
| vld1.16 d8,[r0],r6 |
| vld1.16 d11,[r0],r6 |
| vld1.16 d9,[r0],r6 |
| |
| |
| vmlal.s16 q12,d8,d2[1] @// y1 * cos1(part of b0) |
| vmlal.s16 q13,d8,d6[3] @// y1 * cos3(part of b1) |
| vmlsl.s16 q14,d8,d4[3] @// y1 * sin3(part of b2) |
| vmlsl.s16 q15,d8,d0[1] @// y1 * sin1(part of b3) |
| |
| vmlal.s16 q12,d9,d2[3] @// y1 * cos1 + y3 * cos3(part of b0) |
| vmlsl.s16 q13,d9,d7[3] @// y1 * cos3 - y3 * sin1(part of b1) |
| vmlsl.s16 q14,d9,d2[1] @// y1 * sin3 - y3 * cos1(part of b2) |
| vmlsl.s16 q15,d9,d3[1] @// y1 * sin1 - y3 * sin3(part of b3) |
| |
| |
| |
| |
| |
| vmlal.s16 q10,d10,d2[0] |
| vmlal.s16 q10,d11,d2[2] |
| |
| |
| vmlal.s16 q11,d10,d6[0] |
| vmlal.s16 q11,d11,d7[2] |
| |
| vmlsl.s16 q8,d10,d6[0] |
| vmlsl.s16 q8,d11,d3[2] |
| |
| vmlsl.s16 q9,d10,d2[0] |
| vmlsl.s16 q9,d11,d1[2] |
| |
| cmp r11,r5 |
| bhs shift1 |
| |
| |
| vld1.16 d12,[r0],r6 |
| vld1.16 d14,[r0],r6 |
| vld1.16 d13,[r0],r6 |
| vld1.16 d15,[r0],r6 |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| vmlal.s16 q12,d14,d3[1] |
| vmlsl.s16 q13,d14,d6[1] |
| vmlsl.s16 q14,d14,d0[1] |
| vmlsl.s16 q15,d14,d6[3] |
| |
| |
| vmlal.s16 q12,d15,d3[3] |
| vmlsl.s16 q13,d15,d4[3] |
| vmlsl.s16 q14,d15,d2[3] |
| vmlal.s16 q15,d15,d5[3] |
| |
| |
| vmlal.s16 q10,d12,d3[0] |
| vmlal.s16 q10,d13,d3[2] |
| vmlsl.s16 q11,d12,d7[0] |
| vmlsl.s16 q11,d13,d5[2] |
| vmlsl.s16 q8,d12,d1[0] |
| vmlsl.s16 q8,d13,d1[2] |
| vmlsl.s16 q9,d12,d5[0] |
| vmlal.s16 q9,d13,d7[2] |
| |
| cmp r11,r7 |
| bhs shift1 |
| |
| |
| vld1.16 d10,[r0],r6 |
| vld1.16 d8,[r0],r6 |
| vld1.16 d11,[r0],r6 |
| vld1.16 d9,[r0],r6 |
| |
| |
| |
| vmlal.s16 q12,d8,d4[1] @// y1 * cos1(part of b0) |
| vmlsl.s16 q13,d8,d3[1] @// y1 * cos3(part of b1) |
| vmlsl.s16 q14,d8,d5[1] @// y1 * sin3(part of b2) |
| vmlal.s16 q15,d8,d2[1] @// y1 * sin1(part of b3) |
| |
| vmlal.s16 q12,d9,d4[3] @// y1 * cos1 + y3 * cos3(part of b0) |
| vmlsl.s16 q13,d9,d1[3] @// y1 * cos3 - y3 * sin1(part of b1) |
| vmlsl.s16 q14,d9,d7[3] @// y1 * sin3 - y3 * cos1(part of b2) |
| vmlal.s16 q15,d9,d1[1] @// y1 * sin1 - y3 * sin3(part of b3) |
| |
| |
| |
| |
| |
| vmlal.s16 q10,d10,d0[0] |
| vmlal.s16 q10,d11,d4[2] |
| |
| |
| vmlsl.s16 q11,d10,d0[0] |
| vmlsl.s16 q11,d11,d2[2] |
| |
| vmlsl.s16 q8,d10,d0[0] |
| vmlsl.s16 q8,d11,d6[2] |
| |
| vmlal.s16 q9,d10,d0[0] |
| vmlal.s16 q9,d11,d0[2] |
| |
| |
| |
| vld1.16 d12,[r0],r6 |
| vld1.16 d14,[r0],r6 |
| vld1.16 d13,[r0],r6 |
| vld1.16 d15,[r0],r6 |
| |
| |
| |
| |
| vmlal.s16 q12,d14,d5[1] |
| vmlsl.s16 q13,d14,d0[2] |
| vmlal.s16 q14,d14,d5[3] |
| vmlal.s16 q15,d14,d4[3] |
| |
| |
| vmlal.s16 q12,d15,d5[3] |
| vmlsl.s16 q13,d15,d1[1] |
| vmlal.s16 q14,d15,d3[1] |
| vmlsl.s16 q15,d15,d7[3] |
| |
| |
| vmlal.s16 q10,d12,d5[0] |
| vmlal.s16 q10,d13,d5[2] |
| vmlsl.s16 q11,d12,d1[0] |
| vmlsl.s16 q11,d13,d0[2] |
| vmlal.s16 q8,d12,d7[0] |
| vmlal.s16 q8,d13,d4[2] |
| vmlal.s16 q9,d12,d3[0] |
| vmlal.s16 q9,d13,d6[2] |
| |
| |
| vld1.16 d10,[r0],r6 |
| vld1.16 d8,[r0],r6 |
| vld1.16 d11,[r0],r6 |
| vld1.16 d9,[r0],r6 |
| |
| |
| |
| |
| |
| |
| |
| vmlal.s16 q12,d8,d6[1] @// y1 * cos1(part of b0) |
| vmlsl.s16 q13,d8,d2[3] @// y1 * cos3(part of b1) |
| vmlal.s16 q14,d8,d0[1] @// y1 * sin3(part of b2) |
| vmlsl.s16 q15,d8,d4[1] @// y1 * sin1(part of b3) |
| |
| vmlal.s16 q12,d9,d6[3] @// y1 * cos1 + y3 * cos3(part of b0) |
| vmlsl.s16 q13,d9,d4[1] @// y1 * cos3 - y3 * sin1(part of b1) |
| vmlal.s16 q14,d9,d1[3] @// y1 * sin3 - y3 * cos1(part of b2) |
| vmlsl.s16 q15,d9,d0[1] @// y1 * sin1 - y3 * sin3(part of b3) |
| |
| |
| |
| |
| |
| vmlal.s16 q10,d10,d6[0] |
| vmlal.s16 q10,d11,d6[2] |
| |
| |
| vmlsl.s16 q11,d10,d2[0] |
| vmlsl.s16 q11,d11,d3[2] |
| |
| vmlal.s16 q8,d10,d2[0] |
| vmlal.s16 q8,d11,d0[2] |
| |
| vmlsl.s16 q9,d10,d6[0] |
| vmlsl.s16 q9,d11,d2[2] |
| |
| vld1.16 d12,[r0],r6 |
| vld1.16 d14,[r0],r6 |
| vld1.16 d13,[r0],r6 |
| vld1.16 d15,[r0],r6 |
| |
| |
| vmlal.s16 q12,d14,d7[1] |
| vmlsl.s16 q13,d14,d5[3] |
| vmlal.s16 q14,d14,d4[1] |
| vmlsl.s16 q15,d14,d2[3] |
| |
| |
| vmlal.s16 q12,d15,d7[3] |
| vmlsl.s16 q13,d15,d7[1] |
| vmlal.s16 q14,d15,d6[3] |
| vmlsl.s16 q15,d15,d6[1] |
| |
| |
| vmlal.s16 q10,d12,d7[0] |
| vmlal.s16 q10,d13,d7[2] |
| vmlsl.s16 q11,d12,d5[0] |
| vmlsl.s16 q11,d13,d6[2] |
| vmlal.s16 q8,d12,d3[0] |
| vmlal.s16 q8,d13,d5[2] |
| vmlsl.s16 q9,d12,d1[0] |
| vmlsl.s16 q9,d13,d4[2] |
| |
| |
| |
| shift1: |
| vadd.s32 q4,q10,q12 |
| vsub.s32 q5,q10,q12 |
| |
| vadd.s32 q6,q11,q13 |
| vsub.s32 q12,q11,q13 |
| |
| vadd.s32 q7,q8,q14 |
| vsub.s32 q13,q8,q14 |
| |
| |
| vadd.s32 q8,q9,q15 |
| vsub.s32 q14,q9,q15 |
| |
| |
| vqrshrn.s32 d30,q4,#shift_stage1_idct @// r0 = (a0 + b0 + rnd) >> 7(shift_stage1_idct) |
| vqrshrn.s32 d19,q5,#shift_stage1_idct @// r7 = (a0 - b0 + rnd) >> 7(shift_stage1_idct) |
| vqrshrn.s32 d31,q7,#shift_stage1_idct @// r2 = (a2 + b2 + rnd) >> 7(shift_stage1_idct) |
| vqrshrn.s32 d18,q13,#shift_stage1_idct @// r5 = (a2 - b2 + rnd) >> 7(shift_stage1_idct) |
| vqrshrn.s32 d12,q6,#shift_stage1_idct @// r1 = (a1 + b1 + rnd) >> 7(shift_stage1_idct) |
| vqrshrn.s32 d15,q12,#shift_stage1_idct @// r6 = (a1 - b1 + rnd) >> 7(shift_stage1_idct) |
| vqrshrn.s32 d13,q8,#shift_stage1_idct @// r3 = (a3 + b3 + rnd) >> 7(shift_stage1_idct) |
| vqrshrn.s32 d14,q14,#shift_stage1_idct @// r4 = (a3 - b3 + rnd) >> 7(shift_stage1_idct) |
| |
| |
| @ registers used q15,q14,q6,q7 |
| |
| |
| vtrn.16 q15,q6 |
| vtrn.16 q7,q9 |
| |
| vtrn.32 d30,d31 |
| vtrn.32 d12,d13 |
| vtrn.32 d14,d15 |
| vtrn.32 d18,d19 |
| |
| |
| @ d30 =r0 1- 4 values |
| @ d31 =r2 1- 4 values |
| @ d12=r1 1- 4 values |
| @ d13=r3 1- 4 values |
| @ d14 =r0 28-31 values |
| @ d15 =r2 28- 31 values |
| @ d18=r1 28- 31 values |
| @ d19=r3 28- 31 values |
| |
| |
| |
| vst1.16 {q15},[r1]! |
| vst1.16 {q6},[r1]! |
| add r1,r1,#192 |
| vst1.16 {q7},[r1]! |
| vst1.16 {q9},[r1]! |
| sub r1,r1,#224 |
| |
| mov r0,r8 |
| |
| |
| |
| |
| |
| vld1.16 d10,[r0],r6 |
| vld1.16 d8,[r0],r6 |
| vld1.16 d11,[r0],r6 |
| vld1.16 d9,[r0],r6 |
| |
| |
| |
| |
| vmull.s16 q12,d8,d2[1] @// y1 * cos1(part of b0) |
| vmull.s16 q13,d8,d2[3] @// y1 * cos3(part of b1) |
| vmull.s16 q14,d8,d3[1] @// y1 * sin3(part of b2) |
| vmull.s16 q15,d8,d3[3] @// y1 * sin1(part of b3) |
| |
| vmlal.s16 q12,d9,d6[3] @// y1 * cos1 + y3 * cos3(part of b0) |
| vmlsl.s16 q13,d9,d7[3] @// y1 * cos3 - y3 * sin1(part of b1) |
| vmlsl.s16 q14,d9,d6[1] @// y1 * sin3 - y3 * cos1(part of b2) |
| vmlsl.s16 q15,d9,d4[3] @// y1 * sin1 - y3 * sin3(part of b3) |
| |
| |
| |
| |
| |
| vmull.s16 q10,d10,d0[0] |
| vmlal.s16 q10,d11,d4[2] |
| |
| |
| vmull.s16 q11,d10,d0[0] |
| vmlal.s16 q11,d11,d5[2] |
| |
| vmull.s16 q8,d10,d0[0] |
| vmlal.s16 q8,d11,d6[2] |
| |
| vmull.s16 q9,d10,d0[0] |
| vmlal.s16 q9,d11,d7[2] |
| cmp r11,r10 |
| bhs shift2 |
| |
| vld1.16 d12,[r0],r6 |
| vld1.16 d14,[r0],r6 |
| vld1.16 d13,[r0],r6 |
| vld1.16 d15,[r0],r6 |
| |
| |
| vmlsl.s16 q12,d14,d4[3] |
| vmlsl.s16 q13,d14,d2[1] |
| vmlsl.s16 q14,d14,d0[1] |
| vmlsl.s16 q15,d14,d2[3] |
| |
| |
| vmlsl.s16 q12,d15,d0[3] |
| vmlsl.s16 q13,d15,d3[1] |
| vmlsl.s16 q14,d15,d6[3] |
| vmlal.s16 q15,d15,d5[3] |
| |
| |
| vmlsl.s16 q10,d12,d7[0] |
| vmlsl.s16 q10,d13,d2[2] |
| vmlsl.s16 q11,d12,d5[0] |
| vmlsl.s16 q11,d13,d0[2] |
| vmlsl.s16 q8,d12,d3[0] |
| vmlsl.s16 q8,d13,d3[2] |
| vmlsl.s16 q9,d12,d1[0] |
| vmlsl.s16 q9,d13,d6[2] |
| |
| cmp r11,r9 |
| bhs shift2 |
| |
| |
| vld1.16 d10,[r0],r6 |
| vld1.16 d8,[r0],r6 |
| vld1.16 d11,[r0],r6 |
| vld1.16 d9,[r0],r6 |
| |
| |
| |
| |
| |
| |
| |
| vmlsl.s16 q12,d8,d4[1] @// y1 * cos1(part of b0) |
| vmlal.s16 q13,d8,d7[1] @// y1 * cos3(part of b1) |
| vmlal.s16 q14,d8,d2[3] @// y1 * sin3(part of b2) |
| vmlal.s16 q15,d8,d1[3] @// y1 * sin1(part of b3) |
| |
| vmlal.s16 q12,d9,d7[1] @// y1 * cos1 + y3 * cos3(part of b0) |
| vmlal.s16 q13,d9,d1[3] @// y1 * cos3 - y3 * sin1(part of b1) |
| vmlal.s16 q14,d9,d3[3] @// y1 * sin3 - y3 * cos1(part of b2) |
| vmlsl.s16 q15,d9,d6[3] @// y1 * sin1 - y3 * sin3(part of b3) |
| |
| |
| |
| |
| |
| vmlsl.s16 q10,d10,d2[0] |
| vmlsl.s16 q10,d11,d6[2] |
| |
| |
| vmlsl.s16 q11,d10,d6[0] |
| vmlal.s16 q11,d11,d4[2] |
| |
| vmlal.s16 q8,d10,d6[0] |
| vmlal.s16 q8,d11,d0[2] |
| |
| vmlal.s16 q9,d10,d2[0] |
| vmlal.s16 q9,d11,d5[2] |
| |
| cmp r11,r5 |
| bhs shift2 |
| |
| |
| vld1.16 d12,[r0],r6 |
| vld1.16 d14,[r0],r6 |
| vld1.16 d13,[r0],r6 |
| vld1.16 d15,[r0],r6 |
| |
| |
| |
| |
| |
| vmlal.s16 q12,d14,d2[3] |
| vmlal.s16 q13,d14,d3[3] |
| vmlsl.s16 q14,d14,d5[3] |
| vmlsl.s16 q15,d14,d0[3] |
| |
| |
| vmlal.s16 q12,d15,d1[3] |
| vmlsl.s16 q13,d15,d6[3] |
| vmlsl.s16 q14,d15,d0[3] |
| vmlal.s16 q15,d15,d7[3] |
| |
| |
| vmlal.s16 q10,d12,d5[0] |
| vmlal.s16 q10,d13,d0[2] |
| vmlal.s16 q11,d12,d1[0] |
| vmlal.s16 q11,d13,d6[2] |
| vmlal.s16 q8,d12,d7[0] |
| vmlsl.s16 q8,d13,d2[2] |
| vmlsl.s16 q9,d12,d3[0] |
| vmlsl.s16 q9,d13,d4[2] |
| |
| |
| cmp r11,r7 |
| bhs shift2 |
| |
| |
| vld1.16 d10,[r0],r6 |
| vld1.16 d8,[r0],r6 |
| vld1.16 d11,[r0],r6 |
| vld1.16 d9,[r0],r6 |
| |
| |
| |
| |
| |
| |
| |
| vmlal.s16 q12,d8,d6[1] @// y1 * cos1(part of b0) |
| vmlsl.s16 q13,d8,d1[1] @// y1 * cos3(part of b1) |
| vmlsl.s16 q14,d8,d7[1] @// y1 * sin3(part of b2) |
| vmlal.s16 q15,d8,d0[3] @// y1 * sin1(part of b3) |
| |
| vmlsl.s16 q12,d9,d5[1] @// y1 * cos1 + y3 * cos3(part of b0) |
| vmlsl.s16 q13,d9,d4[1] @// y1 * cos3 - y3 * sin1(part of b1) |
| vmlal.s16 q14,d9,d2[1] @// y1 * sin3 - y3 * cos1(part of b2) |
| vmlal.s16 q15,d9,d7[1] @// y1 * sin1 - y3 * sin3(part of b3) |
| |
| |
| |
| |
| |
| vmlal.s16 q10,d10,d0[0] |
| vmlsl.s16 q10,d11,d7[2] |
| |
| |
| vmlsl.s16 q11,d10,d0[0] |
| vmlsl.s16 q11,d11,d1[2] |
| |
| vmlsl.s16 q8,d10,d0[0] |
| vmlal.s16 q8,d11,d5[2] |
| |
| vmlal.s16 q9,d10,d0[0] |
| vmlal.s16 q9,d11,d3[2] |
| |
| |
| |
| vld1.16 d12,[r0],r6 |
| vld1.16 d14,[r0],r6 |
| vld1.16 d13,[r0],r6 |
| vld1.16 d15,[r0],r6 |
| |
| |
| vmlsl.s16 q12,d14,d0[1] |
| vmlal.s16 q13,d14,d6[1] |
| vmlal.s16 q14,d14,d4[1] |
| vmlsl.s16 q15,d14,d1[1] |
| |
| |
| vmlsl.s16 q12,d15,d3[3] |
| vmlal.s16 q13,d15,d0[1] |
| vmlsl.s16 q14,d15,d5[1] |
| vmlsl.s16 q15,d15,d6[1] |
| |
| |
| vmlsl.s16 q10,d12,d3[0] |
| vmlsl.s16 q10,d13,d1[2] |
| vmlsl.s16 q11,d12,d7[0] |
| vmlal.s16 q11,d13,d3[2] |
| vmlal.s16 q8,d12,d1[0] |
| vmlal.s16 q8,d13,d7[2] |
| vmlsl.s16 q9,d12,d5[0] |
| vmlsl.s16 q9,d13,d2[2] |
| |
| vld1.16 d10,[r0],r6 |
| vld1.16 d8,[r0],r6 |
| vld1.16 d11,[r0],r6 |
| vld1.16 d9,[r0],r6 |
| |
| |
| |
| |
| vmlal.s16 q12,d8,d7[3] @// y1 * cos1(part of b0) |
| vmlal.s16 q13,d8,d4[3] @// y1 * cos3(part of b1) |
| vmlsl.s16 q14,d8,d1[1] @// y1 * sin3(part of b2) |
| vmlal.s16 q15,d8,d2[1] @// y1 * sin1(part of b3) |
| |
| vmlal.s16 q12,d9,d3[1] @// y1 * cos1 + y3 * cos3(part of b0) |
| vmlsl.s16 q13,d9,d5[3] @// y1 * cos3 - y3 * sin1(part of b1) |
| vmlsl.s16 q14,d9,d7[3] @// y1 * sin3 - y3 * cos1(part of b2) |
| vmlal.s16 q15,d9,d5[1] @// y1 * sin1 - y3 * sin3(part of b3) |
| |
| |
| |
| |
| |
| vmlsl.s16 q10,d10,d6[0] |
| vmlal.s16 q10,d11,d5[2] |
| |
| |
| vmlal.s16 q11,d10,d2[0] |
| vmlal.s16 q11,d11,d7[2] |
| |
| vmlsl.s16 q8,d10,d2[0] |
| vmlsl.s16 q8,d11,d4[2] |
| |
| vmlal.s16 q9,d10,d6[0] |
| vmlal.s16 q9,d11,d1[2] |
| |
| |
| vld1.16 d12,[r0],r6 |
| vld1.16 d14,[r0],r6 |
| vld1.16 d13,[r0],r6 |
| vld1.16 d15,[r0],r6 |
| |
| |
| |
| |
| |
| vmlal.s16 q12,d14,d1[1] |
| vmlsl.s16 q13,d14,d0[3] |
| vmlal.s16 q14,d14,d1[3] |
| vmlsl.s16 q15,d14,d3[1] |
| |
| |
| vmlal.s16 q12,d15,d5[3] |
| vmlsl.s16 q13,d15,d5[1] |
| vmlal.s16 q14,d15,d4[3] |
| vmlsl.s16 q15,d15,d4[1] |
| |
| |
| vmlal.s16 q10,d12,d1[0] |
| vmlal.s16 q10,d13,d3[2] |
| vmlsl.s16 q11,d12,d3[0] |
| vmlsl.s16 q11,d13,d2[2] |
| vmlal.s16 q8,d12,d5[0] |
| vmlal.s16 q8,d13,d1[2] |
| vmlsl.s16 q9,d12,d7[0] |
| vmlsl.s16 q9,d13,d0[2] |
| |
| shift2: |
| vadd.s32 q4,q10,q12 |
| vsub.s32 q5,q10,q12 |
| |
| vadd.s32 q6,q11,q13 |
| vsub.s32 q12,q11,q13 |
| |
| vadd.s32 q7,q8,q14 |
| vsub.s32 q13,q8,q14 |
| |
| |
| vadd.s32 q8,q9,q15 |
| vsub.s32 q14,q9,q15 |
| |
| |
| vqrshrn.s32 d30,q4,#shift_stage1_idct @// r0 = (a0 + b0 + rnd) >> 7(shift_stage1_idct) |
| vqrshrn.s32 d19,q5,#shift_stage1_idct @// r7 = (a0 - b0 + rnd) >> 7(shift_stage1_idct) |
| vqrshrn.s32 d31,q7,#shift_stage1_idct @// r2 = (a2 + b2 + rnd) >> 7(shift_stage1_idct) |
| vqrshrn.s32 d18,q13,#shift_stage1_idct @// r5 = (a2 - b2 + rnd) >> 7(shift_stage1_idct) |
| vqrshrn.s32 d12,q6,#shift_stage1_idct @// r1 = (a1 + b1 + rnd) >> 7(shift_stage1_idct) |
| vqrshrn.s32 d15,q12,#shift_stage1_idct @// r6 = (a1 - b1 + rnd) >> 7(shift_stage1_idct) |
| vqrshrn.s32 d13,q8,#shift_stage1_idct @// r3 = (a3 + b3 + rnd) >> 7(shift_stage1_idct) |
| vqrshrn.s32 d14,q14,#shift_stage1_idct @// r4 = (a3 - b3 + rnd) >> 7(shift_stage1_idct) |
| |
| vtrn.16 q15,q6 |
| vtrn.16 q7,q9 |
| |
| vtrn.32 d30,d31 |
| vtrn.32 d12,d13 |
| vtrn.32 d14,d15 |
| vtrn.32 d18,d19 |
| |
| |
| vst1.16 {q15},[r1]! |
| vst1.16 {q6},[r1]! |
| add r1,r1,#128 |
| vst1.16 {q7},[r1]! |
| vst1.16 {q9},[r1]! |
| sub r1,r1,#160 |
| mov r0,r8 |
| |
| |
| |
| vld1.16 d10,[r0],r6 |
| vld1.16 d8,[r0],r6 |
| vld1.16 d11,[r0],r6 |
| vld1.16 d9,[r0],r6 |
| |
| |
| vmull.s16 q12,d8,d4[1] @// y1 * cos1(part of b0) |
| vmull.s16 q13,d8,d4[3] @// y1 * cos3(part of b1) |
| vmull.s16 q14,d8,d5[1] @// y1 * sin3(part of b2) |
| vmull.s16 q15,d8,d5[3] @// y1 * sin1(part of b3) |
| |
| vmlsl.s16 q12,d9,d3[1] @// y1 * cos1 + y3 * cos3(part of b0) |
| vmlsl.s16 q13,d9,d1[3] @// y1 * cos3 - y3 * sin1(part of b1) |
| vmlsl.s16 q14,d9,d0[2] @// y1 * sin3 - y3 * cos1(part of b2) |
| vmlsl.s16 q15,d9,d1[1] @// y1 * sin1 - y3 * sin3(part of b3) |
| |
| |
| |
| |
| |
| vmull.s16 q10,d10,d0[0] |
| vmlsl.s16 q10,d11,d7[2] |
| |
| |
| vmull.s16 q11,d10,d0[0] |
| vmlsl.s16 q11,d11,d6[2] |
| |
| vmull.s16 q8,d10,d0[0] |
| vmlsl.s16 q8,d11,d5[2] |
| |
| vmull.s16 q9,d10,d0[0] |
| vmlsl.s16 q9,d11,d4[2] |
| |
| cmp r11,r10 |
| bhs shift3 |
| |
| vld1.16 d12,[r0],r6 |
| vld1.16 d14,[r0],r6 |
| vld1.16 d13,[r0],r6 |
| vld1.16 d15,[r0],r6 |
| |
| |
| |
| |
| vmlsl.s16 q12,d14,d5[1] |
| vmlsl.s16 q13,d14,d7[3] |
| vmlal.s16 q14,d14,d5[3] |
| vmlal.s16 q15,d14,d3[1] |
| |
| |
| vmlal.s16 q12,d15,d2[1] |
| vmlal.s16 q13,d15,d1[1] |
| vmlal.s16 q14,d15,d4[3] |
| vmlsl.s16 q15,d15,d7[3] |
| |
| |
| vmlsl.s16 q10,d12,d1[0] |
| vmlal.s16 q10,d13,d6[2] |
| vmlsl.s16 q11,d12,d3[0] |
| vmlal.s16 q11,d13,d3[2] |
| vmlsl.s16 q8,d12,d5[0] |
| vmlal.s16 q8,d13,d0[2] |
| vmlsl.s16 q9,d12,d7[0] |
| vmlal.s16 q9,d13,d2[2] |
| |
| cmp r11,r9 |
| bhs shift3 |
| |
| vld1.16 d10,[r0],r6 |
| vld1.16 d8,[r0],r6 |
| vld1.16 d11,[r0],r6 |
| vld1.16 d9,[r0],r6 |
| |
| vmlal.s16 q12,d8,d6[1] @// y1 * cos1(part of b0) |
| vmlsl.s16 q13,d8,d5[1] @// y1 * cos3(part of b1) |
| vmlsl.s16 q14,d8,d0[3] @// y1 * sin3(part of b2) |
| vmlsl.s16 q15,d8,d3[3] @// y1 * sin1(part of b3) |
| |
| vmlsl.s16 q12,d9,d1[1] @// y1 * cos1 + y3 * cos3(part of b0) |
| vmlsl.s16 q13,d9,d4[1] @// y1 * cos3 - y3 * sin1(part of b1) |
| vmlal.s16 q14,d9,d6[1] @// y1 * sin3 - y3 * cos1(part of b2) |
| vmlal.s16 q15,d9,d0[1] @// y1 * sin1 - y3 * sin3(part of b3) |
| |
| |
| |
| |
| |
| vmlal.s16 q10,d10,d2[0] |
| vmlsl.s16 q10,d11,d5[2] |
| |
| |
| vmlal.s16 q11,d10,d6[0] |
| vmlsl.s16 q11,d11,d0[2] |
| |
| vmlsl.s16 q8,d10,d6[0] |
| vmlsl.s16 q8,d11,d4[2] |
| |
| vmlsl.s16 q9,d10,d2[0] |
| vmlal.s16 q9,d11,d6[2] |
| |
| cmp r11,r5 |
| bhs shift3 |
| |
| |
| vld1.16 d12,[r0],r6 |
| vld1.16 d14,[r0],r6 |
| vld1.16 d13,[r0],r6 |
| vld1.16 d15,[r0],r6 |
| |
| |
| |
| |
| |
| |
| vmlsl.s16 q12,d14,d7[1] |
| vmlal.s16 q13,d14,d2[1] |
| vmlal.s16 q14,d14,d4[1] |
| vmlsl.s16 q15,d14,d5[1] |
| |
| |
| vmlal.s16 q12,d15,d0[3] |
| vmlal.s16 q13,d15,d7[1] |
| vmlsl.s16 q14,d15,d1[1] |
| vmlsl.s16 q15,d15,d6[1] |
| |
| |
| vmlsl.s16 q10,d12,d3[0] |
| vmlal.s16 q10,d13,d4[2] |
| vmlal.s16 q11,d12,d7[0] |
| vmlal.s16 q11,d13,d2[2] |
| vmlal.s16 q8,d12,d1[0] |
| vmlsl.s16 q8,d13,d6[2] |
| vmlal.s16 q9,d12,d5[0] |
| vmlsl.s16 q9,d13,d0[2] |
| |
| |
| cmp r11,r7 |
| bhs shift3 |
| |
| |
| vld1.16 d10,[r0],r6 |
| vld1.16 d8,[r0],r6 |
| vld1.16 d11,[r0],r6 |
| vld1.16 d9,[r0],r6 |
| |
| |
| vmlsl.s16 q12,d8,d7[3] @// y1 * cos1(part of b0) |
| vmlsl.s16 q13,d8,d0[1] @// y1 * cos3(part of b1) |
| vmlal.s16 q14,d8,d6[3] @// y1 * sin3(part of b2) |
| vmlal.s16 q15,d8,d1[3] @// y1 * sin1(part of b3) |
| |
| vmlsl.s16 q12,d9,d0[1] @// y1 * cos1 + y3 * cos3(part of b0) |
| vmlal.s16 q13,d9,d5[3] @// y1 * cos3 - y3 * sin1(part of b1) |
| vmlal.s16 q14,d9,d3[3] @// y1 * sin3 - y3 * cos1(part of b2) |
| vmlsl.s16 q15,d9,d2[3] @// y1 * sin1 - y3 * sin3(part of b3) |
| |
| |
| |
| |
| |
| vmlal.s16 q10,d10,d0[0] |
| vmlsl.s16 q10,d11,d3[2] |
| |
| |
| vmlsl.s16 q11,d10,d0[0] |
| vmlsl.s16 q11,d11,d5[2] |
| |
| vmlsl.s16 q8,d10,d0[0] |
| vmlal.s16 q8,d11,d1[2] |
| |
| vmlal.s16 q9,d10,d0[0] |
| vmlal.s16 q9,d11,d7[2] |
| |
| |
| vld1.16 d12,[r0],r6 |
| vld1.16 d14,[r0],r6 |
| vld1.16 d13,[r0],r6 |
| vld1.16 d15,[r0],r6 |
| |
| |
| |
| vmlal.s16 q12,d14,d6[3] |
| vmlal.s16 q13,d14,d3[3] |
| vmlsl.s16 q14,d14,d1[3] |
| vmlal.s16 q15,d14,d7[1] |
| |
| |
| vmlal.s16 q12,d15,d1[3] |
| vmlsl.s16 q13,d15,d2[3] |
| vmlal.s16 q14,d15,d7[1] |
| vmlal.s16 q15,d15,d4[1] |
| |
| |
| vmlsl.s16 q10,d12,d5[0] |
| vmlal.s16 q10,d13,d2[2] |
| vmlal.s16 q11,d12,d1[0] |
| vmlsl.s16 q11,d13,d7[2] |
| vmlsl.s16 q8,d12,d7[0] |
| vmlsl.s16 q8,d13,d3[2] |
| vmlsl.s16 q9,d12,d3[0] |
| vmlal.s16 q9,d13,d1[2] |
| |
| |
| |
| vld1.16 d10,[r0],r6 |
| vld1.16 d8,[r0],r6 |
| vld1.16 d11,[r0],r6 |
| vld1.16 d9,[r0],r6 |
| |
| |
| |
| |
| vmlsl.s16 q12,d8,d5[3] @// y1 * cos1(part of b0) |
| vmlsl.s16 q13,d8,d6[3] @// y1 * cos3(part of b1) |
| vmlal.s16 q14,d8,d3[1] @// y1 * sin3(part of b2) |
| vmlsl.s16 q15,d8,d0[1] @// y1 * sin1(part of b3) |
| |
| vmlsl.s16 q12,d9,d2[3] @// y1 * cos1 + y3 * cos3(part of b0) |
| vmlal.s16 q13,d9,d0[1] @// y1 * cos3 - y3 * sin1(part of b1) |
| vmlsl.s16 q14,d9,d2[1] @// y1 * sin3 - y3 * cos1(part of b2) |
| vmlal.s16 q15,d9,d4[3] @// y1 * sin1 - y3 * sin3(part of b3) |
| |
| |
| |
| |
| |
| vmlal.s16 q10,d10,d6[0] |
| vmlsl.s16 q10,d11,d1[2] |
| |
| |
| vmlsl.s16 q11,d10,d2[0] |
| vmlal.s16 q11,d11,d4[2] |
| |
| vmlal.s16 q8,d10,d2[0] |
| vmlsl.s16 q8,d11,d7[2] |
| |
| vmlsl.s16 q9,d10,d6[0] |
| vmlsl.s16 q9,d11,d5[2] |
| |
| |
| vld1.16 d12,[r0],r6 |
| vld1.16 d14,[r0],r6 |
| vld1.16 d13,[r0],r6 |
| vld1.16 d15,[r0],r6 |
| |
| vmlal.s16 q12,d14,d4[3] |
| vmlsl.s16 q13,d14,d6[1] |
| vmlal.s16 q14,d14,d7[3] |
| vmlal.s16 q15,d14,d6[3] |
| |
| |
| vmlal.s16 q12,d15,d3[3] |
| vmlsl.s16 q13,d15,d3[1] |
| vmlal.s16 q14,d15,d2[3] |
| vmlsl.s16 q15,d15,d2[1] |
| |
| |
| vmlsl.s16 q10,d12,d7[0] |
| vmlal.s16 q10,d13,d0[2] |
| vmlal.s16 q11,d12,d5[0] |
| vmlsl.s16 q11,d13,d1[2] |
| vmlsl.s16 q8,d12,d3[0] |
| vmlal.s16 q8,d13,d2[2] |
| vmlal.s16 q9,d12,d1[0] |
| vmlsl.s16 q9,d13,d3[2] |
| |
| shift3: |
| vadd.s32 q4,q10,q12 |
| vsub.s32 q5,q10,q12 |
| |
| vadd.s32 q6,q11,q13 |
| vsub.s32 q12,q11,q13 |
| |
| vadd.s32 q7,q8,q14 |
| vsub.s32 q13,q8,q14 |
| |
| |
| vadd.s32 q8,q9,q15 |
| vsub.s32 q14,q9,q15 |
| |
| |
| vqrshrn.s32 d30,q4,#shift_stage1_idct @// r0 = (a0 + b0 + rnd) >> 7(shift_stage1_idct) |
| vqrshrn.s32 d19,q5,#shift_stage1_idct @// r7 = (a0 - b0 + rnd) >> 7(shift_stage1_idct) |
| vqrshrn.s32 d31,q7,#shift_stage1_idct @// r2 = (a2 + b2 + rnd) >> 7(shift_stage1_idct) |
| vqrshrn.s32 d18,q13,#shift_stage1_idct @// r5 = (a2 - b2 + rnd) >> 7(shift_stage1_idct) |
| vqrshrn.s32 d12,q6,#shift_stage1_idct @// r1 = (a1 + b1 + rnd) >> 7(shift_stage1_idct) |
| vqrshrn.s32 d15,q12,#shift_stage1_idct @// r6 = (a1 - b1 + rnd) >> 7(shift_stage1_idct) |
| vqrshrn.s32 d13,q8,#shift_stage1_idct @// r3 = (a3 + b3 + rnd) >> 7(shift_stage1_idct) |
| vqrshrn.s32 d14,q14,#shift_stage1_idct @// r4 = (a3 - b3 + rnd) >> 7(shift_stage1_idct) |
| |
| vtrn.16 q15,q6 |
| vtrn.16 q7,q9 |
| |
| vtrn.32 d30,d31 |
| vtrn.32 d12,d13 |
| vtrn.32 d14,d15 |
| vtrn.32 d18,d19 |
| |
| |
| vst1.16 {q15},[r1]! |
| vst1.16 {q6},[r1]! |
| add r1,r1,#64 |
| vst1.16 {q7},[r1]! |
| vst1.16 {q9},[r1]! |
| sub r1,r1,#96 |
| |
| mov r0,r8 |
| |
| |
| |
| vld1.16 d10,[r0],r6 |
| vld1.16 d8,[r0],r6 |
| vld1.16 d11,[r0],r6 |
| vld1.16 d9,[r0],r6 |
| |
| |
| vmull.s16 q12,d8,d6[1] @// y1 * cos1(part of b0) |
| vmull.s16 q13,d8,d6[3] @// y1 * cos3(part of b1) |
| vmull.s16 q14,d8,d7[1] @// y1 * sin3(part of b2) |
| vmull.s16 q15,d8,d7[3] @// y1 * sin1(part of b3) |
| |
| vmlsl.s16 q12,d9,d2[3] @// y1 * cos1 + y3 * cos3(part of b0) |
| vmlsl.s16 q13,d9,d4[1] @// y1 * cos3 - y3 * sin1(part of b1) |
| vmlsl.s16 q14,d9,d5[3] @// y1 * sin3 - y3 * cos1(part of b2) |
| vmlsl.s16 q15,d9,d7[1] @// y1 * sin1 - y3 * sin3(part of b3) |
| |
| |
| |
| |
| |
| vmull.s16 q10,d10,d0[0] |
| vmlsl.s16 q10,d11,d3[2] |
| |
| |
| vmull.s16 q11,d10,d0[0] |
| vmlsl.s16 q11,d11,d2[2] |
| |
| vmull.s16 q8,d10,d0[0] |
| vmlsl.s16 q8,d11,d1[2] |
| |
| vmull.s16 q9,d10,d0[0] |
| vmlsl.s16 q9,d11,d0[2] |
| |
| cmp r11,r10 |
| bhs shift4 |
| |
| vld1.16 d12,[r0],r6 |
| vld1.16 d14,[r0],r6 |
| vld1.16 d13,[r0],r6 |
| vld1.16 d15,[r0],r6 |
| |
| |
| |
| |
| |
| |
| vmlal.s16 q12,d14,d0[1] |
| vmlal.s16 q13,d14,d1[3] |
| vmlal.s16 q14,d14,d4[1] |
| vmlal.s16 q15,d14,d6[3] |
| |
| |
| vmlsl.s16 q12,d15,d4[1] |
| vmlsl.s16 q13,d15,d0[3] |
| vmlsl.s16 q14,d15,d2[3] |
| vmlsl.s16 q15,d15,d6[1] |
| |
| |
| vmlal.s16 q10,d12,d7[0] |
| vmlal.s16 q10,d13,d5[2] |
| vmlal.s16 q11,d12,d5[0] |
| vmlsl.s16 q11,d13,d7[2] |
| vmlal.s16 q8,d12,d3[0] |
| vmlsl.s16 q8,d13,d4[2] |
| vmlal.s16 q9,d12,d1[0] |
| vmlsl.s16 q9,d13,d1[2] |
| |
| cmp r11,r9 |
| bhs shift4 |
| |
| vld1.16 d10,[r0],r6 |
| vld1.16 d8,[r0],r6 |
| vld1.16 d11,[r0],r6 |
| vld1.16 d9,[r0],r6 |
| |
| |
| |
| vmlal.s16 q12,d8,d7[3] @// y1 * cos1(part of b0) |
| vmlal.s16 q13,d8,d3[1] @// y1 * cos3(part of b1) |
| vmlal.s16 q14,d8,d1[1] @// y1 * sin3(part of b2) |
| vmlal.s16 q15,d8,d5[3] @// y1 * sin1(part of b3) |
| |
| vmlal.s16 q12,d9,d4[3] @// y1 * cos1 + y3 * cos3(part of b0) |
| vmlsl.s16 q13,d9,d5[3] @// y1 * cos3 - y3 * sin1(part of b1) |
| vmlsl.s16 q14,d9,d0[1] @// y1 * sin3 - y3 * cos1(part of b2) |
| vmlsl.s16 q15,d9,d5[1] @// y1 * sin1 - y3 * sin3(part of b3) |
| |
| |
| |
| |
| |
| vmlsl.s16 q10,d10,d2[0] |
| vmlal.s16 q10,d11,d1[2] |
| |
| |
| vmlsl.s16 q11,d10,d6[0] |
| vmlal.s16 q11,d11,d3[2] |
| |
| vmlal.s16 q8,d10,d6[0] |
| vmlsl.s16 q8,d11,d7[2] |
| |
| vmlal.s16 q9,d10,d2[0] |
| vmlsl.s16 q9,d11,d2[2] |
| |
| cmp r11,r5 |
| bhs shift4 |
| |
| |
| vld1.16 d12,[r0],r6 |
| vld1.16 d14,[r0],r6 |
| vld1.16 d13,[r0],r6 |
| vld1.16 d15,[r0],r6 |
| |
| |
| |
| |
| |
| |
| vmlsl.s16 q12,d14,d1[1] |
| vmlsl.s16 q13,d14,d7[3] |
| vmlal.s16 q14,d14,d1[3] |
| vmlal.s16 q15,d14,d4[3] |
| |
| |
| vmlal.s16 q12,d15,d2[1] |
| vmlal.s16 q13,d15,d5[1] |
| vmlsl.s16 q14,d15,d3[1] |
| vmlsl.s16 q15,d15,d4[1] |
| |
| |
| vmlsl.s16 q10,d12,d5[0] |
| vmlsl.s16 q10,d13,d7[2] |
| vmlsl.s16 q11,d12,d1[0] |
| vmlal.s16 q11,d13,d1[2] |
| vmlsl.s16 q8,d12,d7[0] |
| vmlal.s16 q8,d13,d5[2] |
| vmlal.s16 q9,d12,d3[0] |
| vmlsl.s16 q9,d13,d3[2] |
| |
| cmp r11,r7 |
| bhs shift4 |
| |
| |
| vld1.16 d10,[r0],r6 |
| vld1.16 d8,[r0],r6 |
| vld1.16 d11,[r0],r6 |
| vld1.16 d9,[r0],r6 |
| |
| |
| vmlsl.s16 q12,d8,d5[3] @// y1 * cos1(part of b0) |
| vmlsl.s16 q13,d8,d2[3] @// y1 * cos3(part of b1) |
| vmlal.s16 q14,d8,d4[3] @// y1 * sin3(part of b2) |
| vmlal.s16 q15,d8,d3[3] @// y1 * sin1(part of b3) |
| |
| vmlsl.s16 q12,d9,d6[3] @// y1 * cos1 + y3 * cos3(part of b0) |
| vmlal.s16 q13,d9,d0[3] @// y1 * cos3 - y3 * sin1(part of b1) |
| vmlsl.s16 q14,d9,d6[1] @// y1 * sin3 - y3 * cos1(part of b2) |
| vmlsl.s16 q15,d9,d3[1] @// y1 * sin1 - y3 * sin3(part of b3) |
| |
| |
| |
| |
| |
| vmlal.s16 q10,d10,d0[0] |
| vmlsl.s16 q10,d11,d0[2] |
| |
| |
| vmlsl.s16 q11,d10,d0[0] |
| vmlal.s16 q11,d11,d6[2] |
| |
| vmlsl.s16 q8,d10,d0[0] |
| vmlal.s16 q8,d11,d2[2] |
| |
| vmlal.s16 q9,d10,d0[0] |
| vmlsl.s16 q9,d11,d4[2] |
| |
| |
| |
| |
| vld1.16 d12,[r0],r6 |
| vld1.16 d14,[r0],r6 |
| vld1.16 d13,[r0],r6 |
| vld1.16 d15,[r0],r6 |
| |
| |
| |
| |
| |
| |
| vmlal.s16 q12,d14,d3[1] |
| vmlsl.s16 q13,d14,d2[1] |
| vmlal.s16 q14,d14,d7[3] |
| vmlal.s16 q15,d14,d2[3] |
| |
| |
| vmlsl.s16 q12,d15,d0[3] |
| vmlal.s16 q13,d15,d4[3] |
| vmlal.s16 q14,d15,d6[3] |
| vmlsl.s16 q15,d15,d2[1] |
| |
| |
| vmlal.s16 q10,d12,d3[0] |
| vmlsl.s16 q10,d13,d6[2] |
| vmlal.s16 q11,d12,d7[0] |
| vmlsl.s16 q11,d13,d4[2] |
| vmlsl.s16 q8,d12,d1[0] |
| vmlal.s16 q8,d13,d0[2] |
| vmlal.s16 q9,d12,d5[0] |
| vmlsl.s16 q9,d13,d5[2] |
| |
| |
| vld1.16 d10,[r0],r6 |
| vld1.16 d8,[r0],r6 |
| vld1.16 d11,[r0],r6 |
| vld1.16 d9,[r0],r6 |
| |
| |
| |
| |
| |
| vmlal.s16 q12,d8,d3[3] @// y1 * cos1(part of b0) |
| vmlsl.s16 q13,d8,d7[1] @// y1 * cos3(part of b1) |
| vmlsl.s16 q14,d8,d5[1] @// y1 * sin3(part of b2) |
| vmlal.s16 q15,d8,d1[3] @// y1 * sin1(part of b3) |
| |
| vmlsl.s16 q12,d9,d7[1] @// y1 * cos1 + y3 * cos3(part of b0) |
| vmlsl.s16 q13,d9,d6[1] @// y1 * cos3 - y3 * sin1(part of b1) |
| vmlal.s16 q14,d9,d3[3] @// y1 * sin3 - y3 * cos1(part of b2) |
| vmlsl.s16 q15,d9,d1[1] @// y1 * sin1 - y3 * sin3(part of b3) |
| |
| |
| |
| |
| |
| vmlsl.s16 q10,d10,d6[0] |
| vmlal.s16 q10,d11,d2[2] |
| |
| |
| vmlal.s16 q11,d10,d2[0] |
| vmlsl.s16 q11,d11,d0[2] |
| |
| vmlsl.s16 q8,d10,d2[0] |
| vmlal.s16 q8,d11,d3[2] |
| |
| vmlal.s16 q9,d10,d6[0] |
| vmlsl.s16 q9,d11,d6[2] |
| |
| |
| vld1.16 d12,[r0],r6 |
| vld1.16 d14,[r0],r6 |
| vld1.16 d13,[r0],r6 |
| vld1.16 d15,[r0],r6 |
| |
| |
| |
| |
| vmlsl.s16 q12,d14,d5[1] |
| vmlal.s16 q13,d14,d3[3] |
| vmlsl.s16 q14,d14,d2[1] |
| vmlal.s16 q15,d14,d0[3] |
| |
| |
| vmlal.s16 q12,d15,d1[3] |
| vmlsl.s16 q13,d15,d1[1] |
| vmlal.s16 q14,d15,d0[3] |
| vmlsl.s16 q15,d15,d0[1] |
| |
| |
| vmlsl.s16 q10,d12,d1[0] |
| vmlal.s16 q10,d13,d4[2] |
| vmlal.s16 q11,d12,d3[0] |
| vmlsl.s16 q11,d13,d5[2] |
| vmlsl.s16 q8,d12,d5[0] |
| vmlal.s16 q8,d13,d6[2] |
| vmlal.s16 q9,d12,d7[0] |
| vmlsl.s16 q9,d13,d7[2] |
| |
| shift4: |
| vadd.s32 q4,q10,q12 |
| vsub.s32 q5,q10,q12 |
| |
| vadd.s32 q6,q11,q13 |
| vsub.s32 q12,q11,q13 |
| |
| vadd.s32 q7,q8,q14 |
| vsub.s32 q13,q8,q14 |
| |
| |
| vadd.s32 q8,q9,q15 |
| vsub.s32 q14,q9,q15 |
| |
| |
| vqrshrn.s32 d30,q4,#shift_stage1_idct @// r0 = (a0 + b0 + rnd) >> 7(shift_stage1_idct) |
| vqrshrn.s32 d19,q5,#shift_stage1_idct @// r7 = (a0 - b0 + rnd) >> 7(shift_stage1_idct) |
| vqrshrn.s32 d31,q7,#shift_stage1_idct @// r2 = (a2 + b2 + rnd) >> 7(shift_stage1_idct) |
| vqrshrn.s32 d18,q13,#shift_stage1_idct @// r5 = (a2 - b2 + rnd) >> 7(shift_stage1_idct) |
| vqrshrn.s32 d12,q6,#shift_stage1_idct @// r1 = (a1 + b1 + rnd) >> 7(shift_stage1_idct) |
| vqrshrn.s32 d15,q12,#shift_stage1_idct @// r6 = (a1 - b1 + rnd) >> 7(shift_stage1_idct) |
| vqrshrn.s32 d13,q8,#shift_stage1_idct @// r3 = (a3 + b3 + rnd) >> 7(shift_stage1_idct) |
| vqrshrn.s32 d14,q14,#shift_stage1_idct @// r4 = (a3 - b3 + rnd) >> 7(shift_stage1_idct) |
| |
| vtrn.16 q15,q6 |
| vtrn.16 q7,q9 |
| |
| vtrn.32 d30,d31 |
| vtrn.32 d12,d13 |
| vtrn.32 d14,d15 |
| vtrn.32 d18,d19 |
| |
| |
| vst1.16 {q15},[r1]! |
| vst1.16 {q6},[r1]! |
| vst1.16 {q7},[r1]! |
| vst1.16 {q9},[r1]! |
| |
| add r1,r1,#96 |
| |
| subs r14,r14,#1 |
| bne dct_stage1 |
| second_stage_dct: |
| @ mov r0,r1 |
| ldr r0,[sp] |
| ldr r1,[sp,#4] |
| ldr r8,[sp,#60] @ prediction stride |
| ldr r7,[sp,#64] @ destination stride |
| |
| @ add r4,r2,r8, lsl #1 @ r4 = r2 + pred_strd * 2 => r4 points to 3rd row of pred data |
| @ add r5,r8,r8, lsl #1 @ |
| @ sub r0,r0,#512 |
| mov r11,#0xfffffff0 |
| mov r5, #0xffffff00 |
| ldr r6,r5_addr |
| ldr r9,r9_addr |
| @ sub r1,r1,#2048 |
| mov r4,r1 |
| mov r10,#240 |
| mov r14,#8 |
| b stage2 |
| |
| @ registers free : |
| |
| @ arm registers used |
| @ r8 : predicition stride |
| @ r7 : destination stride |
| @ r1: temp buffer |
| @ r2 : pred buffer |
| @ r3 : destination buffer |
| @ r14 : loop counter |
| @r0 : scratch buffer |
| @r10 : used as stride |
| @ r4 : used to store the initial address |
| @r12 : zero cols |
| @ r11 : 0xfffffff0 |
| @ r5 : 0xffffff00 |
| dct_stage2: |
| add r4,r4,#32 |
| mov r1,r4 |
| stage2: |
| vld1.16 {d10,d11},[r1]! |
| vld1.16 {d8,d9},[r1],r10 |
| |
| vmull.s16 q12,d8,d0[1] @// y1 * cos1(part of b0) |
| vmull.s16 q13,d8,d0[3] @// y1 * cos3(part of b1) |
| vmull.s16 q14,d8,d1[1] @// y1 * sin3(part of b2) |
| vmull.s16 q15,d8,d1[3] @// y1 * sin1(part of b3) |
| |
| vmlal.s16 q12,d9,d0[3] @// y1 * cos1 + y3 * cos3(part of b0) |
| vmlal.s16 q13,d9,d2[1] @// y1 * cos3 - y3 * sin1(part of b1) |
| vmlal.s16 q14,d9,d3[3] @// y1 * sin3 - y3 * cos1(part of b2) |
| vmlal.s16 q15,d9,d5[1] @// y1 * sin1 - y3 * sin3(part of b3) |
| |
| |
| |
| vmull.s16 q10,d10,d0[0] |
| vmlal.s16 q10,d11,d0[2] |
| |
| |
| vmull.s16 q11,d10,d0[0] |
| vmlal.s16 q11,d11,d1[2] |
| |
| vmull.s16 q8,d10,d0[0] |
| vmlal.s16 q8,d11,d2[2] |
| |
| vmull.s16 q9,d10,d0[0] |
| vmlal.s16 q9,d11,d3[2] |
| cmp r12,r11 |
| bhs stage2_shift1 |
| |
| vld1.16 {d12,d13},[r1]! |
| vld1.16 {d14,d15},[r1],r10 |
| |
| |
| |
| |
| |
| |
| vmlal.s16 q12,d14,d1[1] |
| vmlal.s16 q13,d14,d3[3] |
| vmlal.s16 q14,d14,d6[1] |
| vmlsl.s16 q15,d14,d7[1] |
| |
| |
| vmlal.s16 q12,d15,d1[3] |
| vmlal.s16 q13,d15,d5[1] |
| vmlsl.s16 q14,d15,d7[1] |
| vmlsl.s16 q15,d15,d3[3] |
| |
| |
| vmlal.s16 q10,d12,d1[0] |
| vmlal.s16 q10,d13,d1[2] |
| vmlal.s16 q11,d12,d3[0] |
| vmlal.s16 q11,d13,d4[2] |
| vmlal.s16 q8,d12,d5[0] |
| vmlal.s16 q8,d13,d7[2] |
| vmlal.s16 q9,d12,d7[0] |
| vmlsl.s16 q9,d13,d5[2] |
| cmp r12,r5 |
| bhs stage2_shift1 |
| |
| vld1.16 {d10,d11},[r1]! |
| vld1.16 {d8,d9},[r1],r10 |
| |
| vmlal.s16 q12,d8,d2[1] @// y1 * cos1(part of b0) |
| vmlal.s16 q13,d8,d6[3] @// y1 * cos3(part of b1) |
| vmlsl.s16 q14,d8,d4[3] @// y1 * sin3(part of b2) |
| vmlsl.s16 q15,d8,d0[1] @// y1 * sin1(part of b3) |
| |
| vmlal.s16 q12,d9,d2[3] @// y1 * cos1 + y3 * cos3(part of b0) |
| vmlsl.s16 q13,d9,d7[3] @// y1 * cos3 - y3 * sin1(part of b1) |
| vmlsl.s16 q14,d9,d2[1] @// y1 * sin3 - y3 * cos1(part of b2) |
| vmlsl.s16 q15,d9,d3[1] @// y1 * sin1 - y3 * sin3(part of b3) |
| |
| |
| |
| |
| |
| vmlal.s16 q10,d10,d2[0] |
| vmlal.s16 q10,d11,d2[2] |
| |
| |
| vmlal.s16 q11,d10,d6[0] |
| vmlal.s16 q11,d11,d7[2] |
| |
| vmlsl.s16 q8,d10,d6[0] |
| vmlsl.s16 q8,d11,d3[2] |
| |
| vmlsl.s16 q9,d10,d2[0] |
| vmlsl.s16 q9,d11,d1[2] |
| |
| cmp r12,r6 |
| bhs stage2_shift1 |
| |
| |
| vld1.16 {d12,d13},[r1]! |
| vld1.16 {d14,d15},[r1],r10 |
| |
| |
| |
| |
| |
| vmlal.s16 q12,d14,d3[1] |
| vmlsl.s16 q13,d14,d6[1] |
| vmlsl.s16 q14,d14,d0[1] |
| vmlsl.s16 q15,d14,d6[3] |
| |
| |
| vmlal.s16 q12,d15,d3[3] |
| vmlsl.s16 q13,d15,d4[3] |
| vmlsl.s16 q14,d15,d2[3] |
| vmlal.s16 q15,d15,d5[3] |
| |
| |
| vmlal.s16 q10,d12,d3[0] |
| vmlal.s16 q10,d13,d3[2] |
| vmlsl.s16 q11,d12,d7[0] |
| vmlsl.s16 q11,d13,d5[2] |
| vmlsl.s16 q8,d12,d1[0] |
| vmlsl.s16 q8,d13,d1[2] |
| vmlsl.s16 q9,d12,d5[0] |
| vmlal.s16 q9,d13,d7[2] |
| |
| cmp r12,r9 |
| bhs stage2_shift1 |
| |
| |
| vld1.16 {d10,d11},[r1]! |
| vld1.16 {d8,d9},[r1],r10 |
| |
| |
| vmlal.s16 q12,d8,d4[1] @// y1 * cos1(part of b0) |
| vmlsl.s16 q13,d8,d3[1] @// y1 * cos3(part of b1) |
| vmlsl.s16 q14,d8,d5[1] @// y1 * sin3(part of b2) |
| vmlal.s16 q15,d8,d2[1] @// y1 * sin1(part of b3) |
| |
| vmlal.s16 q12,d9,d4[3] @// y1 * cos1 + y3 * cos3(part of b0) |
| vmlsl.s16 q13,d9,d1[3] @// y1 * cos3 - y3 * sin1(part of b1) |
| vmlsl.s16 q14,d9,d7[3] @// y1 * sin3 - y3 * cos1(part of b2) |
| vmlal.s16 q15,d9,d1[1] @// y1 * sin1 - y3 * sin3(part of b3) |
| |
| |
| |
| |
| |
| vmlal.s16 q10,d10,d0[0] |
| vmlal.s16 q10,d11,d4[2] |
| |
| |
| vmlsl.s16 q11,d10,d0[0] |
| vmlsl.s16 q11,d11,d2[2] |
| |
| vmlsl.s16 q8,d10,d0[0] |
| vmlsl.s16 q8,d11,d6[2] |
| |
| vmlal.s16 q9,d10,d0[0] |
| vmlal.s16 q9,d11,d0[2] |
| |
| vld1.16 {d12,d13},[r1]! |
| vld1.16 {d14,d15},[r1],r10 |
| |
| |
| |
| |
| |
| vmlal.s16 q12,d14,d5[1] |
| vmlsl.s16 q13,d14,d0[2] |
| vmlal.s16 q14,d14,d5[3] |
| vmlal.s16 q15,d14,d4[3] |
| |
| |
| vmlal.s16 q12,d15,d5[3] |
| vmlsl.s16 q13,d15,d1[1] |
| vmlal.s16 q14,d15,d3[1] |
| vmlsl.s16 q15,d15,d7[3] |
| |
| |
| vmlal.s16 q10,d12,d5[0] |
| vmlal.s16 q10,d13,d5[2] |
| vmlsl.s16 q11,d12,d1[0] |
| vmlsl.s16 q11,d13,d0[2] |
| vmlal.s16 q8,d12,d7[0] |
| vmlal.s16 q8,d13,d4[2] |
| vmlal.s16 q9,d12,d3[0] |
| vmlal.s16 q9,d13,d6[2] |
| |
| |
| vld1.16 {d10,d11},[r1]! |
| vld1.16 {d8,d9},[r1],r10 |
| |
| |
| |
| |
| vmlal.s16 q12,d8,d6[1] @// y1 * cos1(part of b0) |
| vmlsl.s16 q13,d8,d2[3] @// y1 * cos3(part of b1) |
| vmlal.s16 q14,d8,d0[1] @// y1 * sin3(part of b2) |
| vmlsl.s16 q15,d8,d4[1] @// y1 * sin1(part of b3) |
| |
| vmlal.s16 q12,d9,d6[3] @// y1 * cos1 + y3 * cos3(part of b0) |
| vmlsl.s16 q13,d9,d4[1] @// y1 * cos3 - y3 * sin1(part of b1) |
| vmlal.s16 q14,d9,d1[3] @// y1 * sin3 - y3 * cos1(part of b2) |
| vmlsl.s16 q15,d9,d0[1] @// y1 * sin1 - y3 * sin3(part of b3) |
| |
| |
| |
| |
| |
| vmlal.s16 q10,d10,d6[0] |
| vmlal.s16 q10,d11,d6[2] |
| |
| |
| vmlsl.s16 q11,d10,d2[0] |
| vmlsl.s16 q11,d11,d3[2] |
| |
| vmlal.s16 q8,d10,d2[0] |
| vmlal.s16 q8,d11,d0[2] |
| |
| vmlsl.s16 q9,d10,d6[0] |
| vmlsl.s16 q9,d11,d2[2] |
| |
| vld1.16 {d12,d13},[r1]! |
| vld1.16 {d14,d15},[r1],r10 |
| |
| vmlal.s16 q12,d14,d7[1] |
| vmlsl.s16 q13,d14,d5[3] |
| vmlal.s16 q14,d14,d4[1] |
| vmlsl.s16 q15,d14,d2[3] |
| |
| |
| vmlal.s16 q12,d15,d7[3] |
| vmlsl.s16 q13,d15,d7[1] |
| vmlal.s16 q14,d15,d6[3] |
| vmlsl.s16 q15,d15,d6[1] |
| |
| |
| vmlal.s16 q10,d12,d7[0] |
| vmlal.s16 q10,d13,d7[2] |
| vmlsl.s16 q11,d12,d5[0] |
| vmlsl.s16 q11,d13,d6[2] |
| vmlal.s16 q8,d12,d3[0] |
| vmlal.s16 q8,d13,d5[2] |
| vmlsl.s16 q9,d12,d1[0] |
| vmlsl.s16 q9,d13,d4[2] |
| |
| stage2_shift1: |
| vadd.s32 q4,q10,q12 |
| vsub.s32 q5,q10,q12 |
| |
| vadd.s32 q6,q11,q13 |
| vsub.s32 q12,q11,q13 |
| |
| vadd.s32 q7,q8,q14 |
| vsub.s32 q13,q8,q14 |
| |
| |
| vadd.s32 q8,q9,q15 |
| vsub.s32 q14,q9,q15 |
| |
| |
| vqrshrn.s32 d30,q4,#shift_stage2_idct @// r0 = (a0 + b0 + rnd) >> 7(shift_stage2_idct) |
| vqrshrn.s32 d19,q5,#shift_stage2_idct @// r7 = (a0 - b0 + rnd) >> 7(shift_stage2_idct) |
| vqrshrn.s32 d31,q7,#shift_stage2_idct @// r2 = (a2 + b2 + rnd) >> 7(shift_stage2_idct) |
| vqrshrn.s32 d18,q13,#shift_stage2_idct @// r5 = (a2 - b2 + rnd) >> 7(shift_stage2_idct) |
| vqrshrn.s32 d12,q6,#shift_stage2_idct @// r1 = (a1 + b1 + rnd) >> 7(shift_stage2_idct) |
| vqrshrn.s32 d15,q12,#shift_stage2_idct @// r6 = (a1 - b1 + rnd) >> 7(shift_stage2_idct) |
| vqrshrn.s32 d13,q8,#shift_stage2_idct @// r3 = (a3 + b3 + rnd) >> 7(shift_stage2_idct) |
| vqrshrn.s32 d14,q14,#shift_stage2_idct @// r4 = (a3 - b3 + rnd) >> 7(shift_stage2_idct) |
| |
| |
| vtrn.16 q15,q6 |
| vtrn.16 q7,q9 |
| |
| vtrn.32 d30,d31 |
| vtrn.32 d12,d13 |
| vtrn.32 d14,d15 |
| vtrn.32 d18,d19 |
| |
| |
| vst1.16 {q15},[r0]! |
| vst1.16 {q6},[r0]! |
| vst1.16 {q7},[r0]! |
| vst1.16 {q9},[r0]! |
| |
| |
| mov r1,r4 |
| |
| |
| |
| |
| |
| |
| vld1.16 {d10,d11},[r1]! |
| vld1.16 {d8,d9},[r1],r10 |
| |
| |
| vmull.s16 q12,d8,d2[1] @// y1 * cos1(part of b0) |
| vmull.s16 q13,d8,d2[3] @// y1 * cos3(part of b1) |
| vmull.s16 q14,d8,d3[1] @// y1 * sin3(part of b2) |
| vmull.s16 q15,d8,d3[3] @// y1 * sin1(part of b3) |
| |
| vmlal.s16 q12,d9,d6[3] @// y1 * cos1 + y3 * cos3(part of b0) |
| vmlsl.s16 q13,d9,d7[3] @// y1 * cos3 - y3 * sin1(part of b1) |
| vmlsl.s16 q14,d9,d6[1] @// y1 * sin3 - y3 * cos1(part of b2) |
| vmlsl.s16 q15,d9,d4[3] @// y1 * sin1 - y3 * sin3(part of b3) |
| |
| |
| |
| |
| |
| vmull.s16 q10,d10,d0[0] |
| vmlal.s16 q10,d11,d4[2] |
| |
| |
| vmull.s16 q11,d10,d0[0] |
| vmlal.s16 q11,d11,d5[2] |
| |
| vmull.s16 q8,d10,d0[0] |
| vmlal.s16 q8,d11,d6[2] |
| |
| vmull.s16 q9,d10,d0[0] |
| vmlal.s16 q9,d11,d7[2] |
| |
| cmp r12,r11 |
| bhs stage2_shift2 |
| |
| vld1.16 {d12,d13},[r1]! |
| vld1.16 {d14,d15},[r1],r10 |
| |
| |
| vmlsl.s16 q12,d14,d4[3] |
| vmlsl.s16 q13,d14,d2[1] |
| vmlsl.s16 q14,d14,d0[1] |
| vmlsl.s16 q15,d14,d2[3] |
| |
| |
| vmlsl.s16 q12,d15,d0[3] |
| vmlsl.s16 q13,d15,d3[1] |
| vmlsl.s16 q14,d15,d6[3] |
| vmlal.s16 q15,d15,d5[3] |
| |
| |
| vmlsl.s16 q10,d12,d7[0] |
| vmlsl.s16 q10,d13,d2[2] |
| vmlsl.s16 q11,d12,d5[0] |
| vmlsl.s16 q11,d13,d0[2] |
| vmlsl.s16 q8,d12,d3[0] |
| vmlsl.s16 q8,d13,d3[2] |
| vmlsl.s16 q9,d12,d1[0] |
| vmlsl.s16 q9,d13,d6[2] |
| |
| cmp r12,r5 |
| bhs stage2_shift2 |
| |
| vld1.16 {d10,d11},[r1]! |
| vld1.16 {d8,d9},[r1],r10 |
| |
| |
| |
| |
| |
| vmlsl.s16 q12,d8,d4[1] @// y1 * cos1(part of b0) |
| vmlal.s16 q13,d8,d7[1] @// y1 * cos3(part of b1) |
| vmlal.s16 q14,d8,d2[3] @// y1 * sin3(part of b2) |
| vmlal.s16 q15,d8,d1[3] @// y1 * sin1(part of b3) |
| |
| vmlal.s16 q12,d9,d7[1] @// y1 * cos1 + y3 * cos3(part of b0) |
| vmlal.s16 q13,d9,d1[3] @// y1 * cos3 - y3 * sin1(part of b1) |
| vmlal.s16 q14,d9,d3[3] @// y1 * sin3 - y3 * cos1(part of b2) |
| vmlsl.s16 q15,d9,d6[3] @// y1 * sin1 - y3 * sin3(part of b3) |
| |
| |
| |
| |
| |
| vmlsl.s16 q10,d10,d2[0] |
| vmlsl.s16 q10,d11,d6[2] |
| |
| |
| vmlsl.s16 q11,d10,d6[0] |
| vmlal.s16 q11,d11,d4[2] |
| |
| vmlal.s16 q8,d10,d6[0] |
| vmlal.s16 q8,d11,d0[2] |
| |
| vmlal.s16 q9,d10,d2[0] |
| vmlal.s16 q9,d11,d5[2] |
| |
| cmp r12,r6 |
| bhs stage2_shift2 |
| |
| |
| vld1.16 {d12,d13},[r1]! |
| vld1.16 {d14,d15},[r1],r10 |
| |
| |
| |
| |
| |
| |
| vmlal.s16 q12,d14,d2[3] |
| vmlal.s16 q13,d14,d3[3] |
| vmlsl.s16 q14,d14,d5[3] |
| vmlsl.s16 q15,d14,d0[3] |
| |
| |
| vmlal.s16 q12,d15,d1[3] |
| vmlsl.s16 q13,d15,d6[3] |
| vmlsl.s16 q14,d15,d0[3] |
| vmlal.s16 q15,d15,d7[3] |
| |
| |
| vmlal.s16 q10,d12,d5[0] |
| vmlal.s16 q10,d13,d0[2] |
| vmlal.s16 q11,d12,d1[0] |
| vmlal.s16 q11,d13,d6[2] |
| vmlal.s16 q8,d12,d7[0] |
| vmlsl.s16 q8,d13,d2[2] |
| vmlsl.s16 q9,d12,d3[0] |
| vmlsl.s16 q9,d13,d4[2] |
| |
| cmp r12,r9 |
| bhs stage2_shift2 |
| |
| |
| vld1.16 {d10,d11},[r1]! |
| vld1.16 {d8,d9},[r1],r10 |
| |
| |
| |
| vmlal.s16 q12,d8,d6[1] @// y1 * cos1(part of b0) |
| vmlsl.s16 q13,d8,d1[1] @// y1 * cos3(part of b1) |
| vmlsl.s16 q14,d8,d7[1] @// y1 * sin3(part of b2) |
| vmlal.s16 q15,d8,d0[3] @// y1 * sin1(part of b3) |
| |
| vmlsl.s16 q12,d9,d5[1] @// y1 * cos1 + y3 * cos3(part of b0) |
| vmlsl.s16 q13,d9,d4[1] @// y1 * cos3 - y3 * sin1(part of b1) |
| vmlal.s16 q14,d9,d2[1] @// y1 * sin3 - y3 * cos1(part of b2) |
| vmlal.s16 q15,d9,d7[1] @// y1 * sin1 - y3 * sin3(part of b3) |
| |
| |
| |
| |
| |
| vmlal.s16 q10,d10,d0[0] |
| vmlsl.s16 q10,d11,d7[2] |
| |
| |
| vmlsl.s16 q11,d10,d0[0] |
| vmlsl.s16 q11,d11,d1[2] |
| |
| vmlsl.s16 q8,d10,d0[0] |
| vmlal.s16 q8,d11,d5[2] |
| |
| vmlal.s16 q9,d10,d0[0] |
| vmlal.s16 q9,d11,d3[2] |
| |
| vld1.16 {d12,d13},[r1]! |
| vld1.16 {d14,d15},[r1],r10 |
| |
| |
| |
| |
| vmlsl.s16 q12,d14,d0[1] |
| vmlal.s16 q13,d14,d6[1] |
| vmlal.s16 q14,d14,d4[1] |
| vmlsl.s16 q15,d14,d1[1] |
| |
| |
| vmlsl.s16 q12,d15,d3[3] |
| vmlal.s16 q13,d15,d0[1] |
| vmlsl.s16 q14,d15,d5[1] |
| vmlsl.s16 q15,d15,d6[1] |
| |
| |
| vmlsl.s16 q10,d12,d3[0] |
| vmlsl.s16 q10,d13,d1[2] |
| vmlsl.s16 q11,d12,d7[0] |
| vmlal.s16 q11,d13,d3[2] |
| vmlal.s16 q8,d12,d1[0] |
| vmlal.s16 q8,d13,d7[2] |
| vmlsl.s16 q9,d12,d5[0] |
| vmlsl.s16 q9,d13,d2[2] |
| |
| |
| vld1.16 {d10,d11},[r1]! |
| vld1.16 {d8,d9},[r1],r10 |
| |
| |
| vmlal.s16 q12,d8,d7[3] @// y1 * cos1(part of b0) |
| vmlal.s16 q13,d8,d4[3] @// y1 * cos3(part of b1) |
| vmlsl.s16 q14,d8,d1[1] @// y1 * sin3(part of b2) |
| vmlal.s16 q15,d8,d2[1] @// y1 * sin1(part of b3) |
| |
| vmlal.s16 q12,d9,d3[1] @// y1 * cos1 + y3 * cos3(part of b0) |
| vmlsl.s16 q13,d9,d5[3] @// y1 * cos3 - y3 * sin1(part of b1) |
| vmlsl.s16 q14,d9,d7[3] @// y1 * sin3 - y3 * cos1(part of b2) |
| vmlal.s16 q15,d9,d5[1] @// y1 * sin1 - y3 * sin3(part of b3) |
| |
| |
| |
| |
| |
| vmlsl.s16 q10,d10,d6[0] |
| vmlal.s16 q10,d11,d5[2] |
| |
| |
| vmlal.s16 q11,d10,d2[0] |
| vmlal.s16 q11,d11,d7[2] |
| |
| vmlsl.s16 q8,d10,d2[0] |
| vmlsl.s16 q8,d11,d4[2] |
| |
| vmlal.s16 q9,d10,d6[0] |
| vmlal.s16 q9,d11,d1[2] |
| |
| |
| vld1.16 {d12,d13},[r1]! |
| vld1.16 {d14,d15},[r1],r10 |
| |
| |
| |
| vmlal.s16 q12,d14,d1[1] |
| vmlsl.s16 q13,d14,d0[3] |
| vmlal.s16 q14,d14,d1[3] |
| vmlsl.s16 q15,d14,d3[1] |
| |
| |
| vmlal.s16 q12,d15,d5[3] |
| vmlsl.s16 q13,d15,d5[1] |
| vmlal.s16 q14,d15,d4[3] |
| vmlsl.s16 q15,d15,d4[1] |
| |
| |
| vmlal.s16 q10,d12,d1[0] |
| vmlal.s16 q10,d13,d3[2] |
| vmlsl.s16 q11,d12,d3[0] |
| vmlsl.s16 q11,d13,d2[2] |
| vmlal.s16 q8,d12,d5[0] |
| vmlal.s16 q8,d13,d1[2] |
| vmlsl.s16 q9,d12,d7[0] |
| vmlsl.s16 q9,d13,d0[2] |
| |
| stage2_shift2: |
| vadd.s32 q4,q10,q12 |
| vsub.s32 q5,q10,q12 |
| |
| vadd.s32 q6,q11,q13 |
| vsub.s32 q12,q11,q13 |
| |
| vadd.s32 q7,q8,q14 |
| vsub.s32 q13,q8,q14 |
| |
| |
| vadd.s32 q8,q9,q15 |
| vsub.s32 q14,q9,q15 |
| |
| |
| vqrshrn.s32 d30,q4,#shift_stage2_idct @// r0 = (a0 + b0 + rnd) >> 7(shift_stage2_idct) |
| vqrshrn.s32 d19,q5,#shift_stage2_idct @// r7 = (a0 - b0 + rnd) >> 7(shift_stage2_idct) |
| vqrshrn.s32 d31,q7,#shift_stage2_idct @// r2 = (a2 + b2 + rnd) >> 7(shift_stage2_idct) |
| vqrshrn.s32 d18,q13,#shift_stage2_idct @// r5 = (a2 - b2 + rnd) >> 7(shift_stage2_idct) |
| vqrshrn.s32 d12,q6,#shift_stage2_idct @// r1 = (a1 + b1 + rnd) >> 7(shift_stage2_idct) |
| vqrshrn.s32 d15,q12,#shift_stage2_idct @// r6 = (a1 - b1 + rnd) >> 7(shift_stage2_idct) |
| vqrshrn.s32 d13,q8,#shift_stage2_idct @// r3 = (a3 + b3 + rnd) >> 7(shift_stage2_idct) |
| vqrshrn.s32 d14,q14,#shift_stage2_idct @// r4 = (a3 - b3 + rnd) >> 7(shift_stage2_idct) |
| |
| vtrn.16 q15,q6 |
| vtrn.16 q7,q9 |
| |
| vtrn.32 d30,d31 |
| vtrn.32 d12,d13 |
| vtrn.32 d14,d15 |
| vtrn.32 d18,d19 |
| |
| |
| vst1.16 {q15},[r0]! |
| vst1.16 {q6},[r0]! |
| vst1.16 {q7},[r0]! |
| vst1.16 {q9},[r0]! |
| |
| |
| |
| mov r1,r4 |
| |
| |
| |
| |
| vld1.16 {d10,d11},[r1]! |
| vld1.16 {d8,d9},[r1],r10 |
| |
| vmull.s16 q12,d8,d4[1] @// y1 * cos1(part of b0) |
| vmull.s16 q13,d8,d4[3] @// y1 * cos3(part of b1) |
| vmull.s16 q14,d8,d5[1] @// y1 * sin3(part of b2) |
| vmull.s16 q15,d8,d5[3] @// y1 * sin1(part of b3) |
| |
| vmlsl.s16 q12,d9,d3[1] @// y1 * cos1 + y3 * cos3(part of b0) |
| vmlsl.s16 q13,d9,d1[3] @// y1 * cos3 - y3 * sin1(part of b1) |
| vmlsl.s16 q14,d9,d0[2] @// y1 * sin3 - y3 * cos1(part of b2) |
| vmlsl.s16 q15,d9,d1[1] @// y1 * sin1 - y3 * sin3(part of b3) |
| |
| |
| |
| |
| |
| vmull.s16 q10,d10,d0[0] |
| vmlsl.s16 q10,d11,d7[2] |
| |
| |
| vmull.s16 q11,d10,d0[0] |
| vmlsl.s16 q11,d11,d6[2] |
| |
| vmull.s16 q8,d10,d0[0] |
| vmlsl.s16 q8,d11,d5[2] |
| |
| vmull.s16 q9,d10,d0[0] |
| vmlsl.s16 q9,d11,d4[2] |
| |
| cmp r12,r11 |
| bhs stage2_shift3 |
| |
| vld1.16 {d12,d13},[r1]! |
| vld1.16 {d14,d15},[r1],r10 |
| |
| vmlsl.s16 q12,d14,d5[1] |
| vmlsl.s16 q13,d14,d7[3] |
| vmlal.s16 q14,d14,d5[3] |
| vmlal.s16 q15,d14,d3[1] |
| |
| |
| vmlal.s16 q12,d15,d2[1] |
| vmlal.s16 q13,d15,d1[1] |
| vmlal.s16 q14,d15,d4[3] |
| vmlsl.s16 q15,d15,d7[3] |
| |
| |
| vmlsl.s16 q10,d12,d1[0] |
| vmlal.s16 q10,d13,d6[2] |
| vmlsl.s16 q11,d12,d3[0] |
| vmlal.s16 q11,d13,d3[2] |
| vmlsl.s16 q8,d12,d5[0] |
| vmlal.s16 q8,d13,d0[2] |
| vmlsl.s16 q9,d12,d7[0] |
| vmlal.s16 q9,d13,d2[2] |
| |
| cmp r12,r5 |
| bhs stage2_shift3 |
| |
| vld1.16 {d10,d11},[r1]! |
| vld1.16 {d8,d9},[r1],r10 |
| |
| |
| |
| vmlal.s16 q12,d8,d6[1] @// y1 * cos1(part of b0) |
| vmlsl.s16 q13,d8,d5[1] @// y1 * cos3(part of b1) |
| vmlsl.s16 q14,d8,d0[3] @// y1 * sin3(part of b2) |
| vmlsl.s16 q15,d8,d3[3] @// y1 * sin1(part of b3) |
| |
| vmlsl.s16 q12,d9,d1[1] @// y1 * cos1 + y3 * cos3(part of b0) |
| vmlsl.s16 q13,d9,d4[1] @// y1 * cos3 - y3 * sin1(part of b1) |
| vmlal.s16 q14,d9,d6[1] @// y1 * sin3 - y3 * cos1(part of b2) |
| vmlal.s16 q15,d9,d0[1] @// y1 * sin1 - y3 * sin3(part of b3) |
| |
| |
| |
| |
| |
| vmlal.s16 q10,d10,d2[0] |
| vmlsl.s16 q10,d11,d5[2] |
| |
| |
| vmlal.s16 q11,d10,d6[0] |
| vmlsl.s16 q11,d11,d0[2] |
| |
| vmlsl.s16 q8,d10,d6[0] |
| vmlsl.s16 q8,d11,d4[2] |
| |
| vmlsl.s16 q9,d10,d2[0] |
| vmlal.s16 q9,d11,d6[2] |
| |
| cmp r12,r6 |
| bhs stage2_shift3 |
| |
| vld1.16 {d12,d13},[r1]! |
| vld1.16 {d14,d15},[r1],r10 |
| |
| |
| |
| |
| |
| vmlsl.s16 q12,d14,d7[1] |
| vmlal.s16 q13,d14,d2[1] |
| vmlal.s16 q14,d14,d4[1] |
| vmlsl.s16 q15,d14,d5[1] |
| |
| |
| vmlal.s16 q12,d15,d0[3] |
| vmlal.s16 q13,d15,d7[1] |
| vmlsl.s16 q14,d15,d1[1] |
| vmlsl.s16 q15,d15,d6[1] |
| |
| |
| vmlsl.s16 q10,d12,d3[0] |
| vmlal.s16 q10,d13,d4[2] |
| vmlal.s16 q11,d12,d7[0] |
| vmlal.s16 q11,d13,d2[2] |
| vmlal.s16 q8,d12,d1[0] |
| vmlsl.s16 q8,d13,d6[2] |
| vmlal.s16 q9,d12,d5[0] |
| vmlsl.s16 q9,d13,d0[2] |
| |
| cmp r12,r9 |
| bhs stage2_shift3 |
| |
| |
| vld1.16 {d10,d11},[r1]! |
| vld1.16 {d8,d9},[r1],r10 |
| |
| |
| vmlsl.s16 q12,d8,d7[3] @// y1 * cos1(part of b0) |
| vmlsl.s16 q13,d8,d0[1] @// y1 * cos3(part of b1) |
| vmlal.s16 q14,d8,d6[3] @// y1 * sin3(part of b2) |
| vmlal.s16 q15,d8,d1[3] @// y1 * sin1(part of b3) |
| |
| vmlsl.s16 q12,d9,d0[1] @// y1 * cos1 + y3 * cos3(part of b0) |
| vmlal.s16 q13,d9,d5[3] @// y1 * cos3 - y3 * sin1(part of b1) |
| vmlal.s16 q14,d9,d3[3] @// y1 * sin3 - y3 * cos1(part of b2) |
| vmlsl.s16 q15,d9,d2[3] @// y1 * sin1 - y3 * sin3(part of b3) |
| |
| |
| |
| |
| |
| vmlal.s16 q10,d10,d0[0] |
| vmlsl.s16 q10,d11,d3[2] |
| |
| |
| vmlsl.s16 q11,d10,d0[0] |
| vmlsl.s16 q11,d11,d5[2] |
| |
| vmlsl.s16 q8,d10,d0[0] |
| vmlal.s16 q8,d11,d1[2] |
| |
| vmlal.s16 q9,d10,d0[0] |
| vmlal.s16 q9,d11,d7[2] |
| |
| vld1.16 {d12,d13},[r1]! |
| vld1.16 {d14,d15},[r1],r10 |
| |
| |
| |
| |
| vmlal.s16 q12,d14,d6[3] |
| vmlal.s16 q13,d14,d3[3] |
| vmlsl.s16 q14,d14,d1[3] |
| vmlal.s16 q15,d14,d7[1] |
| |
| |
| vmlal.s16 q12,d15,d1[3] |
| vmlsl.s16 q13,d15,d2[3] |
| vmlal.s16 q14,d15,d7[1] |
| vmlal.s16 q15,d15,d4[1] |
| |
| |
| vmlsl.s16 q10,d12,d5[0] |
| vmlal.s16 q10,d13,d2[2] |
| vmlal.s16 q11,d12,d1[0] |
| vmlsl.s16 q11,d13,d7[2] |
| vmlsl.s16 q8,d12,d7[0] |
| vmlsl.s16 q8,d13,d3[2] |
| vmlsl.s16 q9,d12,d3[0] |
| vmlal.s16 q9,d13,d1[2] |
| |
| |
| vld1.16 {d10,d11},[r1]! |
| vld1.16 {d8,d9},[r1],r10 |
| |
| |
| vmlsl.s16 q12,d8,d5[3] @// y1 * cos1(part of b0) |
| vmlsl.s16 q13,d8,d6[3] @// y1 * cos3(part of b1) |
| vmlal.s16 q14,d8,d3[1] @// y1 * sin3(part of b2) |
| vmlsl.s16 q15,d8,d0[1] @// y1 * sin1(part of b3) |
| |
| vmlsl.s16 q12,d9,d2[3] @// y1 * cos1 + y3 * cos3(part of b0) |
| vmlal.s16 q13,d9,d0[1] @// y1 * cos3 - y3 * sin1(part of b1) |
| vmlsl.s16 q14,d9,d2[1] @// y1 * sin3 - y3 * cos1(part of b2) |
| vmlal.s16 q15,d9,d4[3] @// y1 * sin1 - y3 * sin3(part of b3) |
| |
| |
| |
| |
| |
| vmlal.s16 q10,d10,d6[0] |
| vmlsl.s16 q10,d11,d1[2] |
| |
| |
| vmlsl.s16 q11,d10,d2[0] |
| vmlal.s16 q11,d11,d4[2] |
| |
| vmlal.s16 q8,d10,d2[0] |
| vmlsl.s16 q8,d11,d7[2] |
| |
| vmlsl.s16 q9,d10,d6[0] |
| vmlsl.s16 q9,d11,d5[2] |
| |
| vld1.16 {d12,d13},[r1]! |
| vld1.16 {d14,d15},[r1],r10 |
| |
| |
| |
| vmlal.s16 q12,d14,d4[3] |
| vmlsl.s16 q13,d14,d6[1] |
| vmlal.s16 q14,d14,d7[3] |
| vmlal.s16 q15,d14,d6[3] |
| |
| |
| vmlal.s16 q12,d15,d3[3] |
| vmlsl.s16 q13,d15,d3[1] |
| vmlal.s16 q14,d15,d2[3] |
| vmlsl.s16 q15,d15,d2[1] |
| |
| |
| vmlsl.s16 q10,d12,d7[0] |
| vmlal.s16 q10,d13,d0[2] |
| vmlal.s16 q11,d12,d5[0] |
| vmlsl.s16 q11,d13,d1[2] |
| vmlsl.s16 q8,d12,d3[0] |
| vmlal.s16 q8,d13,d2[2] |
| vmlal.s16 q9,d12,d1[0] |
| vmlsl.s16 q9,d13,d3[2] |
| |
| stage2_shift3: |
| vadd.s32 q4,q10,q12 |
| vsub.s32 q5,q10,q12 |
| |
| vadd.s32 q6,q11,q13 |
| vsub.s32 q12,q11,q13 |
| |
| vadd.s32 q7,q8,q14 |
| vsub.s32 q13,q8,q14 |
| |
| |
| vadd.s32 q8,q9,q15 |
| vsub.s32 q14,q9,q15 |
| |
| |
| vqrshrn.s32 d30,q4,#shift_stage2_idct @// r0 = (a0 + b0 + rnd) >> 7(shift_stage2_idct) |
| vqrshrn.s32 d19,q5,#shift_stage2_idct @// r11 = (a0 - b0 + rnd) >> 7(shift_stage2_idct) |
| vqrshrn.s32 d31,q7,#shift_stage2_idct @// r2 = (a2 + b2 + rnd) >> 7(shift_stage2_idct) |
| vqrshrn.s32 d18,q13,#shift_stage2_idct @// r5 = (a2 - b2 + rnd) >> 7(shift_stage2_idct) |
| vqrshrn.s32 d12,q6,#shift_stage2_idct @// r1 = (a1 + b1 + rnd) >> 7(shift_stage2_idct) |
| vqrshrn.s32 d15,q12,#shift_stage2_idct @// r6 = (a1 - b1 + rnd) >> 7(shift_stage2_idct) |
| vqrshrn.s32 d13,q8,#shift_stage2_idct @// r3 = (a3 + b3 + rnd) >> 7(shift_stage2_idct) |
| vqrshrn.s32 d14,q14,#shift_stage2_idct @// r4 = (a3 - b3 + rnd) >> 7(shift_stage2_idct) |
| |
| vtrn.16 q15,q6 |
| vtrn.16 q7,q9 |
| |
| vtrn.32 d30,d31 |
| vtrn.32 d12,d13 |
| vtrn.32 d14,d15 |
| vtrn.32 d18,d19 |
| |
| |
| vst1.16 {q15},[r0]! |
| vst1.16 {q6},[r0]! |
| vst1.16 {q7},[r0]! |
| vst1.16 {q9},[r0]! |
| |
| |
| |
| |
| mov r1,r4 |
| |
| |
| |
| |
| vld1.16 {d10,d11},[r1]! |
| vld1.16 {d8,d9},[r1],r10 |
| |
| |
| vmull.s16 q12,d8,d6[1] @// y1 * cos1(part of b0) |
| vmull.s16 q13,d8,d6[3] @// y1 * cos3(part of b1) |
| vmull.s16 q14,d8,d7[1] @// y1 * sin3(part of b2) |
| vmull.s16 q15,d8,d7[3] @// y1 * sin1(part of b3) |
| |
| vmlsl.s16 q12,d9,d2[3] @// y1 * cos1 + y3 * cos3(part of b0) |
| vmlsl.s16 q13,d9,d4[1] @// y1 * cos3 - y3 * sin1(part of b1) |
| vmlsl.s16 q14,d9,d5[3] @// y1 * sin3 - y3 * cos1(part of b2) |
| vmlsl.s16 q15,d9,d7[1] @// y1 * sin1 - y3 * sin3(part of b3) |
| |
| |
| |
| |
| |
| vmull.s16 q10,d10,d0[0] |
| vmlsl.s16 q10,d11,d3[2] |
| |
| |
| vmull.s16 q11,d10,d0[0] |
| vmlsl.s16 q11,d11,d2[2] |
| |
| vmull.s16 q8,d10,d0[0] |
| vmlsl.s16 q8,d11,d1[2] |
| |
| vmull.s16 q9,d10,d0[0] |
| vmlsl.s16 q9,d11,d0[2] |
| |
| cmp r12,r11 |
| bhs stage2_shift4 |
| vld1.16 {d12,d13},[r1]! |
| vld1.16 {d14,d15},[r1],r10 |
| |
| |
| |
| |
| |
| |
| vmlal.s16 q12,d14,d0[1] |
| vmlal.s16 q13,d14,d1[3] |
| vmlal.s16 q14,d14,d4[1] |
| vmlal.s16 q15,d14,d6[3] |
| |
| |
| vmlsl.s16 q12,d15,d4[1] |
| vmlsl.s16 q13,d15,d0[3] |
| vmlsl.s16 q14,d15,d2[3] |
| vmlsl.s16 q15,d15,d6[1] |
| |
| |
| vmlal.s16 q10,d12,d7[0] |
| vmlal.s16 q10,d13,d5[2] |
| vmlal.s16 q11,d12,d5[0] |
| vmlsl.s16 q11,d13,d7[2] |
| vmlal.s16 q8,d12,d3[0] |
| vmlsl.s16 q8,d13,d4[2] |
| vmlal.s16 q9,d12,d1[0] |
| vmlsl.s16 q9,d13,d1[2] |
| |
| cmp r12,r5 |
| bhs stage2_shift4 |
| |
| vld1.16 {d10,d11},[r1]! |
| vld1.16 {d8,d9},[r1],r10 |
| |
| |
| |
| vmlal.s16 q12,d8,d7[3] @// y1 * cos1(part of b0) |
| vmlal.s16 q13,d8,d3[1] @// y1 * cos3(part of b1) |
| vmlal.s16 q14,d8,d1[1] @// y1 * sin3(part of b2) |
| vmlal.s16 q15,d8,d5[3] @// y1 * sin1(part of b3) |
| |
| vmlal.s16 q12,d9,d4[3] @// y1 * cos1 + y3 * cos3(part of b0) |
| vmlsl.s16 q13,d9,d5[3] @// y1 * cos3 - y3 * sin1(part of b1) |
| vmlsl.s16 q14,d9,d0[1] @// y1 * sin3 - y3 * cos1(part of b2) |
| vmlsl.s16 q15,d9,d5[1] @// y1 * sin1 - y3 * sin3(part of b3) |
| |
| |
| |
| |
| |
| vmlsl.s16 q10,d10,d2[0] |
| vmlal.s16 q10,d11,d1[2] |
| |
| |
| vmlsl.s16 q11,d10,d6[0] |
| vmlal.s16 q11,d11,d3[2] |
| |
| vmlal.s16 q8,d10,d6[0] |
| vmlsl.s16 q8,d11,d7[2] |
| |
| vmlal.s16 q9,d10,d2[0] |
| vmlsl.s16 q9,d11,d2[2] |
| |
| cmp r12,r6 |
| bhs stage2_shift4 |
| |
| |
| vld1.16 {d12,d13},[r1]! |
| vld1.16 {d14,d15},[r1],r10 |
| |
| |
| |
| |
| |
| |
| vmlsl.s16 q12,d14,d1[1] |
| vmlsl.s16 q13,d14,d7[3] |
| vmlal.s16 q14,d14,d1[3] |
| vmlal.s16 q15,d14,d4[3] |
| |
| |
| vmlal.s16 q12,d15,d2[1] |
| vmlal.s16 q13,d15,d5[1] |
| vmlsl.s16 q14,d15,d3[1] |
| vmlsl.s16 q15,d15,d4[1] |
| |
| |
| vmlsl.s16 q10,d12,d5[0] |
| vmlsl.s16 q10,d13,d7[2] |
| vmlsl.s16 q11,d12,d1[0] |
| vmlal.s16 q11,d13,d1[2] |
| vmlsl.s16 q8,d12,d7[0] |
| vmlal.s16 q8,d13,d5[2] |
| vmlal.s16 q9,d12,d3[0] |
| vmlsl.s16 q9,d13,d3[2] |
| |
| cmp r12,r9 |
| bhs stage2_shift4 |
| |
| |
| vld1.16 {d10,d11},[r1]! |
| vld1.16 {d8,d9},[r1],r10 |
| |
| |
| vmlsl.s16 q12,d8,d5[3] @// y1 * cos1(part of b0) |
| vmlsl.s16 q13,d8,d2[3] @// y1 * cos3(part of b1) |
| vmlal.s16 q14,d8,d4[3] @// y1 * sin3(part of b2) |
| vmlal.s16 q15,d8,d3[3] @// y1 * sin1(part of b3) |
| |
| vmlsl.s16 q12,d9,d6[3] @// y1 * cos1 + y3 * cos3(part of b0) |
| vmlal.s16 q13,d9,d0[3] @// y1 * cos3 - y3 * sin1(part of b1) |
| vmlsl.s16 q14,d9,d6[1] @// y1 * sin3 - y3 * cos1(part of b2) |
| vmlsl.s16 q15,d9,d3[1] @// y1 * sin1 - y3 * sin3(part of b3) |
| |
| |
| |
| |
| |
| vmlal.s16 q10,d10,d0[0] |
| vmlsl.s16 q10,d11,d0[2] |
| |
| |
| vmlsl.s16 q11,d10,d0[0] |
| vmlal.s16 q11,d11,d6[2] |
| |
| vmlsl.s16 q8,d10,d0[0] |
| vmlal.s16 q8,d11,d2[2] |
| |
| vmlal.s16 q9,d10,d0[0] |
| vmlsl.s16 q9,d11,d4[2] |
| |
| vld1.16 {d12,d13},[r1]! |
| vld1.16 {d14,d15},[r1],r10 |
| |
| |
| |
| |
| vmlal.s16 q12,d14,d3[1] |
| vmlsl.s16 q13,d14,d2[1] |
| vmlal.s16 q14,d14,d7[3] |
| vmlal.s16 q15,d14,d2[3] |
| |
| |
| vmlsl.s16 q12,d15,d0[3] |
| vmlal.s16 q13,d15,d4[3] |
| vmlal.s16 q14,d15,d6[3] |
| vmlsl.s16 q15,d15,d2[1] |
| |
| |
| vmlal.s16 q10,d12,d3[0] |
| vmlsl.s16 q10,d13,d6[2] |
| vmlal.s16 q11,d12,d7[0] |
| vmlsl.s16 q11,d13,d4[2] |
| vmlsl.s16 q8,d12,d1[0] |
| vmlal.s16 q8,d13,d0[2] |
| vmlal.s16 q9,d12,d5[0] |
| vmlsl.s16 q9,d13,d5[2] |
| |
| |
| vld1.16 {d10,d11},[r1]! |
| vld1.16 {d8,d9},[r1],r10 |
| |
| |
| |
| |
| vmlal.s16 q12,d8,d3[3] @// y1 * cos1(part of b0) |
| vmlsl.s16 q13,d8,d7[1] @// y1 * cos3(part of b1) |
| vmlsl.s16 q14,d8,d5[1] @// y1 * sin3(part of b2) |
| vmlal.s16 q15,d8,d1[3] @// y1 * sin1(part of b3) |
| |
| vmlsl.s16 q12,d9,d7[1] @// y1 * cos1 + y3 * cos3(part of b0) |
| vmlsl.s16 q13,d9,d6[1] @// y1 * cos3 - y3 * sin1(part of b1) |
| vmlal.s16 q14,d9,d3[3] @// y1 * sin3 - y3 * cos1(part of b2) |
| vmlsl.s16 q15,d9,d1[1] @// y1 * sin1 - y3 * sin3(part of b3) |
| |
| |
| |
| |
| |
| vmlsl.s16 q10,d10,d6[0] |
| vmlal.s16 q10,d11,d2[2] |
| |
| |
| vmlal.s16 q11,d10,d2[0] |
| vmlsl.s16 q11,d11,d0[2] |
| |
| vmlsl.s16 q8,d10,d2[0] |
| vmlal.s16 q8,d11,d3[2] |
| |
| vmlal.s16 q9,d10,d6[0] |
| vmlsl.s16 q9,d11,d6[2] |
| |
| |
| vld1.16 {d12,d13},[r1]! |
| vld1.16 {d14,d15},[r1],r10 |
| |
| |
| |
| vmlsl.s16 q12,d14,d5[1] |
| vmlal.s16 q13,d14,d3[3] |
| vmlsl.s16 q14,d14,d2[1] |
| vmlal.s16 q15,d14,d0[3] |
| |
| |
| vmlal.s16 q12,d15,d1[3] |
| vmlsl.s16 q13,d15,d1[1] |
| vmlal.s16 q14,d15,d0[3] |
| vmlsl.s16 q15,d15,d0[1] |
| |
| |
| vmlsl.s16 q10,d12,d1[0] |
| vmlal.s16 q10,d13,d4[2] |
| vmlal.s16 q11,d12,d3[0] |
| vmlsl.s16 q11,d13,d5[2] |
| vmlsl.s16 q8,d12,d5[0] |
| vmlal.s16 q8,d13,d6[2] |
| vmlal.s16 q9,d12,d7[0] |
| vmlsl.s16 q9,d13,d7[2] |
| |
| stage2_shift4: |
| vadd.s32 q4,q10,q12 |
| vsub.s32 q5,q10,q12 |
| |
| vadd.s32 q6,q11,q13 |
| vsub.s32 q12,q11,q13 |
| |
| vadd.s32 q7,q8,q14 |
| vsub.s32 q13,q8,q14 |
| |
| |
| vadd.s32 q8,q9,q15 |
| vsub.s32 q14,q9,q15 |
| |
| |
| vqrshrn.s32 d30,q4,#shift_stage2_idct @// r0 = (a0 + b0 + rnd) >> 7(shift_stage2_idct) |
| vqrshrn.s32 d19,q5,#shift_stage2_idct @// r11 = (a0 - b0 + rnd) >> 7(shift_stage2_idct) |
| vqrshrn.s32 d31,q7,#shift_stage2_idct @// r2 = (a2 + b2 + rnd) >> 7(shift_stage2_idct) |
| vqrshrn.s32 d18,q13,#shift_stage2_idct @// r5 = (a2 - b2 + rnd) >> 7(shift_stage2_idct) |
| vqrshrn.s32 d12,q6,#shift_stage2_idct @// r1 = (a1 + b1 + rnd) >> 7(shift_stage2_idct) |
| vqrshrn.s32 d15,q12,#shift_stage2_idct @// r6 = (a1 - b1 + rnd) >> 7(shift_stage2_idct) |
| vqrshrn.s32 d13,q8,#shift_stage2_idct @// r3 = (a3 + b3 + rnd) >> 7(shift_stage2_idct) |
| vqrshrn.s32 d14,q14,#shift_stage2_idct @// r4 = (a3 - b3 + rnd) >> 7(shift_stage2_idct) |
| |
| |
| |
| vtrn.16 q15,q6 |
| vtrn.16 q7,q9 |
| |
| vtrn.32 d30,d31 |
| vtrn.32 d12,d13 |
| vtrn.32 d14,d15 |
| vtrn.32 d18,d19 |
| |
| |
| |
| vst1.16 {q15},[r0]! |
| vst1.16 {q6},[r0]! |
| vst1.16 {q7},[r0]! |
| vst1.16 {q9},[r0]! |
| |
| |
| |
| |
| sub r0,r0,#256 |
| prediction_buffer: |
| |
| |
| vld1.16 {d12,d13},[r0]! |
| vld1.16 {d14,d15},[r0]! |
| |
| add r0,r0,#32 |
| |
| vld1.16 {d16,d17},[r0]! |
| vld1.16 {d18,d19},[r0]! |
| add r0,r0,#32 |
| |
| vld1.16 {d20,d21},[r0]! |
| vld1.16 {d22,d23},[r0]! |
| |
| |
| add r0,r0,#32 |
| |
| vld1.16 {d24,d25},[r0]! |
| vld1.16 {d26,d27},[r0]! |
| |
| |
| |
| |
| |
| @ d12 =r0 1- 4 values |
| @ d13 =r2 1- 4 values |
| @ d14=r1 1- 4 values |
| @ d15=r3 1- 4 values |
| |
| @ d16 =r0 5- 8 values |
| @ d17 =r2 5- 8 values |
| @ d18=r1 5- 8 values |
| @ d19=r3 5- 8 values |
| |
| @ d20 =r0 9- 12 values |
| @ d21 =r2 9- 12 values |
| @ d22=r1 9- 12 values |
| @ d23=r3 9- 12 values |
| |
| @ d24 =r0 13-16 values |
| @ d25 =r2 13- 16 values |
| @ d26=r1 13- 16 values |
| @ d27=r3 13- 16 values |
| |
| vswp d13,d16 |
| vswp d21,d24 |
| vswp d15,d18 |
| vswp d23,d26 |
| |
| |
| vld1.8 {d8,d9},[r2],r8 |
| vld1.8 {d10,d11},[r2],r8 |
| vld1.8 {d28,d29},[r2],r8 |
| vld1.8 {d30,d31},[r2],r8 |
| |
| |
| vaddw.u8 q6,q6,d8 |
| vaddw.u8 q10,q10,d9 |
| vaddw.u8 q7,q7,d10 |
| vaddw.u8 q11,q11,d11 |
| vaddw.u8 q8,q8,d28 |
| vaddw.u8 q12,q12,d29 |
| vaddw.u8 q9,q9,d30 |
| vaddw.u8 q13,q13,d31 |
| sub r2,r2,r8,lsl #2 |
| add r2,r2,#16 |
| vqmovun.s16 d12,q6 |
| vqmovun.s16 d13,q10 |
| vqmovun.s16 d20,q7 |
| vqmovun.s16 d21,q11 |
| vqmovun.s16 d14,q8 |
| vqmovun.s16 d15,q12 |
| vqmovun.s16 d22,q9 |
| vqmovun.s16 d23,q13 |
| |
| |
| vst1.8 {d12,d13},[r3],r7 |
| vst1.8 {d20,d21},[r3],r7 |
| vst1.8 {d14,d15},[r3],r7 |
| vst1.8 {d22,d23},[r3],r7 |
| |
| |
| sub r3,r3,r7,lsl #2 |
| add r3,r3,#16 |
| |
| vld1.16 {d12,d13},[r0]! |
| vld1.16 {d14,d15},[r0]! |
| |
| sub r0,r0,#96 |
| |
| vld1.16 {d16,d17},[r0]! |
| vld1.16 {d18,d19},[r0]! |
| sub r0,r0,#96 |
| |
| vld1.16 {d20,d21},[r0]! |
| vld1.16 {d22,d23},[r0]! |
| |
| |
| sub r0,r0,#96 |
| |
| vld1.16 {d24,d25},[r0]! |
| vld1.16 {d26,d27},[r0]! |
| |
| |
| sub r0,r0,#64 |
| |
| |
| |
| |
| vswp d13,d16 |
| vswp d21,d24 |
| vswp d15,d18 |
| vswp d23,d26 |
| |
| |
| vld1.8 {d8,d9},[r2],r8 |
| vld1.8 {d10,d11},[r2],r8 |
| vld1.8 {d28,d29},[r2],r8 |
| vld1.8 {d30,d31},[r2],r8 |
| |
| |
| vaddw.u8 q6,q6,d8 |
| vaddw.u8 q10,q10,d9 |
| vaddw.u8 q7,q7,d10 |
| vaddw.u8 q11,q11,d11 |
| vaddw.u8 q8,q8,d28 |
| vaddw.u8 q12,q12,d29 |
| vaddw.u8 q9,q9,d30 |
| vaddw.u8 q13,q13,d31 |
| sub r2,r2,#16 |
| |
| vqmovun.s16 d12,q6 |
| vqmovun.s16 d13,q10 |
| vqmovun.s16 d20,q7 |
| vqmovun.s16 d21,q11 |
| vqmovun.s16 d14,q8 |
| vqmovun.s16 d15,q12 |
| vqmovun.s16 d22,q9 |
| vqmovun.s16 d23,q13 |
| |
| |
| vst1.8 {d12,d13},[r3],r7 |
| vst1.8 {d20,d21},[r3],r7 |
| vst1.8 {d14,d15},[r3],r7 |
| vst1.8 {d22,d23},[r3],r7 |
| |
| sub r3,r3,#16 |
| |
| subs r14,r14,#1 |
| bne dct_stage2 |
| ldmfd sp!,{r0-r12,pc} |
| |
| |
| |
| |
| |