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

📄 dilation.asm

📁 ADI BF DSP的几种常用的图象滤波汇编优化后的代码
💻 ASM
📖 第 1 页 / 共 2 页
字号:

    LSETUP(ROW_ST,ROW_END)LC0 = P2;
                            // loop counter  =  =  ROW-2 (M-2) 
    P2 = M2;                // Initialized to 2*COL+2
ROW_ST:
        R0 = B[P5++](z)||R1.L  = W[I1++];
                            // fetch x(0,0) and H01 
        A0 = R0.L *R1.L(IS) || R0 = B[P5++](z) || R1.L = W[I1++];
                            // fetch x(0,1) and H02 
        R2 = W[P5++P1](Z) ||R3.L = W[I1++];
                            // dummy fetch to adjust P5 and I1 
        A0+= R0.L*R1.L(IS) || R0 = B[P5++](z) || R1.L = W[I1++];
                            // fetch x(1,0) and H11 
        A0+= R0.L* R1.L(IS) || R0 = B[P5++](z) || R1.L = W[I1++];
                            // fetch x(1,1) and H12 
        R2 = W[P5++P1](Z)|| R3.L = W[I1++];
                            // dummy fetch to adjust P5 and I1 
        A0 += R0.L*R1.L(IS) || R0 = B[P5++](z) || R1.L = W[I1++];
                            // fetch x(2,0) and H21 
        A0 += R0.L* R1.L(IS) || R0 = B[P5++](z) || R1.L = W[I1++];
                            // fetch x(2,1) and H22 
        P5 -= P2;               // P5 modified to stating of the row
        R2 = (A0 += R0.L*R1.L )(IS)||R0 = B[P5++](z) || R1.L = W[I1++];
                            //fetch first element of the row and h00 
        R2 = MAX(R2,R6);
        R2 = MIN(R2,R7);
        B[P4++] = R2 || NOP;// store the output
    
///////////////// CORE LOOP      //////////////////////////////////////
                            // Here data is processed to get two pixel output 
                            // at a time
    
        LSETUP(COL_ST,COL_END)LC1 = P1 >> 1;
                            // loop counter  = =(COL-2)/2 
COL_ST:
            A0 = R0.L*R1.L(IS) ||R0 = B[P5++](z) || R1.H = W[I1++];
                            // fetch x(0,1) and h01 
            A1 = R0.L * R1.L ,A0+= R0.L*R1.H(IS)  || R0 = B[P5++](z)
            || R1.L = W[I1++];
                            // fetch x(1,2) and h02 
            A1+= R0.L *R1.H ,A0+= R0.L *R1.L(IS) || R0 = B[P5++](z) 
            || R1.H = W[I1++];
                            // fetch x(1,3) and h10 
            P5 = P5+P0;     // move  P5 to starting of next row
            A1+=  R0.L *R1.L (IS) ||R0 = B[P5++](z) ||R1.L = W[I1++];
                            // fetch x(1,0) and h11 
            A0+= R0.L *R1.H(IS)|| R0 = B[P5++](z) ;
                            // fetch x(1,1) 
            A1+= R0.L * R1.H,A0+= R0.L *R1.L(IS) ||R0 = B[P5++](z)
            || R1.H = W[I1++];
                            // fetch x(1,2) and h12 
            A1+=  R0.L *R1.L ,A0+= R0.L *R1.H(IS)|| R0 = B[P5++](z)
            ||R1.L = W[I1++];
                            // fetch x(1,3) and h20 
            P5 = P5+P0;               // move P5 to starting of next row
            A1+=  R0.L *R1.H(IS)||R0 = B[P5++](z)|| R1.H = W[I1++];
                            // fetch x(2,0) and h21 
            A0+= R0.L*R1.L(IS)  ||R0 = B[P5++](z);
                            // fetch x(2,1) 
            A1+= R0.L * R1.L ,A0+= R0.L *R1.H(IS) ||R0 = B[P5++] (z)
            ||R1.L = W[I1++];
                            // fetch x(2,2) and h22 
            A1+= R0.L *R1.H,R2 = (A0+=R0.L *R1.L)(IS)||R0 = B[P5++](z);
                            // fetch x(2,3) 
            P5-=P2;         // modify P5 to process next set of data
            R3 = (A1+=R0.L *R1.L)(IS)||R0 = B[P5++](z) || R1.L = W[I1++];
                            // fetch x(0,2) and h00 
            CC = R2==0;
            IF !CC R2 = R7;
            CC = R3==0;
            IF !CC R3 = R7;
            MNOP||B[P4++] = R2;
                            // store first output
COL_END:    B[P4++] = R3;
                            // store next output 
        A0 = R0.L *R1.L (IS)||R0 = B[P5++](z) || R1.L = W[I1++];
                            // fetch x(0,N-2) and h01 
        R2 = W[P5++P1](Z) ||R3.L = W[I1++];
                            // dummy fetch to increment P5 and I1 
        A0+= R0.L *R1.L (IS)||R0=B[P5++](z) || R1.L = W[I1++];
                            // fetch  X(1,N-2) and H10; 
        A0+= R0.L*R1.L(IS) ||R0 = B[P5++](z) || R1.L = W[I1++];
                            // fetch  X(1,N-1) and H11; 
        R2 = W[P5++P1](Z) || R3.L = W[I1++];
                            // dummy fetch to increment P5 and I1 
        A0+= R0.L *R1.L (IS)||R0 = B[P5++] (z)|| R1.L = W[I1++];
                            // fetch x(2,N-2) and h20 
        A0+= R0.L*R1.L(IS) ||R0 = B[P5++] (z)|| R1.L = W[I1++];
                            // fetch x(2,N-1) and h21; 
        R2 = (A0+=R0.L *R1.L)(IS)|| I1+= 4;
                            // modify I1 to fetch h01 
        CC = R2==0;
        IF !CC R2 = R7;                                      
        P5-= P3;           // modify P5 to starting of next row
ROW_END:
        B[P4++] = R2;   
    
////////////////////  LAST ROW   //////////////////////////////////////////////
    P2=P1;
    P2+= 4;                // P2==Col +2
    R0 = B[P5++](z)||R1.L = W[I1++];
                            // fetch h01 and x(M-2,0) 
    A0 = R0.L *R1.L(IS) || R0 = B[P5++](z)||R1.L = W[I1++];
                            // fetch x(M-2,1) and h02 
    R2 = W[P5++P1](Z)|| R3.L = W[I1++];
                            // dummy fetch to increment P5 and I1 
    A0+=R0.L*R1.L(IS)||R0 = B[P5++](z)||R1.L = W[I1++];
                            // fetch x(M-1,0) and h11 
    A0+=R0.L *R1.L (IS)||R0 = B[P5++](z)||R1.L = W[I1++];
                            // fetch x(M-1,2) and h12 
    P5-=P2;      
    MNOP|| I1+=M1;          // I1 is modified to fetch h00
    R2 = (A0+=R0.L *R1.L) (IS)||R0 = B[P5++](z) || R1.L = W[I1++];
                            // fetch x(M-2,0) and  h00 
    CC = R2==0;
    IF !CC R2 = R7;
    B[P4++] = R2;           // store the result
    
    
    LSETUP(LAST_ROW_ST,LAST_ROW_END)LC0 = P1;
LAST_ROW_ST:
        A0 = R0.L*R1.L (IS) ||R0 = B[P5++](z) || R1.L = W[I1++];
                            // fetch x(M-2,1) and h01 
        A0+=R0.L *R1.L(IS) ||R0 = B[P5](z) || R1.L = W[I1++];
                            // fetch x(M-2,2) and h02 
        P5 = P5+P1;         // modify P5 to  next row
        A0+=R0.L *R1.L(IS) ||R0 = B[P5++](z) || R1.L = W[I1++];
                            // fetch x(M-1,0) and h10 
        A0+=R0.L *R1.L(IS) ||R0 = B[P5++](Z) || R1.L = W[I1++];
                            // fetch x(M-1,1) and h11 
        A0+=R0.L *R1.L(IS) ||R0 = B[P5++](z) || R1.L = W[I1++];
                            // fetch x(M-1,2) and h12 
        I1 += M1;             // modify I1 to fetch h00
        P5 -= P2;
        R2 = (A0+=R0.L *R1.L)(IS)||R0 = B[P5++] (z)|| R1.L = W[I1++];
                            // fetch h00 
        CC = R2==0;
        IF !CC R2 = R7;
LAST_ROW_END:
        B[P4++] = R2;       // store the result
    
    A0 = R0.L *R1.L(IS) || R0 = B[P5++](z)||R1.L = W[I1++];
                            // fetch x(m-2,N-1) and h01 
    R2 = W[P5++P1](Z) || R3.L = W[I1++];
                            // dummy fetch to increment P5 to next row and I1 
                            // to fetch h10 
    A0+=R0.L*R1.L(IS)||R0 = B[P5++](z)||R1.L = W[I1++];
                            // fetch h10 and x(m-1,N-2) 
    A0+= R0.L *R1.L (IS)||R0 = B[P5++](z)||R1.L = W[I1++];
                            // fetch h11 and x(m-1,N-1) 
    R2 = (A0+=R0.L *R1.L )(IS);
    CC = R2 ==0;
    IF !CC R2 = R7;
    B[P4++] = R2 ;          // store the final output pixel
    (R7:6,P5:3) = [SP++];   // POP r7 and P5-3
    RTS;
    NOP;                    // To avoid one stall if LINK or UNLINK happens to 
                            // be the  next instruction in the memory.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -