📄 cor_h.asm
字号:
;==========================================================================
; File Name
; ----------
; COR_H.ASM
;
; Brief Description of the Code:
; ------------------------------
; Compute correlations of h[] needed for the codebook search.
;
; Ref
; ------
; ACELP_CO.C (Cor_h)
;==========================================================================
.mmregs
.include ..\include\const.h
.include ..\include\tab_ld8a.h
.include ..\include\ld8amem.h
.def Cor_h
;----------------------------------------------------------------------
; Cor_h
;----------------------------------------------------------------------
; void Cor_h(
; Word16 *H, /* (i) Q12 :Impulse response of filters */
; Word16 *rr /* (o) :Correlations of H[] */
; )
;----------------------------------------------------------------------
; Contstants : Addr_h1 -> H
; Addr_rr -> rr
;----------------------------------------------------------------------
ldec .set 9
i1i4_i0i3 .set 256 ; rri1i4 - rri0i3
i1i3_i0i2 .set 256 ; rri1i3 - rri0i2
.asg "AR0", p0
.asg "AR0", pTREG
.asg "AR1", p1p0
.asg "AR1", p1
.asg "AR2", p2
.asg "AR3", p3
.asg "AR4", pH1
.asg "AR5", pH2
.asg "AR6", p4
.asg "Addr_rr", rri0i0
.asg "Addr_rr+8", rri1i1
.asg "Addr_rr+16", rri2i2
.asg "Addr_rr+24", rri3i3
.asg "Addr_rr+32", rri4i4
.asg "Addr_rr+40", rri0i1
.asg "Addr_rr+104", rri0i2
.asg "Addr_rr+168", rri0i3
.asg "Addr_rr+232", rri0i4
.asg "Addr_rr+296", rri1i2
.asg "Addr_rr+360", rri1i3
.asg "Addr_rr+424", rri1i4
.asg "Addr_rr+488", rri2i3
.asg "Addr_rr+552", rri2i4
.asg "Addr_local_buf2", xCounter
.asg "Addr_local_buf2+1", xDeltaP
.asg "Addr_local_buf2+2", xptr_hf
Cor_h:
; Find scaling factor of h[] for maximum precision
STM #Addr_h1, pH1
MVMM pH1, pH2
RPTZ A, #L_SUBFR - 1
SQURA *pH2+, A
LD A,-16,B
SUB #32000,B
NOP
BC Tar,BLT
LD #-2,ASM
B End
Tar:
EXP A
STM #T, pTREG ; if scale factor = odd number
LD *pTREG, ASM ; then output of c54x = output of c code << 1
LD *pTREG, A
AND #1,A,B
BC End,BEQ
SUB #1,A
STL A,*pTREG
LD *pTREG,ASM
; Compute rri0i0[], rri1i1[], rri2i2[], rri3i3 and rri4i4[]
End:
STM #NB_POS - 1, BRC
STM #rri0i0 + NB_POS - 1, p0
STM #rri1i1 + NB_POS - 1, p1
STM #rri2i2 + NB_POS - 1, p2
STM #rri3i3 + NB_POS - 1, p3
STM #rri4i4 + NB_POS - 1, p4
RPTBD EndLoopG0 - 1
LD #0, A
MVMM pH1, pH2
SQURA *pH2+, A
LD A, ASM,B
STL B, -16, *p4-
SQURA *pH2+, A
LD A, ASM, B
STL B, -16, *p3-
SQURA *pH2+, A
LD A, ASM, B
STL B, -16, *p2-
SQURA *pH2+, A
LD A, ASM, B
STL B, -16, *p1-
SQURA *pH2+, A
LD A, ASM, B
STL B, -16, *p0-
EndLoopG0:
; Compute elements of: rri2i3[], rri1i2[], rri0i1[] and rri0i4[]
LD #xCounter, DP
ST #NB_POS - 1, xCounter
ST #MSIZE - ldec, xDeltaP
ST #Addr_h1 + 1, xptr_hf
STM #rri2i3 + MSIZE - 1, p4
STM #rri1i2 + MSIZE - 1, p3
STM #rri0i1 + MSIZE - 1, p2
STM #rri0i4 + MSIZE - 2, p1
LoopG1:
STM #Addr_h1, pH1
MVDM xptr_hf, pH2
LD xCounter,A
ADD #-1 ,A
BCD EndInnerLoopG1, ALT
STLM A, BRC
LD #0, A
RPTBD EndInnerLoopG1 - 1
STM #ldec, AR0
MAC *pH1+, *pH2+, A
MAC *pH1+, *pH2+, A
LD A, ASM, B
STL B, -16, *p4-0
MAC *pH1+, *pH2+, A
LD A, ASM, B
STL B, -16, *p3-0
MAC *pH1+, *pH2+, A
LD A, ASM, B
STL B, -16, *p2-0
MAC *pH1+, *pH2+, A
LD A, ASM, B
STL B, -16, *p1-0
EndInnerLoopG1:
MVDM xDeltaP, AR0
MAC *pH1+, *pH2+, A
MAC *pH1+, *pH2+, A
LD A, ASM, B
STL B, -16, *p4+0
MAC *pH1+, *pH2+, A
LD A, ASM, B
STL B, -16, *p3+0
MAC *pH1+, *pH2+, A
LD A, ASM, B
STL B, -16, *p2+0
MAR *p1+0
MAR *+p1(7)
LD xCounter,A
ADD #-1 ,A
ADDM #-ldec, xDeltaP
STL A, xCounter
BCD LoopG1, AGEQ
ADDM #STEP, xptr_hf
; Compute elements of: rri2i4[], rri1i3[], rri0i2[], rri1i4[], rri0i3
ST #NB_POS - 1, xCounter
ST #MSIZE - ldec, xDeltaP
ST #Addr_h1 + 2, xptr_hf
STM #rri2i4 + MSIZE - 1, p4
STM #rri1i3 + MSIZE - 1, p3
STM #rri0i2 + MSIZE - 1, p2
STM #rri1i4 + MSIZE - 2, p1p0
LoopG2:
STM #Addr_h1, pH1
MVDM xptr_hf, pH2
LD xCounter,A
ADD #-1 ,A
BCD EndInnerLoopG2, ALT
STLM A, BRC
LD #0, A
RPTBD EndInnerLoopG2 - 1
STM #ldec, AR0
MAC *pH1+, *pH2+, A
LD A, ASM, B
STL B, -16, *p4-0
MAC *pH1+, *pH2+, A
LD A, ASM, B
STL B, -16, *p3-0
MAC *pH1+, *pH2+, A
LD A, ASM, B
STL B, -16, *p2-0
MAC *pH1+, *pH2+, A
LD A, ASM, B
STL B, -16, *p1p0
MAR *+p1p0(-i1i4_i0i3)
MAC *pH1+, *pH2+, A
LD A, ASM, B
STL B, -16, *p1p0-0
MAR *+p1p0(i1i4_i0i3)
EndInnerLoopG2:
MVDM xDeltaP, AR0
MAC *pH1+, *pH2+, A
LD A, ASM, B
STL B, -16, *p4+0
MAC *pH1+, *pH2+, A
LD A, ASM, B
STL B, -16, *p3+0
MAC *pH1+, *pH2+, A
LD A, ASM, B
STL B, -16, *p2+0
MAR *p1p0+0
MAR *+p1p0(7)
LD xCounter,A
ADD #-1 ,A
ADDM #-ldec, xDeltaP
STL A, xCounter
BCD LoopG2, AGEQ
ADDM #STEP, xptr_hf
; Compute elements of: rri1i4[], rri0i3[], rri2i4[], rri1i3[], rri0i2
ST #NB_POS - 1, xCounter
ST #MSIZE - ldec, xDeltaP
ST #Addr_h1 + 3, xptr_hf
STM #rri1i4 + MSIZE - 1, p4
STM #rri0i3 + MSIZE - 1, p3
STM #rri2i4 + MSIZE - 2, p2
STM #rri1i3 + MSIZE - 2, p1p0
LoopG3:
STM #Addr_h1, pH1
MVDM xptr_hf, pH2
LD xCounter,A
ADD #-1 ,A
BCD EndInnerLoopG3, ALT
STLM A, BRC
LD #0, A
RPTBD EndInnerLoopG3 - 1
STM #ldec, AR0
MAC *pH1+, *pH2+, A
LD A, ASM, B
STL B, -16, *p4-0
MAC *pH1+, *pH2+, A
LD A, ASM, B
STL B, -16, *p3-0
MAC *pH1+, *pH2+, A
LD A, ASM ,B
STL B, -16, *p2-0
MAC *pH1+, *pH2+, A
LD A, ASM ,B
STL B, -16, *p1p0
MAR *+p1p0(-i1i3_i0i2)
MAC *pH1+, *pH2+, A
LD A, ASM ,B
STL B, -16, *p1p0-0
MAR *+p1p0(i1i3_i0i2)
EndInnerLoopG3:
MVDM xDeltaP, AR0
MAC *pH1+, *pH2+, A
LD A, ASM, B
STL B, -16, *p4+0
MAC *pH1+, *pH2+, A
LD A, ASM, B
STL B, -16, *p3+0
MAR *+AR0(7)
LD xCounter,A
ADD #-1 ,A
MAR *p2+0
MAR *p1p0+0
ADDM #-ldec, xDeltaP
STL A, xCounter
BCD LoopG3, AGEQ
ADDM #STEP, xptr_hf
; Compute elements of: rri0i4[], rri2i3[], rri1i2[], rri0i1[]
ST #NB_POS - 1, xCounter
ST #MSIZE - ldec, xDeltaP
ST #Addr_h1 + 4, xptr_hf
STM #rri0i4 + MSIZE - 1, p4
STM #rri2i3 + MSIZE - 2, p3
STM #rri1i2 + MSIZE - 2, p2
STM #rri0i1 + MSIZE - 2, p1
LoopG4:
STM #Addr_h1, pH1
MVDM xptr_hf, pH2
LD xCounter,A
ADD #-1 ,A
BCD EndInnerLoopG4, ALT
STLM A, BRC
LD #0, A
RPTBD EndInnerLoopG4 - 1
STM #ldec, AR0
MAC *pH1+, *pH2+, A
LD A, ASM, B
STL B, -16, *p4-0
MAC *pH1+, *pH2+, A
MAC *pH1+, *pH2+, A
LD A, ASM, B
STL B, -16, *p3-0
MAC *pH1+, *pH2+, A
LD A, ASM, B
STL B, -16, *p2-0
MAC *pH1+, *pH2+, A
LD A, ASM, B
STL B, -16, *p1-0
EndInnerLoopG4:
MVDM xDeltaP, AR0
MAC *pH1+, *pH2+, A
LD A, ASM, B
STL B, -16, *p4+0
MAR *+AR0(7)
LD xCounter,A
ADD #-1 ,A
MAR *p3+0
MAR *p2+0
MAR *p1+0
ADDM #-ldec, xDeltaP
STL A, xCounter
BCD LoopG4, AGEQ
ADDM #STEP, xptr_hf
RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -