つっこんでいいですか??



[ このメッセージへの返事 ] [ 返事を書く ] [ home.html ]



投稿者: BOK @ kyt007.osk.threewebnet.or.jp on 97/9/22 02:45:51

In Reply to: Re: うーんむずかしい!

posted by 68user @ oryo.inforyoma.or.jp on 97/9/22 00:33:03


> あ、MIPSってR3000系なんですか? 初めて知ったっす(^^;
ちょっと違うと思う。ちょっとだけ。順番が。
細かい突っ込みごめんなさい。

本題ですが、

> add ...
> bne ...
>
> とあると、bneの演算が終るまでaddのフェッチができない。これでは
> パイプラインがストップしてしまう。そこで

これ、違ってるような気がします。

間違ってるかもしれませんが
フェッチできないのは、

add ...
bne ... tmp
nop
tmp:
lw ...

のような場合に
分岐先 tmp の lw ... のことではないでしょうか



>> でも、普通に書いたら
>> �晦晦�bne $21,$20,Loop
>>    nop
>> �晦晦�add $8,$8,$9�晦晦� # h += $9
>> と、認識されてしまった。いやはや、奥が深い。(^^;)
>
> はどういうことでしょう。これはaddが実行されないような…

おそらく、
*手動で最適化して遅延スロットに命令が書いてあるのか
*ただ単に、遅延を考慮するのを忘れて次の命令をつめて書いちゃったのか
アセンブラが、判断できないためではないでしょうか。
命令の入れ替えを抑制する事ができればいいのですが。

GNU では、
  .set  noreorder
  .set  nomacro
  bne ...
  add ...
  .set  macro
  .set  reorder
てな感じで制御できませんか?