📄 searchfrac.asm
字号:
***************************************************************************
** Description: seachfrac() in pitch_fr.c
**
** Inputs
**
** AR1: Word16 lag
** AR2: Word16 frac
** AR3: Word16 last_frac
** XAR4: Word16 &corr[0]
**
** Outputs:
**
** Return value:
**
** AR1: Word16 lag
** AR2: Word16 frac
**
** Attribute: Cycles: 1770 Pm: 51
**
** Modified Registers: all
**
** Programmer: Liu Yang
**
** Complete time: 2003 3 31
*****************************************************************************
.global _searchfrac
.ref _interpol_3or6
_searchfrac:
ADDB SP,#16
;by skiff
mov ah,#0
MOV AL,AR1 ; Al = lag
ADDL @XAR4,ACC ; XAR4 = &corr[lag]
MOVL *-SP[6],XAR4 ; *-SP[6] = &corr[lag]
MOV AL,AR1 ; AL = lag
MOV *-SP[8],AL ; *-SP[8] = lag
MOV AL,AR2 ; AL = frac
MOV *-SP[9],AL ; *-SP[9] = frac
INC @AR3 ; AR3 = last_frac + 1
MOV *-SP[10],AR3 ; *-SP[10] = last_frac + 1
MOVL @XAR3,XAR4 ; XAR3 = &corr[lag]
;BY SKIFF
MOV AH,#0
MOV AL,AR2 ; AL = frac
MOV AR1,#1 ; AR1 = flag3 = 1
LCR _interpol_3or6 ; AH = max = Interpol_3or6 (&corr[lag], frac, flag3)
MOV *-SP[12],AH ; *-SP[12] = max
MOV AL,*-SP[9] ; AL = frac
INC @AL ; AL = i = frac + 1
MOV *-SP[13],AL ; *-SP[13] = i
L1: MOVL XAR3,*-SP[6] ; XAR3 = &corr[lag]
MOV AR1,#1 ; AR1 = flag3 = 1
MOV ACC,*-SP[13] ; AL = i
LCR _interpol_3or6 ; AH = corr_int = Interpol_3or6 (&corr[*lag], i, flag3)
MOV AR6,*-SP[13] ; AR6 = i
MOV AR7,*-SP[10] ; AR7 = last_frac + 1
CMP AH,*-SP[12] ; if (corr_int > max)
SB B1,LEQ
MOV *-SP[12],AH ; *-SP[12] = max = corr_int
MOV *-SP[9],AR6 ; *-SP[9] = frac = i
B1: INC @AR6 ; i++
MOV *-SP[13],AR6 ; *-SP[13] = i
BAR L1,AR6,AR7,NEQ ; if (i <= last_frac) loop
MOV AH,*-SP[8] ; AH = lag
MOV AL,*-SP[9] ; AL = frac
MOV @AR1,AH ; AR1 = lag
MOV @AR2,AL ; AR2 = frac
; Limit the fraction value between -1 and 1
CMP @AL,#-2 ; if (frac == -2)
SB B2,NEQ
MOV AR2,#1 ; AR2 = frac = 1
DEC @AH ; AH = lag - 1
MOV AR1,AH ; AR1 = lag = lag - 1
SB B3,UNC
B2: CMP @AL,#2 ; if (frac == 2)
SB B3,NEQ
MOV AR2,#-1 ; frac = -1
INC @AH ; AH = lag + 1
MOV AR1,AH ; AR1 = lag = lag + 1
B3: SUBB SP,#16
LRETR ; else return
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -