1219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard@/* 2219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard@ ** Copyright 2003-2010, VisualOn, Inc. 3219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard@ ** 4219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard@ ** Licensed under the Apache License, Version 2.0 (the "License"); 5219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard@ ** you may not use this file except in compliance with the License. 6219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard@ ** You may obtain a copy of the License at 7219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard@ ** 8219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard@ ** http://www.apache.org/licenses/LICENSE-2.0 9219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard@ ** 10219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard@ ** Unless required by applicable law or agreed to in writing, software 11219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard@ ** distributed under the License is distributed on an "AS IS" BASIS, 12219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard@ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard@ ** See the License for the specific language governing permissions and 14219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard@ ** limitations under the License. 15219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard@ */ 16219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard 17219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard@**********************************************************************/ 18219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard@void Filt_6k_7k( 19219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard@ Word16 signal[], /* input: signal */ 20219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard@ Word16 lg, /* input: length of input */ 21219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard@ Word16 mem[] /* in/out: memory (size=30) */ 22219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard@) 23219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard@****************************************************************** 24219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard@ r0 --- signal[] 25219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard@ r1 --- lg 26219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard@ r2 --- mem[] 27219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard 28219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard .section .text 29219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard .global Filt_6k_7k_asm 30219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard .extern voAWB_Copy 31219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard .extern fir_6k_7k 32219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard 33219e2627f1e062c10645664b0d2470d4dfaf5083Mans RullgardFilt_6k_7k_asm: 34219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard 35219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard STMFD r13!, {r4 - r12, r14} 36219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard SUB r13, r13, #240 @ x[L_SUBFR16k + (L_FIR - 1)] 37219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard MOV r8, r0 @ copy signal[] address 38219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard MOV r4, r1 @ copy lg address 39219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard MOV r5, r2 @ copy mem[] address 40219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard 41219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard MOV r1, r13 42219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard MOV r0, r2 43219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard MOV r2, #30 @ L_FIR - 1 44219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard BL voAWB_Copy @ memcpy(x, mem, (L_FIR - 1)<<1) 45219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard 46219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard LDR r10, Lable1 @ get fir_7k address 47219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard 48219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard MOV r14, #0 49219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard MOV r3, r8 @ change myMemCopy to Copy, due to Copy will change r3 content 50219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard ADD r6, r13, #60 @ get x[L_FIR - 1] address 51219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard MOV r7, r3 @ get signal[i] 52219e2627f1e062c10645664b0d2470d4dfaf5083Mans RullgardLOOP1: 53219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard LDRSH r8, [r7], #2 54219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard LDRSH r9, [r7], #2 55219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard MOV r8, r8, ASR #2 56219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard MOV r9, r9, ASR #2 57219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard LDRSH r11, [r7], #2 58219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard LDRSH r12, [r7], #2 59219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard MOV r11, r11, ASR #2 60219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard MOV r12, r12, ASR #2 61219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard STRH r8, [r6], #2 62219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard STRH r9, [r6], #2 63219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard STRH r11, [r6], #2 64219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard STRH r12, [r6], #2 65219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard LDRSH r8, [r7], #2 66219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard LDRSH r9, [r7], #2 67219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard MOV r8, r8, ASR #2 68219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard MOV r9, r9, ASR #2 69219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard LDRSH r11, [r7], #2 70219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard LDRSH r12, [r7], #2 71219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard MOV r11, r11, ASR #2 72219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard MOV r12, r12, ASR #2 73219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard STRH r8, [r6], #2 74219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard STRH r9, [r6], #2 75219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard STRH r11, [r6], #2 76219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard STRH r12, [r6], #2 77219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard ADD r14, r14, #8 78219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard CMP r14, #80 79219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard BLT LOOP1 80219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard 81219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard 82219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard STR r5, [sp, #-4] @ PUSH r5 to stack 83219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard 84219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard @ not use registers: r4, r10, r12, r14, r5 85219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard MOV r4, r13 86219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard MOV r5, #0 @ i = 0 87219e2627f1e062c10645664b0d2470d4dfaf5083Mans RullgardLOOP2: 88219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard LDR r0, [r10] 89219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard 90219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard LDRSH r1, [r4] @ load x[i] 91219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard LDRSH r2, [r4, #60] @ load x[i + 30] 92219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard LDRSH r6, [r4, #2] @ load x[i + 1] 93219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard LDRSH r7, [r4, #58] @ load x[i + 29] 94219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard ADD r1, r1, r2 @ x[i] + x[i + 30] 95219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard ADD r6, r6, r7 @ x[i + 1] + x[i + 29] 96219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard LDRSH r8, [r4, #4] @ load x[i + 2] 97219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard LDRSH r9, [r4, #56] @ load x[i + 28] 98219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard 99219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard SMULBB r14, r1, r0 @ (x[i] + x[i + 30]) * fir_7k[0] 100219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard ADD r8, r8, r9 @ x[i + 2] + x[i + 28] 101219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard SMLABT r14, r6, r0, r14 @ (x[i + 1] + x[i + 29]) * fir_7k[1] 102219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard 103219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard LDR r0, [r10, #4] 104219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard LDRSH r1, [r4, #6] @ load x[i+3] 105219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard LDRSH r2, [r4, #54] @ load x[i+27] 106219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard LDRSH r6, [r4, #8] @ load x[i+4] 107219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard LDRSH r7, [r4, #52] @ load x[i+26] 108219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard ADD r1, r1, r2 @ x[i+3] + x[i+27] 109219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard ADD r6, r6, r7 @ x[i+4] + x[i+26] 110219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard SMLABB r14, r8, r0, r14 @ (x[i + 2] + x[i + 28]) * fir_7k[2] 111219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard LDRSH r8, [r4, #10] @ load x[i+5] 112219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard LDRSH r9, [r4, #50] @ load x[i+25] 113219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard SMLABT r14, r1, r0, r14 @ (x[i+3] + x[i+27]) * fir_7k[3] 114219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard ADD r8, r8, r9 @ x[i+5] + x[i+25] 115219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard 116219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard LDR r0, [r10, #8] 117219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard LDRSH r1, [r4, #12] @ x[i+6] 118219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard LDRSH r2, [r4, #48] @ x[i+24] 119219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard SMLABB r14, r6, r0, r14 @ (x[i+4] + x[i+26]) * fir_7k[4] 120219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard LDRSH r6, [r4, #14] @ x[i+7] 121219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard LDRSH r7, [r4, #46] @ x[i+23] 122219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard SMLABT r14, r8, r0, r14 @ (x[i+5] + x[i+25]) * fir_7k[5] 123219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard LDR r0, [r10, #12] 124219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard ADD r1, r1, r2 @ (x[i+6] + x[i+24]) 125219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard ADD r6, r6, r7 @ (x[i+7] + x[i+23]) 126219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard SMLABB r14, r1, r0, r14 @ (x[i+6] + x[i+24]) * fir_7k[6] 127219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard LDRSH r8, [r4, #16] @ x[i+8] 128219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard LDRSH r9, [r4, #44] @ x[i+22] 129219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard SMLABT r14, r6, r0, r14 @ (x[i+7] + x[i+23]) * fir_7k[7] 130219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard LDR r0, [r10, #16] 131219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard LDRSH r1, [r4, #18] @ x[i+9] 132219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard LDRSH r2, [r4, #42] @ x[i+21] 133219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard LDRSH r6, [r4, #20] @ x[i+10] 134219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard LDRSH r7, [r4, #40] @ x[i+20] 135219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard ADD r8, r8, r9 @ (x[i+8] + x[i+22]) 136219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard ADD r1, r1, r2 @ (x[i+9] + x[i+21]) 137219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard ADD r6, r6, r7 @ (x[i+10] + x[i+20]) 138219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard SMLABB r14, r8, r0, r14 @ (x[i+8] + x[i+22]) * fir_7k[8] 139219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard LDRSH r8, [r4, #22] @ x[i+11] 140219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard LDRSH r9, [r4, #38] @ x[i+19] 141219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard SMLABT r14, r1, r0, r14 @ (x[i+9] + x[i+21]) * fir_7k[9] 142219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard LDR r0, [r10, #20] 143219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard LDRSH r1, [r4, #24] @ x[i+12] 144219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard LDRSH r2, [r4, #36] @ x[i+18] 145219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard SMLABB r14, r6, r0, r14 @ (x[i+10] + x[i+20]) * fir_7k[10] 146219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard LDRSH r6, [r4, #26] @ x[i+13] 147219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard ADD r8, r8, r9 @ (x[i+11] + x[i+19]) 148219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard LDRSH r7, [r4, #34] @ x[i+17] 149219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard SMLABT r14, r8, r0, r14 @ (x[i+11] + x[i+19]) * fir_7k[11] 150219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard LDR r0, [r10, #24] 151219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard ADD r1, r1, r2 @ x[i+12] + x[i+18] 152219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard LDRSH r8, [r4, #28] @ x[i+14] 153219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard SMLABB r14, r1, r0, r14 @ (x[i+12] + x[i+18]) * fir_7k[12] 154219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard ADD r6, r6, r7 @ (x[i+13] + x[i+17]) 155219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard LDRSH r9, [r4, #32] @ x[i+16] 156219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard SMLABT r14, r6, r0, r14 @ (x[i+13] + x[i+17]) * fir_7k[13] 157219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard LDR r0, [r10, #28] 158219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard ADD r8, r8, r9 @ (x[i+14] + x[i+16]) 159219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard LDRSH r1, [r4, #30] @ x[i+15] 160219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard SMLABB r14, r8, r0, r14 @ (x[i+14] + x[i+16]) * fir_7k[14] 161219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard SMLABT r14, r1, r0, r14 @ x[i+15] * fir_7k[15] 162219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard 163219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard ADD r5, r5, #1 164219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard ADD r14, r14, #0x4000 165219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard ADD r4, r4, #2 166219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard MOV r1, r14, ASR #15 167219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard CMP r5, #80 168219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard STRH r1, [r3], #2 @signal[i] = (L_tmp + 0x4000) >> 15 169219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard BLT LOOP2 170219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard 171219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard LDR r1, [sp, #-4] @mem address 172219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard ADD r0, r13, #160 @x + lg 173219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard MOV r2, #30 174219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard BL voAWB_Copy 175219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard 176219e2627f1e062c10645664b0d2470d4dfaf5083Mans RullgardFilt_6k_7k_end: 177219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard ADD r13, r13, #240 178219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard LDMFD r13!, {r4 - r12, r15} 179219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard 180219e2627f1e062c10645664b0d2470d4dfaf5083Mans RullgardLable1: 181219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard .word fir_6k_7k 182219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard @ENDFUNC 183219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard .END 184219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard 185219e2627f1e062c10645664b0d2470d4dfaf5083Mans Rullgard 186