📄 dilation.asm
字号:
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 + -