📄 gaecfba.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"
;-------------------------------------------------------------------------
.global _GAEC_aasFBS
.global _GAEC_aasFBR
.global _GAEC_aasFBX
;-------------------------------------------------------------------------
.global _gaec_fb_snd_analysis
;-------------------------------------------------------------------------
_gaec_fb_snd_analysis
; GAEC_tDb *pDb = ar0,
; GAEC_tSc *pSc = ar1
; S16 *psIn = ar2
;
.arms_off
bit(ST2, #ST2_ARMS) = #0;
bit(ST1, #ST1_FRCT) = #1;
pshboth(xar6)
pshboth(xar5)
xar4 = mar(*ar0(#(GAEC_tDb.asSbuf+GAEC_FR_SZ)))
xar3 = mar(*ar0(#(GAEC_tDb.asSbuf)))
repeat (#(GAEC_SBUF_SZ-GAEC_FR_SZ-1))
*ar3+ = *ar4+
repeat (#(GAEC_FR_SZ-1))
*ar3+ = *ar2+;
xar2 = mar(*ar0(#(GAEC_tDb.asSbuf)))
xcdp = mar(*ar1(#(GAEC_tSc.u.asTmp)))
t1 = #(GAEC_BLKS);
t0 = #(1-GAEC_FBS_SZ/2);
xar5 = mar(*ar1(#(GAEC_tSc.aasSin)))
xar6 = #(GAEC_BLKS-1);
L01
brc0 = #(GAEC_FBS_SZ/2-2);
xar3 = mar(*ar2(#(GAEC_FBS_SZ-1)))
xar4 = mar(*ar1(#(GAEC_tSc.u.asTmp)))
localrepeat {
ac0 = (*ar2+ <<#16) + (*ar3- <<#16);
*ar4+ = HI(ac0);
}
ac0 = (*(ar2+t0) <<#16) + (*ar3- <<#16);
*ar4+ = HI(ac0);
brc0 = #(GAEC_BANDS/2-1);
xar3 = #_GAEC_aasFBS;
xar4 = #(_GAEC_aasFBS + GAEC_FBS_SZ/2);
localrepeat {
ac0 = *ar3+ * coef(*cdp+),
ac1 = *ar4+ * coef(*cdp+);
|| repeat (#(GAEC_FBS_SZ/2-3))
ac0 = ac0 + (*ar3+ * coef(*cdp+)),
ac1 = ac1 + (*ar4+ * coef(*cdp+));
ac0 = rnd(ac0 + (*ar3+ * coef(*(cdp+t0)))),
ac1 = rnd(ac1 + (*ar4+ * coef(*(cdp+t0))));
*(ar5 + t1) = HI(ac0);
|| mar (ar3 + #(GAEC_FBS_SZ/2))
*(ar5 + t1) = HI(ac1);
|| mar (ar4 + #(GAEC_FBS_SZ/2))
}
brc0 = #(GAEC_FBS_SZ/2-2);
xar3 = mar(*ar2(#(GAEC_FBS_SZ-1)))
xar4 = mar(*ar1(#(GAEC_tSc.u.asTmp)))
localrepeat {
ac0 = (*ar2+ <<#16) - (*ar3- <<#16);
*ar4+ = HI(ac0);
}
ac0 = (*(ar2+t0) <<#16) - (*ar3- <<#16);
*ar4+ = HI(ac0);
brc0 = #(GAEC_BANDS/2-1);
xar3 = #(_GAEC_aasFBS + (GAEC_FBS_SZ/2)*(GAEC_BANDS+0));
xar4 = #(_GAEC_aasFBS + (GAEC_FBS_SZ/2)*(GAEC_BANDS+1));
localrepeat {
ac0 = *ar3+ * coef(*cdp+),
ac1 = *ar4+ * coef(*cdp+);
|| repeat (#(GAEC_FBS_SZ/2-3))
ac0 = ac0 + (*ar3+ * coef(*cdp+)),
ac1 = ac1 + (*ar4+ * coef(*cdp+));
ac0 = rnd(ac0 + (*ar3+ * coef(*(cdp+t0)))),
ac1 = rnd(ac1 + (*ar4+ * coef(*(cdp+t0))));
*(ar5 + t1) = HI(ac0);
|| mar (ar3 + #(GAEC_FBS_SZ/2))
*(ar5 + t1) = HI(ac1);
|| mar (ar4 + #(GAEC_FBS_SZ/2))
}
mar (ar5 - #(GAEC_BLKS*(2*GAEC_BANDS)-1));
mar (ar2 + #GAEC_BLK_SZ);
if (*ar6- != #0) goto L01
.arms_on
bit(ST2, #ST2_ARMS) = #1;
bit(ST1, #ST1_FRCT) = #0;
xar5 = popboth();
xar6 = popboth();
return;
;-------------------------------------------------------------------------
.global _gaec_fb_rcv_analysis
;-------------------------------------------------------------------------
_gaec_fb_rcv_analysis
; GAEC_tDb *pDb = ar0,
; GAEC_tSc *pSc = ar1
;
.arms_off
bit(ST2, #ST2_ARMS) = #0;
bit(ST1, #ST1_FRCT) = #1;
pshboth(xar6)
pshboth(xar5)
xar2 = mar(*ar0(#(GAEC_tDb.asRbuf)))
xcdp = mar(*ar1(#(GAEC_tSc.u.asTmp)))
t1 = #(GAEC_RCV_SZ);
t0 = #(1-GAEC_FBR_SZ/2);
xar5 = dbl(*ar0(#(GAEC_tDb.psRcv)))
; mar (ar5 + #(GAEC_RCV_SZ - GAEC_BLKS))
mar (*+ar5(#(GAEC_RCV_SZ - GAEC_BLKS)))
xar6 = #(GAEC_BLKS-1);
L02
brc0 = #(GAEC_FBR_SZ/2-2);
xar3 = mar(*ar2(#(GAEC_FBR_SZ-1)))
xar4 = mar(*ar1(#(GAEC_tSc.u.asTmp)))
localrepeat {
ac0 = (*ar2+ <<#16) + (*ar3- <<#16);
*ar4+ = HI(ac0);
}
ac0 = (*(ar2+t0) <<#16) + (*ar3- <<#16);
*ar4+ = HI(ac0);
brc0 = #(GAEC_BANDS/2-1);
xar3 = #_GAEC_aasFBR;
xar4 = #(_GAEC_aasFBR + GAEC_FBR_SZ/2);
localrepeat {
ac0 = *ar3+ * coef(*cdp+),
ac1 = *ar4+ * coef(*cdp+);
|| repeat (#(GAEC_FBR_SZ/2-3))
ac0 = ac0 + (*ar3+ * coef(*cdp+)),
ac1 = ac1 + (*ar4+ * coef(*cdp+));
ac0 = rnd(ac0 + (*ar3+ * coef(*(cdp+t0)))),
ac1 = rnd(ac1 + (*ar4+ * coef(*(cdp+t0))));
*(ar5 + t1) = HI(ac0);
|| mar (ar3 + #(GAEC_FBR_SZ/2))
*(ar5 + t1) = HI(ac1);
|| mar (ar4 + #(GAEC_FBR_SZ/2))
}
brc0 = #(GAEC_FBR_SZ/2-2);
xar3 = mar(*ar2(#(GAEC_FBR_SZ-1)))
xar4 = mar(*ar1(#(GAEC_tSc.u.asTmp)))
localrepeat {
ac0 = (*ar2+ <<#16) - (*ar3- <<#16);
*ar4+ = HI(ac0);
}
ac0 = (*(ar2+t0) <<#16) - (*ar3- <<#16);
*ar4+ = HI(ac0);
brc0 = #(GAEC_BANDS/2-1);
xar3 = #(_GAEC_aasFBR + (GAEC_FBR_SZ/2)*(GAEC_BANDS+0));
xar4 = #(_GAEC_aasFBR + (GAEC_FBR_SZ/2)*(GAEC_BANDS+1));
localrepeat {
ac0 = *ar3+ * coef(*cdp+),
ac1 = *ar4+ * coef(*cdp+);
|| repeat (#(GAEC_FBR_SZ/2-3))
ac0 = ac0 + (*ar3+ * coef(*cdp+)),
ac1 = ac1 + (*ar4+ * coef(*cdp+));
ac0 = rnd(ac0 + (*ar3+ * coef(*(cdp+t0)))),
ac1 = rnd(ac1 + (*ar4+ * coef(*(cdp+t0))));
*(ar5 + t1) = HI(ac0);
|| mar (ar3 + #(GAEC_FBR_SZ/2))
*(ar5 + t1) = HI(ac1);
|| mar (ar4 + #(GAEC_FBR_SZ/2))
}
ar5 = ar5 - #(GAEC_RCV_SZ*(2*GAEC_BANDS)-1);
mar (ar2 + #GAEC_BLK_SZ);
if (*ar6- != #0) goto L02
.arms_on
bit(ST2, #ST2_ARMS) = #1;
bit(ST1, #ST1_FRCT) = #0;
xar5 = popboth();
xar6 = popboth();
return;
;-------------------------------------------------------------------------
.global _gaec_fb_synthesis
;-------------------------------------------------------------------------
_gaec_fb_synthesis
; S16 ppsErr[][GAEC_ERR_SZ] = ar0
; S16 *psSout = ar1
;
.arms_off
bit(ST2, #ST2_ARMS) = #0;
xar2 = #(GAEC_BLKS-1);
t0 = #(GAEC_ERR_SZ - GAEC_LFCTR+1);
t1 = #(GAEC_FBZ_SZ*GAEC_BANDS);
ac3 = #0;
; cycle for blks
L03
brc0 = #(GAEC_BLK_SZ/2-1);
brc1 = #(2*GAEC_BANDS-1);
xar3 = #(_GAEC_aasFBX + GAEC_FBZ_SZ* 0);
xar4 = #(_GAEC_aasFBX + GAEC_FBZ_SZ*GAEC_BANDS);
localrepeat { ; cycle for k within the blk
; set cdp (ptr to data) and zero accumulators
xcdp = xar0;
|| ac0 = ac3;
ac1 = ac3;
|| localrepeat { ; cycle for bands
.loop (GAEC_LFCTR-1) ; cycle for n
ac0 = ac0 + (*ar3+ * coef(*cdp+)),
ac1 = ac1 + (*ar4+ * coef(*cdp+));
.endloop
ac0 = ac0 + (*ar3+ * coef(*(cdp+t0))),
ac1 = ac1 + (*ar4+ * coef(*(cdp+t0)));
}
; save results
*ar1+ = HI(rnd(ac0 << #1));
*ar1+ = HI(rnd(ac1 << #1));
}
mar (*ar0+);
; advance cdp and return ar3, ar4 back to the table start
mar(*(ar3-t1)), mar(*(ar4-t1)), mar(coef(*cdp+));
if (*ar2- != #0) goto L03
.arms_on
bit(ST2, #ST2_ARMS) = #1;
return;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -