📄 inter_36.asm
字号:
*****************************************************************************
** Description: _Interpol_3or6 in inter_36.c **
** **
** Inputs **
** **
** xar3---Word16 *x **
** al ---Word16 frac **
** ar1 ---Word16 flag3 **
** **
** Outputs: **
** **
** Return value : ah **
** **
** Attribute : Cycles:288 Pm:32 **
** Modified Registers: acc,t,p,xar1--xar7 **
** **
** Programmer : YANG zhiwei **
*****************************************************************************
.global _interpol_3or6
.ref inter_6
.ref L_INTER_SRCH
.ref UP_SAMP_MAX
_interpol_3or6:
banz _line_70,ar1-- ;if ( flag3 != 0 ), jump to _line_70
bf _line_74,unc ;else, jump to _line_74
_line_70:
;by skiff
;lsl acc,1
lsl al,1 ;al(frac) shift left by 1
_line_74:
;cmp acc,#0 ;Modify flags on (ACC - 0x00000000);
;test acc
bf _line_80,geq ;if acc >= 0,jump to _line_80
add acc,#UP_SAMP_MAX ;else, acc < 0 ,then frac = frac + #UP_SAMP_MAX
mov ah,#0
dec ar3 ;x--
_line_80:
inc ar3
movl xar4,xar3 ;x1 = &x[0] + 1
movl xar5,xar3 ;x2 = &x[1]
movl xar6,#inter_6
;by skiff
push acc
push acc
movl acc,xar6
pop xar6
add acc,ar6
movl xar6,acc
;addl xar6,acc ;c1 = &inter_6[frac]
pop acc
;mov ar6,al
;movl xar7,#inter_6
;movl acc,xar7
;add acc,ar6
;movl xar6,acc
mov ah,#UP_SAMP_MAX
sub ah,al ;ah = UP_SAMP_MAX - frac
movl xar7,#inter_6
sfr acc,#16
addl xar7,acc ;c2 = &inter_6[sub (UP_SAMP_MAX, frac)]
zapa ;acc = 0,p = 0,ovc = 0
movb xar1,#0 ;clear ar1(k)
movb xar2,#L_INTER_SRCH-1
_loop_86:
mov t,*--xar4 ;xar4--,t = *xar4 = x[-i]
mpya p,t,*+xar6[ar1] ;acc = acc +p<<pm,p = x1[-i] * c1[k],then i--
mov t,*xar5++
mpya p,t,*+xar7[ar1] ;acc = acc +p<<pm,p = x2[i] * c1[k],then i ;i++
addb xar1,#UP_SAMP_MAX ;k += UP_SAMP_MAX
banz _loop_86,ar2--
addl acc,p<<pm ;s = acc = acc + p<<pm
add acc,#0x0800<<4
LRETR
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -