arm コンパイラツールチェーン...

402
Copyright © 2010-2011 ARM. All rights reserved. ARM DUI 0489EJ (ID 081711 ) ARM ® コンパイラツールチェーン バージ ョ ン 5.0 アセンブラリファレンス

Upload: others

Post on 08-Apr-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM® コンパイラツールチェーンバージョ ン 5.0

アセンブラリファレンス

Copyright © 2010-2011 ARM. All rights reserved.ARM DUI 0489EJ (ID 0 8 1 7 1 1 )

Page 2: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM コンパイラツールチェーンアセンブラリファレンス

Copyright © 2010-2011 ARM. All rights reserved.

リ リース情報

本書には以下の変更が加えられています。

著作権

® または ™ のマークが付いた言葉およびロゴは、 この著作権情報で別段に規定されている場合を除き、

ARM® の EU またはその他の国における登録商標および商標です。 本書に記載されている他の製品名は、

各社の所有する商標です。

本書に記載されている情報の全部または一部、 ならびに本書で紹介する製品は、 著作権所有者の文書によ

る事前の許可を得ない限り、 転用 ・ 複製するこ とを禁じます。

本書に記載されている製品は、 今後も継続的に開発 ・ 改良の対象とな り ます。 本書に含まれる製品および

その利用方法についての情報は、 ARM が利用者の利益のために提供するものです。 したがって当社では、

製品の市販性または利用の適切性を含め、 暗示的 ・ 明示的に関係なく一切の責任を負いません。

本書は、 本製品の利用者をサポートするこ とだけを目的と しています。 本書に記載されている情報の使

用、 情報の誤り または省略、 あるいは本製の誤使用によって発生したいかなる損失 ・ 損傷についても、

ARM は一切責任を負いません。

ARM とい う用語が使用されている場合、 “ARM または必要に応じてその子会社” を指します。

機密保持ステータス

本書は非機密扱いであ り、 本書を使用、 複製、 および開示する権利は、 ARM および ARM が本書を提供し

た当事者との間で締結した契約の条項に基づいたライセンスの制限によ り異なり ます。

製品ステータス

本書の情報は 終版であ り、 開発済み製品に対応しています。

Web アドレス

http://www.arm.com

変更履歴

日付 発行 機密保持ステータス 変更点

2010 年 5 月 A 非機密扱い ARM コンパイラツールチェーン v4.1 リ リー

2010 年 9 月 30 日 B 非機密扱い ARM コンパイラツールチェーン v4.1 のアッ

プデート 1

2011 年 1 月 28 日 C 非機密扱い ARM コンパイラツールチェーン v4.1 パッチ 3 のアップデート 2

2011 年 4 月 30 日 D 非機密扱い ARM コンパイラツールチェーン v5.0 リ リー

2011 年 7 月 29 日 E 非機密扱い ARM コンパイラツールチェーン v5.0 のアッ

プデート 1

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. iiID 0 8 1 7 1 1 Non-Confidential

Page 3: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

目次ARM コンパイラツールチェーン アセンブラリファレ

ンス

第 1 章 表記規則とフ ィードバック

第 2 章 アセンブラコマンド ラインオプシ ョ ン2.1 アセンブラのコマンド ライン構文 ........................................................................... 2-22.2 アセンブラコマンド ラインオプシ ョ ン ................................................................... 2-3

第 3 章 ARM 命令と Thumb 命令3.1 命令の概要 ............................................................................................................... 3-23.2 命令の幅指定子 ..................................................................................................... 3-113.3 メモリアクセス命令 .............................................................................................. 3-123.4 汎用データ処理命令 .............................................................................................. 3-493.5 乗算命令 ................................................................................................................ 3-813.6 サチュレート命令 ................................................................................................ 3-1033.7 並列命令 .............................................................................................................. 3-1083.8 パック命令と展開命令 ......................................................................................... 3-1163.9 分岐命令と制御命令 ............................................................................................ 3-1233.10 コプロセッサ命令 ................................................................................................ 3-1333.11 その他の命令 ....................................................................................................... 3-1433.12 ThumbEE 命令 ..................................................................................................... 3-1613.13 疑似命令 .............................................................................................................. 3-1653.14 条件コード ........................................................................................................... 3-175

第 4 章 NEON と VFP プログラ ミング4.1 命令の概要 ............................................................................................................... 4-24.2 NEON と VFP に共通の命令 ................................................................................... 4-74.3 NEON 論理演算と比較演算 ................................................................................... 4-15

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. iiiID 0 8 1 7 1 1 Non-Confidential

Page 4: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

目次

4.4 NEON 汎用データ処理命令 ................................................................................... 4-234.5 NEON シフ ト命令 ................................................................................................. 4-364.6 NEON 汎用算術命令 .............................................................................................. 4-444.7 NEON 乗算命令 ..................................................................................................... 4-584.8 NEON 要素と構造体のロード / ストア命令 .......................................................... 4-644.9 NEON 疑似命令および VFP 疑似命令 ................................................................... 4-724.10 VFP 命令 ................................................................................................................ 4-79

第 5 章 ワイヤレス MMX テク ノロジの命令5.1 概要 .......................................................................................................................... 5-25.2 ワイヤレス MMX テク ノロジに対する ARM のサポート ........................................ 5-35.3 ワイヤレス MMX の命令 ......................................................................................... 5-65.4 ワイヤレス MMX の疑似命令 .................................................................................. 5-8

第 6 章 ディレクテ ィブリファレンス6.1 ディレクテ ィブの一覧 (アルファベッ ト順) .......................................................... 6-26.2 シンボル定義ディレクテ ィブ .................................................................................. 6-46.3 データ定義ディレクテ ィブ ................................................................................... 6-186.4 アセンブリ制御ディレクテ ィブ ............................................................................ 6-346.5 Frame ディレクテ ィブ .......................................................................................... 6-436.6 通知ディレクテ ィブ .............................................................................................. 6-586.7 命令セッ ト と構文選択のディレクテ ィブ .............................................................. 6-646.8 その他のディレクテ ィブ ....................................................................................... 6-67

付録 A 『アセンブラリファレンス』 に対する改訂

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. ivID 0 8 1 7 1 1 Non-Confidential

Page 5: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

第 1 章 表記規則とフ ィードバック

以下では、 表記規則とフ ィードバッ クの方法について説明します。

表記規則

以下の表記規則を使用しています。

monospace コマンド、 ファ イル名、 プログラム名、 ソースコードなど、 キー

ボードから入力可能なテキス ト を示しています。

monospace コマンドまたはオプシ ョ ンに使用可能な略語を示します。 コマン

ド名またはオプシ ョ ン名をすべて入力する代わりに、 下線部分の文字だけを入力するこ とができます。

monospace italic コマンドまたは関数の引数で、 特定の値に置き換えるこ とが可能なものを示しています。

monospace bold サンプルコード以外に使用される言語キーワードを示しています。

italic 重要事項、 重要用語、 相互参照、 引用箇所を斜体で記載していま

す。

bold メニュー名などのユーザインタフェース要素を太字で記載してい

ます。 また、 適宜記述リ ス ト内の重要箇所と ARM® プロセッサの

信号名にも太字を用いています。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 1-1ID 0 8 1 7 1 1 Non-Confidential

Page 6: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

表記規則とフ ィードバック

本製品に関するフ ィードバッ ク

本製品についてのご意見やご提案がございましたら、 以下の情報を添えて購入元までお寄せ下さい。

• お名前と会社名

• 製品のシ リ アル番号

• 製品のリ リース情報

• ご使用のプラ ッ ト フォームの詳細 (ハード ウェアプラ ッ ト フォーム、 オペレーティングシステムの種類とバージ ョ ンなど)

• 問題を再現するサイズの小さな独立したサンプルコード

• 操作の目的と実際の動作に関する詳しい説明

• 使用したコマンド (コマンド ラインオプシ ョ ンを含む)

• 問題を例示するサンプル出力

• ツールのバージ ョ ン情報 (バージ ョ ン番号、 ビルド番号を含む)

内容に関するフ ィードバッ ク

内容に関するご意見につきましては、 電子メールを [email protected] まで

送信して下さい。 その際には、 以下の内容を記載して下さい。

• タイ トル

• 文書番号 (ARM DUI 0489EJ)

• オンラインでご覧の場合は、 該当する ト ピッ ク名

• PDF 版の文書をご覧の場合は、 問題のあるページ番号

• 問題点の簡潔な説明

また、 補足すべき点や改善すべき点についての全般的なご提案もお待ちしており ます。

ARM では、技術情報記事や FAQ の拡充と共に、 ドキュ メン トに対する更新と訂正を ARM Information Center にて定期的に行っており ます。

その他の情報

• ARM Information Center、 http://infocenter.arm.com/help/index.jsp

• ARM Technical Support Knowledge Articles、http://infocenter.arm.com/help/topic/com.arm.doc.faqs/index.html

• ARM サポートおよびメンテナンス、 http://www.arm.com/support/services/support-maintenance.php

• ARM 用語集、 http://infocenter.arm.com/help/topic/com.arm.doc.aeg0014-/index.html

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 1-2ID 0 8 1 7 1 1 Non-Confidential

Page 7: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

第 2 章 アセンブラコマンド ラインオプシ ョ ン

以下の各ト ピッ クでは、アセンブラ armasm で認識される ARM® コンパイラツールチェー

ンのアセンブラコマンド ラ イン構文と コマンド ラインオプシ ョ ンについて説明します。

• アセンブラのコマンド ラ イン構文 (2-2 ページ)

• アセンブラコマンド ラインオプシ ョ ン (2-3 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 2-1ID 0 8 1 7 1 1 Non-Confidential

Page 8: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

アセンブラコマンド ラインオプシ ョ ン

2.1 アセンブラのコマンド ライン構文

ARM アセンブラを起動するコマンドは以下のとおりです。

armasm {options} {inputfile}

各パラ メータには以下の意味があ り ます。

options アセンブラへのコマンドです。 アセンブラを起動する際に、 オプシ ョ ン

を任意に組み合わせて指定できます。 各オプシ ョ ンはスペースで区切ります。 一部のオプシ ョ ンでは値を指定できます。 オプシ ョ ンの値を指定するには、 "=" (option=value) またはスペース文字 (option value) を使

用します。

inputfile アセンブ リ ソースファ イルを指定します。 複数のファイルを指定する場

合は、 スペースで区切り ます。 入力ファイルと して、 UAL または UAL 以前の ARM アセンブ リ言語ソースファ イルまたは Thumb® アセンブ リ

言語ソースファ イルを指定する必要があ り ます。

関連項目

『コンパイラの使用』 :

• コンパイラコマンド ラ インオプシ ョ ンの順序 (3-11 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 2-2ID 0 8 1 7 1 1 Non-Confidential

Page 9: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

アセンブラコマンド ラインオプシ ョ ン

2.2 アセンブラコマンド ラインオプシ ョ ン

アセンブラでサポート されているコマンド ラ インオプシ ョ ンは次のとおりです。

• --16 (2-5 ページ)

• --32 (2-5 ページ)

• --apcs=qualifier…qualifier (2-5 ページ)

• --arm (2-6 ページ)

• --arm_only (2-7 ページ)

• --bi (2-7 ページ)

• --bigend (2-7 ページ)

• --brief_diagnostics (2-7 ページ)

• --checkreglist (2-7 ページ)

• --compatible=name (2-8 ページ)

• --cpreproc (2-8 ページ)

• --cpreproc_opts=options (2-8 ページ)

• --cpu=list (2-9 ページ)

• --cpu=name (2-9 ページ)

• --debug (2-9 ページ)

• --depend=dependfile (2-10 ページ)

• --depend_format=string (2-10 ページ)

• --device=list (2-10 ページ)

• --device=name (2-10 ページ)

• --diag_error=tag{, tag} (2-11 ページ)

• --diag_remark=tag{, tag} (2-11 ページ)

• --diag_style=style (2-12 ページ)

• --diag_suppress=tag{, tag} (2-12 ページ)

• --diag_warning=tag{, tag} (2-13 ページ)

• --dllexport_all (2-13 ページ)

• --dwarf2 (2-13 ページ)

• --dwarf3 (2-13 ページ)

• --errors=errorfile (2-13 ページ)

• --execstack (2-14 ページ)

• --exceptions (2-14 ページ)

• --exceptions_unwind (2-14 ページ)

• --fpmode=model (2-15 ページ)

• --fpu=list (2-15 ページ)

• --fpu=name (2-16 ページ)

• -g (2-17 ページ)

• --help (2-17 ページ)

• -idir{,dir, …} (2-17 ページ)

• --keep (2-17 ページ)

• --length=n (2-18 ページ)

• --li (2-18 ページ)

• --library_type=lib (2-18 ページ)

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 2-3ID 0 8 1 7 1 1 Non-Confidential

Page 10: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

アセンブラコマンド ラインオプシ ョ ン

• --licretry (2-18 ページ)

• --list=file (2-18 ページ)

• --list= (2-19 ページ)

• --littleend (2-19 ページ)

• -m (2-19 ページ)

• --maxcache=n (2-19 ページ)

• --md (2-20 ページ)

• --no_code_gen (2-20 ページ)

• --no_esc (2-20 ページ)

• --no_execstack (2-20 ページ)

• --no_exceptions (2-21 ページ)

• --no_exceptions_unwind (2-21 ページ)

• --no_hide_all (2-21 ページ)

• --no_project (2-21 ページ)

• --no_reduce_paths (2-21 ページ)

• --no_regs (2-22 ページ)

• --no_terse (2-22 ページ)

• --no_unaligned_access (2-22 ページ)

• --no_warn (2-22 ページ)

• -o filename (2-22 ページ)

• --pd (2-23 ページ)

• --predefine "directive" (2-23 ページ)

• --project=filename (2-23 ページ)

• --reduce_paths (2-24 ページ)

• --regnames=none (2-24 ページ)

• --regnames=callstd (2-24 ページ)

• --regnames=all (2-24 ページ)

• --reinitialize_workdir (2-25 ページ)

• --report-if-not-wysiwyg (2-25 ページ)

• --show_cmdline (2-25 ページ)

• --split_ldm (2-25 ページ)

• --thumb (2-26 ページ)

• --thumbx (2-26 ページ)

• --unaligned_access (2-26 ページ)

• --unsafe (2-27 ページ)

• --untyped_local_labels (2-27 ページ)

• --version_number (2-27 ページ)

• --via=file (2-27 ページ)

• --vsn (2-27 ページ)

• --width=n (2-28 ページ)

• --workdir=directory (2-28 ページ)

• --xref (2-28 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 2-4ID 0 8 1 7 1 1 Non-Confidential

Page 11: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

アセンブラコマンド ラインオプシ ョ ン

2.2.1 --16

UAL 以前の Thumb 構文を使用して、 命令を Thumb® 命令と して解釈するよ うにアセ

ンブラに指示します。 このオプシ ョ ンは、 ソースファ イルの冒頭の CODE16 ディ レク

ティブに相当します。 UAL 構文を使用して Thumb 命令を指定するには、 --thumb オプ

シ ョ ンを使用します。

関連項目

• --thumb (2-26 ページ)

• ARM、 THUMB、 THUMBX、 CODE16、 CODE32 (6-65 ページ) .

2.2.2 --32

このオプシ ョ ンは --arm と同義です。

関連項目

• --arm (2-6 ページ) .

2.2.3 --apcs=qualifier…qualifier

ARM アーキテクチャのプロシージャコール標準 (AAPCS) を使用するかど うかを指

定します。 コードセクシ ョ ンの属性を一部指定するこ と もできます。

AAPCS は Base Standard Application Binary Interface for the ARM Architecture (BSABI)仕様の一部です。 AAPCS に準拠したコードを記述する と、 別々にコンパイルおよび

アセンブルしたモジュールを連動させるこ とができます

注 アセンブラによ り生成されたコードは、 AAPCS 修飾子の影響を受けません。 AAPCS 修飾子は、 inputfile 内のコードが AAPCS の特定のバリ アン トに準拠しているこ とを

プログラマが確認するためのアサートです。 AAPCS 修飾子によ り、 アセンブラに

よっ生成されたオブジェク ト ファ イル内で属性が設定されます。 リ ンカはこれらの属性を使用してファ イルの互換性をチェッ ク し、 適切なライブラ リバリ アン ト を選択します。

qualifier の値は以下のとおりです。

none inputfile で AAPCS が使用されないよ うに指定します。 AAPCS レジスタは設定されません。 none を使用する場合、 他の修飾子は使

用できません。

/interwork、 /nointerwork

/interwork は、 inputfile のコードが ARM と Thumb で安全にイン

ターワークできるよ うに指定します。 デフォルトは /nointerwork です。

/inter、 /nointer

/interwork および /nointerwork と同義です。

/ropi、 /noropi /ropi は、 inputfile のコードを読み出し専用の位置非依存 (ROPI)とするよ うに指定します。 デフォルトは /noropi です。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 2-5ID 0 8 1 7 1 1 Non-Confidential

Page 12: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

アセンブラコマンド ラインオプシ ョ ン

/pic、 /nopic /ropi および /noropi と同義です。

/rwpi、 /norwpi /rwpi は、 inputfile のコードを読み書き可能な位置非依存 (RWPI)とするよ うに指定します。 デフォルトは /norwpi です。

/pid、 /nopid /rwpi および /norwpi と同義です。

/fpic、 /nofpic /fpic は、 inputfile のコードを読み出し専用の位置非依存と し、 ア

ドレス参照が Linux の共有オブジェク トでの使用に適したものと

なるよ うに指定します。 デフォルは /nofpic です。

/hardfp、 /softfp ハード ウェアまたはソフ ト ウェアの浮動小数点リ ンケージを要求

します。 これによって、 --fpu オプシ ョ ンを介して利用できる浮

動小数点ハード ウェアのバージ ョ ンとは別に、 プロシージャコール標準を指定するこ とができます。 プロシージコール標準は --fpu オプシ ョ ンを使用して指定するこ と もできますが、 --apcs の使用を推奨します。 浮動小数点サポートが無効である場合(--fpu=none が指定されている、 または他の方法で禁止されている

など)、 /hardfp および /softfp は無視されます。 浮動小数点サポー

トが許可されている場合で、 なおかつ softfp の呼び出し規則が使

用された場合 (--fpu=softvfp または --fpu=softvfp+vfp...)、 /hardfp を指定する とエラーが発生します。

注 少なく と も 1 つの qualifier を指定する必要があ り ます。qualifier を複数指定する場合、

リ ス ト内の個々の修飾子間にスペースもコンマも挿入されていないこ とを確認して下さい。

armasm --apcs=/inter/ropi inputfile.s

関連項目

『ARM アーキテクチャ向けプロシージャコール標準』、http://infocenter.arm.com/help/topic/com.arm.doc.ihi0042-/index.html

『コンパイラ リ ファレンス』 :

• --apcs=qualifer...qualifier (3-12 ページ) .

『ARM プロセッサをターゲッ ト と したソフ ト ウェア開発』 :

• 第 5 章 ARM と Thumb のインターワーク .

2.2.4 --arm

ARM 命令と して命令を解釈するよ うにアセンブラに指示します。 ただし、 オブジェ

ク ト ファ イル中のコードが、 必ずしも ARM コードだけとなるわけはあ り ません。 こ

れがデフォルトです。 このオプシ ョ ンを使用した場合、 ソースファ イルの先頭で ARM または CODE32 ディ レクティブを指定するのと同じ効果があ り ます。

関連項目

• --32 (2-5 ページ)

• --arm_only (2-7 ページ)

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 2-6ID 0 8 1 7 1 1 Non-Confidential

Page 13: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

アセンブラコマンド ラインオプシ ョ ン

• ARM、 THUMB、 THUMBX、 CODE16、 CODE32 (6-65 ページ) .

2.2.5 --arm_only

ARM コードだけを生成するよ うにアセンブラに指示します。このオプシ ョ ンは --arm と似ていますが、 アセンブラで Thumb コードの生成を禁止する特性も持っています。

関連項目

• --arm (2-6 ページ) .

2.2.6 --bi

このオプシ ョ ンは --bigend と同義です。

関連項目

• --bigend• --littleend (2-19 ページ)

2.2.7 --bigend

ビッグエンディアン ARM プロセッサに適したコードをアセンブルするよ うにアセン

ブラに指示します。 デフォルトは --littleend です。

関連項目

• --littleend (2-19 ページ) .

2.2.8 --brief_diagnostics

簡単な形式の診断出力を使用するよ うにアセンブラに指示します。 この形式では、元のソース行は表示されず、 1 行に収まらないエラーメ ッセーは折り返されません。

デフォルトは --no_brief_diagnostics です。

関連項目

• --diag_error=tag{, tag} (2-11 ページ)

• --diag_warning=tag{, tag} (2-13 ページ) .

2.2.9 --checkreglist

RLIST、 LDM、 および STM レジスタ リ ス ト をチェッ ク して、 すべてのレジスタが昇順の

レジスタ番号順に指定されているこ とを確認するよ うにアセンブラに指示します。レジスタが昇順で指定されていない場合は警告が表示されます。

このオプシ ョ ンの使用は廃止される予定です。 代わりに --diag_warning 1206 を使用し

て下さい。

関連項目

• --diag_warning=tag{, tag} (2-13 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 2-7ID 0 8 1 7 1 1 Non-Confidential

Page 14: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

アセンブラコマンド ラインオプシ ョ ン

2.2.10 --compatible=name

アセンブラで互換コードを生成する 2 番目のプロセッサまたはアーキテクチャ

(name) を指定します。

--compatible を使用してプロセッサ名またはアーキテクチャ名を指定する場合、 --cpu オプシ ョ ンと --compatible オプシ ョ ンの name に指定できる有効な値は、 いずれも

表 2-1 に示したものに限られます。 また、 それぞれ別のグループに属している値を指

定する必要があ り ます。

コマンド ラインでオプシ ョ ンの前のインスタンスをすべて無効にするには、--compatible=NONE を指定します。

armasm --cpu=arm7tdmi --compatible=cortex-m3 inputfile.s

関連項目

• --cpu=name (2-9 ページ) .

2.2.11 --cpreproc

入力ファ イルを前処理してからアセンブルするために armcc を呼び出すよ う アセンブ

ラに指示します。

関連項目

• --cpreproc_opts=options.

『アセンブラの使用』 :

• C プリプロセッサを使用する (7-23 ページ) .

2.2.12 --cpreproc_opts=options

C プリプロセッサ使用時にアセンブラがコンパイラオプシ ョ ンを armcc に渡せるよ う

にします。

options はオプシ ョ ンとその値のコンマ区切り リ ス トです。

armasm --cpreproc --cpreproc_opts=’ -DDEBUG=1’ inputfile.s

関連項目

• --cpreproc.

表 2-1 互換性のあるプロセッサまたはアーキテクチャの組み合わせ

グループ 1 ARM7TDMI、 4T

グループ 2 Cortex™-M0、 Cortex-M1、

Cortex-M3、 Cortex-M4、 7-M、 6-M、

6S-M、 SC300、 SC000

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 2-8ID 0 8 1 7 1 1 Non-Confidential

Page 15: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

アセンブラコマンド ラインオプシ ョ ン

『アセンブラの使用』 :

• C プリプロセッサを使用する (7-23 ページ) .

2.2.13 --cpu=list

このオプシ ョ ンを使用する と、 --cpu name オプシ ョ ンと組み合わせて使用できる、 サ

ポート されている CPU 名とアーキテクチャ名が一覧表示されます。

armasm --cpu=list

関連項目

• --cpu=name.

2.2.14 --cpu=name

ターゲッ トの CPU を設定します。 命令によっては、 間違ったターゲッ ト CPU にアセ

ンブルされる と、 エラーまたは警告が表示される場合があ り ます。

name に指定できる有効値は、 4T、 5TE、 6T2 などのアーキテクチャの名前か、 ARM7TDMI® などの部品番号です。 デフォルトは ARM7TDMI です。

注 ARMv7 は有効な ARM アーキテクチャではあ り ません。 --cpu=7 を使用する と、

ARMv7-A、 ARMv7-R、 および ARMv7-M の各アーキテクチャで共通の Thumb 命令だ

けが生成されます。

--compatible を使用して別のプロセッサ名またはアーキテクチャ名を指定する場合、

--cpu オプシ ョ ンと --compatible オプシ ョ ンの name に指定できる有効な値は、 いずれ

も表 2-1 (2-8 ページ) に示したものに限られます。

armasm --cpu=Cortex-M3 inputfile.s

関連項目

• --cpu=list• --unsafe (2-27 ページ)

• --compatible=name (2-8 ページ)

• 『ARM アーキテクチャ リ ファレンスマニュアル』、http://infocenter.arm.com/help/topic/com.arm.doc.subset.arch.reference/index.html

2.2.15 --debug

このオプシ ョ ンは、 DWARF デバッグテーブルを生成するよ うにアセンブラに指示し

ます。 --debug は -g と同じ意味です。 デフォルトは DWARF 3 です。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 2-9ID 0 8 1 7 1 1 Non-Confidential

Page 16: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

アセンブラコマンド ラインオプシ ョ ン

注 ローカルシンボルは --debug では保持されません。 デバッグのためにローカルシンボ

ルを保持する場合は、 --keep を指定する必要があ り ます。

関連項目

• --dwarf2 (2-13 ページ)

• --dwarf3 (2-13 ページ)

• --keep (2-17 ページ) .

2.2.16 --depend=dependfile

ソースファ イル依存関係リ ス ト を dependfile に保存するよ う アセンブラに指示しま

す。 これらのオプシ ョ ンは、 make ユーティ リ ティ との使用に適しています。

関連項目

• --md (2-20 ページ)

• --depend_format=string.

2.2.17 --depend_format=string

このオプシ ョ ンを指定する と、 UNIX の一部の make プログラムとの互換性を確保す

るために、 出力依存ファ イルの形式が UNIX 形式に変更されます。

string の値には、 以下のいずれかを指定できます。

unix UNIX 形式のパス区切り文字を使用して依存関係ファイルを生成しま

す。

unix_escaped

動作は unix と同じですが、 スペースをバッ クスラ ッシュでエスケープし

ます。

unix_quoted

動作は unix と同じですが、 パス名を二重引用符で囲みます。

関連項目

• --depend=dependfile.

2.2.18 --device=list

このオプシ ョ ンは、 --device=name オプシ ョ ンと一緒に使用可能なサポート されている

デバイス名を一覧表示します。

関連項目

• --device=name.

2.2.19 --device=name

指定されたデバイスをターゲッ ト と して選択し、 関連するプロセッサ設定を設定します。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 2-10ID 0 8 1 7 1 1 Non-Confidential

Page 17: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

アセンブラコマンド ラインオプシ ョ ン

関連項目

• --device=list (2-10 ページ)

• --cpu=name (2-9 ページ)

• 『コンパイラ リ ファレンス』 の --device=name (3-76 ページ)

2.2.20 --diag_error=tag{, tag}

アセンブラによって出力される診断メ ッセージは、 {prefix}number という形式のタグ

で識別できます。 prefix は A です。 --diag_error オプシ ョ ンは、 指定されたタグを持

つ診断メ ッセージにエラーの重大度を設定します。

これらのオプシ ョ ンでは複数のタグを指定できます。 その場合は、 各タグをコンマで区切り ます。 タグ番号の前には、 オプシ ョ ンのアセンブラ接文字 A を指定できま

す。 A 以外の接頭文字が含まれている場合、 メ ッセージ番号は無視されます。

表 2-2 に、 オプシ ョ ンの説明で使用される重要度という用語のそれぞれの意味を示し

ます。

すべての警告をエラーと して扱う場合は、 tag を warning に設定します。

関連項目

• --brief_diagnostics (2-7 ページ)

• --diag_warning=tag{, tag} (2-13 ページ)

• --diag_suppress=tag{, tag} (2-12 ページ) .

2.2.21 --diag_remark=tag{, tag}

アセンブラによって出力される診断メ ッセージは、 {prefix}number という形式のタグ

で識別できます。 prefix は A です。 --diag_remark オプシ ョ ンは、 指定されたタグを持

つ診断メ ッセージに注釈の重大度を設定します。

これらのオプシ ョ ンでは複数のタグを指定できます。 その場合は、 各タグをコンマで区切り ます。 タグ番号の前には、 オプシ ョ ンのアセンブラ接文字 A を指定できま

す。 A 以外の接頭文字が含まれている場合、 メ ッセージ番号は無視されます。

関連項目

• --brief_diagnostics (2-7 ページ)

表 2-2 診断メ ッセージの重大度

重大度 説明

エラー アセンブリ言語の構文ルールまたはセマンティ ッ クルールの違反を示します。 アセンブ リは引き続き実行されますが、 オブジェク ト コードは生成れません。

警告 コードに問題を引き起こす可能性のある例外的な状況を示す警告です。 重大度のエラーが検出されない限り、 アセンブラは引き続き実行され、 オジェク ト コードが生成されます。

注釈 一般的であるが、 推奨されないアセンブリ言語の慣用を示します。 これらの診断情報はデフォルトでは表示されません。 重大度のエラーが検出さない限り、 アセンブラは引き続き実行され、オブジェク ト コードが生成されます。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 2-11ID 0 8 1 7 1 1 Non-Confidential

Page 18: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

アセンブラコマンド ラインオプシ ョ ン

• --diag_error=tag{, tag} (2-11 ページ) .

2.2.22 --diag_style=style

指定された style で診断メ ッセージを表示するよ うにアセンブラに指示します。style は次のいずれかです。

arm ARM アセンブラの形式を使用してメ ッセージを表示します。

--diag_style が指定されていない場合は、 これがデフォルトにな り ます。

ide エラーのある行の行番号と文字数を表示します。 これらの値は括弧に囲

まれて表示されます。

gnu GNU 形式でメ ッセージを表示します。

オプシ ョ ン --diag_style=ide を選択する と、 オプシ ョ ン --brief_diagnostics が暗黙的

に選択されます。 コマンド ラ インで --no_brief_diagnostics を明確に選択する と、

--diag_style=ide によって暗示される --brief_diagnostics の選択は無効になり ます。

オプシ ョ ン --diag_style=arm またはオプシ ョ ン --diag_style=gnu のいずれかを選択して

も、 --brief_diagnostics を暗黙的に選択しません。

関連項目

• --brief_diagnostics (2-7 ページ)

• --diag_style=style.

2.2.23 --diag_suppress=tag{, tag}

アセンブラによって出力される診断メ ッセージは、 {prefix}number という形式のタグ

で識別できます。 prefix は A です。 --diag_suppress オプシ ョ ンは、 指定されたタグを

持つ診断メ ッセージを無効にします。

これらのオプシ ョ ンでは複数のタグを指定できます。 その場合は、 各タグをコンマで区切り ます。

例えば、番号 1293 と 187 の警告メ ッセージを非表示にするには、 以下のコマンドを使

用します。

armasm --diag_suppress=1293,187

タグ番号の前には、 オプシ ョ ンのアセンブラ接頭文字 A を指定できます。 以下に例を

示します。

armasm --diag_suppress=A1293,A187

A 以外の接頭文字が含まれている場合、 メ ッセージ番号は無視されます。 診断メ ッ

セージのタグは切り取ってコマンド ラ インに直接貼り付けるこ とができます。

tag を次のいずれかに設定するこ と もできます。

• warning (すべての警告を非表示にする場合)

• error (すべての降格可能エラーを非表示にする場合)

関連項目

• --diag_error=tag{, tag} (2-11 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 2-12ID 0 8 1 7 1 1 Non-Confidential

Page 19: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

アセンブラコマンド ラインオプシ ョ ン

2.2.24 --diag_warning=tag{, tag}

アセンブラによって出力される診断メ ッセージは、 {prefix}number という形式のタグ

で識別できます。prefix は A です。 --diag_warning オプシ ョ ンは、指定されたタグを持

つ診断メ ッセージに警告の重大度を設定します。

これらのオプシ ョ ンでは複数のタグを指定できます。 その場合は、 各タグをコンマで区切り ます。 タグ番号の前には、 オプシ ョ ンのアセンブラ接文字 A を指定できま

す。 A 以外の接頭文字が含まれている場合、 メ ッセージ番号は無視されます。

すべての降格可能エラーの重大性を警告に降格する場合は、 tag を error に設定しま

す。

関連項目

• --diag_error=tag{, tag} (2-11 ページ) .

2.2.25 --dllexport_all

ソースディ レクティブによってオーバーライ ド されない限り、 エクスポート されたすべてのグローバルシンボルに STV_HIDDEN ではなく ELF における STV_PROTECTED 可視性

を付与します。

関連項目

• EXPORT、 GLOBAL (6-80 ページ) .

2.2.26 --dwarf2

このオプシ ョ ンを --debug と と もに使用する と、DWARF 2 デバッグテーブルを生成す

るよ うにアセンブラに指示できます。

関連項目

• --debug (2-9 ページ)

• --dwarf3.

2.2.27 --dwarf3

このオプシ ョ ンを --debug と と もに使用する と、 DWARF 3 デバッグ テーブルを生成

するよ うにアセンブラに指示できます。 --debug が指定されている場合、 これがデ

フォルトにな り ます。

関連項目

• --debug (2-9 ページ)

• --dwarf2.

2.2.28 --errors=errorfile

エラーメ ッセージを errorfile に出力するよ うにアセンブラに指示します。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 2-13ID 0 8 1 7 1 1 Non-Confidential

Page 20: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

アセンブラコマンド ラインオプシ ョ ン

2.2.29 --execstack

このオプシ ョ ンは .note.GNU-stack セクシ ョ ンを生成し、 そのスタ ッ クを実行可能と

してマークします。

実行可能な .note.GNU-stack セクシ ョ ンを生成するために、 次のよ うに AREA ディ レク

ティブを使用するこ と もできます。

AREA |.note.GNU-stack|,ALIGN=0,READONLY,NOALLOC,CODE

--execstack および --no_execstack がない場合、 .note.GNU-stack セクシ ョ ンは AREA ディ

レクティブで指定されない限り、 生成されません。

関連項目

• --no_execstack (2-20 ページ)

• AREA (6-72 ページ) .

2.2.30 --exceptions

FUNCTION (または PROC) および ENDFUNC (または ENDP) で定義されているすべての関数

の例外テーブル生成をオンにするよ うにアセンブラに指示します。

関連項目

• --no_exceptions (2-21 ページ)

• --exceptions_unwind• --no_exceptions_unwind (2-21 ページ)

• FRAME UNWIND ON (6-55 ページ)

• FUNCTION、 PROC (6-55 ページ)

• ENDFUNC、 ENDP (6-57 ページ)

• FRAME UNWIND OFF (6-55 ページ) .

2.2.31 --exceptions_unwind

可能な場合は、 関数について unwind テーブルを生成するよ うにアセンブラに指示し

ます。 これがデフォルトです。

さ らに細かく制御するには、FRAME UNWIND ON および FRAME UNWIND OFF ディ レクティブを

使用します。

関連項目

• --no_exceptions_unwind (2-21 ページ)

• --exceptions• --no_exceptions (2-21 ページ)

• FRAME UNWIND ON (6-55 ページ)

• FRAME UNWIND OFF (6-55 ページ)

• FUNCTION、 PROC (6-55 ページ)

• ENDFUNC、 ENDP (6-57 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 2-14ID 0 8 1 7 1 1 Non-Confidential

Page 21: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

アセンブラコマンド ラインオプシ ョ ン

2.2.32 --fpmode=model

浮動小数点モデルを指定し、 リ ンク時に 適なライブラ リ を選択するよ うにライブラ リの属性と浮動小数点の 適化を設定します。

注 このオプシ ョ ンによって、 記述したコードを変更されるこ とはあ り ません。

model には次のいずれかを指定できます。

none ソースコードでは、 どのよ う な浮動小数点型も浮動小数点命令も使用で

きません。 このオプシ ョ ンは、 明示的な --fpu=name オプシ ョ ンをオー

バーライ ド します。

ieee_full IEEE 標準で保証されているすべての機能、 演算、 および表現を、 単精

度および倍精度で使用できます。 演算モードは、 実行時に動的に選択できます。

ieee_fixed も近い値に丸め、 不正確な例外の発生を報告しない IEEE 標準。

ieee_no_fenv も近い値に丸め、 例外を発生させない IEEE 標準。 このモードは、

Java の浮動小数点算術モデルと互換性があ り ます。

std 0 にフラ ッシュされる非正規化数があ り、 も近い値に丸め、 例外の発

生を報告しない IEEE 有限値。 このモードは C および C++ と互換性があ

り ます。 これはデフォルトオプシ ョ ンです。

有限値は、 IEEE 標準によって予測されます。 NaN (非数) および無限

値は、 IEEE モデルによって定義されている一部の状況で生成されない

場合があます。 また、 生成されたと しても、 記号が同じになる とは限りません。 さ らに、 ゼロの記号が、 IEEE モデルによって予測された記号

でない場合も り ます。

fast 適化を変更する値です。 この場合、 高速実行の代わりに精度が犠牲に

なり ます。 このモードは IEEE 互換でも、 標準 C 形式でもあ り ません。

armasm --fpmode ieee_full inputfile.s

関連項目

• --fpu=name (2-16 ページ) .

2.2.33 --fpu=list

このオプシ ョ ンを使用する と、 --fpu=name オプシ ョ ンと一緒に使用可能なサポート さ

れている FPU 名が一覧になり ます。

armasm --fpu=list

関連項目

• --fpu=name (2-16 ページ)

• --fpmode=model.

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 2-15ID 0 8 1 7 1 1 Non-Confidential

Page 22: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

アセンブラコマンド ラインオプシ ョ ン

2.2.34 --fpu=name

ターゲッ トの浮動小数点ユニッ ト (FPU) アーキテクチャを選択します。 このオプ

シ ョ ンを指定する と、 --cpu オプシ ョ ンによって設定された任意の暗示的 FPU がオー

バライ ド されます。 明示的に指定した FPU に CPU との互換性がない場合、 エラーが

生成されます。 浮動小数点命令が間違ったターゲッ ト FPU にアセンブルされたと き

にも、 エラーまたは警告が表示される場合があ り ます。

アセンブラによって、 オブジェク ト ファ イル内の name に対応するビルド属性が設定

されます。 オブジェク ト ファ イル間の互換性と、 選択されるライブラ リはリ ンカによって決定されます。

name の有効値は以下のとおりです。

none 浮動小数点アーキテクチャを選択しません。 これによ り、 アセン

ブルされたオブジェク ト ファ イルと任意の FPU でビルド されたオ

ブジェク ト ファルとの互換性を確保できます。

vfpv3 アーキテクチャ VFPv3 に適合する、 ハード ウェアの浮動小数点ユ

ニッ ト を選択します。

vfpv3_fp16 半精度浮動小数点拡張を備えたアーキテクチャ VFPv3 に適合す

る、 ハード ウェアの浮動小数点ユニッ ト を選択します。

vfpv3_d16 アーキテクチャ VFPv3-D16 に適合する、 ハード ウェアの浮動小数

点ユニッ ト を選択します。

vfpv3_d16_fp16 半精度浮動小数点拡張を備えたアーキテクチャ VFPv3-D16 に適合

する、 ハード ウェアの浮動小数点ユニッ ト を選択します。

vfpv4 アーキテクチャ VFPv4 に適合する、 ハード ウェアの浮動小数点ユ

ニッ ト を選択します。

vfpv4_d16 アーキテクチャ VFPv4-D16 に適合する、 ハード ウェアの浮動小数

点ユニッ ト を選択します。

fpv4-sp アーキテクチャ FPv4 の単精度バリ アン トに適合するハード ウェ

ア浮動小数点ユニッ ト を選択します。

vfpv2 アーキテクチャ VFPv2 に適合する、 ハード ウェアの浮動小数点ユ

ニッ ト を選択します。

softvfp ソフ ト ウェア浮動小数点リ ンケージを選択します。 --fpu オプシ ョ

ンを指定せず、 選択された --cpu オプシ ョ ンで特定の FPU が示唆

されていない場合は、 これがデフォルトにな り ます。

softvfp+vfpv2 VFP 命令を使用するソフ ト ウェア浮動小数点リ ンケージがある浮

動小数点ライブラ リ を選択します。

それ以外の点は、 --fpu vfpv2 を使用する場合と同等です。

softvfp+vfpv3 VFP 命令を使用するソフ ト ウェア浮動小数点リ ンケージがある浮

動小数点ライブラ リ を選択します。

それ以外の点は、 --fpu vfpv3 を使用する場合と同等です。

softvfp+vfpv3_fp16 VFP 命令を使用するソフ ト ウェア浮動小数点リ ンケージがある浮

動小数点ライブラ リ を選択します。

それ以外の点は、 --fpu vfpv3_fp16 を使用する場合と同等です。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 2-16ID 0 8 1 7 1 1 Non-Confidential

Page 23: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

アセンブラコマンド ラインオプシ ョ ン

softvfp+vfpv3_d16 VFP 命令を使用するソフ ト ウェア浮動小数点リ ンケージがある浮

動小数点ライブラ リ を選択します。

それ以外の点は、 --fpu vfpv3_d16 を使用する場合と同等です。

softvfp+vfpv3_d16_fp16

VFP 命令を使用するソフ ト ウェア浮動小数点リ ンケージがある浮

動小数点ライブラ リ を選択します。

それ以外の点は、 --fpu vfpv3_d16_fp16 を使用する場合と同等です。

softvfp+vfpv4 VFP 命令を使用するソフ ト ウェア浮動小数点リ ンケージがある浮

動小数点ライブラ リ を選択します。

それ以外の点は、 --fpu vfpv4 を使用する場合と同等です。

softvfp+vfpv4_d16 VFP 命令を使用するソフ ト ウェア浮動小数点リ ンケージがある浮

動小数点ライブラ リ を選択します。

それ以外の点は、 --fpu vfpv4_d16 を使用する場合と同等です。

softvfp+fpv4-sp VFP 命令を使用するソフ ト ウェア浮動小数点リ ンケージがある浮

動小数点ライブラ リ を選択します。

それ以外の点は、 --fpu fpv4-sp を使用する場合と同等です。

関連項目

• --fpmode=model (2-15 ページ) .

2.2.35 -g

このオプシ ョ ンは --debug と同義です。

関連項目

• --debug (2-9 ページ) .

2.2.36 --help

使用できるコマンド ラ インオプシ ョ ンの概要を表示するよ うにアセンブラに指示します。

2.2.37 -idir{,dir, …}

ソースファ イルインクルードパスにディ レク ト リ を追加します。 このオプシ ョ ンを使用してディ レク ト リ を追加する場合は、 完全修飾ディ レク ト名を指定する必要があ り ます。

関連項目

• GET、 INCLUDE (6-83 ページ) .

2.2.38 --keep

デバッガで使用できるよ うに、 オブジェク ト ファ イルのシンボルテーブル内にローカルラベルを保持するよ うにアセンブラに指示します。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 2-17ID 0 8 1 7 1 1 Non-Confidential

Page 24: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

アセンブラコマンド ラインオプシ ョ ン

2.2.39 --length=n

リ ス トするページの長さを n に設定します。 ゼロを指定した場合、 ページ番号なし

で リ ス ト されます。 デフォルトは 66 行です。

関連項目

• --list=file.

2.2.40 --li

このオプシ ョ ンは --littleend と同義です。

関連項目

• --littleend (2-19 ページ)

• --bigend (2-7 ページ) .

2.2.41 --library_type=lib

リ ンク時に使用する選択したライブラ リ を有効にします。

lib には次のいずれかを指定できます。

standardlib リ ンク時にフル ARM ランタイムライブラ リ を選択するよ うに指

定します。 これがデフォルトです。

microlib リ ンク時に C マイ ク ロラ イブラ リ (microlib) を選択するよ うに

指定します。

注 このオプシ ョ ンは、 ラ イブラ リ を使用する際に、 よ り特化した 適化を必要とする

と きに、 コンパイラ、 アセンブラ、 またはリ ンカで使用できます。

このオプシ ョ ンで リ ンカを使用する と、 他のすべての --library_type オプシ ョ ンを

オーバーライ ド します。

関連項目

• 『ARM C および C++ ラ イブラ リ と浮動小数点サポートの使用』 の microlib を使

用したアプリ ケーシ ョ ンの作成 (3-8 ページ)

• 『コンパイラ リ ファレンス』 の --library_type=lib (3-138 ページ)

2.2.42 --licretry

特定の FLEXnet エラーコードに遭遇したらすぐに、 ラ イセンスの確認を約 10 秒間隔

で 大 10 回再試行するよ うにアセンブラに指示します。

2.2.43 --list=file

このオプシ ョ ンは、 アセンブラによって生成されたアセンブリ言語の詳細な リ ス トを file に出力するよ うにアセンブラに指示します。

file と して - を指定する と、 リ ス トが stdout に送られます。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 2-18ID 0 8 1 7 1 1 Non-Confidential

Page 25: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

アセンブラコマンド ラインオプシ ョ ン

--list の動作を制御するには、 次のコマンド ラ インオプシ ョ ンを使用します。

• --no_terse

• --width

• --length

• --xref

関連項目

• --no_terse (2-22 ページ)

• --width=n (2-28 ページ)

• --length=n (2-18 ページ)

• --xref (2-28 ページ) .

2.2.44 --list=

このオプシ ョ ンは、 アセンブ リ言語の詳細な リ ス ト を inputfile.lst に送信するよ う

にアセンブラに指示します。

注 ファ イル名なしで --list を使用する と、 出力を inputfile.lst に送信できます。 ただ

し、 この構文は現在使用が制限されているため、 この構文を使用する とアセンブラによって警告メ ッセージが表示されます。 この構文は今後のリ リースで廃止される予定です。 代わりに --list= を使用して下さい。

関連項目

• --list=file (2-18 ページ) .

2.2.45 --littleend

リ トルエンディアン ARM プロセッサに適したコードをアセンブルするよ うにアセン

ブラに指示します。

関連項目

• --bigend (2-7 ページ) .

2.2.46 -m

ソースファ イル依存関係リ ス ト を stdout に書き込むよ うにアセンブラに指示します。

関連項目

• --md (2-20 ページ) .

2.2.47 --maxcache=n

大ソースキャ ッシュサイズを n バイ トに設定します。 デフォルトは 8MB です。

armasm では、 サイズが 8MB を下回る と警告が表示されます。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 2-19ID 0 8 1 7 1 1 Non-Confidential

Page 26: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

アセンブラコマンド ラインオプシ ョ ン

2.2.48 --md

ソースファ イル依存関係リ ス ト を inputfile.d に書き込むよ うにアセンブラに指示し

ます。

関連項目

• -m (2-19 ページ) .

2.2.49 --no_code_gen

パス 1 の後に終了するよ うにアセンブラに指示します。 オブジェク ト ファ イルは生

成されません。 このオプシ ョ ンは、 ソースコードまたはディ レクティブの構文のチェッ クだけを行う場合に便利です。

2.2.50 --no_esc

\n や \t など、 C 形式のエスケープ処理した特殊文字を無視するよ うにアセンブラに

指示します。

2.2.51 --no_execstack

このオプシ ョ ンは .note.GNU-stack セクシ ョ ンを生成し、 そのスタ ッ クを実行不可能

と してマークします。

実行不可能な .note.GNU-stack セクシ ョ ンを生成するために、 次のよ うに AREA ディ レ

クティブを使用するこ と もできます。

AREA |.note.GNU-stack|,ALIGN=0,READONLY,NOALLOC

--execstack および --no_execstack がない場合、 .note.GNU-stack セクシ ョ ンは AREA ディ

レクティブで指定されない限り、 生成されません。

コマンド ラインオプシ ョ ンと ソースディ レクティブの両方が使用されていて、 それらが異なる場合、 スタ ッ クは実行可能とマーク されます。

関連項目

• --execstack (2-14 ページ)

• AREA (6-72 ページ) .

表 2-3 GNU-stack セクシ ョ ンに対するコマンドラインオプシ ョ ンと AREA ディレクテ ィブの指

--execstack コマンド ラインオプシ ョ ン

--no_execstack コマンド ラインオプシ ョ ン

execstack AREA ディ レクティ

execstack execstack

no_execstack AREA ディレク

ティブ

execstack no_execstack

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 2-20ID 0 8 1 7 1 1 Non-Confidential

Page 27: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

アセンブラコマンド ラインオプシ ョ ン

2.2.52 --no_exceptions

例外テーブル生成をオフにするよ うにアセンブラに指示します。 テーブルは生成されません。 これがデフォルトです。

関連項目

• --exceptions (2-14 ページ)

• --exceptions_unwind (2-14 ページ)

• --no_exceptions_unwind• FRAME UNWIND ON (6-55 ページ)

• FRAME UNWIND OFF (6-55 ページ) .

2.2.53 --no_exceptions_unwind

すべての関数について nounwind テーブルを生成するよ うにアセンブラに指示します。

関連項目

• --exceptions (2-14 ページ)

• --no_exceptions• --exceptions_unwind (2-14 ページ) .

2.2.54 --no_hide_all

ソースディ レクティブによってオーバーライ ド されない限り、 エクスポートおよびインポート されたすべてのグローバルシンボルに STV_HIDDEN ではなく ELF における STV_DEFAULT 可視性を付与します。

関連項目

• EXPORT、 GLOBAL (6-80 ページ)

• IMPORT、 EXTERN (6-84 ページ) .

2.2.55 --no_project

プロジェク ト テンプレート ファ イルの使用を禁止します。

注 このオプシ ョ ンの使用は廃止される予定です。

関連項目

• 『コンパイラ リ ファレンス』 の --project=filename、 --no_project (3-184 ページ)

• --project=filename (2-23 ページ)

• --reinitialize_workdir (2-25 ページ)

• --workdir=directory (2-28 ページ) .

2.2.56 --no_reduce_paths

ファ イルパスの冗長なパス名情報の除外を無効にします。 これがデフォルトの設定です。 このオプシ ョ ンは Windows システムでのみ使用できます。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 2-21ID 0 8 1 7 1 1 Non-Confidential

Page 28: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

アセンブラコマンド ラインオプシ ョ ン

関連項目

• --reduce_paths (2-24 ページ)

• 『コンパイラ リ ファレンス』 の --reduce_paths、 --no_reduce_paths(3-187 ページ)

2.2.57 --no_regs

レジスタ名を事前定義しないよ うにアセンブラが設定されます。

このオプシ ョ ンの使用は廃止される予定です。 代わりに --regnames=none を使用して

下さい。

関連項目

• --regnames=none (2-24 ページ)

• 『アセンブラの使用』 の事前宣言されている主要なレジスタ名 (3-15 ページ)

• 『アセンブラの使用』 の事前宣言されている拡張レジスタ名 (3-16 ページ)

• 『アセンブラの使用』 の事前宣言されている XScale レジスタ名 (3-17 ページ)

• 『アセンブラの使用』 の事前宣言されているコプロセッサ名 (3-19 ページ)

2.2.58 --no_terse

リ ス ト ファ イル内で条件付きアセンブ リによってスキップされたアセンブラコードの行を表示するよ うにアセンブラに指示します。 コマンド ライでこのオプシ ョ ンを指定していない場合、 リ ス ト ファ イルにはスキップされたアセンブラコードが出力されません。

このオプシ ョ ンを指定する と、 terse フラグが無効になり ます。 デフォルトでは、

terse フラグは有効です。

関連項目

• --list=file (2-18 ページ) .

2.2.59 --no_unaligned_access

オブジェク ト ファ イルにおいて、 非境界整列アクセスの使用を無効にする属性を設定するよ うにアセンブラに指示します。

関連項目

• --unaligned_access (2-26 ページ) .

2.2.60 --no_warn

警告メ ッセージをオフにします。

関連項目

• --diag_warning=tag{, tag} (2-13 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 2-22ID 0 8 1 7 1 1 Non-Confidential

Page 29: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

アセンブラコマンド ラインオプシ ョ ン

2.2.61 -o filename

出力オブジェク ト ファ イルに名前を付けます。 このオプシ ョ ンが指定されていない場合、 アセンブラは、 inputfilename.o とい う形式でオブジェク トのファ イル名を作成

します。 このオプシ ョ ンでは大文字と小文字が区別されます。

2.2.62 --pd

このオプシ ョ ンは --predefine と同義です。

関連項目

• --predefine "directive".

2.2.63 --predefine "directive"

いずれかの SET ディ レクティブを事前実行するよ うにアセンブラに指示します。 これ

は条件付きアセンブリに便利です。

directive は、 SETA、 SETL、 または SETS ディ レクティブのいずれかです。 directive は次

のよ うに引用符で囲む必要があ り ます。

armasm --predefine "VariableName SETA 20" inputfile.s

また、 アセンブラは、 変数の値を設定する前に、 対応する GBLL、 GBLS、 または GBLA ディ レクティブを実行して変数を定義します。

変数名では、 大文字と小文字が区別されます。 コマンド ラ インを使用して定義された変数は、 コマンド ラ インで指定されたアセンブラ ソースファルに対してグローバルです。

注 使用しているシステムのコマンド ラ インインタフェースによっては、 \” など、 特殊

文字を組み合わせたものを入力して、 directive に文字列を含める必要があ り ます。

あるいは、 --via file を使用して --predefine 引数を含めるこ と もできます。 コマンド

ラ インインタフェースでは --via ファ イルからの引数を変更するこ とはできません。

関連項目

• --pd• GBLA、 GBLL、 GBLS (6-5 ページ)

• SETA、 SETL、 SETS (6-9 ページ)

• 定義される変数に基づく条件付きアセンブ リ (6-41 ページ) .

2.2.64 --project=filename

プロジェク ト テンプレート ファ イルの使用を許可します。

プロジェク ト テンプレートは、 特定の設定のコマンド ラ インオプシ ョ ンなどのプロジェク ト情報が含まれているファ イルです。 これらのファ イル、 プロジェク ト テンプレートの作業ディ レク ト リに保存されています。

注 このオプシ ョ ンの使用は廃止される予定です。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 2-23ID 0 8 1 7 1 1 Non-Confidential

Page 30: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

アセンブラコマンド ラインオプシ ョ ン

関連項目

• 『コンパイラ リ ファレンス』 の --project=filename、 --no_project (3-184 ページ)

• --no_project (2-21 ページ)

• --reinitialize_workdir (2-25 ページ)

• --workdir=directory (2-28 ページ) .

2.2.65 --reduce_paths

ファ イルパスの冗長なパス名情報の除外を有効にします。 このオプシ ョ ンは Windows システムでのみ使用できます。

Windows システムには、 ファ イルパスが 260 文字までという制限があ り ます。 絶対

名が 260 文字を超える相対パス名が存在する場合、 --reduce_paths オプシ ョ ンを使用

して、 ディ レク ト リ を .. の対応するインスタンス とマッチアップし、 directory/.. シーケンスをペアで削除するこ とによ り、 絶対パス名の長さを短縮できます。

注 --reduce_paths オプシ ョ ンを使用してパスの長さを短縮するのではなく、 長いファイ

ルパスや深いネス ト構造のファ イルパスを使用しないよ うにするこ とを推奨します。

関連項目

• --no_reduce_paths (2-21 ページ)

• 『コンパイラ リ ファレンス』 の --reduce_paths、 --no_reduce_paths(3-187 ページ)

2.2.66 --regnames=none

レジスタ名を事前定義しないよ うにアセンブラが設定されます。

関連項目

• --regnames=callstd• --regnames=all (2-24 ページ)

• --no_regs (2-22 ページ)

• 『アセンブラの使用』 の事前宣言されている主要なレジスタ名 (3-15 ページ)

• 『アセンブラの使用』 の事前宣言されている拡張レジスタ名 (3-16 ページ)

• 『アセンブラの使用』 の事前宣言されている XScale レジスタ名 (3-17 ページ)

• 『アセンブラの使用』 の事前宣言されているコプロセッサ名 (3-19 ページ)

2.2.67 --regnames=callstd

--apcs オプシ ョ ンで指定された、 使用中の AAPCS バリ アン トに基づいて追加のレジ

スタ名を定義します。

関連項目

• --apcs=qualifier…qualifier (2-5 ページ)

• --regnames=none• --regnames=all (2-24 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 2-24ID 0 8 1 7 1 1 Non-Confidential

Page 31: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

アセンブラコマンド ラインオプシ ョ ン

2.2.68 --regnames=all

--apcs の値にかかわらず、 すべての AAPCS レジスタを定義します。

• --apcs=qualifier…qualifier (2-5 ページ)

• --regnames=none (2-24 ページ)

• --regnames=callstd (2-24 ページ) .

2.2.69 --reinitialize_workdir

プロジェク ト テンプレートの作業ディ レク ト リ を再初期化するかど うかを指定できます。

注 このオプシ ョ ンの使用は廃止される予定です。

関連項目

• 『コンパイラ リ ファレンス』 の

--reinitialize_workdir (3-188 ページ)

• --project=filename (2-23 ページ)

• --no_project (2-21 ページ)

• --workdir=directory (2-28 ページ)

2.2.70 --report-if-not-wysiwyg

ソースコードで直接要求されていないエンコードをアセンブラが出力する と きに報告するよ う アセンブラに指示します。 アセンブラで次の処理を う と きに、 報告が行われる可能性があ り ます。

• MOV32 など、 他のアセンブラで使用できない疑似命令を使用する と き

• 命令ニーモニッ クに直接対応しないエンコードを出力する と き (例えば、 MOV 命令のアセンブル時にアセンブラが MVN エンコードを出力する場合)

• 命令構文のセマンティ クス上不可欠な追加命令を挿入する と き (例えば、 アセンブラは欠落している IT 命令を条件付き Thumb 命令の前に挿入できます)

2.2.71 --show_cmdline

このオプシ ョ ンは、 アセンブラによって使用されたコマンド ラ インを出力します。アセンブラによって処理された後のコマンド ラ インを表示する とによって、 以下の点を確認できます。

• ビルドシステムによって使用されているコマンド ラ イン

• 指定されたコマンド ラ インがアセンブラによってどのよ うに解釈されているか(コマンド ラ インオプシ ョ ンの順序など)

コマンドは正規化されて表示されます。 また、 via ファ イルの内容は展開されます。

出力結果は標準出力ス ト リーム (stdout) に送られます。

関連項目

• --via=file (2-27 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 2-25ID 0 8 1 7 1 1 Non-Confidential

Page 32: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

アセンブラコマンド ラインオプシ ョ ン

2.2.72 --split_ldm

多数のレジスタが含まれている LDM および STM 命令をエラーにするよ うにアセンブラ

に指示します。 このオプシ ョ ンは使用が制限されています。

このオプシ ョ ンを指定する と、 転送されたレジスタの 大数が次の数を超えた場合、LDM 命令はエラーになり ます。

• PC をロード しない LDM 命令の場合は 大 5 本まで

• PC をロードする LDM 命令の場合は 大 4 本まで

このオプシ ョ ンを指定する と、 転送されたレジスタの 大数が 5 を超えた場合、 STM 命令はエラーにな り ます。

多数のレジスタの転送を回避する と、 次のよ うな ARM システムに対する割り込み遅

延を減らすこ とができます。

• キャ ッシュや書き込みバッファのない ARM システム (キャ ッシュレス ARM7TDMI など)

• ゼロウェイ ト状態モード、 32 ビッ ト メモ リ を使用する ARM システム

また、 多数のレジスタの転送を回避する と、 次の影響があ り ます。

• コードサイズが増えます。

• キャ ッシュ付きシステムや、 書き込みバッファ付きプロセッサには大きなメリ ッ トはあ り ません。

• ゼロウェイ ト状態メモ リ を使用していないシステムや、 低速なペリ フェラルデバイスのあるシステムの場合はメ リ ッ トはあ り ません。 このよ う なステムの割り込みレイテンシは、 も速度の遅いメモ リ またはペリ フェラルデバイスへのアクセスに必要なサイクル数によって決ま り ます。 こ割り込みレイテンシは通常、 複数レジスタの転送によって誘発されるレイテンシよ り も大き くな り ます。

2.2.73 --thumb

UAL 構文を使用して、 命令を Thumb 命令と して解釈するよ うにアセンブラに指示し

ます。 このオプシ ョ ンは、 ソースファ イルの先頭の THUMB ディ レクティブに相当しま

す。

関連項目

• --arm (2-6 ページ)

• ARM、 THUMB、 THUMBX、 CODE16、 CODE32 (6-65 ページ) .

2.2.74 --thumbx

UAL 構文を使用して、 命令を Thumb-2EE 命令と して解釈するよ うにアセンブラに指

示します。 このオプシ ョ ンは、 ソースファ イルの先頭の THUMBX ディ レクティブに相

当します。

関連項目

• ARM、 THUMB、 THUMBX、 CODE16、 CODE32 (6-65 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 2-26ID 0 8 1 7 1 1 Non-Confidential

Page 33: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

アセンブラコマンド ラインオプシ ョ ン

2.2.75 --unaligned_access

オブジェク ト ファ イルにおいて、 非境界整列アクセスの使用を有効にする属性を設定するよ うにアセンブラに指示します。

関連項目

• --no_unaligned_access (2-22 ページ) .

2.2.76 --unsafe

異なるアーキテクチャの命令をエラーなしでアセンブルします。 対応するエラーメ ッセージは警告メ ッセージに変更されます。 演算子の優先順位関する警告も非表示にされます。

関連項目

• --diag_error=tag{, tag} (2-11 ページ)

• --diag_warning=tag{, tag} (2-13 ページ)

• 『アセンブラの使用』 のバイナリ演算子 (8-23 ページ)

2.2.77 --untyped_local_labels

Thumb コード内のローカルラベルの参照時に Thumb ビッ ト を設定しないよ うにアセ

ンブラに指示します。

関連項目

• LDR 疑似命令 (3-171 ページ)

• 『アセンブラの使用』 のローカルラベル (8-12 ページ)

2.2.78 --version_number

armasm のバージ ョ ンごとに増加する整数を表示するよ うにアセンブラに指示します。

整数の形式は PVbbbb です。 各項目には以下の意味があ り ます。

P メジャーバージ ョ ンを示します。

V マイナーバージ ョ ンを示します。

bbbb ビルド番号を示します。

例えば、アセンブラによって 400123 が出力された場合、 armasm のバージ ョ ン番号は 4.0、 ビルド番号は 123 です。

関連項目

• --vsn (2-27 ページ)

• --help (2-17 ページ) .

2.2.79 --via=file

file を開き、 コマンド ラ イン引数を読み込むよ うにアセンブラに指示します。

関連項目

• 『コンパイラ リ ファレンス』 の付録 B via ファ イルの構文

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 2-27ID 0 8 1 7 1 1 Non-Confidential

Page 34: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

アセンブラコマンド ラインオプシ ョ ン

2.2.80 --vsn

このオプシ ョ ンを選択する と、 バージ ョ ン情報と ライセンス情報が表示されます。

関連項目

• --version_number (2-27 ページ)

• --help (2-17 ページ) .

2.2.81 --width=n

リ ス トするページの幅を n に設定します。 デフォルトは 79 文字です。

関連項目

• --list=file (2-18 ページ) .

2.2.82 --workdir=directory

このオプシ ョ ンを使用する と、 プロジェク ト テンプレートに作業ディ レク ト リ を提供するかど うかを指定できます。

注 このオプシ ョ ンの使用は廃止される予定です。

関連項目

• --project=filename (2-23 ページ)

• --no_project (2-21 ページ)

• --reinitialize_workdir (2-25 ページ)

• 『コンパイラ リ ファレンス』 の --workdir=directory (3-236 ページ)

2.2.83 --xref

このオプシ ョ ンを選択する と、 マクロの内部と外部でシンボルが定義されている場所と使用されている場所について、 相互参照情報を リ ス トするよ うにアセンブラが設定されます。 デフォルトはオフです。

関連項目

• --list=file (2-18 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 2-28ID 0 8 1 7 1 1 Non-Confidential

Page 35: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

第 3 章 ARM 命令と Thumb 命令

以下の各ト ピッ クでは、 ARM アセンブラでサポート されている ARM 命令、 Thumb 命令 (すべてのバージ ョ ン)、 および ThumbEE 命令について説明します。

• 命令の概要 (3-2 ページ)

• 命令の幅指定子 (3-11 ページ)

• メモ リ アクセス命令 (3-12 ページ)

• 汎用データ処理命令 (3-49 ページ)

• 乗算命令 (3-81 ページ)

• サチュレート命令 (3-103 ページ)

• 並列命令 (3-108 ページ)

• パッ ク命令と展開命令 (3-116 ページ)

• 分岐命令と制御命令 (3-123 ページ)

• コプロセッサ命令 (3-133 ページ)

• その他の命令 (3-143 ページ)

• ThumbEE 命令 (3-161 ページ)

• 疑似命令 (3-165 ページ)

• 条件コード (3-175 ページ)

命令セクシ ョ ンの中にはアーキテクチャサブセクシ ョ ンを含むものがあ り ます。 アーキテクチャサブセクシ ョ ンを持たない命令は、 すべてのバーョ ンの ARM 命令セッ トおよ

びすべてのバージ ョ ンの Thumb 命令セッ トで使用できるものです。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-1ID 0 8 1 7 1 1 Non-Confidential

Page 36: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

3.1 命令の概要

表 3-1 は、 ARM、 Thumb、 および ThumbEE 命令セッ トで使用できる命令の概要を示

しています。 このセクシ ョ ンを使用して、 個々の命令および疑似命令の説明移動できます。

注 特に明記していない限り、 ThumbEE 命令は Thumb 命令と同一です。

表 3-1 命令の参照ページ

ニーモニック 概要 ページアーキテクチャa

ADC、 ADD キャ リー付き加算、 加算 (3-55 ペ

ージ)

すべて

ADR プログラム相対アドレスまたはレジスタ相対アドレスのロード (狭範囲)

(3-28 ペ

ージ)

すべて

ADRL 疑似命令 プログラム相対アドレスまたはレジスタ相対アドレスのロード (中範囲)

(3-166ページ)

x6M

AND 論理積 (3-61 ペ

ージ)

すべて

ASR 算術右シフ ト (3-77 ペ

ージ)

すべて

B 分岐 (3-124ページ)

すべて

BFC、 BFI ビッ ト フ ィールドのク リ ア命令と挿入命令 (3-117 ペ

ージ)

T2

BIC ビッ ト ク リ ア (3-61 ペ

ージ)

すべて

BKPT ブレークポイン ト (3-144ページ)

5

BL リ ンク付き分岐命令 (3-124ページ)

すべて

BLX リ ンク付き分岐、 命令セッ トの変更 (3-124ページ)

T

BX 分岐、 命令セッ トの変更 (3-124ページ)

T

BXJ 分岐、 Jazelle® へ変更 (3-124ページ)

J、 x7M

CBZ、 CBNZ 0 と比較し、 0 の (または 0 でない) 場合に分岐する

命令

(3-131ページ)

T2

CDP コプロセッサデータ処理命令 (3-134ページ)

x6M

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-2ID 0 8 1 7 1 1 Non-Confidential

Page 37: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

CDP2 コプロセッサデータ処理命令 (3-134ページ)

5、 x6M

CHKA 配列をチェッ クする命令 (3-163ページ)

EE

CLREX 排他のク リ ア命令 (3-47 ペ

ージ)

K、 x6M

CLZ 先行ゼロカウン ト (3-64 ペ

ージ)

5、 x6M

CMN、 CMP 否定値の比較、 比較命令 (3-65 ペ

ージ)

すべて

CPS プロセッサ状態の変更命令 (3-151ページ)

6

DBG デバッグ (3-157ページ)

7

DMB、 DSB データ メモリバリ ア、 データ同期バリア (3-158ページ)

7、 6M

ENTERX、 LEAVEX ThumbEE との間の状態切り替え命令 (3-162ページ)

EE

EOR 排他的論理和 (XOR) (3-61 ペ

ージ)

すべて

HB、 HBL、 HBLP、 HBP ハンド ラの分岐、 指定されたハンド ラへの分岐 (3-164ページ)

EE

ISB 命令同期バリ ア (3-158ページ)

7、 6M

IT If-Then (3-128ページ)

T2

LDC コプロセッサロード (3-141ページ)

x6M

LDC2 コプロセッサロード (3-141ページ)

5、 x6M

LDM 多重レジスタロード (3-34 ペ

ージ)

すべて

LDR レジスタロード (ワード) (3-12 ペ

ージ)

すべて

LDR 疑似命令 レジスタロード疑似命令 (3-171ページ)

すべて

LDRB レジスタロード (バイ ト ) (3-12 ペ

ージ)

すべて

表 3-1 命令の参照ページ (続き)

ニーモニック 概要 ページアーキテクチャa

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-3ID 0 8 1 7 1 1 Non-Confidential

Page 38: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

LDRBT レジスタロード (バイ ト )、 ユーザモード (3-12 ペ

ージ)

x6M

LDRD レジスタロード (2 ワード) (3-12 ペ

ージ)

5E、x6M

LDREX 排他的レジスタロード (3-44 ペ

ージ)

6、 x6M

LDREXB、 LDREXH 排他的レジスタロード (バイ ト、 ハーフワード) (3-44 ペ

ージ)

K、 x6M

LDREXD 排他的レジスタロード (ダブルワード) (3-44 ペ

ージ)

K、 x7M

LDRH レジスタロード (ハーフワード) (3-12 ペ

ージ)

すべて

LDRHT レジスタロード (ハーフワード)、 ユーザモード (3-12 ペ

ージ)

T2

LDRSB レジスタロード (符号付きバイ ト ) (3-12 ペ

ージ)

すべて

LDRSBT レジスタロード (符号付きバイ ト )、 ユーザモード (3-12 ペ

ージ)

T2

LDRSH レジスタロード (符号付きハーフワード) (3-12 ペ

ージ)

すべて

LDRSHT レジスタロード (符号付きハーフワード)、 ユーザモード

(3-12 ペ

ージ)

T2

LDRT レジスタロード (ワード)、 ユーザモード (3-12 ペ

ージ)

x6M

LSL、 LSR 論理左シフ ト、 論理右シフ ト (3-77 ペ

ージ)

すべて

MAR レジスタから 40 ビッ ト累算器への移動命令 (3-160ページ)

XScale

MCR レジスタからコプロセッサへの移動命令 (3-135ページ)

x6M

MCR2 レジスタからコプロセッサへの移動命令 (3-135ページ)

5、 x6M

MCRR レジスタからコプロセッサへの移動命令 (3-135ページ)

5E、x6M

MCRR2 レジスタからコプロセッサへの移動命令 (3-135ページ)

6、 x6M

MIA、 MIAPH、 MIAxy 乗算および内部 40 ビッ ト累積 (3-101ページ)

XScale

表 3-1 命令の参照ページ (続き)

ニーモニック 概要 ページアーキテクチャa

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-4ID 0 8 1 7 1 1 Non-Confidential

Page 39: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

MLA 積和 (3-82 ペ

ージ)

x6M

MLS 積差 (3-82 ペ

ージ)

T2

MOV 移動 (3-67 ペ

ージ)

すべて

MOVT 上位ハーフワードにデータを代入する命令 (3-70 ペ

ージ)

T2

MOV32 疑似命令 レジスタへの 32 ビッ ト イ ミディエート値の移動命

(3-169ページ)

T2

MRA 40 ビッ ト累算器からレジスタへの移動命令 (3-160ページ)

XScale

MRC コプロセッサからレジスタへの移動命令 (3-136ページ)

x6M

MRC2 コプロセッサからレジスタへの移動命令 (3-136ページ)

5、 x6M

MRRC コプロセッサからレジスタへの移動命令 (3-136ページ)

5E、x6M

MRRC2 コプロセッサからレジスタへの移動命令 (3-136ページ)

6、 x6M

MRS PSR からレジスタへの移動命令 (3-146ページ)

すべて

MRS システムコプロセッサからレジスタへの移動命令 (3-139ページ)

7A、 7R

MSR レジスタから PSR への移動命令 (3-148ページ)

すべて

MSR レジスタからシステムコプロセッサへの移動命令 (3-138ページ)

7A、 7R

MUL 乗算 (3-82 ペ

ージ)

すべて

MVN データの各ビッ ト を反転させてから代入する命令 (3-67 ペ

ージ)

すべて

NOP 操作なし (3-154ページ)

すべて

ORN 論理和否定 (3-61 ペ

ージ)

T2

ORR 論理和 (3-61 ペ

ージ)

すべて

表 3-1 命令の参照ページ (続き)

ニーモニック 概要 ページアーキテクチャa

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-5ID 0 8 1 7 1 1 Non-Confidential

Page 40: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

PKHBT、 PKHTB ハーフワードのパッ ク命令 (3-121ページ)

6、 7EM

PLD データをプリ ロード (3-32 ペ

ージ)

5E、x6M

PLDW 書き込むためにデータをプ リ ロード (3-32 ペ

ージ)

7MP

PLI 命令をプリ ロード (3-32 ペ

ージ)

7

PUSH、 POP レジスタをスタ ッ クに PUSH、 スタ ッ クからレジス

タを POP(3-37 ペ

ージ)

すべて

QADD、 QDADD、 QDSUB、 QSUB サチュレート算術演算 (3-104ページ)

5E、7EM

QADD8、 QADD16、 QASX、 QSUB8、

QSUB16、 QSAX

並列符号付きサチュレート算術演算 (3-109ページ)

6、 7EM

RBIT ビッ ト順序を反転 (3-75 ペ

ージ)

T2

REV、 REV16、 REVSH バイ ト順序を反転 (3-75 ペ

ージ)

6

RFE 例外からの復帰 (3-40 ペ

ージ)

T2、x7M

ROR レジスタの右ロテート (3-77 ペ

ージ)

すべて

RRX 拡張付き右ロテート (3-77 ペ

ージ)

x6M

RSB 逆減算 (3-55 ペ

ージ)

すべて

RSC キャ リー付き逆減算 (3-55 ペ

ージ)

x7M

SADD8、 SADD16、 SASX 並列符号付き算術演算 (3-109ページ)

6、 7EM

SBC キャ リー付き減算 (3-55 ペ

ージ)

すべて

SBFX、 UBFX 符号付き / 符号なしビッ ト フ ィールドの抽出命令 (3-118 ペ

ージ)

T2

SDIV 符号付き除算 (3-80 ペ

ージ)

7M、 7R

SEL APSR の GE フラグに基づくバイ トの選択 (3-73 ペ

ージ)

6、 7EM

表 3-1 命令の参照ページ (続き)

ニーモニック 概要 ページアーキテクチャa

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-6ID 0 8 1 7 1 1 Non-Confidential

Page 41: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

SETEND メモ リ アクセス時のエンディアン形式を設定する命令

(3-153ページ)

6、 x7M

SEV イベン ト を設定する命令 (3-155ページ)

K、 6M

SHADD8、 SHADD16、 SHASX、

SHSUB8、 SHSUB16、 SHSAX

符号付きでバイ ト、 ハーフワード並列演算 (3-109ページ)

6、 7EM

SMC セキュアモニターコール (3-152ページ)

Z

SMLAxy 符号付き積和 (32 <= 16 x 16 + 32) (3-86 ペ

ージ)

5E、7EM

SMLAD デュアル符号付き積和 (3-96 ペ

ージ)

6、 7EM

(32 <= 32 + 16 x 16 + 16 x 16)

SMLAL 符号付き積和 (64 <= 64 + 32 x 32) (3-84 ペ

ージ)

x6M

SMLALxy 符号付き積和 (64 <= 64 + 16 x 16) (3-90 ペ

ージ)

5E、7EM

SMLALD デュアル符号付き積和 long (3-98 ペ

ージ)

6、 7EM

(64 <= 64 + 16 x 16 + 16 x 16)

SMLAWy 符号付き積和 (32 <= 32 x 16 + 32) (3-88 ペ

ージ)

5E、7EM

SMLSD デュアル符号付き乗減累算 (3-96 ペ

ージ)

6、 7EM

(32 <= 32 + 16 x 16 – 16 x 16)

SMLSLD デュアル符号付き乗減累算 long (3-98 ペ

ージ)

6、 7EM

(64 <= 64 + 16 x 16 – 16 x 16)

SMMLA 符号付き上位ワード積和 (32 <= TopWord (32 x 32 + 32))

(3-94 ペ

ージ)

6、 7EM

SMMLS 符号付き上位ワード積差 (32 <= TopWord (32 - 32 x 32))

(3-94 ペ

ージ)

6、 7EM

SMMUL 符号付き上位ワード乗算 (32 <= TopWord (32 x 32)) (3-94 ペ

ージ)

6、 7EM

SMUAD、 SMUSD デュアル符号付き乗算、 および積の加算または減算 (3-92 ペ

ージ)

6、 7EM

表 3-1 命令の参照ページ (続き)

ニーモニック 概要 ページアーキテクチャa

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-7ID 0 8 1 7 1 1 Non-Confidential

Page 42: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

SMULxy 符号付き乗算 (32 <= 16 x 16) (3-86 ペ

ージ)

5E、7EM

SMULL 符号付き乗算 (64 <= 32 x 32) (3-84 ペ

ージ)

x6M

SMULWy 符号付き乗算 (32 <= 32 x 16) (3-88 ペ

ージ)

5E、7EM

SRS 復帰状態のス ト ア命令 (3-42 ペ

ージ)

T2、x7M

SSAT 符号付きサチュレート演算 (3-106ページ)

6、 x6M

SSAT16 符号付き並列ハーフワードサチュレート演算 (3-114 ペ

ージ)

6、 7EM

SSUB8、 SSUB16、 SSAX 並列符号付き算術演算 (3-109ページ)

6、 7EM

STC コプロセッサス ト ア命令 (3-141ページ)

x6M

STC2 コプロセッサス ト ア命令 (3-141ページ)

5、 x6M

STM 多重レジスタス ト ア (3-34 ペ

ージ)

すべて

STR レジスタス ト ア (ワード) (3-12 ペ

ージ)

すべて

STRB レジスタス ト ア (バイ ト ) (3-12 ペ

ージ)

すべて

STRBT レジスタス ト ア (バイ ト )、 ユーザモード (3-12 ペ

ージ)

x6M

STRD レジスタス ト ア (2 ワード) (3-12 ペ

ージ)

5E、x6M

STREX 排他的レジスタス ト ア (3-44 ペ

ージ)

6、 x6M

STREXB、 STREXH 排他的レジスタス ト ア (バイ ト 、 ハーフワード) (3-44 ペ

ージ)

K、 x6M

STREXD 排他的レジスタス ト ア (ダブルワード) (3-44 ペ

ージ)

K、 x7M

STRH レジスタス ト ア (ハーフワード) (3-12 ペ

ージ)

すべて

STRHT レジスタス ト ア (ハーフワード)、 ユーザモード (3-12 ペ

ージ)

T2

表 3-1 命令の参照ページ (続き)

ニーモニック 概要 ページアーキテクチャa

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-8ID 0 8 1 7 1 1 Non-Confidential

Page 43: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

STRT レジスタス ト ア (ワード)、 ユーザモード (3-12 ペ

ージ)

x6M

SUB 減算 (3-55 ペ

ージ)

すべて

SUBS PC、 lr スタ ッ クを行わない例外からの復帰命令 (3-59 ペ

ージ)

T2、x7M

SVC (以前の SWI) スーパーバイザコール (3-145ページ)

すべて

SWP、 SWPB レジスタ と メモ リ間のスワップ (ARM のみ) (3-48 ペ

ージ)

すべて、x7M

SXTAB、 SXTAB16、 SXTAH 加算オプシ ョ ン付きの符号拡張 (3-119 ペ

ージ)

6、 7EM

SXTB?SXTH 符号付き拡張 (3-119 ペ

ージ)

6

SXTB16 符号付き拡張 (3-119 ペ

ージ)

6、 7EM

SYS システムコプロセッサ命令の実行 (3-140ページ)

7A、 7R

TBB、 TBH テーブル分岐バイ ト、 ハーフワード (3-132ページ)

T2

TEQ 等価テス ト (3-71 ペ

ージ)

x6M

TST テス ト (3-71 ペ

ージ)

すべて

UADD8、 UADD16、 UASX 並列符号なし算術演算 (3-109ページ)

6、 7EM

UDIV 符号なし除算 (3-80 ペ

ージ)

7M、 7R

UHADD8、 UHADD16、 UHASX、

UHSUB8、 UHSUB16、 UHSAX

並列符号なし半演算 (3-109ページ)

6、 7EM

UMAAL 符号なし積和累算 long (3-100ページ)

6、 7EM

(64 <= 32 + 32 + 32 x 32)

UMLAL、 UMULL 符号なし積和累算、 符号なし乗算 (3-84 ペ

ージ)

x6M

(64 <= 32 x 32 + 64)、 (64 <= 32 x 32)

UQADD8、 UQADD16、 UQASX、

UQSUB8、 UQSUB16、 UQSAX

並列符号なしサチュレート算術演算 (3-109ページ)

6、 7EM

表 3-1 命令の参照ページ (続き)

ニーモニック 概要 ページアーキテクチャa

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-9ID 0 8 1 7 1 1 Non-Confidential

Page 44: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

USAD8 符号なし絶対差の和 (3-112 ペ

ージ)

6、 7EM

USADA8 符号なし絶対差の和の累算 (3-112 ペ

ージ)

6、 7EM

USAT 符号なしサチュレート演算 (3-106ページ)

6、 x6M

USAT16 符号なし並列ハーフワードサチュレート演算 (3-114 ペ

ージ)

6、 7EM

USUB8、 USUB16、 USAX 並列符号なし算術演算 (3-109ページ)

6、 7EM

UXTAB、 UXTAB16、 UXTAH 任意で加算を伴う符号なし拡張 (3-119 ペ

ージ)

6、 7EM

UXTB、 UXTH 符号なし拡張 (3-119 ペ

ージ)

6

UXTB16 符号なし拡張 (3-119 ペ

ージ)

6、 7EM

V* 詳細については、第 4 章 NEON と VFP プログラ ミ ン

グを参照して下さい。

WFE、 WFI、 YIELD イベン ト待機、 割り込み待機、 明け渡し (3-155ページ)

T2、 6M

a. アーキテクチャ欄のエン ト リは次の意味を持ちます。

すべて ARM アーキテクチャのすべてのバージ ョ ンで使用できる命令です。

5 ARMv5T*、 ARMv6*、 および ARMv7 アーキテクチャで使用できる命令です。

5E ARMv5TE、 ARMv6*、 および ARMv7 アーキテクチャで使用できる命令です。

6 ARMv6* および ARMv7 アーキテクチャで使用できる命令です。

6M ARMv6-M および ARMv7 アーキテクチャで使用できる命令です。

x6M ARMv6-M アーキテクチャでは使用できない命令です。

7 ARMv7 アーキテクチャで使用できる命令です。

7M ARMv7E-M 実装を含む ARMv7-M アーキテクチャで使用できる命令です。

x7M ARMv6-M または ARMv7-M アーキテクチャ、 および ARMv7E-M 実装では使用できない命令です。

7EM ARMv7E-M 実装では使用でき、 ARMv7-M または ARMv6-M アーキテクチャでは使用できない命令

です。

7R ARMv7-R アーキテクチャで使用できる命令です。

7MP マルチプロセス拡張を実装した ARMv7 アーキテクチャで使用できる命令です。

EE ARM アーキテクチャの ThumbEE バリアン トで使用できる命令です。

J ARMv5TEJ、 ARMv6*、 および ARMv7 アーキテクチャで使用できる命令です。

K ARMv6K および ARMv7 アーキテクチャで使用できる命令です。

T ARMv4T、 ARMv5T*、 ARMv6*、 および ARMv7 アーキテクチャで使用できる命令です。

T2 ARMv6T2 以上のアーキテクチャで使用できる命令です。

XScale ARM アーキテクチャの XScale バージ ョ ンで使用できる命令です。

Z Security Extensions が実装されている場合に使用できる命令です。

表 3-1 命令の参照ページ (続き)

ニーモニック 概要 ページアーキテクチャa

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-10ID 0 8 1 7 1 1 Non-Confidential

Page 45: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

3.2 命令の幅指定子

命令の幅指定子 .W および .N は、ARMv6T2 以降向けにアセンブルされる Thumb コー

ドの命令サイズを制御します。

Thumb コード (ARMv6T2 以降) では、 .W 幅指定子を設定するこ とによ り、 16 ビッ ト

エンコーディングが使用できる場合でも、 アセンブラで 32 ビッ トエンコーディング

が行われます。 .W 指定子は ARM コード と してアセンブルする と きには無視されま

す。

Thumb コードで .N 幅指定子を設定する と、アセンブラで 16 ビッ トエンコーディング

が使用されます。 このと き、 命令が 16 ビッ トでエンコードできない場合や .N を ARM コードで使用した場合には、 エラーが発生します。

命令の幅指定子は、 命令ニーモニッ ク と条件コードの直後に置きます。 次に例を示します。

BCS.W label ; 短分岐の場合も 32 ビ ッ ト命令を適用する

B.N label : ラ ベルが 16 ビ ッ ト命令の範囲外の場合はエ ラ ーが発生する

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-11ID 0 8 1 7 1 1 Non-Confidential

Page 46: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

3.3 メモリアクセス命令

このセクシ ョ ンは以下のサブセクシ ョ ンから構成されています。

• LDR と STR (イ ミディエートオフセッ ト ) (3-14 ページ)

イ ミディエートオフセッ ト 、 プレインデクスイ ミディエートオフセッ ト 、 またはポス ト インデクスイ ミディエートオフセッ ト を使ったロード と ス ト ア。

• LDR と STR (レジスタオフセッ ト ) (3-17 ページ)

レジスタオフセッ ト 、 プレインデクスレジスタオフセッ ト 、 またはポス ト インデクスレジスタオフセッ ト を使ったロード と ス ト ア。

• LDR と STR (非特権モード) (3-20 ページ)

ユーザモードでのロード と ス ト ア。

• LDR (PC 相対) (3-22 ページ)

レジスタロード命令です。 アドレスは、 PC からのオフセッ トです。

• LDR (レジスタ相対) (3-25 ページ)

レジスタロード命令です。 アドレスはベースレジスタからのオフセッ トです。

• ADR (PC 相対) (3-28 ページ)

PC 相対アドレスのロード命令です。

• ADR (レジスタ相対) (3-30 ページ)

レジスタ相対アドレスのロード命令です。

• PLD、 PLDW、 PLI (3-32 ページ)

アドレスのプリ ロードを実行する命令です。

• LDM、 STM (3-34 ページ)

多重レジスタロード / ス ト ア命令です。

• PUSH および POP (3-37 ページ)

Lo レジスタ と LR (オプシ ョ ン) をスタ ッ クにプッシュする命令です。

Lo レジスタ と PC (オプシ ョ ン) をスタ ッ クからポップする命令です。

• RFE (3-40 ページ)

例外から復帰する命令です。

• SRS (3-42 ページ)

復帰状態をス ト アする命令です。

• LDREX と STREX (3-44 ページ)

排他的レジスタロード / ス ト ア命令です。

• CLREX (3-47 ページ)

排他をク リ アする命令です。

• SWP と SWPB (3-48 ページ)

レジスタ と メモ リ間のデータスワ ップ命令です。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-12ID 0 8 1 7 1 1 Non-Confidential

Page 47: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

注 LDR 疑似命令もあ り ます。 この疑似命令をアセンブルするこ とによって、 LDR 命令、

MOV 命令、 または MVN 命令が生成されます。

関連項目

概念 :

『アセンブラの使用』 :

• メモ リ アクセス (5-31 ページ) .

参照 :

• LDR 疑似命令 (3-171 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-13ID 0 8 1 7 1 1 Non-Confidential

Page 48: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

3.3.1 LDR と STR (イ ミディエートオフセッ ト)

イ ミディエートオフセッ ト 、 プレインデクスイ ミディエートオフセッ ト 、 またはポス ト インデクスイ ミディエートオフセッ ト を使ったロード と ス ト ア。

構文

op{type}{cond} Rt, [Rn {, #offset}] ; イ ミ デ ィ エー ト オ フ セ ッ ト

op{type}{cond} Rt, [Rn, #offset]!; プ レ イ ンデ ク ス

op{type}{cond} Rt, [Rn], #offset ; ポス ト イ ンデ ク ス

opD{cond} Rt, Rt2, [Rn {, #offset}] ; イ ミ デ ィ エー ト オ フ セ ッ ト、 ダ ブルワー ド

opD{cond} Rt, Rt2, [Rn, #offset]!; プ レ イ ンデ ク ス、 ダ ブルワー ド

opD{cond} Rt, Rt2, [Rn], #offset ; ポス ト イ ンデ ク ス、 ダ ブルワー ド

各パラ メータには以下の意味があ り ます。

op 次のいずれかを指定できます。

LDR レジスタロード

STR レジスタス ト ア

type 次のいずれかを指定できます。

B 符号なしバイ ト (ロード時に 32 ビッ トにゼロ拡張)

SB 符号付きバイ ト (LDR のみ。 32 ビッ トに符号拡張)

H 符号なしハーフワード (ロード時に 32 ビッ トにゼロ拡張)

SH 符号付きハーフワード (LDR のみ。 32 ビッ トに符号拡張)

- 省略 (ワード)

cond 任意の条件コードを指定します。

Rt ロードまたはス ト アするレジスタを指定します。

Rn メモ リ アドレスのベース となるレジスタを指定します。

offset オフセッ ト を指定します。 offset が省略される と、 アドレスは Rn の内容

とな り ます。

Rt2 ダブルワードのロード / ス ト アで使用する追加のレジスタを指定しま

す。

命令セッ トやアーキテクチャによっては、 一部のオプシ ョ ンを使用できない場合があ り ます。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-14ID 0 8 1 7 1 1 Non-Confidential

Page 49: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

オフセッ トの範囲とアーキテクチャ

表 3-2 はオフセッ トの範囲と これらの命令の使用可否を示します。

レジスタの制約条件

プレインデクスおよびポス ト インデクス形式では、 Rn は Rt とは異なる必要があ り ま

す。

表 3-2 オフセッ ト とアーキテクチャ、 LDR/STR、 ワード、 ハーフワード、 バイ ト

命令イ ミディエートオフセッ ト

プレインデクスポスト インデクス

アーキテクチャ

ARM、 ワードまたはバイ ト a –4095 ~ 4095 –4095 ~ 4095 –4095 ~ 4095 すべて

ARM、 符号付きバイ ト 、 ハーフ

ワード、 符号付きハーフワード

–255 ~ 255 –255 ~ 255 –255 ~ 255 すべて

ARM、 ダブルワード –255 ~ 255 –255 ~ 255 –255 ~ 255 v5TE +

32 ビッ ト Thumb、 ワード、 ハーフ

ワード、 符号付きハーフワード、バイ ト、 符号付きバイ ト a

–255 ~ 4095 –255 ~ 255 –255 ~ 255 v6T2、v7

32 ビッ ト Thumb、 ダブルワード –1020 ~ 1020 c –1020 ~ 1020 c –1020 ~ 1020 c v6T2、v7

16 ビッ ト Thumb、 ワード b 0 ~ 124 c 該当なし 該当なし すべての T

16 ビッ ト Thumb、 符号なしハーフ

ワード b0 ~ 62 d 該当なし 該当なし すべて

の T

16 ビッ ト Thumb、 符号なしバイ ト b

0 ~ 31 該当なし 該当なし すべての T

16 ビッ ト Thumb、 ワード、Rn は SP e

0 ~ 1020 c 該当なし 該当なし すべての T

16 ビッ ト ThumbEE、 ワード b –28 ~ 124 c 該当なし 該当なし T-2EE

16 ビッ ト ThumbEE、 ワード、Rn は R9 e

0 ~ 252 c 該当なし 該当なし T-2EE

16 ビッ ト ThumbEE、 ワード、Rn は R10e

0 ~ 124 c 該当なし 該当なし T-2EE

a. ワードのロードでは Rt に PC (プログラムカウンタ) を指定できます。 PC へのロードを実行する と、 ロード さ

れたアドレスにある命令への分岐が発生します。 ARMv4 では、 ロード されたアドレスのビッ ト [1:0] は 0b00 になっている必要があ り ます。ARMv5T 以降のバージ ョ ンでは、ビッ ト [1:0] が 0b10 あってはなり ません。ビッ ト [0] が 1 になっている場合、 Thumb 状態で実行が継続されます。 それ以外の場合は、 ARM 状態で継続されます。

b. Rt と Rn には R0 ~ R7 の範囲のレジスタを指定する必要があ り ます。

c. 4 の倍数

d. 必ず 2 の倍数

e. Rt には R0 ~ R7 の範囲のレジスタを指定する必要があ り ます。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-15ID 0 8 1 7 1 1 Non-Confidential

Page 50: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

ダブルワードレジスタの制約条件

プレインデクスおよびポス ト インデクス形式では、 Rn は Rt2 とは異なる必要があ り ま

す。

Thumb 命令の場合、 Rt または Rt2 に SP または PC は指定できません。

ARM 命令には、 以下の制約条件が適用されます。

• Rt には偶数番号のレジスタを指定する必要があ り ます。

• Rt に LR は指定できません。

• R12 を Rt に使用しないこ とを強く推奨します。

• Rt2 は R (t + 1) であるこ とが必要です。

PC の使用

ARM 命令の場合 :

• Rt での PC は LDR ワード命令で使用でき、Rn での PC は LDR 命令で使用できます。

• Rt での PC は STR ワード命令で使用でき、 Rn の PC はイ ミディエートオフセッ ト

構文の STR 命令 (Rn にライ トバッ ク しない形式) で使用できます。 ただし、 こ

れらは ARMv6T2 以降では非推奨です。

これらの ARM 命令では、 他の PC の使用は許されません。

Thumb 命令では、Rt での PC は LDR ワード命令で使用でき、Rn での PC は LDR 命令で使

用できます。 これらの Thumb 命令では、 他の PC の使用は許されません。

SP の使用

SP は Rn で使用できます。

ARM では、 Rt での SP をワード命令で使用できます。 Rt での SP は ARM コードの非

ワード命令で使用できますが、 これは ARMv6T2 以降では非推奨です。

Thumb では、Rt での SP はワード命令だけで使用できます。 これらの命令で、Rt での SP を他の方法で使用した場合、 Thumb コードでは使用できません。

LDR r8,[r10] ; R10 のア ド レ スか ら R8 を読み取る。

LDRNE r2,[r5,#960]!; R5 のア ド レ スの 960 バイ ト上のワードか ら

; R2 を条件付きで読み取り、

; R5 を 960 バイ ト分イ ン ク リ メ ン トする。

STR r2,[r9,#consta-struc] ; consta-struc は、

; 0 ~ 4095 の範囲内の定数を求める式。

関連項目

参照 : • メモ リ アクセス命令 (3-12 ページ)

• 条件コード (3-175 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-16ID 0 8 1 7 1 1 Non-Confidential

Page 51: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

3.3.2 LDR と STR (レジスタオフセッ ト)

レジスタオフセッ ト 、 プレインデクスレジスタオフセッ ト 、 またはポス ト インデクスレジスタオフセッ ト を使ったロード と ス ト ア。

構文

op{type}{cond} Rt, [Rn, +/-Rm {, shift}] ; レジス タ オ フ セ ッ ト

op{type}{cond} Rt, [Rn, +/-Rm {, shift}]!; プ レ イ ンデ ク ス ; ARM のみ

op{type}{cond} Rt, [Rn], +/-Rm {, shift} ; ポス ト イ ンデ ク ス ; ARM のみ

opD{cond} Rt, Rt2, [Rn, +/-Rm] ; レジス タ オ フ セ ッ ト、 ダ ブルワー ド ; ARM のみ

opD{cond} Rt, Rt2, [Rn, +/-Rm]!; プ レ イ ンデ ク ス、 ダ ブルワー ド ; ARM のみ

opD{cond} Rt, Rt2, [Rn], +/-Rm ; ポス ト イ ンデ ク ス、 ダ ブルワー ド ; ARM のみ

以下の意味があ り ます。

op 次のいずれかを指定できます。

LDR レジスタロード

STR レジスタス ト ア

type 次のいずれかを指定できます。

B 符号なしバイ ト (ロード時に 32 ビッ トにゼロ拡張)

SB 符号付きバイ ト (LDR のみ。 32 ビッ トに符号拡張)

H 符号なしハーフワード (ロード時に 32 ビッ トにゼロ拡張)

SH 符号付きハーフワード (LDR のみ。 32 ビッ トに符号拡張)

- 省略 (ワード)

cond 任意の条件コードを指定します。

Rt ロードまたはス ト アするレジスタを指定します。

Rn メモ リ アドレスのベース となるレジスタを指定します。

Rm オフセッ ト と して使用される値を保持するレジスタを指定します。 –Rm は Thumb コードでは使用できません。

shift 任意に指定できるシフ トです。

Rt2 ダブルワードのロード / ス ト アで使用する追加のレジスタを指定しま

す。

命令セッ トやアーキテクチャによっては、 一部のオプシ ョ ンを使用できない場合があ り ます。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-17ID 0 8 1 7 1 1 Non-Confidential

Page 52: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

オフセッ ト レジスタ とシフ トオプシ ョ ン

表 3-3 はオフセッ トの範囲と これらの命令の使用可否を示します。

レジスタの制約条件

プレインデクスおよびポス ト インデクス形式の場合 :

• Rn は Rt とは異なる必要があ り ます。

• ARMv6 よ り前のアーキテクチャでは、 Rn は Rm とは異なる必要があ り ます。

ダブルワードレジスタの制約条件

ARM 命令には、 以下の制約条件が適用されます。

• Rt には偶数番号のレジスタを指定する必要があ り ます。

• Rt に LR は指定できません。

• R12 を Rt に使用しないこ とを強く推奨します。

• Rt2 は R (t + 1) であるこ とが必要です。

• LDRD 命令では、 Rm は Rt および Rt2 と異なる必要があ り ます。

• プレインデクスおよびポス ト インデクス形式では、 Rn は Rt2 とは異なる必要が

あ り ます。

表 3-3 オプシ ョ ンとアーキテクチャ、 LDR/STR (レジスタオフセッ ト)

命令 +/–Rm a シフ トアーキテクチャ

ARM、 ワードまたはバイ ト b +/–Rm LSL #0 ~ 31 LSR #1 ~ 32 すべて

ASR #1 ~ 32 ROR #1 ~ 31 RRX

ARM、 符号付きバイ ト、 ハーフワード、 符号付

きハーフワード

+/–Rm 該当なし すべて

ARM、 ダブルワード +/–Rm 該当なし v5TE +

32 ビッ ト Thumb、 ワード、 ハーフワード、 符号

付きハーフワード、 バイ ト、 符号付きバイ ト b+Rm LSL #0 ? 3 v6T2、 v7

16 ビッ ト Thumb、 ダブルワード以外のすべてc +Rm 該当なし すべての T

16 ビッ ト ThumbEE、 ワード b +Rm LSL #2 (必須) T-2EE

16 ビッ ト ThumbEE、 ハーフワード、 符号付き

ハーフワード b+Rm LSL #1 (必須) T-2EE

16 ビッ ト ThumbEE、 バイ ト、 符号付きバイ ト b +Rm 該当なし T-2EE

a. +/–Rm となっている と ころでは、 –Rm、 +Rm、 または Rm を使用できます。 +Rm となっている と ころでは、 –Rm を使用でき

ません。

b. ワードのロードでは Rt に PC (プログラムカウンタ) を指定できます。 PC へのロードを実行する と、 ロード されたアドレス

にある命令への分岐が発生します。 ARMv4 では、 ロード されたアドレスのビッ ト [1:0] は 0b00 になっている必要があ り ま

す。 ARMv5T 以降のバージ ョ ンでは、 ビッ ト [1:0] が 0b10 あってはなり ません。 ビッ ト [0] が 1 になっている場合、 Thumb 状態で実行が継続されます。 それ以外の場合は、 ARM 状態で継続されます。

c. Rt、 Rn、 Rm はいずれも R0 ~ R7 の範囲にします。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-18ID 0 8 1 7 1 1 Non-Confidential

Page 53: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

PC の使用

ARM 命令の場合 :

• Rt での PC は LDR ワード命令で使用でき、 Rn での PC はレジスタオフセッ ト構文

の LDR 命令 (Rn にライ トバッ ク しない形式) で使用できます。

• Rt での PC は STR ワード命令で使用でき、 Rn での PC はレジスタオフセッ ト構文

の STR 命令 (Rn にライ トバッ ク しない形式) で使用できます。 ただし、 これら

は ARMv6T2 以降では非推奨です。

ARM 命令では、 他の PC の使用は許されません。

Thumb 命令では、Rt での PC は LDR ワード命令で使用できます。 これらの Thumb 命令

では、 他の PC の使用は許されません。

SP の使用

SP は Rn で使用できます。

ARM では、 Rt での SP をワード命令で使用できます。 Rt での SP は非ワード ARM 命令で使用できますが、 これは ARMv6T2 以降では非推奨です。

Rm での SP は ARM 命令で使用できますが、 これは ARMv6T2 以降では非推奨です。

Thumb では、 Rt での SP はワード命令だけで使用できます。 これらの命令で、 Rt での SP を他の方法で使用した場合、 Thumb コードでは使用できません。

Rm での SP の使用は、 Thumb 状態では許可されていません。

関連項目

参照 : • メモ リ アクセス命令 (3-12 ページ)

• 条件コード (3-175 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-19ID 0 8 1 7 1 1 Non-Confidential

Page 54: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

3.3.3 LDR と STR (非特権モード)

バイ ト 、 ハーフワード、 またはワードを非特権モードでロードおよびス ト アします。

これらの命令が特権モードのソフ ト ウェアで実行される と、 非特権モードのソフ トウェアで実行されたと き と同じ制約条件でメモ リにアクセスします。

これらの命令は、 非特権モードのソフ ト ウェアで実行されたと き、 対応するロードまたはス ト ア命令とまったく同様に動作します。 例えば、 LDRSBT は LDRSB と同様に動

作します。

構文

op{type}T{cond} Rt, [Rn {, #offset}] ; イ ミ デ ィ エー ト オ フ セ ッ ト (Thumb-2 のみ)

op{type}T{cond} Rt, [Rn] {, #offset} ; ポス ト イ ンデ ク ス (ARM のみ)

op{type}T{cond} Rt, [Rn], +/-Rm {, shift} ; ポス ト イ ンデ ク ス (レジス タ) (ARM のみ)

以下の意味があ り ます。

op 次のいずれかを指定できます。

LDR レジスタロード

STR レジスタス ト ア

type 次のいずれかを指定できます。

B 符号なしバイ ト (ロード時に 32 ビッ トにゼロ拡張)

SB 符号付きバイ ト (LDR のみ。 32 ビッ トに符号拡張)

H 符号なしハーフワード (ロード時に 32 ビッ トにゼロ拡張)

SH 符号付きハーフワード (LDR のみ。 32 ビッ トに符号拡張)

- 省略 (ワード)

cond 任意の条件コードを指定します。

Rt ロードまたはス ト アするレジスタを指定します。

Rn メモ リ アドレスのベース となるレジスタを指定します。

offset オフセッ ト を指定します。 オフセッ ト を指定しなかった場合、 アドレス

は Rn 内の値になり ます。

Rm オフセッ ト と して使用される値を保持するレジスタを指定します。 Rm に PC は指定できません。

shift 任意に指定できるシフ トです。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-20ID 0 8 1 7 1 1 Non-Confidential

Page 55: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

オフセッ トの範囲とアーキテクチャ

表 3-2 (3-15 ページ) はオフセッ トの範囲と これらの命令の使用可否を示します。

関連項目

参照 : • メモ リ アクセス命令 (3-12 ページ)

• 条件コード (3-175 ページ) .

表 3-4 オフセッ ト とアーキテクチャ、 LDR/STR (ユーザモード)

命令イ ミディエートオフセッ ト

ポスト インデクス

+/–Rm a シフ トアーキテクチャ

ARM、 ワード、 バイ ト 該当なし –4095 ~ 4095 +/–Rm LSL #0 ~ 31 すべて

LSR #1 ~ 32

ASR #1 ~ 32

ROR #1 ~ 31

RRX

ARM、 符号付きバイ ト、 ハーフ

ワード、 符号付きハーフワード

該当なし –255 ~ 255 +/–Rm 該当なし v6T2、v7

32 ビッ ト Thumb、 ワード、 ハー

フワード、 符号付きハーフワード、 バイ ト、 符号付きバイ ト

0 ~ 255 該当なし 該当なし v6T2、v7

a. –Rm、 +Rm、 または Rm を使用できます。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-21ID 0 8 1 7 1 1 Non-Confidential

Page 56: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

3.3.4 LDR (PC 相対)

レジスタロード命令です。 アドレスは、 PC からのオフセッ トです。

構文

LDR{type}{cond}{.W} Rt, label

LDRD{cond} Rt, Rt2, label ; ダ ブルワー ド

各パラ メータには以下の意味があ り ます。

type 次のいずれかを指定できます。

B 符号なしバイ ト (ロード時に 32 ビッ トにゼロ拡張)

SB 符号付きバイ ト (LDR のみ。 32 ビッ トに符号拡張)

H 符号なしハーフワード (ロード時に 32 ビッ トにゼロ拡張)

SH 符号付きハーフワード (LDR のみ。 32 ビッ トに符号拡張)

- 省略 (ワード)

cond 任意の条件コードを指定します。

.W 任意に指定できる幅指定子を指定します。

Rt ロードまたはス ト アするレジスタを指定します。

Rt2 2 番目にロードまたはス ト アするレジスタを指定します。

label PC 相対式を指定します。

label は現在の命令から限定された距離にある必要があ り ます。

注 同等の構文が ARM コードの STR 命令で利用できますが、 それらは ARMv6T2 以降で

は非推奨です。

オフセッ トの範囲とアーキテクチャ

アセンブラは、 PC からオフセッ ト を算出します。 label が範囲外である場合、 アセン

ブラはエラーを生成します。

表 3-5 はラベルと現在の命令との間の可能なオフセッ ト を示します。

表 3-5 PC 相対オフセッ ト

命令オフセッ ト範囲

アーキテクチャ

ARM LDR、 LDRB、 LDRSB、 LDRH、 LDRSH a +/– 4095 すべて

ARM LDRD +/– 255 v5TE +

32 ビッ ト Thumb LDR、 LDRB、 LDRSB、 LDRH、

LDRSH a+/– 4095 v6T2、 v7

32 ビッ ト Thumb LDRD +/– 1020 b v6T2、 v7

16 ビッ ト Thumb LDR c 0-1020 b すべての T

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-22ID 0 8 1 7 1 1 Non-Confidential

Page 57: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

注 ARMv7-M では、 LDRD (PC 相対) 命令はワード境界で整列されているアドレス上にあ

る必要があ り ます。

Thumb-2 での LDR (PC 相対)

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

LDR.W を指定した場合は、 16 ビッ ト LDR を使用してターゲッ トに到達できる場合でも、

常に 32 ビッ ト命令が生成されます。

参考と して、 32 ビッ ト Thumb-2 LDR 命令を使用して到達できるターゲッ トで失敗が発

生する場合でも、 .W 指定なしの LDR は常に 16 ビッ ト Thumb コードの命令を生成しま

す。

ダブルワードレジスタの制約条件

Thumb-2 命令の場合、 Rt または Rt2 に SP または PC は指定できません。

ARM 命令には、 以下の制約条件が適用されます。

• Rt には偶数番号のレジスタを指定する必要があ り ます。

• Rt に LR は指定できません。

• R12 を Rt に使用しないこ とを強く推奨します。

• Rt2 は R (t + 1) であるこ とが必要です。

SP の使用

ARM では、 Rt での SP を LDR ワード命令で使用できます。 Rt での SP は LDR 非ワード ARM 命令で使用できますが、 これは ARMv6T2 以降では非推奨です。

Thumb では、 Rt での SP は LDR ワード命令だけで使用できます。 これらの命令での、

他のすべての SP の使用は、 Thumb コードでは許可されていません。

関連項目

概念 :

『アセンブラの使用』 :

• レジスタ相対式と PC 相対式 (8-7 ページ) .

参照 : • 疑似命令 (3-165 ページ)

• Thumb-2 での LDR (PC 相対)

a. ワードのロードでは Rt に PC (プログラムカウンタ) を指定できます。 PC へのロー

ドを実行する と、 ロード されたアドレスへの分岐が発生します。 ARMv4 では、

ロード されたアドレスのビッ ト [1:0] は 0b00 になっている必要があ り ます。

ARMv5T 以降のバージ ョ ンでは、 ビッ ト [1:0] が 0b10 であってはり ません。 ビッ ト [0] が 1 になっている場合、 Thumb 状態で実行が継続されます。 それ以外の場合は、

ARM 状態で継続されます。

b. 4 の倍数で指定して下さい。

c. Rt には R0 ~ R7 の範囲のレジスタを指定する必要があ り ます。バイ ト 、ハーフワー

ド、 ダブルワードの 16 ビッ ト命令はあ り ません。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-23ID 0 8 1 7 1 1 Non-Confidential

Page 58: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

• メモ リ アクセス命令 (3-12 ページ)

• 条件コード (3-175 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-24ID 0 8 1 7 1 1 Non-Confidential

Page 59: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

3.3.5 LDR (レジスタ相対)

レジスタロード命令です。 アドレスはベースレジスタからのオフセッ トです。

構文

LDR{type}{cond}{.W} Rt, label

LDRD{cond} Rt, Rt2, label ; ダ ブルワー ド

各パラ メータには以下の意味があ り ます。

type 次のいずれかを指定できます。

B 符号なしバイ ト (ロード時に 32 ビッ トにゼロ拡張)

SB 符号付きバイ ト (LDR のみ。 32 ビッ トに符号拡張)

H 符号なしハーフワード (ロード時に 32 ビッ トにゼロ拡張)

SH 符号付きハーフワード (LDR のみ。 32 ビッ トに符号拡張)

- 省略 (ワード)

cond 任意の条件コードを指定します。

.W 任意に指定できる幅指定子を指定します。

Rt ロードまたはス ト アするレジスタを指定します。

Rt2 2 番目にロードまたはス ト アするレジスタを指定します。

label FIELD ディ レクティブで定義されるシンボルを指定します。 label は、

MAP ディ レクティブを使用して定義されるベースレジスタからのオフ

セッ ト を指定します。

label は、 ベースレジスタ内の値から限定された距離にある必要があ り

ます。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-25ID 0 8 1 7 1 1 Non-Confidential

Page 60: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

オフセッ トの範囲とアーキテクチャ

アセンブラは、 ベースレジスタからオフセッ ト を算出します。 label が範囲外である

場合、 アセンブラはエラーを生成します。

表 3-5 (3-22 ページ) はラベルと現在の命令との間の可能なオフセッ ト を示します。

Thumb-2 での LDR (レジスタ相対)

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

LDR.W を指定した場合は、 16 ビッ ト LDR を使用してターゲッ トに到達できる場合でも、

常に 32 ビッ ト命令が生成されます。

参考と して、 32 ビッ ト Thumb-2 LDR 命令を使用して到達できるターゲッ トで失敗が発

生する場合でも、 .W 指定なしの LDR は常に 16 ビッ ト Thumb コードの命令を生成しま

す。

表 3-6 レジスタ相対オフセッ ト

命令オフセッ ト範囲

アーキテクチャ

ARM LDR、 LDRBa

a. ワードのロードでは Rt に PC (プログラムカウンタ) を指定できます。 PC へのロー

ドを実行する と、 ロード されたアドレスへの分岐が発生します。 ARMv4 では、

ロード されたアドレスのビッ ト [1:0] は 0b00 になっている必要があ り ます。

ARMv5T 以降のバージ ョ ンでは、 ビッ ト [1:0] が 0b10 であってはり ません。 ビッ ト [0] が 1 になっている場合、 Thumb 状態で実行が継続されます。 それ以外の場合は、

ARM 状態で継続されます。

+/– 4095 すべて

ARM LDRSB、 LDRH、 LDRSH +/– 255 すべて

ARM LDRD +/– 255 v5TE +

32 ビッ ト Thumb LDR、 LDRB、 LDRSB、 LDRH、

LDRSH a–255 ~ 4095 v6T2、 v7

32 ビッ ト Thumb LDRD +/– 1020 b

b. 4 の倍数で指定して下さい。

v6T2、 v7

16 ビッ ト Thumb LDR c

c. Rt およびベースレジスタは R0 ~ R7 の範囲内にある必要があ り ます。

0 ~ 124 b すべての T

16 ビッ ト Thumb LDRH c 0 ~ 62 d

d. 2 の倍数で指定して下さい。

すべての T

16 ビッ ト Thumb LDRB c 0 ~ 31 すべての T

16 ビッ ト Thumb LDR、 ベースレジスタは SPe

e. Rt には R0 ~ R7 の範囲のレジスタを指定する必要があ り ます。

0 ~ 1020 b すべての T

16 ビッ ト ThumbEE LDR c –28 ~ 124 b T-2EE

16 ビッ ト Thumb LDR、 ベースレジスタは R9 e 0 ~ 252 b T-2EE

16 ビッ ト ThumbEE LDR、 ベースレジスタは R10 e

0 ~ 124 b T-2EE

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-26ID 0 8 1 7 1 1 Non-Confidential

Page 61: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

ダブルワードレジスタの制約条件

Thumb-2 命令の場合、 Rt または Rt2 に SP または PC は指定できません。

ARM 命令には、 以下の制約条件が適用されます。

• Rt には偶数番号のレジスタを指定する必要があ り ます。

• Rt に LR は指定できません。

• R12 を Rt に使用しないこ とを強く推奨します。

• Rt2 は R (t + 1) であるこ とが必要です。

PC の使用

Rt での PC をワード命令で使用できます。 これらの命令では、 他の PC の使用は許さ

れません。

SP の使用

ARM では、 Rt での SP をワード命令で使用できます。 Rt での SP は非ワード ARM 命令で使用できますが、 これは ARMv6T2 以降では非推奨です。

Thumb では、 Rt での SP はワード命令だけで使用できます。 これらの命令で、 Rt での SP を他の方法で使用した場合、 Thumb コードでは使用できません。

関連項目

概念

『アセンブラの使用』 :

• レジスタ相対式と PC 相対式 (8-7 ページ) .

参照 : • メモ リ アクセス命令 (3-12 ページ)

• 疑似命令 (3-165 ページ)

• Thumb-2 での LDR (レジスタ相対) (3-26 ページ)

• FIELD (6-21 ページ)

• MAP (6-20 ページ)

• 条件コード (3-175 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-27ID 0 8 1 7 1 1 Non-Confidential

Page 62: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

3.3.6 ADR (PC 相対)

ADR は、 デスティネーシ ョ ンレジスタに PC 相対アドレスを生成します (ラベルは現

在の領域)。

構文

ADR{cond}{.W} Rd,label

各パラ メータには以下の意味があ り ます。

cond 任意の条件コードを指定します。

.W 任意に指定できる幅指定子を指定します。

Rd ロードするデスティネーシ ョ ンレジスタを指定します。

label PC 相対式を指定します。

label は現在の命令から限定された距離にある必要があ り ます。

使用法

ADR は、 位置非依存コードを生成します。 アセンブラによ り、 PC に対して値を加算

または減算する命令が生成されるためです。

よ り広範囲の有効なアドレスをアセンブルするには、 ADRL 疑似命令を使用します。

label は、 ADR 命令と同じアセンブラ領域内のアドレスに評価される必要があ り ます。

BX または BLX 命令のターゲッ ト を生成するために ADR を使用する と きは、 ターゲッ ト

に Thumb 命令が含まれている場合、 そのアドレスの Thumb ビッ ト (ビッ ト 0) を設

定する必要があ り ます。

オフセッ トの範囲とアーキテクチャ

アセンブラは、 PC からオフセッ ト を算出します。 label が範囲外である場合、 アセン

ブラはエラーを生成します。

表 3-5 (3-22 ページ) はラベルと現在の命令との間の可能なオフセッ ト を示します。

表 3-7 PC 相対オフセッ ト

命令 オフセッ ト範囲 アーキテクチャ

ARM ADR 詳細については、 定数と しての Operand2(3-50 ページ) を参照して下さい。

すべて

32 ビッ ト Thumb ADR

+/– 4095 v6T2、 v7

16 ビッ ト Thumb ADR a

a. Rd には R0 ~ R7 の範囲のレジスタを指定する必要があ り ます。

0-1020 b

b. 4 の倍数で指定して下さい。

すべての T

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-28ID 0 8 1 7 1 1 Non-Confidential

Page 63: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

Thumb-2 の ADR

.W 幅指定子を指定して、ADR で Thumb-2 コードの 32 ビッ ト命令を生成できます。.W と共に ADR を指定した場合は、 16 ビッ ト命令でアドレスを生成できる場合でも、 常に 32 ビッ ト命令が生成されます。

参考と して、 32 ビッ ト Thumb-2 ADD 命令を使用して生成できるアドレスで失敗が発生

する場合でも、.W 指定なしの ADR は常に 16 ビッ ト Thumb コードの命令を生成します。

制限

Thumb コードでは、 Rd を PC または SP にするこ とはできません。

ARM コードで、Rd には PC または SP を使用できますが、SP の使用は ARMv6T2 以降で

は非推奨です。

関連項目

概念

『アセンブラの使用』 :

• レジスタ相対式と PC 相対式 (8-7 ページ) .

参照 : • メモ リ アクセス命令 (3-12 ページ)

• ADRL 疑似命令 (3-166 ページ)

• AREA (6-72 ページ)

• 条件コード (3-175 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-29ID 0 8 1 7 1 1 Non-Confidential

Page 64: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

3.3.7 ADR (レジスタ相対)

ADR は、 デスティネーシ ョ ンレジスタにレジスタ相対アドレスを生成します (ラベル

は記憶域マップに定義)。

構文

ADR{cond}{.W} Rd,label

各パラ メータには以下の意味があ り ます。

cond 任意の条件コードを指定します。

.W 任意に指定できる幅指定子を指定します。

Rd ロードするデスティネーシ ョ ンレジスタを指定します。

label FIELD ディ レクティブで定義されるシンボルを指定します。 label は、

MAP ディ レクティブを使用して定義されるベースレジスタからのオフ

セッ ト を指定します。

label は、 ベースレジスタから限定された距離にある必要があ り ます。

使用法

ADR は、 記憶域マップ内の名前付きフ ィールドに簡単にアクセスするためのコードを

生成します。

よ り広範囲の有効なアドレスをアセンブルするには、 ADRL 疑似命令を使用します。

制限

Thumb コード :

• Rd を PC にするこ とはできません。

• Rd を SP にできるのは、 ベースレジスタが SP の場合のみです。

オフセッ トの範囲とアーキテクチャ

アセンブラは、 ベースレジスタからオフセッ ト を算出します。 label が範囲外である

場合、 アセンブラはエラーを生成します。

表 3-5 (3-22 ページ) はラベルと現在の命令との間の可能なオフセッ ト を示します。

表 3-8 レジスタ相対オフセッ ト

命令 オフセッ ト範囲 アーキテクチャ

ARM ADR 詳細については、 定数と しての Operand2(3-50 ページ) を参照して下さい。

すべて

32 ビッ ト Thumb ADR

+/– 4095 v6T2、 v7

16 ビッ ト Thumb ADR、 ベースレジス

タは SP a

a. Rd に指定するレジスタは、 R0 ~ R7 の範囲にあるか、 SP である必要があ り ます。

Rd が SP の場合、 オフセッ ト範囲は –508 ~ 508 です。 4 の倍数で指定して下さい。

0-1020 b すべての T

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-30ID 0 8 1 7 1 1 Non-Confidential

Page 65: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

Thumb-2 の ADR

.W 幅指定子を指定して、ADR で Thumb-2 コードの 32 ビッ ト命令を生成できます。.W と共に ADR を指定した場合は、 16 ビッ ト命令でアドレスを生成できる場合でも、 常に 32 ビッ ト命令が生成されます。

参考と して、 32 ビッ ト Thumb-2 ADD 命令を使用して生成できるアドレスで失敗が発生

する場合でも、 .W 指定なしの ADR (ベースレジスタは SP) は常に 16 ビッ ト Thumb コードの命令を生成します。

関連項目

概念

『アセンブラの使用』 :

• レジスタ相対式と PC 相対式 (8-7 ページ) .

参照 : • メモ リ アクセス命令 (3-12 ページ)

• MAP (6-20 ページ)

• FIELD (6-21 ページ)

• ADRL 疑似命令 (3-166 ページ)

• 条件コード (3-175 ページ) .

b. 4 の倍数で指定して下さい。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-31ID 0 8 1 7 1 1 Non-Confidential

Page 66: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

3.3.8 PLD、 PLDW、 PLI

データ と命令をプリ ロードする命令です。 プロセッサは、 アドレスからデータまたは命令のロードが実行されるこ とを メモ リ システムに事前に通するこ とができます。

構文

PLtype{cond} [Rn {, #offset}]

PLtype{cond} [Rn, +/-Rm {, shift}]

PLtype{cond} label

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

type 以下のいずれかになり ます。

D データアドレス

DW 書き込むためのデータアドレス

I 命令アドレス

構文で label が指定されている場合は、 type を DW にするこ とはできませ

ん。

cond 任意の条件コードを指定します。

注 cond を指定できるのは、 Thumb-2 コードで、 前に IT 命令を使用した場合

のみです。 この命令は、 ARM では無条件命令なので、 cond を使用しな

いでください。

Rn メモ リ アドレスのベース となるレジスタを指定します。

offset イ ミディエートオフセッ ト を指定します。 オフセッ ト を指定しなかった

場合、 アドレスは Rn 内の値になり ます。

Rm オフセッ ト と して使用される値を保持するレジスタを指定します。

shift 任意に指定できるシフ トです。

label PC 相対式を指定します。

オフセッ トの範囲

このオフセッ トは、 プ リ ロードが発生する前に Rn の値に適用されます。 その結果は、

プ リ ロード用のメモ リ アドレス と して使用されます。 使用できるオフセッ トの範囲を以下に示します。

• ARM 命令 : –4095 ~ +4095• Thumb-2 命令 : –255 ~ +4095 (Rn が PC でない場合)

• Thumb-2 命令 : –4095 ~ +4095 (Rn が PC である場合)

アセンブラは、 PC からオフセッ ト を算出します。 label が範囲外である場合、 アセン

ブラはエラーを生成します。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-32ID 0 8 1 7 1 1 Non-Confidential

Page 67: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

レジスタオフセッ トまたはシフ ト レジスタオフセッ ト

ARM では、 Rm の値は Rn の値に対して加算または減算されます。 Thumb-2 では、 Rm の値は Rn の値に加算できますが、 減算はできません。 この結果は、 プ リ ロード用のメ

モ リ アドレス と して使用されます。

可能なシフ トの範囲を以下に示します。

• Thumb-2 命令 : LSL #0 ~ #3

• ARM 命令 : 以下のいずれかの範囲

— LSL #0 ~ #31— LSR #1 ~ #32— ASR #1 ~ #32— ROR #1 ~ #31— RRX

プリロード用のアドレス境界調整

プリ ロード命令では、 境界調整チェッ クは実行されません。

レジスタの制約条件

Rm に PC は指定できません。 Thumb 命令の場合、 Rm には SP も指定できません。

構文 PLtype{cond} [Rn, +/-Rm{, #shift}] の Thumb 命令では、 Rn に PC を指定できませ

ん。

アーキテクチャ

ARM PLD は ARMv5TE 以降で使用できます。

32 ビッ ト Thumb PLD は ARMv6T2 以降で使用できます。

PLDW を使用できるのは、 マルチプロセス拡張を実装した ARMv7 以降だけです。

PLI を使用できるのは ARMv7 以降だけです。

16 ビッ トの Thumb PLD、 PLDW、 および PLI 命令はあ り ません。

これらはヒン ト命令であ り、 その実装はオプシ ョ ンです。 実装されていない場合、NOP と して実行されます。

関連項目

概念

『アセンブラの使用』 :

• レジスタ相対式と PC 相対式 (8-7 ページ) .

参照 :

• 条件コード (3-175 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-33ID 0 8 1 7 1 1 Non-Confidential

Page 68: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

3.3.9 LDM、 STM

多重レジスタロード / ス ト ア命令です。 ARM 状態ではレジスタ R0 ~ R15 (PC) の任

意の組み合わせを転送できますが、 Thumb 状態では制限がいくつかあ り ます。

構文

op{addr_mode}{cond} Rn{!}, reglist{^}

各パラ メータには以下の意味があ り ます。

op 次のいずれかを指定できます。

LDM 複数のレジスタをロード します。

STM 複数のレジスタをス ト アします。

addr_mode 以下のいずれかを指定します。

IA 転送単位でアドレスをポス ト インク リ メ ン ト します。 これは

デフォルト値なので、 省略できます。

IB 転送単位でアドレスをプレインク リ メ ン ト します (ARM のみ)。

DA 転送単位でアドレスをポス トデク リ メ ン ト します (ARM のみ)。

DB 転送単位でアドレスをプレデク リ メン ト します。

スタ ッ クを実装する と きなどに、 スタ ッ ク指向のアドレッシングモード接尾文字を使用するこ と もできます。

cond 任意の条件コードを指定します。

Rn ベースレジスタです。 つま り、 転送に使用する初期アドレスが保持され

る ARM レジスタです。 Rn に PC は指定できません。

! 任意に指定できる接尾文字です。 ! を指定する と、 終アドレスが Rn にライ トバッ ク されます。

reglist ロードまたはス ト アするレジスタの リ ス ト を中括弧で囲んで指定しま

す。 レジスタ範囲も指定できます。 複数のレジスタまたはレジスタ範囲を指する場合は、 コンマで区切る必要があ り ます。

^ 任意に指定できる接尾文字です。 ARM 状態でのみ使用できます。 ユー

ザモードやシステムモードでは使用できません。 この接尾文字には以下の目的があ り ます。

• 命令に (任意のアドレッシングモードで) LDM を指定し、 reglist に PC (R15) が含まれている場合、 通常の多重レジスタ転送が行われ

るだけでなく、 SPSR が CPSR にコピーされます。 これは、 例外ハン

ド ラからの復帰に必要です。 したがって、 この接尾文字は必ず例外モードから使用して下さい。

• 例外モードで使用されない場合には、 現在のモードのレジスタではなく、 ユーザモードのレジスタ との間でデータ転送が実行されます。

32 ビッ ト Thumb 命令の reglist に関する制約条件

32 ビッ ト Thumb 命令では、 以下の制約条件が適用されます。

• SP を リ ス トに含めるこ とはできません。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-34ID 0 8 1 7 1 1 Non-Confidential

Page 69: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

• STM 命令では、 PC を リ ス トに含めるこ とはできません。

• LDM 命令では、 PC と LR を両方と も リ ス トに含めるこ とはできません。

• リ ス トには複数のレジスタを指定する必要があ り ます。

reglist にレジスタが 1 つしか指定されていない STM または LDM 命令を記述した場合は、

自動的に同等の STR または LDR 命令に書き換えられます。 逆アセンブルリ ス ト と ソー

スコードを比較する場合は、 この点に注意して下さい。

アセンブラの --diag_warning 1645 コマンド ラ インオプシ ョ ンを使用して、 いつ命令置

換が発生したかを確認できます。

ARM 命令の reglist に関する制約条件

ARM ス ト ア命令は、 reglist に SP および PC を持つこ とができますが、ARMv6T2 以降

では、 reglist に SP または PC を含む命令は非推奨です。

ARM ロード命令は、 reglist に SP および PC を持つこ とができますが、 reglist に SP を含むか、 reglist に PC と LR の両方を含む命令は ARMv6T2 以降では非推奨です。

16 ビッ ト命令

これらの命令のサブセッ トの 16 ビッ トバージ ョ ンは、 Thumb コードで使用できま

す。

16 ビッ ト命令には、 以下の制約条件が適用されます。

• reglist に指定するレジスタはすべて Lo レジスタである必要があ り ます。

• Rn は Lo レジスタである必要があ り ます。

• addr_mode は省略する (または IA を指定する) 必要があ り ます。 つま り、 転送単

位でアドレスをポス ト インク リ メ ン トする必要があ り ます。

• STM 命令に対してライ トバッ クを指定する必要があ り ます。

• Rn が reglist にない場合、 LDM 命令に対してライ トバッ クを指定する必要があ り

ます。

注 Rn を reglist 内の 下位レジスタ と して指定する、ラ イ トバッ クが使用される 16 ビッ

ト Thumb STM 命令の使用は、 ARMv6T2 以降では非推奨です。

また、PUSH および POP 命令は STM および LDM 命令のサブセッ ト なので、STM および LDM 命令を使用して表現できます。 PUSH と POP の一部の形式は、 16 ビッ ト命令でもあ り ま

す。

注 これらの 16 ビッ ト命令は、 Thumb-2EE では使用できません。

PC へのロード

PC (プログラムカウンタ) へのロードを実行する と、 ロード されたアドレスにある

命令への分岐が発生します。

ARMv4 では、 ロード されたアドレスのビッ ト [1:0] は 0b00 になっている必要があ り

ます。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-35ID 0 8 1 7 1 1 Non-Confidential

Page 70: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

ARMv5T 以降には以下のよ うな特徴があ り ます。

• ビッ ト [1:0] は 0b10 にできません。

• ビッ ト [0] が 1 なら、 Thumb 状態で実行が継続します。

• ビッ ト [0] が 0 なら、 ARM 状態で実行が継続します。

ベースレジスタのロードまたはストアとライ トバックの使用

ARM または 16 ビッ ト Thumb 命令では、 Rn が reglist に含まれていて、 ラ イ トバッ ク

が ! 接尾文字で指定されている と、 以下のよ うにな り ます。

• 命令に STM {addr_mode}{cond} が指定され、 Rn が reglist 内で も番号の小さいレ

ジスタである場合は、 Rn の初期値がス ト アされます。 ARMv6T2 以降では、 こ

れらの命令は非推奨です。

• 上記以外の場合は、 ロードまたはス ト アされる Rn の値が信頼できないので、 こ

れらの命令は使用できません。

Rn が reglist に含まれていて、 ライ トバッ クが ! 接尾文字で指定されている場合、 32 ビッ ト Thumb 命令は使用できません。

LDM r8,{r0,r2,r9} ; LDMIA は LDM と同じ意味 STMDB r1!,{r3-r6,r11,r12}

誤用例

STM r5!,{r5,r4,r9} ; R5 にス ト ア される値は予測不可能

LDMDA r2, {} ; リ ス ト に少な く と も 1 つのレジス タ が必要

関連項目

概念

『アセンブラの使用』 :

• LDM および STM を使用したスタ ッ クの実装 (5-26 ページ) .

参照 : • メモ リ アクセス命令 (3-12 ページ)

• PUSH および POP (3-37 ページ)

• 条件コード (3-175 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-36ID 0 8 1 7 1 1 Non-Confidential

Page 71: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

3.3.10 PUSH および POP

完全降順スタ ッ クに対してレジスタのプッシュ とポップを実行します。

構文

PUSH{cond} reglist

POP{cond} reglist

各パラ メータには以下の意味があ り ます。

cond 任意の条件コードを指定します。

reglist レジスタの非空リ ス トで、 中括弧で囲まれます。 レジスタ範囲も中に含

まれます。 複数のレジスタまたはレジスタ範囲を指定する場合は、 コンマ区切る必要があ り ます。

使用法

PUSH は STMDB sp!, reglist と同じ意味です。 また、 POP は LDMIA sp! reglist と同じ意味

です。 このよ う な場合は、 PUSH および POP ニーモニッ クを使用するのが適切です。

注 LDM および LDMFD は LDMIA と同じ意味です。 STMFD は STMDB と同じ意味です。

レジスタは、 番号順にスタ ッ クにス ト アされます。 も小さな番号のレジスタが下位アドレスにス ト アされます。

reglist に PC を含む POP

この命令は、 スタ ッ クから PC にポップされたアドレスへの分岐を発生させます。 一

般的には、 サブルーチンからの復帰に使用します。 サブルーチンでは LR がサブルー

チン開始位置でスタ ッ クにプッシュされます。

ARMv5T 以降には以下のよ うな特徴があ り ます。

• ビッ ト [1:0] は 0b10 にできません。

• ビッ ト [0] が 1 なら、 Thumb 状態で実行が継続します。

• ビッ ト [0] が 0 なら、 ARM 状態で実行が継続します。

ARMv4 では、 ロード されたアドレスのビッ ト [1:0] は 0b00 になっている必要があ り

ます。

Thumb 命令

これらの命令のサブセッ トは、 Thumb 命令セッ トで使用できます。

16 ビッ ト命令には、 以下の制約条件が適用されます。

• PUSH の場合、 reglist が格納できるのは、 Lo レジスタ と LR だけです。

• POP の場合、 reglist が格納できるのは、 Lo レジスタ と PC だけです。

32 ビッ ト命令には、 以下の制約条件が適用されます。

• reglist に SP を格納できません。

• PUSH の場合、 reglist に PC を格納できません。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-37ID 0 8 1 7 1 1 Non-Confidential

Page 72: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

• POP の場合、 reglist に LR と PC のいずれかを格納できますが、 両方は格納でき

ません。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-38ID 0 8 1 7 1 1 Non-Confidential

Page 73: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

ARM 命令の reglist に関する制約条件

ARM プッシュ命令は、 reglist に SP および PC を持つこ とができますが、ARMv6T2 以降では、 reglist に SP または PC を含む命令は非推奨です。

ARM ポップ命令は、 reglist に SP を持つこ とはできませんが、 PC を持つこ とができ

ます。 reglist に PC と LR の両方を含むこれらの命令は、 ARMv6T2 以降では非推奨で

す。

PUSH {r0,r4-r7} PUSH {r2,lr} POP {r0,r10,pc} ; 16 ビ ッ ト バージ ョ ンは使用できない

関連項目

参照 : • メモ リ アクセス命令 (3-12 ページ)

• LDM、 STM (3-34 ページ)

• 条件コード (3-175 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-39ID 0 8 1 7 1 1 Non-Confidential

Page 74: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

3.3.11 RFE

例外から復帰する命令です。

構文

RFE{addr_mode}{cond} Rn{!}

各パラ メータには以下の意味があ り ます。

addr_mode 以下のいずれかを指定します。

IA 転送単位でアドレスをポス ト インク リ メ ン ト します (フル下

降スタ ッ ク)。

IB 転送単位でアドレスをプレインク リ メ ン ト します (ARM のみ)。

DA 転送単位でアドレスをポス トデク リ メ ン ト します (ARM のみ)。

DB 転送単位でアドレスをプレデク リ メン ト します。

addr_mode を省略する と、 デフォルトで IA (ポス ト インク リ メ ン ト ) が

使用されます。

cond 任意の条件コードを指定します。

注 cond を指定できるのは、 Thumb コードで、 前に IT 命令を使用した場合

のみです。 この命令は、 ARM では無条件命令です。

Rn ベースレジスタを指定します。 Rn に PC は指定できません。

! 任意に指定できる接尾文字です。 ! を指定する と、 終アドレスが Rn にライ トバッ ク されます。

使用法

SRS 命令を使用して復帰状態を保存した場合は、 RFE を使用して例外から復帰できま

す。 Rn は通常は SP であ り、 復帰状態情報は保存されます。

演算

Rn に保持されているアドレス と、 その次のアドレスから、 PC と CPSR をロード しま

す。 また、 必要に応じて Rn を更新できます。

注釈

RFE は、 アドレスを PC に書き込みます。 例外復帰後に使用される命令セッ トに合わ

せて、 このアドレスの境界整列を調整する必要があ り ます。

• ARM 命令セッ トに復帰するには、 PC に書き込むアドレスをワード境界で整列

する必要があ り ます。

• Thumb 命令セッ トに復帰するには、 PC に書き込むアドレスをハーフワード境

界で整列する必要があ り ます。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-40ID 0 8 1 7 1 1 Non-Confidential

Page 75: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

• Jazelle® 命令セッ トに復帰する場合、 PC に書き込むアドレスの境界整列につい

て、 制限はあ り ません。

上記の規則に従わなかった場合、 予測不可能な結果が生じます。 ただし、 適切な例外開始メカニズムの後で復帰するために命令を使用する場合、 フ ト ウェア側に特別な予防策は必要あ り ません。

アドレスがワード境界で整列されていない場合、 RFE は Rn の 下位 2 ビッ ト を無視し

ます。

アーキテクチャ上では、 RFE によって生成される、 メモ リの各ワードへのアクセスの

時間的順序が定義されていません。 アクセス順序の影響を受ける メモ リマップされた I/O 置では、 この命令を使用しないで下さい。

非特権モードでのソフ ト ウェア実行時には RFE を使用しないで下さい。

Thumb-2EE では RFE を使用しないで下さい。

アーキテクチャ

この ARM 命令は、 ARMv6 以降で使用できます。

この 32 ビッ ト Thumb 命令は、 ARMv6T2 以降で使用できます。 ただし、 ARMv7-M アーキテクチャでは使用できません。

この命令の 16 ビッ トバージ ョ ンはあ り ません。

RFE sp!

関連項目

概念

『アセンブラの使用』 :

• プロセッサモード、 および特権モード と非特権モードでのソフ ト ウェア実行(3-6 ページ) .

参照 : • SRS (3-42 ページ)

• 条件コード (3-175 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-41ID 0 8 1 7 1 1 Non-Confidential

Page 76: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

3.3.12 SRS

スタ ッ クに復帰状態をス ト アする命令です。

構文

SRS{addr_mode}{cond} sp{!}, #modenum

SRS{addr_mode}{cond} #modenum{!} ; UAL 以前の構文

各パラ メータには以下の意味があ り ます。

addr_mode 以下のいずれかを指定します。

IA 転送単位でアドレスをポス ト インク リ メ ン ト します。

IB 転送単位でアドレスをプレインク リ メ ン ト します (ARM のみ)。

DA 転送単位でアドレスをポス トデク リ メ ン ト します (ARM のみ)。

DB 転送単位でアドレスをプレデク リ メン ト します (完全降順ス

タ ッ ク)。

addr_mode を省略する と、 デフォルトで IA (ポス ト インク リ メ ン ト ) が

使用されます。 スタ ッ クを実装する と きなどに、 スタ ッ ク指向のアドレッシングモード接尾文字を使用するこ と もできます。

cond 任意の条件コードを指定します。

注 cond を指定できるのは、 Thumb コードで、 前に IT 命令を使用した場合

のみです。 この命令は、 ARM では無条件命令です。

! 任意に指定できる接尾文字です。 ! を指定する と、 modenum によって指定

されたモードの SP に 終アドレスがライ トバッ ク されます。

modenum バンク付き SP がベースレジスタ と して使用されるモードの番号を指定

します。 定義済みのモード番号だけを使用する必要があ り ます。

演算

SRS は、 modenum によって指定されたモードの SP が保持するアドレス とその次のワー

ドに、 現在のモードの LR と SPSR をそれぞれス ト アします。 また、 modenum によって

指定されたモードの SP を必要に応じて更新できます。 この命令は、 一般的にスタ ッ

クへのアクセスに使用される STM 命令と互換性があ り ます。

注 完全降順スタ ッ クに対しては、 SRSFD または SRSDB を使用する必要があ り ます。

使用法

SRS 命令を使用して、 自動的に選択された別のスタ ッ クに、 例外ハンド ラの復帰状態

をス ト アできます。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-42ID 0 8 1 7 1 1 Non-Confidential

Page 77: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

注釈

アドレスがワード境界で整列されていないと ころでは、 SRS は、 指定されたアドレス

の 下位 2 ビッ ト を無視します。

アーキテクチャ上では、 SRS によって生成される、 メモ リの各ワードへのアクセスの

時間的順序が定義されていません。 アクセス順序の影響を受ける メモ リマップされた I/O 置では、 この命令を使用しないで下さい。

ユーザモード とシステムモードには SPSR がないため、 SRS は使用しないで下さい。

Thumb-2EE. では SRS を使用しないで下さい。

modenum で監視モードを指定した場合、 SRS は非セキュア状態で使用できません。

アーキテクチャ

この ARM 命令は、 ARMv6 以降で使用できます。

この 32 ビッ ト Thumb 命令は、 ARMv6T2 以降で使用できます。 ただし、 ARMv7-M アーキテクチャでは使用できません。

この命令の 16 ビッ トバージ ョ ンはあ り ません。

R13_usr EQU 16 SRSFD sp,#R13_usr

関連項目

概念

『アセンブラの使用』 :

• LDM および STM を使用したスタ ッ クの実装 (5-26 ページ)

• プロセッサモード、 および特権モード と非特権モードでのソフ ト ウェア実行(3-6 ページ) .

参照 : • LDM、 STM (3-34 ページ)

• 条件コード (3-175 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-43ID 0 8 1 7 1 1 Non-Confidential

Page 78: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

3.3.13 LDREX と STREX

排他的レジスタロード / ス ト ア命令です。

構文

LDREX{cond} Rt, [Rn {, #offset}]

STREX{cond} Rd, Rt, [Rn {, #offset}]

LDREXB{cond} Rt, [Rn]

STREXB{cond} Rd, Rt, [Rn]

LDREXH{cond} Rt, [Rn]

STREXH{cond} Rd, Rt, [Rn]

LDREXD{cond} Rt, Rt2, [Rn]

STREXD{cond} Rd, Rt, Rt2, [Rn]

各パラ メータには以下の意味があ り ます。

cond 任意の条件コードを指定します。

Rd 復帰ステータスのデスティネーシ ョ ンレジスタを指定します。

Rt ロードまたはス ト アするレジスタを指定します。

Rt2 ダブルワードのロード と ス ト アに使用する 2 番目のレジスタを指定しま

す。

Rn メモ リ アドレスのベース となるレジスタを指定します。

offset Rn の値に適用される任意のオフセッ ト を指定します。 offset は Thumb-2 命令でのみ使用可能です。 offset を省略した場合、 オフセッ トは 0 と し

て処理されます。

LDREX

LDREX は、 メモ リからデータをロード します。

• 物理アドレスに共有 TLB 属性が設定されている場合、 LDREX は、 その物理アド

レスに現在のプロセッサの排他的アクセスを示すタグを付け、 他の物理アドレスに対するこのプロセッサの排他的アクセスタグをク リ アします。

• 共有 TLB 属性が設定されていない場合、 LDREX は、 実行中のプロセッサがま

だアクセスしていないタグ付きの物理アドレスがあるこ とを示すタグをけます。

STREX

STREX は、 メモ リへの条件付きス ト アを実行します。 条件を以下に示します。

• 物理アドレスに共有 TLB 属性が設定されておらず、 実行中のプロセッサによっ

てまだアクセスされていないタグ付きの物理アドレスが存在する場合は、 この命令によるス ト アが実行され、 タグがク リ アされて、 Rd に 0 が戻り ます。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-44ID 0 8 1 7 1 1 Non-Confidential

Page 79: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

• 物理アドレスに共有 TLB 属性が設定されておらず、 実行中のプロセッサによっ

てアクセスされていないタグ付きの物理アドレスが存在しない場合、 ス ト アは発生せず、 Rd に 1 が戻り ます。

• 物理アドレスに共有 TLB 属性が設定されており、 その物理アドレスに実行中の

プロセッサによる排他的アクセスのタグが付けられている場合は、 ス ト アが発生してタグがク リ アされ、 Rd に 0 が戻り ます。

• 物理アドレスに共有 TLB 属性が設定されており、 その物理アドレスに実行中の

プロセッサによる排他的アクセスのタグが付けられていない場合はス ト アは発生せず、 Rd に 1 が戻り ます。

制限

Rd、 Rt、 Rt2、 Rn のいずれにも PC は指定できません。

STREX では、 Rd に Rt、 Rt2、 または Rn と同じレジスタは指定できません。

ARM 命令には、 以下の制約条件が適用されます。

• SP は使用できますが、Rd、Rt、Rt2 のいずれかでの SP の使用は ARMv6T2 以降で

は非推奨です。

• LDREXD および STREXD では、 Rt に偶数番号のレジスタ (LR 以外) を指定する必要

があ り ます。

• Rt2 は R (t+1) であるこ とが必要です

• offset は使用できません。

Thumb 命令の場合 :

• SP は Rn に使用できますが、 Rd、 Rt、 または Rt2 のいずれにも指定できません。

• LDREXD では、 Rt と Rt2 に同じレジスタは指定できません。

• offset には、 0 ~ 1020 の範囲内にある 4 の倍数を指定できます。

使用法

LDREX 命令と STREX 命令を使用して、 マルチプロセッサの共有メモ リシステムでプロ

セス間通信を実装できます。

パフォーマンス上の理由から、 対応する LDREX 命令と STREX 命令の間に記述する命令

の数は 小限に抑えて下さい。

注 STREX 命令で使用されるアドレスは、 直前に実行された LDREX 命令で使用されたアド

レス と同一である必要があ り ます。 異なるアドレスに対して STREX 命令を実行する

と、 その結果は予測不可能になり ます。

アーキテクチャ

ARM LDREX と STREX は ARMv6 以降で使用できます。

ARM LDREXB、 LDREXH、 LDREXD、 STREXB、 STREXD、 および STREXH は ARMv6K 以降で使用で

きます。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-45ID 0 8 1 7 1 1 Non-Confidential

Page 80: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

これらの 32 ビッ ト Thumb 命令はいずれも ARMv6T2 以降で使用できます。 ただし、

LDREXD と STREXD は ARMv7-M アーキテクチャでは使用できません。

これらの命令の 16 ビッ トバージ ョ ンはあ り ません。

MOV r1, #0x1 ; ロ ッ ク取得値を ロードするtry LDREX r0, [LockAddr] ; ロ ッ ク値を ロー ドする

CMP r0, #0 ; ロ ッ ク フ リ ーか ど う か

STREXEQ r0, r1, [LockAddr] ; ロ ッ ク の取得を試みる

CMPEQ r0, #0 ; 成功し たかど う か

BNE try ; 失敗し た場合は再試行する

.... ; 成功し た場合はロ ッ ク取得済み

関連項目

参照 : • メモ リ アクセス命令 (3-12 ページ)

• 条件コード (3-175 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-46ID 0 8 1 7 1 1 Non-Confidential

Page 81: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

3.3.14 CLREX

排他をク リ アする命令です。 排他アクセスを要求しているアドレスが存在するこ とを示す、 実行中のプロセッサのローカルレコードをク リ アします。

構文

CLREX{cond}

以下の意味があ り ます。

cond 任意の条件コードを指定します。

注 cond を指定できるのは、 Thumb コードで、 前に IT 命令を使用した場合

のみです。 この命令は、 ARM では無条件命令です。

使用法

CLREX 命令を使用して、 密に結合されている排他アクセスモニタをオープンアクセス

状態に戻すこ とができます。 これによ り、 メモ リへのダ ミース ト アを行う必要がなくな り ます。

CLREX が、 アドレスから排他アクセスの要求がある実行中のプロセッサのグローバル

レコード も ク リ アするかど うかは、 実装によって定義されます。

アーキテクチャ

この ARM 命令は、 ARMv6K 以降で使用できます。

この 32 ビッ ト Thumb 命令は ARMv7 以降で使用できます。

16 ビッ トの Thumb CLREX 命令はあ り ません。

関連項目

リ ファレンス :

• メモ リ アクセス命令 (3-12 ページ)

• 条件コード (3-175 ページ)

• 『ARM アーキテクチャ リ ファレンスマニュアル』、http://infocenter.arm.com/help/topic/com.arm.doc.subset.arch.reference/index.html.

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-47ID 0 8 1 7 1 1 Non-Confidential

Page 82: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

3.3.15 SWP と SWPB

レジスタ と メモ リ間のデータスワ ップ命令です。

構文

SWP{B}{cond} Rt, Rt2, [Rn]

各パラ メータには以下の意味があ り ます。

cond 任意の条件コードを指定します。

B 任意に指定できる接尾文字です。 B を指定した場合は、 バイ トがスワ ッ

プされます。 指定しなかった場合は、 32 ビッ ト ワードがスワップされ

ます。

Rt デスティネーシ ョ ンレジスタを指定します。 Rt に PC は指定できません。

Rt2 ソースレジスタを指定します。Rt2 に Rt と同じレジスタを指定できます。

Rt2 に PC は指定できません。

Rn メモ リ内のアドレスを保持します。 Rn には、 Rt および Rt2 とは異なるレ

ジスタを指定する必要があ り ます。 Rn に PC は指定できません。

使用法

SWP と SWPB を使用して、 セマフォを実装できます。

• メモ リからのデータが Rt にロード されます。

• Rt2 の内容がメモ リに保存されます。

• Rt2 が Rt と同じレジスタになっている場合、 レジスタの内容がそのメモ リの場

所にある内容とスワ ップされます。

ARMv6 以降では、SWP および SWPB の使用はお勧めできません。LDREX および STREX 命令

を使用する と、 ARMv6 以降で洗練されたセマフォを実装できます。

アーキテクチャ

これらの ARM 命令は、 ARM アーキテクチャのすべてのバージ ョ ンで使用できます。

Thumb では SWP または SWPB 命令はあ り ません。

関連項目

参照 :

• メモ リ アクセス命令 (3-12 ページ)

• LDREX と STREX (3-44 ページ)

• 条件コード (3-175 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-48ID 0 8 1 7 1 1 Non-Confidential

Page 83: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

3.4 汎用データ処理命令

このセクシ ョ ンは以下のサブセクシ ョ ンから構成されています。

• フレキシブル第 2 オペランド (Operand2) (3-50 ページ)

• 定数と しての Operand2 (3-50 ページ)

• シフ トが任意に実行されるレジスタ と しての Operand2 (3-51 ページ)

• シフ ト演算 (3-51 ページ)

• ADD、 SUB、 RSB、 ADC、 SBC、 RSC (3-55 ページ)

キャ リー付きまたはキャ リーなしの加算、 減算、 および逆減算です。

• SUBS PC、 lr (3-59 ページ)

スタ ッ クをポップしない例外からの復帰です。

• AND、 ORR、 EOR、 BIC、 ORN (3-61 ページ)

論理積、 論理和、 排他的論理和 (XOR)、 論理和否定、 およびビッ ト ク リ アで

す。

• CLZ (3-64 ページ)

先行ゼロカウン ト命令です。

• CMP、 CMN (3-65 ページ)

比較命令と比較否定命令です。

• MOV、 MVN (3-67 ページ)

データ代入命令とデータを代入してビッ ト反転させる命令です。

• MOVT (3-70 ページ)

上位にデータを代入する命令です。

• TST、 TEQ (3-71 ページ)

テス ト命令と等価テス ト命令です。

• SEL (3-73 ページ)

APSR の GE フラグの状態に基づいて、各オペランドからバイ ト を選択する命令

です。

• REV、 REV16、 REVSH、 RBIT (3-75 ページ)

バイ ト またはビッ ト を反転する命令です。

• ASR、 LSL、 LSR、 ROR、 RRX (3-77 ページ)

算術右シフ ト命令です。

• SDIV、 UDIV (3-80 ページ)

符号付き除算と符号なし除算です。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-49ID 0 8 1 7 1 1 Non-Confidential

Page 84: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

3.4.1 フレキシブル第 2 オペランド (Operand2)

ARM および Thumb の汎用データ処理命令の多くに、 フレキシブルな第 2 オペランド

を使用できます。 このオペランドは、 各命令の構文の記述におい Operand2 と表記され

ています。

Operand2 は次のいずれかです。

• 定数

• レジスタ と任意に指定できるシフ ト

3.4.2 定数としての Operand2

Operand2 定数は次の形式で指定できます。

#constant

constant は数値を求める式です。

ARM 命令では、 constant には、 32 ビッ トのワード内で 8 ビッ トの値を右に任意の偶

数ビッ ト分ロテート して得られる任意の値を指定できます。

Thumb 命令では、 constant には以下の値を指定できます。

• 32 ビッ トのワード内で 8 ビッ トの値を左に任意のビッ ト数シフ ト して得られる

定数

• 0x00XY00XY 形式の任意の定数

• 0xXY00XY00 形式の任意の定数

• 0xXYXYXYXY 形式の任意の定数

注 上記の定数の X と Y は 16 進数の値です。

また、 少数の命令では、 constant によ り広い範囲の値を指定するこ とができます。 詳

細については、 各命令の説明を参照して下さい。

MOVS、 MVNS、 ANDS、 ORRS、 ORNS、 EORS、 BICS、 TEQ、 または TST 命令で Operand2 定数を使用

する と きに、 その定数が 255 よ り も大き く、 8 ビッ ト値のシフ トによって得られる場

合は、 キャ リーフラグは定数のビッ [31] に更新されます。 Operand2 がそれ以外の定

数の場合、 これらの命令はキャ リーフラグに影響しません。

命令置換

constant の値を使用できな くても、 論理反転または否定が使用できる場合は、 アセン

ブラは等価な命令を生成し、 constant を反転または否定します。

例えば、アセンブラは CMP Rd, #0xFFFFFFFE という命令を CMN Rd, #0x2 とい う等価の命令と

してアセンブルするこ とがあ り ます。

逆アセンブルリ ス ト と ソースコードを比較する場合は、 この点に注意して下さい。

アセンブラの --diag_warning 1645 コマンド ラ インオプシ ョ ンを使用して、 いつ命令置

換が発生したかを確認できます。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-50ID 0 8 1 7 1 1 Non-Confidential

Page 85: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

3.4.3 シフ トが任意に実行されるレジスタと しての Operand2

Operand2 レジスタは次の形式で指定できます。

Rm {, shift}

各パラ メータには以下の意味があ り ます。

Rm 第 2 オペランドのデータを保持するレジスタです。

shift 任意に指定できる、 定数または Rm に適用されるレジスタ制御シフ ト量

です。 以下の値を指定できます。

ASR #n n ビッ ト算術右シフ ト 、 1 ≤ n ≤ 32。

LSL #n n ビッ ト論理左シフ ト 、 1 ≤ n ≤ 31。

LSR #n n ビッ ト論理右シフ ト 、 1 ≤ n ≤ 32。

ROR #n n ビッ ト右ロテート、 1 ≤ n ≤ 31。

RRX 拡張付き 1 ビッ ト右ロテート。

type Rs レジスタ制御シフ トは、 ARM コードのみで使用可能です。 各

パラ メータには以下の意味があ り ます。

type ASR、 LSL、 LSR、 または ROR のいずれかを指定します。

Rs シフ ト量を渡すレジスタを指定します。 下位バイ

トのみが使用されます。

- 省略した場合、 シフ トは行われず、 LSL #0 を指定した場合と同

等になり ます。

シフ ト を省略するか、 LSL #0 を指定した場合、 Rm の値が命令で使用されます。

シフ ト を指定した場合、 シフ トは Rm の値に適用され、 結果の 32 ビッ ト値が命令で使

用されます。 ただし、 レジスタ Rm の値は変更されません。 また、 シフ ト と共にレジ

スタを指定した場合は、 特定の命令での使用時にキャ リーフラグが更新されます。

3.4.4 シフ ト演算

レジスタのシフ ト演算では、 レジスタ内のビッ トが指定のビッ ト数 (シフ ト長) だけ左または右に移動します。 レジスタのシフ トは以下の方法で実行できます。

• ASR、 LSR、 LSL、 ROR、 および RRX 命令によって、 直接実行できます。 結果はデス

ティネーシ ョ ンレジスタに書き込まれます。

• シフ ト を実行するレジスタ と して第 2 オペランドを指定する命令によって、

Operand2 の計算中に実行できます。 結果は命令によって使用されます。

指定可能なシフ ト長はシフ トの種類と命令によって異なり ます。 個々の命令やフレキシブル第 2 オペランドの説明を参照して下さい。 シフ ト長が 0 の場合、 シフ トは行

われません。 レジスタのシフ ト演算では、 指定したシフ ト長が 0 の場合を除き、

キャ リーフラグが更新されます。 以下のサセクシ ョ ンでは、 さまざまなシフ ト操作と、 それらの操作がキャ リーフラグに与える影響について説明します。 こ こでは、 Rm はシフ ト される値を保持するレジスタを、 n はシフ ト長を表します。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-51ID 0 8 1 7 1 1 Non-Confidential

Page 86: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

ASR

n ビッ トの算術右シフ トです。レジスタ Rm の左 32-n ビッ ト を右に n 桁、結果の右 32-n ビッ トに移動します。 レジスタの元のビッ ト [31] は結果の左 n ビッ トにコピーされ

ます。 詳細については、 図 3-1 を参照して下さい。

ASR #n 操作を使用する と、 レジスタ Rm の値を 2n で除算し、 その結果を負の無限大に

丸めるこ とができます。

命令が ASRS の場合、 あるいは MOVS、 MVNS、 ANDS、 ORRS、 ORNS、 EORS、 BICS、 TEQ、 または TST 命令と共に ASR #n を Operand2 で使用した場合、 キャ リーフラグは、 レジスタ Rm からシフ ト アウ ト された 後のビッ ト (ビッ ト [n-1]) に更新されます。

注 • n が 32 以上の場合、結果のすべてのビッ トが Rm のビッ ト [31] の値に設定されま

す。

• n が 32 以上でキャ リーフラグが更新される場合、 Rm のビッ ト [31] の値に更新さ

れます。

図 3-1 ASR #3

LSR

n ビッ トの論理右シフ トです。レジスタ Rm の左 32-n ビッ ト を右に n 桁、結果の右 32-n ビッ トに移動します。 さ らに、 結果の左 n ビッ ト を 0 に設定します。 図 3-2 を参照し

て下さい。

LSR #n 操作を使用する と、 レジスタ Rm の値を 2n で除算できます (値が符号なし整数

と見なされる場合)。

命令が LSRS の場合、 あるいは MOVS、 MVNS、 ANDS、 ORRS、 ORNS、 EORS、 BICS、 TEQ、 または TST 命令と共に LSR #n を Operand2 で使用した場合、 キャ リーフラグは、 レジスタ Rm からシフ ト アウ ト された 後のビッ ト (ビッ ト [n-1]) に更新されます。

注 • n が 32 以上の場合、 結果のすべてのビッ トが 0 にク リ アされます。

• n が 33 以上でキャ リーフラグが更新される場合、 0 に更新されます。

図 3-2 LSR #3

31 1 0

...2345

31 1 0

...

000

2345

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-52ID 0 8 1 7 1 1 Non-Confidential

Page 87: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

LSL

n ビッ トの論理左シフ トです。レジスタ Rm の右 32-n ビッ ト を左に n 桁、結果の左 32-n ビッ トに移動します。 さ らに、 結果の右 n ビッ ト を 0 に設定します。 図 3-3 を参照し

て下さい。

LSL #n 操作を使用する と、 レジスタ Rm の値を 2n で乗算できます (値が符号なし整数

または 2 の補数の符号付き整数と見なされる場合)。 このと き警告なしでオーバーフ

ローが発生する場合があ り ます。

命令が LSLS の場合、 あるいは MOVS、 MVNS、 ANDS、 ORRS、 ORNS、 EORS、 BICS、 TEQ、 または TST 命令と共に LSL #n (n はゼロ以外) を Operand2 で使用した場合、 キャ リーフラグ

は、 レジスタ Rm からシフ ト アウ ト された 後のビッ ト (ビッ ト [32-n]) に更新されま

す。 これらの命令を LSL #0 と共に使用した場合、 キャ リーフラグへの影響はあ り ま

せん。

注 • n が 32 以上の場合、 結果のすべてのビッ トが 0 にク リ アされます。

• n が 33 以上でキャ リーフラグが更新される場合、 0 に更新されます。

図 3-3 LSL #3

ROR

n ビッ トの右ロテートです。 レジスタ Rm の左 32-n ビッ ト を右に n 桁、 結果の右 32-n ビッ トに移動します。 さ らに、 レジスタの右 n ビッ ト を結果の左 n ビッ トに移動しま

す。 詳細については、 図 3-4 (3-54 ページ) を参照して下さい。

命令が RORS の場合、 あるいは MOVS、 MVNS、 ANDS、 ORRS、 ORNS、 EORS、 BICS、 TEQ、 または TST 命令と共に ROR #n を Operand2 で使用した場合、 キャ リーフラグは、 レジスタ Rm の後のビッ ト ローテーシ ョ ン (ビッ ト [n-1]) に更新されます。

注 • n が 32 の場合、 結果の値は Rm の値と同じになり ます。 また、 キャ リーフラグが

更新される場合は、 Rm のビッ ト [31] に更新されます。

• 32 を超えるシフ ト長 n と ROR を指定した場合、 シフ ト長 n-32 と ROR を指定した

場合と動作は同じになり ます。

31 1 0

...

000

2345

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-53ID 0 8 1 7 1 1 Non-Confidential

Page 88: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

図 3-4 ROR #3

RRX

拡張付き右ロテートです。 レジスタ Rm のビッ ト を 1 ビッ ト分右に移動します。 さ ら

に、 キャ リーフラグを結果のビッ ト [31] にコピーします。 詳細については、 図 3-5を参照して下さい。

命令が RRXS の場合、 あるいは MOVS、 MVNS、 ANDS、 ORRS、 ORNS、 EORS、 BICS、 TEQ、 または TST 命令と共に RRX を Operand2 で使用した場合、 キャ リーフラグは、 レジスタ Rm のビッ ト [0] に更新されます。

図 3-5 RRX

関連項目

概念

• フレキシブル第 2 オペランド (Operand2) (3-50 ページ) .

31 1 0

...2345

31 1 0... ...

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-54ID 0 8 1 7 1 1 Non-Confidential

Page 89: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

3.4.5 ADD、 SUB、 RSB、 ADC、 SBC、 RSC

キャ リー付きまたはキャ リーなしの加算、 減算、 および逆減算です。

構文

op{S}{cond} {Rd}, Rn, Operand2

op{cond} {Rd}, Rn, #imm12 ; Thumb-2 ADD および SUB のみ

各パラ メータには以下の意味があ り ます。

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

ADD 加算

ADC キャ リー付き加算

SUB 減算

RSB 逆減算

SBC キャ リー付き減算

RSC キャ リー付き逆減算 (ARM のみ)

S 任意に指定できる接尾文字です。 S が指定されている場合は、 演算結果

に基づいて条件コードフラグが更新されます。

cond 任意の条件コードを指定します。

Rd デスティネーシ ョ ンレジスタを指定します。

Rn 第 1 オペランドを保持するレジスタを指定します。

Operand2 フレキシブル第 2 オペランドを指定します。

imm12 0 ~ 4095 の範囲の値を指定します。

使用法

ADD 命令は、 Rn と Operand2 または imm12 の値を加算します。

SUB 命令は、 Operand2 または imm12 の値を Rn の値から減算します。

RSB (逆減算) 命令は、 Operand2 の値から Rn の値を減算します。 Operand2 にはさまざま

なオプシ ョ ンがあるので、 この命令は便利です。

ADC、 SBC、 および RSC を使用して、 マルチワード算術演算を構成できます。

ADC (キャ リー付き加算) 命令は、 Rn の値と Operand2 の値、 そしてキャ リーフラグも

含めて加算します。

SBC (キャ リー付き減算) 命令は、 Rn の値から Operand2 の値を減算します。 キャ リー

フラグがク リ アされている場合は、 結果から 1 が引かれます。

RSC (キャ リー付き逆減算) 命令は、 Operand2 の値から Rn の値を減算します。 キャ

リーフラグがク リ アされている場合は、 結果から 1 が引かれます。

状況によっては、 ある命令をアセンブラによって別の命令に置換できる場合があ ります。 逆アセンブルリ ス ト を参照する と きは、 この点に注意し下さい。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-55ID 0 8 1 7 1 1 Non-Confidential

Page 90: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

Thumb 命令での PC および SP の使用

これらの命令のほとんどでは、 Rd、 またはオペランドに PC (R15) は使用できませ

ん。

例外は以下のとおりです。

• 32 ビッ ト Thumb ADD 命令および SUB 命令で、 定数 Operand2 の値が 0 ~ 4095 の範

囲にあ り、 接尾文字 S が指定されていない場合は、 Rn に PC を使用できます。 こ

れらの命令は PC 相対アドレスを生成するのに役立ちます。 このと き、 PC のビッ ト [1] の値が 0 と して読み出されるので計算に使用するベースアドレスが常

にワード境界で整列されます。

• 両方のレジスタで PC を使用できない場合、16 ビッ ト Thumb ADD{cond} Rd, Rd, Rm 命令で PC を使用できます。 ただし、 次の 16 ビッ ト Thumb 命令は、 ARMv6T2 以降では非推奨です。

— ADD{cond} PC, SP, PC

— ADD{cond} SP, SP, PC

これらの命令のほとんどでは、 Rd、 またはオペランドに SP (R13) は使用できません。

ただし、 次の場合を除きます。

• ADD および SUB 命令では、 Rn に SP を使用できます。

• ADD{cond} SP, SP, SP は使用できますが、 ARMv6T2 以降では非推奨です。

• shift が省略されるか、LSL #1、LSL #2、または LSL #3 の場合、ADD{S}{cond} SP, SP,

Rm{,shift} および SUB{S}{cond} SP, SP, Rm{,shift} が使用できます。

ARM 命令での PC および SP の使用

レジスタ制御シフ ト を行うデータ処理命令の場合は、 Rd やオペランドに PC は使用で

きません。

ADD および SUB を除き、レジスタ制御シフ ト を行わない命令のオペランドでの PC の使

用は非推奨です。

レジスタ制御シフ ト を行わない SUB 命令では、 PC の使用は以下の場合を除き、 非推

奨です。

• Rd での PC の使用

• 命令 SUB{cond} Rd, Rn, #Constant の Rn での PC の使用

レジスタ制御シフ ト を行わない ADD 命令では、 PC の使用は以下の場合を除き、 非推

奨です。

• SP をレジスタに追加しない命令の Rd での PC の使用

• SP 以外の 2 つのレジスタを追加する命令の Rn での PC の使用と、 Rm での PC の使用

• 命令 ADD{cond} Rd, Rn, #Constant の Rn での PC の使用

Rn または Rm に PC (R15) を指定している場合、 使用される値は 「命令のアドレス + 8」 とな り ます。

Rd に PC を指定した場合、 以下のよ うにな り ます。

• 演算結果に対応するアドレスへの分岐が実行されます。

• S 接尾文字を使用する場合は、 SUBS pc,lr 命令を参照して下さい。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-56ID 0 8 1 7 1 1 Non-Confidential

Page 91: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

Rn での SP は ADD および SUB 命令で使用できますが、ADDS PC, SP, #Constant および SUBS PC, SP, #Constant は非推奨です。

ADD (レジスタ) および SUB (レジスタ) での SP は、 Rn が SP で shift が省略されてい

る場合、 または LSL #1、 LSL #2、 LSL #3 のいずれかの場合に使用できます。

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

注 ARM 命令での SP と PC の非推奨は、 ARMv6T2 以降のみです。

条件フラグ

S が指定されている場合、 これらの命令は演算結果に基づいて N、 Z、 C、 および V の各フラグを更新します。

16 ビッ ト命令

これらの命令は、 Thumb コード内では次の形式で使用できます。 これらは 16 ビッ ト

命令です。

ADDS Rd, Rn, #imm imm の範囲は 0 ~ 7 です。Rd と Rn は共に Lo レジスタである必要が

あ り ます。

ADDS Rd, Rn, Rm Rd、 Rn、 および Rm はいずれも Lo レジスタである必要があ り ます。

ADD Rd, Rd, Rm ARMv6 以前: Rd または Rm の少なく と も一方が Hi レジスタである

必要があ り ます。 ARMv6T2 以降 : この制約は適用されません。

ADDS Rd, Rd, #imm imm の範囲は 0 ~ 255 です。 Rd は Lo レジスタである必要があ り ま

す。

ADCS Rd, Rd, Rm Rd、 Rn、 および Rm はいずれも Lo レジスタである必要があ り ます。

ADD SP, SP, #imm imm の範囲は 0 ~ 508 です (ワード境界で整列します)。

ADD Rd, SP, #imm imm の範囲は 0 ~ 1020 です (ワード境界で整列します)。 Rd は Lo レジスタである必要があ り ます。

ADD Rd, pc, #imm imm の範囲は 0 ~ 1020 です (ワード境界で整列します)。 Rd は Lo レジスタである必要があ り ます。 この命令では、 PC のビッ ト [1:0] を 0 と して読み出します。

SUBS Rd, Rn, Rm Rd、 Rn、 および Rm はいずれも Lo レジスタである必要があ り ます。

SUBS Rd, Rn, #imm imm の範囲は 0 ~ 7 です。Rd と Rn は共に Lo レジスタである必要が

あ り ます。

SUBS Rd, Rd, #imm imm の範囲は 0 ~ 255 です。 Rd は Lo レジスタである必要があ り ま

す。

SBCS Rd, Rd, Rm Rd、 Rn、 および Rm はいずれも Lo レジスタである必要があ り ます。

SUB SP, SP, #imm imm の範囲は 0 ~ 508 です (ワード境界で整列します)。

RSBS Rd, Rn, #0 Rd と Rn は共に Lo レジスタである必要があ り ます。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-57ID 0 8 1 7 1 1 Non-Confidential

Page 92: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

ADD r2, r1, r3 SUBS r8, r6, #240 ; 結果に フ ラ グ を設定する

RSB r4, r4, #1280 ; 1280 か ら R4 の内容を減算する

ADCHI r11, r0, r3 ; C フ ラ グが設定され、 Z ; フ ラ グが ク リ ア された場合にのみ実行される

RSCSLE r0,r5,r0,LSL r4 ; 条件付き、 フ ラ グ設定

誤用例

RSCSLE r0,pc,r0,LSL r4 ; PC と レジス タ制御シ フ トは

; 一緒に指定できない

マルチワード演算の例

以下の 2 つの命令は、R2 と R3 に保持される 1 つの 64 ビッ ト整数を、R0 と R1 に保持さ

れる別の 64 ビッ ト整数に加算し、 その結果を R4 と R5 に返します。

ADDS r4, r0, r2 ; 下位ワー ド を加算する

ADC r5, r1, r3 ; 上位ワー ド を加算する

以下の命令は、 一方の 96 ビッ ト整数を他方の値から減算します。

SUBS r3, r6, r9 SBCS r4, r7, r10 SBC r5, r8, r11

上記の例では分かりやすくするために、 マルチワードの値に使用するレジスタを連続させていますが、 必ずしもそ うする必要はあ り ません。 例えば、 以下のよ うにするこ と もできます。

SUBS r6, r6, r9 SBCS r9, r2, r1 SBC r2, r8, r11

関連項目

概念 :

• フレキシブル第 2 オペランド (Operand2) (3-50 ページ)

• 命令置換 (3-50 ページ) .

『ARM プロセッサをターゲッ ト と したソフ ト ウェア開発』 :

• 第 6 章 プロセッサ例外処理 .

参照 :

• 並列加算と並列減算 (3-109 ページ)

• SUBS PC、 lr (3-59 ページ)

• ADR (PC 相対) (3-28 ページ)

• ADR (レジスタ相対) (3-30 ページ)

• ADRL 疑似命令 (3-166 ページ)

• 条件コード (3-175 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-58ID 0 8 1 7 1 1 Non-Confidential

Page 93: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

3.4.6 SUBS PC、 lr

スタ ッ クから何もポップしない例外からの復帰です。

構文

SUBS{cond} pc, lr, #imm ; ARM および Thumb コ ー ド

MOVS{cond} pc, lr ; ARM および Thumb コ ー ド

op1S{cond} pc, Rn, #imm ; ARM コ ー ドのみで、 非推奨

op1S{cond} pc, Rn, Rm {, shift} ; ARM コ ー ドのみで、 非推奨

op2S{cond} pc, #imm ; ARM コ ー ドのみで、 非推奨

op2S{cond} pc, Rm {, shift} ; ARM コ ー ドのみで非推奨

以下の意味があ り ます。

op1 ADC、 ADD、 AND、 BIC、 EOR、 ORN、 ORR、 RSB、 RSC、 SBC、 および SUB のいずれか

を指定します。

op2 MOV および MVN のいずれかを指定します。

cond 任意の条件コードを指定します。

imm イ ミディエート値を指定します。 Thumb コードでの範囲は 0 ~ 255 に制

限されています。 ARM コードではフレキシブル第 2 オペランドを指定

します。

Rn 第 1 オペランドレジスタを指定します。 LR 以外のレジスタの使用は非推

奨です。

Rm オプシ ョ ンでシフ ト された第 2 または唯一のオペランドレジスタを指定

します。

shift 任意の条件コードを指定します。

使用法

SUBS pc, lr, #imm では、 リ ンクレジスタから値を減算し、 結果を PC にロード して、

SPSR を CPSR にコピーします。

スタ ッ クに復帰状態がない場合、SUBS pc, lr, #imm を使用して例外から復帰できます。

#imm の値は、 復帰する例外の種類によって異な り ます。

注釈

SUBS pc, lr, #imm では、 アドレスを PC に書き込みます。 例外復帰後に使用される命

令セッ トに合わせて、 このアドレスの境界整列を調整する必要があ り ます。

• ARM 命令セッ トに復帰するには、 PC に書き込むアドレスをワード境界で整列

する必要があ り ます。

• Thumb 命令セッ トに復帰するには、 PC に書き込むアドレスをハーフワード境

界で整列する必要があ り ます。

• Jazelle 命令セッ トに復帰する場合、 PC に書き込むアドレスの境界整列につい

て、 制限はあ り ません。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-59ID 0 8 1 7 1 1 Non-Confidential

Page 94: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

上記の規則に従わなかった場合、 予測不可能な結果が生じます。 ただし、 適切な例外開始メカニズムの後で復帰するために命令を使用する場合、 フ ト ウェア側に特別な予防策は必要あ り ません。

Thumb では、SUBS{cond} pc, lr, #imm のみが有効な命令です。MOVS pc, lr は SUBS pc, lr, #0 と同じ意味です。 他の命令は定義されていません。

ARM では、 SUBS{cond} pc, lr, #imm および MOVS{cond} pc, lr のみが有効な命令です。

ARMv6T2 以降では、 他の命令は非推奨です。

注意 これらの命令は、 ユーザモードやシステムモードでは使用しないで下さい。 このよ

う な命令による影響は予測不可能な うえ、 アセンブル時にアセブラによる警告が生成されません。

アーキテクチャ

この ARM 命令は、 ARM アーキテクチャのすべてのバージ ョ ンで使用できます。

この 32 ビッ ト Thumb 命令は、 ARMv6T2 以降で使用できます。 ただし、 ARMv7-M アーキテクチャでは使用できません。

この命令の 16 ビッ ト Thumb バージ ョ ンはあ り ません。

関連項目

概念 :

• フレキシブル第 2 オペランド (Operand2) (3-50 ページ) .

参照 :

• ADD、 SUB、 RSB、 ADC、 SBC、 RSC (3-55 ページ)

• AND、 ORR、 EOR、 BIC、 ORN (3-61 ページ)

• MOV、 MVN (3-67 ページ)

• 条件コード (3-175 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-60ID 0 8 1 7 1 1 Non-Confidential

Page 95: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

3.4.7 AND、 ORR、 EOR、 BIC、 ORN

論理積、 論理和、 排他的論理和 (XOR)、 ビッ ト ク リ ア、 および論理和否定です。

構文

op{S}{cond} Rd, Rn, Operand2

各パラ メータには以下の意味があ り ます。

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

AND 論理積

ORR 論理和

EOR 排他的論理和 (XOR)BIC 論理積否定

ORN 論理和否定 (Thumb のみ)

S 任意に指定できる接尾文字です。 S が指定されている場合は、 演算結果

に基づいて条件コードフラグが更新されます。

cond 任意の条件コードを指定します。

Rd デスティネーシ ョ ンレジスタを指定します。

Rn 第 1 オペランドを保持するレジスタを指定します。

Operand2 フレキシブル第 2 オペランドを指定します。

使用法

AND、 EOR、 および ORR の各命令は、 Rn と Operand2 の値に対し、 それぞれビッ ト ごとの

論理積、 排他的論理和 (XOR)、 および論理和を取り ます。

BIC (ビ ッ ト ク リ ア) 命令は、 Rn 内のビッ ト と、 Operand2 の値に含まれる、 対応する各

ビッ トの補数との論理積を取り ます。

ORN Thumb 命令は、 Rn 内のビッ ト と、 Operand2 の値に含まれる、 対応する各ビッ トの

補数との論理和を取り ます。

状況によっては、 アセンブラが BIC を AND に、AND を BIC に、ORN を ORR に、ORR を ORN に置き換える場合があ り ます。 逆アセンブルリ ス ト を参照する と きは、 この点に注意して下さい。

Thumb-2 命令での PC の使用

すべての命令で、 Rd、 または任意のオペランドに PC (R15) は使用できません。

ARM 命令での PC および SP の使用

PC および SP はこれらの ARM 命令で使用できますが、 それらは ARMv6T2 以降では

非推奨です。

Rn に PC を指定している場合、 使用される値は 「命令のアドレス + 8」 とな り ます。

Rd に PC を指定した場合、 以下のよ うにな り ます。

• 演算結果に対応するアドレスへの分岐が実行されます。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-61ID 0 8 1 7 1 1 Non-Confidential

Page 96: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

• S 接尾文字を使用する場合は、 SUBS pc,lr 命令を参照して下さい。

レジスタ制御シフ ト を行うデータ処理命令の場合は、 オペランドに PC は使用できま

せん。

条件フラグ

S が指定されている場合、 これらの命令では、 以下のよ うにな り ます。

• 結果に応じて N フラグおよび Z フラグを更新します。

• Operand2 の計算中に C フラグを更新するこ とが可能です。

• V フラグは更新しません。

16 ビッ ト命令

これらの命令は、 Thumb コード内では次の形式で使用できます。 これらは 16 ビッ ト

命令です。

ANDS Rd, Rd, Rm Rd と Rm は共に Lo レジスタである必要があ り ます。

EORS Rd, Rd, Rm Rd と Rm は共に Lo レジスタである必要があ り ます。

ORRS Rd, Rd, Rm Rd と Rm は共に Lo レジスタである必要があ り ます。

BICS Rd, Rd, Rm Rd と Rm は共に Lo レジスタである必要があ り ます。

初の 3 つの例は、OPS Rd, Rm, Rd を指定しても問題はあ り ません。命令は変わり ませ

ん。

AND r9,r2,#0xFF00 ORREQ r2,r0,r5 EORS r0,r0,r3,ROR r6 ANDS r9, r8, #0x19 EORS r7, r11, #0x18181818 BIC r0, r1, #0xab ORN r7, r11, lr, ROR #4 ORNS r7, r11, lr, ASR #32

誤用例

EORS r0,pc,r3,ROR r6 ; PC と レジス タ制御シ フ トは

; 一緒に指定できない

関連項目

概念 :

• フレキシブル第 2 オペランド (Operand2) (3-50 ページ)

• 命令置換 (3-50 ページ) .

『ARM プロセッサをターゲッ ト と したソフ ト ウェア開発』 :

• 第 6 章 プロセッサ例外処理 .

参照 :

• SUBS PC、 lr (3-59 ページ)

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-62ID 0 8 1 7 1 1 Non-Confidential

Page 97: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

• 条件コード (3-175 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-63ID 0 8 1 7 1 1 Non-Confidential

Page 98: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

3.4.8 CLZ

先行ゼロカウン ト命令です。

構文

CLZ{cond} Rd, Rm

以下の意味があ り ます。

cond 任意の条件コードを指定します。

Rd デスティネーシ ョ ンレジスタを指定します。

Rm オペランドレジスタを指定します。

使用法

CLZ 命令は Rm の値に含まれる先行ゼロの数をカウン ト し、 結果を Rd に返します。

ソースレジスタに設定されているビッ トがない場合の結果は 32 とな り、 ビッ ト 31 が設定されている場合の結果はゼロにな り ます。

レジスタの制約条件

オペランドに PC は使用できません。

SP は これらの ARM 命令で使用できますが、 これは ARMv6T2 以降では非推奨です。

Thumb 命令では SP は使用できません。

条件フラグ

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

アーキテクチャ

この ARM 命令は、 ARMv5T 以降で使用できます。

この 32 ビッ ト Thumb 命令は ARMv6T2 以降で使用できます。

この命令の 16 ビッ ト Thumb バージ ョ ンはあ り ません。

CLZ r4,r9 CLZNE r2,r3

レジスタ Rm の値を正規化するには、CLZ Thumb 命令を使用し、結果と して返された Rd 値の分、 Rm を左シフ ト します。 Rm が 0 の場合にフラグを設定するには、 MOV ではなく MOVS を使用します。

CLZ r5, r9MOVS r9, r9, LSL r5

関連項目

参照 :

• 条件コード (3-175 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-64ID 0 8 1 7 1 1 Non-Confidential

Page 99: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

3.4.9 CMP、 CMN

比較命令と比較否定命令です。

構文

CMP{cond} Rn, Operand2

CMN{cond} Rn, Operand2

各パラ メータには以下の意味があ り ます。

cond 任意の条件コードを指定します。

Rn 第 1 オペランドを保持する ARM レジスタを指定します。

Operand2 フレキシブル第 2 オペランドを指定します。

使用法

これらの命令は、 レジスタ内の値と Operand2 を比較します。 結果に基づいて条件フラ

グを更新しますが、 結果はどのレジスタにも入れません。

CMP 命令は、 Rn の値から Operand2 の値を減算します。 結果が破棄されるこ とを除けば、

SUBS 命令と同じです。

CMN 命令は Operand2 の値を Rn の値に加算します。 結果が破棄されるこ とを除けば、

ADDS 命令と同じです。

状況によっては、 アセンブラによって CMN を CMP に、 CMP を CMN に置換できる場合があ

り ます。 逆アセンブルリ ス ト を参照する と きは、 この点に注意して下さい。

ARM および Thumb 命令での PC の使用

レジスタ制御シフ ト を行うデータ処理命令の場合は、 オペランドに PC は使用できま

せん。

レジスタ制御シフ ト を行わないこれらの ARM 命令では PC (R15) を使用できます

が、 これは ARMv6T2 以降では非推奨です。

ARM 命令で Rn に PC を指定している場合、使用される値は 「命令のアドレス + 8」 と

な り ます。

これらの Thumb 命令では、 オペランドに PC は使用できません。

ARM および Thumb 命令での SP の使用

Rn での SP は、 ARM および Thumb 命令で使用できます。

Rm での SP は ARM 命令で使用できますが、 これは ARMv6T2 以降では非推奨です。

Rm での SP は 16 ビッ ト Thumb CMP Rn, Rm 命令で使用できますが、 これは ARMv6T2 以降では非推奨です。 他の Rm での SP の使用は、 Thumb では許可されていません。

条件フラグ

これらの命令は、 演算結果に基づいて N、 Z、 C、 および V の各フラグを更新します。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-65ID 0 8 1 7 1 1 Non-Confidential

Page 100: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

16 ビッ ト命令

これらの命令は、 Thumb コード内では次の形式で使用できます。 これらは 16 ビッ ト

命令です。

CMP Rn, Rm Lo レジスタの制約は適用されません。

CMN Rn, Rm Rn と Rm は共に Lo レジスタである必要があ り ます。

CMP Rn, #imm Rn は Lo レジスタである必要があ り ます。 imm の範囲は 0 ~ 255 です。

CMP r2, r9 CMN r0, #6400 CMPGT sp, r7, LSL #2

誤用例

CMP r2, pc, ASR r0 ; PC と レジス タ制御シ フ トは一緒に使用できない

関連項目

概念 :

• フレキシブル第 2 オペランド (Operand2) (3-50 ページ)

• 命令置換 (3-50 ページ) .

参照 :

• 条件コード (3-175 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-66ID 0 8 1 7 1 1 Non-Confidential

Page 101: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

3.4.10 MOV、 MVN

データ代入命令とデータを代入してビッ ト反転させる命令です。

構文

MOV{S}{cond} Rd, Operand2

MOV{cond} Rd, #imm16

MVN{S}{cond} Rd, Operand2

各パラ メータには以下の意味があ り ます。

S 任意に指定できる接尾文字です。 S が指定されている場合は、 演算結果

に基づいて条件コードフラグが更新されます。

cond 任意の条件コードを指定します。

Rd デスティネーシ ョ ンレジスタを指定します。

Operand2 フレキシブル第 2 オペランドを指定します。

imm16 0 ~ 65535 の範囲の値を指定します。

使用法

MOV 命令は Operand2 の値を Rd にコピーします。

MVN 命令は Operand2 の値を取得し、 その値にビッ ト ごとの論理 NOT 演算を実行して、

結果を Rd に返します。

状況によっては、 アセンブラによって MVN を MOV に、 MOV を MVN に置換できる場合があ

り ます。 逆アセンブルリ ス ト を参照する と きは、 この点に注意して下さい。

32 ビッ ト Thumb MOV および MVN での PC および SP の使用

PC (R15) は、 32 ビッ ト Thumb MOV または MVN 命令では Rd または Operand2 に使用でき

ません。 次の例外を除き、 SP (R13) は Rd または Operand2 に使用できません。

• MOV{cond}.W Rd, SP、 Rd に SP は使用不可

• MOV{cond}.W SP, Rm、 Rm に SP は使用不可

16 ビッ ト Thumb での PC および SP の使用

16 ビッ ト Thumb MOV{cond} Rd, Rm 命令では PC と SP を使用できますが、 Rd と Rm の両

方に SP または PC を指定したこれらの命令の使用は、 ARMv6T2 以降で非推奨です。

他の MOV{S} または MVN{S} 16 ビッ ト Thumb 命令では、 PC または SP は使用できませ

ん。

ARM MOV と MVN での PC および SP の使用

レジスタ制御シフ ト を行うデータ処理命令の場合は、 Rd やオペランドに PC は使用で

きません。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-67ID 0 8 1 7 1 1 Non-Confidential

Page 102: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

レジスタ制御シフ ト を行わない命令では、 PC の使用は以下の場合を除き、 非推奨で

す。

• MOVS PC, LR

• MOV PC, Rm、 Rm に PC または SP は使用不可

• MOV Rd, PC、 Rd に PC または SP は使用不可

SP は Rd または Rm で使用できます。 ただし、 次の場合を除き、 これらは非推奨です。

• MOV SP, Rm、 Rm に PC または SP は使用不可

• MOV Rd, SP、 Rd に PC または SP は使用不可

注 • #imm16 値が、 許可された Operand2 値でない場合の MOV Rd, #imm16 、 Rd には PC は

使用できません。レジスタ制御シフ ト なしの Operand2 を使う形式では PC を使用

できます。

• ARM 命令での PC と SP の非推奨は、 ARMv6T2 以降のみが該当します。

Rm に PC を指定している場合、 使用される値は 「命令のアドレス + 8」 とな り ます。

Rd に PC を指定した場合、 以下のよ うにな り ます。

• 演算結果に対応するアドレスへの分岐が実行されます。

• S 接尾文字を使用する場合は、 SUBS pc,lr 命令を参照して下さい。

条件フラグ

S が指定されている場合、 これらの命令では、 以下のよ うにな り ます。

• 結果に応じて N フラグおよび Z フラグを更新します。

• Operand2 の計算中に C フラグを更新するこ とが可能です。

• V フラグは更新しません。

16 ビッ ト命令

これらの命令は、 Thumb コード内では次の形式で使用できます。 これらは 16 ビッ ト

命令です。

MOVS Rd, #imm Rd は Lo レジスタである必要があ り ます。 imm の範囲は 0 ~ 255 です。

MOVS Rd, Rm Rd と Rm は共に Lo レジスタである必要があ り ます。

MOV Rd, Rm ARMv6 以前のアーキテクチャでは、 Rd と Rm のいずれか一方また

は両方が Hi レジスタである必要があ り ます。 ARMv6 以降のバー

ジ ョ ンに、 この制限は適用されません。

アーキテクチャ

#imm16 形式の ARM 命令は、 ARMv6T2 以降で使用できます。 その他の形式の ARM 命令は ARM アーキテクチャのすべてのバージ ョ ンで使用できます。

これらの 32 ビッ ト Thumb 命令は、 ARMv6T2 以降で使用できます。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-68ID 0 8 1 7 1 1 Non-Confidential

Page 103: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

これらの 16 ビッ ト Thumb 命令は、 ARM アーキテクチャのすべての T バリ アン トで

使用できます。

MVNNE r11, #0xF000000B ; ARM のみ。 こ の イ ミ デ ィ エー ト値は

; T2 では使用不可

誤用例

MVN pc,r3,ASR r0 ; PC と レジス タ制御シ フ トは一緒に使用できない

関連項目

概念 :

• フレキシブル第 2 オペランド (Operand2) (3-50 ページ)

• 命令置換 (3-50 ページ) .

『ARM プロセッサをターゲッ ト と したソフ ト ウェア開発』 :

• 第 6 章 プロセッサ例外処理 .

参照 :

• 条件コード (3-175 ページ)

• SUBS PC、 lr (3-59 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-69ID 0 8 1 7 1 1 Non-Confidential

Page 104: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

3.4.11 MOVT

上位にデータを代入する命令です。 レジスタの下位ハーフワードに影響を及ぼさずに、 上位ハーフワードに 16 ビッ トのイ ミディエート値を書き込みます。

構文

MOVT{cond} Rd, #imm16

各パラ メータには以下の意味があ り ます。

cond 任意の条件コードを指定します。

Rd デスティネーシ ョ ンレジスタを指定します。

imm16 16 ビッ トのイ ミディエート値を指定します。

使用法

MOVT は、 imm16 を Rd [31:16] に書き込みます。 この書き込みが Rd [15:0] に影響するこ と

はあ り ません。

MOV と MOVT の命令対で、 任意の 32 ビッ ト イ ミディエート値を生成できます。 この命

令対を効率的に生成するために、 アセンブラは MOV32 疑似命令を実装します。

レジスタの制約条件

ARM 命令または Thumb 命令では PC は使用できません。

Rd での SP は ARM 命令で使用できますが、 これは非推奨です。

Thumb 命令では SP は使用できません。

条件フラグ

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

アーキテクチャ

この ARM 命令は、 ARMv6T2 以降で使用できます。

この 32 ビッ ト Thumb 命令は ARMv6T2 以降で使用できます。

この命令の 16 ビッ ト Thumb バージ ョ ンはあ り ません。

関連項目

参照 :

• MOV32 疑似命令 (3-169 ページ)

• 条件コード (3-175 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-70ID 0 8 1 7 1 1 Non-Confidential

Page 105: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

3.4.12 TST、 TEQ

ビッ ト テス ト と等価テス トです。

構文

TST{cond} Rn, Operand2

TEQ{cond} Rn, Operand2

各パラ メータには以下の意味があ り ます。

cond 任意の条件コードを指定します。

Rn 第 1 オペランドを保持する ARM レジスタを指定します。

Operand2 フレキシブル第 2 オペランドを指定します。

使用法

これらの命令は、 レジスタ内の値を Operand2 に対してテス ト します。 結果に基づいて

条件フラグを更新しますが、 結果はどのレジスタにも入れません。

TST 命令は Rn の値と Operand2 の値を使用してビッ ト ごとの論理積を取り ます。 結果が

破棄されるこ とを除けば、 ANDS 命令と同じです。

TEQ 命令は Rn の値と Operand2 の値を使用してビッ ト ごとの排他的論理和 (XOR) を取

り ます。 結果が破棄されるこ とを除けば、 EORS 命令と同じです。

2 つの値が等しいかど うかをテス トするには TEQ 命令を使用します。 その際、 CMP とは

異な り、 V フラグまたは C フラグに影響するこ とはあ り ません。

TEQ は値の符号をテス トするのにも役立ちます。 比較後の N フラグは、 2 つのオペラ

ンドの符号ビッ トの排他的論理和 (XOR) にな り ます。

レジスタの制約条件

これらの Thumb 命令では、 Rn および Operand2 に SP または PC は使用できません。

これらの ARM 命令では、 ARMv6T2 以降、 SP または PC の使用は非推奨です。

ARM 命令には、 以下の制約条件が適用されます。

• Rn に PC (R15) を指定している場合、 使用される値は 「命令のアドレス + 8」 と

な り ます。

• レジスタ制御シフ ト を行うデータ処理命令の場合は、 オペランドに PC は使用

できません。

条件フラグ

これらの命令では、 以下のよ うにな り ます。

• 結果に応じて N フラグおよび Z フラグを更新します。

• Operand2 の計算中に C フラグを更新するこ とが可能です。

• V フラグは更新しません。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-71ID 0 8 1 7 1 1 Non-Confidential

Page 106: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

16 ビッ ト命令

TST 命令は、 Thumb コード内では次の形式で使用できます。 これは 16 ビッ ト命令で

す。

TST Rn, Rm Rn と Rm は共に Lo レジスタである必要があ り ます。

アーキテクチャ

これらの ARM 命令は、 ARM のすべてのアーキテクチャで使用できます。

TST Thumb 命令は、 Thumb のすべてのアーキテクチャで使用できます。

TEQ Thumb 命令は、 ARMv6T2 以降で使用できます。

TST r0, #0x3F8 TEQEQ r10, r9 TSTNE r1, r5, ASR r1

誤用例

TEQ pc, r1, ROR r0 ; PC と レジス タ制御シ フ トは

; 一緒に指定できない

関連項目

概念 :

• フレキシブル第 2 オペランド (Operand2) (3-50 ページ) .

参照 :

• 条件コード (3-175 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-72ID 0 8 1 7 1 1 Non-Confidential

Page 107: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

3.4.13 SEL

APSR の GE フラグの状態に基づいて、 各オペランドからバイ ト を選択する命令で

す。

構文

SEL{cond} {Rd}, Rn, Rm

各パラ メータには以下の意味があ り ます。

cond 任意の条件コードを指定します。

Rd デスティネーシ ョ ンレジスタを指定します。

Rn 第 1 オペランドを保持するレジスタを指定します。

Rm 第 2 オペランドを保持するレジスタを指定します。

演算

SEL 命令は、 APSR の GE フラグに基づいて、 Rn または Rm からバイ ト を選択します。

• GE[0] が設定されている場合は、 Rd[7:0] が Rn[7:0] から取得され、 それ以外の場

合は Rm[7:0] から取得されます。

• GE[1] が設定されている場合は、 Rd[15:8] が Rn[15:8] から取得され、 それ以外の

場合は Rm[15:8] から取得されます。

• GE[2] が設定されている場合は、 Rd[23:16] が Rn[23:16] から取得され、 それ以外

の場合は Rm[23:16] から取得されます。

• GE[3] が設定されている場合は、 Rd[31:24] が Rn[31:24] から取得され、 それ以外

の場合は Rm[31:24] から取得されます。

使用法

SEL 命令は、 符号付き並列命令の後に使用します。 この命令を使用して、 複数バイ ト

データまたはハーフワードデータの 大値や 小値を選択できます。

レジスタの制約条件

レジスタには PC は使用できません。

SP は ARM 命令で使用できますが、 これらは ARMv6T2 以降では非推奨です。Thumb 命令では SP は使用できません。

条件フラグ

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

アーキテクチャ

この ARM 命令は、 ARMv6 以降で使用できます。

これらの 32 ビッ ト Thumb 命令は、 ARMv6T2 以降で使用できます。 ARMv7-M アー

キテクチャでは、 これらは ARMv7E-M 実装でだけ使用できます。

この命令の 16 ビッ ト Thumb バージ ョ ンはあ り ません。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-73ID 0 8 1 7 1 1 Non-Confidential

Page 108: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

SEL r0, r4, r5 SELLT r4, r0, r4

以下の命令シーケンスは、 R1 と R2 の各バイ トの符号なし 小値と等し くなるよ うに R4 の対応するバイ ト を設定します。

USUB8 r4, r1, r2 SEL r4, r2, r1

関連項目

参照 : • 並列加算と並列減算 (3-109 ページ)

• 条件コード (3-175 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-74ID 0 8 1 7 1 1 Non-Confidential

Page 109: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

3.4.14 REV、 REV16、 REVSH、 RBIT

ワード内またはハーフワード内で、 バイ ト またはビッ ト を反転する命令です。

構文

op{cond} Rd, Rn

各パラ メータには以下の意味があ り ます。

op 以下のいずれかを指定します。

REV ワード内のバイ ト順序を反転させます。

REV16 各ハーフワード内のバイ ト順序を独自に反転させます。

REVSH 下位ハーフワード内のバイ ト順序を反転させ、 それを 32 ビッ

トに符号拡張します。

RBIT 32 ビッ ト ワード内のビッ ト順序を反転させます。

cond 任意の条件コードを指定します。

Rd デスティネーシ ョ ンレジスタを指定します。

Rn オペランドを保持するレジスタを指定します。

使用法

以下の命令を使用して、 エンディアン方式を変更できます。

REV 32 ビッ トのビッグエンディアンデータを リ トルエンディアンデータに

変換するか、 32 ビッ トの リ トルエンディアンデータをビッグエンディ

アンデタに変換します。

REV16 16 ビッ トのビッグエンディアンデータを リ トルエンディアンデータに

変換するか、 16 ビッ トの リ トルエンディアンデータをビッグエンディ

アンデタに変換します。

REVSH 次のいずれかの変換を行います。

• 16 ビッ トの符号付きビッグエンディアンデータを 32 ビッ トの符号

付き リ トルエンディアンデータに変換します。

• 16 ビッ トの符号付き リ トルエンディアンデータを 32 ビッ トの符号

付きビッグエンディアンデータに変換します。

レジスタの制約条件

レジスタには PC は使用できません。

SP は ARM 命令で使用できますが、 これらは ARMv6T2 以降では非推奨です。Thumb 命令では SP は使用できません。

条件フラグ

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

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-75ID 0 8 1 7 1 1 Non-Confidential

Page 110: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

16 ビッ ト命令

これらの命令は、 Thumb コード内では次の形式で使用できます。 これらは 16 ビッ ト

命令です。

REV Rd, Rm Rd と Rm は共に Lo レジスタである必要があ り ます。

REV16 Rd, Rm Rd と Rm は共に Lo レジスタである必要があ り ます。

REVSH Rd, Rm Rd と Rm は共に Lo レジスタである必要があ り ます。

アーキテクチャ

RBIT を除く上記の ARM 命令は、 ARMv6 以降で使用できます。

ARM 命令 RBIT は、 ARMv6T2 以降で使用できます。

これらの 32 ビッ ト Thumb 命令は、 ARMv6T2 以降で使用できます。

これらの 16 ビッ ト Thumb 命令は、 ARMv6 以降で使用できます。

REV r3, r7 REV16 r0, r0 REVSH r0, r5 ; 符号付きハー フ ワー ド を反転させる

REVHS r3, r7 ; " よ り大きい " ま たは "同じ " 条件を適用し て反転させる RBIT r7, r8

関連項目

参照 :

• 条件コード (3-175 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-76ID 0 8 1 7 1 1 Non-Confidential

Page 111: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

3.4.15 ASR、 LSL、 LSR、 ROR、 RRX

算術右シフ ト 、 論理左シフ ト、 論理右シフ ト 、 右ロテート、 および拡張付き右ロテートです。

これらの命令は、 レジスタオペランドがシフ ト される MOV 命令と同じ意味です。

構文

op{S}{cond} Rd, Rm, Rs

op{S}{cond} Rd, Rm, #sh

RRX{S}{cond} Rd, Rm

各パラ メータには以下の意味があ り ます。

op ASR、 LSL、 LSR、 または ROR のいずれかを指定します。

S 任意に指定できる接尾文字です。 S が指定されている場合は、 演算結果

に基づいて条件コードフラグが更新されます。

Rd デスティネーシ ョ ンレジスタを指定します。

Rm 第 1 オペランドを保持するレジスタを指定します。 このオペランドは右

にシフ ト されます。

Rs Rm の値に適用するシフ ト値を保持するレジスタを指定します。 下位バ

イ トのみが使用されます。

sh 定数シフ ト を指定します。 指定可能な値の範囲は、 命令によって異なり

ます。

ASR 可能なシフ ト 1 ~ 32LSL 可能なシフ ト 0 ~ 31LSR 可能なシフ ト 1 ~ 32ROR 可能なシフ ト 1 ~ 31

使用法

ASR は、 レジスタの内容を 2 のべき乗で除算した、 符号付きの値を求めます。 空の左

のビッ ト位置には、 符号ビッ トがコピーされます。

LSL は、 レジスタを 2 のべき乗で乗算した値を求めます。 LSR は、 レジスタを 2 の可変

乗で除算した、 符号なしの値を求めます。 いずれの命令でも、 空のビッ ト位置には 0 が挿入されます。

ROR は、 レジスタの内容を任意の値でロテート した値を求めます。 ロテートの結果右

端から溢れたビッ トは、 空の左のビッ ト位置に挿入されます。

RRX は、 レジスタの内容を右に 1 ビッ ト シフ ト した値を求めます。 古いキャ リーフラ

グはビッ ト [31] にシフ ト されます。 接尾文字 S を指定した場合、 古いビッ ト [0] がキャ リーフラグに配置されます。

Thumb コードにおける制限事項

Thumb 命令では、 PC も SP も使用できません。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-77ID 0 8 1 7 1 1 Non-Confidential

Page 112: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

ARM ASR、 LSL、 LSR、 ROR、 および RRX 命令での SP および PC の使用

SP はこれらの ARM 命令で使用できますが、 これらは ARMv6T2 以降では非推奨で

す。

PC は、 op{S}{cond} Rd, Rm, Rs 構文を使う命令では使用できません。 他の構文では、 Rd および Rm に PC を使用できますが、 これらは ARMv6T2 以降では非推奨です。

Rm に PC を指定している場合、 使用される値は 「命令のアドレス + 8」 とな り ます。

Rd に PC を指定した場合、 以下のよ うにな り ます。

• 演算結果に対応するアドレスへの分岐が実行されます。

• 接尾文字 S を指定している場合は、現在のモードの SPSR が CPSR にコピーされ

ます。 この動作を利用して、 例外から復帰するこ とができます。

注 ARM 命令 opS{cond} pc,Rm,#sh および RRXS{cond} pc,Rm は、 常に MOVS{cond}

pc,Rm{,shift} とい う適切な形式に逆アセンブルされます。

注意 ユーザモードまたはシステムモードで Rd に PC を使用する場合は、接尾文字 S を使用

しないで下さい。 このよ う な命令による影響は予測不可能な うえ、 アセンブル時にアセンブラによる警告が生成されません。

これらの命令でレジスタ制御シフ ト を行う場合は、 Rd やオペランドに PC は使用でき

ません。

条件フラグ

S が指定されている場合、 これらの命令は演算結果に基づいて N と Z の各フラグを更

新します。

シフ ト値が 0 の場合、 C フラグは影響を受けません。 0 以外の場合、 シフ ト アウ ト さ

れた 後のビッ トで更新されます。

16 ビッ ト命令

これらの命令は、 Thumb コード内では次の形式で使用できます。 これらは 16 ビッ ト

命令です。

ASRS Rd, Rm, #sh Rd と Rm は共に Lo レジスタである必要があ り ます。

ASRS Rd, Rd, Rs Rd と Rs は共に Lo レジスタである必要があ り ます。

LSLS Rd, Rm, #sh Rd と Rm は共に Lo レジスタである必要があ り ます。

LSLS Rd, Rd, Rs Rd と Rs は共に Lo レジスタである必要があ り ます。

LSRS Rd, Rm, #sh Rd と Rm は共に Lo レジスタである必要があ り ます。

LSRS Rd, Rd, Rs Rd と Rs は共に Lo レジスタである必要があ り ます。

RORS Rd, Rd, Rs Rd と Rs は共に Lo レジスタである必要があ り ます。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-78ID 0 8 1 7 1 1 Non-Confidential

Page 113: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

アーキテクチャ

これらの ARM 命令は、 すべてのアーキテクチャで使用できます。

これらの 32 ビッ ト Thumb 命令は、 ARMv6T2 以降で使用できます。

これらの 16 ビッ ト Thumb 命令は、 ARMv4T 以降で使用できます。

16 ビッ トの Thumb RRX 命令はあ り ません。

ASR r7, r8, r9LSLS r1, r2, r3

LSR r4, r5, r6 ROR r4, r5, r6

関連項目

参照 :

• MOV、 MVN (3-67 ページ)

• 条件コード (3-175 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-79ID 0 8 1 7 1 1 Non-Confidential

Page 114: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

3.4.16 SDIV、 UDIV

符号付き除算と符号なし除算です。

構文

SDIV{cond} {Rd}, Rn, Rm

UDIV{cond} {Rd}, Rn, Rm

各パラ メータには以下の意味があ り ます。

cond 任意の条件コードを指定します。

Rd デスティネーシ ョ ンレジスタを指定します。

Rn 被除数を保持するレジスタを指定します。

Rm 除数を保持するレジスタを指定します。

レジスタの制約条件

PC と SP は Rd、 Rn、 または Rm に使用できません。

アーキテクチャ

これらの 32 ビッ ト Thumb 命令は ARMv7-R と ARMv7-M のみで使用できます。

SDIV と UDIV 命令には ARM バージ ョ ンも 16 ビッ ト Thumb バージ ョ ンもあ り ません。

関連項目

参照 :

• 条件コード (3-175 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-80ID 0 8 1 7 1 1 Non-Confidential

Page 115: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

3.5 乗算命令

このセクシ ョ ンは以下のサブセクシ ョ ンから構成されています。

• MUL、 MLA、 MLS (3-82 ページ)

乗算命令、 積和命令、 および積差命令です (32 ビッ ト× 32 ビッ ト を計算し、

結果の下位 32 ビッ ト を返します)。

• UMULL、 UMLAL、 SMULL、 SMLAL (3-84 ページ)

符号なし / 符号付き long 乗算命令と long 積和命令です (32 ビッ ト× 32 ビッ ト

を実行し、 64 ビッ トの結果または 64 ビッ トの累積値を返します)。

• SMULxy、 SMLAxy (3-86 ページ)

符号付き乗算命令と符号付き積和命令です (16 ビッ ト× 16 ビッ ト を実行し、

32 ビッ トの結果を返します)。

• SMULWy、 SMLAWy (3-88 ページ)

符号付き乗算命令と符号付き積和命令です (32 ビッ ト× 16 ビッ ト を実行し、

結果の上位 32 ビッ ト を返します。

• SMLALxy (3-90 ページ)

符号付き積和命令です (16 ビッ ト× 16 ビッ ト を実行し、 64 ビッ トの累算値を

返します)。

• SMUAD{X}、 SMUSD{X} (3-92 ページ)

積の加算または減算を伴うデュアル 16 ビッ ト符号付き乗算命令です。

• SMMUL、 SMMLA、 SMMLS (3-94 ページ)

乗算命令、 積和命令、 および積差命令です (32 ビッ ト× 32 ビッ ト を実行し、

結果の上位 32 ビッ ト を返します)。

• SMLAD、 SMLSD (3-96 ページ)

デュアル 16 ビッ ト符号付き乗算を実行し、 積の加算または減算と、 32 ビッ ト

の累算を行う命令です。

• SMLALD、 SMLSLD (3-98 ページ)

デュアル 16 ビッ ト符号付き乗算を実行し、 32 ビッ トの積の加算または減算と、

64 ビッ トの累算を行う命令です。

• UMAAL (3-100 ページ)

符号なし積和累算 long 命令です。

• MIA、 MIAPH、 MIAxy (3-101 ページ)

内部積算を伴う乗算 (XScale コプロセッサ 0 命令) です。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-81ID 0 8 1 7 1 1 Non-Confidential

Page 116: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

3.5.1 MUL、 MLA、 MLS

符号付きまたは符号なしの 32 ビッ トオペランドを使用して乗算、 積和、 および積差

を実行し、 結果の下位 32 ビッ ト を返します。

構文

MUL{S}{cond} {Rd}, Rn, Rm

MLA{S}{cond} Rd, Rn, Rm, Ra

MLS{cond} Rd, Rn, Rm, Ra

各パラ メータには以下の意味があ り ます。

cond 任意の条件コードを指定します。

S 任意に指定できる接尾文字です。 S が指定されている場合は、 演算結果

に基づいて条件コードフラグが更新されます。

Rd デスティネーシ ョ ンレジスタを指定します。

Rn、 Rm 乗算する値を保持するレジスタを指定します。

Ra 加算する値または引かれる値を保持するレジスタを指定します。

使用法

MUL 命令は Rn と Rm の値を乗算し、 演算結果の下位 32 ビッ ト を Rd に返します。

MLA 命令は Rn と Rm の値を乗算し、Ra の値を加算して、演算結果の下位 32 ビッ ト を Rd に返します。

MLS 命令は Rn と Rm の値を乗算し、 その結果を Ra の値から減算して、 終的な演算結

果の下位 32 ビッ ト を Rd に返します。

レジスタの制約条件

ARMv6 よ り前のアーキテクチャの MUL および MLA 命令では、 Rn は Rd とは異なる必要

があ り ます。

レジスタには PC は使用できません。

SP は ARM 命令で使用できますが、 これらは ARMv6T2 以降では非推奨です。Thumb 命令では SP は使用できません。

条件フラグ

S が指定されている場合、 MUL と MLA では、 以下のよ うにな り ます。

• 結果に応じて N フラグおよび Z フラグを更新します。

• ARMv4 では、 C フラグおよび V フラグを破棄します。

• ARMv5T 以降のプロセッサでは、 C フラグまたは V フラグへの影響はあ り ませ

ん。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-82ID 0 8 1 7 1 1 Non-Confidential

Page 117: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

Thumb 命令

MUL 命令は、 Thumb コード内では次の形式で使用できます。 これは 16 ビッ ト命令で

す。

MULS Rd, Rn, Rd Rd と Rn は共に Lo レジスタである必要があ り ます。

条件コードのフラグを更新できる Thumb 乗算命令は他にはあ り ません。

アーキテクチャ

ARM 命令 MUL および MLA は、 ARM アーキテクチャのすべてのバージ ョ ンで使用でき

ます。

ARM 命令 MLS は、 ARMv6T2 以降で使用できます。

これらの 32 ビッ ト Thumb 命令は、 ARMv6T2 以降で使用できます。

16 ビッ ト Thumb の MULS 命令は、 ARM アーキテクチャのすべての T バリ アン トで使

用できます。

MUL r10, r2, r5 MLA r10, r2, r1, r5 MULS r0, r2, r2 MULLT r2, r3, r2 MLS r4, r5, r6, r7

関連項目

参照 :

• 条件コード (3-175 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-83ID 0 8 1 7 1 1 Non-Confidential

Page 118: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

3.5.2 UMULL、 UMLAL、 SMULL、 SMLAL

符号付き / 符号なし long 乗算命令と任意に指定できる積算命令です (32 ビッ ト× 32 ビッ ト を実行し、 64 ビッ トの積算値と結果を返します)。

構文

Op{S}{cond} RdLo, RdHi, Rn, Rm

各パラ メータには以下の意味があ り ます。

Op UMULL、 UMLAL、 SMULL、 または SMLAL のいずれかを指定します。

S 任意に指定できる接尾文字です。 ARM 状態でのみ使用できます。 S が指

定されている場合は、 演算結果に基づいて条件コードフラグが更新されます。

cond 任意の条件コードを指定します。

RdLo、 RdHi デスティネーシ ョ ンレジスタを指定します。 UMLAL および SMLAL では、 こ

れらのレジスタに累算値も保存されます。 RdLo と RdHi には、 それぞれ異

なるレジスタを指定する必要があ り ます。

Rn、 Rm オペランドを保持する ARM レジスタを指定します。

使用法

UMULL 命令は Rn と Rm の値を符号なし整数と解釈します。 これらの整数を乗算して、演

算結果の下位 32 ビッ ト を RdLo に返し、 上位 32 ビッ ト を RdHi に返します。

UMLAL 命令は Rn と Rm の値を符号なし整数と解釈します。これらの整数を乗算して得ら

れた 64 ビッ トの演算結果を、RdHi と RdLo が保持している 64 ビッ トの符号なし整数に

加算します。

SMULL 命令は、 Rn と Rm の値を、 2 の補数となる符号付き整数と解釈します。 これらの

整数を乗算して、 演算結果の下位 32 ビッ ト を RdLo に返し、 上位 32 ビッ ト を RdHi に返します。

SMLAL 命令は、 Rn と Rm の値を、 2 の補数となる符号付き整数と解釈します。 これらの

整数を乗算して得られた 64 ビッ トの演算結果を、RdHi と RdLo が保持している 64 ビッ

トの符号付き整数に加算します。

レジスタの制約条件

ARMv6 よ り前のアーキテクチャでは、Rn は RdLo および RdHi とは異なる必要があ り ま

す。

レジスタには PC は使用できません。

SP は ARM 命令で使用できますが、 これらは ARMv6T2 以降では非推奨です。Thumb 命令では SP は使用できません。

条件フラグ

S が指定されている場合、 これらの命令では、 以下のよ うにな り ます。

• 結果に応じて N フラグおよび Z フラグを更新します。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-84ID 0 8 1 7 1 1 Non-Confidential

Page 119: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

• C フラグまたは V フラグは更新しません。

アーキテクチャ

これらの ARM 命令は、 ARM アーキテクチャのすべてのバージ ョ ンで使用できます。

これらの 32 ビッ ト Thumb 命令は、 ARMv6T2 以降で使用できます。

これらの命令の 16 ビッ ト Thumb バージ ョ ンはあ り ません。

UMULL r0, r4, r5, r6 UMLALS r4, r5, r3, r8

関連項目

参照 :

• 条件コード (3-175 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-85ID 0 8 1 7 1 1 Non-Confidential

Page 120: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

3.5.3 SMULxy、 SMLAxy

符号付き乗算命令と積和命令です (16 ビッ ト× 16 ビッ ト を実行し、 32 ビッ トの積算

値と結果を返します)。

構文

SMUL<x><y>{cond} {Rd}, Rn, Rm

SMLA<x><y>{cond} Rd, Rn, Rm, Ra

各パラ メータには以下の意味があ り ます。

<x> B または T を指定します。 Rn の下位ビッ ト (ビッ ト [15:0]) を使用する場

合は B を、 Rn の上位ビッ ト (ビッ ト [31:16]) を使用する場合は T を指定

します。

<y> B または T を指定します。 Rm の下位ビッ ト (ビッ ト [15:0]) を使用する場

合は B を、 Rm の上位ビッ ト (ビッ ト [31:16]) を使用する場合は T を指定

します。

cond 任意の条件コードを指定します。

Rd デスティネーシ ョ ンレジスタを指定します。

Rn、 Rm 乗算する値を保持するレジスタを指定します。

Ra 加算する値を保持するレジスタを指定します。

使用法

SMULxy 命令は、 Rn と Rm の指定された上位半分または下位半分の 16 ビッ ト符号付き整

数を乗算し、 32 ビッ トの演算結果を Rd に返します。

SMLAxy 命令は、 Rn と Rm の指定された上位半分または下位半分の 16 ビッ ト符号付き整

数を乗算し、 32 ビッ トの演算結果を Ra の 32 ビッ ト値に加算し、 その結果を Rd に返

します。

レジスタの制約条件

レジスタには PC は使用できません。

SP は ARM 命令で使用できますが、 これらは ARMv6T2 以降では非推奨です。Thumb 命令では SP は使用できません。

条件フラグ

これらの命令による N、 Z、 C、 または V フラグへの影響はあ り ません。

累算中にオーバーフローが発生した場合、 SMLAxy によって Q フラグが設定されます。

Q フラグの状態を読み出すには、 MRS 命令を使用します。

注 SMLAxy によって Q フラグがク リ アされるこ とはあ り ません。Q フラグをク リ アするに

は、 MSR 命令を使用します。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-86ID 0 8 1 7 1 1 Non-Confidential

Page 121: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

アーキテクチャ

これらの ARM 命令は、 ARMv6 以降、 および ARMv5T の E バリ アン トで使用できま

す。

これらの 32 ビッ ト Thumb 命令は、 ARMv6T2 以降で使用できます。 ARMv7-M アー

キテクチャでは、 これらは ARMv7E-M 実装でだけ使用できます。

これらの命令の 16 ビッ ト Thumb バージ ョ ンはあ り ません。

SMULTBEQ r8, r7, r9 SMLABBNE r0, r2, r1, r10 SMLABT r0, r0, r3, r5

関連項目

参照 :

• MRS (3-146 ページ)

• MSR (3-148 ページ)

• 条件コード (3-175 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-87ID 0 8 1 7 1 1 Non-Confidential

Page 122: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

3.5.4 SMULWy、 SMLAWy

符号付きワイ ド乗算と符号付きワイ ド積和を実行します (32 ビッ ト× 16 ビッ ト を実

行し、 演算結果の上位 32 ビッ ト を返します)。

構文

SMULW<y>{cond} {Rd}, Rn, Rm

SMLAW<y>{cond} Rd, Rn, Rm, Ra

各パラ メータには以下の意味があ り ます。

<y> B または T を指定します。 Rm の下位ビッ ト (ビッ ト [15:0]) を使用する場

合は B を、 Rm の上位ビッ ト (ビッ ト [31:16]) を使用する場合は T を指定

します。

cond 任意の条件コードを指定します。

Rd デスティネーシ ョ ンレジスタを指定します。

Rn、 Rm 乗算する値を保持するレジスタを指定します。

Ra 加算する値を保持するレジスタを指定します。

使用法

SMULWy 命令は、 Rm の指定された上位半分または下位半分の符号付き整数と、 Rn の符号

付き整数を乗算し、 48 ビッ トの演算結果の上位 32 ビッ ト を Rd に返します。

SMLAWy 命令は、 Rm の選択された上位半分または下位半分の符号付き整数と Rn の符号

付き整数を乗算し、 32 ビッ トの演算結果を Ra 32 ビッ ト値に加算し、 その結果を Rd に返します。

レジスタの制約条件

レジスタには PC は使用できません。

SP は ARM 命令で使用できますが、 これらは ARMv6T2 以降では非推奨です。Thumb 命令では SP は使用できません。

条件フラグ

これらの命令による N、 Z、 C、 または V フラグへの影響はあ り ません。

累算中にオーバーフローが発生した場合、 SMLAWy によって Q フラグが設定されます。

アーキテクチャ

これらの ARM 命令は、 ARMv6 以降、 および ARMv5T の E バリ アン トで使用できま

す。

これらの 32 ビッ ト Thumb 命令は、 ARMv6T2 以降で使用できます。 ARMv7-M アー

キテクチャでは、 これらは ARMv7E-M 実装でだけ使用できます。

これらの命令の 16 ビッ ト Thumb バージ ョ ンはあ り ません。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-88ID 0 8 1 7 1 1 Non-Confidential

Page 123: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

関連項目

参照 :

• MRS (3-146 ページ)

• 条件コード (3-175 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-89ID 0 8 1 7 1 1 Non-Confidential

Page 124: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

3.5.5 SMLALxy

16 ビッ トオペランド と 64 ビッ トのアキュムレータを使った符号付き積和命令です。

構文

SMLAL<x><y>{cond} RdLo, RdHi, Rn, Rm

各パラ メータには以下の意味があ り ます。

<x> B または T を指定します。 Rn の下位ビッ ト (ビッ ト [15:0]) を使用する場

合は B を、 Rn の上位ビッ ト (ビッ ト [31:16]) を使用する場合は T を指定

します。

<y> B または T を指定します。 Rm の下位ビッ ト (ビッ ト [15:0]) を使用する場

合は B を、 Rm の上位ビッ ト (ビッ ト [31:16]) を使用する場合は T を指定

します。

cond 任意の条件コードを指定します。

RdLo、 RdHi デスティネーシ ョ ンレジスタを指定します。 これらのレジスタは累算値

も保持します。 RdHi と RdLo には、 それぞれ異なるレジスタを指定する必

要があ り ます。

Rn、 Rm 乗算する値を保持するレジスタを指定します。

使用法

SMLALxy 命令は、 Rm の指定された上位半分または下位半分の符号付き整数を、 Rn の指

定された上位半分または下位半分の符号付き整数と乗算し、 32 ビッ トの演算結果を RdHi と RdLo が保持する 64 ビッ ト値に加算します。

レジスタの制約条件

レジスタには PC は使用できません。

SP は ARM 命令で使用できますが、 これらは ARMv6T2 以降では非推奨です。Thumb 命令では SP は使用できません。

条件フラグ

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

注 SMLALxy 命令によって例外が発生するこ とはあ り ません。 この命令でオーバーフロー

が発生する と、 警告がないまま演算結果の一部が溢れた桁によって上書きされます。

アーキテクチャ

この ARM 命令は、 ARMv6 以降、 および ARMv5T の E バリ アン トで使用できます。

これらの 32 ビッ ト Thumb 命令は、 ARMv6T2 以降で使用できます。 ARMv7-M アー

キテクチャでは、 これらは ARMv7E-M 実装でだけ使用できます。

この命令の 16 ビッ ト Thumb バージ ョ ンはあ り ません。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-90ID 0 8 1 7 1 1 Non-Confidential

Page 125: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

SMLALTB r2, r3, r7, r1 SMLALBTVS r0, r1, r9, r2

関連項目

参照 :

• 条件コード (3-175 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-91ID 0 8 1 7 1 1 Non-Confidential

Page 126: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

3.5.6 SMUAD{X}、 SMUSD{X}

任意でオペランドの半分を交換できる、 デュアル 16 ビッ ト符号付き積和命令と積差

命令です。

構文

op{X}{cond} {Rd}, Rn, Rm

各パラ メータには以下の意味があ り ます。

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

SMUAD デュアル乗算後に積を加算します。

SMUSD デュアル乗算後に積を減算します。

X 任意に指定できるパラ メータです。 X が指定されている場合は、 乗算が

行われる前に、 第 2 オペランドの上位ハーフワード と下位ハーフワード

が入れ替わり ます。

cond 任意の条件コードを指定します。

Rd デスティネーシ ョ ンレジスタを指定します。

Rn、 Rm オペランドを保持するレジスタを指定します。

使用法

SMUAD は Rn の下位ハーフワード と Rm の下位ハーフワードを乗算し、 Rn の上位ハーフ

ワード と Rm の上位ハーフワードを乗算します。 次に、 得られた 2 つの積を加算し、

その合計を Rd にス ト アします。

SMUSD は Rn の下位ハーフワード と Rm の下位ハーフワードを乗算し、 Rn の上位ハーフ

ワード と Rm の上位ハーフワードを乗算します。 次に、 初の積から 2 番目の積を減

算し、 その差を Rd にス ト アします。

レジスタの制約条件

レジスタには PC は使用できません。

SP は ARM 命令で使用できますが、 これらは ARMv6T2 以降では非推奨です。Thumb 命令では SP は使用できません。

条件フラグ

加算がオーバーフローした場合、 SMUAD 命令によって Q フラグが設定されます。

アーキテクチャ

これらの ARM 命令は、 ARMv6 以降で使用できます。

これらの 32 ビッ ト Thumb 命令は、 ARMv6T2 以降で使用できます。 ARMv7-M アー

キテクチャでは、 これらは ARMv7E-M 実装でだけ使用できます。

これらの命令の 16 ビッ ト Thumb バージ ョ ンはあ り ません。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-92ID 0 8 1 7 1 1 Non-Confidential

Page 127: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

SMUAD r2, r3, r2 SMUSDXNE r0, r1, r2

関連項目

参照 :

• 条件コード (3-175 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-93ID 0 8 1 7 1 1 Non-Confidential

Page 128: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

3.5.7 SMMUL、 SMMLA、 SMMLS

符号付き上位ワード乗算命令、 符号付き上位ワード乗算命令の累算、 符号付き上位ワード乗算命令の減算です。 これらの命令は 32 ビッ トオペランド間での演算結果か

ら上位 32 ビッ トのみを使用します。

構文

SMMUL{R}{cond} {Rd}, Rn, Rm

SMMLA{R}{cond} Rd, Rn, Rm, Ra

SMMLS{R}{cond} Rd, Rn, Rm, Ra

各パラ メータには以下の意味があ り ます。

R 任意に指定できるパラ メータです。 R が指定されている場合は演算結果

の丸めが行われ、 指定されていない場合は切り捨てられます。

cond 任意の条件コードを指定します。

Rd デスティネーシ ョ ンレジスタを指定します。

Rn、 Rm オペランドを保持するレジスタを指定します。

Ra 加算する値または引かれる値を保持するレジスタを指定します。

演算

SMMUL は Rn と Rm の値を乗算し、 64 ビッ トの結果の上位 32 ビッ ト を Rd にス ト アしま

す。

SMMLA は、 Rn と Rm の値を乗算し、 その積の上位 32 ビッ トに Ra の値を加算して、 その

結果を Rd にス ト アします。

SMMLS は、 Rn と Rm の値を乗算して得られた積を、 32 ビッ ト左シフ ト した Ra の値から

減算し、 結果の上位 32 ビッ ト を Rd にス ト アします。

オプシ ョ ンの R パラ メータが指定されている場合は、 上位 32 ビッ ト を取り出す前に 0x80000000 が加算されます。 この処理によって結果の丸めが行われます。

レジスタの制約条件

レジスタには PC は使用できません。

SP は ARM 命令で使用できますが、 これらは ARMv6T2 以降では非推奨です。Thumb 命令では SP は使用できません。

条件フラグ

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

アーキテクチャ

これらの ARM 命令は、 ARMv6 以降で使用できます。

これらの 32 ビッ ト Thumb 命令は、 ARMv6T2 以降で使用できます。 ARMv7-M アー

キテクチャでは、 これらは ARMv7E-M 実装でだけ使用できます。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-94ID 0 8 1 7 1 1 Non-Confidential

Page 129: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

これらの命令の 16 ビッ ト Thumb バージ ョ ンはあ り ません。

SMMULGE r6, r4, r3 SMMULR r2, r2, r2

関連項目

参照 :

• 条件コード (3-175 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-95ID 0 8 1 7 1 1 Non-Confidential

Page 130: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

3.5.8 SMLAD、 SMLSD

デュアル 16 ビッ ト符号付き乗算を実行し、 積の加算または減算と、 32 ビッ トの積算

を行う命令です。

構文

op{X}{cond} Rd, Rn, Rm, Ra

各パラ メータには以下の意味があ り ます。

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

SMLAD デュアル乗算を行い、 積の和を累算します。

SMLSD デュアル乗算を行い、 積の差を累算します。

cond 任意の条件コードを指定します。

X 任意に指定できるパラ メータです。 X が指定されている場合は、 乗算が

行われる前に、 第 2 オペランドの上位ハーフワード と下位ハーフワード

が入れ替わり ます。

Rd デスティネーシ ョ ンレジスタを指定します。

Rn、 Rm オペランドを保持するレジスタを指定します。

Ra 累算オペランドを保持するレジスタを指定します。

演算

SMLAD は Rn の下位ハーフワード と Rm の下位ハーフワードを乗算し、 Rn の上位ハーフ

ワード と Rm の上位ハーフワードを乗算します。 次に、 得られた 2 つの積を Ra の値に

加算し、 その結果を Rd にス ト アします。

SMLSD は Rn の下位ハーフワード と Rm の下位ハーフワードを乗算し、 Rn の上位ハーフ

ワード と Rm の上位ハーフワードを乗算します。 次に、 初の積から 2 番目の積を減

算し、 その差を Ra の値に加算して、 結果を Rd にス ト アします。

レジスタの制約条件

レジスタには PC は使用できません。

SP は ARM 命令で使用できますが、 これらは ARMv6T2 以降では非推奨です。Thumb 命令では SP は使用できません。

条件フラグ

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

アーキテクチャ

これらの ARM 命令は、 ARMv6 以降で使用できます。

これらの 32 ビッ ト Thumb 命令は、 ARMv6T2 以降で使用できます。 ARMv7-M アー

キテクチャでは、 これらは ARMv7E-M 実装でだけ使用できます。

これらの命令の 16 ビッ ト Thumb バージ ョ ンはあ り ません。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-96ID 0 8 1 7 1 1 Non-Confidential

Page 131: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

SMLSD r1, r2, r0, r7 SMLSDX r11, r10, r2, r3 SMLADLT r1, r2, r4, r1

関連項目

参照 :

• 条件コード (3-175 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-97ID 0 8 1 7 1 1 Non-Confidential

Page 132: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

3.5.9 SMLALD、 SMLSLD

デュアル 16 ビッ ト符号付き乗算を実行し、 積の加算または減算と、 64 ビッ トの積算

を行う命令です。

構文

op{X}{cond} RdLo, RdHi, Rn, Rm

各パラ メータには以下の意味があ り ます。

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

SMLALD デュアル乗算を行い、 積の和を累算します。

SMLSLD デュアル乗算を行い、 積の差を累算します。

X 任意に指定できるパラ メータです。 X が指定されている場合は、 乗算が

行われる前に、 第 2 オペランドの上位ハーフワード と下位ハーフワード

が入れ替わり ます。

cond 任意の条件コードを指定します。

RdLo、 RdHi 64 ビッ トの結果を保持するデスティネーシ ョ ンレジスタを指定します。

これらのレジスタには、 64 ビッ トの累算オペランド も保持されます。

RdHi と RdLo には、 それぞれ異なるレジスタを指定する必要があ り ます。

Rn、 Rm オペランドを保持するレジスタを指定します。

演算

SMLALD は Rn の下位ハーフワード と Rm の下位ハーフワードを乗算し、 Rn の上位ハーフ

ワード と Rm の上位ハーフワードを乗算します。次に、得られた 2 つの積を RdLo、RdHi の値に加算し、 その合計を RdLo、 RdHi にス ト アします。

SMLSLD は Rn の下位ハーフワード と Rm の下位ハーフワードを乗算し、 Rn の上位ハーフ

ワード と Rm の上位ハーフワードを乗算します。 次に、 初の積から 2 番目の積を減

算し、 その差を RdLo、 RdHi の値に加算して、 結果を RdLo、 RdHi にス ト アします。

レジスタの制約条件

レジスタには PC は使用できません。

SP は ARM 命令で使用できますが、 これらは ARMv6T2 以降では非推奨です。Thumb 命令では SP は使用できません。

条件フラグ

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

アーキテクチャ

これらの ARM 命令は、 ARMv6 以降で使用できます。

これらの 32 ビッ ト Thumb 命令は、 ARMv6T2 以降で使用できます。 ARMv7-M アー

キテクチャでは、 これらは ARMv7E-M 実装でだけ使用できます。

これらの命令の 16 ビッ ト Thumb バージ ョ ンはあ り ません。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-98ID 0 8 1 7 1 1 Non-Confidential

Page 133: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

SMLALD r10, r11, r5, r1 SMLSLD r3, r0, r5, r1

関連項目

参照 :

• 条件コード (3-175 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-99ID 0 8 1 7 1 1 Non-Confidential

Page 134: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

3.5.10 UMAAL

符号なし積和累算 long 命令です。

構文

UMAAL{cond} RdLo, RdHi, Rn, Rm

各パラ メータには以下の意味があ り ます。

cond 任意の条件コードを指定します。

RdLo、 RdHi 64 ビッ トの結果を保持するデスティネーシ ョ ンレジスタを指定します。

これらのレジスタには、 32 ビッ トの 2 つの累算オペランド も保持されま

す RdLo と RdHi には、 それぞれ異なるレジスタを指定する必要があ り ま

す。

Rn、 Rm 乗算オペランドを保持するレジスタを指定します。

演算

UMAAL は Rn と Rm の 32 ビッ ト値を乗算し、 RdHi と RdLo の 2 つの 32 ビッ ト値を加算し、

その 64 ビッ トの結果を RdLo、 RdHi にス ト アします。

レジスタの制約条件

レジスタには PC は使用できません。

SP は ARM 命令で使用できますが、 これらは ARMv6T2 以降では非推奨です。Thumb 命令では SP は使用できません。

条件フラグ

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

アーキテクチャ

この ARM 命令は、 ARMv6 以降で使用できます。

これらの 32 ビッ ト Thumb 命令は、 ARMv6T2 以降で使用できます。 ARMv7-M アー

キテクチャでは、 これらは ARMv7E-M 実装でだけ使用できます。

この命令の 16 ビッ ト Thumb バージ ョ ンはあ り ません。

UMAAL r8, r9, r2, r3 UMAALGE r2, r0, r5, r3

関連項目

参照 :

• 条件コード (3-175 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-100ID 0 8 1 7 1 1 Non-Confidential

Page 135: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

3.5.11 MIA、 MIAPH、 MIAxy

内部積和命令です (32 ビッ ト× 32 ビッ ト を実行し、 40 ビッ トの累算値を返します)。

パッ クハーフワードの内部積和命令です (16 ビッ ト× 16 ビッ ト× 2 を実行し、 40 ビッ トの累算値を返します)。

内部積和命令です (16 ビッ ト× 16 ビッ ト を実行し、 40 ビッ トの累算値を返します)。

構文

MIA{cond} Acc, Rn, Rm

MIAPH{cond} Acc, Rn, Rm

MIA<x><y>{cond} Acc, Rn, Rm

各パラ メータには以下の意味があ り ます。

cond 任意の条件コードを指定します。

Acc 内部アキュムレータを指定します。 標準名は accx で、 x は 0 ~ n の整数

です。n の値はプロセッサによって異なり ます。現在のプロセッサでは 0 が使用されています。

Rn、 Rm 乗算する値を保持する ARM レジスタを指定します。

Rn および Rm に PC は指定できません。

<x><y> 次のいずれかを指定します。 BB、 BT、 TB、 TT。

使用法

MIA は Rn と Rm の符号付き整数を乗算し、演算結果を Acc の 40 ビッ ト値に加算します。

MIAPH は Rn と Rm の下位半分の符号付き整数の乗算、 および Rn と Rm の上位半分の符号

付き整数の乗算を行い、 32 ビッ トの 2 つの結果を Acc の 40 ビッ ト値に加算します。

MIAxy 命令は Rs の指定された上位半分または下位半分の符号付き整数と Rm の指定され

た上位半分または下位半分の符号付き整数を乗算し、 32 ビッ トの結果を Acc の 40 ビッ ト値に加算します。 Rn の下位ビッ ト (ビッ ト [15:0]) を使用する場合は <x> == B を、 Rn の上位ビッ ト (ビッ ト [31:16]) を使用する場合は <x> == T を指定します。 Rm の下位ビッ ト (ビッ ト [15:0]) を使用する場合は <y> == B を、 Rm の上位ビッ ト (ビッ ト [31:16]) を使用する場合は <y> == T を指定します。

条件フラグ

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

注 これらの命令によって例外が発生するこ とはあ り ません。 これらの命令でオーバー

フローが発生する と、 警告がないまま演算結果の一部が溢れたによって上書きされます。

アーキテクチャ

これらの ARM コプロセッサ 0 命令は、 XScale プロセッサでのみ使用できます。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-101ID 0 8 1 7 1 1 Non-Confidential

Page 136: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

これらの命令の Thumb バージ ョ ンはあ り ません。

MIA acc0,r5,r0 MIALE acc0,r1,r9 MIAPH acc0,r0,r7 MIAPHNE acc0,r11,r10 MIABB acc0,r8,r9 MIABT acc0,r8,r8 MIATB acc0,r5,r3 MIATT acc0,r0,r6 MIABTGT acc0,r2,r5

関連項目

参照 :

• 条件コード (3-175 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-102ID 0 8 1 7 1 1 Non-Confidential

Page 137: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

3.6 サチュレート命令

このセクシ ョ ンは以下のサブセクシ ョ ンから構成されています。

• サチュレート算術演算

• QADD、 QSUB、 QDADD、 QDSUB (3-104 ページ)

• SSAT、 USAT (3-106 ページ) .

一部の並列命令もサチュレート命令です。

3.6.1 サチュレート算術演算

以下の演算がサチュレート (SAT) 演算です。 つま り、 サチュレート命令に応じて、

2n の値は以下のよ うにな り ます。

• 符号付きサチュレート演算では、 結果が -2n 未満の場合には、 返される結果は -2n にな り ます。

• 符号なしサチュレート演算では、 結果が負となる場合には、 返される結果はゼロ とな り ます。

• 結果が 2n - 1 よ り も大きい場合には、 返される結果は 2n - 1 とな り ます。

上記のいずれかに当てはまる演算をサチュレーシ ョ ンと呼びます。 一部の命令では、サチュレーシ ョ ンが発生する と Q フラグを設定します。

注 サチュレーシ ョ ンが発生しない場合に、 サチュレート命令によって Q フラグがク リ

アされるこ とはあ り ません。 Q フラグをク リ アするには、 MSR 命令を使用します。

Q フラグは、 他の 2 つの命令によっても設定できますが、 それらの命令はサチュレー

ト しません。

関連項目

参照 :

• MSR (3-148 ページ)

• SMULxy、 SMLAxy (3-86 ページ)

• SMULWy、 SMLAWy (3-88 ページ)

• 並列命令 (3-108 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-103ID 0 8 1 7 1 1 Non-Confidential

Page 138: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

3.6.2 QADD、 QSUB、 QDADD、 QDSUB

–231 ≤ x ≤ 231–1 の符号付き範囲で演算結果をサチュレート させる、 符号付き加算、 減

算、 倍演算と加算、 および倍演算と減算です。

構文

op{cond} {Rd}, Rm, Rn

各パラ メータには以下の意味があ り ます。

op QADD、 QSUB、 QDADD、 QDSUB のいずれかを指定します。

cond 任意の条件コードを指定します。

Rd デスティネーシ ョ ンレジスタを指定します。

Rm、 Rn オペランドを保持するレジスタを指定します。

使用法

QADD 命令は Rm と Rn の値を加算します。

QSUB 命令は Rm の値から Rn の値を減算します。

QDADD 命令は SAT (Rm + SAT (Rn * 2)) を計算します。 倍演算、 加算、 あるいはその両方

で、 サチュレーシ ョ ンが発生する可能性があ り ます。 倍演算でサチュレーシ ョ ンが発生し、 かつ加算では発生しない場合、 Q フラグは設定されますが、 終結果はサ

チュレート していません。

QDSUB 命令は SAT(Rm - SAT(Rn * 2)) を計算します。 倍演算、 減算、 あるいはその両方

で、 サチュレーシ ョ ンが発生する可能性があ り ます。 倍演算でサチュレーシ ョ ンが発生し、 かつ減算では発生しない場合、 Q フラグは設定されますが、 終結果はサ

チュレート していません。

注 これらの命令では、 すべての値が 2 の補数の符号付き整数と して処理されます。

レジスタの制約条件

オペランドに PC は使用できません。

SP は ARM 命令で使用できますが、 これらは ARMv6T2 以降では非推奨です。Thumb 命令では SP は使用できません。

条件フラグ

サチュレーシ ョ ンが発生する と、 これらの命令によって Q フラグが設定されます。Q フラグの状態を読み出すには、 MRS 命令を使用します。

アーキテクチャ

これらの ARM 命令は、 ARMv6 以降、 および ARMv5T の E バリ アン トで使用できま

す。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-104ID 0 8 1 7 1 1 Non-Confidential

Page 139: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

これらの 32 ビッ ト Thumb 命令は、 ARMv6T2 以降で使用できます。 ARMv7-M アー

キテクチャでは、 これらは ARMv7E-M 実装でだけ使用できます。

これらの命令の 16 ビッ ト Thumb バージ ョ ンはあ り ません。

QADD r0, r1, r9 QDSUBLT r9, r0, r1

関連項目

参照 :

• 並列加算と並列減算 (3-109 ページ)

• MRS (3-146 ページ)

• 条件コード (3-175 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-105ID 0 8 1 7 1 1 Non-Confidential

Page 140: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

3.6.3 SSAT、 USAT

任意のビッ ト位置に対する符号付きサチュレート命令と符号なしサチュレート命令です。 オプシ ョ ンと して、 サチュレート前にシフ ト を実行できす。

SSAT は、 符号付きの値を符号付き範囲内でサチュレート します。

USAT は、 符号付きの値を符号なし範囲内でサチュレート します。

構文

op{cond} Rd, #sat, Rm{, shift}

各パラ メータには以下の意味があ り ます。

op SSAT または USAT を指定します。

cond 任意の条件コードを指定します。

Rd デスティネーシ ョ ンレジスタを指定します。

sat サチュレート させるビッ ト位置を指定します。 SSAT の場合は 1 ~ 32、USAT の場合は 0 ~ 31 の値とな り ます。

Rm オペランドを格納するレジスタを指定します。

shift 任意に指定できるシフ トです。 以下のいずれかを指定する必要があ り ま

す。

ASR #n n の範囲は 1 ~ 32 (ARM) または 1 ~ 31 (Thumb) です。

LSL #n n の範囲は 0 ~ 31 です。

演算

SSAT 命令は指定されたシフ ト を行い、 その後に符号付き範囲 –2sat–1 ≤ x ≤ 2sat–1 –1 でサ

チュレート します。

USAT 命令は指定されたシフ ト を行い、 その後に符号なし範囲 0 ≤ x ≤ 2sat – 1 でサチュ

レート します。

レジスタの制約条件

レジスタには PC は使用できません。

SP は ARM 命令で使用できますが、 これらは ARMv6T2 以降では非推奨です。Thumb 命令では SP は使用できません。

条件フラグ

サチュレーシ ョ ンが発生する と、 これらの命令によって Q フラグが設定されます。Q フラグの状態を読み出すには、 MRS 命令を使用します。

アーキテクチャ

これらの ARM 命令は、 ARMv6 以降で使用できます。

これらの 32 ビッ ト Thumb 命令は、 ARMv6T2 以降で使用できます。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-106ID 0 8 1 7 1 1 Non-Confidential

Page 141: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

これらの命令の 16 ビッ ト Thumb バージ ョ ンはあ り ません。

SSAT r7, #16, r7, LSL #4 USATNE r0, #7, r5

関連項目

参照 :

• SSAT16、 USAT16 (3-114 ページ)

• MRS (3-146 ページ)

• 条件コード (3-175 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-107ID 0 8 1 7 1 1 Non-Confidential

Page 142: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

3.7 並列命令

このセクシ ョ ンは以下のサブセクシ ョ ンから構成されています。

• 並列加算と並列減算 (3-109 ページ)

バイ ト単位およびハーフワード単位のさまざまな加算と減算です。

• USAD8、 USADA8 (3-112 ページ)

符号なし絶対差の和と符号なし絶対差の和の累算です。

• SSAT16、 USAT16 (3-114 ページ)

並列ハーフワードサチュレート命令です。

この他に、 SXT、 SXTA、 UXT、 UXTA などの並列展開命令もあ り ます。

関連項目

参照 :

• SXT、 SXTA、 UXT、 UXTA (3-119 ページ)

• パッ ク命令と展開命令 (3-116 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-108ID 0 8 1 7 1 1 Non-Confidential

Page 143: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

3.7.1 並列加算と並列減算

バイ ト単位およびハーフワード単位のさまざまな加算と減算です。

構文

<prefix>op{cond} {Rd}, Rn, Rm

各パラ メータには以下の意味があ り ます。

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

S 符号付き余り算術演算 28 または 216 です。 APSR の GE フラグ

が設定されます。

Q 符号付きサチュレート算術演算です。

SH 符号付き算術演算を行い、 結果を半分にします。

U 符号なし余り算術演算 28 または 216 です。 APSR の GE フラグ

が設定されます。

UQ 符号なしサチュレート算術演算です。

UH 符号なし算術演算を行い、 結果を半分にします。

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

ADD8 バイ ト単位の加算。

ADD16 ハーフワード単位の加算。

SUB8 バイ ト単位の減算。

SUB16 ハーフワード単位の減算。

ASX Rm のハーフワードを交換し、 上位ハーフワードの加算と下位

ハーフワードの減算を行います。

SAX Rm のハーフワードを交換し、 上位ハーフワードの減算と下位

ハーフワードの加算を行います。

cond 任意の条件コードを指定します。

Rd デスティネーシ ョ ンレジスタを指定します。

Rm、 Rn は、 オペランドを保持する ARM レジスタを指定します。

演算

これらの命令は、 オペランドのバイ ト またはハーフワードに対し、 個別に算術演算を実行します。 2 つか 4 つの加算または減算、 あるいは 1 つの算と 1 つの減算を実行

します。

以下のよ うなさまざまな種類の演算を選択できます。

• 28 または 216 の符号付き / 符号なし余りの算術演算。 これによ り APSR の GE フラグが設定されます。

• 符号付き範囲 –215 ≤ x ≤ 215 –1 または –27 ≤ x ≤ 27 –1 のいずれかに対する符号付き

サチュレート算術演算。 これらの演算がサチュレートする場合でも Q フラグへ

の影響はあ り ません。

• 符号なし範囲 0 ≤ x ≤ 216 –1 または 0 ≤ x ≤ 28 –1 のいずれかに対する符号なしサ

チュレート算術演算。 これらの演算がサチュレートする場合でも Q フラグへの

影響はあ り ません。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-109ID 0 8 1 7 1 1 Non-Confidential

Page 144: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

• 符号付き / 符号なし算術演算。 結果は二分されます。 これによってオーバーフ

ローが発生するこ とはあ り ません。

レジスタの制約条件

レジスタには PC は使用できません。

SP は ARM 命令で使用できますが、 これらは ARMv6T2 以降では非推奨です。Thumb 命令では SP は使用できません。

条件フラグ

これらの命令による N、 Z、 C、 V、 または Q フラグへの影響はあ り ません。

これらの命令に接頭文字 Q、 SH、 UQ、 および UH を使用した場合でも、 フラグへの影響

はあ り ません。

これらの命令に接頭文字 S と U を使用した場合は、 APSR の GE フラグが以下のよ う

に設定されます。

• バイ ト単位の演算では、 GE フラグは 32 ビッ トの SUB および ADD 命令における C(キャ リー) フラグと同様の方法で使用されます。

GE[0] 結果のビッ ト [7:0] に対応します。

GE[1] 結果のビッ ト [15:8] に対応します。

GE[2] 結果のビッ ト [23:16] に対応します。

GE[3] 結果のビッ ト [31:24] に対応します。

• ハーフワード単位の演算では、GE フラグは通常のワード単位の SUB 命令および ADD 命令における C (キャ リー) フラグと同様の方法で使用されます。

GE[1:0] 結果のビッ ト [15:0] に対応します。

GE[3:2] 結果のビッ ト [31:16] に対応します。

これらのフラグを使用して、 次に続く SEL 命令を制御できます。

注 ハーフワード単位の演算では、 GE[1:0] が同時にセッ ト またはク リ アされ、 GE[3:2] が同時にセッ ト またはク リ アされます。

アーキテクチャ

これらの ARM 命令は、 ARMv6 以降で使用できます。

これらの 32 ビッ ト Thumb 命令は、 ARMv6T2 以降で使用できます。 ARMv7-M アー

キテクチャでは、 これらは ARMv7E-M 実装でだけ使用できます。

これらの命令の 16 ビッ ト Thumb バージ ョ ンはあ り ません。

SHADD8 r4, r3, r9 USAXNE r0, r0, r2

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-110ID 0 8 1 7 1 1 Non-Confidential

Page 145: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

誤用例

QHADD r2, r9, r3 ; こ のよ う な命令は存在しない。 QHADD8 または QHADD16 を使用する必

要がある。 SAX r10, r8, r5 ; 接頭文字が必要。

関連項目

参照 :

• SEL (3-73 ページ)

• 条件コード (3-175 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-111ID 0 8 1 7 1 1 Non-Confidential

Page 146: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

3.7.2 USAD8、 USADA8

符号なし絶対差の和と符号なし絶対差の和の累算です。

構文

USAD8{cond} {Rd}, Rn, Rm

USADA8{cond} Rd, Rn, Rm, Ra

各パラ メータには以下の意味があ り ます。

cond 任意の条件コードを指定します。

Rd デスティネーシ ョ ンレジスタを指定します。

Rn 第 1 オペランドを保持するレジスタを指定します。

Rm 第 2 オペランドを保持するレジスタを指定します。

Ra 累算オペランドを保持するレジスタを指定します。

演算

USAD8 命令は、 Rn と Rm のそれぞれ対応するバイ トの符号なし値に基づいて、 4 つのバ

イ トの差分を取り ます。 この命令は、 4 つの差分の絶対値を加算し、 その結果を Rd に保存します。

USADA8 命令は、 4 つの差分の絶対値を Ra の値に加算し、 その結果を Rd に保存します。

レジスタの制約条件

レジスタには PC は使用できません。

SP は ARM 命令で使用できますが、 これらは ARMv6T2 以降では非推奨です。Thumb 命令では SP は使用できません。

条件フラグ

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

アーキテクチャ

これらの ARM 命令は、 ARMv6 以降で使用できます。

これらの 32 ビッ ト Thumb 命令は、 ARMv6T2 以降で使用できます。 ARMv7-M アー

キテクチャでは、 これらは ARMv7E-M 実装でだけ使用できます。

これらの命令の 16 ビッ ト Thumb バージ ョ ンはあ り ません。

USAD8 r2, r4, r6 USADA8 r0, r3, r5, r2 USADA8VS r0, r4, r0, r1

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-112ID 0 8 1 7 1 1 Non-Confidential

Page 147: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

誤用例

USADA8 r2, r4, r6 ; USADA8 には 4 つのレジス タ が必要

USADA16 r0, r4, r0, r1 ; こ のよ う な命令は存在しない

関連項目

参照 :

• 条件コード (3-175 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-113ID 0 8 1 7 1 1 Non-Confidential

Page 148: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

3.7.3 SSAT16、 USAT16

並列ハーフワードサチュレート命令です。

SSAT16 は、 符号付きの値を符号付き範囲内でサチュレート します。

USAT16 は、 符号付きの値を符号なし範囲内でサチュレート します。

構文

op{cond} Rd, #sat, Rn

各パラ メータには以下の意味があ り ます。

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

SSAT16 符号付きサチュレーシ ョ ンを実行します。

USAT16 符号なしサチュレーシ ョ ンを実行します。

cond 任意の条件コードを指定します。

Rd デスティネーシ ョ ンレジスタを指定します。

sat サチュレート させるビッ ト位置を指定します。 SSAT16 の場合は 1 ~ 16、USAT16 の場合は 0 ~ 15 の値とな り ます。

Rn オペランドを保持するレジスタを指定します。

演算

任意のビッ ト位置に対してハーフワード単位の符号付き / 符号なしサチュレーシ ョ ン

を実行します。

SSAT16 命令は、 符号付き範囲 –2sat–1 ≤ x ≤ 2sat–1 –1 で、 各符号付きハーフワードをサ

チュレート します。

USAT16 命令は、 符号なし範囲 0 ≤ x ≤ 2sat –1 で、 各符号付きハーフワードをサチュレー

ト します。

レジスタの制約条件

レジスタには PC は使用できません。

SP は ARM 命令で使用できますが、 これらは ARMv6T2 以降では非推奨です。Thumb 命令では SP は使用できません。

条件フラグ

いずれかのハーフワードに対するサチュレーシ ョ ンが発生する と、 これらの命令によって Q フラグが設定されます。 Q フラグの状態を読み出すに、 MRS 命令を使用しま

す。

アーキテクチャ

これらの ARM 命令は、 ARMv6 以降で使用できます。

これらの 32 ビッ ト Thumb 命令は、 ARMv6T2 以降で使用できます。 ARMv7-M アー

キテクチャでは、 これらは ARMv7E-M 実装でだけ使用できます。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-114ID 0 8 1 7 1 1 Non-Confidential

Page 149: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

これらの命令の 16 ビッ ト Thumb バージ ョ ンはあ り ません。

SSAT16 r7, #12, r7 USAT16 r0, #7, r5

誤用例

SSAT16 r1, #16, r2, LSL #4 ; シ フ ト と ハー フ ワー ドサチ ュ レーシ ョ ンは一緒に指定できない

関連項目

参照 :

• MRS (3-146 ページ)

• 条件コード (3-175 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-115ID 0 8 1 7 1 1 Non-Confidential

Page 150: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

3.8 パック命令と展開命令

このセクシ ョ ンは以下のサブセクシ ョ ンから構成されています。

• BFC、 BFI (3-117 ページ)

ビッ ト フ ィールドのク リ ア命令と挿入命令です。

• SBFX、 UBFX (3-118 ページ)

符号付き / 符号なしビッ ト フ ィールドの抽出命令です。

• SXT、 SXTA、 UXT、 UXTA (3-119 ページ)

必要に応じて加算命令を伴う、 符号拡張命令またはゼロ拡張命令です。

• PKHBT、 PKHTB (3-121 ページ)

ハーフワードパッ ク命令です。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-116ID 0 8 1 7 1 1 Non-Confidential

Page 151: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

3.8.1 BFC、 BFI

ビッ ト フ ィールドのク リ ア命令と挿入命令です。 レジスタ内の隣接するビッ ト をクリ アするか、 1 つのレジスタから別のレジスタに隣接するビッを挿入します。

構文

BFC{cond} Rd, #lsb, #width

BFI{cond} Rd, Rn, #lsb, #width

各パラ メータには以下の意味があ り ます。

cond 任意の条件コードを指定します。

Rd デスティネーシ ョ ンレジスタを指定します。

Rn ソースレジスタを指定します。

lsb ク リ アまたはコピーする 下位ビッ ト を指定します。

width ク リ アまたはコピーするビッ ト数を指定します。width を 0 にはできませ

ん。 また、 (width+lsb) は 32 未満になる必要があ り ます。

BFC

Rd の lsb から width ビッ ト分のビッ トがク リ アされます。 Rd 内の他のビッ トは変更さ

れません。

BFI

width 分のビッ トが Rd の lsb から ク リ アされ、 Rn のビッ ト [0] から始まる width 分の

ビッ トによって置き換えられます。 Rd 内の他のビッ トは変更されません。

レジスタの制約条件

レジスタには PC は使用できません。

SP は ARM 命令で使用できますが、 これらは ARMv6T2 以降では非推奨です。Thumb 命令では SP は使用できません。

条件フラグ

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

アーキテクチャ

これらの ARM 命令は、 ARMv6T2 以降で使用できます。

これらの 32 ビッ ト Thumb 命令は、 ARMv6T2 以降で使用できます。

これらの命令の 16 ビッ ト Thumb バージ ョ ンはあ り ません。

関連項目

参照 :

• 条件コード (3-175 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-117ID 0 8 1 7 1 1 Non-Confidential

Page 152: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

3.8.2 SBFX、 UBFX

符号付き / 符号なしビッ ト フ ィールドの抽出命令です。 隣接するビッ ト をあるレジス

タから別のレジスタの 下位ビッ トにコピーし、 32 ビッ トに符号拡張またはゼロ拡

張します。

構文

op{cond} Rd, Rn, #lsb, #width

各パラ メータには以下の意味があ り ます。

op SBFX または UBFX を指定します。

cond 任意の条件コードを指定します。

Rd デスティネーシ ョ ンレジスタを指定します。

Rn ソースレジスタを指定します。

lsb ビッ ト フ ィールドの 下位ビッ トのビッ ト番号を 0 ~ 31 の範囲内で指

定します。

width ビッ ト フ ィールドの幅を 1 ~ (32–lsb) の範囲内で指定します。

レジスタの制約条件

レジスタには PC は使用できません。

SP は ARM 命令で使用できますが、 これらは ARMv6T2 以降では非推奨です。Thumb 命令では SP は使用できません。

条件フラグ

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

アーキテクチャ

これらの ARM 命令は、 ARMv6T2 以降で使用できます。

これらの 32 ビッ ト Thumb 命令は、 ARMv6T2 以降で使用できます。

これらの命令の 16 ビッ ト Thumb バージ ョ ンはあ り ません。

関連項目

参照 :

• 条件コード (3-175 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-118ID 0 8 1 7 1 1 Non-Confidential

Page 153: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

3.8.3 SXT、 SXTA、 UXT、 UXTA

符号拡張、 符号拡張と加算、 ゼロ拡張、 ゼロ拡張と加算。

構文

SXT<extend>{cond} {Rd}, Rm {,rotation}

SXTA<extend>{cond} {Rd}, Rn, Rm {,rotation}

UXT<extend>{cond} {Rd}, Rm {,rotation}

UXTA<extend>{cond} {Rd}, Rn, Rm {,rotation}

各パラ メータには以下の意味があ り ます。

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

B16 2 つの 8 ビッ ト値を 2 つの 16 ビッ ト値に拡張します。

B 8 ビッ ト値を 32 ビッ ト値に拡張します。

H 16 ビッ ト値を 32 ビッ ト値に拡張します。

cond 任意の条件コードを指定します。

Rd デスティネーシ ョ ンレジスタを指定します。

Rn 加算する数を保持するレジスタを指定します (SXTA と UXTA の場合のみ)。

Rm 拡張する値を保持するレジスタを指定します。

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

ROR #8 Rm の値が右に 8 ビッ ト ロテート されます。

ROR #16 Rm の値が右に 16 ビッ ト ロテート されます。

ROR #24 Rm の値が右に 24 ビッ ト ロテート されます。

rotation を省略した場合、 ロテートは実行されません。

演算

これらの命令は以下の処理を行います。

1. Rm の値を右に 0 ビッ ト 、 8 ビッ ト 、 16 ビッ ト 、 または 24 ビッ ト ロテート しま

す。

2. 取得した値に対して以下のいずれかの処理を行います。

• ビッ ト [7:0] を抽出し、 32 ビッ トに符号拡張またはゼロ拡張します。 命令

で拡張と加算を行う場合は、 Rn の値を加算します。

• ビッ ト [15:0] を抽出し、 32 ビッ トに符号拡張またはゼロ拡張します。 命令

で拡張と加算を行う場合は、 Rn の値を加算します。

• ビッ ト [23:16] とビッ ト [7:0] を抽出し、これらのビッ ト を 16 ビッ トに符号

拡張またはゼロ拡張します。 命令で拡張と加算を行う場合は、 これらのット をそれぞれ Rn のビッ ト [31:16] とビッ ト [15:0] に加算して、 結果のビッ

ト [31:16] とビッ ト [15:0] を作成します

レジスタの制約条件

レジスタには PC は使用できません。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-119ID 0 8 1 7 1 1 Non-Confidential

Page 154: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

SP は ARM 命令で使用できますが、 これらは ARMv6T2 以降では非推奨です。Thumb 命令では SP は使用できません。

条件フラグ

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

16 ビッ ト命令

これらの命令は、 Thumb コード内では次の形式で使用できます。 これらは 16 ビッ ト

命令です。

SXTB Rd, Rm Rd と Rm は共に Lo レジスタである必要があ り ます。

SXTH Rd, Rm Rd と Rm は共に Lo レジスタである必要があ り ます。

UXTB Rd, Rm Rd と Rm は共に Lo レジスタである必要があ り ます。

UXTH Rd, Rm Rd と Rm は共に Lo レジスタである必要があ り ます。

アーキテクチャ

これらの ARM 命令は、 ARMv6 以降で使用できます。

これらの 32 ビッ ト Thumb 命令は、 ARMv6T2 以降で使用できます。 ARMv7-M アー

キテクチャでは、 これらは ARMv7E-M 実装でだけ使用できます。

これらの 16 ビッ ト Thumb 命令は、 ARMv6 以降で使用できます。

SXTH r3, r9, r4 UXTAB16EQ r0, r0, r4, ROR #16

誤用例

SXTH r9, r3, r2, ROR #12 ; ロ テー ト の値は 0、 8、 16、 ま たは 24 である こ と。

関連項目

参照 :

• 条件コード (3-175 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-120ID 0 8 1 7 1 1 Non-Confidential

Page 155: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

3.8.4 PKHBT、 PKHTB

ハーフワードパッ ク命令です。

あるレジスタに保持されているハーフワード と別のレジスタに保持されているハーフワードを結合します。 オペランドの 1 つは、 ハーフワードを出する前にシフ トで

きます。

構文

PKHBT{cond} {Rd}, Rn, Rm{, LSL #leftshift}

PKHTB{cond} {Rd}, Rn, Rm{, ASR #rightshift}

各パラ メータには以下の意味があ り ます。

PKHBT Rn のビッ ト [15:0] とシフ ト された Rm の値のビッ ト [31:16] を結合します。

PKHTB Rn のビッ ト [31:16] とシフ ト された Rm の値のビッ ト [15:0] を結合します。

cond 任意の条件コードを指定します。

Rd デスティネーシ ョ ンレジスタを指定します。

Rn 第 1 オペランドを保持するレジスタを指定します。

Rm 第 1 オペランドを保持するレジスタを指定します。

leftshift 0 ~ 31 の範囲内にある値を指定します。

rightshift 1 ~ 32 の範囲内にある値を指定します。

レジスタの制約条件

レジスタには PC は使用できません。

SP は ARM 命令で使用できますが、 これらは ARMv6T2 以降では非推奨です。Thumb 命令では SP は使用できません。

条件フラグ

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

アーキテクチャ

これらの ARM 命令は、 ARMv6 以降で使用できます。

これらの 32 ビッ ト Thumb 命令は、 ARMv6T2 以降で使用できます。 ARMv7-M アー

キテクチャでは、 これらは ARMv7E-M 実装でだけ使用できます。

これらの命令の 16 ビッ ト Thumb バージ ョ ンはあ り ません。

PKHBT r0, r3, r5 ; R3 の下位ハー フ ワー ド と

; R5 の上位ハー フ ワー ド を結合する

PKHBT r0, r3, r5, LSL #16 ; R3 の下位ハー フ ワー ド と

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-121ID 0 8 1 7 1 1 Non-Confidential

Page 156: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

; R5 の下位ハー フ ワー ド を結合する

PKHTB r0, r3, r5, ASR #16 ; R3 の上位ハー フ ワー ド と

; R5 の上位ハー フ ワー ド を結合する

また、 異なるシフ ト値を使用して、 第 2 オペランドを位取りするこ と もできます。

誤用例

PKHBTEQ r4, r5, r1, ASR #8 ; PKHBT では ASR を指定できない

関連項目

参照 :

• 条件コード (3-175 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-122ID 0 8 1 7 1 1 Non-Confidential

Page 157: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

3.9 分岐命令と制御命令

このセクシ ョ ンは以下のサブセクシ ョ ンから構成されています。

• B、 BL、 BX、 BLX、 BXJ (3-124 ページ)

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

• IT (3-128 ページ)

If-Then 命令です。 IT 命令は、 後続の 大 4 個の命令を条件付き命令にします。

その際に、 条件はすべて同じにするこ と も、 一部の命令に対しては条件を 1 つ設定し、 残りの命令に対しては逆条件を設定するこ と も可能です。 IT は Thumb-2 でのみ使用できます。

• CBZ、 CBNZ (3-131 ページ)

ゼロ との比較と分岐を行う命令です。 これらの命令は、 Thumb-2 でのみ使用で

きます。

• TBB、 TBH (3-132 ページ)

テーブル分岐バイ ト とテーブル分岐ハーフワードです。 これらの命令は、Thumb-2 でのみ使用できます。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-123ID 0 8 1 7 1 1 Non-Confidential

Page 158: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

3.9.1 B、 BL、 BX、 BLX、 BXJ

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

構文

op1{cond}{.W} label

op2{cond} Rm

各パラ メータには以下の意味があ り ます。

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

B 分岐命令です。

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

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

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

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

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

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

cond 任意の条件コードを指定します。 cond は、 これらの命令のすべての形式

で使用できるわけではあ り ません。

.W Thumb-2 の 32 ビッ ト B 命令を使用させるために命令の幅の指定子を指定

します (省略可)。

label PC 相対式を指定します。

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

演算

これらのすべての命令は、 label への分岐または Rm に保持されているアドレスへの分

岐を発生させます。 さ らに、 以下の処理を行います。

• BL と BLX 命令は、 次の命令のアドレスを LR (R14 : リ ンクレジスタ) にコピー

します。

• BX 命令と BLX 命令は、 プロセッサ状態を ARM から Thumb に変更したり、

Thumb から ARM に変更した りできます。

BLX label を使用する と、 状態が必ず変更されます。

BX Rm と BLX Rm を使用する と Rm のビッ ト [0] からターゲッ トの状態を得るこ とが

できます。

— Rm のビッ ト [0] が 0 の場合、 プロセッサは ARM 状態に切り替わるか、

ARM 状態が維持されます。

— Rm のビッ ト [0] が 1 の場合、 プロセッサは Thumb 状態に切り替わるか、

Thumb 状態が維持されます。

• BXJ 命令はプロセッサの状態を Jazelle に変更します。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-124ID 0 8 1 7 1 1 Non-Confidential

Page 159: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

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

表 3-9 は、 ARM 状態と Thumb 状態で使用できる命令を示しています。 この表に記載

されていない命令は使用できません。 括弧内は、 命令を使用できるアーキテクチャの 初のバージ ョ ンを示しています。

分岐の範囲の拡張

マシンレベルの B 命令と BL 命令では、 現在の命令のアドレスから分岐できる範囲が

制限されています。 ただし、 label が範囲外の場合でも これらの命令を使用できます。

ほとんどの場合、 リ ンカが label を配置する場所は分かり ません。 必要な場合には、

リ ンカはコードを追加してよ り長い分岐を可能にします。 追加されたコードは veneer (ベニア) と呼ばれます。

Thumb の B

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

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

命令を生成します。

表 3-9 分岐命令の使用可否と分岐の範囲

命令 ARM 16 ビッ ト Thumb 32 ビッ ト Thumb

B label ± 32MB (すべて) ± 2KB (すべての T)

± 16MBa (すべての T2)

B{cond} label ± 32MB (すべて) -252 ~ +258 (すべての T)

± 1MBa (すべての T2)

BL label ± 32MB (すべて) ± 4MB b (すべての T)

± 16MB (すべての T2)

BL{cond} label ± 32MB (すべて) - - -

BX Rm c 使用可能 (4T、 5) 使用可能 (すべての T)

16 ビッ ト を使用 (すべての T2)

BX{cond} Rm c 使用可能 (4T、 5) - - -

BLX label ± 32MB (5) ± 4MB b (5T) ± 16MB (ARMv7-M を除くすべての T2)

BLX Rm 使用可能 (5) 使用可能 (5T) 16 ビッ ト を使用 (すべての T2)

BLX{cond} Rm 使用可能 (5) - - -

BXJ Rm 使用可能 (5J、 6) - 使用可能 (ARMv7-M を除くすべての T2)

BXJ{cond} Rm 使用可能 (5J、 6) - - -

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

b. これは命令対です。

c. ARMv4 向けにアセンブルされたコードの場合、 アセンブラは BX{cond} Rm を受け入れ、 リ ンク時に MOV{cond} PC, Rm に変換します (ただし、 ARMv4T をターゲッ ト とするオブジェク トが存在しない場合)。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-125ID 0 8 1 7 1 1 Non-Confidential

Page 160: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

参考と して、 32 ビッ ト Thumb 命令を使用して到達できるターゲッ トで失敗が発生す

る場合でも、 .W 指定なしの B は常に 16 ビッ ト Thumb コードの命令を生成します。

Thumb-2EE での BX、 BLX、 および BXJ

これらの命令は、 Thumb-2EE コード内で分岐と して使用できますが、 状態の変更に

は使用できません。 この命令は op{cond} label 形式では Thumb-2EE. で使用できませ

ん。 レジスタ形式では Rm のビッ ト [0] が 1 になっている必要があ り、 ターゲッ ト アド

レスでの実行は ThumbEE 状態で継続します。

注 BXJ は、 Thumb-2EE では BX と同様に機能します。

レジスタの制約条件

Rm での PC は ARM BX 命令で使用できますが、これは ARMv6T2 以降では非推奨です。

他の ARM 命令では PC は使用できません。

Rm での PC は、Thumb BX 命令で使用できます。他の Thumb 命令では PC は使用できま

せん。

Rm での SP はこれらの ARM 命令で使用できますが、 これらは ARMv6T2 以降では非

推奨です。

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

条件フラグ

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

アーキテクチャ

各アーキテクチャでのこれらの命令の使用可否の詳細については、 表 3-9 (3-125 ページ) を参照して下さい。

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

関連項目

概念 :

『アセンブラの使用』 :

• レジスタ相対式と PC 相対式 (8-7 ページ) .

『 リ ンカの使用』 :

• 第 4 章 イ メージの構造と生成 .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-126ID 0 8 1 7 1 1 Non-Confidential

Page 161: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

参照 :

• 条件コード (3-175 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-127ID 0 8 1 7 1 1 Non-Confidential

Page 162: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

3.9.2 IT

IT (If-Then) 命令は、 後続の 大 4 個の命令 (IT ブロ ッ ク) を条件付き命令にしま

す。 条件はすべて同じにするこ と も、 論理的に逆の条件を混在させるこ と も可能です。

構文

IT{x{y{z}}} {cond}

各パラ メータには以下の意味があ り ます。

x IT ブロ ッ クで 2 番目の命令の条件スイ ッチを指定します。

y IT ブロ ッ クで 3 番目の命令の条件スイ ッチを指定します。

z IT ブロ ッ クで 4 番目の命令の条件スイ ッチを指定します。

cond IT ブロ ッ クで 初の命令の条件を指定します。

IT ブロ ッ クで 2 ~ 4 番目の命令の条件スイ ッチは、 以下のいずれかにするこ とがで

きます。

T Then。 条件 cond を命令に適用します。

E Else。 cond の逆条件を命令に適用します。

使用法

BKPT 命令を除き、 IT ブロッ ク内の命令 (分岐も含む) では、 構文の {cond} の部分の

条件を指定する必要があ り ます。

コード内に IT 命令を記述する必要はあ り ません。 後続の命令に指定された条件に

従って、 アセンブラによ り自動的に生成されるからです。 ただし、 IT 命令を記述す

る と、 アセンブラは IT 命令に指定された条件を、 後続の命令に指定された条件と突

き合わせて検証します。

IT 命令を記述する と、 コード設計における条件付き命令の配置および条件の選択を

確実に検討するこ とができるよ うにな り ます。

ARM コードにアセンブルする と きにも、 アセンブラは同じチェッ クを行いますが、

IT 命令は生成しません。

16 ビッ ト命令は通常は条件コードフラグに影響を及ぼしますが、 IT ブロ ッ ク内で使

用される と きには影響を及ぼしません。 ただし、 CMP、 CMN、 および TST は例外です。

IT ブロ ッ ク内の BKPT 命令は必ず実行されるため、 構文の {cond} の部分で条件を指定

する必要はあ り ません。 IT ブロ ッ クは次の命令から継続されます。

注 AL 条件を使用するこ とによって、 無条件命令に対しても IT ブロ ッ クを使用するこ と

ができます。

条件分岐の分岐の範囲は、 IT ブロ ッ ク内の方が IT ブロ ッ ク外よ り長くな り ます。

制約条件

IT ブロ ッ ク内では、 以下の命令を使用できません。

• IT

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-128ID 0 8 1 7 1 1 Non-Confidential

Page 163: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

• CBZ および CBNZ• TBB および TBH• CPS、 CPSID、 および CPSIE• SETEND

IT ブロ ッ ク使用時のその他の制約条件は、 以下のとおりです。

• 分岐または PC を変更する命令が、 ブロ ッ ク内で 後の命令である場合、 使用

できるのは IT ブロ ッ ク内に限られます。

• 例外ハンド ラから復帰する場合でない限り、 IT ブロッ ク内ではどの命令にも分

岐できません。

• IT ブロ ッ ク内でアセンブラディ レクティブを使用するこ とはできません。

注 これらの命令のいずれかが IT ブロ ッ ク内で使用されている場合、 診断メ ッセージが

表示されます。

条件フラグ

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

例外

IT 命令とそれに対応する IT ブロ ッ クの間、 または IT ブロ ッ クの内部で例外が発生す

る場合があ り ます。 例外が発生する と、 適切な例外ハンド ラが始され、 適切な復帰情報が LR と SPSR に格納されます。

例外からの復帰に使用する目的で設計された命令は、 例外から復帰するために通常どおり使用可能であ り、 IT ブロ ッ クの実行は正常に再開されます。 これは、 プログ

ラムカウンタを変更する命令が、 IT ブロ ッ ク内の命令に分岐する唯一の方法です。

アーキテクチャ

この 16 ビッ ト Thumb 命令は ARMv6T2 以降で使用できます。

ARM コードにおける IT は、 コードを生成しない疑似命令です。

この命令の 32 ビッ トバージ ョ ンはあ り ません。

ITTE NE ; IT は省略可能

ANDNE r0,r0,r1 ; 16 ビ ッ ト AND (ANDS ではない)

ADDSNE r2,r2,#1 ; 32 ビ ッ ト ADDS (16 ビ ッ ト ADDS の場合は IT ブ ロ ッ ク に フ ラ グは設定されな

い) MOVEQ r2,r3 ; 16 ビ ッ ト MOV

ITT AL ; フ ラ グ を設定しない 16 ビ ッ ト命令を 2 つ生成する

ADDAL r0,r0,r1 ; 16 ビ ッ ト ADD (ADDS ではない)

SUBAL r2,r2,#1 ; 16 ビ ッ ト SUB (SUB ではない)

ADD r0,r0,r1 ; 32 ビ ッ ト ADD に展開する。 IT ブ ロ ッ ク では使用しない

ITT EQ

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-129ID 0 8 1 7 1 1 Non-Confidential

Page 164: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

MOVEQ r0,r1BEQ dloop ; IT ブ ロ ッ ク末尾での分岐は可能

ITT EQMOVEQ r0,r1BKPT #1 ; BKPT 命令は必ず実行されるADDEQ r0,r0,#1

誤用例

IT NE ADD r0,r0,r1 ; 構文エ ラ ー : IT ブ ロ ッ ク内で条件コードが使用されていない

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-130ID 0 8 1 7 1 1 Non-Confidential

Page 165: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

3.9.3 CBZ、 CBNZ

ゼロ との比較と分岐を行う命令です (ゼロまたはゼロでない場合に分岐します)。

構文

CBZ Rn, label

CBNZ Rn, label

各パラ メータには以下の意味があ り ます。

Rn オペランドを保持するレジスタを指定します。

label 分岐先を指定します。

使用法

CBZ 命令または CBNZ 命令を使用して、 条件コードフラグの変更を防止し、 命令数を削

減するこ とができます。

条件コードフラグが変更されない点を除き、 CBZ Rn, label は以下のコマンド と同じ意

味です。

CMP Rn, #0 BEQ label

条件コードフラグが変更されない点を除き、 CBNZ Rn, label は以下のコマンド と同じ

意味です。

CMP Rn, #0 BNE label

制約条件

分岐先は、 命令の後の 4 ~ 130 バイ ト以内に指定する必要があ り ます。 また、 同じ実

行状態であるこ とが必要です。

これらの命令は IT ブロ ッ ク内では使用できません。

条件フラグ

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

アーキテクチャ

これらの 16 ビッ ト Thumb 命令は、 ARMv6T2 以降で使用できます。

これらの命令の ARM バージ ョ ンおよび 32 ビッ ト Thumb バージ ョ ンはあ り ません。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-131ID 0 8 1 7 1 1 Non-Confidential

Page 166: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

3.9.4 TBB、 TBH

テーブル分岐 (バイ ト ) とテーブル分岐 (ハーフワード)。

構文

TBB [Rn, Rm]

TBH [Rn, Rm, LSL #1]

各パラ メータには以下の意味があ り ます。

Rn ベースレジスタを指定します。 このレジスタには、 分岐の長さテーブル

のアドレスが保持されます。 Rn に SP は指定できません。

Rn に PC を指定している場合、 使用される値は 「命令のアドレス + 4」 と

な り ます。

Rm インデクスレジスタを指定します。 テーブル内の場所を指定するインデ

クスを保持します。

Rm に PC と SP は指定できません。

演算

これらの命令によ り、 シングルバイ トオフセッ ト (TBB) またはハーフワードオフ

セッ ト (TBH) のテーブルを使用した PC 相対の順方向の分岐が発生します。 Rn はテー

ブルへのポインタを提供し、 Rm はテーブル内のインデクスを提供します。 分岐の長

さは、 テーブルから返されたバイ ト (TBB) またはハーフワード (TBH) の値の 2 倍に

なり ます。 分岐テーブルのターゲッ トは同じ実行状態である必要があ り ます。

注釈

Thumb-2EE では、 ベースレジスタの値が 0 の場合、 HandlerBase - 4 にある NullCheck ハンド ラへの分岐が実行されます。

アーキテクチャ

これらの 32 ビッ ト Thumb 命令は、 ARMv6T2 以降で使用できます。

これらの命令の ARM バージ ョ ンおよび 16 ビッ ト Thumb バージ ョ ンはあ り ません。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-132ID 0 8 1 7 1 1 Non-Confidential

Page 167: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

3.10 コプロセッサ命令

このセクシ ョ ンは以下のサブセクシ ョ ンから構成されています。

• CDP、 CDP2 (3-134 ページ)

コプロセッサデータ演算です。

• MCR、 MCR2、 MCRR、 MCRR2 (3-135 ページ)

コプロセッサ命令を使用した ARM レジスタからコプロセッサへの移動命令で

す。

• MRC、 MRC2、 MRRC、 MRRC2 (3-136 ページ)

コプロセッサ命令を使用したコプロセッサから ARM レジスタへの移動命令で

す。

• MSR (3-138 ページ)

ARM レジスタからシステムコプロセッサへの移動命令です。

• MRS (3-139 ページ)

システムコプロセッサから ARM レジスタへの移動命令です。

• SYS (3-140 ページ)

システムコプロセッサ命令を実行します。

• LDC、 LDC2、 STC、 STC2 (3-141 ページ)

メモ リ と コプロセッサ間のデータ転送命令です。

注 コプロセッサ命令は、 指定されたコプロセッサが存在しないと きやイネーブルにさ

れていないと きに実行される と、 未定義命令という例外が発生ます。

このセクシ ョ ンでは、 ベク タ浮動小数点およびワイヤレス MMX テク ノ ロジの命令

については説明しません。 XScale 固有の命令については本書の後半説明します。

関連項目

参照 • 第 4 章 NEON と VFP プログラ ミ ング

• 第 5 章 ワイヤレス MMX テク ノ ロジの命令

• その他の命令 (3-143 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-133ID 0 8 1 7 1 1 Non-Confidential

Page 168: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

3.10.1 CDP、 CDP2

コプロセッサデータ演算です。

構文

op{cond} coproc, #opcode1, CRd, CRn, CRm{, #opcode2}

各パラ メータには以下の意味があ り ます。

op CDP または CDP2 を指定します。

cond 任意の条件コードを指定します。 ARM コードでは、 cond を CDP2 で使用できません。

coproc 命令が実行されるコプロセッサの名前を指定します。 標準名は pn で、 n は 0 ~ 15 の整数です。

opcode1 4 ビッ ト コプロセッサ固有のオペコードを指定します。

opcode2 オプシ ョ ンと しての 3 ビッ ト コプロセッサ固有のオペコードを指

定します。

CRd、 CRn、 CRm コプロセッサレジスタを指定します。

使用法

これらの命令の使用方法はコプロセッサによって異な り ます。 詳細については、 コプロセッサのマニュアルを参照して下さい。

アーキテクチャ

ARM 命令 CDP は、 ARM アーキテクチャのすべてのバージ ョ ンで使用できます。

ARM 命令 CDP2 は、 ARMv5T 以降で使用できます。

これらの 32 ビッ ト Thumb 命令は、 ARMv6T2 以降で使用できます。

これらの命令の 16 ビッ ト Thumb バージ ョ ンはあ り ません。

関連項目

参照 :

• 条件コード (3-175 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-134ID 0 8 1 7 1 1 Non-Confidential

Page 169: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

3.10.2 MCR、 MCR2、 MCRR、 MCRR2

ARM レジスタからコプロセッサへの移動命令です。 コプロセッサによっては、 さま

ざまな演算を追加で指定できる場合があ り ます。

構文

op1{cond} coproc, #opcode1, Rt, CRn, CRm{, #opcode2}

op2{cond} coproc, #opcode3, Rt, Rt2, CRm

各パラ メータには以下の意味があ り ます。

op1 MCR または MCR2 を指定します。

op2 MCRR または MCRR2 を指定します。

cond 任意の条件コードを指定します。 ARM コードでは、 cond を MCR2 または MCRR2 で使用できません。

coproc 命令が実行されるコプロセッサの名前を指定します。 標準名は pn で、 n は 0 ~ 15 の整数です。

opcode1 3 ビッ ト コプロセッサ固有のオペコードを指定します。

opcode2 オプシ ョ ンと しての 3 ビッ ト コプロセッサ固有のオペコードを指定しま

す。

opcode3 4 ビッ ト コプロセッサ固有のオペコードを指定します。

Rt、 Rt2 ARM ソースレジスタを指定します。 Rt および Rt2 に PC は指定できませ

ん。

CRn、 CRm コプロセッサレジスタを指定します。

使用法

これらの命令の使用方法はコプロセッサによって異な り ます。 詳細については、 コプロセッサのマニュアルを参照して下さい。

アーキテクチャ

ARM 命令 MCR は、 ARM アーキテクチャのすべてのバージ ョ ンで使用できます。

ARM 命令 MCR2 は、 ARMv5T 以降で使用できます。

ARM 命令 MCRR は、 ARMv6 以降、 および ARMv5T の E バリ アン トで使用できます。

ARM 命令 MCRR2 は、 ARMv6 以降で使用できます。

これらの 32 ビッ ト Thumb 命令は、 ARMv6T2 以降で使用できます。

これらの命令の 16 ビッ ト Thumb バージ ョ ンはあ り ません。

関連項目

参照 :

• 条件コード (3-175 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-135ID 0 8 1 7 1 1 Non-Confidential

Page 170: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

3.10.3 MRC、 MRC2、 MRRC、 MRRC2

コプロセッサから ARM レジスタへの移動命令です。

コプロセッサによっては、 さまざまな演算を追加で指定できる場合があ り ます。

構文

op1{cond} coproc, #opcode1, Rt, CRn, CRm{, #opcode2}

op2{cond} coproc, #opcode3, Rt, Rt2, CRm

各パラ メータには以下の意味があ り ます。

op1 MRC または MRC2 を指定します。

op2 MRRC または MRRC2 を指定します。

cond 任意の条件コードを指定します。 ARM コードでは、 cond を MRC2 または MRRC2 で使用できません。

coproc 命令が実行されるコプロセッサの名前を指定します。 標準名は pn で、 n は 0 ~ 15 の整数です。

opcode1 3 ビッ ト コプロセッサ固有のオペコードを指定します。

opcode2 オプシ ョ ンと しての 3 ビッ ト コプロセッサ固有のオペコードを指定しま

す。

opcode3 4 ビッ ト コプロセッサ固有のオペコードを指定します。

Rt、 Rt2 ARM デスティネーシ ョ ンレジスタを指定します。 Rt および Rt2 に PC は指定できません。

MRC と MRC2 では Rt に APSR_nzcv も使用できます。 つま り、 コプロセッサ

は、 APSR の条件コードフラグの値を変更する命令を実行します。

CRn、 CRm コプロセッサレジスタを指定します。

使用法

これらの命令の使用方法はコプロセッサによって異な り ます。 詳細については、 コプロセッサのマニュアルを参照して下さい。

アーキテクチャ

ARM 命令 MRC は、 ARM アーキテクチャのすべてのバージ ョ ンで使用できます。

ARM 命令 MRC2 は、 ARMv5T 以降で使用できます。

ARM 命令 MRRC は、 ARMv6 以降、 および ARMv5T の E バリ アン トで使用できます。

ARM 命令 MRRC2 は、 ARMv6 以降で使用できます。

これらの 32 ビッ ト Thumb 命令は、 ARMv6T2 以降で使用できます。

これらの命令の 16 ビッ ト Thumb バージ ョ ンはあ り ません。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-136ID 0 8 1 7 1 1 Non-Confidential

Page 171: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

関連項目

参照 :

• 条件コード (3-175 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-137ID 0 8 1 7 1 1 Non-Confidential

Page 172: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

3.10.4 MSR

ARM レジスタからシステムコプロセッサレジスタへの移動命令です。

構文

MSR{cond} coproc_register, Rn

各パラ メータには以下の意味があ り ます。

cond 任意の条件コードを指定します。

coproc_register

コプロセッサレジスタの名前を指定します。

Rn ARM ソースレジスタを指定します。 Rn に PC は指定できません。

使用法

この命令を使用する と、 CP14 または CP15 コプロセッサの書き込み可能レジスタに

書き込むこ とができます。 該当するすべてのコプロセッサレジスタの名前は、『ARMv7-AR アーキテクチャ リ ファレンスマニュアル』 に記載されています。 以下に

例を示します。

MSR SCTLR, R1 ; R1 の内容を CP15 コ プ ロセ ッ サレジス タ

; SCTLR に書き込む

アーキテクチャ

この ARM 命令 MSR は、 ARMv7-A および ARMv7-R で使用できます。

この 32 ビッ ト Thumb 命令 MSR は、 ARMv7-A および ARMv7-R で使用できます。

これらの命令の 16 ビッ ト Thumb バージ ョ ンはあ り ません。

関連項目

リ ファレンス :

• SYS (3-140 ページ)

• MRS (3-139 ページ)

• MRS (3-146 ページ)

• MSR (3-148 ページ)

• 条件コード (3-175 ページ)

• 『ARM アーキテクチャ リ ファレンスマニュアル』、http://infocenter.arm.com/help/topic/com.arm.doc.subset.arch.reference/index.html.

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-138ID 0 8 1 7 1 1 Non-Confidential

Page 173: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

3.10.5 MRS

システムコプロセッサレジスタから ARM レジスタへの移動命令です。

構文

MRS{cond} Rn, coproc_register

MRS{cond} APSR_nzcv, special_register

各パラ メータには以下の意味があ り ます。

cond 任意の条件コードを指定します。

coproc_register

コプロセッサレジスタの名前を指定します。

special_register

APSR_nzcv に書き込むこ とのできるコプロセッサレジスタの名前を指定

します。 コプロセッサレジスタ DBGDSCRint の場合にのみ使用できま

す。

Rn ARM デスティネーシ ョ ンレジスタを指定します。 Rn に PC は指定できま

せん。

使用法

この命令を使用する と、 CP14 または CP15 コプロセッサレジスタを読み取るこ とが

できます。 ただし、 書き込み専用レジスタは除きます。 該当するべてのコプロセッサレジスタの名前は、 『ARMv7-AR アーキテクチャ リ ファレンスマニュアル』 に記載

されています。 以下に例を示します。

MRS R1, SCTLR ; CP15 コ プ ロセ ッ サレジス タ SCTLR の内容を

; R1 に書き込む

アーキテクチャ

この ARM 命令 MRS は、 ARMv7-A および ARMv7-R で使用できます。

この 32 ビッ ト Thumb 命令 MRS は、 ARMv7-A および ARMv7-R で使用できます。

これらの命令の 16 ビッ ト Thumb バージ ョ ンはあ り ません。

関連項目

リ ファレンス :

• 条件コード (3-175 ページ)

• MSR (3-138 ページ)

• MSR (3-148 ページ)

• MRS (3-146 ページ)

• 『ARM アーキテクチャ リ ファレンスマニュアル』、http://infocenter.arm.com/help/topic/com.arm.doc.subset.arch.reference/index.html.

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-139ID 0 8 1 7 1 1 Non-Confidential

Page 174: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

3.10.6 SYS

システムコプロセッサ命令を実行します。

構文

SYS{cond} instruction{, Rn}

各パラ メータには以下の意味があ り ます。

cond 任意の条件コードを指定します。

instruction

実行するコプロセッサ命令を指定します。

Rn 命令のオペランドを指定します。 引数を取る命令の場合、 Rn は必須で

す。 引数を取らない命令の場合、 Rn は省略可能です。 これを指定しない

場合は R0 が使用されます。 Rn に PC は指定できません。

使用法

この命令を使用する と、 キャ ッシュ、 分岐予測子、 TLB 処理など、 特別なコプロ

セッサ命令を実行できます。 これらの命令は、 特別な書き込み専用コプロセッサレジスタに書き込みを行います。 命令の名前は書き込み専用コプロセッサレジスタの名前と同じであ り、 『ARMv7-AR アーキテクチャ リ ファレンスマニュアル』 に記載さ

れています。 以下に例を示します。

SYS ICIALLUIS ; すべての命令キ ャ ッ シ ュ の Inner Shareable を Point; of Unification に無効化し、 分岐タ ーゲ ッ ト のキ ャ ッ シ ュ を ク リ アする

アーキテクチャ

ARM 命令 SYS は、 ARMv7-A および ARMv7-R で使用できます。

32 ビッ ト Thumb 命令 SYS は、 ARMv7-A および ARMv7-R で使用できます。

これらの命令の 16 ビッ ト Thumb バージ ョ ンはあ り ません。

関連項目

参照 :

• 条件コード (3-175 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-140ID 0 8 1 7 1 1 Non-Confidential

Page 175: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

3.10.7 LDC、 LDC2、 STC、 STC2

メモ リ と コプロセッサ間のデータ転送命令です。

構文

op{L}{cond} coproc, CRd, [Rn]

op{L}{cond} coproc, CRd, [Rn, #{-}offset] ; オ フ セ ッ ト ア ド レシン グ

op{L}{cond} coproc, CRd, [Rn, #{-}offset]! ; プ レ イ ンデ ク ス ア ド レシン グ

op{L}{cond} coproc, CRd, [Rn], #{-}offset ; ポス ト イ ンデ ク ス ア ド レシン グ

op{L}{cond} coproc, CRd, label

以下の意味があ り ます。

op LDC、 LDC2、 STC、 STC2 のいずれかを指定します。

cond 任意の条件コードを指定します。

ARM コードでは、 cond を LDC2 または STC2 で使用できません。

L 長い転送を指定するオプシ ョ ンの接尾文字を指定します。

coproc 命令が実行されるコプロセッサの名前を指定します。 標準名は pn で、 n は 0 ~ 15 の整数です。

CRd ロードまたはス ト アに使用するコプロセッサレジスタを指定します。

Rn メモ リ アドレスのベース となるレジスタを指定します。 PC が指定され

ている場合、 使用される値は 「現在の命令のアドレス + 8」 とな り ます。

- 任意に指定できるマイナス符号です。 - が指定されている場合、 オフ

セッ トが Rn から減算されます。 指定されていない場合は、 オフセッ ト

が Rn に加算されます。

offset 0 ~ 1020 の範囲で 4 の倍数となる式を指定します。

! 任意に指定できる接尾文字です。 ! を指定する と、 オフセッ ト を含むア

ドレスが Rn にライ トバッ ク されます。

label ワード境界で整列する PC 相対式を指定します。

label は現在の命令から 1020 バイ ト以内に配置する必要があ り ます。

使用法

これらの命令の使用方法はコプロセッサによって異な り ます。 詳細については、 コプロセッサのマニュアルを参照して下さい。

Thumb-2EE では、 ベースレジスタの値が 0 の場合、 HandlerBase - 4 にある NullCheck ハンド ラへの分岐が実行されます。

アーキテクチャ

LDC と STC は、 ARM アーキテクチャのすべてのバージ ョ ンで使用できます。

LDC2 と STC2 は ARMv5T 以降で使用できます。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-141ID 0 8 1 7 1 1 Non-Confidential

Page 176: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

これらの 32 ビッ ト Thumb 命令は、 ARMv6T2 以降で使用できます。

これらの命令の 16 ビッ ト Thumb バージ ョ ンはあ り ません。

レジスタの制約条件

プレインデクスおよびポス ト インデクス命令では、 Rn に PC は使用できません。 これ

らは、 Rn にライ トバッ クする形式です。

Rn での PC は、 Thumb STC および STC2 命令では使用できません。

ラベル構文を使用するか、 Rn が PC である ARM STC および STC2 命令は、 ARMv6T2 以降では非推奨です。

関連項目

概念 :

『アセンブラの使用』 :

• レジスタ相対式と PC 相対式 (8-7 ページ) .

参照 :

• 条件コード (3-175 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-142ID 0 8 1 7 1 1 Non-Confidential

Page 177: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

3.11 その他の命令

このセクシ ョ ンは以下のサブセクシ ョ ンから構成されています。

• BKPT (3-144 ページ)

ブレークポイン ト命令です。

• SVC (3-145 ページ)

スーパーバイザコール (以前の SWI) です。

• MRS (3-146 ページ)

CPSR または SPSR の内容の汎用レジスタへの移動命令です。

• MSR (3-148 ページ)

CPSR または SPSR の指定フ ィールドへの、 イ ミディエート値または汎用レジス

タの内容のロード命令です。

• CPS (3-151 ページ)

プロセッサ状態を変更する命令です。

• SMC (3-152 ページ)

セキュアモニターコール (以前の SMI) です。

• SETEND (3-153 ページ)

CPSR 内のエンディアンビッ ト を設定します。

• NOP (3-154 ページ)

演算なし。

• SEV、 WFE、 WFI、 YIELD (3-155 ページ)

イベン トの設定、 イベン ト待機、 割り込み待機、 明け渡しを行う ヒ ン ト命令です。

• DBG (3-157 ページ)

デバッグ命令です。

• DMB、 DSB、 ISB (3-158 ページ)

データ メモ リバリ ア、 データ同期バリ ア、 および命令同期バリ アの各ヒン ト命令です。

• MAR、 MRA (3-160 ページ)

2 本の汎用レジスタ と 40 ビッ ト内部アキュムレータの間で転送を実行します

(XScale コプロセッサ 0 の命令です)。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-143ID 0 8 1 7 1 1 Non-Confidential

Page 178: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

3.11.1 BKPT

ブレークポイン ト命令です。

構文

BKPT #imm

各パラ メータには以下の意味があ り ます。

imm 以下の範囲の整数になる式を指定します。

• ARM 命令の場合は 0 ~ 65535 (16 ビッ ト値)

• 16 ビッ ト Thumb 命令の場合は 0 ~ 255 (8 ビッ ト値)

使用法

BKPT 命令によって、 プロセッサはデバッグ状態に入り ます。 デバッグツールは、 こ

の動作を使用して、 特定のアドレスにある命令に到達した時点でシステム状態を調査するこ とができます。

ARM 状態と Thumb 状態のどちらの場合も、imm は ARM ハード ウェアによって無視さ

れます。 ただし、 デバッガはこの値を使用して、 ブレークポイン トに関する情報をス ト アできます。

BKPT は無条件命令です。 ARM コードでは条件コードが含まれないよ うにして下さ

い。 Thumb コードでは、 BKPT 命令には条件コードの接尾文字は不要です。 BKPT 命令

は、 条件コードの接尾文字に関係なく必ず実行されるためです。

アーキテクチャ

この ARM 命令は、 ARMv5T 以降で使用できます。

この 16 ビッ ト Thumb 命令は ARMv5T 以降で使用できます。

この命令の 32 ビッ ト Thumb バージ ョ ンはあ り ません。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-144ID 0 8 1 7 1 1 Non-Confidential

Page 179: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

3.11.2 SVC

スーパーバイザコールです。

構文

SVC{cond} #imm

各パラ メータには以下の意味があ り ます。

cond 任意の条件コードを指定します。

imm 以下の範囲の整数になる式を指定します。

• ARM 命令の場合は 0 ~ 224–1 (24 ビッ ト値)

• 16 ビッ ト Thumb 命令の場合は 0 ~ 255 (8 ビッ ト値)

使用法

SVC 命令は、 例外を発生させます。 つま り、 プロセッサモードがスーパーバイザモー

ドに変更され、 CPSR がスーパーバイザモードの SPSR に保存され、 行は SVC ベクタ

へ分岐されます。

imm はプロセッサによって無視されます。 ただし、 この値は、 例外ハンド ラで取得し

て、 要求されているサービスを特定するこ とができます。

注 SVC は、 以前のバージ ョ ンの ARM アセンブリ言語では SWI と呼ばれていました。 SWI 命令は、 旧称が SWI であるこ とを示すコ メン ト付きで SVC に逆アセンブルされます。

条件フラグ

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

アーキテクチャ

この ARM 命令は、 ARM アーキテクチャのすべてのバージ ョ ンで使用できます。

16 ビッ ト Thumb 命令は、 ARM アーキテクチャのすべての T バリ アン トで使用でき

ます。

この命令の 32 ビッ ト Thumb バージ ョ ンはあ り ません。

関連項目

概念

『ARM プロセッサをターゲッ ト と したソフ ト ウェア開発』 :

• 第 6 章 プロセッサ例外処理 .

参照 :

• 条件コード (3-175 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-145ID 0 8 1 7 1 1 Non-Confidential

Page 180: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

3.11.3 MRS

PSR の内容の汎用レジスタへの移動命令です。

構文

MRS{cond} Rd, psr

各パラ メータには以下の意味があ り ます。

cond 任意の条件コードを指定します。

Rd デスティネーシ ョ ンレジスタを指定します。

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

APSR 任意のプロセッサ、 任意のモードで使用します。

CPSR ARMv7-M と ARMv6-M 以外の任意のプロセッサで、 代わりに

同義の APSR を使用し、 デバッグ状態で使用します。

SPSR ARMv7-M と ARMv6-M 以外の任意のプロセッサ、 特権モード

でのソフ ト ウェア実行でのみ使用します。

Mpsr ARMv7-M と ARMv6-M プロセッサのみで使用します。

Mpsr 次のいずれかを指定できます。 IPSR、 EPSR、 IEPSR、 IAPSR、 EAPSR、 MSP、 PSP、

XPSR、 PRIMASK、 BASEPRI、 BASEPRI_MAX、 FAULTMASK、 または CONTROL。

使用法

MRS は MSR と組み合わせ、 PSR を更新するための読み出し、 修正、 書き込みのシーケ

ンスで使用するこ とによ り、 プロセッサモードの変更や Q フラグのク リ などを行う

こ とができます。

プロセススワ ップコードでは、 関連する PSR の内容を含め、 スワ ップアウ ト されて

いるプロセスのプログラマのモデルの状態を保存する必要があます。 同様に、 スワ ップインされているプロセスの状態も復元する必要があ り ます。 これらの操作には、 MRS/store および load/MSR 命令シーケンスを使用します。

SPSR

プロセッサがユーザモードやシステムモードの場合は、 SPSR へアクセスしないで下

さい。 これはユーザ自身が注意する必要があ り ます。 アセンブラは、 コードがどのプロセッサモードで実行されるかについての情報を持たないため、 警告メ ッセージを生成できません。

プロセッサがユーザモードまたはシステムモードの場合に SPSR にアクセスしよ う と

した場合の結果は予測不可能です。

CPSR

CPSR のエンディアンビッ ト (E) は、 特権モードでのソフ ト ウェア実行で読み出す

こ とができます。

プロセッサがデバッグ状態でデバッグモードを完全停止している と きにのみ、 E ビッ

ト以外の CPSR 実行状態ビッ ト を読み出すこ とができます。 そ以外の場合、 CPSR の実行状態ビッ トはゼロ と して読み出されます。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-146ID 0 8 1 7 1 1 Non-Confidential

Page 181: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

条件フラグはどのプロセッサのどのモードでも読み取れます。 ユーザモードで条件コードフラグにのみアクセスする場合は、 APSR を使用して下さい。

レジスタの制約条件

ARM 命令では PC は使用できません。 Rd での SP は ARM 命令で使用できますが、 こ

れは ARMv6T2 以降では非推奨です。

Thumb 命令では PC または SP は使用できません。

条件フラグ

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

アーキテクチャ

この ARM 命令は、 ARM アーキテクチャのすべてのバージ ョ ンで使用できます。

これらの 32 ビッ ト Thumb 命令は、 ARMv6T2 以降で使用できます。

この命令の 16 ビッ ト Thumb バージ ョ ンはあ り ません。

関連項目

概念

『アセンブラの使用』 :

• カレン トプログラムステータスレジスタ (3-23 ページ) .

参照 : • MSR (3-148 ページ)

• MSR (3-138 ページ)

• MRS (3-139 ページ)

• 条件コード (3-175 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-147ID 0 8 1 7 1 1 Non-Confidential

Page 182: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

3.11.4 MSR

イ ミディエート値または汎用レジスタの内容をプログラム状態レジスタ (PSR) の指

定されたフ ィールドにロード します。

構文

MSR{cond} APSR_flags, Rm

各パラ メータには以下の意味があ り ます。

cond 任意の条件コードを指定します。

flags 移動する APSR フラグ (複数可) を指定します。 flags には以下の 1 つ以

上を指定できます。

nzcvq ALU フラグフ ィールドマスク、 PSR[31:27] (ユーザモード)

g SIMD GE フラグフ ィールドマスク、 PSR[19:16] (ユーザモー

ド)

Rm ソースレジスタを指定します。 Rm に PC は指定できません。

構文 (ARMv7-M と ARMv6-M を除く )

ARMv7 と ARMv6M 以外のアーキテクチャでは以下の構文も使用できます。

MSR{cond} APSR_flags, #constant

MSR{cond} psr_fields, #constant

MSR{cond} psr_fields, Rm

各パラ メータには以下の意味があ り ます。

cond 任意の条件コードを指定します。

flags 移動する APSR フラグ (複数可) を指定します。 flags には以下の 1 つ以

上を指定できます。

nzcvq ALU フラグフ ィールドマスク、 PSR[31:27] (ユーザモード)

g SIMD GE フラグフ ィールドマスク、 PSR[19:16] (ユーザモー

ド)

constant 数値を求める式を指定します。 この値は、 32 ビッ トのワード内でビッ

ト を偶数ロテート して得られる 8 ビッ トパターンに対応している必要が

あ り ます。 Thumb では使用できません。

Rm ソースレジスタを指定します。 Rm に PC は指定できません。

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

CPSR デバッグ状態で使用、 代わりに同義の APSR を使用します。

SPSR 任意のプロセッサ、 特権モードでのソフ ト ウェア実行でのみ

使用します。

fields 移動する SPSR または CPSR フ ィールド (複数可) を指定します。fields には次のものを指定できます。

c 制御フ ィールドマスクバイ ト 、 PSR[7:0] (特権モードでのソフ

ト ウェア実行)

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-148ID 0 8 1 7 1 1 Non-Confidential

Page 183: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

x 拡張フ ィールドマスクバイ ト 、 PSR[15:8] (特権モードでのソ

フ ト ウェア実行)

s ステータスフ ィールドマスクバイ ト 、 PSR[23:16] (特権モード

でのソフ ト ウェア実行)

f フラグフ ィールドマスクバイ ト 、 PSR[31:24] (特権モードでの

ソフ ト ウェア実行)

構文 (ARMv7-M と ARMv6-M のみ)

ARMv7 と ARMv6M では以下の構文も使用できます。

MSR{cond} psr, Rm

各パラ メータには以下の意味があ り ます。

cond 任意の条件コードを指定します。

Rm ソースレジスタを指定します。 Rm に PC は指定できません。

psr 次のいずれかを指定できます。 APSR、 IPSR、 EPSR、 IEPSR、 IAPSR、 EAPSR、

XPSR、 MSP、 PSP、 PRIMASK、 BASEPRI、 BASEPRI_MAX、 FAULTMASK、 または CONTROL。

使用法

ユーザモードでは、 以下のよ うにな り ます。

• APSR は条件フラグ、 Q、 または GE ビッ トにアクセスするために使用します。

• CPSR の未割り当てビッ ト 、 特権付きビッ ト 、 または実行状態ビッ トへの書き

込みが無視されます。 そのため、 ユーザモードのプログラムが特権モドでのソフ ト ウェア実行に変更されるこ とはあ り ません。

ユーザモードまたはシステムモードの場合に SPSR にアクセスした場合の結果は予測

不可能です。

レジスタの制約条件

ARM 命令では PC は使用できません。 Rm での SP は ARM 命令で使用できますが、 こ

れらは ARMv6T2 以降では非推奨です。

Thumb 命令では PC または SP は使用できません。

条件フラグ

この命令は、 APSR_nzcvq または CPSR_f フ ィールドが指定されている場合にフラグを明

示的に更新します。

アーキテクチャ

この ARM 命令は、 ARM アーキテクチャのすべてのバージ ョ ンで使用できます。

この 32 ビッ ト Thumb 命令は ARMv6T2 以降で使用できます。

この命令の 16 ビッ ト Thumb バージ ョ ンはあ り ません。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-149ID 0 8 1 7 1 1 Non-Confidential

Page 184: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

関連項目

参照 :

• MRS (3-146 ページ)

• MRS (3-139 ページ)

• MSR (3-138 ページ)

• 条件コード (3-175 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-150ID 0 8 1 7 1 1 Non-Confidential

Page 185: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

3.11.5 CPS

CPS (プロセッサ状態の変更命令) は、 他の CPSR ビッ ト を変更するこ とな く、 CPSR のモード、 A、 I、 および F のビッ トの 1 つ以上を変更します。

CPS は、 特権モードでのソフ ト ウェア実行でのみ使用でき、 ユーザモードでは作用し

ません。

CPS は、 条件付きにするこ とはできないため、 IT ブロ ッ クでは使用できません。

構文

CPSeffect iflags{, #mode}

CPS #mode

各パラ メータには以下の意味があ り ます。

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

IE 割り込みまたはアボート をイネーブルにします。

ID 割り込みまたはアボート をディセーブルにします。

iflags 以下の項目のシーケンスを指定します。

a 不正確なアボート をイネーブルまたはディセーブルします。

i IRQ 割り込みをイネーブルまたはディセーブルします。

f FIQ 割り込みをイネーブルまたはディセーブルします。

mode 変更先のモードの番号を指定します。

条件フラグ

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

16 ビッ ト命令

これらの命令は、 Thumb コード内では次の形式で使用できます。 これらは 16 ビッ ト

命令です。

• CPSIE iflags• CPSID iflags

16 ビッ ト Thumb 命令ではモードの変更を指定できません。

アーキテクチャ

この ARM 命令は、 ARMv6 以降で使用できます。

この 32 ビッ ト Thumb 命令は ARMv6T2 以降で使用できます。

この 16 ビッ ト Thumb 命令は、 ARMv6 以降の T バリ アン トで使用できます。

CPSIE if ; 割り込み と高速割り込みを イネーブルにする

CPSID A ; 不正確なアボー ト をデ ィ セーブルにする

CPSID ai, #17 ; 不正確なアボー ト と割り込みをデ ィ セーブルに し、 FIQ モー ド に移行する

CPS #16 ; ユーザモード に移行する

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-151ID 0 8 1 7 1 1 Non-Confidential

Page 186: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

3.11.6 SMC

セキュアモニターコールです。

構文

SMC{cond} #imm4

各パラ メータには以下の意味があ り ます。

cond 任意の条件コードを指定します。

imm4 4 ビッ トのイ ミディエート値を指定します。 この値は、 ARM プロセッサ

では無視されますが、 SMC 例外ハンド ラで使用して、 要求されている

サービスを特定するこ とができます。

SMC は、 以前のバージ ョ ンの ARM アセンブリ言語では SMI と呼ばれていました。 SMI 命令は、 旧称が SMI であるこ とを示すコ メン ト付きで SMC に逆アセンブルされます。

アーキテクチャ

この ARM 命令は ARMv6 以降の実装で使用できます。 ただし、 セキュ リ ティの拡張

が必要です。

この 32 ビッ ト Thumb 命令は ARMv6T2 以降の実装で使用可能です。 ただし、 セキュ

リ テ ィの拡張が必要です。

この命令の 16 ビッ ト Thumb バージ ョ ンはあ り ません。

関連項目

リ ファレンス :

• 条件コード (3-175 ページ)

• 『ARM アーキテクチャ リ ファレンスマニュアル』、http://infocenter.arm.com/help/topic/com.arm.doc.subset.arch.reference/index.html.

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-152ID 0 8 1 7 1 1 Non-Confidential

Page 187: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

3.11.7 SETEND

CPSR 内のエンディアンビッ ト を、 他のビッ トに影響を与えるこ とな く設定します。

SETEND は、 条件付きにするこ とはできないため、 IT ブロ ッ クでは使用できません。

構文

SETEND specifier

以下の意味があ り ます。

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

BE ビッグエンディアン形式

LE リ トルエンディアン形式

使用法

SETEND を使用する と、 異なるエンディアン形式のデータにアクセスできます。 例え

ば、 リ トルエンディアン形式のアプリ ケーシ ョ ンから、 ビッグエンディアン形式で DMA フォーマッ ト された複数のデータフ ィールドにアクセスできます。

アーキテクチャ

この ARM 命令は、 ARMv6 以降で使用できます。

この 16 ビッ ト Thumb 命令は、 ARMv6-M および ARMv7-M アーキテクチャを除く ARMv6 以降の T バリ アン トで使用できます。

この命令の 32 ビッ ト Thumb バージ ョ ンはあ り ません。

SETEND BE ; ビ ッ グ エ ンデ ィ ア ン ア ク セス用に CPSR E ビ ッ ト を設定する LDR r0, [r2, #header] LDR r1, [r2, #CRC32] SETEND le ; ア プ リ ケーシ ョ ンの他の部分の リ ト ルエ ンデ ィ ア ン ア ク セス用に

; CPSR E ビ ッ ト を設定する

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-153ID 0 8 1 7 1 1 Non-Confidential

Page 188: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

3.11.8 NOP

演算なし。

構文

NOP{cond}

各パラ メータには以下の意味があ り ます。

cond 任意の条件コードを指定します。

使用法

NOP は何も行いません。NOP がターゲッ ト アーキテクチャで特定の命令と して実装され

ていない場合、 アセンブラはこれを擬似命令と して扱い、 MOV r0, r0 (ARM) や MOV r8, r8 (Thumb) など、 何も行わない別の命令を生成します。

NOP は、 必ずしも時間のかかる NOP ではあ り ません。 プロセッサによ り、 この命令は、

実行ステージに到達する前にパイプラインから削除される場合があ り ます。

例えば、 NOP をパディングに使用するこ とで、 次に続く命令を ARM では 64 ビッ ト境

界に、 Thumb では 32 ビッ ト境界に配置できます。

アーキテクチャ

この ARM 命令は、 ARMv6K 以降で使用できます。

この 32 ビッ ト Thumb 命令は ARMv6T2 以降で使用できます。

この 16 ビッ ト Thumb 命令は ARMv6T2 以降で使用できます。

NOP は他のすべての ARM および Thumb アーキテクチャで疑似命令と して使用できま

す。

関連項目

参照 :

• 条件コード (3-175 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-154ID 0 8 1 7 1 1 Non-Confidential

Page 189: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

3.11.9 SEV、 WFE、 WFI、 YIELD

イベン トの設定、 イベン ト待機、 割り込み待機、 および明け渡しを行う ヒ ン ト命令です。

構文

SEV{cond}

WFE{cond}

WFI{cond}

YIELD{cond}

各パラ メータには以下の意味があ り ます。

cond 任意の条件コードを指定します。

使用法

これらはヒン ト命令です。 これらの命令は任意に実装するこ とができます。 いずれの命令も実装されていない場合は、NOP と して実行されます。命令がターゲッ トで NOP と して実行された場合、 診断メ ッセージが生成されます。

SEV、 WFE、 WFI、 および YIELD は、 ARMv6T2 では NOP 命令と して実行されます。

SEV

SEV によ り、 マルチプロセッサシステム内のすべてのコアに対してイベン ト を発生さ

せます。 SEV を実装する場合は、 WFE も実装する必要があ り ます。

WFE

イベン ト レジスタが設定されていない場合、 WFE は、 以下のいずれかのイベン トが発

生するまで実行を保留します。

• IRQ 割り込み (CPSR の I ビッ トでマスク されている場合を除く)

• FIQ 割り込み (CPSR の F ビッ トでマスク されている場合を除く)

• 不正確なデータアボート (CPSR の A ビッ トでマスク されている場合を除く)

• デバッグエン ト リ要求 (デバッグがイネーブルの場合)

• 別のプロセッサが SEV 命令を使用して発生させたイベン ト

イベン ト レジスタが設定されている場合、 WFE は、 そのレジスタをク リ アしてすぐに

戻り ます。

WFE を実装する場合は、 SEV も実装する必要があ り ます。

WFI

WFI は、 以下のいずれかのイベン トが発生するまで実行を保留します。

• IRQ 割り込み (CPSR の I ビッ トの設定とは無関係)

• FIQ 割り込み (CPSR の F ビッ トの設定とは無関係)

• 不正確なデータアボート (CPSR の A ビッ トでマスク されている場合を除く)

• デバッグエン ト リ要求 (デバッグがイネーブルされているかど うかは無関係)

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-155ID 0 8 1 7 1 1 Non-Confidential

Page 190: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

YIELD

YIELD は、 現在のスレッ ドが、 スワ ップアウ トできるタスク (スピンロ ッ クなど) を

実行しているこ とをハード ウェアに示します。 ハード ウェアは、 このヒ ン ト を使用して、 マルチスレッ ドシステムでスレッ ドを中断および再開できます。

アーキテクチャ

これらの ARM 命令は、 ARMv6K 以降で使用できます。

これらの 32 ビッ ト Thumb 命令は、 ARMv6T2 以降で使用できます。

これらの 16 ビッ ト Thumb 命令は、 ARMv6T2 以降で使用できます。

関連項目

参照 :

• NOP (3-154 ページ)

• 条件コード (3-175 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-156ID 0 8 1 7 1 1 Non-Confidential

Page 191: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

3.11.10 DBG

デバッグです。

構文

DBG{cond} {option}

以下の意味があ り ます。

cond 任意の条件コードを指定します。

option ヒ ン トの演算に任意に指定できる制限です。 範囲は 0 ~ 15 です。

使用法

DBG はヒン ト命令です。 これらの命令は任意に実装するこ とができます。 実装されて

いない場合は、 NOP と して動作します。 命令がターゲッ トで NOP と して実行された場

合、 診断メ ッセージが生成されます。

DBG は、 ARMv6K および ARMv6T2 では NOP 命令と して実行されます。

デバッグ ヒン トは、 デバッグシステムおよび関連するシステムにヒン ト を提供します。 この命令がどのよ うに使用されているかについては、 各シテムのマニュアルを参照して下さい。

アーキテクチャ

これらの ARM 命令は、 ARMv6K 以降で使用できます。

これらの 32 ビッ ト Thumb 命令は、 ARMv6T2 以降で使用できます。

この命令の 16 ビッ ト Thumb バージ ョ ンはあ り ません。

関連項目

参照 : • NOP (3-154 ページ)

• 条件コード (3-175 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-157ID 0 8 1 7 1 1 Non-Confidential

Page 192: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

3.11.11 DMB、 DSB、 ISB

データ メモ リバリ ア、 データ同期バリ ア、 および命令同期バリ アです。

構文

DMB{cond} {option}

DSB{cond} {option}

ISB{cond} {option}

各パラ メータには以下の意味があ り ます。

cond 任意の条件コードを指定します。

option ヒ ン トの演算に任意に指定できる制限です。

DMB

データ メモ リバリ アはメモ リバリ アと して機能します。 これによ り、 DMB 命令よ り前

にプログラム順で発生する明示的なすべてのメモ リ アクセスは、 DMB 命令よ り後にプ

ログラム順で出てく る明示的なデータアクセスよ り も先に検出されます。 これは、プロセッサで実行されている他の命令の順序に影響するこ とはあ り ません。

option に使用できる値は以下のとおりです。

SY システム全体の DMB 演算。 これはデフォルト値なので、 省略できます。

ST ス ト アの完了のみを待機する DMB 演算。

ISH 内部共有可能ド メ インのみを対象と した DMB 演算。

ISHST ス ト アの完了のみを待機し、 内部共有可能ド メ インを対象と した DMB 演算。

NSH 統合ポイン トのみを対象と した DMB 演算。

NSHST ス ト アの完了のみを待機し、統合ポイン トのみを対象と した DMB 演算。

OSH 外部共有可能ド メ インのみを対象と した DMB 演算。

OSHST ス ト アの完了のみを待機し、 外部共有可能ド メ インを対象と した DMB 演算。

DSB

データ同期バリ アは、 特殊なメモ リバリ アと して機能します。 この命令が完了するまで、 この命令よ り後にあるプログラム順の命令は実行されまん。 この命令は以下の場合に完了します。

• この命令が完了する前のすべての明示的なメモ リ アクセス

• この命令が完了する前のキャ ッシュ、 分岐予測子、 および TLB メ ンテナンスの

すべての処理

option に使用できる値は以下のとおりです。

SY システム全体の DSB 演算。 これはデフォルト値なので、 省略できます。

ST ス ト アの完了のみを待機する DSB 演算。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-158ID 0 8 1 7 1 1 Non-Confidential

Page 193: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

ISH 内部共有可能ド メ インのみを対象と した DSB 演算。

ISHST ス ト アの完了のみを待機し、 内部共有可能ド メ インを対象と した DSB 演算。

NSH 統合ポイン トのみを対象と した DSB 演算。

NSHST ス ト アの完了のみを待機し、 統合ポイン トのみを対象と した DSB 演算。

OSH 外部共有可能ド メ インのみを対象と した DSB 演算。

OSHST ス ト アの完了のみを待機し、 外部共有可能ド メ インを対象と した DSB 演算。

ISB

命令同期バリ アはプロセッサのパイプラインをフラ ッシュするため、 ISB に続くすべ

ての命令は、 ISB 命令が完了した後、 キャ ッシュまたはメモ リからフェ ッチされま

す。 これによ り、 ISB 命令よ り前に実行されたコンテキス ト変更処理 (ASID の変更

など)、 完了した TLB メ ンテナンス処理、 分岐予測子メンテナンス処理、 および CP15 レジスタへのすべての変更は、 ISB よ り後にフェッチされた命令で認識されま

す。

また、 ISB 命令によ り、 この命令よ り後にプログラム順で出てく るすべての分岐は、

必ず ISB 命令よ り後で認識されるコンテキス ト と共に分岐予測ロジッ クに書き込まれ

ます。 これは、 命令ス ト リームを正し く実行するために必要なこ とです。

option に使用できる値は以下のとおりです。

SY システム全体の ISB 演算。 これはデフォルト値なので、 省略できます。

エイリアス

DMB と DSB でサポート されている option の代替値は以下のとおりですが、 使用は非推

奨です。

• SH は ISH のエイ リ アスです。

• SHST は ISHST のエイ リ アスです。

• UN は NSH のエイ リ アスです。

• UNST は NSHST のエイ リ アスです。

アーキテクチャ

これらの ARM および 32 ビッ ト Thumb 命令は、 ARMv7 で使用できます。

これらの命令の 16 ビッ ト Thumb バージ ョ ンはあ り ません。

関連項目

参照 :

• 条件コード (3-175 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-159ID 0 8 1 7 1 1 Non-Confidential

Page 194: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

3.11.12 MAR、 MRA

2 本の汎用レジスタ と 40 ビッ ト内部アキュムレータの間で転送を実行します。

構文

MAR{cond} Acc, RdLo, RdHi

MRA{cond} RdLo, RdHi, Acc

各パラ メータには以下の意味があ り ます。

cond 任意の条件コードを指定します。

Acc 内部アキュムレータを指定します。 標準名は accx で、 x は 0 ~ n の整数

です。n の値はプロセッサによって異なり ます。現在のプロセッサでは 0 が使用されています。

RdLo、 RdHi 汎用レジスタを指定します。RdLo と RdHi を PC にするこ とはできません。

また、 MRA では異なるレジスタでなければなり ません。

使用法

MAR 命令は、 RdLo の内容を Acc のビッ ト [31:0] にコピーし、 RdHi の 下位バイ ト を Acc のビッ ト [39:32] にコピーします。

MRA 命令は以下を実行します。

• Acc のビッ ト [31:0] を RdLo にコピーします。

• Acc のビッ ト [39:32] を RdHi のビッ ト [7:0] にコピーします。

• Acc のビッ ト [39] を RdHi のビッ ト [31:8] にコピーして値を符号拡張します。

アーキテクチャ

これらの ARM コプロセッサ 0 命令は、 XScale プロセッサでのみ使用できます。

これらの命令の Thumb バージ ョ ンはあ り ません。

MAR acc0, r0, r1 MRA r4, r5, acc0 MARNE acc0, r9, r2 MRAGT r4, r8, acc0

関連項目

参照 :

• 条件コード (3-175 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-160ID 0 8 1 7 1 1 Non-Confidential

Page 195: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

3.12 ThumbEE 命令

ENTERX と LEAVEX を除き、これらの ThumbEE 命令はアセンブラが ThumbEE 状態に切り

替わったと きにのみ受け入れられます。 切り替えには --thumbx コマンド ラ インオプ

シ ョ ンまたは THUMBX ディ レクティブを使用します。

このセクシ ョ ンは以下のサブセクシ ョ ンから構成されています。

• ENTERX、 LEAVEX (3-162 ページ)

Thumb 状態と ThumbEE 状態の間で切り替えを行う命令です。

• CHKA (3-163 ページ)

配列をチェッ クする命令です。

• HB、 HBL、 HBLP、 HBP (3-164 ページ)

ハンド ラの分岐命令です。 指定されたハンド ラに分岐します。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-161ID 0 8 1 7 1 1 Non-Confidential

Page 196: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

3.12.1 ENTERX、 LEAVEX

Thumb 状態と ThumbEE 状態の間で切り替えを行う命令です。

構文

ENTERX

LEAVEX

使用法

ENTERX を使用する と、 Thumb 状態から ThumbEE 状態に切り替わるか、 または ThumbEE 状態が維持されます。

LEAVEX を使用する と、 ThumbEE 状態から Thumb 状態に切り替わるか、 または Thumb 状態が維持されます。

IT ブロ ッ ク内では、 ENTERX または LEAVEX を使用しないで下さい。

アーキテクチャ

これらの命令は、 ARM 命令セッ トでは使用できません。

これらの 32 ビッ ト Thumb 命令および Thumb-2EE 命令は、 Thumb-2EE をサポートす

る ARMv7 で使用できます。

これらの命令の 16 ビッ ト Thumb バージ ョ ンはあ り ません。

関連項目

リ ファレンス :

• 『ARM アーキテクチャ リ ファレンスマニュアル』、http://infocenter.arm.com/help/topic/com.arm.doc.subset.arch.reference/index.html.

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-162ID 0 8 1 7 1 1 Non-Confidential

Page 197: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

3.12.2 CHKA

CHKA (配列のチェッ ク) は、 2 つのレジスタにある符号なしの値を比較します。

初のレジスタの値が 2 番目のレジスタの値以下か等しい場合、 この命令によ り、

PC が LR にコピーされ、 IndexCheck ハンド ラへの分岐が発生します

構文

CHKA Rn, Rm

以下の意味があ り ます。

Rn 配列のサイズを指定します。 Rn に PC は指定できません。

Rm 配列のインデクスを指定します。 Rn に PC と SP は指定できません。

アーキテクチャ

ARM 状態では使用できません。

この 16 ビッ ト ThumbEE 命令は Thumb-2EE をサポートする ARMv7 のみで使用できま

す。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-163ID 0 8 1 7 1 1 Non-Confidential

Page 198: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

3.12.3 HB、 HBL、 HBLP、 HBP

ハンド ラの分岐命令です。 指定されたハンド ラに分岐します。

この命令は、 必要に応じて、 復帰アドレスを LR にス ト アした り、 パラ メータをハン

ド ラに渡したりするこ とができます。 また、 その両方を行う こ と もできます。

構文

HB{L} #HandlerID

HB{L}P #imm, #HandlerID

各パラ メータには以下の意味があ り ます。

L 任意に指定できる接尾文字です。 L を指定する と、 復帰アドレスが LR に保存されます。

P 任意に指定できる接尾文字です。P を指定する と、 imm の値が R8 のハンド

ラに渡されます。

imm イ ミディエート値を指定します。L を指定した場合、imm に 0 ~ 31 の範囲

の値を指定する必要があ り ます。 この接尾文字を指定しない場合、 imm には 0 ~ 7 の範囲の値を指定する必要があ り ます。

HandlerID 呼び出すハンド ラのインデクス番号を指定します。 P を指定した場合、

HandlerID に 0 ~ 31 の範囲の値を指定する必要があ り ます。 この接尾文

字を指定しない場合、 HandlerID には 0 ~ 255 の範囲の値を指定する必要

があ り ます。

アーキテクチャ

これらの命令は ARM 状態では使用できません。

これらの 16 ビッ ト ThumbEE 命令は、 Thumb-2EE をサポートする ARMv7 の ThumbEE 状態でのみ使用できます。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-164ID 0 8 1 7 1 1 Non-Confidential

Page 199: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

3.13 疑似命令

ARM アセンブラは、 多くの疑似命令をサポート しています。 これらの疑似命令は、

アセンブ リ時に適切な ARM 命令や Thumb 命令の組み合わせに変換されます。

疑似命令については、 以下のサブセクシ ョ ンを参照して下さい。

• ADRL 疑似命令 (3-166 ページ)

PC 相対アドレスまたはレジスタ相対アドレス (中範囲、 位置非依存) をレジス

タにロード します。

• MOV32 疑似命令 (3-169 ページ)

32 ビッ ト イ ミディエート値またはアドレス (範囲無制限、 位置依存) をレジス

タにロード します。 ARMv6T2 以降でのみ使用できます。

• LDR 疑似命令 (3-171 ページ)

32 ビッ ト イ ミディエート値またはアドレス (範囲無制限、 位置依存) をレジス

タにロード します。 すべての ARM アーキテクチャで使用できます。

• UND 疑似命令 (3-174 ページ)

アーキテクチャ上で定義されていない命令を生成します。 すべての ARM アー

キテクチャで使用できます。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-165ID 0 8 1 7 1 1 Non-Confidential

Page 200: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

3.13.1 ADRL 疑似命令

PC 相対アドレスまたはレジスタ相対アドレスをレジスタにロード します。 ADR 命令と

似ていますが、 ADRL では 2 つのデータ処理命令が生成されるため、 ADR よ り広範囲の

アドレスをロードできます。

注 ADRL は、 ARMv6T2 以降の Thumb 命令をアセンブルする と きにのみ使用できます。

構文

ADRL{cond} Rd,label

各パラ メータには以下の意味があ り ます。

cond 任意の条件コードを指定します。

Rd ロードするレジスタを指定します。

label PC 相対式またはレジスタ相対式を指定します。

使用法

ADRL は常に 2 つの 32 ビッ ト命令にアセンブルされます。 1 つの命令でアドレスに到

達できる場合でも、 2 番目の冗余命令が生成されます。

アセンブラが 2 つの命令でアドレスを作成できない場合は、 エラーメ ッセージが生

成され、 アセンブルに失敗します。 よ り広範囲のアドレスをロードするには、 LDR 疑似命令を使用します。

ADRL は、 アドレスが PC 相対またはレジスタ相対であるため、 位置非依存コードを生

成します。

label が PC 相対である場合は、ADRL 疑似命令と同じアセンブラ領域内のアドレスを指

定する必要があ り ます。

BX または BLX 命令のターゲッ ト を生成するために ADRL を使用する と きは、ターゲッ ト

に Thumb 命令が含まれている場合、 そのアドレスの Thumb ビッ ト (ビッ ト 0) を設

定する必要があ り ます。

アーキテクチャと範囲

利用できる範囲は、 使用する命令セッ トによって異な り ます。

ARM バイ ト境界またはハーフワード境界で整列されているアドレスか

ら ± 64KB の範囲

ワード境界で整列されているアドレスから ± 256KB バイ トの範

32 ビッ ト Thumb バイ ト 、 ハーフワード、 またはワード境界で整列されているアド

レスから ± 1MB バイ トの範囲

16 ビッ ト Thumb ADRL 命令は使用できません。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-166ID 0 8 1 7 1 1 Non-Confidential

Page 201: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

所定の範囲は、 Thumb コードでは現在の命令のアドレスから 4 バイ ト、 ARM コード

では現在の命令のアドレスから 2 ワードの位置からの範囲です。 境界調整がこの位

置から 16 バイ ト以上の相対位置にある場合、 よ り広範囲のアドレスを利用できま

す。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-167ID 0 8 1 7 1 1 Non-Confidential

Page 202: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

関連項目

概念

『アセンブラの使用』 :

• レジスタ相対式と PC 相対式 (8-7 ページ)

• レジスタへのイ ミディエート値のロード (5-6 ページ) .

参照 :

• LDR 疑似命令 (3-171 ページ)

• AREA (6-72 ページ)

• 条件コード (3-175 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-168ID 0 8 1 7 1 1 Non-Confidential

Page 203: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

3.13.2 MOV32 疑似命令

以下のいずれかの値をレジスタにロード します。

• 32 ビッ ト イ ミディエート値

• 任意のアドレス

MOV32 は常に 2 つの 32 ビッ ト命令、 MOV と MOVT の対を生成します。 この命令対を使用

して、 32 ビッ ト イ ミディエート値をロード した り、 32 ビッ ト アドレス空間全体にア

クセスした りするこ とができます。

構文

MOV32{cond} Rd, expr

各パラ メータには以下の意味があ り ます。

cond 任意の条件コードを指定します。

Rd ロード先のレジスタを指定します。 Rd に SP と PC は指定できません。

expr 以下のいずれかを指定できます。

symbol このプログラム領域または別のプログラム領域内の

ラベルです。

#constant 任意の 32 ビッ ト イ ミディエート値です。

symbol + constant ラベルと 32 ビッ ト イ ミディエート値を組み合わせた

ものです。

使用法

MOV32 疑似命令の主な目的は以下のとおりです。

• 1 つの命令でイ ミディエート値を生成できない場合にリテラル定数を生成する

こ と

• PC 相対アドレスまたは外部アドレスをレジスタにロードするこ と。 このアドレ

スは、 リ ンカが MOV32 を保持する ELF セクシ ョ ンをどこに配置しても有効です。

注 この方法でロード されたアドレスはリ ンク時に固定されるため、 このコードは

位置依存コードにな り ます。

参照されているラベルが Thumb コード内にある場合、MOV32 はアドレスの Thumb ビッ

ト (ビッ ト 0) を設定します。

アーキテクチャ

この疑似命令は、 ARM、 Thumb 共に ARMv6T2 以降で使用できます。

MOV32 r3, #0xABCDEF12 ; 0xABCDEF12 を R3 に ロー ドする

MOV32 r1, Trigger+12 ; Trigger のア ド レ ス よ り 12 バイ ト上位のア ド レ ス を

; R1 に ロ ー ドする

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-169ID 0 8 1 7 1 1 Non-Confidential

Page 204: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

関連項目

参照 :

• 条件コード (3-175 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-170ID 0 8 1 7 1 1 Non-Confidential

Page 205: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

3.13.3 LDR 疑似命令

以下のいずれかの値をレジスタにロード します。

• 32 ビッ ト イ ミディエート値

• アドレス

注 このセクシ ョ ンでは、 LDR 疑似命令のみを取り上げます。 LDR 命令については説明しま

せん。

構文

LDR{cond}{.W} Rt, =expr

LDR{cond}{.W} Rt, =label_expr

各パラ メータには以下の意味があ り ます。

cond 任意の条件コードを指定します。

.W 任意に指定できる幅指定子を指定します。

Rt ロード先のレジスタを指定します。

expr 数値を求める式を指定します。

label_expr アドレスの PC 相対式または外部式をラベルから数値を加減算する形式

で指定します。

使用法

LDR 疑似命令を使用する場合 :

• expr の値を有効な MOV 命令または MVN 命令でロードできる場合は、アセンブラに

よってその命令が使用されます。

• 有効な MOV 命令または MVN 命令を使用できない場合や、 label_expr 構文が使用さ

れている場合は、 アセンブラは定数を リテラルプールに配置し、 リ テラルプールからその定数を読み出す PC 相対 LDR 命令を生成します。

注 — この方法でロード されたアドレスはリ ンク時に固定されるため、 このコー

ドは位置依存コードにな り ます。

— 定数を保持するアドレスは、 リ ンカが LDR 命令を保持する ELF セクシ ョ ン

をどこに配置しても有効です。

アセンブラは、 label_expr の値を リテラルプールに配置し、 リ テラルプールから この

値をロードする PC 相対 LDR 命令を生成します。

label_expr が外部式であるか、 現在のセクシ ョ ンに含まれていない場合、 アセンブラ

はリ ンカ再配置ディ レクティブをそのオブジェク ト ファ イル内に入れます。 リ ンカはリ ンク時にアドレスを生成します。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-171ID 0 8 1 7 1 1 Non-Confidential

Page 206: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

label_expr がローカルラベルの場合、 アセンブラはリ ンカ再配置ディ レクティブをオ

ブジェク ト ファ イル内に入れ、 そのローカルラベルのシンボルを生成します。 アドレスはリ ンク時に生成されます。 ローカルラベルが Thumb コードを参照する場合、

アドレスの Thumb ビッ ト (ビッ ト 0) が設定されます。

PC から リ テラルプール内の値までのオフセッ トは ± 4KB (ARM、 32 ビッ ト Thumb-2) よ り小さいか、 0 ~ +1KB (16 ビッ ト Thumb-2、 Thumb2 以前の Thumb) の

範囲内である必要があ り ます。 このと き範囲内にリテラルプールがあるこ とを必ず確認して下さい。

参照されているラベルが Thumb コード内にある場合、 LDR 疑似命令は label_expr の Thumb ビッ ト (ビッ ト 0) を設定します。

注 RealView® Compilation Tools (RVCT) v2.2 では、 アドレスの Thumb ビッ トが設定され

ませんでした。 この動作に依存するコードでは、 コマンド ラインオプシ ョ ン --untyped_local_labels を使用して、 アセンブラが Thumb コード内のラベルを参照す

る際に Thumb ビッ ト を設定しないよ うにします。

Thumb コード内の LDR

.W 幅指定子を指定する と、 LDR を使用して ARMv6T2 以降のプロセッサで Thumb コー

ドの 32 ビッ ト命令を生成できます。 LDR.W を指定した場合は、 16 ビッ ト MOV でイ ミ

ディエート値をロードできる場合や、 リ テラルプールが 16 ビッ ト PC 相対ロードの

範囲内にある場合でも、 常に 32 ビッ ト命令が生成されます。

ロード される値がアセンブラの初回パスで未知の場合、 .W なしの LDR は 16 ビッ ト Thumb コード命令を生成します。その結果 32 ビッ トの MOV 命令または MVN 命令で生成

できる値でも 16 ビッ ト PC 相対ロードになり ます。 値が初回パスで既知で、 32 ビッ

トの MOV 命令または MVN 命令を使って生成できる場合は、 MOV 命令または MVN 命令が使

用されます。

LDR 疑似命令は 16 ビッ ト フラグを設定する MOV 命令を生成するこ とはあ り ません。 ア

センブラの --diag_warning 1727 コマンド ラインオプシ ョ ンを使用して、 16 ビッ ト命令

の使用を確認できます。

MOV32 疑似命令を使用する と、 イ ミディエート値やアドレスを リ テラルプールから

ロードせずに生成できます。

LDR r3,=0xff0 ; 0xff0 を R3 に ロー ドする ; => MOV.W r3,#0xff0 LDR r1,=0xfff ; 0xfff を R1 に ロー ドする ; => LDR r1,[pc,offset_to_litpool] ; ... ; litpool DCD 0xfff LDR r2,=place ; place のア ド レ ス を

; R2 に ロ ー ドする ; => LDR r2,[pc,offset_to_litpool] ; ... ; litpool DCD place

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-172ID 0 8 1 7 1 1 Non-Confidential

Page 207: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

関連項目

概念

『アセンブラの使用』 :

• 数値定数 (8-5 ページ)

• レジスタ相対式と PC 相対式 (8-7 ページ)

• ローカルラベル (8-12 ページ)

• レジスタへのイ ミディエート値のロード (5-6 ページ)

• LDR Rd, =const を使用したレジスタへの 32 ビッ ト イ ミディエート値のロード

(5-12 ページ) .

参照 :

• メモ リ アクセス命令 (3-12 ページ)

• LTORG (6-19 ページ)

• MOV32 疑似命令 (3-169 ページ)

• 条件コード (3-175 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-173ID 0 8 1 7 1 1 Non-Confidential

Page 208: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

3.13.4 UND 疑似命令

アーキテクチャ上で定義されていない命令を生成します。 定義されていない命令を実行しよ う とする と未定義命令例外が発生します。 アーキテクチャ上で定義されていない命令は未定義のままにな り ます。

構文

UND{cond}{.W} {#expr}

各パラ メータには以下の意味があ り ます。

cond 任意の条件コードを指定します。

.W 任意に指定できる幅指定子を指定します。

expr 数値を求める式を指定します。 表 3-10 は命令における expr の範囲とエ

ンコーディングを示したものです。 こ こで、 Y は expr をエンコードする

ビッ ト位置を示し、 V は条件コードをエンコードする 4 ビッ ト を示しま

す。

expr が省略された場合、 0 が使用されます。

Thumb コード内の UND

.W 幅指定子を指定する と、 UND を使用して ARMv6T2 以降のプロセッサで Thumb コー

ドの 32 ビッ ト命令を生成できます。 UND.W を指定した場合は、 expr が 0 ~ 255 の範囲

内にある場合でも、 常に 32 ビッ ト命令が生成されます。

逆アセンブリ

この疑似命令からのエンコーディングは DCI に逆アセンブルします。

関連項目

参照 :

• 条件コード (3-175 ページ) .

表 3-10 expr の範囲とエンコーディング

命令 エンコーディング expr のビッ ト数 範囲

ARM 0xV7FYYYFY 16 0-65535

32 ビッ ト Thumb 0xF7FYAYFY 12 0-4095

16 ビッ ト Thumb 0xDEYY 8 0-255

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-174ID 0 8 1 7 1 1 Non-Confidential

Page 209: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ARM 命令と Thumb 命令

3.14 条件コード

条件付きにできる命令には、 任意で条件コードを指定できます。 構文の説明では、条件コードを {cond} と表記しています。 表 3-11 に、 使用可能な条件コードを示しま

す。

注 条件コードの正確な意味は、 条件コードフラグが VFP 命令によってセッ ト されるか、

ARM データ処理命令によってセッ ト されるかによって異な り ます。

関連項目

概念 :

『アセンブラの使用』 :

• 条件コードの意味 (6-8 ページ)

• NEON 命令および VFP 命令の条件付き実行 (9-11 ページ) .

参照 : • IT (3-128 ページ)

• VMRS および VMSR (4-14 ページ) .

表 3-11 条件コードの接尾文字

接尾文字

意味

EQ 等しい

NE 等し くない

CS キャ リー設定 (HS と同じ)

HS 大きいか等しい (符号なし) (CS と同じ)

CC キャ リーク リ ア (LO と同じ)

LO 小さい (符号なし) (CC と同じ)

MI 負の結果

PL 正または 0 の結果

VS オーバーフロー

VC オーバーフローなし

HI 大きい (符号なし)

LS 小さいか等しい (符号なし)

GE 大きいか等しい (符号付き)

LT 小さい (符号付き)

GT 大きい (符号付き)

LE 小さいか等しい (符号付き)

AL 無条件 (デフォルト )

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 3-175ID 0 8 1 7 1 1 Non-Confidential

Page 210: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

第 4 章 NEON と VFP プログラ ミング

以下の各ト ピッ クでは、 NEON™ と VFP コプロセッサのアセンブ リプログラ ミ ングにつ

いて説明します。

• 命令の概要 (4-2 ページ)

• NEON と VFP に共通の命令 (4-7 ページ)

• NEON 論理演算と比較演算 (4-15 ページ)

• NEON 汎用データ処理命令 (4-23 ページ)

• NEON シフ ト命令 (4-36 ページ)

• NEON 汎用算術命令 (4-44 ページ)

• NEON 乗算命令 (4-58 ページ)

• NEON 要素と構造体のロード / ス ト ア命令 (4-64 ページ)

• NEON 疑似命令および VFP 疑似命令 (4-72 ページ)

• VFP 命令 (4-79 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 4-1ID 0 8 1 7 1 1 Non-Confidential

Page 211: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

NEON と VFP プログラ ミング

4.1 命令の概要

このセクシ ョ ンでは、 NEON 命令と VFP 命令の概要を説明します。 このセクシ ョ ン

を使用して、 個々の命令および疑似命令の説明に移動できます。 説明する内容は以下のとおりです。

• NEON 命令

• 共通の NEON 命令と VFP 命令 (4-5 ページ)

• VFP 命令 (4-5 ページ) .

4.1.1 NEON 命令

表 4-1 に NEON 命令の概要を示します。 これらの命令は VFP では使用できません。

表 4-1 NEON 命令の参照ページ

ニーモニック 概要 ページ

VABA、 VABD 絶対差、 絶対差と累積 (4-45 ページ)

VABS 絶対値 (4-46 ページ)

VACGE、 VACGT 以上 (絶対値比較)、 超 (4-20 ページ)

VACLE、 VACLT 以下 (絶対値比較)、 未満 (疑似命令) (4-77 ページ)

VADD 加算 (4-47 ページ)

VADDHN 加算、 上位半分の選択 (4-49 ページ)

VAND ビッ ト単位論理積 (4-16 ページ)

VAND ビッ ト単位論理積 (疑似命令) (4-76 ページ)

VBIC ビッ ト単位ビッ ト ク リ ア (レジスタ) (4-16 ページ)

VBIC ビッ ト単位ビッ ト ク リ ア (イ ミディエート ) (4-17 ページ)

VBIF、 VBIT、

VBSL

False の場合はビッ ト単位挿入、 True の場合はビッ ト単位を挿入、 および選択 (4-18 ページ)

VCEQ、 VCLE、

VCLT

等しい (比較)、 以下 (比較)、 未満 (比較) (4-21 ページ)

VCGE、 VCGT 以上 (比較)、 超 (比較) (4-21 ページ)

VCLE、 VCLT 以下 (比較)、 未満 (比較、 疑似命令) (4-78 ページ)

VCLS、 VCLZ、

VCNT

先行符号ビッ ト カウン ト、 先行ゼロカウン ト、 およびセッ ト ビッ ト カウン ト (4-54 ページ)

VCVT 固定小数点または整数から浮動小数点への変換、 浮動小数点から整数または固定小数点への変換

(4-24 ページ)

VCVT 半精度浮動小数点数と単精度浮動小数点数間の変換 (4-25 ページ)

VDUP ベクタの全レーンへのスカラの複製 (4-26 ページ)

VEOR ビッ ト単位排他的論理和 (XOR) (4-16 ページ)

VEXT 抽出 (4-27 ページ)

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 4-2ID 0 8 1 7 1 1 Non-Confidential

Page 212: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

NEON と VFP プログラ ミング

VFMA、 VFMS 結合積和、 結合積差 (ベクタ) (4-61 ページ)

VHADD、 VHSUB 二分加算、 二分減算 (4-50 ページ)

VLD ベクタロード (4-64 ページ)

VMAX、 VMIN 大値、 小値 (4-53 ページ)

VMLA、 VMLS 積和、 積差 (ベクタ) (4-59 ページ)

VMLA、 VMLS 積和、 積差 (スカラによる) (4-60 ページ)

VMOV 移動 (イ ミディエート ) (4-28 ページ)

VMOV 移動 (レジスタ) (4-19 ページ)

VMOVL、 VMOV{U}N Long 移動、 Narrow 移動 (レジスタ) (4-29 ページ)

VMUL 乗算 (ベクタ) (4-59 ページ)

VMUL 乗算 (スカラによる) (4-60 ページ)

VMVN 負の移動 (イ ミディエート ) (4-28 ページ)

VNEG 否定 (4-46 ページ)

VORN ビッ ト単位否定論理和 (4-16 ページ)

VORN ビッ ト単位否定論理和 (疑似命令) (4-76 ページ)

VORR ビッ ト単位論理和 (レジスタ) (4-16 ページ)

VORR ビッ ト単位論理和 (イ ミディエート ) (4-17 ページ)

VPADD、 VPADAL ペアワイズ加算、 ペアワイズ加算累積 (4-51 ページ)

VPMAX、 VPMIN ペアワイズ 大値、 ペアワイズ 小値 (4-53 ページ)

VQABS 絶対値、 サチュレート (4-46 ページ)

VQADD 加算、 サチュレート (4-47 ページ)

VQDMLAL、VQDMLSL

サチュレート ダブル積和、 積差 (4-62 ページ)

VQDMUL サチュレート ダブル乗算 (4-62 ページ)

VQDMULH 上位半分を返すサチュレート ダブル乗算 (4-63 ページ)

VQMOV{U}N サチュレート移動 (レジスタ) (4-29 ページ)

VQNEG 否定、 サチュレート (4-46 ページ)

VQRDMULH 上位半分を返すサチュレート ダブル乗算 (4-63 ページ)

VQRSHL 左シフ ト、 丸め、 サチュレート (符号付き変数による) (4-39 ページ)

VQRSHR{U}N 右シフ ト、 丸め、 サチュレート (イ ミディエートによる) (4-41 ページ)

VQSHL 左シフ ト、 サチュレート (イ ミディエートによる) (4-37 ページ)

表 4-1 NEON 命令の参照ページ (続き)

ニーモニック 概要 ページ

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 4-3ID 0 8 1 7 1 1 Non-Confidential

Page 213: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

NEON と VFP プログラ ミング

VQSHL 左シフ ト、 サチュレート (符号付き変数による) (4-39 ページ)

VQSHR{U}N 右シフ ト、 サチュレート (イ ミディエートによる) (4-41 ページ)

VQSUB 減算、 サチュレート (4-47 ページ)

VRADDHN 加算、 上位半分の選択、 丸め (4-49 ページ)

VRECPE 逆数の推定 (4-55 ページ)

VRECPS 逆数のステップ (4-56 ページ)

VREV 要素の順番の反転 (4-30 ページ)

VRHADD 二分加算、 丸め (4-50 ページ)

VRSHR、 VRSRA 右シフ ト して丸め、 右シフ ト、 丸め、 累積 (イ ミディエートによる) (4-40 ページ)

VRSQRTE 逆平方根の推定 (4-55 ページ)

VRSQRTS 逆平方根のステップ (4-56 ページ)

VRSUBHN 減算、 上位半分の選択、 丸め (4-49 ページ)

VSHL 左シフ ト (イ ミディエートによる) (4-37 ページ)

VSHR 右シフ ト (イ ミディエートによる) (4-40 ページ)

VSLI 左シフ ト して挿入 (4-42 ページ)

VSRA 右シフ ト、 累積 (イ ミディエートによる) (4-40 ページ)

VSRI 右シフ ト して挿入 (4-42 ページ)

VST ベクタス ト ア (4-64 ページ)

VSUB 減算 (4-47 ページ)

VSUBHN 減算、 上位半分の選択 (4-49 ページ)

VSWP ベクタのスワップ (4-31 ページ)

VTBL、 VTBX ベクタテーブルの検索 (4-32 ページ)

VTRN ベクタ置換 (4-33 ページ)

VTST テス ト ビッ ト (4-22 ページ)

VUZP、 VZIP ベクタのインターリーブと インターリーブの解除 (4-34 ページ)

表 4-1 NEON 命令の参照ページ (続き)

ニーモニック 概要 ページ

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 4-4ID 0 8 1 7 1 1 Non-Confidential

Page 214: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

NEON と VFP プログラ ミング

4.1.2 共通の NEON 命令と VFP 命令

表 4-2 に NEON と VFP に共通する命令の概要を示します。

4.1.3 VFP 命令

表 4-3 (4-6 ページ) に NEON で使用できない VFP 命令の概要を示します。

表 4-2 NEON と VFP に共通の命令の参照ページ

ニーモニック 概要 ページ 演算アーキテクチャ

VLDM 多重ロード (4-9 ページ) - すべて

VLDR ロード (VLDR 疑似命令 (4-73 ページ) も参照) (4-8 ページ) スカラ すべて

ロード (ポス ト インク リ メン ト とプレデク リ メン ト ) (4-74 ページ) スカラ すべて

VMOV 1 本の ARM レジスタから半本分のダブルワードレジスタ

への転送

(4-12 ページ) スカラ すべて

2 本の ARM レジスタから 1 本のダブルワードレジスタへ

の転送

(4-11 ページ) スカラ VFPv2

半本分のダブルワードレジスタから 1 本の ARM レジスタ

への転送

(4-12 ページ) スカラ すべて

1 本のダブルワードレジスタから 2 本の ARM レジスタへ

の転送

(4-11 ページ) スカラ VFPv2

単精度から ARM レジスタへの転送 (4-13 ページ) スカラ すべて

ARM レジスタから単精度への転送 (4-13 ページ) スカラ すべて

VMRS NEON/VFP システムレジスタから ARM レジスタへの転送 (4-14 ページ) - すべて

VMSR ARM レジスタから NEON/VFP システムレジスタへの転送 (4-14 ページ) - すべて

VPOP 完全降順スタ ッ クからの VFP または NEON レジスタの

ポップ

(4-9 ページ) - すべて

VPUSH 完全降順スタ ッ クへの VFP または NEON レジスタのプッ

シュ

(4-9 ページ) - すべて

VSTM 多重ス ト ア (4-9 ページ) - すべて

VSTR ス ト ア (4-8 ページ) スカラ すべて

ス ト ア (ポス ト インク リ メン ト とプレデク リ メン ト ) (4-74 ページ) スカラ すべて

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 4-5ID 0 8 1 7 1 1 Non-Confidential

Page 215: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

NEON と VFP プログラ ミング

表 4-3 VFP 命令の参照ページ

ニーモニック 概要 ページ 演算アーキテクチャ

VABS 絶対値 (4-80 ページ) ベクタ すべて

VADD 加算 (4-81 ページ) ベクタ すべて

VCMP 比較 (4-84 ページ) スカラ すべて

VCVT 単精度と倍精度間の変換 (4-85 ページ) スカラ すべて

浮動小数点と整数間の変換 (4-86 ページ) スカラ すべて

浮動小数点と固定小数点間の変換 (4-87 ページ) スカラ VFPv3

VCVTB、 VCVTT 半精度浮動小数点数と単精度浮動小数点数間の変換 (4-88 ページ) スカラ 半精度

VDIV 除算 (4-81 ページ) ベクタ すべて

VFMA、 VFMS 結合積和、 結合積差 (4-83 ページ) スカラ VFPv4

VFNMA、 VFNMS 否定を伴う結合積和、 否定を伴う結合積差 (4-83 ページ) スカラ VFPv4

VMLA 積和 (4-82 ページ) ベクタ すべて

VMLS 積差 (4-82 ページ) ベクタ すべて

VMOV 単精度または倍精度レジスタへの浮動小数点イ ミディエート値の挿入 (表 4-2 (4-5 ページ) も参照)

(4-89 ページ) スカラ VFPv3

VMUL 乗算 (4-82 ページ) ベクタ すべて

VNEG 否定 (4-80 ページ) ベクタ すべて

VNMLA 否定積和 (4-82 ページ) ベクタ すべて

VNMLS 否定積差 (4-82 ページ) ベクタ すべて

VNMUL 否定乗算 (4-82 ページ) ベクタ すべて

VSQRT 平方根 (4-80 ページ) ベクタ すべて

VSUB 減算 (4-81 ページ) ベクタ すべて

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 4-6ID 0 8 1 7 1 1 Non-Confidential

Page 216: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

NEON と VFP プログラ ミング

4.2 NEON と VFP に共通の命令

このセクシ ョ ンは以下のサブセクシ ョ ンから構成されています。

• VLDR、 VSTR (4-8 ページ)

拡張レジスタロード と ス ト ア。

• VLDM、 VSTM、 VPOP、 VPUSH (4-9 ページ)

拡張レジスタ多重ロード と ス ト ア。

• VMOV (2 本の ARM レジスタ と拡張レジスタ間) (4-11 ページ)

2 本の ARM レジスタ と 64 ビッ ト拡張レジスタ との間で内容を転送します。

• VMOV (ARM レジスタ と NEON スカラの間) (4-12 ページ)

ARM レジスタ と半分の 64 ビッ ト拡張レジスタ との間で内容を転送します。

• VMOV (1 本の ARM レジスタ と単精度 VFP の間) (4-13 ページ)

32 ビッ ト拡張レジスタ と ARM レジスタ との間で内容を転送します。

• VMRS および VMSR (4-14 ページ)

ARM レジスタ と NEON/VFP システムレジスタ との間で内容を転送します。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 4-7ID 0 8 1 7 1 1 Non-Confidential

Page 217: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

NEON と VFP プログラ ミング

4.2.1 VLDR、 VSTR

拡張レジスタロード と ス ト ア。

構文

VLDR{cond}{.size} Fd, [Rn{, #offset}]

VSTR{cond}{.size} Fd, [Rn{, #offset}]

VLDR{cond}{.size} Fd, label

VSTR{cond}{.size} Fd, label

各パラ メータには以下の意味があ り ます。

cond 任意の条件コードを指定します。

size 任意に指定できるデータサイズ指定子です。 Fd が S レジスタの場合は 32、 それ以外の場合は 64 にします。

Fd ロードまたは保存する拡張レジスタを指定します。 NEON 命令の場合

は、 D レジスタである必要があ り ます。 VFP 命令の場合は、 D または S レジスタを指定できます。

Rn 転送用のベースアドレスを保持する ARM レジスタを指定します。

offset 任意の数値式を指定します。 アセンブリ時に数値が求められる必要があ

り ます。 値は 4 の倍数で、 範囲は –1020 ~ +1020 です。 値はベースアド

レスに加算され、 転送に使用するアドレスを形成します。

label PC 相対式を指定します。

label は、 現在の命令から ± 1KB 以内のワード境界で整列する必要があ

り ます。

使用法

VLDR 命令は、 メモ リから拡張レジスタをロード します。 VSTR 命令は、 拡張レジスタの

内容を メモ リに保存します。

Fd が S レジスタの場合は、 1 ワードが転送されます (VFP のみ)。それ以外の場合は 2 ワードが転送されます。

VLDR 疑似命令もあ り ます。

関連項目

概念

『アセンブラの使用』 :

• レジスタ相対式と PC 相対式 (8-7 ページ) .

参照 :

• 条件コード (3-175 ページ)

• VLDR 疑似命令 (4-73 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 4-8ID 0 8 1 7 1 1 Non-Confidential

Page 218: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

NEON と VFP プログラ ミング

4.2.2 VLDM、 VSTM、 VPOP、 VPUSH

拡張レジスタ多重ロード、 多重ス ト ア、 スタ ッ クからのポップ、 スタ ッ クへのプッシュ。

構文

VLDMmode{cond} Rn{!}, Registers

VSTMmode{cond} Rn{!}, Registers

VPOP{cond} Registers

VPUSH{cond} Registers

各パラ メータには以下の意味があ り ます。

mode 以下のいずれかを指定します。

IA 各転送後にアドレスをインク リ メ ン ト します。 IA はデフォルト

値なので、 省略できます。

DB 各転送前にアドレスをデク リ メン ト します。

EA 空上昇スタ ッ ク演算を意味します。 ロードの場合には DB、 保

存の場合には IA と同じです。

FD 完全降順スタ ッ ク演算を意味します。 ロードの場合には IA、保存の場合には DB と同じです。

cond 任意の条件コードを指定します。

Rn 転送用のベースアドレスを保持する ARM レジスタを指定します。

! オプシ ョ ンです。 ! は、 更新されたベースアドレスを Rn にライ トバッ ク

する必要があるこ とを示します。 ! が指定されていない場合、 mode は IA にな り ます。

Registers 連続する拡張レジスタの リ ス ト を中括弧 { および } で囲んで指定します。

リ ス トはコンマで区切って指定するこ と も、 範囲を指定するこ と もできます。 リ ス トには少なく と も 1 本のレジスタを指定する必要があ り ま

す。

S、 D、 または Q レジスタを指定できますが、 混在させないで下さい。 レ

ジスタの数は D レジスタは 16 本、 Q レジスタは 8 本を超えないよ うにし

て下さい。 Q レジスタが指定されている場合は、 逆アセンブ リで D レジ

スタ と して表示されます。

注 VPOP Registers は VLDM sp!, Registers に相当します。

VPUSH Registers は VSTMDB sp!, Registers に相当します。

どちらの形式も使用できます。 VPOP および VPUSH に逆アセンブルされます。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 4-9ID 0 8 1 7 1 1 Non-Confidential

Page 219: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

NEON と VFP プログラ ミング

関連項目

概念

『アセンブラの使用』 :

• LDM および STM を使用したスタ ッ クの実装 (5-26 ページ) .

参照 :

• 条件コード (3-175 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 4-10ID 0 8 1 7 1 1 Non-Confidential

Page 220: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

NEON と VFP プログラ ミング

4.2.3 VMOV (2 本の ARM レジスタ と拡張レジスタ間)

2 本の ARM レジスタ と 64 ビッ ト拡張レジスタ間、 または 2 本の連続する 32 ビッ ト VFP レジスタ間で内容を転送します。

構文

VMOV{cond} Dm, Rd, Rn

VMOV{cond} Rd, Rn, Dm

VMOV{cond} Sm, Sm1, Rd, Rn

VMOV{cond} Rd, Rn, Sm, Sm1

各パラ メータには以下の意味があ り ます。

cond 任意の条件コードを指定します。

Dm 64 ビッ ト拡張レジスタを指定します。

Sm VFP 32 ビッ ト レジスタを指定します。

Sm1 Sm の後続の VFP 32 ビッ ト レジスタを指定します。

Rd、 Rn ARM レジスタです。 Rd および Rn に PC は指定できません。

使用法

VMOV Dm, Rd, Rn は Rd の内容を Dm の下位半分に転送し、 Rn の内容を Dm の上位半分に転

送します。

VMOV Rd, Rn, Dm は Dm の下位半分の内容を Rd に転送し、 Dm の上位半分の内容を Rn に転

送します。

VMOV Rd, Rn, Sm, Sm1 は Sm の内容を Rd に転送し、 Sm1 の内容を Rn に転送します。

VMOV Sm, Sm1, Rd, Rn は Rd の内容を Sm に転送し、 Rn の内容を Sm1 に転送します。

アーキテクチャ

64 ビッ ト命令は以下のもので使用できます。

• NEON• VFPv2 以上

2 x 32 ビッ ト命令は、 VFPv2 以上で使用できます。

関連項目

参照 :

• 条件コード (3-175 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 4-11ID 0 8 1 7 1 1 Non-Confidential

Page 221: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

NEON と VFP プログラ ミング

4.2.4 VMOV (ARM レジスタ と NEON スカラの間)

ARM レジスタ と NEON スカラ間で内容を転送します。

構文

VMOV{cond}{.size} Dn[x], Rd

VMOV{cond}{.datatype} Rd, Dn[x]

各パラ メータには以下の意味があ り ます。

cond 任意の条件コードを指定します。

size データサイズ。 8、 16、 または 32 を指定できます。 省略した場合、 size は 32 になり ます。 VFP 命令の場合は、size は 32 であるか省略する必要があ

り ます。

datatype データ型。 U8、 S8、 U16、 S16、 または 32 を指定します。 省略した場合、

datatype は 32 にな り ます。 VFP 命令の場合は、 datatype は 32 であるか省

略する必要があ り ます。

Dn[x] NEON スカラを指定します。

Rd ARM レジスタを指定します。 Rd に PC は指定できません。

使用法

VMOV Rd, Dn[x] は Dn[x] の内容を Rd の 下位バイ ト 、ハーフワード、またはワードに転

送します。 Rd の残りのビッ トは、 ゼロ拡張か符号拡張のいずれかです。

VMOV Dn[x], Rd は Rd の 下位バイ ト、 ハーフワード、 またはワードを Sn に転送しま

す。

関連項目

概念

『アセンブラの使用』 :

• NEON スカラ (9-20 ページ) .

参照 :

• 条件コード (3-175 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 4-12ID 0 8 1 7 1 1 Non-Confidential

Page 222: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

NEON と VFP プログラ ミング

4.2.5 VMOV (1 本の ARM レジスタ と単精度 VFP の間)

単精度浮動小数点レジスタ と ARM レジスタ間で内容を転送します。

構文

VMOV{cond} Rd, Sn

VMOV{cond} Sn, Rd

各パラ メータには以下の意味があ り ます。

cond 任意の条件コードを指定します。

Sn VFP 単精度レジスタを指定します。

Rd ARM レジスタを指定します。 Rd に PC は指定できません。

使用法

VMOV Rd, Sn は Sn の内容を Rd に転送します。

VMOV Sn, Rd は Rd の内容を Sn に転送します。

関連項目

参照 :

• 条件コード (3-175 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 4-13ID 0 8 1 7 1 1 Non-Confidential

Page 223: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

NEON と VFP プログラ ミング

4.2.6 VMRS および VMSR

ARM レジスタ と NEON/VFP システムレジスタ との間で内容を転送します。

構文

VMRS{cond} Rd, extsysreg

VMSR{cond} extsysreg, Rd

各パラ メータには以下の意味があ り ます。

cond 任意の条件コードを指定します。

extsysreg NEON/VFP システムレジスタを指定します。 通常は FPSCR、 FPSID、 また

は FPEXC です。

Rd ARM レジスタを指定します。 Rd に PC は指定できません。

extsysreg が FPSCR である場合は、 APSR_nzcv を指定できます。 この場合、

浮動小数点ステータスフラグが ARM APSR の対応するフラグに転送さ

れます。

使用法

VMRS 命令は extsysreg の内容を Rd に転送します。

VMSR 命令は Rd の内容を extsysreg に転送します。

注 これらの命令は、 現在の NEON 演算または VFP 演算がすべて完了するまで ARM を停止させます。

VMRS r2,FPCID VMRS APSR_nzcv, FPSCR ; FP ス テー タ ス レジス タ を ARM APSR に転送する VMSR FPSCR, r4

関連項目

概念

『アセンブラの使用』 :

• NEON/VFP システムレジスタ (9-23 ページ) .

参照 :

• 条件コード (3-175 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 4-14ID 0 8 1 7 1 1 Non-Confidential

Page 224: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

NEON と VFP プログラ ミング

4.3 NEON 論理演算と比較演算

このセクシ ョ ンは以下のサブセクシ ョ ンから構成されています。

• VAND、 VBIC、 VEOR、 VORN、 VORR (レジスタ) (4-16 ページ)

ビッ ト単位論理積、 ビッ ト ク リ ア、 排他的論理和 (XOR)、 否定論理和、 およ

び論理和 (レジスタ)

• VBIC および VORR (イ ミディエート ) (4-17 ページ)

ビッ ト単位ビッ ト ク リ アと論理和 (イ ミディエート )

• VBIF、 VBIT、 VBSL (4-18 ページ)

False の場合はビッ ト単位挿入、 True の場合はビッ ト単位を挿入、 および選択

• VMOV、 VMVN (レジスタ) (4-19 ページ)

データ代入命令、 およびデータの各ビッ ト を反転させてから代入する命令

• VACGE および VACGT (4-20 ページ)

絶対値の比較

• VCEQ、 VCGE、 VCGT、 VCLE、 および VCLT (4-21 ページ)

比較

• VTST (4-22 ページ)

テス ト ビッ ト

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 4-15ID 0 8 1 7 1 1 Non-Confidential

Page 225: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

NEON と VFP プログラ ミング

4.3.1 VAND、 VBIC、 VEOR、 VORN、 VORR (レジスタ)

VAND (ビ ッ ト単位論理積)、 VBIC (ビッ ト ク リ ア)、 VEOR (ビッ ト単位排他的論理和)、

VORN (ビッ ト単位否定論理和)、 および VORR (ビ ッ ト単位論理和) の各命令は、 2 本の

レジスタ間でビッ ト単位論理演算を実行して、 デスティネーシ ョ ンレジスタに結果を返します。

構文

Vop{cond}{.datatype} {Qd}, Qn, Qm

Vop{cond}{.datatype} {Dd}, Dn, Dm

各パラ メータには以下の意味があ り ます。

op 以下のいずれかを指定します。

AND 論理積

ORR 論理和

EOR 排他的論理和 (XOR)BIC 論理積補数

ORN 論理和補数

cond 任意の条件コードを指定します。

datatype 任意に指定できるデータ型です。 アセンブラは datatype を無視します。

Qd, Qn, Qm クワ ッ ド ワード演算で使用するデスティネーシ ョ ンレジスタ、 第 1 オペ

ランドレジスタ、 第 2 オペランドレジスタを指定します。

Dd, Dn, Dm ダブルワード演算で使用するデスティネーシ ョ ンレジスタ、 第 1 オペラ

ンドレジスタ、 第 2 オペランドレジスタを指定します。

注 両方のオペランドに同じレジスタを使用する VORR は VMOV 命令です。 VORR はこのよ う

に使用できますが、 結果と して生じたコードを逆アセンブルする と、 VMOV 構文が生成

されます。

関連項目

参照 :

• VMOV、 VMVN (レジスタ) (4-19 ページ)

• 条件コード (3-175 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 4-16ID 0 8 1 7 1 1 Non-Confidential

Page 226: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

NEON と VFP プログラ ミング

4.3.2 VBIC および VORR (イ ミディエート)

VBIC (ビ ッ ト ク リ アイ ミディエート ) はデスティネーシ ョ ンベクタの各要素を取得

し、 イ ミディエート値を使用してビッ ト単位論理積補数を求め、 デスティネーシ ョンベクタに結果を返します。

VORR (ビ ッ ト単位論理和イ ミディエート ) は、 デスティネーシ ョ ンベクタの各要素を

取得し、 イ ミディエート値を使用してビッ ト単位論理和を実行しデスティネーシ ョンベクタに結果を返します。

構文

Vop{cond}.datatype Qd, #imm

Vop{cond}.datatype Dd, #imm

各パラ メータには以下の意味があ り ます。

op BIC または ORR を指定します。

cond 任意の条件コードを指定します。

datatype I8、 I16、 I32、 または I64 のいずれかを指定します。

Qd ま たは Dd ソース と結果の NEON レジスタを指定します。

imm イ ミディエート値を指定します。

イ ミディエート値

imm をデスティネーシ ョ ンレジスタを充填するためにアセンブラが繰り返すパターン

と して指定するこ と も、 (パターンに準拠する) イ ミディエート値を省略せずに直接指定するこ と もできます。 imm のパターンは datatype で決ま り ます (表 4-4 を参照)。

I8 データ型または I64 データ型を使用する場合、 アセンブラはそれを I16 命令か I32 命令に変換して、 imm のパターンに一致させます。 イ ミディエート値が表 4-4 に示し

たパターンのいずれにも一致しない場合、 アセンブラはエラーを生成します。

関連項目

参照 :

• VAND および VORN (イ ミディエート ) (4-76 ページ)

• 条件コード (3-175 ページ) .

表 4-4 イ ミディエート値のパターン

I16 I32

0x00XY 0x000000XY

0xXY00 0x0000XY00

0x00XY0000

0xXY000000

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 4-17ID 0 8 1 7 1 1 Non-Confidential

Page 227: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

NEON と VFP プログラ ミング

4.3.3 VBIF、 VBIT、 VBSL

VBIT (True の場合はビッ ト単位の挿入) は、 第 2 オペランドの対応するビッ トが 1 の場合は第 1 オペランドからデスティネーシ ョ ンに各ビッ ト を挿入ます。 それ以外の

場合は、 デスティネーシ ョ ンビッ ト を変更しません。

VBIF (False の場合はビッ ト単位の挿入) は、 第 2 オペランドの対応するビッ トが 0 の場合は第 1 オペランドからデスティネーシ ョ ンに各ビッ ト を挿入ます。 それ以外の

場合は、 デスティネーシ ョ ンビッ ト を変更しません。

VBSL (ビッ ト単位の選択) は、 デスティネーシ ョ ンの対応するビッ トが 1 の場合は第 1 オペランドから、 0 の場合は第 2 オペランドからデスティネーシ ョ ンの各ビッ ト を

選択します。

構文

Vop{cond}{.datatype} {Qd}, Qn, Qm

Vop{cond}{.datatype} {Dd}, Dn, Dm

各パラ メータには以下の意味があ り ます。

op BIT、 BIF、 または BSL のいずれかを指定します。

cond 任意の条件コードを指定します。

datatype 任意に指定できるデータ型です。 アセンブラは datatype を無視します。

Qd, Qn, Qm クワ ッ ド ワード演算で使用するデスティネーシ ョ ンレジスタ、 第 1 オペ

ランドレジスタ、 第 2 オペランドレジスタを指定します。

Dd, Dn, Dm ダブルワード演算で使用するデスティネーシ ョ ンレジスタ、 第 1 オペラ

ンドレジスタ、 第 2 オペランドレジスタを指定します。

関連項目

参照 :

• 条件コード (3-175 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 4-18ID 0 8 1 7 1 1 Non-Confidential

Page 228: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

NEON と VFP プログラ ミング

4.3.4 VMOV、 VMVN (レジスタ)

ベクタ移動 (レジスタ) は、 ソースレジスタからデスティネーシ ョ ンレジスタに値をコピーします。

ベク タのデータの各ビッ ト を反転させてから代入する命令 (レジスタ) はソースレジスタの各ビッ トの値を反転して、 結果をデスティネーシ ョ ンレジスタに返します。

構文

VMOV{cond}{.datatype} Qd, Qm

VMOV{cond}{.datatype} Dd, Dm

VMVN{cond}{.datatype} Qd, Qm

VMVN{cond}{.datatype} Dd, Dm

各パラ メータには以下の意味があ り ます。

cond 任意の条件コードを指定します。

datatype 任意に指定できるデータ型です。 アセンブラは datatype を無視します。

Qd, Qm クワ ッ ド ワード演算で使用するデスティネーシ ョ ンベクタ と ソースベク

タを指定します。

Dd, Dm ダブルワード演算で使用するデスティネーシ ョ ンベク タ と ソースベクタ

を指定します。

関連項目

参照 :

• 条件コード (3-175 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 4-19ID 0 8 1 7 1 1 Non-Confidential

Page 229: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

NEON と VFP プログラ ミング

4.3.5 VACGE および VACGT

ベクタ絶対値比較は、 ベクタの各要素の絶対値を取得し、 2 番目のベクタの対応する

要素の絶対値と比較します。 条件が True の場合、 デスティネーシ ョ ンベクタの対応

する要素はすべて 1 に設定されます。 それ以外の場合は、 すべて 0 に設定されます。

構文

VACop{cond}.F32 {Qd}, Qn, Qm

VACop{cond}.F32 {Dd}, Dn, Dm

各パラ メータには以下の意味があ り ます。

op 以下のいずれかを指定します。

GE 以上 (絶対値)

GT 超 (絶対値)

cond 任意の条件コードを指定します。

Qd, Qn, Qm クワ ッ ド ワード演算で使用するデスティネーシ ョ ンレジスタ、 第 1 オペ

ランドレジスタ、 第 2 オペランドレジスタを指定します。

Dd, Dn, Dm ダブルワード演算で使用するデスティネーシ ョ ンレジスタ、 第 1 オペラ

ンドレジスタ、 第 2 オペランドレジスタを指定します。

結果のデータ型は I32 です。

関連項目

参照 :

• VACLE および VACLT (4-77 ページ)

• 条件コード (3-175 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 4-20ID 0 8 1 7 1 1 Non-Confidential

Page 230: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

NEON と VFP プログラ ミング

4.3.6 VCEQ、 VCGE、 VCGT、 VCLE、 および VCLT

ベクタ比較はベクタの各要素の値を取得し、 2 番目のベクタの対応する要素の値また

は 0 と比較します。 条件が True の場合、 デスティネーシ ョ ンベク タの対応する要素

はすべて 1 に設定されます。 それ以外の場合は、 すべて 0 に設定されます。

構文

VCop{cond}.datatype {Qd}, Qn, Qm

VCop{cond}.datatype {Dd}, Dn, Dm

VCop{cond}.datatype {Qd}, Qn, #0

VCop{cond}.datatype {Dd}, Dn, #0

各パラ メータには以下の意味があ り ます。

op 以下のいずれかを指定します。

EQ 等しい

GE 以上

GT 超

LE 以下 (第 2 オペランドが #0 の場合のみ)

LT 未満 (第 2 オペランドが #0 の場合のみ)

cond 任意の条件コードを指定します。

datatype 以下のいずれかを指定します。

• EQ の場合は I8、 I16、 I32、 または F32• GE、 GT、 LE、 または LT には S8、 S16、 S32、 U8、 U16、 U32、 または F32

(#0 形式を除く)

• GE、 GT、 LE、 または LT には S8、 S16、 S32、 または F32 (#0 形式)

結果のデータ型は次のよ うにな り ます。

• オペランドのデータ型が I32、 S32、 U32、 または F32 の場合は I32• オペランドのデータ型が I16、 S16、 または U16 の場合は I16• オペランドのデータ型が I8、 S8、 または U8 の場合は I8

Qd, Qn, Qm クワ ッ ド ワード演算で使用するデスティネーシ ョ ンレジスタ、 第 1 オペ

ランドレジスタ、 第 2 オペランドレジスタを指定します。

Dd, Dn, Dm ダブルワード演算で使用するデスティネーシ ョ ンレジスタ、 第 1 オペラ

ンドレジスタ、 第 2 オペランドレジスタを指定します。

#0 比較のために Qm または Dm をゼロ と置き換えます。

関連項目

参照 :

• VCLE および VCLT (4-78 ページ)

• 条件コード (3-175 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 4-21ID 0 8 1 7 1 1 Non-Confidential

Page 231: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

NEON と VFP プログラ ミング

4.3.7 VTST

VTST (ベク タテス ト ビッ ト ) は、 ベクタの各要素を取得し、 2 番目のベクタの対応す

る要素を使用してビッ ト単位論理積を求めます。 結果がゼロでな場合は、 デスティネーシ ョ ンベクタの対応する要素はすべて 1 に設定されます。 それ以外の場合は、

すべて 0 に設定されます。

構文

VTST{cond}.size {Qd}, Qn, Qm

VTST{cond}.size {Dd}, Dn, Dm

各パラ メータには以下の意味があ り ます。

cond 任意の条件コードを指定します。

size 8、 16、 または 32 のいずれかを指定します。

Qd, Qn, Qm クワ ッ ド ワード演算で使用するデスティネーシ ョ ンレジスタ、 第 1 オペ

ランドレジスタ、 第 2 オペランドレジスタを指定します。

Dd, Dn, Dm ダブルワード演算で使用するデスティネーシ ョ ンレジスタ、 第 1 オペラ

ンドレジスタ、 第 2 オペランドレジスタを指定します。

関連項目

参照 :

• 条件コード (3-175 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 4-22ID 0 8 1 7 1 1 Non-Confidential

Page 232: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

NEON と VFP プログラ ミング

4.4 NEON 汎用データ処理命令

このセクシ ョ ンは以下のサブセクシ ョ ンから構成されています。

• VCVT (固定小数点または整数と浮動小数点間) (4-24 ページ)

固定小数点または整数と浮動小数点間のベクタ変換

• VCVT (半精度浮動小数点数と単精度浮動小数点数間の変換) (4-25 ページ)

半精度浮動小数点数と単精度浮動小数点数間のベクタ変換

• VDUP (4-26 ページ)

ベク タの全レーンへのスカラの複製

• VEXT (4-27 ページ)

抽出

• VMOV、 VMVN (イ ミディエート ) (4-28 ページ)

移動と負の移動 (イ ミディエート )

• VMOVL, V{Q}MOVN, VQMOVUN (4-29 ページ)

移動 (レジスタ)

• VREV (4-30 ページ)

ベク タ内の要素の反転

• VSWP (4-31 ページ)

ベク タのスワ ップ

• VTBL、 VTBX (4-32 ページ)

ベク タテーブルの検索

• VTRN (4-33 ページ)

ベク タ置換

• VUZP、 VZIP (4-34 ページ)

ベク タのインターリーブと インターリーブの解除

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 4-23ID 0 8 1 7 1 1 Non-Confidential

Page 233: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

NEON と VFP プログラ ミング

4.4.1 VCVT (固定小数点または整数と浮動小数点間)

VCVT (ベク タ変換) はベクタの各要素を以下のいずれかの方法で変換し、 結果をデス

ティネーシ ョ ンベク タに返します。

• 浮動小数点から整数への変換

• 整数から浮動小数点への変換

• 浮動小数点から固定小数点への変換

• 固定小数点から浮動小数点への変換

構文

VCVT{cond}.type Qd, Qm {, #fbits}

VCVT{cond}.type Dd, Dm {, #fbits}

各パラ メータには以下の意味があ り ます。

cond 任意の条件コードを指定します。

type ベクタの要素のデータ型を指定します。 以下のいずれかにな り ます。

S32.F32 浮動小数点から符号付き整数または固定小数点への変換

U32.F32 浮動小数点から符号なし整数または固定小数点への変換

F32.S32 符号付き整数または固定小数点から浮動小数点への変換

F32.U32 符号なし整数または固定小数点から浮動小数点への変換

Qd, Qm クワ ッ ド ワード演算で使用するデスティネーシ ョ ンベクタ とオペランド

ベク タを指定します。

Dd, Dm ダブルワード演算で使用するデスティネーシ ョ ンベク タ とオペランドベ

クタを指定します。

fbits このパラ メータが指定されている場合は、 固定小数点数の小数部ビッ ト

を指定します。 それ以外の場合は、 浮動小数点と整数間の変換になり ます fbits は 0 ~ 32 の範囲で指定する必要があ り ます。fbits を省略した場

合、 小数部ビッ トは 0 になり ます。

丸め

整数または固定小数点から浮動小数点への変換では、 近似値への丸めを使用します。

浮動小数点から整数または固定小数点への変換では、 ゼロ方向への丸めを使用します。

関連項目

参照 :

• 条件コード (3-175 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 4-24ID 0 8 1 7 1 1 Non-Confidential

Page 234: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

NEON と VFP プログラ ミング

4.4.2 VCVT (半精度浮動小数点数と単精度浮動小数点数間の変換)

VCVT (ベク タ変換) は、 半精度拡張をサポート しており、 ベク タの各要素を以下のい

ずれかの方法で変換して、 結果をデスティネーシ ョ ンベクタに返ます。

• 半精度浮動小数点から単精度浮動小数点への変換 (F32.F16)• 単精度浮動小数点から半精度浮動小数点への変換 (F16.F32)

構文

VCVT{cond}.F32.F16 Qd, Dm

VCVT{cond}.F16.F32 Dd, Qm

各パラ メータには以下の意味があ り ます。

cond 任意の条件コードを指定します。

Qd, Dm 単精度の結果と半精度オペランドベク タのデスティネーシ ョ ンベク タを

指定します。

Dd, Qm 半精度の結果と単精度オペランドベク タのデスティネーシ ョ ンベク タを

指定します。

アーキテクチャ

この命令を使用できるのは、 半精度拡張をサポート している NEON システムだけで

す。

関連項目

参照 :

• 条件コード (3-175 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 4-25ID 0 8 1 7 1 1 Non-Confidential

Page 235: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

NEON と VFP プログラ ミング

4.4.3 VDUP

VDUP (ベク タ複製) は、 デスティネーシ ョ ンベク タのすべての要素にスカラを複製し

ます。 ソースは NEON スカラまたは ARM レジスタです。

構文

VDUP{cond}.size Qd, Dm[x]

VDUP{cond}.size Dd, Dm[x]

VDUP{cond}.size Qd, Rm

VDUP{cond}.size Dd, Rm

各パラ メータには以下の意味があ り ます。

cond 任意の条件コードを指定します。

size 8、 16、 または 32 を指定します。

Qd クワ ッ ド ワード演算で使用するデスティネーシ ョ ンレジスタを指定しま

す。

Dd ダブルワード演算で使用するデスティネーシ ョ ンレジスタを指定しま

す。

Dm[x] NEON スカラを指定します。

Rm ARM レジスタを指定します。 Rm に R15 は指定できません。

関連項目

参照 :

• 条件コード (3-175 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 4-26ID 0 8 1 7 1 1 Non-Confidential

Page 236: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

NEON と VFP プログラ ミング

4.4.4 VEXT

VEXT (ベク タ抽出) は、 第 2 オペランドベクタの下位と第 1 オペランドベク タの上位

から 8 ビッ ト要素を抽出し、 連結して、 デスティネーシ ョ ンベク タに結果を返しま

す。 この例については、 図 4-1 を参照して下さい。

図 4-1 imm = 3 の場合のダブルワード VEXT 演算

構文

VEXT{cond}.8 {Qd}, Qn, Qm, #imm

VEXT{cond}.8 {Dd}, Dn, Dm, #imm

各パラ メータには以下の意味があ り ます。

cond 任意の条件コードを指定します。

Qd, Qn, Qm クワ ッ ド ワード演算で使用するデスティネーシ ョ ンレジスタ、 第 1 オペ

ランドレジスタ、 第 2 オペランドレジスタを指定します。

Dd, Dn, Dm ダブルワード演算で使用するデスティネーシ ョ ンレジスタ、 第 1 オペラ

ンドレジスタ、 第 2 オペランドレジスタを指定します。

imm 第 2 オペランドベクタの下位から抽出する 8 ビッ ト要素の数を指定しま

す。 ダブルワード演算では 0 ~ 7 の範囲、 クワ ッ ド ワード演算では 0 ~ 15 の範囲です。

VEXT 疑似命令

8 の代わりに 16、 32、 または 64 のデータ型を指定できます。 この場合、 #imm にバイ

トの代わりにハーフワード、 ワード、 またはダブルワードを使用する と、 それに応じて許容範囲が小さ くな り ます。

関連項目

参照 :

• 条件コード (3-175 ページ) .

Vd

VnVm0123456701234567

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 4-27ID 0 8 1 7 1 1 Non-Confidential

Page 237: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

NEON と VFP プログラ ミング

4.4.5 VMOV、 VMVN (イ ミディエート)

VMOV (ベク タの移動) と VMVN (ベク タの負の移動) イ ミディエートでは、 イ ミディ

エート値がデスティネーシ ョ ンレジスタに生成されます。

構文

Vop{cond}.datatype Qd, #imm

Vop{cond}.datatype Dd, #imm

各パラ メータには以下の意味があ り ます。

op MOV または MVN を指定します。

cond 任意の条件コードを指定します。

datatype I8、 I16、 I32、 I64、 または F32 を指定します。

Qd ま たは Dd 結果を保持する NEON レジスタです。

imm datatype で指定された型のイ ミディエート値です。 複製されてデスティ

ネーシ ョ ンレジスタに配置されます。

関連項目

参照 :

• 条件コード (3-175 ページ) .

表 4-5 使用可能なイ ミディエート値

datatype VMOV VMVN

I8 0xXY -

I16 0x00XY、 0xXY00 0xFFXY、 0xXYFF

I32 0x000000XY、 0x0000XY00、 0x00XY0000、

0xXY000000

0xFFFFFFXY、 0xFFFFXYFF、 0xFFXYFFFF、

0xXYFFFFFF

0x0000XYFF、 0x00XYFFFF 0xFFFFXY00、 0xFFXY0000

I64 バイ トマスク、 0xGGHHJJKKLLMMNNPP a -

F32 浮動小数点数 b -

a. 0xGG、 0xHH、 0xJJ、 0xKK、 0xLL、 0xMM、 0xNN、 および 0xPP のそれぞれを 0x00 または 0xFF にします。

b. +/–n * 2–r と表すこ とができる任意の数値。 こ こで、 n と r は整数、 16 <= n <= 31、 0 <= r <= 7 です。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 4-28ID 0 8 1 7 1 1 Non-Confidential

Page 238: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

NEON と VFP プログラ ミング

4.4.6 VMOVL, V{Q}MOVN, VQMOVUN

VMOVL (ベク タ Long 移動) はダブルワードベクタの各要素を取得し、 符号拡張または

ゼロ拡張を行って元の長さの 2 倍にして、 クワ ッ ド ワードベクタに果を返します。

VMOVN (ベク タ移動および Narrow) は、 ク ワ ッ ド ワードベク タの各要素の下位半分を

ダブルワードベクタの対応する要素にコピーします。

VQMOVN (ベク タサチュレート移動および Narrow) は、 オペランドベクタの各要素をデ

スティネーシ ョ ンベクタの対応する要素にコピーします。 結果の要素の幅はオペランド要素の半分で、 値は結果の幅にサチュレート されます。

VQMOVUN (ベク タサチュレート移動および Narrow、 符号付きオペランド と符号のない

結果) は、 オペランドベク タの各要素をデスティネーシ ョ ンベクタの対応する要素にコピーします。 結果の要素の幅はオペランド要素の半分で、 値は結果の幅にサチュレート されます。

構文

VMOVL{cond}.datatype Qd, Dm

V{Q}MOVN{cond}.datatype Dd, Qm

VQMOVUN{cond}.datatype Dd, Qm

各パラ メータには以下の意味があ り ます。

Q このパラ メータが指定されている場合は、 結果がサチュレート されま

す。

cond 任意の条件コードを指定します。

datatype 以下のいずれかを指定します。

S8、 S16、 S32 VMOVL の場合

U8、 U16、 U62 VMOVL の場合

I16、 I32、 I64 VMOVN の場合

S16、 S32、 S64 VQMOVN または VQMOVUN の場合

U16、 U32、 U64 VQMOVN の場合

Qd, Dm VMOVL のデスティネーシ ョ ンベク タ とオペランドベクタを指定します。

Dd, Qm V{Q}MOV{U}N のデスティネーシ ョ ンベク タ とオペランドベク タを指定しま

す。

関連項目

参照 :

• 条件コード (3-175 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 4-29ID 0 8 1 7 1 1 Non-Confidential

Page 239: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

NEON と VFP プログラ ミング

4.4.7 VREV

VREV16 (ハーフワード内のベクタ反転) は、 ベクタの各ハーフワード内の 8 ビッ ト要

素の順序を逆にして、 対応するデスティネーシ ョ ンベクタに結果をします。

VREV32 (ワード内のベクタ反転) は、 ベク タの各ワード内の 8 ビッ ト または 16 ビッ ト

要素の順序を逆にして、 対応するデスティネーシ ョ ンベクタに結果を返します。

VREV64 (ダブルワード内のベクタ反転) は、 ベクタの各ダブルワード内の 8 ビッ ト 、

16 ビッ ト 、 または 32 ビッ ト要素の順序を逆にして、 対応するデスティネーシ ョ ンベ

クタに結果を返します。

構文

VREVn{cond}.size Qd, Qm

VREVn{cond}.size Dd, Dm

各パラ メータには以下の意味があ り ます。

n 16、 32、 または 64 のいずれかを指定します。

cond 任意の条件コードを指定します。

size 8、 16、 32 のいずれかであ り、 n 未満である必要があ り ます。

Qd, Qm クワ ッ ド ワード演算で使用するデスティネーシ ョ ンベクタ とオペランド

ベク タを指定します。

Dd, Dm ダブルワード演算で使用するデスティネーシ ョ ンベク タ とオペランドベ

クタを指定します。

関連項目

参照 :

• 条件コード (3-175 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 4-30ID 0 8 1 7 1 1 Non-Confidential

Page 240: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

NEON と VFP プログラ ミング

4.4.8 VSWP

VSWP (ベク タスワ ップ) は 2 つのベクタの内容を交換します。 ベクタはダブルワード

またはクワ ッ ド ワードのいずれかです。 データ型は区別されません。

構文

VSWP{cond}{.datatype} Qd, Qm

VSWP{cond}{.datatype} Dd, Dm

各パラ メータには以下の意味があ り ます。

cond 任意の条件コードを指定します。

datatype 任意に指定できるデータ型です。 アセンブラは datatype を無視します。

Qd, Qm クワ ッ ド ワード演算で使用するベクタを指定します。

Dd, Dm ダブルワード演算で使用するベクタを指定します。

関連項目

参照 :

• 条件コード (3-175 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 4-31ID 0 8 1 7 1 1 Non-Confidential

Page 241: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

NEON と VFP プログラ ミング

4.4.9 VTBL、 VTBX

VTBL (ベク タテーブル検索) は、 コン ト ロールベクタのバイ ト インデクスを使用し、

テーブル内のバイ ト値を検索して新しいベクタを生成します。範外のインデクスは 0 を返します。

VTBX (ベク タテーブル拡張) は、 同様に動作しますが、 範囲外のインデクスがデス

ティネーシ ョ ン要素を変更するこ とはあ り ません。

構文

Vop{cond}.8 Dd, list, Dm

各パラ メータには以下の意味があ り ます。

op TBL または TBX を指定します。

cond 任意の条件コードを指定します。

Dd デスティネーシ ョ ンベク タを指定します。

list テーブルを含むベクタを指定します。 以下のいずれかにな り ます。

• {Dn}

• {Dn,D(n+1)}

• {Dn,D(n+1),D(n+2)}

• {Dn,D(n+1),D(n+2),D(n+3)}

• {Qn,Q(n+1)}.

list 内のすべてのレジスタは、 D0 ~ D31 または Q0 ~ Q15 の範囲内にある

こ とが必要です。 また、 レジスタバンクの終端でラ ップアラウンド しないよ うにして ください。例えば、 {D31,D0,D1} は使用できません。list に Q レジスタが含まれている場合、 同等の D レジスタに逆アセンブルされま

す。

Dm インデクスベクタを指定します。

関連項目

参照 :

• 条件コード (3-175 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 4-32ID 0 8 1 7 1 1 Non-Confidential

Page 242: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

NEON と VFP プログラ ミング

4.4.10 VTRN

VTRN (ベク タ置換) は、 オペランドベクタの要素を 2 x 2 マ ト リ クスの要素と して処

理し、 マ ト リ クスを置換します。 図 4-2 と図 4-3 は VTRN の演算の例を示します。

図 4-2 ダブルワード VTRN.8 演算

図 4-3 ダブルワード VTRN.32 演算

構文

VTRN{cond}.size Qd, Qm

VTRN{cond}.size Dd, Dm

各パラ メータには以下の意味があ り ます。

cond 任意の条件コードを指定します。

size 8、 16、 または 32 のいずれかを指定します。

Qd, Qm クワ ッ ド ワード演算で使用するベクタを指定します。

Dd, Dm ダブルワード演算で使用するベクタを指定します。

関連項目

参照 :

• 条件コード (3-175 ページ) .

Dd

Dm017 6 5 4 3 2

Dd

Dm01

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 4-33ID 0 8 1 7 1 1 Non-Confidential

Page 243: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

NEON と VFP プログラ ミング

4.4.11 VUZP、 VZIP

VZIP (ベク タ圧縮) は 2 つのベクタの要素をインターリーブします。

VUZP (ベク タ解凍) は 2 つのベクタの要素のインターリーブを解除します。

インターリーブの解除は、 インターリーブの逆のプロセスです。

構文

Vop{cond}.size Qd, Qm

Vop{cond}.size Dd, Dm

以下の意味があ り ます。

op UZP または ZIP を指定します。

cond 任意の条件コードを指定します。

size 8、 16、 または 32 のいずれかを指定します。

Qd, Qm クワ ッ ド ワード演算で使用するベクタを指定します。

Dd, Dm ダブルワード演算で使用するベクタを指定します。

表 4-6 ダブルワード VZIP.8 演算

演算前のレジスタ状態 演算後のレジスタ状態

Dd A7 A6 A5 A4 A3 A2 A1 A0 B3 A3 B2 A2 B1 A1 B0 A0

Dm B7 B6 B5 B4 B3 B2 B1 B0 B7 A7 B6 A6 B5 A5 B4 A4

表 4-7 クワッ ドワード VZIP.32 演算

演算前のレジスタ状態 演算後のレジスタ状態

Qd A3 A2 A1 A0 B1 A1 B0 A0

Qm B3 B2 B1 B0 B3 A3 B2 A2

表 4-8 ダブルワード VUZP.8 演算

演算前のレジスタ状態 演算後のレジスタ状態

Dd A7 A6 A5 A4 A3 A2 A1 A0 B6 B4 B2 B0 A6 A4 A2 A0

Dm B7 B6 B5 B4 B3 B2 B1 B0 B7 B5 B3 B1 A7 A5 A3 A1

表 4-9 クワッ ドワード VUZP.32 演算

演算前のレジスタ状態 演算後のレジスタ状態

Qd A3 A2 A1 A0 B2 B0 A2 A0

Qm B3 B2 B1 B0 B3 B1 A3 A1

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 4-34ID 0 8 1 7 1 1 Non-Confidential

Page 244: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

NEON と VFP プログラ ミング

注 以下はすべて同じ命令です。

• VZIP.32 Dd, Dm

• VUZP.32 Dd, Dm

• VTRN.32 Dd, Dm

命令は VTRN.32 Dd, Dm と して逆アセンブルされます。

関連項目

参照 :

• 3 要素構造体からなる配列のインターリーブの解除 (4-64 ページ)

• VTRN (4-33 ページ)

• 条件コード (3-175 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 4-35ID 0 8 1 7 1 1 Non-Confidential

Page 245: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

NEON と VFP プログラ ミング

4.5 NEON シフ ト命令

このセクシ ョ ンは以下のサブセクシ ョ ンから構成されています。

• VSHL、 VQSHL、 VQSHLU、 および VSHLL (イ ミディエートによる) (4-37 ペー

ジ)

イ ミディエート値による左シフ ト

• V{Q}{R}SHL (符号付き変数による) (4-39 ページ)

符号付き変数による左シフ ト

• V{R}SHR{N}, V{R}SRA (イ ミディエートによる) (4-40 ページ)

イ ミディエート値による右シフ ト

• VQ{R}SHR{U}N (イ ミディエートによる) (4-41 ページ)

イ ミディエート値による右シフ ト とサチュレート

• VSLI および VSRI (4-42 ページ)

左シフ ト と挿入および右シフ ト と挿入

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 4-36ID 0 8 1 7 1 1 Non-Confidential

Page 246: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

NEON と VFP プログラ ミング

4.5.1 VSHL、 VQSHL、 VQSHLU、 および VSHLL (イ ミディエートによる)

ベクタ左シフ ト (イ ミディエートによる) 命令は、 整数ベクタの各要素を取得し、イ ミディエート値で左にシフ ト して、 デスティネーシ ョ ンベクタに結果を返します。

VSHL (ベク タ左シフ ト ) では、 各要素の左の範囲外にシフ ト されたビッ トは失われま

す。

VQSHL (ベク タサチュレート左シフ ト ) と VQSHLU (ベク タサチュレート左シフ ト符号

なし) では、 サチュレーシ ョ ンが発生する と スティ ッキー QC フラグ (FPSCR ビッ

ト [27]) が設定されます。

VSHLL (ベク タ左シフ ト Long) では、 値は符号拡張またはゼロ拡張されます。

構文

V{Q}SHL{U}{cond}.datatype {Qd}, Qm, #imm

V{Q}SHL{U}{cond}.datatype {Dd}, Dm, #imm

VSHLL{cond}.datatype Qd, Dm, #imm

各パラ メータには以下の意味があ り ます。

Q このパラ メータが指定されている場合、 オーバーフローした結果はサ

チュレート されます。

U Q も指定されている場合にのみ使用できます。 オペランドに符号が付い

ても結果には符合が付きません。

cond 任意の条件コードを指定します。

datatype 以下のいずれかを指定します。

I8、 I16、 I32、 I64 VSHL の場合

S8、 S16、 S32 VSHLL、 VQSHL、 または VQSHLU の場合

U8、 U16、 U32 VSHLL または VQSHL の場合

S64 VQSHL または VQSHLU の場合

U64 VQSHL の場合

Qd, Qm クワ ッ ド ワード演算で使用するデスティネーシ ョ ンベクタ とオペランド

ベク タを指定します。

Dd, Dm ダブルワード演算で使用するデスティネーシ ョ ンベク タ とオペランドベ

クタを指定します。

Qd, Dm long 演算で使用するデスティネーシ ョ ンベクタ とオペランドベクタを指

定します。

imm 以下の範囲でシフ トのサイズを指定するイ ミディエート値です。

• VSHLL の場合は 1 ~ size(datatype)• VSHL、 VQSHL、 または VQSHLU の場合は 1 ~ (size(datatype) – 1)

0 を使用できますが、 生成されるコードは VMOV または VMOVL に逆アセン

ブルされます。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 4-37ID 0 8 1 7 1 1 Non-Confidential

Page 247: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

NEON と VFP プログラ ミング

関連項目

参照 :

• 条件コード (3-175 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 4-38ID 0 8 1 7 1 1 Non-Confidential

Page 248: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

NEON と VFP プログラ ミング

4.5.2 V{Q}{R}SHL (符号付き変数による)

VSHL (符号付き変数によるベクタ左シフ ト ) は、 ベクタの各要素を取得し、 2 番目の

ベクタの対応する要素の 下位バイ トの値でシフ ト し、 デスティネーシ ョ ンベク タに結果を返します。 シフ ト値が正の場合は、 左シフ トにな り ます。 それ以外の場合は、 右シフ トにな り ます。

結果はオプシ ョ ンでサチュレート、 丸め、 またはその両方を実行できます。 サチュレーシ ョ ンが発生した場合は、 スティ ッキー QC フラグ (FPSCR ビッ ト [27]) が設定

されます。

構文

V{Q}{R}SHL{cond}.datatype {Qd}, Qm, Qn

V{Q}{R}SHL{cond}.datatype {Dd}, Dm, Dn

各パラ メータには以下の意味があ り ます。

Q このパラ メータが指定されている場合、 オーバーフローした結果はサ

チュレート されます。

R このパラ メータが指定されている場合、 結果は丸められます。 指定され

ていない場合、 結果は切り捨てられます。

cond 任意の条件コードを指定します。

datatype S8、 S16、 S32、 S64、 U8、 U16、 U32、 U64 のいずれかを指定します。

Qd, Qm, Qn クワ ッ ド ワード演算で使用するデスティネーシ ョ ンベクタ、 第 1 オペラ

ンドベクタ、 および第 2 オペランドベクタを指定します。

Dd, Dm, Dn ダブルワード演算で使用するデスティネーシ ョ ンベク タ、 第 1 オペラン

ドベクタ、 および第 2 オペランドベク タを指定します。

関連項目

参照 :

• 条件コード (3-175 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 4-39ID 0 8 1 7 1 1 Non-Confidential

Page 249: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

NEON と VFP プログラ ミング

4.5.3 V{R}SHR{N}, V{R}SRA (イ ミディエートによる)

V{R}SHR{N} (イ ミディエート値によるベクタ右シフ ト ) は、 ベクタの各要素を取得し、

イ ミディエート値で右シフ ト して、 デスティネーシ ョ ンベク タに結果返します。 結果はオプシ ョ ンで丸め、 切り捨て、 またはその両方を実行できます。

V{R}SRA (イ ミディエート値によるベクタ右シフ ト と累積) は、 ベクタの各要素を取

得し、 イ ミディエート値で右シフ ト して、 デスティネーシ ョ ンベク タ結果を累積します。 結果はオプシ ョ ンで丸めるこ とができます。

構文

V{R}SHR{cond}.datatype {Qd}, Qm, #imm

V{R}SHR{cond}.datatype {Dd}, Dm, #imm

V{R}SRA{cond}.datatype {Qd}, Qm, #imm

V{R}SRA{cond}.datatype {Dd}, Dm, #imm

V{R}SHRN{cond}.datatype Dd, Qm, #imm

各パラ メータには以下の意味があ り ます。

R このパラ メータが指定されている場合は、 結果が丸められます。 それ以

外の場合、 結果は切り捨てられます。

cond 任意の条件コードを指定します。

datatype 以下のいずれかを指定します。

S8、 S16、 S32、 S64 V{R}SHR または V{R}SRA の場合

U8、 U16、 U32、 U64 V{R}SHR または V{R}SRA の場合

I16、 I32、 I64 V{R}SHRN の場合

Qd, Qm クワ ッ ド ワード演算で使用するデスティネーシ ョ ンベクタ とオペランド

ベク タを指定します。

Dd, Dm ダブルワード演算で使用するデスティネーシ ョ ンベク タ とオペランドベ

クタを指定します。

Dd, Qm Narrow 演算で使用するデスティネーシ ョ ンベク タ とオペランドベクタ

を指定します。

imm 0 ~ (size(datatype) – 1) の範囲でシフ トのサイズを指定するイ ミディエー

ト値です。

関連項目

参照 :

• 条件コード (3-175 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 4-40ID 0 8 1 7 1 1 Non-Confidential

Page 250: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

NEON と VFP プログラ ミング

4.5.4 VQ{R}SHR{U}N (イ ミディエートによる)

VQ{R}SHR{U}N (ベク タサチュレート右シフ ト、 Narrow、 イ ミディエート値による、 オ

プシ ョ ンの丸め) は、 整数のクワ ッ ド ワードベクタの各要素を取得し、 イ ミ ィエート値で右シフ ト し、 ダブルワードベクタに結果を返します。

サチュレーシ ョ ンが発生した場合は、 スティ ッキー QC フラグ (FPSCR ビッ ト [27])が設定されます。

構文

VQ{R}SHR{U}N{cond}.datatype Dd, Qm, #imm

各パラ メータには以下の意味があ り ます。

R このパラ メータが指定されている場合は、 結果が丸められます。 それ以

外の場合、 結果は切り捨てられます。

U このパラ メータが指定されている場合は、 オペランドに符号が付いてい

ても結果には符合が付きません。 それ以外の場合は、 結果はオペランドと じ型にな り ます。

cond 任意の条件コードを指定します。

datatype 以下のいずれかを指定します。

S16、 S32、 S64 VQ{R}SHRN または VQ{R}SHRUN の場合

U16、 U32、 U64 VQ{R}SHRN の場合のみ

Dd, Qm デスティネーシ ョ ンベク タ とオペランドベク タを指定します。

imm 0 ~ (size(datatype) – 1) の範囲でシフ トのサイズを指定するイ ミディエー

ト値です。

関連項目

参照 :

• 条件コード (3-175 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 4-41ID 0 8 1 7 1 1 Non-Confidential

Page 251: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

NEON と VFP プログラ ミング

4.5.5 VSLI および VSRI

VSLI (ベク タ左シフ ト と挿入) は、 ベクタの各要素を取得し、 イ ミディエート値で左

シフ ト して、 デスティネーシ ョ ンベク タに結果を挿入します。 各素の左の範囲外にシフ ト されたビッ トは失われます。

VSRI (ベク タ右シフ ト と挿入) は、 ベクタの各要素を取得し、 イ ミディエート値で右

シフ ト して、 デスティネーシ ョ ンベク タに結果を挿入します。 各素の右の範囲外にシフ ト されたビッ トは失われます。

図 4-4 クワッ ドワード VSLI.64 Qd, Qm, #1 の演算

図 4-5 ダブルワード VSRI.64 Dd, Dm, #2 の演算

構文

Vop{cond}.size {Qd}, Qm, #imm

Vop{cond}.size {Dd}, Dm, #imm

各パラ メータには以下の意味があ り ます。

op SLI または SRI を指定します。

cond 任意の条件コードを指定します。

size 8、 16、 32、 64 のいずれかを指定します。

Qd, Qm クワ ッ ド ワード演算で使用するデスティネーシ ョ ンベクタ とオペランド

ベク タを指定します。

Dd, Dm ダブルワード演算で使用するデスティネーシ ョ ンベク タ とオペランドベ

クタを指定します。

imm 以下の範囲でシフ トのサイズを指定するイ ミディエート値です。

• VSLI では 0 ~ (size – 1)

• VSRI では 1 ~ size

Qd

Qm 0

0

1

0

... ...

Dd

Dm 0

0

... ...

0

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 4-42ID 0 8 1 7 1 1 Non-Confidential

Page 252: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

NEON と VFP プログラ ミング

関連項目

参照 :

• 条件コード (3-175 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 4-43ID 0 8 1 7 1 1 Non-Confidential

Page 253: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

NEON と VFP プログラ ミング

4.6 NEON 汎用算術命令

このセクシ ョ ンは以下のサブセクシ ョ ンから構成されています。

• VABA{L}、 VABD{L} (4-45 ページ)

ベク タ絶対差と累積、 絶対差

• V{Q}ABS および V{Q}NEG (4-46 ページ)

ベク タ絶対値および否定

• V{Q}ADD、 VADDL、 VADDW、 V{Q}SUB、 VSUBL、 VSUBW (4-47 ページ)

ベク タ加算および減算

• V{R}ADDHN および V{R}SUBHN (4-49 ページ)

上位半分を選択するベクタ加算および減算

• V{R}HADD および VHSUB (4-50 ページ)

ベク タ二分加算および減算

• VPADD{L}、 VPADAL (4-51 ページ)

ベク タペアワイズ加算および加算累積

• VMAX、 VMIN、 VPMAX、 VPMIN (4-53 ページ)

ベク タ 大値、 小値、 ペアワイズ 大値、 およびペアワイズ 小値

• VCLS、 VCLZ、 VCNT (4-54 ページ)

ベク タ先行符号ビッ ト カウン ト 、 先行ゼロカウン ト、 およびセッ ト ビッ ト カウン ト

• VRECPE および VRSQRTE (4-55 ページ)

ベク タ逆数の推定および逆平方根の推定

• VRECPS および VRSQRTS (4-56 ページ)

ベク タ逆数のステップおよび逆平方根のステップ

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 4-44ID 0 8 1 7 1 1 Non-Confidential

Page 254: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

NEON と VFP プログラ ミング

4.6.1 VABA{L}、 VABD{L}

VABA (ベク タ絶対差と累積) は、 あるベク タの要素を対応する別のベクタの要素から

減算し、 その結果の絶対値をデスティネーシ ョ ンベク タの要素に積します。

VABD (ベク タ絶対差) は、 あるベク タの要素を対応する別のベクタの要素から減算

し、 その結果の絶対値をデスティネーシ ョ ンベクタの要素に返します。

いずれの命令にも Long バージ ョ ンがあ り ます。

構文

Vop{cond}.datatype {Qd}, Qn, Qm

Vop{cond}.datatype {Dd}, Dn, Dm

VopL{cond}.datatype Qd, Dn, Dm

各パラ メータには以下の意味があ り ます。

op ABA または ABD を指定します。

cond 任意の条件コードを指定します。

datatype 以下のいずれかを指定します。

• VABA、 VABAL、 または VABDL には S8、 S16、 S32、 U8、 U16、 または U32• VABD には S8、 S16、 S32、 U8、 U16、 U32、 または F32

Qd, Qn, Qm クワ ッ ド ワード演算で使用するデスティネーシ ョ ンベクタ、 第 1 オペラ

ンドベクタ、 および第 2 オペランドベクタを指定します。

Dd, Dn, Dm ダブルワード演算で使用するデスティネーシ ョ ンベク タ、 第 1 オペラン

ドベクタ、 および第 2 オペランドベク タを指定します。

Qd, Dn, Dm Long 演算で使用するデスティネーシ ョ ンベク タ、 第 1 オペランドベク

タ、 および第 2 オペランドベク タを指定します。

関連項目

参照 :

• 条件コード (3-175 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 4-45ID 0 8 1 7 1 1 Non-Confidential

Page 255: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

NEON と VFP プログラ ミング

4.6.2 V{Q}ABS および V{Q}NEG

VABS (ベク タ絶対値) は、 ベクタの各要素の絶対値を取得して、 その結果を 2 番目の

ベクタに返します (浮動小数点バージ ョ ンは、 符号ビッ ト をク リするだけです)。

VNEG (ベク タ否定) は、 ベク タの各要素を否定して、 その結果を 2 番目のベクタに返

します (浮動小数点バージ ョ ンは、 符号ビッ ト を反転するだけで)。

いずれの命令にもサチュレートバージ ョ ンがあ り ます。 サチュレーシ ョ ンが発生した場合は、 スティ ッキー QC フラグ (FPSCR ビッ ト [27]) が設定さます。

構文

V{Q}op{cond}.datatype Qd, Qm

V{Q}op{cond}.datatype Dd, Dm

各パラ メータには以下の意味があ り ます。

Q このパラ メータが指定されている場合、 オーバーフローした結果はサ

チュレート されます。

op ABS または NEG を指定します。

cond 任意の条件コードを指定します。

datatype 以下のいずれかを指定します。

S8、 S16、 S32 VABS、 VNEG、 VQABS、 または VQNEG の場合

F32 VABS および VNEG の場合のみ

Qd, Qm クワ ッ ド ワード演算で使用するデスティネーシ ョ ンベクタ とオペランド

ベク タを指定します。

Dd, Dm ダブルワード演算で使用するデスティネーシ ョ ンベク タ とオペランドベ

クタを指定します。

関連項目

参照 :

• 条件コード (3-175 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 4-46ID 0 8 1 7 1 1 Non-Confidential

Page 256: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

NEON と VFP プログラ ミング

4.6.3 V{Q}ADD、 VADDL、 VADDW、 V{Q}SUB、 VSUBL、 VSUBW

VADD (ベク タ加算) は、 2 つのベクタのそれぞれ対応する要素を加算し、 その結果を

デスティネーシ ョ ンベク タに返します。

VSUB (ベク タ減算) は、 あるベクタの要素を対応する別のベクタの要素から減算し、

その結果をデスティネーシ ョ ンベクタに返します。

VADD と VSUB には次のバージ ョ ンがあ り ます。

• サチュレート。 サチュレーシ ョ ンが発生した場合は、 スティ ッキー QC フラグ

(FPSCR ビッ ト [27]) が設定されます。

• Long。• Wide。

構文

V{Q}op{cond}.datatype {Qd}, Qn, Qm ; サチ ュ レー ト命令

V{Q}op{cond}.datatype {Dd}, Dn, Dm ; サチ ュ レー ト命令

VopL{cond}.datatype Qd, Dn, Dm ; Long 命令

VopW{cond}.datatype {Qd}, Qn, Dm ; Wide 命令

各パラ メータには以下の意味があ り ます。

Q このパラ メータが指定されている場合、 オーバーフローした結果はサ

チュレート されます。

op ADD または SUB を指定します。

cond 任意の条件コードを指定します。

datatype 以下のいずれかを指定します。

I8、 I16、 I32、 I64、 F32 VADD または VSUB の場合

S8、 S16、 S32 VQADD、 VQSUB、 VADDL、 VADDW、 VSUBL、 または VSUBW の場

U8、 U16、 U32 VQADD、 VQSUB、 VADDL、 VADDW、 VSUBL、 または VSUBW の場

S64、 U64 VQADD または VQSUB の場合

Qd, Qn, Qm クワ ッ ド ワード演算で使用するデスティネーシ ョ ンベクタ、 第 1 オペラ

ンドベクタ、 および第 2 オペランドベクタを指定します。

Dd, Dn, Dm ダブルワード演算で使用するデスティネーシ ョ ンベク タ、 第 1 オペラン

ドベクタ、 および第 2 オペランドベク タを指定します。

Qd, Dn, Dm Long 演算で使用するデスティネーシ ョ ンベク タ、 第 1 オペランドベク

タ、 および第 2 オペランドベク タを指定します。

Qd, Qn, Dm Wide 演算で使用するデスティネーシ ョ ンベクタ、 第 1 オペランドベク

タ、 および第 2 オペランドベク タを指定します。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 4-47ID 0 8 1 7 1 1 Non-Confidential

Page 257: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

NEON と VFP プログラ ミング

関連項目

参照 :

• 条件コード (3-175 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 4-48ID 0 8 1 7 1 1 Non-Confidential

Page 258: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

NEON と VFP プログラ ミング

4.6.4 V{R}ADDHN および V{R}SUBHN

V{R}ADDH (上位半分を選択してベクタ加算し、 幅を狭める) は、 2 つのベクタのそれ

ぞれ対応する要素を加算し、 その結果の上位半分を選択して、 終的結果をデスティネーシ ョ ンベク タに返します。 結果は丸めるか、 切り捨てるこ とができます。

V{R}SUBH (上位半分を選択してベクタ減算し、 幅を狭める) は、 あるベク タの要素を

対応する別のベクタの要素から減算し、 その結果の上位半分を選択し、 終的な結果をデスティネーシ ョ ンベクタに返します。 結果は丸めるか、 切り捨てるこ とができます。

構文

V{R}opHN{cond}.datatype Dd, Qn, Qm

各パラ メータには以下の意味があ り ます。

R このパラ メータが指定されている場合、 結果は丸められます。 指定され

ていない場合、 結果は切り捨てられます。

op ADD または SUB を指定します。

cond 任意の条件コードを指定します。

datatype I16、 I32、 または I64 のいずれかを指定します。

Dd, Qn, Qm デスティネーシ ョ ンベク タ、 第 1 オペランドベクタ、 および第 2 オペラ

ンドベクタを指定します。

関連項目

参照 :

• 条件コード (3-175 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 4-49ID 0 8 1 7 1 1 Non-Confidential

Page 259: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

NEON と VFP プログラ ミング

4.6.5 V{R}HADD および VHSUB

VHADD (ベク タ二分加算) は、 2 つのベクタのそれぞれ対応する要素を加算し、 結果

を 1 ビッ ト右にシフ ト して、 その結果をデスティネーシ ョ ンベク タ返します。 結果

は丸めるか、 切り捨てるこ とができます。

VHSUB (ベク タ二分減算) は、 あるベクタの要素を対応する別のベクタの要素から減

算し、 結果を 1 ビッ ト右にシフ ト して、 その結果をデスティネーシ ョ ンベクタに返

します。 結果は常に切り捨てられます。

構文

V{R}HADD{cond}.datatype {Qd}, Qn, Qm

V{R}HADD{cond}.datatype {Dd}, Dn, Dm

VHSUB{cond}.datatype {Qd}, Qn, Qm

VHSUB{cond}.datatype {Dd}, Dn, Dm

各パラ メータには以下の意味があ り ます。

R このパラ メータが指定されている場合、 結果は丸められます。 指定され

ていない場合、 結果は切り捨てられます。

cond 任意の条件コードを指定します。

datatype S8、 S16、 S32、 U8、 U16、 U32 のいずれかを指定します。

Qd, Qn, Qm クワ ッ ド ワード演算で使用するデスティネーシ ョ ンベクタ、 第 1 オペラ

ンドベクタ、 および第 2 オペランドベクタを指定します。

Dd, Dn, Dm ダブルワード演算で使用するデスティネーシ ョ ンベク タ、 第 1 オペラン

ドベクタ、 および第 2 オペランドベク タを指定します。

関連項目

参照 :

• 条件コード (3-175 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 4-50ID 0 8 1 7 1 1 Non-Confidential

Page 260: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

NEON と VFP プログラ ミング

4.6.6 VPADD{L}、 VPADAL

VPADD (ベク タペアワイズ加算) は、 2 つのベクタの隣接する要素のペアを加算し、

その結果をデスティネーシ ョ ンベクタに返します。

図 4-6 VPADD 演算の例 (データ型 I16 の場合)

VPADDL (ベク タペアワイズ加算 Long) は、 あるベク タの隣接する要素のペアを加算

し、 結果を符号拡張またはゼロ拡張し元の幅の 2 倍にして、 終的な果をデスティ

ネーシ ョ ンベクタに返します。

図 4-7 ダブルワード VPADDL 演算の例 (データ型 S16 の場合)

VPADAL (ベク タペアワイズ加算累積 Long) は、 あるベクタの隣接する要素のペアを

加算し、 その結果の絶対値をデスティネーシ ョ ンベク タの要素に累積ます。

図 4-8 VPADAL 演算の例 (データ型 S16 の場合)

構文

VPADD{cond}.datatype {Dd}, Dn, Dm

VPopL{cond}.datatype Qd, Qm

VPopL{cond}.datatype Dd, Dm

各パラ メータには以下の意味があ り ます。

op ADD または ADA を指定します。

cond 任意の条件コードを指定します。

Dd

DnDm

+ + ++

Dd

Dm

+ +

Dd

Dm

+ +

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 4-51ID 0 8 1 7 1 1 Non-Confidential

Page 261: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

NEON と VFP プログラ ミング

datatype 以下のいずれかを指定します。

I8、 I16、 I32、 F32 VPADD の場合

S8、 S16、 S32 VPADDL または VPADAL の場合

U8、 U16、 U32 VPADDL または VPADAL の場合

Dd, Dn, Dm VPADD 命令で使用するデスティネーシ ョ ンベクタ、 第 1 オペランドベク

タ、 および第 2 オペランドベク タを指定します。

Qd, Qm クワ ッ ド ワードの VPADDL または VPADAL で使用するデスティネーシ ョ ンベ

クタ とオペランドベクタを指定します。

Dd, Dm ダブルワードの VPADDL または VPADAL で使用するデスティネーシ ョ ンベク

タ とオペランドベクタを指定します。

関連項目

参照 :

• 条件コード (3-175 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 4-52ID 0 8 1 7 1 1 Non-Confidential

Page 262: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

NEON と VFP プログラ ミング

4.6.7 VMAX、 VMIN、 VPMAX、 VPMIN

VMAX (ベク タ 大値) は、 2 つのベクタのそれぞれ対応する要素を比較し、 各ペアの

大きい方の要素をデスティネーシ ョ ンベクタの対応する要素にコーします。

VMIN (ベク タ 小値) は、 2 つのベクタのそれぞれ対応する要素を比較し、 各ペアの

小さい方の要素をデスティネーシ ョ ンベクタの対応する要素にコーします。

VPMAX (ベク タペアワイズ 大値) は、 2 つのベクタの隣接する要素のペアを比較し、

各ペアの大きい方の要素をデスティネーシ ョ ンベクタの対応する素にコピーします。オペランド と結果はダブルワードベクタである必要があ り ます。

VPMIN (ベク タペアワイズ 小値) は、 2 つのベクタの隣接する要素のペアを比較し、

各ペアの小さい方の要素をデスティネーシ ョ ンベクタの対応する素にコピーします。オペランド と結果はダブルワードベクタである必要があ り ます。

構文

Vop{cond}.datatype Qd, Qn, Qm

Vop{cond}.datatype Dd, Dn, Dm

VPop{cond}.datatype Dd, Dn, Dm

各パラ メータには以下の意味があ り ます。

op MAX または MIN を指定します。

cond 任意の条件コードを指定します。

datatype S8、 S16、 S32、 U8、 U16、 U32、 F32 のいずれかを指定します。

Qd, Qn, Qm クワ ッ ド ワード演算で使用するデスティネーシ ョ ンベクタ、 第 1 オペラ

ンドベクタ、 および第 2 オペランドベクタを指定します。

Dd, Dn, Dm ダブルワード演算で使用するデスティネーシ ョ ンベク タ、 第 1 オペラン

ドベクタ、 および第 2 オペランドベク タを指定します。

浮動小数点の最大値と最小値

max(+0.0, –0.0) = +0.0

min(+0.0, –0.0) = –0.0

いずれかの入力が NaN の場合、 対応する結果要素はデフォルトの NaN にな り ます。

関連項目

参照 :

• 条件コード (3-175 ページ)

• VPADD{L}、 VPADAL (4-51 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 4-53ID 0 8 1 7 1 1 Non-Confidential

Page 263: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

NEON と VFP プログラ ミング

4.6.8 VCLS、 VCLZ、 VCNT

VCLS (ベク タ先行符号ビッ ト カウン ト ) は、 あるベクタの各要素に含まれる 上位

ビッ トに続く連続ビッ ト ( 上位ビッ ト と同じ) の数をカウン ト しその結果を 2 番目のベクタに返します。

VCLZ (ベク タ先行ゼロカウン ト ) は、 あるベクタの各要素に含まれる連続するゼロの

数をカウン ト し ( 上位ビッ トから開始)、 その結果を 2 番目のクタに返します。

VCNT (ベク タセッ ト ビッ ト カウン ト ) は、 あるベクタの各要素に含まれるビッ トの数

をカウン ト し、 その結果を 2 番目のベクタに返します。

構文

Vop{cond}.datatype Qd, Qm

Vop{cond}.datatype Dd, Dm

各パラ メータには以下の意味があ り ます。

op CLS、 CLZ、 または CNT のいずれかを指定します。

cond 任意の条件コードを指定します。

datatype 以下のいずれかを指定します。

• CLS の場合は S8、 S16、 または S32• CLZ の場合は I8、 I16、 または I32• CNT の場合は I8

Qd, Qm クワ ッ ド ワード演算で使用するデスティネーシ ョ ンベクタ とオペランド

ベク タを指定します。

Dd, Dm ダブルワード演算で使用するデスティネーシ ョ ンベク タ とオペランドベ

クタを指定します。

関連項目

参照 :

• 条件コード (3-175 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 4-54ID 0 8 1 7 1 1 Non-Confidential

Page 264: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

NEON と VFP プログラ ミング

4.6.9 VRECPE および VRSQRTE

VRECPE (ベク タ逆数の推定) は、 あるベクタに含まれる各要素の逆数の近似値を見つ

け、 その結果を 2 番目のベクタに返します。

VRSQRTE (ベク タ逆平方根の推定) は、 あるベクタに含まれる各要素の逆平方根の近

似値を見つけ、 その結果を 2 番目のベクタに返します。

構文

Vop{cond}.datatype Qd, Qm

Vop{cond}.datatype Dd, Dm

各パラ メータには以下の意味があ り ます。

op RECPE または RSQRTE を指定します。

cond 任意の条件コードを指定します。

datatype U32 または F32 を指定します。

Qd, Qm クワ ッ ド ワード演算で使用するデスティネーシ ョ ンベクタ とオペランド

ベク タを指定します。

Dd, Dm ダブルワード演算で使用するデスティネーシ ョ ンベク タ とオペランドベ

クタを指定します。

有効範囲外の入力を指定した場合の結果

表 4-10 に、 有効範囲外の入力値を指定した場合の結果を示します。

関連項目

参照 :

• 条件コード (3-175 ページ) .

表 4-10 有効範囲外の入力を指定した場合の結果

オペランド要素 (VRECPE) オペランド要素 (VRSQRTE) 結果要素

整数 <= 0x7FFFFFFF <= 0x3FFFFFFF 0xFFFFFFFF

浮動小数点 NaN NaN、 負の正規、 負の無限大 デフォルトの NaN

負の 0、 負の非正規 負の 0、 負の非正規 負の無限大a

正の 0、 正の非正規 正の 0、 正の非正規 正の無限大 a

正の無限大 正の無限大 正の 0

負の無限大 負の 0

a. FPSCR (FPSCR[1]) では、 ゼロによる除算の例外ビッ トが設定されます。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 4-55ID 0 8 1 7 1 1 Non-Confidential

Page 265: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

NEON と VFP プログラ ミング

4.6.10 VRECPS および VRSQRTS

VRECPS (ベク タ逆数のステップ) は、 あるベクタの要素を対応する別のベクタの要素

で乗算し、 その結果を 2 から減算して、 終的な結果をデスティネーシ ョ ンベク タ

の要素に返します。

VRSQRTS (ベク タ逆平方根のステップ) は、 あるベク タの要素を対応する別のベクタ

の要素で乗算し、 その結果を 3 から減算して 2 で除算し、 終的な結をデスティネー

シ ョ ンベク タの要素に返します。

構文

Vop{cond}.F32 {Qd}, Qn, Qm

Vop{cond}.F32 {Dd}, Dn, Dm

各パラ メータには以下の意味があ り ます。

op RECPS または RSQRTS を指定します。

cond 任意の条件コードを指定します。

Qd, Qn, Qm クワ ッ ド ワード演算で使用するデスティネーシ ョ ンベクタ、 第 1 オペラ

ンドベクタ、 および第 2 オペランドベクタを指定します。

Dd, Dn, Dm ダブルワード演算で使用するデスティネーシ ョ ンベク タ、 第 1 オペラン

ドベクタ、 および第 2 オペランドベク タを指定します。

有効範囲外の入力を指定した場合の結果

表 4-11 に、 有効範囲外の入力値を指定した場合の結果を示します。

使用法

ニュート ンラプソン法による反復計算 :

xn+1 = xn(2-dxn)

VRECPE を d に適用した結果が x0 である場合に (1/d) に収束します。

ニュート ンラプソン法による反復計算 :

xn+1 = xn(3-dxn2)/2

VRSQRTE を d に適用した結果が x0 である場合に (1/ √ d) に収束します。

表 4-11 有効範囲外の入力を指定した場合の結果

第 1 オペランド要素 第 2 オペランド要素 結果要素 (VRECPS) 結果要素 (VRSQRTS)

NaN - デフォルトの NaN デフォルトの NaN

- NaN デフォルトの NaN デフォルトの NaN

+/– 0.0 または非正規 +/– 無限大 2.0 1.5

+/– 無限大 +/– 0.0 または非正規 2.0 1.5

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 4-56ID 0 8 1 7 1 1 Non-Confidential

Page 266: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

NEON と VFP プログラ ミング

関連項目

参照 :

• 条件コード (3-175 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 4-57ID 0 8 1 7 1 1 Non-Confidential

Page 267: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

NEON と VFP プログラ ミング

4.7 NEON 乗算命令

このセクシ ョ ンは以下のサブセクシ ョ ンから構成されています。

• VMUL{L}、 VMLA{L}、 VMLS{L} (4-59 ページ) .

ベクタ乗算、 積和、 および積差

• VMUL{L}、 VMLA{L}、 VMLS{L} (スカラによる) (4-60 ページ) .

ベクタ乗算、 積和、 および積差 (スカラによる)

• VFMA、 VFMS (4-61 ページ) .

ベクタ結合積和およびベクタ結合積差

• VQDMULL、 VQDMLAL、 VQDMLSL (ベク タまたはスカラによる) (4-62 ペー

ジ)

ベク タサチュレート ダブル乗算、 積和、 および積差 (ベクタまたはスカラによる)

• VQ{R}DMULH (ベク タまたはスカラによる) (4-63 ページ)

上位半分を返すベクタサチュレート ダブル乗算 (ベク タまたはスカラによる)

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 4-58ID 0 8 1 7 1 1 Non-Confidential

Page 268: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

NEON と VFP プログラ ミング

4.7.1 VMUL{L}、 VMLA{L}、 VMLS{L}

VMUL (ベク タ乗算) は、 2 つのベクタのそれぞれ対応する要素を乗算し、 その結果を

デスティネーシ ョ ンベク タに返します。

VMLA (ベク タ積和) は、 2 つのベクタのそれぞれ対応する要素を乗算し、 その結果を

デスティネーシ ョ ンベク タの要素に累積します。

VMLS (ベク タ積差) は、 2 つのベクタのそれぞれ対応する要素を乗算し、 その結果を

デスティネーシ ョ ンベク タの対応する要素から減算して、 終的結果をデスティネーシ ョ ンベクタに返します。

構文

Vop{cond}.datatype {Qd}, Qn, Qm

Vop{cond}.datatype {Dd}, Dn, Dm

VopL{cond}.datatype Qd, Dn, Dm

各パラ メータには以下の意味があ り ます。

op 以下のいずれかを指定します。

MUL 乗算

MLA 積和

MLS 積差

cond 任意の条件コードを指定します。

datatype 以下のいずれかを指定します。

I8、 I16、 I32、 F32 VMUL、 VMLA、 または VMLS の場合

S8、 S16、 S32 VMULL、 VMLAL、 または VMLSL の場合

U8、 U16、 U32 VMULL、 VMLAL、 または VMLSL の場合

P8 VMUL または VMULL の場合

Qd, Qn, Qm クワ ッ ド ワード演算で使用するデスティネーシ ョ ンベクタ、 第 1 オペラ

ンドベクタ、 および第 2 オペランドベクタを指定します。

Dd, Dn, Dm ダブルワード演算で使用するデスティネーシ ョ ンベク タ、 第 1 オペラン

ドベクタ、 および第 2 オペランドベク タを指定します。

Qd, Dn, Dm Long 演算で使用するデスティネーシ ョ ンベク タ、 第 1 オペランドベク

タ、 および第 2 オペランドベク タを指定します。

関連項目

概念

『アセンブラの使用』 :

• {0,1} 上の多項式算術演算 (9-22 ページ) .

参照 :

• 条件コード (3-175 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 4-59ID 0 8 1 7 1 1 Non-Confidential

Page 269: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

NEON と VFP プログラ ミング

4.7.2 VMUL{L}、 VMLA{L}、 VMLS{L} (スカラによる)

VMUL (スカラによるベクタ乗算) は、 あるベクタの各要素をスカラで乗算し、 その結

果をデスティネーシ ョ ンベクタに返します。

VMLA (ベク タ積和) は、 あるベクタの各要素をスカラで乗算し、 その結果をデスティ

ネーシ ョ ンベクタの対応する要素に累積します。

VMLS (ベク タ積差) は、 あるベクタの各要素をスカラで乗算し、 その結果をデスティ

ネーシ ョ ンベクタの対応する要素から減算して、 終的な結果をデスティネーシ ョンベクタに返します。

構文

Vop{cond}.datatype {Qd}, Qn, Dm[x]

Vop{cond}.datatype {Dd}, Dn, Dm[x]

VopL{cond}.datatype Qd, Dn, Dm[x]

各パラ メータには以下の意味があ り ます。

op 以下のいずれかを指定します。

MUL 乗算

MLA 積和

MLS 積差

cond 任意の条件コードを指定します。

datatype 以下のいずれかを指定します。

I16、 I32、 F32 VMUL、 VMLA、 または VMLS の場合

S16、 S32 VMULL、 VMLAL、 または VMLSL の場合

U16、 U32 VMULL、 VMLAL、 または VMLSL の場合

Qd, Qn クワ ッ ド ワード演算で使用するデスティネーシ ョ ンベクタ と第 1 オペラ

ンドベクタを指定します。

Dd, Dn ダブルワード演算で使用するデスティネーシ ョ ンベク タ と第 1 オペラン

ドベクタを指定します。

Qd, Dn Long 演算で使用するデスティネーシ ョ ンベクタ と第 1 オペランドベクタ

を指定します。

Dm[x] 第 2 オペランドを保持するスカラです。

関連項目

参照 :

• 条件コード (3-175 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 4-60ID 0 8 1 7 1 1 Non-Confidential

Page 270: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

NEON と VFP プログラ ミング

4.7.3 VFMA、 VFMS

VFMA (ベク タ結合積和) は、 2 つのオペランドベク タのそれぞれ対応する要素を乗算

し、 その結果をデスティネーシ ョ ンベク タの要素に累積します。 算の前に乗算の結果の丸めは行われません。

VFMS (ベク タ結合積差) は、 2 つのオペランドベク タのそれぞれ対応する要素を乗算

し、 その結果をデスティネーシ ョ ンベク タの対応する要素から減して、 終的な結果をデスティネーシ ョ ンベクタに返します。 減算の前に乗算の結果の丸めは行われません。

構文

Vop{cond}.F32 {Qd}, Qn, Qm

Vop{cond}.F32 {Dd}, Dn, Dm

Vop{cond}.F64 {Dd}, Dn, Dm

Vop{cond}.F32 {Sd}, Sn, Sm

各パラ メータには以下の意味があ り ます。

op FMA または FMS のいずれかを指定します。

cond 任意の条件コードを指定します。

Sd, Sn, Sm ワード演算で使用するデスティネーシ ョ ンベク タ とオペランドベク タを

指定します。

Dd, Dn, Dm ダブルワード演算で使用するデスティネーシ ョ ンベク タ とオペランドベ

クタを指定します。

Qd, Qn, Qm クワ ッ ド ワード演算で使用するデスティネーシ ョ ンベクタ とオペランド

ベク タを指定します。

関連項目

参照 :

• 条件コード (3-175 ページ)

• VMUL{L}、 VMLA{L}、 VMLS{L} (4-59 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 4-61ID 0 8 1 7 1 1 Non-Confidential

Page 271: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

NEON と VFP プログラ ミング

4.7.4 VQDMULL、 VQDMLAL、 VQDMLSL (ベクタまたはスカラによる)

ベクタサチュレート ダブル乗算命令は、 オペランドを乗算し、 その結果を 2 倍にし

ます。 VQDMULL は、 結果をデスティネーシ ョ ンレジスタに返します。 VQDMLAL は、 結果

をデスティネーシ ョ ンレジスタの値に加算します。 VQDMLSL は、 結果をデスティネー

シ ョ ンレジスタの値から減算します。

オーバーフローした結果はサチュレート されます。 サチュレーシ ョ ンが発生した場合は、 スティ ッキー QC フラグ (FPSCR ビッ ト [27]) が設定されます。

構文

VQDopL{cond}.datatype Qd, Dn, Dm

VQDopL{cond}.datatype Qd, Dn, Dm[x]

各パラ メータには以下の意味があ り ます。

op 以下のいずれかを指定します。

MUL 乗算

MLA 積和

MLS 積差

cond 任意の条件コードを指定します。

datatype S16 または S32 を指定します。

Qd, Dn デスティネーシ ョ ンベク タ と第 1 オペランドベクタを指定します。

Dm ベクタによる演算の第 2 オペランドを保持するベクタです。

Dm[x] スカラによる演算の第 2 オペランドを保持するスカラです。

関連項目

参照 :

• 条件コード (3-175 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 4-62ID 0 8 1 7 1 1 Non-Confidential

Page 272: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

NEON と VFP プログラ ミング

4.7.5 VQ{R}DMULH (ベクタまたはスカラによる)

ベクタサチュレート ダブル乗算命令は、 オペランドを乗算し、 その結果を 2 倍にし

ます。 結果の上位半分しか返されません。

オーバーフローした結果はサチュレート されます。 サチュレーシ ョ ンが発生した場合は、 スティ ッキー QC フラグ (FPSCR ビッ ト [27]) が設定されます。

構文

VQ{R}DMULH{cond}.datatype {Qd}, Qn, Qm

VQ{R}DMULH{cond}.datatype {Dd}, Dn, Dm

VQ{R}DMULH{cond}.datatype {Qd}, Qn, Dm[x]

VQ{R}DMULH{cond}.datatype {Dd}, Dn, Dm[x]

各パラ メータには以下の意味があ り ます。

R このパラ メータが指定されている場合、 結果は丸められます。 指定され

ていない場合、 結果は切り捨てられます。

cond 任意の条件コードを指定します。

datatype S16 または S32 を指定します。

Qd, Qn クワ ッ ド ワード演算で使用するデスティネーシ ョ ンベクタ と第 1 オペラ

ンドベクタを指定します。

Dd, Dn ダブルワード演算で使用するデスティネーシ ョ ンベク タ と第 1 オペラン

ドベクタを指定します。

Qm ま たは Dm ベクタによる演算の第 2 オペランドを保持するベクタです。

Dm[x] スカラによる演算の第 2 オペランドを保持するスカラです。

関連項目

参照 :

• 条件コード (3-175 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 4-63ID 0 8 1 7 1 1 Non-Confidential

Page 273: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

NEON と VFP プログラ ミング

4.8 NEON 要素と構造体のロード / ストア命令

このセクシ ョ ンは以下のサブセクシ ョ ンから構成されています。

• インターリーブ .

• ロード と ス ト ア命令、 要素と構造体の命令における境界調整の制約 (4-65 ペー

ジ) .

• VLDn、 VSTn (1 レーンへの 1 つの n 要素構造体) (4-66 ページ) .

これは、 ほとんどすべてのデータアクセスで使用されます。 正規ベクタをロードできます (n = 1)。

• VLDn (全レーンへの 1 つの n 要素構造体) (4-68 ページ) .

• VLDn、 VSTn (複数の n 要素構造体) (4-70 ページ) .

4.8.1 インターリーブ

このグループの命令の多くは、 構造体を メモ リにス ト アする と きにインターリーブを可能にし、 構造体をメモ リからロードする と きにインターリブの解除を可能にします。 図 4-9 に、 インターリーブの解除の例を示します。 インターリーブはこの逆の

プロセスです。

図 4-9 3 要素構造体からなる配列のインターリーブの解除

Z3 D2

A[3].xA[3].yA[3].z

Z2 Z1 Z0

A[2].xA[2].yA[2].z

A[1].xA[1].yA[1].z

A[0].xA[0].yA[0].z

Y3 D1Y2 Y1 Y0

X3 D0X2 X1 X0

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 4-64ID 0 8 1 7 1 1 Non-Confidential

Page 274: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

NEON と VFP プログラ ミング

4.8.2 ロード とス トア命令、 要素と構造体の命令における境界調整の制約

通常、 これらの命令を使用する と、 メモ リ整列の境界調整を指定できます。 命令で境界調整が指定されていない場合、 境界調整の制約は、 次のよに A ビッ ト (SCTLR ビッ ト [1]) によって制御されます。

• A ビッ トが 0 の場合、 境界調整の制約はあ り ません (ただし、 厳密に順序を指

定されたメモ リやデバイス メモ リ など、 アクセスが整列要素である合を除きます。 この場合は予測しない結果が返されます)。

• A ビッ トが 1 の場合、 アクセスは整列要素である必要があ り ます。

アドレスが正し く整列されていないと、 境界調整エラーが発生します。

関連項目

リ ファレンス

• 『ARM アーキテクチャ リ ファレンスマニュアル』、http://infocenter.arm.com/help/topic/com.arm.doc.subset.arch.reference/index.html

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 4-65ID 0 8 1 7 1 1 Non-Confidential

Page 275: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

NEON と VFP プログラ ミング

4.8.3 VLDn、 VSTn (1 レーンへの 1 つの n 要素構造体)

1 レーンへの 1 つの n 要素構造体のベクタロード。 1 つの n 要素構造体を メモ リから 1 つまたは複数の NEON レジスタにロード します。 ロード されなかったレジスタの要

素は変更されません。

1 レーンへの 1 つの n 要素構造体のベクタス ト ア。 1 つの n 要素構造体を 1 つまたは

複数の NEON レジスタから メモ リにス ト アします。

構文

Vopn{cond}.datatype list, [Rn{@align}]{!}

Vopn{cond}.datatype list, [Rn{@align}], Rm

各パラ メータには以下の意味があ り ます。

op LD または ST を指定します。

n 1、 2、 3、 または 4 のいずれかにします。

cond 任意の条件コードを指定します。

datatype 詳細については、 表 4-12 を参照して下さい。

list NEON レジスタ リ ス ト を指定します。 オプシ ョ ンについては、 表 4-12 を参照して下さい。

Rn ベースアドレスを保持する ARM レジスタです。Rn を PC にするこ とはで

きません。

align オプシ ョ ンの境界調整を指定します。 オプシ ョ ンについては、 表 4-12 を参照して下さい。

! ! が指定されている場合、 Rn は (Rn + 命令によって転送されるバイ ト数 ) に更新されます。 更新は、 すべてのロードまたはス ト アが実行された後に行われます。

Rm ベースアドレスからのオフセッ ト を保持する ARM レジスタです。 Rm が指定されている場合、 メモ リにアクセスするためにアドレスが使用された後で、 Rn は (Rn + Rm) に更新されます。 SP と PC は Rm に使用できませ

ん。

表 4-12 パラメータの有効な組み合わせ

n datatype list a align b 境界調整

1 8 {Dd[x]} - 標準のみ

16 {Dd[x]} @16 2 バイ ト

32 {Dd[x]} @32 4 バイ ト

2 8 {Dd[x], D(d+1)[x]} @16 2 バイ ト

16 {Dd[x], D(d+1)[x]} @32 4 バイ ト

{Dd[x], D(d+2)[x]} @32 4 バイ ト

32 {Dd[x], D(d+1)[x]} @64 8 バイ ト

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 4-66ID 0 8 1 7 1 1 Non-Confidential

Page 276: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

NEON と VFP プログラ ミング

関連項目

参照 :

• 条件コード (3-175 ページ) .

{Dd[x], D(d+2)[x]} @64 8 バイ ト

3 8 {Dd[x], D(d+1)[x], D(d+2)[x]} - 標準のみ

16 または 32

{Dd[x], D(d+1)[x], D(d+2)[x]} - 標準のみ

{Dd[x], D(d+2)[x], D(d+4)[x]} - 標準のみ

4 8 {Dd[x], D(d+1)[x], D(d+2)[x], D(d+3)[x]} @32 4 バイ ト

16 {Dd[x], D(d+1)[x], D(d+2)[x], D(d+3)[x]} @64 8 バイ ト

{Dd[x], D(d+2)[x], D(d+4)[x], D(d+6)[x]} @64 8 バイ ト

32 {Dd[x], D(d+1)[x], D(d+2)[x], D(d+3)[x]} @64 または @128

8 バイ ト または 16 バイ ト

{Dd[x], D(d+2)[x], D(d+4)[x], D(d+6)[x]} @64 または @128

8 バイ ト または 16 バイ ト

a. 表内のすべてのレジスタは D0 ~ D31 の範囲内にある必要があ り ます。

b. align は省略できます。 省略した場合は、 標準の境界調整ルールが適用されます。 ロード と ス

ト ア命令、 要素と構造体の命令における境界調整の制約 (4-65 ページ) を参照して下さい。

表 4-12 パラメータの有効な組み合わせ (続き)

n datatype list a align b 境界調整

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 4-67ID 0 8 1 7 1 1 Non-Confidential

Page 277: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

NEON と VFP プログラ ミング

4.8.4 VLDn (全レーンへの 1 つの n 要素構造体)

全レーンへの 1 つの n 要素構造体のベクタロード。 1 つの n 要素構造体の複数のコ

ピーを メモ リから 1 つまたは複数の NEON レジスタにロード します。

構文

VLDn{cond}.datatype list, [Rn{@align}]{!}

VLDn{cond}.datatype list, [Rn{@align}], Rm

各パラ メータには以下の意味があ り ます。

n 1、 2、 3、 または 4 のいずれかにします。

cond 任意の条件コードを指定します。

datatype 詳細については、 表 4-13 を参照して下さい。

list NEON レジスタ リ ス ト を指定します。 オプシ ョ ンについては、 表 4-13 を参照して下さい。

Rn ベースアドレスを保持する ARM レジスタです。Rn を PC にするこ とはで

きません。

align オプシ ョ ンの境界調整を指定します。 オプシ ョ ンについては、 表 4-13 を参照して下さい。

! ! が指定されている場合、 Rn は (Rn + 命令によって転送されるバイ ト数 ) に更新されます。 更新は、 すべてのロードまたはス ト アが実行された後に行われます。

Rm ベースアドレスからのオフセッ ト を保持する ARM レジスタです。 Rm が指定されている場合、 メモ リにアクセスするためにアドレスが使用された後で、 Rn は (Rn + Rm) に更新されます。 SP と PC は Rm に使用できませ

ん。

表 4-13 パラメータの有効な組み合わせ

n datatype list a align b 境界調整

1 8 {Dd[]} - 標準のみ

{Dd[],D(d+1)[]} - 標準のみ

16 {Dd[]} @16 2 バイ ト

{Dd[],D(d+1)[]} @16 2 バイ ト

32 {Dd[]} @32 4 バイ ト

{Dd[],D(d+1)[]} @32 4 バイ ト

2 8 {Dd[], D(d+1)[]} @8 バイ ト

{Dd[], D(d+2)[]} @8 バイ ト

16 {Dd[], D(d+1)[]} @16 2 バイ ト

{Dd[], D(d+2)[]} @16 2 バイ ト

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 4-68ID 0 8 1 7 1 1 Non-Confidential

Page 278: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

NEON と VFP プログラ ミング

関連項目

参照 :

• 条件コード (3-175 ページ) .

32 {Dd[], D(d+1)[]} @32 4 バイ ト

{Dd[], D(d+2)[]} @32 4 バイ ト

3 8、 16、 ま

たは 32{Dd[], D(d+1)[], D(d+2)[]} - 標準のみ

{Dd[], D(d+2)[], D(d+4)[]} - 標準のみ

4 8 {Dd[], D(d+1)[], D(d+2)[], D(d+3)[]} @32 4 バイ ト

{Dd[], D(d+2)[], D(d+4)[], D(d+6)[]} @32 4 バイ ト

16 {Dd[], D(d+1)[], D(d+2)[], D(d+3)[]} @64 8 バイ ト

{Dd[], D(d+2)[], D(d+4)[], D(d+6)[]} @64 8 バイ ト

32 {Dd[], D(d+1)[], D(d+2)[], D(d+3)[]} @64 または @128

8 バイ ト または 16 バイ ト

{Dd[], D(d+2)[], D(d+4)[], D(d+6)[]} @64 または @128

8 バイ ト または 16 バイ ト

a. 表内のすべてのレジスタは D0 ~ D31 の範囲内にある必要があ り ます。

b. align は省略できます。 省略した場合は、 標準の境界調整ルールが適用されます。 ロード と ス

ト ア命令、 要素と構造体の命令における境界調整の制約 (4-65 ページ) を参照して下さい。

表 4-13 パラメータの有効な組み合わせ (続き)

n datatype list a align b 境界調整

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 4-69ID 0 8 1 7 1 1 Non-Confidential

Page 279: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

NEON と VFP プログラ ミング

4.8.5 VLDn、 VSTn (複数の n 要素構造体)

複数の n 要素構造体のベクタロード。複数の n 要素構造体を メモ リから 1 つまたは複

数の NEON レジスタにロード し、 インターリーブを解除します (n == 1 の場合を除き

ます)。 各レジスタのすべての要素がロード されます。

複数の n 要素構造体のベクタス ト ア。複数の n 要素構造体を 1 つまたは複数の NEON レジスタから メモ リにス ト アし、 インターリーブします (n == 1 の場合を除きます)。

各レジスタのすべての要素がス ト アされます。

構文

Vopn{cond}.datatype list, [Rn{@align}]{!}

Vopn{cond}.datatype list, [Rn{@align}], Rm

各パラ メータには以下の意味があ り ます。

op LD または ST を指定します。

n 1、 2、 3、 または 4 のいずれかにします。

cond 任意の条件コードを指定します。

datatype オプシ ョ ンについては、 表 4-14 を参照して下さい。

list NEON レジスタ リ ス ト を指定します。 オプシ ョ ンについては、 表 4-14 を参照して下さい。

Rn ベースアドレスを保持する ARM レジスタです。Rn を PC にするこ とはで

きません。

align オプシ ョ ンの境界調整を指定します。 オプシ ョ ンについては、 表 4-14 を参照して下さい。

! ! が指定されている場合、 Rn は (Rn + 命令によって転送されるバイ ト数 ) に更新されます。 更新は、 すべてのロードまたはス ト アが実行された後に行われます。

Rm ベースアドレスからのオフセッ ト を保持する ARM レジスタです。 Rm が指定されている場合、 メモ リにアクセスするためにアドレスが使用された後で、 Rn は (Rn + Rm) に更新されます。 SP と PC は Rm に使用できませ

ん。

表 4-14 パラメータの有効な組み合わせ

n datatype list a align b 境界調整

1 8、 16、 32、

または 64{Dd} @64 8 バイ ト

{Dd, D(d+1)} @64 または @128 8 バイ ト または 16 バイ

{Dd, D(d+1), D(d+2)} @64 8 バイ ト

{Dd, D(d+1), D(d+2), D(d+3)} @64、 @128、 また

は @2568 バイ ト、 16 バイ ト 、

または 32 バイ ト

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 4-70ID 0 8 1 7 1 1 Non-Confidential

Page 280: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

NEON と VFP プログラ ミング

関連項目

参照 :

• 条件コード (3-175 ページ) .

2 8、 16、 また

は 32{Dd, D(d+1)} @64, @128 8 バイ ト または 16 バイ

{Dd, D(d+2)} @64, @128 8 バイ ト または 16 バイ

{Dd, D(d+1), D(d+2), D(d+3)} @64、 @128、 また

は @2568 バイ ト、 16 バイ ト 、

または 32 バイ ト

3 8、 16、 また

は 32{Dd, D(d+1), D(d+2)} @64 8 バイ ト

{Dd, D(d+2), D(d+4)} @64 8 バイ ト

4 8、 16、 また

は 32{Dd, D(d+1), D(d+2), D(d+3)} @64、 @128、 また

は @2568 バイ ト、 16 バイ ト 、

または 32 バイ ト

{Dd, D(d+2), D(d+4), D(d+6)} @64、 @128、 また

は @2568 バイ ト、 16 バイ ト 、

または 32 バイ ト

a. 表内のすべてのレジスタは D0 ~ D31 の範囲内にある必要があ り ます。

b. align は省略できます。 省略した場合は、 標準の境界調整ルールが適用されます。 ロード と ス

ト ア命令、 要素と構造体の命令における境界調整の制約 (4-65 ページ) を参照して下さい。

表 4-14 パラメータの有効な組み合わせ (続き)

n datatype list a align b 境界調整

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 4-71ID 0 8 1 7 1 1 Non-Confidential

Page 281: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

NEON と VFP プログラ ミング

4.9 NEON 疑似命令および VFP 疑似命令

このセクシ ョ ンは以下のサブセクシ ョ ンから構成されています。

• VLDR 疑似命令 (4-73 ページ) (NEON および VFP)

• VLDR と VSTR (ポス ト インク リ メ ン ト とプレデク リ メン ト ) (4-74 ページ)

(NEON および VFP)

• VMOV2 (4-75 ページ) (NEON のみ)

• VAND および VORN (イ ミディエート ) (4-76 ページ) (NEON のみ)

• VACLE および VACLT (4-77 ページ) (NEON のみ)

• VCLE および VCLT (4-78 ページ) (NEON のみ)

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 4-72ID 0 8 1 7 1 1 Non-Confidential

Page 282: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

NEON と VFP プログラ ミング

4.9.1 VLDR 疑似命令

VLDR 疑似命令は、定数値を 64 ビッ トの NEON ベクタのすべての要素、 または VFP 単精度 / 倍精度レジスタにロード します。

注 このセクシ ョ ンでは、 VLDR 疑似命令についてのみ説明します。

構文

VLDR{cond}.datatype Dd,=constant

VLDR{cond}.datatype Sd,=constant

各パラ メータには以下の意味があ り ます。

datatype 以下のいずれかを指定します。

In NEON のみ

Sn NEON のみ

Un NEON のみ

F32 NEON、 VFPF64 VFP のみ

n 8、 16、 32、 または 64 のいずれかにします。

cond 任意の条件コードを指定します。

Dd ま たは Sd ロード先の拡張レジスタを指定します。

constant datatype で指定された適切な型のイ ミディエート値です。

使用法

レジスタに定数を直接生成できる命令 (例えば VMOV) が使用可能な場合は、 アセン

ブラはそれを使用します。 それ以外の場合は、 定数を含むダブルワードの リ テラルプールエン ト リ を生成し、 VLDR 命令を使用して定数をロード します。

関連項目

参照 :

• VLDR、 VSTR (4-8 ページ)

• 条件コード (3-175 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 4-73ID 0 8 1 7 1 1 Non-Confidential

Page 283: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

NEON と VFP プログラ ミング

4.9.2 VLDR と VSTR (ポス ト インクリ メン ト とプレデクリ メン ト)

ポス ト インク リ メ ン ト とプレデク リ メン ト を行う拡張レジスタをロードまたはス トアする擬似命令。

注 ポス ト インク リ メ ン ト とプレデク リ メン ト を行わない VLDR 命令と VSTR 命令もあ り ま

す。

構文

op{cond}{.size} Fd, [Rn], #offset ; ポス ト イ ン ク リ メ ン ト

op{cond}{.size} Fd, [Rn, #-offset]! ; プ レデ ク リ メ ン ト

各パラ メータには以下の意味があ り ます。

op 以下を指定します。

• VLDR - メモ リから拡張レジスタをロード します。

• VSTR - 拡張レジスタの内容を メモ リにス ト アします。

cond 任意の条件コードを指定します。

size 任意に指定できるデータサイズ指定子です。 Fd が S レジスタの場合は 32、 Fd が D レジスタの場合は 64 にします。

Fd ロードまたは保存する拡張レジスタを指定します。 NEON 命令の場合

は、 ダブルワード (Dd) レジスタである必要があ り ます。 VFP 命令の場

合は、 倍精度 (Dd) レジスタか単精度 (Sd) レジスタのいずれかである

必要があ り ます。

Rn 転送用のベースアドレスを保持する ARM レジスタを指定します。

offset アセンブ リ時に数値が求められる数値式である必要があ り ます。 値は、

Fd が S レジスタの場合は 4、 Fd が D レジスタの場合は 8 にします。

使用法

ポス ト インク リ メ ン ト命令は、 転送後にレジスタ内のベースアドレスをオフセッ ト値の分だけインク リ メ ン ト します。 プレデク リ メン ト命令は、 レジスタ内のベースアドレスをオフセッ ト値の分だけデク リ メン ト してから、 レジスタ内の新しいアドレスを使用して転送を実行します。 これら擬似命令は、 VLDM 命令または VSTM 命令に

アセンブルされます。

関連項目

参照 :

• VLDR、 VSTR (4-8 ページ)

• VLDM、 VSTM、 VPOP、 VPUSH (4-9 ページ)

• 条件コード (3-175 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 4-74ID 0 8 1 7 1 1 Non-Confidential

Page 284: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

NEON と VFP プログラ ミング

4.9.3 VMOV2

VMOV2 疑似命令は、 リ テラルプールから値をロードせずに、 イ ミディエート値を生成

し、 NEON ベクタのすべての要素に配置します。 この疑似命令は、 常 2 つの命令にア

センブルされます。

VMOV2 は、 16 ビッ トの任意のイ ミディエート値、 および範囲が制限されている 32 ビッ ト と 64 ビッ トのイ ミディエート値を生成できます。

構文

VMOV2{cond}.datatype Qd, #constant

VMOV2{cond}.datatype Dd, #constant

各パラ メータには以下の意味があ り ます。

datatype 以下のいずれかを指定します。

• I8、 I16、 I32、 または I64• S8、 S16、 S32、 または S64• U8、 U16、 U32、 または U64• F32

cond 任意の条件コードを指定します。

Qd ま たは Dd ロード先の拡張レジスタを指定します。

constant datatype で指定された適切な型のイ ミディエート値です。

使用法

VMOV2 は通常、 VMOV 命令、 または VMVN 命令にアセンブルされてから、 VBIC 命令、 また

は VORR 命令が続きます。

関連項目

参照 :

• VMOV、 VMVN (イ ミディエート ) (4-28 ページ)

• VBIC および VORR (イ ミディエート ) (4-17 ページ)

• 条件コード (3-175 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 4-75ID 0 8 1 7 1 1 Non-Confidential

Page 285: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

NEON と VFP プログラ ミング

4.9.4 VAND および VORN (イ ミディエート)

VAND (ビ ッ ト単位論理積イ ミディエート ) は、 デスティネーシ ョ ンベクタの各要素を

取得し、 イ ミディエート値を使用してビッ ト単位論理積を実行しデスティネーシ ョンベクタに結果を返します。

VORN (ビ ッ ト単位否定論理和イ ミディエート ) は、 デスティネーシ ョ ンベク タの各要

素を取得し、 イ ミディエート値を使用してビッ ト単位論理和補数を求め、 デスティネーシ ョ ンベクタに結果を返します。

注 逆アセンブル時に、 これらの疑似命令は、 相補イ ミディエート値を使用して対応す

る VBIC 命令と VORR 命令に逆アセンブルされます。

構文

Vop{cond}.datatype Qd, #imm

Vop{cond}.datatype Dd, #imm

各パラ メータには以下の意味があ り ます。

op VAND または VORN を指定します。

cond 任意の条件コードを指定します。

datatype I8、 I16、 I32、 または I64 のいずれかを指定します。

Qd ま たは Dd 結果を保持する NEON レジスタです。

imm イ ミディエート値を指定します。

イ ミディエート値

datatype が I16 の場合、 イ ミディエート値は以下のいずれかの形式を取る必要があ り

ます。

• 0xFFXY

• 0xXYFF

datatype が I32 の場合、 イ ミディエート値は以下のいずれかの形式を取る必要があ り

ます。

• 0xFFFFFFXY

• 0xFFFFXYFF

• 0xFFXYFFFF

• 0xXYFFFFFF

関連項目

参照 :

• VBIC および VORR (イ ミディエート ) (4-17 ページ)

• 条件コード (3-175 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 4-76ID 0 8 1 7 1 1 Non-Confidential

Page 286: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

NEON と VFP プログラ ミング

4.9.5 VACLE および VACLT

ベクタ絶対値比較は、 ベクタの各要素の絶対値を取得し、 2 番目のベクタの対応する

要素の絶対値と比較します。 条件が True の場合、 デスティネーシ ョ ンベクタの対応

する要素はすべて 1 に設定されます。 それ以外の場合は、 すべて 0 に設定されます。

注 逆アセンブル時に、 これらの疑似命令は、 反転したオペランドを使用して対応する VACGE 命令と VACGT 命令に逆アセンブルされます。

構文

VACop{cond}.datatype {Qd}, Qn, Qm

VACop{cond}.datatype {Dd}, Dn, Dm

各パラ メータには以下の意味があ り ます。

op 以下のいずれかを指定します。

LE 以下 (絶対値)

LT 未満 (絶対値)

cond 任意の条件コードを指定します。

datatype F32 を指定します。

Qd ま たは Dd 結果を保持する NEON レジスタです。

結果のデータ型は I32 です。

Qn ま たは Dn 第 1 オペランドを保持する NEON レジスタです。

Qm ま たは Dm 第 2 オペランドを保持する NEON レジスタです。

関連項目

参照 :

• 条件コード (3-175 ページ)

• VACGE および VACGT (4-20 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 4-77ID 0 8 1 7 1 1 Non-Confidential

Page 287: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

NEON と VFP プログラ ミング

4.9.6 VCLE および VCLT

ベクタ比較はベクタの各要素の値を取得し、 2 番目のベクタの対応する要素の値また

は 0 と比較します。 条件が True の場合、 デスティネーシ ョ ンベク タの対応する要素

はすべて 1 に設定されます。 それ以外の場合は、 すべて 0 に設定されます。

注 逆アセンブル時に、 これらの疑似命令は、 反転したオペランドを使用して対応する VCGE 命令と VCGT 命令に逆アセンブルされます。

構文

VCop{cond}.datatype {Qd}, Qn, Qm

VCop{cond}.datatype {Dd}, Dn, Dm

各パラ メータには以下の意味があ り ます。

op 以下のいずれかを指定します。

LE 小さいか等しい

LT 未満

cond 任意の条件コードを指定します。

datatype S8、 S16、 S32、 U8、 U16、 U32、 または F32 のいずれかを指定します。

Qd ま たは Dd 結果を保持する NEON レジスタです。

結果のデータ型は次のよ うにな り ます。

• オペランドのデータ型が I32、 S32、 U32、 または F32 の場合は I32• オペランドのデータ型が I16、 S16、 または U16 の場合は I16• オペランドのデータ型が I8、 S8、 または U8 の場合は I8

Qn ま たは Dn 第 1 オペランドを保持する NEON レジスタです。

Qm ま たは Dm 第 2 オペランドを保持する NEON レジスタです。

関連項目

参照 :

• 条件コード (3-175 ページ)

• VCLE および VCLT.

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 4-78ID 0 8 1 7 1 1 Non-Confidential

Page 288: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

NEON と VFP プログラ ミング

4.10 VFP 命令

このセクシ ョ ンは以下のサブセクシ ョ ンから構成されています。

• VABS、 VNEG、 VSQRT (4-80 ページ)

浮動小数点絶対値、 否定、 および平方根

• VADD、 VSUB、 VDIV (4-81 ページ)

浮動小数点加算、 減算、 および除算

• VMUL、 VMLA、 VMLS、 VNMUL、 VNMLA、 VNMLS (4-82 ページ)

必要に応じて否定を伴う浮動小数点乗算および積和

• VFMA、 VFMS、 VFNMA、 VFNMS (4-83 ページ)

必要に応じて否定を伴う結合浮動小数点積和および結合浮動小数点積差

• VCMP (4-84 ページ)

浮動小数点比較

• VCVT (単精度と倍精度の間) (4-85 ページ)

単精度と倍精度間の変換

• VCVT (浮動小数点と整数間の変換) (4-86 ページ)

浮動小数点と整数間の変換

• VCVT (浮動小数点と固定小数点間) (4-87 ページ)

浮動小数点と固定小数点間の変換

• VCVTB、 VCVTT (半精度拡張) (4-88 ページ)

半精度浮動小数点数と単精度浮動小数点数間の変換

• VMOV (4-89 ページ)

単精度または倍精度レジスタへの浮動小数点イ ミディエート値の挿入

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 4-79ID 0 8 1 7 1 1 Non-Confidential

Page 289: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

NEON と VFP プログラ ミング

4.10.1 VABS、 VNEG、 VSQRT

浮動小数点絶対値、 否定、 および平方根

これらの命令では、 スカラ、 ベク タ、 または混合演算を実行できます。

構文

Vop{cond}.F32 Sd, Sm

Vop{cond}.F64 Dd, Dm

各パラ メータには以下の意味があ り ます。

op ABS、 NEG、 または SQRT のいずれかを指定します。

cond 任意の条件コードを指定します。

Sd, Sm 結果とオペランドを保持する単精度レジスタです。

Dd, Dm 結果とオペランドを保持する倍精度レジスタです。

使用法

VABS 命令は、 Sm または Dm の内容を取得し、 符号ビッ ト をク リ アして、 その結果を Sd または Dd に返します。 これによ り、 絶対値が得られます。

VNEG 命令は、 Sm または Dm の内容を取得し、 符号ビッ ト を変更して、 その結果を Sd または Dd に返します。 これによ り、 値の否定が得られます。

VSQRT 命令は、 Sm または Dm の内容の値の平方根を計算し、 その結果を Sd または Dd に返します。

VABS 命令と VNEG 命令では、 オペランドが NaN の場合、 符号ビッ トは上記の各ケース

で決定されますが、 例外は生成されません。

浮動小数点の例外

VABS 命令と VNEG 命令によって、 例外が生成されるこ とはあ り ません。

VSQRT 命令は、 無効演算例外または不正確例外を生成する場合があ り ます。

関連項目

概念

『アセンブラの使用』 :

• スカラ演算、 ベク タ演算、 および混合演算の制御 (9-39 ページ) .

参照 :

• 条件コード (3-175 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 4-80ID 0 8 1 7 1 1 Non-Confidential

Page 290: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

NEON と VFP プログラ ミング

4.10.2 VADD、 VSUB、 VDIV

浮動小数点加算、 減算、 および除算

これらの命令では、 スカラ、 ベク タ、 または混合演算を実行できます。

構文

Vop{cond}.F32 {Sd}, Sn, Sm

Vop{cond}.F64 {Dd}, Dn, Dm

各パラ メータには以下の意味があ り ます。

op ADD、 SUB、 または DIV のいずれかを指定します。

cond 任意の条件コードを指定します。

Sd, Sn, Sm 結果とオペランドを保持する単精度レジスタです。

Dd, Dn, Dm 結果とオペランドを保持する倍精度レジスタです。

使用法

VADD 命令は、 オペランドレジスタの値を加算して、 その結果をデスティネーシ ョ ン

レジスタに返します。

VSUB 命令は、 第 2 オペランドレジスタの値を第 1 オペランドレジスタの値から減算

し、 その結果をデスティネーシ ョ ンレジスタに返します。

VDIV 命令は、 第 1 オペランドレジスタの値を第 2 オペランドレジスタの値で除算し、

その結果をデスティネーシ ョ ンレジスタに返します。

浮動小数点の例外

VADD 命令と VSUB 命令は、 無効演算例外、 オーバーフロー例外、 または不正確例外を

生成する場合があ り ます。

VDIV 演算は、 ゼロ除算例外、 無効演算例外、 オーバーフロー例外、 アンダーフロー

例外、 または不正確例外を生成する場合があ り ます。

関連項目

概念

『アセンブラの使用』 :

• スカラ演算、 ベク タ演算、 および混合演算の制御 (9-39 ページ) .

参照 :

• 条件コード (3-175 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 4-81ID 0 8 1 7 1 1 Non-Confidential

Page 291: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

NEON と VFP プログラ ミング

4.10.3 VMUL、 VMLA、 VMLS、 VNMUL、 VNMLA、 VNMLS

必要に応じて否定を伴う浮動小数点乗算および積和

これらの命令では、 スカラ、 ベク タ、 または混合演算を実行できます。

構文

V{N}MUL{cond}.F32 {Sd,} Sn, Sm

V{N}MUL{cond}.F64 {Dd,} Dn, Dm

V{N}MLA{cond}.F32 Sd, Sn, Sm

V{N}MLA{cond}.F64 Dd, Dn, Dm

V{N}MLS{cond}.F32 Sd, Sn, Sm

V{N}MLS{cond}.F64 Dd, Dn, Dm

各パラ メータには以下の意味があ り ます。

N 終結果を否定します。

cond 任意の条件コードを指定します。

Sd, Sn, Sm 結果とオペランドを保持する単精度レジスタです。

Dd, Dn, Dm 結果とオペランドを保持する倍精度レジスタです。

使用法

VMUL 演算は、 オペランドレジスタの値を乗算し、 その結果をデスティネーシ ョ ンレ

ジスタに返します。

VMLA 演算は、 オペランドレジスタの値を乗算し、 デスティネーシ ョ ンレジスタの値

を加算して、 その 終結果をデスティネーシ ョ ンレジスタに返します。

VMLS 演算は、 オペランドレジスタの値を乗算し、 その結果値をデスティネーシ ョ ン

レジスタの値から減算し、 終結果をデスティネーシ ョ ンレジスタに返します。

いずれの場合も、 N オプシ ョ ンを使用する と 終結果は否定されます。

浮動小数点の例外

命令は、 無効演算例外、 オーバーフロー例外、 アンダーフロー例外、 不正確例外、入力非正規例外を生成する場合があ り ます。

関連項目

概念

『アセンブラの使用』 :

• スカラ演算、 ベク タ演算、 および混合演算の制御 (9-39 ページ) .

参照 :

• 条件コード (3-175 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 4-82ID 0 8 1 7 1 1 Non-Confidential

Page 292: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

NEON と VFP プログラ ミング

4.10.4 VFMA、 VFMS、 VFNMA、 VFNMS

必要に応じて否定を伴う結合浮動小数点積和および結合浮動小数点積差

これらの命令では常にスカラ演算が実行されます。

構文

VF{N}op{cond}.F64 {Dd}, Dn, Dm

VF{N}op{cond}.F32 {Sd}, Sn, Sm

各パラ メータには以下の意味があ り ます。

op MA または MS を指定します。

N 終結果を否定します。

cond 任意の条件コードを指定します。

Sd, Sn, Sm 結果とオペランドを保持する単精度レジスタです。

Dd, Dn, Dm 結果とオペランドを保持する倍精度レジスタです。

Qd, Qn, Qm 結果とオペランドを保持する倍精度レジスタです。

使用法

VFMA 演算は、 オペランドレジスタの値を乗算し、 デスティネーシ ョ ンレジスタの値

を加算して、 その 終結果をデスティネーシ ョ ンレジスタに返します。 累算の前に乗算の結果の丸めは行われません。

VFMS 演算は、 オペランドレジスタの値を乗算し、 その結果をデスティネーシ ョ ンレ

ジスタの値から減算し、 終結果をデスティネーシ ョ ンレジスタに返します。 減算の前に乗算の結果の丸めは行われません。

いずれの場合も、 N オプシ ョ ンを使用する と 終結果は否定されます。

浮動小数点の例外

命令は、 入力非正規例外、 無効演算例外、 オーバーフロー例外、 アンダーフロー例外、 または不正確例外を生成する場合があ り ます。

関連項目

概念

『アセンブラの使用』 :

• スカラ演算、 ベク タ演算、 および混合演算の制御 (9-39 ページ) .

参照 :

• 条件コード (3-175 ページ)

• VMUL、 VMLA、 VMLS、 VNMUL、 VNMLA、 VNMLS (4-82 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 4-83ID 0 8 1 7 1 1 Non-Confidential

Page 293: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

NEON と VFP プログラ ミング

4.10.5 VCMP

浮動小数点比較

VCMP では常にスカラ演算が実行されます。

構文

VCMP{cond}.F32 Sd, Sm

VCMP{cond}.F32 Sd, #0

VCMP{cond}.F64 Dd, Dm

VCMP{cond}.F64 Dd, #0

各パラ メータには以下の意味があ り ます。

cond 任意の条件コードを指定します。

Sd, Sm オペランドを保持する単精度レジスタです。

Dd, Dm オペランドを保持する倍精度レジスタを指定します。

使用法

VCMP 命令は、第 2 オペランドレジスタの値 (第 2 オペランドが #0 の場合は 0) を第 1 オペランドレジスタの値から減算し、 その結果に VFP 条件フラグ設定します。

浮動小数点の例外

VCMP 命令は、 無効演算例外を生成するこ とがあ り ます。

関連項目

参照 :

• 条件コード (3-175 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 4-84ID 0 8 1 7 1 1 Non-Confidential

Page 294: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

NEON と VFP プログラ ミング

4.10.6 VCVT (単精度と倍精度の間)

単精度数と倍精度数間の変換を実行します。

VCVT では常にスカラ演算が実行されます。

構文

VCVT{cond}.F64.F32 Dd, Sm

VCVT{cond}.F32.F64 Sd, Dm

各パラ メータには以下の意味があ り ます。

cond 任意の条件コードを指定します。

Dd 結果を保持する倍精度レジスタです。

Sm オペランドを保持する単精度レジスタです。

Sd 結果を保持する単精度レジスタです。

Dm オペランドを保持する倍精度レジスタです。

使用法

これらの命令は Sm の単精度値を倍精度に変換し、 その結果を Dd に返すか、 Dm の倍精

度値を単精度に変換し、 その結果を Sd に返します。

浮動小数点の例外

命令は、 無効演算例外、 入力非正規例外、 オーバーフロー例外、 アンダーフロー例外、 または不正確例外を生成する場合があ り ます。

関連項目

参照 :

• 条件コード (3-175 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 4-85ID 0 8 1 7 1 1 Non-Confidential

Page 295: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

NEON と VFP プログラ ミング

4.10.7 VCVT (浮動小数点と整数間の変換)

浮動小数点数と整数間の変換を実行します。

VCVT では常にスカラ演算が実行されます。

構文

VCVT{R}{cond}.type.F64 Sd, Dm

VCVT{R}{cond}.type.F32 Sd, Sm

VCVT{cond}.F64.type Dd, Sm

VCVT{cond}.F32.type Sd, Sm

各パラ メータには以下の意味があ り ます。

R FPSCR で指定されている丸めモードを演算で使用するこ とを指定しま

す。 それ以外の場合は、 0 に丸めます。

cond 任意の条件コードを指定します。

type U32 (符号なし 32 ビッ ト整数) または S32 (符号付き 32 ビッ ト整数) を

指定できます。

Sd 結果を保持する単精度レジスタです。

Dd 結果を保持する倍精度レジスタです。

Sm オペランドを保持する単精度レジスタです。

Dm オペランドを保持する倍精度レジスタです。

使用法

この命令の 初の 2 つの形式は浮動小数点から整数への変換を実行します。

3 番目と 4 番目の形式は整数から浮動小数点への変換を実行します。

浮動小数点の例外

これらの命令は、 入力非正規例外、 無効演算例外、 または不正確例外を生成する場合があ り ます。

関連項目

参照 :

• 条件コード (3-175 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 4-86ID 0 8 1 7 1 1 Non-Confidential

Page 296: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

NEON と VFP プログラ ミング

4.10.8 VCVT (浮動小数点と固定小数点間)

浮動小数点数と固定小数点数間の変換を実行します。

VCVT では常にスカラ演算が実行されます。

構文

VCVT{cond}.type.F64 Dd, Dd, #fbits

VCVT{cond}.type.F32 Sd, Sd, #fbits

VCVT{cond}.F64.type Dd, Dd, #fbits

VCVT{cond}.F32.type Sd, Sd, #fbits

各パラ メータには以下の意味があ り ます。

cond 任意の条件コードを指定します。

type 次のいずれかを指定できます。

S16 16 ビッ トの符号付き固定小数点値

U16 16 ビッ トの符号なし固定小数点値

S32 32 ビッ トの符号付き固定小数点値

U32 32 ビッ トの符号なし固定小数点値

Sd オペランド と結果を保持する単精度レジスタです。

Dd オペランド と結果を保持する倍精度レジスタです。

fbits 固定小数点数の小数部ビッ ト を指定します。type が S16 または U16 の場合

は 0 ~ 16 の範囲、 type が S32 または U32 の場合は 1 ~ 32 の範囲です。

使用法

この命令の 初の 2 つの形式は浮動小数点から固定小数点への変換を実行します。

3 番目と 4 番目の形式は固定小数点から浮動小数点への変換を実行します。

いずれの場合も、 固定小数点値は、 レジスタの 下位の 16 または 32 ビッ トに含まれ

ます。

浮動小数点の例外

これらの命令は、 入力非正規例外、 無効演算例外、 または不正確例外を生成する場合があ り ます。

関連項目

参照 :

• 条件コード (3-175 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 4-87ID 0 8 1 7 1 1 Non-Confidential

Page 297: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

NEON と VFP プログラ ミング

4.10.9 VCVTB、 VCVTT (半精度拡張)

半精度浮動小数点数と単精度浮動小数点数を以下の方法で相互変換します。

• VCVTB はシングルワードレジスタの下位ビッ ト (ビッ ト [15:0]) を使用して、 半

精度値の取得またはス ト アを行います。

• VCVTT はシングルワードレジスタの上位ビッ ト (ビッ ト [31:16]) を使用して、

半精度値の取得またはス ト アを行います。

VCVTB と VCVTT では、 常にスカラ演算が実行されます。

構文

VCVTB{cond}.type Sd, Sm

VCVTT{cond}.type Sd, Sm

各パラ メータには以下の意味があ り ます。

cond 任意の条件コードを指定します。

type 次のいずれかを指定できます。

F32.F16 半精度から単精度への変換

F16.F32 単精度から半精度への変換

Sd 結果を保持するシングルワードレジスタです。

Sm オペランドを保持するシングルワードレジスタです。

アーキテクチャ

これらの命令を使用できるのは、 半精度拡張をサポート している VFPv3 システムだ

けです。

浮動小数点の例外

命令は、 入力非正規例外、 無効演算例外、 オーバーフロー例外、 アンダーフロー例外、 または不正確例外を生成する場合があ り ます。

関連項目

参照 :

• 条件コード (3-175 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 4-88ID 0 8 1 7 1 1 Non-Confidential

Page 298: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

NEON と VFP プログラ ミング

4.10.10 VMOV

単精度または倍精度レジスタに浮動小数点イ ミディエート値を挿入するか、 1 つのレ

ジスタを別のレジスタにコピーします。

この命令では常にスカラ演算が実行されます。

構文

VMOV{cond}.F32 Sd, #imm

VMOV{cond}.F64 Dd, #imm

VMOV{cond}.F32 Sd, Sm

VMOV{cond}.F64 Dd, Dm

各パラ メータには以下の意味があ り ます。

cond 任意の条件コードを指定します。

Sd 単精度デスティネーシ ョ ンレジスタを指定します。

Dd 倍精度デスティネーシ ョ ンレジスタを指定します。

imm 浮動小数点イ ミディエート値を指定します。

Sm 単精度ソースレジスタを指定します。

Dm 倍精度ソースレジスタを指定します。

イ ミディエート値

+/–n * 2–r と表すこ とができる任意の数値。 こ こで、 n と r は整数、 16 <= n <= 31、 0 <= r <= 7 です。

アーキテクチャ

イ ミディエート定数をコピーする命令は VFPv3 で使用できます。

レジスタからのコピーを行う命令は、 すべての VFP システムで使用できます。

関連項目

参照 :

• 条件コード (3-175 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 4-89ID 0 8 1 7 1 1 Non-Confidential

Page 299: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

第 5 章 ワイヤレス MMX テク ノロジの命令

以下の各ト ピッ クでは、 ワイヤレス MMX テク ノ ロジの命令のサポートについて説明し

ます。

• 概要 (5-2 ページ)

• ワイヤレス MMX テク ノ ロジに対する ARM のサポート (5-3 ページ)

• ワイヤレス MMX の命令 (5-6 ページ)

• ワイヤレス MMX の疑似命令 (5-8 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 5-1ID 0 8 1 7 1 1 Non-Confidential

Page 300: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ワイヤレス MMX テク ノロジの命令

5.1 概要

Marvell ワイヤレス MMX テク ノ ロジは SIMD (単一命令複数データ処理) 命令の

セッ トで、 マルチメディアアプ リ ケーシ ョ ンのパフォーマンスを向上させる一部の XScale プロセッサで使用できます。 ワイヤレス MMX テク ノ ロジでは 64 ビッ ト レジ

スタを使用して、 パッ ク形式の複数のデータ要素で演算できるよ うにします。

アセンブラでは、Marvell ワイヤレス MMX テク ノ ロジ命令をアセンブルし、 PXA270 プロセッサ用のコードを開発するこ とができます。 このプロセッサ、 MMX 拡張を採

用した ARMv5TE アーキテクチャを実装しています。 ワイヤレス MMX テク ノ ロジで

は ARM コプロセッサ 0 および 1 を使用して、 その命令ッ ト とデータ型をサポート し

ています。 ARM コンパイラツールチェーンは、 ワイヤレス MMX テク ノ ロジ制御と

単一命令複数データ処理 (SIMD) データレジスタをサポート しており、 ワイヤレス MMX テク ノ ロジによる開発のための新しいディ レクティブが導入されています。 ま

た、 ロード命令とス ト ア命令のサポート も強化されました。

アセンブラを使用する と きは、 以下の点に注意して下さい。

• ワイヤレス MMX テク ノ ロジの命令は、 サポート されているプロセッサ

(armasm --device PXA270) を指定した場合にのみアセンブルされます。

• PXA270 プロセッサでは、ARM または Thumb で記述されたコードのみをサポー

ト します。

• ARM フラグの状態によっては、 ほとんどのワイヤレス MMX テク ノ ロジの命令

は条件実行できます。 ワイヤレス MMX テク ノ ロジの条件コードは、 ARM の件

コード と同じです。

ワイヤレス MMX 2 テク ノ ロジは、 ワイヤレス MMX テク ノ ロジのアップグレード

バージ ョ ンです。

こ こでは、 ARM コンパイラツールチェーンのアセンブラによるワイヤレス MMX テク ノ ロジのサポートについて説明します。 ワイヤレス MMX テク ノ ロ自体について

は詳し く説明していません。 プログラマモデル、 およびワイヤレス MMX テク ノ ロ

ジの命令セッ トの詳細な説明については、 『ワイヤレス MMX テク ノ ロジデベロ ッパ

ガイ ド』 を参照して下さい。

関連項目

参照

• 『Wireless MMX Technology Developer Guide』

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 5-2ID 0 8 1 7 1 1 Non-Confidential

Page 301: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ワイヤレス MMX テク ノロジの命令

5.2 ワイヤレス MMX テク ノロジに対する ARM のサポート

このセクシ ョ ンでは、 ワイヤレス MMX テク ノ ロジ、 および MMX 2 テク ノ ロジに対

するアセンブラのサポートについて説明します。 このセクシ ョ ンは以下のサブセクシ ョ ンから構成されています。

• ディ レクティブ、 WRN と WCN• Frame ディ レクティブ

• ワイヤレス MMX ロード / ス ト ア命令 (5-4 ページ)

• ワイヤレス MMX テク ノ ロジの命令と XScale の命令 (5-5 ページ) .

5.2.1 ディ レクテ ィブ、 WRN と WCN

次のディ レクティブを使用して、 ワイヤレス MMX テク ノ ロジをサポートできます。

WCN 指定された制御レジスタ名を定義します。 例は以下の通りです。

speed WCN wcgr0 ; 制御レジス タ 0 のシンボル と し て速度を定義する

WRN 指定された SIMD データレジスタ名を定義します。 例は以下の通りで

す。

rate WRN wr6 ; デー タ レジス タ 6 のシンボル と し て レー ト を定義する

同一レジスタに複数の名前を付けて矛盾を生じさせるよ う な使用方法は避けて下さい。 定義済みのレジスタおよびコプロセッサの名前は使用しなで下さい。

5.2.2 Frame ディ レクテ ィブ

ワイヤレス MMX テク ノ ロジのレジスタを通常の方法で FRAME ディ レクティブと と も

に使用して、 オブジェク ト ファ イルにデバッグ情報を追加できます。 次の制限に注意して下さい。

• ワイヤレス MMX テク ノ ロジのレジスタである wR0 ~ wR9 または wCGR0 ~ wCGR3 をスタ ッ クにプッシュしよ う とする と、 警告が表示されます

• ワイヤレス MMX テク ノ ロジのレジスタは、 アドレスオフセッ ト と して使用で

きません。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 5-3ID 0 8 1 7 1 1 Non-Confidential

Page 302: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ワイヤレス MMX テク ノロジの命令

5.2.3 ワイヤレス MMX ロード / ストア命令

ワイヤレス MMX コプロセッサレジスタに対してバイ ト、 ハーフワード、 ワード、

またはダブルワードのロード / ス ト アを実行します。

構文

op<type>{cond} wRd, [Rn, #{-}offset]{!}

op<type>{cond} wRd, [Rn] {, #{-}offset}

opW{cond} wRd, label

opW wCd, [Rn, #{-}offset]{!}

opW wCd, [Rn] {, #{-}offset}

opD{cond} wRd, label

opD wRd, [Rn, {-}Rm {, LSL #imm4}]{!} ; MMX2 のみ

opD wRd, [Rn], {-}Rm {, LSL #imm4} ; MMX2 のみ

各パラ メータには以下の意味があ り ます。

op 次のいずれかを指定できます。

WLDR ワイヤレス MMX レジスタをロード します。

WSTR ワイヤレス MMX レジスタをス ト アします。

<type> 次のいずれかを指定できます。

B バイ ト

H ハーフワード

W ワード

D ダブルワード

cond 任意の条件コードを指定します。

wRd ロードまたはス ト アを実行するワイヤレス MMX SIMD データレジスタ

を指定します。

wCd ロードまたはス ト アを実行するワイヤレス MMX ステータスレジスタお

よび制御レジスタを指定します。

Rn メモ リ アドレスのベース となるレジスタを指定します。

offset イ ミディエートオフセッ ト を指定します。 オフセッ ト を指定しなかった

場合、 その命令はゼロオフセッ ト命令になり ます。

! 任意に指定できる接尾文字です。 ! が存在する場合、 命令はプレインデ

クス命令になり ます。

label PC 相対式を指定します。

label は現在の命令から +/- 1020 バイ ト以内に配置する必要があ り ます。

Rm オフセッ ト と して使用される値を保持するレジスタを指定します。 Rm に PC は指定できません。

imm4 Rm を左にシフ トするビッ ト数を 0 ~ 15 の範囲で保持します。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 5-4ID 0 8 1 7 1 1 Non-Confidential

Page 303: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ワイヤレス MMX テク ノロジの命令

SIMD レジスタへの定数のロード

アセンブラでは、 WLDRW および WLDRD リ テラルロード疑似命令もサポート します。 以下

に例を示します。

WLDRW wr0, =0x114

以下の点に注意して下さい。

• アセンブラでは、 バイ トおよびハーフワード リ テラルをロードできません。 これらをロードする と降格可能エラーが生成されます。 ダウングレーされる と、命令は WLDRW に変換され、 32 ビッ ト リ テラルが生成されます。 これはバイ ト リ

テラルのロード と同様ですが、 32 ビッ ト ワードを使用する点が異なり ます。

• ロードする リ テラルがゼロで、 デスティネーシ ョ ンが SIMD データレジスタで

ある場合、 命令は WZERO に変換されます。

• 8 バイ ト整列ではないダブルワード ロードは予測不能です。

5.2.4 ワイヤレス MMX テク ノロジの命令と XScale の命令

ワイヤレス MMX テク ノ ロジの命令は XScale の命令と重複します。 競合を避けるた

めに、 アセンブラには次の制約があ り ます。

• XScale の命令と ワイヤレス MMX テク ノ ロジの命令を同じアセンブ リに混在さ

せるこ とはできません。

• ワイヤレス MMX テク ノ ロジの TMIA 命令には、XScale の MIA 命令と重複する MIA ニーモニッ クがあ り ます。 次の点に注意して下さい。

— MIA acc0, Rm, Rs は XScale では使用できますが、ワイヤレス MMX テク ノ ロ

ジではエラーにな り ます。

— MIA wR0, Rm, Rs および TMIA wR0, Rm, Rs は、 ワイヤレス MMX テク ノ ロジで

使用できます。

— TMIA acc0, Rm, Rs は XScale ではエラーになり ます(XScale には TMIA 命令は

あ り ません)。

関連項目

概念

『アセンブラの使用』 :

• 事前宣言されている XScale レジスタ名 (3-17 ページ)

• レジスタ相対式と PC 相対式 (8-7 ページ) .

参照

• 条件コード (3-175 ページ)

• MIA、 MIAPH、 MIAxy (3-101 ページ)

• MAR、 MRA (3-160 ページ)

• Frame ディ レクティブ (6-43 ページ)

• FRAME PUSH (6-47 ページ)

• FRAME ADDRESS (6-45 ページ)

• FRAME RETURN ADDRESS (6-51 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 5-5ID 0 8 1 7 1 1 Non-Confidential

Page 304: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ワイヤレス MMX テク ノロジの命令

5.3 ワイヤレス MMX の命令

表 5-1 に、 ワイヤレス MMX テク ノ ロジの命令セッ トの一覧を示します。 各命令の詳

細については、 『ワイヤレス MMX テク ノ ロジデベロ ッパガイ ド』 を参照して下さい。

ワイヤレス MMX テク ノ ロジのレジスタは wRn、 wRd、 ARM のレジスタは Rn、 Rd と示

されています。

表 5-1 ワイヤレス MMX テク ノロジの命令

ニーモニック 例

TANDC TANDCB r15

TBCST TBCSTB wr15, r1

TEXTRC TEXTRCB r15, #0

TEXTRM TEXTRMUBCS r3, wr7, #7

TINSR TINSRB wr6, r11, #0

TMIA, TMIAPH, TMIAxy

TMIANE wr1, r2, r3TMIAPH wr4, r5, r6TMIABB wr4, r5, r6MIAPHNE wr4, r5, r6

TMOVMSK TMOVMSKBNE r14, wr15

TORC TORCB r15

WACC WACCBGE wr1, wr2

WADD WADDBGE wr1, wr2, wr13

WALIGNI, WALIGNR WALIGNI wr7, wr6, wr5,#3WALIGNR0 wr4, wr8, wr12

WAND, WANDN WAND wr1, wr2, wr3WANDN wr5, wr5, wr9

WAVG2 WAVG2B wr3, wr6, wr9WAVG2BR wr4, wr7, wr10

WCMPEQ WCMPEQB wr0, wr4, wr2

WCMPGT WCMPGTUB wr0, wr4, wr2

WLDR WLDRB wr1, [r2, #0]

WMAC WMACU wr3, wr4, wr5

WMADD WMADDU wr3, wr4, wr5

WMAX, WMIN WMAXUB wr0, wr4, wr2WMINSB wr0, wr4, wr2

WMUL WMULUL wr4, wr2, wr3

WOR WOR wr3, wr1, wr4

WPACK WPACKHUS wr2, wr7, wr1

WROR WRORH wr3, wr1, wr4

WSAD WSADB wr3, wr5, wr8

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 5-6ID 0 8 1 7 1 1 Non-Confidential

Page 305: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ワイヤレス MMX テク ノロジの命令

関連項目

参照

• ワイヤレス MMX の疑似命令 (5-8 ページ)

• 『Wireless MMX Technology Developer Guide』

WSHUFH WSHUFH wr8, wr15, #17

WSLL, WSRL WSLLH wr3, wr1, wr4WSRLHG wr3, wr1, wcgr0

WSRA WSRAH wr3, wr1, wr4WSRAHG wr3, wr1, wcgr0

WSTR WSTRB wr1, [r2, #0]WSTRW wc1, [r2, #0]

WSUB WSUBBGE wr1, wr2, wr13

WUNPCKEH, WUNPCKEL WUNPCKEHUB wr0, wr4WUNPCKELSB wr0, wr4

WUNPCKIH, WUNPCKIL WUNPCKIHB wr0, wr4, wr2WUNPCKILH wr1, wr5, wr3

WXOR WXOR wr3, wr1, wr4

表 5-1 ワイヤレス MMX テク ノロジの命令 (続き)

ニーモニック 例

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 5-7ID 0 8 1 7 1 1 Non-Confidential

Page 306: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ワイヤレス MMX テク ノロジの命令

5.4 ワイヤレス MMX の疑似命令

表 5-2 では、 ワイヤレス MMX テク ノ ロジの疑似命令の概要を説明します。 各命令の

詳細については、 『ワイヤレス MMX テク ノ ロジデベロ ッパガイ ド』 を参照して下さ

い。

関連項目

参照

• 『ワイヤレス MMX テク ノ ロジデベロ ッパガイ ド』

• 第 3 章 ARM 命令と Thumb 命令 .

表 5-2 ワイヤレス MMX テク ノロジの疑似命令

ニーモニック

概要 例

TMCR ソースレジスタ Rn の内容を制御レジスタ wCn に移動します。 ARM MCR コプロセッサ命令にマップします ((3-135 ページ))。

TMCR wc1, r10

TMCRR 2 つのソースレジスタ RnLo および RnHi の内容をデスティネーシ ョ ン

レジスタ wRd に移動します。 RnLo または RnHi に R15 を使用しないで

下さい。 ARM MCRR コプロセッサ命令にマップします ((3-135 ペー

ジ))。

TMCRR wr4, r5, r6

TMRC 制御レジスタ wCn の内容をデスティネーシ ョ ンレジスタ Rd に移動し

ます。 Rd に R15 を使用しないで下さい。 ARM MRC コプロセッサ命令

にマップします ((3-136 ページ))。

TMRC r1, wc2

TMRRC ソースレジスタ wRn の内容を 2 つのデスティネーシ ョ ンレジスタ RdLo および RdHi に移動します。 デスティネーシ ョ ンレジスタに R15 を使用しないで下さい。 RdLo および RdHi は別のレジスタである必要

があ り ます。 それ以外の場合は結果が予測できないものになり ます。 ARM MRRC コプロセッサ命令にマップします ((3-136 ページ))。

TMRRC r1, r0, wr2

WMOV ソースレジスタ wRn の内容をデスティネーシ ョ ンレジスタ wRd に移

動します。 この命令は WOR の形式です (表 5-1 (5-6 ページ) を参

照)。

WMOV wr1, wr8

WZERO デスティネーシ ョ ンレジスタ wRd をゼロにします。この命令は WANDN の形式です (表 5-1 (5-6 ページ) を参照)。

WZERO wr1

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 5-8ID 0 8 1 7 1 1 Non-Confidential

Page 307: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

第 6 章 ディレクテ ィブリファレンス

以下の各ト ピッ クでは、 ARM アセンブラ armasm で使用できるディ レクティブについて

説明します。

• ディ レクティブの一覧 (アルファベッ ト順) (6-2 ページ)

• シンボル定義ディ レクティブ (6-4 ページ)

• データ定義ディ レクティブ (6-18 ページ)

• アセンブリ制御ディ レクティブ (6-34 ページ)

• Frame ディ レクティブ (6-43 ページ)

• 通知ディ レクティブ (6-58 ページ)

• 命令セッ ト と構文選択のディ レクティブ (6-64 ページ)

• その他のディ レクティブ (6-67 ページ) .

注 こ こで説明するディ レクティブは、 ARM C コンパイラおよび C++ コンパイラのインラ

インアセンブラでは使用できません。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 6-1ID 0 8 1 7 1 1 Non-Confidential

Page 308: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ディ レクテ ィブリファレンス

6.1 ディレクテ ィブの一覧 (アルファベッ ト順)

表 6-1 は、 ディ レクティブの一覧を示しています。 こ こから個々のディ レクティブの

説明を見つけて下さい。

表 6-1 各ディレクテ ィブの参照先

ディレクテ ィブ

を参照 ディレクテ ィブ を参照 ディレクテ ィブ を参照

ALIAS (6-68 ペー

ジ)

EQU (6-79 ページ) LTORG (6-19ページ)

ALIGN (6-69 ペー

ジ)

EXPORT、 GLOBAL (6-80 ページ) MACRO、 MEND (6-35ページ)

ARM、 CODE32 (6-65 ペー

ジ)

EXPORTAS (6-82 ページ) MAP (6-20ページ)

AREA (6-72 ペー

ジ)

EXTERN (6-84 ページ) MEND (「MACRO」 を参

照)

(6-35ページ)

ASSERT (6-58 ペー

ジ)

FIELD (6-21 ページ) MEXIT (6-38ページ)

ATTR (6-76 ペー

ジ)

FRAME ADDRESS (6-45 ページ) NOFP (6-88ページ)

CN (6-14 ペー

ジ)

FRAME POP (6-46 ページ) OPT (6-61ページ)

CODE16 (6-65 ペー

ジ)

FRAME PUSH (6-47 ページ) PRESERVE8 (「REQUIRE8」 を参照)

(6-89ページ)

COMMON (6-33 ペー

ジ)

FRAME REGISTER (6-49 ページ) PROC (「FUNCTION」 を

参照)

(6-55ページ)

CP (6-15 ペー

ジ)

FRAME RESTORE (6-50 ページ) QN (6-16ページ)

DATA (6-33 ペー

ジ)

FRAME SAVE (6-52 ページ) RELOC (6-10ページ)

DCB (6-24 ペー

ジ)

FRAME STATE REMEMBER (6-53 ページ) REQUIRE (6-88ページ)

DCD、 DCDU (6-25 ペー

ジ)

FRAME STATE RESTORE (6-54 ページ) REQUIRE8、 PRESERVE8 (6-89ページ)

DCDO (6-26 ペー

ジ)

FRAME UNWIND ON、FRAME UNWIND OFF

(6-55 ページ) RLIST (6-13ページ)

DCFD、 DCFDU (6-27 ペー

ジ)

FUNCTION、 PROC (6-55 ページ) RN (6-12ページ)

DCFS、 DCFSU (6-28 ペー

ジ)

GBLA、 GBLL、 GBLS (6-5 ページ) ROUT (6-90ページ)

DCI (6-29 ペー

ジ)

GET、 INCLUDE (6-83 ページ) SETA、 SETL、 SETS (6-9 ペ

ージ)

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 6-2ID 0 8 1 7 1 1 Non-Confidential

Page 309: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ディ レクテ ィブリファレンス

DCQ、 DCQU (6-31 ペー

ジ)

GLOBAL (「EXPORT」 を

参照)

(6-80 ページ) SN (6-16ページ)

DCW、 DCWU (6-32 ペー

ジ)

IF、 ELSE、 ENDIF、 ELIF (6-39 ページ) SPACE または FILL (6-23ページ)

DN (6-16 ペー

ジ)

IMPORT (6-84 ページ) SUBT (6-63ページ)

ELIF、 ELSE (「IF」 を参照)

(6-39 ペー

ジ)

INCBIN (6-86 ページ) THUMB (6-65ページ)

END (6-78 ペー

ジ)

INCLUDE (「GET」 を参

照)

(6-83 ページ) THUMBX (6-65ページ)

ENDFUNC、 ENDP (6-57 ペー

ジ)

INFO (6-59 ページ) TTL (6-63ページ)

ENDIF (「IF」

を参照)

(6-39 ペー

ジ)

KEEP (6-87 ページ) WHILE、 WEND (6-42ページ)

ENTRY (6-78 ペー

ジ)

LCLA、 LCLL、 LCLS (6-8 ページ)

表 6-1 各ディレクテ ィブの参照先 (続き)

ディ レクテ ィブ

を参照 ディレクテ ィブ を参照 ディレクテ ィブ を参照

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 6-3ID 0 8 1 7 1 1 Non-Confidential

Page 310: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ディ レクテ ィブリファレンス

6.2 シンボル定義ディレクテ ィブ

このセクシ ョ ンでは、 以下のディ レクティブについて説明します。

• GBLA、 GBLL、 GBLS (6-5 ページ)

グローバル算術変数、 論理変数、 または文字列変数を宣言します。

• LCLA、 LCLL、 LCLS (6-8 ページ)

ローカル算術変数、 論理変数、 または文字列変数を宣言します。

• SETA、 SETL、 SETS (6-9 ページ)

算術変数、 論理変数、 または文字列変数の値を設定します。

• RELOC (6-10 ページ)

オブジェク ト ファ イルで ELF の再配置をエンコード します。

• RN (6-12 ページ)

指定されたレジスタの名前を定義します。

• RLIST (6-13 ページ)

汎用レジスタセッ トの名前を定義します。

• CN (6-14 ページ)

コプロセッサレジスタ名を定義します。

• CP (6-15 ページ)

コプロセッサ名を定義します。

• QN、 DN、 SN (6-16 ページ)

倍精度または単精度の VFP レジスタ名を定義します。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 6-4ID 0 8 1 7 1 1 Non-Confidential

Page 311: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ディ レクテ ィブリファレンス

6.2.1 GBLA、 GBLL、 GBLS

GBLA ディ レクティブは、 グローバル算術変数を宣言し、 その値をゼロに初期化しま

す。

GBLL ディ レクティブは、 グローバル論理変数を宣言し、 その値を {FALSE} に初期化し

ます。

GBLS ディ レクティブは、 グローバル文字列変数を宣言し、 その値を NULL 文字列 "" に初期化します。

構文

<gblx> variable

各パラ メータには以下の意味があ り ます。

<gblx> GBLA、 GBLL、 または GBLS のいずれかを指定します。

variable 変数の名前を指定します。 variable は、 ソースファ イル内のシンボルの

中で一意である必要があ り ます。

使用法

定義済みの変数に対して上記のディ レクティブのいずれかを使用する と、 その変数は上記と同じ値に再初期化されます。

変数の有効範囲は、 その変数を含むソースファ イル内に制限されています。

変数の値は、 SETA、 SETL、 または SETS のいずれかのディ レクティブを使用して設定し

ます。

グローバル変数は、 --predefine アセンブラコマンド ラ インオプシ ョ ンを使用して設定

するこ と もできます。

例 6-1 では、 変数 objectsize が宣言され、 objectsize の値が 0xFF に設定されます。 そ

の後、 その値が SPACE ディ レクティブで使用されます。

例 6-1

GBLA objectsize ; 変数名を宣言する

objectsize SETA 0xFF ; 変数の値を設定する . . ; 他の コ ード . SPACE objectsize ; 変数は引用符で囲む

例 6-2 (6-6 ページ) は、 armasm を呼び出す場合の変数の宣言方法と設定方法を示して

います。 アセンブリ時に変数の値を設定する場合は、 この方法を使用して下さい。--pd は、 --predefine と同じ意味です。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 6-5ID 0 8 1 7 1 1 Non-Confidential

Page 312: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ディ レクテ ィブリファレンス

例 6-2

armasm --predefine "objectsize SETA 0xFF" sourcefile -o objectfile

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 6-6ID 0 8 1 7 1 1 Non-Confidential

Page 313: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ディ レクテ ィブリファレンス

関連項目

参照 : • SETA、 SETL、 SETS (6-9 ページ)

• LCLA、 LCLL、 LCLS (6-8 ページ)

• アセンブラコマンド ラ インオプシ ョ ン (2-3 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 6-7ID 0 8 1 7 1 1 Non-Confidential

Page 314: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ディ レクテ ィブリファレンス

6.2.2 LCLA、 LCLL、 LCLS

LCLA ディ レクティブは、 ローカル算術変数を宣言し、 その値をゼロに初期化します。

LCLL ディ レクティブは、 ローカル論理変数を宣言し、 その値を {FALSE} に初期化しま

す。

LCLS ディ レクティブは、 ローカル文字列変数を宣言し、 その値を NULL 文字列 "" に初期化します。

構文

<lclx> variable

各パラ メータには以下の意味があ り ます。

<lclx> LCLA、 LCLL、 または LCLS のいずれかを指定します。

variable 変数の名前を指定します。 variable は、 マクロ内で一意である必要があ

り ます。

使用法

定義済みの変数に対して上記のディ レクティブのいずれかを使用する と、 その変数は上記と同じ値に再初期化されます。

変数の有効範囲は、 その変数を含むマクロの特定のインスタンスに制限されています。

変数の値は、 SETA、 SETL、 または SETS のいずれかのディ レクティブを使用して設定し

ます。

MACRO ; マ ク ロ を宣言する

$label message $a ; マ ク ロ プ ロ ト タ イ プ行

LCLS err ; ロ ー カ ル文字列

; 変数のエ ラ ーを宣言する

err SETS "error no:" ; エ ラ ーの値を設定する

$label ; コ ー ド

INFO 0, "err":CC::STR:$a ; 文字列を使用する MEND

関連項目

参照 : • SETA、 SETL、 SETS (6-9 ページ)

• MACRO、 MEND (6-35 ページ)

• GBLA、 GBLL、 GBLS (6-5 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 6-8ID 0 8 1 7 1 1 Non-Confidential

Page 315: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ディ レクテ ィブリファレンス

6.2.3 SETA、 SETL、 SETS

SETA ディ レクティブは、 ローカル算術変数またはグローバル算術変数の値を設定し

ます。

SETL ディ レクティブは、 ローカル論理変数またはグローバル論理変数の値を設定し

ます。

SETS ディ レクティブは、 ローカル文字列変数またはグローバル文字列変数の値を設

定します。

構文

variable <setx> expr

各パラ メータには以下の意味があ り ます。

<setx> SETA、 SETL、 または SETS のいずれかを指定します。

variable GBLA、 GBLL、 GBLS、 LCLA、 LCLL、 または LCLS のいずれかのディ レクティブで

宣言される変数の名前を指定します。

expr 以下の式を指定します。

• SETA の場合は数値式

• SETL の場合は論理式

• SETS の場合は文字列式

使用法

いずれかのディ レクティブを使用する前に、 グローバル宣言ディ レクティブまたはローカル宣言ディ レクティブを使用して variable を宣言する必要があ り ます。

また、 変数名はコマンド ラ インで事前に定義するこ と もできます。

GBLA VersionNumberVersionNumber SETA 21 GBLL DebugDebug SETL {TRUE} GBLS VersionStringVersionString SETS "Version 1.0"

関連項目

概念 :

『アセンブラの使用』 :

• 数値式 (8-16 ページ)

• 論理式 (8-19 ページ)

• 文字列式 (8-14 ページ) .

参照 : • アセンブラコマンド ラ インオプシ ョ ン (2-3 ページ)

• LCLA、 LCLL、 LCLS (6-8 ページ)

• GBLA、 GBLL、 GBLS (6-5 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 6-9ID 0 8 1 7 1 1 Non-Confidential

Page 316: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ディ レクテ ィブリファレンス

6.2.4 RELOC

RELOC ディ レクティブは、 オブジェク ト ファ イルで ELF の再配置を明示的にエンコー

ド します。

構文

RELOC n, symbol

RELOC n

以下の意味があ り ます。

n 0 ~ 255 の範囲内の整数であるか、 ARM アーキテクチャのアプ リ ケー

シ ョ ンバイナリ インタフェースで定義されている再配置名の 1 つである

必要があ り ます。

symbol 任意の PC 相対ラベルを指定できます。

使用法

RELOC n, symbol を使用し、 symbol とい う ラベルの付いたアドレスを基準にして再配置を

行います。

RELOC ディ レクティブを ARM 命令または Thumb 命令の直後に使用する と、 その命令

で再配置が行われます。 RELOC ディ レクティブを DCB、 DCW、 DCD、 またはその他のデー

タ生成ディ レクティブの直後に使用する と、 データの開始位置で再配置が行われます。 適用される加数は、 命令またはデーでエンコードする必要があ り ます。

アセンブラによって同じ場所で既に再配置が行われている場合、 RELOC ディ レクティ

ブの設定内容で再配置が更新されます。 以下に例を示します。

DCD sym2 ; sym32 への R_ARM_ABS32RELOC 55 ; それを R_ARM_ABS32_NOI に変更する

RELOC は、 データ生成ディ レクティブ以外のディ レクティブ、 LTORG、 ALIGN の後に使用

した り、 AREA の 初の項目と して使用した り した場合など、 その他すべての場合に失

敗します。

RELOC n を使用し、 匿名のシンボル (シンボルテーブルのシンボル 0) を基準に再配置

を行います。 以前にアセンブラによって再配置が行われていない場合に RELOC n を使

用する と、 匿名のシンボルを基準に再配置が行われます。

IMPORT impsymLDR r0,[pc,#-8]RELOC 4, impsymDCD 0RELOC 2, symDCD 0,1,2,3,4 ; 後のワー ドが再配置されるRELOC 38,sym2 ; R_ARM_TARGET1DCD impsymRELOC R_ARM_TARGET1 ; 再配置コー ド 38

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 6-10ID 0 8 1 7 1 1 Non-Confidential

Page 317: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ディ レクテ ィブリファレンス

関連項目

参照

• Application Binary Interface for the ARM Architecture、http://infocenter.arm.com/help/topic/com.arm.doc.subset.swdev.abi/index.html

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 6-11ID 0 8 1 7 1 1 Non-Confidential

Page 318: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ディ レクテ ィブリファレンス

6.2.5 RN

RN ディ レクティブは、 指定されたレジスタのレジスタ名を定義します。

構文

name RN expr

各パラ メータには以下の意味があ り ます。

name レジスタに割り当てる名前を指定します。 name には、 定義済みの名前と

同じ名前を指定できません。

expr 0 ~ 15 のレジスタ番号を求める式を指定します。

使用法

RN を使用して適切な名前をレジスタに割り当てるこ とによ り、 各レジスタの使用目

的を明確にするこ とができます。 同一レジスタに複数の名前を付けて矛盾を生じさせるよ う な使用方法は避けて下さい。

regname RN 11 ; レジス タ 11 のレジス タ名を定義する

sqr4 RN r6 ; レジス タ 6 の sqr4 を定義する

関連項目

参照 :

『アセンブラの使用』 :

• 事前宣言されている主要なレジスタ名 (3-15 ページ)

• 事前宣言されている拡張レジスタ名 (3-16 ページ)

• 事前宣言されている XScale レジスタ名 (3-17 ページ)

• 事前宣言されているコプロセッサ名 (3-19 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 6-12ID 0 8 1 7 1 1 Non-Confidential

Page 319: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ディ レクテ ィブリファレンス

6.2.6 RLIST

RLIST (レジスタ リ ス ト ) ディ レクティブは、 汎用レジスタセッ トの名前を指定しま

す。

構文

name RLIST {list-of-registers}

以下の意味があ り ます。

name レジスタセッ トに割り当てる名前を指定します。 name には、 定義済みの

名前と同じ名前を指定できません。

list-of-registers

レジスタ名とレジスタ範囲をコンマで区切って並べた リ ス ト を指定します。 レジスタ リ ス トは括弧で囲む必要があ り ます。

使用法

RLIST を使用して、 LDM 命令または STM 命令によって転送されるレジスタセッ トに名前

を付けます。

LDM および STM は、 LDM 命令または STM 命令に指定された順序に関係なく、 も小さい

物理レジスタ番号の内容を、 メモ リ内の 下位アドレスに格納します。 シンボルレジスタ名を既に定義している場合は、 レジスタ リ ス トが昇順で指定されているかどうかが分かりにくいこ とがあ り ます。

アセンブラオプシ ョ ン --diag_warning 1206 を使用して、 レジスタ リ ス ト内のレジスタ

が昇順で指定されているこ とを確認して下さい。 レジスタが昇順で指定されていない場合には、 警告が生成されます。

Context RLIST {r0-r6,r8,r10-r12,pc}

関連項目

参照 :

『アセンブラの使用』 :

• 事前宣言されている主要なレジスタ名 (3-15 ページ)

• 事前宣言されている拡張レジスタ名 (3-16 ページ)

• 事前宣言されている XScale レジスタ名 (3-17 ページ)

• 事前宣言されているコプロセッサ名 (3-19 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 6-13ID 0 8 1 7 1 1 Non-Confidential

Page 320: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ディ レクテ ィブリファレンス

6.2.7 CN

CN ディ レクティブは、 コプロセッサレジスタの名前を定義します。

構文

name CN expr

各パラ メータには以下の意味があ り ます。

name コプロセッサレジスタに定義する名前を指定します。 name には、 定義済

みの名前と同じ名前を指定できません。

expr 0 ~ 15 のコプロセッサレジスタ番号を求める式を指定します。

使用法

CN を使用して適切な名前をレジスタに割り当てるこ とによ り、 各レジスタの使用目

的を明確にするこ とができます。

注 同一レジスタに複数の名前を付けて矛盾を生じさせるよ う な使用方法は避けて下さ

い。

c0 ~ c15 の名前が事前に定義されています。

power CN 6 ; コ プ ロセ ッ サレジス タ 6 のシンボル と し て "power" を ; 定義する

関連項目

参照 :

『アセンブラの使用』 :

• 事前宣言されている主要なレジスタ名 (3-15 ページ)

• 事前宣言されている拡張レジスタ名 (3-16 ページ)

• 事前宣言されている XScale レジスタ名 (3-17 ページ)

• 事前宣言されているコプロセッサ名 (3-19 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 6-14ID 0 8 1 7 1 1 Non-Confidential

Page 321: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ディ レクテ ィブリファレンス

6.2.8 CP

CP ディ レクティブは、 指定されたコプロセッサの名前を定義します。 コプロセッサ

番号は、 0 ~ 15 の範囲で指定する必要があ り ます。

構文

name CP expr

各パラ メータには以下の意味があ り ます。

name コプロセッサに割り当てる名前を指定します。 name には、 定義済みの名

前と同じ名前を指定できません。

expr 0 ~ 15 のコプロセッサ番号を求める式を指定します。

使用法

CP を使用して適切な名前をコプロセッサに割り当てるこ とによ り、 各コプロセッサ

の使用目的を明確にするこ とができます。

注 同一コプロセッサに複数の名前を付けて矛盾を生じさせるよ う な使用方法は避けて

下さい。

コプロセッサ 0 ~ 15 には、 p0 ~ p15 の名前が事前に定義されています。

dmu CP 6 ; コ プ ロセ ッ サ 6 のシンボル と し て "dmu" を ; 定義する

関連項目

参照 :

『アセンブラの使用』 :

• 事前宣言されている主要なレジスタ名 (3-15 ページ)

• 事前宣言されている拡張レジスタ名 (3-16 ページ)

• 事前宣言されている XScale レジスタ名 (3-17 ページ)

• 事前宣言されているコプロセッサ名 (3-19 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 6-15ID 0 8 1 7 1 1 Non-Confidential

Page 322: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ディ レクテ ィブリファレンス

6.2.9 QN、 DN、 SN

QN ディ レクティブは、 指定された 128 ビッ ト拡張レジスタの名前を定義します。

DN ディ レクティブは、 指定された 64 ビッ ト拡張レジスタの名前を定義します。

SN ディ レクティブは、 指定された単精度 VFP レジスタの名前を定義します。

構文

name directive expr{.type}{[x]}

各パラ メータには以下の意味があ り ます。

directive QN、 DN、 または SN を指定します。

name 拡張レジスタに割り当てる名前を指定します。 name には、 定義済みの名

前と同じ名前を指定できません。

expr 以下を指定します。

• 以下の範囲の数値を求める式

— VFPv2 で DN を使用している場合、 または NEON で QN を使

用している場合は 0 ~ 15— それ以外の場合は 0 ~ 31

• 定義済みレジスタ名、 または以前のディ レクティブで定義済みのレジスタ名

type NEON または VFP データ型を指定します。

[x] NEON コードでのみ使用されます。 [x] は、 レジスタへのスカラインデ

クスを指定します。

type および [x] は拡張表記です。

使用法

QN、 DN、 または SN を使用して適切な名前を拡張レジスタに割り当てるこ とによ り、 各

レジスタの使用目的を明確にするこ とができます。

注 同一レジスタに複数の名前を付けて矛盾を生じさせるよ う な使用方法は避けて下さ

い。

DN ディ レクティブまたは SN ディ レクティブではベクタ長を指定できません。

energy DN 6 ; VFP 倍精度レジス タ 6 のシンボル と し て "energy" を ; 定義する

mass SN 16 ; VFP 単精度レジス タ 16 のシンボル と し て "mass" を ; 定義する

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 6-16ID 0 8 1 7 1 1 Non-Confidential

Page 323: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ディ レクテ ィブリファレンス

拡張表記の例

varA DN d1.U16varB DN d2.U16varC DN d3.U16

VADD varA,varB,varC ; VADD.U16 d1,d2,d3index DN d4.U16[0]result QN q5.I32

VMULL result,varA,index ; VMULL.U16 q5,d1,d3[2]

関連項目

参照 :

『アセンブラの使用』 :

• 事前宣言されている主要なレジスタ名 (3-15 ページ)

• 事前宣言されている拡張レジスタ名 (3-16 ページ)

• 事前宣言されている XScale レジスタ名 (3-17 ページ)

• 事前宣言されているコプロセッサ名 (3-19 ページ)

• 拡張表記 (9-21 ページ)

• 拡張表記の例

• NEON データ型および VFP データ型 (9-13 ページ)

• VFP ディ レクティブとベクタ表記 (9-41 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 6-17ID 0 8 1 7 1 1 Non-Confidential

Page 324: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ディ レクテ ィブリファレンス

6.3 データ定義ディレクテ ィブ

このセクシ ョ ンでは、 メモ リの割り当て、 データ構造の定義、 およびメモ リの初期内容の設定を行う以下のディ レクティブについて説明します。

• LTORG (6-19 ページ)

リ テラルプールの起点を設定します。

• MAP (6-20 ページ)

記憶域マップの起点を設定します。

• FIELD (6-21 ページ)

記憶域マップ内のフ ィールドを定義します。

• SPACE または FILL (6-23 ページ)

ゼロ初期化される メモ リブロ ッ クを割り当てます。

• DCB (6-24 ページ)

バイ ト単位でメモ リ を割り当てて、 初期内容を指定します。

• DCD、 DCDU (6-25 ページ)

ワード単位でメモ リ を割り当てて、 初期内容を指定します。

• DCDO (6-26 ページ)

ワード単位でメモ リ を割り当てて、 スタティ ッ クベースレジスタからのオフセッ ト と して初期内容を指定します。

• DCFD、 DCFDU (6-27 ページ)

ダブルワード単位でメモ リ を割り当てて、 倍精度浮動小数点数と して初期内容を指定します。

• DCFS、 DCFSU (6-28 ページ)

ワード単位でメモ リ を割り当てて、 単精度浮動小数点数と して初期内容を指定します。

• DCI (6-29 ページ)

ワード単位でメモ リ を割り当てて、 初期内容を指定します。 メモ リ位置をデータではなく コード と してマーク します。

• DCQ、 DCQU (6-31 ページ)

ダブルワード単位でメモ リ を割り当てて、 64 ビッ ト整数と して初期内容を指定

します。

• DCW、 DCWU (6-32 ページ)

ハーフワード単位でメモ リ を割り当てて、 初期内容を指定します。

• COMMON (6-33 ページ)

ブロ ッ ク単位でメモ リ をシンボルに割り当てて、 アライン メン ト を指定します。

• DATA (6-33 ページ)

コードセクシ ョ ン内のデータをマーク します。 このディ レクティブは、 下位互換性を維持する目的だけでサポート されています。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 6-18ID 0 8 1 7 1 1 Non-Confidential

Page 325: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ディ レクテ ィブリファレンス

6.3.1 LTORG

LTORG ディ レクティブは、 現在のリテラルプールをすぐにアセンブルするよ う アセン

ブラに指示します。

構文

LTORG

使用法

アセンブラは、 各コードセクシ ョ ンの終了位置で現在のリテラルプールをアセンブルします。 コードセクシ ョ ンの終了位置は、 次のセクシ ョ ンの頭にある AREA ディ レ

クティブによって決まるか、 またはアセンブ リの終了位置とな り ます。

このよ う なデフォルトの リ テラルプールは、 LDR、 VLDR、 および WLDR 疑似命令の範囲外

になる場合があ り ます。 リ テラルプールが範囲内でアセンブルされているこ とを確認するには、 LTORG を使用します。

大きなプログラムでは、 複数のリテラルプールが必要になる場合があ り ます。 定数がプロセッサによって命令と して実行されないよ うに、 LTORG ディ レクティブは、 無

条件分岐またはサブルーチン復帰命令の後に配置して下さい。

リ テラルプール内のデータは、 アセンブラによってワード境界で整列されます。

AREA Example, CODE, READONLYstart BL func1func1 ; 関数本体

; コ ー ド LDR r1,=0x55555555 ; => LDR R1, [pc, #offset to Literal Pool 1] ; コ ー ド

MOV pc,lr ; 関数終了

LTORG ; Literal Pool 1 には リ テ ラ ル &55555555 が含まれる

data SPACE 4200 ; メ モ リ の現在の位置か ら 4200 バイ ト を

; ク リ アする

END ; デ フ ォ ル ト の リ テ ラ ルプールが空になる

関連項目

参照 : • LDR 疑似命令 (3-171 ページ)

• VLDR 疑似命令 (4-73 ページ)

• ワイヤレス MMX ロード / ス ト ア命令 (5-4 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 6-19ID 0 8 1 7 1 1 Non-Confidential

Page 326: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ディ レクテ ィブリファレンス

6.3.2 MAP

MAP ディ レクティブは、 指定されたアドレスを記憶域マップの起点と して設定しま

す。 記憶域マップの位置カウンタ {VAR} には、 同じアドレスが設定されます。 ^ は MAP と同じ意味です。

構文

MAP expr{,base-register}

以下の意味があ り ます。

expr 数値式または PC 相対式を指定します。

• base-register が指定されていない場合は、 expr によって記憶域マッ

プの開始アドレスが求められます。 記憶域マップの位置カウンタには、 同じアドレスが設定されます。

• expr に PC 相対式が指定されている場合、 マップ内でラベルを使用

するには、 ラベルを事前に定義しておく必要があ り ます。 マップでは、 アセンブラ 初のパスでラベルを定義する必要があ り ます。

base-register

レジスタを指定します。 base-register が指定されている場合、 記憶域

マップの開始アドレスは、 expr と、 ランタイムの base-register の値の合

計になり ます。

使用法

記憶域マップを記述するには、 MAP ディ レクティブを FIELD ディ レクティブと組み合

わせて使用します。

base-register を指定してレジスタ相対ラベルを定義します。 次の MAP ディ レクティブ

が出現するまで、 このベースレジスタが、 後続の FIELD ディ レクティブで定義される

すべてのラベル内で暗黙的に使用されます。 レジスタ相対ラベルは、 ロード命令とス ト ア命令で使用できます。

MAP ディ レクティブを複数回使用するこ とによ り、 複数の記憶域マップを定義できま

す。

初の MAP ディ レクティブが使用されるまで、 {VAR} カウンタにはゼロが設定されま

す。

MAP 0,r9 MAP 0xff,r9

関連項目

概念 : • 『アセンブラの使用』 のアセンブラの操作方法 (2-4 ページ)

• 『アセンブラの使用』 のアセンブラのパス 2 で省略できるディ レクティブ

(2-6 ページ)

参照 : • FIELD (6-21 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 6-20ID 0 8 1 7 1 1 Non-Confidential

Page 327: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ディ レクテ ィブリファレンス

6.3.3 FIELD

FIELD ディ レクティブは、 MAP ディ レクティブを使用して定義された記憶域マップ内の

空間を定義します。 # は FIELD と同じ意味です。

構文

{label} FIELD expr

各パラ メータには以下の意味があ り ます。

label ラベルを指定します (省略可)。 指定されている場合は、 label に記憶域

マップの位置カウンタ {VAR} の値が割り当てられます。 その後、 記憶域

マップの位置カウンタは、 expr の値でインク リ メ ン ト されます。

expr 記憶域マップの位置カウンタをインク リ メ ン トするバイ ト数を求める式

を指定します。

使用法

記憶域マップが base-register を指定する MAP ディ レクティブによって設定されている

場合は、 次の MAP ディ レクティブが出現するまで、 このベースレジスタが、 後続の FIELD ディ レクティブで定義されるすべてのラベル内で暗黙的に使用されます。 これ

らのレジスタ相対ラベルは、 ロード命令とス ト ア命令で使用できます。

以下の例は、 MAP ディ レクティブと FIELD ディ レクティブを使用してレジスタ相対ラ

ベルを定義する方法を示しています。

MAP 0,r9 ; R9 にス ト ア される ア ド レ ス を {VAR} に設定する

FIELD 4 ; {VAR} を 4 バイ ト イ ン ク リ メ ン トする

Lab FIELD 4 ; Lab に ア ド レ ス [R9 + 4] を設定する

; {VAR} を 4 バイ ト イ ン ク リ メ ン トする

LDR r0,Lab ; LDR r0,[r9,#4] と等価

MAP ディ レクティブおよび FIELD ディ レクティブを使用する場合は、 両方のパスで値

が一致しているこ とを確認する必要があ り ます。 次の例は、 MAP と FIELD 使用によっ

て、 異なるシンボル x の値が発生する例を示します。 初のパスでは、 sym が定義さ

れていないので、 x は 0x04+R9 にあ り ます。 2 番目のパスでは、 sym が定義されている

ので、 x は 0x00+R0 にあ り ます。 この例では、 アセンブ リエラーが発生します。

MAP 0, r0if :LNOT::DEF:symMAP 0, r9FIELD 4 ; 初のパスでは、 x が 0x04+R9 にある

ENDIFx FIELD 4 ; 2 番目のパスでは、x が 0x00+R0 にある

sym LDR r0, x ; x の値が一致しないので、 アセン ブ リ エ ラ ーが発生する

関連項目

概念 : • 『アセンブラの使用』 のアセンブラの操作方法 (2-4 ページ)

• 『アセンブラの使用』 のアセンブラのパス 2 で省略できるディ レクティブ

(2-6 ページ)

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 6-21ID 0 8 1 7 1 1 Non-Confidential

Page 328: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ディ レクテ ィブリファレンス

参照 : • MAP (6-20 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 6-22ID 0 8 1 7 1 1 Non-Confidential

Page 329: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ディ レクテ ィブリファレンス

6.3.4 SPACE または FILL

SPACE ディ レクティブは、 ゼロ初期化される メモ リブロ ッ クを予約します。 % は SPACE と同じ意味です。

FILL ディ レクティブは、 所定の値で埋める メモ リブロ ッ クを予約します。

構文

{label} SPACE expr

{label} FILL expr{,value{,valuesize}}

各パラ メータには以下の意味があ り ます。

label ラベルを指定します (省略可)。

expr 埋めるかゼロ初期化するバイ トの数を求める式を指定します。

value 予約したバイ ト を埋める値に評価されます。 value はオプシ ョ ンであ り、

省略した場合には 0 にな り ます。NOINIT 領域では value は 0 である必要

があ り ます。

valuesize value のサイズ (バイ ト数単位)。 1、 2、 および 4 のいずれかの値を取り

ます。 valuesize はオプシ ョ ンであ り、 省略された場合には、 1 になり ま

す。

使用法

SPACE または FILL ディ レクティブの後のコードの境界を整列するには、 ALIGN ディ レク

ティブを使用します。

AREA MyData, DATA, READWRITEdata1 SPACE 255 ; ゼロ初期化されるス ト アの 255 バイ ト を定義する

data2 FILL 50,0xAB,1 ; 0xAB を含む 50 バイ ト を定義する

関連項目

概念 :

『アセンブラの使用』 :

• 数値式 (8-16 ページ) .

参照 : • DCB (6-24 ページ)

• DCD、 DCDU (6-25 ページ)

• DCDO (6-26 ページ)

• DCW、 DCWU (6-32 ページ)

• ALIGN (6-69 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 6-23ID 0 8 1 7 1 1 Non-Confidential

Page 330: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ディ レクテ ィブリファレンス

6.3.5 DCB

DCB ディ レクティブは、 バイ ト単位でメモ リ を割り当てて、 実行時のメモ リの初期内

容を定義します。 = は DCB と同じ意味です。

構文

{label} DCB expr{,expr}...

各パラ メータには以下の意味があ り ます。

expr 以下のいずれかを指定します。

• -128 ~ 255 の範囲の整数を求める数値式。

• 引用符で囲まれた文字列。 文字列中の文字はス ト アの連続したバイ トにロード されます。

使用法

DCB の後に命令が続く場合、 ALIGN ディ レクティブを使用して命令を整列させて下さ

い。

C 言語の文字列とは異なり、 ARM アセンブラの文字列の終端は NULL ではあ り ませ

ん。 終端が NULL の C 言語の文字列は、 DCB を以下のよ うに使用して作成できます。

C_string DCB "C_string",0

関連項目

概念 :

『アセンブラの使用』 :

• 数値式 (8-16 ページ) .

参照 : • DCD、 DCDU (6-25 ページ)

• DCQ、 DCQU (6-31 ページ)

• DCW、 DCWU (6-32 ページ)

• SPACE または FILL (6-23 ページ)

• ALIGN (6-69 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 6-24ID 0 8 1 7 1 1 Non-Confidential

Page 331: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ディ レクテ ィブリファレンス

6.3.6 DCD、 DCDU

DCD ディ レクティブは、 ワード単位でメモ リ を割り当てて 4 バイ ト境界で整列させ、

実行時のメモ リの初期内容を定義します。

& は DCD と同じ意味です。

メモ リのアライン メン トが任意である点を除き、 DCDU も同じです。

構文

{label} DCD{U} expr{,expr}

各パラ メータには以下の意味があ り ます。

expr 以下のいずれかを指定します。

• 数値式

• PC 相対式

使用法

DCD は、 必要に応じて、 初に定義されたワードの前に 大 3 バイ トのパディングを

挿入して、 アライン メン ト を 4 バイ トにします。

アライン メン トが不要な場合は、 DCDU を使用して下さい。

data1 DCD 1,5,20 ; 10 進数値の 1、 5、 および 20 を ; 保持する 3 ワー ド を定義する

data2 DCD mem06 + 4 ; ラ ベル mem06 のア ド レ ス + 4 を ; 保持する 1 ワー ド を定義する AREA MyData, DATA, READWRITE DCB 255 ; ア ラ イ ン メ ン トが不適切

data3 DCDU 1,5,20 ; 1、 5、 および 20 を保持する 3 ワー ド を定義する

; ただ し、 ワー ド境界で整列されない

関連項目

概念 :

『アセンブラの使用』 :

• 数値式 (8-16 ページ) .

参照 : • DCB (6-24 ページ)

• DCI (6-29 ページ)

• DCW、 DCWU (6-32 ページ)

• DCQ、 DCQU (6-31 ページ)

• SPACE または FILL (6-23 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 6-25ID 0 8 1 7 1 1 Non-Confidential

Page 332: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ディ レクテ ィブリファレンス

6.3.7 DCDO

DCDO ディ レクティブは、 ワード単位でメモ リ を割り当てて、 4 バイ ト境界で整列さ

せ、 実行時のメモ リの初期内容をスタティ ッ クベースレジスタ sb (R9) からのオフ

セッ ト と して定義します。

構文

{label} DCDO expr{,expr}...

各パラ メータには以下の意味があ り ます。

expr レジスタ相対式またはラベルを指定します。 ベースレジスタには sb を指定する必要があ り ます。

使用法

DCDO を使用して、 スタティ ッ クベースレジスタ と相対的な再配置可能アドレスのた

めにメモ リ内の空間を割り当てます。

IMPORT externsym DCDO externsym ; SB セ ク シ ョ ンのベースか ら の externsym の ; オ フ セ ッ ト で 32 ビ ッ ト ワー ドの再配置を行う

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 6-26ID 0 8 1 7 1 1 Non-Confidential

Page 333: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ディ レクテ ィブリファレンス

6.3.8 DCFD、 DCFDU

DCFD ディ レクティブは、 ワード境界で整列された倍精度浮動小数点数にメモ リ を割

り当て、 実行時のメモ リの初期内容を定義します。 倍精度浮動小数点数には 2 ワー

ドが使用されます。 この 2 ワードを算術演算で使用するには、 ワード境界で整列さ

せる必要があ り ます。

メモ リのアライン メン トが任意である点を除き、 DCFDU も同じです。

構文

{label} DCFD{U} fpliteral{,fpliteral}...

各パラ メータには以下の意味があ り ます。

fpliteral 倍精度浮動小数点リ テラルを指定します。

使用法

アセンブラは、 必要に応じて、 初に定義された数値の前に 大 3 バイ トのパディ

ングを挿入して、 アライン メン ト を 4 バイ トにします。

アライン メン トが不要な場合は、 DCFDU を使用して下さい。

fpliteral を内部形式に変換する場合に使用されるワードの順序は、 選択された浮動

小数点アーキテクチャによって制御されます。 --fpu none オプシ ョ ンを選択する と、

DCFD または DCFDU は使用できません。

倍精度数の範囲は以下のとおりです。

• 大 : 1.79769313486231571e+308• 小 : 2.22507385850720138e–308

DCFD 1E308,-4E-100 DCFDU 10000,-.1,3.1E26

関連項目

概念 :

『アセンブラの使用』 :

• 浮動小数点リ テラル (8-18 ページ) .

参照 : • DCFS、 DCFSU (6-28 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 6-27ID 0 8 1 7 1 1 Non-Confidential

Page 334: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ディ レクテ ィブリファレンス

6.3.9 DCFS、 DCFSU

DCFS ディ レクティブは、 ワード境界で整列された単精度浮動小数点数にメモ リ を割

り当て、 実行時のメモ リの初期内容を定義します。 単精度浮動小数点数には 1 ワー

ドが使用されます。 この 1 ワードを算術演算で使用するには、 ワード境界でアライ

ンさせる必要があ り ます。

メモ リのアライン メン トが任意である点を除き、 DCFSU も同じです。

構文

{label} DCFS{U} fpliteral{,fpliteral}...

各パラ メータには以下の意味があ り ます。

fpliteral 単精度浮動小数点リ テラルを指定します。

使用法

DCFS は、 必要に応じて、 初に定義された数値の前に 大 3 バイ トのパディングを挿

入して、 アライン メン ト を 4 バイ トにします。

アライン メン トが不要な場合は、 DCFSU を使用して下さい。

単精度数値の範囲は以下のとおりです。

• 大 : 3.40282347e+38• 小 : 1.17549435e–38

DCFS 1E3,-4E-9 DCFSU 1.0,-.1,3.1E6

関連項目

概念 :

『アセンブラの使用』 :

• 浮動小数点リ テラル (8-18 ページ) .

参照 : • DCFD、 DCFDU (6-27 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 6-28ID 0 8 1 7 1 1 Non-Confidential

Page 335: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ディ レクテ ィブリファレンス

6.3.10 DCI

ARM コードでは、 DCI ディ レクティブは、 ワード単位でメモ リ を割り当てて、 4 バイ

ト境界でアラインさせ、 実行時のメモ リの初期内容を定義します。

Thumb コードでは、 DCI ディ レクティブは、 ハーフワード単位でメモ リ を割り当て

て、 2 バイ ト境界でアラインさせ、 実行時のメモ リの初期内容を定義します。

構文

{label} DCI{.W} expr{,expr}

各パラ メータには以下の意味があ り ます。

expr 数値式を指定します。

.W 指定されている場合は、 Thumb コードに 4 バイ ト を挿入する必要がある

こ とを示します。

使用法

DCI ディ レクティブは、 DCD ディ レクティブや DCW ディ レクティブと よ く似ています

が、 メモ リ位置はデータではな く コード と してマーク されます。 使用しているアセンブラのバージ ョ ンでサポート されていない新しい命令のマクロを記述する場合は、DCI を使用して下さい。

ARM コードでは、 DCI は、 必要に応じて、 初に定義されたワードの前に 大 3 バイ

トのパディングを挿入して、 アライン メン ト を 4 バイ トにします。 Thumb コードで

は、 DCI は、 必要に応じて、 先頭バイ トのパディングを挿入して、 アライン メン ト を 2 バイ トにします。

DCI を使用して、 ビッ トパターンを命令ス ト リームに挿入できます。 例えば、 以下を

使用します。

DCI 0x46c0

Thumb 演算 MOV r8,r8 が挿入されます。

MACRO ; こ のマ ク ロは新しい命令 Rd,Rm を ; 適切なマシン コ ー ド に変換する newinst $Rd,$Rm DCI 0xe16f0f10 :OR:($Rd:SHL:12) :OR:$Rm MEND

Thumb-2 の例

DCI.W 0xf3af8000 ; 32 ビ ッ ト NOP を挿入し、 2 バイ ト境界でア ラ イ ン さ せる

関連項目

概念 :

『アセンブラの使用』 :

• 数値式 (8-16 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 6-29ID 0 8 1 7 1 1 Non-Confidential

Page 336: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ディ レクテ ィブリファレンス

参照 : • DCD、 DCDU (6-25 ページ)

• DCW、 DCWU (6-32 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 6-30ID 0 8 1 7 1 1 Non-Confidential

Page 337: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ディ レクテ ィブリファレンス

6.3.11 DCQ、 DCQU

DCQ ディ レクティブは、 8 バイ ト単位でメモ リブロ ッ クを割り当てて、 4 バイ ト境界

でアラインさせ、 実行時のメモ リの初期内容を定義します。

メモ リのアライン メン トが任意である点を除き、 DCQU も同じです。

構文

{label} DCQ{U} {-}literal{,{-}literal}...

以下の意味があ り ます。

literal 64 ビッ トの数値リ テラルを指定します。

この値の有効範囲は 0 ~ 264-1 です。

数値リ テラルで通常使用できる文字に加え、 literal の先頭にマイナス符

号を付けるこ とができます。この場合の値の有効範囲は -263 ~ -1 とな り

ます。

-n を指定した場合は、 264–n を指定した場合と同じ結果が得られます。

使用法

DCQ は、 必要に応じて、 初に定義された 8 バイ トのブロ ッ クの前に 大 3 バイ トの

パディングを挿入して、 アライン メン ト を 4 バイ トにします。

アライン メン トが不要な場合は、 DCQU を使用して下さい。

AREA MiscData, DATA, READWRITEdata DCQ -225,2_101 ; 2_101 はバイ ナ リ の 101 を表す

DCQU number+4 ; 数値は定義済みである こ と が必要

関連項目

概念 :

『アセンブラの使用』 :

• 数値リ テラル (8-17 ページ) .

参照 : • DCB (6-24 ページ)

• DCD、 DCDU (6-25 ページ)

• DCW、 DCWU (6-32 ページ)

• SPACE または FILL (6-23 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 6-31ID 0 8 1 7 1 1 Non-Confidential

Page 338: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ディ レクテ ィブリファレンス

6.3.12 DCW、 DCWU

DCW ディ レクティブは、 ハーフワード単位でメモ リ を割り当てて、 2 バイ ト境界でア

ラインさせ、 実行時のメモ リの初期内容を定義します。

メモ リの境界調整が任意である点を除き、 DCWU も同じです。

構文

{label} DCW{U} expr{,expr}...

各パラ メータには以下の意味があ り ます。

expr -32768 ~ 65535 の範囲の整数を求める数値式です。

使用法

DCW は、 必要に応じて、 初に定義されたハーフワードの前に 1 バイ トのパディング

を挿入して、 アライン メン ト を 2 バイ トにします。

アライン メン トが不要な場合は、 DCWU を使用して下さい。

data DCW -225,2*number ; 数値は定義済みである こ と が必要 DCWU number+4

関連項目

概念 :

『アセンブラの使用』 :

• 数値式 (8-16 ページ) .

参照 : • DCB (6-24 ページ)

• DCD、 DCDU (6-25 ページ)

• DCQ、 DCQU (6-31 ページ)

• SPACE または FILL (6-23 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 6-32ID 0 8 1 7 1 1 Non-Confidential

Page 339: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ディ レクテ ィブリファレンス

6.3.13 COMMON

COMMON ディ レクティブは、 定義されたサイズのメモ リブロ ッ クを、 指定したシンボル

で割り当てます。 メモ リのアライン方法を指定します。 アライン メン ト を省略した場合、 デフォルトのアライン メン トは 4 にな り ます。 また、 サイズを省略した場合、

デフォルトのサイズは 0 になり ます。

このメモ リには他のメモ リ と同様にアクセスできますが、 オブジェク ト ファ イルに領域は割り当てられません。

構文

COMMON symbol{,size{,alignment}} {[attr]}

以下の意味があ り ます。

symbol シンボル名を指定します。 シンボル名では大文字と小文字が区別されま

す。

size 予約するバイ ト数を指定します。

alignment アライン メン ト を指定します。

attr 次のいずれかを指定できます。

DYNAMIC ELF シンボルの可視性を STV_DEFAULT に設定します。

PROTECTED ELF シンボルの可視性を STV_PROTECTED に設定します。

HIDDEN ELF シンボルの可視性を STV_HIDDEN に設定します。

INTERNAL ELF シンボルの可視性を STV_INTERNAL に設定します。

使用法

リ ンカは、 リ ンク段階で、 必要な領域をゼロで初期化されたメモ リ と して割り当てます。 COMMON ディ レクティブで作成されたシンボルを定義、 インポート (IMPORT)、 ま

たはエクスターン (EXTERN) する こ とはできません。 同様に、 定義済みのシンボルや IMPORT または EXTERN ディ レクティブで使用されたシンボルを COMMON ディ レクティブで

使用するこ とはできません。

LDR r0, =xyzCOMMON xyz,255,4 ; ZI ス ト アの 255 バイ ト を定義し、 ワー ド境界で整列させる

誤用例

COMMON foo,4,4COMMON bar,4,4

foo DCD 0 ; COMMON と同じ名前を持つ ラ ベルは定義できない

IMPORT bar ; COMMON と同じ名前を持つ ラ ベルはイ ンポー ト できない

6.3.14 DATA

DATA ディ レクティブは必要なくな り ました。 このディ レクティブはアセンブラに

よって無視されます。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 6-33ID 0 8 1 7 1 1 Non-Confidential

Page 340: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ディ レクテ ィブリファレンス

6.4 アセンブリ制御ディレクテ ィブ

このセクシ ョ ンでは、 条件付きアセンブリ、 ループ、 インクルード、 およびマクロを制御する以下のディ レクティブについて説明します。

• MACRO、 MEND (6-35 ページ)

• MEXIT (6-38 ページ)

• IF、 ELSE、 ENDIF、 ELIF (6-39 ページ)

• WHILE、 WEND (6-42 ページ) .

6.4.1 ネステ ィングディ レクテ ィブ

以下の構造は合計で 256 の深さまでネス トできます。

• MACRO 定義

• WHILE...WEND ループ

• IF...ELSE...ENDIF 条件構造

• INCLUDE ファ イルインクルード

これらの構造がどのよ うにネス ト されているかに関係なく、 上記の制限はネス ト された構造全体に適用されます。 各構造の制限が 256 ではあ り まん。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 6-34ID 0 8 1 7 1 1 Non-Confidential

Page 341: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ディ レクテ ィブリファレンス

6.4.2 MACRO、 MEND

MACRO ディ レクティブは、 マクロ定義の開始位置をマークします。 マクロ拡張は、

MEND ディ レクティブで終了します。

構文

マクロの定義には 2 つのディ レクティブを使用します。 構文は以下のとおりです。

MACRO{$label} macroname{$cond} {$parameter{,$parameter}...} ; code MEND

各パラ メータには以下の意味があ り ます。

$label マクロが呼び出されたと きに、 指定されたシンボルが代入されるパラ

メータを指定します。 通常、 このシンボルはラベルです。

macroname マクロの名前を指定します。 命令またはディ レクティブの名前で始まる

名前は付けられません。

$cond 条件コードを含んでいるよ うに設計された特別なパラ メータです。 有効

な条件コード以外の値も許可されます。

$parameter マクロが呼び出されたと きに値が代入されるパラ メータを指定します。

パラ メータのデフォルト値は、 以下の形式を使用して設定できます。

$parameter="default value"

デフォルト値にスペースが含まれているか、 または値の前後のいずれかにスペースがある場合は、 二重引用符を使用する必要があ り ます。

使用法

マクロ内で WHILE...WEND ループまたは IF...ENDIF 条件を始める場合は、 MEND ディ レク

ティブに到達する前にこのループまたは条件を閉じる必要があ り ます。 ループ内からの終了時など、 マクロからの早期終了を可能にする必要がある場合は、 MEXIT を使

用して下さい。

マク ロ本体内では、 $label、 $parameter または $cond などのパラ メータは他の変数と同

じよ うに使用できます。 これらのパラ メータには、 マクロが呼び出されるたびに新しい値が渡されます。 パラ メータを通常のシンボルと区別するには、 先頭に $ を付け

る必要があ り ます。 パラ メータはいくつでも使用できます。

$label は省略可能ですが、 マクロによって内部ラベルが定義される場合に役立ちま

す。 このラベルは、 マク ロへのパラ メータ と して処理されますが、 必ずしも、 マクロ拡張の 初の命令を表す必要はあ り ません。 マクロでは、 すべてのラベルの位置が定義されます。

パラ メータのデフォルト値を使用するには、 | を引数と して使用します。 この引数が

省略されている場合は、 空の文字列が使用されます。

複数の内部ラベルを使用するマクロでは、 各内部ラベルを、 異なる接尾文字の付いたベースラベルと して定義する と役立ちます。

拡張にスペースが不要な場合には、 パラ メータ とそれに続くテキス トの間、 またはパラ メータ とパラ メータの間にはド ッ ト (.) を使用します。 ただし、 パラ メータ と

その前のテキス トの間にはド ッ トは使用しないで下さい。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 6-35ID 0 8 1 7 1 1 Non-Confidential

Page 342: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ディ レクテ ィブリファレンス

条件コードには、 $cond パラ メータを使用できます。 単項演算子 :REVERSE_CC: を使用し

て、 条件コードの逆数を検索し、 :CC_ENCODING: を使用して、 条件コードの 4 ビッ トエ

ンコーディングを検索します。

マク ロでは、 ローカル変数の有効範囲を定義します。

マク ロはネス トできます。

; マ ク ロ定義

MACRO ; マ ク ロ定義開始$label xmac $p1,$p2 ; コ ー ド

$label.loop1 ; コ ー ド

; コ ー ド BGE $label.loop1$label.loop2 ; コ ー ド BL $p1 BGT $label.loop2 ; コ ー ド ADR $p2 ; コ ー ド

MEND ; マ ク ロ定義終了

; マ ク ロ の呼び出し

abc xmac subr1,de ; マ ク ロ を呼び出す

; コ ー ド ; これが

abcloop1 ; コ ー ド ; xmac マ ク ロの

; コ ー ド ; 拡張時に

BGE abcloop1 ; 生成される

abcloop2 ; コ ー ド BL subr1 BGT abcloop2 ; コ ー ド

ADR de ; コ ー ド

マクロを使用したアセンブリ時の診断を以下に示します。

MACRO ; マ ク ロ定義

diagnose $param1="default" ; こ のマ ク ロ に よ り

INFO 0,"$param1" ; 第 2 アセン ブ リ パスで

MEND ; アセン ブ リ時の診断が生成される

; マ ク ロ拡張

diagnose ; アセン ブ リ時に空白行を出力する

diagnose "hello" ; アセン ブ リ時に "hello" を出力する

diagnose | ; アセン ブ リ時にデ フ ォ ル ト を出力する

注 変数も引数と して渡される場合、 | を使用する と、 一部の変数が代入されないままに

なる場合があ り ます。 この問題を回避するには、 | を LCLS または GBLS 変数で定義し、

この変数を | の代わりに引数と して渡します。 以下に例を示します。

MACRO ; マ ク ロ定義

m2 $a,$b=r1,$c ; $b のデ フ ォ ル ト値は r1add $a,$b,$c ; マ ク ロは $b と $c を加算し て、 結果を $a に代入

MEND ; マ ク ロの終了

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 6-36ID 0 8 1 7 1 1 Non-Confidential

Page 343: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ディ レクテ ィブリファレンス

MACRO ; マ ク ロ定義

m1 $a,$b ; こ のマ ク ロは $b を r1 に加算し て、 結果を $a に代入

LCLS def ; | のための ロー カ ル文字列変数を宣言

def SETS "|" ; | を定義

m2 $a,$def,$b ; マ ク ロ m2 を | の代わ り に $def で呼び出し て

; 2 番目の引数にデ フ ォ ル ト値を使用。

MEND ; マ ク ロの終了

条件付きマクロの例

AREA codx, CODE, READONLY

; マ ク ロ定義

MACROReturn$cond[ {ARCHITECTURE} <> "4"BX$cond lr|MOV$cond pc,lr

] MEND

; マ ク ロ の呼び出し

fun PROCCMP r0,#0MOVEQ r0,#1ReturnEQ MOV r0,#0ReturnENDP

END

関連項目

概念 :

『アセンブラの使用』 :

• マクロの使用 (5-34 ページ)

• アセンブ リ時の変数代入 (8-6 ページ) .

参照 : • MEXIT (6-38 ページ)

• ネスティングディ レクティブ (6-34 ページ)

• GBLA、 GBLL、 GBLS (6-5 ページ)

• LCLA、 LCLL、 LCLS (6-8 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 6-37ID 0 8 1 7 1 1 Non-Confidential

Page 344: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ディ レクテ ィブリファレンス

6.4.3 MEXIT

MEXIT ディ レクティブは、 マクロ定義の終了位置に到達する前にマクロを終了する場

合に使用します。

使用法

MEXIT は、 マク ロ本体の中から終了する必要がある場合に使用します。 マク ロ本体の

中で閉じられていない WHILE...WEND ループまたは IF...ENDIF 条件は、 マクロが終了す

る前にアセンブラによって閉じられます。

MACRO$abc example abc $param1,$param2 ; コ ー ド WHILE condition1 ; コ ー ド IF condition2 ; コ ー ド MEXIT ELSE ; コ ー ド ENDIF WEND ; コ ー ド MEND

関連項目

参照 : • MACRO、 MEND (6-35 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 6-38ID 0 8 1 7 1 1 Non-Confidential

Page 345: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ディ レクテ ィブリファレンス

6.4.4 IF、 ELSE、 ENDIF、 ELIF

IF ディ レクティブは、 命令とディ レクティブのシーケンスをアセンブルするかど う

かを決める条件を定義します。 [ は IF と同じ意味です。

ELSE ディ レクティブは、 前の条件が満たされなかった場合にアセンブルされる命令

とディ レクティブのシーケンスの開始位置をマークします。 | は ELSE と同じ意味で

す。

ENDIF ディ レクティブは、 条件付きでアセンブルされる命令とディ レクティブのシー

ケンスの終了位置をマークします。 ] は ENDIF と同じ意味です。

ELIF ディ レクティブは、 条件をネス ト または反復するこ とな く、 ELSE IF と同じ構造

を作成します。

構文

IF logical-expression ・ code{ELSE ・ code} ENDIF

以下の意味があ り ます。

logical-expression

{TRUE} または {FALSE} を求める式を指定します。

使用法

指定された条件下においてのみアセンブルまたは実行される命令とディ レクティブのシーケンスには、 IF と ENDIF に加え、 必要に応じて ELSE を組み合わせて使用しま

す。

IF...ENDIF 条件はネス トできます。

ELIF の使用

ELIF を使用せずに、 以下のよ うなネス ト された条件付き命令セッ ト を作成できます。

IF logical-expression instructions ELSE IF logical-expression2 instructions ELSE IF logical-expression3 instructions ENDIF ENDIF ENDIF

このよ う なネス ト構造は、 256 の深さまでネス トできます。

ELIF を使用する と、 同じ構造をよ り簡単に記述できます。

IF logical-expression instructions ELIF logical-expression2 instructions

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 6-39ID 0 8 1 7 1 1 Non-Confidential

Page 346: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ディ レクテ ィブリファレンス

ELIF logical-expression3 instructions ENDIF

この構造では、 現在のネス トの深さに IF...ENDIF ペアの 1 レベルだけが追加された深

さになり ます。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 6-40ID 0 8 1 7 1 1 Non-Confidential

Page 347: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ディ レクテ ィブリファレンス

例 6-3 では、 NEWVERSION が定義されている場合は 初の命令セッ トがアセンブルされ、

定義されていない場合は 2 番目の命令セッ トがアセンブルされます。

例 6-3 定義される変数に基づく条件付きアセンブリ

IF :DEF:NEWVERSION ; 初の命令またはデ ィ レ ク テ ィ ブのセ ッ ト ELSE ; 2 番目の命令またはデ ィ レ ク テ ィ ブのセ ッ ト ENDIF

armasm を以下のよ うに呼び出した場合には NEWVERSION が定義されるため、 初の命令

およびディ レクティブのセッ トがアセンブルされます。

armasm --predefine "NEWVERSION SETL {TRUE}" test.s

armasm を以下のよ うに呼び出した場合には NEWVERSION が定義されていないため、 2 番目の命令およびディ レクティブのセッ トがアセンブルされます。

armasm test.s

例 6-4 では、 NEWVERSION の値が {TRUE} の場合に 初の命令セッ トがアセンブルされ、

それ以外の場合は 2 番目の命令セッ トがアセンブルされます。

例 6-4 変数の値に基づく条件付きアセンブリ

IF NEWVERSION = {TRUE} ; 初の命令またはデ ィ レ ク テ ィ ブのセ ッ ト ELSE ; 2 番目の命令またはデ ィ レ ク テ ィ ブのセ ッ ト ENDIF

armasm を以下のよ うに呼び出した場合には、 初の命令およびディ レクティブのセッ

トがアセンブルされます。

armasm --predefine "NEWVERSION SETL {TRUE}" test.s

armasm を以下のよ うに呼び出した場合には、 2 番目の命令およびディ レクティブの

セッ トがアセンブルされます。

armasm --predefine "NEWVERSION SETL {FALSE}" test.s

関連項目

概念 :

『アセンブラの使用』 :

• 関係演算子 (8-28 ページ) .

参照 : • ELIF の使用 (6-39 ページ)

• ネスティングディ レクティブ (6-34 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 6-41ID 0 8 1 7 1 1 Non-Confidential

Page 348: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ディ レクテ ィブリファレンス

6.4.5 WHILE、 WEND

WHILE ディ レクティブは、 繰り返しアセンブルされる命令やディ レクティブのシーケ

ンスを開始します。 このシーケンスは WEND ディ レクティブで終了します。

構文

WHILE logical-expression

code

WEND

以下の意味があ り ます。

logical-expression

{TRUE} または {FALSE} を求める式を指定します。

使用法

命令のシーケンスを複数回アセンブルするには、 WHILE ディ レクティブを WEND ディ レ

クティブと組み合わせて使用します。 反復回数はゼロにするこ と もできます。

IF...ENDIF 条件は WHILE...WEND ループ内で使用できます。

WHILE...WEND ループはネス トできます。

GBLA count ; ロー カ ル変数を宣言

count SETA 1 ; も っ と複雑な条件も

WHILE count <= 4 ; 指定可能

count SETA count+1 ; こ の場合、

; コ ー ド ; こ の コ ー ドは

; コ ー ド ; 4 回繰り返される WEND

関連項目

概念 :

『アセンブラの使用』 :

• 論理式 (8-19 ページ) .

参照 : • ネスティングディ レクティブ (6-34 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 6-42ID 0 8 1 7 1 1 Non-Confidential

Page 349: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ディ レクテ ィブリファレンス

6.5 Frame ディレクテ ィブ

このセクシ ョ ンでは、 以下のディ レクティブについて説明します。

• FRAME ADDRESS (6-45 ページ)

• FRAME POP (6-46 ページ)

• FRAME PUSH (6-47 ページ)

• FRAME REGISTER (6-49 ページ)

• FRAME RESTORE (6-50 ページ)

• FRAME RETURN ADDRESS (6-51 ページ)

• FRAME SAVE (6-52 ページ)

• FRAME STATE REMEMBER (6-53 ページ)

• FRAME STATE RESTORE (6-54 ページ)

• FRAME UNWIND ON (6-55 ページ)

• FRAME UNWIND OFF (6-55 ページ)

• FUNCTION、 PROC (6-55 ページ)

• ENDFUNC、 ENDP (6-57 ページ) .

上記のディ レクティブを使用するこ とによ り、 以下の処理を行う こ とができます。

• armlink --callgraph オプシ ョ ンを使用して、 アセンブラ関数によるスタ ッ ク使用

量を計算できます。

スタ ッ ク使用量の特定には、 以下のルールが使用されます。

— 関数が PROC または ENDP でマーク されていない場合、 スタ ッ ク使用量は特

定できません。

— 関数が PROC または ENDP でマーク されていても FRAME PUSH または FRAME POP でマーク されていない場合、 スタ ッ ク使用量はゼロである と見なされます。つま り、 FRAME PUSH 0 または FRAME POP 0 を手動で追加する必要はあ り ませ

ん。

— 関数が PROC または ENDP でマーク され、 なおかつ FRAME PUSH n または FRAME POP n でマーク されている場合、 スタ ッ ク使用量は n バイ ト と見なされま

す。

• 特に既存のコードを変更する場合に、 関数の構造内でのエラーを回避できます。

• アセンブラが関数の構造内のエラーについて警告メ ッセージを生成できます。

• デバッグ時に関数呼び出しのバッ ク ト レースを行う こ とができます。

• デバッガを使用して、 アセンブラ関数のプロファ イルを取得するこ とができます。

アセンブラ関数のプロファ イルを必要と していても、 他の目的にフレーム記述ディレクティブを必要と しない場合、 以下のよ うにな り ます。

• FUNCTION ディ レクティブと ENDFUNC ディ レクティブ、 または PROC ディ レクティブ

と ENDP ディ レクティブを使用する必要があ り ます。

• 他の FRAME ディ レクティブは省略できます。

• FUNCTION ディ レクティブと ENDFUNC ディ レクティブは、 プロファ イルの取得の対

象となる関数に対してのみ使用する必要があ り ます。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 6-43ID 0 8 1 7 1 1 Non-Confidential

Page 350: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ディ レクテ ィブリファレンス

DWARF での標準構造フレームアドレスは、 割り込み関数のコールフレームがある場

所を指定する、 スタ ッ ク上のアドレスです。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 6-44ID 0 8 1 7 1 1 Non-Confidential

Page 351: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ディ レクテ ィブリファレンス

6.5.1 FRAME ADDRESS

FRAME ADDRESS ディ レクティブは、 後続の命令の標準構造フレームアドレスの計算方法

を記述します。 このディ レクティブは、 FUNCTION ディ レクティブと ENDFUNC ディ レク

ティブを含む関数または PROC ディ レクティブと ENDP ディ レクティブを含む関数での

み使用できます。

構文

FRAME ADDRESS reg[,offset]

各パラ メータには以下の意味があ り ます。

reg 標準構造フレームアドレスのベース となるレジスタを指定します。 関数

で別のフレームポインタを使用しない限り、 このレジスタが SP になり

ます。

offset reg から標準構造フレームアドレスまでのオフセッ ト を指定します。

offset がゼロの場合は省略できます。

使用法

FRAME ADDRESS ディ レクティブは、 コードによって標準構造フレームアドレスのベース

となるレジスタが変更される場合またはレジスタから標準構造フレームアドレスまでのオフセッ トが変更される場合に使用します。 FRAME ADDRESS ディ レクティブは、 標

準構造フレームアドレスの計算方法を変更する命令の直後に使用する必要があ り ます。

注 コードでレジスタを保存してスタ ッ クポインタを変更する 1 つの命令を使用する場

合、 FRAME ADDRESS と FRAME SAVE の両方を使用する代わりに FRAME PUSH を使用できます。

また、 コードでレジスタをロード してスタ ッ クポインタを変更する 1 つの命令を使

用する場合は、FRAME ADDRESS と FRAME RESTORE の両方を使用する代わりに FRAME POP を使

用できます。

_fn FUNCTION ; CFA (標準構造フ レームア ド レ ス) は、

; 関数へのエ ン ト リ時の SP の値

PUSH {r4,fp,ip,lr,pc} FRAME PUSH {r4,fp,ip,lr,pc} SUB sp,sp,#4 ; CFA オ フ セ ッ ト が変更されたため、

FRAME ADDRESS sp,24 ; 修正する ADD fp,sp,#20 FRAME ADDRESS fp,4 ; 新しいベース レジス タ

; コ ール フ レームのベース と する fp (SP ではない) を使用する コ ー ド

関連項目

参照 : • FRAME POP (6-46 ページ)

• FRAME PUSH (6-47 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 6-45ID 0 8 1 7 1 1 Non-Confidential

Page 352: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ディ レクテ ィブリファレンス

6.5.2 FRAME POP

FRAME POP ディ レクティブを使用して、 呼び出される側がレジスタを リ ロードするタ

イ ミ ングをアセンブラに通知します。 このディ レクティブは、 FUNCTION ディ レクティ

ブと ENDFUNC ディ レクティブを含む関数または PROC ディ レクティブと ENDP ディ レク

ティブを含む関数でのみ使用できます。

このディ レクティブは、 関数内の 後の命令の後で必ず使用する必要があるものではあ り ません。

構文

FRAME POP には以下の 3 つの構文があ り ます。

FRAME POP {reglist}

FRAME POP {reglist},n

FRAME POP n

各パラ メータには以下の意味があ り ます。

reglist 関数へのエン ト リで保持していた値に復元されるレジスタ リ ス ト を指定

します。 リ ス トには少なく と も 1 本のレジスタを指定する必要があ り ま

n スタ ッ クポインタが移動するバイ ト数を指定します。

使用法

FRAME POP は、FRAME ADDRESS ディ レクティブおよび FRAME RESTORE ディ レクティブを使用

するこ と と同じです。 このディ レクティブを使用する と、 1 つの命令でレジスタを

ロード し、 スタ ッ クポインタを変更する とができます。

FRAME POP は、 このディ レクティブが参照する命令の直後に配置する必要があ り ます。

n が指定されていないかゼロの場合、 アセンブラによって、 {reglist} から標準構造フ

レームアドレスまでの新しいオフセッ トが計算されます。 アセンブラは以下を前提と しています。

• ポップされる各 ARM レジスタによってスタ ッ ク上の 4 バイ トが占有されてい

ます。

• ポップされる各 VFP 単精度レジスタによってスタ ッ ク上の 4 バイ トが占有さ

れ、 さ らに リ ス ト ごとに 4 バイ ト ワードが占有されているこ と

• ポップされる各 VFP 倍精度レジスタによってスタ ッ ク上の 8 バイ トが占有さ

れ、 さ らに リ ス ト ごとに 4 バイ ト ワードが占有されているこ と

関連項目

参照 : • FRAME ADDRESS (6-45 ページ)

• FRAME RESTORE (6-50 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 6-46ID 0 8 1 7 1 1 Non-Confidential

Page 353: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ディ レクテ ィブリファレンス

6.5.3 FRAME PUSH

FRAME PUSH ディ レクティブを使用して、 通常は関数エン ト リにおいて、 呼び出される

側がレジスタを保存するタイ ミ ングをアセンブラに通知します。 このディ レクティブは、 FUNCTION ディ レクティブと ENDFUNC ディ レクティブを含む関数または PROC ディ

レクティブと ENDP ディ レクティブを含む関数でのみ使用できます。

構文

FRAME PUSH には以下の 2 つの構文があ り ます。

FRAME PUSH {reglist}

FRAME PUSH {reglist},n

FRAME PUSH n

各パラ メータには以下の意味があ り ます。

reglist 標準構造フレームアドレスの下位方向に連続してス ト アされるレジスタ

の リ ス ト を指定します。 リ ス トには少なく と も 1 本のレジスタを指定す

る必要があ り ます。

n スタ ッ クポインタが移動するバイ ト数を指定します。

使用法

FRAME PUSH は、FRAME ADDRESS ディ レクティブおよび FRAME SAVE ディ レクティブを使用す

るこ と と同じです。 このディ レクティブを使用する と、 1 つの命令でレジスタを保存

し、 スタ ッ クポインタを変更するこ とができます。

FRAME PUSH は、 このディ レクティブが参照する命令の直後に配置する必要があ り ま

す。

n が指定されていないかゼロの場合、 アセンブラによって、 {reglist} から標準構造フ

レームアドレスまでの新しいオフセッ トが計算されます。 アセンブラは以下を前提と しています。

• プッシュされる各 ARM レジスタによってスタ ッ ク上の 4 バイ トが占有されて

いるこ と

• プッシュされる各 VFP 単精度レジスタによってスタ ッ ク上の 4 バイ トが占有さ

れ、 さ らに リ ス ト ごとに 4 バイ ト ワードが占有されているこ と

• ポップされる各 VFP 倍精度レジスタによってスタ ッ ク上の 8 バイ トが占有さ

れ、 さ らに リ ス ト ごとに 4 バイ ト ワードが占有されているこ と

p PROC ; 標準構造フ レームア ド レ スは SP + 0 EXPORT p PUSH {r4-r6,lr} ; SP は標準構造フ レームア ド レ ス を基準に移動されてお り、

; レジス タ R4、 R5、 R6、 および LR がス タ ッ ク上にある FRAME PUSH {r4-r6,lr} ; 以下と等価 :

; FRAME ADDRESS sp,16 ; {R4-R6,LR} 内の 16 バイ ト ; FRAME SAVE {r4-r6,lr},-16

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 6-47ID 0 8 1 7 1 1 Non-Confidential

Page 354: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ディ レクテ ィブリファレンス

関連項目

参照 : • FRAME ADDRESS (6-45 ページ)

• FRAME SAVE (6-52 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 6-48ID 0 8 1 7 1 1 Non-Confidential

Page 355: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ディ レクテ ィブリファレンス

6.5.4 FRAME REGISTER

FRAME REGISTER ディ レクティブを使用して、 レジスタに保持されている関数引数の位

置を管理します。 このディ レクティブは、 FUNCTION ディ レクティブと ENDFUNC ディ レ

クティブを含む関数または PROC ディ レクティブと ENDP ディ レクティブを含む関数で

のみ使用できます。

構文

FRAME REGISTER reg1, reg2

各パラ メータには以下の意味があ り ます。

reg1 関数へのエン ト リで引数を保持するレジスタを指定します。

reg2 その値を保持するレジスタを指定します。

使用法

FRAME REGISTER ディ レクティブは、 関数へのエン ト リで別のレジスタに保持されてい

た引数を保持するレジスタを使用する場合に使用します。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 6-49ID 0 8 1 7 1 1 Non-Confidential

Page 356: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ディ レクテ ィブリファレンス

6.5.5 FRAME RESTORE

FRAME RESTORE ディ レクティブを使用して、 指定されたレジスタの内容が、 関数へのエ

ン ト リで保持されていた値に復元されたこ とをアセンブラに通知します。 このディレクティブは、 FUNCTION ディ レクティブと ENDFUNC ディ レクティブを含む関数または PROC ディ レクティブと ENDP ディ レクティブを含む関数でのみ使用できます。

構文

FRAME RESTORE {reglist}

各パラ メータには以下の意味があ り ます。

reglist 内容が復元されたレジスタの リ ス ト を指定します。 リ ス トには少なく と

も 1 つのレジスタを指定する必要があ り ます。

使用法

FRAME RESTORE は、 呼び出される側がスタ ッ クからレジスタを リ ロード した直後に使用

します。 このディ レクティブは、 関数内の 後の命令の後で必ず使用する必要があるものではあ り ません。

reglist には、 整数レジスタまたは浮動小数点レジスタのいずれかを指定できますが、

両方を混在させるこ とはできません。

注 また、 コードでレジスタをロード してスタ ッ クポインタを変更する 1 つの命令を使

用する場合は、FRAME RESTORE と FRAME ADDRESS の両方を使用する代わりに FRAME POP を使

用できます。

関連項目

参照 : • FRAME POP (6-46 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 6-50ID 0 8 1 7 1 1 Non-Confidential

Page 357: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ディ レクテ ィブリファレンス

6.5.6 FRAME RETURN ADDRESS

FRAME RETURN ADDRESS ディ レクティブによって、 LR 以外のレジスタを復帰アドレスに

使用する関数を定義できます。 このディ レクティブは、 FUNCTION ディ レクティブと ENDFUNC ディ レクティブを含む関数または PROC ディ レクティブと ENDP ディ レクティブ

を含む関数でのみ使用できます。

注 LR 以外のレジスタを復帰アドレスに使用する関数は AAPCS に準拠していません。

このよ う な関数はエクスポート しないで下さい。

構文

FRAME RETURN ADDRESS reg

各パラ メータには以下の意味があ り ます。

reg 復帰アドレスに使用するレジスタを指定します。

使用法

FRAME RETURN ADDRESS ディ レクティブは、 復帰アドレスに LR を使用しない関数で使用

します。 このディ レクティブを使用しないと、 デバッガはその関数のバッ ク ト レスを行う こ とができません。

FRAME RETURN ADDRESS は、 r14 を使用しない関数の開始位置をマークする FUNCTION ディ

レクティブまたは PROC ディ レクティブの直後に使用します。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 6-51ID 0 8 1 7 1 1 Non-Confidential

Page 358: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ディ レクテ ィブリファレンス

6.5.7 FRAME SAVE

FRAME SAVE ディ レクティブは、 標準構造フレームアドレスからの相対位置に保存され

るレジスタの位置を記述します。 このディ レクティブは、 FUNCTION ディ レクティブと ENDFUNC ディ レクティブを含む関数または PROC ディ レクティブと ENDP ディ レクティブ

を含む関数でのみ使用できます。

構文

FRAME SAVE {reglist}, offset

各パラ メータには以下の意味があ り ます。

reglist 標準構造フレームアドレスからの offset から連続してス ト アされるレジ

スタの リ ス ト を指定します。 リ ス トには少なく と も 1 つのレジスタを指

定する必要があ り ます。

使用法

FRAME SAVE は、 呼び出される側がスタ ッ クにレジスタをス ト アした直後に使用しま

す。

reglist には、 バッ ク ト レースに不要なレジスタを含めるこ とができます。 DWARF コールフレーム情報と して記録する必要のあるレジスタはアセンブラによって決定されます。

注 コードでレジスタを保存してスタ ッ クポインタを変更する 1 つの命令を使用する場

合、 FRAME SAVE と FRAME ADDRESS の両方を使用する代わりに FRAME PUSH を使用できます。

関連項目

参照 : • FRAME PUSH (6-47 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 6-52ID 0 8 1 7 1 1 Non-Confidential

Page 359: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ディ レクテ ィブリファレンス

6.5.8 FRAME STATE REMEMBER

FRAME STATE REMEMBER ディ レクティブは、 標準構造フレームアドレス と、 保存されるレ

ジスタ値の位置の計算方法に関する現在の情報を保存します。 このディ レクティブは、 FUNCTION ディ レクティブと ENDFUNC ディ レクティブを含む関数または PROC ディ レ

クティブと ENDP ディ レクティブを含む関数でのみ使用できます。

構文

FRAME STATE REMEMBER

使用法

インラインの終了シーケンスでは、 標準構造フレームアドレス と、 保存されるレジスタ値の位置の計算に関する情報が変更される場合があ り ます終了シーケンスの後、以前と同じ情報を使用して別の分岐を継続できます。 この情報を保存するには FRAME STATE REMEMBER を使用し、 この情報を復元するには FRAME STATE RESTORE を使用します。

これらのディ レクティブはネス トできます。 各 FRAME STATE RESTORE ディ レクティブに

は、 対応する FRAME STATE REMEMBER ディ レクティブが必要です。

; 関数コー ド FRAME STATE REMEMBER ; イ ン ラ イ ン終了シーケ ン スの前に フ レームの状態を保存する POP {r4-r6,pc} ; 制御が関数か ら渡されたため、 こ こ で

; FRAME POP を使用する必要はない FRAME STATE RESTORE ; 終了シーケン スが終了し たので、 状態を復元する

exitB ; exitB の コ ー ド POP {r4-r6,pc} ENDP

関連項目

参照 : • FRAME STATE RESTORE (6-54 ページ)

• FUNCTION、 PROC (6-55 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 6-53ID 0 8 1 7 1 1 Non-Confidential

Page 360: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ディ レクテ ィブリファレンス

6.5.9 FRAME STATE RESTORE

FRAME STATE RESTORE ディ レクティブは、 標準構造フレームアドレス と、 保存されるレ

ジスタ値の位置の計算方法に関する情報を復元します。 このディ レクティブは、FUNCTION ディ レクティブと ENDFUNC ディ レクティブを含む関数または PROC ディ レク

ティブと ENDP ディ レクティブを含む関数でのみ使用できます。

構文

FRAME STATE RESTORE

関連項目

参照 : • FRAME STATE REMEMBER (6-53 ページ)

• FUNCTION、 PROC (6-55 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 6-54ID 0 8 1 7 1 1 Non-Confidential

Page 361: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ディ レクテ ィブリファレンス

6.5.10 FRAME UNWIND ON

FRAME UNWIND ON ディ レクティブは、この関数と後に続く関数の unwind テーブルを生成

するよ う アセンブラに指示します。

構文

FRAME UNWIND ON

使用法

このディ レクティブは関数の外部で使用できます。 この場合のアセンブラは、 FRAME

UNWIND OFF ディ レクティブに到達するまで、後続のすべての関数の unwind テーブルを

生成します。

注 FRAME UNWIND ディ レクティブは、 例外テーブル生成を有効にするには不十分です。 さ

らに、 FRAME UNWIND ディ レクティブに他の FRAME ディ レクティブがない場合、 情報が不

十分なので、 アセンブラは unwind 情報を生成できません。

関連項目

参照 : • --exceptions (2-14 ページ)

• --exceptions_unwind (2-14 ページ) .

6.5.11 FRAME UNWIND OFF

FRAME UNWIND OFF ディ レクティブは、 この関数と後に続く関数の nounwind テーブルを

生成するよ う アセンブラに指示します。

構文

FRAME UNWIND OFF

使用法

このディ レクティブは関数の外部で使用できます。 この場合のアセンブラは、 FRAME

UNWIND ON ディ レクティブに到達するまで、 後続のすべての関数の nounwind テーブル

を生成します。

関連項目

参照 : • --exceptions (2-14 ページ)

• --exceptions_unwind (2-14 ページ) .

6.5.12 FUNCTION、 PROC

FUNCTION ディ レクティブは、 関数の開始位置をマークします。 PROC は FUNCTION と同じ

意味です。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 6-55ID 0 8 1 7 1 1 Non-Confidential

Page 362: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ディ レクテ ィブリファレンス

構文

label FUNCTION [{reglist1} [, {reglist2}]]

各パラ メータには以下の意味があ り ます。

reglist1 呼び出される側によって保存される ARM レジスタの リ ス ト を指定でき

ます (省略可)。 reglist1 が指定されていない場合、 デバッガはレジスタ

の使用状況をチェッ クする と きに AAPCS が使用されている と見なしま

す。

reglist2 呼び出される側によって保存される VFP レジスタの リ ス ト を指定でき

ます (省略可)。

使用法

FUNCTION ディ レクティブを使用して関数の開始位置をマークします。 ELF の DWARF コールフレーム情報を生成する と き、 アセンブラは FUNCTION を使用して関数の開始位

置を識別します。

FUNCTION によって標準構造フレームアドレスは R13 (SP) に設定され、 フレーム状態

スタ ッ クは空にな り ます。

各 FUNCTION ディ レクティブには、 対応する ENDFUNC ディ レクティブが必要です。

FUNCTION と ENDFUNC の対をネス ト した り、 これらの対に PROC ディ レクティブや ENDP ディ レクティブを含めたりするこ とはできません。

別のプロシージャコール標準を使用している場合は、 オプシ ョ ンの reglist パラ メー

タを使用して、 その情報をデバッガに通知できます。 ただし、 すべてのデバッガがこの機能をサポート しているわけではあ り ません。 詳細については、 デバッガのマニュアルを参照して下さい。

注 FUNCTION では、 ワード境界 (Thumb の場合はハーフワード境界) へのアライン メン ト

は自動的には行われません。 アライン メン ト を行う必要がある場合は ALIGN を使用し

ます。 このディ レクティブを使用しないと、 コールフレームによって関数の開始位置が示されない場合があ り ます。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 6-56ID 0 8 1 7 1 1 Non-Confidential

Page 363: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ディ レクテ ィブリファレンス

ALIGN ; ア ラ イ ン メ ン ト を行う

dadd FUNCTION ; ALIGN デ ィ レ ク テ ィ ブなしではワード境界へのア ラ イ ン メ ン トが行われない可能性があ

る EXPORT dadd PUSH {r4-r6,lr} ; 自動的にワード境界へのア ラ イ ン メ ン トが行われる FRAME PUSH {r4-r6,lr} ; サブルーチ ン本体 POP {r4-r6,pc} ENDFUNCfunc6 PROC {r4-r8,r12},{D1-D3} ; AAPCS に非準拠の関数 ... ENDP

関連項目

参照 : • FRAME ADDRESS (6-45 ページ)

• FRAME STATE RESTORE (6-54 ページ)

• ALIGN (6-69 ページ) .

6.5.13 ENDFUNC、 ENDP

ENDFUNC ディ レクティブは、 AAPCS 準拠の関数の終了位置をマークします。 ENDP は ENDFUNC と同じ意味です。

関連項目

参照 : • FUNCTION、 PROC (6-55 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 6-57ID 0 8 1 7 1 1 Non-Confidential

Page 364: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ディ レクテ ィブリファレンス

6.6 通知ディレクテ ィブ

このセクシ ョ ンでは、 以下のディ レクティブについて説明します。

• ASSERT

アセンブ リ時にアサーシ ョ ンが偽になる場合にエラーメ ッセージを生成します。

• INFO (6-59 ページ)

アセンブ リ時に診断情報を生成します。

• OPT (6-61 ページ)

リ ス トオプシ ョ ンを設定します。

• TTL、 SUBT (6-63 ページ)

リ ス トにタイ トルとサブタイ トルを挿入します。

6.6.1 ASSERT

ASSERT ディ レクティブは、 指定されたアサーシ ョ ンが偽になる と、 アセンブリ中にエ

ラーメ ッセージを生成します。

構文

ASSERT logical-expression

以下の意味があ り ます。

logical-expression

{TRUE} または {FALSE} を返すアサーシ ョ ンを指定します。

使用法

ASSERT を使用して、 必要な条件がアセンブリ時に満たされているかど うかを確認しま

す。

アサーシ ョ ンが偽の場合、 エラーメ ッセージが生成され、 アセンブルに失敗します。

ASSERT label1 <= label2 ; label1 で表される

; ア ド レ スが

; label2 で表される ア ド レ ス よ り小さ いか、 等しい こ と を

; 確認する

関連項目

参照 : • INFO (6-59 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 6-58ID 0 8 1 7 1 1 Non-Confidential

Page 365: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ディ レクテ ィブリファレンス

6.6.2 INFO

INFO ディ レクティブは、 アセンブルのどちらのパスに関する診断情報の生成もサ

ポート します。

! は INFO と よ く似ていますが、 通知される情報の詳細度は低くな り ます。

構文

INFO numeric-expression, string-expression{, severity}

以下の意味があ り ます。

numeric-expression

アセンブ リ時に評価される数値式を指定します。 この式の結果がゼロになった場合、 以下のよ うにな り ます。

• 第 1 パスでは何も行われません。

• severity が 1 の場合、 string-expression が第 2 パスで警告と して出

力されます。

• severity が 0 か指定されていない場合、 string-expression が第 2 パスでメ ッセージと して出力されます。

この式の結果がゼロ以外の場合は、 以下のよ うにな り ます。

• severity がゼロかど うかにかかわらず (この場合、 severity のゼロ

以外の値は予約されています)、 string-expression がエラーメ ッ

セージと して出力され、 アセンブルに失敗します。

string-expression

文字列を返す式を指定します。

severity

メ ッセージの重大度を制御する任意の数を指定します。 指定できる値は 0 または 1 です。 それ以外の値はすべて予約されています。

使用法

INFO ディ レクティブを使用する と、 独自のエラーメ ッセージを柔軟に作成するこ と

ができます。

INFO 0, "Version 1.0" IF endofdata <= label1 INFO 4, "Data overrun at label1" ENDIF

関連項目

概念 :

『アセンブラの使用』 :

• 数値式 (8-16 ページ)

• 文字列式 (8-14 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 6-59ID 0 8 1 7 1 1 Non-Confidential

Page 366: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ディ レクテ ィブリファレンス

参照 : • ASSERT (6-58 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 6-60ID 0 8 1 7 1 1 Non-Confidential

Page 367: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ディ レクテ ィブリファレンス

6.6.3 OPT

OPT ディ レクティブは、 ソースコード内から リ ス トオプシ ョ ンを設定します。

構文

OPT n

各パラ メータには以下の意味があ り ます。

n OPT ディ レクティブの設定を指定します。 表 6-2 は、 利用可能な設

定を示しています。

使用法

リ スティ ングを有効にするには、 --list= アセンブラオプシ ョ ンを指定します。

デフォルトでは、 --list= オプシ ョ ンを指定する と、 変数宣言、 マク ロ拡張、 呼び出

し条件ディ レクティブ、 MEND ディ レクティブを含む通常のリ ス トが生成されます。 こ

の リ ス トは第 2 パスのみで生成されます。 コード内でデフォルトの リ ス トオプシ ョ

ンを修正するには、 OPT ディ レクティブを使用します。

表 6-2 OPT ディレクテ ィブの設定

OPT n 効果

1 通常のリ スティングが有効になり ます。

2 通常のリ スティングが無効になり ます。

4 ページ区切りが行われます。 すぐに改ページが行われ、 新しいページが始ま り ます。

8 行番号カウンタがゼロにリセッ ト されます。

16 SET、 GBL、 および LCL ディレクティブのリ スティングが有効

になり ます。

32 SET、 GBL、 および LCL ディレクティブのリ スティングが無効

になり ます。

64 マクロ拡張のリ スティングが有効になり ます。

128 マクロ拡張のリ スティングが無効になり ます。

256 マクロ呼び出しのリ スティングが有効になり ます。

512 マクロ呼び出しのリ スティングが無効になり ます。

1024 第 1 パスのリ スティングが有効になり ます。

2048 第 1 パスのリ スティングが無効になり ます。

4096 条件ディ レクティブのリ スティングが有効になり ます。

8192 条件ディ レクティブのリ スティングが無効になり ます。

16384 MEND ディレクティブのリ スティングが有効になり ます。

32768 MEND ディレクティブのリ スティングが無効になり ます。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 6-61ID 0 8 1 7 1 1 Non-Confidential

Page 368: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ディ レクテ ィブリファレンス

OPT ディ レクティブを使用して、 コードの リ ス トのフォーマッ ト を設定できます。 例

えば、 関数とセクシ ョ ンの前に新しいページを指定できます。

AREA Example, CODE, READONLYstart ; コ ー ド

; コ ー ド BL func1 ; コ ー ド

OPT 4 ; 改ページを func1 の前に挿入する

func1 ; コ ー ド

関連項目

参照 : • --list=file (2-18 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 6-62ID 0 8 1 7 1 1 Non-Confidential

Page 369: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ディ レクテ ィブリファレンス

6.6.4 TTL、 SUBT

TTL ディ レクティブは、 リ スティングファ イルの各ページの先頭にタイ トルを挿入し

ます。 このタイ トルは、 新しい TTL ディ レクティブが発行されるまで各ページに出力

されます。

SUBT ディ レクティブは、 リ スティングファ イルのページにサブタイ トルを挿入しま

す。 このサブタイ トルは、 新しい SUBT ディ レクティブが発行されるまで各ページに

出力されます。

構文

TTL title

SUBT subtitle

各パラ メータには以下の意味があ り ます。

title タイ トルを指定します。

subtitle サブタイ トルを指定します。

使用法

TTL ディ レクティブを使用して、 リ スティングファ イルの各ページの 上部にタイ ト

ルを挿入します。 初のページにタイ トルを出力する場合は、 ソースファ イルの 1 行目に TTL ディ レクティブを配置する必要があ り ます。

タイ トルを変更するには、 別の TTL ディ レクティブを使用します。 新しい TTL ディ レ

クティブの設定内容は、 次のページから反映されます。

SUBT ディ レクティブを使用して、 リ スティングファ イルのページの 上部にサブタ

イ トルを挿入します。 サブタイ トルは、 タイ トルの次の行に出力されます。 初のページにサブタイ トルを出力する場合は、 ソースファ イルの 1 行目に SUBT ディ レク

ティブを配置する必要があ り ます。

サブタイ トルを変更するには、 別の SUBT ディ レクティブを使用します。 新しい SUBT ディ レクティブの設定内容は、 次のページから反映されます。

TTL First Title ; タ イ ト ルを

; リ ス テ ィ ン グ フ ァ イ ルの

; 1 ページ目と後続のページに挿入する

SUBT First Subtitle ; サブ タ イ ト ルを

; リ ス テ ィ ン グ フ ァ イ ルの

; 2 ページ目と後続のページに挿入する

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 6-63ID 0 8 1 7 1 1 Non-Confidential

Page 370: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ディ レクテ ィブリファレンス

6.7 命令セッ ト と構文選択のディレクテ ィブ

このセクシ ョ ンでは、 以下のディ レクティブについて説明します。

• ARM、 THUMB、 THUMBX、 CODE16、 CODE32 (6-65 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 6-64ID 0 8 1 7 1 1 Non-Confidential

Page 371: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ディ レクテ ィブリファレンス

6.7.1 ARM、 THUMB、 THUMBX、 CODE16、 CODE32

ARM ディ レクティブと CODE32 ディ レクティブは同じ意味です。 これらは、UAL または UAL 以前の ARM アセンブラ言語構文のいずれかを使用して、 後に続く命令を ARM 命令と して釈するよ う アセンブラに指示します。

THUMB ディ レクティブは、 UAL 構文を使用して、 後に続く命令を Thumb 命令と して

解釈するよ うにアセンブラに指示します。

THUMBX ディ レクティブは、 UAL 構文を使用して、 後に続く命令を Thumb-2EE 命令と

して解釈するよ うにアセンブラに指示します。

CODE16 ディ レクティブは、 UAL 以前のアセンブリ言語構文を使用して、 後に続く命

令を Thumb 命令と して解釈するよ うにアセンブラに指示します。

これらのディ レクティブはまた、 必要に応じて、 ARM に関しては 大 3 バイ トのパ

ディングを挿入して次のワード境界で整列させ、 Thumb または Thumb-2EE に関して

は 大 1 バイ トのパディングを挿入して次のハーフワード境界で整列させます。

構文

ARMTHUMBTHUMBXCODE16CODE32

使用法

異なる命令セッ ト を使用したコードを含むファイルでは、 以下のよ うにな り ます。

• ARM は ARM コードの前に配置する必要があ り ます。 CODE32 は ARM と同じ意味で

す。

• THUMB は、UAL 構文で記述された Thumb コードの前に配置する必要があ り ます。

• THUMBX は、 UAL 構文で記述された Thumb-2EE コードの前に配置する必要があ り

ます。

• CODE16 は、 UAL 以前の構文で記述された Thumb コードの前に配置する必要があ

り ます。

これらのディ レクティブをアセンブルしても、 命令は生成されません。 また、 状態が変更されるわけでもあ り ません。 これらのディ レクティブは ARM、 Thumb、 また

は Thumb-2EE の命令を適切にアセンブルするよ う アセンブラに指示し、 必要に応じ

てパディングを挿入するだけです。

この例は、 ARM および THUMB を使用して、 状態を切り替え、 ARM 命令と Thumb 命令を

両方と も 1 つの領域でアセンブルする方法を示しています。

AREA ToThumb, CODE, READONLY ; こ の コ ー ド ブ ロ ッ ク に名前を付ける

ENTRY ; 初に実行する命令を マー クする

ARM ; 後に続 く命令は ARMstart ADR r0, into_thumb + 1 ; プ ロセ ッ サは ARM 状態で起動する

BX r0 ; Thumb 状態へのイ ン ラ イ ン切り替え

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 6-65ID 0 8 1 7 1 1 Non-Confidential

Page 372: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ディ レクテ ィブリファレンス

THUMB ; 後に続 く命令は Thumbinto_thumb MOVS r0, #10 ; 新しい形式の Thumb 命令

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 6-66ID 0 8 1 7 1 1 Non-Confidential

Page 373: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ディ レクテ ィブリファレンス

6.8 その他のディレクテ ィブ

このセクシ ョ ンでは、 以下のディ レクティブについて説明します。

• ALIAS (6-68 ページ)

• ALIGN (6-69 ページ)

• AREA (6-72 ページ)

• ATTR (6-76 ページ)

• END (6-78 ページ)

• ENTRY (6-78 ページ)

• EQU (6-79 ページ)

• EXPORT、 GLOBAL (6-80 ページ)

• EXPORTAS (6-82 ページ)

• GET、 INCLUDE (6-83 ページ)

• IMPORT、 EXTERN (6-84 ページ)

• INCBIN (6-86 ページ)

• KEEP (6-87 ページ)

• NOFP (6-88 ページ)

• REQUIRE (6-88 ページ)

• REQUIRE8、 PRESERVE8 (6-89 ページ)

• ROUT (6-90 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 6-67ID 0 8 1 7 1 1 Non-Confidential

Page 374: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ディ レクテ ィブリファレンス

6.8.1 ALIAS

ALIAS ディ レクティブは、 シンボルのエイ リ アスを作成します。

構文

ALIAS name, aliasname

以下の意味があ り ます。

name エイ リ アスを作成するシンボルの名前を指定します。

aliasname 作成されるエイ リ アスの名前を指定します。

使用法

シンボル name は、 エイ リ アスを作成する前に、 ソースファ イル内で定義されている

必要があ り ます。 EXPORT ディ レクティブによって設定された name のプロパティは、

aliasname によって継承されないので、 エイ リ アスを現在のソースファ イルの外でも

使用する場合は、 aliasname に対して EXPORT を使用する必要があ り ます。 EXPORT ディ レ

クティブによって設定されたプロパティ以外については、 name と aliasname は同じで

す。

bazbar PROC

BX lrENDPALIAS bar,foo ; foo は bar のエ イ リ ア スEXPORT barEXPORT foo ; foo と bar のプ ロパテ ィ は同じ

; (foo が ALIAS を使っ て作成されたため)

EXPORT baz ; baz と bar は同じではない

; (baz のサイズ フ ィ ール ドが設定されていないため)

誤用例

EXPORT barIMPORT carALIAS bar,foo ; エ ラ ー - bar が未定義

ALIAS car,boo ; エ ラ ー - car が外部bar PROC

BX lrENDP

関連項目

参照 : • データ定義ディ レクティブ (6-18 ページ)

• EXPORT、 GLOBAL (6-80 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 6-68ID 0 8 1 7 1 1 Non-Confidential

Page 375: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ディ レクテ ィブリファレンス

6.8.2 ALIGN

ALIGN ディ レクティブは、 ゼロ、 または NOP 命令でパディングするこ とによ り、 現在

の位置を指定された境界で整列させます。

構文

ALIGN {expr{,offset{,pad{,padsize}}}}

各パラ メータには以下の意味があ り ます。

expr 20 ~ 231 の 2 の累乗を返す数値式を指定します。

offset 任意の数値式を指定できます。

pad 任意の数値式を指定できます。

padsize 1、 2、 または 4 を指定できます。

演算

現在の位置は、 以下の形式の次の 下位アドレスで整列されます。

offset + n * expr

n は、 アセンブラがパディングを 小限に抑えるために選択する任意の整数です。

expr が指定されていない場合、 ALIGN によって現在の位置に次のワード (4 バイ ト ) 境

界が設定されます。 以前の位置と現在の新しい位置との間にある未使用の空間は、以下で埋めらます。

• pad が指定されている場合は pad のコピー

• 以下すべての条件が満たされている場合は NOP 命令

— pad は指定されていません。

— ALIGN ディ レクティブは、 ARM または Thumb 命令に従います。

— 現在のセクシ ョ ンには、AREA ディ レクティブに設定された CODEALIGN 属性が

あ り ます。

• それ以外の場合はゼロ

pad は、 padsize の値に応じて、 バイ ト 、 ハーフワード、 またはワード と して処理され

ます。 padsize が指定されていない場合、 pad は、 デフォルトでデータセクシ ョ ンのバ

イ ト 、 Thumb コードのハーフワード、 ARM コードのワードにな り ます。

使用法

ALIGN を使用して、 データ と コードを適切な境界で整列させます。 このディ レクティ

ブは、 一般的に以下の状況で必要とな り ます。

• ADR Thumb 疑似命令は、 ワード境界で整列されたアドレスしかロードできませ

んが、 Thumb コード内のラベルはワード境界で整列されていない場合があ り ま

す。 ALIGN 4 を使用して、 Thumb コード内のアドレスを 4 バイ ト境界に整列させ

るこ とができます。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 6-69ID 0 8 1 7 1 1 Non-Confidential

Page 376: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ディ レクテ ィブリファレンス

• ALIGN を使用する と、 一部の ARM プロセッサに搭載されているキャ ッシュを利

用するこ とができます。 例えば、 ARM940T には、 16 バイ トのラインから構成

れるキャ ッシュがあ り ます。 このよ う な場合は、 ALIGN 16 を使用して、 関数エン

ト リ を 16 バイ ト境界で整列させてキャ ッシュの効果を 大限に高めるこ とがで

きます。

• LDRD および STRD のダブルワードデータ転送命令は、 8 バイ ト境界で整列させる

必要があ り ます。 LDRD または STRD を使用してデータにアクセスする場合は、 DCQ などのメモ リ割り当てディ レクティブの前に ALIGN 8 を使用します。

• ラベルだけの行は任意の境界で整列されます。 それに続く ARM コードはワー

ド境界で整列されます (Thumb コードはハーフワード境界で整列されま)。 そ

のため、 このラベルではコードが正し くアドレス指定されません。 このよ う な場合は、 ラベルの前に ALIGN 4 (Thumb の場合は ALIGN 2) を使用します。

アライン メン トは、 ルーチンが配置される ELF セクシ ョ ンの開始位置から相対的に

行われます。 ELF セクシ ョ ンは、 同じ境界またはそれよ り も粗い界で整列させる必

要があ り ます。 AREA ディ レクティブの ALIGN 属性は異なる方法で指定されます。

AREA cacheable, CODE, ALIGN=3rout1 ; コ ー ド ; 8 バイ ト境界で整列

; コ ー ド

MOV pc,lr ; 4 バイ ト境界でのみ整列

ALIGN 8 ; 8 バイ ト境界で整列

rout2 ; コ ー ド

以下の例では、 ALIGN ディ レクティブがアセンブラに、 次の命令はワード境界で整列

され、 3 バイ トでオフセッ ト されるこ とを伝えます。 3 バイ トのオフセッ トは前のー

ド境界で整列されているアドレスから計算されるので、 2 番目の DCB は同じワードの

後のバイ トに配置され、 2 バイ トのパディングが追加されるこ とにな り ます。

AREA OffsetExample, CODE DCB 1 ; こ の例では、 2 つのバイ ト を同じ ワー ド の

ALIGN 4,3 ; 先頭バイ ト と 4 バイ ト目に配置。

DCB 1 ; 2 つ目の DCB は 1 つ目の DCB か ら 3 バイ ト のオ フ セ ッ ト

以下の例では、 ALIGN ディ レクティブがアセンブラに、 次の命令はワード境界で整列

され、 2 バイ トでオフセッ ト されるこ とを伝えます。 この例では、 2 バイ トのオフッ

トは次のワード境界で整列されるアドレスから計算されるので、 値 n は 1 に設定され

ます (n=0 が 3 つ目の DCB と競合)。 この場合は、 3 バイ トのパディングが追加されま

す。

AREA OffsetExample1, CODEDCB 1 ; こ の例では、 3 つ目の DCB と競合するため

DCB 1 ; n をゼロ にはできない。 アセン ブ ラ に よ っ て n は 1 に設定されるDCB 1ALIGN 4,2 ; 次の命令はワード境界で整列され、 2 でオ フ セ ッ ト される。DCB 2

次の例では、 DCB ディ レクティブによる PC のアライン メン トが不適切にな り ます。

ALIGN ディ レクティブは、 ラベル subroutine1 とそれに続く命令がワード境界に整列さ

れるよ うにします。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 6-70ID 0 8 1 7 1 1 Non-Confidential

Page 377: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ディ レクテ ィブリファレンス

AREA Example, CODE, READONLYstart LDR r6,=label1 ; コ ー ド MOV pc,lrlabel1 DCB 1 ; PC のア ラ イ ン メ ン トが不適切

ALIGN ; subroutine1 にsubroutine1 ; 次の命令を参照させる MOV r5,#0x5

関連項目

参照 : • データ定義ディ レクティブ (6-18 ページ)

• AREA (6-72 ページ)

• 例 (6-70 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 6-71ID 0 8 1 7 1 1 Non-Confidential

Page 378: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ディ レクテ ィブリファレンス

6.8.3 AREA

AREA ディ レクティブは、 新しいコードセクシ ョ ンまたはデータセクシ ョ ンをアセン

ブルするよ う アセンブラに指示します。 これらのセクシ ョ ンは、 リ ンカによって操作される、 名前付きで独立した分割不可能なコードまたはデータのかたま りです。

構文

AREA sectionname{,attr}{,attr}...

各パラ メータには以下の意味があ り ます。

sectionname セクシ ョ ンに割り当てる名前を指定します。

セクシ ョ ンには任意の名前を指定できます。 ただし、 アルファベッ ト以外の文字で始まる名前は縦棒で囲む必要があ り ます。 これに反する と、 セクシ ョ ン名エラーが生成されます。 例えば、|1_DataArea| のよ うに記述します。

定型の名前は従来どおりです。 例えば、 |.text| は、 C コンパイラ

によって生成されるコードセクシ ョ ン、 または C ラ イブラ リに関

連付けられたコードセクシ ョ ンに使用されます。

attr 1 つ以上のセクシ ョ ン属性をコンマで区切って指定します。 有効

な属性は以下のとおりです。

ALIGN=expression

デフォルトでは、 ELF セクシ ョ ンは 4 バイ ト境界で整列

されます。 expression には 0 ~ 31 の任意の整数値を指定

できます。 このセクシ ョ ンは 2expression バイ ト境界で整列

されます。 例えば、 expression に 10 が指定されている場

合、 このセクシ ョ ンは 1KB 境界で整列されます。

これは、 ALIGN ディ レクティブの指定方法とは異なり ま

す。

注 ARM コードセクシ ョ ンには ALIGN=0 または ALIGN=1 を使

用しないで下さい。

Thumb コードセクシ ョ ンには ALIGN=0 を使用しないで下

さい。

ASSOC=section

section には、 関連する ELF セクシ ョ ンを指定します。

sectionname は、 section を含むすべてのリ ンクに含まれて

いる必要があ り ます。

CODE マシン命令を保持します。 READONLY がデフォルトです。

CODEALIGN

ALIGN ディ レクティブが異なるパディングを指定しない

限り、 セクシ ョ ン内の ALIGN ディ レクティブが ARM または Thumb 命令後に使用される際に、 アセンブラに

よって NOP 命令が挿入されます。

COMDEF 共通セクシ ョ ンの定義です。 この ELF セクシ ョ ンは、

コードまたはデータを保持できます。 このセクシ ョ ンは、 他のソースファ イル内にある同じ前の付いた他のセクシ ョ ンと同じである必要があ り ます。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 6-72ID 0 8 1 7 1 1 Non-Confidential

Page 379: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ディ レクテ ィブリファレンス

同じ名前の付いた同一の ELF セクシ ョ ンは、 リ ンカに

よって同じ メモ リセクシ ョ ンにオーバーレイ されます。これらのセクシ ョ ンが異なっている、 リ ンカによって警告メ ッセージが生成され、 セクシ ョ ンのオーバーレイは行われません。

COMGROUP=symbol_name

名前付きの ELF セクシ ョ ングループの AREA の部分とな

る署名を指定します。 詳細については、GROUP=symbol_name を参照して下さい。 COMGROUP 属性は、

ELF セクシ ョ ングループを GRP_COMDAT フラグでマークし

ます。

COMMON 共通データセクシ ョ ンです。 このセクシ ョ ン内ではコー

ドまたはデータは定義できません。 このセクシ ョ ンは、リ ンカによってゼロに初期化れます。 同じ名前の付いたすべての共通セクシ ョ ンは、 リ ンカによって同じ メモ リセクシ ョ ンにオーバーレイされます。 すべてのセクシ ョンが同じサイズである必要はあ り ません。 リ ンカは、 同じ名前の付いたセクシ ョ ンのうち も大きな共通セクシ ョ ンに必要と されるだけの空間を割り当てます。

DATA 命令ではなくデータを保持します。 READWRITE がデフォル

トです。

FINI_ARRAY

現在の領域の ELF 型を SHT_FINI_ARRAY に設定します。

GROUP=symbol_name

名前付きの ELF セクシ ョ ングループの AREA の部分とな

る署名を指定します。 ソースファ イル、 またはソースファ イルによってインクルード されるファ イルによって定義される必要があ り ます。 同じ symbol_name 署名のす

べての AREAS は、 同じグループの部分になり ます。 グ

ループ内のセクシ ョ ンは、 一緒に保持または破棄されます。

INIT_ARRAY

現在の領域の ELF 型を SHT_INIT_ARRAY に設定します。

LINKORDER=section

イ メージ内での現在のセクシ ョ ンの相対的な位置を指定します。 その結果、 LINKORDER 属性を備えるセクシ ョ ンす

べての順序が、 互いに関してイ メージ内で対応する名前付き sections の順序と同じになり ます。

MERGE=n リ ンカが現在のセクシ ョ ンを MERGE=n 属性を備えた他の

セクシ ョ ンとマージできるこ とを示します。 n はセク

シ ョ ン内の要素のサイズです。 例えば、 文字の場合には n は 1 です。 この属性があっても リ ンカはセクシ ョ ンの

マージを強制されないので、 必ずしもセクシ ョ ンがマージされる とは限り ません。

NOALLOC ターゲッ ト システム上のメモ リがこのエリ アに割り当て

られないこ とを示します。

NOINIT データセクシ ョ ンが初期化されていないか、 またはゼロ

に初期化されているこ とを示します。 この属性に含まれるのは、 空間予約ディ レクティブ SPACE か、 初期値がゼ

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 6-73ID 0 8 1 7 1 1 Non-Confidential

Page 380: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ディ レクテ ィブリファレンス

ロに設定された DCB、 DCD、 DCDU、 DCQ、 DCQU、 DCW、 または DCWU ディ レクティブだけです。 エ リ アを初期化しない

か、 またはゼロで初期化するかはリ ンク時に決めるこ とができます。

PREINIT_ARRAY

現在の領域の ELF 型を SHT_PREINIT_ARRAY に設定します。

READONLY このセクシ ョ ンへの書き込みが禁止されているこ とを示

します。 コードエ リ アの場合はこれがデフォルトです。

READWRITE このセクシ ョ ンに対する読み出し と書き込みが可能なこ

とを示します。 データエ リ アの場合はこれがデフォルトです。

SECFLAGS=n

現在のセクシ ョ ンに ELF フラグを 1 つ以上 (n で指定さ

れます) 追加します。

SECTYPE=n

現在のセクシ ョ ンの ELF 型を n に設定します。

STRINGS 現在のセクシ ョ ンに SHF_STRINGS フラグを追加します。

STRINGS 属性を使用するには、 MERGE=1 属性も使用する必

要があ り ます。 セクシ ョ ンのコンテンツは、 DCB ディ レ

クティブを使用して NULL で終わる文字列である必要が

あ り ます。

使用法

AREA ディ レクティブを使用して、 ソースファ イルを複数の ELF セクシ ョ ンに分割し

ます。 複数の AREA ディ レクティブで同じ名前を使用できます。 同じ名前の付いたエ

リ アはすべて、 同じ ELF セクシ ョ ンに配置されます。 特定の名前の付いた 初の AREA ディ レクティブの属性だけが適用されます。

通常、 コード とデータには別々の ELF セクシ ョ ンを使用する必要があ り ます。 ただ

し、 コードセクシ ョ ンにはデータを配置するこ とができます。 きなプログラムは、扱いやすいよ うに複数のコードセクシ ョ ンに分割できます。 また、 大きな独立データセッ ト も別々のセクシ ョ ンに配置するのが適切です。

ローカルラベルの有効範囲は、AREA ディ レクティブによって定義され、必要に応じて ROUT ディ レクティブによって分割されます。

アセンブ リには少なく と も 1 つの AREA ディ レクティブが必要です。

注 ディ レクティブが PC 相対の式を使用していて、 PREINIT_ARRAY、 FINI_ARRAY、 または INIT_ARRAY ELF セクシ ョ ン内にある場合、 アセンブラは DCD および DCDU ディ レクティ

ブの R_ARM_TARGET1 再配置を生成します。 各 DCD または DCDU ディ レクティブの後で RELOC ディ レクティブを使用して、 再配置をオーバーライ ドできます。 この再配置を

使用する場合、 読み出し / 書き込みセクシ ョ ンは、 プラ ッ ト フォー ABI が許可すれ

ば、 リ ンク時に読み出し専用セクシ ョ ンにな り ます。

以下の例では、 Example という名前の読み出し専用のコードセクシ ョ ンを定義します。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 6-74ID 0 8 1 7 1 1 Non-Confidential

Page 381: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ディ レクテ ィブリファレンス

AREA Example,CODE,READONLY ; コ ー ドセ ク シ ョ ンの例

; コ ー ド

関連項目

概念 :

『アセンブラの使用』 :

• ELF セクシ ョ ンと AREA ディ レクティブ (4-5 ページ) .

概念 :

『 リ ンカの使用』 :

• 第 4 章 イ メージの構造と生成 .

参照 : • ALIGN (6-69 ページ)

• RELOC (6-10 ページ)

• DCD、 DCDU (6-25 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 6-75ID 0 8 1 7 1 1 Non-Confidential

Page 382: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ディ レクテ ィブリファレンス

6.8.4 ATTR

ATTR セッ トディ レクティブは、 ABI ビルド属性の値を設定します。

ATTR スコープディ レクティブは、 設定値の適用先の有効範囲を指定します。

構文

ATTR FILESCOPE

ATTR SCOPE name

ATTR settype tagid, value

各パラ メータには以下の意味があ り ます。

name セクシ ョ ン名またはシンボル名を指定します。

settype 次のいずれかを指定できます。

• SETVALUE

• SETSTRING

• SETCOMPATIBLEWITHVALUE

• SETCOMPATIBLEWITHSTRING

tagid 属性タグ名 (またはその数値) を指定します。 これは、 ARM アーキテ

クチャの ABI で定義されます。

value settype に依存します。

• 32 ビッ ト整数値 (settype が SETVALUE または SETCOMPATIBLEWITHVALUE の場合)

• NULL 終端文字列 (settype が SETSTRING または SETCOMPATIBLEWITHSTRING の場合)

使用法

ATTR FILESCOPE ディ レクティブに続く ATTR 設定ディ レクティブは、 オブジェク ト ファ

イル全体に適用されます。 ATTR SCOPE name ディ レクティブに続く ATTR セッ トディ レク

ティブは、 名前付きセクシ ョ ンまたはシンボルだけに適用されます。

整数が必要なタグの場合、 SETVALUE または SETCOMPATIBLEWITHVALUE を使用する必要があ

り ます。 文字列が来るこ とになっているタグの場合、 SETSTRING または SETCOMPATIBLEWITHSTRING を使用する必要があ り ます。

SETCOMPATIBLEWITHVALUE と SETCOMPATIBLEWITHSTRING を使用して、 オブジェク ト ファ イル

も互換性を備えるタグ値を設定します。

ATTR SETSTRING Tag_CPU_raw_name, "Cortex-A8"ATTR SETVALUE Tag_VFP_arch, 3 ; VFPv3 命令は使用可能

ATTR SETVALUE 10, 3 ; 10 は; Tag_VFP_arch の数値

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 6-76ID 0 8 1 7 1 1 Non-Confidential

Page 383: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ディ レクテ ィブリファレンス

関連項目

リ ファレンス

• 『Addenda to, and Errata in, the ABI for the ARM Architecture』、http://infocenter.arm.com/help/topic/com.arm.doc.ihi0045-/index.html

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 6-77ID 0 8 1 7 1 1 Non-Confidential

Page 384: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ディ レクテ ィブリファレンス

6.8.5 END

END ディ レクティブは、 ソースファ イルの終わりに到達したこ とをアセンブラに通知

します。

構文

END

使用法

すべてのアセンブリ言語のソースファ イルは、 END ディ レクティブが単独で記述され

た行で終了する必要があ り ます。

GET ディ レクティブによってソースファ イルがペアレン ト ファ イルにインクルード さ

れている場合、 アセンブラはペアレン ト ファ イルに戻り、 GET ディ レクティブの次の

行からアセンブルを継続します。

ト ップレベルのソースファ イル内で、 エラーが発生するこ とな く第 1 パスで END に到

達する と、 第 2 パスが開始されます。

ト ップレベルのソースファ イル内で、 第 2 パスで END に到達する と、 アセンブラはア

センブ リ を終了して適切な出力を行います。

関連項目

参照 : • GET、 INCLUDE (6-83 ページ) .

6.8.6 ENTRY

ENTRY ディ レクティブは、 プログラムへのエン ト リ ポイン ト を宣言します。

構文

ENTRY

使用法

プログラムには少なく と も 1 つの ENTRY ポイン ト を指定する必要があ り ます。ENTRY が存在しない場合は、 リ ンク時に警告メ ッセージが生成されます。

1 つのソースファ イル内で複数の ENTRY ディ レクティブを使用するこ とはできません。

また、 すべてのソースファ イル内に ENTRY ディ レクティブを指定する必要があるわけ

ではあ り ません。 1 つのソースファ イル内に複数の ENTRY が存在する と、 アセンブリ

時にエラーメ ッセージが生成されます。

AREA ARMex, CODE, READONLY ENTRY ; ア プ リ ケーシ ョ ンのエ ン ト リ ポ イ ン ト

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 6-78ID 0 8 1 7 1 1 Non-Confidential

Page 385: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ディ レクテ ィブリファレンス

6.8.7 EQU

EQU ディ レクティブは、 数値定数、 レジスタ相対値、 または PC 相対値にシンボル名

を割り当てます。 * は EQU と同じ意味です。

構文

name EQU expr{, type}

各パラ メータには以下の意味があ り ます。

name 値に割り当てるシンボル名を指定します。

expr レジスタ相対アドレス、 PC 相対アドレス、 絶対アドレス、 または 32 ビッ ト整数定数のいずれかを指定します。

type オプシ ョ ンです。 type には、 以下のいずれかを指定できます。

• ARM

• THUMB

• CODE32

• CODE16

• DATA

type は、 expr が絶対アドレスの場合にのみ使用できます。 name がエクス

ポート される場合、 オブジェク ト ファ イル内のシンボルテーブルに含まれる name エン ト リは、 type に指定されている値に基づいて ARM、 THUMB、

CODE32、 CODE16、 または DATA のいずれかと してマーク されます。 この情報

はリ ンカによって使用されます。

使用法

EQU を使用して定数を定義します。 これは、 C 言語で #define を使用して定数を定義す

る方法と似ています。

abc EQU 2 ; 値 2 をシンボル abc に割り当てる。

xyz EQU label+8 ; ア ド レ ス (label+8) を

; シンボル xyz に割り当てる。

fiq EQU 0x1C, CODE32 ; 絶対ア ド レ ス 0x1C を ; シンボル fiq に割り当て、 コ ー ド と し て マー クする。

関連項目

参照 : • KEEP (6-87 ページ)

• EXPORT、 GLOBAL (6-80 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 6-79ID 0 8 1 7 1 1 Non-Confidential

Page 386: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ディ レクテ ィブリファレンス

6.8.8 EXPORT、 GLOBAL

EXPORT ディ レクティブは、 個別のオブジェク ト ファ イルと ラ イブラ リ ファ イルに含ま

れるシンボルへの参照を解決するためにリ ンカが使用できるシンボルを宣言します。GLOBAL は EXPORT と同じ意味です。

構文

EXPORT {[WEAK]}

EXPORT symbol {[SIZE=n]}

EXPORT symbol {[type{,set}]}

EXPORT symbol [attr{,type{,set}}{,SIZE=n}]

EXPORT symbol [WEAK{,attr}{,type{,set}}{,SIZE=n}]

各パラ メータには以下の意味があ り ます。

symbol エクスポートするシンボル名を指定します。 シンボル名では大文字と小

文字が区別されます。 symbol が省略されている場合は、 すべてのシンボ

ルがエクスポート されます。

WEAK 他のソースによって別の symbol がエクスポート されない場合にのみ、

symbol は他のソースにインポート されます。 symbol を指定せずに [WEAK] を指定する と、 エクスポート されるすべてのシンボルが WEAK になり

ます。

attr 次のいずれかを指定できます。

DYNAMIC ELF シンボルの可視性を STV_DEFAULT に設定します。

PROTECTED ELF シンボルの可視性を STV_PROTECTED に設定します。

HIDDEN ELF シンボルの可視性を STV_HIDDEN に設定します。

INTERNAL ELF シンボルの可視性を STV_INTERNAL に設定します。

type シンボル型を指定します。

DATA ソースがアセンブルされリ ンク される と、 symbol はデータ と し

て扱われます。

CODE ソースがアセンブルされリ ンク される と、 symbol はコード と し

て扱われます。

ELFTYPE=n n の値に従って、 symbol は特定の ELF シンボルと して扱われま

す。 ただし、 n は 0 ~ 15 の任意の値を取り ます。

指定されない場合、 アセンブラは 適な type を選択します。 通常はアセ

ンブラによって適切な型が選択されるので、 type を指定する必要はあ り

ません。

set 命令セッ ト を指定します。

ARM symbol は ARM シンボルと して処理されます。

THUMB symbol は Thumb シンボルと して処理されます。

指定されない場合、 アセンブラは 適なセッ ト を選択します。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 6-80ID 0 8 1 7 1 1 Non-Confidential

Page 387: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ディ レクテ ィブリファレンス

n 32 ビッ ト値でサイズを指定します。 SIZE 属性が指定されていない場合、

アセンブラはサイズを次のよ うに計算します。

• PROC および FUNCTION シンボルの場合、 サイズは ENDP または ENDFUNC までのコードのサイズに設定されます。

• その他のシンボルの場合、 サイズは同じソース行の命令またはデータのサイズになり ます。 命令またはデータがない場合、 サイズはゼロです。

使用法

EXPORT を使用して、 他のファイルのコードが現在のファイルのシンボルにアクセスで

きるよ うにします。

[WEAK] 属性を使用して、 symbol の別のインスタンスが別のソースに存在する場合は、

そのインスタンスがこのインスタンスに優先されるこ とを リ ンカに通知します。[WEAK] 属性は、 任意のシンボル可視性属性と共に使用できます。

AREA Example,CODE,READONLY EXPORT DoAdd ; 外部モジ ュ ールで

; 使用される

; 関数名を エ ク スポー トするDoAdd ADD r0,r0,r1

エクスポートが重複する場合、 シンボル可視性はオーバーライ ド されるこ とがあ ります。 以下の例では、 後の EXPORT のバインド と可視性が優先されます。

EXPORT SymA[WEAK] ; 非表示の weak シンボル と し て エ ク スポー トする

EXPORT SymA[DYNAMIC] ; SymA はダ イ ナ ミ ッ ク な非 weak シンボルになる

以下に、 SIZE 属性の使用例を示します。

EXPORT symA [SIZE=4]EXPORT symA [DATA, SIZE=4]

関連項目

リ ファレンス : • IMPORT、 EXTERN (6-84 ページ) .

• ELF for the ARM Architecture ABI、 http://infocenter/help/topic/com.arm.doc.ihi0044-/index.html.

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 6-81ID 0 8 1 7 1 1 Non-Confidential

Page 388: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ディ レクテ ィブリファレンス

6.8.9 EXPORTAS

EXPORTAS ディ レクティブを使用する と、 ソースファ イル内の別のシンボルに対応する

シンボルをオブジェク ト ファ イルにエクスポートできます。

構文

EXPORTAS symbol1, symbol2

各パラ メータには以下の意味があ り ます。

symbol1 ソースファ イル内のシンボルの名前を指定します。 symbol1 は事前に定義

されている必要があ り ます。 この名前には、 エ リ ア名、 ラベル、 または定数を含むシンボルを指定できます。

symbol2 オブジェク ト ファ イルで使用するシンボルの名前を指定します。

シンボル名では大文字と小文字が区別されます。

使用法

EXPORTAS を使用する と、 ソースファ イル内の各インスタンスを変更するこ とな く、 オ

ブジェク ト ファ イル内のシンボルを変更するこ とができます。

AREA data1, DATA ; 新しい領域 data1 を開始する

AREA data2, DATA ; 新しい領域 data2 を開始する

EXPORTAS data2, data1 ; data2 と い う セ ク シ ョ ンシンボルは、

; オ ブジ ェ ク ト フ ァ イ ルのス ト リ ン グ テーブルに data1 と し て表示されるone EQU 2 EXPORTAS one, two EXPORT one ; シンボル "two" は、

; オ ブジ ェ ク ト フ ァ イ ルのシンボルテーブルに値 2 のシンボル と し て表示され

関連項目

参照 : • EXPORT、 GLOBAL (6-80 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 6-82ID 0 8 1 7 1 1 Non-Confidential

Page 389: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ディ レクテ ィブリファレンス

6.8.10 GET、 INCLUDE

GET ディ レクティブは、 アセンブル中のファ イル内に別のファイルをインクルード し

ます。 インクルード されるファ イルは、 GET ディ レクティブの位置でアセンブルされ

ます。 INCLUDE は GET と同じ意味です。

構文

GET filename

各パラ メータには以下の意味があ り ます。

filename アセンブ リ時にインクルード されるファ イルの名前を指定します。 アセ

ンブラは UNIX 形式または MS-DOS 形式のパス名を認識します。

使用法

GET は、 アセンブ リ時にマクロ定義、 EQU、 および記憶域マップをインクルードするの

に便利です。 インクルード されたファ イルのアセンブルが完了する と、 アセンブラは GET ディ レクティブの次の行からアセンブルを継続します。

デフォルトでは、 アセンブラは、 現在の場所でインクルード されるファ イルを検索します。 現在の場所とは、 呼び出し元のファ イルが存在するディ レク ト リ を指します。 検索パスにディ レク ト リ を追加するには、 アセンブラの -i コマンド ラ インオプ

シ ョ ンを使用します。 スペースを含むファ イル名およびディ レク ト リ名を二重引用符 (" ") で囲まないで下さい。

インクルード されるファ イル内で別の GET ディ レクティブを使用して、 他のファイル

をインクルードできます。

インクルード されるファ イルが現在の場所とは異なるディ レク ト リにある場合は、インクルード されるファ イルの終わり まで、 そのディ レク ト リ現在の場所とな り ます。 その後、 前の場所が復元されます。

GET を使用してオブジェク ト ファ イルをインクルードするこ とはできません。

AREA Example, CODE, READONLY GET file1.s ; file1 が現在の場所にある場合に

; イ ン ク ルー ドする

GET c:\project\file2.s ; file2 を イ ン ク ルー ドする

GET c:\Program files\file3.s ; スペースは使用可能

関連項目

参照 : • INCBIN (6-86 ページ)

• ネスティングディ レクティブ (6-34 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 6-83ID 0 8 1 7 1 1 Non-Confidential

Page 390: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ディ レクテ ィブリファレンス

6.8.11 IMPORT、 EXTERN

これらのディ レクティブは、 現在のアセンブ リに定義されていない名前をアセンブラに渡します。

構文

directive symbol {[SIZE=n]}

directive symbol {[type]}

directive symbol [attr{,type}{,SIZE=n}]

directive symbol [WEAK{,attr}{,type}{,SIZE=n}]

各パラ メータには以下の意味があ り ます。

directive 次のいずれかを指定できます。

IMPORT シンボルを無条件にインポート します。

EXTERN シンボルが現在のアセンブリで参照される場合にのみ、 イン

ポート します。

symbol 別々にアセンブルされたソースファ イル、 オブジェク ト ファ イル、 また

はライブラ リ内で定義されているシンボルの名前を指定します。 シンボルでは大文字と小文字が区別されます。

WEAK シンボルがどこにも定義されていない場合に、 リ ンカによってエラー

メ ッセージが生成されるのを回避します。 また、 このオプシ ョ ンを指定する、 リ ンカはインクルード されていないライブラ リの検索も行いません。

attr 次のいずれかを指定できます。

DYNAMIC ELF シンボルの可視性を STV_DEFAULT に設定します。

PROTECTED ELF シンボルの可視性を STV_PROTECTED に設定します。

HIDDEN ELF シンボルの可視性を STV_HIDDEN に設定します。

INTERNAL ELF シンボルの可視性を STV_INTERNAL に設定します。

type シンボル型を指定します。

DATA ソースがアセンブルされリ ンク される と、 symbol はデータ と し

て扱われます。

CODE ソースがアセンブルされリ ンク される と、 symbol はコード と し

て扱われます。

ELFTYPE=n n の値に従って、 symbol は特定の ELF シンボルと して扱われま

す。 ただし、 n は 0 ~ 15 の任意の値を取り ます。

指定されない場合、 リ ンカは 適な型を選択します。

n 32 ビッ ト値でサイズを指定します。 SIZE 属性が指定されていない場合、

アセンブラはサイズを次のよ うに計算します。

• PROC および FUNCTION シンボルの場合、 サイズは ENDP または ENDFUNC までのコードのサイズに設定されます。

• その他のシンボルの場合、 サイズは同じソース行の命令またはデータのサイズになり ます。 命令またはデータがない場合、 サイズはゼロです。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 6-84ID 0 8 1 7 1 1 Non-Confidential

Page 391: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ディ レクテ ィブリファレンス

使用法

別のオブジェク ト ファ イル内で定義されたシンボルへのリ ンク時に、 シンボル名が解決されます。 このシンボルはプログラムのアドレス と して処されます。 [WEAK] が指

定されていない場合、 対応するシンボルがリ ンク時に検出されないと、 リ ンカによってエラーが生成されます。

[WEAK] が指定されており、 対応するシンボルがリ ンク時に検出されない場合は、 以下

のよ うにな り ます。

• 参照が B 命令または BL 命令のデスティネーシ ョ ンである場合、 シンボルの値が

次の命令のアドレス と して使用されます。 したがって、 この B 命令または BL 命令は NOP とな り ます。

• それ以外の場合、 シンボルの値はゼロ と見なされます。

この例では、 C++ ライブラ リが リ ンク されていて、 演算結果に基づいて条件分岐が

発生するかど うかを確認しています。

AREA Example, CODE, READONLY EXTERN __CPP_INITIALIZE[WEAK] ; C++ ラ イ ブ ラ リ が リ ン ク されている場合、

; __CPP_INITIALIZE 関数のア ド レ ス を取得する

LDR r0,=__CPP_INITIALIZE ; リ ン ク されていない場合、 ア ド レ スはゼロ になる

CMP r0,#0 ; ゼロかど う かを確認する

BEQ nocplusplus ; 演算結果に基づいて分岐する

以下に、 SIZE 属性の使用例を示します。

EXTERN symA [SIZE=4]EXTERN symA [DATA, SIZE=4]

関連項目

参照

• ELF for the ARM Architecture、 http://infocenter.arm.com/help/topic/com.arm.doc.ihi0044-/index.html.

• EXPORT、 GLOBAL (6-80 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 6-85ID 0 8 1 7 1 1 Non-Confidential

Page 392: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ディ レクテ ィブリファレンス

6.8.12 INCBIN

INCBIN ディ レクティブは、 アセンブル中のファ イル内に別のファイルをインクルード

します。 このファ イルはアセンブルされずにそのままインクルード されます。

構文

INCBIN filename

各パラ メータには以下の意味があ り ます。

filename アセンブ リ時にインクルード されるファ イルの名前を指定します。 アセ

ンブラは UNIX 形式または MS-DOS 形式のパス名を認識します。

使用法

INCBIN を使用して、 実行可能ファ イル、 リ テラル、 または任意のデータをインクルー

ドできます。 ファ イルの内容は、 解釈されるこ とな く、 現在の ELF クシ ョ ンにバイ

ト単位で追加されます。 アセンブルは、 INCBIN ディ レクティブの次の行から継続され

ます。

デフォルトでは、 アセンブラは、 現在の場所でインクルード されるファ イルを検索します。 現在の場所とは、 呼び出し元のファ イルが存在するディ レク ト リ を指します。 検索パスにディ レク ト リ を追加するには、 アセンブラの -i コマンド ラ インオプ

シ ョ ンを使用します。 スペースを含むファ イル名およびディ レク ト リ名を二重引用符 (" ") で囲まないで下さい。

AREA Example, CODE, READONLY INCBIN file1.dat ; file1 が ; 現在の場所にある場合に

; イ ン ク ルー ドする

INCBIN c:\project\file2.txt ; file2 を イ ン ク ルー ドする

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 6-86ID 0 8 1 7 1 1 Non-Confidential

Page 393: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ディ レクテ ィブリファレンス

6.8.13 KEEP

KEEP ディ レクティブは、 オブジェク ト ファ イル内のシンボルテーブルにローカルシ

ンボルを保持しておく よ う アセンブラに指示します。

構文

KEEP {symbol}

各パラ メータには以下の意味があ り ます。

symbol 保持するローカルシンボルの名前を指定します。 symbol が指定されてい

ない場合は、 レジスタ相対シンボルを除くすべてのローカルシンボルが保持されます。

使用法

デフォルトでは、 アセンブラによって出力されるオブジェク ト ファ イル内に記述されるシンボルは以下のシンボルのみです。

• エクスポート されるシンボル

• 再配置されるシンボル

KEEP を使用して、 デバッグに使用できるローカルシンボルを保持します。 保持され

たシンボルは、 ARM デバッガおよびリ ンカマップファ イルに出力さます。

KEEP では、 レジスタ相対シンボルを保持できません。

label ADC r2,r3,r4 KEEP label ; ラ ベルをデバ ッ ガで使用でき る よ う にする ADD r2,r2,r5

関連項目

参照 : • MAP (6-20 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 6-87ID 0 8 1 7 1 1 Non-Confidential

Page 394: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ディ レクテ ィブリファレンス

6.8.14 NOFP

NOFP ディ レクティブは、 アセンブリ言語ソースファ イル内の浮動小数点命令を禁止

します。

構文

NOFP

使用法

NOFP を使用して、 ソフ ト ウェアまたはターゲッ トハード ウェアで浮動小数点命令が

サポート されていない場合などに、 浮動小数点命令が使用されるこ とを防ぎます。

NOFP ディ レクティブよ り後に浮動小数点命令が出現する と、 " 不明なオペ コ ー ド " エラー

が生成され、 アセンブルに失敗します。

浮動小数点命令よ り後に NOFP ディ レクティブが検出される と、 アセンブラによって

以下のエラーが生成されます。

浮動小数点数命令を禁止するには遅すぎます

アセンブルに失敗します。

6.8.15 REQUIRE

REQUIRE ディ レクティブは、 セクシ ョ ン間の依存関係を指定します。

構文

REQUIRE label

各パラ メータには以下の意味があ り ます。

label 必要なラベルの名前を指定します。

使用法

REQUIRE を使用する と、 関連するセクシ ョ ンが直接呼び出されない場合でも、 そのセ

クシ ョ ンをインクルードするこ とができます。 REQUIRE ディ レクティブを含むセク

シ ョ ンが リ ンクにインクルード される場合、 リ ンカは、 指定されたラベルの定義を含むセクシ ョ ンも インクルード します。

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 6-88ID 0 8 1 7 1 1 Non-Confidential

Page 395: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ディ レクテ ィブリファレンス

6.8.16 REQUIRE8、 PRESERVE8

REQUIRE8 ディ レクティブは、 現在のファ イルに 8 バイ ト境界でアライン メン ト された

スタ ッ クが必要であるこ とを指定します。 このディ レクティブは、 このこ とを リ ンカに通知するために REQ8 ビルド属性を設定します。

PRESERVE8 ディ レクティブは、 現在のファ イルが 8 バイ ト境界でアライン メン ト され

たスタ ッ クを保持しているこ とを指定します。 このディ レクティブは、 このこ とをリ ンカに通知するために PRES8 ビルド属性を設定します。

リ ンカは、 8 バイ ト境界でアライン メン ト されたスタ ッ クを必要とするコードが、 8 バイ ト境界でアライン メン ト されたスタ ッ クを保持するコードによってのみ直接的または間接的に呼び出されるこ とをチェ ッ ク します。

構文

REQUIRE8 {bool}

PRESERVE8 {bool}

各パラ メータには以下の意味があ り ます。

bool 任意でブール定数 ({TRUE} または {FALSE}) を指定します。

使用法

8 バイ ト境界でアライン メン ト されたスタ ッ クをコードで保持する場合は、 必要に応

じて、 PRESERVE8 を使用してファ イルに PRES8 ビルド属性を設定します。 8 バイ ト境

界でアライン メン ト されたスタ ッ クをコードで保持しない場合は、 PRESERVE8 {FALSE} を使用して PRES8 ビルド属性が設定されないよ うにします。 ファ イル内に複数の REQUIRE8 ディ レクティブまたは PRESERVE8 ディ レクティブがある場合、 アセンブラは

後のディ レクティブの値を使用します。

注 PRESERVE8 と PRESERVE8 {FALSE} の両方を省略する と、 アセンブラは、 SP を変更する命

令を調べて、 PRES8 ビルド属性を設定するかど うかを決定します。 PRESERVE8 は明示

的に指定するこ とを推奨します。

以下のよ うに警告メ ッセージをイネーブルできます。

armasm --diag_warning 1546

警告メ ッセージをイネーブルする と、 以下のよ うな警告メ ッセージが表示されます。

"test.s"、 ラ イ ン 37 : 警告 : A1546W : ス タ ッ ク ポ イ ン タ の更新によ っ て、

8 バイ ト のス タ ッ ク のア ラ イ メ ン トが分断される可能性があ り ます 37 00000044 STMFD sp!,{r2,r3,lr}

REQUIRE8REQUIRE8 {TRUE} ; REQUIRE8 と等価

REQUIRE8 {FALSE} ; REQUIRE8 が指定されていない場合と等価

PRESERVE8 {TRUE} ; PRESERVE8 と等価

PRESERVE8 {FALSE} ; PRESERVE8 が指定されていない場合と完全に等価ではない

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 6-89ID 0 8 1 7 1 1 Non-Confidential

Page 396: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

ディ レクテ ィブリファレンス

関連項目

概念 : • 8 バイ ト境界のスタ ッ ク整列、 http://infocenter.arm.com/help/topic/com.arm.doc.faqs/ka4127.html

参照 : • アセンブラコマンド ラ インオプシ ョ ン (2-3 ページ) .

6.8.17 ROUT

ROUT ディ レクティブは、 ローカルラベルの有効範囲の境界をマークします。

構文

{name} ROUT

各パラ メータには以下の意味があ り ます。

name 有効範囲に割り当てる名前を指定します。

使用法

ROUT ディ レクティブを使用して、 ローカルラベルの有効範囲を制限します。 これに

よ り、 誤って違う ラベルが参照されるのを簡単に防ぐこ とができます。 ローカルラベルの有効範囲内に ROUT ディ レクティブが存在しない場合は、 ローカルラベルの有

効範囲はエリ ア全体とな り ます。

正しいローカルラベルへの参照が行われるよ うにするには、 name オプシ ョ ンを使用し

ます。 ラベルの名前またはラベルへの参照が、 その前の ROUT ディ レクティブに指定

されている名前と一致しない場合は、 アセンブラによってエラーメ ッセージが生成され、 アセンブルに失敗します。

; コ ー ド

routineA ROUT ; ROUT は必ずし もルーチ ンではない

; コ ー ド

3routineA ; コ ー ド ; こ の ラ ベルがチ ェ ッ ク される

; コ ー ド

BEQ %4routineA ; こ の参照がチ ェ ッ ク される

; コ ー ド

BGE %3 ; 上の 3 を参照するが、 チ ェ ッ ク されない

; コ ー ド

4routineA ; コ ー ド ; こ の ラ ベルがチ ェ ッ ク される

; コ ー ド

otherstuff ROUT ; 次の有効範囲の開始位置

関連項目

概念 :

『アセンブラの使用』 :

• ローカルラベル (8-12 ページ) .

参照 : • AREA (6-72 ページ) .

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. 6-90ID 0 8 1 7 1 1 Non-Confidential

Page 397: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

付録 A 『アセンブラリファレンス』 に対する改訂

『アセンブラ リ ファレンス』 に対して、 以下の技術的変更が加えられました。

表 A-1 発行 D と発行 E の相違点

変更点 関連する トピック

SC300 と SC000 を --compatible オプシ ョ ンの表に追加

しました。

--compatible=name (2-8 ページ)

表 A-2 発行 C と発行 D の相違点

変更点 関連する トピック

概要の表で、 次の命令ニーモニッ クが変更されました。

• VQRSHR から VQRSHR{U}N に変更

• VQSHR から VQSHR{U}N に変更

• VRSUBH から VRSUBHN に変更

• VSUBH から VSUBHN に変更

• VRADDH から VRADDHN に変更

表 4-1 (4-2 ページ)

例に、 GBLA count が追加されました。 WHILE、 WEND (6-42 ページ)

FPv4_SP を FPv4-SP に変更しました。 --fpu=name (2-16 ページ)

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. A-1ID 0 8 1 7 1 1 Non-Confidential

Page 398: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

『アセンブラリファレンス』 に対する改訂

ARM 用語集をその他の情報に追加しました。 第 1 章 表記規則とフ ィードバッ ク

MRS、 MSR、 SEV、 SYS、 NOP 命令の ALinknames を変更し

ました。

• MSR (3-138 ページ)

• MRS (3-139 ページ)

• SYS (3-140 ページ)

• SEV、 WFE、 WFI、 YIELD (3-155 ページ)

• NOP (3-154 ページ)

LDR 命令のページに、 メモ リ アクセス命令へのリ ン

クを追加しました。

メモ リ アクセス命令 (3-12 ページ)

表 A-3 発行 B と発行 C の相違点

変更点 関連する トピック

LDREXD と STREXD の場合のみ Rt に偶数番号を指

定する必要がある と制約を変更しました。

LDREX と STREX (3-44 ページ)

SP と PC が非推奨であるケースを追加しました。 • LDREX と STREX (3-44 ページ)

• ADD、 SUB、 RSB、 ADC、 SBC、 RSC(3-55 ページ)

• MOV、 MVN (3-67 ページ)

• B、 BL、 BX、 BLX、 BXJ (3-124 ページ)

• LDC、 LDC2、 STC、 STC2 (3-141 ページ)

ARM 命令での SP と PC の非推奨は、ARMv6T2 以降

のみであるこ とに言及しました。

多様な命令

MAP ディ レクティブと FIELD ディ レクティブの不

一致の例を追加しました。

FIELD (6-21 ページ)

ARM コンパイラツールチェーンと DS-5 を使用した

場合にオプシ ョ ンが不要なこ とを追記しました。

• --workdir=directory (2-28 ページ)

• --project=filename (2-23 ページ)

• --no_project (2-21 ページ)

• --reinitialize_workdir (2-25 ページ)

--cpu PXA270 を --device PXA270 に変更しました。 概要 (5-2 ページ)

表 A-4 発行 A と発行 B の相違点

変更点 関連する トピック

--cpu=name の説明を更新しました。 --cpu=name (2-9 ページ)

オプシ ョ ン --execstack を追加しました。 --execstack (2-14 ページ)

オプシ ョ ン --no_execstack を追加しました。 --no_execstack (2-20 ページ)

オプシ ョ ン --fpmode=none を追加しました。 --fpmode=model (2-15 ページ)

--show_cmdline の説明を更新しました。 --show_cmdline (2-25 ページ)

表 A-2 発行 C と発行 D の相違点 (続き)

変更点 関連する トピック

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. A-2ID 0 8 1 7 1 1 Non-Confidential

Page 399: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

『アセンブラリファレンス』 に対する改訂

ARMv7E-M 用に命令の概要の表と脚注を更新しま

した。

命令の概要 (3-2 ページ)

命令の概要の表と、 命令の説明のアーキテクチャのセクシ ョ ンで、 ARMv6-M、 ARMv7-M、 ARMv7-R、および ARMv7-A に言及する場合の " プロファイル " を " アーキテクチャ " に置換しました。

命令の概要 (3-2 ページ)

Operand2 の説明で、 レジスタ制御シフ トについて言

及しました。

シフ トが任意に実行されるレジスタ と しての Operand2 (3-51 ページ)

ADR (PC 相対) に対するレジスタの制約条件を追加

しました。

ADR (PC 相対) (3-28 ページ)

LDR および STR (イ ミディエートオフセッ ト ) で、 レ

ジスタの制約条件と非推奨情報を追加しました。

LDR と STR (イ ミディエートオフセッ ト )

(3-14 ページ)

LDR および STR (レジスタオフセッ ト ) で、 ARM 独自の命令構文を特定しました。

LDR と STR (レジスタオフセッ ト ) (3-17 ページ)

LDR および STR (レジスタオフセッ ト ) で、 レジスタ

の制約条件と非推奨情報、 SP の使用、 および PC の使用を追加しました。

LDR と STR (レジスタオフセッ ト ) (3-17 ページ)

PC 相対 STR が利用可能ではあるものの、 非推奨であ

るこ とを注記しました。

LDR (PC 相対) (3-22 ページ)

LDR (PC 相対) で、 非推奨と SP の使用についての情

報を追加しました。

LDR (PC 相対) (3-22 ページ)

ARM 命令の reglist の制約条件で、ARM LDM の PC と LR の両方を含む reglist は非推奨であるこ とを追加

しました。

LDM、 STM (3-34 ページ)

ARM 命令の reglist に関する制約条件を追加しまし

た。

PUSH および POP (3-37 ページ)

Rn のレジスタの制約条件を追加し、 このセクシ ョ ン

に "Rm に PC は指定できない " という記述を移動しま

した。

PLD、 PLDW、 PLI (3-32 ページ)

LDM および STM での reglist に関する制約条件を追加し

ました。

LDM、 STM (3-34 ページ)

構文内の各レジスタに "PC は指定できない " という

記述を追加しました。

SWP と SWPB (3-48 ページ)

「ARM 命令での PC の使用」 から SUBS pc, lr へのリ

ンクを追加しました。

ADD、 SUB、 RSB、 ADC、 SBC、 RSC (3-55 ページ)

ユーザモードまたはシステムモードで PC を Rd と し

て使用する場合の S 接尾文字の使用に対する注意を

削除しました。

ADD、 SUB、 RSB、 ADC、 SBC、 RSC (3-55 ページ)

PC を使用する非推奨の命令について言及しました。 ADD、 SUB、 RSB、 ADC、 SBC、 RSC (3-55 ページ)

ARM コードだけにある構文を追加し、 構文の追加

の項目について説明しました。

SUBS PC、 lr (3-59 ページ)

表 A-4 発行 A と発行 B の相違点 (続き)

変更点 関連する トピック

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. A-3ID 0 8 1 7 1 1 Non-Confidential

Page 400: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

『アセンブラリファレンス』 に対する改訂

ARM と Thumb での SUBS 命令の有効な形式を記述

し、 これらの命令をユーザモードまたはシステムモードで使用しないよ うにという注意を追加しました。

SUBS PC、 lr (3-59 ページ)

「ARM 命令での PC の使用」 および 「関連項目」 セ

クシ ョ ンから SUBS pc, lr へのリ ンクを追加しまし

た。

AND、 ORR、 EOR、 BIC、 ORN (3-61 ページ)

ユーザモードまたはシステムモードで PC を Rd と し

て使用する場合の S 接尾文字の使用に対する注意を

削除しました。

AND、 ORR、 EOR、 BIC、 ORN (3-61 ページ)

Rn にライ トバッ クする命令で Rn を PC にするこ とは

できないこ とを伝える 「レジスタの制約条件」 セクシ ョ ンを追加しました。

LDC、 LDC2、 STC、 STC2 (3-141 ページ)

Rt を PC にするこ とはできないこ とに言及しました。 MCR、 MCR2、 MCRR、 MCRR2 (3-135 ページ)

Rm を PC にするこ とはできないこ とに言及しました。 MSR (3-148 ページ)

「ARM 命令での PC の使用」 から SUBS pc, lr へのリ

ンクを追加しました。

MOV、 MVN (3-67 ページ)

ユーザモードまたはシステムモードで PC を Rd と し

て使用する場合の S 接尾文字の使用に対する注意を

削除しました。

MOV、 MVN (3-67 ページ)

PC を使用する非推奨の命令について言及しました。 MOV、 MVN (3-67 ページ)

SP は、 Thumb の TST および TEQ 命令で使用できず、

ARM の TST および TEQ 命令では非推奨であるこ とに

言及しました。

TST、 TEQ (3-71 ページ)

ARMv7E-M では SEL を利用できるこ とを追記しまし

た。

SEL (3-73 ページ)

ARMv6 よ り前では、MUL および MLA で Rn は Rd とは異

なる必要があるこ とを追記しました。

MUL、 MLA、 MLS (3-82 ページ)

ARMv6 よ り前では、 Rn は RdLo および RdHi とは異な

る必要があるこ とを追記しました。

UMULL、 UMLAL、 SMULL、 SMLAL (3-84 ページ)

表 A-4 発行 A と発行 B の相違点 (続き)

変更点 関連する トピック

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. A-4ID 0 8 1 7 1 1 Non-Confidential

Page 401: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

『アセンブラリファレンス』 に対する改訂

ARMv7E-M では Thumb 命令が利用できるこ とを追

記しました。

• SMULxy、 SMLAxy (3-86 ページ)

• SMULWy、 SMLAWy (3-88 ページ)

• SMLALxy (3-90 ページ)

• SMUAD{X}、 SMUSD{X} (3-92 ページ)

• SMMUL、 SMMLA、 SMMLS (3-94 ページ)

• SMLAD、 SMLSD (3-96 ページ)

• SMLALD、 SMLSLD (3-98 ページ)

• UMAAL (3-100 ページ)

• QADD、 QSUB、 QDADD、 QDSUB(3-104 ページ)

• 並列加算と並列減算 (3-109 ページ)

• USAD8、 USADA8 (3-112 ページ)

• SSAT16、 USAT16 (3-114 ページ)

• SXT、 SXTA、 UXT、 UXTA (3-119 ページ)

• PKHBT、 PKHTB (3-121 ページ)

ARM では ARMv6K 以降、 Thumb では ARMv6T2 以降で DBG を使用できるこ とに言及しました。 また、

ARMv6K および ARMv6T2 では DBG が NOP と して実

行されるこ とにも言及しました。

DBG (3-157 ページ)

VSLI および VSRI の演算に関する図 4-4 と 4-5 を追加

しました。

VSLI および VSRI (4-42 ページ)

VUZP および VZIP の演算の前後のレジスタ状態を示す

表を追加しました。

VUZP、 VZIP (4-34 ページ)

n が定義済みの再配置名でもよいこ とを追記し、 関

連する例を例のセクシ ョ ンに追加しました。

RELOC (6-10 ページ)

| を使用する場合のマクロの回避方法の注を追加し

ました。

MACRO、 MEND (6-35 ページ)

エラーの生成が、 アセンブリの第 2 パスではなくア

センブ リ時に行われるこ とを伝える メ ッセージを明確にしました。

ASSERT (6-58 ページ)

ALIAS ディ レクティブを追加し、 概要の表に含めま

した。

ALIAS (6-68 ページ)

n は任意の整数であるこ とを明確にし、 例を例のセ

クシ ョ ンに記述しました。

ALIGN (6-69 ページ)

COMGROUP および GROUP の説明を明確にしました。 AREA (6-72 ページ)

R_ARM_TARGET1 についての注を追加しました。 AREA (6-72 ページ)

表 A-4 発行 A と発行 B の相違点 (続き)

変更点 関連する トピック

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. A-5ID 0 8 1 7 1 1 Non-Confidential

Page 402: ARM コンパイラツールチェーン アセンブラリファレンスinfocenter.arm.com/help/topic/com.arm.doc.dui0489... · 2/2/2012  · 内容に関するご意見につきましては、電子メールを

『アセンブラリファレンス』 に対する改訂

「関連項目」 セクシ ョ ンに 8 バイ ト境界のスタ ッ ク

整列へのリ ンクを追加しました。

REQUIRE8、 PRESERVE8 (6-89 ページ)

--apcs オプシ ョ ンに /hardfp および /softfp 値を追加

し、 --apcs オプシ ョ ンへのリ ンクを 「コンパイラ リ

ファレンス」 に追加しました。

--apcs=qualifier…qualifier (2-5 ページ)

"Rd、 Rn、 Rm、 および Ra に PC は指定できません " で、

Rn を Rm に変更しました。

USAD8、 USADA8 (3-112 ページ)

表 A-4 発行 A と発行 B の相違点 (続き)

変更点 関連する トピック

ARM DUI 0489EJ Copyright © 2010-2011 ARM. All rights reserved. A-6ID 0 8 1 7 1 1 Non-Confidential