📄 gaecza.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 ".ftext2"
;-------------------------------------------------------------------------
_SHFT .set (2)
;-------------------------------------------------------------------------
.global _gaec_update_rbuf
;-------------------------------------------------------------------------
_gaec_update_rbuf
; GAEC_tDb *pDb = ar0
; S16 *psRcv = ar1
;
; shift sRbuf
xar2 = mar (*ar0(#(GAEC_tDb.asRbuf)))
xar3 = mar (*ar0(#(GAEC_tDb.asRbuf+GAEC_FR_SZ)))
repeat (#(GAEC_RBUF_SZ-GAEC_FR_SZ - 1))
*ar2+ = *ar3+
;
; add new data
repeat (#(GAEC_FR_SZ - 1))
*ar2+ = *ar1+
return
;-------------------------------------------------------------------------
.global _gaec_shift_rcv
;-------------------------------------------------------------------------
_gaec_shift_rcv
; GAEC_tDb *pDb = ar0
;
;
; shift psRcv
xar2 = dbl (*ar0(#(GAEC_tDb.psRcv)))
t0 = #(GAEC_BLKS+1);
brc0 = #(GAEC_BANDS*2-1);
xar3 = mar (*ar2(#(GAEC_BLKS)))
localrepeat {
; *ar2+ = *ar3+;
repeat (#(GAEC_RCV_SZ-GAEC_BLKS-2))
*ar2+ = *ar3+;
*(ar2+t0) = *(ar3+t0);
}
return;
;-------------------------------------------------------------------------
.global _gaec_update_err_sav
;-------------------------------------------------------------------------
_gaec_update_err_sav
; GAEC_tDb *pDb = ar0
; GAEC_tSc *pSc = ar1
;
xar2 = mar(*ar0(#(GAEC_tDb.aasErrSav)))
xar3 = mar(*ar0(#(GAEC_tDb.aasErrSav+GAEC_BLKS)))
xar4 = mar(*ar1(#(GAEC_tSc.aasErr)))
brc0 = #(GAEC_BANDS*2-1);
t0 = #(GAEC_BLKS + 1);
localrepeat {
*ar2+ = *ar3+;
|| repeat (#(GAEC_ERR_SZ-GAEC_BLKS-3))
*ar2+ = *ar3+;
*ar2+ = *(ar3+t0);
|| repeat (#(GAEC_BLKS-1))
*ar2+ = *ar4+;
}
return;
;-------------------------------------------------------------------------
.global _gaec_copy_adf
;-------------------------------------------------------------------------
_gaec_copy_adf
; S16 *psTo = ar0
; S16 *psFrom = ar1
; S16 band = t0
if (t0 == #0) goto A10
t0 = t0 - #GAEC_BANDS;
if (t0 == #0) goto A11
ac0 = #(GAEC_BANDS * GAEC_ADF_SZ*2);
ac0 = ac0 + (t0 * #(GAEC_ADF_SZ*2))
t0 = ac0;
mar (*(ar0 + t0)), mar (*(ar1 + t0)), mar(coef(*cdp))
repeat (#(GAEC_ADF_SZ*2-1))
*ar0+ = *ar1+
return
A11
mar (*ar0+), mar (*ar1+), mar(coef(*cdp))
A10
t0 = #2
|| repeat (#(GAEC_ADF_SZ-1))
*(ar0+t0) = *(ar1+t0)
return;
;-------------------------------------------------------------------------
.global _gaec_copy_err
;-------------------------------------------------------------------------
_gaec_copy_err
; GAEC_tSc *pSc = ar0
; S16 band = t0
xar2 = mar(*ar0(#(GAEC_tSc.aasErr)))
xar3 = mar(*ar0(#(GAEC_tSc.aasErrM)))
ac0 = #0;
ac0 = ac0 + (t0 * #GAEC_BLKS);
t1 = ac0;
mar (ar2 + t1);
mar (ar3 + t1);
repeat (#(GAEC_BLKS-1))
*ar2+ = *ar3+
ac0 = t0 - #GAEC_BANDS
ac0 = ac0 << #16
ac0 = ac0 * t0;
;
; if any of multipliers is equal to 0
if (ac0 == #0) return
mar (ar2 + #(GAEC_BLKS*(GAEC_BANDS-1)))
mar (ar3 + #(GAEC_BLKS*(GAEC_BANDS-1)))
repeat (#(GAEC_BLKS-1))
*ar2+ = *ar3+
return
;-------------------------------------------------------------------------
.global _gaec_in_corr
;-------------------------------------------------------------------------
_gaec_in_corr
; S16 *psSav = ar0
; S16 *psIO = ar1
;
brc0 = #(GAEC_FR_SZ-1)
localrepeat {
ac0 = (*ar1 << #16) - (*ar0 << #16)
ac0 = ac0 + (*ar0 << #(16 - _SHFT))
*ar0 = *ar1;
*ar1+ = HI(rnd(ac0))
}
return
;-------------------------------------------------------------------------
.global _gaec_out_corr
;-------------------------------------------------------------------------
_gaec_out_corr
; S16 *pslSav = ar0
; S16 *psIO = ar1
;
brc0 = #(GAEC_FR_SZ-1)
localrepeat {
ac0 = *ar1 << #15
ac1 = dbl(*ar0)
ac0 = ac0 + ac1
ac0 = ac0 - (ac1 << #(-_SHFT))
dbl(*ar0) = ac0;
*ar1+ = HI(rnd(ac0 << #1))
}
return
;-------------------------------------------------------------------------
.global _gaec_loopback
;-------------------------------------------------------------------------
_gaec_loopback
; GAEC_tDb *pDb = ar0
; S16 *psSnd = ar1
;
xar2 = mar(*ar0(#(GAEC_tDb.asRbuf+5)))
brc0 = #(GAEC_FR_SZ-1)
t0 = #18425
localrepeat {
ac0 = t0 * *ar2+
*ar1+ = HI(rnd(ac0 << #1))
}
return;
;-------------------------------------------------------------------------
.global _gaec_max_coef
;-------------------------------------------------------------------------
_gaec_max_coef
; GAEC_tDb *pDb = ar0
; GAEC_tSc *pSc = ar1
;
ac2 = *ar0(#(GAEC_tDb.sMaxCoefBand))
ac2 = ac2 + #1
ac3 = ac2 - #(GAEC_BANDS+1)
if (ac3 < 0) goto A71
ac2 = #0;
ac1 = *ar0(#(GAEC_tDb.sMaxCoefAv))
ac0 = *ar0(#(GAEC_tDb.sMaxCoef))
ac0 = ac0 - ac1;
ac1 = ac1 + (ac0 << #-2)
*ar0(#(GAEC_tDb.sMaxCoefAv)) = ac1;
*ar0(#(GAEC_tDb.sMaxCoef)) = #0
A71
*ar0(#(GAEC_tDb.sMaxCoefBand)) = ac2;
;
; ac0 = smax
; xar2 = psAdf
ac1 = dbl(*ar0(#(GAEC_tDb.psAdf)))
ac0 = #0
compare (ac2 == #0) goto A72
compare (ac2 == #(GAEC_BANDS)) goto A73
; bands 1... BANDS-1
t0 = ac2
ac1 = ac1 + (t0 * #(GAEC_ADF_SZ*2))
xar2 = ac1;
brc0 = #(GAEC_ADF_SZ*2-1)
localrepeat {
ac1 = *ar2+;
ac1 = |ac1|;
ac0 = max(ac1, ac0)
}
goto A74
A73
ac1 = ac1 + #1
A72
xar2 = ac1
brc0 = #(GAEC_ADF_SZ-1)
t0 = #2
localrepeat {
ac1 = *(ar2+t0);
ac1 = |ac1|;
ac0 = max(ac1, ac0)
}
A74
ac1 = *ar0(#(GAEC_tDb.sMaxCoef))
ac1 = max(ac0, ac1)
*ar0(#(GAEC_tDb.sMaxCoef)) = ac1;
*ar1(#(GAEC_tSc.sMaxCoef)) = ac0;
return
;-------------------------------------------------------------------------
.global _gaec_scale_band
;-------------------------------------------------------------------------
_gaec_scale_band
; S16 *psAdf = ar0
; S16 *psAdfM = ar1
; S16 band = t0
; S16 shift = t1
compare (t0 == #0) goto A81
compare (t0 == (GAEC_BANDS)) goto A82
ac0 = xar0
ac0 = ac0 + (t0 * #(GAEC_ADF_SZ*2))
xar0 = ac0;
ac0 = xar1
ac0 = ac0 + (t0 * #(GAEC_ADF_SZ*2))
xar1 = ac0;
brc0 = #(GAEC_ADF_SZ*2-1);
localrepeat {
ac0 = *ar0 << t1;
ac1 = *ar1 << t1
|| *ar0+ = ac0;
*ar1+ = ac1;
}
return
A82
mar (ar0 + #1)
mar (ar1 + #1)
A81
t0 = #2
brc0 = #(GAEC_ADF_SZ-1);
localrepeat {
ac0 = *ar0 << t1;
ac1 = *ar1 << t1
|| *(ar0+t0) = ac0;
*(ar1+t0) = ac1;
}
return
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -