?? fullinser.asm
字號:
/**********************************************
該函數的功能主要是進行整幀的圖象內插
在該函數內一次完成,水平,垂直和交叉
內插。
完成r8*8的基礎塊內插耗時為:374cycles
此函數比原函數增加四句,在后面有標注
**********************************************/
.section L1_code;
.global __fullinterpolate;
.align 8;
__fullinterpolate:
[--SP] = (R7:4,P5:3);
P0 = R0; //輸入數據的地址
P1 = R1; //水平內插的輸出地址
P2 = R2; //垂直內插的輸出地址
P3 = [SP+40]; //交叉內插的輸出地址
P4 = [SP+44]; //Whide
R3 = [SP+48]; //Hight
R4 = [SP+52]; //stride
M0 = R3; //高
M1 = R4; //跨距
R5 = P4; //寬
I2 = P0; //輸入數據
L2 = 0;
I3 = M0; //高
P5 = I3; //高
M3 = 1;
R3 = R4-R5(S)||I2 += M1; //stride-Whide;I2指向下一行
M2 = R3; //stride-Whide
I3 = P0; //輸入數據
I1 = M2; //比原函數添加句1
I1+=4; //添加句2
P0 = I1; //添加句3
I0 = 0;
LSETUP(INSERTO_ST,INSERTO_END) LC1 = P5; //核心算法開始
INSERTO_ST:
P5 = P4;
P5 = P5>>2;
R6=B[P5--](x); //添加句4 //調整循環的次數,相當于P5=P5-1,將內循環的最后一次循環放在后面執行;
LSETUP(INSERTI_ST,INSERTI_END) LC0 = P5;
INSERTI_ST:
R0 = [I3++]||R2 = [I2++]; //P0指向輸入數據的第n行
//I2指向輸入數據的第n+1行
I1 = 0;
R4 = BYTEOP1P(R1:0,R3:2)||R1 = [I3--]||R3 = [I2]; //垂直內插的計算
R4 = BYTEOP2P(R1:0,R3:2)(RNDL)||[P2++] = R4; //交叉內插的計算
I0 = 1;
I1 = 1;
R5 = BYTEOP2P(R1:0,R3:2)(RNDH); //4四個8位數取平均結果放在高位字節
R4 = R4+|+R5||I0 -= M3||R2 =[I3++]; //I0=0
R3 = R1;
R4 = BYTEOP1P(R1:0,R3:2)||[P3++] = R4; //水平內插的計算
INSERTI_END: [P1++] =R4;
R0 = [I3++]||R2 = [I2++]; //P0指向輸入數據的第n行
//I2指向輸入數據的第n+1行
I1 = 0;
R4 = BYTEOP1P(R1:0,R3:2)||R1 = [I3--]||R3 = [I2]; //垂直內插的計算
R6 = BYTEOP2P(R1:0,R3:2)(RNDL); //交叉內插的計算
[P2++P0] = R4;
I0 = 1;
I1 = 1;
R7 = BYTEOP2P(R1:0,R3:2)(RNDH); //4四個8位數取平均結果放在高位字節
R6 = R6+|+R7||I0 -= M3||R2 =[I3++]; //I0=0
R3 = R1;
R4 = BYTEOP1P(R1:0,R3:2); //水平內插的計算
[P3++P0] = R6;
[P1++P0] =R4; //輸出數據換行,原函數編程只是輸入數據換行,沒有實現輸出數據換行
INSERTO_END: R7 = [I2++M2]||R6 = [I3++M2]; //輸入的數據換行
(R7:4,P5:3) = [SP++];
RTS; //函數返回
NOP;
__fullinterpolate.end:
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -