1
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 がどのように見えるかを理解するのは困難です。

誰かが私を助けてくれますか?

4

1 に答える 1

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には多数のレジスタがあるため、ループをさらに数回展開する価値があります。

于 2012-08-21T20:37:48.933 に答える