B、BL、BX、BLX、BXJ

分岐、リンク付き分岐、分岐と命令セットの切り替え、リンク付き分岐と命令セットの切り替え、分岐と Jazelle 状態への切り替えを行う命令です。

Note

Jazelle および BXJ は ARMv8 ではサポートされていません。

Show/hide構文

op1{cond}{.W} label
op2{cond} Rm

各項目には以下の意味があります。

op1

次のいずれかを指定します。

B

分岐命令です。

BL

リンク付き分岐命令です。

BLX

リンク付き分岐と命令セットの切り替えを行う命令です。

op2

次のいずれかを指定します。

BX

分岐と命令セットの切り替えを行う命令です。

BLX

リンク付き分岐と命令セットの切り替えを行う命令です。

BXJ

分岐と Jazelle 実行状態への変更を行う命令です。

cond

任意の条件コードを指定します。cond は、これらの命令のすべての形式で使用できるわけではありません。

.W

T32 の 32 ビット B 命令を使用させるために命令の幅の指定子を指定します(省略可)。

label

PC 相対式を指定します。

Rm

分岐先アドレスを保持するレジスタを指定します。

Show/hide演算

これらのすべての命令は、label への分岐または Rm に保持されているアドレスへの分岐を発生させます。さらに、以下の処理を行います。

  • BLBLX 命令は、次の命令のアドレスを LR(R14:リンクレジスタ)にコピーします。

  • BX 命令と BLX 命令は、命令セットを変更できます。

    BLX label を使用すると、命令セットが必ず変更されます。プロセッサを A32 状態から T32 状態に変更するか、または T32 状態から A32 状態に変更します。

    BX RmBLX Rm を使用すると、Rm のビット [0] からターゲット命令セットを取得できます。

    • Rm のビット [0] が 0 の場合、プロセッサは A32 状態に切り替わるか、A32 状態が維持されます。

    • Rm のビット [0] が 1 の場合、プロセッサは T32 状態に切り替わるか、T32 状態が維持されます。

Note

BX および BLX に相当する、AArch32 状態と AArch64 状態を切り替えるための命令はありません。実行状態を変更する唯一の方法は、例外レベルを変更することです。

Show/hide命令の使用可否と分岐の範囲

Table 8 は、A32 状態と T32 状態で使用できる命令を示しています。この表に記載されていない命令は使用できません。

Table 8. 分岐命令の使用可否と分岐の範囲

命令A3216 ビット T32 エンコーディング32 ビット T32 エンコーディング
B label±32MB±2KB±16MB[a]
B{cond} label±32MB-252 ~ +258±1MBa
BL label±32MB±4MB [b]±16MB
BL{cond} label±32MB--
BX Rm使用可能使用可能16 ビットを使用
BX{cond} Rm使用可能--
BLX label±32MB±4MB [b]±16MB
BLX Rm使用可能使用可能16 ビットを使用
BLX{cond} Rm使用可能--

[a] この 32 ビット命令を使用するようアセンブラに指定する場合は .W を使用します。

[b] これは命令対です。


Show/hide分岐の範囲の拡張

マシンレベルの B 命令と BL 命令では、現在の命令のアドレスから分岐できる範囲が制限されています。ただし、label が範囲外の場合でもこれらの命令を使用できます。ほとんどの場合、リンカが label を配置する場所は分かりません。必要な場合には、リンカはコードを追加してより長い分岐を可能にします。追加されたコードは veneer(ベニア)と呼ばれます。

Show/hideT32 の B

.W 幅指定子を指定して、B で T32 コードの 32 ビット命令を生成できます。

B.W は、16 ビット命令を使用してターゲットに到達できる場合でも、常に 32 ビット命令を生成します。

参考として、32 ビット T32 命令を使用して到達できるターゲットで失敗が発生する場合でも、.W 指定なしの B は常に 16 ビット T32 コードの命令を生成します。

Show/hideレジスタの制約条件

A32 BX 命令では、Rm での PC の使用は非推奨です。他の A32 命令では PC は使用できません。

T32 BX 命令では、Rm で PC を使用できます。他の T32 命令では PC は使用できません。

これらの A32 命令では、Rm での SP の使用は非推奨です。

T32 BX および BLX 命令では、Rm での SP の使用は非推奨です。他の T32 命令では SP は使用できません。

Show/hide条件フラグ

これらの命令によるフラグへの影響はありません。

Show/hide可用性

両方の命令セットでのこれらの命令の使用可否の詳細については、Table 8を参照して下さい。

Show/hide

    B       loopA
    BLE     ng+8
    BL      subC
    BLLT    rtX
    BEQ     {PC}+4  ; #0x8004

Show/hide関連項目

Copyright © 2014 ARM. All rights reserved.ARM DUI 0802AJ
Non-ConfidentialID061814