📄 arith_encode_for_tp.h
字号:
.extern _jbg_lsz, _jbg_nmps, _jbg_nlps;
// Arguments:
// p0:arithe_encode_state
// p5: cx
// r3: pix
POINT_TO_ANY(p1, _jbg_lsz);
PST_CX = p0 + CX;
PST_CX += 20;
ST_CX = b[PST_CX](z);
r2 = ST_CX;
bitclr(r2, 7);
_SS = r2;
r7 = r3 + r3(ns) || A_REG = [PA_REG];
r7 = r7 >> 1 || C_REG = [PC_REG];
CT = [PCT];
BUF = [PBUF];
// _SS = _SS << 1;
JBG_LSZ = JBG_LSZ + (_SS << 1);
r5 = ST_CX >> 7 || LSZ = w[JBG_LSZ](z);
cc = r7 == r5;
// _SS = _SS >> 1;
if cc jump PROCESS_MPS_TP; // The two bits equal implies a more probable symbol
// Process less probable symbol
POINT_TO_ANY(p3, _jbg_nlps);
JBG_NLPS = JBG_NLPS + _SS;
A_REG = A_REG - LSZ(ns) || r6 = b[JBG_NLPS](z);
cc = A_REG < LSZ;
if cc jump LPS_EXCHANGE_TP;
C_REG = C_REG + A_REG;
A_REG = LSZ;
LPS_EXCHANGE_TP:
r5 = 0x80;
ST_CX = ST_CX & r5;
ST_CX = ST_CX ^ r6;
jump END_ENCODE_SYMBOL_TP;
PROCESS_MPS_TP:
A_REG = A_REG - LSZ;
r5 = 0x8000(z);
cc = A_REG < r5;
if !cc jump FIN_TP;
POINT_TO_ANY(p3, _jbg_nmps);
JBG_NMPS = JBG_NMPS + _SS;
cc = A_REG < LSZ;
if !cc jump MPS_EXCHANGE_TP;
C_REG = A_REG + C_REG;
A_REG = LSZ;
MPS_EXCHANGE_TP:
ST_CX = ST_CX >> 7 || r6 = b[JBG_NMPS](z);
ST_CX <<= 7;
ST_CX = ST_CX | r6;
END_ENCODE_SYMBOL_TP:
b[PST_CX] = ST_CX;
r0 = 0xffff(z);
r0.h = 7;
CONST_ZERO = CONST_ZERO - CONST_ZERO(ns) || SC = [PSC];
CONST_FF = 0xff(z);
CONST_8000 = 0x8000(z);
CUR_SDE = CUR_SDE_SAVE;
RENORM_TP:
A_REG <<= 1;
C_REG <<= 1;
CT += -1;
cc = CT <= 0;
if cc jump RENORM_LOOP_TP;
cc = A_REG < CONST_8000;
if cc jump RENORM_TP;
jump ARITH_ENCODE_END_TP;
RENORM_LOOP_TP:
TEMP = C_REG >> 19;
cc = TEMP <= CONST_FF;
if cc jump JUDGE_FF_TP;
cc = BUF < 0;
if cc jump SC_FIRST_TP;
BUF += 1;
b[CUR_SDE++] = BUF;
cc = BUF == CONST_FF; // if buffer == MARKER_ESC
if !cc jump SC_FIRST_TP;
b[CUR_SDE++] = CONST_ZERO; // WRITE_BYTE(MARKER_STUFF)
SC_FIRST_TP:
cc = SC == 0;
if cc jump SC_FIRST_NEXT_TP;
b[CUR_SDE++] = CONST_ZERO;
SC += -1;
jump SC_FIRST_TP;
SC_FIRST_NEXT_TP:
BUF = TEMP & CONST_FF;
jump RENORM_END_TP;
JUDGE_FF_TP:
cc = TEMP == CONST_FF;
if !cc jump BELOW_FF_TP;
SC += 1;
jump RENORM_END_TP;
BELOW_FF_TP:
cc = BUF < 0;
if cc jump SC_SECOND_TP;
b[CUR_SDE++] = BUF;
SC_SECOND_TP:
cc = SC == 0;
if cc jump SC_SECOND_NEXT_TP;
b[CUR_SDE++] = CONST_FF;
b[CUR_SDE++] = CONST_ZERO;
SC += -1;
jump SC_SECOND_TP;
SC_SECOND_NEXT_TP:
BUF = TEMP;
RENORM_END_TP:
C_REG = C_REG & r0;
CT = 8;
cc = A_REG < CONST_8000;
if cc jump RENORM_TP;
ARITH_ENCODE_END_TP:
[PC_REG] = C_REG;
[PSC] = SC;
[PBUF] = BUF;
CUR_SDE_SAVE = CUR_SDE;
[PCT] = CT;
FIN_TP:
[PA_REG] = A_REG;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -