MIPS循环展开

时间:2012-08-17 01:43:39

标签: assembly for-loop mips

for (i=0, i<10000, i=i+2)
{

    A[i]=B[i]+C[i]
    A[i+1]=B[i+1]+C[i+1]

}

鉴于前面的代码,MIPS程序集是什么样的?我正在尝试构造汇编代码,其中R9 = A的基址,R9 = B的基数,R10 = C的基数

我知道这种展开ONCE的方法应该更有效率,但很难看出MIPS的样子。

有人可以帮帮我吗?

1 个答案:

答案 0 :(得分:2)

循环体将是这样的:

LW    r1, 0(r9)    // B[i]
LW    r2, 4(r9)    // B[i+1]
LW    r3, 0(r10)   // C[i]
LW    r4, 4(r10)   // C[i+1]
ADDU  r5, r1, r3   // B[i] + C[i]
ADDU  r6, r2, r4   // B[i+1] + C[i+1]
SW    r5, 0(r8)    // A[i] 
SW    r5, 4(r8)    // A[i+1]
ADDIU r9,  8
ADDIU r10, 8
ADDIU r8,  8

MIPS有很多寄存器,因此可能需要多次展开循环。