📄 residu.asm
字号:
*****************************************************************************
** Description: Residu() in residu.c **
** **
** Inputs **
** AR1=const (不用传) : size of filtering **
** *XAR7---Word16 a[], : prediction coefficients **
** *XAR4---Word16 x[], : speech signal **
** note:x[-10]~x[-1] should also be read before call the function **
** **
** Outputs: **
** *XAR3---Word16 y[], : residual signal **
** **
** Return value : **
** **
** Attribute : Cycles: 5312 Pm:46 **
** Modified Registers: AR1,XAR3,XAR4,XAR7 **
** ACC,P, T **
** **
** Programmer : ZHOU Bei (OK! MAR 5th,2003) **
*****************************************************************************
.global _residu
.ref L_SUBFR
.ref M
_residu:
PUSH XAR0
MOV AR1,#L_SUBFR-1
;DEC AR1 ; loop time--
_LOOP_63:
ADDB XAR4,#1 ; Increase addr of x
PUSH XAR7 ; Save start addr of a[i]
PUSH XAR4 ; Save start addr of x[j]
MOV AR0,#M
ZAPA
_LOOP_68:
;MOV T,*--XAR4
;MPYA P,T,*XAR7++ ; P=a[i]*x[j],j--,; A=A+P<<1, i++
MAC p,*--XAR4,*xar7++
BANZ _LOOP_68,AR0--
ADDL ACC,P<<PM ; Perform final accumulate
movl p,acc
sb _L1,LT ;讨论左移时的溢出问题
sb _L2,UNC
_L1:
and acc,#0xf000<<16
cmp ah,#0xf000
sb _L3,EQ
sb _L4,UNC
_L2:
and acc,#0xf000<<16
cmp ah,#0x0000
sb _L3,EQ
sb _L5,UNC
_L4:
mov ah,#0x8000
mov al,#0x0000
sb _L6,UNC
_L5:
mov ah,#0x7fff
mov al,#0xffff
sb _L6,UNC
_L3:
movl acc,p
LSL ACC,#3 ; ACC<<3
_L6:
ADD ACC,#0800H<<4 ; Round
MOV *XAR3++,AH ; Save MSB as final result
POP XAR4 ; Resume start addr of a[i]
POP XAR7 ; Resume start addr of x[j]
BANZ _LOOP_63,AR1-- ; Loop if AR1!= 0, AR1--
POP XAR0
LRETR
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -