📄 gaeca4a.s55
字号:
*-------------------------------------------------------------------------*
* *
* THIS IS AN UNPUBLISHED WORK CONTAINING CONFIDENTIAL AND PROPRIETARY *
* INFORMATION. IF PUBLICATION OCCURS, THE FOLLOWING NOTICE APPLIES: *
* "COPYRIGHT 2002 MIKET DSP SOLUTIONS, ALL RIGHTS RESERVED" *
* *
*-------------------------------------------------------------------------*/
.mmregs
.cpl_on
.arms_on
.include "gaeci.h55"
.sect ".ftext1"
_ADJ .set (4)
_ADJSS .set (_ADJ+2)
_DEXP .set (29491);(Q15(0.9))
;-------------------------------------------------------------------------
;-------------------------------------------------------------------------
.global _gaec_get_energy4
;-------------------------------------------------------------------------
_gaec_get_energy4
; GAEC_tDb *pDb = ar0
;
.arms_off
bit(ST2, #ST2_ARMS) = #0;
xar2 = dbl(*ar0(#(GAEC_tDb.psRcv)))
; mar (ar2 + #(GAEC_ADF_BSZ-GAEC_OFF4))
mar (*+ar2(#(GAEC_ADF_BSZ-GAEC_OFF4)))
xar3 = mar(*ar2(#((GAEC_BANDS+1)* GAEC_RCV_SZ)))
xar4 = mar(*ar0(#(GAEC_tDb.aslEn4)));
t1 = #(GAEC_RCV_SZ-GAEC_BLKS);
;
; band 0
brc0 = #(GAEC_BLKS-1);
ac0 = dbl(*ar4);
|| localrepeat {
ac0 = ac0 - (ac0 << #-6);
ac1 = *ar2+ * *ar2+;
ac1 = ac1 + (ac1 << #-2)
ac1 = ac1 + (ac1 << #-3)
ac0 = ac0 + (ac1 << #(-_ADJ));
}
dbl(*ar4+) = ac0;
|| mar (ar2 + t1)
;
; complex bands
brc0 = #(GAEC_BANDS-2);
brc1 = #(GAEC_BLKS-1);
localrepeat {
ac0 = dbl(*ar4);
localrepeat {
ac0 = ac0 - (ac0 << #-6);
ac1 = *ar2+ * *ar2+;
ac1 = ac1 + (*ar3+ * *ar3+);
ac1 = ac1 + (ac1 << #-2)
ac1 = ac1 + (ac1 << #-3)
ac0 = ac0 + (ac1 << #(-_ADJ));
}
dbl(*ar4+) = ac0;
mar(*(ar2+t1)), mar(*(ar3+t1)), mar(coef(*cdp));
}
; last band
brc0 = #(GAEC_BLKS-1);
ac0 = dbl(*ar4);
|| localrepeat {
ac0 = ac0 - (ac0 << #-6);
ac1 = *ar2+ * *ar2+;
ac1 = ac1 + (ac1 << #-2)
ac1 = ac1 + (ac1 << #-3)
ac0 = ac0 + (ac1 << #(-_ADJ));
}
dbl(*ar4+) = ac0;
.arms_on
bit(ST2, #ST2_ARMS) = #1;
return
;-------------------------------------------------------------------------
.global _gaec_adapt_dc4p
;-------------------------------------------------------------------------
; band 0
_gaec_adapt_dc4p
; GAEC_tDb *pDb = ar0
; GAEC_tSc *pSc = ar1
; S16 band = t0
;
.arms_off
bit(ST2, #ST2_ARMS) = #0;
pshboth(xar5);
pshboth(xar6);
pshboth(xar7);
;
; set pointers
xar2 = mar(*ar1(#(GAEC_tSc.asSSC)))
xar3 = mar(*ar0(#(GAEC_tDb.aslEn4)))
xar4 = mar(*ar0(#(GAEC_tDb.aslAdEn)))
xar5 = mar(*ar1(#(GAEC_tSc.aasErr)))
xar6 = mar(*ar1(#(GAEC_tSc.u.aA4)))
xar7 = mar(*ar0(#(GAEC_tDb.asShft)))
;
; adjust ptrs if band == BANDS
if (t0 != #0) execute(AD_unit) ||
mar (ar2+#GAEC_BANDS)
if (t0 != #0) execute(AD_unit) ||
mar (ar3+#(GAEC_BANDS*2))
if (t0 != #0) execute(AD_unit) ||
mar (ar4+#(GAEC_BANDS*2))
if (t0 != #0) execute(AD_unit) ||
mar (ar5+#(GAEC_BANDS*GAEC_BLKS))
if (t0 != #0) execute(AD_unit) ||
mar (ar7+#(GAEC_BANDS))
ac3 = *ar2;
if (ac3 == #0) goto L03;
ac3 = #_ADJSS
ac3 = ac3 + *ar7
call _gaec_adapt_pre
t0 = t0 + #1;
mar (*+ar6(#(GAEC_tScA4.asErr)))
brc0 = #(GAEC_BLKS-1)
localrepeat {
ac1 = *ar5+ * ac0
*ar6+ = HI(saturate(rnd(ac1 << t0)))
}
L03
xar7 = popboth();
xar6 = popboth();
xar5 = popboth();
.arms_on
bit(ST2, #ST2_ARMS) = #1;
return
;-------------------------------------------------------------------------
.global _gaec_adapt_dc4d
;-------------------------------------------------------------------------
_gaec_adapt_dc4d
; GAEC_tDb *pDb = ar0
; GAEC_tSc *pSc = ar1
; S16 band = t0
;
push(t2, t3)
.arms_off
bit(ST2, #ST2_ARMS) = #0;
; set up ptrs
xar2 = dbl(*ar0(#(GAEC_tDb.psAdf)))
mar(ar2 + #(GAEC_OFF4*2))
if (t0 != #0) execute (AD_unit) ||
mar(*ar2+)
xar3 = dbl(*ar0(#(GAEC_tDb.psRcv)));
; mar(ar3 + #(GAEC_ADF_BSZ - GAEC_OFF4));
mar(*+ar3(#(GAEC_ADF_BSZ - GAEC_OFF4)));
if (t0 != #0) execute(AD_unit) ||
ar3 = ar3 + #(GAEC_RCV_SZ*GAEC_BANDS)
xar4 = mar(*ar1(#(GAEC_tSc.u.aA4)));
;
; set up shifts
t0 = #2; ; t0 = moving between Adf
t1 = #(1-GAEC_BLKS);
t2 = *ar4+ ; t2 = adf loading shift
t3 = t2- #16;
t3 = -t3; ; t3 = adf storing shift
;
; setup repeat counters
brc0 = #(GAEC_SECTIONS4-1);
brc1 = #(GAEC_SECTION_SZ-1);
ac2 = #_DEXP << #16;
;
; the loop
localrepeat {
localrepeat {
ac0 = *ar2 << t2;
.loop GAEC_BLKS-1
ac0 = ac0 + (*ar3+ * *ar4+);
.endloop
ac0 = ac0 + (*(ar3+t1) * *(ar4+t1));
*(ar2+t0) = HI(saturate(rnd(ac0 << t3)));
|| mar (*ar3-)
}
.loop GAEC_BLKS-1
ac0 = *ar4 * ac2;
*ar4+ = HI(rnd(ac0 << #1));
.endloop
ac0 = *ar4 * ac2;
*(ar4+t1) = HI(rnd(ac0 << #1));
; nop; let it stored before next read
}
.arms_on
bit(ST2, #ST2_ARMS) = #1;
t2, t3 = pop();
return;
;-------------------------------------------------------------------------
.global _gaec_adapt_ac4p
;-------------------------------------------------------------------------
_gaec_adapt_ac4p
; GAEC_tDb *pDb = ar0
; GAEC_tSc *pSc = ar1
;
.arms_off
bit(ST2, #ST2_ARMS) = #0;
pshboth(xar5);
pshboth(xar6);
pshboth(xar7);
; let's preset pointers
xar2 = mar(*ar1(#(GAEC_tSc.asSSC+1)))
xar3 = mar(*ar0(#(GAEC_tDb.aslEn4+2)))
xar4 = mar(*ar0(#(GAEC_tDb.aslAdEn+2)))
xar5 = mar(*ar1(#(GAEC_tSc.aasErr+GAEC_BLKS)))
xar6 = mar(*ar1(#(GAEC_tSc.u.aA4)))
xar7 = mar(*ar0(#(GAEC_tDb.asShft+1)))
ac2 = #GAEC_ADEN_BASE << #GAEC_ADEN_SHFT;
t1 = #(GAEC_BLKS*GAEC_BANDS);
brc0 = #(GAEC_BANDS-2);
brc1 = #(GAEC_BLKS-1)
blockrepeat {
ac3 = *ar2;
if (ac3 == #0) goto L23;
ac3 = #_ADJSS
ac3 = ac3 + *ar7
call _gaec_adapt_pre
t0 = t0 + #1;
mar(*+ar6(#(GAEC_tScA4.asErr)));
localrepeat {
ac1 = *ar5 * ac0
*ar6+ = HI(saturate(rnd(ac1 << t0)))
ac1 = *ar5(#(GAEC_BLKS*GAEC_BANDS)) * ac0;
*ar6+ = HI(saturate(rnd(ac1 << t0)))
mar(ar5 + #1)
}
*ar6+ = #(_DEXP);
mar(ar6 - #GAEC_tScA4_Sz);
mar(ar5 - #GAEC_BLKS);
; if step size if == 0; just advance pointers
L23
mar(ar2 + #1)
mar(ar3 + #2);
mar(ar4 + #2);
mar(ar6 + #GAEC_tScA4_Sz);
mar(ar5 + #GAEC_BLKS);
mar(ar7 + #1)
}
xar7 = popboth();
xar6 = popboth();
xar5 = popboth();
.arms_on
bit(ST2, #ST2_ARMS) = #1;
return;
;-------------------------------------------------------------------------
.global _gaec_adapt_ac4d
;-------------------------------------------------------------------------
_gaec_adapt_ac4d
; GAEC_tDb *pDb = ar0
; GAEC_tSc *pSc = ar1
.arms_off
bit(ST2, #ST2_ARMS) = #0;
pshboth(xar5);
pshboth(xar6);
push(t2, t3);
;
;
; setup ptrs initially
;
; ar2 = band counter
; ar3 -> Adf
; ar4 -> RcvI
; ar5 -> RcvQ
; ar6 -> Tmp (precalculated& stored vars)
;
xar2 = #(GAEC_BANDS-2);
xar3 = dbl(*ar0(#(GAEC_tDb.psAdf)));
mar(*+ar3(#(GAEC_ADF_SZ*2 + GAEC_OFF4*2)))
xar4 = dbl(*ar0(#(GAEC_tDb.psRcv)));
mar (*+ar4(#(GAEC_RCV_SZ + GAEC_ADF_BSZ - GAEC_OFF4)));
xar5 = mar(*ar4(#(GAEC_RCV_SZ*GAEC_BANDS)))
xar6 = mar(*ar1(#(GAEC_tSc.u.aA4)));
L33
ac2 = *ar6(#(GAEC_tScA4.sDexp)) << #16;
;
; set up shifts
t2 = *ar6+; ; t2 = adf loading shift
t3 = t2 - #16;
t3 = -t3; ; t3 = adf storing shift
;
; setup block repeat counters
|| brc0 = #(GAEC_SECTIONS4-1);
brc1 = #(GAEC_SECTION_SZ-1);
xcdp = mar (*ar6);
t0 = #(-GAEC_BLKS*2);
t1 = #(-1-GAEC_BLKS);
;
; the loop
blockrepeat {
; .localalign
localrepeat {
ac0 = *ar3+ << t2;
ac1 = *ar3- << t2;
.loop GAEC_BLKS
ac0 = ac0 + (*ar4 * coef(*cdp+)),
ac1 = ac1 + (*ar5 * coef(*cdp+));
ac1 = ac1 - (*ar4+ * coef(*cdp+)),
ac0 = ac0 + (*ar5+ * coef(*cdp+));
.endloop
*ar3+ = HI(saturate(rnd(ac0 << t3)));
*ar3+ = HI(saturate(rnd(ac1 << t3)));
mar(*(ar4+t1)), mar(*(ar5+t1)), mar(coef(*(cdp+t0)));
}
.loop (GAEC_BLKS*2)
ac0 = *ar6 * ac2;
*ar6+ = HI(rnd(ac0 << #1));
.endloop
mar(*(ar6 + t0));
}
; advance to the next band
; mar (ar3 + #(GAEC_ADF_SZ*2 - GAEC_SECTIONS4*GAEC_SECTION_SZ*2)) ; psAdf
mar (*+ar3(#(GAEC_ADF_SZ*2 - GAEC_SECTIONS4*GAEC_SECTION_SZ*2))) ; psAdf
; mar (ar4 + #(GAEC_RCV_SZ + GAEC_SECTIONS4*GAEC_SECTION_SZ)); psRcvI
mar (*+ar4(#(GAEC_RCV_SZ + GAEC_SECTIONS4*GAEC_SECTION_SZ))); psRcvI
; mar (ar5 + #(GAEC_RCV_SZ + GAEC_SECTIONS4*GAEC_SECTION_SZ)); psRcvI
mar (*+ar5(#(GAEC_RCV_SZ + GAEC_SECTIONS4*GAEC_SECTION_SZ))); psRcvI
; mar (ar6 + #(GAEC_tScA4_Sz));
mar (ar6 + #(GAEC_tScA4_Sz-GAEC_tScA4.asErr));
if (*ar2- != #0) goto L33
t2, t3 = pop();
xar6 = popboth();
xar5 = popboth();
.arms_on
bit(ST2, #ST2_ARMS) = #1;
return;
.if 0
;-------------------------------------------------------------------------
.global __adapt_dc4A
;-------------------------------------------------------------------------
; band 0
__adapt_dc4A
; GAEC_tDb *pDb = ar0
; GAEC_tSc *pSc = ar1
;
; input parameters are not modified
;
; if band = 0;
.arms_off
bit(ST2, #ST2_ARMS) = #0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -