Thumb-2命令

読み:サム・トゥー・めいれい
外語:Thumb-2 instructions 英語
品詞:名詞

Thumb-1の拡張で、追加の16ビットのオペコードを加えることで、16ビットまたは32ビットの可変長命令としたもの。

目次

ARMv6から導入された、Thumb命令の拡張仕様である。

従来の16ビット長で未使用部分に命令を追加するほか、上位3ビットが111で、続く2ビットが00でない時に、もう16ビットを追加する可変長命令とし、ここにも命令を追加した。

元々、Thumb-1では11110がロング分岐命令で、この場合は追加で11111から始まる16ビットの命令とペアとする長距離の分岐命令があり、このためThumb-1の時点で既に16ビット単位の可変長であった。

Thumb-2ではここに目をつけた拡張をしており、11100以外の111から始まる命令を可変長命令とした。

RISCなのに可変長にしてまで命令を増やし、更にARM CortexではThumb-2を標準にするあたり、相変わらずARMはRISCらしくない。

コンセプト

Thumbは流石に縮小しすぎたため、高機能な32ビット命令も加えた。

命令は計32ビットとなるが、しかし純粋な32ビットよりは効率が落ちる。

オペコード

16ビット×2で32ビットになるが、あくまでもThumb-1の拡張であるため、従来のARM命令とは機械語は全く異なる。これは、32ビットThumb命令(32-bit Thumb instruction)と呼ばれている。

32ビットThumb命令では、従来同様にレジスターが16本利用できる。

16ビットThumb命令

15141312111009080706050403020100
opcode 

opcodeの定義は次の通りである。Thumb-1の上位互換の拡張だが、命令追加のため定義が若干広げられているものもある。

opcode命令または命令クラス
00xxxxシフト(イミディエイト)、加算、減算、移動、比較
010000データ処理
010001特殊なデータ命令、分岐、交換
01001xリテラルプールからのロード (PC相対ロード)
0101xx単一データアイテムのロード/ストア
011xxx
100xxx
10100xPC相対アドレスの生成
10101xSP相対アドレスの生成
1011xxその他の16ビット命令
11000xマルチプルレジスターストア
11001xマルチプルレジスターロード
1101xx条件分岐とスーパーバイザーコール
11100x無条件分岐

32ビットThumb命令

1514131211100908070605040302010015141312111009080706050403020100
111op1op2 op 

Thumb-2命令の符号化方法は次の通り。なお、op1=00はThumb-1と同じ無条件分岐命令である。

Thumb-2命令は、ARMv6で導入されて以降、命令は徐々に増えており、多機能化している。

op1op2op命令クラス
0100xx0xxxマルチプルロード/ストア命令
0100xx1xxxデュアルまたは排他的ロード/ストア命令
0101xxxxxxデータ処理(レジスターシフト)
011xxxxxxxコプロセッサー命令
10x0xxxxx0データ処理(イミディエイト)
10x1xxxxx0データ処理(プレーンバイナリイミディエイト)
10xxxxxxx1分岐とその他の制御
11000xxx0x単一のデータ項目の格納
11001xxx0xAdvanced SIMD(NEON)要素または構造体のロード/ストア命令
1100xx001xバイトのロード、メモリーのヒント
1100xx011xハーフワードのロード、メモリーのヒント
1100xx101xワードのロード
1100xx111x※未定義※
11010xxxxxデータ処理(レジスター)
110110xxxx乗算、積和演算、差の絶対値
110111xxxxロング乗算、ロング積和演算、除算
111xxxxxxxコプロセッサー命令

実行条件

Thumb-2命令セット(T32)とARM命令セット(A32)の大きな違いは、32ビットThumb命令の機械語ビット列の殆どに条件指定がないことである。

そこでThumb-2では、条件付き実行命令としてITが追加されている。

一つのIT命令で、後続する1〜4命令を条件付きにすることができる。

IT{x{y{z}}} <firstcond>

オペコードは次の通り。

15141312111009080706050403020100
10111111firstcondmask

具体的な使用例は、次の通り、

ITTE   NE
ITT    AL
IT     NE

ITのあと、最大3文字でTまたはEを附すことが出来る。

ただし、通常はアセンブリ言語でIT命令を書く必要はなく、各命令に対して条件を指定することで、アセンブラーが自動的にIT命令を出力する。

IT命令を普通に用いた場合は必ず4ビットあるmaskのビットのどれか1つ以上が1となりmask≠0となるが、もしmask=='0000'の場合、firstcond領域をオペコードとする拡張命令となる。

NOP

Thumb命令では、NOPはARMv6T2以降で新規に追加された。

  • 0xBF00
  • 0xF3AF 0x8000 (2ハーフワード)

それよりも前のARMでは「mov r8, r8」(0x46C0)が推奨されている。

用語の所属
ARMアーキテクチャ
関連する用語
T32
ThumbEEステート

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


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