1e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@/* 2e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ ** Copyright 2003-2010, VisualOn, Inc. 3e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ ** 4e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ ** Licensed under the Apache License, Version 2.0 (the "License"); 5e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ ** you may not use this file except in compliance with the License. 6e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ ** You may obtain a copy of the License at 7e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ ** 8e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ ** http://www.apache.org/licenses/LICENSE-2.0 9e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ ** 10e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ ** Unless required by applicable law or agreed to in writing, software 11e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ ** distributed under the License is distributed on an "AS IS" BASIS, 12e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ ** See the License for the specific language governing permissions and 14e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ ** limitations under the License. 15e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ */ 16e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ 17e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@void Syn_filt_32( 18e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ Word16 a[], /* (i) Q12 : a[m+1] prediction coefficients */ 19e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ Word16 m, /* (i) : order of LP filter */ 20e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ Word16 exc[], /* (i) Qnew: excitation (exc[i] >> Qnew) */ 21e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ Word16 Qnew, /* (i) : exc scaling = 0(min) to 8(max) */ 22e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ Word16 sig_hi[], /* (o) /16 : synthesis high */ 23e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ Word16 sig_lo[], /* (o) /16 : synthesis low */ 24e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ Word16 lg /* (i) : size of filtering */ 25e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@) 26e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@*************************************************************** 27e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ 28e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ a[] --- r0 29e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ m --- r1 30e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ exc[] --- r2 31e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ Qnew --- r3 32e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ sig_hi[] --- r4 33e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ sig_lo[] --- r5 34e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ lg --- r6 35e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 36e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard .section .text 37e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard .global Syn_filt_32_asm 38e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 39e2e838afcf03e603a41a0455846eaf9614537c16Mans RullgardSyn_filt_32_asm: 40e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 41b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard STMFD r13!, {r4 - r12, r14} 42e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard LDR r4, [r13, #40] @ get sig_hi[] address 43e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard LDR r5, [r13, #44] @ get sig_lo[] address 44e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 45e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard LDRSH r6, [r0] @ load Aq[0] 46e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ADD r7, r3, #4 @ 4 + Q_new 47e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard MOV r3, r6, ASR r7 @ a0 = Aq[0] >> (4 + Q_new) 48e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 49e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard LDR r14, =0xffff 50e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard LDRSH r6, [r0, #2] @ load Aq[1] 51e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard LDRSH r7, [r0, #4] @ load Aq[2] 52e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard LDRSH r8, [r0, #6] @ load Aq[3] 53e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard LDRSH r9, [r0, #8] @ load Aq[4] 54e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard AND r6, r6, r14 55e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard AND r8, r8, r14 56e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ORR r10, r6, r7, LSL #16 @ Aq[2] -- Aq[1] 57e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ORR r11, r8, r9, LSL #16 @ Aq[4] -- Aq[3] 58b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard STR r10, [r13, #-4] 59e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard STR r11, [r13, #-8] 60e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 61e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard LDRSH r6, [r0, #10] @ load Aq[5] 62e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard LDRSH r7, [r0, #12] @ load Aq[6] 63e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard LDRSH r8, [r0, #14] @ load Aq[7] 64e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard LDRSH r9, [r0, #16] @ load Aq[8] 65e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard AND r6, r6, r14 66e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard AND r8, r8, r14 67e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ORR r10, r6, r7, LSL #16 @ Aq[6] -- Aq[5] 68e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ORR r11, r8, r9, LSL #16 @ Aq[8] -- Aq[7] 69e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard STR r10, [r13, #-12] 70e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard STR r11, [r13, #-16] 71e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 72e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard LDRSH r6, [r0, #18] @ load Aq[9] 73e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard LDRSH r7, [r0, #20] @ load Aq[10] 74e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard LDRSH r8, [r0, #22] @ load Aq[11] 75e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard LDRSH r9, [r0, #24] @ load Aq[12] 76b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard AND r6, r6, r14 77e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard AND r8, r8, r14 78e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ORR r10, r6, r7, LSL #16 @ Aq[10] -- Aq[9] 79e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ORR r11, r8, r9, LSL #16 @ Aq[12] -- Aq[11] 80e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard STR r10, [r13, #-20] 81b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard STR r11, [r13, #-24] 82e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 83e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard LDRSH r6, [r0, #26] @ load Aq[13] 84e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard LDRSH r7, [r0, #28] @ load Aq[14] 85e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard LDRSH r8, [r0, #30] @ load Aq[15] 86e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard LDRSH r9, [r0, #32] @ load Aq[16] 87e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard AND r6, r6, r14 88e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard AND r8, r8, r14 89e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ORR r10, r6, r7, LSL #16 @ Aq[14] -- Aq[13] 90e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ORR r11, r8, r9, LSL #16 @ Aq[16] -- Aq[15] 91e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard STR r10, [r13, #-28] 92e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard STR r11, [r13, #-32] 93b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard 94e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard MOV r8, #0 @ i = 0 95b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard 96b676a05348e4c516fa8b57e33b10548e6142c3f8Mans RullgardLOOP: 97e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard LDRSH r6, [r5, #-2] @ load sig_lo[i-1] 98e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard LDRSH r7, [r5, #-4] @ load sig_lo[i-2] 99e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 100b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard LDR r11, [r13, #-4] @ Aq[2] -- Aq[1] 101e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard LDRSH r9, [r5, #-6] @ load sig_lo[i-3] 102e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard LDRSH r10, [r5, #-8] @ load sig_lo[i-4] 103e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 104e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard SMULBB r12, r6, r11 @ sig_lo[i-1] * Aq[1] 105e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 106e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard LDRSH r6, [r5, #-10] @ load sig_lo[i-5] 107e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard SMLABT r12, r7, r11, r12 @ sig_lo[i-2] * Aq[2] 108e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard LDR r11, [r13, #-8] @ Aq[4] -- Aq[3] 109e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard LDRSH r7, [r5, #-12] @ load sig_lo[i-6] 110e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard SMLABB r12, r9, r11, r12 @ sig_lo[i-3] * Aq[3] 111e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard LDRSH r9, [r5, #-14] @ load sig_lo[i-7] 112e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard SMLABT r12, r10, r11, r12 @ sig_lo[i-4] * Aq[4] 113e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard LDR r11, [r13, #-12] @ Aq[6] -- Aq[5] 114e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard LDRSH r10, [r5, #-16] @ load sig_lo[i-8] 115e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard SMLABB r12, r6, r11, r12 @ sig_lo[i-5] * Aq[5] 116e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard LDRSH r6, [r5, #-18] @ load sig_lo[i-9] 117e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard SMLABT r12, r7, r11, r12 @ sig_lo[i-6] * Aq[6] 118e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard LDR r11, [r13, #-16] @ Aq[8] -- Aq[7] 119e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard LDRSH r7, [r5, #-20] @ load sig_lo[i-10] 120e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard SMLABB r12, r9, r11, r12 @ sig_lo[i-7] * Aq[7] 121e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard LDRSH r9, [r5, #-22] @ load sig_lo[i-11] 122e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard SMLABT r12, r10, r11, r12 @ sig_lo[i-8] * Aq[8] 123e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard LDR r11, [r13, #-20] @ Aq[10] -- Aq[9] 124e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard LDRSH r10,[r5, #-24] @ load sig_lo[i-12] 125e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard SMLABB r12, r6, r11, r12 @ sig_lo[i-9] * Aq[9] 126e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard LDRSH r6, [r5, #-26] @ load sig_lo[i-13] 127e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard SMLABT r12, r7, r11, r12 @ sig_lo[i-10] * Aq[10] 128e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard LDR r11, [r13, #-24] @ Aq[12] -- Aq[11] 129e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard LDRSH r7, [r5, #-28] @ load sig_lo[i-14] 130e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard SMLABB r12, r9, r11, r12 @ sig_lo[i-11] * Aq[11] 131e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard LDRSH r9, [r5, #-30] @ load sig_lo[i-15] 132e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard SMLABT r12, r10, r11, r12 @ sig_lo[i-12] * Aq[12] 133e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 134e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard LDR r11, [r13, #-28] @ Aq[14] -- Aq[13] 135e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard LDRSH r10, [r5, #-32] @ load sig_lo[i-16] 136e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard SMLABB r12, r6, r11, r12 @ sig_lo[i-13] * Aq[13] 137e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard SMLABT r12, r7, r11, r12 @ sig_lo[i-14] * Aq[14] 138b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard 139e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard LDR r11, [r13, #-32] @ Aq[16] -- Aq[15] 140b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard LDRSH r6, [r2],#2 @ load exc[i] 141e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard SMLABB r12, r9, r11, r12 @ sig_lo[i-15] * Aq[15] 142e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard SMLABT r12, r10, r11, r12 @ sig_lo[i-16] * Aq[16] 143b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard MUL r7, r6, r3 @ exc[i] * a0 144e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard RSB r14, r12, #0 @ L_tmp 145e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard MOV r14, r14, ASR #11 @ L_tmp >>= 11 146e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ADD r14, r14, r7, LSL #1 @ L_tmp += (exc[i] * a0) << 1 147e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 148e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 149e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard LDRSH r6, [r4, #-2] @ load sig_hi[i-1] 150e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard LDRSH r7, [r4, #-4] @ load sig_hi[i-2] 151e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 152b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard LDR r11, [r13, #-4] @ Aq[2] -- Aq[1] 153e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard LDRSH r9, [r4, #-6] @ load sig_hi[i-3] 154e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard LDRSH r10, [r4, #-8] @ load sig_hi[i-4] 155e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard SMULBB r12, r6, r11 @ sig_hi[i-1] * Aq[1] 156e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard LDRSH r6, [r4, #-10] @ load sig_hi[i-5] 157e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard SMLABT r12, r7, r11, r12 @ sig_hi[i-2] * Aq[2] 158e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 159e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard LDR r11, [r13, #-8] @ Aq[4] -- Aq[3] 160e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard LDRSH r7, [r4, #-12] @ load sig_hi[i-6] 161e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 162e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard SMLABB r12, r9, r11, r12 @ sig_hi[i-3] * Aq[3] 163e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard LDRSH r9, [r4, #-14] @ load sig_hi[i-7] 164e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 165e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard SMLABT r12, r10, r11, r12 @ sig_hi[i-4] * Aq[4] 166e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 167e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard LDR r11, [r13, #-12] @ Aq[6] -- Aq[5] 168e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard LDRSH r10, [r4, #-16] @ load sig_hi[i-8] 169e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 170e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard SMLABB r12, r6, r11, r12 @ sig_hi[i-5] * Aq[5] 171e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 172e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard LDRSH r6, [r4, #-18] @ load sig_hi[i-9] 173e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard SMLABT r12, r7, r11, r12 @ sig_hi[i-6] * Aq[6] 174e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 175e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard LDR r11, [r13, #-16] @ Aq[8] -- Aq[7] 176e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard LDRSH r7, [r4, #-20] @ load sig_hi[i-10] 177e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 178e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard SMLABB r12, r9, r11, r12 @ sig_hi[i-7] * Aq[7] 179e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 180e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard LDRSH r9, [r4, #-22] @ load sig_hi[i-11] 181e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 182e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard SMLABT r12, r10, r11, r12 @ sig_hi[i-8] * Aq[8] 183e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 184e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard LDR r11, [r13, #-20] @ Aq[10] -- Aq[9] 185e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard LDRSH r10,[r4, #-24] @ load sig_hi[i-12] 186e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 187e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard SMLABB r12, r6, r11, r12 @ sig_hi[i-9] * Aq[9] 188e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard LDRSH r6, [r4, #-26] @ load sig_hi[i-13] 189e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard SMLABT r12, r7, r11, r12 @ sig_hi[i-10] * Aq[10] 190e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 191e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard LDR r11, [r13, #-24] @ Aq[12] -- Aq[11] 192e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard LDRSH r7, [r4, #-28] @ load sig_hi[i-14] 193e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard SMLABB r12, r9, r11, r12 @ sig_hi[i-11] * Aq[11] 194e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard LDRSH r9, [r4, #-30] @ load sig_hi[i-15] 195e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard SMLABT r12, r10, r11, r12 @ sig_hi[i-12] * Aq[12] 196e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 197e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard LDR r11, [r13, #-28] @ Aq[14] -- Aq[13] 198e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard LDRSH r10, [r4, #-32] @ load sig_hi[i-16] 199e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard SMLABB r12, r6, r11, r12 @ sig_hi[i-13] * Aq[13] 200e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard SMLABT r12, r7, r11, r12 @ sig_hi[i-14] * Aq[14] 201b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard 202e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard LDR r11, [r13, #-32] @ Aq[16] -- Aq[15] 203e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard SMLABB r12, r9, r11, r12 @ sig_hi[i-15] * Aq[15] 204b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard SMLABT r12, r10, r11, r12 @ sig_hi[i-16] * Aq[16] 205e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ADD r6, r12, r12 @ r12 << 1 206b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard SUB r14, r14, r6 207e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard MOV r14, r14, LSL #3 @ L_tmp <<=3 208b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard 209e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard MOV r7, r14, ASR #16 @ L_tmp >> 16 210e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 211e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard MOV r14, r14, ASR #4 @ L_tmp >>=4 212e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard STRH r7, [r4], #2 @ sig_hi[i] = L_tmp >> 16 213e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard SUB r9, r14, r7, LSL #12 @ sig_lo[i] = L_tmp - (sig_hi[i] << 12) 214e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 215e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ADD r8, r8, #1 216b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard STRH r9, [r5], #2 217e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard CMP r8, #64 218b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard BLT LOOP 219b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard 220e2e838afcf03e603a41a0455846eaf9614537c16Mans RullgardSyn_filt_32_end: 221b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard 222b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard LDMFD r13!, {r4 - r12, r15} 223e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard @ENDFUNC 2243f7149c1c8f211c9ef5eb6c4012f078d9d08387bChih-Hung Hsieh .end 225b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard 226e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 227