2011-09-30 23 views
6

MULやQADDのようなARMインストラクションがバレルシフタを使用していない理由が不思議です。私は限界の背後にある合理的なことを知りたい。ありがとう!一部のARM命令ではバレルシフタを使用しないのはなぜですか?

+0

バレルシフタがシフトします。それは加算も乗算もしません。 –

+3

MULやQADDの最後の引数としてバレルシフトされた値を使用できないのはなぜですか?理由はシリコン(実装するのに十分なトランジスタではない)、エンコーディング(シフトをエンコードする命令に余裕がない)、命令をあまり遅くする可能性があります。マイナス100ポイントのルール。 ARMの設計者だけが確実に知っています。ここでは答えを出すことはまずありません。 –

+0

すでにフォーラムに質問を投稿しています。 :) – chenwj

答えて

11

バレルシフターはではありません。です。それはあなたがどのようにそれ以外のすべての非常に具体的な指示(データ処理とロード/ストア)で使用されているを指定することができないということです。命令のエンコーディングを見ると、指定する余地がないことがわかります。

MULまたはSWPのような命令の場合、それらはアーキテクチャの最初のバージョンにはありませんでした。それらは、バレルシフタの仕様に対して無効な組合せの値を使用することによって、命令セットに圧迫された。バレルシフタの仕様ビットは、実行する命令や乗算器として使用するレジスタを格納するために再利用する必要があったため、オペランドのシフト/回転量を指定する方法はありませんでした。

-3

バレルシフターは、高速シフトに使用されます。

あなたが知っているように、数字を2の累乗である別の数字と掛け合わせると、それを左にシフトするだけです。この種の特殊な状況では、シフトレジスタを使用することができます。しかし、一般的な乗算では、通常の乗数の設計に従うのが効率的です。

関連する問題