Thumb命令

読み:サムめいれい
外語:Thumb instructions 英語
品詞:名詞

ARMの実行モードの一つ「T32」で使われる16ビット長の命令セットの命令のこと。

目次

32ビット長の命令が長いと感じられる場面向けに作られた、短い(?)16ビット長の命令である。

Thumb-1は、ほぼ16ビット固定長と言えるが、実際には16ビットを2つ組み合わせる命令が一つあるため、16ビット単位の可変長命令であるとも言える。

Thumb-2命令は、本格的な可変長命令セットとなった。各々、16ビットThumb、32ビットThumbと呼ぶ。

64ビット化されたARMv8では、この命令セットを、AArch32ステートという実行モードのうちのThumb命令セット「T32」と呼ぶ。

由来

従来の32ビット長命令から機能を削り、16ビット命令化した、縮小命令である。

16ビット長命令で済むような簡単な処理なら標準の32ビット長命令を使わずに済み、プログラムサイズを減らせ、消費電力を下げられる。公称、コードサイズを3割減らせるが、処理性能も2割強低下する、としている。

この命令セットの影響は大きく、ライバルであるMIPSまでも、対抗のためにMIPS16という圧縮16ビット命令セットを用意せざるを得なくなった。

しかし切り替えが必要で不便だったため、Thumb-2命令としてARMv6の拡張機能という扱いで両者混在も可能となった。公称、2%の性能低下でコードサイズを3割減らすことができるとしている。

限界

32ビット長だったものを半分の16ビット長にしたため、機能が大幅に削られており、ARMらしさが大幅に減少した。

  • レジスターは8本(r0〜r7)
  • 殆どが2オペランド命令
  • 分岐命令などを除き、条件フィールドがなくなった

オペコード

以下は、Thumb-1の命令を記載する。Thumb-2命令の16ビットThumb命令は拡張があり、これと若干異なる。

 15141312111009080706050403020100
レジスターシフト000OpOffset5RsRd
加減算00011IOpRn/offset3RsRd
イミディエイト加減算001OpRdOffset8
ALU operations010000OpRsRd
Hiレジスター演算010001OpH1H2Rs/HsRd/Hd
PC相対ロード01001RdWord8
ロードストア0101LB0RoRbRd
ロードストア符号拡張0101HS1RoRbRd
LSイミディエイト011BLOffset5RbRd
ロードストア16ビット1000LOffset5RbRd
SP相対ロードストア1001LRdWord8
ロードアドレス1010SPRdWord8
SP加算10110000SSWord7
PUSH/POPレジスター1011L10RRlist
IT命令10111111firstcondmask
マルチプルLS1100LRbRlist
条件分岐1101CondSoffset8
ソフトウェア割り込み11011111Value8
無条件分岐11100Offset11
ロング分岐1111HOffset

最後のロング分岐は、16ビット命令を2セット組み合わせて32ビットで用いられる。

また、Thumb-2命令では、このロング分岐と同様のコンセプトで命令を拡張した。上位3ビットが111で、続く2ビットが00でない時に、Thumb-2命令の可変長命令となる。

用語の所属
ARMアーキテクチャ
AArch32
関連する用語
A32
Thumb-2命令
ThumbEEステート

コメントなどを投稿するフォームは、日本語対応時のみ表示されます


KisoDic通信用語の基礎知識検索システム WDIC Explorer Version 7.04a (27-May-2022)
Search System : Copyright © Mirai corporation
Dictionary : Copyright © WDIC Creators club