mirror of
https://github.com/id-Software/DOOM-IOS2.git
synced 2026-03-20 17:10:05 +01:00
Initial Commit
This commit is contained in:
109
common/embeddedaudiosynthesis/arm-wt-22k/lib_src/ARM-E_mastergain_gnu.s
Executable file
109
common/embeddedaudiosynthesis/arm-wt-22k/lib_src/ARM-E_mastergain_gnu.s
Executable file
@@ -0,0 +1,109 @@
|
||||
@***********************************************************
|
||||
@ Function: SynthMasterGain
|
||||
@ Processor: ARM-E
|
||||
@ Description: Copies 32-bit synth output to 16-bit buffer
|
||||
@ with saturated gain control
|
||||
@ C-callable.
|
||||
@
|
||||
@ Usage:
|
||||
@ SynthMasterGain(
|
||||
@ pInputBuffer
|
||||
@ pOutputBuffer,
|
||||
@ nGain,
|
||||
@ nNumLoopSamples
|
||||
@ );
|
||||
@
|
||||
@ Copyright Sonic Network Inc. 2004
|
||||
@****************************************************************
|
||||
@ Revision Control:
|
||||
@ $Revision: 496 $
|
||||
@ $Date: 2006-12-11 14:33:26 -0800 (Mon, 11 Dec 2006) $
|
||||
@****************************************************************
|
||||
@
|
||||
@ where:
|
||||
@ long *pInputBuffer
|
||||
@ PASSED IN: r0
|
||||
@
|
||||
@ EAS_PCM *pOutputBuffer
|
||||
@ PASSED IN: r1
|
||||
@
|
||||
@ short nGain
|
||||
@ PASSED IN: r2
|
||||
@
|
||||
@ EAS_U16 nNumLoopSamples
|
||||
@ PASSED IN: r3
|
||||
@
|
||||
@****************************************************************
|
||||
|
||||
.include "ARM_synth_constants_gnu.inc"
|
||||
|
||||
.arm
|
||||
.text
|
||||
|
||||
.func SynthMasterGain
|
||||
SynthMasterGain:
|
||||
|
||||
.global SynthMasterGain @ allow other files to use this function
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ Stack frame
|
||||
@ -----------
|
||||
.equ RET_ADDR_SZ, 0 @return address
|
||||
.equ REG_SAVE_SZ, 0 @save-on-entry registers saved
|
||||
.equ FRAME_SZ, (8) @local variables
|
||||
.equ ARG_BLK_SZ, 0 @argument block
|
||||
|
||||
.equ PARAM_OFFSET, (ARG_BLK_SZ + FRAME_SZ + REG_SAVE_SZ + RET_ADDR_SZ)
|
||||
|
||||
@ Register usage
|
||||
@ --------------
|
||||
pnInputBuffer .req r0
|
||||
pnOutputBuffer .req r1
|
||||
nGain .req r2
|
||||
nNumLoopSamples .req r3
|
||||
|
||||
STMFD sp!,{r4-r6,r14} @Save any save-on-entry registers that are used
|
||||
|
||||
LDR r6, =0x7fff @constant for saturation tests
|
||||
|
||||
loop:
|
||||
LDR r4, [pnInputBuffer], #4 @fetch 1st output sample
|
||||
|
||||
LDR r5, [pnInputBuffer], #4 @fetch 2nd output sample
|
||||
|
||||
SMULWB r4, r4, nGain @output = gain * input
|
||||
|
||||
CMP r4, r6 @check for positive saturation
|
||||
MOVGT r4, r6 @saturate
|
||||
CMN r4, r6 @check for negative saturation
|
||||
MVNLT r4, r6 @saturate
|
||||
|
||||
SMULWB r5, r5, nGain @output = gain * input
|
||||
|
||||
STRH r4, [pnOutputBuffer], #NEXT_OUTPUT_PCM @save 1st output sample
|
||||
|
||||
CMP r5, r6 @check for positive saturation
|
||||
MOVGT r5, r6 @saturate
|
||||
CMN r5, r6 @check for negative saturation
|
||||
MVNLT r5, r6 @saturate
|
||||
STRH r5, [pnOutputBuffer], #NEXT_OUTPUT_PCM @save 2nd output sample
|
||||
|
||||
SUBS nNumLoopSamples, nNumLoopSamples, #2
|
||||
BGT loop
|
||||
|
||||
@
|
||||
@ Return to calling function
|
||||
@----------------------------------------------------------------
|
||||
|
||||
LDMFD sp!,{r4-r6, lr} @ return to calling function
|
||||
BX lr
|
||||
|
||||
@*****************************************************************************
|
||||
|
||||
.endfunc @ end of function/procedure
|
||||
|
||||
.end @ end of assembly code
|
||||
|
||||
Reference in New Issue
Block a user