forked from PAWPAW-Mirror/lib_xua
Doc updates
This commit is contained in:
167
module_usb_audio/mixer/fastmix.S
Normal file
167
module_usb_audio/mixer/fastmix.S
Normal file
@@ -0,0 +1,167 @@
|
||||
//#include "devicedefines.h"
|
||||
|
||||
#define MAX_MIX_COUNT 8
|
||||
#define MIX_INPUTS 18
|
||||
|
||||
|
||||
|
||||
#define DOMIX_TOP(i) \
|
||||
.cc_top doMix##i.function,doMix##i; \
|
||||
.align 4 ;\
|
||||
.globl doMix##i ;\
|
||||
.globl doMix##i##.nstackwords ;\
|
||||
.globl doMix##i##.maxthreads ; \
|
||||
.globl doMix##i##.maxtimers ; \
|
||||
.globl doMix##i##.maxchanends ; \
|
||||
.globl doMix##i##.maxsync ;\
|
||||
.linkset doMix##i##.locnoside, 1; \
|
||||
.linkset doMix##i##.locnochandec, 1;\
|
||||
.linkset doMix##i##.nstackwords, 0 ;\
|
||||
.linkset doMix##i##.maxchanends, 0 ;\
|
||||
.linkset doMix##i##.maxtimers, 0 ;\
|
||||
.linkset doMix##i##.maxthreads, 1; \
|
||||
doMix##i##: ;\
|
||||
set cp, r0; \
|
||||
set dp, r1; \
|
||||
lsub r0, r1, r0, r0, r0;\
|
||||
.label_##i##:
|
||||
|
||||
#define DOMIX_BOT(i) \
|
||||
ldap r11, _dp; \
|
||||
set dp, r11;\
|
||||
ldap r11, _cp;\
|
||||
set cp, r11;\
|
||||
\
|
||||
mov r0, r1;\
|
||||
ldc r2, 0x19;\
|
||||
sext r0, r2;\
|
||||
eq r0, r0, r1;\
|
||||
bf r0, .L20; \
|
||||
\
|
||||
shl r0, r1, 0x7;\
|
||||
retsp 0x0;\
|
||||
\
|
||||
\
|
||||
.cc_bottom doMix##i##.function;
|
||||
|
||||
#define N MIX_INPUTS
|
||||
#define BODY(i) \
|
||||
ldw r2,cp[i]; \
|
||||
ldw r11, dp[i]; \
|
||||
maccs r1, r0, r2, r11;
|
||||
|
||||
|
||||
.text
|
||||
|
||||
.L20:\
|
||||
lss r0, r1, r3;\
|
||||
bt r0, .L16; \
|
||||
ldw r0, cp[.LC0];\
|
||||
retsp 0x0; \
|
||||
.L16:\
|
||||
ldw r0, cp[.LC1];\
|
||||
retsp 0x0; \
|
||||
|
||||
|
||||
|
||||
|
||||
#if(MAX_MIX_COUNT > 0)
|
||||
DOMIX_TOP(0)
|
||||
#include "repeat.h"
|
||||
DOMIX_BOT(0)
|
||||
#endif
|
||||
|
||||
|
||||
#if(MAX_MIX_COUNT > 1)
|
||||
DOMIX_TOP(1)
|
||||
#include "repeat.h"
|
||||
DOMIX_BOT(1)
|
||||
#endif
|
||||
|
||||
#if(MAX_MIX_COUNT > 2)
|
||||
DOMIX_TOP(2)
|
||||
#include "repeat.h"
|
||||
DOMIX_BOT(2)
|
||||
#endif
|
||||
|
||||
#if(MAX_MIX_COUNT > 3)
|
||||
DOMIX_TOP(3)
|
||||
#include "repeat.h"
|
||||
DOMIX_BOT(3)
|
||||
#endif
|
||||
|
||||
#if(MAX_MIX_COUNT > 4)
|
||||
DOMIX_TOP(4)
|
||||
#include "repeat.h"
|
||||
DOMIX_BOT(4)
|
||||
#endif
|
||||
|
||||
#if(MAX_MIX_COUNT > 5)
|
||||
DOMIX_TOP(5)
|
||||
#include "repeat.h"
|
||||
DOMIX_BOT(5)
|
||||
#endif
|
||||
|
||||
#if(MAX_MIX_COUNT > 6)
|
||||
DOMIX_TOP(6)
|
||||
#include "repeat.h"
|
||||
DOMIX_BOT(6)
|
||||
#endif
|
||||
|
||||
#if(MAX_MIX_COUNT > 7)
|
||||
DOMIX_TOP(7)
|
||||
#include "repeat.h"
|
||||
DOMIX_BOT(7)
|
||||
#endif
|
||||
|
||||
#if(MAX_MIX_COUNT>8)
|
||||
#error MAX_MIX_COUNT>7
|
||||
#endif
|
||||
|
||||
/* We need MIX_OUTPUT x setPtr functions */
|
||||
|
||||
#undef N
|
||||
#undef BODY
|
||||
#define N MAX_MIX_COUNT
|
||||
.cc_top setPtr.function,setPtr;
|
||||
.align 4 ;
|
||||
.globl setPtr.nstackwords;
|
||||
.globl setPtr;
|
||||
.globl setPtr.maxthreads;
|
||||
.globl setPtr.maxtimers;
|
||||
.globl setPtr.maxchanends;
|
||||
.globl setPtr.maxsync;
|
||||
.linkset setPtr.locnoside, 1;
|
||||
.linkset setPtr.locnochandec, 1;
|
||||
.linkset setPtr.nstackwords, 0;
|
||||
.linkset setPtr.maxchanends, 0;
|
||||
.linkset setPtr.maxtimers, 0;
|
||||
.linkset setPtr.maxthreads, 1;
|
||||
setPtr:
|
||||
shl r2, r2, 1
|
||||
.xtabranch .label_0
|
||||
bru r2
|
||||
#define BODY(i) \
|
||||
ldap r11, .label_##i; \
|
||||
bu setPtr_go
|
||||
#include "repeat.h"
|
||||
setPtr_go:
|
||||
shl r0, r0, 3;
|
||||
ldc r2, 0x80;
|
||||
add r1, r1, r2;
|
||||
st8 r1, r11[r0];
|
||||
retsp 0;
|
||||
.cc_bottom setPtr.function
|
||||
|
||||
.section .cp.const4, "acM", @progbits, 4
|
||||
.LC0:
|
||||
.align 4
|
||||
.int 0x7fffff00
|
||||
.LC1:
|
||||
.int 0x80000000
|
||||
|
||||
#undef N
|
||||
#undef BODY
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user