📄 halfcopy.asm
字号:
i1=r0;//psrc
r4=b0;//srcstep
r5=[sp+12+64];//dststep
p0=16;
/********************************************/
cc=bittst(r7,0);//mv_off_x
if cc jump HF_HH16;
cc=bittst(r6,0);
if cc jump FH16;
p1=4;
i1=i0;
r4+=-16;
m0=r4;
r5+=-12;
m1=r5;
/*lsetup(ff_start,ff_end)lc0=p0;
ff_start:
lsetup(ff1_start,ff1_end)lc1=p1;
ff1_start:
r6=[i0++];
ff1_end:
[i3++]=r6;
i3+=m1;
ff_end:
i0+=m0;*/
lsetup(ff_start,ff_end)lc0=p0;
disalgnexcpt||r0=[i0++]||r2=[i1++];
ff_start:
disalgnexcpt||r1=[i0++]||r3=[i1++];
r6=byteop1p(r1:0,r3:2)||r0=[i0++]||r2=[i1++];
r7=byteop1p(r1:0,r3:2)(r)||r1=[i0++]||[i3++]=r6;
disalgnexcpt||[i3++]=r7||r3=[i1++];
r6=byteop1p(r1:0,r3:2)||r0=[i0++m0]||r2=[i1++m0];
r7=byteop1p(r1:0,r3:2)(r)||r0=[i0++]||[i3++]=r6;
ff_end:
disalgnexcpt||[i3++m1]=r7||r2=[i1++];
jump halfcopyMB_end;
FH16:
m1=r4;
//p1=2;
r4+=-16;
m0=r4;
r5+=-12;
m3=r5;
/* lsetup(fh_start,fh_end)lc0=p0;
fh_start:
i1=i0;
i1+=m1;
lsetup(fh1_start,fh1_end)lc1=p1;
r0=[i0++]||r2=[i1++];
fh1_start:
r6=byteop1p(r1:0,r3:2)||r1=[i0++]||r3=[i1++];
r6=byteop1p(r1:0,r3:2)(r)||[i3++]=r6||r0=[i0++];
fh1_end:
[i3++]=r6||r2=[i1++];
i3+=m3;
fh_end:
i0+=m0;*/
lsetup(fh_start,fh_end)lc0=p0;
i1=i0;
i1+=m1;
disalgnexcpt||r0=[i0++]||r2=[i1++];
fh_start:
disalgnexcpt||r1=[i0++]||r3=[i1++];
r6=byteop1p(r1:0,r3:2)||r0=[i0++]||r2=[i1++];
r7=byteop1p(r1:0,r3:2)(r)||r1=[i0++]||[i3++]=r6;
disalgnexcpt||[i3++]=r7||r3=[i1++];
r6=byteop1p(r1:0,r3:2)||r0=[i0++m0]||r2=[i1++m0];
r7=byteop1p(r1:0,r3:2)(r)||r0=[i0++]||[i3++]=r6;
fh_end:
disalgnexcpt||[i3++m3]=r7||r2=[i1++];
jump halfcopyMB_end;
HF_HH16:
cc=bittst(r6,0);
if cc jump HH16;
/*
m1=1;
i1=i0;
i1+=m1;
r4+=-20;
m0=r4;
r5+=-16;
m3=r5;
r6=3; //这一段主要是为I0的后两位全为1
r7=i0; //考虑的。因为此时I0+1后,后两位
r7=r7&r6; //全为0,此时所选的寄存器,就不是
cc=r7==r6; //R3,而是R2,故分开考虑。
if cc jump byte_align16_HF;
p1=4;
lsetup(hf_start,hf_end)lc0=p0;
i2=i0;
disalgnexcpt||r0=[i0++]||r2=[i2++];
hf_start:
lsetup(hf1_start,hf1_end)lc1=p1;
hf1_start:
disalgnexcpt||r1=[i0]||r3=[i2];
r6=byteop1p(r1:0,r3:2)||r0=[i0++]||r2=[i2++];
hf1_end:
[i3++]=r6;
i3+=m3;
i0+=m0;
i2+=m0;
hf_end:
disalgnexcpt||r0=[i0++]||r2=[i2++];
jump halfcopyMB_end;
byte_align16_HF://特殊情况
p1=4;
lsetup(byte_align16_hf_start,byte_align16_hf_end)lc0=p0;
i2=i0;
i2+=4;
disalgnexcpt||r0=[i0++]||r2=[i2++];
byte_align16_hf_start:
lsetup(hf16_start,hf16_end)lc1=p1;
hf16_start:
disalgnexcpt||r1=[i0]||r3=[i2];
r6=byteop1p(r1:0,r3:2)||r0=[i0++]||r2=[i2++];
hf16_end:
[i3++]=r6;
i3+=m3;
i0+=m0;
i2+=m0;
byte_align16_hf_end:
disalgnexcpt||r0=[i0++]||r2=[i2++];
*/
P2 = 16 (Z);
R4+=-16;
M1 = R4;
R0+=1;
I0=R0;
R5+=-12;
M3=R5;
LSETUP(MBAVG2_LR_ST, MBAVG2_LR_END) LC0 = P2;
DISALGNEXCPT || R0 = [I0++] || R2 = [I1++];
MBAVG2_LR_ST:
DISALGNEXCPT || R1 = [I0++] || R3 =[I1++];
R6 = BYTEOP1P(R1:0,R3:2) || R0 = [I0++] || R2 =[I1++];
R6 = BYTEOP1P(R1:0,R3:2)(R) || [I3++] = R6 || R1 = [I0++];
DISALGNEXCPT || [I3++] = R6 || R3 =[I1++];
R6 = BYTEOP1P(R1:0,R3:2) || R0 = [I0++M1] || R2 =[I1++M1];
R6 = BYTEOP1P(R1:0,R3:2)(R) || [I3++] = R6 || R2 = [I1++];
MBAVG2_LR_END:
DISALGNEXCPT || [I3++M3] = R6 || R0 =[I0++];
jump halfcopyMB_end;
HH16:
/*
p1=4;
m1=1;
m2=r4;
r4+=-16;
m0=r4;
i1=i0;
r5+=-12;
m3=r5;
r6=3; //这一段主要是为I0的后两位全为1
r7=i0; //考虑的。因为此时I0+1后,后两位
r7=r7&r6; //全为0,此时所选的寄存器,就不是
cc=r7==r6; //R3,而是R2,故分开考虑。
if cc jump byte_align16_HH;
lsetup(hh_start,hh_end)lc0=p0;
i2=i0;
i2+=m2;
disalgnexcpt||r0=[i0++]||r2=[i2++];
hh_start:
// lsetup(hh16_start,hh16_end)lc1=p1;
// hh16_start:
disalgnexcpt||r1=[i0++]||r3=[i2++];
r6=byteop2p(r1:0,r3:2)(rndl);
i0+=m1;
i1+=m1;
r7=byteop2p(r1:0,r3:2)(rndh);
i0-=m1;
i1-=m1;
r7=r6+r7;
disalgnexcpt||r0=[i0++]||r2=[i2++];
r6=byteop2p(r1:0,r3:2)(rndl,r)||[i3++]=r7;
i0+=m1;
i1+=m1;
r7=byteop2p(r1:0,r3:2)(rndh,r);
i0-=m1;
i1-=m1;
r7=r6+r7;
disalgnexcpt||r1=[i0++]||r3=[i2++];
r6=byteop2p(r1:0,r3:2)(rndl)||[i3++]=r7;
i0+=m1;
i1+=m1;
r7=byteop2p(r1:0,r3:2)(rndh);
i0-=m1;
i1-=m1;
r7=r6+r7;
disalgnexcpt||r0=[i0++m0]||r2=[i2++m0];
r6=byteop2p(r1:0,r3:2)(rndl,r)||[i3++]=r7;
i0+=m1;
i1+=m1;
r7=byteop2p(r1:0,r3:2)(rndh,r);
i0-=m1;
i1-=m1;
r7=r6+r7;
[i3++m3]=r7;
hh_end:
disalgnexcpt||r0=[i0++]||r2=[i2++];
jump halfcopyMB_end;
byte_align16_HH://特殊情况
lsetup(byte_align16_hh_start,byte_align16_hh_end)lc0=p0;
i2=i0;
i2+=m2;
disalgnexcpt||r0=[i0++]||r2=[i2++];
byte_align16_hh_start:
disalgnexcpt||r1=[i0++]||r3=[i2++];
r6=byteop2p(r1:0,r3:2)(rndl);
i0+=m1;
i1+=m1;
r7=byteop2p(r1:0,r3:2)(rndh,r);
i0-=m1;
i1-=m1;
r7=r6+r7;
disalgnexcpt||r0=[i0++]||r2=[i2++];
r6=byteop2p(r1:0,r3:2)(rndl,r)||[i3++]=r7;
i0+=m1;
i1+=m1;
r7=byteop2p(r1:0,r3:2)(rndh);
i0-=m1;
i1-=m1;
r7=r6+r7;
disalgnexcpt||r1=[i0++]||r3=[i2++];
r6=byteop2p(r1:0,r3:2)(rndl)||[i3++]=r7;
i0+=m1;
i1+=m1;
r7=byteop2p(r1:0,r3:2)(rndh,r);
i0-=m1;
i1-=m1;
r7=r6+r7;
disalgnexcpt||r0=[i0++m0]||r2=[i2++m0];
r6=byteop2p(r1:0,r3:2)(rndl,r)||[i3++]=r7;
i0+=m1;
i1+=m1;
r7=byteop2p(r1:0,r3:2)(rndh);
i0-=m1;
i1-=m1;
r7=r6+r7;
[i3++m3]=r7;
byte_align16_hh_end:
disalgnexcpt||r0=[i0++]||r2=[i2++];
*/
M0 = 7;
M3 = -3 (X);
I2 = R0;
R1 = R0 + R4 (S);
I0 = R1;
I1 = R1;
R4+=-13;
M1=R4;
P2 = 16;
R5+=-12;
M2=R5;
LSETUP(MBAVG4_ST, MBAVG4_END) LC0 = P2;
DISALGNEXCPT || R0 = [I1++] || R2 = [I2++];
DISALGNEXCPT || R1 = [I1++M3] || R3 = [I2++M3];
R7 = BYTEOP2P(R1:0,R3:2) (RNDL) || R0 = [I1++M0];
MBAVG4_ST:
DISALGNEXCPT || I0 += M3 || R2 = [I2++M0];
R6 = BYTEOP2P(R1:0,R3:2) (RNDH) || R0 = [I1++M3] || R2 = [I2++M3];
R7 = R6 + R7 (NS) || I0 -= M3;
R7 = BYTEOP2P(R1:0,R3:2) (RNDL, R) || [I3++] = R7 || R1 = [I1++M0];
DISALGNEXCPT || I0 += M3 || R3 = [I2++M0];
R6 = BYTEOP2P(R1:0,R3:2) (RNDH, R) || R1 = [I1++M3] || R3 = [I2++M3];
R7 = R6 + R7 (NS) || I0 -= M3;
R7 = BYTEOP2P(R1:0,R3:2) (RNDL) || [I3++] = R7 || R0 = [I1++M0];
DISALGNEXCPT || I0 += M3 || R2 = [I2++M0];
R6 = BYTEOP2P(R1:0,R3:2) (RNDH) || R0 = [I1++M3] || R2 = [I2++M3];
R7 = R6 + R7 (NS) || I0 -= M3;
R7 = BYTEOP2P(R1:0,R3:2) (RNDL, R) || [I3++] = R7 || R1 = [I1++M1];
DISALGNEXCPT || I0 += M3 || R3 = [I2++M1];
R6 = BYTEOP2P(R1:0,R3:2) (RNDH, R) || R0 = [I1++] || R2 = [I2++];
R7 = R6 + R7 (NS) || I0 -= M3;
// DISALGNEXCPT || R0 = [I1++] || R2 = [I2++];
DISALGNEXCPT || R1 = [I1++M3] || R3 = [I2++M3];
//R7 = BYTEOP2P(R1:0,R3:2) (RNDL) || [I3++] = R7 || R0 = [I1++M1];
//DISALGNEXCPT || I0 += M3 || R2 = [I2++M1];
//R6 = BYTEOP2P(R1:0,R3:2) (RNDH) || R0 = [I1++] || R2 = [I2++];
//R7 = R6 + R7 (NS) || I0 -= M3;
//DISALGNEXCPT || R1 = [I1++M3] || R3 = [I2++M3];
MBAVG4_END:
R7 = BYTEOP2P(R1:0,R3:2) (RNDL) || [I3++M2] = R7 || R0 = [I1++M0];
halfcopyMB_end:
rets=[sp++];
l3=[sp++];
i3=[sp++];
l2=[sp++];
i2=[sp++];
l1=[sp++];
i1=[sp++];
l0=[sp++];
i0=[sp++];
(r7:4,p5:3)=[sp++];
rts;
_xhCopyMBHalfpel_MPEG4_8u.end:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -