私はarch/mips/lib/csum_partial.Sにあるcsum_partial()関数コードをバニラカーネル2.6.35で理解しようとしています。入力の長さが8バイト未満の場合、バグがあるようです。私は、関数が入力の長さが8未満である場合にはMIPS csum_partial
/*
* a0: source address
* a1: length of the area to checksum
* a2: partial checksum
*/
#define src a0
#define sum v0
.text
.set noreorder
.align 5
LEAF(csum_partial)
move sum, zero
move t7, zero
sltiu t8, a1, 0x8
bnez t8, .Lsmall_csumcpy /* < 8 bytes to copy */
move t2, a1
を次のように開始し、我々はsmall_csumcpyにジャンプし、到達していないここ を求めている理由です、それは合理的で鳴らないことを知っていますmoveコマンド、そう?そしてそこに私たちがあります:
.Lsmall_csumcpy:
move a1, t2
...
私の質問はどこにt2レジスタが初期化されたのですか? ありがとうございます!次のコードで
ちょっとした注意:QtSpim/Spim/Marsのようなシミュレータのほとんどは遅延分岐オプションを持っていますが、通常は無効になっています。設定/オプションダイアログから手動で有効にする必要があります。 – Wiz
ありがとう!私は私の答えを編集しました。 – markgz
うわー、ありがとう!私はブランチ後の命令は、インデントと一般的なロジックのために何らかの形で実行されていると思っていますが、私が尋ねたすべての人は、これは起こり得ないと私に言った。再度、感謝します! – alexa