📄 reconstruct.asm
字号:
;---------------------------------------------------------------------
;}
;/*
; * reconstruct()
; *
; * Returns reconstructed difference signal 'dq' obtained from
; * codeword 'i' and quantization step size scale factor 'y'.
; * Multiplication is performed in log base 2 domain as addition.
; */
;int
;reconstruct(
; int sign, /* 0 for non-negative value */
; int dqln, /* G.72x codeword */
; int y) /* Step size multiplier */
;{
; short dql; /* Log of 'dq' magnitude */
; short dex; /* Integer part of log */
; short dqt;
; short dq; /* Reconstructed difference signal sample */
;
; dql = dqln + (y >> 2); /* ADDA */
;
; if (dql < 0) {
; return ((sign) ? -0x8000 : 0);
; } else { /* ANTILOG */
; dex = (dql >> 7) & 15;
; dqt = 128 + (dql & 127);
; dq = shr((dqt << 7) , (14 - dex));
; return ((sign) ? (dq - 0x8000) : dq);
; }
;}
;-------------------------------------------------------------------
;AR6=sign, B->dqln, A->y
.title "reconstruct.asm"
.include "g723_global.asm"
.include "g723_stat.asm"
.mmregs
.text
reconstruct:
sfta A, -2
add *AR3, A ;A=dql
bc sign1, ALT
ld A, B
sfta A, -7
and #15, A ;A=dex
and #127, B
add #128, B ;B=dqt
sfta B, 7
sub #14, A
stlm A, T
ldm AR6, A ;A=sign
norm B ;B=dq
nop
xc 2, AGT
sub #0x8000, B
ret ;return B
sign1:
ldm AR6, A
ld #0, B
nop
xc 2, AGT
ld #0x8000, B
ret ;return(B)
.end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -