168 lines
3.2 KiB
ArmAsm
168 lines
3.2 KiB
ArmAsm
//#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
|
|
|
|
|
|
|