17df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@*********************************************************** 27df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@ Function: SynthMasterGain 37df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@ Processor: ARM-E 47df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@ Description: Copies 32-bit synth output to 16-bit buffer 57df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@ with saturated gain control 67df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@ C-callable. 77df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@ 87df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@ Usage: 97df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@ SynthMasterGain( 107df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@ pInputBuffer 117df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@ pOutputBuffer, 127df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@ nGain, 137df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@ nNumLoopSamples 147df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@ ); 157df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@ 167df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@ Copyright Sonic Network Inc. 2004 177df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@**************************************************************** 187df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@ Revision Control: 197df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@ $Revision: 496 $ 207df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@ $Date: 2006-12-11 14:33:26 -0800 (Mon, 11 Dec 2006) $ 217df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@**************************************************************** 227df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@ 237df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@ where: 247df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@ long *pInputBuffer 257df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@ PASSED IN: r0 267df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@ 277df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@ EAS_PCM *pOutputBuffer 287df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@ PASSED IN: r1 297df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@ 307df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@ short nGain 317df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@ PASSED IN: r2 327df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@ 337df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@ EAS_U16 nNumLoopSamples 347df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@ PASSED IN: r3 357df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@ 367df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@**************************************************************** 377df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 387df30109963092559d3760c0661a020f9daf1030The Android Open Source Project .include "ARM_synth_constants_gnu.inc" 397df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 407df30109963092559d3760c0661a020f9daf1030The Android Open Source Project .arm 417df30109963092559d3760c0661a020f9daf1030The Android Open Source Project .text 427df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 437df30109963092559d3760c0661a020f9daf1030The Android Open Source Project .func SynthMasterGain 447df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectSynthMasterGain: 457df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 467df30109963092559d3760c0661a020f9daf1030The Android Open Source Project .global SynthMasterGain @ allow other files to use this function 477df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 487df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 497df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 507df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 517df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 527df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@ Stack frame 537df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@ ----------- 547df30109963092559d3760c0661a020f9daf1030The Android Open Source Project .equ RET_ADDR_SZ, 0 @return address 557df30109963092559d3760c0661a020f9daf1030The Android Open Source Project .equ REG_SAVE_SZ, 0 @save-on-entry registers saved 567df30109963092559d3760c0661a020f9daf1030The Android Open Source Project .equ FRAME_SZ, (8) @local variables 577df30109963092559d3760c0661a020f9daf1030The Android Open Source Project .equ ARG_BLK_SZ, 0 @argument block 587df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 597df30109963092559d3760c0661a020f9daf1030The Android Open Source Project .equ PARAM_OFFSET, (ARG_BLK_SZ + FRAME_SZ + REG_SAVE_SZ + RET_ADDR_SZ) 607df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 617df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@ Register usage 627df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@ -------------- 637df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectpnInputBuffer .req r0 647df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectpnOutputBuffer .req r1 657df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectnGain .req r2 667df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectnNumLoopSamples .req r3 677df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 687df30109963092559d3760c0661a020f9daf1030The Android Open Source Project STMFD sp!,{r4-r6,r14} @Save any save-on-entry registers that are used 697df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 707df30109963092559d3760c0661a020f9daf1030The Android Open Source Project LDR r6, =0x7fff @constant for saturation tests 717df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 727df30109963092559d3760c0661a020f9daf1030The Android Open Source Projectloop: 737df30109963092559d3760c0661a020f9daf1030The Android Open Source Project LDR r4, [pnInputBuffer], #4 @fetch 1st output sample 747df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 757df30109963092559d3760c0661a020f9daf1030The Android Open Source Project LDR r5, [pnInputBuffer], #4 @fetch 2nd output sample 767df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 777df30109963092559d3760c0661a020f9daf1030The Android Open Source Project SMULWB r4, r4, nGain @output = gain * input 787df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 797df30109963092559d3760c0661a020f9daf1030The Android Open Source Project CMP r4, r6 @check for positive saturation 807df30109963092559d3760c0661a020f9daf1030The Android Open Source Project MOVGT r4, r6 @saturate 817df30109963092559d3760c0661a020f9daf1030The Android Open Source Project CMN r4, r6 @check for negative saturation 827df30109963092559d3760c0661a020f9daf1030The Android Open Source Project MVNLT r4, r6 @saturate 837df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 847df30109963092559d3760c0661a020f9daf1030The Android Open Source Project SMULWB r5, r5, nGain @output = gain * input 857df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 867df30109963092559d3760c0661a020f9daf1030The Android Open Source Project STRH r4, [pnOutputBuffer], #NEXT_OUTPUT_PCM @save 1st output sample 877df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 887df30109963092559d3760c0661a020f9daf1030The Android Open Source Project CMP r5, r6 @check for positive saturation 897df30109963092559d3760c0661a020f9daf1030The Android Open Source Project MOVGT r5, r6 @saturate 907df30109963092559d3760c0661a020f9daf1030The Android Open Source Project CMN r5, r6 @check for negative saturation 917df30109963092559d3760c0661a020f9daf1030The Android Open Source Project MVNLT r5, r6 @saturate 927df30109963092559d3760c0661a020f9daf1030The Android Open Source Project STRH r5, [pnOutputBuffer], #NEXT_OUTPUT_PCM @save 2nd output sample 937df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 947df30109963092559d3760c0661a020f9daf1030The Android Open Source Project SUBS nNumLoopSamples, nNumLoopSamples, #2 957df30109963092559d3760c0661a020f9daf1030The Android Open Source Project BGT loop 967df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 977df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@ 987df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@ Return to calling function 997df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@---------------------------------------------------------------- 1007df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 1017df30109963092559d3760c0661a020f9daf1030The Android Open Source Project LDMFD sp!,{r4-r6, lr} @ return to calling function 1027df30109963092559d3760c0661a020f9daf1030The Android Open Source Project BX lr 1037df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 1047df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@***************************************************************************** 1057df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 1067df30109963092559d3760c0661a020f9daf1030The Android Open Source Project .endfunc @ end of function/procedure 1077df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 1087df30109963092559d3760c0661a020f9daf1030The Android Open Source Project .end @ end of assembly code 1097df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 110