17df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@*********************************************************** 27df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@ Function: WT_VoiceFilter 37df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@ Processor: ARM 47df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@ Description: 57df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@ Implements a 2-pole low-pass filter with resonanance 67df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@ 77df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@ Usage: 87df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@ void WT_VoiceFilter( 97df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@ S_FILTER CONTROL *pFilter, 107df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@ S_WT_FRAME *pWTFrame); 117df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@ 127df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@ Copyright 2005 Sonic Network, Inc. 137df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@**************************************************************** 147df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@ Revision Control: 157df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@ $Revision: 496 $ 167df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@ $Date: 2006-12-11 14:33:26 -0800 (Mon, 11 Dec 2006) $ 177df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@**************************************************************** 187df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@ 197df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@ where: 207df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@ S_FILTER_CONTROL *pFilter 217df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@ PASSED IN: r0 227df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@ 237df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@ S_WT_FRAME *pWTFrame 247df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@ PASSED IN: r1 257df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@**************************************************************** 267df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 277df30109963092559d3760c0661a020f9daf1030The Android Open Source Project .include "ARM_synth_constants_gnu.inc" 287df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 297df30109963092559d3760c0661a020f9daf1030The Android Open Source Project .arm 307df30109963092559d3760c0661a020f9daf1030The Android Open Source Project .text 317df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 327df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 337df30109963092559d3760c0661a020f9daf1030The Android Open Source Project .global WT_VoiceFilter 347df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 357df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 367df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@ Register usage 377df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@ -------------- 387df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectpFilter .req r0 397df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectpWTFrame .req r1 407df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectpBuffer .req r2 417df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectnumSamples .req r3 427df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 437df30109963092559d3760c0661a020f9daf1030The Android Open Source Projectz1 .req r4 447df30109963092559d3760c0661a020f9daf1030The Android Open Source Projectz2 .req r5 457df30109963092559d3760c0661a020f9daf1030The Android Open Source Projectb1 .req r6 467df30109963092559d3760c0661a020f9daf1030The Android Open Source Projectb2 .req r7 477df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectK .req r8 487df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 497df30109963092559d3760c0661a020f9daf1030The Android Open Source Projecttmp0 .req r1 @ reuse register 507df30109963092559d3760c0661a020f9daf1030The Android Open Source Projecttmp1 .req r9 517df30109963092559d3760c0661a020f9daf1030The Android Open Source Projecttmp2 .req r10 527df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 537df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 547df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@SaveRegs RLIST {r4-r10, lr} 557df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@RestoreRegs RLIST {r4-r10, pc} 567df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 577df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 587df30109963092559d3760c0661a020f9daf1030The Android Open Source Project .func WT_VoiceFilter 597df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectWT_VoiceFilter: 607df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 617df30109963092559d3760c0661a020f9daf1030The Android Open Source Project STMFD sp!, {r4-r10, lr} 627df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 637df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@ 647df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@ Setup passed parameters in their destination registers 657df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@---------------------------------------------------------------- 667df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 677df30109963092559d3760c0661a020f9daf1030The Android Open Source Project LDR pBuffer, [pWTFrame, #m_pAudioBuffer] 687df30109963092559d3760c0661a020f9daf1030The Android Open Source Project LDR numSamples, [pWTFrame, #m_numSamples] 697df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 707df30109963092559d3760c0661a020f9daf1030The Android Open Source Project @load state variables from pFilter structure 717df30109963092559d3760c0661a020f9daf1030The Android Open Source Project LDRSH z1, [pFilter, #m_z1] 727df30109963092559d3760c0661a020f9daf1030The Android Open Source Project LDRSH z2, [pFilter, #m_z2] 737df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 747df30109963092559d3760c0661a020f9daf1030The Android Open Source Project @load coefficients from pWTFrame structure 757df30109963092559d3760c0661a020f9daf1030The Android Open Source Project LDR K, [pWTFrame, #m_k] 767df30109963092559d3760c0661a020f9daf1030The Android Open Source Project LDR b1, [pWTFrame, #m_b1] 777df30109963092559d3760c0661a020f9daf1030The Android Open Source Project LDR b2, [pWTFrame, #m_b2] 787df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 797df30109963092559d3760c0661a020f9daf1030The Android Open Source Project RSB b1, b1, #0 @ b1 = -b1 807df30109963092559d3760c0661a020f9daf1030The Android Open Source Project RSB b2, b2, #0 @ b2 = -b2 817df30109963092559d3760c0661a020f9daf1030The Android Open Source Project MOV b2, b2, ASR #1 @ b2 = b2 >> 1 827df30109963092559d3760c0661a020f9daf1030The Android Open Source Project MOV K, K, ASR #1 @ K = K >> 1 837df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 847df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@ 857df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@ Start processing 867df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@---------------------------------------------------------------- 877df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 887df30109963092559d3760c0661a020f9daf1030The Android Open Source Project LDRSH tmp0, [pBuffer] @ fetch sample 897df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 907df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectFilterLoop: 917df30109963092559d3760c0661a020f9daf1030The Android Open Source Project SMULBB tmp2, z1, b1 @ tmp2 = z1 * -b1 927df30109963092559d3760c0661a020f9daf1030The Android Open Source Project SMLABB tmp2, z2, b2, tmp2 @ tmp2 = (-b1 * z1) + (-b2 * z2) 937df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 947df30109963092559d3760c0661a020f9daf1030The Android Open Source Project MOV z2, z1 @ delay line 957df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 967df30109963092559d3760c0661a020f9daf1030The Android Open Source Project SMLABB tmp0, tmp0, K, tmp2 @ tmp1 = (K * x[n]) + (-b1 * z1) + (-b2 * z2) 977df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 987df30109963092559d3760c0661a020f9daf1030The Android Open Source Project LDRSH tmp1, [pBuffer, #NEXT_OUTPUT_PCM] @ fetch next sample 997df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 1007df30109963092559d3760c0661a020f9daf1030The Android Open Source Project MOV z1, tmp0, ASR #14 @ shift result to low word 1017df30109963092559d3760c0661a020f9daf1030The Android Open Source Project STRH z1, [pBuffer], #NEXT_OUTPUT_PCM @ write back to buffer 1027df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 1037df30109963092559d3760c0661a020f9daf1030The Android Open Source Project SMULBB tmp2, z1, b1 @ tmp2 = z1 * -b1 1047df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 1057df30109963092559d3760c0661a020f9daf1030The Android Open Source Project SUBS numSamples, numSamples, #2 @ unroll loop once 1067df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 1077df30109963092559d3760c0661a020f9daf1030The Android Open Source Project SMLABB tmp2, z2, b2, tmp2 @ tmp2 = (-b1 * z1) + (-b2 * z2) 1087df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 1097df30109963092559d3760c0661a020f9daf1030The Android Open Source Project SMLABB tmp1, tmp1, K, tmp2 @ tmp1 = (K * x[n]) + (-b1 * z1) + (-b2 * z2) 1107df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 1117df30109963092559d3760c0661a020f9daf1030The Android Open Source Project MOV z2, z1 @ delay line 1127df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 1137df30109963092559d3760c0661a020f9daf1030The Android Open Source Project MOV z1, tmp1, ASR #14 @ shift result to low word 1147df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 1157df30109963092559d3760c0661a020f9daf1030The Android Open Source Project LDRGTSH tmp0, [pBuffer, #NEXT_OUTPUT_PCM] @ fetch next sample 1167df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 1177df30109963092559d3760c0661a020f9daf1030The Android Open Source Project STRH z1, [pBuffer], #NEXT_OUTPUT_PCM @ write back to buffer 1187df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 1197df30109963092559d3760c0661a020f9daf1030The Android Open Source Project BGT FilterLoop 1207df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@ save z terms 1217df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@---------------------------------------------------------------- 1227df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 1237df30109963092559d3760c0661a020f9daf1030The Android Open Source Project STRH z1, [pFilter, #m_z1] 1247df30109963092559d3760c0661a020f9daf1030The Android Open Source Project STRH z2, [pFilter, #m_z2] 1257df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 1267df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@ Return to calling function 1277df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@---------------------------------------------------------------- 1287df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 1297df30109963092559d3760c0661a020f9daf1030The Android Open Source Project LDMFD sp!,{r4-r10, lr} 1307df30109963092559d3760c0661a020f9daf1030The Android Open Source Project BX lr 1317df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 1327df30109963092559d3760c0661a020f9daf1030The Android Open Source Project .endfunc 1337df30109963092559d3760c0661a020f9daf1030The Android Open Source Project .end 1347df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 135