⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 halfcopy.asm

📁 adi bf533视频编码程序
💻 ASM
📖 第 1 页 / 共 2 页
字号:
                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 + -