MULやQADDのようなARMインストラクションがバレルシフタを使用していない理由が不思議です。私は限界の背後にある合理的なことを知りたい。ありがとう!一部のARM命令ではバレルシフタを使用しないのはなぜですか?
6
A
答えて
11
バレルシフターはではありません。です。それはあなたがどのようにそれ以外のすべての非常に具体的な指示(データ処理とロード/ストア)で使用されているを指定することができないということです。命令のエンコーディングを見ると、指定する余地がないことがわかります。
MUL
またはSWP
のような命令の場合、それらはアーキテクチャの最初のバージョンにはありませんでした。それらは、バレルシフタの仕様に対して無効な組合せの値を使用することによって、命令セットに圧迫された。バレルシフタの仕様ビットは、実行する命令や乗算器として使用するレジスタを格納するために再利用する必要があったため、オペランドのシフト/回転量を指定する方法はありませんでした。
-3
バレルシフターは、高速シフトに使用されます。
あなたが知っているように、数字を2の累乗である別の数字と掛け合わせると、それを左にシフトするだけです。この種の特殊な状況では、シフトレジスタを使用することができます。しかし、一般的な乗算では、通常の乗数の設計に従うのが効率的です。
関連する問題
- 1. ARMアーキテクチャのGT命令とHI命令の違いは何ですか?
- 2. SIMD命令がカーネルで使用されないのはなぜですか?
- 3. ARMでORRr命令とは何か
- 4. なぜメモリ命令がARMアセンブリで4サイクルかかるのですか?
- 5. ARMのプリフェッチ命令
- 6. ARMアセンブリ:MOV命令の基本的な使用
- 7. ページサイズが命令セットアーキテクチャの一部として指定されているのはなぜですか?
- 8. Atmel 89C2051マイクロコントローラで "acall"命令が動作しないのはなぜですか?
- 9. ARM、ヘルプLDR命令
- 10. インラインアセンブリを使用しないgccでのSSE命令の使用
- 11. Gem5でのARMプロセッサの命令アクセス
- 12. ARM/Thumb(IOS)でのBLX命令のデコード
- 13. JavaにIINCバイトコード命令があるのはなぜですか?
- 14. LDSETインラインアセンブリとしてのARM命令
- 15. ARM Cortex-M4ミューテックスロック。 DMB命令
- 16. ARM 32ビットSTR命令
- 17. Python on Arm、不正命令
- 18. (!A &&!B)が単一のTEST命令に最適化されないのはなぜですか?
- 19. VS2010 SP1はAVX命令セットの一部のみをサポートしていますか?
- 20. Valgrindは認識できない命令
- 21. バイナリへのARM命令のエンコードとデコード
- 22. 逆アセンブルされたデータが命令になるのはなぜですか?
- 23. ARMアセンブリ内のSTRとLDR命令
- 24. コンパイラがプッシュ/ポップ命令のペアを生成するのはなぜですか?
- 25. x86のnopl命令がオペランドを取得するのはなぜですか?
- 26. なぜこのAJAXレスポンスの一部を使用できないのですか?
- 27. メモリにアクセスしないメモリオペランドを持つx86の唯一の命令ですか?
- 28. vdiv命令がネオンフラグで生成されるのはなぜですか?
- 29. なぜコンパイラはINT3命令をサブルーチン間に挿入するのですか?
- 30. ARM Thumb命令セットを使用する場合、32ビット整数にアクセス(ロード/ストア)するのはアトミックですか?
バレルシフタがシフトします。それは加算も乗算もしません。 –
MULやQADDの最後の引数としてバレルシフトされた値を使用できないのはなぜですか?理由はシリコン(実装するのに十分なトランジスタではない)、エンコーディング(シフトをエンコードする命令に余裕がない)、命令をあまり遅くする可能性があります。マイナス100ポイントのルール。 ARMの設計者だけが確実に知っています。ここでは答えを出すことはまずありません。 –
すでにフォーラムに質問を投稿しています。 :) – chenwj